<?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>188690</bug_id>
          
          <creation_ts>2018-08-16 21:18:18 -0700</creation_ts>
          <short_desc>Modernize results.html</short_desc>
          <delta_ts>2018-08-24 12:56:30 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=188927</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>ap</cc>
    
    <cc>basuke</cc>
    
    <cc>dbates</cc>
    
    <cc>jbedard</cc>
    
    <cc>joepeck</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1451020</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-08-16 21:18:18 -0700</bug_when>
    <thetext>Modernize results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451022</commentid>
    <comment_count>1</comment_count>
      <attachid>347348</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-08-16 21:20:57 -0700</bug_when>
    <thetext>Created attachment 347348
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451123</commentid>
    <comment_count>2</comment_count>
      <attachid>347348</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2018-08-17 09:27:40 -0700</bug_when>
    <thetext>Comment on attachment 347348
Patch

r=me. Please confirm that the page still loads in other browsers - sometimes one&apos;s WebKit is so much under development that Safari won&apos;t launch to show the page :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451180</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-08-17 11:48:28 -0700</bug_when>
    <thetext>I tested current versions of Chrome and Firefox and both loaded the page fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451183</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-08-17 11:57:10 -0700</bug_when>
    <thetext>https://trac.webkit.org/r234993</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451184</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-08-17 11:58:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/43433940&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453536</commentid>
    <comment_count>6</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-08-24 12:36:47 -0700</bug_when>
    <thetext>Ever since this patch, WinCairo layout tests which have a failing text diff and no -expected.png show up as &quot;had no expected results (probably new)&quot;:

Before: https://build.webkit.org/results/WinCairo%2064-bit%20WKL%20Release%20(Tests)/r234991%20(1085)/results.html
After:  https://build.webkit.org/results/WinCairo%2064-bit%20WKL%20Release%20(Tests)/r234993%20(1086)/results.html

Now, this isn&apos;t a huge problem for us, as these test failures are all due to some bot image misconfiguration that we&apos;ve yet to track down and not reproable locally, and presumably as soon as we fix the bot they&apos;ll all disappear anyway, but it is still weird that the dashboard now suggests a lack of expected results when you can clearly see otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453543</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-08-24 12:49:49 -0700</bug_when>
    <thetext>Could you file a new bug for that? Thanks! I did fix some fallout recently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453547</commentid>
    <comment_count>8</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-08-24 12:56:30 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #7)
&gt; Could you file a new bug for that? Thanks! I did fix some fallout recently.

My pleasure! Submitted as bug 188927.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>347348</attachid>
            <date>2018-08-16 21:20:57 -0700</date>
            <delta_ts>2018-08-17 09:27:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188690-20180816212056.patch</filename>
            <type>text/plain</type>
            <size>100835</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0OTczCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzUwYzlmOTQ5N2QyMzU2ODcyYjY4
