<?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>63432</bug_id>
          
          <creation_ts>2011-06-27 00:28:07 -0700</creation_ts>
          <short_desc>Move rebaseline-chromium-webkit-tests.py to webkitpy.to_be_moved</short_desc>
          <delta_ts>2011-06-27 00:39:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>koz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>427721</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-27 00:28:07 -0700</bug_when>
    <thetext>Move rebaseline-chromium-webkit-tests.py to webkitpy.to_be_moved</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427725</commentid>
    <comment_count>1</comment_count>
      <attachid>98674</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-27 00:31:11 -0700</bug_when>
    <thetext>Created attachment 98674
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427726</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-27 00:32:19 -0700</bug_when>
    <thetext>This code should probably eventually move into its own top-level directory in webkitpy:

webkitpy.rebaseline

but that can happen in a future patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427728</commentid>
    <comment_count>3</comment_count>
      <attachid>98674</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-27 00:33:31 -0700</bug_when>
    <thetext>Comment on attachment 98674
Patch

OK.  Please CC the authors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427730</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-27 00:34:55 -0700</bug_when>
    <thetext>Committed r89794: &lt;http://trac.webkit.org/changeset/89794&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427734</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-27 00:39:35 -0700</bug_when>
    <thetext>&gt; OK.  Please CC the authors.

Already done.  :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98674</attachid>
            <date>2011-06-27 00:31:11 -0700</date>
            <delta_ts>2011-06-27 00:33:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63432-20110627003110.patch</filename>
            <type>text/plain</type>
            <size>136380</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg5NzkzKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjAgQEAKKzIwMTEtMDYtMjcgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIHJlYmFz
ZWxpbmUtY2hyb21pdW0td2Via2l0LXRlc3RzLnB5IHRvIHdlYmtpdHB5LnRvX2JlX21vdmVkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzQzMgorCisg
ICAgICAgIFRoaXMgY29kZSBpc24ndCBpbiB0aGUgZGVwZW5kZW5jeSBjb25lIG9mIG5ldy1ydW4t
d2Via2l0LXRlc3RzLiBJdCdzCisgICAgICAgIHVuY2xlYXIgd2hhdCBpdCdzIGZpbmFsIGhvbWUg
c2hvdWxkIGJlLCBidXQgdGhpcyBwYXRjaCBtb3ZlcyBpdCBvdXQgb2YKKyAgICAgICAgbGF5b3V0
X3Rlc3RzIHRvIHNpbXBseSB0aGUgcGFja2FnZS4KKworICAgICAgICAqIFNjcmlwdHMvcmViYXNl
bGluZS1jaHJvbWl1bS13ZWJraXQtdGVzdHM6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHk6IFJlbW92ZWQu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJv
bWl1bV93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS90b19iZV9tb3ZlZC9yZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5w
eTogQ29waWVkIGZyb20gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNl
bGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS90b19iZV9tb3ZlZC9yZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0c191bml0dGVzdC5w
eTogQ29waWVkIGZyb20gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNl
bGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkuCisKIDIwMTEtMDYtMjcgIEFk
YW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmlj
IFNlaWRlbC4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvcmViYXNlbGluZS1jaHJvbWl1bS13ZWJraXQt
dGVzdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9yZWJhc2VsaW5lLWNocm9taXVtLXdl
YmtpdC10ZXN0cwkocmV2aXNpb24gODk3ODUpCisrKyBUb29scy9TY3JpcHRzL3JlYmFzZWxpbmUt
Y2hyb21pdW0td2Via2l0LXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxOCArMjcsMTAgQEAK
ICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLSIiIldyYXBwZXIgYXJvdW5kIHdlYmtp
dHB5L2xheW91dF90ZXN0cy9yZWJhc2VsaW5lLnB5IiIiCi1pbXBvcnQgb3MKIGltcG9ydCBzeXMK
IAotc2NyaXB0c19kaXJlY3RvcnkgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHN5
cy5hcmd2WzBdKSkKLXdlYmtpdHB5X2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbihzY3JpcHRzX2Rp
cmVjdG9yeSwgIndlYmtpdHB5IikKLXN5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmpvaW4od2Via2l0
cHlfZGlyZWN0b3J5LCAibGF5b3V0X3Rlc3RzIikpCi0KLSMgRm9yIHNpbXBsZWpzb24KLXN5cy5w
YXRoLmFwcGVuZChvcy5wYXRoLmpvaW4od2Via2l0cHlfZGlyZWN0b3J5LCAidGhpcmRwYXJ0eSIp
KQotCi1pbXBvcnQgcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMKK2ltcG9ydCB3ZWJr
aXRweS50b19iZV9tb3ZlZC5yZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cwogCiBpZiBf
X25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rl
c3RzLm1haW4oc3lzLmFyZ3ZbMTpdKQorICAgICMgRklYTUU6IFdlIHNob3VsZG4ndCBwYXNzIHN5
cy5hcmd2IHRvIHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLgorICAgIHN5cy5leGl0
KHdlYmtpdHB5LnRvX2JlX21vdmVkLnJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLm1h
aW4oc3lzLmFyZ3ZbMTpdKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Vi
a2l0X3Rlc3RzLnB5CShyZXZpc2lvbiA4OTc4NSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0xLDEwNTAgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0j
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLQotIiIiUmViYXNlbGluaW5nIHRvb2wgdGhhdCBhdXRvbWF0aWNhbGx5IHByb2R1
Y2VzIGJhc2VsaW5lcyBmb3IgYWxsIHBsYXRmb3Jtcy4KLQotVGhlIHNjcmlwdCBkb2VzIHRoZSBm
b2xsb3dpbmcgZm9yIGVhY2ggcGxhdGZvcm0gc3BlY2lmaWVkOgotICAxLiBDb21waWxlIGEgbGlz
dCBvZiB0ZXN0cyB0aGF0IG5lZWQgcmViYXNlbGluaW5nLgotICAyLiBEb3dubG9hZCB0ZXN0IHJl
c3VsdCBhcmNoaXZlIGZyb20gYnVpbGRib3QgZm9yIHRoZSBwbGF0Zm9ybS4KLSAgMy4gRXh0cmFj
dCBiYXNlbGluZXMgZnJvbSB0aGUgYXJjaGl2ZSBmaWxlIGZvciBhbGwgaWRlbnRpZmllZCBmaWxl
cy4KLSAgNC4gQWRkIG5ldyBiYXNlbGluZXMgdG8gU1ZOIHJlcG9zaXRvcnkuCi0gIDUuIEZvciBl
YWNoIHRlc3QgdGhhdCBoYXMgYmVlbiByZWJhc2VsaW5lZCwgcmVtb3ZlIHRoaXMgcGxhdGZvcm0g
b3B0aW9uIGZyb20KLSAgICAgdGhlIHRlc3QgaW4gdGVzdF9leHBlY3RhdGlvbi50eHQuIElmIG5v
IG90aGVyIHBsYXRmb3JtcyByZW1haW4gYWZ0ZXIKLSAgICAgcmVtb3ZhbCwgZGVsZXRlIHRoZSBy
ZWJhc2VsaW5lZCB0ZXN0IGZyb20gdGhlIGZpbGUuCi0KLUF0IHRoZSBlbmQsIHRoZSBzY3JpcHQg
Z2VuZXJhdGVzIGEgaHRtbCB0aGF0IGNvbXBhcmVzIG9sZCBhbmQgbmV3IGJhc2VsaW5lcy4KLSIi
IgotCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50Ci0KLWltcG9ydCBjb3B5
Ci1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9wdHBhcnNlCi1pbXBvcnQgcmUKLWltcG9ydCBzeXMK
LWltcG9ydCB0aW1lCi0KLWZyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0IGltcG9ydCBzY20K
LWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgemlwZmlsZXNldAotZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBwYXRoCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0gaW1wb3J0IHVybGZldGNoZXIKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRp
dmUgaW1wb3J0IFNjcmlwdEVycm9yCi0KLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9y
dCBwb3J0Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcmVhZF9jaGVja3N1bV9m
cm9tX3BuZwotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0
IHRlc3RfZXhwZWN0YXRpb25zCi0KLV9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykK
LQotQkFTRUxJTkVfU1VGRklYRVMgPSAoJy50eHQnLCAnLnBuZycsICcuY2hlY2tzdW0nKQotCi1B
UkNISVZFX0RJUl9OQU1FX0RJQ1QgPSB7Ci0gICAgJ2Nocm9taXVtLXdpbi13aW43JzogJ1dlYmtp
dF9XaW43JywKLSAgICAnY2hyb21pdW0td2luLXZpc3RhJzogJ1dlYmtpdF9WaXN0YScsCi0gICAg
J2Nocm9taXVtLXdpbi14cCc6ICdXZWJraXRfV2luJywKLSAgICAnY2hyb21pdW0tbWFjLWxlb3Bh
cmQnOiAnV2Via2l0X01hYzEwXzUnLAotICAgICdjaHJvbWl1bS1tYWMtc25vd2xlb3BhcmQnOiAn
V2Via2l0X01hYzEwXzYnLAotICAgICdjaHJvbWl1bS1saW51eC14ODYnOiAnV2Via2l0X0xpbnV4
XzMyJywKLSAgICAnY2hyb21pdW0tbGludXgteDg2XzY0JzogJ1dlYmtpdF9MaW51eCcsCi0gICAg
J2Nocm9taXVtLWdwdS1tYWMtc25vd2xlb3BhcmQnOiAnV2Via2l0X01hYzEwXzZfLV9HUFUnLAot
ICAgICdjaHJvbWl1bS1ncHUtd2luLXhwJzogJ1dlYmtpdF9XaW5fLV9HUFUnLAotICAgICdjaHJv
bWl1bS1ncHUtd2luLXdpbjcnOiAnV2Via2l0X1dpbjdfLV9HUFUnLAotICAgICdjaHJvbWl1bS1n
cHUtbGludXgteDg2XzY0JzogJ1dlYmtpdF9MaW51eF8tX0dQVScsCi0gICAgJ2Nocm9taXVtLWdw
dS1saW51eC14ODYnOiAnV2Via2l0X0xpbnV4XzMyXy1fR1BVJywKLX0KLQotCi1kZWYgbG9nX2Rh
c2hlZF9zdHJpbmcodGV4dCwgcGxhdGZvcm09Tm9uZSwgbG9nZ2luZ19sZXZlbD1sb2dnaW5nLkRF
QlVHKToKLSAgICAiIiJMb2cgdGV4dCBtZXNzYWdlIHdpdGggZGFzaGVzIG9uIGJvdGggc2lkZXMu
IiIiCi0gICAgbXNnID0gdGV4dAotICAgIGlmIHBsYXRmb3JtOgotICAgICAgICBtc2cgKz0gJzog
JyArIHBsYXRmb3JtCi0gICAgaWYgbGVuKG1zZykgPCA3ODoKLSAgICAgICAgZGFzaGVzID0gJy0n
ICogKCg3OCAtIGxlbihtc2cpKSAvIDIpCi0gICAgICAgIG1zZyA9ICclcyAlcyAlcycgJSAoZGFz
aGVzLCBtc2csIGRhc2hlcykKLSAgICBfbG9nLmxvZyhsb2dnaW5nX2xldmVsLCBtc2cpCi0KLQot
ZGVmIHNldHVwX2h0bWxfZGlyZWN0b3J5KGZpbGVzeXN0ZW0sIHBhcmVudF9kaXJlY3RvcnkpOgot
ICAgICIiIlNldHVwIHRoZSBkaXJlY3RvcnkgdG8gc3RvcmUgaHRtbCByZXN1bHRzLgotCi0gICAg
ICAgQWxsIGh0bWwgcmVsYXRlZCBmaWxlcyBhcmUgc3RvcmVkIGluIHRoZSAicmViYXNlbGluZV9o
dG1sIiBzdWJkaXJlY3Rvcnkgb2YKLSAgICAgICB0aGUgcGFyZW50IGRpcmVjdG9yeS4gVGhlIHBh
dGggdG8gdGhlIGNyZWF0ZWQgZGlyZWN0b3J5IGlzIHJldHVybmVkLgotICAgICIiIgotCi0gICAg
aWYgbm90IHBhcmVudF9kaXJlY3Rvcnk6Ci0gICAgICAgIHBhcmVudF9kaXJlY3RvcnkgPSBzdHIo
ZmlsZXN5c3RlbS5ta2R0ZW1wKCkpCi0gICAgZWxzZToKLSAgICAgICAgZmlsZXN5c3RlbS5tYXli
ZV9tYWtlX2RpcmVjdG9yeShwYXJlbnRfZGlyZWN0b3J5KQotCi0gICAgaHRtbF9kaXJlY3Rvcnkg
PSBmaWxlc3lzdGVtLmpvaW4ocGFyZW50X2RpcmVjdG9yeSwgJ3JlYmFzZWxpbmVfaHRtbCcpCi0g
ICAgX2xvZy5kZWJ1ZygnSHRtbCBkaXJlY3Rvcnk6ICIlcyInLCBodG1sX2RpcmVjdG9yeSkKLQot
ICAgIGlmIGZpbGVzeXN0ZW0uZXhpc3RzKGh0bWxfZGlyZWN0b3J5KToKLSAgICAgICAgZmlsZXN5
c3RlbS5ybXRyZWUoaHRtbF9kaXJlY3RvcnkpCi0gICAgICAgIF9sb2cuZGVidWcoJ0RlbGV0ZWQg
aHRtbCBkaXJlY3Rvcnk6ICIlcyInLCBodG1sX2RpcmVjdG9yeSkKLQotICAgIGZpbGVzeXN0ZW0u
bWF5YmVfbWFrZV9kaXJlY3RvcnkoaHRtbF9kaXJlY3RvcnkpCi0gICAgcmV0dXJuIGh0bWxfZGly
ZWN0b3J5Ci0KLQotZGVmIGdldF9yZXN1bHRfZmlsZV9mdWxscGF0aChmaWxlc3lzdGVtLCBodG1s
X2RpcmVjdG9yeSwgYmFzZWxpbmVfZmlsZW5hbWUsIHBsYXRmb3JtLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHRfdHlwZSk6Ci0gICAgIiIiR2V0IGZ1bGwgcGF0aCBvZiB0aGUg
YmFzZWxpbmUgcmVzdWx0IGZpbGUuCi0KLSAgICBBcmdzOgotICAgICAgZmlsZXN5c3RlbTogd3Jh
cHBlciBvYmplY3QKLSAgICAgIGh0bWxfZGlyZWN0b3J5OiBkaXJlY3RvcnkgdGhhdCBzdG9yZXMg
dGhlIGh0bWwgcmVsYXRlZCBmaWxlcy4KLSAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lOiBuYW1lIG9m
IHRoZSBiYXNlbGluZSBmaWxlLgotICAgICAgcGxhdGZvcm06IHdpbiwgbGludXggb3IgbWFjCi0g
ICAgICByZXN1bHRfdHlwZTogdHlwZSBvZiB0aGUgYmFzZWxpbmUgcmVzdWx0OiAnLnR4dCcsICcu
cG5nJy4KLQotICAgIFJldHVybnM6Ci0gICAgICBGdWxsIHBhdGggb2YgdGhlIGJhc2VsaW5lIGZp
bGUgZm9yIHJlYmFzZWxpbmluZyByZXN1bHQgY29tcGFyaXNvbi4KLSAgICAiIiIKLQotICAgIGJh
c2UsIGV4dCA9IGZpbGVzeXN0ZW0uc3BsaXRleHQoYmFzZWxpbmVfZmlsZW5hbWUpCi0gICAgcmVz
dWx0X2ZpbGVuYW1lID0gJyVzLSVzLSVzJXMnICUgKGJhc2UsIHBsYXRmb3JtLCByZXN1bHRfdHlw
ZSwgZXh0KQotICAgIGZ1bGxwYXRoID0gZmlsZXN5c3RlbS5qb2luKGh0bWxfZGlyZWN0b3J5LCBy
ZXN1bHRfZmlsZW5hbWUpCi0gICAgX2xvZy5kZWJ1ZygnICBSZXN1bHQgZmlsZSBmdWxsIHBhdGg6
ICIlcyIuJywgZnVsbHBhdGgpCi0gICAgcmV0dXJuIGZ1bGxwYXRoCi0KLQotY2xhc3MgUmViYXNl
bGluZXIob2JqZWN0KToKLSAgICAiIiJDbGFzcyB0byBwcm9kdWNlIG5ldyBiYXNlbGluZXMgZm9y
IGEgZ2l2ZW4gcGxhdGZvcm0uIiIiCi0KLSAgICBSRVZJU0lPTl9SRUdFWCA9IHInPGEgaHJlZj1c
IihcZCspL1wiPicKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBydW5uaW5nX3BvcnQsIHRhcmdl
dF9wb3J0LCBwbGF0Zm9ybSwgb3B0aW9ucywgdXJsX2ZldGNoZXIsIHppcF9mYWN0b3J5LCBzY20s
IGxvZ2dlZF9iZWZvcmU9RmFsc2UpOgotICAgICAgICAiIiIKLSAgICAgICAgQXJnczoKLSAgICAg
ICAgICAgIHJ1bm5pbmdfcG9ydDogdGhlIFBvcnQgdGhlIHNjcmlwdCBpcyBydW5uaW5nIG9uLgot
ICAgICAgICAgICAgdGFyZ2V0X3BvcnQ6IHRoZSBQb3J0IHRoZSBzY3JpcHQgdXNlcyB0byBmaW5k
IHBvcnQtc3BlY2lmaWMKLSAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9u
IGxpa2UgdGhlIHRlc3RfZXhwZWN0YXRpb25zLnR4dAotICAgICAgICAgICAgICAgIGZpbGUgbG9j
YXRpb24gYW5kIHRoZSBsaXN0IG9mIHRlc3QgcGxhdGZvcm1zLgotICAgICAgICAgICAgcGxhdGZv
cm06IHRoZSB0ZXN0IHBsYXRmb3JtIHRvIHJlYmFzZWxpbmUKLSAgICAgICAgICAgIG9wdGlvbnM6
IHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBvYmplY3QuCi0gICAgICAgICAgICB1cmxfZmV0Y2hl
cjogb2JqZWN0IHRoYXQgY2FuIGZldGNoIG9iamVjdHMgZnJvbSBVUkxzCi0gICAgICAgICAgICB6
aXBfZmFjdG9yeTogb3B0aW9uYWwgb2JqZWN0IHRoYXQgY2FuIGZldGNoIHppcCBmaWxlcyBmcm9t
IFVSTHMKLSAgICAgICAgICAgIHNjbTogc2NtIG9iamVjdCBmb3IgYWRkaW5nIG5ldyBiYXNlbGlu
ZXMKLSAgICAgICAgICAgIGxvZ2dlZF9iZWZvcmU6IHdoZXRoZXIgdGhlIHByZXZpb3VzIHJ1bm5p
bmcgcG9ydCBsb2dnZWQgYW55dGhpbmcuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLl9wbGF0
Zm9ybSA9IHBsYXRmb3JtCi0gICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCi0gICAgICAg
IHNlbGYuX3BvcnQgPSBydW5uaW5nX3BvcnQKLSAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IHJ1
bm5pbmdfcG9ydC5fZmlsZXN5c3RlbQotICAgICAgICBzZWxmLl90YXJnZXRfcG9ydCA9IHRhcmdl
dF9wb3J0Ci0KLSAgICAgICAgc2VsZi5fcmViYXNlbGluZV9wb3J0ID0gcG9ydC5nZXQocGxhdGZv
cm0sIG9wdGlvbnMsIGZpbGVzeXN0ZW09c2VsZi5fZmlsZXN5c3RlbSkKLSAgICAgICAgc2VsZi5f
cmViYXNlbGluaW5nX3Rlc3RzID0gc2V0KCkKLSAgICAgICAgc2VsZi5fcmViYXNlbGluZWRfdGVz
dHMgPSBbXQotICAgICAgICBzZWxmLl9sb2dnZWRfYmVmb3JlID0gbG9nZ2VkX2JlZm9yZQotICAg
ICAgICBzZWxmLmRpZF9sb2cgPSBGYWxzZQotCi0gICAgICAgICMgQ3JlYXRlIHRlc3RzIGFuZCBl
eHBlY3RhdGlvbnMgaGVscGVyIHdoaWNoIGlzIHVzZWQgdG86Ci0gICAgICAgICMgICAtLiBjb21w
aWxlIGxpc3Qgb2YgdGVzdHMgdGhhdCBuZWVkIHJlYmFzZWxpbmluZy4KLSAgICAgICAgIyAgIC0u
IHVwZGF0ZSB0aGUgdGVzdHMgaW4gdGVzdF9leHBlY3RhdGlvbnMgZmlsZSBhZnRlciByZWJhc2Vs
aW5lCi0gICAgICAgICMgICAgICBpcyBkb25lLgotICAgICAgICBleHBlY3RhdGlvbnNfc3RyID0g
c2VsZi5fcmViYXNlbGluZV9wb3J0LnRlc3RfZXhwZWN0YXRpb25zKCkKLSAgICAgICAgc2VsZi5f
dGVzdF9leHBlY3RhdGlvbnMgPSB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zKAot
ICAgICAgICAgICAgc2VsZi5fcmViYXNlbGluZV9wb3J0LCBOb25lLCBleHBlY3RhdGlvbnNfc3Ry
LCBzZWxmLl9yZWJhc2VsaW5lX3BvcnQudGVzdF9jb25maWd1cmF0aW9uKCksIEZhbHNlKQotICAg
ICAgICBzZWxmLl91cmxfZmV0Y2hlciA9IHVybF9mZXRjaGVyCi0gICAgICAgIHNlbGYuX3ppcF9m
YWN0b3J5ID0gemlwX2ZhY3RvcnkKLSAgICAgICAgc2VsZi5fc2NtID0gc2NtCi0KLSAgICBkZWYg
cnVuKHNlbGYpOgotICAgICAgICAiIiJSdW4gcmViYXNlbGluZSBwcm9jZXNzLiIiIgotCi0gICAg
ICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdDb21waWxpbmcgcmViYXNlbGluaW5nIHRlc3RzJywgc2Vs
Zi5fcGxhdGZvcm0sIGxvZ2dpbmcuREVCVUcpCi0gICAgICAgIGlmIG5vdCBzZWxmLl9jb21waWxl
X3JlYmFzZWxpbmluZ190ZXN0cygpOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAg
IGlmIG5vdCBzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHM6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1
ZQotCi0gICAgICAgIHNlbGYuZGlkX2xvZyA9IFRydWUKLSAgICAgICAgbG9nX2Rhc2hlZF9zdHJp
bmcoJ0Rvd25sb2FkaW5nIGFyY2hpdmUnLCBzZWxmLl9wbGF0Zm9ybSwgbG9nZ2luZy5ERUJVRykK
LSAgICAgICAgYXJjaGl2ZV9maWxlID0gc2VsZi5fZG93bmxvYWRfYnVpbGRib3RfYXJjaGl2ZSgp
Ci0gICAgICAgIF9sb2cuZGVidWcoJycpCi0gICAgICAgIGlmIG5vdCBhcmNoaXZlX2ZpbGU6Ci0g
ICAgICAgICAgICBfbG9nLmVycm9yKCdObyBhcmNoaXZlIGZvdW5kLicpCi0gICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKLQotICAgICAgICBsb2dfZGFzaGVkX3N0cmluZygnRXh0cmFjdGluZyBhbmQg
YWRkaW5nIG5ldyBiYXNlbGluZXMnLCBzZWxmLl9wbGF0Zm9ybSwgbG9nZ2luZy5ERUJVRykKLSAg
ICAgICAgc2VsZi5fZXh0cmFjdF9hbmRfYWRkX25ld19iYXNlbGluZXMoYXJjaGl2ZV9maWxlKQot
ICAgICAgICBhcmNoaXZlX2ZpbGUuY2xvc2UoKQotCi0gICAgICAgIGxvZ19kYXNoZWRfc3RyaW5n
KCdVcGRhdGluZyByZWJhc2VsaW5lZCB0ZXN0cyBpbiBmaWxlJywgc2VsZi5fcGxhdGZvcm0pCi0K
LSAgICAgICAgaWYgbGVuKHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0cykgIT0gbGVuKHNlbGYuX3Jl
YmFzZWxpbmVkX3Rlc3RzKToKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJycpCi0gICAgICAgICAg
ICBfbG9nLmRlYnVnKCdOT1QgQUxMIFRFU1RTIFdFUkUgUkVCQVNFTElORUQuJykKLSAgICAgICAg
ICAgIF9sb2cuZGVidWcoJyAgTnVtYmVyIG1hcmtlZCBmb3IgcmViYXNlbGluaW5nOiAlZCcsIGxl
bihzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHMpKQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnICBO
dW1iZXIgYWN0dWFsbHkgcmViYXNlbGluZWQ6ICVkJywgbGVuKHNlbGYuX3JlYmFzZWxpbmVkX3Rl
c3RzKSkKLSAgICAgICAgICAgIF9sb2cuaW5mbygnJykKLSAgICAgICAgICAgIHJldHVybiBGYWxz
ZQotCi0gICAgICAgIF9sb2cuZGVidWcoJyAgQWxsIHRlc3RzIG5lZWRpbmcgcmViYXNlbGluaW5n
IHdlcmUgc3VjY2Vzc2Z1bGx5IHJlYmFzZWxpbmVkLicpCi0gICAgICAgIF9sb2cuaW5mbygnJykK
LSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiByZW1vdmVfcmViYXNlbGluaW5nX2V4cGVj
dGF0aW9ucyhzZWxmLCB0ZXN0cywgYmFja3VwKToKLSAgICAgICAgIiIiaWYgYmFja3VwIGlzIFRy
dWUsIHdlIGJhY2t1cCB0aGUgb3JpZ2luYWwgdGVzdCBleHBlY3RhdGlvbnMgZmlsZS4iIiIKLSAg
ICAgICAgbmV3X2V4cGVjdGF0aW9ucyA9IHNlbGYuX3Rlc3RfZXhwZWN0YXRpb25zLnJlbW92ZV9y
ZWJhc2VsaW5lZF90ZXN0cyh0ZXN0cykKLSAgICAgICAgcGF0aCA9IHNlbGYuX3RhcmdldF9wb3J0
LnBhdGhfdG9fdGVzdF9leHBlY3RhdGlvbnNfZmlsZSgpCi0gICAgICAgIGlmIGJhY2t1cDoKLSAg
ICAgICAgICAgIGRhdGVfc3VmZml4ID0gdGltZS5zdHJmdGltZSgnJVklbSVkJUglTSVTJywgdGlt
ZS5sb2NhbHRpbWUodGltZS50aW1lKCkpKQotICAgICAgICAgICAgYmFja3VwX2ZpbGUgPSAnJXMu
b3JpZy4lcycgJSAocGF0aCwgZGF0ZV9zdWZmaXgpCi0gICAgICAgICAgICBpZiBzZWxmLl9maWxl
c3lzdGVtLmV4aXN0cyhiYWNrdXBfZmlsZSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5fZmlsZXN5
c3RlbS5yZW1vdmUoYmFja3VwX2ZpbGUpCi0gICAgICAgICAgICBfbG9nLmRlYnVnKCdTYXZpbmcg
b3JpZ2luYWwgZmlsZSB0byAiJXMiJywgYmFja3VwX2ZpbGUpCi0gICAgICAgICAgICBzZWxmLl9m
aWxlc3lzdGVtLm1vdmUocGF0aCwgYmFja3VwX2ZpbGUpCi0KLSAgICAgICAgc2VsZi5fZmlsZXN5
c3RlbS53cml0ZV90ZXh0X2ZpbGUocGF0aCwgbmV3X2V4cGVjdGF0aW9ucykKLSAgICAgICAgIyBz
ZWxmLl9zY20uYWRkKHBhdGgpCi0KLSAgICBkZWYgZ2V0X3JlYmFzZWxpbmVkX3Rlc3RzKHNlbGYp
OgotICAgICAgICByZXR1cm4gc2VsZi5fcmViYXNlbGluZWRfdGVzdHMKLQotICAgIGRlZiBfY29t
cGlsZV9yZWJhc2VsaW5pbmdfdGVzdHMoc2VsZik6Ci0gICAgICAgICIiIkNvbXBpbGUgbGlzdCBv
ZiB0ZXN0cyB0aGF0IG5lZWQgcmViYXNlbGluaW5nIGZvciB0aGUgcGxhdGZvcm0uCi0KLSAgICAg
ICAgUmV0dXJuczoKLSAgICAgICAgICBGYWxzZSBpZiByZWZ0ZXN0cyBhcmUgd3JvbmdseSBtYXJr
ZWQgYXMgJ25lZWRzIHJlYmFzZWxpbmluZycgb3IgVHJ1ZQotICAgICAgICAiIiIKLQotICAgICAg
ICBzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHMgPSBzZWxmLl90ZXN0X2V4cGVjdGF0aW9ucy5nZXRf
cmViYXNlbGluaW5nX2ZhaWx1cmVzKCkKLSAgICAgICAgaWYgbm90IHNlbGYuX3JlYmFzZWxpbmlu
Z190ZXN0czoKLSAgICAgICAgICAgIF9sb2cuaW5mbygnJXM6IE5vIHRlc3RzIHRvIHJlYmFzZWxp
bmUuJywgc2VsZi5fcGxhdGZvcm0pCi0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICAg
IGZzID0gc2VsZi5fdGFyZ2V0X3BvcnQuX2ZpbGVzeXN0ZW0KLSAgICAgICAgZm9yIHRlc3QgaW4g
c2VsZi5fcmViYXNlbGluaW5nX3Rlc3RzOgotICAgICAgICAgICAgdGVzdF9hYnNwYXRoID0gc2Vs
Zi5fdGFyZ2V0X3BvcnQuYWJzcGF0aF9mb3JfdGVzdCh0ZXN0KQotICAgICAgICAgICAgaWYgKGZz
LmV4aXN0cyhzZWxmLl90YXJnZXRfcG9ydC5yZWZ0ZXN0X2V4cGVjdGVkX2ZpbGVuYW1lKHRlc3Rf
YWJzcGF0aCkpIG9yCi0gICAgICAgICAgICAgICAgZnMuZXhpc3RzKHNlbGYuX3RhcmdldF9wb3J0
LnJlZnRlc3RfZXhwZWN0ZWRfbWlzbWF0Y2hfZmlsZW5hbWUodGVzdF9hYnNwYXRoKSkpOgotICAg
ICAgICAgICAgICAgIF9sb2cuZXJyb3IoJyVzIHNlZW1zIHRvIGJlIGEgcmVmdGVzdC4gV2UgY2Fu
IG5vdCByZWJhc2UgZm9yIHJlZnRlc3RzLicsIHRlc3QpCi0gICAgICAgICAgICAgICAgc2VsZi5f
cmViYXNlbGluaW5nX3Rlc3RzID0gc2V0KCkKLSAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UK
LQotICAgICAgICBpZiBub3Qgc2VsZi5fbG9nZ2VkX2JlZm9yZToKLSAgICAgICAgICAgIF9sb2cu
aW5mbygnJykKLSAgICAgICAgX2xvZy5pbmZvKCclczogUmViYXNlbGluaW5nICVkIHRlc3RzOics
IHNlbGYuX3BsYXRmb3JtLCBsZW4oc2VsZi5fcmViYXNlbGluaW5nX3Rlc3RzKSkKLSAgICAgICAg
dGVzdF9ubyA9IDEKLSAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi5fcmViYXNlbGluaW5nX3Rlc3Rz
OgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnICAlZDogJXMnLCB0ZXN0X25vLCB0ZXN0KQotICAg
ICAgICAgICAgdGVzdF9ubyArPSAxCi0KLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBf
Z2V0X2xhdGVzdF9yZXZpc2lvbihzZWxmLCB1cmwpOgotICAgICAgICAiIiJHZXQgdGhlIGxhdGVz
dCBsYXlvdXQgdGVzdCByZXZpc2lvbiBudW1iZXIgZnJvbSBidWlsZGJvdC4KLQotICAgICAgICBB
cmdzOgotICAgICAgICAgIHVybDogVXJsIHRvIHJldHJpZXZlIGxheW91dCB0ZXN0IHJldmlzaW9u
IG51bWJlcnMuCi0KLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICBsYXRlc3QgcmV2aXNpb24g
b3IKLSAgICAgICAgICBOb25lIG9uIGZhaWx1cmUuCi0gICAgICAgICIiIgotCi0gICAgICAgIF9s
b2cuZGVidWcoJ1VybCB0byByZXRyaWV2ZSByZXZpc2lvbjogIiVzIicsIHVybCkKLQotICAgICAg
ICBjb250ZW50ID0gc2VsZi5fdXJsX2ZldGNoZXIuZmV0Y2godXJsKQotCi0gICAgICAgIHJldmlz
aW9ucyA9IHJlLmZpbmRhbGwoc2VsZi5SRVZJU0lPTl9SRUdFWCwgY29udGVudCkKLSAgICAgICAg
aWYgbm90IHJldmlzaW9uczoKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0ZhaWxlZCB0byBmaW5k
IHJldmlzaW9uLCBjb250ZW50OiAiJXMiJywgY29udGVudCkKLSAgICAgICAgICAgIHJldHVybiBO
b25lCi0KLSAgICAgICAgcmV2aXNpb25zLnNvcnQoa2V5PWludCkKLSAgICAgICAgX2xvZy5kZWJ1
ZygnICBMYXRlc3QgcmV2aXNpb246ICVzJywgcmV2aXNpb25zW2xlbihyZXZpc2lvbnMpIC0gMV0p
Ci0gICAgICAgIHJldHVybiByZXZpc2lvbnNbbGVuKHJldmlzaW9ucykgLSAxXQotCi0gICAgZGVm
IF9nZXRfYXJjaGl2ZV9kaXJfbmFtZShzZWxmLCBwbGF0Zm9ybSk6Ci0gICAgICAgICIiIkdldCBu
YW1lIG9mIHRoZSBsYXlvdXQgdGVzdCBhcmNoaXZlIGRpcmVjdG9yeS4KLQotICAgICAgICBSZXR1
cm5zOgotICAgICAgICAgIERpcmVjdG9yeSBuYW1lIG9yCi0gICAgICAgICAgTm9uZSBvbiBmYWls
dXJlCi0gICAgICAgICIiIgotCi0gICAgICAgIGlmIHBsYXRmb3JtIGluIEFSQ0hJVkVfRElSX05B
TUVfRElDVDoKLSAgICAgICAgICAgIHJldHVybiBBUkNISVZFX0RJUl9OQU1FX0RJQ1RbcGxhdGZv
cm1dCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCdDYW5ub3QgZmluZCBw
bGF0Zm9ybSBrZXkgJXMgaW4gYXJjaGl2ZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICdkaXJl
Y3RvcnkgbmFtZSBkaWN0aW9uYXJ5JywgcGxhdGZvcm0pCi0gICAgICAgICAgICByZXR1cm4gTm9u
ZQotCi0gICAgZGVmIF9nZXRfYXJjaGl2ZV91cmwoc2VsZik6Ci0gICAgICAgICIiIkdlbmVyYXRl
IHRoZSB1cmwgdG8gZG93bmxvYWQgbGF0ZXN0IGxheW91dCB0ZXN0IGFyY2hpdmUuCi0KLSAgICAg
ICAgUmV0dXJuczoKLSAgICAgICAgICBVcmwgdG8gZG93bmxvYWQgYXJjaGl2ZSBvcgotICAgICAg
ICAgIE5vbmUgb24gZmFpbHVyZQotICAgICAgICAiIiIKLQotICAgICAgICBpZiBzZWxmLl9vcHRp
b25zLmZvcmNlX2FyY2hpdmVfdXJsOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX29wdGlvbnMu
Zm9yY2VfYXJjaGl2ZV91cmwKLQotICAgICAgICBkaXJfbmFtZSA9IHNlbGYuX2dldF9hcmNoaXZl
X2Rpcl9uYW1lKHNlbGYuX3BsYXRmb3JtKQotICAgICAgICBpZiBub3QgZGlyX25hbWU6Ci0gICAg
ICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgIF9sb2cuZGVidWcoJ0J1aWxkYm90IHBsYXRm
b3JtIGRpciBuYW1lOiAiJXMiJywgZGlyX25hbWUpCi0KLSAgICAgICAgdXJsX2Jhc2UgPSAnJXMv
JXMvJyAlIChzZWxmLl9vcHRpb25zLmFyY2hpdmVfdXJsLCBkaXJfbmFtZSkKLSAgICAgICAgbGF0
ZXN0X3JldmlzaW9uID0gc2VsZi5fZ2V0X2xhdGVzdF9yZXZpc2lvbih1cmxfYmFzZSkKLSAgICAg
ICAgaWYgbGF0ZXN0X3JldmlzaW9uIGlzIE5vbmUgb3IgbGF0ZXN0X3JldmlzaW9uIDw9IDA6Ci0g
ICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBhcmNoaXZlX3VybCA9ICclcyVzL2xheW91
dC10ZXN0LXJlc3VsdHMuemlwJyAlICh1cmxfYmFzZSwgbGF0ZXN0X3JldmlzaW9uKQotICAgICAg
ICBfbG9nLmluZm8oJyAgVXNpbmcgJXMnLCBhcmNoaXZlX3VybCkKLSAgICAgICAgcmV0dXJuIGFy
Y2hpdmVfdXJsCi0KLSAgICBkZWYgX2Rvd25sb2FkX2J1aWxkYm90X2FyY2hpdmUoc2VsZik6Ci0g
ICAgICAgICIiIkRvd25sb2FkIGxheW91dCB0ZXN0IGFyY2hpdmUgZmlsZSBmcm9tIGJ1aWxkYm90
IGFuZCByZXR1cm4gYSBoYW5kbGUgdG8gaXQuIiIiCi0gICAgICAgIHVybCA9IHNlbGYuX2dldF9h
cmNoaXZlX3VybCgpCi0gICAgICAgIGlmIHVybCBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJu
IE5vbmUKLQotICAgICAgICBhcmNoaXZlX2ZpbGUgPSB6aXBmaWxlc2V0LlppcEZpbGVTZXQodXJs
LCBmaWxlc3lzdGVtPXNlbGYuX2ZpbGVzeXN0ZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB6aXBfZmFjdG9yeT1zZWxmLl96aXBfZmFjdG9yeSkKLSAgICAg
ICAgX2xvZy5kZWJ1ZygnQXJjaGl2ZSBkb3dubG9hZGVkJykKLSAgICAgICAgcmV0dXJuIGFyY2hp
dmVfZmlsZQotCi0gICAgZGVmIF9leHRyYWN0X2FuZF9hZGRfbmV3X2Jhc2VsaW5lcyhzZWxmLCB6
aXBfZmlsZSk6Ci0gICAgICAgICIiIkV4dHJhY3QgbmV3IGJhc2VsaW5lcyBmcm9tIHRoZSB6aXAg
ZmlsZSBhbmQgYWRkIHRoZW0gdG8gU1ZOIHJlcG9zaXRvcnkuCi0KLSAgICAgICAgUmV0dXJuczoK
LSAgICAgICAgICBMaXN0IG9mIHRlc3RzIHRoYXQgaGF2ZSBiZWVuIHJlYmFzZWxpbmVkIG9yIE5v
bmUgb24gZmFpbHVyZS4iIiIKLSAgICAgICAgemlwX25hbWVsaXN0ID0gemlwX2ZpbGUubmFtZWxp
c3QoKQotCi0gICAgICAgIF9sb2cuZGVidWcoJ3ppcCBmaWxlIG5hbWVsaXN0OicpCi0gICAgICAg
IGZvciBuYW1lIGluIHppcF9uYW1lbGlzdDoKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgJyAr
IG5hbWUpCi0KLSAgICAgICAgX2xvZy5kZWJ1ZygnUGxhdGZvcm0gZGlyOiAiJXMiJywgc2VsZi5f
cGxhdGZvcm0pCi0KLSAgICAgICAgc2VsZi5fcmViYXNlbGluZWRfdGVzdHMgPSBbXQotICAgICAg
ICBmb3IgdGVzdF9ubywgdGVzdCBpbiBlbnVtZXJhdGUoc2VsZi5fcmViYXNlbGluaW5nX3Rlc3Rz
KToKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJ1Rlc3QgJWQ6ICVzJywgdGVzdF9ubyArIDEsIHRl
c3QpCi0gICAgICAgICAgICBzZWxmLl9leHRyYWN0X2FuZF9hZGRfbmV3X2Jhc2VsaW5lKHRlc3Qs
IHppcF9maWxlKQotCi0gICAgZGVmIF9leHRyYWN0X2FuZF9hZGRfbmV3X2Jhc2VsaW5lKHNlbGYs
IHRlc3QsIHppcF9maWxlKToKLSAgICAgICAgZm91bmQgPSBGYWxzZQotICAgICAgICBzY21fZXJy
b3IgPSBGYWxzZQotICAgICAgICB0ZXN0X2Jhc2VuYW1lID0gc2VsZi5fZmlsZXN5c3RlbS5zcGxp
dGV4dCh0ZXN0KVswXQotICAgICAgICBmb3Igc3VmZml4IGluIEJBU0VMSU5FX1NVRkZJWEVTOgot
ICAgICAgICAgICAgYXJjaGl2ZV90ZXN0X25hbWUgPSAnbGF5b3V0LXRlc3QtcmVzdWx0cy8lcy1h
Y3R1YWwlcycgJSAodGVzdF9iYXNlbmFtZSwgc3VmZml4KQotICAgICAgICAgICAgX2xvZy5kZWJ1
ZygnICBBcmNoaXZlIHRlc3QgZmlsZSBuYW1lOiAiJXMiJywgYXJjaGl2ZV90ZXN0X25hbWUpCi0g
ICAgICAgICAgICBpZiBub3QgYXJjaGl2ZV90ZXN0X25hbWUgaW4gemlwX2ZpbGUubmFtZWxpc3Qo
KToKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCcgICVzIGZpbGUgbm90IGluIGFyY2hpdmUu
Jywgc3VmZml4KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgIGZvdW5k
ID0gVHJ1ZQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnICAlcyBmaWxlIGZvdW5kIGluIGFyY2hp
dmUuJywgc3VmZml4KQotCi0gICAgICAgICAgICB0ZW1wX25hbWUgPSBzZWxmLl9leHRyYWN0X2Zy
b21femlwX3RvX3RlbXBmaWxlKHppcF9maWxlLCBhcmNoaXZlX3Rlc3RfbmFtZSkKLQotICAgICAg
ICAgICAgZXhwZWN0ZWRfZmlsZW5hbWUgPSAnJXMtZXhwZWN0ZWQlcycgJSAodGVzdF9iYXNlbmFt
ZSwgc3VmZml4KQotICAgICAgICAgICAgZXhwZWN0ZWRfZnVsbHBhdGggPSBzZWxmLl9maWxlc3lz
dGVtLmpvaW4oCi0gICAgICAgICAgICAgICAgc2VsZi5fcmViYXNlbGluZV9wb3J0LmJhc2VsaW5l
X3BhdGgoKSwgZXhwZWN0ZWRfZmlsZW5hbWUpCi0gICAgICAgICAgICBleHBlY3RlZF9mdWxscGF0
aCA9IHNlbGYuX2ZpbGVzeXN0ZW0ubm9ybXBhdGgoZXhwZWN0ZWRfZnVsbHBhdGgpCi0gICAgICAg
ICAgICBfbG9nLmRlYnVnKCcgIEV4cGVjdGVkIGZpbGUgZnVsbCBwYXRoOiAiJXMiJywgZXhwZWN0
ZWRfZnVsbHBhdGgpCi0KLSAgICAgICAgICAgIHJlbHBhdGggPSBzZWxmLl9maWxlc3lzdGVtLnJl
bHBhdGgoZXhwZWN0ZWRfZnVsbHBhdGgsIHNlbGYuX3RhcmdldF9wb3J0LmxheW91dF90ZXN0c19k
aXIoKSkKLQotICAgICAgICAgICAgIyBUT0RPKHZpY3RvcncpOiBmb3Igbm93LCB0aGUgcmViYXNl
bGluaW5nIHRvb2wgY2hlY2tzIHdoZXRoZXIKLSAgICAgICAgICAgICMgb3Igbm90IFRISVMgYmFz
ZWxpbmUgaXMgZHVwbGljYXRlIGFuZCBzaG91bGQgYmUgc2tpcHBlZC4KLSAgICAgICAgICAgICMg
V2UgY291bGQgaW1wcm92ZSB0aGUgdG9vbCB0byBjaGVjayBhbGwgYmFzZWxpbmVzIGluIHVwcGVy
Ci0gICAgICAgICAgICAjIGFuZCBsb3dlciBsZXZlbHMgYW5kIHJlbW92ZSBhbGwgZHVwbGljYXRl
ZCBiYXNlbGluZXMuCi0gICAgICAgICAgICBpZiBzZWxmLl9pc19kdXBfYmFzZWxpbmUodGVtcF9u
YW1lLCBleHBlY3RlZF9mdWxscGF0aCwgdGVzdCwgc3VmZml4LCBzZWxmLl9wbGF0Zm9ybSk6Ci0g
ICAgICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5yZW1vdmUodGVtcF9uYW1lKQotICAgICAg
ICAgICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKGV4cGVjdGVkX2Z1bGxwYXRoKToK
LSAgICAgICAgICAgICAgICAgICAgX2xvZy5pbmZvKCcgIFJlbW92aW5nICVzJyAlIHJlbHBhdGgp
Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2RlbGV0ZV9iYXNlbGluZShleHBlY3RlZF9mdWxs
cGF0aCkKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCcgICVzIGlzIGEgZHVwbGljYXRlJyAl
IHJlbHBhdGgpCi0KLSAgICAgICAgICAgICAgICAjIEZJWE1FOiBXZSBjb25zaWRlciBhIGR1cGxp
Y2F0ZSBiYXNlbGluZSBhIHN1Y2Nlc3MgaW4gdGhlIG5vcm1hbCBjYXNlLgotICAgICAgICAgICAg
ICAgICMgRklYTUU6IFRoaXMgbWF5IG5vdCBiZSB3aGF0IHlvdSB3YW50IHNvbWV0aW1lczsgc2hv
dWxkIHRoaXMgYmUKLSAgICAgICAgICAgICAgICAjIEZJWE1FOiBjb250cm9sbGFibGU/Ci0gICAg
ICAgICAgICAgICAgc2VsZi5fcmViYXNlbGluZWRfdGVzdHMuYXBwZW5kKHRlc3QpCi0gICAgICAg
ICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAgaWYgc3VmZml4ID09ICcuY2hlY2tzdW0n
IGFuZCBzZWxmLl9wbmdfaGFzX3NhbWVfY2hlY2tzdW0odGVtcF9uYW1lLCB0ZXN0LCBleHBlY3Rl
ZF9mdWxscGF0aCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5yZW1vdmUodGVt
cF9uYW1lKQotICAgICAgICAgICAgICAgICMgSWYgYW4gb2xkIGNoZWNrc3VtIGV4aXN0cywgZGVs
ZXRlIGl0LgotICAgICAgICAgICAgICAgIHNlbGYuX2RlbGV0ZV9iYXNlbGluZShleHBlY3RlZF9m
dWxscGF0aCkKLSAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBzZWxmLl9m
aWxlc3lzdGVtLm1heWJlX21ha2VfZGlyZWN0b3J5KHNlbGYuX2ZpbGVzeXN0ZW0uZGlybmFtZShl
eHBlY3RlZF9mdWxscGF0aCkpCi0gICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLm1vdmUodGVt
cF9uYW1lLCBleHBlY3RlZF9mdWxscGF0aCkKLQotICAgICAgICAgICAgcGF0aF9mcm9tX2Jhc2Ug
PSBzZWxmLl9maWxlc3lzdGVtLnJlbHBhdGgoZXhwZWN0ZWRfZnVsbHBhdGgpCi0gICAgICAgICAg
ICBpZiBzZWxmLl9zY20uZXhpc3RzKHBhdGhfZnJvbV9iYXNlKToKLSAgICAgICAgICAgICAgICBf
bG9nLmluZm8oJyAgVXBkYXRpbmcgJXMnICUgcmVscGF0aCkKLSAgICAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAgICAgX2xvZy5pbmZvKCcgIEFkZGluZyAlcycgJSByZWxwYXRoKQotCi0gICAg
ICAgICAgICBpZiBzZWxmLl9zY20uYWRkKGV4cGVjdGVkX2Z1bGxwYXRoLCByZXR1cm5fZXhpdF9j
b2RlPVRydWUpOgotICAgICAgICAgICAgICAgICMgRklYTUU6IHByaW50IGRldGFpbGVkIGRpYWdu
b3NlIG1lc3NhZ2VzCi0gICAgICAgICAgICAgICAgc2NtX2Vycm9yID0gVHJ1ZQotICAgICAgICAg
ICAgZWxpZiBzdWZmaXggIT0gJy5jaGVja3N1bSc6Ci0gICAgICAgICAgICAgICAgc2VsZi5fY3Jl
YXRlX2h0bWxfYmFzZWxpbmVfZmlsZXMoZXhwZWN0ZWRfZnVsbHBhdGgpCi0KLSAgICAgICAgaWYg
bm90IGZvdW5kOgotICAgICAgICAgICAgX2xvZy53YXJuKCdObyByZXN1bHRzIGluIGFyY2hpdmUg
Zm9yICVzJyAlIHRlc3QpCi0gICAgICAgIGVsaWYgc2NtX2Vycm9yOgotICAgICAgICAgICAgX2xv
Zy53YXJuKCdGYWlsZWQgdG8gYWRkIGJhc2VsaW5lcyB0byB5b3VyIHJlcG9zaXRvcnkuJykKLSAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgUmViYXNlbGluZSBzdWNjZWVk
ZWQuJykKLSAgICAgICAgICAgIHNlbGYuX3JlYmFzZWxpbmVkX3Rlc3RzLmFwcGVuZCh0ZXN0KQot
Ci0gICAgZGVmIF9leHRyYWN0X2Zyb21femlwX3RvX3RlbXBmaWxlKHNlbGYsIHppcF9maWxlLCBm
aWxlbmFtZSk6Ci0gICAgICAgICIiIkV4dHJhY3RzIHxmaWxlbmFtZXwgZnJvbSB8emlwX2ZpbGV8
LCBhIFppcEZpbGVTZXQuIFJldHVybnMgdGhlIGZ1bGwKLSAgICAgICAgICAgcGF0aCBuYW1lIHRv
IHRoZSBleHRyYWN0ZWQgZmlsZS4iIiIKLSAgICAgICAgZGF0YSA9IHppcF9maWxlLnJlYWQoZmls
ZW5hbWUpCi0gICAgICAgIHN1ZmZpeCA9IHNlbGYuX2ZpbGVzeXN0ZW0uc3BsaXRleHQoZmlsZW5h
bWUpWzFdCi0gICAgICAgIHRlbXBmaWxlLCB0ZW1wX25hbWUgPSBzZWxmLl9maWxlc3lzdGVtLm9w
ZW5fYmluYXJ5X3RlbXBmaWxlKHN1ZmZpeCkKLSAgICAgICAgdGVtcGZpbGUud3JpdGUoZGF0YSkK
LSAgICAgICAgdGVtcGZpbGUuY2xvc2UoKQotICAgICAgICByZXR1cm4gdGVtcF9uYW1lCi0KLSAg
ICBkZWYgX3BuZ19oYXNfc2FtZV9jaGVja3N1bShzZWxmLCBjaGVja3N1bV9wYXRoLCB0ZXN0LCBj
aGVja3N1bV9leHBlY3RlZF9mdWxscGF0aCk6Ci0gICAgICAgICIiIlJldHVybnMgVHJ1ZSBpZiB0
aGUgZmFsbGJhY2sgcG5nIGZvciB8Y2hlY2tzdW1fZXhwZWN0ZWRfZnVsbHBhdGh8Ci0gICAgICAg
IGNvbnRhaW5zIHRoZSBzYW1lIGNoZWNrc3VtLiIiIgotICAgICAgICBmcyA9IHNlbGYuX2ZpbGVz
eXN0ZW0KLSAgICAgICAgcG5nX2Z1bGxwYXRoID0gc2VsZi5fZmlyc3RfZmFsbGJhY2tfcG5nX2Zv
cl90ZXN0KHRlc3QpCi0KLSAgICAgICAgaWYgbm90IGZzLmV4aXN0cyhwbmdfZnVsbHBhdGgpOgot
ICAgICAgICAgICAgX2xvZy5lcnJvcignICBDaGVja3N1bSB3aXRob3V0IHBuZyBmaWxlIGZvdW5k
ISBFeHBlY3RlZCAlcyB0byBleGlzdC4nICUgcG5nX2Z1bGxwYXRoKQotICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCi0KLSAgICAgICAgd2l0aCBmcy5vcGVuX2JpbmFyeV9maWxlX2Zvcl9yZWFkaW5n
KHBuZ19mdWxscGF0aCkgYXMgZmlsZWhhbmRsZToKLSAgICAgICAgICAgIGNoZWNrc3VtX2luX3Bu
ZyA9IHJlYWRfY2hlY2tzdW1fZnJvbV9wbmcucmVhZF9jaGVja3N1bShmaWxlaGFuZGxlKQotICAg
ICAgICAgICAgY2hlY2tzdW1faW5fdGV4dF9maWxlID0gZnMucmVhZF90ZXh0X2ZpbGUoY2hlY2tz
dW1fcGF0aCkKLSAgICAgICAgICAgIGlmIGNoZWNrc3VtX2luX3BuZyBhbmQgY2hlY2tzdW1faW5f
cG5nICE9IGNoZWNrc3VtX2luX3RleHRfZmlsZToKLSAgICAgICAgICAgICAgICBfbG9nLmVycm9y
KCIgIGNoZWNrc3VtIGluICVzIGFuZCAlcyBkb24ndCBtYXRjaCEgIENvbnRpbnVpbmciCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAiIHRvIGNvcHkgYnV0IHBsZWFzZSBpbnZlc3RpZ2F0ZS4i
ICUgKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tzdW1fZXhwZWN0ZWRfZnVsbHBh
dGgsIHBuZ19mdWxscGF0aCkpCi0gICAgICAgICAgICByZXR1cm4gY2hlY2tzdW1faW5fdGV4dF9m
aWxlID09IGNoZWNrc3VtX2luX3BuZwotCi0gICAgZGVmIF9maXJzdF9mYWxsYmFja19wbmdfZm9y
X3Rlc3Qoc2VsZiwgdGVzdCk6Ci0gICAgICAgIHRlc3RfZmlsZXBhdGggPSBzZWxmLl9maWxlc3lz
dGVtLmpvaW4oc2VsZi5fdGFyZ2V0X3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCB0ZXN0KQotICAg
ICAgICBhbGxfYmFzZWxpbmVzID0gc2VsZi5fcmViYXNlbGluZV9wb3J0LmV4cGVjdGVkX2Jhc2Vs
aW5lcygKLSAgICAgICAgICAgIHRlc3RfZmlsZXBhdGgsICcucG5nJywgVHJ1ZSkKLSAgICAgICAg
cmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihhbGxfYmFzZWxpbmVzWzBdWzBdLCBhbGxfYmFz
ZWxpbmVzWzBdWzFdKQotCi0gICAgZGVmIF9pc19kdXBfYmFzZWxpbmUoc2VsZiwgbmV3X2Jhc2Vs
aW5lLCBiYXNlbGluZV9wYXRoLCB0ZXN0LCBzdWZmaXgsIHBsYXRmb3JtKToKLSAgICAgICAgIiIi
Q2hlY2sgd2hldGhlciBhIGJhc2VsaW5lIGlzIGR1cGxpY2F0ZSBhbmQgY2FuIGZhbGxiYWNrIHRv
IHNhbWUKLSAgICAgICAgICAgYmFzZWxpbmUgZm9yIGFub3RoZXIgcGxhdGZvcm0uIEZvciBleGFt
cGxlLCBpZiBhIHRlc3QgaGFzIHNhbWUKLSAgICAgICAgICAgYmFzZWxpbmUgb24gbGludXggYW5k
IHdpbmRvd3MsIHRoZW4gd2Ugb25seSBzdG9yZSB3aW5kb3dzCi0gICAgICAgICAgIGJhc2VsaW5l
IGFuZCBsaW51eCBiYXNlbGluZSB3aWxsIGZhbGxiYWNrIHRvIHRoZSB3aW5kb3dzIHZlcnNpb24u
Ci0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICBuZXdfYmFzZWxpbmU6IHRlbXAgZmlsZW5hbWUg
Y29udGFpbmluZyB0aGUgbmV3IGJhc2VsaW5lIHJlc3VsdHMKLSAgICAgICAgICBiYXNlbGluZV9w
YXRoOiBiYXNlbGluZSBleHBlY3RhdGlvbiBmaWxlIG5hbWUuCi0gICAgICAgICAgdGVzdDogdGVz
dCBuYW1lLgotICAgICAgICAgIHN1ZmZpeDogZmlsZSBzdWZmaXggb2YgdGhlIGV4cGVjdGVkIHJl
c3VsdHMsIGluY2x1ZGluZyBkb3Q7Ci0gICAgICAgICAgICAgICAgICBlLmcuICcudHh0JyBvciAn
LnBuZycuCi0gICAgICAgICAgcGxhdGZvcm06IGJhc2VsaW5lIHBsYXRmb3JtICdtYWMnLCAnd2lu
JyBvciAnbGludXgnLgotCi0gICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgVHJ1ZSBpZiB0aGUg
YmFzZWxpbmUgaXMgdW5uZWNlc3NhcnkuCi0gICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlLgotICAg
ICAgICAiIiIKLSAgICAgICAgdGVzdF9maWxlcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihz
ZWxmLl90YXJnZXRfcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCksIHRlc3QpCi0gICAgICAgIGFsbF9i
YXNlbGluZXMgPSBzZWxmLl9yZWJhc2VsaW5lX3BvcnQuZXhwZWN0ZWRfYmFzZWxpbmVzKAotICAg
ICAgICAgICAgdGVzdF9maWxlcGF0aCwgc3VmZml4LCBUcnVlKQotICAgICAgICB0ZXN0X3JlbHBh
dGggPSBzZWxmLl9maWxlc3lzdGVtLnJlbHBhdGgodGVzdF9maWxlcGF0aCwgc2VsZi5fdGFyZ2V0
X3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpKQotCi0gICAgICAgIGZvciBmYWxsYmFja19kaXIsIGZh
bGxiYWNrX2ZpbGUgaW4gYWxsX2Jhc2VsaW5lczoKLSAgICAgICAgICAgIGlmIG5vdCBmYWxsYmFj
a19kaXIgb3Igbm90IGZhbGxiYWNrX2ZpbGU6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLQot
ICAgICAgICAgICAgZmFsbGJhY2tfZnVsbHBhdGggPSBzZWxmLl9maWxlc3lzdGVtLm5vcm1wYXRo
KAotICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihmYWxsYmFja19kaXIsIGZh
bGxiYWNrX2ZpbGUpKQotICAgICAgICAgICAgaWYgZmFsbGJhY2tfZnVsbHBhdGgubG93ZXIoKSA9
PSBiYXNlbGluZV9wYXRoLmxvd2VyKCk6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAg
ICAgICAgIGZhbGxiYWNrX2Rpcl9yZWxwYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5yZWxwYXRoKGZh
bGxiYWNrX2Rpciwgc2VsZi5fdGFyZ2V0X3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpKQotICAgICAg
ICAgICAgaWYgZmFsbGJhY2tfZGlyX3JlbHBhdGggPT0gJyc6Ci0gICAgICAgICAgICAgICAgZmFs
bGJhY2tfZGlyX3JlbHBhdGggPSAnPGdlbmVyaWM+JwotCi0gICAgICAgICAgICBuZXdfb3V0cHV0
ID0gc2VsZi5fZmlsZXN5c3RlbS5yZWFkX2JpbmFyeV9maWxlKG5ld19iYXNlbGluZSkKLSAgICAg
ICAgICAgIGZhbGxiYWNrX291dHB1dCA9IHNlbGYuX2ZpbGVzeXN0ZW0ucmVhZF9iaW5hcnlfZmls
ZShmYWxsYmFja19mdWxscGF0aCkKLSAgICAgICAgICAgIGlzX2ltYWdlID0gYmFzZWxpbmVfcGF0
aC5sb3dlcigpLmVuZHN3aXRoKCcucG5nJykKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9kaWZm
X2Jhc2VsaW5lcyhuZXdfb3V0cHV0LCBmYWxsYmFja19vdXRwdXQsIGlzX2ltYWdlKToKLSAgICAg
ICAgICAgICAgICBfbG9nLmluZm8oJyAgU2tpcHBpbmcgJXMgKG1hdGNoZXMgJXMpJywgdGVzdF9y
ZWxwYXRoLCBmYWxsYmFja19kaXJfcmVscGF0aCkKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1
ZQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAg
ICBkZWYgX2RpZmZfYmFzZWxpbmVzKHNlbGYsIG91dHB1dDEsIG91dHB1dDIsIGlzX2ltYWdlKToK
LSAgICAgICAgIiIiQ2hlY2sgd2hldGhlciB0d28gYmFzZWxpbmVzIGFyZSBkaWZmZXJlbnQuCi0K
LSAgICAgICAgQXJnczoKLSAgICAgICAgICBvdXRwdXQxLCBvdXRwdXQyOiBjb250ZW50cyBvZiB0
aGUgYmFzZWxpbmVzIHRvIGNvbXBhcmUuCi0KLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICBU
cnVlIGlmIHR3byBmaWxlcyBhcmUgZGlmZmVyZW50IG9yIGhhdmUgZGlmZmVyZW50IGV4dGVuc2lv
bnMuCi0gICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlLgotICAgICAgICAiIiIKLQotICAgICAgICBp
ZiBpc19pbWFnZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3J0LmRpZmZfaW1hZ2Uob3V0
cHV0MSwgb3V0cHV0MiwgTm9uZSkKLQotICAgICAgICByZXR1cm4gc2VsZi5fcG9ydC5jb21wYXJl
X3RleHQob3V0cHV0MSwgb3V0cHV0MikKLQotICAgIGRlZiBfZGVsZXRlX2Jhc2VsaW5lKHNlbGYs
IGZpbGVuYW1lKToKLSAgICAgICAgIiIiUmVtb3ZlIHRoZSBmaWxlIGZyb20gcmVwb3NpdG9yeSBh
bmQgZGVsZXRlIGl0IGZyb20gZGlzay4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgIGZpbGVu
YW1lOiBmdWxsIHBhdGggb2YgdGhlIGZpbGUgdG8gZGVsZXRlLgotICAgICAgICAiIiIKLQotICAg
ICAgICBpZiBub3QgZmlsZW5hbWUgb3Igbm90IHNlbGYuX2ZpbGVzeXN0ZW0uaXNmaWxlKGZpbGVu
YW1lKToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBzZWxmLl9zY20uZGVsZXRlKGZpbGVu
YW1lKQotCi0gICAgZGVmIF9jcmVhdGVfaHRtbF9iYXNlbGluZV9maWxlcyhzZWxmLCBiYXNlbGlu
ZV9mdWxscGF0aCk6Ci0gICAgICAgICIiIkNyZWF0ZSBiYXNlbGluZSBmaWxlcyAob2xkLCBuZXcg
YW5kIGRpZmYpIGluIGh0bWwgZGlyZWN0b3J5LgotCi0gICAgICAgICAgIFRoZSBmaWxlcyBhcmUg
dXNlZCB0byBjb21wYXJlIHRoZSByZWJhc2VsaW5pbmcgcmVzdWx0cy4KLQotICAgICAgICBBcmdz
OgotICAgICAgICAgIGJhc2VsaW5lX2Z1bGxwYXRoOiBmdWxsIHBhdGggb2YgdGhlIGV4cGVjdGVk
IGJhc2VsaW5lIGZpbGUuCi0gICAgICAgICIiIgotCi0gICAgICAgIGJhc2VsaW5lX3JlbHBhdGgg
PSBzZWxmLl9maWxlc3lzdGVtLnJlbHBhdGgoYmFzZWxpbmVfZnVsbHBhdGgpCi0gICAgICAgIF9s
b2cuZGVidWcoJyAgSHRtbDogY3JlYXRlIGJhc2VsaW5lcyBmb3IgIiVzIicsIGJhc2VsaW5lX3Jl
bHBhdGgpCi0KLSAgICAgICAgaWYgKG5vdCBiYXNlbGluZV9mdWxscGF0aAotICAgICAgICAgICAg
b3Igbm90IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKGJhc2VsaW5lX2Z1bGxwYXRoKSk6Ci0gICAg
ICAgICAgICBfbG9nLmRlYnVnKCcgIEh0bWw6IERvZXMgbm90IGV4aXN0OiAiJXMiJywgYmFzZWxp
bmVfZnVsbHBhdGgpCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBpZiBub3Qgc2VsZi5f
c2NtLmV4aXN0cyhiYXNlbGluZV9yZWxwYXRoKToKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJyAg
SHRtbDogRG9lcyBub3QgZXhpc3QgaW4gc2NtOiAiJXMiJywgYmFzZWxpbmVfcmVscGF0aCkKLSAg
ICAgICAgICAgIHJldHVybgotCi0gICAgICAgICMgQ29weSB0aGUgbmV3IGJhc2VsaW5lIHRvIGh0
bWwgZGlyZWN0b3J5IGZvciByZXN1bHQgY29tcGFyaXNvbi4KLSAgICAgICAgYmFzZWxpbmVfZmls
ZW5hbWUgPSBzZWxmLl9maWxlc3lzdGVtLmJhc2VuYW1lKGJhc2VsaW5lX2Z1bGxwYXRoKQotICAg
ICAgICBuZXdfZmlsZSA9IGdldF9yZXN1bHRfZmlsZV9mdWxscGF0aChzZWxmLl9maWxlc3lzdGVt
LCBzZWxmLl9vcHRpb25zLmh0bWxfZGlyZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBiYXNlbGluZV9maWxlbmFtZSwgc2VsZi5fcGxhdGZvcm0sICdu
ZXcnKQotICAgICAgICBzZWxmLl9maWxlc3lzdGVtLmNvcHlmaWxlKGJhc2VsaW5lX2Z1bGxwYXRo
LCBuZXdfZmlsZSkKLSAgICAgICAgX2xvZy5kZWJ1ZygnICBIdG1sOiBjb3BpZWQgbmV3IGJhc2Vs
aW5lIGZpbGUgZnJvbSAiJXMiIHRvICIlcyIuJywKLSAgICAgICAgICAgICAgICAgIGJhc2VsaW5l
X2Z1bGxwYXRoLCBuZXdfZmlsZSkKLQotICAgICAgICAjIEdldCB0aGUgb2xkIGJhc2VsaW5lIGZy
b20gdGhlIHJlcG9zaXRvcnkgYW5kIHNhdmUgdG8gdGhlIGh0bWwgZGlyZWN0b3J5LgotICAgICAg
ICB0cnk6Ci0gICAgICAgICAgICBvdXRwdXQgPSBzZWxmLl9zY20uc2hvd19oZWFkKGJhc2VsaW5l
X3JlbHBhdGgpCi0gICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciwgZToKLSAgICAgICAgICAgIF9s
b2cud2FybmluZyhlKQotICAgICAgICAgICAgb3V0cHV0ID0gIiIKLQotICAgICAgICBpZiAobm90
IG91dHB1dCkgb3IgKG91dHB1dC51cHBlcigpLnJzdHJpcCgpLmVuZHN3aXRoKCdOTyBTVUNIIEZJ
TEUgT1IgRElSRUNUT1JZJykpOgotICAgICAgICAgICAgX2xvZy53YXJuaW5nKCcgIE5vIGJhc2Ug
ZmlsZTogIiVzIicsIGJhc2VsaW5lX2Z1bGxwYXRoKQotICAgICAgICAgICAgcmV0dXJuCi0gICAg
ICAgIGJhc2VfZmlsZSA9IGdldF9yZXN1bHRfZmlsZV9mdWxscGF0aChzZWxmLl9maWxlc3lzdGVt
LCBzZWxmLl9vcHRpb25zLmh0bWxfZGlyZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVfZmlsZW5hbWUsIHNlbGYuX3BsYXRmb3JtLCAn
b2xkJykKLSAgICAgICAgaWYgYmFzZV9maWxlLnVwcGVyKCkuZW5kc3dpdGgoJy5QTkcnKToKLSAg
ICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVfYmluYXJ5X2ZpbGUoYmFzZV9maWxlLCBv
dXRwdXQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLndyaXRl
X3RleHRfZmlsZShiYXNlX2ZpbGUsIG91dHB1dCkKLSAgICAgICAgX2xvZy5kZWJ1ZygnICBIdG1s
OiBjcmVhdGVkIG9sZCBiYXNlbGluZSBmaWxlOiAiJXMiLicsIGJhc2VfZmlsZSkKLQotICAgICAg
ICAjIEdldCB0aGUgZGlmZiBiZXR3ZWVuIG9sZCBhbmQgbmV3IGJhc2VsaW5lcyBhbmQgc2F2ZSB0
byB0aGUgaHRtbCBkaXIuCi0gICAgICAgIGRpZmZfZmlsZSA9IGdldF9yZXN1bHRfZmlsZV9mdWxs
cGF0aChzZWxmLl9maWxlc3lzdGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5odG1sX2RpcmVjdG9yeSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGxhdGZvcm0sICdk
aWZmJykKLSAgICAgICAgaGFzX2RpZmYgPSBGYWxzZQotICAgICAgICBpZiBiYXNlbGluZV9maWxl
bmFtZS51cHBlcigpLmVuZHN3aXRoKCcuVFhUJyk6Ci0gICAgICAgICAgICBvdXRwdXQgPSBzZWxm
Ll9zY20uZGlmZl9mb3JfZmlsZShiYXNlbGluZV9yZWxwYXRoLCBsb2c9X2xvZykKLSAgICAgICAg
ICAgIGlmIG91dHB1dDoKLSAgICAgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLndyaXRlX3Rl
eHRfZmlsZShkaWZmX2ZpbGUsIG91dHB1dCkKLSAgICAgICAgICAgICAgICBoYXNfZGlmZiA9IFRy
dWUKLSAgICAgICAgZWxpZiBiYXNlbGluZV9maWxlbmFtZS51cHBlcigpLmVuZHN3aXRoKCcuUE5H
Jyk6Ci0gICAgICAgICAgICBvbGRfZmlsZSA9IGdldF9yZXN1bHRfZmlsZV9mdWxscGF0aChzZWxm
Ll9maWxlc3lzdGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fb3B0aW9ucy5odG1sX2RpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGxhdGZvcm0sICdv
bGQnKQotICAgICAgICAgICAgbmV3X2ZpbGUgPSBnZXRfcmVzdWx0X2ZpbGVfZnVsbHBhdGgoc2Vs
Zi5fZmlsZXN5c3RlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX29wdGlvbnMuaHRtbF9kaXJlY3RvcnksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlbGluZV9maWxlbmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BsYXRmb3JtLCAn
bmV3JykKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJyBIdG1sOiBkaWZmaW5nICIlcyIgYW5kICIl
cyInLCBvbGRfZmlsZSwgbmV3X2ZpbGUpCi0gICAgICAgICAgICBvbGRfb3V0cHV0ID0gc2VsZi5f
ZmlsZXN5c3RlbS5yZWFkX2JpbmFyeV9maWxlKG9sZF9maWxlKQotICAgICAgICAgICAgbmV3X291
dHB1dCA9IHNlbGYuX2ZpbGVzeXN0ZW0ucmVhZF9iaW5hcnlfZmlsZShuZXdfZmlsZSkKLSAgICAg
ICAgICAgIGhhc19kaWZmID0gc2VsZi5fcG9ydC5kaWZmX2ltYWdlKG9sZF9vdXRwdXQsIG5ld19v
dXRwdXQsIGRpZmZfZmlsZSkKLQotICAgICAgICBpZiBoYXNfZGlmZjoKLSAgICAgICAgICAgIF9s
b2cuZGVidWcoJyAgSHRtbDogY3JlYXRlZCBiYXNlbGluZSBkaWZmIGZpbGU6ICIlcyIuJywgZGlm
Zl9maWxlKQotCi0KLWNsYXNzIEh0bWxHZW5lcmF0b3Iob2JqZWN0KToKLSAgICAiIiJDbGFzcyB0
byBnZW5lcmF0ZSByZWJhc2VsaW5pbmcgcmVzdWx0IGNvbXBhcmlzb24gaHRtbC4iIiIKLQotICAg
IEhUTUxfUkVCQVNFTElORSA9ICgnPGh0bWw+JwotICAgICAgICAgICAgICAgICAgICAgICAnPGhl
YWQ+JwotICAgICAgICAgICAgICAgICAgICAgICAnPHN0eWxlPicKLSAgICAgICAgICAgICAgICAg
ICAgICAgJ2JvZHkge2ZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO30nCi0gICAgICAgICAgICAgICAg
ICAgICAgICcubWFpblRhYmxlIHtiYWNrZ3JvdW5kOiAjNjY2NjY2O30nCi0gICAgICAgICAgICAg
ICAgICAgICAgICcubWFpblRhYmxlIHRkICwgLm1haW5UYWJsZSB0aCB7YmFja2dyb3VuZDogd2hp
dGU7fScKLSAgICAgICAgICAgICAgICAgICAgICAgJy5kZXRhaWwge21hcmdpbi1sZWZ0OiAxMHB4
OyBtYXJnaW4tdG9wOiAzcHg7fScKLSAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+Jwot
ICAgICAgICAgICAgICAgICAgICAgICAnPHRpdGxlPlJlYmFzZWxpbmluZyBSZXN1bHQgQ29tcGFy
aXNvbiAoJSh0aW1lKXMpJwotICAgICAgICAgICAgICAgICAgICAgICAnPC90aXRsZT4nCi0gICAg
ICAgICAgICAgICAgICAgICAgICc8L2hlYWQ+JwotICAgICAgICAgICAgICAgICAgICAgICAnPGJv
ZHk+JwotICAgICAgICAgICAgICAgICAgICAgICAnPGgyPlJlYmFzZWxpbmluZyBSZXN1bHQgQ29t
cGFyaXNvbiAoJSh0aW1lKXMpPC9oMj4nCi0gICAgICAgICAgICAgICAgICAgICAgICclKGJvZHkp
cycKLSAgICAgICAgICAgICAgICAgICAgICAgJzwvYm9keT4nCi0gICAgICAgICAgICAgICAgICAg
ICAgICc8L2h0bWw+JykKLSAgICBIVE1MX05PX1JFQkFTRUxJTklOR19URVNUUyA9ICgKLSAgICAg
ICAgJzxwPk5vIHRlc3RzIGZvdW5kIHRoYXQgbmVlZCByZWJhc2VsaW5pbmcuPC9wPicpCi0gICAg
SFRNTF9UQUJMRV9URVNUID0gKCc8dGFibGUgY2xhc3M9Im1haW5UYWJsZSIgY2VsbHNwYWNpbmc9
MSBjZWxscGFkZGluZz01PicKLSAgICAgICAgICAgICAgICAgICAgICAgJyVzPC90YWJsZT48YnI+
JykKLSAgICBIVE1MX1RSX1RFU1QgPSAoJzx0cj4nCi0gICAgICAgICAgICAgICAgICAgICc8dGgg
c3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNDREVDREU7IGJvcmRlci1ib3R0b206ICcKLSAgICAg
ICAgICAgICAgICAgICAgJzFweCBzb2xpZCBibGFjazsgZm9udC1zaXplOiAxOHB0OyBmb250LXdl
aWdodDogYm9sZCIgJwotICAgICAgICAgICAgICAgICAgICAnY29sc3Bhbj0iNSI+JwotICAgICAg
ICAgICAgICAgICAgICAnPGEgaHJlZj0iJXMiPiVzPC9hPicKLSAgICAgICAgICAgICAgICAgICAg
JzwvdGg+JwotICAgICAgICAgICAgICAgICAgICAnPC90cj4nKQotICAgIEhUTUxfVEVTVF9ERVRB
SUwgPSAoJzxkaXYgY2xhc3M9ImRldGFpbCI+JwotICAgICAgICAgICAgICAgICAgICAgICAgJzx0
cj4nCi0gICAgICAgICAgICAgICAgICAgICAgICAnPHRoIHdpZHRoPSIxMDAiPkJhc2VsaW5lPC90
aD4nCi0gICAgICAgICAgICAgICAgICAgICAgICAnPHRoIHdpZHRoPSIxMDAiPlBsYXRmb3JtPC90
aD4nCi0gICAgICAgICAgICAgICAgICAgICAgICAnPHRoIHdpZHRoPSIyMDAiPk9sZDwvdGg+Jwot
ICAgICAgICAgICAgICAgICAgICAgICAgJzx0aCB3aWR0aD0iMjAwIj5OZXc8L3RoPicKLSAgICAg
ICAgICAgICAgICAgICAgICAgICc8dGggd2lkdGg9IjE1MCI+RGlmZmVyZW5jZTwvdGg+JwotICAg
ICAgICAgICAgICAgICAgICAgICAgJzwvdHI+JwotICAgICAgICAgICAgICAgICAgICAgICAgJyVz
JwotICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicpCi0gICAgSFRNTF9URF9OT0xJTksg
PSAnPHRkIGFsaWduPWNlbnRlcj48YT4lczwvYT48L3RkPicKLSAgICBIVE1MX1REX0xJTksgPSAn
PHRkIGFsaWduPWNlbnRlcj48YSBocmVmPSIlKHVyaSlzIj4lKG5hbWUpczwvYT48L3RkPicKLSAg
ICBIVE1MX1REX0xJTktfSU1HID0gKCc8dGQ+PGEgaHJlZj0iJSh1cmkpcyI+JwotICAgICAgICAg
ICAgICAgICAgICAgICAgJzxpbWcgc3R5bGU9IndpZHRoOiAyMDAiIHNyYz0iJSh1cmkpcyIgLz48
L2E+PC90ZD4nKQotICAgIEhUTUxfVFIgPSAnPHRyPiVzPC90cj4nCi0KLSAgICBkZWYgX19pbml0
X18oc2VsZiwgcG9ydCwgdGFyZ2V0X3BvcnQsIG9wdGlvbnMsIHBsYXRmb3JtcywgcmViYXNlbGlu
aW5nX3Rlc3RzKToKLSAgICAgICAgc2VsZi5faHRtbF9kaXJlY3RvcnkgPSBvcHRpb25zLmh0bWxf
ZGlyZWN0b3J5Ci0gICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0Ci0gICAgICAgIHNlbGYuX3Rhcmdl
dF9wb3J0ID0gdGFyZ2V0X3BvcnQKLSAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKLSAg
ICAgICAgc2VsZi5fcGxhdGZvcm1zID0gcGxhdGZvcm1zCi0gICAgICAgIHNlbGYuX3JlYmFzZWxp
bmluZ190ZXN0cyA9IHJlYmFzZWxpbmluZ190ZXN0cwotICAgICAgICBzZWxmLl9maWxlc3lzdGVt
ID0gcG9ydC5fZmlsZXN5c3RlbQotICAgICAgICBzZWxmLl9odG1sX2ZpbGUgPSBzZWxmLl9maWxl
c3lzdGVtLmpvaW4ob3B0aW9ucy5odG1sX2RpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWJhc2VsaW5lLmh0bWwnKQotCi0gICAgZGVm
IGFic3BhdGhfdG9fdXJpKHNlbGYsIGZpbGVuYW1lKToKLSAgICAgICAgIiIiQ29udmVydHMgYW4g
YWJzb2x1dGUgcGF0aCB0byBhIGZpbGU6IFVSSS4iIiIKLSAgICAgICAgcmV0dXJuIHBhdGguYWJz
cGF0aF90b191cmkoZmlsZW5hbWUsIHNlbGYuX3BvcnQuX2V4ZWN1dGl2ZSkKLQotICAgIGRlZiBn
ZW5lcmF0ZV9odG1sKHNlbGYpOgotICAgICAgICAiIiJHZW5lcmF0ZSBodG1sIGZpbGUgZm9yIHJl
YmFzZWxpbmluZyByZXN1bHQgY29tcGFyaXNvbi4iIiIKLQotICAgICAgICBfbG9nLmRlYnVnKCdH
ZW5lcmF0aW5nIGh0bWwgZmlsZScpCi0KLSAgICAgICAgaHRtbF9ib2R5ID0gJycKLSAgICAgICAg
aWYgbm90IHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0czoKLSAgICAgICAgICAgIGh0bWxfYm9keSAr
PSBzZWxmLkhUTUxfTk9fUkVCQVNFTElOSU5HX1RFU1RTCi0gICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICB0ZXN0cyA9IGxpc3Qoc2VsZi5fcmViYXNlbGluaW5nX3Rlc3RzKQotICAgICAgICAgICAg
dGVzdHMuc29ydCgpCi0KLSAgICAgICAgICAgIHRlc3Rfbm8gPSAxCi0gICAgICAgICAgICBmb3Ig
dGVzdCBpbiB0ZXN0czoKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdUZXN0ICVkOiAlcycs
IHRlc3Rfbm8sIHRlc3QpCi0gICAgICAgICAgICAgICAgaHRtbF9ib2R5ICs9IHNlbGYuX2dlbmVy
YXRlX2h0bWxfZm9yX29uZV90ZXN0KHRlc3QpCi0KLSAgICAgICAgaHRtbCA9IHNlbGYuSFRNTF9S
RUJBU0VMSU5FICUgKHsndGltZSc6IHRpbWUuYXNjdGltZSgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdib2R5JzogaHRtbF9ib2R5fSkKLSAgICAgICAgX2xvZy5k
ZWJ1ZyhodG1sKQotCi0gICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKHNl
bGYuX2h0bWxfZmlsZSwgaHRtbCkKLSAgICAgICAgX2xvZy5kZWJ1ZygnQmFzZWxpbmUgY29tcGFy
aXNvbiBodG1sIGdlbmVyYXRlZCBhdCAiJXMiJywgc2VsZi5faHRtbF9maWxlKQotCi0gICAgZGVm
IHNob3dfaHRtbChzZWxmKToKLSAgICAgICAgIiIiTGF1bmNoIHRoZSByZWJhc2VsaW5pbmcgaHRt
bCBpbiBicndvc2VyLiIiIgotCi0gICAgICAgIF9sb2cuZGVidWcoJ0xhdW5jaGluZyBodG1sOiAi
JXMiJywgc2VsZi5faHRtbF9maWxlKQotICAgICAgICBzZWxmLl9wb3J0Ll91c2VyLm9wZW5fdXJs
KHNlbGYuX2h0bWxfZmlsZSkKLSAgICAgICAgX2xvZy5kZWJ1ZygnSHRtbCBsYXVuY2hlZC4nKQot
Ci0gICAgZGVmIF9nZW5lcmF0ZV9iYXNlbGluZV9saW5rcyhzZWxmLCB0ZXN0X2Jhc2VuYW1lLCBz
dWZmaXgsIHBsYXRmb3JtKToKLSAgICAgICAgIiIiR2VuZXJhdGUgbGlua3MgZm9yIGJhc2VsaW5l
IHJlc3VsdHMgKG9sZCwgbmV3IGFuZCBkaWZmKS4KLQotICAgICAgICBBcmdzOgotICAgICAgICAg
IHRlc3RfYmFzZW5hbWU6IGJhc2UgZmlsZW5hbWUgb2YgdGhlIHRlc3QKLSAgICAgICAgICBzdWZm
aXg6IGJhc2VsaW5lIGZpbGUgc3VmZml4ZXM6ICcudHh0JywgJy5wbmcnCi0gICAgICAgICAgcGxh
dGZvcm06IHdpbiwgbGludXggb3IgbWFjCi0KLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICBo
dG1sIGxpbmtzIGZvciBzaG93aW5nIGJhc2VsaW5lIHJlc3VsdHMgKG9sZCwgbmV3IGFuZCBkaWZm
KQotICAgICAgICAiIiIKLQotICAgICAgICBiYXNlbGluZV9maWxlbmFtZSA9ICclcy1leHBlY3Rl
ZCVzJyAlICh0ZXN0X2Jhc2VuYW1lLCBzdWZmaXgpCi0gICAgICAgIF9sb2cuZGVidWcoJyAgICBi
YXNlbGluZSBmaWxlbmFtZTogIiVzIicsIGJhc2VsaW5lX2ZpbGVuYW1lKQotCi0gICAgICAgIG5l
d19maWxlID0gZ2V0X3Jlc3VsdF9maWxlX2Z1bGxwYXRoKHNlbGYuX2ZpbGVzeXN0ZW0sIHNlbGYu
X2h0bWxfZGlyZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBiYXNlbGluZV9maWxlbmFtZSwgcGxhdGZvcm0sICduZXcnKQotICAgICAgICBfbG9nLmRl
YnVnKCcgICAgTmV3IGJhc2VsaW5lIGZpbGU6ICIlcyInLCBuZXdfZmlsZSkKLSAgICAgICAgaWYg
bm90IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKG5ld19maWxlKToKLSAgICAgICAgICAgIF9sb2cu
ZGVidWcoJyAgICBObyBuZXcgYmFzZWxpbmUgZmlsZTogIiVzIicsIG5ld19maWxlKQotICAgICAg
ICAgICAgcmV0dXJuICcnCi0KLSAgICAgICAgb2xkX2ZpbGUgPSBnZXRfcmVzdWx0X2ZpbGVfZnVs
bHBhdGgoc2VsZi5fZmlsZXN5c3RlbSwgc2VsZi5faHRtbF9kaXJlY3RvcnksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lLCBwbGF0
Zm9ybSwgJ29sZCcpCi0gICAgICAgIF9sb2cuZGVidWcoJyAgICBPbGQgYmFzZWxpbmUgZmlsZTog
IiVzIicsIG9sZF9maWxlKQotICAgICAgICBpZiBzdWZmaXggPT0gJy5wbmcnOgotICAgICAgICAg
ICAgaHRtbF90ZF9saW5rID0gc2VsZi5IVE1MX1REX0xJTktfSU1HCi0gICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICBodG1sX3RkX2xpbmsgPSBzZWxmLkhUTUxfVERfTElOSwotCi0gICAgICAgIGxp
bmtzID0gJycKLSAgICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMob2xkX2ZpbGUpOgot
ICAgICAgICAgICAgbGlua3MgKz0gaHRtbF90ZF9saW5rICUgewotICAgICAgICAgICAgICAgICd1
cmknOiBzZWxmLmFic3BhdGhfdG9fdXJpKG9sZF9maWxlKSwKLSAgICAgICAgICAgICAgICAnbmFt
ZSc6IGJhc2VsaW5lX2ZpbGVuYW1lfQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygnICAgIE5vIG9sZCBiYXNlbGluZSBmaWxlOiAiJXMiJywgb2xkX2ZpbGUpCi0gICAgICAg
ICAgICBsaW5rcyArPSBzZWxmLkhUTUxfVERfTk9MSU5LICUgJycKLQotICAgICAgICBsaW5rcyAr
PSBodG1sX3RkX2xpbmsgJSB7J3VyaSc6IHNlbGYuYWJzcGF0aF90b191cmkobmV3X2ZpbGUpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiBiYXNlbGluZV9maWxlbmFt
ZX0KLQotICAgICAgICBkaWZmX2ZpbGUgPSBnZXRfcmVzdWx0X2ZpbGVfZnVsbHBhdGgoc2VsZi5f
ZmlsZXN5c3RlbSwgc2VsZi5faHRtbF9kaXJlY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBiYXNlbGluZV9maWxlbmFtZSwgcGxhdGZvcm0sICdkaWZm
JykKLSAgICAgICAgX2xvZy5kZWJ1ZygnICAgIEJhc2VsaW5lIGRpZmYgZmlsZTogIiVzIicsIGRp
ZmZfZmlsZSkKLSAgICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoZGlmZl9maWxlKToK
LSAgICAgICAgICAgIGxpbmtzICs9IGh0bWxfdGRfbGluayAlIHsndXJpJzogc2VsZi5hYnNwYXRo
X3RvX3VyaShkaWZmX2ZpbGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICduYW1lJzogJ0RpZmYnfQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgX2xvZy5kZWJ1Zygn
ICAgIE5vIGJhc2VsaW5lIGRpZmYgZmlsZTogIiVzIicsIGRpZmZfZmlsZSkKLSAgICAgICAgICAg
IGxpbmtzICs9IHNlbGYuSFRNTF9URF9OT0xJTksgJSAnJwotCi0gICAgICAgIHJldHVybiBsaW5r
cwotCi0gICAgZGVmIF9nZW5lcmF0ZV9odG1sX2Zvcl9vbmVfdGVzdChzZWxmLCB0ZXN0KToKLSAg
ICAgICAgIiIiR2VuZXJhdGUgaHRtbCBmb3Igb25lIHJlYmFzZWxpbmluZyB0ZXN0LgotCi0gICAg
ICAgIEFyZ3M6Ci0gICAgICAgICAgdGVzdDogbGF5b3V0IHRlc3QgbmFtZQotCi0gICAgICAgIFJl
dHVybnM6Ci0gICAgICAgICAgaHRtbCB0aGF0IGNvbXBhcmVzIGJhc2VsaW5lIHJlc3VsdHMgZm9y
IHRoZSB0ZXN0LgotICAgICAgICAiIiIKLQotICAgICAgICB0ZXN0X2Jhc2VuYW1lID0gc2VsZi5f
ZmlsZXN5c3RlbS5iYXNlbmFtZShzZWxmLl9maWxlc3lzdGVtLnNwbGl0ZXh0KHRlc3QpWzBdKQot
ICAgICAgICBfbG9nLmRlYnVnKCcgIGJhc2VuYW1lOiAiJXMiJywgdGVzdF9iYXNlbmFtZSkKLSAg
ICAgICAgcm93cyA9IFtdCi0gICAgICAgIGZvciBzdWZmaXggaW4gQkFTRUxJTkVfU1VGRklYRVM6
Ci0gICAgICAgICAgICBpZiBzdWZmaXggPT0gJy5jaGVja3N1bSc6Ci0gICAgICAgICAgICAgICAg
Y29udGludWUKLQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnICBDaGVja2luZyAlcyBmaWxlcycs
IHN1ZmZpeCkKLSAgICAgICAgICAgIGZvciBwbGF0Zm9ybSBpbiBzZWxmLl9wbGF0Zm9ybXM6Ci0g
ICAgICAgICAgICAgICAgbGlua3MgPSBzZWxmLl9nZW5lcmF0ZV9iYXNlbGluZV9saW5rcyh0ZXN0
X2Jhc2VuYW1lLCBzdWZmaXgsIHBsYXRmb3JtKQotICAgICAgICAgICAgICAgIGlmIGxpbmtzOgot
ICAgICAgICAgICAgICAgICAgICByb3cgPSBzZWxmLkhUTUxfVERfTk9MSU5LICUgc2VsZi5fZ2V0
X2Jhc2VsaW5lX3Jlc3VsdF90eXBlKHN1ZmZpeCkKLSAgICAgICAgICAgICAgICAgICAgcm93ICs9
IHNlbGYuSFRNTF9URF9OT0xJTksgJSBwbGF0Zm9ybQotICAgICAgICAgICAgICAgICAgICByb3cg
Kz0gbGlua3MKLSAgICAgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnICAgIGh0bWwgcm93OiAl
cycsIHJvdykKLQotICAgICAgICAgICAgICAgICAgICByb3dzLmFwcGVuZChzZWxmLkhUTUxfVFIg
JSByb3cpCi0KLSAgICAgICAgaWYgcm93czoKLSAgICAgICAgICAgIHRlc3RfcGF0aCA9IHNlbGYu
X2ZpbGVzeXN0ZW0uam9pbihzZWxmLl90YXJnZXRfcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCksIHRl
c3QpCi0gICAgICAgICAgICBodG1sID0gc2VsZi5IVE1MX1RSX1RFU1QgJSAoc2VsZi5hYnNwYXRo
X3RvX3VyaSh0ZXN0X3BhdGgpLCB0ZXN0KQotICAgICAgICAgICAgaHRtbCArPSBzZWxmLkhUTUxf
VEVTVF9ERVRBSUwgJSAnICcuam9pbihyb3dzKQotCi0gICAgICAgICAgICBfbG9nLmRlYnVnKCcg
ICAgaHRtbCBmb3IgdGVzdDogJXMnLCBodG1sKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYuSFRN
TF9UQUJMRV9URVNUICUgaHRtbAotCi0gICAgICAgIHJldHVybiAnJwotCi0gICAgZGVmIF9nZXRf
YmFzZWxpbmVfcmVzdWx0X3R5cGUoc2VsZiwgc3VmZml4KToKLSAgICAgICAgIiIiTmFtZSBvZiB0
aGUgYmFzZWxpbmUgcmVzdWx0IHR5cGUuIiIiCi0KLSAgICAgICAgaWYgc3VmZml4ID09ICcucG5n
JzoKLSAgICAgICAgICAgIHJldHVybiAnUGl4ZWwnCi0gICAgICAgIGVsaWYgc3VmZml4ID09ICcu
dHh0JzoKLSAgICAgICAgICAgIHJldHVybiAnUmVuZGVyIFRyZWUnCi0gICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICByZXR1cm4gJ090aGVyJwotCi0KLWRlZiBnZXRfaG9zdF9wb3J0X29iamVjdChv
cHRpb25zKToKLSAgICAiIiJSZXR1cm4gYSBwb3J0IG9iamVjdCBmb3IgdGhlIHBsYXRmb3JtIHdl
J3JlIHJ1bm5pbmcgb24uIiIiCi0gICAgIyBXZSB3YW50IHRoZSBJbWFnZURpZmYgbG9naWMgdG8g
bWF0Y2ggdGhhdCBvZiB0aGUgY2hyb21pdW0gYm90cywgc28gd2UKLSAgICAjIGZvcmNlIHRoZSB1
c2Ugb2YgYSBDaHJvbWl1bSBwb3J0LiAgV2Ugd2lsbCBsb29rIGZvciBlaXRoZXIgRGVidWcgb3IK
LSAgICAjIFJlbGVhc2UgdmVyc2lvbnMuCi0gICAgb3B0aW9ucy5jb25maWd1cmF0aW9uID0gIlJl
bGVhc2UiCi0gICAgb3B0aW9ucy5jaHJvbWl1bSA9IFRydWUKLSAgICBwb3J0X29iaiA9IHBvcnQu
Z2V0KE5vbmUsIG9wdGlvbnMpCi0gICAgaWYgbm90IHBvcnRfb2JqLmNoZWNrX2ltYWdlX2RpZmYo
b3ZlcnJpZGVfc3RlcD1Ob25lLCBsb2dnaW5nPUZhbHNlKToKLSAgICAgICAgX2xvZy5kZWJ1Zygn
Tm8gcmVsZWFzZSB2ZXJzaW9uIG9mIHRoZSBpbWFnZSBkaWZmIGJpbmFyeSB3YXMgZm91bmQuJykK
LSAgICAgICAgb3B0aW9ucy5jb25maWd1cmF0aW9uID0gIkRlYnVnIgotICAgICAgICBwb3J0X29i
aiA9IHBvcnQuZ2V0KE5vbmUsIG9wdGlvbnMpCi0gICAgICAgIGlmIG5vdCBwb3J0X29iai5jaGVj
a19pbWFnZV9kaWZmKG92ZXJyaWRlX3N0ZXA9Tm9uZSwgbG9nZ2luZz1GYWxzZSk6Ci0gICAgICAg
ICAgICBfbG9nLmVycm9yKCdObyB2ZXJzaW9uIG9mIGltYWdlIGRpZmYgd2FzIGZvdW5kLiBDaGVj
ayB5b3VyIGJ1aWxkLicpCi0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgX2xvZy5kZWJ1ZygnRm91bmQgdGhlIGRlYnVnIHZlcnNpb24gb2YgdGhlIGlt
YWdlIGRpZmYgYmluYXJ5LicpCi0gICAgZWxzZToKLSAgICAgICAgX2xvZy5kZWJ1ZygnRm91bmQg
dGhlIHJlbGVhc2UgdmVyc2lvbiBvZiB0aGUgaW1hZ2UgZGlmZiBiaW5hcnkuJykKLSAgICByZXR1
cm4gcG9ydF9vYmoKLQotCi1kZWYgcGFyc2Vfb3B0aW9ucyhhcmdzKToKLSAgICAiIiJQYXJzZSBv
cHRpb25zIGFuZCByZXR1cm4gYSBwYWlyIG9mIGhvc3Qgb3B0aW9ucyBhbmQgdGFyZ2V0IG9wdGlv
bnMuIiIiCi0gICAgb3B0aW9uX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigpCi0gICAg
b3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctdicsICctLXZlcmJvc2UnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSdpbmNsdWRlIGRlYnVnLWxldmVsIGxvZ2dpbmcuJykKLQotICAgIG9wdGlvbl9wYXJzZXIu
YWRkX29wdGlvbignLXEnLCAnLS1xdWlldCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFjdGlvbj0nc3RvcmVfdHJ1ZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
J1N1cHByZXNzIHJlc3VsdCBIVE1MIHZpZXdpbmcnKQotCi0gICAgb3B0aW9uX3BhcnNlci5hZGRf
b3B0aW9uKCctcCcsICctLXBsYXRmb3JtcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ0NvbW1h
IGRlbGltaXRlZCBsaXN0IG9mIHBsYXRmb3JtcyAnCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICd0aGF0IG5lZWQgcmViYXNlbGluaW5nLicpKQotCi0gICAgb3B0aW9uX3BhcnNl
ci5hZGRfb3B0aW9uKCctdScsICctLWFyY2hpdmVfdXJsJywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdD0oJ2h0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvZi9jaHJvbWl1bS8n
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYXlvdXRfdGVzdF9yZXN1
bHRzJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdVcmwgdG8gZmluZCB0
aGUgbGF5b3V0IHRlc3QgcmVzdWx0IGFyY2hpdmUnCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICcgZmlsZS4nKSkKLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1VJywg
Jy0tZm9yY2VfYXJjaGl2ZV91cmwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSgnVXJsIG9mIHJlc3VsdCB6aXAgZmlsZS4gVGhpcyBvcHRpb24gaXMgZm9yIGRlYnVnZ2luZyAn
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwdXJwb3NlcycpKQotCi0gICAg
b3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctYicsICctLWJhY2t1cCcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl
bHA9KCdXaGV0aGVyIG9yIG5vdCB0byBiYWNrdXAgdGhlIG9yaWdpbmFsIHRlc3QnCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgZXhwZWN0YXRpb25zIGZpbGUgYWZ0ZXIgcmVi
YXNlbGluZS4nKSkKLQotICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLWQnLCAnLS1odG1s
X2RpcmVjdG9yeScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9JycsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdUaGUgZGlyZWN0b3J5IHRoYXQgc3Rv
cmVzIHRoZSByZXN1bHRzIGZvciAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdyZWJhc2VsaW5pbmcgY29tcGFyaXNvbi4nKSkKLQotICAgIG9wdGlvbl9wYXJzZXIuYWRkX29w
dGlvbignJywgJy0tdXNlX2RydCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlv
bj0nc3RvcmVfdHJ1ZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFs
c2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdVc2UgSW1hZ2VEaWZmIGZy
b20gRHVtcFJlbmRlclRyZWUgaW5zdGVhZCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdvZiBpbWFnZV9kaWZmIGZvciBwaXhlbCB0ZXN0cy4nKSkKLQotICAgIG9wdGlvbl9w
YXJzZXIuYWRkX29wdGlvbignLXcnLCAnLS13ZWJraXRfY2FuYXJ5JywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0oJ0RFUFJFQ0FURUQuIFRoaXMgZmxhZyBubyBsb25nZXIgaGFzIGFueSBlZmZlY3QuJwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBUaGUgY2FuYXJpZXMgYXJlIGFsd2F5
cyB1c2VkLicpKQotCi0gICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCcnLCAnLS10YXJnZXQt
cGxhdGZvcm0nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSdjaHJvbWl1
bScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdUaGUgdGFyZ2V0IHBsYXRm
b3JtIHRvIHJlYmFzZWxpbmUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
KCJtYWMiLCAiY2hyb21pdW0iLCAicXQiLCBldGMuKS4gRGVmYXVsdHMgJwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAndG8gImNocm9taXVtIi4nKSkKLQotICAgIG9wdGlvbnMg
PSBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoYXJncylbMF0KLSAgICBpZiBvcHRpb25zLndlYmtp
dF9jYW5hcnk6Ci0gICAgICAgIHByaW50ICItdy8tLXdlYmtpdC1jYW5hcnkgaXMgbm8gbG9uZ2Vy
IG5lY2Vzc2FyeSwgaWdub3JpbmcuIgotCi0gICAgdGFyZ2V0X29wdGlvbnMgPSBjb3B5LmNvcHko
b3B0aW9ucykKLSAgICBpZiBvcHRpb25zLnRhcmdldF9wbGF0Zm9ybSA9PSAnY2hyb21pdW0nOgot
ICAgICAgICB0YXJnZXRfb3B0aW9ucy5jaHJvbWl1bSA9IFRydWUKLSAgICBvcHRpb25zLnRvbGVy
YW5jZSA9IDAKLQotICAgIHJldHVybiAob3B0aW9ucywgdGFyZ2V0X29wdGlvbnMpCi0KLQotY2xh
c3MgRGVidWdMb2dIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6Ci0gICAgbnVtX2ZhaWx1cmVzID0g
MAotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBsb2dnaW5nLkhhbmRsZXIuX19p
bml0X18oc2VsZikKLSAgICAgICAgc2VsZi5mb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcihm
bXQ9KCclKGFzY3RpbWUpcyAlKGZpbGVuYW1lKXM6JShsaW5lbm8pLTNkICcKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclKGxldmVsbmFtZSlzICUobWVz
c2FnZSlzJykpCi0gICAgICAgIHNlbGYuc2V0Rm9ybWF0dGVyKHNlbGYuZm9ybWF0dGVyKQotCi0g
ICAgZGVmIGVtaXQoc2VsZiwgcmVjb3JkKToKLSAgICAgICAgaWYgcmVjb3JkLmxldmVsbm8gPiBs
b2dnaW5nLklORk86Ci0gICAgICAgICAgICBzZWxmLm51bV9mYWlsdXJlcyArPSAxCi0gICAgICAg
IHByaW50IHNlbGYuZm9ybWF0KHJlY29yZCkKLQotCi1jbGFzcyBOb3JtYWxMb2dIYW5kbGVyKGxv
Z2dpbmcuSGFuZGxlcik6Ci0gICAgbGFzdF9sZXZlbG5vID0gTm9uZQotICAgIG51bV9mYWlsdXJl
cyA9IDAKLQotICAgIGRlZiBlbWl0KHNlbGYsIHJlY29yZCk6Ci0gICAgICAgIGlmIHJlY29yZC5s
ZXZlbG5vID4gbG9nZ2luZy5JTkZPOgotICAgICAgICAgICAgc2VsZi5udW1fZmFpbHVyZXMgKz0g
MQotICAgICAgICBpZiBzZWxmLmxhc3RfbGV2ZWxubyAhPSByZWNvcmQubGV2ZWxubzoKLSAgICAg
ICAgICAgIHByaW50Ci0gICAgICAgICAgICBzZWxmLmxhc3RfbGV2ZWxubyA9IHJlY29yZC5sZXZl
bG5vCi0gICAgICAgIHByZWZpeCA9ICcnCi0gICAgICAgIG1zZyA9IHJlY29yZC5nZXRNZXNzYWdl
KCkKLSAgICAgICAgaWYgcmVjb3JkLmxldmVsbm8gPiBsb2dnaW5nLklORk8gYW5kIG1zZzoKLSAg
ICAgICAgICAgIHByZWZpeCA9ICclczogJyAlIHJlY29yZC5sZXZlbG5hbWUKLSAgICAgICAgcHJp
bnQgJyVzJXMnICUgKHByZWZpeCwgbXNnKQotCi0KLWRlZiBtYWluKGFyZ3MpOgotICAgICIiIkJv
b3RzdHJhcCBmdW5jdGlvbiB0aGF0IHNldHMgdXAgdGhlIG9iamVjdCByZWZlcmVuY2VzIHdlIG5l
ZWQgYW5kIGNhbGxzIHJlYWxfbWFpbigpLiIiIgotICAgIG9wdGlvbnMsIHRhcmdldF9vcHRpb25z
ID0gcGFyc2Vfb3B0aW9ucyhhcmdzKQotCi0gICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIo
KQotICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCi0gICAgaWYgb3B0aW9ucy52ZXJi
b3NlOgotICAgICAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLkRFQlVHCi0gICAgICAgIGxvZ19oYW5k
bGVyID0gRGVidWdMb2dIYW5kbGVyKCkKLSAgICBlbHNlOgotICAgICAgICBsb2dfbGV2ZWwgPSBs
b2dnaW5nLklORk8KLSAgICAgICAgbG9nX2hhbmRsZXIgPSBOb3JtYWxMb2dIYW5kbGVyKCkKLQot
ICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKLSAgICBsb2dnZXIuc2V0TGV2ZWwobG9n
X2xldmVsKQotICAgIGxvZ2dlci5hZGRIYW5kbGVyKGxvZ19oYW5kbGVyKQotCi0gICAgdGFyZ2V0
X3BvcnRfb2JqID0gcG9ydC5nZXQoTm9uZSwgdGFyZ2V0X29wdGlvbnMpCi0gICAgaG9zdF9wb3J0
X29iaiA9IGdldF9ob3N0X3BvcnRfb2JqZWN0KG9wdGlvbnMpCi0gICAgaWYgbm90IGhvc3RfcG9y
dF9vYmogb3Igbm90IHRhcmdldF9wb3J0X29iajoKLSAgICAgICAgcmV0dXJuIDEKLQotICAgIHVy
bF9mZXRjaGVyID0gdXJsZmV0Y2hlci5VcmxGZXRjaGVyKGhvc3RfcG9ydF9vYmouX2ZpbGVzeXN0
ZW0pCi0gICAgc2NtX29iaiA9IHNjbS5kZWZhdWx0X3NjbSgpCi0KLSAgICAjIFdlIHVzZSB0aGUg
ZGVmYXVsdCB6aXAgZmFjdG9yeSBtZXRob2QuCi0gICAgemlwX2ZhY3RvcnkgPSBOb25lCi0KLSAg
ICAjIEZJWE1FOiBTQ00gbW9kdWxlIGRvZXNuJ3QgaGFuZGxlIHBhdGhzIHRoYXQgYXJlbid0IHJl
bGF0aXZlIHRvIHRoZSBjaGVja291dF9yb290IGNvbnNpc3RlbnRseS4KLSAgICBob3N0X3BvcnRf
b2JqLl9maWxlc3lzdGVtLmNoZGlyKHNjbV9vYmouY2hlY2tvdXRfcm9vdCkKLQotICAgIHJldF9j
b2RlID0gcmVhbF9tYWluKG9wdGlvbnMsIHRhcmdldF9vcHRpb25zLCBob3N0X3BvcnRfb2JqLCB0
YXJnZXRfcG9ydF9vYmosIHVybF9mZXRjaGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgIHpp
cF9mYWN0b3J5LCBzY21fb2JqKQotICAgIGlmIG5vdCByZXRfY29kZSBhbmQgbG9nX2hhbmRsZXIu
bnVtX2ZhaWx1cmVzOgotICAgICAgICByZXRfY29kZSA9IDEKLSAgICBwcmludCAnJwotICAgIGlm
IHJldF9jb2RlOgotICAgICAgICBwcmludCAnUmViYXNlbGluaW5nIGZhaWxlZC4nCi0gICAgZWxz
ZToKLSAgICAgICAgcHJpbnQgJ1JlYmFzZWxpbmluZyBzdWNjZWVkZWQuJwotICAgIHJldHVybiBy
ZXRfY29kZQotCi0KLWRlZiByZWFsX21haW4ob3B0aW9ucywgdGFyZ2V0X29wdGlvbnMsIGhvc3Rf
cG9ydF9vYmosIHRhcmdldF9wb3J0X29iaiwgdXJsX2ZldGNoZXIsCi0gICAgICAgICAgICAgIHpp
cF9mYWN0b3J5LCBzY21fb2JqKToKLSAgICAiIiJNYWluIGZ1bmN0aW9uIHRvIHByb2R1Y2UgbmV3
IGJhc2VsaW5lcy4gVGhlIFJlYmFzZWxpbmVyIG9iamVjdCB1c2VzIHR3bwotICAgIGRpZmZlcmVu
dCBQb3J0IG9iamVjdHMgLSBvbmUgdG8gcmVwcmVzZW50IHRoZSBtYWNoaW5lIHRoZSBvYmplY3Qg
aXMgcnVubmluZwotICAgIG9uLCBhbmQgb25lIHRvIHJlcHJlc2VudCB0aGUgcG9ydCB3aG9zZSBl
eHBlY3RhdGlvbnMgYXJlIGJlaW5nIHVwZGF0ZWQuCi0gICAgRS5nLiwgeW91IGNhbiBydW4gdGhl
IHNjcmlwdCBvbiBhIG1hYyBhbmQgcmViYXNlbGluZSB0aGUgJ3dpbicgcG9ydC4KLQotICAgIEFy
Z3M6Ci0gICAgICAgIG9wdGlvbnM6IGNvbW1hbmQtbGluZSBhcmd1bWVudCB1c2VkIGZvciB0aGUg
aG9zdF9wb3J0X29iaiAoc2VlIGJlbG93KQotICAgICAgICB0YXJnZXRfb3B0aW9uczogY29tbWFu
ZF9saW5lIGFyZ3VtZW50IHVzZWQgZm9yIHRoZSB0YXJnZXRfcG9ydF9vYmouCi0gICAgICAgICAg
ICBUaGlzIG9iamVjdCBtYXkgaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQgdmFsdWVzIHRoYW4gfG9w
dGlvbnN8LgotICAgICAgICBob3N0X3BvcnRfb2JqOiBhIFBvcnQgb2JqZWN0IGZvciB0aGUgcGxh
dGZvcm0gdGhlIHNjcmlwdCBpcyBydW5uaW5nCi0gICAgICAgICAgICBvbi4gVGhpcyBpcyB1c2Vk
IHRvIHByb2R1Y2UgaW1hZ2UgYW5kIHRleHQgZGlmZnMsIG1vc3RseSwgYW5kCi0gICAgICAgICAg
ICBpcyB1c3VhbGx5IGFjcXVpcmVkIGZyb20gZ2V0X2hvc3RfcG9ydF9vYmooKS4KLSAgICAgICAg
dGFyZ2V0X3BvcnRfb2JqOiBhIFBvcnQgb2JqIHJlcHJlc2VudGluZyB0aGUgcG9ydCBnZXR0aW5n
IHJlYmFzZWxpbmVkLgotICAgICAgICAgICAgVGhpcyBpcyB1c2VkIHRvIGZpbmQgdGhlIGV4cGVj
dGF0aW9ucyBmaWxlLCB0aGUgYmFzZWxpbmUgcGF0aHMsCi0gICAgICAgICAgICBldGMuCi0gICAg
ICAgIHVybF9mZXRjaGVyOiBvYmplY3QgdXNlZCB0byBkb3dubG9hZCB0aGUgYnVpbGQgYXJjaGl2
ZXMgZnJvbSB0aGUgYm90cwotICAgICAgICB6aXBfZmFjdG9yeTogZmFjdG9yeSBmdW5jdGlvbiB1
c2VkIHRvIGNyZWF0ZSB6aXAgZmlsZSBvYmplY3RzIGZvcgotICAgICAgICAgICAgdGhlIGFyY2hp
dmVzLgotICAgICAgICBzY21fb2JqOiBvYmplY3QgdXNlZCB0byBhZGQgbmV3IGJhc2VsaW5lcyB0
byB0aGUgc291cmNlIGNvbnRyb2wgc3lzdGVtLgotICAgICIiIgotICAgIG9wdGlvbnMuaHRtbF9k
aXJlY3RvcnkgPSBzZXR1cF9odG1sX2RpcmVjdG9yeShob3N0X3BvcnRfb2JqLl9maWxlc3lzdGVt
LCBvcHRpb25zLmh0bWxfZGlyZWN0b3J5KQotICAgIGFsbF9wbGF0Zm9ybXMgPSB0YXJnZXRfcG9y
dF9vYmouYWxsX2Jhc2VsaW5lX3ZhcmlhbnRzKCkKLSAgICBpZiBvcHRpb25zLnBsYXRmb3JtczoK
LSAgICAgICAgYmFpbCA9IEZhbHNlCi0gICAgICAgIGZvciBwbGF0Zm9ybSBpbiBvcHRpb25zLnBs
YXRmb3JtczoKLSAgICAgICAgICAgIGlmIG5vdCBwbGF0Zm9ybSBpbiBhbGxfcGxhdGZvcm1zOgot
ICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0ludmFsaWQgcGxhdGZvcm06ICIlcyInICUgKHBs
YXRmb3JtKSkKLSAgICAgICAgICAgICAgICBiYWlsID0gVHJ1ZQotICAgICAgICBpZiBiYWlsOgot
ICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgcmViYXNlbGluZV9wbGF0Zm9ybXMgPSBvcHRp
b25zLnBsYXRmb3JtcwotICAgIGVsc2U6Ci0gICAgICAgIHJlYmFzZWxpbmVfcGxhdGZvcm1zID0g
YWxsX3BsYXRmb3JtcwotCi0gICAgIyBGSVhNRTogVGhlc2UgbG9nIG1lc3NhZ2VzIHdpbGwgYmUg
d3JvbmcgaWYgcG9ydHMgc3RvcmUgYmFzZWxpbmVzIG91dHNpZGUKLSAgICAjIG9mIGxheW91dF90
ZXN0c19kaXIoKSwgYnV0IHRoZSBjb2RlIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgICBsYXlv
dXRfdGVzdHNfZGlyID0gdGFyZ2V0X3BvcnRfb2JqLmxheW91dF90ZXN0c19kaXIoKQotICAgIGV4
cGVjdGF0aW9uc19wYXRoID0gdGFyZ2V0X3BvcnRfb2JqLnBhdGhfdG9fdGVzdF9leHBlY3RhdGlv
bnNfZmlsZSgpCi0gICAgX2xvZy5pbmZvKCdVc2luZyAlcycgJSBsYXlvdXRfdGVzdHNfZGlyKQot
ICAgIF9sb2cuaW5mbygnICBhbmQgJXMnICUgZXhwZWN0YXRpb25zX3BhdGgpCi0KLSAgICByZWJh
c2VsaW5lZF90ZXN0cyA9IHNldCgpCi0gICAgbG9nZ2VkX2JlZm9yZSA9IEZhbHNlCi0gICAgZm9y
IHBsYXRmb3JtIGluIHJlYmFzZWxpbmVfcGxhdGZvcm1zOgotICAgICAgICByZWJhc2VsaW5lciA9
IFJlYmFzZWxpbmVyKGhvc3RfcG9ydF9vYmosIHRhcmdldF9wb3J0X29iaiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybSwgb3B0aW9ucywgdXJsX2ZldGNoZXIsIHpp
cF9mYWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjbV9vYmosIGxv
Z2dlZF9iZWZvcmUpCi0KLSAgICAgICAgX2xvZy5kZWJ1ZygnJykKLSAgICAgICAgbG9nX2Rhc2hl
ZF9zdHJpbmcoJ1JlYmFzZWxpbmUgc3RhcnRlZCcsIHBsYXRmb3JtKQotICAgICAgICBpZiByZWJh
c2VsaW5lci5ydW4oKToKLSAgICAgICAgICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdSZWJhc2VsaW5l
IGRvbmUnLCBwbGF0Zm9ybSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxvZ19kYXNoZWRf
c3RyaW5nKCdSZWJhc2VsaW5lIGZhaWxlZCcsIHBsYXRmb3JtKQotCi0gICAgICAgIHJlYmFzZWxp
bmVkX3Rlc3RzIHw9IHNldChyZWJhc2VsaW5lci5nZXRfcmViYXNlbGluZWRfdGVzdHMoKSkKLSAg
ICAgICAgbG9nZ2VkX2JlZm9yZSA9IHJlYmFzZWxpbmVyLmRpZF9sb2cKLQotICAgIGlmIHJlYmFz
ZWxpbmVkX3Rlc3RzOgotICAgICAgICByZWJhc2VsaW5lci5yZW1vdmVfcmViYXNlbGluaW5nX2V4
cGVjdGF0aW9ucyhyZWJhc2VsaW5lZF90ZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5iYWNrdXApCi0KLSAgICBfbG9nLmRl
YnVnKCcnKQotICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdSZWJhc2VsaW5pbmcgcmVzdWx0IGNvbXBh
cmlzb24gc3RhcnRlZCcpCi0gICAgaHRtbF9nZW5lcmF0b3IgPSBIdG1sR2VuZXJhdG9yKGhvc3Rf
cG9ydF9vYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9wb3J0
X29iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmViYXNlbGluZV9wbGF0Zm9ybXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYmFzZWxpbmVkX3Rlc3RzKQotICAgIGh0
bWxfZ2VuZXJhdG9yLmdlbmVyYXRlX2h0bWwoKQotICAgIGlmIG5vdCBvcHRpb25zLnF1aWV0Ogot
ICAgICAgICBodG1sX2dlbmVyYXRvci5zaG93X2h0bWwoKQotICAgIGxvZ19kYXNoZWRfc3RyaW5n
KCdSZWJhc2VsaW5pbmcgcmVzdWx0IGNvbXBhcmlzb24gZG9uZScpCi0KLSAgICByZXR1cm4gMAot
Ci0KLWlmICdfX21haW5fXycgPT0gX19uYW1lX186Ci0gICAgc3lzLmV4aXQobWFpbihzeXMuYXJn
dlsxOl0pKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNl
bGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJr
aXRfdGVzdHNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDg5Nzg1KQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHNfdW5p
dHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMzkwICswLDAgQEAKLSMhL3Vzci9iaW4vcHl0
aG9uCi0jIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0
aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiVW5pdCB0ZXN0cyBmb3IgcmViYXNlbGluZV9jaHJv
bWl1bV93ZWJraXRfdGVzdHMucHkuIiIiCi0KLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIHdlYmtp
dHB5LnRvb2wgaW1wb3J0IG1vY2t0b29sCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1w
b3J0IHVybGZldGNoZXJfbW9jawotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBm
aWxlc3lzdGVtX21vY2sKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgemlwZmls
ZXNldF9tb2NrCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IG91dHB1dGNhcHR1
cmUKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2
ZSwgU2NyaXB0RXJyb3IKLQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQK
LWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCByZWJhc2VsaW5lX2Nocm9taXVtX3dl
YmtpdF90ZXN0cwotCi0KLWNsYXNzIE1vY2tQb3J0KG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIGltYWdlX2RpZmZfZXhpc3RzKToKLSAgICAgICAgc2VsZi5pbWFnZV9kaWZmX2V4aXN0
cyA9IGltYWdlX2RpZmZfZXhpc3RzCi0KLSAgICBkZWYgY2hlY2tfaW1hZ2VfZGlmZihzZWxmLCBv
dmVycmlkZV9zdGVwLCBsb2dnaW5nKToKLSAgICAgICAgcmV0dXJuIHNlbGYuaW1hZ2VfZGlmZl9l
eGlzdHMKLQotCi1kZWYgZ2V0X21vY2tfZ2V0KGNvbmZpZ19leHBlY3RhdGlvbnMpOgotICAgIGRl
ZiBtb2NrX2dldChwb3J0X25hbWUsIG9wdGlvbnMpOgotICAgICAgICByZXR1cm4gTW9ja1BvcnQo
Y29uZmlnX2V4cGVjdGF0aW9uc1tvcHRpb25zLmNvbmZpZ3VyYXRpb25dKQotICAgIHJldHVybiBt
b2NrX2dldAotCi0KLUFSQ0hJVkVfVVJMID0gJ2h0dHA6Ly9sb2NhbGhvc3QvbGF5b3V0X3Rlc3Rf
cmVzdWx0cycKLQotCi1kZWYgdGVzdF9vcHRpb25zKCk6Ci0gICAgcmV0dXJuIG1vY2t0b29sLk1v
Y2tPcHRpb25zKGNvbmZpZ3VyYXRpb249Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmFja3VwPUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1s
X2RpcmVjdG9yeT0nL3RtcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hp
dmVfdXJsPUFSQ0hJVkVfVVJMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jj
ZV9hcmNoaXZlX3VybD1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJi
b3NlPUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWlldD1GYWxzZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1zPU5vbmUpCi0KLQotZGVm
IHRlc3RfaG9zdF9wb3J0X2FuZF9maWxlc3lzdGVtKG9wdGlvbnMsIGV4cGVjdGF0aW9ucyk6Ci0g
ICAgZmlsZXN5c3RlbSA9IHBvcnQudW5pdF90ZXN0X2ZpbGVzeXN0ZW0oKQotICAgIGhvc3RfcG9y
dF9vYmogPSBwb3J0LmdldCgndGVzdCcsIG9wdGlvbnMsIGZpbGVzeXN0ZW09ZmlsZXN5c3RlbSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj1tb2NrdG9vbC5Nb2NrVXNlcigpKQot
Ci0gICAgZXhwZWN0YXRpb25zX3BhdGggPSBob3N0X3BvcnRfb2JqLnBhdGhfdG9fdGVzdF9leHBl
Y3RhdGlvbnNfZmlsZSgpCi0gICAgZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoZXhwZWN0YXRp
b25zX3BhdGgsIGV4cGVjdGF0aW9ucykKLSAgICByZXR1cm4gKGhvc3RfcG9ydF9vYmosIGZpbGVz
eXN0ZW0pCi0KLQotZGVmIHRlc3RfdXJsX2ZldGNoZXIoZmlsZXN5c3RlbSk6Ci0gICAgdXJscyA9
IHsKLSAgICAgICAgQVJDSElWRV9VUkwgKyAnL1dlYmtpdF9NYWMxMF82Lyc6ICc8YSBocmVmPSI0
LyI+JywKLSAgICAgICAgQVJDSElWRV9VUkwgKyAnL1dlYmtpdF9NYWMxMF81Lyc6ICc8YSBocmVm
PSIxLyI+PGEgaHJlZj0iMi8iPicsCi0gICAgICAgIEFSQ0hJVkVfVVJMICsgJy9XZWJraXRfV2lu
Ny8nOiAnPGEgaHJlZj0iMS8iPicsCi0gICAgICAgIEFSQ0hJVkVfVVJMICsgJy9XZWJraXRfVmlz
dGEvJzogJzxhIGhyZWY9IjEvIj4nLAotICAgICAgICBBUkNISVZFX1VSTCArICcvV2Via2l0X1dp
bi8nOiAnPGEgaHJlZj0iMS8iPicsCi0gICAgICAgIEFSQ0hJVkVfVVJMICsgJy9XZWJraXRfTGlu
dXgvJzogJzxhIGhyZWY9IjEvIj4nLAotICAgIH0KLSAgICByZXR1cm4gdXJsZmV0Y2hlcl9tb2Nr
Lm1ha2VfZmV0Y2hlcl9jbHModXJscykoZmlsZXN5c3RlbSkKLQotCi1kZWYgdGVzdF96aXBfZmFj
dG9yeSgpOgotICAgIHppcGhhc2hlcyA9IHsKLSAgICAgICAgQVJDSElWRV9VUkwgKyAnL1dlYmtp
dF9NYWMxMF81LzIvbGF5b3V0LXRlc3QtcmVzdWx0cy56aXAnOiB7Ci0gICAgICAgICAgICAnbGF5
b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1YWwudHh0JzogJ25l
dy1pbWFnZS10eHQnLAotICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMv
ZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLmNoZWNrc3VtJzogJ25ldy1pbWFnZS1jaGVja3N1bScsCi0g
ICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1h
Y3R1YWwucG5nJzogJ25ldy1pbWFnZS1wbmcnLAotICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJl
c3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2VfY2hlY2tzdW0tYWN0dWFsLnR4dCc6ICdwbmct
Y29tbWVudC10eHQnLAotICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMv
ZXhwZWN0ZWQvaW1hZ2VfY2hlY2tzdW0tYWN0dWFsLmNoZWNrc3VtJzogJzAxMjM0NTY3ODknLAot
ICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2Vf
Y2hlY2tzdW0tYWN0dWFsLnBuZyc6ICd0RVh0Y2hlY2tzdW1ceDAwMDEyMzQ1Njc4OScsCi0gICAg
ICAgIH0sCi0gICAgICAgIEFSQ0hJVkVfVVJMICsgJy9XZWJraXRfTWFjMTBfNi80L2xheW91dC10
ZXN0LXJlc3VsdHMuemlwJzogewotICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFp
bHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnR4dCc6ICduZXctaW1hZ2UtdHh0JywKLSAgICAg
ICAgICAgICdsYXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWFjdHVh
bC5jaGVja3N1bSc6ICduZXctaW1hZ2UtY2hlY2tzdW0nLAotICAgICAgICAgICAgJ2xheW91dC10
ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnBuZyc6ICduZXctaW1h
Z2UtcG5nJywKLSAgICAgICAgfSwKLSAgICAgICAgQVJDSElWRV9VUkwgKyAnL1dlYmtpdF9WaXN0
YS8xL2xheW91dC10ZXN0LXJlc3VsdHMuemlwJzogewotICAgICAgICAgICAgJ2xheW91dC10ZXN0
LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnR4dCc6ICd3aW4taW1hZ2Ut
dHh0JywKLSAgICAgICAgICAgICdsYXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1cmVzL2V4cGVjdGVk
L2ltYWdlLWFjdHVhbC5jaGVja3N1bSc6ICd3aW4taW1hZ2UtY2hlY2tzdW0nLAotICAgICAgICAg
ICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnBu
Zyc6ICd3aW4taW1hZ2UtcG5nJywKLSAgICAgICAgfSwKLSAgICAgICAgQVJDSElWRV9VUkwgKyAn
L1dlYmtpdF9XaW43LzEvbGF5b3V0LXRlc3QtcmVzdWx0cy56aXAnOiB7Ci0gICAgICAgICAgICAn
bGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1YWwudHh0Jzog
J3dpbi1pbWFnZS10eHQnLAotICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVy
ZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLmNoZWNrc3VtJzogJ3dpbi1pbWFnZS1jaGVja3N1bScs
Ci0gICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFn
ZS1hY3R1YWwucG5nJzogJ3dpbi1pbWFnZS1wbmcnLAotICAgICAgICB9LAotICAgICAgICBBUkNI
SVZFX1VSTCArICcvV2Via2l0X1dpbi8xL2xheW91dC10ZXN0LXJlc3VsdHMuemlwJzogewotICAg
ICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0
dWFsLnR4dCc6ICd3aW4taW1hZ2UtdHh0JywKLSAgICAgICAgICAgICdsYXlvdXQtdGVzdC1yZXN1
bHRzL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWFjdHVhbC5jaGVja3N1bSc6ICd3aW4taW1hZ2Ut
Y2hlY2tzdW0nLAotICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhw
ZWN0ZWQvaW1hZ2UtYWN0dWFsLnBuZyc6ICd3aW4taW1hZ2UtcG5nJywKLSAgICAgICAgfSwKLSAg
ICAgICAgQVJDSElWRV9VUkwgKyAnL1dlYmtpdF9MaW51eC8xL2xheW91dC10ZXN0LXJlc3VsdHMu
emlwJzogewotICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0
ZWQvaW1hZ2UtYWN0dWFsLnR4dCc6ICd3aW4taW1hZ2UtdHh0JywKLSAgICAgICAgICAgICdsYXlv
dXQtdGVzdC1yZXN1bHRzL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWFjdHVhbC5jaGVja3N1bSc6
ICd3aW4taW1hZ2UtY2hlY2tzdW0nLAotICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMv
ZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnBuZyc6ICd3aW4taW1hZ2UtcG5nJywKLSAg
ICAgICAgfSwKLSAgICB9Ci0gICAgcmV0dXJuIHppcGZpbGVzZXRfbW9jay5tYWtlX2ZhY3Rvcnko
emlwaGFzaGVzKQotCi0KLWRlZiB0ZXN0X2FyY2hpdmUob3JpZ19hcmNoaXZlX2RpY3QpOgotICAg
IG5ld19hcmNoaXZlX2RpY3QgPSB7fQotICAgIGZvciBwbGF0Zm9ybSwgZGlybmFtZSBpbiBvcmln
X2FyY2hpdmVfZGljdC5pdGVyaXRlbXMoKToKLSAgICAgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5y
ZXBsYWNlKCdjaHJvbWl1bScsICd0ZXN0JykKLSAgICAgICAgbmV3X2FyY2hpdmVfZGljdFtwbGF0
Zm9ybV0gPSBkaXJuYW1lCi0gICAgcmV0dXJuIG5ld19hcmNoaXZlX2RpY3QKLQotCi1jbGFzcyBU
ZXN0R2V0SG9zdFBvcnRPYmplY3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBhc3NlcnRf
cmVzdWx0KHNlbGYsIHJlbGVhc2VfcHJlc2VudCwgZGVidWdfcHJlc2VudCwgdmFsaWRfcG9ydF9v
YmopOgotICAgICAgICAjIFRlc3RzIHdoZXRoZXIgd2UgZ2V0IGEgdmFsaWQgcG9ydCBvYmplY3Qg
cmV0dXJuZWQgd2hlbiB3ZSBjbGFpbQotICAgICAgICAjIHRoYXQgSW1hZ2UgZGlmZiBpcyAob3Ig
aXNuJ3QpIHByZXNlbnQgaW4gdGhlIHR3byBjb25maWdzLgotICAgICAgICBwb3J0LmdldCA9IGdl
dF9tb2NrX2dldCh7J1JlbGVhc2UnOiByZWxlYXNlX3ByZXNlbnQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnRGVidWcnOiBkZWJ1Z19wcmVzZW50fSkKLSAgICAgICAgb3B0aW9u
cyA9IG1vY2t0b29sLk1vY2tPcHRpb25zKGNvbmZpZ3VyYXRpb249Tm9uZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxfZGlyZWN0b3J5PScvdG1wJykKLSAgICAg
ICAgcG9ydF9vYmogPSByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5nZXRfaG9zdF9w
b3J0X29iamVjdChvcHRpb25zKQotICAgICAgICBpZiB2YWxpZF9wb3J0X29iajoKLSAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocG9ydF9vYmosIE5vbmUpCi0gICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnRfb2JqLCBOb25lKQotCi0gICAgZGVmIHRl
c3RfZ2V0X2hvc3RfcG9ydF9vYmplY3Qoc2VsZik6Ci0gICAgICAgICMgU2F2ZSB0aGUgbm9ybWFs
IHBvcnQuZ2V0KCkgZnVuY3Rpb24gZm9yIGZ1dHVyZSB0ZXN0aW5nLgotICAgICAgICBvbGRfZ2V0
ID0gcG9ydC5nZXQKLQotICAgICAgICAjIFRlc3Qgd2hldGhlciB3ZSBnZXQgYSB2YWxpZCBwb3J0
IG9iamVjdCBiYWNrIGZvciB0aGUgZm91cgotICAgICAgICAjIHBvc3NpYmxlIGNhc2VzIG9mIGhh
dmluZyBJbWFnZURpZmZzIGJ1aWx0LiBJdCBzaG91bGQgd29yayB3aGVuCi0gICAgICAgICMgdGhl
cmUgaXMgYXQgbGVhc3Qgb25lIGJpbmFyeSBwcmVzZW50LgotICAgICAgICBzZWxmLmFzc2VydF9y
ZXN1bHQoRmFsc2UsIEZhbHNlLCBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfcmVzdWx0KFRy
dWUsIEZhbHNlLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydF9yZXN1bHQoRmFsc2UsIFRydWUs
IFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0X3Jlc3VsdChUcnVlLCBUcnVlLCBUcnVlKQotCi0g
ICAgICAgICMgUmVzdG9yZSB0aGUgbm9ybWFsIHBvcnQuZ2V0KCkgZnVuY3Rpb24uCi0gICAgICAg
IHBvcnQuZ2V0ID0gb2xkX2dldAotCi0KLWNsYXNzIFRlc3RPcHRpb25zKHVuaXR0ZXN0LlRlc3RD
YXNlKToKLSAgICBkZWYgdGVzdF9wYXJzZV9vcHRpb25zKHNlbGYpOgotICAgICAgICAob3B0aW9u
cywgdGFyZ2V0X29wdGlvbnMpID0gcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucGFy
c2Vfb3B0aW9ucyhbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhcmdldF9vcHRpb25zLmNo
cm9taXVtKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdGlvbnMudG9sZXJhbmNlLCAwKQot
Ci0gICAgICAgIChvcHRpb25zLCB0YXJnZXRfb3B0aW9ucykgPSByZWJhc2VsaW5lX2Nocm9taXVt
X3dlYmtpdF90ZXN0cy5wYXJzZV9vcHRpb25zKFsnLS10YXJnZXQtcGxhdGZvcm0nLCAncXQnXSkK
LSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHRhcmdldF9vcHRpb25zLCAnY2hyb21p
dW0nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRpb25zLnRvbGVyYW5jZSwgMCkKLQot
Ci1jbGFzcyBUZXN0UmViYXNlbGluZXIodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBzZXRV
cChzZWxmKToKLSAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ19vcmlnX2FyY2hpdmUnKToK
LSAgICAgICAgICAgIHNlbGYuX29yaWdfYXJjaGl2ZSA9IHJlYmFzZWxpbmVfY2hyb21pdW1fd2Vi
a2l0X3Rlc3RzLkFSQ0hJVkVfRElSX05BTUVfRElDVAotICAgICAgICAgICAgcmViYXNlbGluZV9j
aHJvbWl1bV93ZWJraXRfdGVzdHMuQVJDSElWRV9ESVJfTkFNRV9ESUNUID0gdGVzdF9hcmNoaXZl
KHNlbGYuX29yaWdfYXJjaGl2ZSkKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAg
cmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMuQVJDSElWRV9ESVJfTkFNRV9ESUNUID0g
c2VsZi5fb3JpZ19hcmNoaXZlCi0KLSAgICBkZWYgbWFrZV9yZWJhc2VsaW5lcihzZWxmLCBleHBl
Y3RhdGlvbnMpOgotICAgICAgICBvcHRpb25zID0gdGVzdF9vcHRpb25zKCkKLSAgICAgICAgaG9z
dF9wb3J0X29iaiwgZmlsZXN5c3RlbSA9IHRlc3RfaG9zdF9wb3J0X2FuZF9maWxlc3lzdGVtKG9w
dGlvbnMsIGV4cGVjdGF0aW9ucykKLQotICAgICAgICB0YXJnZXRfb3B0aW9ucyA9IG9wdGlvbnMK
LSAgICAgICAgdGFyZ2V0X3BvcnRfb2JqID0gcG9ydC5nZXQoJ3Rlc3QnLCB0YXJnZXRfb3B0aW9u
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbT1maWxlc3lz
dGVtKQotICAgICAgICB0YXJnZXRfcG9ydF9vYmouX2V4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9u
cwotICAgICAgICBwbGF0Zm9ybSA9IHRhcmdldF9wb3J0X29iai5uYW1lKCkKLQotICAgICAgICB1
cmxfZmV0Y2hlciA9IHRlc3RfdXJsX2ZldGNoZXIoZmlsZXN5c3RlbSkKLSAgICAgICAgemlwX2Zh
Y3RvcnkgPSB0ZXN0X3ppcF9mYWN0b3J5KCkKLSAgICAgICAgbW9ja19zY20gPSBtb2NrdG9vbC5N
b2NrU0NNKGZpbGVzeXN0ZW0pCi0gICAgICAgIGZpbGVzeXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3Rv
cnkobW9ja19zY20uY2hlY2tvdXRfcm9vdCkKLQotICAgICAgICAjIEZJWE1FOiBTQ00gbW9kdWxl
IGRvZXNuJ3QgaGFuZGxlIHBhdGhzIHRoYXQgYXJlbid0IHJlbGF0aXZlIHRvIHRoZSBjaGVja291
dF9yb290IGNvbnNpc3RlbnRseS4KLSAgICAgICAgZmlsZXN5c3RlbS5jaGRpcigiL3Rlc3QuY2hl
Y2tvdXQiKQotCi0gICAgICAgIHJlYmFzZWxpbmVyID0gcmViYXNlbGluZV9jaHJvbWl1bV93ZWJr
aXRfdGVzdHMuUmViYXNlbGluZXIoaG9zdF9wb3J0X29iaiwKLSAgICAgICAgICAgIHRhcmdldF9w
b3J0X29iaiwgcGxhdGZvcm0sIG9wdGlvbnMsIHVybF9mZXRjaGVyLCB6aXBfZmFjdG9yeSwgbW9j
a19zY20pCi0gICAgICAgIHJldHVybiByZWJhc2VsaW5lciwgZmlsZXN5c3RlbQotCi0gICAgZGVm
IHRlc3Rfbm9vcChzZWxmKToKLSAgICAgICAgIyB0aGlzIG1ldGhvZCB0ZXN0cyB0aGF0IHdhcyBj
YW4gYXQgbGVhc3QgaW5zdGFudGlhdGUgYW4gb2JqZWN0LCBldmVuCi0gICAgICAgICMgaWYgdGhl
cmUgaXMgbm90aGluZyB0byBkby4KLSAgICAgICAgcmViYXNlbGluZXIsIGZpbGVzeXN0ZW0gPSBz
ZWxmLm1ha2VfcmViYXNlbGluZXIoIiIpCi0gICAgICAgIHJlYmFzZWxpbmVyLnJ1bigpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZpbGVzeXN0ZW0ud3JpdHRlbl9maWxlcyksIDEpCi0K
LSAgICBkZWYgdGVzdF9yZWJhc2VsaW5pbmdfdGVzdHMoc2VsZik6Ci0gICAgICAgIHJlYmFzZWxp
bmVyLCBmaWxlc3lzdGVtID0gc2VsZi5tYWtlX3JlYmFzZWxpbmVyKAotICAgICAgICAgICAgIkJV
R1ggUkVCQVNFTElORSBNQUMgOiBmYWlsdXJlcy9leHBlY3RlZC9pbWFnZS5odG1sID0gSU1BR0Ui
KQotICAgICAgICBjb21waWxlX3N1Y2Nlc3MgPSByZWJhc2VsaW5lci5fY29tcGlsZV9yZWJhc2Vs
aW5pbmdfdGVzdHMoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoY29tcGlsZV9zdWNjZXNzKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChbJ2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLmh0
bWwnXSksIHJlYmFzZWxpbmVyLl9yZWJhc2VsaW5pbmdfdGVzdHMpCi0KLSAgICBkZWYgdGVzdF9y
ZWJhc2VsaW5pbmdfdGVzdHNfc2hvdWxkX2lnbm9yZV9yZWZ0ZXN0cyhzZWxmKToKLSAgICAgICAg
cmViYXNlbGluZXIsIGZpbGVzeXN0ZW0gPSBzZWxmLm1ha2VfcmViYXNlbGluZXIoCi0gICAgICAg
ICAgICAiQlVHWCBSRUJBU0VMSU5FIDogZmFpbHVyZXMvZXhwZWN0ZWQvcmVmdGVzdC5odG1sID0g
SU1BR0UiKQotICAgICAgICBjb21waWxlX3N1Y2Nlc3MgPSByZWJhc2VsaW5lci5fY29tcGlsZV9y
ZWJhc2VsaW5pbmdfdGVzdHMoKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNvbXBpbGVfc3Vj
Y2VzcykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZWJhc2VsaW5lci5fcmViYXNlbGluaW5n
X3Rlc3RzKQotCi0gICAgZGVmIHRlc3Rfb25lX3BsYXRmb3JtKHNlbGYpOgotICAgICAgICByZWJh
c2VsaW5lciwgZmlsZXN5c3RlbSA9IHNlbGYubWFrZV9yZWJhc2VsaW5lcigKLSAgICAgICAgICAg
ICJCVUdYIFJFQkFTRUxJTkUgTUFDIDogZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UuaHRtbCA9IElN
QUdFIikKLQotICAgICAgICByZWJhc2VsaW5lci5ydW4oKQotICAgICAgICAjIFdlIGV4cGVjdCB0
byBoYXZlIHdyaXR0ZW4gMTMgZmlsZXMgb3ZlciB0aGUgY291cnNlIG9mIHRoaXMgcmViYXNlbGlu
ZToKLSAgICAgICAgIyAqKSAzIGZpbGVzIGluIC9fX2ltX3RtcCBmb3IgdGhlIGV4dHJhY3RlZCBh
cmNoaXZlIG1lbWJlcnMKLSAgICAgICAgIyAqKSAzIG5ldyBiYXNlbGluZXMgdW5kZXIgJy90ZXN0
LmNoZWNrb3V0L0xheW91dFRlc3RzJwotICAgICAgICAjICopIDQgZmlsZXMgaW4gL3RtcCBmb3Ig
dGhlIG5ldyBhbmQgb2xkIGJhc2VsaW5lcyBpbiB0aGUgcmVzdWx0IGZpbGUKLSAgICAgICAgIyAg
ICAoLXtvbGQsbmV3fS57dHh0LHBuZ30KLSAgICAgICAgIyAqKSAxIHRleHQgZGlmZiBpbiAvdG1w
IGZvciB0aGUgcmVzdWx0IGZpbGUgKC1kaWZmLnR4dCkuCi0gICAgICAgICMgKikgMSBpbWFnZSBk
aWZmIGluIC90bXAgZm9yIHRoZSByZXN1bHQgZmlsZSAoLWRpZmYucG5nKS4KLSAgICAgICAgIyAq
KSAxIHVwZGF0ZWQgdGVzdF9leHBlY3RhdGlvbnMgZmlsZQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGxlbihmaWxlc3lzdGVtLndyaXR0ZW5fZmlsZXMpLCAxMykKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWV4cGVjdGVkLmNo
ZWNrc3VtJ10sICduZXctaW1hZ2UtY2hlY2tzdW0nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGZpbGVzeXN0ZW0uZmlsZXNbJy90ZXN0LmNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rl
c3QtbWFjLWxlb3BhcmQvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtZXhwZWN0ZWQucG5nJ10sICdu
ZXctaW1hZ2UtcG5nJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVz
WycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2Zh
aWx1cmVzL2V4cGVjdGVkL2ltYWdlLWV4cGVjdGVkLnR4dCddLCAnbmV3LWltYWdlLXR4dCcpCi0K
LSAgICBkZWYgdGVzdF9hbGxfcGxhdGZvcm1zKHNlbGYpOgotICAgICAgICByZWJhc2VsaW5lciwg
ZmlsZXN5c3RlbSA9IHNlbGYubWFrZV9yZWJhc2VsaW5lcigKLSAgICAgICAgICAgICJCVUdYIFJF
QkFTRUxJTkUgOiBmYWlsdXJlcy9leHBlY3RlZC9pbWFnZS5odG1sID0gSU1BR0UiKQotICAgICAg
ICByZWJhc2VsaW5lci5ydW4oKQotICAgICAgICAjIFNlZSBjb21tZW50IGluIHRlc3Rfb25lX3Bs
YXRmb3JtIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgMTMgd3JpdHRlbiB0ZXN0cy4KLSAgICAg
ICAgIyBOb3RlIHRoYXQgZXZlbiB0aG91Z2ggdGhlIHJlYmFzZWxpbmUgaXMgbWFya2VkIGZvciBh
bGwgcGxhdGZvcm1zLCBlYWNoCi0gICAgICAgICMgcmViYXNlbGluZXIgb25seSBldmVyIGRvZXMg
b25lLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmaWxlc3lzdGVtLndyaXR0ZW5fZmls
ZXMpLCAxMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVz
dC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVz
L2V4cGVjdGVkL2ltYWdlLWV4cGVjdGVkLmNoZWNrc3VtJ10sICduZXctaW1hZ2UtY2hlY2tzdW0n
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzeXN0ZW0uZmlsZXNbJy90ZXN0LmNoZWNr
b3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3QtbWFjLWxlb3BhcmQvZmFpbHVyZXMvZXhwZWN0
ZWQvaW1hZ2UtZXhwZWN0ZWQucG5nJ10sICduZXctaW1hZ2UtcG5nJykKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWV4cGVjdGVk
LnR4dCddLCAnbmV3LWltYWdlLXR4dCcpCi0KLSAgICBkZWYgdGVzdF9wbmdfZmlsZV93aXRoX2Nv
bW1lbnQoc2VsZik6Ci0gICAgICAgIHJlYmFzZWxpbmVyLCBmaWxlc3lzdGVtID0gc2VsZi5tYWtl
X3JlYmFzZWxpbmVyKAotICAgICAgICAgICAgIkJVR1ggUkVCQVNFTElORSBNQUMgOiBmYWlsdXJl
cy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS5odG1sID0gSU1BR0UiKQotICAgICAgICBjb21waWxl
X3N1Y2Nlc3MgPSByZWJhc2VsaW5lci5fY29tcGlsZV9yZWJhc2VsaW5pbmdfdGVzdHMoKQotICAg
ICAgICBzZWxmLmFzc2VydFRydWUoY29tcGlsZV9zdWNjZXNzKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNldChbJ2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLmh0bWwnXSksIHJl
YmFzZWxpbmVyLl9yZWJhc2VsaW5pbmdfdGVzdHMpCi0gICAgICAgIHJlYmFzZWxpbmVyLnJ1bigp
Ci0gICAgICAgICMgVGhlcmUgaXMgb25lIGxlc3MgZmlsZSB3cml0dGVuIHRoYW4gfHRlc3Rfb25l
X3BsYXRmb3JtfCBiZWNhdXNlIHdlIG9ubHkKLSAgICAgICAgIyB3cml0ZSAyIGV4cGVjdGF0aW9u
cyAodGhlIHBuZyBhbmQgdGhlIHR4dCBmaWxlKS4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChs
ZW4oZmlsZXN5c3RlbS53cml0dGVuX2ZpbGVzKSwgMTIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoZmlsZXN5c3RlbS5maWxlc1snL3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
dGVzdC1tYWMtbGVvcGFyZC9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBlY3Rl
ZC5wbmcnXSwgJ3RFWHRjaGVja3N1bVx4MDAwMTIzNDU2Nzg5JykKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLWV4
cGVjdGVkLnR4dCddLCAncG5nLWNvbW1lbnQtdHh0JykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZShmaWxlc3lzdGVtLmZpbGVzLmdldCgnL3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vdGVzdC1tYWMtbGVvcGFyZC9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBl
Y3RlZC5jaGVja3N1bScsIE5vbmUpKQotCi0gICAgZGVmIHRlc3RfcG5nX2ZpbGVfd2l0aF9jb21t
ZW50X3JlbW92ZV9vbGRfY2hlY2tzdW0oc2VsZik6Ci0gICAgICAgIHJlYmFzZWxpbmVyLCBmaWxl
c3lzdGVtID0gc2VsZi5tYWtlX3JlYmFzZWxpbmVyKAotICAgICAgICAgICAgIkJVR1ggUkVCQVNF
TElORSBNQUMgOiBmYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS5odG1sID0gSU1BR0Ui
KQotICAgICAgICBmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3Vt
LWV4cGVjdGVkLnBuZyddID0gJ29sZCcKLSAgICAgICAgZmlsZXN5c3RlbS5maWxlc1snL3Rlc3Qu
Y2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vdGVzdC1tYWMtbGVvcGFyZC9mYWlsdXJlcy9l
eHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBlY3RlZC5jaGVja3N1bSddID0gJ29sZCcKLSAgICAg
ICAgZmlsZXN5c3RlbS5maWxlc1snL3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
dGVzdC1tYWMtbGVvcGFyZC9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBlY3Rl
ZC50eHQnXSA9ICdvbGQnCi0KLSAgICAgICAgY29tcGlsZV9zdWNjZXNzID0gcmViYXNlbGluZXIu
X2NvbXBpbGVfcmViYXNlbGluaW5nX3Rlc3RzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNv
bXBpbGVfc3VjY2VzcykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoWydmYWlsdXJlcy9l
eHBlY3RlZC9pbWFnZV9jaGVja3N1bS5odG1sJ10pLCByZWJhc2VsaW5lci5fcmViYXNlbGluaW5n
X3Rlc3RzKQotICAgICAgICByZWJhc2VsaW5lci5ydW4oKQotICAgICAgICAjIFRoZXJlIGlzIG9u
ZSBtb3JlIGZpbGUgd3JpdHRlbiB0aGFuIHx0ZXN0X3BuZ19maWxlX3dpdGhfY29tbWVudF9yZW1v
dmVfb2xkX2NoZWNrc3VtfAotICAgICAgICAjIGJlY2F1c2Ugd2UgYWxzbyBkZWxldGUgdGhlIG9s
ZCBjaGVja3N1bS4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZmlsZXN5c3RlbS53cml0
dGVuX2ZpbGVzKSwgMTMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXN5c3RlbS5maWxl
c1snL3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vdGVzdC1tYWMtbGVvcGFyZC9m
YWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBlY3RlZC5wbmcnXSwgJ3RFWHRjaGVj
a3N1bVx4MDAwMTIzNDU2Nzg5JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVt
LmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9w
YXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLWV4cGVjdGVkLnR4dCddLCAncG5n
LWNvbW1lbnQtdHh0JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVz
LmdldCgnL3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vdGVzdC1tYWMtbGVvcGFy
ZC9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBlY3RlZC5jaGVja3N1bScsIE5v
bmUpLCBOb25lKQotCi0gICAgZGVmIHRlc3RfcG5nX2ZpbGVfd2l0aF9jb21tZW50X2FzX2R1cGxp
Y2F0ZShzZWxmKToKLSAgICAgICAgcmViYXNlbGluZXIsIGZpbGVzeXN0ZW0gPSBzZWxmLm1ha2Vf
cmViYXNlbGluZXIoCi0gICAgICAgICAgICAiQlVHWCBSRUJBU0VMSU5FIE1BQyA6IGZhaWx1cmVz
L2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLmh0bWwgPSBJTUFHRSIpCi0gICAgICAgIGZpbGVzeXN0
ZW0uZmlsZXNbJy90ZXN0LmNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3QtbWFjLXNu
b3dsZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLWV4cGVjdGVkLnBuZydd
ID0gJ3RFWHRjaGVja3N1bVx4MDAwMTIzNDU2Nzg5JwotICAgICAgICBmaWxlc3lzdGVtLmZpbGVz
WycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy1zbm93bGVvcGFy
ZC9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBlY3RlZC50eHQnXSA9ICdwbmct
Y29tbWVudC10eHQnCi0KLSAgICAgICAgY29tcGlsZV9zdWNjZXNzID0gcmViYXNlbGluZXIuX2Nv
bXBpbGVfcmViYXNlbGluaW5nX3Rlc3RzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbXBp
bGVfc3VjY2VzcykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoWydmYWlsdXJlcy9leHBl
Y3RlZC9pbWFnZV9jaGVja3N1bS5odG1sJ10pLCByZWJhc2VsaW5lci5fcmViYXNlbGluaW5nX3Rl
c3RzKQotICAgICAgICByZWJhc2VsaW5lci5ydW4oKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGZpbGVzeXN0ZW0uZmlsZXMuZ2V0KCcvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLWV4cGVj
dGVkLnBuZycsIE5vbmUpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzeXN0
ZW0uZmlsZXMuZ2V0KCcvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1h
Yy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLWV4cGVjdGVkLnR4dCcs
IE5vbmUpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzeXN0ZW0uZmlsZXMu
Z2V0KCcvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJk
L2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLWV4cGVjdGVkLmNoZWNrc3VtJywgTm9u
ZSksIE5vbmUpCi0KLSAgICBkZWYgdGVzdF9kaWZmX2Jhc2VsaW5lc190eHQoc2VsZik6Ci0gICAg
ICAgIHJlYmFzZWxpbmVyLCBmaWxlc3lzdGVtID0gc2VsZi5tYWtlX3JlYmFzZWxpbmVyKCIiKQot
ICAgICAgICBwb3J0ID0gcmViYXNlbGluZXIuX3BvcnQKLSAgICAgICAgb3V0cHV0ID0gcG9ydC5l
eHBlY3RlZF90ZXh0KAotICAgICAgICAgICAgcG9ydC5fZmlsZXN5c3RlbS5qb2luKHBvcnQubGF5
b3V0X3Rlc3RzX2RpcigpLCAncGFzc2VzL3RleHQuaHRtbCcpKQotICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKHJlYmFzZWxpbmVyLl9kaWZmX2Jhc2VsaW5lcyhvdXRwdXQsIG91dHB1dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfaW1hZ2U9
RmFsc2UpKQotCi0gICAgZGVmIHRlc3RfZGlmZl9iYXNlbGluZXNfcG5nKHNlbGYpOgotICAgICAg
ICByZWJhc2VsaW5lciwgZmlsZXN5c3RlbSA9IHNlbGYubWFrZV9yZWJhc2VsaW5lcignJykKLSAg
ICAgICAgcG9ydCA9IHJlYmFzZWxpbmVyLl9wb3J0Ci0gICAgICAgIGltYWdlID0gcG9ydC5leHBl
Y3RlZF9pbWFnZSgKLSAgICAgICAgICAgIHBvcnQuX2ZpbGVzeXN0ZW0uam9pbihwb3J0LmxheW91
dF90ZXN0c19kaXIoKSwgJ3Bhc3Nlcy9pbWFnZS5odG1sJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2UocmViYXNlbGluZXIuX2RpZmZfYmFzZWxpbmVzKGltYWdlLCBpbWFnZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfaW1hZ2U9VHJ1
ZSkpCi0KLQotY2xhc3MgVGVzdFJlYWxNYWluKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYg
c2V0VXAoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdfb3JpZ19hcmNoaXZl
Jyk6Ci0gICAgICAgICAgICBzZWxmLl9vcmlnX2FyY2hpdmUgPSByZWJhc2VsaW5lX2Nocm9taXVt
X3dlYmtpdF90ZXN0cy5BUkNISVZFX0RJUl9OQU1FX0RJQ1QKLSAgICAgICAgICAgIHJlYmFzZWxp
bmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLkFSQ0hJVkVfRElSX05BTUVfRElDVCA9IHRlc3RfYXJj
aGl2ZShzZWxmLl9vcmlnX2FyY2hpdmUpCi0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAg
ICAgIHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLkFSQ0hJVkVfRElSX05BTUVfRElD
VCA9IHNlbGYuX29yaWdfYXJjaGl2ZQotCi0gICAgZGVmIHRlc3RfYWxsX3BsYXRmb3JtcyhzZWxm
KToKLSAgICAgICAgZXhwZWN0YXRpb25zID0gIkJVR1ggUkVCQVNFTElORSA6IGZhaWx1cmVzL2V4
cGVjdGVkL2ltYWdlLmh0bWwgPSBJTUFHRSIKLQotICAgICAgICBvcHRpb25zID0gdGVzdF9vcHRp
b25zKCkKLSAgICAgICAgaG9zdF9wb3J0X29iaiwgZmlsZXN5c3RlbSA9IHRlc3RfaG9zdF9wb3J0
X2FuZF9maWxlc3lzdGVtKG9wdGlvbnMsIGV4cGVjdGF0aW9ucykKLSAgICAgICAgdXJsX2ZldGNo
ZXIgPSB0ZXN0X3VybF9mZXRjaGVyKGZpbGVzeXN0ZW0pCi0gICAgICAgIHppcF9mYWN0b3J5ID0g
dGVzdF96aXBfZmFjdG9yeSgpCi0gICAgICAgIG1vY2tfc2NtID0gbW9ja3Rvb2wuTW9ja1NDTSgp
Ci0gICAgICAgIGZpbGVzeXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3RvcnkobW9ja19zY20uY2hlY2tv
dXRfcm9vdCkKLQotICAgICAgICAjIEZJWE1FOiBTQ00gbW9kdWxlIGRvZXNuJ3QgaGFuZGxlIHBh
dGhzIHRoYXQgYXJlbid0IHJlbGF0aXZlIHRvIHRoZSBjaGVja291dF9yb290IGNvbnNpc3RlbnRs
eS4KLSAgICAgICAgZmlsZXN5c3RlbS5jaGRpcigiL3Rlc3QuY2hlY2tvdXQiKQotCi0gICAgICAg
IG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKLSAgICAgICAgb2MuY2FwdHVyZV9v
dXRwdXQoKQotICAgICAgICByZXMgPSByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5y
ZWFsX21haW4ob3B0aW9ucywgb3B0aW9ucywKLSAgICAgICAgICAgIGhvc3RfcG9ydF9vYmosIGhv
c3RfcG9ydF9vYmosIHVybF9mZXRjaGVyLCB6aXBfZmFjdG9yeSwgbW9ja19zY20pCi0gICAgICAg
IG9jLnJlc3RvcmVfb3V0cHV0KCkKLQotICAgICAgICAjIFdlIGV4cGVjdCB0byBoYXZlIHdyaXR0
ZW4gMzggZmlsZXMgb3ZlciB0aGUgY291cnNlIG9mIHRoaXMgcmViYXNlbGluZToKLSAgICAgICAg
IyAqKSA2KjMgZmlsZXMgaW4gL19faW1fdG1wLyBmb3IgdGhlIGFyY2hpdmVkIG1lbWJlcnMgb2Yg
dGhlIDYgcG9ydHMKLSAgICAgICAgIyAqKSAyKjMgZmlsZXMgaW4gL3Rlc3QuY2hlY2tvdXQgZm9y
IGFjdHVhbGx5IGRpZmZlcmluZyBiYXNlbGluZXMKLSAgICAgICAgIyAqKSAxIGZpbGUgaW4gL3Rl
c3QuY2hlY2tvdXQgZm9yIHRoZSB1cGRhdGVkIHRlc3RfZXhwZWN0YXRpb25zIGZpbGUKLSAgICAg
ICAgIyAqKSAyKjQgZmlsZXMgaW4gL3RtcCBmb3IgdGhlIG9sZC9uZXcgYmFzZWxpbmVzIGZvciB0
aGUgdHdvIGFjdHVhbCBwb3J0cwotICAgICAgICAjICopIDIgZmlsZXMgaW4gL3RtcCBmb3IgdGhl
IHRleHQgZGlmZnMgZm9yIHRoZSB0d28gcG9ydHMKLSAgICAgICAgIyAqKSAyIGZpbGVzIGluIC90
bXAgZm9yIHRoZSBpbWFnZSBkaWZmcyBmb3IgdGhlIHR3byBwb3J0cwotICAgICAgICAjICopIDEg
ZmlsZSBpbiAvdG1wIGZvciB0aGUgcmViYXNlbGluZSByZXN1bHRzIGh0bWwgZmlsZQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHJlcywgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4o
ZmlsZXN5c3RlbS53cml0dGVuX2ZpbGVzKSwgMzgpCi0KLQotY2xhc3MgVGVzdEh0bWxHZW5lcmF0
b3IodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBtYWtlX2dlbmVyYXRvcihzZWxmLCBmaWxl
cywgdGVzdHMpOgotICAgICAgICBvcHRpb25zID0gbW9ja3Rvb2wuTW9ja09wdGlvbnMoY29uZmln
dXJhdGlvbj1Ob25lLCBodG1sX2RpcmVjdG9yeT0nL3RtcCcpCi0gICAgICAgIGhvc3RfcG9ydCA9
IHBvcnQuZ2V0KCd0ZXN0Jywgb3B0aW9ucywgZmlsZXN5c3RlbT1wb3J0LnVuaXRfdGVzdF9maWxl
c3lzdGVtKGZpbGVzKSkKLSAgICAgICAgZ2VuZXJhdG9yID0gcmViYXNlbGluZV9jaHJvbWl1bV93
ZWJraXRfdGVzdHMuSHRtbEdlbmVyYXRvcihob3N0X3BvcnQsCi0gICAgICAgICAgICB0YXJnZXRf
cG9ydD1Ob25lLCBvcHRpb25zPW9wdGlvbnMsIHBsYXRmb3Jtcz1bJ3Rlc3QtbWFjLWxlb3BhcmQn
XSwgcmViYXNlbGluaW5nX3Rlc3RzPXRlc3RzKQotICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLCBo
b3N0X3BvcnQKLQotICAgIGRlZiB0ZXN0X2dlbmVyYXRlX2Jhc2VsaW5lX2xpbmtzKHNlbGYpOgot
ICAgICAgICBmaWxlcyA9IHsKLSAgICAgICAgICAgICIvdG1wL2Zvby1leHBlY3RlZC1tYWMtb2xk
LnR4dCI6ICIiLAotICAgICAgICAgICAgIi90bXAvZm9vLWV4cGVjdGVkLW1hYy1uZXcudHh0Ijog
IiIsCi0gICAgICAgICAgICAiL3RtcC9mb28tZXhwZWN0ZWQtbWFjLWRpZmYudHh0IjogIiIsCi0g
ICAgICAgIH0KLSAgICAgICAgdGVzdHMgPSBbImZvby50eHQiXQotICAgICAgICBnZW5lcmF0b3Is
IGhvc3RfcG9ydCA9IHNlbGYubWFrZV9nZW5lcmF0b3IoZmlsZXMsIHRlc3RzKQotICAgICAgICBs
aW5rcyA9IGdlbmVyYXRvci5fZ2VuZXJhdGVfYmFzZWxpbmVfbGlua3MoImZvbyIsICIudHh0Iiwg
Im1hYyIpCi0gICAgICAgIGV4cGVjdGVkX2xpbmtzID0gJzx0ZCBhbGlnbj1jZW50ZXI+PGEgaHJl
Zj0iZmlsZTovLy90bXAvZm9vLWV4cGVjdGVkLW1hYy1vbGQudHh0Ij5mb28tZXhwZWN0ZWQudHh0
PC9hPjwvdGQ+PHRkIGFsaWduPWNlbnRlcj48YSBocmVmPSJmaWxlOi8vL3RtcC9mb28tZXhwZWN0
ZWQtbWFjLW5ldy50eHQiPmZvby1leHBlY3RlZC50eHQ8L2E+PC90ZD48dGQgYWxpZ249Y2VudGVy
PjxhIGhyZWY9ImZpbGU6Ly8vdG1wL2Zvby1leHBlY3RlZC1tYWMtZGlmZi50eHQiPkRpZmY8L2E+
PC90ZD4nCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlua3MsIGV4cGVjdGVkX2xpbmtzKQot
Ci0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdW5pdHRlc3QubWFpbigpCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RvX2JlX21vdmVkL3JlYmFzZWxpbmVfY2hyb21pdW1f
d2Via2l0X3Rlc3RzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9f
YmVfbW92ZWQvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkJKHJldmlzaW9uIDg5
Nzg1KQkoZnJvbSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWJhc2VsaW5l
X2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weTo4OTc4NSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdG9fYmVfbW92ZWQvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMDUwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisiIiJSZWJhc2VsaW5pbmcgdG9vbCB0aGF0IGF1dG9tYXRpY2FsbHkgcHJv
ZHVjZXMgYmFzZWxpbmVzIGZvciBhbGwgcGxhdGZvcm1zLgorCitUaGUgc2NyaXB0IGRvZXMgdGhl
IGZvbGxvd2luZyBmb3IgZWFjaCBwbGF0Zm9ybSBzcGVjaWZpZWQ6CisgIDEuIENvbXBpbGUgYSBs
aXN0IG9mIHRlc3RzIHRoYXQgbmVlZCByZWJhc2VsaW5pbmcuCisgIDIuIERvd25sb2FkIHRlc3Qg
cmVzdWx0IGFyY2hpdmUgZnJvbSBidWlsZGJvdCBmb3IgdGhlIHBsYXRmb3JtLgorICAzLiBFeHRy
YWN0IGJhc2VsaW5lcyBmcm9tIHRoZSBhcmNoaXZlIGZpbGUgZm9yIGFsbCBpZGVudGlmaWVkIGZp
bGVzLgorICA0LiBBZGQgbmV3IGJhc2VsaW5lcyB0byBTVk4gcmVwb3NpdG9yeS4KKyAgNS4gRm9y
IGVhY2ggdGVzdCB0aGF0IGhhcyBiZWVuIHJlYmFzZWxpbmVkLCByZW1vdmUgdGhpcyBwbGF0Zm9y
bSBvcHRpb24gZnJvbQorICAgICB0aGUgdGVzdCBpbiB0ZXN0X2V4cGVjdGF0aW9uLnR4dC4gSWYg
bm8gb3RoZXIgcGxhdGZvcm1zIHJlbWFpbiBhZnRlcgorICAgICByZW1vdmFsLCBkZWxldGUgdGhl
IHJlYmFzZWxpbmVkIHRlc3QgZnJvbSB0aGUgZmlsZS4KKworQXQgdGhlIGVuZCwgdGhlIHNjcmlw
dCBnZW5lcmF0ZXMgYSBodG1sIHRoYXQgY29tcGFyZXMgb2xkIGFuZCBuZXcgYmFzZWxpbmVzLgor
IiIiCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKKworaW1wb3J0IGNv
cHkKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCByZQoraW1wb3J0IHN5
cworaW1wb3J0IHRpbWUKKworZnJvbSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQgaW1wb3J0IHNj
bQorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCB6aXBmaWxlc2V0Citmcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHBhdGgKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbSBpbXBvcnQgdXJsZmV0Y2hlcgorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1
dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1w
b3J0IHBvcnQKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCByZWFkX2NoZWNrc3Vt
X2Zyb21fcG5nCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBv
cnQgdGVzdF9leHBlY3RhdGlvbnMKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9f
KQorCitCQVNFTElORV9TVUZGSVhFUyA9ICgnLnR4dCcsICcucG5nJywgJy5jaGVja3N1bScpCisK
K0FSQ0hJVkVfRElSX05BTUVfRElDVCA9IHsKKyAgICAnY2hyb21pdW0td2luLXdpbjcnOiAnV2Vi
a2l0X1dpbjcnLAorICAgICdjaHJvbWl1bS13aW4tdmlzdGEnOiAnV2Via2l0X1Zpc3RhJywKKyAg
ICAnY2hyb21pdW0td2luLXhwJzogJ1dlYmtpdF9XaW4nLAorICAgICdjaHJvbWl1bS1tYWMtbGVv
cGFyZCc6ICdXZWJraXRfTWFjMTBfNScsCisgICAgJ2Nocm9taXVtLW1hYy1zbm93bGVvcGFyZCc6
ICdXZWJraXRfTWFjMTBfNicsCisgICAgJ2Nocm9taXVtLWxpbnV4LXg4Nic6ICdXZWJraXRfTGlu
dXhfMzInLAorICAgICdjaHJvbWl1bS1saW51eC14ODZfNjQnOiAnV2Via2l0X0xpbnV4JywKKyAg
ICAnY2hyb21pdW0tZ3B1LW1hYy1zbm93bGVvcGFyZCc6ICdXZWJraXRfTWFjMTBfNl8tX0dQVScs
CisgICAgJ2Nocm9taXVtLWdwdS13aW4teHAnOiAnV2Via2l0X1dpbl8tX0dQVScsCisgICAgJ2No
cm9taXVtLWdwdS13aW4td2luNyc6ICdXZWJraXRfV2luN18tX0dQVScsCisgICAgJ2Nocm9taXVt
LWdwdS1saW51eC14ODZfNjQnOiAnV2Via2l0X0xpbnV4Xy1fR1BVJywKKyAgICAnY2hyb21pdW0t
Z3B1LWxpbnV4LXg4Nic6ICdXZWJraXRfTGludXhfMzJfLV9HUFUnLAorfQorCisKK2RlZiBsb2df
ZGFzaGVkX3N0cmluZyh0ZXh0LCBwbGF0Zm9ybT1Ob25lLCBsb2dnaW5nX2xldmVsPWxvZ2dpbmcu
REVCVUcpOgorICAgICIiIkxvZyB0ZXh0IG1lc3NhZ2Ugd2l0aCBkYXNoZXMgb24gYm90aCBzaWRl
cy4iIiIKKyAgICBtc2cgPSB0ZXh0CisgICAgaWYgcGxhdGZvcm06CisgICAgICAgIG1zZyArPSAn
OiAnICsgcGxhdGZvcm0KKyAgICBpZiBsZW4obXNnKSA8IDc4OgorICAgICAgICBkYXNoZXMgPSAn
LScgKiAoKDc4IC0gbGVuKG1zZykpIC8gMikKKyAgICAgICAgbXNnID0gJyVzICVzICVzJyAlIChk
YXNoZXMsIG1zZywgZGFzaGVzKQorICAgIF9sb2cubG9nKGxvZ2dpbmdfbGV2ZWwsIG1zZykKKwor
CitkZWYgc2V0dXBfaHRtbF9kaXJlY3RvcnkoZmlsZXN5c3RlbSwgcGFyZW50X2RpcmVjdG9yeSk6
CisgICAgIiIiU2V0dXAgdGhlIGRpcmVjdG9yeSB0byBzdG9yZSBodG1sIHJlc3VsdHMuCisKKyAg
ICAgICBBbGwgaHRtbCByZWxhdGVkIGZpbGVzIGFyZSBzdG9yZWQgaW4gdGhlICJyZWJhc2VsaW5l
X2h0bWwiIHN1YmRpcmVjdG9yeSBvZgorICAgICAgIHRoZSBwYXJlbnQgZGlyZWN0b3J5LiBUaGUg
cGF0aCB0byB0aGUgY3JlYXRlZCBkaXJlY3RvcnkgaXMgcmV0dXJuZWQuCisgICAgIiIiCisKKyAg
ICBpZiBub3QgcGFyZW50X2RpcmVjdG9yeToKKyAgICAgICAgcGFyZW50X2RpcmVjdG9yeSA9IHN0
cihmaWxlc3lzdGVtLm1rZHRlbXAoKSkKKyAgICBlbHNlOgorICAgICAgICBmaWxlc3lzdGVtLm1h
eWJlX21ha2VfZGlyZWN0b3J5KHBhcmVudF9kaXJlY3RvcnkpCisKKyAgICBodG1sX2RpcmVjdG9y
eSA9IGZpbGVzeXN0ZW0uam9pbihwYXJlbnRfZGlyZWN0b3J5LCAncmViYXNlbGluZV9odG1sJykK
KyAgICBfbG9nLmRlYnVnKCdIdG1sIGRpcmVjdG9yeTogIiVzIicsIGh0bWxfZGlyZWN0b3J5KQor
CisgICAgaWYgZmlsZXN5c3RlbS5leGlzdHMoaHRtbF9kaXJlY3RvcnkpOgorICAgICAgICBmaWxl
c3lzdGVtLnJtdHJlZShodG1sX2RpcmVjdG9yeSkKKyAgICAgICAgX2xvZy5kZWJ1ZygnRGVsZXRl
ZCBodG1sIGRpcmVjdG9yeTogIiVzIicsIGh0bWxfZGlyZWN0b3J5KQorCisgICAgZmlsZXN5c3Rl
bS5tYXliZV9tYWtlX2RpcmVjdG9yeShodG1sX2RpcmVjdG9yeSkKKyAgICByZXR1cm4gaHRtbF9k
aXJlY3RvcnkKKworCitkZWYgZ2V0X3Jlc3VsdF9maWxlX2Z1bGxwYXRoKGZpbGVzeXN0ZW0sIGh0
bWxfZGlyZWN0b3J5LCBiYXNlbGluZV9maWxlbmFtZSwgcGxhdGZvcm0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdF90eXBlKToKKyAgICAiIiJHZXQgZnVsbCBwYXRoIG9mIHRo
ZSBiYXNlbGluZSByZXN1bHQgZmlsZS4KKworICAgIEFyZ3M6CisgICAgICBmaWxlc3lzdGVtOiB3
cmFwcGVyIG9iamVjdAorICAgICAgaHRtbF9kaXJlY3Rvcnk6IGRpcmVjdG9yeSB0aGF0IHN0b3Jl
cyB0aGUgaHRtbCByZWxhdGVkIGZpbGVzLgorICAgICAgYmFzZWxpbmVfZmlsZW5hbWU6IG5hbWUg
b2YgdGhlIGJhc2VsaW5lIGZpbGUuCisgICAgICBwbGF0Zm9ybTogd2luLCBsaW51eCBvciBtYWMK
KyAgICAgIHJlc3VsdF90eXBlOiB0eXBlIG9mIHRoZSBiYXNlbGluZSByZXN1bHQ6ICcudHh0Jywg
Jy5wbmcnLgorCisgICAgUmV0dXJuczoKKyAgICAgIEZ1bGwgcGF0aCBvZiB0aGUgYmFzZWxpbmUg
ZmlsZSBmb3IgcmViYXNlbGluaW5nIHJlc3VsdCBjb21wYXJpc29uLgorICAgICIiIgorCisgICAg
YmFzZSwgZXh0ID0gZmlsZXN5c3RlbS5zcGxpdGV4dChiYXNlbGluZV9maWxlbmFtZSkKKyAgICBy
ZXN1bHRfZmlsZW5hbWUgPSAnJXMtJXMtJXMlcycgJSAoYmFzZSwgcGxhdGZvcm0sIHJlc3VsdF90
eXBlLCBleHQpCisgICAgZnVsbHBhdGggPSBmaWxlc3lzdGVtLmpvaW4oaHRtbF9kaXJlY3Rvcnks
IHJlc3VsdF9maWxlbmFtZSkKKyAgICBfbG9nLmRlYnVnKCcgIFJlc3VsdCBmaWxlIGZ1bGwgcGF0
aDogIiVzIi4nLCBmdWxscGF0aCkKKyAgICByZXR1cm4gZnVsbHBhdGgKKworCitjbGFzcyBSZWJh
c2VsaW5lcihvYmplY3QpOgorICAgICIiIkNsYXNzIHRvIHByb2R1Y2UgbmV3IGJhc2VsaW5lcyBm
b3IgYSBnaXZlbiBwbGF0Zm9ybS4iIiIKKworICAgIFJFVklTSU9OX1JFR0VYID0gcic8YSBocmVm
PVwiKFxkKykvXCI+JworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJ1bm5pbmdfcG9ydCwgdGFy
Z2V0X3BvcnQsIHBsYXRmb3JtLCBvcHRpb25zLCB1cmxfZmV0Y2hlciwgemlwX2ZhY3RvcnksIHNj
bSwgbG9nZ2VkX2JlZm9yZT1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBBcmdzOgorICAg
ICAgICAgICAgcnVubmluZ19wb3J0OiB0aGUgUG9ydCB0aGUgc2NyaXB0IGlzIHJ1bm5pbmcgb24u
CisgICAgICAgICAgICB0YXJnZXRfcG9ydDogdGhlIFBvcnQgdGhlIHNjcmlwdCB1c2VzIHRvIGZp
bmQgcG9ydC1zcGVjaWZpYworICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRp
b24gbGlrZSB0aGUgdGVzdF9leHBlY3RhdGlvbnMudHh0CisgICAgICAgICAgICAgICAgZmlsZSBs
b2NhdGlvbiBhbmQgdGhlIGxpc3Qgb2YgdGVzdCBwbGF0Zm9ybXMuCisgICAgICAgICAgICBwbGF0
Zm9ybTogdGhlIHRlc3QgcGxhdGZvcm0gdG8gcmViYXNlbGluZQorICAgICAgICAgICAgb3B0aW9u
czogdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIG9iamVjdC4KKyAgICAgICAgICAgIHVybF9mZXRj
aGVyOiBvYmplY3QgdGhhdCBjYW4gZmV0Y2ggb2JqZWN0cyBmcm9tIFVSTHMKKyAgICAgICAgICAg
IHppcF9mYWN0b3J5OiBvcHRpb25hbCBvYmplY3QgdGhhdCBjYW4gZmV0Y2ggemlwIGZpbGVzIGZy
b20gVVJMcworICAgICAgICAgICAgc2NtOiBzY20gb2JqZWN0IGZvciBhZGRpbmcgbmV3IGJhc2Vs
aW5lcworICAgICAgICAgICAgbG9nZ2VkX2JlZm9yZTogd2hldGhlciB0aGUgcHJldmlvdXMgcnVu
bmluZyBwb3J0IGxvZ2dlZCBhbnl0aGluZy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3Bs
YXRmb3JtID0gcGxhdGZvcm0KKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAg
ICAgc2VsZi5fcG9ydCA9IHJ1bm5pbmdfcG9ydAorICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0g
cnVubmluZ19wb3J0Ll9maWxlc3lzdGVtCisgICAgICAgIHNlbGYuX3RhcmdldF9wb3J0ID0gdGFy
Z2V0X3BvcnQKKworICAgICAgICBzZWxmLl9yZWJhc2VsaW5lX3BvcnQgPSBwb3J0LmdldChwbGF0
Zm9ybSwgb3B0aW9ucywgZmlsZXN5c3RlbT1zZWxmLl9maWxlc3lzdGVtKQorICAgICAgICBzZWxm
Ll9yZWJhc2VsaW5pbmdfdGVzdHMgPSBzZXQoKQorICAgICAgICBzZWxmLl9yZWJhc2VsaW5lZF90
ZXN0cyA9IFtdCisgICAgICAgIHNlbGYuX2xvZ2dlZF9iZWZvcmUgPSBsb2dnZWRfYmVmb3JlCisg
ICAgICAgIHNlbGYuZGlkX2xvZyA9IEZhbHNlCisKKyAgICAgICAgIyBDcmVhdGUgdGVzdHMgYW5k
IGV4cGVjdGF0aW9ucyBoZWxwZXIgd2hpY2ggaXMgdXNlZCB0bzoKKyAgICAgICAgIyAgIC0uIGNv
bXBpbGUgbGlzdCBvZiB0ZXN0cyB0aGF0IG5lZWQgcmViYXNlbGluaW5nLgorICAgICAgICAjICAg
LS4gdXBkYXRlIHRoZSB0ZXN0cyBpbiB0ZXN0X2V4cGVjdGF0aW9ucyBmaWxlIGFmdGVyIHJlYmFz
ZWxpbmUKKyAgICAgICAgIyAgICAgIGlzIGRvbmUuCisgICAgICAgIGV4cGVjdGF0aW9uc19zdHIg
PSBzZWxmLl9yZWJhc2VsaW5lX3BvcnQudGVzdF9leHBlY3RhdGlvbnMoKQorICAgICAgICBzZWxm
Ll90ZXN0X2V4cGVjdGF0aW9ucyA9IHRlc3RfZXhwZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvbnMo
CisgICAgICAgICAgICBzZWxmLl9yZWJhc2VsaW5lX3BvcnQsIE5vbmUsIGV4cGVjdGF0aW9uc19z
dHIsIHNlbGYuX3JlYmFzZWxpbmVfcG9ydC50ZXN0X2NvbmZpZ3VyYXRpb24oKSwgRmFsc2UpCisg
ICAgICAgIHNlbGYuX3VybF9mZXRjaGVyID0gdXJsX2ZldGNoZXIKKyAgICAgICAgc2VsZi5femlw
X2ZhY3RvcnkgPSB6aXBfZmFjdG9yeQorICAgICAgICBzZWxmLl9zY20gPSBzY20KKworICAgIGRl
ZiBydW4oc2VsZik6CisgICAgICAgICIiIlJ1biByZWJhc2VsaW5lIHByb2Nlc3MuIiIiCisKKyAg
ICAgICAgbG9nX2Rhc2hlZF9zdHJpbmcoJ0NvbXBpbGluZyByZWJhc2VsaW5pbmcgdGVzdHMnLCBz
ZWxmLl9wbGF0Zm9ybSwgbG9nZ2luZy5ERUJVRykKKyAgICAgICAgaWYgbm90IHNlbGYuX2NvbXBp
bGVfcmViYXNlbGluaW5nX3Rlc3RzKCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAg
ICAgaWYgbm90IHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0czoKKyAgICAgICAgICAgIHJldHVybiBU
cnVlCisKKyAgICAgICAgc2VsZi5kaWRfbG9nID0gVHJ1ZQorICAgICAgICBsb2dfZGFzaGVkX3N0
cmluZygnRG93bmxvYWRpbmcgYXJjaGl2ZScsIHNlbGYuX3BsYXRmb3JtLCBsb2dnaW5nLkRFQlVH
KQorICAgICAgICBhcmNoaXZlX2ZpbGUgPSBzZWxmLl9kb3dubG9hZF9idWlsZGJvdF9hcmNoaXZl
KCkKKyAgICAgICAgX2xvZy5kZWJ1ZygnJykKKyAgICAgICAgaWYgbm90IGFyY2hpdmVfZmlsZToK
KyAgICAgICAgICAgIF9sb2cuZXJyb3IoJ05vIGFyY2hpdmUgZm91bmQuJykKKyAgICAgICAgICAg
IHJldHVybiBGYWxzZQorCisgICAgICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdFeHRyYWN0aW5nIGFu
ZCBhZGRpbmcgbmV3IGJhc2VsaW5lcycsIHNlbGYuX3BsYXRmb3JtLCBsb2dnaW5nLkRFQlVHKQor
ICAgICAgICBzZWxmLl9leHRyYWN0X2FuZF9hZGRfbmV3X2Jhc2VsaW5lcyhhcmNoaXZlX2ZpbGUp
CisgICAgICAgIGFyY2hpdmVfZmlsZS5jbG9zZSgpCisKKyAgICAgICAgbG9nX2Rhc2hlZF9zdHJp
bmcoJ1VwZGF0aW5nIHJlYmFzZWxpbmVkIHRlc3RzIGluIGZpbGUnLCBzZWxmLl9wbGF0Zm9ybSkK
KworICAgICAgICBpZiBsZW4oc2VsZi5fcmViYXNlbGluaW5nX3Rlc3RzKSAhPSBsZW4oc2VsZi5f
cmViYXNlbGluZWRfdGVzdHMpOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnJykKKyAgICAgICAg
ICAgIF9sb2cuZGVidWcoJ05PVCBBTEwgVEVTVFMgV0VSRSBSRUJBU0VMSU5FRC4nKQorICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygnICBOdW1iZXIgbWFya2VkIGZvciByZWJhc2VsaW5pbmc6ICVkJywg
bGVuKHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0cykpCisgICAgICAgICAgICBfbG9nLmRlYnVnKCcg
IE51bWJlciBhY3R1YWxseSByZWJhc2VsaW5lZDogJWQnLCBsZW4oc2VsZi5fcmViYXNlbGluZWRf
dGVzdHMpKQorICAgICAgICAgICAgX2xvZy5pbmZvKCcnKQorICAgICAgICAgICAgcmV0dXJuIEZh
bHNlCisKKyAgICAgICAgX2xvZy5kZWJ1ZygnICBBbGwgdGVzdHMgbmVlZGluZyByZWJhc2VsaW5p
bmcgd2VyZSBzdWNjZXNzZnVsbHkgcmViYXNlbGluZWQuJykKKyAgICAgICAgX2xvZy5pbmZvKCcn
KQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHJlbW92ZV9yZWJhc2VsaW5pbmdfZXhw
ZWN0YXRpb25zKHNlbGYsIHRlc3RzLCBiYWNrdXApOgorICAgICAgICAiIiJpZiBiYWNrdXAgaXMg
VHJ1ZSwgd2UgYmFja3VwIHRoZSBvcmlnaW5hbCB0ZXN0IGV4cGVjdGF0aW9ucyBmaWxlLiIiIgor
ICAgICAgICBuZXdfZXhwZWN0YXRpb25zID0gc2VsZi5fdGVzdF9leHBlY3RhdGlvbnMucmVtb3Zl
X3JlYmFzZWxpbmVkX3Rlc3RzKHRlc3RzKQorICAgICAgICBwYXRoID0gc2VsZi5fdGFyZ2V0X3Bv
cnQucGF0aF90b190ZXN0X2V4cGVjdGF0aW9uc19maWxlKCkKKyAgICAgICAgaWYgYmFja3VwOgor
ICAgICAgICAgICAgZGF0ZV9zdWZmaXggPSB0aW1lLnN0cmZ0aW1lKCclWSVtJWQlSCVNJVMnLCB0
aW1lLmxvY2FsdGltZSh0aW1lLnRpbWUoKSkpCisgICAgICAgICAgICBiYWNrdXBfZmlsZSA9ICcl
cy5vcmlnLiVzJyAlIChwYXRoLCBkYXRlX3N1ZmZpeCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2Zp
bGVzeXN0ZW0uZXhpc3RzKGJhY2t1cF9maWxlKToKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxl
c3lzdGVtLnJlbW92ZShiYWNrdXBfZmlsZSkKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ1Nhdmlu
ZyBvcmlnaW5hbCBmaWxlIHRvICIlcyInLCBiYWNrdXBfZmlsZSkKKyAgICAgICAgICAgIHNlbGYu
X2ZpbGVzeXN0ZW0ubW92ZShwYXRoLCBiYWNrdXBfZmlsZSkKKworICAgICAgICBzZWxmLl9maWxl
c3lzdGVtLndyaXRlX3RleHRfZmlsZShwYXRoLCBuZXdfZXhwZWN0YXRpb25zKQorICAgICAgICAj
IHNlbGYuX3NjbS5hZGQocGF0aCkKKworICAgIGRlZiBnZXRfcmViYXNlbGluZWRfdGVzdHMoc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLl9yZWJhc2VsaW5lZF90ZXN0cworCisgICAgZGVmIF9j
b21waWxlX3JlYmFzZWxpbmluZ190ZXN0cyhzZWxmKToKKyAgICAgICAgIiIiQ29tcGlsZSBsaXN0
IG9mIHRlc3RzIHRoYXQgbmVlZCByZWJhc2VsaW5pbmcgZm9yIHRoZSBwbGF0Zm9ybS4KKworICAg
ICAgICBSZXR1cm5zOgorICAgICAgICAgIEZhbHNlIGlmIHJlZnRlc3RzIGFyZSB3cm9uZ2x5IG1h
cmtlZCBhcyAnbmVlZHMgcmViYXNlbGluaW5nJyBvciBUcnVlCisgICAgICAgICIiIgorCisgICAg
ICAgIHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0cyA9IHNlbGYuX3Rlc3RfZXhwZWN0YXRpb25zLmdl
dF9yZWJhc2VsaW5pbmdfZmFpbHVyZXMoKQorICAgICAgICBpZiBub3Qgc2VsZi5fcmViYXNlbGlu
aW5nX3Rlc3RzOgorICAgICAgICAgICAgX2xvZy5pbmZvKCclczogTm8gdGVzdHMgdG8gcmViYXNl
bGluZS4nLCBzZWxmLl9wbGF0Zm9ybSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAg
ICAgZnMgPSBzZWxmLl90YXJnZXRfcG9ydC5fZmlsZXN5c3RlbQorICAgICAgICBmb3IgdGVzdCBp
biBzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHM6CisgICAgICAgICAgICB0ZXN0X2Fic3BhdGggPSBz
ZWxmLl90YXJnZXRfcG9ydC5hYnNwYXRoX2Zvcl90ZXN0KHRlc3QpCisgICAgICAgICAgICBpZiAo
ZnMuZXhpc3RzKHNlbGYuX3RhcmdldF9wb3J0LnJlZnRlc3RfZXhwZWN0ZWRfZmlsZW5hbWUodGVz
dF9hYnNwYXRoKSkgb3IKKyAgICAgICAgICAgICAgICBmcy5leGlzdHMoc2VsZi5fdGFyZ2V0X3Bv
cnQucmVmdGVzdF9leHBlY3RlZF9taXNtYXRjaF9maWxlbmFtZSh0ZXN0X2Fic3BhdGgpKSk6Cisg
ICAgICAgICAgICAgICAgX2xvZy5lcnJvcignJXMgc2VlbXMgdG8gYmUgYSByZWZ0ZXN0LiBXZSBj
YW4gbm90IHJlYmFzZSBmb3IgcmVmdGVzdHMuJywgdGVzdCkKKyAgICAgICAgICAgICAgICBzZWxm
Ll9yZWJhc2VsaW5pbmdfdGVzdHMgPSBzZXQoKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxz
ZQorCisgICAgICAgIGlmIG5vdCBzZWxmLl9sb2dnZWRfYmVmb3JlOgorICAgICAgICAgICAgX2xv
Zy5pbmZvKCcnKQorICAgICAgICBfbG9nLmluZm8oJyVzOiBSZWJhc2VsaW5pbmcgJWQgdGVzdHM6
Jywgc2VsZi5fcGxhdGZvcm0sIGxlbihzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHMpKQorICAgICAg
ICB0ZXN0X25vID0gMQorICAgICAgICBmb3IgdGVzdCBpbiBzZWxmLl9yZWJhc2VsaW5pbmdfdGVz
dHM6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCcgICVkOiAlcycsIHRlc3Rfbm8sIHRlc3QpCisg
ICAgICAgICAgICB0ZXN0X25vICs9IDEKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVm
IF9nZXRfbGF0ZXN0X3JldmlzaW9uKHNlbGYsIHVybCk6CisgICAgICAgICIiIkdldCB0aGUgbGF0
ZXN0IGxheW91dCB0ZXN0IHJldmlzaW9uIG51bWJlciBmcm9tIGJ1aWxkYm90LgorCisgICAgICAg
IEFyZ3M6CisgICAgICAgICAgdXJsOiBVcmwgdG8gcmV0cmlldmUgbGF5b3V0IHRlc3QgcmV2aXNp
b24gbnVtYmVycy4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgIGxhdGVzdCByZXZpc2lv
biBvcgorICAgICAgICAgIE5vbmUgb24gZmFpbHVyZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAg
X2xvZy5kZWJ1ZygnVXJsIHRvIHJldHJpZXZlIHJldmlzaW9uOiAiJXMiJywgdXJsKQorCisgICAg
ICAgIGNvbnRlbnQgPSBzZWxmLl91cmxfZmV0Y2hlci5mZXRjaCh1cmwpCisKKyAgICAgICAgcmV2
aXNpb25zID0gcmUuZmluZGFsbChzZWxmLlJFVklTSU9OX1JFR0VYLCBjb250ZW50KQorICAgICAg
ICBpZiBub3QgcmV2aXNpb25zOgorICAgICAgICAgICAgX2xvZy5lcnJvcignRmFpbGVkIHRvIGZp
bmQgcmV2aXNpb24sIGNvbnRlbnQ6ICIlcyInLCBjb250ZW50KQorICAgICAgICAgICAgcmV0dXJu
IE5vbmUKKworICAgICAgICByZXZpc2lvbnMuc29ydChrZXk9aW50KQorICAgICAgICBfbG9nLmRl
YnVnKCcgIExhdGVzdCByZXZpc2lvbjogJXMnLCByZXZpc2lvbnNbbGVuKHJldmlzaW9ucykgLSAx
XSkKKyAgICAgICAgcmV0dXJuIHJldmlzaW9uc1tsZW4ocmV2aXNpb25zKSAtIDFdCisKKyAgICBk
ZWYgX2dldF9hcmNoaXZlX2Rpcl9uYW1lKHNlbGYsIHBsYXRmb3JtKToKKyAgICAgICAgIiIiR2V0
IG5hbWUgb2YgdGhlIGxheW91dCB0ZXN0IGFyY2hpdmUgZGlyZWN0b3J5LgorCisgICAgICAgIFJl
dHVybnM6CisgICAgICAgICAgRGlyZWN0b3J5IG5hbWUgb3IKKyAgICAgICAgICBOb25lIG9uIGZh
aWx1cmUKKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgcGxhdGZvcm0gaW4gQVJDSElWRV9ESVJf
TkFNRV9ESUNUOgorICAgICAgICAgICAgcmV0dXJuIEFSQ0hJVkVfRElSX05BTUVfRElDVFtwbGF0
Zm9ybV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0Nhbm5vdCBmaW5k
IHBsYXRmb3JtIGtleSAlcyBpbiBhcmNoaXZlICcKKyAgICAgICAgICAgICAgICAgICAgICAgJ2Rp
cmVjdG9yeSBuYW1lIGRpY3Rpb25hcnknLCBwbGF0Zm9ybSkKKyAgICAgICAgICAgIHJldHVybiBO
b25lCisKKyAgICBkZWYgX2dldF9hcmNoaXZlX3VybChzZWxmKToKKyAgICAgICAgIiIiR2VuZXJh
dGUgdGhlIHVybCB0byBkb3dubG9hZCBsYXRlc3QgbGF5b3V0IHRlc3QgYXJjaGl2ZS4KKworICAg
ICAgICBSZXR1cm5zOgorICAgICAgICAgIFVybCB0byBkb3dubG9hZCBhcmNoaXZlIG9yCisgICAg
ICAgICAgTm9uZSBvbiBmYWlsdXJlCisgICAgICAgICIiIgorCisgICAgICAgIGlmIHNlbGYuX29w
dGlvbnMuZm9yY2VfYXJjaGl2ZV91cmw6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fb3B0aW9u
cy5mb3JjZV9hcmNoaXZlX3VybAorCisgICAgICAgIGRpcl9uYW1lID0gc2VsZi5fZ2V0X2FyY2hp
dmVfZGlyX25hbWUoc2VsZi5fcGxhdGZvcm0pCisgICAgICAgIGlmIG5vdCBkaXJfbmFtZToKKyAg
ICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgX2xvZy5kZWJ1ZygnQnVpbGRib3QgcGxh
dGZvcm0gZGlyIG5hbWU6ICIlcyInLCBkaXJfbmFtZSkKKworICAgICAgICB1cmxfYmFzZSA9ICcl
cy8lcy8nICUgKHNlbGYuX29wdGlvbnMuYXJjaGl2ZV91cmwsIGRpcl9uYW1lKQorICAgICAgICBs
YXRlc3RfcmV2aXNpb24gPSBzZWxmLl9nZXRfbGF0ZXN0X3JldmlzaW9uKHVybF9iYXNlKQorICAg
ICAgICBpZiBsYXRlc3RfcmV2aXNpb24gaXMgTm9uZSBvciBsYXRlc3RfcmV2aXNpb24gPD0gMDoK
KyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGFyY2hpdmVfdXJsID0gJyVzJXMvbGF5
b3V0LXRlc3QtcmVzdWx0cy56aXAnICUgKHVybF9iYXNlLCBsYXRlc3RfcmV2aXNpb24pCisgICAg
ICAgIF9sb2cuaW5mbygnICBVc2luZyAlcycsIGFyY2hpdmVfdXJsKQorICAgICAgICByZXR1cm4g
YXJjaGl2ZV91cmwKKworICAgIGRlZiBfZG93bmxvYWRfYnVpbGRib3RfYXJjaGl2ZShzZWxmKToK
KyAgICAgICAgIiIiRG93bmxvYWQgbGF5b3V0IHRlc3QgYXJjaGl2ZSBmaWxlIGZyb20gYnVpbGRi
b3QgYW5kIHJldHVybiBhIGhhbmRsZSB0byBpdC4iIiIKKyAgICAgICAgdXJsID0gc2VsZi5fZ2V0
X2FyY2hpdmVfdXJsKCkKKyAgICAgICAgaWYgdXJsIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1
cm4gTm9uZQorCisgICAgICAgIGFyY2hpdmVfZmlsZSA9IHppcGZpbGVzZXQuWmlwRmlsZVNldCh1
cmwsIGZpbGVzeXN0ZW09c2VsZi5fZmlsZXN5c3RlbSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHppcF9mYWN0b3J5PXNlbGYuX3ppcF9mYWN0b3J5KQorICAg
ICAgICBfbG9nLmRlYnVnKCdBcmNoaXZlIGRvd25sb2FkZWQnKQorICAgICAgICByZXR1cm4gYXJj
aGl2ZV9maWxlCisKKyAgICBkZWYgX2V4dHJhY3RfYW5kX2FkZF9uZXdfYmFzZWxpbmVzKHNlbGYs
IHppcF9maWxlKToKKyAgICAgICAgIiIiRXh0cmFjdCBuZXcgYmFzZWxpbmVzIGZyb20gdGhlIHpp
cCBmaWxlIGFuZCBhZGQgdGhlbSB0byBTVk4gcmVwb3NpdG9yeS4KKworICAgICAgICBSZXR1cm5z
OgorICAgICAgICAgIExpc3Qgb2YgdGVzdHMgdGhhdCBoYXZlIGJlZW4gcmViYXNlbGluZWQgb3Ig
Tm9uZSBvbiBmYWlsdXJlLiIiIgorICAgICAgICB6aXBfbmFtZWxpc3QgPSB6aXBfZmlsZS5uYW1l
bGlzdCgpCisKKyAgICAgICAgX2xvZy5kZWJ1ZygnemlwIGZpbGUgbmFtZWxpc3Q6JykKKyAgICAg
ICAgZm9yIG5hbWUgaW4gemlwX25hbWVsaXN0OgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnICAn
ICsgbmFtZSkKKworICAgICAgICBfbG9nLmRlYnVnKCdQbGF0Zm9ybSBkaXI6ICIlcyInLCBzZWxm
Ll9wbGF0Zm9ybSkKKworICAgICAgICBzZWxmLl9yZWJhc2VsaW5lZF90ZXN0cyA9IFtdCisgICAg
ICAgIGZvciB0ZXN0X25vLCB0ZXN0IGluIGVudW1lcmF0ZShzZWxmLl9yZWJhc2VsaW5pbmdfdGVz
dHMpOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVGVzdCAlZDogJXMnLCB0ZXN0X25vICsgMSwg
dGVzdCkKKyAgICAgICAgICAgIHNlbGYuX2V4dHJhY3RfYW5kX2FkZF9uZXdfYmFzZWxpbmUodGVz
dCwgemlwX2ZpbGUpCisKKyAgICBkZWYgX2V4dHJhY3RfYW5kX2FkZF9uZXdfYmFzZWxpbmUoc2Vs
ZiwgdGVzdCwgemlwX2ZpbGUpOgorICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgIHNjbV9l
cnJvciA9IEZhbHNlCisgICAgICAgIHRlc3RfYmFzZW5hbWUgPSBzZWxmLl9maWxlc3lzdGVtLnNw
bGl0ZXh0KHRlc3QpWzBdCisgICAgICAgIGZvciBzdWZmaXggaW4gQkFTRUxJTkVfU1VGRklYRVM6
CisgICAgICAgICAgICBhcmNoaXZlX3Rlc3RfbmFtZSA9ICdsYXlvdXQtdGVzdC1yZXN1bHRzLyVz
LWFjdHVhbCVzJyAlICh0ZXN0X2Jhc2VuYW1lLCBzdWZmaXgpCisgICAgICAgICAgICBfbG9nLmRl
YnVnKCcgIEFyY2hpdmUgdGVzdCBmaWxlIG5hbWU6ICIlcyInLCBhcmNoaXZlX3Rlc3RfbmFtZSkK
KyAgICAgICAgICAgIGlmIG5vdCBhcmNoaXZlX3Rlc3RfbmFtZSBpbiB6aXBfZmlsZS5uYW1lbGlz
dCgpOgorICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgJXMgZmlsZSBub3QgaW4gYXJjaGl2
ZS4nLCBzdWZmaXgpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZm91
bmQgPSBUcnVlCisgICAgICAgICAgICBfbG9nLmRlYnVnKCcgICVzIGZpbGUgZm91bmQgaW4gYXJj
aGl2ZS4nLCBzdWZmaXgpCisKKyAgICAgICAgICAgIHRlbXBfbmFtZSA9IHNlbGYuX2V4dHJhY3Rf
ZnJvbV96aXBfdG9fdGVtcGZpbGUoemlwX2ZpbGUsIGFyY2hpdmVfdGVzdF9uYW1lKQorCisgICAg
ICAgICAgICBleHBlY3RlZF9maWxlbmFtZSA9ICclcy1leHBlY3RlZCVzJyAlICh0ZXN0X2Jhc2Vu
YW1lLCBzdWZmaXgpCisgICAgICAgICAgICBleHBlY3RlZF9mdWxscGF0aCA9IHNlbGYuX2ZpbGVz
eXN0ZW0uam9pbigKKyAgICAgICAgICAgICAgICBzZWxmLl9yZWJhc2VsaW5lX3BvcnQuYmFzZWxp
bmVfcGF0aCgpLCBleHBlY3RlZF9maWxlbmFtZSkKKyAgICAgICAgICAgIGV4cGVjdGVkX2Z1bGxw
YXRoID0gc2VsZi5fZmlsZXN5c3RlbS5ub3JtcGF0aChleHBlY3RlZF9mdWxscGF0aCkKKyAgICAg
ICAgICAgIF9sb2cuZGVidWcoJyAgRXhwZWN0ZWQgZmlsZSBmdWxsIHBhdGg6ICIlcyInLCBleHBl
Y3RlZF9mdWxscGF0aCkKKworICAgICAgICAgICAgcmVscGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0u
cmVscGF0aChleHBlY3RlZF9mdWxscGF0aCwgc2VsZi5fdGFyZ2V0X3BvcnQubGF5b3V0X3Rlc3Rz
X2RpcigpKQorCisgICAgICAgICAgICAjIFRPRE8odmljdG9ydyk6IGZvciBub3csIHRoZSByZWJh
c2VsaW5pbmcgdG9vbCBjaGVja3Mgd2hldGhlcgorICAgICAgICAgICAgIyBvciBub3QgVEhJUyBi
YXNlbGluZSBpcyBkdXBsaWNhdGUgYW5kIHNob3VsZCBiZSBza2lwcGVkLgorICAgICAgICAgICAg
IyBXZSBjb3VsZCBpbXByb3ZlIHRoZSB0b29sIHRvIGNoZWNrIGFsbCBiYXNlbGluZXMgaW4gdXBw
ZXIKKyAgICAgICAgICAgICMgYW5kIGxvd2VyIGxldmVscyBhbmQgcmVtb3ZlIGFsbCBkdXBsaWNh
dGVkIGJhc2VsaW5lcy4KKyAgICAgICAgICAgIGlmIHNlbGYuX2lzX2R1cF9iYXNlbGluZSh0ZW1w
X25hbWUsIGV4cGVjdGVkX2Z1bGxwYXRoLCB0ZXN0LCBzdWZmaXgsIHNlbGYuX3BsYXRmb3JtKToK
KyAgICAgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJlbW92ZSh0ZW1wX25hbWUpCisgICAg
ICAgICAgICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoZXhwZWN0ZWRfZnVsbHBhdGgp
OgorICAgICAgICAgICAgICAgICAgICBfbG9nLmluZm8oJyAgUmVtb3ZpbmcgJXMnICUgcmVscGF0
aCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGVsZXRlX2Jhc2VsaW5lKGV4cGVjdGVkX2Z1
bGxwYXRoKQorICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgJXMgaXMgYSBkdXBsaWNhdGUn
ICUgcmVscGF0aCkKKworICAgICAgICAgICAgICAgICMgRklYTUU6IFdlIGNvbnNpZGVyIGEgZHVw
bGljYXRlIGJhc2VsaW5lIGEgc3VjY2VzcyBpbiB0aGUgbm9ybWFsIGNhc2UuCisgICAgICAgICAg
ICAgICAgIyBGSVhNRTogVGhpcyBtYXkgbm90IGJlIHdoYXQgeW91IHdhbnQgc29tZXRpbWVzOyBz
aG91bGQgdGhpcyBiZQorICAgICAgICAgICAgICAgICMgRklYTUU6IGNvbnRyb2xsYWJsZT8KKyAg
ICAgICAgICAgICAgICBzZWxmLl9yZWJhc2VsaW5lZF90ZXN0cy5hcHBlbmQodGVzdCkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBzdWZmaXggPT0gJy5jaGVja3N1
bScgYW5kIHNlbGYuX3BuZ19oYXNfc2FtZV9jaGVja3N1bSh0ZW1wX25hbWUsIHRlc3QsIGV4cGVj
dGVkX2Z1bGxwYXRoKToKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJlbW92ZSh0
ZW1wX25hbWUpCisgICAgICAgICAgICAgICAgIyBJZiBhbiBvbGQgY2hlY2tzdW0gZXhpc3RzLCBk
ZWxldGUgaXQuCisgICAgICAgICAgICAgICAgc2VsZi5fZGVsZXRlX2Jhc2VsaW5lKGV4cGVjdGVk
X2Z1bGxwYXRoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHNlbGYu
X2ZpbGVzeXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3Rvcnkoc2VsZi5fZmlsZXN5c3RlbS5kaXJuYW1l
KGV4cGVjdGVkX2Z1bGxwYXRoKSkKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ubW92ZSh0
ZW1wX25hbWUsIGV4cGVjdGVkX2Z1bGxwYXRoKQorCisgICAgICAgICAgICBwYXRoX2Zyb21fYmFz
ZSA9IHNlbGYuX2ZpbGVzeXN0ZW0ucmVscGF0aChleHBlY3RlZF9mdWxscGF0aCkKKyAgICAgICAg
ICAgIGlmIHNlbGYuX3NjbS5leGlzdHMocGF0aF9mcm9tX2Jhc2UpOgorICAgICAgICAgICAgICAg
IF9sb2cuaW5mbygnICBVcGRhdGluZyAlcycgJSByZWxwYXRoKQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICBfbG9nLmluZm8oJyAgQWRkaW5nICVzJyAlIHJlbHBhdGgpCisKKyAg
ICAgICAgICAgIGlmIHNlbGYuX3NjbS5hZGQoZXhwZWN0ZWRfZnVsbHBhdGgsIHJldHVybl9leGl0
X2NvZGU9VHJ1ZSk6CisgICAgICAgICAgICAgICAgIyBGSVhNRTogcHJpbnQgZGV0YWlsZWQgZGlh
Z25vc2UgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICBzY21fZXJyb3IgPSBUcnVlCisgICAgICAg
ICAgICBlbGlmIHN1ZmZpeCAhPSAnLmNoZWNrc3VtJzoKKyAgICAgICAgICAgICAgICBzZWxmLl9j
cmVhdGVfaHRtbF9iYXNlbGluZV9maWxlcyhleHBlY3RlZF9mdWxscGF0aCkKKworICAgICAgICBp
ZiBub3QgZm91bmQ6CisgICAgICAgICAgICBfbG9nLndhcm4oJ05vIHJlc3VsdHMgaW4gYXJjaGl2
ZSBmb3IgJXMnICUgdGVzdCkKKyAgICAgICAgZWxpZiBzY21fZXJyb3I6CisgICAgICAgICAgICBf
bG9nLndhcm4oJ0ZhaWxlZCB0byBhZGQgYmFzZWxpbmVzIHRvIHlvdXIgcmVwb3NpdG9yeS4nKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnICBSZWJhc2VsaW5lIHN1Y2Nl
ZWRlZC4nKQorICAgICAgICAgICAgc2VsZi5fcmViYXNlbGluZWRfdGVzdHMuYXBwZW5kKHRlc3Qp
CisKKyAgICBkZWYgX2V4dHJhY3RfZnJvbV96aXBfdG9fdGVtcGZpbGUoc2VsZiwgemlwX2ZpbGUs
IGZpbGVuYW1lKToKKyAgICAgICAgIiIiRXh0cmFjdHMgfGZpbGVuYW1lfCBmcm9tIHx6aXBfZmls
ZXwsIGEgWmlwRmlsZVNldC4gUmV0dXJucyB0aGUgZnVsbAorICAgICAgICAgICBwYXRoIG5hbWUg
dG8gdGhlIGV4dHJhY3RlZCBmaWxlLiIiIgorICAgICAgICBkYXRhID0gemlwX2ZpbGUucmVhZChm
aWxlbmFtZSkKKyAgICAgICAgc3VmZml4ID0gc2VsZi5fZmlsZXN5c3RlbS5zcGxpdGV4dChmaWxl
bmFtZSlbMV0KKyAgICAgICAgdGVtcGZpbGUsIHRlbXBfbmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0u
b3Blbl9iaW5hcnlfdGVtcGZpbGUoc3VmZml4KQorICAgICAgICB0ZW1wZmlsZS53cml0ZShkYXRh
KQorICAgICAgICB0ZW1wZmlsZS5jbG9zZSgpCisgICAgICAgIHJldHVybiB0ZW1wX25hbWUKKwor
ICAgIGRlZiBfcG5nX2hhc19zYW1lX2NoZWNrc3VtKHNlbGYsIGNoZWNrc3VtX3BhdGgsIHRlc3Qs
IGNoZWNrc3VtX2V4cGVjdGVkX2Z1bGxwYXRoKToKKyAgICAgICAgIiIiUmV0dXJucyBUcnVlIGlm
IHRoZSBmYWxsYmFjayBwbmcgZm9yIHxjaGVja3N1bV9leHBlY3RlZF9mdWxscGF0aHwKKyAgICAg
ICAgY29udGFpbnMgdGhlIHNhbWUgY2hlY2tzdW0uIiIiCisgICAgICAgIGZzID0gc2VsZi5fZmls
ZXN5c3RlbQorICAgICAgICBwbmdfZnVsbHBhdGggPSBzZWxmLl9maXJzdF9mYWxsYmFja19wbmdf
Zm9yX3Rlc3QodGVzdCkKKworICAgICAgICBpZiBub3QgZnMuZXhpc3RzKHBuZ19mdWxscGF0aCk6
CisgICAgICAgICAgICBfbG9nLmVycm9yKCcgIENoZWNrc3VtIHdpdGhvdXQgcG5nIGZpbGUgZm91
bmQhIEV4cGVjdGVkICVzIHRvIGV4aXN0LicgJSBwbmdfZnVsbHBhdGgpCisgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKKworICAgICAgICB3aXRoIGZzLm9wZW5fYmluYXJ5X2ZpbGVfZm9yX3JlYWRp
bmcocG5nX2Z1bGxwYXRoKSBhcyBmaWxlaGFuZGxlOgorICAgICAgICAgICAgY2hlY2tzdW1faW5f
cG5nID0gcmVhZF9jaGVja3N1bV9mcm9tX3BuZy5yZWFkX2NoZWNrc3VtKGZpbGVoYW5kbGUpCisg
ICAgICAgICAgICBjaGVja3N1bV9pbl90ZXh0X2ZpbGUgPSBmcy5yZWFkX3RleHRfZmlsZShjaGVj
a3N1bV9wYXRoKQorICAgICAgICAgICAgaWYgY2hlY2tzdW1faW5fcG5nIGFuZCBjaGVja3N1bV9p
bl9wbmcgIT0gY2hlY2tzdW1faW5fdGV4dF9maWxlOgorICAgICAgICAgICAgICAgIF9sb2cuZXJy
b3IoIiAgY2hlY2tzdW0gaW4gJXMgYW5kICVzIGRvbid0IG1hdGNoISAgQ29udGludWluZyIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICIgdG8gY29weSBidXQgcGxlYXNlIGludmVzdGlnYXRl
LiIgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3N1bV9leHBlY3RlZF9mdWxs
cGF0aCwgcG5nX2Z1bGxwYXRoKSkKKyAgICAgICAgICAgIHJldHVybiBjaGVja3N1bV9pbl90ZXh0
X2ZpbGUgPT0gY2hlY2tzdW1faW5fcG5nCisKKyAgICBkZWYgX2ZpcnN0X2ZhbGxiYWNrX3BuZ19m
b3JfdGVzdChzZWxmLCB0ZXN0KToKKyAgICAgICAgdGVzdF9maWxlcGF0aCA9IHNlbGYuX2ZpbGVz
eXN0ZW0uam9pbihzZWxmLl90YXJnZXRfcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCksIHRlc3QpCisg
ICAgICAgIGFsbF9iYXNlbGluZXMgPSBzZWxmLl9yZWJhc2VsaW5lX3BvcnQuZXhwZWN0ZWRfYmFz
ZWxpbmVzKAorICAgICAgICAgICAgdGVzdF9maWxlcGF0aCwgJy5wbmcnLCBUcnVlKQorICAgICAg
ICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKGFsbF9iYXNlbGluZXNbMF1bMF0sIGFsbF9i
YXNlbGluZXNbMF1bMV0pCisKKyAgICBkZWYgX2lzX2R1cF9iYXNlbGluZShzZWxmLCBuZXdfYmFz
ZWxpbmUsIGJhc2VsaW5lX3BhdGgsIHRlc3QsIHN1ZmZpeCwgcGxhdGZvcm0pOgorICAgICAgICAi
IiJDaGVjayB3aGV0aGVyIGEgYmFzZWxpbmUgaXMgZHVwbGljYXRlIGFuZCBjYW4gZmFsbGJhY2sg
dG8gc2FtZQorICAgICAgICAgICBiYXNlbGluZSBmb3IgYW5vdGhlciBwbGF0Zm9ybS4gRm9yIGV4
YW1wbGUsIGlmIGEgdGVzdCBoYXMgc2FtZQorICAgICAgICAgICBiYXNlbGluZSBvbiBsaW51eCBh
bmQgd2luZG93cywgdGhlbiB3ZSBvbmx5IHN0b3JlIHdpbmRvd3MKKyAgICAgICAgICAgYmFzZWxp
bmUgYW5kIGxpbnV4IGJhc2VsaW5lIHdpbGwgZmFsbGJhY2sgdG8gdGhlIHdpbmRvd3MgdmVyc2lv
bi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIG5ld19iYXNlbGluZTogdGVtcCBmaWxlbmFt
ZSBjb250YWluaW5nIHRoZSBuZXcgYmFzZWxpbmUgcmVzdWx0cworICAgICAgICAgIGJhc2VsaW5l
X3BhdGg6IGJhc2VsaW5lIGV4cGVjdGF0aW9uIGZpbGUgbmFtZS4KKyAgICAgICAgICB0ZXN0OiB0
ZXN0IG5hbWUuCisgICAgICAgICAgc3VmZml4OiBmaWxlIHN1ZmZpeCBvZiB0aGUgZXhwZWN0ZWQg
cmVzdWx0cywgaW5jbHVkaW5nIGRvdDsKKyAgICAgICAgICAgICAgICAgIGUuZy4gJy50eHQnIG9y
ICcucG5nJy4KKyAgICAgICAgICBwbGF0Zm9ybTogYmFzZWxpbmUgcGxhdGZvcm0gJ21hYycsICd3
aW4nIG9yICdsaW51eCcuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICBUcnVlIGlmIHRo
ZSBiYXNlbGluZSBpcyB1bm5lY2Vzc2FyeS4KKyAgICAgICAgICBGYWxzZSBvdGhlcndpc2UuCisg
ICAgICAgICIiIgorICAgICAgICB0ZXN0X2ZpbGVwYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2lu
KHNlbGYuX3RhcmdldF9wb3J0LmxheW91dF90ZXN0c19kaXIoKSwgdGVzdCkKKyAgICAgICAgYWxs
X2Jhc2VsaW5lcyA9IHNlbGYuX3JlYmFzZWxpbmVfcG9ydC5leHBlY3RlZF9iYXNlbGluZXMoCisg
ICAgICAgICAgICB0ZXN0X2ZpbGVwYXRoLCBzdWZmaXgsIFRydWUpCisgICAgICAgIHRlc3RfcmVs
cGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0ucmVscGF0aCh0ZXN0X2ZpbGVwYXRoLCBzZWxmLl90YXJn
ZXRfcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkpCisKKyAgICAgICAgZm9yIGZhbGxiYWNrX2Rpciwg
ZmFsbGJhY2tfZmlsZSBpbiBhbGxfYmFzZWxpbmVzOgorICAgICAgICAgICAgaWYgbm90IGZhbGxi
YWNrX2RpciBvciBub3QgZmFsbGJhY2tfZmlsZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQor
CisgICAgICAgICAgICBmYWxsYmFja19mdWxscGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0ubm9ybXBh
dGgoCisgICAgICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5qb2luKGZhbGxiYWNrX2Rpciwg
ZmFsbGJhY2tfZmlsZSkpCisgICAgICAgICAgICBpZiBmYWxsYmFja19mdWxscGF0aC5sb3dlcigp
ID09IGJhc2VsaW5lX3BhdGgubG93ZXIoKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAg
ICAgICAgICAgZmFsbGJhY2tfZGlyX3JlbHBhdGggPSBzZWxmLl9maWxlc3lzdGVtLnJlbHBhdGgo
ZmFsbGJhY2tfZGlyLCBzZWxmLl90YXJnZXRfcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkpCisgICAg
ICAgICAgICBpZiBmYWxsYmFja19kaXJfcmVscGF0aCA9PSAnJzoKKyAgICAgICAgICAgICAgICBm
YWxsYmFja19kaXJfcmVscGF0aCA9ICc8Z2VuZXJpYz4nCisKKyAgICAgICAgICAgIG5ld19vdXRw
dXQgPSBzZWxmLl9maWxlc3lzdGVtLnJlYWRfYmluYXJ5X2ZpbGUobmV3X2Jhc2VsaW5lKQorICAg
ICAgICAgICAgZmFsbGJhY2tfb3V0cHV0ID0gc2VsZi5fZmlsZXN5c3RlbS5yZWFkX2JpbmFyeV9m
aWxlKGZhbGxiYWNrX2Z1bGxwYXRoKQorICAgICAgICAgICAgaXNfaW1hZ2UgPSBiYXNlbGluZV9w
YXRoLmxvd2VyKCkuZW5kc3dpdGgoJy5wbmcnKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2Rp
ZmZfYmFzZWxpbmVzKG5ld19vdXRwdXQsIGZhbGxiYWNrX291dHB1dCwgaXNfaW1hZ2UpOgorICAg
ICAgICAgICAgICAgIF9sb2cuaW5mbygnICBTa2lwcGluZyAlcyAobWF0Y2hlcyAlcyknLCB0ZXN0
X3JlbHBhdGgsIGZhbGxiYWNrX2Rpcl9yZWxwYXRoKQorICAgICAgICAgICAgICAgIHJldHVybiBU
cnVlCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICByZXR1cm4gRmFsc2UKKwor
ICAgIGRlZiBfZGlmZl9iYXNlbGluZXMoc2VsZiwgb3V0cHV0MSwgb3V0cHV0MiwgaXNfaW1hZ2Up
OgorICAgICAgICAiIiJDaGVjayB3aGV0aGVyIHR3byBiYXNlbGluZXMgYXJlIGRpZmZlcmVudC4K
KworICAgICAgICBBcmdzOgorICAgICAgICAgIG91dHB1dDEsIG91dHB1dDI6IGNvbnRlbnRzIG9m
IHRoZSBiYXNlbGluZXMgdG8gY29tcGFyZS4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAg
IFRydWUgaWYgdHdvIGZpbGVzIGFyZSBkaWZmZXJlbnQgb3IgaGF2ZSBkaWZmZXJlbnQgZXh0ZW5z
aW9ucy4KKyAgICAgICAgICBGYWxzZSBvdGhlcndpc2UuCisgICAgICAgICIiIgorCisgICAgICAg
IGlmIGlzX2ltYWdlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BvcnQuZGlmZl9pbWFnZShv
dXRwdXQxLCBvdXRwdXQyLCBOb25lKQorCisgICAgICAgIHJldHVybiBzZWxmLl9wb3J0LmNvbXBh
cmVfdGV4dChvdXRwdXQxLCBvdXRwdXQyKQorCisgICAgZGVmIF9kZWxldGVfYmFzZWxpbmUoc2Vs
ZiwgZmlsZW5hbWUpOgorICAgICAgICAiIiJSZW1vdmUgdGhlIGZpbGUgZnJvbSByZXBvc2l0b3J5
IGFuZCBkZWxldGUgaXQgZnJvbSBkaXNrLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgZmls
ZW5hbWU6IGZ1bGwgcGF0aCBvZiB0aGUgZmlsZSB0byBkZWxldGUuCisgICAgICAgICIiIgorCisg
ICAgICAgIGlmIG5vdCBmaWxlbmFtZSBvciBub3Qgc2VsZi5fZmlsZXN5c3RlbS5pc2ZpbGUoZmls
ZW5hbWUpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX3NjbS5kZWxldGUoZmls
ZW5hbWUpCisKKyAgICBkZWYgX2NyZWF0ZV9odG1sX2Jhc2VsaW5lX2ZpbGVzKHNlbGYsIGJhc2Vs
aW5lX2Z1bGxwYXRoKToKKyAgICAgICAgIiIiQ3JlYXRlIGJhc2VsaW5lIGZpbGVzIChvbGQsIG5l
dyBhbmQgZGlmZikgaW4gaHRtbCBkaXJlY3RvcnkuCisKKyAgICAgICAgICAgVGhlIGZpbGVzIGFy
ZSB1c2VkIHRvIGNvbXBhcmUgdGhlIHJlYmFzZWxpbmluZyByZXN1bHRzLgorCisgICAgICAgIEFy
Z3M6CisgICAgICAgICAgYmFzZWxpbmVfZnVsbHBhdGg6IGZ1bGwgcGF0aCBvZiB0aGUgZXhwZWN0
ZWQgYmFzZWxpbmUgZmlsZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgYmFzZWxpbmVfcmVscGF0
aCA9IHNlbGYuX2ZpbGVzeXN0ZW0ucmVscGF0aChiYXNlbGluZV9mdWxscGF0aCkKKyAgICAgICAg
X2xvZy5kZWJ1ZygnICBIdG1sOiBjcmVhdGUgYmFzZWxpbmVzIGZvciAiJXMiJywgYmFzZWxpbmVf
cmVscGF0aCkKKworICAgICAgICBpZiAobm90IGJhc2VsaW5lX2Z1bGxwYXRoCisgICAgICAgICAg
ICBvciBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoYmFzZWxpbmVfZnVsbHBhdGgpKToKKyAg
ICAgICAgICAgIF9sb2cuZGVidWcoJyAgSHRtbDogRG9lcyBub3QgZXhpc3Q6ICIlcyInLCBiYXNl
bGluZV9mdWxscGF0aCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBzZWxm
Ll9zY20uZXhpc3RzKGJhc2VsaW5lX3JlbHBhdGgpOgorICAgICAgICAgICAgX2xvZy5kZWJ1Zygn
ICBIdG1sOiBEb2VzIG5vdCBleGlzdCBpbiBzY206ICIlcyInLCBiYXNlbGluZV9yZWxwYXRoKQor
ICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBDb3B5IHRoZSBuZXcgYmFzZWxpbmUgdG8g
aHRtbCBkaXJlY3RvcnkgZm9yIHJlc3VsdCBjb21wYXJpc29uLgorICAgICAgICBiYXNlbGluZV9m
aWxlbmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uYmFzZW5hbWUoYmFzZWxpbmVfZnVsbHBhdGgpCisg
ICAgICAgIG5ld19maWxlID0gZ2V0X3Jlc3VsdF9maWxlX2Z1bGxwYXRoKHNlbGYuX2ZpbGVzeXN0
ZW0sIHNlbGYuX29wdGlvbnMuaHRtbF9kaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lLCBzZWxmLl9wbGF0Zm9ybSwg
J25ldycpCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0uY29weWZpbGUoYmFzZWxpbmVfZnVsbHBh
dGgsIG5ld19maWxlKQorICAgICAgICBfbG9nLmRlYnVnKCcgIEh0bWw6IGNvcGllZCBuZXcgYmFz
ZWxpbmUgZmlsZSBmcm9tICIlcyIgdG8gIiVzIi4nLAorICAgICAgICAgICAgICAgICAgYmFzZWxp
bmVfZnVsbHBhdGgsIG5ld19maWxlKQorCisgICAgICAgICMgR2V0IHRoZSBvbGQgYmFzZWxpbmUg
ZnJvbSB0aGUgcmVwb3NpdG9yeSBhbmQgc2F2ZSB0byB0aGUgaHRtbCBkaXJlY3RvcnkuCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dCA9IHNlbGYuX3NjbS5zaG93X2hlYWQoYmFzZWxp
bmVfcmVscGF0aCkKKyAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yLCBlOgorICAgICAgICAgICAg
X2xvZy53YXJuaW5nKGUpCisgICAgICAgICAgICBvdXRwdXQgPSAiIgorCisgICAgICAgIGlmIChu
b3Qgb3V0cHV0KSBvciAob3V0cHV0LnVwcGVyKCkucnN0cmlwKCkuZW5kc3dpdGgoJ05PIFNVQ0gg
RklMRSBPUiBESVJFQ1RPUlknKSk6CisgICAgICAgICAgICBfbG9nLndhcm5pbmcoJyAgTm8gYmFz
ZSBmaWxlOiAiJXMiJywgYmFzZWxpbmVfZnVsbHBhdGgpCisgICAgICAgICAgICByZXR1cm4KKyAg
ICAgICAgYmFzZV9maWxlID0gZ2V0X3Jlc3VsdF9maWxlX2Z1bGxwYXRoKHNlbGYuX2ZpbGVzeXN0
ZW0sIHNlbGYuX29wdGlvbnMuaHRtbF9kaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBiYXNlbGluZV9maWxlbmFtZSwgc2VsZi5fcGxhdGZvcm0s
ICdvbGQnKQorICAgICAgICBpZiBiYXNlX2ZpbGUudXBwZXIoKS5lbmRzd2l0aCgnLlBORycpOgor
ICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV9iaW5hcnlfZmlsZShiYXNlX2ZpbGUs
IG91dHB1dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3Jp
dGVfdGV4dF9maWxlKGJhc2VfZmlsZSwgb3V0cHV0KQorICAgICAgICBfbG9nLmRlYnVnKCcgIEh0
bWw6IGNyZWF0ZWQgb2xkIGJhc2VsaW5lIGZpbGU6ICIlcyIuJywgYmFzZV9maWxlKQorCisgICAg
ICAgICMgR2V0IHRoZSBkaWZmIGJldHdlZW4gb2xkIGFuZCBuZXcgYmFzZWxpbmVzIGFuZCBzYXZl
IHRvIHRoZSBodG1sIGRpci4KKyAgICAgICAgZGlmZl9maWxlID0gZ2V0X3Jlc3VsdF9maWxlX2Z1
bGxwYXRoKHNlbGYuX2ZpbGVzeXN0ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmh0bWxfZGlyZWN0b3J5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVfZmlsZW5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wbGF0Zm9ybSwg
J2RpZmYnKQorICAgICAgICBoYXNfZGlmZiA9IEZhbHNlCisgICAgICAgIGlmIGJhc2VsaW5lX2Zp
bGVuYW1lLnVwcGVyKCkuZW5kc3dpdGgoJy5UWFQnKToKKyAgICAgICAgICAgIG91dHB1dCA9IHNl
bGYuX3NjbS5kaWZmX2Zvcl9maWxlKGJhc2VsaW5lX3JlbHBhdGgsIGxvZz1fbG9nKQorICAgICAg
ICAgICAgaWYgb3V0cHV0OgorICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVf
dGV4dF9maWxlKGRpZmZfZmlsZSwgb3V0cHV0KQorICAgICAgICAgICAgICAgIGhhc19kaWZmID0g
VHJ1ZQorICAgICAgICBlbGlmIGJhc2VsaW5lX2ZpbGVuYW1lLnVwcGVyKCkuZW5kc3dpdGgoJy5Q
TkcnKToKKyAgICAgICAgICAgIG9sZF9maWxlID0gZ2V0X3Jlc3VsdF9maWxlX2Z1bGxwYXRoKHNl
bGYuX2ZpbGVzeXN0ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLl9vcHRpb25zLmh0bWxfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVfZmlsZW5hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wbGF0Zm9ybSwg
J29sZCcpCisgICAgICAgICAgICBuZXdfZmlsZSA9IGdldF9yZXN1bHRfZmlsZV9mdWxscGF0aChz
ZWxmLl9maWxlc3lzdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fb3B0aW9ucy5odG1sX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGxhdGZvcm0s
ICduZXcnKQorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnIEh0bWw6IGRpZmZpbmcgIiVzIiBhbmQg
IiVzIicsIG9sZF9maWxlLCBuZXdfZmlsZSkKKyAgICAgICAgICAgIG9sZF9vdXRwdXQgPSBzZWxm
Ll9maWxlc3lzdGVtLnJlYWRfYmluYXJ5X2ZpbGUob2xkX2ZpbGUpCisgICAgICAgICAgICBuZXdf
b3V0cHV0ID0gc2VsZi5fZmlsZXN5c3RlbS5yZWFkX2JpbmFyeV9maWxlKG5ld19maWxlKQorICAg
ICAgICAgICAgaGFzX2RpZmYgPSBzZWxmLl9wb3J0LmRpZmZfaW1hZ2Uob2xkX291dHB1dCwgbmV3
X291dHB1dCwgZGlmZl9maWxlKQorCisgICAgICAgIGlmIGhhc19kaWZmOgorICAgICAgICAgICAg
X2xvZy5kZWJ1ZygnICBIdG1sOiBjcmVhdGVkIGJhc2VsaW5lIGRpZmYgZmlsZTogIiVzIi4nLCBk
aWZmX2ZpbGUpCisKKworY2xhc3MgSHRtbEdlbmVyYXRvcihvYmplY3QpOgorICAgICIiIkNsYXNz
IHRvIGdlbmVyYXRlIHJlYmFzZWxpbmluZyByZXN1bHQgY29tcGFyaXNvbiBodG1sLiIiIgorCisg
ICAgSFRNTF9SRUJBU0VMSU5FID0gKCc8aHRtbD4nCisgICAgICAgICAgICAgICAgICAgICAgICc8
aGVhZD4nCisgICAgICAgICAgICAgICAgICAgICAgICc8c3R5bGU+JworICAgICAgICAgICAgICAg
ICAgICAgICAnYm9keSB7Zm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7fScKKyAgICAgICAgICAgICAg
ICAgICAgICAgJy5tYWluVGFibGUge2JhY2tncm91bmQ6ICM2NjY2NjY7fScKKyAgICAgICAgICAg
ICAgICAgICAgICAgJy5tYWluVGFibGUgdGQgLCAubWFpblRhYmxlIHRoIHtiYWNrZ3JvdW5kOiB3
aGl0ZTt9JworICAgICAgICAgICAgICAgICAgICAgICAnLmRldGFpbCB7bWFyZ2luLWxlZnQ6IDEw
cHg7IG1hcmdpbi10b3A6IDNweDt9JworICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT4n
CisgICAgICAgICAgICAgICAgICAgICAgICc8dGl0bGU+UmViYXNlbGluaW5nIFJlc3VsdCBDb21w
YXJpc29uICglKHRpbWUpcyknCisgICAgICAgICAgICAgICAgICAgICAgICc8L3RpdGxlPicKKyAg
ICAgICAgICAgICAgICAgICAgICAgJzwvaGVhZD4nCisgICAgICAgICAgICAgICAgICAgICAgICc8
Ym9keT4nCisgICAgICAgICAgICAgICAgICAgICAgICc8aDI+UmViYXNlbGluaW5nIFJlc3VsdCBD
b21wYXJpc29uICglKHRpbWUpcyk8L2gyPicKKyAgICAgICAgICAgICAgICAgICAgICAgJyUoYm9k
eSlzJworICAgICAgICAgICAgICAgICAgICAgICAnPC9ib2R5PicKKyAgICAgICAgICAgICAgICAg
ICAgICAgJzwvaHRtbD4nKQorICAgIEhUTUxfTk9fUkVCQVNFTElOSU5HX1RFU1RTID0gKAorICAg
ICAgICAnPHA+Tm8gdGVzdHMgZm91bmQgdGhhdCBuZWVkIHJlYmFzZWxpbmluZy48L3A+JykKKyAg
ICBIVE1MX1RBQkxFX1RFU1QgPSAoJzx0YWJsZSBjbGFzcz0ibWFpblRhYmxlIiBjZWxsc3BhY2lu
Zz0xIGNlbGxwYWRkaW5nPTU+JworICAgICAgICAgICAgICAgICAgICAgICAnJXM8L3RhYmxlPjxi
cj4nKQorICAgIEhUTUxfVFJfVEVTVCA9ICgnPHRyPicKKyAgICAgICAgICAgICAgICAgICAgJzx0
aCBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0NERUNERTsgYm9yZGVyLWJvdHRvbTogJworICAg
ICAgICAgICAgICAgICAgICAnMXB4IHNvbGlkIGJsYWNrOyBmb250LXNpemU6IDE4cHQ7IGZvbnQt
d2VpZ2h0OiBib2xkIiAnCisgICAgICAgICAgICAgICAgICAgICdjb2xzcGFuPSI1Ij4nCisgICAg
ICAgICAgICAgICAgICAgICc8YSBocmVmPSIlcyI+JXM8L2E+JworICAgICAgICAgICAgICAgICAg
ICAnPC90aD4nCisgICAgICAgICAgICAgICAgICAgICc8L3RyPicpCisgICAgSFRNTF9URVNUX0RF
VEFJTCA9ICgnPGRpdiBjbGFzcz0iZGV0YWlsIj4nCisgICAgICAgICAgICAgICAgICAgICAgICAn
PHRyPicKKyAgICAgICAgICAgICAgICAgICAgICAgICc8dGggd2lkdGg9IjEwMCI+QmFzZWxpbmU8
L3RoPicKKyAgICAgICAgICAgICAgICAgICAgICAgICc8dGggd2lkdGg9IjEwMCI+UGxhdGZvcm08
L3RoPicKKyAgICAgICAgICAgICAgICAgICAgICAgICc8dGggd2lkdGg9IjIwMCI+T2xkPC90aD4n
CisgICAgICAgICAgICAgICAgICAgICAgICAnPHRoIHdpZHRoPSIyMDAiPk5ldzwvdGg+JworICAg
ICAgICAgICAgICAgICAgICAgICAgJzx0aCB3aWR0aD0iMTUwIj5EaWZmZXJlbmNlPC90aD4nCisg
ICAgICAgICAgICAgICAgICAgICAgICAnPC90cj4nCisgICAgICAgICAgICAgICAgICAgICAgICAn
JXMnCisgICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JykKKyAgICBIVE1MX1REX05PTElO
SyA9ICc8dGQgYWxpZ249Y2VudGVyPjxhPiVzPC9hPjwvdGQ+JworICAgIEhUTUxfVERfTElOSyA9
ICc8dGQgYWxpZ249Y2VudGVyPjxhIGhyZWY9IiUodXJpKXMiPiUobmFtZSlzPC9hPjwvdGQ+Jwor
ICAgIEhUTUxfVERfTElOS19JTUcgPSAoJzx0ZD48YSBocmVmPSIlKHVyaSlzIj4nCisgICAgICAg
ICAgICAgICAgICAgICAgICAnPGltZyBzdHlsZT0id2lkdGg6IDIwMCIgc3JjPSIlKHVyaSlzIiAv
PjwvYT48L3RkPicpCisgICAgSFRNTF9UUiA9ICc8dHI+JXM8L3RyPicKKworICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBwb3J0LCB0YXJnZXRfcG9ydCwgb3B0aW9ucywgcGxhdGZvcm1zLCByZWJhc2Vs
aW5pbmdfdGVzdHMpOgorICAgICAgICBzZWxmLl9odG1sX2RpcmVjdG9yeSA9IG9wdGlvbnMuaHRt
bF9kaXJlY3RvcnkKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5fdGFy
Z2V0X3BvcnQgPSB0YXJnZXRfcG9ydAorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwor
ICAgICAgICBzZWxmLl9wbGF0Zm9ybXMgPSBwbGF0Zm9ybXMKKyAgICAgICAgc2VsZi5fcmViYXNl
bGluaW5nX3Rlc3RzID0gcmViYXNlbGluaW5nX3Rlc3RzCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0
ZW0gPSBwb3J0Ll9maWxlc3lzdGVtCisgICAgICAgIHNlbGYuX2h0bWxfZmlsZSA9IHNlbGYuX2Zp
bGVzeXN0ZW0uam9pbihvcHRpb25zLmh0bWxfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlYmFzZWxpbmUuaHRtbCcpCisKKyAgICBk
ZWYgYWJzcGF0aF90b191cmkoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICAiIiJDb252ZXJ0cyBh
biBhYnNvbHV0ZSBwYXRoIHRvIGEgZmlsZTogVVJJLiIiIgorICAgICAgICByZXR1cm4gcGF0aC5h
YnNwYXRoX3RvX3VyaShmaWxlbmFtZSwgc2VsZi5fcG9ydC5fZXhlY3V0aXZlKQorCisgICAgZGVm
IGdlbmVyYXRlX2h0bWwoc2VsZik6CisgICAgICAgICIiIkdlbmVyYXRlIGh0bWwgZmlsZSBmb3Ig
cmViYXNlbGluaW5nIHJlc3VsdCBjb21wYXJpc29uLiIiIgorCisgICAgICAgIF9sb2cuZGVidWco
J0dlbmVyYXRpbmcgaHRtbCBmaWxlJykKKworICAgICAgICBodG1sX2JvZHkgPSAnJworICAgICAg
ICBpZiBub3Qgc2VsZi5fcmViYXNlbGluaW5nX3Rlc3RzOgorICAgICAgICAgICAgaHRtbF9ib2R5
ICs9IHNlbGYuSFRNTF9OT19SRUJBU0VMSU5JTkdfVEVTVFMKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHRlc3RzID0gbGlzdChzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHMpCisgICAgICAgICAg
ICB0ZXN0cy5zb3J0KCkKKworICAgICAgICAgICAgdGVzdF9ubyA9IDEKKyAgICAgICAgICAgIGZv
ciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ1Rlc3QgJWQ6ICVz
JywgdGVzdF9ubywgdGVzdCkKKyAgICAgICAgICAgICAgICBodG1sX2JvZHkgKz0gc2VsZi5fZ2Vu
ZXJhdGVfaHRtbF9mb3Jfb25lX3Rlc3QodGVzdCkKKworICAgICAgICBodG1sID0gc2VsZi5IVE1M
X1JFQkFTRUxJTkUgJSAoeyd0aW1lJzogdGltZS5hc2N0aW1lKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ2JvZHknOiBodG1sX2JvZHl9KQorICAgICAgICBfbG9n
LmRlYnVnKGh0bWwpCisKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUo
c2VsZi5faHRtbF9maWxlLCBodG1sKQorICAgICAgICBfbG9nLmRlYnVnKCdCYXNlbGluZSBjb21w
YXJpc29uIGh0bWwgZ2VuZXJhdGVkIGF0ICIlcyInLCBzZWxmLl9odG1sX2ZpbGUpCisKKyAgICBk
ZWYgc2hvd19odG1sKHNlbGYpOgorICAgICAgICAiIiJMYXVuY2ggdGhlIHJlYmFzZWxpbmluZyBo
dG1sIGluIGJyd29zZXIuIiIiCisKKyAgICAgICAgX2xvZy5kZWJ1ZygnTGF1bmNoaW5nIGh0bWw6
ICIlcyInLCBzZWxmLl9odG1sX2ZpbGUpCisgICAgICAgIHNlbGYuX3BvcnQuX3VzZXIub3Blbl91
cmwoc2VsZi5faHRtbF9maWxlKQorICAgICAgICBfbG9nLmRlYnVnKCdIdG1sIGxhdW5jaGVkLicp
CisKKyAgICBkZWYgX2dlbmVyYXRlX2Jhc2VsaW5lX2xpbmtzKHNlbGYsIHRlc3RfYmFzZW5hbWUs
IHN1ZmZpeCwgcGxhdGZvcm0pOgorICAgICAgICAiIiJHZW5lcmF0ZSBsaW5rcyBmb3IgYmFzZWxp
bmUgcmVzdWx0cyAob2xkLCBuZXcgYW5kIGRpZmYpLgorCisgICAgICAgIEFyZ3M6CisgICAgICAg
ICAgdGVzdF9iYXNlbmFtZTogYmFzZSBmaWxlbmFtZSBvZiB0aGUgdGVzdAorICAgICAgICAgIHN1
ZmZpeDogYmFzZWxpbmUgZmlsZSBzdWZmaXhlczogJy50eHQnLCAnLnBuZycKKyAgICAgICAgICBw
bGF0Zm9ybTogd2luLCBsaW51eCBvciBtYWMKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAg
IGh0bWwgbGlua3MgZm9yIHNob3dpbmcgYmFzZWxpbmUgcmVzdWx0cyAob2xkLCBuZXcgYW5kIGRp
ZmYpCisgICAgICAgICIiIgorCisgICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lID0gJyVzLWV4cGVj
dGVkJXMnICUgKHRlc3RfYmFzZW5hbWUsIHN1ZmZpeCkKKyAgICAgICAgX2xvZy5kZWJ1ZygnICAg
IGJhc2VsaW5lIGZpbGVuYW1lOiAiJXMiJywgYmFzZWxpbmVfZmlsZW5hbWUpCisKKyAgICAgICAg
bmV3X2ZpbGUgPSBnZXRfcmVzdWx0X2ZpbGVfZnVsbHBhdGgoc2VsZi5fZmlsZXN5c3RlbSwgc2Vs
Zi5faHRtbF9kaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lLCBwbGF0Zm9ybSwgJ25ldycpCisgICAgICAgIF9sb2cu
ZGVidWcoJyAgICBOZXcgYmFzZWxpbmUgZmlsZTogIiVzIicsIG5ld19maWxlKQorICAgICAgICBp
ZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMobmV3X2ZpbGUpOgorICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygnICAgIE5vIG5ldyBiYXNlbGluZSBmaWxlOiAiJXMiJywgbmV3X2ZpbGUpCisgICAg
ICAgICAgICByZXR1cm4gJycKKworICAgICAgICBvbGRfZmlsZSA9IGdldF9yZXN1bHRfZmlsZV9m
dWxscGF0aChzZWxmLl9maWxlc3lzdGVtLCBzZWxmLl9odG1sX2RpcmVjdG9yeSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVfZmlsZW5hbWUsIHBs
YXRmb3JtLCAnb2xkJykKKyAgICAgICAgX2xvZy5kZWJ1ZygnICAgIE9sZCBiYXNlbGluZSBmaWxl
OiAiJXMiJywgb2xkX2ZpbGUpCisgICAgICAgIGlmIHN1ZmZpeCA9PSAnLnBuZyc6CisgICAgICAg
ICAgICBodG1sX3RkX2xpbmsgPSBzZWxmLkhUTUxfVERfTElOS19JTUcKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIGh0bWxfdGRfbGluayA9IHNlbGYuSFRNTF9URF9MSU5LCisKKyAgICAgICAg
bGlua3MgPSAnJworICAgICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhvbGRfZmlsZSk6
CisgICAgICAgICAgICBsaW5rcyArPSBodG1sX3RkX2xpbmsgJSB7CisgICAgICAgICAgICAgICAg
J3VyaSc6IHNlbGYuYWJzcGF0aF90b191cmkob2xkX2ZpbGUpLAorICAgICAgICAgICAgICAgICdu
YW1lJzogYmFzZWxpbmVfZmlsZW5hbWV9CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfbG9n
LmRlYnVnKCcgICAgTm8gb2xkIGJhc2VsaW5lIGZpbGU6ICIlcyInLCBvbGRfZmlsZSkKKyAgICAg
ICAgICAgIGxpbmtzICs9IHNlbGYuSFRNTF9URF9OT0xJTksgJSAnJworCisgICAgICAgIGxpbmtz
ICs9IGh0bWxfdGRfbGluayAlIHsndXJpJzogc2VsZi5hYnNwYXRoX3RvX3VyaShuZXdfZmlsZSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmFtZSc6IGJhc2VsaW5lX2ZpbGVu
YW1lfQorCisgICAgICAgIGRpZmZfZmlsZSA9IGdldF9yZXN1bHRfZmlsZV9mdWxscGF0aChzZWxm
Ll9maWxlc3lzdGVtLCBzZWxmLl9odG1sX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lLCBwbGF0Zm9ybSwgJ2Rp
ZmYnKQorICAgICAgICBfbG9nLmRlYnVnKCcgICAgQmFzZWxpbmUgZGlmZiBmaWxlOiAiJXMiJywg
ZGlmZl9maWxlKQorICAgICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhkaWZmX2ZpbGUp
OgorICAgICAgICAgICAgbGlua3MgKz0gaHRtbF90ZF9saW5rICUgeyd1cmknOiBzZWxmLmFic3Bh
dGhfdG9fdXJpKGRpZmZfZmlsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ25hbWUnOiAnRGlmZid9CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfbG9nLmRlYnVn
KCcgICAgTm8gYmFzZWxpbmUgZGlmZiBmaWxlOiAiJXMiJywgZGlmZl9maWxlKQorICAgICAgICAg
ICAgbGlua3MgKz0gc2VsZi5IVE1MX1REX05PTElOSyAlICcnCisKKyAgICAgICAgcmV0dXJuIGxp
bmtzCisKKyAgICBkZWYgX2dlbmVyYXRlX2h0bWxfZm9yX29uZV90ZXN0KHNlbGYsIHRlc3QpOgor
ICAgICAgICAiIiJHZW5lcmF0ZSBodG1sIGZvciBvbmUgcmViYXNlbGluaW5nIHRlc3QuCisKKyAg
ICAgICAgQXJnczoKKyAgICAgICAgICB0ZXN0OiBsYXlvdXQgdGVzdCBuYW1lCisKKyAgICAgICAg
UmV0dXJuczoKKyAgICAgICAgICBodG1sIHRoYXQgY29tcGFyZXMgYmFzZWxpbmUgcmVzdWx0cyBm
b3IgdGhlIHRlc3QuCisgICAgICAgICIiIgorCisgICAgICAgIHRlc3RfYmFzZW5hbWUgPSBzZWxm
Ll9maWxlc3lzdGVtLmJhc2VuYW1lKHNlbGYuX2ZpbGVzeXN0ZW0uc3BsaXRleHQodGVzdClbMF0p
CisgICAgICAgIF9sb2cuZGVidWcoJyAgYmFzZW5hbWU6ICIlcyInLCB0ZXN0X2Jhc2VuYW1lKQor
ICAgICAgICByb3dzID0gW10KKyAgICAgICAgZm9yIHN1ZmZpeCBpbiBCQVNFTElORV9TVUZGSVhF
UzoKKyAgICAgICAgICAgIGlmIHN1ZmZpeCA9PSAnLmNoZWNrc3VtJzoKKyAgICAgICAgICAgICAg
ICBjb250aW51ZQorCisgICAgICAgICAgICBfbG9nLmRlYnVnKCcgIENoZWNraW5nICVzIGZpbGVz
Jywgc3VmZml4KQorICAgICAgICAgICAgZm9yIHBsYXRmb3JtIGluIHNlbGYuX3BsYXRmb3JtczoK
KyAgICAgICAgICAgICAgICBsaW5rcyA9IHNlbGYuX2dlbmVyYXRlX2Jhc2VsaW5lX2xpbmtzKHRl
c3RfYmFzZW5hbWUsIHN1ZmZpeCwgcGxhdGZvcm0pCisgICAgICAgICAgICAgICAgaWYgbGlua3M6
CisgICAgICAgICAgICAgICAgICAgIHJvdyA9IHNlbGYuSFRNTF9URF9OT0xJTksgJSBzZWxmLl9n
ZXRfYmFzZWxpbmVfcmVzdWx0X3R5cGUoc3VmZml4KQorICAgICAgICAgICAgICAgICAgICByb3cg
Kz0gc2VsZi5IVE1MX1REX05PTElOSyAlIHBsYXRmb3JtCisgICAgICAgICAgICAgICAgICAgIHJv
dyArPSBsaW5rcworICAgICAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCcgICAgaHRtbCByb3c6
ICVzJywgcm93KQorCisgICAgICAgICAgICAgICAgICAgIHJvd3MuYXBwZW5kKHNlbGYuSFRNTF9U
UiAlIHJvdykKKworICAgICAgICBpZiByb3dzOgorICAgICAgICAgICAgdGVzdF9wYXRoID0gc2Vs
Zi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX3RhcmdldF9wb3J0LmxheW91dF90ZXN0c19kaXIoKSwg
dGVzdCkKKyAgICAgICAgICAgIGh0bWwgPSBzZWxmLkhUTUxfVFJfVEVTVCAlIChzZWxmLmFic3Bh
dGhfdG9fdXJpKHRlc3RfcGF0aCksIHRlc3QpCisgICAgICAgICAgICBodG1sICs9IHNlbGYuSFRN
TF9URVNUX0RFVEFJTCAlICcgJy5qb2luKHJvd3MpCisKKyAgICAgICAgICAgIF9sb2cuZGVidWco
JyAgICBodG1sIGZvciB0ZXN0OiAlcycsIGh0bWwpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5I
VE1MX1RBQkxFX1RFU1QgJSBodG1sCisKKyAgICAgICAgcmV0dXJuICcnCisKKyAgICBkZWYgX2dl
dF9iYXNlbGluZV9yZXN1bHRfdHlwZShzZWxmLCBzdWZmaXgpOgorICAgICAgICAiIiJOYW1lIG9m
IHRoZSBiYXNlbGluZSByZXN1bHQgdHlwZS4iIiIKKworICAgICAgICBpZiBzdWZmaXggPT0gJy5w
bmcnOgorICAgICAgICAgICAgcmV0dXJuICdQaXhlbCcKKyAgICAgICAgZWxpZiBzdWZmaXggPT0g
Jy50eHQnOgorICAgICAgICAgICAgcmV0dXJuICdSZW5kZXIgVHJlZScKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHJldHVybiAnT3RoZXInCisKKworZGVmIGdldF9ob3N0X3BvcnRfb2JqZWN0
KG9wdGlvbnMpOgorICAgICIiIlJldHVybiBhIHBvcnQgb2JqZWN0IGZvciB0aGUgcGxhdGZvcm0g
d2UncmUgcnVubmluZyBvbi4iIiIKKyAgICAjIFdlIHdhbnQgdGhlIEltYWdlRGlmZiBsb2dpYyB0
byBtYXRjaCB0aGF0IG9mIHRoZSBjaHJvbWl1bSBib3RzLCBzbyB3ZQorICAgICMgZm9yY2UgdGhl
IHVzZSBvZiBhIENocm9taXVtIHBvcnQuICBXZSB3aWxsIGxvb2sgZm9yIGVpdGhlciBEZWJ1ZyBv
cgorICAgICMgUmVsZWFzZSB2ZXJzaW9ucy4KKyAgICBvcHRpb25zLmNvbmZpZ3VyYXRpb24gPSAi
UmVsZWFzZSIKKyAgICBvcHRpb25zLmNocm9taXVtID0gVHJ1ZQorICAgIHBvcnRfb2JqID0gcG9y
dC5nZXQoTm9uZSwgb3B0aW9ucykKKyAgICBpZiBub3QgcG9ydF9vYmouY2hlY2tfaW1hZ2VfZGlm
ZihvdmVycmlkZV9zdGVwPU5vbmUsIGxvZ2dpbmc9RmFsc2UpOgorICAgICAgICBfbG9nLmRlYnVn
KCdObyByZWxlYXNlIHZlcnNpb24gb2YgdGhlIGltYWdlIGRpZmYgYmluYXJ5IHdhcyBmb3VuZC4n
KQorICAgICAgICBvcHRpb25zLmNvbmZpZ3VyYXRpb24gPSAiRGVidWciCisgICAgICAgIHBvcnRf
b2JqID0gcG9ydC5nZXQoTm9uZSwgb3B0aW9ucykKKyAgICAgICAgaWYgbm90IHBvcnRfb2JqLmNo
ZWNrX2ltYWdlX2RpZmYob3ZlcnJpZGVfc3RlcD1Ob25lLCBsb2dnaW5nPUZhbHNlKToKKyAgICAg
ICAgICAgIF9sb2cuZXJyb3IoJ05vIHZlcnNpb24gb2YgaW1hZ2UgZGlmZiB3YXMgZm91bmQuIENo
ZWNrIHlvdXIgYnVpbGQuJykKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBfbG9nLmRlYnVnKCdGb3VuZCB0aGUgZGVidWcgdmVyc2lvbiBvZiB0aGUg
aW1hZ2UgZGlmZiBiaW5hcnkuJykKKyAgICBlbHNlOgorICAgICAgICBfbG9nLmRlYnVnKCdGb3Vu
ZCB0aGUgcmVsZWFzZSB2ZXJzaW9uIG9mIHRoZSBpbWFnZSBkaWZmIGJpbmFyeS4nKQorICAgIHJl
dHVybiBwb3J0X29iagorCisKK2RlZiBwYXJzZV9vcHRpb25zKGFyZ3MpOgorICAgICIiIlBhcnNl
IG9wdGlvbnMgYW5kIHJldHVybiBhIHBhaXIgb2YgaG9zdCBvcHRpb25zIGFuZCB0YXJnZXQgb3B0
aW9ucy4iIiIKKyAgICBvcHRpb25fcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKKyAg
ICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy12JywgJy0tdmVyYm9zZScsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlbHA9J2luY2x1ZGUgZGVidWctbGV2ZWwgbG9nZ2luZy4nKQorCisgICAgb3B0aW9uX3BhcnNl
ci5hZGRfb3B0aW9uKCctcScsICctLXF1aWV0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0nU3VwcHJlc3MgcmVzdWx0IEhUTUwgdmlld2luZycpCisKKyAgICBvcHRpb25fcGFyc2VyLmFk
ZF9vcHRpb24oJy1wJywgJy0tcGxhdGZvcm1zJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnQ29t
bWEgZGVsaW1pdGVkIGxpc3Qgb2YgcGxhdGZvcm1zICcKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ3RoYXQgbmVlZCByZWJhc2VsaW5pbmcuJykpCisKKyAgICBvcHRpb25fcGFy
c2VyLmFkZF9vcHRpb24oJy11JywgJy0tYXJjaGl2ZV91cmwnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0PSgnaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9mL2Nocm9taXVt
LycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xheW91dF90ZXN0X3Jl
c3VsdHMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ1VybCB0byBmaW5k
IHRoZSBsYXlvdXQgdGVzdCByZXN1bHQgYXJjaGl2ZScKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJyBmaWxlLicpKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLVUn
LCAnLS1mb3JjZV9hcmNoaXZlX3VybCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl
bHA9KCdVcmwgb2YgcmVzdWx0IHppcCBmaWxlLiBUaGlzIG9wdGlvbiBpcyBmb3IgZGVidWdnaW5n
ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B1cnBvc2VzJykpCisKKyAg
ICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1iJywgJy0tYmFja3VwJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGVscD0oJ1doZXRoZXIgb3Igbm90IHRvIGJhY2t1cCB0aGUgb3JpZ2luYWwgdGVzdCcKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBleHBlY3RhdGlvbnMgZmlsZSBhZnRlciBy
ZWJhc2VsaW5lLicpKQorCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctZCcsICctLWh0
bWxfZGlyZWN0b3J5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ1RoZSBkaXJlY3RvcnkgdGhhdCBz
dG9yZXMgdGhlIHJlc3VsdHMgZm9yICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ3JlYmFzZWxpbmluZyBjb21wYXJpc29uLicpKQorCisgICAgb3B0aW9uX3BhcnNlci5hZGRf
b3B0aW9uKCcnLCAnLS11c2VfZHJ0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0
aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1G
YWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ1VzZSBJbWFnZURpZmYg
ZnJvbSBEdW1wUmVuZGVyVHJlZSBpbnN0ZWFkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ29mIGltYWdlX2RpZmYgZm9yIHBpeGVsIHRlc3RzLicpKQorCisgICAgb3B0aW9u
X3BhcnNlci5hZGRfb3B0aW9uKCctdycsICctLXdlYmtpdF9jYW5hcnknLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSgnREVQUkVDQVRFRC4gVGhpcyBmbGFnIG5vIGxvbmdlciBoYXMgYW55IGVmZmVjdC4nCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIFRoZSBjYW5hcmllcyBhcmUgYWx3
YXlzIHVzZWQuJykpCisKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJycsICctLXRhcmdl
dC1wbGF0Zm9ybScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J2Nocm9t
aXVtJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ1RoZSB0YXJnZXQgcGxh
dGZvcm0gdG8gcmViYXNlbGluZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICcoIm1hYyIsICJjaHJvbWl1bSIsICJxdCIsIGV0Yy4pLiBEZWZhdWx0cyAnCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICd0byAiY2hyb21pdW0iLicpKQorCisgICAgb3B0aW9u
cyA9IG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncyhhcmdzKVswXQorICAgIGlmIG9wdGlvbnMud2Vi
a2l0X2NhbmFyeToKKyAgICAgICAgcHJpbnQgIi13Ly0td2Via2l0LWNhbmFyeSBpcyBubyBsb25n
ZXIgbmVjZXNzYXJ5LCBpZ25vcmluZy4iCisKKyAgICB0YXJnZXRfb3B0aW9ucyA9IGNvcHkuY29w
eShvcHRpb25zKQorICAgIGlmIG9wdGlvbnMudGFyZ2V0X3BsYXRmb3JtID09ICdjaHJvbWl1bSc6
CisgICAgICAgIHRhcmdldF9vcHRpb25zLmNocm9taXVtID0gVHJ1ZQorICAgIG9wdGlvbnMudG9s
ZXJhbmNlID0gMAorCisgICAgcmV0dXJuIChvcHRpb25zLCB0YXJnZXRfb3B0aW9ucykKKworCitj
bGFzcyBEZWJ1Z0xvZ0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKKyAgICBudW1fZmFpbHVyZXMg
PSAwCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGxvZ2dpbmcuSGFuZGxlci5f
X2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVy
KGZtdD0oJyUoYXNjdGltZSlzICUoZmlsZW5hbWUpczolKGxpbmVubyktM2QgJworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyUobGV2ZWxuYW1lKXMgJSht
ZXNzYWdlKXMnKSkKKyAgICAgICAgc2VsZi5zZXRGb3JtYXR0ZXIoc2VsZi5mb3JtYXR0ZXIpCisK
KyAgICBkZWYgZW1pdChzZWxmLCByZWNvcmQpOgorICAgICAgICBpZiByZWNvcmQubGV2ZWxubyA+
IGxvZ2dpbmcuSU5GTzoKKyAgICAgICAgICAgIHNlbGYubnVtX2ZhaWx1cmVzICs9IDEKKyAgICAg
ICAgcHJpbnQgc2VsZi5mb3JtYXQocmVjb3JkKQorCisKK2NsYXNzIE5vcm1hbExvZ0hhbmRsZXIo
bG9nZ2luZy5IYW5kbGVyKToKKyAgICBsYXN0X2xldmVsbm8gPSBOb25lCisgICAgbnVtX2ZhaWx1
cmVzID0gMAorCisgICAgZGVmIGVtaXQoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgaWYgcmVjb3Jk
LmxldmVsbm8gPiBsb2dnaW5nLklORk86CisgICAgICAgICAgICBzZWxmLm51bV9mYWlsdXJlcyAr
PSAxCisgICAgICAgIGlmIHNlbGYubGFzdF9sZXZlbG5vICE9IHJlY29yZC5sZXZlbG5vOgorICAg
ICAgICAgICAgcHJpbnQKKyAgICAgICAgICAgIHNlbGYubGFzdF9sZXZlbG5vID0gcmVjb3JkLmxl
dmVsbm8KKyAgICAgICAgcHJlZml4ID0gJycKKyAgICAgICAgbXNnID0gcmVjb3JkLmdldE1lc3Nh
Z2UoKQorICAgICAgICBpZiByZWNvcmQubGV2ZWxubyA+IGxvZ2dpbmcuSU5GTyBhbmQgbXNnOgor
ICAgICAgICAgICAgcHJlZml4ID0gJyVzOiAnICUgcmVjb3JkLmxldmVsbmFtZQorICAgICAgICBw
cmludCAnJXMlcycgJSAocHJlZml4LCBtc2cpCisKKworZGVmIG1haW4oYXJncyk6CisgICAgIiIi
Qm9vdHN0cmFwIGZ1bmN0aW9uIHRoYXQgc2V0cyB1cCB0aGUgb2JqZWN0IHJlZmVyZW5jZXMgd2Ug
bmVlZCBhbmQgY2FsbHMgcmVhbF9tYWluKCkuIiIiCisgICAgb3B0aW9ucywgdGFyZ2V0X29wdGlv
bnMgPSBwYXJzZV9vcHRpb25zKGFyZ3MpCisKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dl
cigpCisgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICBpZiBvcHRpb25zLnZl
cmJvc2U6CisgICAgICAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuREVCVUcKKyAgICAgICAgbG9nX2hh
bmRsZXIgPSBEZWJ1Z0xvZ0hhbmRsZXIoKQorICAgIGVsc2U6CisgICAgICAgIGxvZ19sZXZlbCA9
IGxvZ2dpbmcuSU5GTworICAgICAgICBsb2dfaGFuZGxlciA9IE5vcm1hbExvZ0hhbmRsZXIoKQor
CisgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgIGxvZ2dlci5zZXRMZXZlbChs
b2dfbGV2ZWwpCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIobG9nX2hhbmRsZXIpCisKKyAgICB0YXJn
ZXRfcG9ydF9vYmogPSBwb3J0LmdldChOb25lLCB0YXJnZXRfb3B0aW9ucykKKyAgICBob3N0X3Bv
cnRfb2JqID0gZ2V0X2hvc3RfcG9ydF9vYmplY3Qob3B0aW9ucykKKyAgICBpZiBub3QgaG9zdF9w
b3J0X29iaiBvciBub3QgdGFyZ2V0X3BvcnRfb2JqOgorICAgICAgICByZXR1cm4gMQorCisgICAg
dXJsX2ZldGNoZXIgPSB1cmxmZXRjaGVyLlVybEZldGNoZXIoaG9zdF9wb3J0X29iai5fZmlsZXN5
c3RlbSkKKyAgICBzY21fb2JqID0gc2NtLmRlZmF1bHRfc2NtKCkKKworICAgICMgV2UgdXNlIHRo
ZSBkZWZhdWx0IHppcCBmYWN0b3J5IG1ldGhvZC4KKyAgICB6aXBfZmFjdG9yeSA9IE5vbmUKKwor
ICAgICMgRklYTUU6IFNDTSBtb2R1bGUgZG9lc24ndCBoYW5kbGUgcGF0aHMgdGhhdCBhcmVuJ3Qg
cmVsYXRpdmUgdG8gdGhlIGNoZWNrb3V0X3Jvb3QgY29uc2lzdGVudGx5LgorICAgIGhvc3RfcG9y
dF9vYmouX2ZpbGVzeXN0ZW0uY2hkaXIoc2NtX29iai5jaGVja291dF9yb290KQorCisgICAgcmV0
X2NvZGUgPSByZWFsX21haW4ob3B0aW9ucywgdGFyZ2V0X29wdGlvbnMsIGhvc3RfcG9ydF9vYmos
IHRhcmdldF9wb3J0X29iaiwgdXJsX2ZldGNoZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
emlwX2ZhY3RvcnksIHNjbV9vYmopCisgICAgaWYgbm90IHJldF9jb2RlIGFuZCBsb2dfaGFuZGxl
ci5udW1fZmFpbHVyZXM6CisgICAgICAgIHJldF9jb2RlID0gMQorICAgIHByaW50ICcnCisgICAg
aWYgcmV0X2NvZGU6CisgICAgICAgIHByaW50ICdSZWJhc2VsaW5pbmcgZmFpbGVkLicKKyAgICBl
bHNlOgorICAgICAgICBwcmludCAnUmViYXNlbGluaW5nIHN1Y2NlZWRlZC4nCisgICAgcmV0dXJu
IHJldF9jb2RlCisKKworZGVmIHJlYWxfbWFpbihvcHRpb25zLCB0YXJnZXRfb3B0aW9ucywgaG9z
dF9wb3J0X29iaiwgdGFyZ2V0X3BvcnRfb2JqLCB1cmxfZmV0Y2hlciwKKyAgICAgICAgICAgICAg
emlwX2ZhY3RvcnksIHNjbV9vYmopOgorICAgICIiIk1haW4gZnVuY3Rpb24gdG8gcHJvZHVjZSBu
ZXcgYmFzZWxpbmVzLiBUaGUgUmViYXNlbGluZXIgb2JqZWN0IHVzZXMgdHdvCisgICAgZGlmZmVy
ZW50IFBvcnQgb2JqZWN0cyAtIG9uZSB0byByZXByZXNlbnQgdGhlIG1hY2hpbmUgdGhlIG9iamVj
dCBpcyBydW5uaW5nCisgICAgb24sIGFuZCBvbmUgdG8gcmVwcmVzZW50IHRoZSBwb3J0IHdob3Nl
IGV4cGVjdGF0aW9ucyBhcmUgYmVpbmcgdXBkYXRlZC4KKyAgICBFLmcuLCB5b3UgY2FuIHJ1biB0
aGUgc2NyaXB0IG9uIGEgbWFjIGFuZCByZWJhc2VsaW5lIHRoZSAnd2luJyBwb3J0LgorCisgICAg
QXJnczoKKyAgICAgICAgb3B0aW9uczogY29tbWFuZC1saW5lIGFyZ3VtZW50IHVzZWQgZm9yIHRo
ZSBob3N0X3BvcnRfb2JqIChzZWUgYmVsb3cpCisgICAgICAgIHRhcmdldF9vcHRpb25zOiBjb21t
YW5kX2xpbmUgYXJndW1lbnQgdXNlZCBmb3IgdGhlIHRhcmdldF9wb3J0X29iai4KKyAgICAgICAg
ICAgIFRoaXMgb2JqZWN0IG1heSBoYXZlIHNsaWdodGx5IGRpZmZlcmVudCB2YWx1ZXMgdGhhbiB8
b3B0aW9uc3wuCisgICAgICAgIGhvc3RfcG9ydF9vYmo6IGEgUG9ydCBvYmplY3QgZm9yIHRoZSBw
bGF0Zm9ybSB0aGUgc2NyaXB0IGlzIHJ1bm5pbmcKKyAgICAgICAgICAgIG9uLiBUaGlzIGlzIHVz
ZWQgdG8gcHJvZHVjZSBpbWFnZSBhbmQgdGV4dCBkaWZmcywgbW9zdGx5LCBhbmQKKyAgICAgICAg
ICAgIGlzIHVzdWFsbHkgYWNxdWlyZWQgZnJvbSBnZXRfaG9zdF9wb3J0X29iaigpLgorICAgICAg
ICB0YXJnZXRfcG9ydF9vYmo6IGEgUG9ydCBvYmogcmVwcmVzZW50aW5nIHRoZSBwb3J0IGdldHRp
bmcgcmViYXNlbGluZWQuCisgICAgICAgICAgICBUaGlzIGlzIHVzZWQgdG8gZmluZCB0aGUgZXhw
ZWN0YXRpb25zIGZpbGUsIHRoZSBiYXNlbGluZSBwYXRocywKKyAgICAgICAgICAgIGV0Yy4KKyAg
ICAgICAgdXJsX2ZldGNoZXI6IG9iamVjdCB1c2VkIHRvIGRvd25sb2FkIHRoZSBidWlsZCBhcmNo
aXZlcyBmcm9tIHRoZSBib3RzCisgICAgICAgIHppcF9mYWN0b3J5OiBmYWN0b3J5IGZ1bmN0aW9u
IHVzZWQgdG8gY3JlYXRlIHppcCBmaWxlIG9iamVjdHMgZm9yCisgICAgICAgICAgICB0aGUgYXJj
aGl2ZXMuCisgICAgICAgIHNjbV9vYmo6IG9iamVjdCB1c2VkIHRvIGFkZCBuZXcgYmFzZWxpbmVz
IHRvIHRoZSBzb3VyY2UgY29udHJvbCBzeXN0ZW0uCisgICAgIiIiCisgICAgb3B0aW9ucy5odG1s
X2RpcmVjdG9yeSA9IHNldHVwX2h0bWxfZGlyZWN0b3J5KGhvc3RfcG9ydF9vYmouX2ZpbGVzeXN0
ZW0sIG9wdGlvbnMuaHRtbF9kaXJlY3RvcnkpCisgICAgYWxsX3BsYXRmb3JtcyA9IHRhcmdldF9w
b3J0X29iai5hbGxfYmFzZWxpbmVfdmFyaWFudHMoKQorICAgIGlmIG9wdGlvbnMucGxhdGZvcm1z
OgorICAgICAgICBiYWlsID0gRmFsc2UKKyAgICAgICAgZm9yIHBsYXRmb3JtIGluIG9wdGlvbnMu
cGxhdGZvcm1zOgorICAgICAgICAgICAgaWYgbm90IHBsYXRmb3JtIGluIGFsbF9wbGF0Zm9ybXM6
CisgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignSW52YWxpZCBwbGF0Zm9ybTogIiVzIicgJSAo
cGxhdGZvcm0pKQorICAgICAgICAgICAgICAgIGJhaWwgPSBUcnVlCisgICAgICAgIGlmIGJhaWw6
CisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICByZWJhc2VsaW5lX3BsYXRmb3JtcyA9IG9w
dGlvbnMucGxhdGZvcm1zCisgICAgZWxzZToKKyAgICAgICAgcmViYXNlbGluZV9wbGF0Zm9ybXMg
PSBhbGxfcGxhdGZvcm1zCisKKyAgICAjIEZJWE1FOiBUaGVzZSBsb2cgbWVzc2FnZXMgd2lsbCBi
ZSB3cm9uZyBpZiBwb3J0cyBzdG9yZSBiYXNlbGluZXMgb3V0c2lkZQorICAgICMgb2YgbGF5b3V0
X3Rlc3RzX2RpcigpLCBidXQgdGhlIGNvZGUgc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgIGxh
eW91dF90ZXN0c19kaXIgPSB0YXJnZXRfcG9ydF9vYmoubGF5b3V0X3Rlc3RzX2RpcigpCisgICAg
ZXhwZWN0YXRpb25zX3BhdGggPSB0YXJnZXRfcG9ydF9vYmoucGF0aF90b190ZXN0X2V4cGVjdGF0
aW9uc19maWxlKCkKKyAgICBfbG9nLmluZm8oJ1VzaW5nICVzJyAlIGxheW91dF90ZXN0c19kaXIp
CisgICAgX2xvZy5pbmZvKCcgIGFuZCAlcycgJSBleHBlY3RhdGlvbnNfcGF0aCkKKworICAgIHJl
YmFzZWxpbmVkX3Rlc3RzID0gc2V0KCkKKyAgICBsb2dnZWRfYmVmb3JlID0gRmFsc2UKKyAgICBm
b3IgcGxhdGZvcm0gaW4gcmViYXNlbGluZV9wbGF0Zm9ybXM6CisgICAgICAgIHJlYmFzZWxpbmVy
ID0gUmViYXNlbGluZXIoaG9zdF9wb3J0X29iaiwgdGFyZ2V0X3BvcnRfb2JqLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtLCBvcHRpb25zLCB1cmxfZmV0Y2hlciwg
emlwX2ZhY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NtX29iaiwg
bG9nZ2VkX2JlZm9yZSkKKworICAgICAgICBfbG9nLmRlYnVnKCcnKQorICAgICAgICBsb2dfZGFz
aGVkX3N0cmluZygnUmViYXNlbGluZSBzdGFydGVkJywgcGxhdGZvcm0pCisgICAgICAgIGlmIHJl
YmFzZWxpbmVyLnJ1bigpOgorICAgICAgICAgICAgbG9nX2Rhc2hlZF9zdHJpbmcoJ1JlYmFzZWxp
bmUgZG9uZScsIHBsYXRmb3JtKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nX2Rhc2hl
ZF9zdHJpbmcoJ1JlYmFzZWxpbmUgZmFpbGVkJywgcGxhdGZvcm0pCisKKyAgICAgICAgcmViYXNl
bGluZWRfdGVzdHMgfD0gc2V0KHJlYmFzZWxpbmVyLmdldF9yZWJhc2VsaW5lZF90ZXN0cygpKQor
ICAgICAgICBsb2dnZWRfYmVmb3JlID0gcmViYXNlbGluZXIuZGlkX2xvZworCisgICAgaWYgcmVi
YXNlbGluZWRfdGVzdHM6CisgICAgICAgIHJlYmFzZWxpbmVyLnJlbW92ZV9yZWJhc2VsaW5pbmdf
ZXhwZWN0YXRpb25zKHJlYmFzZWxpbmVkX3Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmJhY2t1cCkKKworICAgIF9sb2cu
ZGVidWcoJycpCisgICAgbG9nX2Rhc2hlZF9zdHJpbmcoJ1JlYmFzZWxpbmluZyByZXN1bHQgY29t
cGFyaXNvbiBzdGFydGVkJykKKyAgICBodG1sX2dlbmVyYXRvciA9IEh0bWxHZW5lcmF0b3IoaG9z
dF9wb3J0X29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3Bv
cnRfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWJhc2VsaW5lX3BsYXRmb3JtcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmViYXNlbGluZWRfdGVzdHMpCisgICAg
aHRtbF9nZW5lcmF0b3IuZ2VuZXJhdGVfaHRtbCgpCisgICAgaWYgbm90IG9wdGlvbnMucXVpZXQ6
CisgICAgICAgIGh0bWxfZ2VuZXJhdG9yLnNob3dfaHRtbCgpCisgICAgbG9nX2Rhc2hlZF9zdHJp
bmcoJ1JlYmFzZWxpbmluZyByZXN1bHQgY29tcGFyaXNvbiBkb25lJykKKworICAgIHJldHVybiAw
CisKKworaWYgJ19fbWFpbl9fJyA9PSBfX25hbWVfXzoKKyAgICBzeXMuZXhpdChtYWluKHN5cy5h
cmd2WzE6XSkpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RvX2JlX21vdmVkL3JlYmFz
ZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdG9fYmVfbW92ZWQvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJr
aXRfdGVzdHNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDg5Nzg1KQkoZnJvbSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0c191
bml0dGVzdC5weTo4OTc4NSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9fYmVfbW92ZWQv
cmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzOTAgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisjIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
IyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworIiIiVW5pdCB0ZXN0cyBmb3IgcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHku
IiIiCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LnRvb2wgaW1wb3J0IG1vY2t0
b29sCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHVybGZldGNoZXJfbW9jawor
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBmaWxlc3lzdGVtX21vY2sKK2Zyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgemlwZmlsZXNldF9tb2NrCitmcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IG91dHB1dGNhcHR1cmUKK2Zyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZSwgU2NyaXB0RXJyb3IKKworZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKK2Zyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzIGltcG9ydCByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cworCisKK2NsYXNz
IE1vY2tQb3J0KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGltYWdlX2RpZmZfZXhp
c3RzKToKKyAgICAgICAgc2VsZi5pbWFnZV9kaWZmX2V4aXN0cyA9IGltYWdlX2RpZmZfZXhpc3Rz
CisKKyAgICBkZWYgY2hlY2tfaW1hZ2VfZGlmZihzZWxmLCBvdmVycmlkZV9zdGVwLCBsb2dnaW5n
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuaW1hZ2VfZGlmZl9leGlzdHMKKworCitkZWYgZ2V0X21v
Y2tfZ2V0KGNvbmZpZ19leHBlY3RhdGlvbnMpOgorICAgIGRlZiBtb2NrX2dldChwb3J0X25hbWUs
IG9wdGlvbnMpOgorICAgICAgICByZXR1cm4gTW9ja1BvcnQoY29uZmlnX2V4cGVjdGF0aW9uc1tv
cHRpb25zLmNvbmZpZ3VyYXRpb25dKQorICAgIHJldHVybiBtb2NrX2dldAorCisKK0FSQ0hJVkVf
VVJMID0gJ2h0dHA6Ly9sb2NhbGhvc3QvbGF5b3V0X3Rlc3RfcmVzdWx0cycKKworCitkZWYgdGVz
dF9vcHRpb25zKCk6CisgICAgcmV0dXJuIG1vY2t0b29sLk1vY2tPcHRpb25zKGNvbmZpZ3VyYXRp
b249Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja3VwPUZhbHNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sX2RpcmVjdG9yeT0nL3RtcCcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdmVfdXJsPUFSQ0hJVkVfVVJMLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZV9hcmNoaXZlX3VybD1Ob25lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NlPUZhbHNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBxdWlldD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGxhdGZvcm1zPU5vbmUpCisKKworZGVmIHRlc3RfaG9zdF9wb3J0X2FuZF9m
aWxlc3lzdGVtKG9wdGlvbnMsIGV4cGVjdGF0aW9ucyk6CisgICAgZmlsZXN5c3RlbSA9IHBvcnQu
dW5pdF90ZXN0X2ZpbGVzeXN0ZW0oKQorICAgIGhvc3RfcG9ydF9vYmogPSBwb3J0LmdldCgndGVz
dCcsIG9wdGlvbnMsIGZpbGVzeXN0ZW09ZmlsZXN5c3RlbSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdXNlcj1tb2NrdG9vbC5Nb2NrVXNlcigpKQorCisgICAgZXhwZWN0YXRpb25zX3Bh
dGggPSBob3N0X3BvcnRfb2JqLnBhdGhfdG9fdGVzdF9leHBlY3RhdGlvbnNfZmlsZSgpCisgICAg
ZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoZXhwZWN0YXRpb25zX3BhdGgsIGV4cGVjdGF0aW9u
cykKKyAgICByZXR1cm4gKGhvc3RfcG9ydF9vYmosIGZpbGVzeXN0ZW0pCisKKworZGVmIHRlc3Rf
dXJsX2ZldGNoZXIoZmlsZXN5c3RlbSk6CisgICAgdXJscyA9IHsKKyAgICAgICAgQVJDSElWRV9V
UkwgKyAnL1dlYmtpdF9NYWMxMF82Lyc6ICc8YSBocmVmPSI0LyI+JywKKyAgICAgICAgQVJDSElW
RV9VUkwgKyAnL1dlYmtpdF9NYWMxMF81Lyc6ICc8YSBocmVmPSIxLyI+PGEgaHJlZj0iMi8iPics
CisgICAgICAgIEFSQ0hJVkVfVVJMICsgJy9XZWJraXRfV2luNy8nOiAnPGEgaHJlZj0iMS8iPics
CisgICAgICAgIEFSQ0hJVkVfVVJMICsgJy9XZWJraXRfVmlzdGEvJzogJzxhIGhyZWY9IjEvIj4n
LAorICAgICAgICBBUkNISVZFX1VSTCArICcvV2Via2l0X1dpbi8nOiAnPGEgaHJlZj0iMS8iPics
CisgICAgICAgIEFSQ0hJVkVfVVJMICsgJy9XZWJraXRfTGludXgvJzogJzxhIGhyZWY9IjEvIj4n
LAorICAgIH0KKyAgICByZXR1cm4gdXJsZmV0Y2hlcl9tb2NrLm1ha2VfZmV0Y2hlcl9jbHModXJs
cykoZmlsZXN5c3RlbSkKKworCitkZWYgdGVzdF96aXBfZmFjdG9yeSgpOgorICAgIHppcGhhc2hl
cyA9IHsKKyAgICAgICAgQVJDSElWRV9VUkwgKyAnL1dlYmtpdF9NYWMxMF81LzIvbGF5b3V0LXRl
c3QtcmVzdWx0cy56aXAnOiB7CisgICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWls
dXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1YWwudHh0JzogJ25ldy1pbWFnZS10eHQnLAorICAgICAg
ICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFs
LmNoZWNrc3VtJzogJ25ldy1pbWFnZS1jaGVja3N1bScsCisgICAgICAgICAgICAnbGF5b3V0LXRl
c3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1YWwucG5nJzogJ25ldy1pbWFn
ZS1wbmcnLAorICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0
ZWQvaW1hZ2VfY2hlY2tzdW0tYWN0dWFsLnR4dCc6ICdwbmctY29tbWVudC10eHQnLAorICAgICAg
ICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2VfY2hlY2tz
dW0tYWN0dWFsLmNoZWNrc3VtJzogJzAxMjM0NTY3ODknLAorICAgICAgICAgICAgJ2xheW91dC10
ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2VfY2hlY2tzdW0tYWN0dWFsLnBuZyc6
ICd0RVh0Y2hlY2tzdW1ceDAwMDEyMzQ1Njc4OScsCisgICAgICAgIH0sCisgICAgICAgIEFSQ0hJ
VkVfVVJMICsgJy9XZWJraXRfTWFjMTBfNi80L2xheW91dC10ZXN0LXJlc3VsdHMuemlwJzogewor
ICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2Ut
YWN0dWFsLnR4dCc6ICduZXctaW1hZ2UtdHh0JywKKyAgICAgICAgICAgICdsYXlvdXQtdGVzdC1y
ZXN1bHRzL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWFjdHVhbC5jaGVja3N1bSc6ICduZXctaW1h
Z2UtY2hlY2tzdW0nLAorICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMv
ZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnBuZyc6ICduZXctaW1hZ2UtcG5nJywKKyAgICAgICAgfSwK
KyAgICAgICAgQVJDSElWRV9VUkwgKyAnL1dlYmtpdF9WaXN0YS8xL2xheW91dC10ZXN0LXJlc3Vs
dHMuemlwJzogeworICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhw
ZWN0ZWQvaW1hZ2UtYWN0dWFsLnR4dCc6ICd3aW4taW1hZ2UtdHh0JywKKyAgICAgICAgICAgICds
YXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWFjdHVhbC5jaGVja3N1
bSc6ICd3aW4taW1hZ2UtY2hlY2tzdW0nLAorICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3Vs
dHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnBuZyc6ICd3aW4taW1hZ2UtcG5nJywK
KyAgICAgICAgfSwKKyAgICAgICAgQVJDSElWRV9VUkwgKyAnL1dlYmtpdF9XaW43LzEvbGF5b3V0
LXRlc3QtcmVzdWx0cy56aXAnOiB7CisgICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9m
YWlsdXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1YWwudHh0JzogJ3dpbi1pbWFnZS10eHQnLAorICAg
ICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0
dWFsLmNoZWNrc3VtJzogJ3dpbi1pbWFnZS1jaGVja3N1bScsCisgICAgICAgICAgICAnbGF5b3V0
LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1YWwucG5nJzogJ3dpbi1p
bWFnZS1wbmcnLAorICAgICAgICB9LAorICAgICAgICBBUkNISVZFX1VSTCArICcvV2Via2l0X1dp
bi8xL2xheW91dC10ZXN0LXJlc3VsdHMuemlwJzogeworICAgICAgICAgICAgJ2xheW91dC10ZXN0
LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnR4dCc6ICd3aW4taW1hZ2Ut
dHh0JywKKyAgICAgICAgICAgICdsYXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1cmVzL2V4cGVjdGVk
L2ltYWdlLWFjdHVhbC5jaGVja3N1bSc6ICd3aW4taW1hZ2UtY2hlY2tzdW0nLAorICAgICAgICAg
ICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnBu
Zyc6ICd3aW4taW1hZ2UtcG5nJywKKyAgICAgICAgfSwKKyAgICAgICAgQVJDSElWRV9VUkwgKyAn
L1dlYmtpdF9MaW51eC8xL2xheW91dC10ZXN0LXJlc3VsdHMuemlwJzogeworICAgICAgICAgICAg
J2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnR4dCc6
ICd3aW4taW1hZ2UtdHh0JywKKyAgICAgICAgICAgICdsYXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1
cmVzL2V4cGVjdGVkL2ltYWdlLWFjdHVhbC5jaGVja3N1bSc6ICd3aW4taW1hZ2UtY2hlY2tzdW0n
LAorICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1h
Z2UtYWN0dWFsLnBuZyc6ICd3aW4taW1hZ2UtcG5nJywKKyAgICAgICAgfSwKKyAgICB9CisgICAg
cmV0dXJuIHppcGZpbGVzZXRfbW9jay5tYWtlX2ZhY3RvcnkoemlwaGFzaGVzKQorCisKK2RlZiB0
ZXN0X2FyY2hpdmUob3JpZ19hcmNoaXZlX2RpY3QpOgorICAgIG5ld19hcmNoaXZlX2RpY3QgPSB7
fQorICAgIGZvciBwbGF0Zm9ybSwgZGlybmFtZSBpbiBvcmlnX2FyY2hpdmVfZGljdC5pdGVyaXRl
bXMoKToKKyAgICAgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCdjaHJvbWl1bScsICd0
ZXN0JykKKyAgICAgICAgbmV3X2FyY2hpdmVfZGljdFtwbGF0Zm9ybV0gPSBkaXJuYW1lCisgICAg
cmV0dXJuIG5ld19hcmNoaXZlX2RpY3QKKworCitjbGFzcyBUZXN0R2V0SG9zdFBvcnRPYmplY3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBhc3NlcnRfcmVzdWx0KHNlbGYsIHJlbGVhc2Vf
cHJlc2VudCwgZGVidWdfcHJlc2VudCwgdmFsaWRfcG9ydF9vYmopOgorICAgICAgICAjIFRlc3Rz
IHdoZXRoZXIgd2UgZ2V0IGEgdmFsaWQgcG9ydCBvYmplY3QgcmV0dXJuZWQgd2hlbiB3ZSBjbGFp
bQorICAgICAgICAjIHRoYXQgSW1hZ2UgZGlmZiBpcyAob3IgaXNuJ3QpIHByZXNlbnQgaW4gdGhl
IHR3byBjb25maWdzLgorICAgICAgICBwb3J0LmdldCA9IGdldF9tb2NrX2dldCh7J1JlbGVhc2Un
OiByZWxlYXNlX3ByZXNlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRGVi
dWcnOiBkZWJ1Z19wcmVzZW50fSkKKyAgICAgICAgb3B0aW9ucyA9IG1vY2t0b29sLk1vY2tPcHRp
b25zKGNvbmZpZ3VyYXRpb249Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGh0bWxfZGlyZWN0b3J5PScvdG1wJykKKyAgICAgICAgcG9ydF9vYmogPSByZWJhc2Vs
aW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5nZXRfaG9zdF9wb3J0X29iamVjdChvcHRpb25zKQor
ICAgICAgICBpZiB2YWxpZF9wb3J0X29iajoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1
YWwocG9ydF9vYmosIE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHBvcnRfb2JqLCBOb25lKQorCisgICAgZGVmIHRlc3RfZ2V0X2hvc3RfcG9ydF9vYmpl
Y3Qoc2VsZik6CisgICAgICAgICMgU2F2ZSB0aGUgbm9ybWFsIHBvcnQuZ2V0KCkgZnVuY3Rpb24g
Zm9yIGZ1dHVyZSB0ZXN0aW5nLgorICAgICAgICBvbGRfZ2V0ID0gcG9ydC5nZXQKKworICAgICAg
ICAjIFRlc3Qgd2hldGhlciB3ZSBnZXQgYSB2YWxpZCBwb3J0IG9iamVjdCBiYWNrIGZvciB0aGUg
Zm91cgorICAgICAgICAjIHBvc3NpYmxlIGNhc2VzIG9mIGhhdmluZyBJbWFnZURpZmZzIGJ1aWx0
LiBJdCBzaG91bGQgd29yayB3aGVuCisgICAgICAgICMgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGJp
bmFyeSBwcmVzZW50LgorICAgICAgICBzZWxmLmFzc2VydF9yZXN1bHQoRmFsc2UsIEZhbHNlLCBG
YWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRfcmVzdWx0KFRydWUsIEZhbHNlLCBUcnVlKQorICAg
ICAgICBzZWxmLmFzc2VydF9yZXN1bHQoRmFsc2UsIFRydWUsIFRydWUpCisgICAgICAgIHNlbGYu
YXNzZXJ0X3Jlc3VsdChUcnVlLCBUcnVlLCBUcnVlKQorCisgICAgICAgICMgUmVzdG9yZSB0aGUg
bm9ybWFsIHBvcnQuZ2V0KCkgZnVuY3Rpb24uCisgICAgICAgIHBvcnQuZ2V0ID0gb2xkX2dldAor
CisKK2NsYXNzIFRlc3RPcHRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9w
YXJzZV9vcHRpb25zKHNlbGYpOgorICAgICAgICAob3B0aW9ucywgdGFyZ2V0X29wdGlvbnMpID0g
cmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucGFyc2Vfb3B0aW9ucyhbXSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKHRhcmdldF9vcHRpb25zLmNocm9taXVtKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKG9wdGlvbnMudG9sZXJhbmNlLCAwKQorCisgICAgICAgIChvcHRpb25zLCB0
YXJnZXRfb3B0aW9ucykgPSByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5wYXJzZV9v
cHRpb25zKFsnLS10YXJnZXQtcGxhdGZvcm0nLCAncXQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRG
YWxzZShoYXNhdHRyKHRhcmdldF9vcHRpb25zLCAnY2hyb21pdW0nKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChvcHRpb25zLnRvbGVyYW5jZSwgMCkKKworCitjbGFzcyBUZXN0UmViYXNlbGlu
ZXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgaWYg
bm90IGhhc2F0dHIoc2VsZiwgJ19vcmlnX2FyY2hpdmUnKToKKyAgICAgICAgICAgIHNlbGYuX29y
aWdfYXJjaGl2ZSA9IHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLkFSQ0hJVkVfRElS
X05BTUVfRElDVAorICAgICAgICAgICAgcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMu
QVJDSElWRV9ESVJfTkFNRV9ESUNUID0gdGVzdF9hcmNoaXZlKHNlbGYuX29yaWdfYXJjaGl2ZSkK
KworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgcmViYXNlbGluZV9jaHJvbWl1bV93
ZWJraXRfdGVzdHMuQVJDSElWRV9ESVJfTkFNRV9ESUNUID0gc2VsZi5fb3JpZ19hcmNoaXZlCisK
KyAgICBkZWYgbWFrZV9yZWJhc2VsaW5lcihzZWxmLCBleHBlY3RhdGlvbnMpOgorICAgICAgICBv
cHRpb25zID0gdGVzdF9vcHRpb25zKCkKKyAgICAgICAgaG9zdF9wb3J0X29iaiwgZmlsZXN5c3Rl
bSA9IHRlc3RfaG9zdF9wb3J0X2FuZF9maWxlc3lzdGVtKG9wdGlvbnMsIGV4cGVjdGF0aW9ucykK
KworICAgICAgICB0YXJnZXRfb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgdGFyZ2V0X3BvcnRf
b2JqID0gcG9ydC5nZXQoJ3Rlc3QnLCB0YXJnZXRfb3B0aW9ucywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbT1maWxlc3lzdGVtKQorICAgICAgICB0YXJnZXRf
cG9ydF9vYmouX2V4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9ucworICAgICAgICBwbGF0Zm9ybSA9
IHRhcmdldF9wb3J0X29iai5uYW1lKCkKKworICAgICAgICB1cmxfZmV0Y2hlciA9IHRlc3RfdXJs
X2ZldGNoZXIoZmlsZXN5c3RlbSkKKyAgICAgICAgemlwX2ZhY3RvcnkgPSB0ZXN0X3ppcF9mYWN0
b3J5KCkKKyAgICAgICAgbW9ja19zY20gPSBtb2NrdG9vbC5Nb2NrU0NNKGZpbGVzeXN0ZW0pCisg
ICAgICAgIGZpbGVzeXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3RvcnkobW9ja19zY20uY2hlY2tvdXRf
cm9vdCkKKworICAgICAgICAjIEZJWE1FOiBTQ00gbW9kdWxlIGRvZXNuJ3QgaGFuZGxlIHBhdGhz
IHRoYXQgYXJlbid0IHJlbGF0aXZlIHRvIHRoZSBjaGVja291dF9yb290IGNvbnNpc3RlbnRseS4K
KyAgICAgICAgZmlsZXN5c3RlbS5jaGRpcigiL3Rlc3QuY2hlY2tvdXQiKQorCisgICAgICAgIHJl
YmFzZWxpbmVyID0gcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMuUmViYXNlbGluZXIo
aG9zdF9wb3J0X29iaiwKKyAgICAgICAgICAgIHRhcmdldF9wb3J0X29iaiwgcGxhdGZvcm0sIG9w
dGlvbnMsIHVybF9mZXRjaGVyLCB6aXBfZmFjdG9yeSwgbW9ja19zY20pCisgICAgICAgIHJldHVy
biByZWJhc2VsaW5lciwgZmlsZXN5c3RlbQorCisgICAgZGVmIHRlc3Rfbm9vcChzZWxmKToKKyAg
ICAgICAgIyB0aGlzIG1ldGhvZCB0ZXN0cyB0aGF0IHdhcyBjYW4gYXQgbGVhc3QgaW5zdGFudGlh
dGUgYW4gb2JqZWN0LCBldmVuCisgICAgICAgICMgaWYgdGhlcmUgaXMgbm90aGluZyB0byBkby4K
KyAgICAgICAgcmViYXNlbGluZXIsIGZpbGVzeXN0ZW0gPSBzZWxmLm1ha2VfcmViYXNlbGluZXIo
IiIpCisgICAgICAgIHJlYmFzZWxpbmVyLnJ1bigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
bGVuKGZpbGVzeXN0ZW0ud3JpdHRlbl9maWxlcyksIDEpCisKKyAgICBkZWYgdGVzdF9yZWJhc2Vs
aW5pbmdfdGVzdHMoc2VsZik6CisgICAgICAgIHJlYmFzZWxpbmVyLCBmaWxlc3lzdGVtID0gc2Vs
Zi5tYWtlX3JlYmFzZWxpbmVyKAorICAgICAgICAgICAgIkJVR1ggUkVCQVNFTElORSBNQUMgOiBm
YWlsdXJlcy9leHBlY3RlZC9pbWFnZS5odG1sID0gSU1BR0UiKQorICAgICAgICBjb21waWxlX3N1
Y2Nlc3MgPSByZWJhc2VsaW5lci5fY29tcGlsZV9yZWJhc2VsaW5pbmdfdGVzdHMoKQorICAgICAg
ICBzZWxmLmFzc2VydFRydWUoY29tcGlsZV9zdWNjZXNzKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHNldChbJ2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLmh0bWwnXSksIHJlYmFzZWxpbmVyLl9y
ZWJhc2VsaW5pbmdfdGVzdHMpCisKKyAgICBkZWYgdGVzdF9yZWJhc2VsaW5pbmdfdGVzdHNfc2hv
dWxkX2lnbm9yZV9yZWZ0ZXN0cyhzZWxmKToKKyAgICAgICAgcmViYXNlbGluZXIsIGZpbGVzeXN0
ZW0gPSBzZWxmLm1ha2VfcmViYXNlbGluZXIoCisgICAgICAgICAgICAiQlVHWCBSRUJBU0VMSU5F
IDogZmFpbHVyZXMvZXhwZWN0ZWQvcmVmdGVzdC5odG1sID0gSU1BR0UiKQorICAgICAgICBjb21w
aWxlX3N1Y2Nlc3MgPSByZWJhc2VsaW5lci5fY29tcGlsZV9yZWJhc2VsaW5pbmdfdGVzdHMoKQor
ICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNvbXBpbGVfc3VjY2VzcykKKyAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZShyZWJhc2VsaW5lci5fcmViYXNlbGluaW5nX3Rlc3RzKQorCisgICAgZGVmIHRl
c3Rfb25lX3BsYXRmb3JtKHNlbGYpOgorICAgICAgICByZWJhc2VsaW5lciwgZmlsZXN5c3RlbSA9
IHNlbGYubWFrZV9yZWJhc2VsaW5lcigKKyAgICAgICAgICAgICJCVUdYIFJFQkFTRUxJTkUgTUFD
IDogZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UuaHRtbCA9IElNQUdFIikKKworICAgICAgICByZWJh
c2VsaW5lci5ydW4oKQorICAgICAgICAjIFdlIGV4cGVjdCB0byBoYXZlIHdyaXR0ZW4gMTMgZmls
ZXMgb3ZlciB0aGUgY291cnNlIG9mIHRoaXMgcmViYXNlbGluZToKKyAgICAgICAgIyAqKSAzIGZp
bGVzIGluIC9fX2ltX3RtcCBmb3IgdGhlIGV4dHJhY3RlZCBhcmNoaXZlIG1lbWJlcnMKKyAgICAg
ICAgIyAqKSAzIG5ldyBiYXNlbGluZXMgdW5kZXIgJy90ZXN0LmNoZWNrb3V0L0xheW91dFRlc3Rz
JworICAgICAgICAjICopIDQgZmlsZXMgaW4gL3RtcCBmb3IgdGhlIG5ldyBhbmQgb2xkIGJhc2Vs
aW5lcyBpbiB0aGUgcmVzdWx0IGZpbGUKKyAgICAgICAgIyAgICAoLXtvbGQsbmV3fS57dHh0LHBu
Z30KKyAgICAgICAgIyAqKSAxIHRleHQgZGlmZiBpbiAvdG1wIGZvciB0aGUgcmVzdWx0IGZpbGUg
KC1kaWZmLnR4dCkuCisgICAgICAgICMgKikgMSBpbWFnZSBkaWZmIGluIC90bXAgZm9yIHRoZSBy
ZXN1bHQgZmlsZSAoLWRpZmYucG5nKS4KKyAgICAgICAgIyAqKSAxIHVwZGF0ZWQgdGVzdF9leHBl
Y3RhdGlvbnMgZmlsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmaWxlc3lzdGVtLndy
aXR0ZW5fZmlsZXMpLCAxMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZp
bGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJk
L2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWV4cGVjdGVkLmNoZWNrc3VtJ10sICduZXctaW1hZ2Ut
Y2hlY2tzdW0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzeXN0ZW0uZmlsZXNbJy90
ZXN0LmNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3QtbWFjLWxlb3BhcmQvZmFpbHVy
ZXMvZXhwZWN0ZWQvaW1hZ2UtZXhwZWN0ZWQucG5nJ10sICduZXctaW1hZ2UtcG5nJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdl
LWV4cGVjdGVkLnR4dCddLCAnbmV3LWltYWdlLXR4dCcpCisKKyAgICBkZWYgdGVzdF9hbGxfcGxh
dGZvcm1zKHNlbGYpOgorICAgICAgICByZWJhc2VsaW5lciwgZmlsZXN5c3RlbSA9IHNlbGYubWFr
ZV9yZWJhc2VsaW5lcigKKyAgICAgICAgICAgICJCVUdYIFJFQkFTRUxJTkUgOiBmYWlsdXJlcy9l
eHBlY3RlZC9pbWFnZS5odG1sID0gSU1BR0UiKQorICAgICAgICByZWJhc2VsaW5lci5ydW4oKQor
ICAgICAgICAjIFNlZSBjb21tZW50IGluIHRlc3Rfb25lX3BsYXRmb3JtIGZvciBhbiBleHBsYW5h
dGlvbiBvZiB0aGUgMTMgd3JpdHRlbiB0ZXN0cy4KKyAgICAgICAgIyBOb3RlIHRoYXQgZXZlbiB0
aG91Z2ggdGhlIHJlYmFzZWxpbmUgaXMgbWFya2VkIGZvciBhbGwgcGxhdGZvcm1zLCBlYWNoCisg
ICAgICAgICMgcmViYXNlbGluZXIgb25seSBldmVyIGRvZXMgb25lLgorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGxlbihmaWxlc3lzdGVtLndyaXR0ZW5fZmlsZXMpLCAxMykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWV4cGVj
dGVkLmNoZWNrc3VtJ10sICduZXctaW1hZ2UtY2hlY2tzdW0nKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGZpbGVzeXN0ZW0uZmlsZXNbJy90ZXN0LmNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRm
b3JtL3Rlc3QtbWFjLWxlb3BhcmQvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtZXhwZWN0ZWQucG5n
J10sICduZXctaW1hZ2UtcG5nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVt
LmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9w
YXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWV4cGVjdGVkLnR4dCddLCAnbmV3LWltYWdlLXR4
dCcpCisKKyAgICBkZWYgdGVzdF9wbmdfZmlsZV93aXRoX2NvbW1lbnQoc2VsZik6CisgICAgICAg
IHJlYmFzZWxpbmVyLCBmaWxlc3lzdGVtID0gc2VsZi5tYWtlX3JlYmFzZWxpbmVyKAorICAgICAg
ICAgICAgIkJVR1ggUkVCQVNFTElORSBNQUMgOiBmYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVj
a3N1bS5odG1sID0gSU1BR0UiKQorICAgICAgICBjb21waWxlX3N1Y2Nlc3MgPSByZWJhc2VsaW5l
ci5fY29tcGlsZV9yZWJhc2VsaW5pbmdfdGVzdHMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUo
Y29tcGlsZV9zdWNjZXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChbJ2ZhaWx1cmVz
L2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLmh0bWwnXSksIHJlYmFzZWxpbmVyLl9yZWJhc2VsaW5p
bmdfdGVzdHMpCisgICAgICAgIHJlYmFzZWxpbmVyLnJ1bigpCisgICAgICAgICMgVGhlcmUgaXMg
b25lIGxlc3MgZmlsZSB3cml0dGVuIHRoYW4gfHRlc3Rfb25lX3BsYXRmb3JtfCBiZWNhdXNlIHdl
IG9ubHkKKyAgICAgICAgIyB3cml0ZSAyIGV4cGVjdGF0aW9ucyAodGhlIHBuZyBhbmQgdGhlIHR4
dCBmaWxlKS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZmlsZXN5c3RlbS53cml0dGVu
X2ZpbGVzKSwgMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXN5c3RlbS5maWxlc1sn
L3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vdGVzdC1tYWMtbGVvcGFyZC9mYWls
dXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBlY3RlZC5wbmcnXSwgJ3RFWHRjaGVja3N1
bVx4MDAwMTIzNDU2Nzg5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZp
bGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJk
L2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLWV4cGVjdGVkLnR4dCddLCAncG5nLWNv
bW1lbnQtdHh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaWxlc3lzdGVtLmZpbGVzLmdl
dCgnL3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vdGVzdC1tYWMtbGVvcGFyZC9m
YWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBlY3RlZC5jaGVja3N1bScsIE5vbmUp
KQorCisgICAgZGVmIHRlc3RfcG5nX2ZpbGVfd2l0aF9jb21tZW50X3JlbW92ZV9vbGRfY2hlY2tz
dW0oc2VsZik6CisgICAgICAgIHJlYmFzZWxpbmVyLCBmaWxlc3lzdGVtID0gc2VsZi5tYWtlX3Jl
YmFzZWxpbmVyKAorICAgICAgICAgICAgIkJVR1ggUkVCQVNFTElORSBNQUMgOiBmYWlsdXJlcy9l
eHBlY3RlZC9pbWFnZV9jaGVja3N1bS5odG1sID0gSU1BR0UiKQorICAgICAgICBmaWxlc3lzdGVt
LmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9w
YXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLWV4cGVjdGVkLnBuZyddID0gJ29s
ZCcKKyAgICAgICAgZmlsZXN5c3RlbS5maWxlc1snL3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vdGVzdC1tYWMtbGVvcGFyZC9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1
bS1leHBlY3RlZC5jaGVja3N1bSddID0gJ29sZCcKKyAgICAgICAgZmlsZXN5c3RlbS5maWxlc1sn
L3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vdGVzdC1tYWMtbGVvcGFyZC9mYWls
dXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBlY3RlZC50eHQnXSA9ICdvbGQnCisKKyAg
ICAgICAgY29tcGlsZV9zdWNjZXNzID0gcmViYXNlbGluZXIuX2NvbXBpbGVfcmViYXNlbGluaW5n
X3Rlc3RzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbXBpbGVfc3VjY2VzcykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoWydmYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1
bS5odG1sJ10pLCByZWJhc2VsaW5lci5fcmViYXNlbGluaW5nX3Rlc3RzKQorICAgICAgICByZWJh
c2VsaW5lci5ydW4oKQorICAgICAgICAjIFRoZXJlIGlzIG9uZSBtb3JlIGZpbGUgd3JpdHRlbiB0
aGFuIHx0ZXN0X3BuZ19maWxlX3dpdGhfY29tbWVudF9yZW1vdmVfb2xkX2NoZWNrc3VtfAorICAg
ICAgICAjIGJlY2F1c2Ugd2UgYWxzbyBkZWxldGUgdGhlIG9sZCBjaGVja3N1bS4KKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChsZW4oZmlsZXN5c3RlbS53cml0dGVuX2ZpbGVzKSwgMTMpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXN5c3RlbS5maWxlc1snL3Rlc3QuY2hlY2tvdXQvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vdGVzdC1tYWMtbGVvcGFyZC9mYWlsdXJlcy9leHBlY3RlZC9pbWFn
ZV9jaGVja3N1bS1leHBlY3RlZC5wbmcnXSwgJ3RFWHRjaGVja3N1bVx4MDAwMTIzNDU2Nzg5JykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291
dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVk
L2ltYWdlX2NoZWNrc3VtLWV4cGVjdGVkLnR4dCddLCAncG5nLWNvbW1lbnQtdHh0JykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzLmdldCgnL3Rlc3QuY2hlY2tvdXQv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vdGVzdC1tYWMtbGVvcGFyZC9mYWlsdXJlcy9leHBlY3RlZC9p
bWFnZV9jaGVja3N1bS1leHBlY3RlZC5jaGVja3N1bScsIE5vbmUpLCBOb25lKQorCisgICAgZGVm
IHRlc3RfcG5nX2ZpbGVfd2l0aF9jb21tZW50X2FzX2R1cGxpY2F0ZShzZWxmKToKKyAgICAgICAg
cmViYXNlbGluZXIsIGZpbGVzeXN0ZW0gPSBzZWxmLm1ha2VfcmViYXNlbGluZXIoCisgICAgICAg
ICAgICAiQlVHWCBSRUJBU0VMSU5FIE1BQyA6IGZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNr
c3VtLmh0bWwgPSBJTUFHRSIpCisgICAgICAgIGZpbGVzeXN0ZW0uZmlsZXNbJy90ZXN0LmNoZWNr
b3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3QtbWFjLXNub3dsZW9wYXJkL2ZhaWx1cmVzL2V4
cGVjdGVkL2ltYWdlX2NoZWNrc3VtLWV4cGVjdGVkLnBuZyddID0gJ3RFWHRjaGVja3N1bVx4MDAw
MTIzNDU2Nzg5JworICAgICAgICBmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy1zbm93bGVvcGFyZC9mYWlsdXJlcy9leHBlY3RlZC9p
bWFnZV9jaGVja3N1bS1leHBlY3RlZC50eHQnXSA9ICdwbmctY29tbWVudC10eHQnCisKKyAgICAg
ICAgY29tcGlsZV9zdWNjZXNzID0gcmViYXNlbGluZXIuX2NvbXBpbGVfcmViYXNlbGluaW5nX3Rl
c3RzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbXBpbGVfc3VjY2VzcykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzZXQoWydmYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS5o
dG1sJ10pLCByZWJhc2VsaW5lci5fcmViYXNlbGluaW5nX3Rlc3RzKQorICAgICAgICByZWJhc2Vs
aW5lci5ydW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzeXN0ZW0uZmlsZXMuZ2V0
KCcvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2Zh
aWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLWV4cGVjdGVkLnBuZycsIE5vbmUpLCBOb25l
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzeXN0ZW0uZmlsZXMuZ2V0KCcvdGVzdC5j
aGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVzL2V4
cGVjdGVkL2ltYWdlX2NoZWNrc3VtLWV4cGVjdGVkLnR4dCcsIE5vbmUpLCBOb25lKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzeXN0ZW0uZmlsZXMuZ2V0KCcvdGVzdC5jaGVja291dC9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2lt
YWdlX2NoZWNrc3VtLWV4cGVjdGVkLmNoZWNrc3VtJywgTm9uZSksIE5vbmUpCisKKyAgICBkZWYg
dGVzdF9kaWZmX2Jhc2VsaW5lc190eHQoc2VsZik6CisgICAgICAgIHJlYmFzZWxpbmVyLCBmaWxl
c3lzdGVtID0gc2VsZi5tYWtlX3JlYmFzZWxpbmVyKCIiKQorICAgICAgICBwb3J0ID0gcmViYXNl
bGluZXIuX3BvcnQKKyAgICAgICAgb3V0cHV0ID0gcG9ydC5leHBlY3RlZF90ZXh0KAorICAgICAg
ICAgICAgcG9ydC5fZmlsZXN5c3RlbS5qb2luKHBvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCAncGFz
c2VzL3RleHQuaHRtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlYmFzZWxpbmVyLl9k
aWZmX2Jhc2VsaW5lcyhvdXRwdXQsIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfaW1hZ2U9RmFsc2UpKQorCisgICAgZGVmIHRl
c3RfZGlmZl9iYXNlbGluZXNfcG5nKHNlbGYpOgorICAgICAgICByZWJhc2VsaW5lciwgZmlsZXN5
c3RlbSA9IHNlbGYubWFrZV9yZWJhc2VsaW5lcignJykKKyAgICAgICAgcG9ydCA9IHJlYmFzZWxp
bmVyLl9wb3J0CisgICAgICAgIGltYWdlID0gcG9ydC5leHBlY3RlZF9pbWFnZSgKKyAgICAgICAg
ICAgIHBvcnQuX2ZpbGVzeXN0ZW0uam9pbihwb3J0LmxheW91dF90ZXN0c19kaXIoKSwgJ3Bhc3Nl
cy9pbWFnZS5odG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmViYXNlbGluZXIuX2Rp
ZmZfYmFzZWxpbmVzKGltYWdlLCBpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaXNfaW1hZ2U9VHJ1ZSkpCisKKworY2xhc3MgVGVzdFJl
YWxNYWluKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAg
IGlmIG5vdCBoYXNhdHRyKHNlbGYsICdfb3JpZ19hcmNoaXZlJyk6CisgICAgICAgICAgICBzZWxm
Ll9vcmlnX2FyY2hpdmUgPSByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5BUkNISVZF
X0RJUl9OQU1FX0RJQ1QKKyAgICAgICAgICAgIHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rl
c3RzLkFSQ0hJVkVfRElSX05BTUVfRElDVCA9IHRlc3RfYXJjaGl2ZShzZWxmLl9vcmlnX2FyY2hp
dmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHJlYmFzZWxpbmVfY2hyb21p
dW1fd2Via2l0X3Rlc3RzLkFSQ0hJVkVfRElSX05BTUVfRElDVCA9IHNlbGYuX29yaWdfYXJjaGl2
ZQorCisgICAgZGVmIHRlc3RfYWxsX3BsYXRmb3JtcyhzZWxmKToKKyAgICAgICAgZXhwZWN0YXRp
b25zID0gIkJVR1ggUkVCQVNFTElORSA6IGZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLmh0bWwgPSBJ
TUFHRSIKKworICAgICAgICBvcHRpb25zID0gdGVzdF9vcHRpb25zKCkKKyAgICAgICAgaG9zdF9w
b3J0X29iaiwgZmlsZXN5c3RlbSA9IHRlc3RfaG9zdF9wb3J0X2FuZF9maWxlc3lzdGVtKG9wdGlv
bnMsIGV4cGVjdGF0aW9ucykKKyAgICAgICAgdXJsX2ZldGNoZXIgPSB0ZXN0X3VybF9mZXRjaGVy
KGZpbGVzeXN0ZW0pCisgICAgICAgIHppcF9mYWN0b3J5ID0gdGVzdF96aXBfZmFjdG9yeSgpCisg
ICAgICAgIG1vY2tfc2NtID0gbW9ja3Rvb2wuTW9ja1NDTSgpCisgICAgICAgIGZpbGVzeXN0ZW0u
bWF5YmVfbWFrZV9kaXJlY3RvcnkobW9ja19zY20uY2hlY2tvdXRfcm9vdCkKKworICAgICAgICAj
IEZJWE1FOiBTQ00gbW9kdWxlIGRvZXNuJ3QgaGFuZGxlIHBhdGhzIHRoYXQgYXJlbid0IHJlbGF0
aXZlIHRvIHRoZSBjaGVja291dF9yb290IGNvbnNpc3RlbnRseS4KKyAgICAgICAgZmlsZXN5c3Rl
bS5jaGRpcigiL3Rlc3QuY2hlY2tvdXQiKQorCisgICAgICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5P
dXRwdXRDYXB0dXJlKCkKKyAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQorICAgICAgICByZXMg
PSByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5yZWFsX21haW4ob3B0aW9ucywgb3B0
aW9ucywKKyAgICAgICAgICAgIGhvc3RfcG9ydF9vYmosIGhvc3RfcG9ydF9vYmosIHVybF9mZXRj
aGVyLCB6aXBfZmFjdG9yeSwgbW9ja19zY20pCisgICAgICAgIG9jLnJlc3RvcmVfb3V0cHV0KCkK
KworICAgICAgICAjIFdlIGV4cGVjdCB0byBoYXZlIHdyaXR0ZW4gMzggZmlsZXMgb3ZlciB0aGUg
Y291cnNlIG9mIHRoaXMgcmViYXNlbGluZToKKyAgICAgICAgIyAqKSA2KjMgZmlsZXMgaW4gL19f
aW1fdG1wLyBmb3IgdGhlIGFyY2hpdmVkIG1lbWJlcnMgb2YgdGhlIDYgcG9ydHMKKyAgICAgICAg
IyAqKSAyKjMgZmlsZXMgaW4gL3Rlc3QuY2hlY2tvdXQgZm9yIGFjdHVhbGx5IGRpZmZlcmluZyBi
YXNlbGluZXMKKyAgICAgICAgIyAqKSAxIGZpbGUgaW4gL3Rlc3QuY2hlY2tvdXQgZm9yIHRoZSB1
cGRhdGVkIHRlc3RfZXhwZWN0YXRpb25zIGZpbGUKKyAgICAgICAgIyAqKSAyKjQgZmlsZXMgaW4g
L3RtcCBmb3IgdGhlIG9sZC9uZXcgYmFzZWxpbmVzIGZvciB0aGUgdHdvIGFjdHVhbCBwb3J0cwor
ICAgICAgICAjICopIDIgZmlsZXMgaW4gL3RtcCBmb3IgdGhlIHRleHQgZGlmZnMgZm9yIHRoZSB0
d28gcG9ydHMKKyAgICAgICAgIyAqKSAyIGZpbGVzIGluIC90bXAgZm9yIHRoZSBpbWFnZSBkaWZm
cyBmb3IgdGhlIHR3byBwb3J0cworICAgICAgICAjICopIDEgZmlsZSBpbiAvdG1wIGZvciB0aGUg
cmViYXNlbGluZSByZXN1bHRzIGh0bWwgZmlsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJl
cywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZmlsZXN5c3RlbS53cml0dGVuX2Zp
bGVzKSwgMzgpCisKKworY2xhc3MgVGVzdEh0bWxHZW5lcmF0b3IodW5pdHRlc3QuVGVzdENhc2Up
OgorICAgIGRlZiBtYWtlX2dlbmVyYXRvcihzZWxmLCBmaWxlcywgdGVzdHMpOgorICAgICAgICBv
cHRpb25zID0gbW9ja3Rvb2wuTW9ja09wdGlvbnMoY29uZmlndXJhdGlvbj1Ob25lLCBodG1sX2Rp
cmVjdG9yeT0nL3RtcCcpCisgICAgICAgIGhvc3RfcG9ydCA9IHBvcnQuZ2V0KCd0ZXN0Jywgb3B0
aW9ucywgZmlsZXN5c3RlbT1wb3J0LnVuaXRfdGVzdF9maWxlc3lzdGVtKGZpbGVzKSkKKyAgICAg
ICAgZ2VuZXJhdG9yID0gcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMuSHRtbEdlbmVy
YXRvcihob3N0X3BvcnQsCisgICAgICAgICAgICB0YXJnZXRfcG9ydD1Ob25lLCBvcHRpb25zPW9w
dGlvbnMsIHBsYXRmb3Jtcz1bJ3Rlc3QtbWFjLWxlb3BhcmQnXSwgcmViYXNlbGluaW5nX3Rlc3Rz
PXRlc3RzKQorICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLCBob3N0X3BvcnQKKworICAgIGRlZiB0
ZXN0X2dlbmVyYXRlX2Jhc2VsaW5lX2xpbmtzKHNlbGYpOgorICAgICAgICBmaWxlcyA9IHsKKyAg
ICAgICAgICAgICIvdG1wL2Zvby1leHBlY3RlZC1tYWMtb2xkLnR4dCI6ICIiLAorICAgICAgICAg
ICAgIi90bXAvZm9vLWV4cGVjdGVkLW1hYy1uZXcudHh0IjogIiIsCisgICAgICAgICAgICAiL3Rt
cC9mb28tZXhwZWN0ZWQtbWFjLWRpZmYudHh0IjogIiIsCisgICAgICAgIH0KKyAgICAgICAgdGVz
dHMgPSBbImZvby50eHQiXQorICAgICAgICBnZW5lcmF0b3IsIGhvc3RfcG9ydCA9IHNlbGYubWFr
ZV9nZW5lcmF0b3IoZmlsZXMsIHRlc3RzKQorICAgICAgICBsaW5rcyA9IGdlbmVyYXRvci5fZ2Vu
ZXJhdGVfYmFzZWxpbmVfbGlua3MoImZvbyIsICIudHh0IiwgIm1hYyIpCisgICAgICAgIGV4cGVj
dGVkX2xpbmtzID0gJzx0ZCBhbGlnbj1jZW50ZXI+PGEgaHJlZj0iZmlsZTovLy90bXAvZm9vLWV4
cGVjdGVkLW1hYy1vbGQudHh0Ij5mb28tZXhwZWN0ZWQudHh0PC9hPjwvdGQ+PHRkIGFsaWduPWNl
bnRlcj48YSBocmVmPSJmaWxlOi8vL3RtcC9mb28tZXhwZWN0ZWQtbWFjLW5ldy50eHQiPmZvby1l
eHBlY3RlZC50eHQ8L2E+PC90ZD48dGQgYWxpZ249Y2VudGVyPjxhIGhyZWY9ImZpbGU6Ly8vdG1w
L2Zvby1leHBlY3RlZC1tYWMtZGlmZi50eHQiPkRpZmY8L2E+PC90ZD4nCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwobGlua3MsIGV4cGVjdGVkX2xpbmtzKQorCisKK2lmIF9fbmFtZV9fID09ICdf
X21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3RvX2JlX21vdmVkL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9fYmVfbW92ZWQvcmVi
YXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDg5Nzkx
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b19iZV9tb3ZlZC9yZWJhc2VsaW5lX2Nocm9t
aXVtX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzks
NyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IG91dHB1CiBmcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUsIFNjcmlwdEVycm9y
CiAKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBwb3J0Ci1mcm9tIHdlYmtpdHB5
LmxheW91dF90ZXN0cyBpbXBvcnQgcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMKK2Zy
b20gd2Via2l0cHkudG9fYmVfbW92ZWQgaW1wb3J0IHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0
X3Rlc3RzCiAKIAogY2xhc3MgTW9ja1BvcnQob2JqZWN0KToK
</data>
<flag name="review"
          id="92948"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>