ZDE1NmE3ZDFlYzI0YTczNDBlYS4uODFmMzZmZDMxNzcyZmNhOTQ0NmQ1MWYxYWUyNTIyYjE3MDE5
MGJmMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE4LTA4LTE2ICBTaW1vbiBGcmFzZXIgIDxz
aW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybml6ZSByZXN1bHRzLmh0bWwK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODY5MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
cmVzdWx0cy5odG1sLCB3aGljaCBpcyB1c2VkIHRvIHNob3cgbGF5b3V0IHRlc3QgcmVzdWx0cywg
aGFkIHNvbWUgdmVyeSBvbGQtc2Nob29sCisgICAgICAgIEhUTUwgc3RyaW5nIGJ1aWxkaW5nIHRv
IGNyZWF0ZSB0aGUgdGFibGVzIG9mIHRlc3QgcmVzdWx0cywgbWFraW5nIGl0IGhhcmQgdG8gaGFj
ayBvbi4KKyAgICAgICAgCisgICAgICAgIE1vZGVybml6ZSBpdCwgdXNpbmcgRVM2IGNsYXNzZXMg
Zm9yIHRoZSBtYWpvciBhY3RvcnMsIGFuZCB1c2luZyBET00gQVBJIHRvIGJ1aWxkIG1vc3QKKyAg
ICAgICAgb2YgdGhlIGNvbnRlbnQuCisgICAgICAgIAorICAgICAgICBUaGUgcGFnZSBpcyBmdW5j
dGlvbmFsbHkgdGhlIHNhbWUgKG90aGVyIHRoYW4gdGhlIGFkZGl0aW9uIG9mIGEgbWlzc2luZyAn
SGlzdG9yeSIgY29sdW1uIGhlYWRlcikuCisKKyAgICAgICAgKiBmYXN0L2hhcm5lc3MvcmVzdWx0
cy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9oYXJuZXNzL3Jlc3VsdHMuaHRtbDoKKwog
MjAxOC0wOC0xNiAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29ueS5jb20+CiAKICAg
ICAgICAgW0N1cmxdIEJ1ZyBmaXggb24gZGVsZXRpbmcgY29va2llcyB3aGVuIE1heC1BZ2UgaXMg
c2V0IHRvIHplcm8uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hhcm5lc3MvcmVzdWx0
cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2hhcm5lc3MvcmVzdWx0cy1leHBlY3Rl
ZC50eHQKaW5kZXggNmFmNzFkYTZmMGNlZDk0ZmVlOGYyOTg2Nzc0ZTlkOTJmYWRmMzNjZC4uNzk4
MDY2NDQzNTA2YzY5MjgxNzJiZmJkMmJlNDY0YTQ0ZDUzZmU1MCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvZmFzdC9oYXJuZXNzL3Jlc3VsdHMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvaGFybmVzcy9yZXN1bHRzLWV4cGVjdGVkLnR4dApAQCAtNSw3ICs1LDcgQEAgVXNlIG5l
d2xpbmVzIGluIGZsYWdnZWQgbGlzdAogVGVzdHMgdGhhdCBjcmFzaGVkICgxKTogZmxhZyBhbGwK
IAogK2h0dHAvdGVzdHMvY29udGVudGV4dGVuc2lvbnMvdG9wLXVybC5odG1sCWNyYXNoIGxvZyBz
YW1wbGUJaGlzdG9yeQotT3RoZXIgQ3Jhc2hlcyAoMik6IGZsYWcgYWxsCitPdGhlciBjcmFzaGVz
ICgyKTogZmxhZyBhbGwKIAogK0R1bXBSZW5kZXJUcmVlLTU0ODg4CWNyYXNoIGxvZwogK0R1bXBS
ZW5kZXJUcmVlLTU2ODA0CWNyYXNoIGxvZwpAQCAtMzEsNyArMzEsNyBAQCB0ZXN0CXJlc3VsdHMJ
aW1hZ2UgcmVzdWx0cwlhY3R1YWwgZmFpbHVyZQlleHBlY3RlZCBmYWlsdXJlCWhpc3RvcnkJZmFp
bHVyZXMKICttZWRpYS92aWRlby1sb29wLmh0bWwJZXhwZWN0ZWQgYWN0dWFsIGRpZmYgcHJldHR5
IGRpZmYJCXRleHQgcGFzcyB0aW1lb3V0CXBhc3MgdGltZW91dAloaXN0b3J5CiBUZXN0cyBleHBl
Y3RlZCB0byBmYWlsIGJ1dCBwYXNzZWQgKDQpOiBmbGFnIGFsbAogCi10ZXN0CWV4cGVjdGVkIGZh
aWx1cmUKK3Rlc3QJZXhwZWN0ZWQgZmFpbHVyZQloaXN0b3J5CiBjYW52YXMvcGhpbGlwL3Rlc3Rz
LzJkLmdyYWRpZW50LmludGVycG9sYXRlLnNvbGlkLmh0bWwJZmFpbAloaXN0b3J5CiBlZGl0aW5n
L3NwZWxsaW5nL3NwZWxsaW5nLW1hcmtlci1pbmNsdWRlcy1oeXBoZW4uaHRtbAlpbWFnZQloaXN0
b3J5CiBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLW1hcmtlcnMtaW4tb3ZlcmxhcHBpbmctbGlu
ZXMuaHRtbAlpbWFnZQloaXN0b3J5CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hhcm5l
c3MvcmVzdWx0cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9oYXJuZXNzL3Jlc3VsdHMuaHRtbApp
bmRleCAxMDc3YmQwY2ExMjdkOGNlOTIxZjY1NTRkOTcyNzNiNDgzNmRmYTQwLi40YTUxNDA2OWI4
YTM0NDllNTI1ZjA2NTk3NGQwMTZiN2RhZmQzMzc3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9m
YXN0L2hhcm5lc3MvcmVzdWx0cy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaGFybmVzcy9y
ZXN1bHRzLmh0bWwKQEAgLTIwLDYgKzIwLDEyIEBAIHAgewogICAgIG1hcmdpbi1ib3R0b206IDAu
M2VtOwogfQogCithLmNsaWNrYWJsZSB7CisgICAgY29sb3I6IGJsdWU7CisgICAgY3Vyc29yOiBw
b2ludGVyOworICAgIG1hcmdpbi1sZWZ0OiAwLjJlbTsKK30KKwogdHI6bm90KC5yZXN1bHRzLXJv
dykgdGQgewogICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiB9CkBAIC0zMiw3ICszOCw3IEBAIHRk
Om5vdCg6Zmlyc3Qtb2YtdHlwZSkgewogICAgIHRleHQtdHJhbnNmb3JtOiBsb3dlcmNhc2U7CiB9
CiAKLXRkIHsKK3RoLCB0ZCB7CiAgICAgcGFkZGluZzogMXB4IDRweDsKIH0KIApAQCAtNzUsNyAr
ODEsNyBAQCB0aCB7CiB9CiAKIC5mbG9hdGluZy1wYW5lbCB7Ci0gICAgcGFkZGluZzogNHB4Owor
ICAgIHBhZGRpbmc6IDZweDsKICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAy
NTUsIDAuOSk7CiAgICAgYm9yZGVyOiAxcHggc29saWQgc2lsdmVyOwogICAgIGJvcmRlci1yYWRp
dXM6IDRweDsKQEAgLTEzNywxMSArMTQzLDEyIEBAIHRib2R5LmZsYWdnZWQgLmZsYWcgewogfQog
CiAjb3B0aW9ucy1tZW51IHsKLSAgICBib3JkZXI6IDFweCBzb2xpZDsKKyAgICBib3JkZXI6IDFw
eCBzb2xpZCBncmF5OworICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICBtYXJnaW4tdG9wOiAx
cHg7CiAgICAgcGFkZGluZzogMnB4IDRweDsKLSAgICBib3gtc2hhZG93OiAycHggMnB4IDJweCAj
ODg4OwotICAgIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAuMnM7CisgICAgYm94LXNoYWRv
dzogMnB4IDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjYpOworICAgIHRyYW5zaXRpb246IG9wYWNp
dHkgLjJzOwogICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgcG9zaXRpb246IGFic29sdXRlOwog
ICAgIHJpZ2h0OiA0cHg7CkBAIC0yMjksMTMwMSArMjM2LDE2NzQgQEAgdGJvZHkuZmxhZ2dlZCAu
ZmxhZyB7CiBpZiAod2luZG93LnRlc3RSdW5uZXIpCiAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0
KCk7CiAKLXZhciBnX3N0YXRlOwotZnVuY3Rpb24gZ2xvYmFsU3RhdGUoKQorY2xhc3MgVXRpbHMK
IHsKLSAgICBpZiAoIWdfc3RhdGUpIHsKLSAgICAgICAgZ19zdGF0ZSA9IHsKLSAgICAgICAgICAg
IGNyYXNoVGVzdHM6IFtdLAotICAgICAgICAgICAgY3Jhc2hPdGhlcjogW10sCi0gICAgICAgICAg
ICBmbGFreVBhc3NUZXN0czogW10sCi0gICAgICAgICAgICBoYXNIdHRwVGVzdHM6IGZhbHNlLAot
ICAgICAgICAgICAgaGFzSW1hZ2VGYWlsdXJlczogZmFsc2UsCi0gICAgICAgICAgICBoYXNUZXh0
RmFpbHVyZXM6IGZhbHNlLAotICAgICAgICAgICAgbWlzc2luZ1Jlc3VsdHM6IFtdLAotICAgICAg
ICAgICAgcmVzdWx0czoge30sCi0gICAgICAgICAgICBzaG91bGRUb2dnbGVJbWFnZXM6IHRydWUs
Ci0gICAgICAgICAgICBmYWlsaW5nVGVzdHM6IFtdLAotICAgICAgICAgICAgdGVzdHNXaXRoU3Rk
ZXJyOiBbXSwKLSAgICAgICAgICAgIHRpbWVvdXRUZXN0czogW10sCi0gICAgICAgICAgICB1bmV4
cGVjdGVkUGFzc1Rlc3RzOiBbXQorICAgIHN0YXRpYyBtYXRjaGVzU2VsZWN0b3Iobm9kZSwgc2Vs
ZWN0b3IpCisgICAgeworICAgICAgICBpZiAobm9kZS5tYXRjaGVzKQorICAgICAgICAgICAgcmV0
dXJuIG5vZGUubWF0Y2hlcyhzZWxlY3Rvcik7CisKKyAgICAgICAgaWYgKG5vZGUud2Via2l0TWF0
Y2hlc1NlbGVjdG9yKQorICAgICAgICAgICAgcmV0dXJuIG5vZGUud2Via2l0TWF0Y2hlc1NlbGVj
dG9yKHNlbGVjdG9yKTsKKworICAgICAgICBpZiAobm9kZS5tb3pNYXRjaGVzU2VsZWN0b3IpCisg
ICAgICAgICAgICByZXR1cm4gbm9kZS5tb3pNYXRjaGVzU2VsZWN0b3Ioc2VsZWN0b3IpOworICAg
IH0KKworICAgIHN0YXRpYyBwYXJlbnRPZlR5cGUobm9kZSwgc2VsZWN0b3IpCisgICAgeworICAg
ICAgICB3aGlsZSAobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkgeworICAgICAgICAgICAgaWYgKFV0
aWxzLm1hdGNoZXNTZWxlY3Rvcihub2RlLCBzZWxlY3RvcikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGU7CiAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIHJl
dHVybiBnX3N0YXRlOwotfQogCi1mdW5jdGlvbiBBRERfUkVTVUxUUyhpbnB1dCkKLXsKLSAgICBn
bG9iYWxTdGF0ZSgpLnJlc3VsdHMgPSBpbnB1dDsKLX0KLTwvc2NyaXB0PgorICAgIHN0YXRpYyBz
dHJpcEV4dGVuc2lvbih0ZXN0TmFtZSkKKyAgICB7CisgICAgICAgIC8vIFRlbXBvcmFyeSBmaXgs
IGFsc28gaW4gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29uc3Ryb2xsZXJz
L3Rlc3RfcmVzdWx0X3dyaXRlci5weSwgbGluZSA5NS4KKyAgICAgICAgLy8gRklYTUU6IFJlZmFj
dG9yIHRvIGF2b2lkIGNvbmZ1c2luZyByZWZlcmVuY2UgdG8gYm90aCB0ZXN0IGFuZCBwcm9jZXNz
IG5hbWVzLgorICAgICAgICBpZiAoVXRpbHMuc3BsaXRFeHRlbnNpb24odGVzdE5hbWUpWzFdLmxl
bmd0aCA+IDUpCisgICAgICAgICAgICByZXR1cm4gdGVzdE5hbWU7CisgICAgICAgIHJldHVybiBV
dGlscy5zcGxpdEV4dGVuc2lvbih0ZXN0TmFtZSlbMF07CisgICAgfQogCi08c2NyaXB0IHNyYz0i
ZnVsbF9yZXN1bHRzLmpzb24iPjwvc2NyaXB0PgorICAgIHN0YXRpYyBzcGxpdEV4dGVuc2lvbih0
ZXN0TmFtZSkKKyAgICB7CisgICAgICAgIGxldCBpbmRleCA9IHRlc3ROYW1lLmxhc3RJbmRleE9m
KCcuJyk7CisgICAgICAgIGlmIChpbmRleCA9PSAtMSkgeworICAgICAgICAgICAgcmV0dXJuIFt0
ZXN0TmFtZSwgJyddOworICAgICAgICB9CisgICAgICAgIHJldHVybiBbdGVzdE5hbWUuc3Vic3Ry
aW5nKDAsIGluZGV4KSwgdGVzdE5hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSldOworICAgIH0KIAot
PHNjcmlwdD4KLWZ1bmN0aW9uIHNwbGl0RXh0ZW5zaW9uKHRlc3QpCi17Ci0gICAgdmFyIGluZGV4
ID0gdGVzdC5sYXN0SW5kZXhPZignLicpOwotICAgIGlmIChpbmRleCA9PSAtMSkgewotICAgICAg
ICByZXR1cm4gW3Rlc3QsICIiXTsKKyAgICBzdGF0aWMgZm9yRWFjaChub2RlTGlzdCwgaGFuZGxl
cikKKyAgICB7CisgICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwobm9kZUxpc3Qs
IGhhbmRsZXIpOwogICAgIH0KLSAgICByZXR1cm4gW3Rlc3Quc3Vic3RyaW5nKDAsIGluZGV4KSwg
dGVzdC5zdWJzdHJpbmcoaW5kZXggKyAxKV07Ci19CiAKLWZ1bmN0aW9uIHN0cmlwRXh0ZW5zaW9u
KHRlc3QpCi17Ci0gICAgLy8gVGVtcG9yYXJ5IGZpeCwgYWxzbyBpbiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9jb25zdHJvbGxlcnMvdGVzdF9yZXN1bHRfd3JpdGVyLnB5LCBs
aW5lIDk1LgotICAgIC8vIEZJWE1FOiBSZWZhY3RvciB0byBhdm9pZCBjb25mdXNpbmcgcmVmZXJl
bmNlIHRvIGJvdGggdGVzdCBhbmQgcHJvY2VzcyBuYW1lcy4KLSAgICBpZiAoc3BsaXRFeHRlbnNp
b24odGVzdClbMV0ubGVuZ3RoID4gNSkKLSAgICAgICAgcmV0dXJuIHRlc3Q7Ci0gICAgcmV0dXJu
IHNwbGl0RXh0ZW5zaW9uKHRlc3QpWzBdOwotfQorICAgIHN0YXRpYyB0b0FycmF5KG5vZGVMaXN0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG5vZGVM
aXN0KTsKKyAgICB9CiAKLWZ1bmN0aW9uIG1hdGNoZXNTZWxlY3Rvcihub2RlLCBzZWxlY3RvcikK
LXsKLSAgICBpZiAobm9kZS5tYXRjaGVzKQotICAgICAgICByZXR1cm4gbm9kZS5tYXRjaGVzKHNl
bGVjdG9yKTsKKyAgICBzdGF0aWMgdHJpbShzdHJpbmcpCisgICAgeworICAgICAgICByZXR1cm4g
c3RyaW5nLnJlcGxhY2UoL15bXHNceGEwXSt8W1xzXHhhMF0rJC9nLCAnJyk7CisgICAgfQogCi0g
ICAgaWYgKG5vZGUud2Via2l0TWF0Y2hlc1NlbGVjdG9yKQotICAgICAgICByZXR1cm4gbm9kZS53
ZWJraXRNYXRjaGVzU2VsZWN0b3Ioc2VsZWN0b3IpOworICAgIHN0YXRpYyBhc3luYyhmdW5jLCBh
cmdzKQorICAgIHsKKyAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IGZ1bmMuYXBwbHkobnVsbCwg
YXJncyk7IH0sIDUwKTsKKyAgICB9CiAKLSAgICBpZiAobm9kZS5tb3pNYXRjaGVzU2VsZWN0b3Ip
Ci0gICAgICAgIHJldHVybiBub2RlLm1vek1hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7Ci19Cisg
ICAgc3RhdGljIGFwcGVuZEhUTUwobm9kZSwgaHRtbCkKKyAgICB7CisgICAgICAgIGlmIChub2Rl
Lmluc2VydEFkamFjZW50SFRNTCkKKyAgICAgICAgICAgIG5vZGUuaW5zZXJ0QWRqYWNlbnRIVE1M
KCdiZWZvcmVFbmQnLCBodG1sKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbm9kZS5pbm5l
ckhUTUwgKz0gaHRtbDsKKyAgICB9fTsKIAotZnVuY3Rpb24gcGFyZW50T2ZUeXBlKG5vZGUsIHNl
bGVjdG9yKQorY2xhc3MgVGVzdFJlc3VsdAogewotICAgIHdoaWxlIChub2RlID0gbm9kZS5wYXJl
bnROb2RlKSB7Ci0gICAgICAgIGlmIChtYXRjaGVzU2VsZWN0b3Iobm9kZSwgc2VsZWN0b3IpKQot
ICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgY29uc3RydWN0b3IoaW5mbywgbmFtZSkKKyAg
ICB7CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgICAgIHRoaXMuaW5mbyA9IGluZm87
IC8vIEZJWE1FOiBtYWtlIHRoaXMgcHJpdmF0ZS4KICAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci19
CiAKLWZ1bmN0aW9uIHJlbW92ZShub2RlKQotewotICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVD
aGlsZChub2RlKTsKLX0KKyAgICBpc0ZhaWx1cmVFeHBlY3RlZCgpCisgICAgeworICAgICAgICBs
ZXQgYWN0dWFsID0gdGhpcy5pbmZvLmFjdHVhbDsgICAgCisgICAgICAgIGxldCBleHBlY3RlZCA9
IHRoaXMuaW5mby5leHBlY3RlZCB8fCAnUEFTUyc7CisKKyAgICAgICAgaWYgKGFjdHVhbCAhPSAn
U0tJUCcpIHsKKyAgICAgICAgICAgIGxldCBleHBlY3RlZEFycmF5ID0gZXhwZWN0ZWQuc3BsaXQo
JyAnKTsKKyAgICAgICAgICAgIGxldCBhY3R1YWxBcnJheSA9IGFjdHVhbC5zcGxpdCgnICcpOwor
ICAgICAgICAgICAgZm9yIChsZXQgYWN0dWFsVmFsdWUgb2YgYWN0dWFsQXJyYXkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoZXhwZWN0ZWRBcnJheS5pbmRleE9mKGFjdHVhbFZhbHVlKSA9PSAtMSAm
JiAoZXhwZWN0ZWRBcnJheS5pbmRleE9mKCdGQUlMJykgPT0gLTEgfHwgKGFjdHVhbFZhbHVlICE9
ICdURVhUJyAmJiBhY3R1YWxWYWx1ZSAhPSAnSU1BR0UrVEVYVCcgJiYgYWN0dWFsVmFsdWUgIT0g
J0FVRElPJykpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlz
TWlzc2luZygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5pbmZvLmFjdHVhbC5pbmRleE9m
KCdNSVNTSU5HJykgIT0gLTE7CisgICAgfQorICAgIAorICAgIGlzRmxha2V5KHBpeGVsVGVzdHNF
bmFibGVkKQorICAgIHsKKyAgICAgICAgbGV0IGFjdHVhbFRva2VucyA9IHRoaXMuaW5mby5hY3R1
YWwuc3BsaXQoJyAnKTsKKyAgICAgICAgbGV0IHBhc3NlZFdpdGhJbWFnZU9ubHlGYWlsdXJlSW5S
ZXRyeSA9IGFjdHVhbFRva2Vuc1swXSA9PSAnVEVYVCcgJiYgYWN0dWFsVG9rZW5zWzFdID09ICdJ
TUFHRSc7CisgICAgICAgIGlmIChhY3R1YWxUb2tlbnNbMV0gJiYgdGhpcy5pbmZvLmFjdHVhbC5p
bmRleE9mKCdQQVNTJykgIT0gLTEgfHwgKCFwaXhlbFRlc3RzRW5hYmxlZCAmJiBwYXNzZWRXaXRo
SW1hZ2VPbmx5RmFpbHVyZUluUmV0cnkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlzUGFzcygpCisg
ICAgeworICAgICAgICByZXR1cm4gdGhpcy5pbmZvLmFjdHVhbCA9PSAnUEFTUyc7CisgICAgfQog
Ci1mdW5jdGlvbiBmb3JFYWNoKG5vZGVMaXN0LCBoYW5kbGVyKQotewotICAgIEFycmF5LnByb3Rv
dHlwZS5mb3JFYWNoLmNhbGwobm9kZUxpc3QsIGhhbmRsZXIpOwotfQorICAgIGlzVGV4dEZhaWx1
cmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuaW5mby5hY3R1YWwuaW5kZXhPZignVEVY
VCcpICE9IC0xOworICAgIH0KIAotZnVuY3Rpb24gcmVzdWx0SWZyYW1lKHNyYykKLXsKLSAgICAv
LyBGSVhNRTogdXNlIGF1ZGlvIHRhZ3MgZm9yIEFVRElPIHRlc3RzPwotICAgIHZhciBsYXlvdXRU
ZXN0c0luZGV4ID0gc3JjLmluZGV4T2YoJ0xheW91dFRlc3RzJyk7Ci0gICAgdmFyIG5hbWU7Ci0g
ICAgaWYgKGxheW91dFRlc3RzSW5kZXggIT0gLTEpIHsKLSAgICAgICAgdmFyIGhhc1RyYWMgPSBz
cmMuaW5kZXhPZigndHJhYy53ZWJraXQub3JnJykgIT0gLTE7Ci0gICAgICAgIHZhciBwcmVmaXgg
PSBoYXNUcmFjID8gJ3RyYWMud2Via2l0Lm9yZy8uLi4vJyA6ICcnOwotICAgICAgICBuYW1lID0g
cHJlZml4ICsgc3JjLnN1YnN0cmluZyhsYXlvdXRUZXN0c0luZGV4ICsgJ0xheW91dFRlc3RzLycu
bGVuZ3RoKTsKLSAgICB9IGVsc2UgewotICAgICAgICB2YXIgbGFzdERhc2hJbmRleCA9IHNyYy5s
YXN0SW5kZXhPZignLXByZXR0eScpOwotICAgICAgICBpZiAobGFzdERhc2hJbmRleCA9PSAtMSkK
LSAgICAgICAgICAgIGxhc3REYXNoSW5kZXggPSBzcmMubGFzdEluZGV4T2YoJy0nKTsKLSAgICAg
ICAgbmFtZSA9IHNyYy5zdWJzdHJpbmcobGFzdERhc2hJbmRleCArIDEpOwotICAgIH0KLQotICAg
IHZhciB0YWdOYW1lID0gKHNyYy5sYXN0SW5kZXhPZignLnBuZycpID09IC0xKSA/ICdpZnJhbWUn
IDogJ2ltZyc7Ci0KLSAgICBpZiAodGFnTmFtZSAhPSAnaW1nJykKLSAgICAgICAgc3JjICs9ICc/
Zm9ybWF0PXR4dCc7Ci0gICAgcmV0dXJuICc8ZGl2IGNsYXNzPXJlc3VsdC1jb250YWluZXI+PGRp
diBjbGFzcz1sYWJlbD4nICsgbmFtZSArICc8L2Rpdj48JyArIHRhZ05hbWUgKyAnIHNyYz0iJyAr
IHNyYyArICciPjwvJyArIHRhZ05hbWUgKyAnPjwvZGl2Pic7Ci19CisgICAgaXNJbWFnZUZhaWx1
cmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuaW5mby5hY3R1YWwuaW5kZXhPZignSU1B
R0UnKSAhPSAtMTsKKyAgICB9CiAKLWZ1bmN0aW9uIHRvZ2dsaW5nSW1hZ2UocHJlZml4KQotewot
ICAgIHJldHVybiAnPGRpdiBjbGFzcz1yZXN1bHQtY29udGFpbmVyPjxkaXYgY2xhc3M9ImxhYmVs
IGltYWdlVGV4dCI+PC9kaXY+PGltZyBjbGFzcz1hbmltYXRlZEltYWdlIGRhdGEtcHJlZml4PSIn
ICsKLSAgICAgICAgcHJlZml4ICsgJyI+PC9pbWc+PC9kaXY+JzsKLX0KKyAgICBpc0F1ZGlvRmFp
bHVyZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5pbmZvLmFjdHVhbC5pbmRleE9mKCdB
VURJTycpICE9IC0xOworICAgIH0KIAotZnVuY3Rpb24gdG9nZ2xlRXhwZWN0YXRpb25zKGVsZW1l
bnQpCi17Ci0gICAgdmFyIGV4cGFuZExpbmsgPSBlbGVtZW50OwotICAgIGlmIChleHBhbmRMaW5r
LmNsYXNzTmFtZSAhPSAnZXhwYW5kLWJ1dHRvbi10ZXh0JykKLSAgICAgICAgZXhwYW5kTGluayA9
IGV4cGFuZExpbmsucXVlcnlTZWxlY3RvcignLmV4cGFuZC1idXR0b24tdGV4dCcpOwotCi0gICAg
aWYgKGV4cGFuZExpbmsudGV4dENvbnRlbnQgPT0gJysnKQotICAgICAgICBleHBhbmRFeHBlY3Rh
dGlvbnMoZXhwYW5kTGluayk7Ci0gICAgZWxzZQotICAgICAgICBjb2xsYXBzZUV4cGVjdGF0aW9u
cyhleHBhbmRMaW5rKTsKLX0KKyAgICBpc0NyYXNoKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0
aGlzLmluZm8uYWN0dWFsID09ICdDUkFTSCc7CisgICAgfQorICAgIAorICAgIGlzVGltZW91dCgp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5pbmZvLmFjdHVhbCA9PSAnVElNRU9VVCc7Cisg
ICAgfQorICAgIAorICAgIGlzVW5leHBlY3RlZFBhc3MocGl4ZWxUZXN0c0VuYWJsZWQpCisgICAg
eworICAgICAgICBpZiAodGhpcy5pbmZvLmFjdHVhbCA9PSAnUEFTUycgJiYgdGhpcy5pbmZvLmV4
cGVjdGVkICE9ICdQQVNTJykgeworICAgICAgICAgICAgaWYgKHRoaXMuaW5mby5leHBlY3RlZCAh
PSAnSU1BR0UnIHx8IChwaXhlbFRlc3RzRW5hYmxlZCB8fCB0aGlzLmlzUmVmVGVzdCgpKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpc1JlZlRlc3QoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuICEhdGhpcy5pbmZvLnJlZnRlc3RfdHlwZTsKKyAgICB9CiAKLWZ1bmN0aW9uIGNv
bGxhcHNlRXhwZWN0YXRpb25zKGV4cGFuZExpbmspCi17Ci0gICAgZXhwYW5kTGluay50ZXh0Q29u
dGVudCA9ICcrJzsKLSAgICB2YXIgZXhpc3RpbmdSZXN1bHRzUm93ID0gcGFyZW50T2ZUeXBlKGV4
cGFuZExpbmssICd0Ym9keScpLnF1ZXJ5U2VsZWN0b3IoJy5yZXN1bHRzLXJvdycpOwotICAgIGlm
IChleGlzdGluZ1Jlc3VsdHNSb3cpCi0gICAgICAgIHVwZGF0ZUV4cGFuZGVkU3RhdGUoZXhpc3Rp
bmdSZXN1bHRzUm93LCBmYWxzZSk7Ci19CisgICAgaXNNaXNtYXRjaFJlZlRlc3QoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuaXNSZWZUZXN0KCkgJiYgdGhpcy5pbmZvLnJlZnRlc3RfdHlw
ZS5pbmRleE9mKCchPScpICE9IC0xOworICAgIH0KIAotZnVuY3Rpb24gdXBkYXRlRXhwYW5kZWRT
dGF0ZShyb3csIGlzRXhwYW5kZWQpCi17Ci0gICAgcm93LnNldEF0dHJpYnV0ZSgnZGF0YS1leHBh
bmRlZCcsIGlzRXhwYW5kZWQpOwotICAgIHVwZGF0ZUltYWdlVG9nZ2xpbmdUaW1lcigpOwotfQor
ICAgIGlzTWF0Y2hSZWZUZXN0KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLmlzUmVmVGVz
dCgpICYmIHRoaXMuaW5mby5yZWZ0ZXN0X3R5cGUuaW5kZXhPZignPT0nKSAhPSAtMTsKKyAgICB9
CisgICAgCisgICAgaXNNaXNzaW5nSW1hZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
aW5mby5pc19taXNzaW5nX2ltYWdlOworICAgIH0KKyAgICAKKyAgICBoYXNTdGRFcnIoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuaW5mby5oYXNfc3RkZXJyOworICAgIH0KK307CiAKLWZ1
bmN0aW9uIGFwcGVuZEhUTUwobm9kZSwgaHRtbCkKK2NsYXNzIFRlc3RSZXN1bHRzCiB7Ci0gICAg
aWYgKG5vZGUuaW5zZXJ0QWRqYWNlbnRIVE1MKQotICAgICAgICBub2RlLmluc2VydEFkamFjZW50
SFRNTCgnYmVmb3JlRW5kJywgaHRtbCk7Ci0gICAgZWxzZQotICAgICAgICBub2RlLmlubmVySFRN
TCArPSBodG1sOwotfQorICAgIGNvbnN0cnVjdG9yKHJlc3VsdHMpCisgICAgeworICAgICAgICB0
aGlzLl9yZXN1bHRzID0gcmVzdWx0czsKIAotZnVuY3Rpb24gZXhwYW5kRXhwZWN0YXRpb25zKGV4
cGFuZExpbmspCi17Ci0gICAgdmFyIHJvdyA9IHBhcmVudE9mVHlwZShleHBhbmRMaW5rLCAndHIn
KTsKLSAgICB2YXIgcGFyZW50VGJvZHkgPSByb3cucGFyZW50Tm9kZTsKLSAgICB2YXIgZXhpc3Rp
bmdSZXN1bHRzUm93ID0gcGFyZW50VGJvZHkucXVlcnlTZWxlY3RvcignLnJlc3VsdHMtcm93Jyk7
Ci0gICAgCi0gICAgdmFyIGVuRGFzaCA9ICdcdTIwMTMnOwotICAgIGV4cGFuZExpbmsudGV4dENv
bnRlbnQgPSBlbkRhc2g7Ci0gICAgaWYgKGV4aXN0aW5nUmVzdWx0c1JvdykgewotICAgICAgICB1
cGRhdGVFeHBhbmRlZFN0YXRlKGV4aXN0aW5nUmVzdWx0c1JvdywgdHJ1ZSk7Ci0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgdGhpcy5jcmFzaFRlc3RzID0gW107CisgICAgICAgIHRoaXMuY3Jhc2hP
dGhlciA9IFtdOworICAgICAgICB0aGlzLm1pc3NpbmdSZXN1bHRzID0gW107CisgICAgICAgIHRo
aXMuZmFpbGluZ1Rlc3RzID0gW107CisgICAgICAgIHRoaXMudGVzdHNXaXRoU3RkZXJyID0gW107
CisgICAgICAgIHRoaXMudGltZW91dFRlc3RzID0gW107CisgICAgICAgIHRoaXMudW5leHBlY3Rl
ZFBhc3NUZXN0cyA9IFtdOworICAgICAgICB0aGlzLmZsYWt5UGFzc1Rlc3RzID0gW107CisKKyAg
ICAgICAgdGhpcy5oYXNIdHRwVGVzdHMgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5oYXNJbWFnZUZh
aWx1cmVzID0gZmFsc2U7CisgICAgICAgIHRoaXMuaGFzVGV4dEZhaWx1cmVzID0gZmFsc2U7CisK
KyAgICAgICAgdGhpcy5fZm9yRWFjaFRlc3QodGhpcy5fcmVzdWx0cy50ZXN0cywgJycpOworICAg
ICAgICB0aGlzLl9mb3JPdGhlckNyYXNoZXModGhpcy5fcmVzdWx0cy5vdGhlcl9jcmFzaGVzKTsK
ICAgICB9CiAgICAgCi0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3Ry
Jyk7Ci0gICAgbmV3Um93LmNsYXNzTmFtZSA9ICdyZXN1bHRzLXJvdyc7Ci0gICAgdmFyIG5ld0Nl
bGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwotICAgIG5ld0NlbGwuY29sU3BhbiA9
IHJvdy5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpLmxlbmd0aDsKLQotICAgIHZhciByZXN1bHRMaW5r
cyA9IHJvdy5xdWVyeVNlbGVjdG9yQWxsKCcucmVzdWx0LWxpbmsnKTsKLSAgICB2YXIgaGFzVG9n
Z2xpbmdJbWFnZXMgPSBmYWxzZTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdExpbmtz
Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHZhciBsaW5rID0gcmVzdWx0TGlua3NbaV07Ci0gICAg
ICAgIHZhciByZXN1bHQ7Ci0gICAgICAgIGlmIChsaW5rLnRleHRDb250ZW50ID09ICdpbWFnZXMn
KSB7Ci0gICAgICAgICAgICBoYXNUb2dnbGluZ0ltYWdlcyA9IHRydWU7Ci0gICAgICAgICAgICBy
ZXN1bHQgPSB0b2dnbGluZ0ltYWdlKGxpbmsuZ2V0QXR0cmlidXRlKCdkYXRhLXByZWZpeCcpKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSByZXN1bHRJZnJhbWUobGluay5o
cmVmKTsKKyAgICBkYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9yZXN1bHRzLmRh
dGU7CisgICAgfQogCi0gICAgICAgIGFwcGVuZEhUTUwobmV3Q2VsbCwgcmVzdWx0KTsgICAgCisg
ICAgbGF5b3V0VGVzdHNEaXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3VsdHMu
bGF5b3V0X3Rlc3RzX2RpcjsKKyAgICB9CisgICAgCisgICAgdXNlc0V4cGVjdGF0aW9uc0ZpbGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3VsdHMudXNlc19leHBlY3RhdGlvbnNf
ZmlsZTsKKyAgICB9CisgICAgCisgICAgcmVzdWx0Rm9yVGVzdCh0ZXN0TmFtZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0aGlzLl9yZXN1bHRzQnlUZXN0W3Rlc3ROYW1lXTsKKyAgICB9CisgICAg
CisgICAgd2FzSW50ZXJydXB0ZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3Vs
dHMuaW50ZXJydXB0ZWQ7CiAgICAgfQogCi0gICAgbmV3Um93LmFwcGVuZENoaWxkKG5ld0NlbGwp
OwotICAgIHBhcmVudFRib2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7CisgICAgaGFzUHJldHR5UGF0
Y2goKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3VsdHMuaGFzX3ByZXR0eV9wYXRj
aDsKKyAgICB9CisgICAgCisgICAgaGFzV0RpZmYoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX3Jlc3VsdHMuaGFzX3dkaWZmOworICAgIH0KIAotICAgIHVwZGF0ZUV4cGFuZGVkU3RhdGUo
bmV3Um93LCB0cnVlKTsKKyAgICBfcHJvY2Vzc1Jlc3VsdEZvclRlc3QodGVzdFJlc3VsdCkKKyAg
ICB7CisgICAgICAgIGxldCB0ZXN0ID0gdGVzdFJlc3VsdC5uYW1lOworICAgICAgICBpZiAodGVz
dFJlc3VsdC5oYXNTdGRFcnIoKSkKKyAgICAgICAgICAgIHRoaXMudGVzdHNXaXRoU3RkZXJyLnB1
c2godGVzdFJlc3VsdCk7CiAKLSAgICB1cGRhdGVJbWFnZVRvZ2dsaW5nVGltZXIoKTsKLX0KKyAg
ICAgICAgdGhpcy5oYXNIdHRwVGVzdHMgfD0gdGVzdC5pbmRleE9mKCdodHRwLycpID09IDA7CiAK
LWZ1bmN0aW9uIHVwZGF0ZUltYWdlVG9nZ2xpbmdUaW1lcigpCi17Ci0gICAgdmFyIGhhc1Zpc2li
bGVBbmltYXRlZEltYWdlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnJlc3VsdHMtcm93W2Rh
dGEtZXhwYW5kZWQ9InRydWUiXSAuYW5pbWF0ZWRJbWFnZScpOwotICAgIGlmICghaGFzVmlzaWJs
ZUFuaW1hdGVkSW1hZ2UpIHsKLSAgICAgICAgY2xlYXJJbnRlcnZhbChnbG9iYWxTdGF0ZSgpLnRv
Z2dsaW5nSW1hZ2VJbnRlcnZhbCk7Ci0gICAgICAgIGdsb2JhbFN0YXRlKCkudG9nZ2xpbmdJbWFn
ZUludGVydmFsID0gbnVsbDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAgICAgaWYgKHRo
aXMudXNlc0V4cGVjdGF0aW9uc0ZpbGUoKSkKKyAgICAgICAgICAgIHRlc3RSZXN1bHQuaXNFeHBl
Y3RlZCA9IHRlc3RSZXN1bHQuaXNGYWlsdXJlRXhwZWN0ZWQoKTsKKyAgICAgICAgCisgICAgICAg
IGlmICh0ZXN0UmVzdWx0LmlzVGV4dEZhaWx1cmUoKSkKKyAgICAgICAgICAgIHRoaXMuaGFzVGV4
dEZhaWx1cmVzID0gdHJ1ZTsKIAotICAgIGlmICghZ2xvYmFsU3RhdGUoKS50b2dnbGluZ0ltYWdl
SW50ZXJ2YWwpIHsKLSAgICAgICAgdG9nZ2xlSW1hZ2VzKCk7Ci0gICAgICAgIGdsb2JhbFN0YXRl
KCkudG9nZ2xpbmdJbWFnZUludGVydmFsID0gc2V0SW50ZXJ2YWwodG9nZ2xlSW1hZ2VzLCAyMDAw
KTsKLSAgICB9Ci19CisgICAgICAgIGlmICh0ZXN0UmVzdWx0LmlzSW1hZ2VGYWlsdXJlKCkpCisg
ICAgICAgICAgICB0aGlzLmhhc0ltYWdlRmFpbHVyZXMgPSB0cnVlOwogCi1mdW5jdGlvbiBhc3lu
YyhmdW5jLCBhcmdzKQotewotICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGZ1bmMuYXBwbHko
bnVsbCwgYXJncyk7IH0sIDEwMCk7Ci19CisgICAgICAgIGlmICh0ZXN0UmVzdWx0LmlzTWlzc2lu
ZygpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogbWFrZSBzdXJlIHRoYXQgbmV3LXJ1bi13ZWJr
aXQtdGVzdHMgc3BpdHMgb3V0IGFuIC1hY3R1YWwudHh0IGZpbGUgZm9yIHRlc3RzIHdpdGggTUlT
U0lORyByZXN1bHRzLgorICAgICAgICAgICAgdGhpcy5taXNzaW5nUmVzdWx0cy5wdXNoKHRlc3RS
ZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLWZ1bmN0aW9uIHZpc2li
bGVUZXN0cyhvcHRfY29udGFpbmVyKQotewotICAgIHZhciBjb250YWluZXIgPSBvcHRfY29udGFp
bmVyIHx8IGRvY3VtZW50OwotICAgIGlmIChvbmx5U2hvd1VuZXhwZWN0ZWRGYWlsdXJlcygpKQot
ICAgICAgICByZXR1cm4gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ3Rib2R5Om5vdCguZXhw
ZWN0ZWQpJyk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gY29udGFpbmVyLnF1ZXJ5U2VsZWN0
b3JBbGwoJ3Rib2R5Jyk7Ci19CisgICAgICAgIGlmICh0ZXN0UmVzdWx0LmlzRmxha2V5KHRoaXMu
X3Jlc3VsdHMucGl4ZWxfdGVzdHNfZW5hYmxlZCkpIHsKKyAgICAgICAgICAgIHRoaXMuZmxha3lQ
YXNzVGVzdHMucHVzaCh0ZXN0UmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQogCi1mdW5jdGlvbiB2aXNpYmxlRXhwYW5kTGlua3MoKQotewotICAgIGlmIChvbmx5U2hvd1Vu
ZXhwZWN0ZWRGYWlsdXJlcygpKQotICAgICAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3Rv
ckFsbCgndGJvZHk6bm90KC5leHBlY3RlZCkgLmV4cGFuZC1idXR0b24tdGV4dCcpOwotICAgIGVs
c2UKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5leHBhbmQtYnV0
dG9uLXRleHQnKTsKLX0KKyAgICAgICAgaWYgKHRlc3RSZXN1bHQuaXNQYXNzKCkpIHsKKyAgICAg
ICAgICAgIGlmICh0ZXN0UmVzdWx0LmlzVW5leHBlY3RlZFBhc3ModGhpcy5fcmVzdWx0cy5waXhl
bF90ZXN0c19lbmFibGVkKSkKKyAgICAgICAgICAgICAgICB0aGlzLnVuZXhwZWN0ZWRQYXNzVGVz
dHMucHVzaCh0ZXN0UmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi1m
dW5jdGlvbiBleHBhbmRBbGxFeHBlY3RhdGlvbnMoKQotewotICAgIHZhciBleHBhbmRMaW5rcyA9
IHZpc2libGVFeHBhbmRMaW5rcygpOwotICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBleHBhbmRM
aW5rcy5sZW5ndGg7IGkgPCBsZW47IGkrKykKLSAgICAgICAgYXN5bmMoZXhwYW5kRXhwZWN0YXRp
b25zLCBbZXhwYW5kTGlua3NbaV1dKTsKLX0KKyAgICAgICAgaWYgKHRlc3RSZXN1bHQuaXNDcmFz
aCgpKSB7CisgICAgICAgICAgICB0aGlzLmNyYXNoVGVzdHMucHVzaCh0ZXN0UmVzdWx0KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi1mdW5jdGlvbiBjb2xsYXBzZUFsbEV4cGVj
dGF0aW9ucygpCi17Ci0gICAgdmFyIGV4cGFuZExpbmtzID0gdmlzaWJsZUV4cGFuZExpbmtzKCk7
Ci0gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGV4cGFuZExpbmtzLmxlbmd0aDsgaSA8IGxlbjsg
aSsrKQotICAgICAgICBhc3luYyhjb2xsYXBzZUV4cGVjdGF0aW9ucywgW2V4cGFuZExpbmtzW2ld
XSk7Ci19CisgICAgICAgIGlmICh0ZXN0UmVzdWx0LmlzVGltZW91dCgpKSB7CisgICAgICAgICAg
ICB0aGlzLnRpbWVvdXRUZXN0cy5wdXNoKHRlc3RSZXN1bHQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgCisgICAgICAgIHRoaXMuZmFpbGluZ1Rlc3RzLnB1c2godGVzdFJl
c3VsdCk7CisgICAgfQorICAgIAorICAgIF9mb3JFYWNoVGVzdCh0cmVlLCBwcmVmaXgpCisgICAg
eworICAgICAgICBmb3IgKGxldCBrZXkgaW4gdHJlZSkgeworICAgICAgICAgICAgbGV0IG5ld1By
ZWZpeCA9IHByZWZpeCA/IChwcmVmaXggKyAnLycgKyBrZXkpIDoga2V5OworICAgICAgICAgICAg
aWYgKCdhY3R1YWwnIGluIHRyZWVba2V5XSkgeworICAgICAgICAgICAgICAgIGxldCB0ZXN0T2Jq
ZWN0ID0gbmV3IFRlc3RSZXN1bHQodHJlZVtrZXldLCBuZXdQcmVmaXgpOworICAgICAgICAgICAg
ICAgIHRoaXMuX3Byb2Nlc3NSZXN1bHRGb3JUZXN0KHRlc3RPYmplY3QpOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgdGhpcy5fZm9yRWFjaFRlc3QodHJlZVtrZXldLCBuZXdQ
cmVmaXgpOworICAgICAgICB9CisgICAgfQogCi1mdW5jdGlvbiBzaG91bGRVc2VUcmFjTGlua3Mo
KQotewotICAgIHJldHVybiAhZ2xvYmFsU3RhdGUoKS5yZXN1bHRzLmxheW91dF90ZXN0c19kaXIg
fHwgIWxvY2F0aW9uLnRvU3RyaW5nKCkuaW5kZXhPZignZmlsZTovLycpID09IDA7Ci19CisgICAg
X2Zvck90aGVyQ3Jhc2hlcyh0cmVlKQorICAgIHsKKyAgICAgICAgZm9yIChsZXQga2V5IGluIHRy
ZWUpIHsKKyAgICAgICAgICAgIGxldCB0ZXN0T2JqZWN0ID0gbmV3IFRlc3RSZXN1bHQodHJlZVtr
ZXldLCBrZXkpOworICAgICAgICAgICAgdGhpcy5jcmFzaE90aGVyLnB1c2godGVzdE9iamVjdCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc3RhdGljIHNvcnRCeU5hbWUodGVzdHMpCisg
ICAgeworICAgICAgICB0ZXN0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLm5hbWUu
bG9jYWxlQ29tcGFyZShiLm5hbWUpIH0pOworICAgIH0KIAotZnVuY3Rpb24gbGF5b3V0VGVzdHNC
YXNlUGF0aCgpCi17Ci0gICAgdmFyIGJhc2VQYXRoOwotICAgIGlmIChzaG91bGRVc2VUcmFjTGlu
a3MoKSkgewotICAgICAgICB2YXIgcmV2aXNpb24gPSBnbG9iYWxTdGF0ZSgpLnJlc3VsdHMucmV2
aXNpb247Ci0gICAgICAgIGJhc2VQYXRoID0gJ2h0dHA6Ly90cmFjLndlYmtpdC5vcmcnOwotICAg
ICAgICBiYXNlUGF0aCArPSByZXZpc2lvbiA/ICgnL2V4cG9ydC8nICsgcmV2aXNpb24pIDogJy9i
cm93c2VyJzsKLSAgICAgICAgYmFzZVBhdGggKz0gJy90cnVuay9MYXlvdXRUZXN0cy8nOwotICAg
IH0gZWxzZQotICAgICAgICBiYXNlUGF0aCA9IGdsb2JhbFN0YXRlKCkucmVzdWx0cy5sYXlvdXRf
dGVzdHNfZGlyICsgJy8nOwotICAgIHJldHVybiBiYXNlUGF0aDsKLX0KKyAgICBzdGF0aWMgaGFz
VW5leHBlY3RlZFJlc3VsdCh0ZXN0cykKKyAgICB7CisgICAgICAgIHJldHVybiB0ZXN0cy5zb21l
KGZ1bmN0aW9uICh0ZXN0KSB7IHJldHVybiAhdGVzdC5pc0V4cGVjdGVkOyB9KTsKKyAgICB9Cit9
OwogCi12YXIgbWFwcGluZ3MgPSB7Ci0gICAgImh0dHAvdGVzdHMvc3NsLyI6ICJodHRwczovLzEy
Ny4wLjAuMTo4NDQzL3NzbC8iLAotICAgICJodHRwL3Rlc3RzLyI6ICJodHRwOi8vMTI3LjAuMC4x
OjgwMDAvIiwKLSAgICAiaHR0cC93cHQvIjogImh0dHA6Ly9sb2NhbGhvc3Q6ODgwMC9XZWJLaXQv
IiwKLSAgICAiaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy8iOiAiaHR0cDovL2xvY2Fs
aG9zdDo4ODAwLyIKLX0KK2NsYXNzIFRlc3RSZXN1bHRzQ29udHJvbGxlcgoreyAgICAgICAgCisg
ICAgY29uc3RydWN0b3IoY29udGFpbmVyRWxlbWVudCwgdGVzdFJlc3VsdHMpCisgICAgeworICAg
ICAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQgPSBjb250YWluZXJFbGVtZW50OworICAgICAgICB0
aGlzLnRlc3RSZXN1bHRzID0gdGVzdFJlc3VsdHM7CiAKLWZ1bmN0aW9uIHRlc3RUb1VSTCh0ZXN0
LCBsYXlvdXRUZXN0c1BhdGgpCi17Ci0gICAgZm9yIChsZXQga2V5IGluIG1hcHBpbmdzKSB7Ci0g
ICAgICAgIGlmICh0ZXN0LnN0YXJ0c1dpdGgoa2V5KSkKLSAgICAgICAgICAgIHJldHVybiBtYXBw
aW5nc1trZXldICsgdGVzdC5zdWJzdHJpbmcoa2V5Lmxlbmd0aCk7CisgICAgICAgIHRoaXMuc2hv
dWxkVG9nZ2xlSW1hZ2VzID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fdG9nZ2xpbmdJbWFnZUludGVy
dmFsID0gbnVsbDsKKyAgICAgICAgCisgICAgICAgIHRoaXMuX3VwZGF0ZVBhZ2VUaXRsZSgpOwog
CisgICAgICAgIHRoaXMuYnVpbGRSZXN1bHRzVGFibGVzKCk7CisgICAgICAgIHRoaXMuaGlkZU5v
bkFwcGxpY2FibGVVSSgpOworICAgICAgICB0aGlzLnNldHVwU29ydGluZygpOworICAgICAgICB0
aGlzLnNldHVwT3B0aW9ucygpOwogICAgIH0KLSAgICByZXR1cm4gImZpbGU6Ly8iICsgbGF5b3V0
VGVzdHNQYXRoICsgIi8iICsgdGVzdAotfQorICAgIAorICAgIGJ1aWxkUmVzdWx0c1RhYmxlcygp
CisgICAgeworICAgICAgICBpZiAodGhpcy50ZXN0UmVzdWx0cy53YXNJbnRlcnJ1cHRlZCgpKSB7
CisgICAgICAgICAgICBsZXQgaW50ZXJydXB0aW9uTWVzc2FnZSA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ3AnKTsKKyAgICAgICAgICAgIGludGVycnVwdGlvbk1lc3NhZ2UudGV4dENvbnRlbnQg
PSAnVGVzdGluZyBleGl0ZWQgZWFybHknOworICAgICAgICAgICAgaW50ZXJydXB0aW9uTWVzc2Fn
ZS5jbGFzc0xpc3QuYWRkKCdzdG9wcGVkLXJ1bm5pbmctZWFybHktbWVzc2FnZScpOworICAgICAg
ICAgICAgdGhpcy5jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKGludGVycnVwdGlvbk1lc3Nh
Z2UpOworICAgICAgICB9CiAKLWZ1bmN0aW9uIGxheW91dFRlc3RVUkwodGVzdCkKLXsKLSAgICBp
ZiAoc2hvdWxkVXNlVHJhY0xpbmtzKCkpCi0gICAgICAgIHJldHVybiBsYXlvdXRUZXN0c0Jhc2VQ
YXRoKCkgKyB0ZXN0OwotICAgIHJldHVybiB0ZXN0VG9VUkwodGVzdCwgbGF5b3V0VGVzdHNCYXNl
UGF0aCgpKTsKLX0KKyAgICAgICAgaWYgKHRoaXMudGVzdFJlc3VsdHMuY3Jhc2hUZXN0cy5sZW5n
dGgpCisgICAgICAgICAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5i
dWlsZE9uZVNlY3Rpb24odGhpcy50ZXN0UmVzdWx0cy5jcmFzaFRlc3RzLCBDcmFzaGluZ1Rlc3Rz
U2VjdGlvbkJ1aWxkZXIpKTsKIAotZnVuY3Rpb24gY2hlY2tTZXJ2ZXJJc1J1bm5pbmcoZXZlbnQp
Ci17Ci0gICAgaWYgKHNob3VsZFVzZVRyYWNMaW5rcygpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICB2YXIgdXJsID0gZXZlbnQudGFyZ2V0LmhyZWY7Ci0gICAgaWYgKHVybC5zdGFydHNXaXRoKCJm
aWxlOi8vIikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7
Ci0gICAgZmV0Y2godXJsLCB7bW9kZTogIm5vLWNvcnMifSkudGhlbigoKSA9PiB7Ci0gICAgICAg
IHdpbmRvdy5sb2NhdGlvbiA9IHVybDsKLSAgICB9LCAoKSA9PiB7Ci0gICAgICAgIGFsZXJ0KCJI
VFRQIHNlcnZlciBkb2VzIG5vdCBzZWVtIHRvIGJlIHJ1bm5pbmcsIHBsZWFzZSB1c2UgdGhlIHJ1
bi13ZWJraXQtaHR0cGQgc2NyaXB0Iik7Ci0gICAgfSk7Ci19CisgICAgICAgIGlmICh0aGlzLnRl
c3RSZXN1bHRzLmNyYXNoT3RoZXIubGVuZ3RoKQorICAgICAgICAgICAgdGhpcy5jb250YWluZXJF
bGVtZW50LmFwcGVuZENoaWxkKHRoaXMuYnVpbGRPbmVTZWN0aW9uKHRoaXMudGVzdFJlc3VsdHMu
Y3Jhc2hPdGhlciwgT3RoZXJDcmFzaGVzU2VjdGlvbkJ1aWxkZXIpKTsKIAotZnVuY3Rpb24gdGVz
dExpbmsodGVzdCkKLXsKLSAgICByZXR1cm4gJzxhIGNsYXNzPXRlc3QtbGluayBvbmNsaWNrPSJj
aGVja1NlcnZlcklzUnVubmluZyhldmVudCkiIGhyZWY9IicgKyBsYXlvdXRUZXN0VVJMKHRlc3Qp
ICsgJyI+JyArIHRlc3QgKyAnPC9hPjxzcGFuIGNsYXNzPWZsYWcgb25jbGljaz0idW5mbGFnKHRo
aXMpIj4gXHUyNjkxPC9zcGFuPic7Ci19CisgICAgICAgIGlmICh0aGlzLnRlc3RSZXN1bHRzLmZh
aWxpbmdUZXN0cy5sZW5ndGgpCisgICAgICAgICAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQuYXBw
ZW5kQ2hpbGQodGhpcy5idWlsZE9uZVNlY3Rpb24odGhpcy50ZXN0UmVzdWx0cy5mYWlsaW5nVGVz
dHMsIEZhaWxpbmdUZXN0c1NlY3Rpb25CdWlsZGVyKSk7CiAKLWZ1bmN0aW9uIHVuZmxhZyhmbGFn
KQotewotICAgIHZhciBzaG91bGRGbGFnID0gZmFsc2U7Ci0gICAgVGVzdE5hdmlnYXRvci5mbGFn
VGVzdChwYXJlbnRPZlR5cGUoZmxhZywgJ3Rib2R5JyksIHNob3VsZEZsYWcpOwotfQorICAgICAg
ICBpZiAodGhpcy50ZXN0UmVzdWx0cy5taXNzaW5nUmVzdWx0cy5sZW5ndGgpCisgICAgICAgICAg
ICB0aGlzLmNvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5idWlsZE9uZVNlY3Rpb24o
dGhpcy50ZXN0UmVzdWx0cy5taXNzaW5nUmVzdWx0cywgVGVzdHNXaXRoTWlzc2luZ1Jlc3VsdHNT
ZWN0aW9uQnVpbGRlcikpOwogCi1mdW5jdGlvbiB0ZXN0TGlua1dpdGhFeHBhbmRCdXR0b24odGVz
dCkKLXsKLSAgICByZXR1cm4gJzxzcGFuIGNsYXNzPWV4cGFuZC1idXR0b24gb25jbGljaz0idG9n
Z2xlRXhwZWN0YXRpb25zKHRoaXMpIj48c3BhbiBjbGFzcz1leHBhbmQtYnV0dG9uLXRleHQ+Kzwv
c3Bhbj48L3NwYW4+JyArIHRlc3RMaW5rKHRlc3QpOwotfQorICAgICAgICBpZiAodGhpcy50ZXN0
UmVzdWx0cy50aW1lb3V0VGVzdHMubGVuZ3RoKQorICAgICAgICAgICAgdGhpcy5jb250YWluZXJF
bGVtZW50LmFwcGVuZENoaWxkKHRoaXMuYnVpbGRPbmVTZWN0aW9uKHRoaXMudGVzdFJlc3VsdHMu
dGltZW91dFRlc3RzLCBUaW1lZE91dFRlc3RzU2VjdGlvbkJ1aWxkZXIpKTsKIAotZnVuY3Rpb24g
dGVzdFdpdGhFeHBhbmRCdXR0b24odGVzdCkKLXsKLSAgICByZXR1cm4gJzxzcGFuIGNsYXNzPWV4
cGFuZC1idXR0b24gb25jbGljaz0idG9nZ2xlRXhwZWN0YXRpb25zKHRoaXMpIj48c3BhbiBjbGFz
cz1leHBhbmQtYnV0dG9uLXRleHQ+Kzwvc3Bhbj48L3NwYW4+JyArIHRlc3Q7Ci19CisgICAgICAg
IGlmICh0aGlzLnRlc3RSZXN1bHRzLnRlc3RzV2l0aFN0ZGVyci5sZW5ndGgpCisgICAgICAgICAg
ICB0aGlzLmNvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5idWlsZE9uZVNlY3Rpb24o
dGhpcy50ZXN0UmVzdWx0cy50ZXN0c1dpdGhTdGRlcnIsIFRlc3RzV2l0aFN0ZEVyclNlY3Rpb25C
dWlsZGVyKSk7CiAKLWZ1bmN0aW9uIHJlc3VsdExpbmsodGVzdFByZWZpeCwgc3VmZml4LCBjb250
ZW50cykKLXsKLSAgICByZXR1cm4gJzxhIGNsYXNzPXJlc3VsdC1saW5rIGhyZWY9IicgKyB0ZXN0
UHJlZml4ICsgc3VmZml4ICsgJyIgZGF0YS1wcmVmaXg9IicgKyB0ZXN0UHJlZml4ICsgJyI+JyAr
IGNvbnRlbnRzICsgJzwvYT4gJzsKLX0KKyAgICAgICAgaWYgKHRoaXMudGVzdFJlc3VsdHMuZmxh
a3lQYXNzVGVzdHMubGVuZ3RoKQorICAgICAgICAgICAgdGhpcy5jb250YWluZXJFbGVtZW50LmFw
cGVuZENoaWxkKHRoaXMuYnVpbGRPbmVTZWN0aW9uKHRoaXMudGVzdFJlc3VsdHMuZmxha3lQYXNz
VGVzdHMsIEZsYWt5UGFzc1Rlc3RzU2VjdGlvbkJ1aWxkZXIpKTsKIAotZnVuY3Rpb24gaXNGYWls
dXJlRXhwZWN0ZWQoZXhwZWN0ZWQsIGFjdHVhbCkKLXsKLSAgICB2YXIgaXNFeHBlY3RlZCA9IHRy
dWU7Ci0gICAgaWYgKGFjdHVhbCAhPSAnU0tJUCcpIHsKLSAgICAgICAgdmFyIGV4cGVjdGVkQXJy
YXkgPSBleHBlY3RlZC5zcGxpdCgnICcpOwotICAgICAgICB2YXIgYWN0dWFsQXJyYXkgPSBhY3R1
YWwuc3BsaXQoJyAnKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY3R1YWxBcnJheS5s
ZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdmFyIGFjdHVhbFZhbHVlID0gYWN0dWFsQXJyYXlb
aV07Ci0gICAgICAgICAgICBpZiAoZXhwZWN0ZWRBcnJheS5pbmRleE9mKGFjdHVhbFZhbHVlKSA9
PSAtMSAmJgotICAgICAgICAgICAgICAgIChleHBlY3RlZEFycmF5LmluZGV4T2YoJ0ZBSUwnKSA9
PSAtMSB8fAotICAgICAgICAgICAgICAgICAoYWN0dWFsVmFsdWUgIT0gJ1RFWFQnICYmIGFjdHVh
bFZhbHVlICE9ICdJTUFHRStURVhUJyAmJiBhY3R1YWxWYWx1ZSAhPSAnQVVESU8nKSkpCi0gICAg
ICAgICAgICAgICAgaXNFeHBlY3RlZCA9IGZhbHNlOworICAgICAgICBpZiAodGhpcy50ZXN0UmVz
dWx0cy51c2VzRXhwZWN0YXRpb25zRmlsZSgpICYmIHRoaXMudGVzdFJlc3VsdHMudW5leHBlY3Rl
ZFBhc3NUZXN0cy5sZW5ndGgpCisgICAgICAgICAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQuYXBw
ZW5kQ2hpbGQodGhpcy5idWlsZE9uZVNlY3Rpb24odGhpcy50ZXN0UmVzdWx0cy51bmV4cGVjdGVk
UGFzc1Rlc3RzLCBVbmV4cGVjdGVkUGFzc1Rlc3RzU2VjdGlvbkJ1aWxkZXIpKTsKKworICAgICAg
ICBpZiAodGhpcy50ZXN0UmVzdWx0cy5oYXNIdHRwVGVzdHMpIHsKKyAgICAgICAgICAgIGxldCBo
dHRwZEFjY2Vzc0xvZ0xpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7CisgICAgICAg
ICAgICBodHRwZEFjY2Vzc0xvZ0xpbmsuaW5uZXJIVE1MID0gJ2h0dHBkIGFjY2VzcyBsb2c6IDxh
IGhyZWY9ImFjY2Vzc19sb2cudHh0Ij5hY2Nlc3NfbG9nLnR4dDwvYT4nOworCisgICAgICAgICAg
ICBsZXQgaHR0cGRFcnJvckxvZ0xpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7Cisg
ICAgICAgICAgICBodHRwZEVycm9yTG9nTGluay5pbm5lckhUTUwgPSAnaHR0cGQgZXJyb3IgbG9n
OiA8YSBocmVmPSJlcnJvcl9sb2cudHh0Ij5lcnJvcl9sb2cudHh0PC9hPic7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHRoaXMuY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZChodHRwZEFj
Y2Vzc0xvZ0xpbmspOworICAgICAgICAgICAgdGhpcy5jb250YWluZXJFbGVtZW50LmFwcGVuZENo
aWxkKGh0dHBkRXJyb3JMb2dMaW5rKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGhp
cy51cGRhdGVUZXN0bGlzdENvdW50cygpOwogICAgIH0KLSAgICByZXR1cm4gaXNFeHBlY3RlZDsK
LX0KKyAgICAKKyAgICBzZXR1cFNvcnRpbmcoKQorICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdHNU
YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHRzLXRhYmxlJyk7CisgICAgICAg
IGlmICghcmVzdWx0c1RhYmxlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAg
ICAgLy8gRklYTUU6IE1ha2UgYWxsIHRoZSB0YWJsZXMgc29ydGFibGUuIE1heWJlIFNlY3Rpb25C
dWlsZGVyIHNob3VsZCBwdXQgYSBUYWJsZVNvcnRlciBvbiBlYWNoIHRhYmxlLgorICAgICAgICBy
ZXN1bHRzVGFibGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBUYWJsZVNvcnRlci5oYW5kbGVD
bGljaywgZmFsc2UpOworICAgICAgICBUYWJsZVNvcnRlci5zb3J0Q29sdW1uKDApOworICAgIH0K
KyAgICAKKyAgICBoaWRlTm9uQXBwbGljYWJsZVVJKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1F
OiBkbyB0aGlzIGFsbCB0aHJvdWdoIGJvZHkgY2xhc3NuYW1lcy4KKyAgICAgICAgaWYgKCF0aGlz
LnRlc3RSZXN1bHRzLmhhc1RleHRGYWlsdXJlcykgeworICAgICAgICAgICAgbGV0IHRleHRSZXN1
bHRzSGVhZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RleHQtcmVzdWx0cy1oZWFkZXIn
KTsKKyAgICAgICAgICAgIGlmICh0ZXh0UmVzdWx0c0hlYWRlcikKKyAgICAgICAgICAgICAgICB0
ZXh0UmVzdWx0c0hlYWRlci50ZXh0Q29udGVudCA9ICcnOworICAgICAgICB9CiAKLWZ1bmN0aW9u
IHByb2Nlc3NHbG9iYWxTdGF0ZUZvcih0ZXN0T2JqZWN0KQotewotICAgIHZhciB0ZXN0ID0gdGVz
dE9iamVjdC5uYW1lOwotICAgIGlmICh0ZXN0T2JqZWN0Lmhhc19zdGRlcnIpCi0gICAgICAgIGds
b2JhbFN0YXRlKCkudGVzdHNXaXRoU3RkZXJyLnB1c2godGVzdE9iamVjdCk7CisgICAgICAgIGlm
ICghdGhpcy50ZXN0UmVzdWx0cy5oYXNJbWFnZUZhaWx1cmVzKSB7CisgICAgICAgICAgICBsZXQg
aW1hZ2VSZXN1bHRzSGVhZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlLXJlc3Vs
dHMtaGVhZGVyJyk7CisgICAgICAgICAgICBpZiAoaW1hZ2VSZXN1bHRzSGVhZGVyKQorICAgICAg
ICAgICAgICAgIGltYWdlUmVzdWx0c0hlYWRlci50ZXh0Q29udGVudCA9ICcnOworCisgICAgICAg
ICAgICBVdGlscy5wYXJlbnRPZlR5cGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvZ2dsZS1p
bWFnZXMnKSwgJ2xhYmVsJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICBzZXR1cE9wdGlvbnMoKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGRv
IHRoaXMgYWxsIHRocm91Z2ggYm9keSBjbGFzc25hbWVzLgorICAgICAgICBpZiAoIXRoaXMudGVz
dFJlc3VsdHMudXNlc0V4cGVjdGF0aW9uc0ZpbGUoKSkKKyAgICAgICAgICAgIFV0aWxzLnBhcmVu
dE9mVHlwZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndW5leHBlY3RlZC1yZXN1bHRzJyksICds
YWJlbCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgfQogCi0gICAgZ2xvYmFsU3RhdGUo
KS5oYXNIdHRwVGVzdHMgPSBnbG9iYWxTdGF0ZSgpLmhhc0h0dHBUZXN0cyB8fCB0ZXN0LmluZGV4
T2YoJ2h0dHAvJykgPT0gMDsKKyAgICBidWlsZE9uZVNlY3Rpb24odGVzdHMsIHNlY3Rpb25CdWls
ZGVyQ2xhc3MpCisgICAgeworICAgICAgICBUZXN0UmVzdWx0cy5zb3J0QnlOYW1lKHRlc3RzKTsK
KyAgICAgICAgCisgICAgICAgIGxldCBzZWN0aW9uQnVpbGRlciA9IG5ldyBzZWN0aW9uQnVpbGRl
ckNsYXNzKHRlc3RzLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIHNlY3Rpb25CdWlsZGVyLmJ1aWxk
KCk7CisgICAgfQogCi0gICAgdmFyIGFjdHVhbCA9IHRlc3RPYmplY3QuYWN0dWFsOyAgICAKLSAg
ICB2YXIgZXhwZWN0ZWQgPSB0ZXN0T2JqZWN0LmV4cGVjdGVkIHx8ICdQQVNTJzsKLSAgICBpZiAo
Z2xvYmFsU3RhdGUoKS5yZXN1bHRzLnVzZXNfZXhwZWN0YXRpb25zX2ZpbGUpCi0gICAgICAgIHRl
c3RPYmplY3QuaXNFeHBlY3RlZCA9IGlzRmFpbHVyZUV4cGVjdGVkKGV4cGVjdGVkLCBhY3R1YWwp
OworICAgIHVwZGF0ZVRlc3RsaXN0Q291bnRzKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBk
byB0aGlzIHRocm91Z2ggdGhlIGRhdGEgbW9kZWwsIG5vdCB0aHJvdWdoIHRoZSBET00uCisgICAg
ICAgIGxldCBvbmx5U2hvd1VuZXhwZWN0ZWRGYWlsdXJlcyA9IHRoaXMub25seVNob3dVbmV4cGVj
dGVkRmFpbHVyZXMoKTsKKyAgICAgICAgVXRpbHMuZm9yRWFjaChkb2N1bWVudC5xdWVyeVNlbGVj
dG9yQWxsKCcudGVzdC1saXN0LWNvdW50JyksIGNvdW50ID0+IHsKKyAgICAgICAgICAgIGxldCBj
b250YWluZXIgPSBVdGlscy5wYXJlbnRPZlR5cGUoY291bnQsICdzZWN0aW9uJyk7CisgICAgICAg
ICAgICBsZXQgdGVzdENvbnRhaW5lcnM7CisgICAgICAgICAgICBpZiAob25seVNob3dVbmV4cGVj
dGVkRmFpbHVyZXMpCisgICAgICAgICAgICAgICAgdGVzdENvbnRhaW5lcnMgPSBjb250YWluZXIu
cXVlcnlTZWxlY3RvckFsbCgndGJvZHk6bm90KC5leHBlY3RlZCknKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB0ZXN0Q29udGFpbmVycyA9IGNvbnRhaW5lci5xdWVyeVNlbGVj
dG9yQWxsKCd0Ym9keScpOwogCi0gICAgaWYgKGFjdHVhbCA9PSAnTUlTU0lORycpIHsKLSAgICAg
ICAgLy8gRklYTUU6IG1ha2Ugc3VyZSB0aGF0IG5ldy1ydW4td2Via2l0LXRlc3RzIHNwaXRzIG91
dCBhbiAtYWN0dWFsLnR4dCBmaWxlIGZvcgotICAgICAgICAvLyB0ZXN0cyB3aXRoIE1JU1NJTkcg
cmVzdWx0cy4KLSAgICAgICAgZ2xvYmFsU3RhdGUoKS5taXNzaW5nUmVzdWx0cy5wdXNoKHRlc3RP
YmplY3QpOwotICAgICAgICByZXR1cm47CisgICAgICAgICAgICBjb3VudC50ZXh0Q29udGVudCA9
IHRlc3RDb250YWluZXJzLmxlbmd0aDsKKyAgICAgICAgfSkKKyAgICB9CisgICAgCisgICAgZmxh
Z0FsbChoZWFkZXJMaW5rKQorICAgIHsKKyAgICAgICAgbGV0IHRlc3RzID0gdGhpcy52aXNpYmxl
VGVzdHMoVXRpbHMucGFyZW50T2ZUeXBlKGhlYWRlckxpbmssICdzZWN0aW9uJykpOworICAgICAg
ICBVdGlscy5mb3JFYWNoKHRlc3RzLCB0ZXN0cyA9PiB7CisgICAgICAgICAgICBsZXQgc2hvdWxk
RmxhZyA9IHRydWU7CisgICAgICAgICAgICB0ZXN0TmF2aWdhdG9yLmZsYWdUZXN0KHRlc3RzLCBz
aG91bGRGbGFnKTsKKyAgICAgICAgfSkKICAgICB9CiAKLSAgICB2YXIgYWN0dWFsVG9rZW5zID0g
YWN0dWFsLnNwbGl0KCcgJyk7Ci0gICAgdmFyIHBhc3NlZFdpdGhJbWFnZU9ubHlGYWlsdXJlSW5S
ZXRyeSA9IGFjdHVhbFRva2Vuc1swXSA9PSAnVEVYVCcgJiYgYWN0dWFsVG9rZW5zWzFdID09ICdJ
TUFHRSc7Ci0gICAgaWYgKGFjdHVhbFRva2Vuc1sxXSAmJiBhY3R1YWwuaW5kZXhPZignUEFTUycp
ICE9IC0xIHx8ICghZ2xvYmFsU3RhdGUoKS5yZXN1bHRzLnBpeGVsX3Rlc3RzX2VuYWJsZWQgJiYg
cGFzc2VkV2l0aEltYWdlT25seUZhaWx1cmVJblJldHJ5KSkgewotICAgICAgICBnbG9iYWxTdGF0
ZSgpLmZsYWt5UGFzc1Rlc3RzLnB1c2godGVzdE9iamVjdCk7Ci0gICAgICAgIHJldHVybjsKKyAg
ICB1bmZsYWcoZmxhZykKKyAgICB7CisgICAgICAgIGNvbnN0IHNob3VsZEZsYWcgPSBmYWxzZTsK
KyAgICAgICAgdGVzdE5hdmlnYXRvci5mbGFnVGVzdChVdGlscy5wYXJlbnRPZlR5cGUoZmxhZywg
J3Rib2R5JyksIHNob3VsZEZsYWcpOwogICAgIH0KIAotICAgIGlmIChhY3R1YWwgPT0gJ1BBU1Mn
ICYmIGV4cGVjdGVkICE9ICdQQVNTJykgewotICAgICAgICBpZiAoZXhwZWN0ZWQgIT0gJ0lNQUdF
JyB8fCAoZ2xvYmFsU3RhdGUoKS5yZXN1bHRzLnBpeGVsX3Rlc3RzX2VuYWJsZWQgfHwgdGVzdE9i
amVjdC5yZWZ0ZXN0X3R5cGUpKSB7Ci0gICAgICAgICAgICBnbG9iYWxTdGF0ZSgpLnVuZXhwZWN0
ZWRQYXNzVGVzdHMucHVzaCh0ZXN0T2JqZWN0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47
CisgICAgdmlzaWJsZVRlc3RzKG9wdF9jb250YWluZXIpCisgICAgeworICAgICAgICBsZXQgY29u
dGFpbmVyID0gb3B0X2NvbnRhaW5lciB8fCBkb2N1bWVudDsKKyAgICAgICAgaWYgKHRoaXMub25s
eVNob3dVbmV4cGVjdGVkRmFpbHVyZXMoKSkKKyAgICAgICAgICAgIHJldHVybiBjb250YWluZXIu
cXVlcnlTZWxlY3RvckFsbCgndGJvZHk6bm90KC5leHBlY3RlZCknKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCd0Ym9keScpOwog
ICAgIH0KIAotICAgIGlmIChhY3R1YWwgPT0gJ0NSQVNIJykgewotICAgICAgICBnbG9iYWxTdGF0
ZSgpLmNyYXNoVGVzdHMucHVzaCh0ZXN0T2JqZWN0KTsKLSAgICAgICAgcmV0dXJuOworICAgIC8v
IEZJWE1FOiB0aGlzIGlzIGNvbmZ1c2luZy4gRmxpcCB0aGUgc2Vuc2UgYXJvdW5kLgorICAgIG9u
bHlTaG93VW5leHBlY3RlZEZhaWx1cmVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgndW5leHBlY3RlZC1yZXN1bHRzJykuY2hlY2tlZDsKICAgICB9CiAK
LSAgICBpZiAoYWN0dWFsID09ICdUSU1FT1VUJykgewotICAgICAgICBnbG9iYWxTdGF0ZSgpLnRp
bWVvdXRUZXN0cy5wdXNoKHRlc3RPYmplY3QpOwotICAgICAgICByZXR1cm47CisgICAgc3RhdGlj
IF90ZXN0TGlzdEhlYWRlcih0aXRsZSkKKyAgICB7CisgICAgICAgIGxldCBoZWFkZXIgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdoMScpOworICAgICAgICBoZWFkZXIuaW5uZXJIVE1MID0gdGl0
bGUgKyAnICg8c3BhbiBjbGFzcz10ZXN0LWxpc3QtY291bnQ+PC9zcGFuPik6IDxhIGhyZWY9IiMi
IGNsYXNzPWZsYWctYWxsIG9uY2xpY2s9ImNvbnRyb2xsZXIuZmxhZ0FsbCh0aGlzKSI+ZmxhZyBh
bGw8L2E+JzsKKyAgICAgICAgcmV0dXJuIGhlYWRlcjsKICAgICB9Ci0gICAgCi0gICAgZ2xvYmFs
U3RhdGUoKS5mYWlsaW5nVGVzdHMucHVzaCh0ZXN0T2JqZWN0KTsKLX0KIAotZnVuY3Rpb24gdG9n
Z2xlSW1hZ2VzKCkKLXsKLSAgICB2YXIgaW1hZ2VzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFs
bCgnLmFuaW1hdGVkSW1hZ2UnKTsKLSAgICB2YXIgaW1hZ2VUZXh0cyA9IGRvY3VtZW50LnF1ZXJ5
U2VsZWN0b3JBbGwoJy5pbWFnZVRleHQnKTsKLSAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gaW1h
Z2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIHZhciBpbWFnZSA9IGltYWdlc1tp
XTsKLSAgICAgICAgdmFyIHRleHQgPSBpbWFnZVRleHRzW2ldOwotICAgICAgICBpZiAodGV4dC50
ZXh0Q29udGVudCA9PSAnRXhwZWN0ZWQgSW1hZ2UnKSB7Ci0gICAgICAgICAgICB0ZXh0LnRleHRD
b250ZW50ID0gJ0FjdHVhbCBJbWFnZSc7Ci0gICAgICAgICAgICBpbWFnZS5zcmMgPSBpbWFnZS5n
ZXRBdHRyaWJ1dGUoJ2RhdGEtcHJlZml4JykgKyAnLWFjdHVhbC5wbmcnOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgdGV4dC50ZXh0Q29udGVudCA9ICdFeHBlY3RlZCBJbWFnZSc7Ci0g
ICAgICAgICAgICBpbWFnZS5zcmMgPSBpbWFnZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcHJlZml4Jykg
KyAnLWV4cGVjdGVkLnBuZyc7CisgICAgdGVzdFRvVVJMKHRlc3RSZXN1bHQsIGxheW91dFRlc3Rz
UGF0aCkKKyAgICB7CisgICAgICAgIGNvbnN0IG1hcHBpbmdzID0geworICAgICAgICAgICAgImh0
dHAvdGVzdHMvc3NsLyI6ICJodHRwczovLzEyNy4wLjAuMTo4NDQzL3NzbC8iLAorICAgICAgICAg
ICAgImh0dHAvdGVzdHMvIjogImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC8iLAorICAgICAgICAgICAg
Imh0dHAvd3B0LyI6ICJodHRwOi8vbG9jYWxob3N0Ojg4MDAvV2ViS2l0LyIsCisgICAgICAgICAg
ICAiaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy8iOiAiaHR0cDovL2xvY2FsaG9zdDo4
ODAwLyIKKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKGxldCBrZXkgaW4gbWFwcGluZ3MpIHsK
KyAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0Lm5hbWUuc3RhcnRzV2l0aChrZXkpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBtYXBwaW5nc1trZXldICsgdGVzdFJlc3VsdC5uYW1lLnN1YnN0cmlu
ZyhrZXkubGVuZ3RoKTsKKwogICAgICAgICB9CisgICAgICAgIHJldHVybiAiZmlsZTovLyIgKyBs
YXlvdXRUZXN0c1BhdGggKyAiLyIgKyB0ZXN0UmVzdWx0Lm5hbWU7CiAgICAgfQotfQogCi1mdW5j
dGlvbiB0ZXh0UmVzdWx0TGlua3MocHJlZml4KQotewotICAgIHZhciBodG1sID0gcmVzdWx0TGlu
ayhwcmVmaXgsICctZXhwZWN0ZWQudHh0JywgJ2V4cGVjdGVkJykgKwotICAgICAgICByZXN1bHRM
aW5rKHByZWZpeCwgJy1hY3R1YWwudHh0JywgJ2FjdHVhbCcpICsKLSAgICAgICAgcmVzdWx0TGlu
ayhwcmVmaXgsICctZGlmZi50eHQnLCAnZGlmZicpOworICAgIGxheW91dFRlc3RVUkwodGVzdFJl
c3VsdCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLnNob3VsZFVzZVRyYWNMaW5rcygpKQorICAg
ICAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0VGVzdHNCYXNlUGF0aCgpICsgdGVzdFJlc3VsdC5u
YW1lOwogCi0gICAgaWYgKGdsb2JhbFN0YXRlKCkucmVzdWx0cy5oYXNfcHJldHR5X3BhdGNoKQot
ICAgICAgICBodG1sICs9IHJlc3VsdExpbmsocHJlZml4LCAnLXByZXR0eS1kaWZmLmh0bWwnLCAn
cHJldHR5IGRpZmYnKTsKKyAgICAgICAgcmV0dXJuIHRoaXMudGVzdFRvVVJMKHRlc3RSZXN1bHQs
IHRoaXMubGF5b3V0VGVzdHNCYXNlUGF0aCgpKTsKKyAgICB9CiAKLSAgICBpZiAoZ2xvYmFsU3Rh
dGUoKS5yZXN1bHRzLmhhc193ZGlmZikKLSAgICAgICAgaHRtbCArPSByZXN1bHRMaW5rKHByZWZp
eCwgJy13ZGlmZi5odG1sJywgJ3dkaWZmJyk7CisgICAgbGF5b3V0VGVzdHNCYXNlUGF0aCgpCisg
ICAgeworICAgICAgICBsZXQgYmFzZVBhdGg7CisgICAgICAgIGlmICh0aGlzLnNob3VsZFVzZVRy
YWNMaW5rcygpKSB7CisgICAgICAgICAgICBsZXQgcmV2aXNpb24gPSB0aGlzLnRlc3RSZXN1bHRz
LnJldmlzaW9uOworICAgICAgICAgICAgYmFzZVBhdGggPSAnaHR0cDovL3RyYWMud2Via2l0Lm9y
Zyc7CisgICAgICAgICAgICBiYXNlUGF0aCArPSByZXZpc2lvbiA/ICgnL2V4cG9ydC8nICsgcmV2
aXNpb24pIDogJy9icm93c2VyJzsKKyAgICAgICAgICAgIGJhc2VQYXRoICs9ICcvdHJ1bmsvTGF5
b3V0VGVzdHMvJzsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBiYXNlUGF0aCA9IHRoaXMu
dGVzdFJlc3VsdHMubGF5b3V0VGVzdHNEaXIoKSArICcvJzsKIAotICAgIHJldHVybiBodG1sOwot
fQorICAgICAgICByZXR1cm4gYmFzZVBhdGg7CisgICAgfQogCi1mdW5jdGlvbiBpbWFnZVJlc3Vs
dHNDZWxsKHRlc3RPYmplY3QsIHRlc3RQcmVmaXgsIGFjdHVhbCkgewotICAgIHZhciByb3cgPSAn
JzsKKyAgICBzaG91bGRVc2VUcmFjTGlua3MoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICF0aGlz
LnRlc3RSZXN1bHRzLmxheW91dFRlc3RzRGlyKCkgfHwgIWxvY2F0aW9uLnRvU3RyaW5nKCkuaW5k
ZXhPZignZmlsZTovLycpID09IDA7CisgICAgfQogCi0gICAgaWYgKGFjdHVhbC5pbmRleE9mKCdJ
TUFHRScpICE9IC0xKSB7Ci0gICAgICAgIHZhciB0ZXN0RXh0ZW5zaW9uID0gc3BsaXRFeHRlbnNp
b24odGVzdE9iamVjdC5uYW1lKVsxXTsKLSAgICAgICAgZ2xvYmFsU3RhdGUoKS5oYXNJbWFnZUZh
aWx1cmVzID0gdHJ1ZTsKKyAgICBjaGVja1NlcnZlcklzUnVubmluZyhldmVudCkKKyAgICB7Cisg
ICAgICAgIGlmICh0aGlzLnNob3VsZFVzZVRyYWNMaW5rcygpKQorICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIGlmICh0ZXN0T2JqZWN0LnJlZnRlc3RfdHlwZSAmJiB0ZXN0T2JqZWN0LnJl
ZnRlc3RfdHlwZS5pbmRleE9mKCchPScpICE9IC0xKSB7Ci0gICAgICAgICAgICByb3cgKz0gcmVz
dWx0TGluayhsYXlvdXRUZXN0c0Jhc2VQYXRoKCkgKyB0ZXN0UHJlZml4LCAnLWV4cGVjdGVkLW1p
c21hdGNoLicgKyB0ZXN0RXh0ZW5zaW9uLCAncmVmIG1pc21hdGNoJyk7Ci0gICAgICAgICAgICBy
b3cgKz0gcmVzdWx0TGluayh0ZXN0UHJlZml4LCAnLWFjdHVhbC5wbmcnLCAnYWN0dWFsJyk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodGVzdE9iamVjdC5yZWZ0ZXN0X3R5cGUg
JiYgdGVzdE9iamVjdC5yZWZ0ZXN0X3R5cGUuaW5kZXhPZignPT0nKSAhPSAtMSkgewotICAgICAg
ICAgICAgICAgIHJvdyArPSByZXN1bHRMaW5rKGxheW91dFRlc3RzQmFzZVBhdGgoKSArIHRlc3RQ
cmVmaXgsICctZXhwZWN0ZWQuJyArIHRlc3RFeHRlbnNpb24sICdyZWZlcmVuY2UnKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChnbG9iYWxTdGF0ZSgpLnNob3VsZFRvZ2dsZUltYWdl
cykgewotICAgICAgICAgICAgICAgIHJvdyArPSByZXN1bHRMaW5rKHRlc3RQcmVmaXgsICctZGlm
ZnMuaHRtbCcsICdpbWFnZXMnKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgcm93ICs9IHJlc3VsdExpbmsodGVzdFByZWZpeCwgJy1leHBlY3RlZC5wbmcnLCAnZXhwZWN0
ZWQnKTsKLSAgICAgICAgICAgICAgICByb3cgKz0gcmVzdWx0TGluayh0ZXN0UHJlZml4LCAnLWFj
dHVhbC5wbmcnLCAnYWN0dWFsJyk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGxldCB1cmwgPSBl
dmVudC50YXJnZXQuaHJlZjsKKyAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKCJmaWxlOi8vIikp
CisgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIHZhciBkaWZmID0gdGVzdE9iamVj
dC5pbWFnZV9kaWZmX3BlcmNlbnQ7Ci0gICAgICAgICAgICByb3cgKz0gcmVzdWx0TGluayh0ZXN0
UHJlZml4LCAnLWRpZmYucG5nJywgJ2RpZmYgKCcgKyBkaWZmICsgJyUpJyk7Ci0gICAgICAgIH0K
KyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgZmV0Y2godXJsLCB7IG1v
ZGU6ICJuby1jb3JzIiB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlv
biA9IHVybDsKKyAgICAgICAgfSwgKCkgPT4geworICAgICAgICAgICAgYWxlcnQoIkhUVFAgc2Vy
dmVyIGRvZXMgbm90IHNlZW0gdG8gYmUgcnVubmluZywgcGxlYXNlIHVzZSB0aGUgcnVuLXdlYmtp
dC1odHRwZCBzY3JpcHQiKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgdGVzdExpbmsodGVz
dFJlc3VsdCkKKyAgICB7CisgICAgICAgIHJldHVybiAnPGEgY2xhc3M9dGVzdC1saW5rIG9uY2xp
Y2s9ImNvbnRyb2xsZXIuY2hlY2tTZXJ2ZXJJc1J1bm5pbmcoZXZlbnQpIiBocmVmPSInICsgdGhp
cy5sYXlvdXRUZXN0VVJMKHRlc3RSZXN1bHQpICsgJyI+JyArIHRlc3RSZXN1bHQubmFtZSArICc8
L2E+PHNwYW4gY2xhc3M9ZmxhZyBvbmNsaWNrPSJjb250cm9sbGVyLnVuZmxhZyh0aGlzKSI+IFx1
MjY5MTwvc3Bhbj4nOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgcmVzdWx0TGluayh0ZXN0UHJl
Zml4LCBzdWZmaXgsIGNvbnRlbnRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuICc8YSBjbGFzcz1y
ZXN1bHQtbGluayBocmVmPSInICsgdGVzdFByZWZpeCArIHN1ZmZpeCArICciIGRhdGEtcHJlZml4
PSInICsgdGVzdFByZWZpeCArICciPicgKyBjb250ZW50cyArICc8L2E+ICc7CiAgICAgfQogCi0g
ICAgaWYgKGFjdHVhbC5pbmRleE9mKCdNSVNTSU5HJykgIT0gLTEgJiYgdGVzdE9iamVjdC5pc19t
aXNzaW5nX2ltYWdlKQotICAgICAgICByb3cgKz0gcmVzdWx0TGluayh0ZXN0UHJlZml4LCAnLWFj
dHVhbC5wbmcnLCAncG5nIHJlc3VsdCcpOworICAgIHRleHRSZXN1bHRMaW5rcyhwcmVmaXgpCisg
ICAgeworICAgICAgICBsZXQgaHRtbCA9IFRlc3RSZXN1bHRzQ29udHJvbGxlci5yZXN1bHRMaW5r
KHByZWZpeCwgJy1leHBlY3RlZC50eHQnLCAnZXhwZWN0ZWQnKSArCisgICAgICAgICAgICBUZXN0
UmVzdWx0c0NvbnRyb2xsZXIucmVzdWx0TGluayhwcmVmaXgsICctYWN0dWFsLnR4dCcsICdhY3R1
YWwnKSArCisgICAgICAgICAgICBUZXN0UmVzdWx0c0NvbnRyb2xsZXIucmVzdWx0TGluayhwcmVm
aXgsICctZGlmZi50eHQnLCAnZGlmZicpOwogCi0gICAgcmV0dXJuIHJvdzsKLX0KKyAgICAgICAg
aWYgKHRoaXMudGVzdFJlc3VsdHMuaGFzUHJldHR5UGF0Y2goKSkKKyAgICAgICAgICAgIGh0bWwg
Kz0gVGVzdFJlc3VsdHNDb250cm9sbGVyLnJlc3VsdExpbmsocHJlZml4LCAnLXByZXR0eS1kaWZm
Lmh0bWwnLCAncHJldHR5IGRpZmYnKTsKIAotZnVuY3Rpb24gZmxha2luZXNzRGFzaGJvYXJkVVJM
Rm9yVGVzdHModGVzdE9iamVjdHMpCi17Ci0gICAgdmFyIHRlc3RMaXN0ID0gIiI7Ci0gICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB0ZXN0T2JqZWN0cy5sZW5ndGg7ICsraSkgewotICAgICAgICB0ZXN0
TGlzdCArPSB0ZXN0T2JqZWN0c1tpXS5uYW1lOworICAgICAgICBpZiAodGhpcy50ZXN0UmVzdWx0
cy5oYXNXRGlmZigpKQorICAgICAgICAgICAgaHRtbCArPSBUZXN0UmVzdWx0c0NvbnRyb2xsZXIu
cmVzdWx0TGluayhwcmVmaXgsICctd2RpZmYuaHRtbCcsICd3ZGlmZicpOwogCi0gICAgICAgIGlm
IChpICE9IHRlc3RPYmplY3RzLmxlbmd0aCAtIDEpCi0gICAgICAgICAgICB0ZXN0TGlzdCArPSAi
LCI7CisgICAgICAgIHJldHVybiBodG1sOwogICAgIH0KIAotICAgIHJldHVybiAnaHR0cDovL3dl
YmtpdC10ZXN0LXJlc3VsdHMud2Via2l0Lm9yZy9kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9h
cmQuaHRtbCNzaG93QWxsUnVucz10cnVlJnRlc3RzPScgKyBlbmNvZGVVUklDb21wb25lbnQodGVz
dExpc3QpOwotfQorICAgIGZsYWtpbmVzc0Rhc2hib2FyZFVSTEZvclRlc3RzKHRlc3RPYmplY3Rz
KQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGp1c3QgbWFwIGFuZCBqb2luIGhlcmUuCisgICAg
ICAgIGxldCB0ZXN0TGlzdCA9ICcnOworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRlc3RP
YmplY3RzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB0ZXN0TGlzdCArPSB0ZXN0T2JqZWN0
c1tpXS5uYW1lOwogCi1mdW5jdGlvbiB0YWJsZVJvdyh0ZXN0T2JqZWN0KQoteyAgICAKLSAgICB2
YXIgcm93ID0gJzx0Ym9keScKLSAgICBpZiAoZ2xvYmFsU3RhdGUoKS5yZXN1bHRzLnVzZXNfZXhw
ZWN0YXRpb25zX2ZpbGUpCi0gICAgICAgIHJvdyArPSAnIGNsYXNzPSInICsgKHRlc3RPYmplY3Qu
aXNFeHBlY3RlZCA/ICdleHBlY3RlZCcgOiAnJykgKyAnIic7Ci0gICAgaWYgKHRlc3RPYmplY3Qu
cmVmdGVzdF90eXBlICYmIHRlc3RPYmplY3QucmVmdGVzdF90eXBlLmluZGV4T2YoJyE9JykgIT0g
LTEpCi0gICAgICAgIHJvdyArPSAnIG1pc21hdGNocmVmdGVzdD10cnVlJzsKLSAgICByb3cgKz0g
Jz48dHI+JzsKKyAgICAgICAgICAgIGlmIChpICE9IHRlc3RPYmplY3RzLmxlbmd0aCAtIDEpCisg
ICAgICAgICAgICAgICAgdGVzdExpc3QgKz0gJywnOworICAgICAgICB9CiAKLSAgICByb3cgKz0g
Jzx0ZD4nICsgdGVzdExpbmtXaXRoRXhwYW5kQnV0dG9uKHRlc3RPYmplY3QubmFtZSkgKyAnPC90
ZD4nOworICAgICAgICByZXR1cm4gJ2h0dHA6Ly93ZWJraXQtdGVzdC1yZXN1bHRzLndlYmtpdC5v
cmcvZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmh0bWwjc2hvd0FsbFJ1bnM9dHJ1ZSZ0
ZXN0cz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHRlc3RMaXN0KTsKKyAgICB9CiAKLSAgICB2YXIg
dGVzdFByZWZpeCA9IHN0cmlwRXh0ZW5zaW9uKHRlc3RPYmplY3QubmFtZSk7Ci0gICAgcm93ICs9
ICc8dGQ+JzsKLSAgICAKLSAgICB2YXIgYWN0dWFsID0gdGVzdE9iamVjdC5hY3R1YWw7Ci0gICAg
aWYgKGFjdHVhbC5pbmRleE9mKCdURVhUJykgIT0gLTEpIHsKLSAgICAgICAgZ2xvYmFsU3RhdGUo
KS5oYXNUZXh0RmFpbHVyZXMgPSB0cnVlOwotICAgICAgICByb3cgKz0gdGV4dFJlc3VsdExpbmtz
KHRlc3RQcmVmaXgpOworICAgIF91cGRhdGVQYWdlVGl0bGUoKQorICAgIHsKKyAgICAgICAgbGV0
IGRhdGVTdHJpbmcgPSB0aGlzLnRlc3RSZXN1bHRzLmRhdGUoKTsKKyAgICAgICAgbGV0IHRpdGxl
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGl0bGUnKTsKKyAgICAgICAgdGl0bGUudGV4dENv
bnRlbnQgPSAnTGF5b3V0IFRlc3QgUmVzdWx0cyBmcm9tICcgKyBkYXRlU3RyaW5nOworICAgICAg
ICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRpdGxlKTsKICAgICB9CiAgICAgCi0gICAgaWYg
KGFjdHVhbC5pbmRleE9mKCdBVURJTycpICE9IC0xKSB7Ci0gICAgICAgIHJvdyArPSByZXN1bHRM
aW5rKHRlc3RQcmVmaXgsICctZXhwZWN0ZWQud2F2JywgJ2V4cGVjdGVkIGF1ZGlvJyk7Ci0gICAg
ICAgIHJvdyArPSByZXN1bHRMaW5rKHRlc3RQcmVmaXgsICctYWN0dWFsLndhdicsICdhY3R1YWwg
YXVkaW8nKTsKLSAgICAgICAgcm93ICs9IHJlc3VsdExpbmsodGVzdFByZWZpeCwgJy1kaWZmLnR4
dCcsICd0ZXh0dWFsIGRpZmYnKTsKKyAgICAvLyBPcHRpb25zIGhhbmRsaW5nLiBGSVhNRTogbW92
ZSB0byBhIHNlcGFyYXRlIGNsYXNzPworICAgIHVwZGF0ZUFsbE9wdGlvbnMoKQorICAgIHsKKyAg
ICAgICAgVXRpbHMuZm9yRWFjaChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjb3B0aW9ucy1t
ZW51IGlucHV0JyksIGlucHV0ID0+IHsgaW5wdXQub25jaGFuZ2UoKSB9KTsKICAgICB9CiAKLSAg
ICBpZiAoYWN0dWFsLmluZGV4T2YoJ01JU1NJTkcnKSAhPSAtMSkgewotICAgICAgICBpZiAodGVz
dE9iamVjdC5pc19taXNzaW5nX2F1ZGlvKQotICAgICAgICAgICAgcm93ICs9IHJlc3VsdExpbmso
dGVzdFByZWZpeCwgJy1hY3R1YWwud2F2JywgJ2F1ZGlvIHJlc3VsdCcpOwotICAgICAgICBpZiAo
dGVzdE9iamVjdC5pc19taXNzaW5nX3RleHQpCi0gICAgICAgICAgICByb3cgKz0gcmVzdWx0TGlu
ayh0ZXN0UHJlZml4LCAnLWFjdHVhbC50eHQnLCAncmVzdWx0Jyk7CisgICAgdG9nZ2xlT3B0aW9u
c01lbnUoKQorICAgIHsKKyAgICAgICAgbGV0IG1lbnUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnb3B0aW9ucy1tZW51Jyk7CisgICAgICAgIG1lbnUuY2xhc3NOYW1lID0gKG1lbnUuY2xhc3NO
YW1lID09ICdoaWRkZW4tbWVudScpID8gJycgOiAnaGlkZGVuLW1lbnUnOwogICAgIH0KIAotICAg
IHZhciBhY3R1YWxUb2tlbnMgPSBhY3R1YWwuc3BsaXQoL1xzKy8pOwotICAgIHZhciBjZWxsID0g
aW1hZ2VSZXN1bHRzQ2VsbCh0ZXN0T2JqZWN0LCB0ZXN0UHJlZml4LCBhY3R1YWxUb2tlbnNbMF0p
OwotICAgIGlmICghY2VsbCAmJiBhY3R1YWxUb2tlbnMubGVuZ3RoID4gMSkKLSAgICAgICAgY2Vs
bCA9IGltYWdlUmVzdWx0c0NlbGwodGVzdE9iamVjdCwgJ3JldHJpZXMvJyArIHRlc3RQcmVmaXgs
IGFjdHVhbFRva2Vuc1sxXSk7CisgICAgaGFuZGxlVG9nZ2xlVXNlTmV3bGluZXMoKQorICAgIHsK
KyAgICAgICAgT3B0aW9uV3JpdGVyLnNhdmUoKTsKKyAgICAgICAgdGVzdE5hdmlnYXRvci51cGRh
dGVGbGFnZ2VkVGVzdHMoKTsKKyAgICB9CisKKyAgICBoYW5kbGVVbmV4cGVjdGVkUmVzdWx0c0No
YW5nZSgpCisgICAgeworICAgICAgICBPcHRpb25Xcml0ZXIuc2F2ZSgpOworICAgICAgICB0aGlz
Ll91cGRhdGVFeHBlY3RlZEZhaWx1cmVzKCk7CisgICAgfQogCi0gICAgcm93ICs9ICc8L3RkPjx0
ZD4nICsgY2VsbCArICc8L3RkPic7CisgICAgZXhwYW5kQWxsRXhwZWN0YXRpb25zKCkKKyAgICB7
CisgICAgICAgIGxldCBleHBhbmRMaW5rcyA9IHRoaXMuX3Zpc2libGVFeHBhbmRMaW5rcygpOwor
ICAgICAgICBmb3IgKGxldCBsaW5rIG9mIGV4cGFuZExpbmtzKQorICAgICAgICAgICAgVXRpbHMu
YXN5bmMobGluayA9PiB7IGNvbnRyb2xsZXIuZXhwYW5kRXhwZWN0YXRpb25zKGxpbmspIH0sIFsg
bGluayBdKTsKKyAgICB9CiAKLSAgICBpZiAoZ2xvYmFsU3RhdGUoKS5yZXN1bHRzLnVzZXNfZXhw
ZWN0YXRpb25zX2ZpbGUgfHwgYWN0dWFsLmluZGV4T2YoJyAnKSAhPSAtMSkKLSAgICAgICAgcm93
ICs9ICc8dGQ+JyArIGFjdHVhbCArICc8L3RkPic7CisgICAgY29sbGFwc2VBbGxFeHBlY3RhdGlv
bnMoKQorICAgIHsKKyAgICAgICAgbGV0IGV4cGFuZExpbmtzID0gdGhpcy5fdmlzaWJsZUV4cGFu
ZExpbmtzKCk7CisgICAgICAgIGZvciAobGV0IGxpbmsgb2YgZXhwYW5kTGlua3MpCisgICAgICAg
ICAgICBVdGlscy5hc3luYyhsaW5rID0+IHsgY29udHJvbGxlci5jb2xsYXBzZUV4cGVjdGF0aW9u
cyhsaW5rKSB9LCBbIGxpbmsgXSk7CisgICAgfQogCi0gICAgaWYgKGdsb2JhbFN0YXRlKCkucmVz
dWx0cy51c2VzX2V4cGVjdGF0aW9uc19maWxlKQotICAgICAgICByb3cgKz0gJzx0ZD4nICsgKGFj
dHVhbC5pbmRleE9mKCdNSVNTSU5HJykgPT0gLTEgPyB0ZXN0T2JqZWN0LmV4cGVjdGVkIDogJycp
ICsgJzwvdGQ+JzsKKyAgICBleHBhbmRFeHBlY3RhdGlvbnMoZXhwYW5kTGluaykKKyAgICB7Cisg
ICAgICAgIGxldCByb3cgPSBVdGlscy5wYXJlbnRPZlR5cGUoZXhwYW5kTGluaywgJ3RyJyk7Cisg
ICAgICAgIGxldCBwYXJlbnRUYm9keSA9IHJvdy5wYXJlbnROb2RlOworICAgICAgICBsZXQgZXhp
c3RpbmdSZXN1bHRzUm93ID0gcGFyZW50VGJvZHkucXVlcnlTZWxlY3RvcignLnJlc3VsdHMtcm93
Jyk7CisgICAgCisgICAgICAgIGNvbnN0IGVuRGFzaCA9ICdcdTIwMTMnOworICAgICAgICBleHBh
bmRMaW5rLnRleHRDb250ZW50ID0gZW5EYXNoOworICAgICAgICBpZiAoZXhpc3RpbmdSZXN1bHRz
Um93KSB7CisgICAgICAgICAgICB0aGlzLl91cGRhdGVFeHBhbmRlZFN0YXRlKGV4aXN0aW5nUmVz
dWx0c1JvdywgdHJ1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAKKyAg
ICAgICAgbGV0IG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CisgICAgICAg
IG5ld1Jvdy5jbGFzc05hbWUgPSAncmVzdWx0cy1yb3cnOworICAgICAgICBsZXQgbmV3Q2VsbCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CisgICAgICAgIG5ld0NlbGwuY29sU3BhbiA9
IHJvdy5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpLmxlbmd0aDsKKworICAgICAgICBsZXQgcmVzdWx0
TGlua3MgPSByb3cucXVlcnlTZWxlY3RvckFsbCgnLnJlc3VsdC1saW5rJyk7CisgICAgICAgIGxl
dCBoYXNUb2dnbGluZ0ltYWdlcyA9IGZhbHNlOworICAgICAgICBmb3IgKGxldCBsaW5rIG9mIHJl
c3VsdExpbmtzKSB7CisgICAgICAgICAgICBsZXQgcmVzdWx0OworICAgICAgICAgICAgaWYgKGxp
bmsudGV4dENvbnRlbnQgPT0gJ2ltYWdlcycpIHsKKyAgICAgICAgICAgICAgICBoYXNUb2dnbGlu
Z0ltYWdlcyA9IHRydWU7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gVGVzdFJlc3VsdHNDb250
cm9sbGVyLl90b2dnbGluZ0ltYWdlKGxpbmsuZ2V0QXR0cmlidXRlKCdkYXRhLXByZWZpeCcpKTsK
KyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRlc3RSZXN1bHRz
Q29udHJvbGxlci5fcmVzdWx0SWZyYW1lKGxpbmsuaHJlZik7CisKKyAgICAgICAgICAgIFV0aWxz
LmFwcGVuZEhUTUwobmV3Q2VsbCwgcmVzdWx0KTsgICAgCisgICAgICAgIH0KIAotICAgIHJvdyAr
PSAnPHRkPjxhIGhyZWY9IicgKyBmbGFraW5lc3NEYXNoYm9hcmRVUkxGb3JUZXN0cyhbdGVzdE9i
amVjdF0pICsgJyI+aGlzdG9yeTwvYT48L3RkPic7CisgICAgICAgIG5ld1Jvdy5hcHBlbmRDaGls
ZChuZXdDZWxsKTsKKyAgICAgICAgcGFyZW50VGJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKIAot
ICAgIHJvdyArPSAnPC90cj48L3Rib2R5Pic7Ci0gICAgcmV0dXJuIHJvdzsKLX0KKyAgICAgICAg
dGhpcy5fdXBkYXRlRXhwYW5kZWRTdGF0ZShuZXdSb3csIHRydWUpOwogCi1mdW5jdGlvbiBmb3JF
YWNoVGVzdChoYW5kbGVyLCBvcHRfdHJlZSwgb3B0X3ByZWZpeCkKLXsKLSAgICB2YXIgdHJlZSA9
IG9wdF90cmVlIHx8IGdsb2JhbFN0YXRlKCkucmVzdWx0cy50ZXN0czsKLSAgICB2YXIgcHJlZml4
ID0gb3B0X3ByZWZpeCB8fCAnJzsKLQotICAgIGZvciAodmFyIGtleSBpbiB0cmVlKSB7Ci0gICAg
ICAgIHZhciBuZXdQcmVmaXggPSBwcmVmaXggPyAocHJlZml4ICsgJy8nICsga2V5KSA6IGtleTsK
LSAgICAgICAgaWYgKCdhY3R1YWwnIGluIHRyZWVba2V5XSkgewotICAgICAgICAgICAgdmFyIHRl
c3RPYmplY3QgPSB0cmVlW2tleV07Ci0gICAgICAgICAgICB0ZXN0T2JqZWN0Lm5hbWUgPSBuZXdQ
cmVmaXg7Ci0gICAgICAgICAgICBoYW5kbGVyKHRlc3RPYmplY3QpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIGZvckVhY2hUZXN0KGhhbmRsZXIsIHRyZWVba2V5XSwgbmV3UHJlZml4KTsK
KyAgICAgICAgdGhpcy5fdXBkYXRlSW1hZ2VUb2dnbGluZ1RpbWVyKCk7CiAgICAgfQotfQogCi1m
dW5jdGlvbiBmb3JPdGhlckNyYXNoZXMoKQotewotICAgIHZhciB0cmVlID0gZ2xvYmFsU3RhdGUo
KS5yZXN1bHRzLm90aGVyX2NyYXNoZXM7Ci0gICAgZm9yICh2YXIga2V5IGluIHRyZWUpIHsKLSAg
ICAgICAgICAgIHZhciB0ZXN0T2JqZWN0ID0gdHJlZVtrZXldOwotICAgICAgICAgICAgdGVzdE9i
amVjdC5uYW1lID0ga2V5OwotICAgICAgICAgICAgZ2xvYmFsU3RhdGUoKS5jcmFzaE90aGVyLnB1
c2godGVzdE9iamVjdCk7CisgICAgY29sbGFwc2VFeHBlY3RhdGlvbnMoZXhwYW5kTGluaykKKyAg
ICB7CisgICAgICAgIGV4cGFuZExpbmsudGV4dENvbnRlbnQgPSAnKyc7CisgICAgICAgIGxldCBl
eGlzdGluZ1Jlc3VsdHNSb3cgPSBVdGlscy5wYXJlbnRPZlR5cGUoZXhwYW5kTGluaywgJ3Rib2R5
JykucXVlcnlTZWxlY3RvcignLnJlc3VsdHMtcm93Jyk7CisgICAgICAgIGlmIChleGlzdGluZ1Jl
c3VsdHNSb3cpCisgICAgICAgICAgICB0aGlzLl91cGRhdGVFeHBhbmRlZFN0YXRlKGV4aXN0aW5n
UmVzdWx0c1JvdywgZmFsc2UpOwogICAgIH0KLX0KIAotZnVuY3Rpb24gaGFzVW5leHBlY3RlZCh0
ZXN0cykKLXsKLSAgICByZXR1cm4gdGVzdHMuc29tZShmdW5jdGlvbiAodGVzdCkgeyByZXR1cm4g
IXRlc3QuaXNFeHBlY3RlZDsgfSk7Ci19CisgICAgdG9nZ2xlRXhwZWN0YXRpb25zKGVsZW1lbnQp
CisgICAgeworICAgICAgICBsZXQgZXhwYW5kTGluayA9IGVsZW1lbnQ7CisgICAgICAgIGlmIChl
eHBhbmRMaW5rLmNsYXNzTmFtZSAhPSAnZXhwYW5kLWJ1dHRvbi10ZXh0JykKKyAgICAgICAgICAg
IGV4cGFuZExpbmsgPSBleHBhbmRMaW5rLnF1ZXJ5U2VsZWN0b3IoJy5leHBhbmQtYnV0dG9uLXRl
eHQnKTsKIAotZnVuY3Rpb24gdXBkYXRlVGVzdGxpc3RDb3VudHMoKQotewotICAgIGZvckVhY2go
ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRlc3QtbGlzdC1jb3VudCcpLCBmdW5jdGlvbihj
b3VudCkgewotICAgICAgICB2YXIgY29udGFpbmVyID0gcGFyZW50T2ZUeXBlKGNvdW50LCAnZGl2
Jyk7Ci0gICAgICAgIHZhciB0ZXN0Q29udGFpbmVyczsKLSAgICAgICAgaWYgKG9ubHlTaG93VW5l
eHBlY3RlZEZhaWx1cmVzKCkpCi0gICAgICAgICAgICB0ZXN0Q29udGFpbmVycyA9IGNvbnRhaW5l
ci5xdWVyeVNlbGVjdG9yQWxsKCd0Ym9keTpub3QoLmV4cGVjdGVkKScpOworICAgICAgICBpZiAo
ZXhwYW5kTGluay50ZXh0Q29udGVudCA9PSAnKycpCisgICAgICAgICAgICB0aGlzLmV4cGFuZEV4
cGVjdGF0aW9ucyhleHBhbmRMaW5rKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGVzdENv
bnRhaW5lcnMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgndGJvZHknKTsKLQotICAgICAg
ICBjb3VudC50ZXh0Q29udGVudCA9IHRlc3RDb250YWluZXJzLmxlbmd0aDsKLSAgICB9KQotfQor
ICAgICAgICAgICAgdGhpcy5jb2xsYXBzZUV4cGVjdGF0aW9ucyhleHBhbmRMaW5rKTsKKyAgICB9
CiAKLWZ1bmN0aW9uIGZsYWdBbGwoaGVhZGVyTGluaykKLXsKLSAgICB2YXIgdGVzdHMgPSB2aXNp
YmxlVGVzdHMocGFyZW50T2ZUeXBlKGhlYWRlckxpbmssICdkaXYnKSk7Ci0gICAgZm9yRWFjaCh0
ZXN0cywgZnVuY3Rpb24odGVzdHMpIHsKLSAgICAgICAgdmFyIHNob3VsZEZsYWcgPSB0cnVlOwot
ICAgICAgICBUZXN0TmF2aWdhdG9yLmZsYWdUZXN0KHRlc3RzLCBzaG91bGRGbGFnKTsKLSAgICB9
KQotfQorICAgIF91cGRhdGVFeHBhbmRlZFN0YXRlKHJvdywgaXNFeHBhbmRlZCkKKyAgICB7Cisg
ICAgICAgIHJvdy5zZXRBdHRyaWJ1dGUoJ2RhdGEtZXhwYW5kZWQnLCBpc0V4cGFuZGVkKTsKKyAg
ICAgICAgdGhpcy5fdXBkYXRlSW1hZ2VUb2dnbGluZ1RpbWVyKCk7CisgICAgfQogCi1mdW5jdGlv
biB0ZXN0TGlzdEhlYWRlckh0bWwoaGVhZGVyKQotewotICAgIHJldHVybiAnPGgxPicgKyBoZWFk
ZXIgKyAnICg8c3BhbiBjbGFzcz10ZXN0LWxpc3QtY291bnQ+PC9zcGFuPik6IDxhIGhyZWY9IiMi
IGNsYXNzPWZsYWctYWxsIG9uY2xpY2s9ImZsYWdBbGwodGhpcykiPmZsYWcgYWxsPC9hPjwvaDE+
JzsKLX0KKyAgICBoYW5kbGVUb2dnbGVJbWFnZXNDaGFuZ2UoKQorICAgIHsKKyAgICAgICAgT3B0
aW9uV3JpdGVyLnNhdmUoKTsKKyAgICAgICAgdGhpcy5fdXBkYXRlVG9nZ2xpbmdJbWFnZXMoKTsK
KyAgICB9CiAKLWZ1bmN0aW9uIHRlc3RMaXN0KHRlc3RzLCBoZWFkZXIsIHRhYmxlSWQpCi17Ci0g
ICAgdGVzdHMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBh
cmUoYi5uYW1lKSB9KTsKLQotICAgIHZhciBodG1sID0gJzxkaXYnICsgKCghaGFzVW5leHBlY3Rl
ZCh0ZXN0cykgJiYgdGFibGVJZCAhPSAnc3RkZXJyLXRhYmxlJykgPyAnIGNsYXNzPWV4cGVjdGVk
JyA6ICcnKSArICcgaWQ9JyArIHRhYmxlSWQgKyAnPicgKwotICAgICAgICB0ZXN0TGlzdEhlYWRl
ckh0bWwoaGVhZGVyKSArICc8dGFibGU+JzsKLQotICAgIC8vIEZJWE1FOiBhZGQgdGhlIGV4cGVj
dGVkIGZhaWx1cmUgY29sdW1uIGZvciBhbGwgdGhlIHRlc3QgbGlzdHMgaWYgZ2xvYmFsU3RhdGUo
KS5yZXN1bHRzLnVzZXNfZXhwZWN0YXRpb25zX2ZpbGUKLSAgICBpZiAodGFibGVJZCA9PSAncGFz
c2VzLXRhYmxlJykKLSAgICAgICAgaHRtbCArPSAnPHRoZWFkPjx0aD50ZXN0PC90aD48dGg+ZXhw
ZWN0ZWQgZmFpbHVyZTwvdGg+PC90aGVhZD4nOwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0
ZXN0cy5sZW5ndGg7IGkrKykgewotICAgICAgICB2YXIgdGVzdE9iamVjdCA9IHRlc3RzW2ldOwot
ICAgICAgICB2YXIgdGVzdCA9IHRlc3RPYmplY3QubmFtZTsKLSAgICAgICAgaHRtbCArPSAnPHRi
b2R5JzsKLSAgICAgICAgaWYgKGdsb2JhbFN0YXRlKCkucmVzdWx0cy51c2VzX2V4cGVjdGF0aW9u
c19maWxlKQotICAgICAgICAgICAgaHRtbCArPSAnIGNsYXNzPSInICsgKCh0ZXN0T2JqZWN0Lmlz
RXhwZWN0ZWQgJiYgdGFibGVJZCAhPSAnc3RkZXJyLXRhYmxlJykgPyAnZXhwZWN0ZWQnIDogJycp
ICsgJyInOwotICAgICAgICBodG1sICs9ICc+PHRyPjx0ZD4nOwotICAgICAgICBpZiAodGFibGVJ
ZCA9PSAncGFzc2VzLXRhYmxlJykKLSAgICAgICAgICAgIGh0bWwgKz0gdGVzdExpbmsodGVzdCk7
Ci0gICAgICAgIGVsc2UgaWYgKHRhYmxlSWQgPT0gJ290aGVyLWNyYXNoLXRlc3RzLXRhYmxlJykK
LSAgICAgICAgICAgIGh0bWwgKz0gdGVzdFdpdGhFeHBhbmRCdXR0b24odGVzdCk7CisgICAgX3Zp
c2libGVFeHBhbmRMaW5rcygpCisgICAgeworICAgICAgICBpZiAodGhpcy5vbmx5U2hvd1VuZXhw
ZWN0ZWRGYWlsdXJlcygpKQorICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0
b3JBbGwoJ3Rib2R5Om5vdCguZXhwZWN0ZWQpIC5leHBhbmQtYnV0dG9uLXRleHQnKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgaHRtbCArPSB0ZXN0TGlua1dpdGhFeHBhbmRCdXR0b24odGVz
dCk7Ci0KLSAgICAgICAgaHRtbCArPSAnPC90ZD48dGQ+JzsKLQotICAgICAgICBpZiAodGFibGVJ
ZCA9PSAnc3RkZXJyLXRhYmxlJykKLSAgICAgICAgICAgIGh0bWwgKz0gcmVzdWx0TGluayhzdHJp
cEV4dGVuc2lvbih0ZXN0KSwgJy1zdGRlcnIudHh0JywgJ3N0ZGVycicpOwotICAgICAgICBlbHNl
IGlmICh0YWJsZUlkID09ICdwYXNzZXMtdGFibGUnKQotICAgICAgICAgICAgaHRtbCArPSB0ZXN0
T2JqZWN0LmV4cGVjdGVkOwotICAgICAgICBlbHNlIGlmICh0YWJsZUlkID09ICdvdGhlci1jcmFz
aC10ZXN0cy10YWJsZScpIAotICAgICAgICAgICAgaHRtbCArPSByZXN1bHRMaW5rKHN0cmlwRXh0
ZW5zaW9uKHRlc3QpLCAnLWNyYXNoLWxvZy50eHQnLCAnY3Jhc2ggbG9nJyk7Ci0gICAgICAgIGVs
c2UgaWYgKHRhYmxlSWQgPT0gJ2NyYXNoLXRlc3RzLXRhYmxlJykgewotICAgICAgICAgICAgaHRt
bCArPSByZXN1bHRMaW5rKHN0cmlwRXh0ZW5zaW9uKHRlc3QpLCAnLWNyYXNoLWxvZy50eHQnLCAn
Y3Jhc2ggbG9nJyk7Ci0gICAgICAgICAgICBodG1sICs9IHJlc3VsdExpbmsoc3RyaXBFeHRlbnNp
b24odGVzdCksICctc2FtcGxlLnR4dCcsICdzYW1wbGUnKTsKLSAgICAgICAgfSBlbHNlIGlmICh0
YWJsZUlkID09ICd0aW1lb3V0LXRlc3RzLXRhYmxlJykgewotICAgICAgICAgICAgLy8gRklYTUU6
IG9ubHkgaW5jbHVkZSB0aW1lb3V0IGFjdHVhbC9kaWZmIHJlc3VsdHMgaGVyZSBpZiB3ZSBhY3R1
YWxseSBzcGl0IG91dCByZXN1bHRzIGZvciB0aW1lb3V0IHRlc3RzLgotICAgICAgICAgICAgaHRt
bCArPSB0ZXh0UmVzdWx0TGlua3Moc3RyaXBFeHRlbnNpb24odGVzdCkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHRhYmxlSWQgIT0gJ290aGVyLWNyYXNoLXRlc3RzLXRhYmxlJykKLSAgICAg
ICAgICAgIGh0bWwgKz0gJzwvdGQ+PHRkPjxhIGhyZWY9IicgKyBmbGFraW5lc3NEYXNoYm9hcmRV
UkxGb3JUZXN0cyhbdGVzdE9iamVjdF0pICsgJyI+aGlzdG9yeTwvYT48L3RkPic7Ci0KLSAgICAg
ICAgaHRtbCArPSAnPC90cj48L3Rib2R5Pic7CisgICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQu
cXVlcnlTZWxlY3RvckFsbCgnLmV4cGFuZC1idXR0b24tdGV4dCcpOwogICAgIH0KLSAgICBodG1s
ICs9ICc8L3RhYmxlPjwvZGl2Pic7Ci0gICAgcmV0dXJuIGh0bWw7Ci19CiAKLWZ1bmN0aW9uIHRv
QXJyYXkobm9kZUxpc3QpCi17Ci0gICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxs
KG5vZGVMaXN0KTsKLX0KKyAgICBzdGF0aWMgX3RvZ2dsaW5nSW1hZ2UocHJlZml4KQorICAgIHsK
KyAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPXJlc3VsdC1jb250YWluZXI+PGRpdiBjbGFzcz0i
bGFiZWwgaW1hZ2VUZXh0Ij48L2Rpdj48aW1nIGNsYXNzPWFuaW1hdGVkSW1hZ2UgZGF0YS1wcmVm
aXg9IicgKyBwcmVmaXggKyAnIj48L2ltZz48L2Rpdj4nOworICAgIH0KIAotZnVuY3Rpb24gdHJp
bShzdHJpbmcpCi17Ci0gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9eW1xzXHhhMF0rfFtcc1x4
YTBdKyQvZywgJycpOwotfQorICAgIF91cGRhdGVUb2dnbGluZ0ltYWdlcygpCisgICAgeworICAg
ICAgICB0aGlzLnNob3VsZFRvZ2dsZUltYWdlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0
b2dnbGUtaW1hZ2VzJykuY2hlY2tlZDsKIAotLy8gSnVzdCBhIG5hbWVzcGFjZSBmb3IgY29kZSBt
YW5hZ2VtZW50LgotdmFyIFRhYmxlU29ydGVyID0ge307CisgICAgICAgIC8vIEZJWE1FOiB0aGlz
IGlzIGFsbCBwcmV0dHkgY29uZnVzaW5nLiBTaW1wbGlmeS4KKyAgICAgICAgaWYgKHRoaXMuc2hv
dWxkVG9nZ2xlSW1hZ2VzKSB7CisgICAgICAgICAgICBVdGlscy5mb3JFYWNoKGRvY3VtZW50LnF1
ZXJ5U2VsZWN0b3JBbGwoJ3RhYmxlOm5vdCgjbWlzc2luZy10YWJsZSkgdGJvZHk6bm90KFttaXNt
YXRjaHJlZnRlc3RdKSBhW2hyZWYkPSIucG5nIl0nKSwgVGVzdFJlc3VsdHNDb250cm9sbGVyLl9j
b252ZXJ0VG9Ub2dnbGluZ0hhbmRsZXIoZnVuY3Rpb24ocHJlZml4KSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIFRlc3RSZXN1bHRzQ29udHJvbGxlci5yZXN1bHRMaW5rKHByZWZpeCwgJy1kaWZm
cy5odG1sJywgJ2ltYWdlcycpOworICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgVXRpbHMu
Zm9yRWFjaChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCd0YWJsZTpub3QoI21pc3NpbmctdGFi
bGUpIHRib2R5Om5vdChbbWlzbWF0Y2hyZWZ0ZXN0XSkgaW1nW3NyYyQ9Ii5wbmciXScpLCBUZXN0
UmVzdWx0c0NvbnRyb2xsZXIuX2NvbnZlcnRUb1RvZ2dsaW5nSGFuZGxlcihUZXN0UmVzdWx0c0Nv
bnRyb2xsZXIuX3RvZ2dsaW5nSW1hZ2UpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IFV0aWxzLmZvckVhY2goZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYVtocmVmJD0iLWRpZmZz
Lmh0bWwiXScpLCBlbGVtZW50ID0+IHsKKyAgICAgICAgICAgICAgICBUZXN0UmVzdWx0c0NvbnRy
b2xsZXIuX2NvbnZlcnRUb05vblRvZ2dsaW5nSGFuZGxlcihlbGVtZW50KTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgVXRpbHMuZm9yRWFjaChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxs
KCcuYW5pbWF0ZWRJbWFnZScpLCBUZXN0UmVzdWx0c0NvbnRyb2xsZXIuX2NvbnZlcnRUb05vblRv
Z2dsaW5nSGFuZGxlcihmdW5jdGlvbiAoYWJzb2x1dGVQcmVmaXgsIHN1ZmZpeCkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBUZXN0UmVzdWx0c0NvbnRyb2xsZXIuX3Jlc3VsdElmcmFtZShhYnNv
bHV0ZVByZWZpeCArIHN1ZmZpeCk7CisgICAgICAgICAgICB9KSk7CisgICAgICAgIH0KIAotVGFi
bGVTb3J0ZXIuX2ZvcndhcmRBcnJvdyA9ICc8c3ZnIHN0eWxlPSJ3aWR0aDoxMHB4O2hlaWdodDox
MHB4Ij48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsMTAiIHN0eWxlPSJmaWxsOiNjY2MiPjwv
c3ZnPic7CisgICAgICAgIHRoaXMuX3VwZGF0ZUltYWdlVG9nZ2xpbmdUaW1lcigpOworICAgIH0K
IAotVGFibGVTb3J0ZXIuX2JhY2t3YXJkQXJyb3cgPSAnPHN2ZyBzdHlsZT0id2lkdGg6MTBweDto
ZWlnaHQ6MTBweCI+PHBvbHlnb24gcG9pbnRzPSIwLDEwIDEwLDEwIDUsMCIgc3R5bGU9ImZpbGw6
I2NjYyI+PC9zdmc+JzsKKyAgICBfdXBkYXRlRXhwZWN0ZWRGYWlsdXJlcygpCisgICAgeworICAg
ICAgICAvLyBHcm9zcyB0byBkbyB0aGlzIGJ5IHNldHRpbmcgc3R5bGVzaGVldCB0ZXh0LiBVc2Ug
YSBib2R5IGNsYXNzIQorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndW5leHBlY3Rl
ZC1zdHlsZScpLnRleHRDb250ZW50ID0gdGhpcy5vbmx5U2hvd1VuZXhwZWN0ZWRGYWlsdXJlcygp
ID8gJy5leHBlY3RlZCB7IGRpc3BsYXk6IG5vbmU7IH0nIDogJyc7CiAKLVRhYmxlU29ydGVyLl9z
b3J0ZWRDb250ZW50cyA9IGZ1bmN0aW9uKGhlYWRlciwgYXJyb3cpCi17Ci0gICAgcmV0dXJuIGFy
cm93ICsgJyAnICsgdHJpbShoZWFkZXIudGV4dENvbnRlbnQpICsgJyAnICsgYXJyb3c7Ci19Cisg
ICAgICAgIHRoaXMudXBkYXRlVGVzdGxpc3RDb3VudHMoKTsKKyAgICAgICAgdGVzdE5hdmlnYXRv
ci5vbmx5U2hvd1VuZXhwZWN0ZWRGYWlsdXJlc0NoYW5nZWQoKTsKKyAgICB9CiAKLVRhYmxlU29y
dGVyLl91cGRhdGVIZWFkZXJDbGFzc05hbWVzID0gZnVuY3Rpb24obmV3SGVhZGVyKQotewotICAg
IHZhciBzb3J0SGVhZGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNvcnRIZWFkZXInKTsK
LSAgICBpZiAoc29ydEhlYWRlcikgewotICAgICAgICBpZiAoc29ydEhlYWRlciA9PSBuZXdIZWFk
ZXIpIHsKLSAgICAgICAgICAgIHZhciBpc0FscmVhZHlSZXZlcnNlZCA9IHNvcnRIZWFkZXIuY2xh
c3NMaXN0LmNvbnRhaW5zKCdyZXZlcnNlZCcpOwotICAgICAgICAgICAgaWYgKGlzQWxyZWFkeVJl
dmVyc2VkKQotICAgICAgICAgICAgICAgIHNvcnRIZWFkZXIuY2xhc3NMaXN0LnJlbW92ZSgncmV2
ZXJzZWQnKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzb3J0SGVhZGVyLmNs
YXNzTGlzdC5hZGQoJ3JldmVyc2VkJyk7CisgICAgc3RhdGljIF9yZXN1bHRJZnJhbWUoc3JjKQor
ICAgIHsKKyAgICAgICAgLy8gRklYTUU6IHVzZSBhdWRpbyB0YWdzIGZvciBBVURJTyB0ZXN0cz8K
KyAgICAgICAgbGV0IGxheW91dFRlc3RzSW5kZXggPSBzcmMuaW5kZXhPZignTGF5b3V0VGVzdHMn
KTsKKyAgICAgICAgbGV0IG5hbWU7CisgICAgICAgIGlmIChsYXlvdXRUZXN0c0luZGV4ICE9IC0x
KSB7CisgICAgICAgICAgICBsZXQgaGFzVHJhYyA9IHNyYy5pbmRleE9mKCd0cmFjLndlYmtpdC5v
cmcnKSAhPSAtMTsKKyAgICAgICAgICAgIGxldCBwcmVmaXggPSBoYXNUcmFjID8gJ3RyYWMud2Vi
a2l0Lm9yZy8uLi4vJyA6ICcnOworICAgICAgICAgICAgbmFtZSA9IHByZWZpeCArIHNyYy5zdWJz
dHJpbmcobGF5b3V0VGVzdHNJbmRleCArICdMYXlvdXRUZXN0cy8nLmxlbmd0aCk7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBzb3J0SGVhZGVyLnRleHRDb250ZW50ID0gc29ydEhlYWRl
ci50ZXh0Q29udGVudDsKLSAgICAgICAgICAgIHNvcnRIZWFkZXIuY2xhc3NMaXN0LnJlbW92ZSgn
c29ydEhlYWRlcicpOwotICAgICAgICAgICAgc29ydEhlYWRlci5jbGFzc0xpc3QucmVtb3ZlKCdy
ZXZlcnNlZCcpOworICAgICAgICAgICAgbGV0IGxhc3REYXNoSW5kZXggPSBzcmMubGFzdEluZGV4
T2YoJy1wcmV0dHknKTsKKyAgICAgICAgICAgIGlmIChsYXN0RGFzaEluZGV4ID09IC0xKQorICAg
ICAgICAgICAgICAgIGxhc3REYXNoSW5kZXggPSBzcmMubGFzdEluZGV4T2YoJy0nKTsKKyAgICAg
ICAgICAgIG5hbWUgPSBzcmMuc3Vic3RyaW5nKGxhc3REYXNoSW5kZXggKyAxKTsKICAgICAgICAg
fQotICAgIH0KIAotICAgIG5ld0hlYWRlci5jbGFzc0xpc3QuYWRkKCdzb3J0SGVhZGVyJyk7Ci19
CisgICAgICAgIGxldCB0YWdOYW1lID0gKHNyYy5sYXN0SW5kZXhPZignLnBuZycpID09IC0xKSA/
ICdpZnJhbWUnIDogJ2ltZyc7CiAKLVRhYmxlU29ydGVyLl90ZXh0Q29udGVudCA9IGZ1bmN0aW9u
KHRib2R5Um93LCBjb2x1bW4pCi17Ci0gICAgcmV0dXJuIHRib2R5Um93LnF1ZXJ5U2VsZWN0b3JB
bGwoJ3RkJylbY29sdW1uXS50ZXh0Q29udGVudDsKLX0KKyAgICAgICAgaWYgKHRhZ05hbWUgIT0g
J2ltZycpCisgICAgICAgICAgICBzcmMgKz0gJz9mb3JtYXQ9dHh0JzsKKyAgICAgICAgcmV0dXJu
ICc8ZGl2IGNsYXNzPXJlc3VsdC1jb250YWluZXI+PGRpdiBjbGFzcz1sYWJlbD4nICsgbmFtZSAr
ICc8L2Rpdj48JyArIHRhZ05hbWUgKyAnIHNyYz0iJyArIHNyYyArICciPjwvJyArIHRhZ05hbWUg
KyAnPjwvZGl2Pic7CisgICAgfQogCi1UYWJsZVNvcnRlci5fc29ydFJvd3MgPSBmdW5jdGlvbihu
ZXdIZWFkZXIsIHJldmVyc2VkKQotewotICAgIHZhciB0ZXN0c1RhYmxlID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3Jlc3VsdHMtdGFibGUnKTsKLSAgICB2YXIgaGVhZGVycyA9IHRvQXJyYXko
dGVzdHNUYWJsZS5xdWVyeVNlbGVjdG9yQWxsKCd0aCcpKTsKLSAgICB2YXIgc29ydENvbHVtbiA9
IGhlYWRlcnMuaW5kZXhPZihuZXdIZWFkZXIpOwotCi0gICAgdmFyIHJvd3MgPSB0b0FycmF5KHRl
c3RzVGFibGUucXVlcnlTZWxlY3RvckFsbCgndGJvZHknKSk7CiAKLSAgICByb3dzLnNvcnQoZnVu
Y3Rpb24oYSwgYikgewotICAgICAgICAvLyBPbmx5IG5lZWQgdG8gc3VwcG9ydCBsZXhpY29ncmFw
aGljIHNvcnQgZm9yIG5vdy4KLSAgICAgICAgdmFyIGFUZXh0ID0gVGFibGVTb3J0ZXIuX3RleHRD
b250ZW50KGEsIHNvcnRDb2x1bW4pOwotICAgICAgICB2YXIgYlRleHQgPSBUYWJsZVNvcnRlci5f
dGV4dENvbnRlbnQoYiwgc29ydENvbHVtbik7Ci0gICAgICAgIAotICAgICAgICAvLyBGb3J3YXJk
IHNvcnQgZXF1YWwgdmFsdWVzIGJ5IHRlc3QgbmFtZS4KLSAgICAgICAgaWYgKHNvcnRDb2x1bW4g
JiYgYVRleHQgPT0gYlRleHQpIHsKLSAgICAgICAgICAgIHZhciBhVGVzdE5hbWUgPSBUYWJsZVNv
cnRlci5fdGV4dENvbnRlbnQoYSwgMCk7Ci0gICAgICAgICAgICB2YXIgYlRlc3ROYW1lID0gVGFi
bGVTb3J0ZXIuX3RleHRDb250ZW50KGIsIDApOwotICAgICAgICAgICAgaWYgKGFUZXN0TmFtZSA9
PSBiVGVzdE5hbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICByZXR1
cm4gYVRlc3ROYW1lIDwgYlRlc3ROYW1lID8gLTEgOiAxOworICAgIHN0YXRpYyBfdG9nZ2xlSW1h
Z2VzKCkKKyAgICB7CisgICAgICAgIGxldCBpbWFnZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9y
QWxsKCcuYW5pbWF0ZWRJbWFnZScpOworICAgICAgICBsZXQgaW1hZ2VUZXh0cyA9IGRvY3VtZW50
LnF1ZXJ5U2VsZWN0b3JBbGwoJy5pbWFnZVRleHQnKTsKKyAgICAgICAgZm9yIChsZXQgaSA9IDAs
IGxlbiA9IGltYWdlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgbGV0IGlt
YWdlID0gaW1hZ2VzW2ldOworICAgICAgICAgICAgbGV0IHRleHQgPSBpbWFnZVRleHRzW2ldOwor
ICAgICAgICAgICAgaWYgKHRleHQudGV4dENvbnRlbnQgPT0gJ0V4cGVjdGVkIEltYWdlJykgewor
ICAgICAgICAgICAgICAgIHRleHQudGV4dENvbnRlbnQgPSAnQWN0dWFsIEltYWdlJzsKKyAgICAg
ICAgICAgICAgICBpbWFnZS5zcmMgPSBpbWFnZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcHJlZml4Jykg
KyAnLWFjdHVhbC5wbmcnOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0
ZXh0LnRleHRDb250ZW50ID0gJ0V4cGVjdGVkIEltYWdlJzsKKyAgICAgICAgICAgICAgICBpbWFn
ZS5zcmMgPSBpbWFnZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcHJlZml4JykgKyAnLWV4cGVjdGVkLnBu
Zyc7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgaWYgKHJldmVy
c2VkKQotICAgICAgICAgICAgcmV0dXJuIGFUZXh0IDwgYlRleHQgPyAxIDogLTE7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBhVGV4dCA8IGJUZXh0ID8gLTEgOiAxOwotICAgIH0p
OwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKQotICAgICAgICB0
ZXN0c1RhYmxlLmFwcGVuZENoaWxkKHJvd3NbaV0pOwotfQotCi1UYWJsZVNvcnRlci5zb3J0Q29s
dW1uID0gZnVuY3Rpb24oY29sdW1uTnVtYmVyKQotewotICAgIHZhciBuZXdIZWFkZXIgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0cy10YWJsZScpLnF1ZXJ5U2VsZWN0b3JBbGwoJ3Ro
JylbY29sdW1uTnVtYmVyXTsKLSAgICBUYWJsZVNvcnRlci5fc29ydChuZXdIZWFkZXIpOwotfQot
Ci1UYWJsZVNvcnRlci5oYW5kbGVDbGljayA9IGZ1bmN0aW9uKGUpCi17Ci0gICAgdmFyIG5ld0hl
YWRlciA9IGUudGFyZ2V0OwotICAgIGlmIChuZXdIZWFkZXIubG9jYWxOYW1lICE9ICd0aCcpCi0g
ICAgICAgIHJldHVybjsKLSAgICBUYWJsZVNvcnRlci5fc29ydChuZXdIZWFkZXIpOwotfQorICAg
IF91cGRhdGVJbWFnZVRvZ2dsaW5nVGltZXIoKQorICAgIHsKKyAgICAgICAgbGV0IGhhc1Zpc2li
bGVBbmltYXRlZEltYWdlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnJlc3VsdHMtcm93W2Rh
dGEtZXhwYW5kZWQ9InRydWUiXSAuYW5pbWF0ZWRJbWFnZScpOworICAgICAgICBpZiAoIWhhc1Zp
c2libGVBbmltYXRlZEltYWdlKSB7CisgICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX3Rv
Z2dsaW5nSW1hZ2VJbnRlcnZhbCk7CisgICAgICAgICAgICB0aGlzLl90b2dnbGluZ0ltYWdlSW50
ZXJ2YWwgPSBudWxsOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLVRhYmxlU29y
dGVyLl9zb3J0ID0gZnVuY3Rpb24obmV3SGVhZGVyKQotewotICAgIFRhYmxlU29ydGVyLl91cGRh
dGVIZWFkZXJDbGFzc05hbWVzKG5ld0hlYWRlcik7CisgICAgICAgIGlmICghdGhpcy5fdG9nZ2xp
bmdJbWFnZUludGVydmFsKSB7CisgICAgICAgICAgICBUZXN0UmVzdWx0c0NvbnRyb2xsZXIuX3Rv
Z2dsZUltYWdlcygpOworICAgICAgICAgICAgdGhpcy5fdG9nZ2xpbmdJbWFnZUludGVydmFsID0g
c2V0SW50ZXJ2YWwoVGVzdFJlc3VsdHNDb250cm9sbGVyLl90b2dnbGVJbWFnZXMsIDIwMDApOwor
ICAgICAgICB9CisgICAgfQogICAgIAotICAgIHZhciByZXZlcnNlZCA9IG5ld0hlYWRlci5jbGFz
c0xpc3QuY29udGFpbnMoJ3JldmVyc2VkJyk7Ci0gICAgdmFyIHNvcnRBcnJvdyA9IHJldmVyc2Vk
ID8gVGFibGVTb3J0ZXIuX2JhY2t3YXJkQXJyb3cgOiBUYWJsZVNvcnRlci5fZm9yd2FyZEFycm93
OwotICAgIG5ld0hlYWRlci5pbm5lckhUTUwgPSBUYWJsZVNvcnRlci5fc29ydGVkQ29udGVudHMo
bmV3SGVhZGVyLCBzb3J0QXJyb3cpOworICAgIHN0YXRpYyBfZ2V0UmVzdWx0Q29udGFpbmVyKG5v
ZGUpCisgICAgeworICAgICAgICByZXR1cm4gKG5vZGUudGFnTmFtZSA9PSAnSU1HJykgPyBVdGls
cy5wYXJlbnRPZlR5cGUobm9kZSwgJy5yZXN1bHQtY29udGFpbmVyJykgOiBub2RlOworICAgIH0K
KworICAgIHN0YXRpYyBfY29udmVydFRvVG9nZ2xpbmdIYW5kbGVyKHRvZ2dsaW5nSW1hZ2VGdW5j
dGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAg
ICBsZXQgdXJsID0gKG5vZGUudGFnTmFtZSA9PSAnSU1HJykgPyBub2RlLnNyYyA6IG5vZGUuaHJl
ZjsKKyAgICAgICAgICAgIGlmICh1cmwubWF0Y2goJy1leHBlY3RlZC5wbmckJykpCisgICAgICAg
ICAgICAgICAgVGVzdFJlc3VsdHNDb250cm9sbGVyLl9nZXRSZXN1bHRDb250YWluZXIobm9kZSku
cmVtb3ZlKCk7CisgICAgICAgICAgICBlbHNlIGlmICh1cmwubWF0Y2goJy1hY3R1YWwucG5nJCcp
KSB7CisgICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBVdGlscy5wYXJlbnRPZlR5cGUobm9kZSwg
J3Rib2R5JykucXVlcnlTZWxlY3RvcignLnRlc3QtbGluaycpLnRleHRDb250ZW50OworICAgICAg
ICAgICAgICAgIFRlc3RSZXN1bHRzQ29udHJvbGxlci5fZ2V0UmVzdWx0Q29udGFpbmVyKG5vZGUp
Lm91dGVySFRNTCA9IHRvZ2dsaW5nSW1hZ2VGdW5jdGlvbihVdGlscy5zdHJpcEV4dGVuc2lvbihu
YW1lKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiAgICAgCi0gICAgVGFibGVT
b3J0ZXIuX3NvcnRSb3dzKG5ld0hlYWRlciwgcmV2ZXJzZWQpOwotfQorICAgIHN0YXRpYyBfY29u
dmVydFRvTm9uVG9nZ2xpbmdIYW5kbGVyKHJlc3VsdEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGxldCBwcmVmaXggPSBub2RlLmdl
dEF0dHJpYnV0ZSgnZGF0YS1wcmVmaXgnKTsKKyAgICAgICAgICAgIFRlc3RSZXN1bHRzQ29udHJv
bGxlci5fZ2V0UmVzdWx0Q29udGFpbmVyKG5vZGUpLm91dGVySFRNTCA9IHJlc3VsdEZ1bmN0aW9u
KHByZWZpeCwgJy1leHBlY3RlZC5wbmcnLCAnZXhwZWN0ZWQnKSArIHJlc3VsdEZ1bmN0aW9uKHBy
ZWZpeCwgJy1hY3R1YWwucG5nJywgJ2FjdHVhbCcpOworICAgICAgICB9CisgICAgfQorfTsKIAot
dmFyIFBpeGVsWm9vbWVyID0ge307CitjbGFzcyBTZWN0aW9uQnVpbGRlciB7CisgICAgCisgICAg
Y29uc3RydWN0b3IodGVzdHMsIHJlc3VsdHNDb250cm9sbGVyKQorICAgIHsKKyAgICAgICAgdGhp
cy5fdGVzdHMgPSB0ZXN0czsKKyAgICAgICAgdGhpcy5fdGFibGUgPSBudWxsOworICAgICAgICB0
aGlzLl9yZXN1bHRzQ29udHJvbGxlciA9IHJlc3VsdHNDb250cm9sbGVyOworICAgIH0KIAotUGl4
ZWxab29tZXIuc2hvd09uRGVsYXkgPSB0cnVlOwotUGl4ZWxab29tZXIuX3pvb21GYWN0b3IgPSA2
OworICAgIGJ1aWxkKCkKKyAgICB7CisgICAgICAgIFRlc3RSZXN1bHRzLnNvcnRCeU5hbWUodGhp
cy5fdGVzdHMpOworICAgICAgICAKKyAgICAgICAgbGV0IHNlY3Rpb24gPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdzZWN0aW9uJyk7CisgICAgICAgIHNlY3Rpb24uYXBwZW5kQ2hpbGQoVGVzdFJl
c3VsdHNDb250cm9sbGVyLl90ZXN0TGlzdEhlYWRlcih0aGlzLnNlY3Rpb25UaXRsZSgpKSk7Cisg
ICAgICAgIGlmICh0aGlzLmhpZGVXaGVuU2hvd2luZ1VuZXhwZWN0ZWRSZXN1bHRzT25seSgpKQor
ICAgICAgICAgICAgc2VjdGlvbi5jbGFzc0xpc3QuYWRkKCdleHBlY3RlZCcpOworCisgICAgICAg
IHRoaXMuX3RhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKTsKKyAgICAgICAg
dGhpcy5fdGFibGUuaWQgPSB0aGlzLnRhYmxlSUQoKTsKKyAgICAgICAgdGhpcy5hZGRUYWJsZUhl
YWRlcigpOworCisgICAgICAgIGxldCB2aXNpYmxlUmVzdWx0c0NvdW50ID0gMDsKKyAgICAgICAg
Zm9yIChsZXQgdGVzdFJlc3VsdCBvZiB0aGlzLl90ZXN0cykgeworICAgICAgICAgICAgbGV0IHRi
b2R5ID0gdGhpcy5jcmVhdGVUYWJsZVJvdyh0ZXN0UmVzdWx0KTsKKyAgICAgICAgICAgIHRoaXMu
X3RhYmxlLmFwcGVuZENoaWxkKHRib2R5KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KCF0aGlzLl9yZXN1bHRzQ29udHJvbGxlci5vbmx5U2hvd1VuZXhwZWN0ZWRGYWlsdXJlcygpIHx8
IHRlc3RSZXN1bHQuaXNFeHBlY3RlZCkKKyAgICAgICAgICAgICAgICArK3Zpc2libGVSZXN1bHRz
Q291bnQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNlY3Rpb24ucXVlcnlTZWxlY3Rv
cignLnRlc3QtbGlzdC1jb3VudCcpLnRleHRDb250ZW50ID0gdmlzaWJsZVJlc3VsdHNDb3VudDsK
KyAgICAgICAgc2VjdGlvbi5hcHBlbmRDaGlsZCh0aGlzLl90YWJsZSk7CisgICAgICAgIHJldHVy
biBzZWN0aW9uOworICAgIH0KIAotdmFyIGtSZXN1bHRXaWR0aCA9IDgwMDsKLXZhciBrUmVzdWx0
SGVpZ2h0ID0gNjAwOworICAgIGNyZWF0ZVRhYmxlUm93KHRlc3RSZXN1bHQpCisgICAgeworICAg
ICAgICBsZXQgdGJvZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0Ym9keScpOworICAgICAg
ICBpZiAodGVzdFJlc3VsdC5pc0V4cGVjdGVkKQorICAgICAgICAgICAgdGJvZHkuY2xhc3NMaXN0
LmFkZCgnZXhwZWN0ZWQnKTsKKyAgICAgICAgCisgICAgICAgIGxldCByb3cgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCd0cicpOworICAgICAgICB0Ym9keS5hcHBlbmRDaGlsZChyb3cpOworICAg
ICAgICAKKyAgICAgICAgbGV0IHRlc3ROYW1lQ2VsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J3RkJyk7CisgICAgICAgIHRoaXMuZmlsbFRlc3RDZWxsKHRlc3RSZXN1bHQsIHRlc3ROYW1lQ2Vs
bCk7CisgICAgICAgIHJvdy5hcHBlbmRDaGlsZCh0ZXN0TmFtZUNlbGwpOwogCi12YXIga1pvb21l
ZFJlc3VsdFdpZHRoID0ga1Jlc3VsdFdpZHRoICogUGl4ZWxab29tZXIuX3pvb21GYWN0b3I7Ci12
YXIga1pvb21lZFJlc3VsdEhlaWdodCA9IGtSZXN1bHRIZWlnaHQgKiBQaXhlbFpvb21lci5fem9v
bUZhY3RvcjsKKyAgICAgICAgbGV0IHJlc3VsdENlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCd0ZCcpOworICAgICAgICB0aGlzLmZpbGxUZXN0UmVzdWx0Q2VsbCh0ZXN0UmVzdWx0LCByZXN1
bHRDZWxsKTsKKyAgICAgICAgcm93LmFwcGVuZENoaWxkKHJlc3VsdENlbGwpOwogCi1QaXhlbFpv
b21lci5fem9vbUltYWdlQ29udGFpbmVyID0gZnVuY3Rpb24odXJsKQotewotICAgIHZhciBjb250
YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICBjb250YWluZXIuY2xh
c3NOYW1lID0gJ3pvb20taW1hZ2UtY29udGFpbmVyJzsKKyAgICAgICAgbGV0IGhpc3RvcnlDZWxs
ID0gdGhpcy5jcmVhdGVIaXN0b3J5Q2VsbCh0ZXN0UmVzdWx0KTsKKyAgICAgICAgaWYgKGhpc3Rv
cnlDZWxsKQorICAgICAgICAgICAgcm93LmFwcGVuZENoaWxkKGhpc3RvcnlDZWxsKTsKIAotICAg
IHZhciB0aXRsZSA9IHVybC5tYXRjaCgvXC0oW15cLV0qKVwucG5nLylbMV07Ci0gICAgCi0gICAg
dmFyIGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgbGFiZWwuY2xh
c3NOYW1lID0gJ2xhYmVsJzsKLSAgICBsYWJlbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZSh0aXRsZSkpOwotICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChsYWJlbCk7CisgICAg
ICAgIHJldHVybiB0Ym9keTsKKyAgICB9CiAgICAgCi0gICAgdmFyIGltYWdlQ29udGFpbmVyID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgaW1hZ2VDb250YWluZXIuY2xhc3NO
YW1lID0gJ3NjYWxlZC1pbWFnZS1jb250YWluZXInOworICAgIGhpZGVXaGVuU2hvd2luZ1VuZXhw
ZWN0ZWRSZXN1bHRzT25seSgpCisgICAgeworICAgICAgICByZXR1cm4gIVRlc3RSZXN1bHRzLmhh
c1VuZXhwZWN0ZWRSZXN1bHQodGhpcy5fdGVzdHMpOworICAgIH0KICAgICAKLSAgICB2YXIgaW1h
Z2UgPSBuZXcgSW1hZ2UoKTsKLSAgICBpbWFnZS5zcmMgPSB1cmw7Ci0gICAgaW1hZ2Uuc3R5bGUu
d2lkdGggPSBrWm9vbWVkUmVzdWx0V2lkdGggKyAncHgnOwotICAgIGltYWdlLnN0eWxlLmhlaWdo
dCA9IGtab29tZWRSZXN1bHRIZWlnaHQgKyAncHgnOwotICAgIGltYWdlLnN0eWxlLmJvcmRlciA9
ICcxcHggc29saWQgYmxhY2snOwotICAgIGltYWdlQ29udGFpbmVyLmFwcGVuZENoaWxkKGltYWdl
KTsKLSAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoaW1hZ2VDb250YWluZXIpOworICAgIGFkZFRh
YmxlSGVhZGVyKCkKKyAgICB7CisgICAgfQogICAgIAotICAgIHJldHVybiBjb250YWluZXI7Ci19
CisgICAgZmlsbFRlc3RDZWxsKHRlc3RSZXN1bHQsIGNlbGwpCisgICAgeworICAgICAgICBjZWxs
LmlubmVySFRNTCA9ICc8c3BhbiBjbGFzcz1leHBhbmQtYnV0dG9uIG9uY2xpY2s9ImNvbnRyb2xs
ZXIudG9nZ2xlRXhwZWN0YXRpb25zKHRoaXMpIj48c3BhbiBjbGFzcz1leHBhbmQtYnV0dG9uLXRl
eHQ+Kzwvc3Bhbj48L3NwYW4+JyArIHRoaXMuX3Jlc3VsdHNDb250cm9sbGVyLnRlc3RMaW5rKHRl
c3RSZXN1bHQpOworICAgIH0KIAotUGl4ZWxab29tZXIuX2NyZWF0ZUNvbnRhaW5lciA9IGZ1bmN0
aW9uKGUpCi17Ci0gICAgdmFyIHRib2R5ID0gcGFyZW50T2ZUeXBlKGUudGFyZ2V0LCAndGJvZHkn
KTsKLSAgICB2YXIgcm93ID0gdGJvZHkucXVlcnlTZWxlY3RvcigndHInKTsKLSAgICB2YXIgaW1h
Z2VEaWZmTGlua3MgPSByb3cucXVlcnlTZWxlY3RvckFsbCgnYVtocmVmJD0iLnBuZyJdJyk7Cisg
ICAgZmlsbFRlc3RSZXN1bHRDZWxsKHRlc3RSZXN1bHQsIGNlbGwpCisgICAgeworICAgIH0KICAg
ICAKLSAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0g
ICAgY29udGFpbmVyLmNsYXNzTmFtZSA9ICdwaXhlbC16b29tLWNvbnRhaW5lcic7CisgICAgY3Jl
YXRlSGlzdG9yeUNlbGwodGVzdFJlc3VsdCkKKyAgICB7CisgICAgICAgIGxldCBoaXN0b3J5Q2Vs
bCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CisgICAgICAgIGhpc3RvcnlDZWxsLmlu
bmVySFRNTCA9ICc8YSBocmVmPSInICsgdGhpcy5fcmVzdWx0c0NvbnRyb2xsZXIuZmxha2luZXNz
RGFzaGJvYXJkVVJMRm9yVGVzdHMoW3Rlc3RSZXN1bHRdKSArICciPmhpc3Rvcnk8L2E+JworICAg
ICAgICByZXR1cm4gaGlzdG9yeUNlbGw7CisgICAgfQogICAgIAotICAgIHZhciBodG1sID0gJyc7
CisgICAgdGFibGVJRCgpIHsgcmV0dXJuICcnOyB9CisgICAgc2VjdGlvblRpdGxlKCkgeyByZXR1
cm4gJyc7IH0KK307CisKK2NsYXNzIEZhaWx1cmVzU2VjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBTZWN0
aW9uQnVpbGRlciB7CiAgICAgCi0gICAgdmFyIHRvZ2dsaW5nSW1hZ2VMaW5rID0gcm93LnF1ZXJ5
U2VsZWN0b3IoJ2FbaHJlZiQ9Ii1kaWZmcy5odG1sIl0nKTsKLSAgICBpZiAodG9nZ2xpbmdJbWFn
ZUxpbmspIHsKLSAgICAgICAgdmFyIHByZWZpeCA9IHRvZ2dsaW5nSW1hZ2VMaW5rLmdldEF0dHJp
YnV0ZSgnZGF0YS1wcmVmaXgnKTsKLSAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKFBpeGVs
Wm9vbWVyLl96b29tSW1hZ2VDb250YWluZXIocHJlZml4ICsgJy1leHBlY3RlZC5wbmcnKSk7Ci0g
ICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChQaXhlbFpvb21lci5fem9vbUltYWdlQ29udGFp
bmVyKHByZWZpeCArICctYWN0dWFsLnBuZycpKTsKKyAgICBhZGRUYWJsZUhlYWRlcigpCisgICAg
eworICAgICAgICBsZXQgaGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGhlYWQnKTsK
KyAgICAgICAgbGV0IGh0bWwgPSAnPHRoPnRlc3Q8L3RoPjx0aCBpZD0idGV4dC1yZXN1bHRzLWhl
YWRlciI+cmVzdWx0czwvdGg+PHRoIGlkPSJpbWFnZS1yZXN1bHRzLWhlYWRlciI+aW1hZ2UgcmVz
dWx0czwvdGg+JzsKKworICAgICAgICBpZiAodGhpcy5fcmVzdWx0c0NvbnRyb2xsZXIudGVzdFJl
c3VsdHMudXNlc0V4cGVjdGF0aW9uc0ZpbGUoKSkKKyAgICAgICAgICAgIGh0bWwgKz0gJzx0aD5h
Y3R1YWwgZmFpbHVyZTwvdGg+PHRoPmV4cGVjdGVkIGZhaWx1cmU8L3RoPic7CisKKyAgICAgICAg
aHRtbCArPSAnPHRoPjxhIGhyZWY9IicgKyB0aGlzLl9yZXN1bHRzQ29udHJvbGxlci5mbGFraW5l
c3NEYXNoYm9hcmRVUkxGb3JUZXN0cyh0aGlzLl90ZXN0cykgKyAnIj5oaXN0b3J5PC9hPjwvdGg+
JzsKKworICAgICAgICBpZiAodGhpcy50YWJsZUlEKCkgPT0gJ2ZsYWt5LXRlc3RzLXRhYmxlJykg
Ly8gRklYTUU6IHVzZSB0aGUgY2xhc3NlcywgTHVrZSEKKyAgICAgICAgICAgIGh0bWwgKz0gJzx0
aD5mYWlsdXJlczwvdGg+JzsKKworICAgICAgICBoZWFkZXIuaW5uZXJIVE1MID0gaHRtbDsKKyAg
ICAgICAgdGhpcy5fdGFibGUuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKICAgICB9CiAgICAgCi0gICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBpbWFnZURpZmZMaW5rcy5sZW5ndGg7IGkrKykKLSAgICAgICAg
Y29udGFpbmVyLmFwcGVuZENoaWxkKFBpeGVsWm9vbWVyLl96b29tSW1hZ2VDb250YWluZXIoaW1h
Z2VEaWZmTGlua3NbaV0uaHJlZikpOworICAgIGNyZWF0ZVRhYmxlUm93KHRlc3RSZXN1bHQpCisg
ICAgeworICAgICAgICBsZXQgdGJvZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0Ym9keScp
OworICAgICAgICBpZiAodGVzdFJlc3VsdC5pc0V4cGVjdGVkKQorICAgICAgICAgICAgdGJvZHku
Y2xhc3NMaXN0LmFkZCgnZXhwZWN0ZWQnKTsKKyAgICAgICAgCisgICAgICAgIGlmICh0ZXN0UmVz
dWx0LmlzTWlzbWF0Y2hSZWZUZXN0KCkpCisgICAgICAgICAgICB0Ym9keS5zZXRBdHRyaWJ1dGUo
J21pc21hdGNocmVmdGVzdCcsICd0cnVlJyk7CiAKLSAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENo
aWxkKGNvbnRhaW5lcik7Ci0gICAgUGl4ZWxab29tZXIuX2RyYXdBbGwoKTsKLX0KKyAgICAgICAg
bGV0IHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CisgICAgICAgIHRib2R5LmFw
cGVuZENoaWxkKHJvdyk7CisgICAgICAgIAorICAgICAgICBsZXQgdGVzdE5hbWVDZWxsID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKKyAgICAgICAgdGhpcy5maWxsVGVzdENlbGwodGVz
dFJlc3VsdCwgdGVzdE5hbWVDZWxsKTsKKyAgICAgICAgcm93LmFwcGVuZENoaWxkKHRlc3ROYW1l
Q2VsbCk7CisKKyAgICAgICAgbGV0IHJlc3VsdENlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCd0ZCcpOworICAgICAgICB0aGlzLmZpbGxUZXN0UmVzdWx0Q2VsbCh0ZXN0UmVzdWx0LCByZXN1
bHRDZWxsKTsKKyAgICAgICAgcm93LmFwcGVuZENoaWxkKHJlc3VsdENlbGwpOworCisgICAgICAg
IGlmICh0ZXN0UmVzdWx0LmlzVGV4dEZhaWx1cmUoKSkKKyAgICAgICAgICAgIHRoaXMuYXBwZW5k
VGV4dEZhaWx1cmVMaW5rcyh0ZXN0UmVzdWx0LCByZXN1bHRDZWxsKTsKKworICAgICAgICBpZiAo
dGVzdFJlc3VsdC5pc0F1ZGlvRmFpbHVyZSgpKQorICAgICAgICAgICAgdGhpcy5hcHBlbmRBdWRp
b0ZhaWx1cmVMaW5rcyh0ZXN0UmVzdWx0LCByZXN1bHRDZWxsKTsKKyAgICAgICAgICAgIAorICAg
ICAgICBpZiAodGVzdFJlc3VsdC5pc01pc3NpbmcoKSkKKyAgICAgICAgICAgIHRoaXMuYXBwZW5k
QWN0dWFsT25seUxpbmtzKHRlc3RSZXN1bHQsIHJlc3VsdENlbGwpOworCisgICAgICAgIGxldCBh
Y3R1YWxUb2tlbnMgPSB0ZXN0UmVzdWx0LmluZm8uYWN0dWFsLnNwbGl0KC9ccysvKTsKKworICAg
ICAgICBsZXQgdGVzdFByZWZpeCA9IFV0aWxzLnN0cmlwRXh0ZW5zaW9uKHRlc3RSZXN1bHQubmFt
ZSk7CisgICAgICAgIGxldCBpbWFnZVJlc3VsdHMgPSB0aGlzLmltYWdlUmVzdWx0TGlua3ModGVz
dFJlc3VsdCwgdGVzdFByZWZpeCwgYWN0dWFsVG9rZW5zWzBdKTsKKyAgICAgICAgaWYgKCFpbWFn
ZVJlc3VsdHMgJiYgYWN0dWFsVG9rZW5zLmxlbmd0aCA+IDEpCisgICAgICAgICAgICBpbWFnZVJl
c3VsdHMgPSB0aGlzLmltYWdlUmVzdWx0TGlua3ModGVzdFJlc3VsdCwgJ3JldHJpZXMvJyArIHRl
c3RQcmVmaXgsIGFjdHVhbFRva2Vuc1sxXSk7CisKKyAgICAgICAgbGV0IGltYWdlUmVzdWx0c0Nl
bGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOworICAgICAgICBpbWFnZVJlc3VsdHND
ZWxsLmlubmVySFRNTCA9IGltYWdlUmVzdWx0czsKKyAgICAgICAgcm93LmFwcGVuZENoaWxkKGlt
YWdlUmVzdWx0c0NlbGwpOworCisgICAgICAgIGlmICh0aGlzLl9yZXN1bHRzQ29udHJvbGxlci50
ZXN0UmVzdWx0cy51c2VzRXhwZWN0YXRpb25zRmlsZSgpIHx8IGFjdHVhbFRva2Vucy5sZW5ndGgp
IHsKKyAgICAgICAgICAgIGxldCBhY3R1YWxDZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
dGQnKTsKKyAgICAgICAgICAgIGFjdHVhbENlbGwudGV4dENvbnRlbnQgPSB0ZXN0UmVzdWx0Lmlu
Zm8uYWN0dWFsOworICAgICAgICAgICAgcm93LmFwcGVuZENoaWxkKGFjdHVhbENlbGwpOworICAg
ICAgICB9CiAKLVBpeGVsWm9vbWVyLl9kcmF3ID0gZnVuY3Rpb24oaW1hZ2VDb250YWluZXIpCi17
Ci0gICAgdmFyIGltYWdlID0gaW1hZ2VDb250YWluZXIucXVlcnlTZWxlY3RvcignaW1nJyk7Ci0g
ICAgdmFyIGNvbnRhaW5lckJvdW5kcyA9IGltYWdlQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50
UmVjdCgpOwotICAgIGltYWdlLnN0eWxlLmxlZnQgPSAoY29udGFpbmVyQm91bmRzLndpZHRoIC8g
MiAtIFBpeGVsWm9vbWVyLl9wZXJjZW50WCAqIGtab29tZWRSZXN1bHRXaWR0aCkgKyAncHgnOwot
ICAgIGltYWdlLnN0eWxlLnRvcCA9IChjb250YWluZXJCb3VuZHMuaGVpZ2h0IC8gMiAtIFBpeGVs
Wm9vbWVyLl9wZXJjZW50WSAqIGtab29tZWRSZXN1bHRIZWlnaHQpICsgJ3B4JzsKLX0KKyAgICAg
ICAgaWYgKHRoaXMuX3Jlc3VsdHNDb250cm9sbGVyLnRlc3RSZXN1bHRzLnVzZXNFeHBlY3RhdGlv
bnNGaWxlKCkpIHsKKyAgICAgICAgICAgIGxldCBleHBlY3RlZENlbGwgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCd0ZCcpOworICAgICAgICAgICAgZXhwZWN0ZWRDZWxsLnRleHRDb250ZW50ID0g
dGVzdFJlc3VsdC5pc01pc3NpbmcoKSA/ICcnIDogdGVzdFJlc3VsdC5pbmZvLmV4cGVjdGVkOwor
ICAgICAgICAgICAgcm93LmFwcGVuZENoaWxkKGV4cGVjdGVkQ2VsbCk7CisgICAgICAgIH0KIAot
UGl4ZWxab29tZXIuX2RyYXdBbGwgPSBmdW5jdGlvbigpCi17Ci0gICAgZm9yRWFjaChkb2N1bWVu
dC5xdWVyeVNlbGVjdG9yQWxsKCcucGl4ZWwtem9vbS1jb250YWluZXIgLnNjYWxlZC1pbWFnZS1j
b250YWluZXInKSwgUGl4ZWxab29tZXIuX2RyYXcpOwotfQorICAgICAgICBsZXQgaGlzdG9yeUNl
bGwgPSB0aGlzLmNyZWF0ZUhpc3RvcnlDZWxsKHRlc3RSZXN1bHQpOworICAgICAgICBpZiAoaGlz
dG9yeUNlbGwpCisgICAgICAgICAgICByb3cuYXBwZW5kQ2hpbGQoaGlzdG9yeUNlbGwpOwogCi1Q
aXhlbFpvb21lci5oYW5kbGVNb3VzZU91dCA9IGZ1bmN0aW9uKGUpCi17Ci0gICAgaWYgKGUucmVs
YXRlZFRhcmdldCAmJiBlLnJlbGF0ZWRUYXJnZXQudGFnTmFtZSAhPSAnSUZSQU1FJykKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdGJvZHk7CisgICAgfQogCi0gICAgLy8gSWYgZS5y
ZWxhdGVkVGFyZ2V0IGlzIG51bGwsIHdlJ3ZlIG1vdXNlZCBvdXQgb2YgdGhlIGRvY3VtZW50Lgot
ICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucGl4ZWwtem9vbS1j
b250YWluZXInKTsKLSAgICBpZiAoY29udGFpbmVyKQotICAgICAgICByZW1vdmUoY29udGFpbmVy
KTsKLX0KKyAgICBhcHBlbmRUZXh0RmFpbHVyZUxpbmtzKHRlc3RSZXN1bHQsIGNlbGwpCisgICAg
eworICAgICAgICBjZWxsLmlubmVySFRNTCArPSB0aGlzLl9yZXN1bHRzQ29udHJvbGxlci50ZXh0
UmVzdWx0TGlua3MoVXRpbHMuc3RyaXBFeHRlbnNpb24odGVzdFJlc3VsdC5uYW1lKSk7CisgICAg
fQorICAgIAorICAgIGFwcGVuZEF1ZGlvRmFpbHVyZUxpbmtzKHRlc3RSZXN1bHQsIGNlbGwpCisg
ICAgeworICAgICAgICBsZXQgcHJlZml4ID0gVXRpbHMuc3RyaXBFeHRlbnNpb24odGVzdFJlc3Vs
dC5uYW1lKTsKKyAgICAgICAgY2VsbC5pbm5lckhUTUwgKz0gVGVzdFJlc3VsdHNDb250cm9sbGVy
LnJlc3VsdExpbmsocHJlZml4LCAnLWV4cGVjdGVkLndhdicsICdleHBlY3RlZCBhdWRpbycpCisg
ICAgICAgICAgICArIFRlc3RSZXN1bHRzQ29udHJvbGxlci5yZXN1bHRMaW5rKHByZWZpeCwgJy1h
Y3R1YWwud2F2JywgJ2FjdHVhbCBhdWRpbycpCisgICAgICAgICAgICArIFRlc3RSZXN1bHRzQ29u
dHJvbGxlci5yZXN1bHRMaW5rKHByZWZpeCwgJy1kaWZmLnR4dCcsICd0ZXh0dWFsIGRpZmYnKTsK
KyAgICB9CisgICAgCisgICAgYXBwZW5kQWN0dWFsT25seUxpbmtzKHRlc3RSZXN1bHQsIGNlbGwp
CisgICAgeworICAgICAgICBpZiAodGVzdFJlc3VsdC5pbmZvLmlzX21pc3NpbmdfYXVkaW8pCisg
ICAgICAgICAgICBjZWxsLmlubmVySFRNTCArPSBUZXN0UmVzdWx0c0NvbnRyb2xsZXIucmVzdWx0
TGluayhwcmVmaXgsICctYWN0dWFsLndhdicsICdhdWRpbyByZXN1bHQnKTsKIAotUGl4ZWxab29t
ZXIuaGFuZGxlTW91c2VNb3ZlID0gZnVuY3Rpb24oZSkgewotICAgIGlmIChQaXhlbFpvb21lci5f
bW91c2VNb3ZlVGltZW91dCkKLSAgICAgICAgY2xlYXJUaW1lb3V0KFBpeGVsWm9vbWVyLl9tb3Vz
ZU1vdmVUaW1lb3V0KTsKKyAgICAgICAgaWYgKHRlc3RSZXN1bHQuaW5mby5pc19taXNzaW5nX3Rl
eHQpCisgICAgICAgICAgICBjZWxsLmlubmVySFRNTCArPSBUZXN0UmVzdWx0c0NvbnRyb2xsZXIu
cmVzdWx0TGluayhwcmVmaXgsICctYWN0dWFsLnR4dCcsICdyZXN1bHQnKTsKKyAgICB9CiAKLSAg
ICBpZiAocGFyZW50T2ZUeXBlKGUudGFyZ2V0LCAnLnBpeGVsLXpvb20tY29udGFpbmVyJykpCi0g
ICAgICAgIHJldHVybjsKKyAgICBpbWFnZVJlc3VsdExpbmtzKHRlc3RSZXN1bHQsIHRlc3RQcmVm
aXgsIHJlc3VsdFRva2VuKQorICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9ICcnOworICAgICAg
ICBpZiAocmVzdWx0VG9rZW4uaW5kZXhPZignSU1BR0UnKSAhPSAtMSkgeworICAgICAgICAgICAg
bGV0IHRlc3RFeHRlbnNpb24gPSBVdGlscy5zcGxpdEV4dGVuc2lvbih0ZXN0UmVzdWx0Lm5hbWUp
WzFdOwogCi0gICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5waXhl
bC16b29tLWNvbnRhaW5lcicpOworICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuaXNNaXNtYXRj
aFJlZlRlc3QoKSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCArPSBUZXN0UmVzdWx0c0NvbnRy
b2xsZXIucmVzdWx0TGluayh0aGlzLl9yZXN1bHRzQ29udHJvbGxlci5sYXlvdXRUZXN0c0Jhc2VQ
YXRoKCkgKyB0ZXN0UHJlZml4LCAnLWV4cGVjdGVkLW1pc21hdGNoLicgKyB0ZXN0RXh0ZW5zaW9u
LCAncmVmIG1pc21hdGNoJyk7CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFRlc3RSZXN1bHRz
Q29udHJvbGxlci5yZXN1bHRMaW5rKHRlc3RQcmVmaXgsICctYWN0dWFsLnBuZycsICdhY3R1YWwn
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQu
aXNNYXRjaFJlZlRlc3QoKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFRlc3RSZXN1
bHRzQ29udHJvbGxlci5yZXN1bHRMaW5rKHRoaXMuX3Jlc3VsdHNDb250cm9sbGVyLmxheW91dFRl
c3RzQmFzZVBhdGgoKSArIHRlc3RQcmVmaXgsICctZXhwZWN0ZWQuJyArIHRlc3RFeHRlbnNpb24s
ICdyZWZlcmVuY2UnKTsKKworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9yZXN1bHRzQ29udHJv
bGxlci5zaG91bGRUb2dnbGVJbWFnZXMpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBU
ZXN0UmVzdWx0c0NvbnRyb2xsZXIucmVzdWx0TGluayh0ZXN0UHJlZml4LCAnLWRpZmZzLmh0bWwn
LCAnaW1hZ2VzJyk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCArPSBUZXN0UmVzdWx0c0NvbnRyb2xsZXIucmVzdWx0TGluayh0ZXN0UHJlZml4LCAn
LWV4cGVjdGVkLnBuZycsICdleHBlY3RlZCcpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQg
Kz0gVGVzdFJlc3VsdHNDb250cm9sbGVyLnJlc3VsdExpbmsodGVzdFByZWZpeCwgJy1hY3R1YWwu
cG5nJywgJ2FjdHVhbCcpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGxl
dCBkaWZmID0gdGVzdFJlc3VsdC5pbmZvLmltYWdlX2RpZmZfcGVyY2VudDsKKyAgICAgICAgICAg
ICAgICByZXN1bHQgKz0gVGVzdFJlc3VsdHNDb250cm9sbGVyLnJlc3VsdExpbmsodGVzdFByZWZp
eCwgJy1kaWZmLnBuZycsICdkaWZmICgnICsgZGlmZiArICclKScpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAodGVzdFJlc3VsdC5pc01pc3NpbmcoKSAm
JiB0ZXN0UmVzdWx0LmlzTWlzc2luZ0ltYWdlKCkpCisgICAgICAgICAgICByZXN1bHQgKz0gVGVz
dFJlc3VsdHNDb250cm9sbGVyLnJlc3VsdExpbmsodGVzdFByZWZpeCwgJy1hY3R1YWwucG5nJywg
J3BuZyByZXN1bHQnKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
fTsKKworY2xhc3MgRmFpbGluZ1Rlc3RzU2VjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBGYWlsdXJlc1Nl
Y3Rpb25CdWlsZGVyIHsKKyAgICB0YWJsZUlEKCkgeyByZXR1cm4gJ3Jlc3VsdHMtdGFibGUnOyB9
CisgICAgc2VjdGlvblRpdGxlKCkgeyByZXR1cm4gJ1Rlc3RzIHRoYXQgZmFpbGVkIHRleHQvcGl4
ZWwvYXVkaW8gZGlmZic7IH0KK307CisKK2NsYXNzIFRlc3RzV2l0aE1pc3NpbmdSZXN1bHRzU2Vj
dGlvbkJ1aWxkZXIgZXh0ZW5kcyBGYWlsdXJlc1NlY3Rpb25CdWlsZGVyIHsKKyAgICB0YWJsZUlE
KCkgeyByZXR1cm4gJ21pc3NpbmctdGFibGUnOyB9CisgICAgc2VjdGlvblRpdGxlKCkgeyByZXR1
cm4gJ1Rlc3RzIHRoYXQgaGFkIG5vIGV4cGVjdGVkIHJlc3VsdHMgKHByb2JhYmx5IG5ldyknOyB9
Cit9OworCitjbGFzcyBGbGFreVBhc3NUZXN0c1NlY3Rpb25CdWlsZGVyIGV4dGVuZHMgRmFpbHVy
ZXNTZWN0aW9uQnVpbGRlciB7CisgICAgdGFibGVJRCgpIHsgcmV0dXJuICdmbGFreS10ZXN0cy10
YWJsZSc7IH0KKyAgICBzZWN0aW9uVGl0bGUoKSB7IHJldHVybiAnRmxha3kgdGVzdHMgKGZhaWxl
ZCB0aGUgZmlyc3QgcnVuIGFuZCBwYXNzZWQgb24gcmV0cnkpJzsgfQorfTsKKworY2xhc3MgVW5l
eHBlY3RlZFBhc3NUZXN0c1NlY3Rpb25CdWlsZGVyIGV4dGVuZHMgU2VjdGlvbkJ1aWxkZXIgewor
ICAgIHRhYmxlSUQoKSB7IHJldHVybiAncGFzc2VzLXRhYmxlJzsgfQorICAgIHNlY3Rpb25UaXRs
ZSgpIHsgcmV0dXJuICdUZXN0cyBleHBlY3RlZCB0byBmYWlsIGJ1dCBwYXNzZWQnOyB9CisKKyAg
ICBhZGRUYWJsZUhlYWRlcigpCisgICAgeworICAgICAgICBsZXQgaGVhZGVyID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgndGhlYWQnKTsKKyAgICAgICAgaGVhZGVyLmlubmVySFRNTCA9ICc8dGg+
dGVzdDwvdGg+PHRoPmV4cGVjdGVkIGZhaWx1cmU8L3RoPjx0aD5oaXN0b3J5PC90aD4nOworICAg
ICAgICB0aGlzLl90YWJsZS5hcHBlbmRDaGlsZChoZWFkZXIpOworICAgIH0KICAgICAKLSAgICB2
YXIgcmVzdWx0Q29udGFpbmVyID0gKGUudGFyZ2V0LmNsYXNzTmFtZSA9PSAncmVzdWx0LWNvbnRh
aW5lcicpID8KLSAgICAgICAgZS50YXJnZXQgOiBwYXJlbnRPZlR5cGUoZS50YXJnZXQsICcucmVz
dWx0LWNvbnRhaW5lcicpOwotICAgIGlmICghcmVzdWx0Q29udGFpbmVyIHx8ICFyZXN1bHRDb250
YWluZXIucXVlcnlTZWxlY3RvcignaW1nJykpIHsKLSAgICAgICAgaWYgKGNvbnRhaW5lcikKLSAg
ICAgICAgICAgIHJlbW92ZShjb250YWluZXIpOwotICAgICAgICByZXR1cm47CisgICAgZmlsbFRl
c3RDZWxsKHRlc3RSZXN1bHQsIGNlbGwpCisgICAgeworICAgICAgICBjZWxsLmlubmVySFRNTCA9
ICc8YSBjbGFzcz10ZXN0LWxpbmsgb25jbGljaz0iY29udHJvbGxlci5jaGVja1NlcnZlcklzUnVu
bmluZyhldmVudCkiIGhyZWY9IicgKyB0aGlzLl9yZXN1bHRzQ29udHJvbGxlci5sYXlvdXRUZXN0
VVJMKHRlc3RSZXN1bHQpICsgJyI+JyArIHRlc3RSZXN1bHQubmFtZSArICc8L2E+PHNwYW4gY2xh
c3M9ZmxhZyBvbmNsaWNrPSJjb250cm9sbGVyLnVuZmxhZyh0aGlzKSI+IFx1MjY5MTwvc3Bhbj4n
OwogICAgIH0KIAotICAgIHZhciB0YXJnZXRMb2NhdGlvbiA9IGUudGFyZ2V0LmdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpOwotICAgIFBpeGVsWm9vbWVyLl9wZXJjZW50WCA9IChlLmNsaWVudFggLSB0
YXJnZXRMb2NhdGlvbi5sZWZ0KSAvIHRhcmdldExvY2F0aW9uLndpZHRoOwotICAgIFBpeGVsWm9v
bWVyLl9wZXJjZW50WSA9IChlLmNsaWVudFkgLSB0YXJnZXRMb2NhdGlvbi50b3ApIC8gdGFyZ2V0
TG9jYXRpb24uaGVpZ2h0OworICAgIGZpbGxUZXN0UmVzdWx0Q2VsbCh0ZXN0UmVzdWx0LCBjZWxs
KQorICAgIHsKKyAgICAgICAgY2VsbC5pbm5lckhUTUwgPSB0ZXN0UmVzdWx0LmluZm8uZXhwZWN0
ZWQ7CisgICAgfQorfTsKIAotICAgIGlmICghY29udGFpbmVyKSB7Ci0gICAgICAgIGlmIChQaXhl
bFpvb21lci5zaG93T25EZWxheSkgewotICAgICAgICAgICAgUGl4ZWxab29tZXIuX21vdXNlTW92
ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIFBpeGVs
Wm9vbWVyLl9jcmVhdGVDb250YWluZXIoZSk7Ci0gICAgICAgICAgICB9LCA0MDApOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9CiAKLSAgICAgICAgUGl4ZWxab29tZXIuX2NyZWF0ZUNv
bnRhaW5lcihlKTsKLSAgICAgICAgcmV0dXJuOworY2xhc3MgVGVzdHNXaXRoU3RkRXJyU2VjdGlv
bkJ1aWxkZXIgZXh0ZW5kcyBTZWN0aW9uQnVpbGRlciB7CisgICAgdGFibGVJRCgpIHsgcmV0dXJu
ICdzdGRlcnItdGFibGUnOyB9CisgICAgc2VjdGlvblRpdGxlKCkgeyByZXR1cm4gJ1Rlc3RzIHRo
YXQgaGFkIHN0ZGVyciBvdXRwdXQnOyB9CisgICAgaGlkZVdoZW5TaG93aW5nVW5leHBlY3RlZFJl
c3VsdHNPbmx5KCkgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIGZpbGxUZXN0UmVzdWx0Q2VsbCh0
ZXN0UmVzdWx0LCBjZWxsKQorICAgIHsKKyAgICAgICAgY2VsbC5pbm5lckhUTUwgPSBUZXN0UmVz
dWx0c0NvbnRyb2xsZXIucmVzdWx0TGluayhVdGlscy5zdHJpcEV4dGVuc2lvbih0ZXN0UmVzdWx0
Lm5hbWUpLCAnLXN0ZGVyci50eHQnLCAnc3RkZXJyJyk7CiAgICAgfQotICAgIAotICAgIFBpeGVs
Wm9vbWVyLl9kcmF3QWxsKCk7Ci19Cit9OwogCi1kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdt
b3VzZW1vdmUnLCBQaXhlbFpvb21lci5oYW5kbGVNb3VzZU1vdmUsIGZhbHNlKTsKLWRvY3VtZW50
LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgUGl4ZWxab29tZXIuaGFuZGxlTW91c2VPdXQs
IGZhbHNlKTsKK2NsYXNzIFRpbWVkT3V0VGVzdHNTZWN0aW9uQnVpbGRlciBleHRlbmRzIFNlY3Rp
b25CdWlsZGVyIHsKKyAgICB0YWJsZUlEKCkgeyByZXR1cm4gJ3RpbWVvdXQtdGVzdHMtdGFibGUn
OyB9CisgICAgc2VjdGlvblRpdGxlKCkgeyByZXR1cm4gJ1Rlc3RzIHRoYXQgdGltZWQgb3V0Jzsg
fQogCi12YXIgVGVzdE5hdmlnYXRvciA9IHt9OworICAgIGZpbGxUZXN0UmVzdWx0Q2VsbCh0ZXN0
UmVzdWx0LCBjZWxsKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IG9ubHkgaW5jbHVkZSB0aW1l
b3V0IGFjdHVhbC9kaWZmIHJlc3VsdHMgaGVyZSBpZiB3ZSBhY3R1YWxseSBzcGl0IG91dCByZXN1
bHRzIGZvciB0aW1lb3V0IHRlc3RzLgorICAgICAgICBjZWxsLmlubmVySFRNTCA9IHRoaXMuX3Jl
c3VsdHNDb250cm9sbGVyLnRleHRSZXN1bHRMaW5rcyhVdGlscy5zdHJpcEV4dGVuc2lvbih0ZXN0
UmVzdWx0Lm5hbWUpKTsKKyAgICB9Cit9OwogCi1UZXN0TmF2aWdhdG9yLnJlc2V0ID0gZnVuY3Rp
b24oKSB7Ci0gICAgVGVzdE5hdmlnYXRvci5jdXJyZW50VGVzdEluZGV4ID0gLTE7Ci0gICAgVGVz
dE5hdmlnYXRvci5mbGFnZ2VkVGVzdHMgPSB7fTsKLX0KK2NsYXNzIENyYXNoaW5nVGVzdHNTZWN0
aW9uQnVpbGRlciBleHRlbmRzIFNlY3Rpb25CdWlsZGVyIHsKKyAgICB0YWJsZUlEKCkgeyByZXR1
cm4gJ2NyYXNoLXRlc3RzLXRhYmxlJzsgfQorICAgIHNlY3Rpb25UaXRsZSgpIHsgcmV0dXJuICdU
ZXN0cyB0aGF0IGNyYXNoZWQnOyB9CiAKLVRlc3ROYXZpZ2F0b3IuaGFuZGxlS2V5RXZlbnQgPSBm
dW5jdGlvbihldmVudCkKLXsKLSAgICBpZiAoZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtl
eSB8fCBldmVudC5jdHJsS2V5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKFN0cmlu
Zy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKSB7Ci0gICAgICAgIGNhc2UgJ2knOgotICAg
ICAgICAgICAgVGVzdE5hdmlnYXRvci5fc2Nyb2xsVG9GaXJzdFRlc3QoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlICdqJzoKLSAgICAgICAgICAgIFRlc3ROYXZpZ2F0b3IuX3Nj
cm9sbFRvTmV4dFRlc3QoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdrJzoK
LSAgICAgICAgICAgIFRlc3ROYXZpZ2F0b3IuX3Njcm9sbFRvUHJldmlvdXNUZXN0KCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnbCc6Ci0gICAgICAgICAgICBUZXN0TmF2aWdh
dG9yLl9zY3JvbGxUb0xhc3RUZXN0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSAnZSc6Ci0gICAgICAgICAgICBUZXN0TmF2aWdhdG9yLl9leHBhbmRDdXJyZW50VGVzdCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ2MnOgotICAgICAgICAgICAgVGVzdE5h
dmlnYXRvci5fY29sbGFwc2VDdXJyZW50VGVzdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgJ3QnOgotICAgICAgICAgICAgVGVzdE5hdmlnYXRvci5fdG9nZ2xlQ3VycmVudFRl
c3QoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdmJzoKLSAgICAgICAgICAg
IFRlc3ROYXZpZ2F0b3IuX3RvZ2dsZUN1cnJlbnRUZXN0RmxhZ2dlZCgpOwotICAgICAgICAgICAg
YnJlYWs7CisgICAgZmlsbFRlc3RSZXN1bHRDZWxsKHRlc3RSZXN1bHQsIGNlbGwpCisgICAgewor
ICAgICAgICBjZWxsLmlubmVySFRNTCA9IFRlc3RSZXN1bHRzQ29udHJvbGxlci5yZXN1bHRMaW5r
KFV0aWxzLnN0cmlwRXh0ZW5zaW9uKHRlc3RSZXN1bHQubmFtZSksICctY3Jhc2gtbG9nLnR4dCcs
ICdjcmFzaCBsb2cnKQorICAgICAgICAgICAgICAgICAgICAgICArIFRlc3RSZXN1bHRzQ29udHJv
bGxlci5yZXN1bHRMaW5rKFV0aWxzLnN0cmlwRXh0ZW5zaW9uKHRlc3RSZXN1bHQubmFtZSksICct
c2FtcGxlLnR4dCcsICdzYW1wbGUnKTsKKyAgICB9Cit9OworCitjbGFzcyBPdGhlckNyYXNoZXNT
ZWN0aW9uQnVpbGRlciBleHRlbmRzIFNlY3Rpb25CdWlsZGVyIHsKKyAgICB0YWJsZUlEKCkgeyBy
ZXR1cm4gJ290aGVyLWNyYXNoLXRlc3RzLXRhYmxlJzsgfQorICAgIHNlY3Rpb25UaXRsZSgpIHsg
cmV0dXJuICdPdGhlciBjcmFzaGVzJzsgfQorICAgIGZpbGxUZXN0Q2VsbCh0ZXN0UmVzdWx0LCBj
ZWxsKQorICAgIHsKKyAgICAgICAgY2VsbC5pbm5lckhUTUwgPSAnPHNwYW4gY2xhc3M9ZXhwYW5k
LWJ1dHRvbiBvbmNsaWNrPSJjb250cm9sbGVyLnRvZ2dsZUV4cGVjdGF0aW9ucyh0aGlzKSI+PHNw
YW4gY2xhc3M9ZXhwYW5kLWJ1dHRvbi10ZXh0Pis8L3NwYW4+PC9zcGFuPicgKyB0ZXN0UmVzdWx0
Lm5hbWU7CiAgICAgfQotfQogCi1UZXN0TmF2aWdhdG9yLl9zY3JvbGxUb0ZpcnN0VGVzdCA9IGZ1
bmN0aW9uKCkKLXsKLSAgICBpZiAoVGVzdE5hdmlnYXRvci5fc2V0Q3VycmVudFRlc3QoMCkpCi0g
ICAgICAgIFRlc3ROYXZpZ2F0b3IuX3Njcm9sbFRvQ3VycmVudFRlc3QoKTsKLX0KKyAgICBmaWxs
VGVzdFJlc3VsdENlbGwodGVzdFJlc3VsdCwgY2VsbCkKKyAgICB7CisgICAgICAgIGNlbGwuaW5u
ZXJIVE1MID0gVGVzdFJlc3VsdHNDb250cm9sbGVyLnJlc3VsdExpbmsoVXRpbHMuc3RyaXBFeHRl
bnNpb24odGVzdFJlc3VsdC5uYW1lKSwgJy1jcmFzaC1sb2cudHh0JywgJ2NyYXNoIGxvZycpOwor
ICAgIH0KIAotVGVzdE5hdmlnYXRvci5fc2Nyb2xsVG9MYXN0VGVzdCA9IGZ1bmN0aW9uKCkKLXsK
LSAgICB2YXIgbGlua3MgPSB2aXNpYmxlVGVzdHMoKTsKLSAgICBpZiAoVGVzdE5hdmlnYXRvci5f
c2V0Q3VycmVudFRlc3QobGlua3MubGVuZ3RoIC0gMSkpCi0gICAgICAgIFRlc3ROYXZpZ2F0b3Iu
X3Njcm9sbFRvQ3VycmVudFRlc3QoKTsKLX0KKyAgICBjcmVhdGVIaXN0b3J5Q2VsbCh0ZXN0UmVz
dWx0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfTsKIAotVGVzdE5hdmln
YXRvci5fc2Nyb2xsVG9OZXh0VGVzdCA9IGZ1bmN0aW9uKCkKLXsKLSAgICBpZiAoVGVzdE5hdmln
YXRvci5jdXJyZW50VGVzdEluZGV4ID09IC0xKQotICAgICAgICBUZXN0TmF2aWdhdG9yLl9zY3Jv
bGxUb0ZpcnN0VGVzdCgpOwotICAgIGVsc2UgaWYgKFRlc3ROYXZpZ2F0b3IuX3NldEN1cnJlbnRU
ZXN0KFRlc3ROYXZpZ2F0b3IuY3VycmVudFRlc3RJbmRleCArIDEpKQotICAgICAgICBUZXN0TmF2
aWdhdG9yLl9zY3JvbGxUb0N1cnJlbnRUZXN0KCk7Ci19CitjbGFzcyBQaXhlbFpvb21lciB7Cisg
ICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgdGhpcy5zaG93T25EZWxheSA9IHRydWU7
CisgICAgICAgIHRoaXMuX3pvb21GYWN0b3IgPSA2OwogCi1UZXN0TmF2aWdhdG9yLl9zY3JvbGxU
b1ByZXZpb3VzVGVzdCA9IGZ1bmN0aW9uKCkKLXsKLSAgICBpZiAoVGVzdE5hdmlnYXRvci5jdXJy
ZW50VGVzdEluZGV4ID09IC0xKQotICAgICAgICBUZXN0TmF2aWdhdG9yLl9zY3JvbGxUb0xhc3RU
ZXN0KCk7Ci0gICAgZWxzZSBpZiAoVGVzdE5hdmlnYXRvci5fc2V0Q3VycmVudFRlc3QoVGVzdE5h
dmlnYXRvci5jdXJyZW50VGVzdEluZGV4IC0gMSkpCi0gICAgICAgIFRlc3ROYXZpZ2F0b3IuX3Nj
cm9sbFRvQ3VycmVudFRlc3QoKTsKLX0KKyAgICAgICAgdGhpcy5fcmVzdWx0V2lkdGggPSA4MDA7
CisgICAgICAgIHRoaXMuX3Jlc3VsdEhlaWdodCA9IDYwMDsKKyAgICAgICAgCisgICAgICAgIHRo
aXMuX3BlcmNlbnRYID0gMDsKKyAgICAgICAgdGhpcy5fcGVyY2VudFkgPSAwOwogCi1UZXN0TmF2
aWdhdG9yLl9jdXJyZW50VGVzdExpbmsgPSBmdW5jdGlvbigpCi17Ci0gICAgdmFyIGxpbmtzID0g
dmlzaWJsZVRlc3RzKCk7Ci0gICAgcmV0dXJuIGxpbmtzW1Rlc3ROYXZpZ2F0b3IuY3VycmVudFRl
c3RJbmRleF07Ci19CisgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92
ZScsIHRoaXMsIGZhbHNlKTsKKyAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91
c2VvdXQnLCB0aGlzLCBmYWxzZSk7CisgICAgfQogCi1UZXN0TmF2aWdhdG9yLl9jdXJyZW50VGVz
dEV4cGFuZExpbmsgPSBmdW5jdGlvbigpCi17Ci0gICAgcmV0dXJuIFRlc3ROYXZpZ2F0b3IuX2N1
cnJlbnRUZXN0TGluaygpLnF1ZXJ5U2VsZWN0b3IoJy5leHBhbmQtYnV0dG9uLXRleHQnKTsKLX0K
KyAgICBfem9vbWVkUmVzdWx0V2lkdGgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Jl
c3VsdFdpZHRoICogdGhpcy5fem9vbUZhY3RvcjsKKyAgICB9CisgICAgCisgICAgX3pvb21lZFJl
c3VsdEhlaWdodCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fcmVzdWx0SGVpZ2h0ICog
dGhpcy5fem9vbUZhY3RvcjsKKyAgICB9CisgICAgCisgICAgX3pvb21JbWFnZUNvbnRhaW5lcih1
cmwpCisgICAgeworICAgICAgICBsZXQgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2Jyk7CisgICAgICAgIGNvbnRhaW5lci5jbGFzc05hbWUgPSAnem9vbS1pbWFnZS1jb250
YWluZXInOwogCi1UZXN0TmF2aWdhdG9yLl9leHBhbmRDdXJyZW50VGVzdCA9IGZ1bmN0aW9uKCkK
LXsKLSAgICBleHBhbmRFeHBlY3RhdGlvbnMoVGVzdE5hdmlnYXRvci5fY3VycmVudFRlc3RFeHBh
bmRMaW5rKCkpOwotfQorICAgICAgICBsZXQgdGl0bGUgPSB1cmwubWF0Y2goL1wtKFteXC1dKilc
LnBuZy8pWzFdOworICAgIAorICAgICAgICBsZXQgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKTsKKyAgICAgICAgbGFiZWwuY2xhc3NOYW1lID0gJ2xhYmVsJzsKKyAgICAgICAg
bGFiZWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGl0bGUpKTsKKyAgICAg
ICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGxhYmVsKTsKKyAgICAKKyAgICAgICAgbGV0IGltYWdl
Q29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIGltYWdl
Q29udGFpbmVyLmNsYXNzTmFtZSA9ICdzY2FsZWQtaW1hZ2UtY29udGFpbmVyJzsKKyAgICAKKyAg
ICAgICAgbGV0IGltYWdlID0gbmV3IEltYWdlKCk7CisgICAgICAgIGltYWdlLnNyYyA9IHVybDsK
KyAgICAgICAgaW1hZ2Uuc3R5bGUud2lkdGggPSB0aGlzLl96b29tZWRSZXN1bHRXaWR0aCgpICsg
J3B4JzsKKyAgICAgICAgaW1hZ2Uuc3R5bGUuaGVpZ2h0ID0gdGhpcy5fem9vbWVkUmVzdWx0SGVp
Z2h0KCkgKyAncHgnOworICAgICAgICBpbWFnZS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIGJs
YWNrJzsKKyAgICAgICAgaW1hZ2VDb250YWluZXIuYXBwZW5kQ2hpbGQoaW1hZ2UpOworICAgICAg
ICBjb250YWluZXIuYXBwZW5kQ2hpbGQoaW1hZ2VDb250YWluZXIpOworICAgIAorICAgICAgICBy
ZXR1cm4gY29udGFpbmVyOworICAgIH0KIAotVGVzdE5hdmlnYXRvci5fY29sbGFwc2VDdXJyZW50
VGVzdCA9IGZ1bmN0aW9uKCkKLXsKLSAgICBjb2xsYXBzZUV4cGVjdGF0aW9ucyhUZXN0TmF2aWdh
dG9yLl9jdXJyZW50VGVzdEV4cGFuZExpbmsoKSk7Ci19CisgICAgX2NyZWF0ZUNvbnRhaW5lcihl
KQorICAgIHsKKyAgICAgICAgbGV0IHRib2R5ID0gVXRpbHMucGFyZW50T2ZUeXBlKGUudGFyZ2V0
LCAndGJvZHknKTsKKyAgICAgICAgbGV0IHJvdyA9IHRib2R5LnF1ZXJ5U2VsZWN0b3IoJ3RyJyk7
CisgICAgICAgIGxldCBpbWFnZURpZmZMaW5rcyA9IHJvdy5xdWVyeVNlbGVjdG9yQWxsKCdhW2hy
ZWYkPSIucG5nIl0nKTsKKyAgICAKKyAgICAgICAgbGV0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBjb250YWluZXIuY2xhc3NOYW1lID0gJ3BpeGVs
LXpvb20tY29udGFpbmVyJzsKKyAgICAKKyAgICAgICAgbGV0IGh0bWwgPSAnJzsKKyAgICAKKyAg
ICAgICAgbGV0IHRvZ2dsaW5nSW1hZ2VMaW5rID0gcm93LnF1ZXJ5U2VsZWN0b3IoJ2FbaHJlZiQ9
Ii1kaWZmcy5odG1sIl0nKTsKKyAgICAgICAgaWYgKHRvZ2dsaW5nSW1hZ2VMaW5rKSB7CisgICAg
ICAgICAgICBsZXQgcHJlZml4ID0gdG9nZ2xpbmdJbWFnZUxpbmsuZ2V0QXR0cmlidXRlKCdkYXRh
LXByZWZpeCcpOworICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX3pvb21J
bWFnZUNvbnRhaW5lcihwcmVmaXggKyAnLWV4cGVjdGVkLnBuZycpKTsKKyAgICAgICAgICAgIGNv
bnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl96b29tSW1hZ2VDb250YWluZXIocHJlZml4ICsgJy1h
Y3R1YWwucG5nJykpOworICAgICAgICB9CisgICAgCisgICAgICAgIGZvciAobGV0IGxpbmsgb2Yg
aW1hZ2VEaWZmTGlua3MpCisgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5f
em9vbUltYWdlQ29udGFpbmVyKGxpbmsuaHJlZikpOwogCi1UZXN0TmF2aWdhdG9yLl90b2dnbGVD
dXJyZW50VGVzdCA9IGZ1bmN0aW9uKCkKLXsKLSAgICB0b2dnbGVFeHBlY3RhdGlvbnMoVGVzdE5h
dmlnYXRvci5fY3VycmVudFRlc3RFeHBhbmRMaW5rKCkpOwotfQorICAgICAgICBkb2N1bWVudC5i
b2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CisgICAgICAgIHRoaXMuX2RyYXdBbGwoKTsKKyAg
ICB9CiAKLVRlc3ROYXZpZ2F0b3IuX3RvZ2dsZUN1cnJlbnRUZXN0RmxhZ2dlZCA9IGZ1bmN0aW9u
KCkKLXsKLSAgICB2YXIgdGVzdExpbmsgPSBUZXN0TmF2aWdhdG9yLl9jdXJyZW50VGVzdExpbmso
KTsKLSAgICBUZXN0TmF2aWdhdG9yLmZsYWdUZXN0KHRlc3RMaW5rLCAhdGVzdExpbmsuY2xhc3NM
aXN0LmNvbnRhaW5zKCdmbGFnZ2VkJykpOwotfQorICAgIF9kcmF3KGltYWdlQ29udGFpbmVyKQor
ICAgIHsKKyAgICAgICAgbGV0IGltYWdlID0gaW1hZ2VDb250YWluZXIucXVlcnlTZWxlY3Rvcign
aW1nJyk7CisgICAgICAgIGxldCBjb250YWluZXJCb3VuZHMgPSBpbWFnZUNvbnRhaW5lci5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgICAgaW1hZ2Uuc3R5bGUubGVmdCA9IChjb250YWlu
ZXJCb3VuZHMud2lkdGggLyAyIC0gdGhpcy5fcGVyY2VudFggKiB0aGlzLl96b29tZWRSZXN1bHRX
aWR0aCgpKSArICdweCc7CisgICAgICAgIGltYWdlLnN0eWxlLnRvcCA9IChjb250YWluZXJCb3Vu
ZHMuaGVpZ2h0IC8gMiAtIHRoaXMuX3BlcmNlbnRZICogdGhpcy5fem9vbWVkUmVzdWx0SGVpZ2h0
KCkpICsgJ3B4JzsKKyAgICB9CiAKLS8vIEZJWE1FOiBUZXN0IG5hdmlnYXRvciBzaG91bGRuJ3Qg
a25vdyBhbnl0aGluZyBhYm91dCBmbGFnZ2luZy4gSXQgc2hvdWxkIHByb2JhYmx5IGNhbGwgb3V0
IHRvIFRlc3RGbGFnZ2VyIG9yIHNvbWV0aGluZy4KLVRlc3ROYXZpZ2F0b3IuZmxhZ1Rlc3QgPSBm
dW5jdGlvbih0ZXN0VGJvZHksIHNob3VsZEZsYWcpCi17Ci0gICAgdmFyIHRlc3ROYW1lID0gdGVz
dFRib2R5LnF1ZXJ5U2VsZWN0b3IoJy50ZXN0LWxpbmsnKS5pbm5lclRleHQ7CisgICAgX2RyYXdB
bGwoKQorICAgIHsKKyAgICAgICAgVXRpbHMuZm9yRWFjaChkb2N1bWVudC5xdWVyeVNlbGVjdG9y
QWxsKCcucGl4ZWwtem9vbS1jb250YWluZXIgLnNjYWxlZC1pbWFnZS1jb250YWluZXInKSwgZWxl
bWVudCA9PiB7IHRoaXMuX2RyYXcoZWxlbWVudCkgfSk7CisgICAgfQogICAgIAotICAgIGlmIChz
aG91bGRGbGFnKSB7Ci0gICAgICAgIHRlc3RUYm9keS5jbGFzc0xpc3QuYWRkKCdmbGFnZ2VkJyk7
Ci0gICAgICAgIFRlc3ROYXZpZ2F0b3IuZmxhZ2dlZFRlc3RzW3Rlc3ROYW1lXSA9IDE7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgdGVzdFRib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ2ZsYWdnZWQnKTsK
LSAgICAgICAgZGVsZXRlIFRlc3ROYXZpZ2F0b3IuZmxhZ2dlZFRlc3RzW3Rlc3ROYW1lXTsKKyAg
ICBoYW5kbGVFdmVudChldmVudCkKKyAgICB7CisgICAgICAgIGlmIChldmVudC50eXBlID09ICdt
b3VzZW1vdmUnKSB7CisgICAgICAgICAgICB0aGlzLl9oYW5kbGVNb3VzZU1vdmUoZXZlbnQpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGV2ZW50LnR5cGUg
PT0gJ21vdXNlb3V0JykgeworICAgICAgICAgICAgdGhpcy5faGFuZGxlTW91c2VPdXQoZXZlbnQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogCi0gICAgVGVzdE5hdmln
YXRvci51cGRhdGVGbGFnZ2VkVGVzdHMoKTsKLX0KKyAgICBfaGFuZGxlTW91c2VPdXQoZXZlbnQp
CisgICAgeworICAgICAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCAmJiBldmVudC5yZWxhdGVk
VGFyZ2V0LnRhZ05hbWUgIT0gJ0lGUkFNRScpCisgICAgICAgICAgICByZXR1cm47CiAKLVRlc3RO
YXZpZ2F0b3IudXBkYXRlRmxhZ2dlZFRlc3RzID0gZnVuY3Rpb24oKQotewotICAgIHZhciBmbGFn
Z2VkVGVzdFRleHRib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmxhZ2dlZC10ZXN0cycp
OwotICAgIGlmICghZmxhZ2dlZFRlc3RUZXh0Ym94KSB7Ci0gICAgICAgIHZhciBmbGFnZ2VkVGVz
dENvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgICAgICBmbGFn
Z2VkVGVzdENvbnRhaW5lci5pZCA9ICdmbGFnZ2VkLXRlc3QtY29udGFpbmVyJzsKLSAgICAgICAg
ZmxhZ2dlZFRlc3RDb250YWluZXIuY2xhc3NOYW1lID0gJ2Zsb2F0aW5nLXBhbmVsJzsKLSAgICAg
ICAgZmxhZ2dlZFRlc3RDb250YWluZXIuaW5uZXJIVE1MID0gJzxoMj5GbGFnZ2VkIFRlc3RzPC9o
Mj48cHJlIGlkPSJmbGFnZ2VkLXRlc3RzIiBjb250ZW50RWRpdGFibGU+PC9wcmU+JzsKLSAgICAg
ICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmbGFnZ2VkVGVzdENvbnRhaW5lcik7Ci0KLSAg
ICAgICAgZmxhZ2dlZFRlc3RUZXh0Ym94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZsYWdn
ZWQtdGVzdHMnKTsKLSAgICB9Ci0KLSAgICB2YXIgZmxhZ2dlZFRlc3RzID0gT2JqZWN0LmtleXMo
dGhpcy5mbGFnZ2VkVGVzdHMpOwotICAgIGZsYWdnZWRUZXN0cy5zb3J0KCk7Ci0gICAgdmFyIHNl
cGFyYXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1c2UtbmV3bGluZXMnKS5jaGVja2Vk
ID8gJ1xuJyA6ICcgJzsKLSAgICBmbGFnZ2VkVGVzdFRleHRib3guaW5uZXJIVE1MID0gZmxhZ2dl
ZFRlc3RzLmpvaW4oc2VwYXJhdG9yKTsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmxh
Z2dlZC10ZXN0LWNvbnRhaW5lcicpLnN0eWxlLmRpc3BsYXkgPSBmbGFnZ2VkVGVzdHMubGVuZ3Ro
ID8gJycgOiAnbm9uZSc7Ci19CisgICAgICAgIC8vIElmIGUucmVsYXRlZFRhcmdldCBpcyBudWxs
LCB3ZSd2ZSBtb3VzZWQgb3V0IG9mIHRoZSBkb2N1bWVudC4KKyAgICAgICAgbGV0IGNvbnRhaW5l
ciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5waXhlbC16b29tLWNvbnRhaW5lcicpOworICAg
ICAgICBpZiAoY29udGFpbmVyKQorICAgICAgICAgICAgY29udGFpbmVyLnJlbW92ZSgpOworICAg
IH0KIAotVGVzdE5hdmlnYXRvci5fc2V0Q3VycmVudFRlc3QgPSBmdW5jdGlvbih0ZXN0SW5kZXgp
Ci17Ci0gICAgdmFyIGxpbmtzID0gdmlzaWJsZVRlc3RzKCk7Ci0gICAgaWYgKHRlc3RJbmRleCA8
IDAgfHwgdGVzdEluZGV4ID49IGxpbmtzLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIF9oYW5kbGVNb3VzZU1vdmUoZXZlbnQpCisgICAgeworICAgICAgICBpZiAodGhpcy5fbW91
c2VNb3ZlVGltZW91dCkgeworICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX21vdXNlTW92
ZVRpbWVvdXQpOworICAgICAgICAgICAgdGhpcy5fbW91c2VNb3ZlVGltZW91dCA9IDA7CisgICAg
ICAgIH0KIAotICAgIHZhciBjdXJyZW50VGVzdCA9IGxpbmtzW1Rlc3ROYXZpZ2F0b3IuY3VycmVu
dFRlc3RJbmRleF07Ci0gICAgaWYgKGN1cnJlbnRUZXN0KQotICAgICAgICBjdXJyZW50VGVzdC5j
bGFzc0xpc3QucmVtb3ZlKCdjdXJyZW50Jyk7CisgICAgICAgIGlmIChVdGlscy5wYXJlbnRPZlR5
cGUoZXZlbnQudGFyZ2V0LCAnLnBpeGVsLXpvb20tY29udGFpbmVyJykpCisgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICBUZXN0TmF2aWdhdG9yLmN1cnJlbnRUZXN0SW5kZXggPSB0ZXN0SW5kZXg7
CisgICAgICAgIGxldCBjb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucGl4ZWwt
em9vbS1jb250YWluZXInKTsKKyAgICAKKyAgICAgICAgbGV0IHJlc3VsdENvbnRhaW5lciA9IChl
dmVudC50YXJnZXQuY2xhc3NOYW1lID09ICdyZXN1bHQtY29udGFpbmVyJykgPyBldmVudC50YXJn
ZXQgOiBVdGlscy5wYXJlbnRPZlR5cGUoZXZlbnQudGFyZ2V0LCAnLnJlc3VsdC1jb250YWluZXIn
KTsKKyAgICAgICAgaWYgKCFyZXN1bHRDb250YWluZXIgfHwgIXJlc3VsdENvbnRhaW5lci5xdWVy
eVNlbGVjdG9yKCdpbWcnKSkgeworICAgICAgICAgICAgaWYgKGNvbnRhaW5lcikKKyAgICAgICAg
ICAgICAgICBjb250YWluZXIucmVtb3ZlKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KIAotICAgIGN1cnJlbnRUZXN0ID0gbGlua3NbVGVzdE5hdmlnYXRvci5jdXJyZW50VGVzdElu
ZGV4XTsKLSAgICBjdXJyZW50VGVzdC5jbGFzc0xpc3QuYWRkKCdjdXJyZW50Jyk7CisgICAgICAg
IGxldCB0YXJnZXRMb2NhdGlvbiA9IGV2ZW50LnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3Qo
KTsKKyAgICAgICAgdGhpcy5fcGVyY2VudFggPSAoZXZlbnQuY2xpZW50WCAtIHRhcmdldExvY2F0
aW9uLmxlZnQpIC8gdGFyZ2V0TG9jYXRpb24ud2lkdGg7CisgICAgICAgIHRoaXMuX3BlcmNlbnRZ
ID0gKGV2ZW50LmNsaWVudFkgLSB0YXJnZXRMb2NhdGlvbi50b3ApIC8gdGFyZ2V0TG9jYXRpb24u
aGVpZ2h0OwogCi0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgICAgIGlmICghY29udGFpbmVyKSB7
CisgICAgICAgICAgICBpZiAodGhpcy5zaG93T25EZWxheSkgeworICAgICAgICAgICAgICAgIHRo
aXMuX21vdXNlTW92ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5fY3JlYXRlQ29udGFpbmVyKGV2ZW50KTsKKyAgICAgICAgICAgICAgICB9LCA0
MDApOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgdGhpcy5fY3JlYXRlQ29udGFpbmVyKGV2ZW50KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIAorICAgICAgICB0aGlzLl9kcmF3QWxsKCk7CisgICAgfQorfTsKIAotVGVz
dE5hdmlnYXRvci5fc2Nyb2xsVG9DdXJyZW50VGVzdCA9IGZ1bmN0aW9uKCkKK2NsYXNzIFRhYmxl
U29ydGVyCiB7Ci0gICAgdmFyIHRhcmdldExpbmsgPSBUZXN0TmF2aWdhdG9yLl9jdXJyZW50VGVz
dExpbmsoKTsKLSAgICBpZiAoIXRhcmdldExpbmspCi0gICAgICAgIHJldHVybjsKKyAgICBzdGF0
aWMgX2ZvcndhcmRBcnJvdygpCisgICAgeworICAgICAgICByZXR1cm4gJzxzdmcgc3R5bGU9Indp
ZHRoOjEwcHg7aGVpZ2h0OjEwcHgiPjxwb2x5Z29uIHBvaW50cz0iMCwwIDEwLDAgNSwxMCIgc3R5
bGU9ImZpbGw6I2NjYyI+PC9zdmc+JzsKKyAgICB9CiAKLSAgICB2YXIgcm93UmVjdCA9IHRhcmdl
dExpbmsuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Ci0gICAgLy8gcm93UmVjdCBpcyBpbiBjbGll
bnQgY29vcmRzIChpLmUuIHJlbGF0aXZlIHRvIHZpZXdwb3J0KSwgc28gd2UganVzdCB3YW50IHRv
IGFkZCBpdHMgdG9wIHRvIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbi4KLSAgICBkb2N1bWVu
dC5ib2R5LnNjcm9sbFRvcCArPSByb3dSZWN0LnRvcDsKLX0KKyAgICBzdGF0aWMgX2JhY2t3YXJk
QXJyb3coKQorICAgIHsKKyAgICAgICAgcmV0dXJuICc8c3ZnIHN0eWxlPSJ3aWR0aDoxMHB4O2hl
aWdodDoxMHB4Ij48cG9seWdvbiBwb2ludHM9IjAsMTAgMTAsMTAgNSwwIiBzdHlsZT0iZmlsbDoj
Y2NjIj48L3N2Zz4nOworICAgIH0KIAotVGVzdE5hdmlnYXRvci5vbmx5U2hvd1VuZXhwZWN0ZWRG
YWlsdXJlc0NoYW5nZWQgPSBmdW5jdGlvbigpCi17Ci0gICAgdmFyIGN1cnJlbnRUZXN0ID0gZG9j
dW1lbnQucXVlcnlTZWxlY3RvcignLmN1cnJlbnQnKTsKLSAgICBpZiAoIWN1cnJlbnRUZXN0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiBvdXIgY3VycmVudFRlc3QgYmVjYW1lIGhpZGRl
biwgcmVzZXQgdGhlIGN1cnJlbnRUZXN0SW5kZXguCi0gICAgaWYgKG9ubHlTaG93VW5leHBlY3Rl
ZEZhaWx1cmVzKCkgJiYgY3VycmVudFRlc3QuY2xhc3NMaXN0LmNvbnRhaW5zKCdleHBlY3RlZCcp
KQotICAgICAgICBUZXN0TmF2aWdhdG9yLl9zY3JvbGxUb0ZpcnN0VGVzdCgpOwotICAgIGVsc2Ug
ewotICAgICAgICAvLyBSZWNvbXB1dGUgVGVzdE5hdmlnYXRvci5jdXJyZW50VGVzdEluZGV4Ci0g
ICAgICAgIHZhciBsaW5rcyA9IHZpc2libGVUZXN0cygpOwotICAgICAgICBUZXN0TmF2aWdhdG9y
LmN1cnJlbnRUZXN0SW5kZXggPSBsaW5rcy5pbmRleE9mKGN1cnJlbnRUZXN0KTsKKyAgICBzdGF0
aWMgX3NvcnRlZENvbnRlbnRzKGhlYWRlciwgYXJyb3cpCisgICAgeworICAgICAgICByZXR1cm4g
YXJyb3cgKyAnICcgKyBVdGlscy50cmltKGhlYWRlci50ZXh0Q29udGVudCkgKyAnICcgKyBhcnJv
dzsKICAgICB9Ci19CiAKLWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywgVGVz
dE5hdmlnYXRvci5oYW5kbGVLZXlFdmVudCwgZmFsc2UpOworICAgIHN0YXRpYyBfdXBkYXRlSGVh
ZGVyQ2xhc3NOYW1lcyhuZXdIZWFkZXIpCisgICAgeworICAgICAgICBsZXQgc29ydEhlYWRlciA9
IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zb3J0SGVhZGVyJyk7CisgICAgICAgIGlmIChzb3J0
SGVhZGVyKSB7CisgICAgICAgICAgICBpZiAoc29ydEhlYWRlciA9PSBuZXdIZWFkZXIpIHsKKyAg
ICAgICAgICAgICAgICBsZXQgaXNBbHJlYWR5UmV2ZXJzZWQgPSBzb3J0SGVhZGVyLmNsYXNzTGlz
dC5jb250YWlucygncmV2ZXJzZWQnKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNBbHJlYWR5UmV2
ZXJzZWQpCisgICAgICAgICAgICAgICAgICAgIHNvcnRIZWFkZXIuY2xhc3NMaXN0LnJlbW92ZSgn
cmV2ZXJzZWQnKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNv
cnRIZWFkZXIuY2xhc3NMaXN0LmFkZCgncmV2ZXJzZWQnKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgc29ydEhlYWRlci50ZXh0Q29udGVudCA9IHNvcnRIZWFkZXIudGV4
dENvbnRlbnQ7CisgICAgICAgICAgICAgICAgc29ydEhlYWRlci5jbGFzc0xpc3QucmVtb3ZlKCdz
b3J0SGVhZGVyJyk7CisgICAgICAgICAgICAgICAgc29ydEhlYWRlci5jbGFzc0xpc3QucmVtb3Zl
KCdyZXZlcnNlZCcpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAKKyAgICAgICAgbmV3SGVh
ZGVyLmNsYXNzTGlzdC5hZGQoJ3NvcnRIZWFkZXInKTsKKyAgICB9CiAKLWZ1bmN0aW9uIG9ubHlT
aG93VW5leHBlY3RlZEZhaWx1cmVzKCkKLXsKLSAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3VuZXhwZWN0ZWQtcmVzdWx0cycpLmNoZWNrZWQ7Ci19CisgICAgc3RhdGljIF90ZXh0
Q29udGVudCh0Ym9keVJvdywgY29sdW1uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRib2R5Um93
LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkJylbY29sdW1uXS50ZXh0Q29udGVudDsKKyAgICB9CiAKLWZ1
bmN0aW9uIGhhbmRsZVVuZXhwZWN0ZWRSZXN1bHRzQ2hhbmdlKCkKLXsKLSAgICBPcHRpb25Xcml0
ZXIuc2F2ZSgpOwotICAgIHVwZGF0ZUV4cGVjdGVkRmFpbHVyZXMoKTsKLX0KKyAgICBzdGF0aWMg
X3NvcnRSb3dzKG5ld0hlYWRlciwgcmV2ZXJzZWQpCisgICAgeworICAgICAgICBsZXQgdGVzdHNU
YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHRzLXRhYmxlJyk7CisgICAgICAg
IGxldCBoZWFkZXJzID0gVXRpbHMudG9BcnJheSh0ZXN0c1RhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwo
J3RoJykpOworICAgICAgICBsZXQgc29ydENvbHVtbiA9IGhlYWRlcnMuaW5kZXhPZihuZXdIZWFk
ZXIpOwogCi1mdW5jdGlvbiB1cGRhdGVFeHBlY3RlZEZhaWx1cmVzKCkKLXsKLSAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgndW5leHBlY3RlZC1zdHlsZScpLnRleHRDb250ZW50ID0gb25seVNo
b3dVbmV4cGVjdGVkRmFpbHVyZXMoKSA/Ci0gICAgICAgICcuZXhwZWN0ZWQgeyBkaXNwbGF5OiBu
b25lOyB9JyA6ICcnOworICAgICAgICBsZXQgcm93cyA9IFV0aWxzLnRvQXJyYXkodGVzdHNUYWJs
ZS5xdWVyeVNlbGVjdG9yQWxsKCd0Ym9keScpKTsKIAotICAgIHVwZGF0ZVRlc3RsaXN0Q291bnRz
KCk7Ci0gICAgVGVzdE5hdmlnYXRvci5vbmx5U2hvd1VuZXhwZWN0ZWRGYWlsdXJlc0NoYW5nZWQo
KTsKLX0KKyAgICAgICAgcm93cy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKKyAgICAgICAgICAgIC8v
IE9ubHkgbmVlZCB0byBzdXBwb3J0IGxleGljb2dyYXBoaWMgc29ydCBmb3Igbm93LgorICAgICAg
ICAgICAgbGV0IGFUZXh0ID0gVGFibGVTb3J0ZXIuX3RleHRDb250ZW50KGEsIHNvcnRDb2x1bW4p
OworICAgICAgICAgICAgbGV0IGJUZXh0ID0gVGFibGVTb3J0ZXIuX3RleHRDb250ZW50KGIsIHNv
cnRDb2x1bW4pOworICAgICAgICAKKyAgICAgICAgICAgIC8vIEZvcndhcmQgc29ydCBlcXVhbCB2
YWx1ZXMgYnkgdGVzdCBuYW1lLgorICAgICAgICAgICAgaWYgKHNvcnRDb2x1bW4gJiYgYVRleHQg
PT0gYlRleHQpIHsKKyAgICAgICAgICAgICAgICBsZXQgYVRlc3ROYW1lID0gVGFibGVTb3J0ZXIu
X3RleHRDb250ZW50KGEsIDApOworICAgICAgICAgICAgICAgIGxldCBiVGVzdE5hbWUgPSBUYWJs
ZVNvcnRlci5fdGV4dENvbnRlbnQoYiwgMCk7CisgICAgICAgICAgICAgICAgaWYgKGFUZXN0TmFt
ZSA9PSBiVGVzdE5hbWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgICAgIHJldHVybiBhVGVzdE5hbWUgPCBiVGVzdE5hbWUgPyAtMSA6IDE7CisgICAgICAgICAg
ICB9CiAKLXZhciBPcHRpb25Xcml0ZXIgPSB7fTsKKyAgICAgICAgICAgIGlmIChyZXZlcnNlZCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gYVRleHQgPCBiVGV4dCA/IDEgOiAtMTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gYVRleHQgPCBiVGV4dCA/IC0xIDogMTsK
KyAgICAgICAgfSk7CiAKLU9wdGlvbldyaXRlci5fa2V5ID0gJ3J1bi13ZWJraXQtdGVzdHMtb3B0
aW9ucyc7CisgICAgICAgIGZvciAobGV0IHJvdyBvZiByb3dzKQorICAgICAgICAgICAgdGVzdHNU
YWJsZS5hcHBlbmRDaGlsZChyb3cpOworICAgIH0KIAotT3B0aW9uV3JpdGVyLnNhdmUgPSBmdW5j
dGlvbigpCi17Ci0gICAgdmFyIG9wdGlvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCds
YWJlbCBpbnB1dCcpOwotICAgIHZhciBkYXRhID0ge307Ci0gICAgZm9yICh2YXIgaSA9IDAsIGxl
biA9IG9wdGlvbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgdmFyIG9wdGlvbiA9
IG9wdGlvbnNbaV07Ci0gICAgICAgIGRhdGFbb3B0aW9uLmlkXSA9IG9wdGlvbi5jaGVja2VkOwot
ICAgIH0KLSAgICB0cnkgewotICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShPcHRpb25Xcml0
ZXIuX2tleSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpOwotICAgIH0gY2F0Y2ggKGVycikgewotICAg
ICAgICBpZiAoZXJyLm5hbWUgIT0gIlNlY3VyaXR5RXJyb3IiKQotICAgICAgICAgICAgdGhyb3cg
ZXJyOworICAgIHN0YXRpYyBzb3J0Q29sdW1uKGNvbHVtbk51bWJlcikKKyAgICB7CisgICAgICAg
IGxldCBuZXdIZWFkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0cy10YWJsZScp
LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RoJylbY29sdW1uTnVtYmVyXTsKKyAgICAgICAgVGFibGVTb3J0
ZXIuX3NvcnQobmV3SGVhZGVyKTsKICAgICB9Ci19CiAKLU9wdGlvbldyaXRlci5hcHBseSA9IGZ1
bmN0aW9uKCkKLXsKLSAgICB2YXIganNvbjsKLSAgICB0cnkgewotICAgICAgICBqc29uID0gbG9j
YWxTdG9yYWdlLmdldEl0ZW0oT3B0aW9uV3JpdGVyLl9rZXkpOwotICAgIH0gY2F0Y2ggKGVycikg
ewotICAgICAgIGlmIChlcnIubmFtZSAhPSAiU2VjdXJpdHlFcnJvciIpCi0gICAgICAgICAgdGhy
b3cgZXJyOworICAgIHN0YXRpYyBoYW5kbGVDbGljayhlKQorICAgIHsKKyAgICAgICAgbGV0IG5l
d0hlYWRlciA9IGUudGFyZ2V0OworICAgICAgICBpZiAobmV3SGVhZGVyLmxvY2FsTmFtZSAhPSAn
dGgnKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBUYWJsZVNvcnRlci5fc29ydChuZXdI
ZWFkZXIpOwogICAgIH0KIAotICAgIGlmICghanNvbikgewotICAgICAgICB1cGRhdGVBbGxPcHRp
b25zKCk7Ci0gICAgICAgIHJldHVybjsKKyAgICBzdGF0aWMgX3NvcnQobmV3SGVhZGVyKQorICAg
IHsKKyAgICAgICAgVGFibGVTb3J0ZXIuX3VwZGF0ZUhlYWRlckNsYXNzTmFtZXMobmV3SGVhZGVy
KTsKKyAgICAKKyAgICAgICAgbGV0IHJldmVyc2VkID0gbmV3SGVhZGVyLmNsYXNzTGlzdC5jb250
YWlucygncmV2ZXJzZWQnKTsKKyAgICAgICAgbGV0IHNvcnRBcnJvdyA9IHJldmVyc2VkID8gVGFi
bGVTb3J0ZXIuX2JhY2t3YXJkQXJyb3coKSA6IFRhYmxlU29ydGVyLl9mb3J3YXJkQXJyb3coKTsK
KyAgICAgICAgbmV3SGVhZGVyLmlubmVySFRNTCA9IFRhYmxlU29ydGVyLl9zb3J0ZWRDb250ZW50
cyhuZXdIZWFkZXIsIHNvcnRBcnJvdyk7CisgICAgCisgICAgICAgIFRhYmxlU29ydGVyLl9zb3J0
Um93cyhuZXdIZWFkZXIsIHJldmVyc2VkKTsKKyAgICB9ICAgIAorfTsKKworY2xhc3MgT3B0aW9u
V3JpdGVyIHsKKyAgICBzdGF0aWMgc2F2ZSgpCisgICAgeworICAgICAgICBsZXQgb3B0aW9ucyA9
IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xhYmVsIGlucHV0Jyk7CisgICAgICAgIGxldCBk
YXRhID0ge307CisgICAgICAgIGZvciAobGV0IG9wdGlvbiBvZiBvcHRpb25zKQorICAgICAgICAg
ICAgZGF0YVtvcHRpb24uaWRdID0gb3B0aW9uLmNoZWNrZWQ7CisKKyAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKE9wdGlvbldyaXRlci5fa2V5LCBKU09OLnN0
cmluZ2lmeShkYXRhKSk7CisgICAgICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgICAgICAgaWYg
KGVyci5uYW1lICE9ICJTZWN1cml0eUVycm9yIikKKyAgICAgICAgICAgICAgICB0aHJvdyBlcnI7
CisgICAgICAgIH0KICAgICB9CiAKLSAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2UoanNvbik7Ci0g
ICAgZm9yICh2YXIgaWQgaW4gZGF0YSkgewotICAgICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZChpZCk7Ci0gICAgICAgIGlmIChpbnB1dCkKLSAgICAgICAgICAgIGlucHV0
LmNoZWNrZWQgPSBkYXRhW2lkXTsKKyAgICBzdGF0aWMgYXBwbHkoKQorICAgIHsKKyAgICAgICAg
bGV0IGpzb247CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBqc29uID0gbG9jYWxTdG9yYWdl
LmdldEl0ZW0oT3B0aW9uV3JpdGVyLl9rZXkpOworICAgICAgICB9IGNhdGNoIChlcnIpIHsKKyAg
ICAgICAgICAgaWYgKGVyci5uYW1lICE9ICJTZWN1cml0eUVycm9yIikKKyAgICAgICAgICAgICAg
dGhyb3cgZXJyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFqc29uKSB7CisgICAgICAgICAg
ICBjb250cm9sbGVyLnVwZGF0ZUFsbE9wdGlvbnMoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGxldCBkYXRhID0gSlNPTi5wYXJzZShqc29uKTsKKyAgICAgICAg
Zm9yIChsZXQgaWQgaW4gZGF0YSkgeworICAgICAgICAgICAgbGV0IGlucHV0ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoaWQpOworICAgICAgICAgICAgaWYgKGlucHV0KQorICAgICAgICAgICAg
ICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhW2lkXTsKKyAgICAgICAgfQorICAgICAgICBjb250cm9s
bGVyLnVwZGF0ZUFsbE9wdGlvbnMoKTsKICAgICB9Ci0gICAgdXBkYXRlQWxsT3B0aW9ucygpOwot
fQogCi1mdW5jdGlvbiB1cGRhdGVBbGxPcHRpb25zKCkKLXsKLSAgICBmb3JFYWNoKGRvY3VtZW50
LnF1ZXJ5U2VsZWN0b3JBbGwoJyNvcHRpb25zLW1lbnUgaW5wdXQnKSwgZnVuY3Rpb24oaW5wdXQp
IHsgaW5wdXQub25jaGFuZ2UoKTsgfSk7Ci19CisgICAgc3RhdGljIGdldCBfa2V5KCkKKyAgICB7
CisgICAgICAgIHJldHVybiAncnVuLXdlYmtpdC10ZXN0cy1vcHRpb25zJzsKKyAgICB9Cit9Owog
Ci1mdW5jdGlvbiBoYW5kbGVUb2dnbGVVc2VOZXdsaW5lcygpCitsZXQgdGVzdFJlc3VsdHM7Citm
dW5jdGlvbiBBRERfUkVTVUxUUyhpbnB1dCkKIHsKLSAgICBPcHRpb25Xcml0ZXIuc2F2ZSgpOwot
ICAgIFRlc3ROYXZpZ2F0b3IudXBkYXRlRmxhZ2dlZFRlc3RzKCk7CisgICAgdGVzdFJlc3VsdHMg
PSBuZXcgVGVzdFJlc3VsdHMoaW5wdXQpOwogfQorPC9zY3JpcHQ+CiAKLWZ1bmN0aW9uIGhhbmRs
ZVRvZ2dsZUltYWdlc0NoYW5nZSgpCi17Ci0gICAgT3B0aW9uV3JpdGVyLnNhdmUoKTsKLSAgICB1
cGRhdGVUb2dnbGluZ0ltYWdlcygpOwotfQorPHNjcmlwdCBzcmM9ImZ1bGxfcmVzdWx0cy5qc29u
Ij48L3NjcmlwdD4KKworPHNjcmlwdD4KIAotZnVuY3Rpb24gdXBkYXRlVG9nZ2xpbmdJbWFnZXMo
KQorY2xhc3MgVGVzdE5hdmlnYXRvcgogewotICAgIHZhciBzaG91bGRUb2dnbGUgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgndG9nZ2xlLWltYWdlcycpLmNoZWNrZWQ7Ci0gICAgZ2xvYmFsU3Rh
dGUoKS5zaG91bGRUb2dnbGVJbWFnZXMgPSBzaG91bGRUb2dnbGU7CisgICAgY29uc3RydWN0b3Io
KSB7CisgICAgICAgIHRoaXMuY3VycmVudFRlc3RJbmRleCA9IC0xOworICAgICAgICB0aGlzLmZs
YWdnZWRUZXN0cyA9IHt9OworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlw
cmVzcycsIHRoaXMsIGZhbHNlKTsKKyAgICB9CiAgICAgCi0gICAgaWYgKHNob3VsZFRvZ2dsZSkg
ewotICAgICAgICBmb3JFYWNoKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RhYmxlOm5vdCgj
bWlzc2luZy10YWJsZSkgdGJvZHk6bm90KFttaXNtYXRjaHJlZnRlc3RdKSBhW2hyZWYkPSIucG5n
Il0nKSwgY29udmVydFRvVG9nZ2xpbmdIYW5kbGVyKGZ1bmN0aW9uKHByZWZpeCkgewotICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdExpbmsocHJlZml4LCAnLWRpZmZzLmh0bWwnLCAnaW1hZ2VzJyk7
Ci0gICAgICAgIH0pKTsKLSAgICAgICAgZm9yRWFjaChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxs
KCd0YWJsZTpub3QoI21pc3NpbmctdGFibGUpIHRib2R5Om5vdChbbWlzbWF0Y2hyZWZ0ZXN0XSkg
aW1nW3NyYyQ9Ii5wbmciXScpLCBjb252ZXJ0VG9Ub2dnbGluZ0hhbmRsZXIodG9nZ2xpbmdJbWFn
ZSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvckVhY2goZG9jdW1lbnQucXVlcnlTZWxlY3Rv
ckFsbCgnYVtocmVmJD0iLWRpZmZzLmh0bWwiXScpLCBjb252ZXJ0VG9Ob25Ub2dnbGluZ0hhbmRs
ZXIocmVzdWx0TGluaykpOwotICAgICAgICBmb3JFYWNoKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JB
bGwoJy5hbmltYXRlZEltYWdlJyksIGNvbnZlcnRUb05vblRvZ2dsaW5nSGFuZGxlcihmdW5jdGlv
biAoYWJzb2x1dGVQcmVmaXgsIHN1ZmZpeCkgewotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdElm
cmFtZShhYnNvbHV0ZVByZWZpeCArIHN1ZmZpeCk7Ci0gICAgICAgIH0pKTsKLSAgICB9Ci0KLSAg
ICB1cGRhdGVJbWFnZVRvZ2dsaW5nVGltZXIoKTsKLX0KKyAgICBoYW5kbGVFdmVudChldmVudCkK
KyAgICB7CisgICAgICAgIGlmIChldmVudC50eXBlID09ICdrZXlwcmVzcycpIHsKKyAgICAgICAg
ICAgIHRoaXMuaGFuZGxlS2V5RXZlbnQoZXZlbnQpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQogCi1mdW5jdGlvbiBnZXRSZXN1bHRDb250YWluZXIobm9kZSkKLXsKLSAg
ICByZXR1cm4gKG5vZGUudGFnTmFtZSA9PSAnSU1HJykgPyBwYXJlbnRPZlR5cGUobm9kZSwgJy5y
ZXN1bHQtY29udGFpbmVyJykgOiBub2RlOwotfQorICAgIGhhbmRsZUtleUV2ZW50KGV2ZW50KQor
ICAgIHsKKyAgICAgICAgaWYgKGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZl
bnQuY3RybEtleSkKKyAgICAgICAgICAgIHJldHVybjsKIAotZnVuY3Rpb24gY29udmVydFRvVG9n
Z2xpbmdIYW5kbGVyKHRvZ2dsaW5nSW1hZ2VGdW5jdGlvbikKLXsKLSAgICByZXR1cm4gZnVuY3Rp
b24obm9kZSkgewotICAgICAgICB2YXIgdXJsID0gKG5vZGUudGFnTmFtZSA9PSAnSU1HJykgPyBu
b2RlLnNyYyA6IG5vZGUuaHJlZjsKLSAgICAgICAgaWYgKHVybC5tYXRjaCgnLWV4cGVjdGVkLnBu
ZyQnKSkKLSAgICAgICAgICAgIHJlbW92ZShnZXRSZXN1bHRDb250YWluZXIobm9kZSkpOwotICAg
ICAgICBlbHNlIGlmICh1cmwubWF0Y2goJy1hY3R1YWwucG5nJCcpKSB7Ci0gICAgICAgICAgICB2
YXIgbmFtZSA9IHBhcmVudE9mVHlwZShub2RlLCAndGJvZHknKS5xdWVyeVNlbGVjdG9yKCcudGVz
dC1saW5rJykudGV4dENvbnRlbnQ7Ci0gICAgICAgICAgICBnZXRSZXN1bHRDb250YWluZXIobm9k
ZSkub3V0ZXJIVE1MID0gdG9nZ2xpbmdJbWFnZUZ1bmN0aW9uKHN0cmlwRXh0ZW5zaW9uKG5hbWUp
KTsKKyAgICAgICAgc3dpdGNoIChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSkg
eworICAgICAgICAgICAgY2FzZSAnaSc6CisgICAgICAgICAgICAgICAgdGhpcy5fc2Nyb2xsVG9G
aXJzdFRlc3QoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2on
OgorICAgICAgICAgICAgICAgIHRoaXMuX3Njcm9sbFRvTmV4dFRlc3QoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2snOgorICAgICAgICAgICAgICAgIHRoaXMu
X3Njcm9sbFRvUHJldmlvdXNUZXN0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlICdsJzoKKyAgICAgICAgICAgICAgICB0aGlzLl9zY3JvbGxUb0xhc3RUZXN0KCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdlJzoKKyAgICAgICAg
ICAgICAgICB0aGlzLl9leHBhbmRDdXJyZW50VGVzdCgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSAnYyc6CisgICAgICAgICAgICAgICAgdGhpcy5fY29sbGFwc2VD
dXJyZW50VGVzdCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAn
dCc6CisgICAgICAgICAgICAgICAgdGhpcy5fdG9nZ2xlQ3VycmVudFRlc3QoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2YnOgorICAgICAgICAgICAgICAgIHRo
aXMuX3RvZ2dsZUN1cnJlbnRUZXN0RmxhZ2dlZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgfQotfQogCi1mdW5jdGlvbiBjb252ZXJ0VG9Ob25Ub2dnbGluZ0hhbmRs
ZXIocmVzdWx0RnVuY3Rpb24pCi17Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAg
ICAgdmFyIHByZWZpeCA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXByZWZpeCcpOwotICAgICAg
ICBnZXRSZXN1bHRDb250YWluZXIobm9kZSkub3V0ZXJIVE1MID0gcmVzdWx0RnVuY3Rpb24ocHJl
Zml4LCAnLWV4cGVjdGVkLnBuZycsICdleHBlY3RlZCcpICsgcmVzdWx0RnVuY3Rpb24ocHJlZml4
LCAnLWFjdHVhbC5wbmcnLCAnYWN0dWFsJyk7CisgICAgX3Njcm9sbFRvRmlyc3RUZXN0KCkKKyAg
ICB7CisgICAgICAgIGlmICh0aGlzLl9zZXRDdXJyZW50VGVzdCgwKSkKKyAgICAgICAgICAgIHRo
aXMuX3Njcm9sbFRvQ3VycmVudFRlc3QoKTsKICAgICB9Ci19CiAKLWZ1bmN0aW9uIHRvZ2dsZU9w
dGlvbnNNZW51KCkKLXsKLSAgICB2YXIgbWVudSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdv
cHRpb25zLW1lbnUnKTsKLSAgICBtZW51LmNsYXNzTmFtZSA9IChtZW51LmNsYXNzTmFtZSA9PSAn
aGlkZGVuLW1lbnUnKSA/ICcnIDogJ2hpZGRlbi1tZW51JzsKLX0KLQotZnVuY3Rpb24gaGFuZGxl
TW91c2VEb3duKGUpCi17Ci0gICAgaWYgKCFwYXJlbnRPZlR5cGUoZS50YXJnZXQsICcjb3B0aW9u
cy1tZW51JykgJiYgZS50YXJnZXQuaWQgIT0gJ29wdGlvbnMtbGluaycpCi0gICAgICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdvcHRpb25zLW1lbnUnKS5jbGFzc05hbWUgPSAnaGlkZGVuLW1l
bnUnOwotfQotCi1kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVN
b3VzZURvd24sIGZhbHNlKTsKLQotZnVuY3Rpb24gZmFpbGluZ1Rlc3RzVGFibGUodGVzdHMsIHRp
dGxlLCBpZCkKLXsKLSAgICBpZiAoIXRlc3RzLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuICcnOwor
ICAgIF9zY3JvbGxUb0xhc3RUZXN0KCkKKyAgICB7CisgICAgICAgIGxldCBsaW5rcyA9IGNvbnRy
b2xsZXIudmlzaWJsZVRlc3RzKCk7CisgICAgICAgIGlmICh0aGlzLl9zZXRDdXJyZW50VGVzdChs
aW5rcy5sZW5ndGggLSAxKSkKKyAgICAgICAgICAgIHRoaXMuX3Njcm9sbFRvQ3VycmVudFRlc3Qo
KTsKKyAgICB9CiAKLSAgICB2YXIgbnVtYmVyb2ZVbmV4cGVjdGVkRmFpbHVyZXMgPSAwOwotICAg
IHZhciB0YWJsZVJvd0h0bWwgPSAnJzsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RzLmxl
bmd0aDsgaSsrKXsKLSAgICAgICAgdGFibGVSb3dIdG1sICs9IHRhYmxlUm93KHRlc3RzW2ldKTsK
LSAgICAgICAgaWYgKCF0ZXN0c1tpXS5pc0V4cGVjdGVkKQotICAgICAgICAgICAgbnVtYmVyb2ZV
bmV4cGVjdGVkRmFpbHVyZXMrKzsKKyAgICBfc2Nyb2xsVG9OZXh0VGVzdCgpCisgICAgeworICAg
ICAgICBpZiAodGhpcy5jdXJyZW50VGVzdEluZGV4ID09IC0xKQorICAgICAgICAgICAgdGhpcy5f
c2Nyb2xsVG9GaXJzdFRlc3QoKTsKKyAgICAgICAgZWxzZSBpZiAodGhpcy5fc2V0Q3VycmVudFRl
c3QodGhpcy5jdXJyZW50VGVzdEluZGV4ICsgMSkpCisgICAgICAgICAgICB0aGlzLl9zY3JvbGxU
b0N1cnJlbnRUZXN0KCk7CiAgICAgfQogCi0gICAgdmFyIGhlYWRlciA9ICc8ZGl2JzsKLSAgICBp
ZiAoIWhhc1VuZXhwZWN0ZWQodGVzdHMpKQotICAgICAgICBoZWFkZXIgKz0gJyBjbGFzcz1leHBl
Y3RlZCc7CisgICAgX3Njcm9sbFRvUHJldmlvdXNUZXN0KCkKKyAgICB7CisgICAgICAgIGlmICh0
aGlzLmN1cnJlbnRUZXN0SW5kZXggPT0gLTEpCisgICAgICAgICAgICB0aGlzLl9zY3JvbGxUb0xh
c3RUZXN0KCk7CisgICAgICAgIGVsc2UgaWYgKHRoaXMuX3NldEN1cnJlbnRUZXN0KHRoaXMuY3Vy
cmVudFRlc3RJbmRleCAtIDEpKQorICAgICAgICAgICAgdGhpcy5fc2Nyb2xsVG9DdXJyZW50VGVz
dCgpOworICAgIH0KIAotICAgIGhlYWRlciArPSAnPicgKyB0ZXN0TGlzdEhlYWRlckh0bWwodGl0
bGUpICsKLSAgICAgICAgJzx0YWJsZSBpZD0iJyArIGlkICsgJyI+PHRoZWFkPjx0cj4nICsKLSAg
ICAgICAgJzx0aD50ZXN0PC90aD4nICsKLSAgICAgICAgJzx0aCBpZD0idGV4dC1yZXN1bHRzLWhl
YWRlciI+cmVzdWx0czwvdGg+JyArCi0gICAgICAgICc8dGggaWQ9ImltYWdlLXJlc3VsdHMtaGVh
ZGVyIj5pbWFnZSByZXN1bHRzPC90aD4nOworICAgIF9jdXJyZW50VGVzdExpbmsoKQorICAgIHsK
KyAgICAgICAgbGV0IGxpbmtzID0gY29udHJvbGxlci52aXNpYmxlVGVzdHMoKTsKKyAgICAgICAg
cmV0dXJuIGxpbmtzW3RoaXMuY3VycmVudFRlc3RJbmRleF07CisgICAgfQogCi0gICAgaWYgKGds
b2JhbFN0YXRlKCkucmVzdWx0cy51c2VzX2V4cGVjdGF0aW9uc19maWxlKQotICAgICAgICBoZWFk
ZXIgKz0gJzx0aD5hY3R1YWwgZmFpbHVyZTwvdGg+PHRoPmV4cGVjdGVkIGZhaWx1cmU8L3RoPic7
CisgICAgX2N1cnJlbnRUZXN0RXhwYW5kTGluaygpCisgICAgeworICAgICAgICByZXR1cm4gdGhp
cy5fY3VycmVudFRlc3RMaW5rKCkucXVlcnlTZWxlY3RvcignLmV4cGFuZC1idXR0b24tdGV4dCcp
OworICAgIH0KIAotICAgIGhlYWRlciArPSAnPHRoPjxhIGhyZWY9IicgKyBmbGFraW5lc3NEYXNo
Ym9hcmRVUkxGb3JUZXN0cyh0ZXN0cykgKyAnIj5oaXN0b3J5PC9hPjwvdGg+JzsKKyAgICBfZXhw
YW5kQ3VycmVudFRlc3QoKQorICAgIHsKKyAgICAgICAgY29udHJvbGxlci5leHBhbmRFeHBlY3Rh
dGlvbnModGhpcy5fY3VycmVudFRlc3RFeHBhbmRMaW5rKCkpOworICAgIH0KIAotICAgIGlmIChp
ZCA9PSAnZmxha3ktdGVzdHMtdGFibGUnKQotICAgICAgICBoZWFkZXIgKz0gJzx0aD5mYWlsdXJl
czwvdGg+JzsKKyAgICBfY29sbGFwc2VDdXJyZW50VGVzdCgpCisgICAgeworICAgICAgICBjb250
cm9sbGVyLmNvbGxhcHNlRXhwZWN0YXRpb25zKHRoaXMuX2N1cnJlbnRUZXN0RXhwYW5kTGluaygp
KTsKKyAgICB9CiAKLSAgICBoZWFkZXIgKz0gJzwvdHI+PC90aGVhZD4nOworICAgIF90b2dnbGVD
dXJyZW50VGVzdCgpCisgICAgeworICAgICAgICBjb250cm9sbGVyLnRvZ2dsZUV4cGVjdGF0aW9u
cyh0aGlzLl9jdXJyZW50VGVzdEV4cGFuZExpbmsoKSk7CisgICAgfQogCi0gICAgcmV0dXJuIGhl
YWRlciArIHRhYmxlUm93SHRtbCArICc8L3RhYmxlPjwvZGl2Pic7Ci19CisgICAgX3RvZ2dsZUN1
cnJlbnRUZXN0RmxhZ2dlZCgpCisgICAgeworICAgICAgICBsZXQgdGVzdExpbmsgPSB0aGlzLl9j
dXJyZW50VGVzdExpbmsoKTsKKyAgICAgICAgdGhpcy5mbGFnVGVzdCh0ZXN0TGluaywgIXRlc3RM
aW5rLmNsYXNzTGlzdC5jb250YWlucygnZmxhZ2dlZCcpKTsKKyAgICB9CiAKLWZ1bmN0aW9uIHVw
ZGF0ZVRpdGxlKCkKLXsKLSAgICB2YXIgZGF0ZVN0cmluZyA9IGdsb2JhbFN0YXRlKCkucmVzdWx0
cy5kYXRlOworICAgIC8vIEZJWE1FOiBUZXN0IG5hdmlnYXRvciBzaG91bGRuJ3Qga25vdyBhbnl0
aGluZyBhYm91dCBmbGFnZ2luZy4gSXQgc2hvdWxkIHByb2JhYmx5IGNhbGwgb3V0IHRvIFRlc3RG
bGFnZ2VyIG9yIHNvbWV0aGluZy4KKyAgICAvLyBGSVhNRTogQmF0Y2ggZmxhZ2dpbmcgKGF2b2lk
IHVwZGF0ZUZsYWdnZWRUZXN0cyBvbiBlYWNoIHRlc3QpLgorICAgIGZsYWdUZXN0KHRlc3RUYm9k
eSwgc2hvdWxkRmxhZykKKyAgICB7CisgICAgICAgIGxldCB0ZXN0TmFtZSA9IHRlc3RUYm9keS5x
dWVyeVNlbGVjdG9yKCcudGVzdC1saW5rJykuaW5uZXJUZXh0OwogICAgIAotICAgIHZhciB0aXRs
ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RpdGxlJyk7Ci0gICAgdGl0bGUudGV4dENvbnRl
bnQgPSAnTGF5b3V0IFRlc3QgUmVzdWx0cyBmcm9tICcgKyBkYXRlU3RyaW5nOwotICAgIGRvY3Vt
ZW50LmhlYWQuYXBwZW5kQ2hpbGQodGl0bGUpOwotfQotCi1mdW5jdGlvbiBnZW5lcmF0ZVBhZ2Uo
KQotewotICAgIHVwZGF0ZVRpdGxlKCk7Ci0gICAgZm9yRWFjaFRlc3QocHJvY2Vzc0dsb2JhbFN0
YXRlRm9yKTsKLSAgICBmb3JPdGhlckNyYXNoZXMoKTsKLQotICAgIHZhciBodG1sID0gIiI7Cisg
ICAgICAgIGlmIChzaG91bGRGbGFnKSB7CisgICAgICAgICAgICB0ZXN0VGJvZHkuY2xhc3NMaXN0
LmFkZCgnZmxhZ2dlZCcpOworICAgICAgICAgICAgdGhpcy5mbGFnZ2VkVGVzdHNbdGVzdE5hbWVd
ID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RUYm9keS5jbGFzc0xpc3Qu
cmVtb3ZlKCdmbGFnZ2VkJyk7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5mbGFnZ2VkVGVzdHNb
dGVzdE5hbWVdOworICAgICAgICB9CiAKLSAgICBpZiAoZ2xvYmFsU3RhdGUoKS5yZXN1bHRzLmlu
dGVycnVwdGVkKQotICAgICAgICBodG1sICs9ICI8cCBjbGFzcz0nc3RvcHBlZC1ydW5uaW5nLWVh
cmx5LW1lc3NhZ2UnPlRlc3RpbmcgZXhpdGVkIGVhcmx5LjwvcD4iCisgICAgICAgIHRoaXMudXBk
YXRlRmxhZ2dlZFRlc3RzKCk7CisgICAgfQogCi0gICAgaWYgKGdsb2JhbFN0YXRlKCkuY3Jhc2hU
ZXN0cy5sZW5ndGgpCi0gICAgICAgIGh0bWwgKz0gdGVzdExpc3QoZ2xvYmFsU3RhdGUoKS5jcmFz
aFRlc3RzLCAnVGVzdHMgdGhhdCBjcmFzaGVkJywgJ2NyYXNoLXRlc3RzLXRhYmxlJyk7CisgICAg
dXBkYXRlRmxhZ2dlZFRlc3RzKCkKKyAgICB7CisgICAgICAgIGxldCBmbGFnZ2VkVGVzdFRleHRi
b3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmxhZ2dlZC10ZXN0cycpOworICAgICAgICBp
ZiAoIWZsYWdnZWRUZXN0VGV4dGJveCkgeworICAgICAgICAgICAgbGV0IGZsYWdnZWRUZXN0Q29u
dGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgICAgICBmbGFn
Z2VkVGVzdENvbnRhaW5lci5pZCA9ICdmbGFnZ2VkLXRlc3QtY29udGFpbmVyJzsKKyAgICAgICAg
ICAgIGZsYWdnZWRUZXN0Q29udGFpbmVyLmNsYXNzTmFtZSA9ICdmbG9hdGluZy1wYW5lbCc7Cisg
ICAgICAgICAgICBmbGFnZ2VkVGVzdENvbnRhaW5lci5pbm5lckhUTUwgPSAnPGgyPkZsYWdnZWQg
VGVzdHM8L2gyPjxwcmUgaWQ9ImZsYWdnZWQtdGVzdHMiIGNvbnRlbnRFZGl0YWJsZT48L3ByZT4n
OworICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmbGFnZ2VkVGVzdENvbnRh
aW5lcik7CisKKyAgICAgICAgICAgIGZsYWdnZWRUZXN0VGV4dGJveCA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdmbGFnZ2VkLXRlc3RzJyk7CisgICAgICAgIH0KIAotICAgIGlmIChnbG9iYWxT
dGF0ZSgpLmNyYXNoT3RoZXIubGVuZ3RoKQotICAgICAgICBodG1sICs9IHRlc3RMaXN0KGdsb2Jh
bFN0YXRlKCkuY3Jhc2hPdGhlciwgJ090aGVyIENyYXNoZXMnLCAnb3RoZXItY3Jhc2gtdGVzdHMt
dGFibGUnKTsKKyAgICAgICAgbGV0IGZsYWdnZWRUZXN0cyA9IE9iamVjdC5rZXlzKHRoaXMuZmxh
Z2dlZFRlc3RzKTsKKyAgICAgICAgZmxhZ2dlZFRlc3RzLnNvcnQoKTsKKyAgICAgICAgbGV0IHNl
cGFyYXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1c2UtbmV3bGluZXMnKS5jaGVja2Vk
ID8gJ1xuJyA6ICcgJzsKKyAgICAgICAgZmxhZ2dlZFRlc3RUZXh0Ym94LmlubmVySFRNTCA9IGZs
YWdnZWRUZXN0cy5qb2luKHNlcGFyYXRvcik7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdmbGFnZ2VkLXRlc3QtY29udGFpbmVyJykuc3R5bGUuZGlzcGxheSA9IGZsYWdnZWRUZXN0
cy5sZW5ndGggPyAnJyA6ICdub25lJzsKKyAgICB9CiAKLSAgICBodG1sICs9IGZhaWxpbmdUZXN0
c1RhYmxlKGdsb2JhbFN0YXRlKCkuZmFpbGluZ1Rlc3RzLAotICAgICAgICAnVGVzdHMgdGhhdCBm
YWlsZWQgdGV4dC9waXhlbC9hdWRpbyBkaWZmJywgJ3Jlc3VsdHMtdGFibGUnKTsKKyAgICBfc2V0
Q3VycmVudFRlc3QodGVzdEluZGV4KQorICAgIHsKKyAgICAgICAgbGV0IGxpbmtzID0gY29udHJv
bGxlci52aXNpYmxlVGVzdHMoKTsKKyAgICAgICAgaWYgKHRlc3RJbmRleCA8IDAgfHwgdGVzdElu
ZGV4ID49IGxpbmtzLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGh0
bWwgKz0gZmFpbGluZ1Rlc3RzVGFibGUoZ2xvYmFsU3RhdGUoKS5taXNzaW5nUmVzdWx0cywKLSAg
ICAgICAgJ1Rlc3RzIHRoYXQgaGFkIG5vIGV4cGVjdGVkIHJlc3VsdHMgKHByb2JhYmx5IG5ldykn
LCAnbWlzc2luZy10YWJsZScpOworICAgICAgICBsZXQgY3VycmVudFRlc3QgPSBsaW5rc1t0aGlz
LmN1cnJlbnRUZXN0SW5kZXhdOworICAgICAgICBpZiAoY3VycmVudFRlc3QpCisgICAgICAgICAg
ICBjdXJyZW50VGVzdC5jbGFzc0xpc3QucmVtb3ZlKCdjdXJyZW50Jyk7CiAKLSAgICBpZiAoZ2xv
YmFsU3RhdGUoKS50aW1lb3V0VGVzdHMubGVuZ3RoKQotICAgICAgICBodG1sICs9IHRlc3RMaXN0
KGdsb2JhbFN0YXRlKCkudGltZW91dFRlc3RzLCAnVGVzdHMgdGhhdCB0aW1lZCBvdXQnLCAndGlt
ZW91dC10ZXN0cy10YWJsZScpOworICAgICAgICB0aGlzLmN1cnJlbnRUZXN0SW5kZXggPSB0ZXN0
SW5kZXg7CiAKLSAgICBpZiAoZ2xvYmFsU3RhdGUoKS50ZXN0c1dpdGhTdGRlcnIubGVuZ3RoKQot
ICAgICAgICBodG1sICs9IHRlc3RMaXN0KGdsb2JhbFN0YXRlKCkudGVzdHNXaXRoU3RkZXJyLCAn
VGVzdHMgdGhhdCBoYWQgc3RkZXJyIG91dHB1dCcsICdzdGRlcnItdGFibGUnKTsKKyAgICAgICAg
Y3VycmVudFRlc3QgPSBsaW5rc1t0aGlzLmN1cnJlbnRUZXN0SW5kZXhdOworICAgICAgICBjdXJy
ZW50VGVzdC5jbGFzc0xpc3QuYWRkKCdjdXJyZW50Jyk7CiAKLSAgICBodG1sICs9IGZhaWxpbmdU
ZXN0c1RhYmxlKGdsb2JhbFN0YXRlKCkuZmxha3lQYXNzVGVzdHMsCi0gICAgICAgICdGbGFreSB0
ZXN0cyAoZmFpbGVkIHRoZSBmaXJzdCBydW4gYW5kIHBhc3NlZCBvbiByZXRyeSknLCAnZmxha3kt
dGVzdHMtdGFibGUnKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCi0gICAgaWYgKGds
b2JhbFN0YXRlKCkucmVzdWx0cy51c2VzX2V4cGVjdGF0aW9uc19maWxlICYmIGdsb2JhbFN0YXRl
KCkudW5leHBlY3RlZFBhc3NUZXN0cy5sZW5ndGgpCi0gICAgICAgIGh0bWwgKz0gdGVzdExpc3Qo
Z2xvYmFsU3RhdGUoKS51bmV4cGVjdGVkUGFzc1Rlc3RzLCAnVGVzdHMgZXhwZWN0ZWQgdG8gZmFp
bCBidXQgcGFzc2VkJywgJ3Bhc3Nlcy10YWJsZScpOworICAgIF9zY3JvbGxUb0N1cnJlbnRUZXN0
KCkKKyAgICB7CisgICAgICAgIGxldCB0YXJnZXRMaW5rID0gdGhpcy5fY3VycmVudFRlc3RMaW5r
KCk7CisgICAgICAgIGlmICghdGFyZ2V0TGluaykKKyAgICAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChnbG9iYWxTdGF0ZSgpLmhhc0h0dHBUZXN0cykgewotICAgICAgICBodG1sICs9ICc8cD5o
dHRwZCBhY2Nlc3MgbG9nOiA8YSBocmVmPSJhY2Nlc3NfbG9nLnR4dCI+YWNjZXNzX2xvZy50eHQ8
L2E+PC9wPicgKwotICAgICAgICAgICAgJzxwPmh0dHBkIGVycm9yIGxvZzogPGEgaHJlZj0iZXJy
b3JfbG9nLnR4dCI+ZXJyb3JfbG9nLnR4dDwvYT48L3A+JzsKKyAgICAgICAgbGV0IHJvd1JlY3Qg
PSB0YXJnZXRMaW5rLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgICAgICAvLyByb3dSZWN0
IGlzIGluIGNsaWVudCBjb29yZHMgKGkuZS4gcmVsYXRpdmUgdG8gdmlld3BvcnQpLCBzbyB3ZSBq
dXN0IHdhbnQgdG8gYWRkIGl0cyB0b3AgdG8gdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uLgor
ICAgICAgICBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCArPSByb3dSZWN0LnRvcDsKICAgICB9CiAK
LSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi1jb250ZW50JykuaW5uZXJIVE1MID0g
aHRtbCArICc8L2Rpdj4nOworICAgIG9ubHlTaG93VW5leHBlY3RlZEZhaWx1cmVzQ2hhbmdlZCgp
CisgICAgeworICAgICAgICBsZXQgY3VycmVudFRlc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9y
KCcuY3VycmVudCcpOworICAgICAgICBpZiAoIWN1cnJlbnRUZXN0KQorICAgICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHRzLXRhYmxlJykp
IHsKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdHMtdGFibGUnKS5hZGRF
dmVudExpc3RlbmVyKCdjbGljaycsIFRhYmxlU29ydGVyLmhhbmRsZUNsaWNrLCBmYWxzZSk7Ci0g
ICAgICAgIFRhYmxlU29ydGVyLnNvcnRDb2x1bW4oMCk7Ci0gICAgICAgIGlmICghZ2xvYmFsU3Rh
dGUoKS5yZXN1bHRzLnVzZXNfZXhwZWN0YXRpb25zX2ZpbGUpCi0gICAgICAgICAgICBwYXJlbnRP
ZlR5cGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VuZXhwZWN0ZWQtcmVzdWx0cycpLCAnbGFi
ZWwnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwotICAgICAgICBpZiAoIWdsb2JhbFN0YXRlKCku
aGFzVGV4dEZhaWx1cmVzKQotICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rl
eHQtcmVzdWx0cy1oZWFkZXInKS50ZXh0Q29udGVudCA9ICcnOwotICAgICAgICBpZiAoIWdsb2Jh
bFN0YXRlKCkuaGFzSW1hZ2VGYWlsdXJlcykgewotICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2ltYWdlLXJlc3VsdHMtaGVhZGVyJykudGV4dENvbnRlbnQgPSAnJzsKLSAgICAg
ICAgICAgIHBhcmVudE9mVHlwZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9nZ2xlLWltYWdl
cycpLCAnbGFiZWwnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgICAgICAvLyBJZiBvdXIg
Y3VycmVudFRlc3QgYmVjYW1lIGhpZGRlbiwgcmVzZXQgdGhlIGN1cnJlbnRUZXN0SW5kZXguCisg
ICAgICAgIGlmIChjb250cm9sbGVyLm9ubHlTaG93VW5leHBlY3RlZEZhaWx1cmVzKCkgJiYgY3Vy
cmVudFRlc3QuY2xhc3NMaXN0LmNvbnRhaW5zKCdleHBlY3RlZCcpKQorICAgICAgICAgICAgdGhp
cy5fc2Nyb2xsVG9GaXJzdFRlc3QoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBS
ZWNvbXB1dGUgdGhpcy5jdXJyZW50VGVzdEluZGV4CisgICAgICAgICAgICBsZXQgbGlua3MgPSBj
b250cm9sbGVyLnZpc2libGVUZXN0cygpOworICAgICAgICAgICAgdGhpcy5jdXJyZW50VGVzdElu
ZGV4ID0gbGlua3MuaW5kZXhPZihjdXJyZW50VGVzdCk7CiAgICAgICAgIH0KICAgICB9Cit9Owor
CitmdW5jdGlvbiBoYW5kbGVNb3VzZURvd24oZSkKK3sKKyAgICBpZiAoIVV0aWxzLnBhcmVudE9m
VHlwZShlLnRhcmdldCwgJyNvcHRpb25zLW1lbnUnKSAmJiBlLnRhcmdldC5pZCAhPSAnb3B0aW9u
cy1saW5rJykKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29wdGlvbnMtbWVudScp
LmNsYXNzTmFtZSA9ICdoaWRkZW4tbWVudSc7Cit9CiAKLSAgICB1cGRhdGVUZXN0bGlzdENvdW50
cygpOworZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlTW91c2VE
b3duLCBmYWxzZSk7CisKK2xldCBjb250cm9sbGVyOworbGV0IHBpeGVsWm9vbWVyOworbGV0IHRl
c3ROYXZpZ2F0b3I7CisKK2Z1bmN0aW9uIGdlbmVyYXRlUGFnZSgpCit7CisgICAgbGV0IGNvbnRh
aW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluLWNvbnRlbnQnKTsKKworICAgIGNv
bnRyb2xsZXIgPSBuZXcgVGVzdFJlc3VsdHNDb250cm9sbGVyKGNvbnRhaW5lciwgdGVzdFJlc3Vs
dHMpOworICAgIHBpeGVsWm9vbWVyID0gbmV3IFBpeGVsWm9vbWVyKCk7CisgICAgdGVzdE5hdmln
YXRvciA9IG5ldyBUZXN0TmF2aWdhdG9yKCk7CiAKLSAgICBUZXN0TmF2aWdhdG9yLnJlc2V0KCk7
CiAgICAgT3B0aW9uV3JpdGVyLmFwcGx5KCk7CiB9CisKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVy
KCdsb2FkJywgZ2VuZXJhdGVQYWdlLCBmYWxzZSk7CisKIDwvc2NyaXB0PgotPGJvZHkgb25sb2Fk
PSJnZW5lcmF0ZVBhZ2UoKSI+Cis8Ym9keT4KICAgICAKICAgICA8ZGl2IGNsYXNzPSJjb250ZW50
LWNvbnRhaW5lciI+CiAgICAgICAgIDxkaXYgaWQ9InRvb2xiYXIiIGNsYXNzPSJmbG9hdGluZy1w
YW5lbCI+CiAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPlVzZSB0aGUgaSwgaiwgayBhbmQgbCBr
ZXlzIHRvIG5hdmlnYXRlLCBlLCBjIHRvIGV4cGFuZCBhbmQgY29sbGFwc2UsIGFuZCBmIHRvIGZs
YWc8L2Rpdj4KLSAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKCkiIG9uY2xpY2s9ImV4
cGFuZEFsbEV4cGVjdGF0aW9ucygpIj5leHBhbmQgYWxsPC9hPgotICAgICAgICA8YSBocmVmPSJq
YXZhc2NyaXB0OnZvaWQoKSIgb25jbGljaz0iY29sbGFwc2VBbGxFeHBlY3RhdGlvbnMoKSI+Y29s
bGFwc2UgYWxsPC9hPgotICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoKSIgaWQ9b3B0
aW9ucy1saW5rIG9uY2xpY2s9InRvZ2dsZU9wdGlvbnNNZW51KCkiPm9wdGlvbnM8L2E+CisgICAg
ICAgIDxhIGNsYXNzPSJjbGlja2FibGUiIG9uY2xpY2s9ImNvbnRyb2xsZXIuZXhwYW5kQWxsRXhw
ZWN0YXRpb25zKCkiPmV4cGFuZCBhbGw8L2E+CisgICAgICAgIDxhIGNsYXNzPSJjbGlja2FibGUi
IG9uY2xpY2s9ImNvbnRyb2xsZXIuY29sbGFwc2VBbGxFeHBlY3RhdGlvbnMoKSI+Y29sbGFwc2Ug
YWxsPC9hPgorICAgICAgICA8YSBjbGFzcz0iY2xpY2thYmxlIiBpZD1vcHRpb25zLWxpbmsgb25j
bGljaz0iY29udHJvbGxlci50b2dnbGVPcHRpb25zTWVudSgpIj5vcHRpb25zPC9hPgogICAgICAg
ICA8ZGl2IGlkPSJvcHRpb25zLW1lbnUiIGNsYXNzPSJoaWRkZW4tbWVudSI+Ci0gICAgICAgICAg
ICA8bGFiZWw+PGlucHV0IGlkPSJ1bmV4cGVjdGVkLXJlc3VsdHMiIHR5cGU9ImNoZWNrYm94IiBj
aGVja2VkIG9uY2hhbmdlPSJoYW5kbGVVbmV4cGVjdGVkUmVzdWx0c0NoYW5nZSgpIj5Pbmx5IHVu
ZXhwZWN0ZWQgcmVzdWx0czwvbGFiZWw+Ci0gICAgICAgICAgICA8bGFiZWw+PGlucHV0IGlkPSJ0
b2dnbGUtaW1hZ2VzIiB0eXBlPSJjaGVja2JveCIgY2hlY2tlZCBvbmNoYW5nZT0iaGFuZGxlVG9n
Z2xlSW1hZ2VzQ2hhbmdlKCkiPlRvZ2dsZSBpbWFnZXM8L2xhYmVsPgotICAgICAgICAgICAgPGxh
YmVsIHRpdGxlPSJVc2UgbmV3bGluZXMgaW5zdGVhZCBvZiBzcGFjZXMgdG8gc2VwYXJhdGUgZmxh
Z2dlZCB0ZXN0cyI+PGlucHV0IGlkPSJ1c2UtbmV3bGluZXMiIHR5cGU9ImNoZWNrYm94IiBjaGVj
a2VkIG9uY2hhbmdlPSJoYW5kbGVUb2dnbGVVc2VOZXdsaW5lcygpIj5Vc2UgbmV3bGluZXMgaW4g
ZmxhZ2dlZCBsaXN0PC9pbnB1dD4KKyAgICAgICAgICAgIDxsYWJlbD48aW5wdXQgaWQ9InVuZXhw
ZWN0ZWQtcmVzdWx0cyIgdHlwZT0iY2hlY2tib3giIGNoZWNrZWQgb25jaGFuZ2U9ImNvbnRyb2xs
ZXIuaGFuZGxlVW5leHBlY3RlZFJlc3VsdHNDaGFuZ2UoKSI+T25seSB1bmV4cGVjdGVkIHJlc3Vs
dHM8L2xhYmVsPgorICAgICAgICAgICAgPGxhYmVsPjxpbnB1dCBpZD0idG9nZ2xlLWltYWdlcyIg
dHlwZT0iY2hlY2tib3giIGNoZWNrZWQgb25jaGFuZ2U9ImNvbnRyb2xsZXIuaGFuZGxlVG9nZ2xl
SW1hZ2VzQ2hhbmdlKCkiPlRvZ2dsZSBpbWFnZXM8L2xhYmVsPgorICAgICAgICAgICAgPGxhYmVs
IHRpdGxlPSJVc2UgbmV3bGluZXMgaW5zdGVhZCBvZiBzcGFjZXMgdG8gc2VwYXJhdGUgZmxhZ2dl
ZCB0ZXN0cyI+PGlucHV0IGlkPSJ1c2UtbmV3bGluZXMiIHR5cGU9ImNoZWNrYm94IiBjaGVja2Vk
IG9uY2hhbmdlPSJjb250cm9sbGVyLmhhbmRsZVRvZ2dsZVVzZU5ld2xpbmVzKCkiPlVzZSBuZXds
aW5lcyBpbiBmbGFnZ2VkIGxpc3Q8L2xhYmVsPgogICAgICAgICA8L2Rpdj4KICAgICA8L2Rpdj4K
IAo=
</data>
<flag name="review"
          id="365148"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>