<?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>32971</bug_id>
          
          <creation_ts>2009-12-27 15:56:07 -0800</creation_ts>
          <short_desc>check-webkit-style: Move and rename style-related files into webkitpy/style folder</short_desc>
          <delta_ts>2010-01-07 00:37:23 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>32973</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Jerdonek">cjerdonek</reporter>
          <assigned_to name="Chris Jerdonek">cjerdonek</assigned_to>
          <cc>abarth</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>hamaji</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>175103</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2009-12-27 15:56:07 -0800</bug_when>
    <thetext>This task includes the following moves/renames:

              style.py -&gt; style/checker.py
     style_unittest.py -&gt; style/checker_unittest.py
          cpp_style.py -&gt; style/cpp.py
 cpp_style_unittest.py -&gt; style/cpp_unittest.py
          text_tyle.py -&gt; style/text.py
text_style_unittest.py -&gt; style/text_unittest.py

Also add an empty __init__.py file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175345</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2009-12-28 17:50:10 -0800</bug_when>
    <thetext>Removed brackets from bug title.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177512</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-05 18:26:39 -0800</bug_when>
    <thetext>Towards creating a style package.  We can do this after--

https://bugs.webkit.org/show_bug.cgi?id=32966</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177592</commentid>
    <comment_count>3</comment_count>
      <attachid>45963</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-06 08:48:43 -0800</bug_when>
    <thetext>Created attachment 45963
Proposed patch

To reference webkitpy modules outside of webkitpy/style, I settled on the central approach of adding the parent webkitpy directory to the style package&apos;s search path in style/__init__.py.  This is instead of using absolute or relative import statements throughout the style package.

This comes up, for example, when style/checker.py needs to import diff_parser.DiffParser.

This will minimize us needing to go in an update files in the style package as the folder hierarchy for non-style files changes.  Let me know if you have other thoughts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177593</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-06 08:49:43 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45963 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177594</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-06 08:57:22 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; This task includes the following moves/renames:
&gt; 
&gt;               style.py -&gt; style/checker.py
&gt;      style_unittest.py -&gt; style/checker_unittest.py
&gt;           cpp_style.py -&gt; style/cpp.py
&gt;  cpp_style_unittest.py -&gt; style/cpp_unittest.py
&gt;           text_tyle.py -&gt; style/text.py
&gt; text_style_unittest.py -&gt; style/text_unittest.py

I ended up doing something a bit simpler than this and left cpp_style* and
text_style* alone.  I only renamed--

&gt;               style.py -&gt; style/checker.py
&gt;      style_unittest.py -&gt; style/checker_unittest.py</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177595</commentid>
    <comment_count>6</comment_count>
      <attachid>45963</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-06 08:57:33 -0800</bug_when>
    <thetext>Comment on attachment 45963
Proposed patch

Looks sane enough.  We can change the __path__ hack to something else if a python guru has a better solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178053</commentid>
    <comment_count>7</comment_count>
      <attachid>45963</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-07 00:37:16 -0800</bug_when>
    <thetext>Comment on attachment 45963
Proposed patch

Clearing flags on attachment: 45963

Committed r52906: &lt;http://trac.webkit.org/changeset/52906&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178054</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-07 00:37:23 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45963</attachid>
            <date>2010-01-06 08:48:43 -0800</date>
            <delta_ts>2010-01-07 00:37:16 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch-tools7-1.txt</filename>
            <type>text/plain</type>
            <size>687597</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUyODU0KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNDggQEAKKzIwMTAtMDEtMDYgIENocmlzIEplcmRvbmVrICA8
Y2hyaXMuamVyZG9uZWtAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE1vdmVkIHN0eWxlLXJlbGF0ZWQgbW9kdWxlcyB0byB3ZWJraXRw
eS5zdHlsZSBzdWItcGFja2FnZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzI5NzEKKworICAgICAgICAqIFNjcmlwdHMvY2hlY2std2Via2l0LXN0
eWxlOgorICAgICAgICAgIC0gVXBkYXRlZCBpbXBvcnQgc3RhdGVtZW50LgorCisgICAgICAgICog
U2NyaXB0cy90ZXN0LXdlYmtpdHB5OgorICAgICAgICAgIC0gVXBkYXRlZCBpbXBvcnQgc3RhdGVt
ZW50cy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY3BwX3N0eWxlLnB5OiBSZW1vdmVk
LgorICAgICAgICAgIC0gTW92ZWQgdG8gd2Via2l0cHkvc3R5bGUuCisKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2NwcF9zdHlsZV91bml0dGVzdC5weTogUmVtb3ZlZC4KKyAgICAgICAgICAt
IE1vdmVkIHRvIHdlYmtpdHB5L3N0eWxlLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9z
dHlsZS5weTogUmVtb3ZlZC4KKyAgICAgICAgICAtIE1vdmVkIHRvIHdlYmtpdHB5L3N0eWxlL2No
ZWNrZXIucHkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL19faW5pdF9fLnB5
OiBBZGRlZC4KKyAgICAgICAgICAtIEFkZGVkIGNvbnRhaW5pbmcgd2Via2l0cHkgZGlyZWN0b3J5
IHRvIHBhY2thZ2Ugc2VhcmNoIHBhdGguCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2NoZWNrZXIucHk6IENvcGllZCBmcm9tIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUucHkuCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5OiBDb3Bp
ZWQgZnJvbSBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlX3VuaXR0ZXN0LnB5LgorICAgICAgICAgIC0g
VXBkYXRlZCBpbXBvcnQgc3RhdGVtZW50LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9jcHBfc3R5bGUucHk6IENvcGllZCBmcm9tIFNjcmlwdHMvd2Via2l0cHkvY3BwX3N0eWxl
LnB5LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY3BwX3N0eWxlX3VuaXR0ZXN0
LnB5OiBDb3BpZWQgZnJvbSBTY3JpcHRzL3dlYmtpdHB5L2NwcF9zdHlsZV91bml0dGVzdC5weS4K
KyAgICAgICAgICAtIFVwZGF0ZSBpbXBvcnQgc3RhdGVtZW50LgorCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9zdHlsZS90ZXh0X3N0eWxlLnB5OiBDb3BpZWQgZnJvbSBTY3JpcHRzL3dlYmtp
dHB5L3RleHRfc3R5bGUucHkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS90ZXh0
X3N0eWxlX3VuaXR0ZXN0LnB5OiBDb3BpZWQgZnJvbSBTY3JpcHRzL3dlYmtpdHB5L3RleHRfc3R5
bGVfdW5pdHRlc3QucHkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZV91bml0dGVz
dC5weTogUmVtb3ZlZC4KKyAgICAgICAgICAtIE1vdmVkIHRvIHdlYmtpdHB5L3N0eWxlL2NoZWNr
ZXJfdW5pdHRlc3QucHkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RleHRfc3R5bGUu
cHk6IFJlbW92ZWQuCisgICAgICAgICAgLSBNb3ZlZCB0byB3ZWJraXRweS9zdHlsZS4KKworICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGV4dF9zdHlsZV91bml0dGVzdC5weTogUmVtb3ZlZC4K
KyAgICAgICAgICAtIE1vdmVkIHRvIHdlYmtpdHB5L3N0eWxlLgorCiAyMDEwLTAxLTA2ICBBbmRy
YXMgQmVjc2kgIDxhYmVjc2lAaW5mLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyLgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9jaGVjay13ZWJraXQtc3R5
bGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9jaGVjay13ZWJraXQtc3R5bGUJ
KHJldmlzaW9uIDUyODQ5KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9jaGVjay13ZWJraXQtc3R5
bGUJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgaW1wb3J0IG9zCiBpbXBvcnQgb3Mu
cGF0aAogaW1wb3J0IHN5cwogCi1pbXBvcnQgd2Via2l0cHkuc3R5bGUgYXMgc3R5bGUKK2ltcG9y
dCB3ZWJraXRweS5zdHlsZS5jaGVja2VyIGFzIGNoZWNrZXIKIGZyb20gd2Via2l0cHkuc2NtIGlt
cG9ydCBkZXRlY3Rfc2NtX3N5c3RlbQogCiAKQEAgLTU5LDIwICs1OSwyMCBAQCBkZWYgbWFpbigp
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVjcy5nZXR3
cml0ZXIoJ3V0ZjgnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAncmVwbGFjZScpCiAKLSAgICBkZWZhdWx0cyA9IHN0eWxlLkFyZ3VtZW50RGVmYXVsdHMoc3R5
bGUuREVGQVVMVF9PVVRQVVRfRk9STUFULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHlsZS5ERUZBVUxUX1ZFUkJPU0lUWSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3R5bGUuV0VCS0lUX0ZJTFRFUl9SVUxFUykKKyAgICBkZWZhdWx0cyA9
IGNoZWNrZXIuQXJndW1lbnREZWZhdWx0cyhjaGVja2VyLkRFRkFVTFRfT1VUUFVUX0ZPUk1BVCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VyLkRFRkFVTFRf
VkVSQk9TSVRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNr
ZXIuV0VCS0lUX0ZJTFRFUl9SVUxFUykKIAotICAgIHBhcnNlciA9IHN0eWxlLkFyZ3VtZW50UGFy
c2VyKGRlZmF1bHRzKQorICAgIHBhcnNlciA9IGNoZWNrZXIuQXJndW1lbnRQYXJzZXIoZGVmYXVs
dHMpCiAgICAgKGZpbGVzLCBvcHRpb25zKSA9IHBhcnNlci5wYXJzZShzeXMuYXJndlsxOl0pCiAK
ICAgICAjIEZJWE1FOiBFbGltaW5hdGUgdGhlIG5lZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLgog
ICAgICMgICAgICAgIE9wdGlvbnMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHByb2Nlc3NfZmlsZSBp
bnN0ZWFkLgotICAgIHN0eWxlLnNldF9vcHRpb25zKG9wdGlvbnMpCisgICAgY2hlY2tlci5zZXRf
b3B0aW9ucyhvcHRpb25zKQogCiAgICAgaWYgZmlsZXM6CiAgICAgICAgIGZvciBmaWxlbmFtZSBp
biBmaWxlczoKLSAgICAgICAgICAgIHN0eWxlLnByb2Nlc3NfZmlsZShmaWxlbmFtZSkKKyAgICAg
ICAgICAgIGNoZWNrZXIucHJvY2Vzc19maWxlKGZpbGVuYW1lKQogCiAgICAgZWxzZToKICAgICAg
ICAgY3dkID0gb3MucGF0aC5hYnNwYXRoKCcuJykKQEAgLTg4LDEwICs4OCwxMCBAQCBkZWYgbWFp
bigpOgogICAgICAgICAgICAgcGF0Y2ggPSBzY20uY3JlYXRlX3BhdGNoX3NpbmNlX2xvY2FsX2Nv
bW1pdChjb21taXQpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBwYXRjaCA9IHNjbS5jcmVh
dGVfcGF0Y2goKQotICAgICAgICBzdHlsZS5wcm9jZXNzX3BhdGNoKHBhdGNoKQorICAgICAgICBj
aGVja2VyLnByb2Nlc3NfcGF0Y2gocGF0Y2gpCiAKLSAgICBzeXMuc3RkZXJyLndyaXRlKCdUb3Rh
bCBlcnJvcnMgZm91bmQ6ICVkXG4nICUgc3R5bGUuZXJyb3JfY291bnQoKSkKLSAgICBzeXMuZXhp
dChzdHlsZS5lcnJvcl9jb3VudCgpID4gMCkKKyAgICBzeXMuc3RkZXJyLndyaXRlKCdUb3RhbCBl
cnJvcnMgZm91bmQ6ICVkXG4nICUgY2hlY2tlci5lcnJvcl9jb3VudCgpKQorICAgIHN5cy5leGl0
KGNoZWNrZXIuZXJyb3JfY291bnQoKSA+IDApCiAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9f
IjoKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvdGVzdC13ZWJraXRweQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9TY3JpcHRzL3Rlc3Qtd2Via2l0cHkJKHJldmlzaW9uIDUyODQ5KQorKysg
V2ViS2l0VG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdHB5CSh3b3JraW5nIGNvcHkpCkBAIC00MCwx
NSArNDAsMTUgQEAgZnJvbSB3ZWJraXRweS5jb21tYW5kcy5xdWVyaWVzX3VuaXR0ZXN0IAogZnJv
bSB3ZWJraXRweS5jb21tYW5kcy5xdWV1ZXNfdW5pdHRlc3QgaW1wb3J0ICoKIGZyb20gd2Via2l0
cHkuY29tbWl0dGVyc191bml0dGVzdCBpbXBvcnQgKgogZnJvbSB3ZWJraXRweS5jcmVkZW50aWFs
c191bml0dGVzdCBpbXBvcnQgKgotZnJvbSB3ZWJraXRweS5jcHBfc3R5bGVfdW5pdHRlc3QgaW1w
b3J0ICoKK2Zyb20gd2Via2l0cHkuc3R5bGUuY3BwX3N0eWxlX3VuaXR0ZXN0IGltcG9ydCAqCiBm
cm9tIHdlYmtpdHB5LmRpZmZfcGFyc2VyX3VuaXR0ZXN0IGltcG9ydCAqCiBmcm9tIHdlYmtpdHB5
LmV4ZWN1dGl2ZV91bml0dGVzdCBpbXBvcnQgKgogZnJvbSB3ZWJraXRweS5tdWx0aWNvbW1hbmR0
b29sX3VuaXR0ZXN0IGltcG9ydCAqCiBmcm9tIHdlYmtpdHB5LnF1ZXVlZW5naW5lX3VuaXR0ZXN0
IGltcG9ydCAqCiBmcm9tIHdlYmtpdHB5LnN0ZXBzLnN0ZXBzX3VuaXR0ZXN0IGltcG9ydCAqCiBm
cm9tIHdlYmtpdHB5LnN0ZXBzLnVwZGF0ZWNoYW5nZWxvZ3N3aXRocmV2aWV3X3VuaXR0ZXN0cyBp
bXBvcnQgKgotZnJvbSB3ZWJraXRweS5zdHlsZV91bml0dGVzdCBpbXBvcnQgKgotZnJvbSB3ZWJr
aXRweS50ZXh0X3N0eWxlX3VuaXR0ZXN0IGltcG9ydCAqCitmcm9tIHdlYmtpdHB5LnN0eWxlLmNo
ZWNrZXJfdW5pdHRlc3QgaW1wb3J0ICoKK2Zyb20gd2Via2l0cHkuc3R5bGUudGV4dF9zdHlsZV91
bml0dGVzdCBpbXBvcnQgKgogZnJvbSB3ZWJraXRweS53ZWJraXRfbG9nZ2luZ191bml0dGVzdCBp
bXBvcnQgKgogZnJvbSB3ZWJraXRweS53ZWJraXRwb3J0X3VuaXR0ZXN0IGltcG9ydCAqCiAKSW5k
ZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY3BwX3N0eWxlLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY3BwX3N0eWxlLnB5CShyZXZpc2lvbiA1
Mjg0OSkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY3BwX3N0eWxlLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMwNjIgKzAsMCBAQAotIyEvdXNyL2Jpbi9weXRob24KLSMgLSotIGNv
ZGluZzogdXRmLTggLSotCi0jCi0jIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4K
LSMgQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMK
LSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0j
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0j
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0j
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLSMgVGhpcyBpcyB0aGUgbW9kaWZpZWQgdmVyc2lvbiBvZiBHb29nbGUn
cyBjcHBsaW50LiBUaGUgb3JpZ2luYWwgY29kZSBpcwotIyBodHRwOi8vZ29vZ2xlLXN0eWxlZ3Vp
ZGUuZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rL2NwcGxpbnQvY3BwbGludC5weQotCi0iIiJTdXBw
b3J0IGZvciBjaGVjay13ZWJraXQtc3R5bGUuIiIiCi0KLWltcG9ydCBjb2RlY3MKLWltcG9ydCBt
YXRoICAjIGZvciBsb2cKLWltcG9ydCBvcwotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCByZQotaW1w
b3J0IHNyZV9jb21waWxlCi1pbXBvcnQgc3RyaW5nCi1pbXBvcnQgc3lzCi1pbXBvcnQgdW5pY29k
ZWRhdGEKLQotCi0jIEhlYWRlcnMgdGhhdCB3ZSBjb25zaWRlciBTVEwgaGVhZGVycy4KLV9TVExf
SEVBREVSUyA9IGZyb3plbnNldChbCi0gICAgJ2FsZ29iYXNlLmgnLCAnYWxnb3JpdGhtJywgJ2Fs
bG9jLmgnLCAnYml0c2V0JywgJ2RlcXVlJywgJ2V4Y2VwdGlvbicsCi0gICAgJ2Z1bmN0aW9uLmgn
LCAnZnVuY3Rpb25hbCcsICdoYXNoX21hcCcsICdoYXNoX21hcC5oJywgJ2hhc2hfc2V0JywKLSAg
ICAnaGFzaF9zZXQuaCcsICdpdGVyYXRvcicsICdsaXN0JywgJ2xpc3QuaCcsICdtYXAnLCAnbWVt
b3J5JywgJ3BhaXIuaCcsCi0gICAgJ3B0aHJlYWRfYWxsb2MnLCAncXVldWUnLCAnc2V0JywgJ3Nl
dC5oJywgJ3NzdHJlYW0nLCAnc3RhY2snLAotICAgICdzdGxfYWxsb2MuaCcsICdzdGxfcmVsb3Bz
LmgnLCAndHlwZV90cmFpdHMuaCcsCi0gICAgJ3V0aWxpdHknLCAndmVjdG9yJywgJ3ZlY3Rvci5o
JywKLSAgICBdKQotCi0KLSMgTm9uLVNUTCBDKysgc3lzdGVtIGhlYWRlcnMuCi1fQ1BQX0hFQURF
UlMgPSBmcm96ZW5zZXQoWwotICAgICdhbGdvLmgnLCAnYnVpbHRpbmJ1Zi5oJywgJ2J2ZWN0b3Iu
aCcsICdjYXNzZXJ0JywgJ2NjdHlwZScsCi0gICAgJ2NlcnJubycsICdjZmxvYXQnLCAnY2lzbzY0
NicsICdjbGltaXRzJywgJ2Nsb2NhbGUnLCAnY21hdGgnLAotICAgICdjb21wbGV4JywgJ2NvbXBs
ZXguaCcsICdjc2V0am1wJywgJ2NzaWduYWwnLCAnY3N0ZGFyZycsICdjc3RkZGVmJywKLSAgICAn
Y3N0ZGlvJywgJ2NzdGRsaWInLCAnY3N0cmluZycsICdjdGltZScsICdjd2NoYXInLCAnY3djdHlw
ZScsCi0gICAgJ2RlZmFsbG9jLmgnLCAnZGVxdWUuaCcsICdlZGl0YnVmLmgnLCAnZXhjZXB0aW9u
JywgJ2ZzdHJlYW0nLAotICAgICdmc3RyZWFtLmgnLCAnaGFzaHRhYmxlLmgnLCAnaGVhcC5oJywg
J2luZHN0cmVhbS5oJywgJ2lvbWFuaXAnLAotICAgICdpb21hbmlwLmgnLCAnaW9zJywgJ2lvc2Z3
ZCcsICdpb3N0cmVhbScsICdpb3N0cmVhbS5oJywgJ2lzdHJlYW0uaCcsCi0gICAgJ2l0ZXJhdG9y
LmgnLCAnbGltaXRzJywgJ21hcC5oJywgJ211bHRpbWFwLmgnLCAnbXVsdGlzZXQuaCcsCi0gICAg
J251bWVyaWMnLCAnb3N0cmVhbS5oJywgJ3BhcnNlc3RyZWFtLmgnLCAncGZzdHJlYW0uaCcsICdQ
bG90RmlsZS5oJywKLSAgICAncHJvY2J1Zi5oJywgJ3B0aHJlYWRfYWxsb2MuaCcsICdyb3BlJywg
J3JvcGUuaCcsICdyb3BlaW1wbC5oJywKLSAgICAnU0ZpbGUuaCcsICdzbGlzdCcsICdzbGlzdC5o
JywgJ3N0YWNrLmgnLCAnc3RkZXhjZXB0JywKLSAgICAnc3RkaW9zdHJlYW0uaCcsICdzdHJlYW1i
dWYuaCcsICdzdHJlYW0uaCcsICdzdHJmaWxlLmgnLCAnc3RyaW5nJywKLSAgICAnc3Ryc3RyZWFt
JywgJ3N0cnN0cmVhbS5oJywgJ3RlbXBidWYuaCcsICd0cmVlLmgnLCAndHlwZWluZm8nLCAndmFs
YXJyYXknLAotICAgIF0pCi0KLQotIyBBc3NlcnRpb24gbWFjcm9zLiAgVGhlc2UgYXJlIGRlZmlu
ZWQgaW4gYmFzZS9sb2dnaW5nLmggYW5kCi0jIHRlc3RpbmcvYmFzZS9ndW5pdC5oLiAgTm90ZSB0
aGF0IHRoZSBfTSB2ZXJzaW9ucyBuZWVkIHRvIGNvbWUgZmlyc3QKLSMgZm9yIHN1YnN0cmluZyBt
YXRjaGluZyB0byB3b3JrLgotX0NIRUNLX01BQ1JPUyA9IFsKLSAgICAnRENIRUNLJywgJ0NIRUNL
JywKLSAgICAnRVhQRUNUX1RSVUVfTScsICdFWFBFQ1RfVFJVRScsCi0gICAgJ0FTU0VSVF9UUlVF
X00nLCAnQVNTRVJUX1RSVUUnLAotICAgICdFWFBFQ1RfRkFMU0VfTScsICdFWFBFQ1RfRkFMU0Un
LAotICAgICdBU1NFUlRfRkFMU0VfTScsICdBU1NFUlRfRkFMU0UnLAotICAgIF0KLQotIyBSZXBs
YWNlbWVudCBtYWNyb3MgZm9yIENIRUNLL0RDSEVDSy9FWFBFQ1RfVFJVRS9FWFBFQ1RfRkFMU0UK
LV9DSEVDS19SRVBMQUNFTUVOVCA9IGRpY3QoWyhtLCB7fSkgZm9yIG0gaW4gX0NIRUNLX01BQ1JP
U10pCi0KLWZvciBvcCwgcmVwbGFjZW1lbnQgaW4gWygnPT0nLCAnRVEnKSwgKCchPScsICdORScp
LAotICAgICAgICAgICAgICAgICAgICAgICAgKCc+PScsICdHRScpLCAoJz4nLCAnR1QnKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICgnPD0nLCAnTEUnKSwgKCc8JywgJ0xUJyldOgotICAgIF9D
SEVDS19SRVBMQUNFTUVOVFsnRENIRUNLJ11bb3BdID0gJ0RDSEVDS18lcycgJSByZXBsYWNlbWVu
dAotICAgIF9DSEVDS19SRVBMQUNFTUVOVFsnQ0hFQ0snXVtvcF0gPSAnQ0hFQ0tfJXMnICUgcmVw
bGFjZW1lbnQKLSAgICBfQ0hFQ0tfUkVQTEFDRU1FTlRbJ0VYUEVDVF9UUlVFJ11bb3BdID0gJ0VY
UEVDVF8lcycgJSByZXBsYWNlbWVudAotICAgIF9DSEVDS19SRVBMQUNFTUVOVFsnQVNTRVJUX1RS
VUUnXVtvcF0gPSAnQVNTRVJUXyVzJyAlIHJlcGxhY2VtZW50Ci0gICAgX0NIRUNLX1JFUExBQ0VN
RU5UWydFWFBFQ1RfVFJVRV9NJ11bb3BdID0gJ0VYUEVDVF8lc19NJyAlIHJlcGxhY2VtZW50Ci0g
ICAgX0NIRUNLX1JFUExBQ0VNRU5UWydBU1NFUlRfVFJVRV9NJ11bb3BdID0gJ0FTU0VSVF8lc19N
JyAlIHJlcGxhY2VtZW50Ci0KLWZvciBvcCwgaW52X3JlcGxhY2VtZW50IGluIFsoJz09JywgJ05F
JyksICgnIT0nLCAnRVEnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJz49JywgJ0xU
JyksICgnPicsICdMRScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnPD0nLCAnR1Qn
KSwgKCc8JywgJ0dFJyldOgotICAgIF9DSEVDS19SRVBMQUNFTUVOVFsnRVhQRUNUX0ZBTFNFJ11b
b3BdID0gJ0VYUEVDVF8lcycgJSBpbnZfcmVwbGFjZW1lbnQKLSAgICBfQ0hFQ0tfUkVQTEFDRU1F
TlRbJ0FTU0VSVF9GQUxTRSddW29wXSA9ICdBU1NFUlRfJXMnICUgaW52X3JlcGxhY2VtZW50Ci0g
ICAgX0NIRUNLX1JFUExBQ0VNRU5UWydFWFBFQ1RfRkFMU0VfTSddW29wXSA9ICdFWFBFQ1RfJXNf
TScgJSBpbnZfcmVwbGFjZW1lbnQKLSAgICBfQ0hFQ0tfUkVQTEFDRU1FTlRbJ0FTU0VSVF9GQUxT
RV9NJ11bb3BdID0gJ0FTU0VSVF8lc19NJyAlIGludl9yZXBsYWNlbWVudAotCi0KLSMgVGhlc2Ug
Y29uc3RhbnRzIGRlZmluZSB0eXBlcyBvZiBoZWFkZXJzIGZvciB1c2Ugd2l0aAotIyBfSW5jbHVk
ZVN0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcigpLgotX0NPTkZJR19IRUFERVIgPSAwCi1f
UFJJTUFSWV9IRUFERVIgPSAxCi1fT1RIRVJfSEVBREVSID0gMgotX01PQ19IRUFERVIgPSAzCi0K
LQotIyBUaGUgcmVnZXhwIGNvbXBpbGF0aW9uIGNhY2hpbmcgaXMgaW5saW5lZCBpbiBhbGwgcmVn
ZXhwIGZ1bmN0aW9ucyBmb3IKLSMgcGVyZm9ybWFuY2UgcmVhc29uczsgZmFjdG9yaW5nIGl0IG91
dCBpbnRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gdHVybnMgb3V0Ci0jIHRvIGJlIG5vdGljZWFibHkg
ZXhwZW5zaXZlLgotX3JlZ2V4cF9jb21waWxlX2NhY2hlID0ge30KLQotCi1kZWYgbWF0Y2gocGF0
dGVybiwgcyk6Ci0gICAgIiIiTWF0Y2hlcyB0aGUgc3RyaW5nIHdpdGggdGhlIHBhdHRlcm4sIGNh
Y2hpbmcgdGhlIGNvbXBpbGVkIHJlZ2V4cC4iIiIKLSAgICBpZiBub3QgcGF0dGVybiBpbiBfcmVn
ZXhwX2NvbXBpbGVfY2FjaGU6Ci0gICAgICAgIF9yZWdleHBfY29tcGlsZV9jYWNoZVtwYXR0ZXJu
XSA9IHNyZV9jb21waWxlLmNvbXBpbGUocGF0dGVybikKLSAgICByZXR1cm4gX3JlZ2V4cF9jb21w
aWxlX2NhY2hlW3BhdHRlcm5dLm1hdGNoKHMpCi0KLQotZGVmIHNlYXJjaChwYXR0ZXJuLCBzKToK
LSAgICAiIiJTZWFyY2hlcyB0aGUgc3RyaW5nIGZvciB0aGUgcGF0dGVybiwgY2FjaGluZyB0aGUg
Y29tcGlsZWQgcmVnZXhwLiIiIgotICAgIGlmIG5vdCBwYXR0ZXJuIGluIF9yZWdleHBfY29tcGls
ZV9jYWNoZToKLSAgICAgICAgX3JlZ2V4cF9jb21waWxlX2NhY2hlW3BhdHRlcm5dID0gc3JlX2Nv
bXBpbGUuY29tcGlsZShwYXR0ZXJuKQotICAgIHJldHVybiBfcmVnZXhwX2NvbXBpbGVfY2FjaGVb
cGF0dGVybl0uc2VhcmNoKHMpCi0KLQotZGVmIHN1YihwYXR0ZXJuLCByZXBsYWNlbWVudCwgcyk6
Ci0gICAgIiIiU3Vic3RpdHV0ZXMgb2NjdXJyZW5jZXMgb2YgYSBwYXR0ZXJuLCBjYWNoaW5nIHRo
ZSBjb21waWxlZCByZWdleHAuIiIiCi0gICAgaWYgbm90IHBhdHRlcm4gaW4gX3JlZ2V4cF9jb21w
aWxlX2NhY2hlOgotICAgICAgICBfcmVnZXhwX2NvbXBpbGVfY2FjaGVbcGF0dGVybl0gPSBzcmVf
Y29tcGlsZS5jb21waWxlKHBhdHRlcm4pCi0gICAgcmV0dXJuIF9yZWdleHBfY29tcGlsZV9jYWNo
ZVtwYXR0ZXJuXS5zdWIocmVwbGFjZW1lbnQsIHMpCi0KLQotZGVmIHN1Ym4ocGF0dGVybiwgcmVw
bGFjZW1lbnQsIHMpOgotICAgICIiIlN1YnN0aXR1dGVzIG9jY3VycmVuY2VzIG9mIGEgcGF0dGVy
biwgY2FjaGluZyB0aGUgY29tcGlsZWQgcmVnZXhwLiIiIgotICAgIGlmIG5vdCBwYXR0ZXJuIGlu
IF9yZWdleHBfY29tcGlsZV9jYWNoZToKLSAgICAgICAgX3JlZ2V4cF9jb21waWxlX2NhY2hlW3Bh
dHRlcm5dID0gc3JlX2NvbXBpbGUuY29tcGlsZShwYXR0ZXJuKQotICAgIHJldHVybiBfcmVnZXhw
X2NvbXBpbGVfY2FjaGVbcGF0dGVybl0uc3VibihyZXBsYWNlbWVudCwgcykKLQotCi1jbGFzcyBf
SW5jbHVkZVN0YXRlKGRpY3QpOgotICAgICIiIlRyYWNrcyBsaW5lIG51bWJlcnMgZm9yIGluY2x1
ZGVzLCBhbmQgdGhlIG9yZGVyIGluIHdoaWNoIGluY2x1ZGVzIGFwcGVhci4KLQotICAgIEFzIGEg
ZGljdCwgYW4gX0luY2x1ZGVTdGF0ZSBvYmplY3Qgc2VydmVzIGFzIGEgbWFwcGluZyBiZXR3ZWVu
IGluY2x1ZGUKLSAgICBmaWxlbmFtZSBhbmQgbGluZSBudW1iZXIgb24gd2hpY2ggdGhhdCBmaWxl
IHdhcyBpbmNsdWRlZC4KLQotICAgIENhbGwgY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKCkgb25j
ZSBmb3IgZWFjaCBoZWFkZXIgaW4gdGhlIGZpbGUsIHBhc3NpbmcKLSAgICBpbiB0aGUgdHlwZSBj
b25zdGFudHMgZGVmaW5lZCBhYm92ZS4gQ2FsbHMgaW4gYW4gaWxsZWdhbCBvcmRlciB3aWxsCi0g
ICAgcmFpc2UgYW4gX0luY2x1ZGVFcnJvciB3aXRoIGFuIGFwcHJvcHJpYXRlIGVycm9yIG1lc3Nh
Z2UuCi0KLSAgICAiIiIKLSAgICAjIHNlbGYuX3NlY3Rpb24gd2lsbCBtb3ZlIG1vbm90b25pY2Fs
bHkgdGhyb3VnaCB0aGlzIHNldC4gSWYgaXQgZXZlcgotICAgICMgbmVlZHMgdG8gbW92ZSBiYWNr
d2FyZHMsIGNoZWNrX25leHRfaW5jbHVkZV9vcmRlciB3aWxsIHJhaXNlIGFuIGVycm9yLgotICAg
IF9JTklUSUFMX1NFQ1RJT04gPSAwCi0gICAgX0NPTkZJR19TRUNUSU9OID0gMQotICAgIF9QUklN
QVJZX1NFQ1RJT04gPSAyCi0gICAgX09USEVSX1NFQ1RJT04gPSAzCi0KLSAgICBfVFlQRV9OQU1F
UyA9IHsKLSAgICAgICAgX0NPTkZJR19IRUFERVI6ICdXZWJDb3JlIGNvbmZpZy5oJywKLSAgICAg
ICAgX1BSSU1BUllfSEVBREVSOiAnaGVhZGVyIHRoaXMgZmlsZSBpbXBsZW1lbnRzJywKLSAgICAg
ICAgX09USEVSX0hFQURFUjogJ290aGVyIGhlYWRlcicsCi0gICAgICAgIF9NT0NfSEVBREVSOiAn
bW9jIGZpbGUnLAotICAgICAgICB9Ci0gICAgX1NFQ1RJT05fTkFNRVMgPSB7Ci0gICAgICAgIF9J
TklUSUFMX1NFQ1RJT046ICIuLi4gbm90aGluZy4iLAotICAgICAgICBfQ09ORklHX1NFQ1RJT046
ICJXZWJDb3JlIGNvbmZpZy5oLiIsCi0gICAgICAgIF9QUklNQVJZX1NFQ1RJT046ICdhIGhlYWRl
ciB0aGlzIGZpbGUgaW1wbGVtZW50cy4nLAotICAgICAgICBfT1RIRVJfU0VDVElPTjogJ290aGVy
IGhlYWRlci4nLAotICAgICAgICB9Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAg
IGRpY3QuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5fc2VjdGlvbiA9IHNlbGYuX0lOSVRJ
QUxfU0VDVElPTgotICAgICAgICBzZWxmLl92aXNpdGVkX3ByaW1hcnlfc2VjdGlvbiA9IEZhbHNl
Ci0gICAgICAgIHNlbGYuaGVhZGVyX3R5cGVzID0gZGljdCgpOwotCi0gICAgZGVmIHZpc2l0ZWRf
cHJpbWFyeV9zZWN0aW9uKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fdmlzaXRlZF9wcmlt
YXJ5X3NlY3Rpb24KLQotICAgIGRlZiBjaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoc2VsZiwgaGVh
ZGVyX3R5cGUsIGZpbGVfaXNfaGVhZGVyKToKLSAgICAgICAgIiIiUmV0dXJucyBhIG5vbi1lbXB0
eSBlcnJvciBtZXNzYWdlIGlmIHRoZSBuZXh0IGhlYWRlciBpcyBvdXQgb2Ygb3JkZXIuCi0KLSAg
ICAgICAgVGhpcyBmdW5jdGlvbiBhbHNvIHVwZGF0ZXMgdGhlIGludGVybmFsIHN0YXRlIHRvIGJl
IHJlYWR5IHRvIGNoZWNrCi0gICAgICAgIHRoZSBuZXh0IGluY2x1ZGUuCi0KLSAgICAgICAgQXJn
czoKLSAgICAgICAgICBoZWFkZXJfdHlwZTogT25lIG9mIHRoZSBfWFhYX0hFQURFUiBjb25zdGFu
dHMgZGVmaW5lZCBhYm92ZS4KLSAgICAgICAgICBmaWxlX2lzX2hlYWRlcjogV2hldGhlciB0aGUg
ZmlsZSB0aGF0IG93bnMgdGhpcyBfSW5jbHVkZVN0YXRlIGlzIGl0c2VsZiBhIGhlYWRlcgotCi0g
ICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgVGhlIGVtcHR5IHN0cmluZyBpZiB0aGUgaGVhZGVy
IGlzIGluIHRoZSByaWdodCBvcmRlciwgb3IgYW4KLSAgICAgICAgICBlcnJvciBtZXNzYWdlIGRl
c2NyaWJpbmcgd2hhdCdzIHdyb25nLgotCi0gICAgICAgICIiIgotICAgICAgICBpZiBoZWFkZXJf
dHlwZSA9PSBfQ09ORklHX0hFQURFUiBhbmQgZmlsZV9pc19oZWFkZXI6Ci0gICAgICAgICAgICBy
ZXR1cm4gJ0hlYWRlciBmaWxlIHNob3VsZCBub3QgY29udGFpbiBXZWJDb3JlIGNvbmZpZy5oLicK
LSAgICAgICAgaWYgaGVhZGVyX3R5cGUgPT0gX1BSSU1BUllfSEVBREVSIGFuZCBmaWxlX2lzX2hl
YWRlcjoKLSAgICAgICAgICAgIHJldHVybiAnSGVhZGVyIGZpbGUgc2hvdWxkIG5vdCBjb250YWlu
IGl0c2VsZi4nCi0gICAgICAgIGlmIGhlYWRlcl90eXBlID09IF9NT0NfSEVBREVSOgotICAgICAg
ICAgICAgcmV0dXJuICcnCi0KLSAgICAgICAgZXJyb3JfbWVzc2FnZSA9ICcnCi0gICAgICAgIGlm
IHNlbGYuX3NlY3Rpb24gIT0gc2VsZi5fT1RIRVJfU0VDVElPTjoKLSAgICAgICAgICAgIGJlZm9y
ZV9lcnJvcl9tZXNzYWdlID0gKCdGb3VuZCAlcyBiZWZvcmUgJXMnICUKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9UWVBFX05BTUVTW2hlYWRlcl90eXBlXSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9TRUNUSU9OX05BTUVTW3Nl
bGYuX3NlY3Rpb24gKyAxXSkpCi0gICAgICAgIGFmdGVyX2Vycm9yX21lc3NhZ2UgPSAoJ0ZvdW5k
ICVzIGFmdGVyICVzJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9U
WVBFX05BTUVTW2hlYWRlcl90eXBlXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX1NFQ1RJT05fTkFNRVNbc2VsZi5fc2VjdGlvbl0pKQotCi0gICAgICAgIGlmIGhlYWRl
cl90eXBlID09IF9DT05GSUdfSEVBREVSOgotICAgICAgICAgICAgaWYgc2VsZi5fc2VjdGlvbiA+
PSBzZWxmLl9DT05GSUdfU0VDVElPTjoKLSAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0g
YWZ0ZXJfZXJyb3JfbWVzc2FnZQotICAgICAgICAgICAgc2VsZi5fc2VjdGlvbiA9IHNlbGYuX0NP
TkZJR19TRUNUSU9OCi0gICAgICAgIGVsaWYgaGVhZGVyX3R5cGUgPT0gX1BSSU1BUllfSEVBREVS
OgotICAgICAgICAgICAgaWYgc2VsZi5fc2VjdGlvbiA+PSBzZWxmLl9QUklNQVJZX1NFQ1RJT046
Ci0gICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZSA9IGFmdGVyX2Vycm9yX21lc3NhZ2UKLSAg
ICAgICAgICAgIGVsaWYgc2VsZi5fc2VjdGlvbiA8IHNlbGYuX0NPTkZJR19TRUNUSU9OOgotICAg
ICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UgPSBiZWZvcmVfZXJyb3JfbWVzc2FnZQotICAgICAg
ICAgICAgc2VsZi5fc2VjdGlvbiA9IHNlbGYuX1BSSU1BUllfU0VDVElPTgotICAgICAgICAgICAg
c2VsZi5fdmlzaXRlZF9wcmltYXJ5X3NlY3Rpb24gPSBUcnVlCi0gICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICBhc3NlcnQgaGVhZGVyX3R5cGUgPT0gX09USEVSX0hFQURFUgotICAgICAgICAgICAg
aWYgbm90IGZpbGVfaXNfaGVhZGVyIGFuZCBzZWxmLl9zZWN0aW9uIDwgc2VsZi5fUFJJTUFSWV9T
RUNUSU9OOgotICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UgPSBiZWZvcmVfZXJyb3JfbWVz
c2FnZQotICAgICAgICAgICAgc2VsZi5fc2VjdGlvbiA9IHNlbGYuX09USEVSX1NFQ1RJT04KLQot
ICAgICAgICByZXR1cm4gZXJyb3JfbWVzc2FnZQotCi0KLWNsYXNzIF9DcHBTdHlsZVN0YXRlKG9i
amVjdCk6Ci0gICAgIiIiTWFpbnRhaW5zIG1vZHVsZS13aWRlIHN0YXRlLi4iIiIKLQotICAgIGRl
ZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi52ZXJib3NlX2xldmVsID0gMSAgIyBnbG9i
YWwgc2V0dGluZy4KLSAgICAgICAgc2VsZi5lcnJvcl9jb3VudCA9IDAgICAgIyBnbG9iYWwgY291
bnQgb2YgcmVwb3J0ZWQgZXJyb3JzCi0gICAgICAgICMgZmlsdGVycyB0byBhcHBseSB3aGVuIGVt
aXR0aW5nIGVycm9yIG1lc3NhZ2VzCi0gICAgICAgIHNlbGYuZmlsdGVycyA9IFtdCi0KLSAgICAg
ICAgIyBvdXRwdXQgZm9ybWF0OgotICAgICAgICAjICJlbWFjcyIgLSBmb3JtYXQgdGhhdCBlbWFj
cyBjYW4gcGFyc2UgKGRlZmF1bHQpCi0gICAgICAgICMgInZzNyIgLSBmb3JtYXQgdGhhdCBNaWNy
b3NvZnQgVmlzdWFsIFN0dWRpbyA3IGNhbiBwYXJzZQotICAgICAgICBzZWxmLm91dHB1dF9mb3Jt
YXQgPSAnZW1hY3MnCi0KLSAgICBkZWYgc2V0X291dHB1dF9mb3JtYXQoc2VsZiwgb3V0cHV0X2Zv
cm1hdCk6Ci0gICAgICAgICIiIlNldHMgdGhlIG91dHB1dCBmb3JtYXQgZm9yIGVycm9ycy4iIiIK
LSAgICAgICAgc2VsZi5vdXRwdXRfZm9ybWF0ID0gb3V0cHV0X2Zvcm1hdAotCi0gICAgZGVmIHNl
dF92ZXJib3NlX2xldmVsKHNlbGYsIGxldmVsKToKLSAgICAgICAgIiIiU2V0cyB0aGUgbW9kdWxl
J3MgdmVyYm9zaXR5LCBhbmQgcmV0dXJucyB0aGUgcHJldmlvdXMgc2V0dGluZy4iIiIKLSAgICAg
ICAgbGFzdF92ZXJib3NlX2xldmVsID0gc2VsZi52ZXJib3NlX2xldmVsCi0gICAgICAgIHNlbGYu
dmVyYm9zZV9sZXZlbCA9IGxldmVsCi0gICAgICAgIHJldHVybiBsYXN0X3ZlcmJvc2VfbGV2ZWwK
LQotICAgIGRlZiBzZXRfZmlsdGVycyhzZWxmLCBmaWx0ZXJzKToKLSAgICAgICAgIiIiU2V0cyB0
aGUgZXJyb3ItbWVzc2FnZSBmaWx0ZXJzLgotCi0gICAgICAgIFRoZXNlIGZpbHRlcnMgYXJlIGFw
cGxpZWQgd2hlbiBkZWNpZGluZyB3aGV0aGVyIHRvIGVtaXQgYSBnaXZlbgotICAgICAgICBlcnJv
ciBtZXNzYWdlLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgZmlsdGVyczogQSBsaXN0IG9m
IHN0cmluZ3MgdGhhdCBhcmUgYm9vbGVhbiBmaWx0ZXIgcnVsZXMgdXNlZAotICAgICAgICAgICAg
ICAgICAgIHRvIGRldGVybWluZSB3aGV0aGVyIGEgc3R5bGUgY2F0ZWdvcnkgc2hvdWxkIGJlIGNo
ZWNrZWQuCi0gICAgICAgICAgICAgICAgICAgRWFjaCBzdHJpbmcgc2hvdWxkIHN0YXJ0IHdpdGgg
KyBvciAtLiBBbiBleGFtcGxlCi0gICAgICAgICAgICAgICAgICAgc3RyaW5nIGlzICIrd2hpdGVz
cGFjZS9pbmRlbnQiLiBUaGUgbGlzdCBpbmNsdWRlcyBhbnkKLSAgICAgICAgICAgICAgICAgICBw
cmVwZW5kZWQgZGVmYXVsdCBmaWx0ZXIgcnVsZXMuCi0KLSAgICAgICAgUmFpc2VzOgotICAgICAg
ICAgIFZhbHVlRXJyb3I6IE5vdCBhbGwgZmlsdGVycyBzdGFydGVkIHdpdGggJysnIG9yICctJy4g
Rm9yIGV4YW1wbGUsCi0gICAgICAgICAgICAgICAgICAgICAgIi0sK3doaXRlc3BhY2UsLXdoaXRl
c3BhY2UvaW5kZW50LHdoaXRlc3BhY2UvYmFkZmlsdGVyIgotICAgICAgICAiIiIKLSAgICAgICAg
c2VsZi5maWx0ZXJzID0gW10KLSAgICAgICAgZm9yIGZpbHRlciBpbiBmaWx0ZXJzOgotICAgICAg
ICAgICAgY2xlYW5fZmlsdGVyID0gZmlsdGVyLnN0cmlwKCkKLSAgICAgICAgICAgIGlmIGNsZWFu
X2ZpbHRlcjoKLSAgICAgICAgICAgICAgICBzZWxmLmZpbHRlcnMuYXBwZW5kKGNsZWFuX2ZpbHRl
cikKLSAgICAgICAgZm9yIGZpbHRlciBpbiBzZWxmLmZpbHRlcnM6Ci0gICAgICAgICAgICBpZiBu
b3QgKGZpbHRlci5zdGFydHN3aXRoKCcrJykgb3IgZmlsdGVyLnN0YXJ0c3dpdGgoJy0nKSk6Ci0g
ICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignRXZlcnkgZmlsdGVyIGluIC0tZmlsdGVy
IG11c3Qgc3RhcnQgd2l0aCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKyBv
ciAtICglcyBkb2VzIG5vdCknICUgZmlsdGVyKQotCi0gICAgZGVmIHJlc2V0X2Vycm9yX2NvdW50
KHNlbGYpOgotICAgICAgICAiIiJTZXRzIHRoZSBtb2R1bGUncyBlcnJvciBzdGF0aXN0aWMgYmFj
ayB0byB6ZXJvLiIiIgotICAgICAgICBzZWxmLmVycm9yX2NvdW50ID0gMAotCi0gICAgZGVmIGlu
Y3JlbWVudF9lcnJvcl9jb3VudChzZWxmKToKLSAgICAgICAgIiIiQnVtcHMgdGhlIG1vZHVsZSdz
IGVycm9yIHN0YXRpc3RpYy4iIiIKLSAgICAgICAgc2VsZi5lcnJvcl9jb3VudCArPSAxCi0KLQot
X2NwcF9zdHlsZV9zdGF0ZSA9IF9DcHBTdHlsZVN0YXRlKCkKLQotCi1kZWYgX291dHB1dF9mb3Jt
YXQoKToKLSAgICAiIiJHZXRzIHRoZSBtb2R1bGUncyBvdXRwdXQgZm9ybWF0LiIiIgotICAgIHJl
dHVybiBfY3BwX3N0eWxlX3N0YXRlLm91dHB1dF9mb3JtYXQKLQotCi1kZWYgX3NldF9vdXRwdXRf
Zm9ybWF0KG91dHB1dF9mb3JtYXQpOgotICAgICIiIlNldHMgdGhlIG1vZHVsZSdzIG91dHB1dCBm
b3JtYXQuIiIiCi0gICAgX2NwcF9zdHlsZV9zdGF0ZS5zZXRfb3V0cHV0X2Zvcm1hdChvdXRwdXRf
Zm9ybWF0KQotCi0KLWRlZiBfdmVyYm9zZV9sZXZlbCgpOgotICAgICIiIlJldHVybnMgdGhlIG1v
ZHVsZSdzIHZlcmJvc2l0eSBzZXR0aW5nLiIiIgotICAgIHJldHVybiBfY3BwX3N0eWxlX3N0YXRl
LnZlcmJvc2VfbGV2ZWwKLQotCi1kZWYgX3NldF92ZXJib3NlX2xldmVsKGxldmVsKToKLSAgICAi
IiJTZXRzIHRoZSBtb2R1bGUncyB2ZXJib3NpdHksIGFuZCByZXR1cm5zIHRoZSBwcmV2aW91cyBz
ZXR0aW5nLiIiIgotICAgIHJldHVybiBfY3BwX3N0eWxlX3N0YXRlLnNldF92ZXJib3NlX2xldmVs
KGxldmVsKQotCi0KLWRlZiBfZmlsdGVycygpOgotICAgICIiIlJldHVybnMgdGhlIG1vZHVsZSdz
IGxpc3Qgb2Ygb3V0cHV0IGZpbHRlcnMsIGFzIGEgbGlzdC4iIiIKLSAgICByZXR1cm4gX2NwcF9z
dHlsZV9zdGF0ZS5maWx0ZXJzCi0KLQotZGVmIF9zZXRfZmlsdGVycyhmaWx0ZXJzKToKLSAgICAi
IiJTZXRzIHRoZSBtb2R1bGUncyBlcnJvci1tZXNzYWdlIGZpbHRlcnMuCi0KLSAgICBUaGVzZSBm
aWx0ZXJzIGFyZSBhcHBsaWVkIHdoZW4gZGVjaWRpbmcgd2hldGhlciB0byBlbWl0IGEgZ2l2ZW4K
LSAgICBlcnJvciBtZXNzYWdlLgotCi0gICAgQXJnczoKLSAgICAgIGZpbHRlcnM6IEEgbGlzdCBv
ZiBzdHJpbmdzIHRoYXQgYXJlIGJvb2xlYW4gZmlsdGVyIHJ1bGVzIHVzZWQKLSAgICAgICAgICAg
ICAgIHRvIGRldGVybWluZSB3aGV0aGVyIGEgc3R5bGUgY2F0ZWdvcnkgc2hvdWxkIGJlIGNoZWNr
ZWQuCi0gICAgICAgICAgICAgICBFYWNoIHN0cmluZyBzaG91bGQgc3RhcnQgd2l0aCArIG9yIC0u
IEFuIGV4YW1wbGUKLSAgICAgICAgICAgICAgIHN0cmluZyBpcyAiK3doaXRlc3BhY2UvaW5kZW50
Ii4gVGhlIGxpc3QgaW5jbHVkZXMgYW55Ci0gICAgICAgICAgICAgICBwcmVwZW5kZWQgZGVmYXVs
dCBmaWx0ZXIgcnVsZXMuCi0gICAgIiIiCi0gICAgX2NwcF9zdHlsZV9zdGF0ZS5zZXRfZmlsdGVy
cyhmaWx0ZXJzKQotCi0KLWRlZiBlcnJvcl9jb3VudCgpOgotICAgICIiIlJldHVybnMgdGhlIGds
b2JhbCBjb3VudCBvZiByZXBvcnRlZCBlcnJvcnMuIiIiCi0gICAgcmV0dXJuIF9jcHBfc3R5bGVf
c3RhdGUuZXJyb3JfY291bnQKLQotCi1jbGFzcyBfRnVuY3Rpb25TdGF0ZShvYmplY3QpOgotICAg
ICIiIlRyYWNrcyBjdXJyZW50IGZ1bmN0aW9uIG5hbWUgYW5kIHRoZSBudW1iZXIgb2YgbGluZXMg
aW4gaXRzIGJvZHkuIiIiCi0KLSAgICBfTk9STUFMX1RSSUdHRVIgPSAyNTAgICMgZm9yIC0tdj0w
LCA1MDAgZm9yIC0tdj0xLCBldGMuCi0gICAgX1RFU1RfVFJJR0dFUiA9IDQwMCAgICAjIGFib3V0
IDUwJSBtb3JlIHRoYW4gX05PUk1BTF9UUklHR0VSLgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYp
OgotICAgICAgICBzZWxmLmluX2FfZnVuY3Rpb24gPSBGYWxzZQotICAgICAgICBzZWxmLmxpbmVz
X2luX2Z1bmN0aW9uID0gMAotICAgICAgICBzZWxmLmN1cnJlbnRfZnVuY3Rpb24gPSAnJwotCi0g
ICAgZGVmIGJlZ2luKHNlbGYsIGZ1bmN0aW9uX25hbWUpOgotICAgICAgICAiIiJTdGFydCBhbmFs
eXppbmcgZnVuY3Rpb24gYm9keS4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgICAgZnVuY3Rp
b25fbmFtZTogVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIGJlaW5nIHRyYWNrZWQuCi0gICAgICAg
ICIiIgotICAgICAgICBzZWxmLmluX2FfZnVuY3Rpb24gPSBUcnVlCi0gICAgICAgIHNlbGYubGlu
ZXNfaW5fZnVuY3Rpb24gPSAwCi0gICAgICAgIHNlbGYuY3VycmVudF9mdW5jdGlvbiA9IGZ1bmN0
aW9uX25hbWUKLQotICAgIGRlZiBjb3VudChzZWxmKToKLSAgICAgICAgIiIiQ291bnQgbGluZSBp
biBjdXJyZW50IGZ1bmN0aW9uIGJvZHkuIiIiCi0gICAgICAgIGlmIHNlbGYuaW5fYV9mdW5jdGlv
bjoKLSAgICAgICAgICAgIHNlbGYubGluZXNfaW5fZnVuY3Rpb24gKz0gMQotCi0gICAgZGVmIGNo
ZWNrKHNlbGYsIGVycm9yLCBmaWxlbmFtZSwgbGluZV9udW1iZXIpOgotICAgICAgICAiIiJSZXBv
cnQgaWYgdG9vIG1hbnkgbGluZXMgaW4gZnVuY3Rpb24gYm9keS4KLQotICAgICAgICBBcmdzOgot
ICAgICAgICAgIGVycm9yOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91
bmQuCi0gICAgICAgICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuCi0g
ICAgICAgICAgbGluZV9udW1iZXI6IFRoZSBudW1iZXIgb2YgdGhlIGxpbmUgdG8gY2hlY2suCi0g
ICAgICAgICIiIgotICAgICAgICBpZiBtYXRjaChyJ1QoRVNUfGVzdCknLCBzZWxmLmN1cnJlbnRf
ZnVuY3Rpb24pOgotICAgICAgICAgICAgYmFzZV90cmlnZ2VyID0gc2VsZi5fVEVTVF9UUklHR0VS
Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBiYXNlX3RyaWdnZXIgPSBzZWxmLl9OT1JNQUxf
VFJJR0dFUgotICAgICAgICB0cmlnZ2VyID0gYmFzZV90cmlnZ2VyICogMiAqKiBfdmVyYm9zZV9s
ZXZlbCgpCi0KLSAgICAgICAgaWYgc2VsZi5saW5lc19pbl9mdW5jdGlvbiA+IHRyaWdnZXI6Ci0g
ICAgICAgICAgICBlcnJvcl9sZXZlbCA9IGludChtYXRoLmxvZyhzZWxmLmxpbmVzX2luX2Z1bmN0
aW9uIC8gYmFzZV90cmlnZ2VyLCAyKSkKLSAgICAgICAgICAgICMgNTAgPT4gMCwgMTAwID0+IDEs
IDIwMCA9PiAyLCA0MDAgPT4gMywgODAwID0+IDQsIDE2MDAgPT4gNSwgLi4uCi0gICAgICAgICAg
ICBpZiBlcnJvcl9sZXZlbCA+IDU6Ci0gICAgICAgICAgICAgICAgZXJyb3JfbGV2ZWwgPSA1Ci0g
ICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdyZWFkYWJpbGl0eS9mbl9z
aXplJywgZXJyb3JfbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAnU21hbGwgYW5kIGZvY3VzZWQg
ZnVuY3Rpb25zIGFyZSBwcmVmZXJyZWQ6JwotICAgICAgICAgICAgICAgICAgJyAlcyBoYXMgJWQg
bm9uLWNvbW1lbnQgbGluZXMnCi0gICAgICAgICAgICAgICAgICAnIChlcnJvciB0cmlnZ2VyZWQg
YnkgZXhjZWVkaW5nICVkIGxpbmVzKS4nICAlICgKLSAgICAgICAgICAgICAgICAgICAgICBzZWxm
LmN1cnJlbnRfZnVuY3Rpb24sIHNlbGYubGluZXNfaW5fZnVuY3Rpb24sIHRyaWdnZXIpKQotCi0g
ICAgZGVmIGVuZChzZWxmKToKLSAgICAgICAgIiIiU3RvcCBhbmFsaXppbmcgZnVuY3Rpb24gYm9k
eS4iIiIKLSAgICAgICAgc2VsZi5pbl9hX2Z1bmN0aW9uID0gRmFsc2UKLQotCi1jbGFzcyBfSW5j
bHVkZUVycm9yKEV4Y2VwdGlvbik6Ci0gICAgIiIiSW5kaWNhdGVzIGEgcHJvYmxlbSB3aXRoIHRo
ZSBpbmNsdWRlIG9yZGVyIGluIGEgZmlsZS4iIiIKLSAgICBwYXNzCi0KLQotY2xhc3MgRmlsZUlu
Zm86Ci0gICAgIiIiUHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGZpbGVuYW1lcy4KLQot
ICAgIEZpbGVJbmZvIHByb3ZpZGVzIGVhc3kgYWNjZXNzIHRvIHRoZSBjb21wb25lbnRzIG9mIGEg
ZmlsZSdzIHBhdGgKLSAgICByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCByb290LgotICAgICIiIgot
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lKToKLSAgICAgICAgc2VsZi5fZmlsZW5h
bWUgPSBmaWxlbmFtZQotCi0gICAgZGVmIGZ1bGxfbmFtZShzZWxmKToKLSAgICAgICAgIiIiTWFr
ZSBXaW5kb3dzIHBhdGhzIGxpa2UgVW5peC4iIiIKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguYWJz
cGF0aChzZWxmLl9maWxlbmFtZSkucmVwbGFjZSgnXFwnLCAnLycpCi0KLSAgICBkZWYgcmVwb3Np
dG9yeV9uYW1lKHNlbGYpOgotICAgICAgICAiIiJGdWxsIG5hbWUgYWZ0ZXIgcmVtb3ZpbmcgdGhl
IGxvY2FsIHBhdGggdG8gdGhlIHJlcG9zaXRvcnkuCi0KLSAgICAgICAgSWYgd2UgaGF2ZSBhIHJl
YWwgYWJzb2x1dGUgcGF0aCBuYW1lIGhlcmUgd2UgY2FuIHRyeSB0byBkbyBzb21ldGhpbmcgc21h
cnQ6Ci0gICAgICAgIGRldGVjdGluZyB0aGUgcm9vdCBvZiB0aGUgY2hlY2tvdXQgYW5kIHRydW5j
YXRpbmcgL3BhdGgvdG8vY2hlY2tvdXQgZnJvbQotICAgICAgICB0aGUgbmFtZSBzbyB0aGF0IHdl
IGdldCBoZWFkZXIgZ3VhcmRzIHRoYXQgZG9uJ3QgaW5jbHVkZSB0aGluZ3MgbGlrZQotICAgICAg
ICAiQzpcRG9jdW1lbnRzIGFuZCBTZXR0aW5nc1wuLi4iIG9yICIvaG9tZS91c2VybmFtZS8uLi4i
IGluIHRoZW0gYW5kIHRodXMKLSAgICAgICAgcGVvcGxlIG9uIGRpZmZlcmVudCBjb21wdXRlcnMg
d2hvIGhhdmUgY2hlY2tlZCB0aGUgc291cmNlIG91dCB0byBkaWZmZXJlbnQKLSAgICAgICAgbG9j
YXRpb25zIHdvbid0IHNlZSBib2d1cyBlcnJvcnMuCi0gICAgICAgICIiIgotICAgICAgICBmdWxs
bmFtZSA9IHNlbGYuZnVsbF9uYW1lKCkKLQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmdWxs
bmFtZSk6Ci0gICAgICAgICAgICBwcm9qZWN0X2RpciA9IG9zLnBhdGguZGlybmFtZShmdWxsbmFt
ZSkKLQotICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHByb2plY3Rf
ZGlyLCAiLnN2biIpKToKLSAgICAgICAgICAgICAgICAjIElmIHRoZXJlJ3MgYSAuc3ZuIGZpbGUg
aW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB3ZQotICAgICAgICAgICAgICAgICMgcmVjdXJzaXZl
bHkgbG9vayB1cCB0aGUgZGlyZWN0b3J5IHRyZWUgZm9yIHRoZSB0b3AKLSAgICAgICAgICAgICAg
ICAjIG9mIHRoZSBTVk4gY2hlY2tvdXQKLSAgICAgICAgICAgICAgICByb290X2RpciA9IHByb2pl
Y3RfZGlyCi0gICAgICAgICAgICAgICAgb25lX3VwX2RpciA9IG9zLnBhdGguZGlybmFtZShyb290
X2RpcikKLSAgICAgICAgICAgICAgICB3aGlsZSBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4o
b25lX3VwX2RpciwgIi5zdm4iKSk6Ci0gICAgICAgICAgICAgICAgICAgIHJvb3RfZGlyID0gb3Mu
cGF0aC5kaXJuYW1lKHJvb3RfZGlyKQotICAgICAgICAgICAgICAgICAgICBvbmVfdXBfZGlyID0g
b3MucGF0aC5kaXJuYW1lKG9uZV91cF9kaXIpCi0KLSAgICAgICAgICAgICAgICBwcmVmaXggPSBv
cy5wYXRoLmNvbW1vbnByZWZpeChbcm9vdF9kaXIsIHByb2plY3RfZGlyXSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZnVsbG5hbWVbbGVuKHByZWZpeCkgKyAxOl0KLQotICAgICAgICAgICAgIyBO
b3QgU1ZOPyBUcnkgdG8gZmluZCBhIGdpdCB0b3AgbGV2ZWwgZGlyZWN0b3J5IGJ5Ci0gICAgICAg
ICAgICAjIHNlYXJjaGluZyB1cCBmcm9tIHRoZSBjdXJyZW50IHBhdGguCi0gICAgICAgICAgICBy
b290X2RpciA9IG9zLnBhdGguZGlybmFtZShmdWxsbmFtZSkKLSAgICAgICAgICAgIHdoaWxlIChy
b290X2RpciAhPSBvcy5wYXRoLmRpcm5hbWUocm9vdF9kaXIpCi0gICAgICAgICAgICAgICAgICAg
YW5kIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocm9vdF9kaXIsICIuZ2l0IikpKToK
LSAgICAgICAgICAgICAgICByb290X2RpciA9IG9zLnBhdGguZGlybmFtZShyb290X2RpcikKLSAg
ICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocm9vdF9kaXIsICIu
Z2l0IikpOgotICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSBvcy5wYXRoLmNvbW1vbnByZWZp
eChbcm9vdF9kaXIsIHByb2plY3RfZGlyXSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1
bGxuYW1lW2xlbihwcmVmaXgpICsgMTpdCi0KLSAgICAgICAgIyBEb24ndCBrbm93IHdoYXQgdG8g
ZG87IGhlYWRlciBndWFyZCB3YXJuaW5ncyBtYXkgYmUgd3JvbmcuLi4KLSAgICAgICAgcmV0dXJu
IGZ1bGxuYW1lCi0KLSAgICBkZWYgc3BsaXQoc2VsZik6Ci0gICAgICAgICIiIlNwbGl0cyB0aGUg
ZmlsZSBpbnRvIHRoZSBkaXJlY3RvcnksIGJhc2VuYW1lLCBhbmQgZXh0ZW5zaW9uLgotCi0gICAg
ICAgIEZvciAnY2hyb21lL2Jyb3dzZXIvYnJvd3Nlci5jcHAnLCBTcGxpdCgpIHdvdWxkCi0gICAg
ICAgIHJldHVybiAoJ2Nocm9tZS9icm93c2VyJywgJ2Jyb3dzZXInLCAnLmNwcCcpCi0KLSAgICAg
ICAgUmV0dXJuczoKLSAgICAgICAgICBBIHR1cGxlIG9mIChkaXJlY3RvcnksIGJhc2VuYW1lLCBl
eHRlbnNpb24pLgotICAgICAgICAiIiIKLQotICAgICAgICBnb29nbGVuYW1lID0gc2VsZi5yZXBv
c2l0b3J5X25hbWUoKQotICAgICAgICBwcm9qZWN0LCByZXN0ID0gb3MucGF0aC5zcGxpdChnb29n
bGVuYW1lKQotICAgICAgICByZXR1cm4gKHByb2plY3QsKSArIG9zLnBhdGguc3BsaXRleHQocmVz
dCkKLQotICAgIGRlZiBiYXNlX25hbWUoc2VsZik6Ci0gICAgICAgICIiIkZpbGUgYmFzZSBuYW1l
IC0gdGV4dCBhZnRlciB0aGUgZmluYWwgc2xhc2gsIGJlZm9yZSB0aGUgZmluYWwgcGVyaW9kLiIi
IgotICAgICAgICByZXR1cm4gc2VsZi5zcGxpdCgpWzFdCi0KLSAgICBkZWYgZXh0ZW5zaW9uKHNl
bGYpOgotICAgICAgICAiIiJGaWxlIGV4dGVuc2lvbiAtIHRleHQgZm9sbG93aW5nIHRoZSBmaW5h
bCBwZXJpb2QuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLnNwbGl0KClbMl0KLQotICAgIGRlZiBu
b19leHRlbnNpb24oc2VsZik6Ci0gICAgICAgICIiIkZpbGUgaGFzIG5vIHNvdXJjZSBmaWxlIGV4
dGVuc2lvbi4iIiIKLSAgICAgICAgcmV0dXJuICcvJy5qb2luKHNlbGYuc3BsaXQoKVswOjJdKQot
Ci0gICAgZGVmIGlzX3NvdXJjZShzZWxmKToKLSAgICAgICAgIiIiRmlsZSBoYXMgYSBzb3VyY2Ug
ZmlsZSBleHRlbnNpb24uIiIiCi0gICAgICAgIHJldHVybiBzZWxmLmV4dGVuc2lvbigpWzE6XSBp
biAoJ2MnLCAnY2MnLCAnY3BwJywgJ2N4eCcpCi0KLQotZGVmIF9zaG91bGRfcHJpbnRfZXJyb3Io
Y2F0ZWdvcnksIGNvbmZpZGVuY2UpOgotICAgICIiIlJldHVybnMgdHJ1ZSBpZmYgY29uZmlkZW5j
ZSA+PSB2ZXJib3NlLCBhbmQgY2F0ZWdvcnkgcGFzc2VzIGZpbHRlci4iIiIKLSAgICAjIFRoZXJl
IGFyZSB0d28gd2F5cyB3ZSBtaWdodCBkZWNpZGUgbm90IHRvIHByaW50IGFuIGVycm9yIG1lc3Nh
Z2U6Ci0gICAgIyB0aGUgdmVyYm9zaXR5IGxldmVsIGlzbid0IGhpZ2ggZW5vdWdoLCBvciB0aGUg
ZmlsdGVycyBmaWx0ZXIgaXQgb3V0LgotICAgIGlmIGNvbmZpZGVuY2UgPCBfY3BwX3N0eWxlX3N0
YXRlLnZlcmJvc2VfbGV2ZWw6Ci0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgaXNfZmlsdGVy
ZWQgPSBGYWxzZQotICAgIGZvciBvbmVfZmlsdGVyIGluIF9maWx0ZXJzKCk6Ci0gICAgICAgIGlm
IG9uZV9maWx0ZXIuc3RhcnRzd2l0aCgnLScpOgotICAgICAgICAgICAgaWYgY2F0ZWdvcnkuc3Rh
cnRzd2l0aChvbmVfZmlsdGVyWzE6XSk6Ci0gICAgICAgICAgICAgICAgaXNfZmlsdGVyZWQgPSBU
cnVlCi0gICAgICAgIGVsaWYgb25lX2ZpbHRlci5zdGFydHN3aXRoKCcrJyk6Ci0gICAgICAgICAg
ICBpZiBjYXRlZ29yeS5zdGFydHN3aXRoKG9uZV9maWx0ZXJbMTpdKToKLSAgICAgICAgICAgICAg
ICBpc19maWx0ZXJlZCA9IEZhbHNlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBhc3NlcnQg
RmFsc2UgICMgc2hvdWxkIGhhdmUgYmVlbiBjaGVja2VkIGZvciBpbiBzZXRfZmlsdGVyLgotICAg
IGlmIGlzX2ZpbHRlcmVkOgotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIHJldHVybiBUcnVl
Ci0KLQotZGVmIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgY2F0ZWdvcnksIGNvbmZpZGVu
Y2UsIG1lc3NhZ2UpOgotICAgICIiIkxvZ3MgdGhlIGZhY3Qgd2UndmUgZm91bmQgYSBsaW50IGVy
cm9yLgotCi0gICAgV2UgbG9nIHdoZXJlIHRoZSBlcnJvciB3YXMgZm91bmQsIGFuZCBhbHNvIG91
ciBjb25maWRlbmNlIGluIHRoZSBlcnJvciwKLSAgICB0aGF0IGlzLCBob3cgY2VydGFpbiB3ZSBh
cmUgdGhpcyBpcyBhIGxlZ2l0aW1hdGUgc3R5bGUgcmVncmVzc2lvbiwgYW5kCi0gICAgbm90IGEg
bWlzaWRlbnRpZmljYXRpb24gb3IgYSB1c2UgdGhhdCdzIHNvbWV0aW1lcyBqdXN0aWZpZWQuCi0K
LSAgICBBcmdzOgotICAgICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGNvbnRhaW5p
bmcgdGhlIGVycm9yLgotICAgICAgbGluZV9udW1iZXI6IFRoZSBudW1iZXIgb2YgdGhlIGxpbmUg
Y29udGFpbmluZyB0aGUgZXJyb3IuCi0gICAgICBjYXRlZ29yeTogQSBzdHJpbmcgdXNlZCB0byBk
ZXNjcmliZSB0aGUgImNhdGVnb3J5IiB0aGlzIGJ1ZwotICAgICAgICAgICAgICAgIGZhbGxzIHVu
ZGVyOiAid2hpdGVzcGFjZSIsIHNheSwgb3IgInJ1bnRpbWUiLiAgQ2F0ZWdvcmllcwotICAgICAg
ICAgICAgICAgIG1heSBoYXZlIGEgaGllcmFyY2h5IHNlcGFyYXRlZCBieSBzbGFzaGVzOiAid2hp
dGVzcGFjZS9pbmRlbnQiLgotICAgICAgY29uZmlkZW5jZTogQSBudW1iZXIgZnJvbSAxLTUgcmVw
cmVzZW50aW5nIGEgY29uZmlkZW5jZSBzY29yZSBmb3IKLSAgICAgICAgICAgICAgICAgIHRoZSBl
cnJvciwgd2l0aCA1IG1lYW5pbmcgdGhhdCB3ZSBhcmUgY2VydGFpbiBvZiB0aGUgcHJvYmxlbSwK
LSAgICAgICAgICAgICAgICAgIGFuZCAxIG1lYW5pbmcgdGhhdCBpdCBjb3VsZCBiZSBhIGxlZ2l0
aW1hdGUgY29uc3RydWN0LgotICAgICAgbWVzc2FnZTogVGhlIGVycm9yIG1lc3NhZ2UuCi0gICAg
IiIiCi0gICAgIyBUaGVyZSBhcmUgdHdvIHdheXMgd2UgbWlnaHQgZGVjaWRlIG5vdCB0byBwcmlu
dCBhbiBlcnJvciBtZXNzYWdlOgotICAgICMgdGhlIHZlcmJvc2l0eSBsZXZlbCBpc24ndCBoaWdo
IGVub3VnaCwgb3IgdGhlIGZpbHRlcnMgZmlsdGVyIGl0IG91dC4KLSAgICBpZiBfc2hvdWxkX3By
aW50X2Vycm9yKGNhdGVnb3J5LCBjb25maWRlbmNlKToKLSAgICAgICAgX2NwcF9zdHlsZV9zdGF0
ZS5pbmNyZW1lbnRfZXJyb3JfY291bnQoKQotICAgICAgICBpZiBfY3BwX3N0eWxlX3N0YXRlLm91
dHB1dF9mb3JtYXQgPT0gJ3ZzNyc6Ci0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCclcygl
cyk6ICAlcyAgWyVzXSBbJWRdXG4nICUgKAotICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBsaW5l
X251bWJlciwgbWVzc2FnZSwgY2F0ZWdvcnksIGNvbmZpZGVuY2UpKQotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnJXM6JXM6ICAlcyAgWyVzXSBbJWRdXG4nICUg
KAotICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBsaW5lX251bWJlciwgbWVzc2FnZSwgY2F0ZWdv
cnksIGNvbmZpZGVuY2UpKQotCi0KLSMgTWF0Y2hlcyBzdGFuZGFyZCBDKysgZXNjYXBlIGVzZXF1
ZW5jZXMgcGVyIDIuMTMuMi4zIG9mIHRoZSBDKysgc3RhbmRhcmQuCi1fUkVfUEFUVEVSTl9DTEVB
TlNFX0xJTkVfRVNDQVBFUyA9IHJlLmNvbXBpbGUoCi0gICAgcidcXChbYWJmbnJ0dj8iXFxcJ118
XGQrfHhbMC05YS1mQS1GXSspJykKLSMgTWF0Y2hlcyBzdHJpbmdzLiAgRXNjYXBlIGNvZGVzIHNo
b3VsZCBhbHJlYWR5IGJlIHJlbW92ZWQgYnkgRVNDQVBFUy4KLV9SRV9QQVRURVJOX0NMRUFOU0Vf
TElORV9ET1VCTEVfUVVPVEVTID0gcmUuY29tcGlsZShyJyJbXiJdKiInKQotIyBNYXRjaGVzIGNo
YXJhY3RlcnMuICBFc2NhcGUgY29kZXMgc2hvdWxkIGFscmVhZHkgYmUgcmVtb3ZlZCBieSBFU0NB
UEVTLgotX1JFX1BBVFRFUk5fQ0xFQU5TRV9MSU5FX1NJTkdMRV9RVU9URVMgPSByZS5jb21waWxl
KHIiJy4nIikKLSMgTWF0Y2hlcyBtdWx0aS1saW5lIEMrKyBjb21tZW50cy4KLSMgVGhpcyBSRSBp
cyBhIGxpdHRsZSBiaXQgbW9yZSBjb21wbGljYXRlZCB0aGFuIG9uZSBtaWdodCBleHBlY3QsIGJl
Y2F1c2Ugd2UKLSMgaGF2ZSB0byB0YWtlIGNhcmUgb2Ygc3BhY2UgcmVtb3ZhbHMgdG9vbHMgc28g
d2UgY2FuIGhhbmRsZSBjb21tZW50cyBpbnNpZGUKLSMgc3RhdGVtZW50cyBiZXR0ZXIuCi0jIFRo
ZSBjdXJyZW50IHJ1bGUgaXM6IFdlIG9ubHkgY2xlYXIgc3BhY2VzIGZyb20gYm90aCBzaWRlcyB3
aGVuIHdlJ3JlIGF0IHRoZQotIyBlbmQgb2YgdGhlIGxpbmUuIE90aGVyd2lzZSwgd2UgdHJ5IHRv
IHJlbW92ZSBzcGFjZXMgZnJvbSB0aGUgcmlnaHQgc2lkZSwKLSMgaWYgdGhpcyBkb2Vzbid0IHdv
cmsgd2UgdHJ5IG9uIGxlZnQgc2lkZSBidXQgb25seSBpZiB0aGVyZSdzIGEgbm9uLWNoYXJhY3Rl
cgotIyBvbiB0aGUgcmlnaHQuCi1fUkVfUEFUVEVSTl9DTEVBTlNFX0xJTkVfQ19DT01NRU5UUyA9
IHJlLmNvbXBpbGUoCi0gICAgciIiIihccyovXCouKlwqL1xzKiR8Ci0gICAgICAgICAgICAvXCou
KlwqL1xzK3wKLSAgICAgICAgIFxzKy9cKi4qXCovKD89XFcpfAotICAgICAgICAgICAgL1wqLipc
Ki8pIiIiLCByZS5WRVJCT1NFKQotCi0KLWRlZiBpc19jcHBfc3RyaW5nKGxpbmUpOgotICAgICIi
IkRvZXMgbGluZSB0ZXJtaW5hdGUgc28sIHRoYXQgdGhlIG5leHQgc3ltYm9sIGlzIGluIHN0cmlu
ZyBjb25zdGFudC4KLQotICAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY29uc2lkZXIgc2luZ2xl
LWxpbmUgbm9yIG11bHRpLWxpbmUgY29tbWVudHMuCi0KLSAgICBBcmdzOgotICAgICAgbGluZTog
aXMgYSBwYXJ0aWFsIGxpbmUgb2YgY29kZSBzdGFydGluZyBmcm9tIHRoZSAwLi5uLgotCi0gICAg
UmV0dXJuczoKLSAgICAgIFRydWUsIGlmIG5leHQgY2hhcmFjdGVyIGFwcGVuZGVkIHRvICdsaW5l
JyBpcyBpbnNpZGUgYQotICAgICAgc3RyaW5nIGNvbnN0YW50LgotICAgICIiIgotCi0gICAgbGlu
ZSA9IGxpbmUucmVwbGFjZShyJ1xcJywgJ1hYJykgICMgYWZ0ZXIgdGhpcywgXFwiIGRvZXMgbm90
IG1hdGNoIHRvIFwiCi0gICAgcmV0dXJuICgobGluZS5jb3VudCgnIicpIC0gbGluZS5jb3VudChy
J1wiJykgLSBsaW5lLmNvdW50KCInXCInIikpICYgMSkgPT0gMQotCi0KLWRlZiBmaW5kX25leHRf
bXVsdGlfbGluZV9jb21tZW50X3N0YXJ0KGxpbmVzLCBsaW5lX2luZGV4KToKLSAgICAiIiJGaW5k
IHRoZSBiZWdpbm5pbmcgbWFya2VyIGZvciBhIG11bHRpbGluZSBjb21tZW50LiIiIgotICAgIHdo
aWxlIGxpbmVfaW5kZXggPCBsZW4obGluZXMpOgotICAgICAgICBpZiBsaW5lc1tsaW5lX2luZGV4
XS5zdHJpcCgpLnN0YXJ0c3dpdGgoJy8qJyk6Ci0gICAgICAgICAgICAjIE9ubHkgcmV0dXJuIHRo
aXMgbWFya2VyIGlmIHRoZSBjb21tZW50IGdvZXMgYmV5b25kIHRoaXMgbGluZQotICAgICAgICAg
ICAgaWYgbGluZXNbbGluZV9pbmRleF0uc3RyaXAoKS5maW5kKCcqLycsIDIpIDwgMDoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbGluZV9pbmRleAotICAgICAgICBsaW5lX2luZGV4ICs9IDEKLSAg
ICByZXR1cm4gbGVuKGxpbmVzKQotCi0KLWRlZiBmaW5kX25leHRfbXVsdGlfbGluZV9jb21tZW50
X2VuZChsaW5lcywgbGluZV9pbmRleCk6Ci0gICAgIiIiV2UgYXJlIGluc2lkZSBhIGNvbW1lbnQs
IGZpbmQgdGhlIGVuZCBtYXJrZXIuIiIiCi0gICAgd2hpbGUgbGluZV9pbmRleCA8IGxlbihsaW5l
cyk6Ci0gICAgICAgIGlmIGxpbmVzW2xpbmVfaW5kZXhdLnN0cmlwKCkuZW5kc3dpdGgoJyovJyk6
Ci0gICAgICAgICAgICByZXR1cm4gbGluZV9pbmRleAotICAgICAgICBsaW5lX2luZGV4ICs9IDEK
LSAgICByZXR1cm4gbGVuKGxpbmVzKQotCi0KLWRlZiByZW1vdmVfbXVsdGlfbGluZV9jb21tZW50
c19mcm9tX3JhbmdlKGxpbmVzLCBiZWdpbiwgZW5kKToKLSAgICAiIiJDbGVhcnMgYSByYW5nZSBv
ZiBsaW5lcyBmb3IgbXVsdGktbGluZSBjb21tZW50cy4iIiIKLSAgICAjIEhhdmluZyAvLyBkdW1t
eSBjb21tZW50cyBtYWtlcyB0aGUgbGluZXMgbm9uLWVtcHR5LCBzbyB3ZSB3aWxsIG5vdCBnZXQK
LSAgICAjIHVubmVjZXNzYXJ5IGJsYW5rIGxpbmUgd2FybmluZ3MgbGF0ZXIgaW4gdGhlIGNvZGUu
Ci0gICAgZm9yIGkgaW4gcmFuZ2UoYmVnaW4sIGVuZCk6Ci0gICAgICAgIGxpbmVzW2ldID0gJy8v
IGR1bW15JwotCi0KLWRlZiByZW1vdmVfbXVsdGlfbGluZV9jb21tZW50cyhmaWxlbmFtZSwgbGlu
ZXMsIGVycm9yKToKLSAgICAiIiJSZW1vdmVzIG11bHRpbGluZSAoYy1zdHlsZSkgY29tbWVudHMg
ZnJvbSBsaW5lcy4iIiIKLSAgICBsaW5lX2luZGV4ID0gMAotICAgIHdoaWxlIGxpbmVfaW5kZXgg
PCBsZW4obGluZXMpOgotICAgICAgICBsaW5lX2luZGV4X2JlZ2luID0gZmluZF9uZXh0X211bHRp
X2xpbmVfY29tbWVudF9zdGFydChsaW5lcywgbGluZV9pbmRleCkKLSAgICAgICAgaWYgbGluZV9p
bmRleF9iZWdpbiA+PSBsZW4obGluZXMpOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGxp
bmVfaW5kZXhfZW5kID0gZmluZF9uZXh0X211bHRpX2xpbmVfY29tbWVudF9lbmQobGluZXMsIGxp
bmVfaW5kZXhfYmVnaW4pCi0gICAgICAgIGlmIGxpbmVfaW5kZXhfZW5kID49IGxlbihsaW5lcyk6
Ci0gICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9pbmRleF9iZWdpbiArIDEsICdyZWFk
YWJpbGl0eS9tdWx0aWxpbmVfY29tbWVudCcsIDUsCi0gICAgICAgICAgICAgICAgICAnQ291bGQg
bm90IGZpbmQgZW5kIG9mIG11bHRpLWxpbmUgY29tbWVudCcpCi0gICAgICAgICAgICByZXR1cm4K
LSAgICAgICAgcmVtb3ZlX211bHRpX2xpbmVfY29tbWVudHNfZnJvbV9yYW5nZShsaW5lcywgbGlu
ZV9pbmRleF9iZWdpbiwgbGluZV9pbmRleF9lbmQgKyAxKQotICAgICAgICBsaW5lX2luZGV4ID0g
bGluZV9pbmRleF9lbmQgKyAxCi0KLQotZGVmIGNsZWFuc2VfY29tbWVudHMobGluZSk6Ci0gICAg
IiIiUmVtb3ZlcyAvLy1jb21tZW50cyBhbmQgc2luZ2xlLWxpbmUgQy1zdHlsZSAvKiAqLyBjb21t
ZW50cy4KLQotICAgIEFyZ3M6Ci0gICAgICBsaW5lOiBBIGxpbmUgb2YgQysrIHNvdXJjZS4KLQot
ICAgIFJldHVybnM6Ci0gICAgICBUaGUgbGluZSB3aXRoIHNpbmdsZS1saW5lIGNvbW1lbnRzIHJl
bW92ZWQuCi0gICAgIiIiCi0gICAgY29tbWVudF9wb3NpdGlvbiA9IGxpbmUuZmluZCgnLy8nKQot
ICAgIGlmIGNvbW1lbnRfcG9zaXRpb24gIT0gLTEgYW5kIG5vdCBpc19jcHBfc3RyaW5nKGxpbmVb
OmNvbW1lbnRfcG9zaXRpb25dKToKLSAgICAgICAgbGluZSA9IGxpbmVbOmNvbW1lbnRfcG9zaXRp
b25dCi0gICAgIyBnZXQgcmlkIG9mIC8qIC4uLiAqLwotICAgIHJldHVybiBfUkVfUEFUVEVSTl9D
TEVBTlNFX0xJTkVfQ19DT01NRU5UUy5zdWIoJycsIGxpbmUpCi0KLQotY2xhc3MgQ2xlYW5zZWRM
aW5lcyhvYmplY3QpOgotICAgICIiIkhvbGRzIDMgY29waWVzIG9mIGFsbCBsaW5lcyB3aXRoIGRp
ZmZlcmVudCBwcmVwcm9jZXNzaW5nIGFwcGxpZWQgdG8gdGhlbS4KLQotICAgIDEpIGVsaWRlZCBt
ZW1iZXIgY29udGFpbnMgbGluZXMgd2l0aG91dCBzdHJpbmdzIGFuZCBjb21tZW50cywKLSAgICAy
KSBsaW5lcyBtZW1iZXIgY29udGFpbnMgbGluZXMgd2l0aG91dCBjb21tZW50cywgYW5kCi0gICAg
MykgcmF3IG1lbWJlciBjb250YWlucyBhbGwgdGhlIGxpbmVzIHdpdGhvdXQgcHJvY2Vzc2luZy4K
LSAgICBBbGwgdGhlc2UgdGhyZWUgbWVtYmVycyBhcmUgb2YgPHR5cGUgJ2xpc3QnPiwgYW5kIG9m
IHRoZSBzYW1lIGxlbmd0aC4KLSAgICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5l
cyk6Ci0gICAgICAgIHNlbGYuZWxpZGVkID0gW10KLSAgICAgICAgc2VsZi5saW5lcyA9IFtdCi0g
ICAgICAgIHNlbGYucmF3X2xpbmVzID0gbGluZXMKLSAgICAgICAgc2VsZi5fbnVtX2xpbmVzID0g
bGVuKGxpbmVzKQotICAgICAgICBmb3IgbGluZV9udW1iZXIgaW4gcmFuZ2UobGVuKGxpbmVzKSk6
Ci0gICAgICAgICAgICBzZWxmLmxpbmVzLmFwcGVuZChjbGVhbnNlX2NvbW1lbnRzKGxpbmVzW2xp
bmVfbnVtYmVyXSkpCi0gICAgICAgICAgICBlbGlkZWQgPSBzZWxmLmNvbGxhcHNlX3N0cmluZ3Mo
bGluZXNbbGluZV9udW1iZXJdKQotICAgICAgICAgICAgc2VsZi5lbGlkZWQuYXBwZW5kKGNsZWFu
c2VfY29tbWVudHMoZWxpZGVkKSkKLQotICAgIGRlZiBudW1fbGluZXMoc2VsZik6Ci0gICAgICAg
ICIiIlJldHVybnMgdGhlIG51bWJlciBvZiBsaW5lcyByZXByZXNlbnRlZC4iIiIKLSAgICAgICAg
cmV0dXJuIHNlbGYuX251bV9saW5lcwotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjb2xs
YXBzZV9zdHJpbmdzKGVsaWRlZCk6Ci0gICAgICAgICIiIkNvbGxhcHNlcyBzdHJpbmdzIGFuZCBj
aGFycyBvbiBhIGxpbmUgdG8gc2ltcGxlICIiIG9yICcnIGJsb2Nrcy4KLQotICAgICAgICBXZSBu
aXggc3RyaW5ncyBmaXJzdCBzbyB3ZSdyZSBub3QgZm9vbGVkIGJ5IHRleHQgbGlrZSAnImh0dHA6
Ly8iJwotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgZWxpZGVkOiBUaGUgbGluZSBiZWluZyBw
cm9jZXNzZWQuCi0KLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICBUaGUgbGluZSB3aXRoIGNv
bGxhcHNlZCBzdHJpbmdzLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IF9SRV9QQVRURVJO
X0lOQ0xVREUubWF0Y2goZWxpZGVkKToKLSAgICAgICAgICAgICMgUmVtb3ZlIGVzY2FwZWQgY2hh
cmFjdGVycyBmaXJzdCB0byBtYWtlIHF1b3RlL3NpbmdsZSBxdW90ZSBjb2xsYXBzaW5nCi0gICAg
ICAgICAgICAjIGJhc2ljLiAgVGhpbmdzIHRoYXQgbG9vayBsaWtlIGVzY2FwZWQgY2hhcmFjdGVy
cyBzaG91bGRuJ3Qgb2NjdXIKLSAgICAgICAgICAgICMgb3V0c2lkZSBvZiBzdHJpbmdzIGFuZCBj
aGFycy4KLSAgICAgICAgICAgIGVsaWRlZCA9IF9SRV9QQVRURVJOX0NMRUFOU0VfTElORV9FU0NB
UEVTLnN1YignJywgZWxpZGVkKQotICAgICAgICAgICAgZWxpZGVkID0gX1JFX1BBVFRFUk5fQ0xF
QU5TRV9MSU5FX1NJTkdMRV9RVU9URVMuc3ViKCInJyIsIGVsaWRlZCkKLSAgICAgICAgICAgIGVs
aWRlZCA9IF9SRV9QQVRURVJOX0NMRUFOU0VfTElORV9ET1VCTEVfUVVPVEVTLnN1YignIiInLCBl
bGlkZWQpCi0gICAgICAgIHJldHVybiBlbGlkZWQKLQotCi1kZWYgY2xvc2VfZXhwcmVzc2lvbihj
bGVhbl9saW5lcywgbGluZV9udW1iZXIsIHBvcyk6Ci0gICAgIiIiSWYgaW5wdXQgcG9pbnRzIHRv
ICggb3IgeyBvciBbLCBmaW5kcyB0aGUgcG9zaXRpb24gdGhhdCBjbG9zZXMgaXQuCi0KLSAgICBJ
ZiBsaW5lc1tsaW5lX251bWJlcl1bcG9zXSBwb2ludHMgdG8gYSAnKCcgb3IgJ3snIG9yICdbJywg
ZmluZHMgdGhlIHRoZQotICAgIGxpbmVfbnVtYmVyL3BvcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhl
IGNsb3Npbmcgb2YgdGhlIGV4cHJlc3Npb24uCi0KLSAgICBBcmdzOgotICAgICAgY2xlYW5fbGlu
ZXM6IEEgQ2xlYW5zZWRMaW5lcyBpbnN0YW5jZSBjb250YWluaW5nIHRoZSBmaWxlLgotICAgICAg
bGluZV9udW1iZXI6IFRoZSBudW1iZXIgb2YgdGhlIGxpbmUgdG8gY2hlY2suCi0gICAgICBwb3M6
IEEgcG9zaXRpb24gb24gdGhlIGxpbmUuCi0KLSAgICBSZXR1cm5zOgotICAgICAgQSB0dXBsZSAo
bGluZSwgbGluZV9udW1iZXIsIHBvcykgcG9pbnRlciAqcGFzdCogdGhlIGNsb3NpbmcgYnJhY2Us
IG9yCi0gICAgICAobGluZSwgbGVuKGxpbmVzKSwgLTEpIGlmIHdlIG5ldmVyIGZpbmQgYSBjbG9z
ZS4gIE5vdGUgd2UgaWdub3JlCi0gICAgICBzdHJpbmdzIGFuZCBjb21tZW50cyB3aGVuIG1hdGNo
aW5nOyBhbmQgdGhlIGxpbmUgd2UgcmV0dXJuIGlzIHRoZQotICAgICAgJ2NsZWFuc2VkJyBsaW5l
IGF0IGxpbmVfbnVtYmVyLgotICAgICIiIgotCi0gICAgbGluZSA9IGNsZWFuX2xpbmVzLmVsaWRl
ZFtsaW5lX251bWJlcl0KLSAgICBzdGFydF9jaGFyYWN0ZXIgPSBsaW5lW3Bvc10KLSAgICBpZiBz
dGFydF9jaGFyYWN0ZXIgbm90IGluICcoe1snOgotICAgICAgICByZXR1cm4gKGxpbmUsIGNsZWFu
X2xpbmVzLm51bV9saW5lcygpLCAtMSkKLSAgICBpZiBzdGFydF9jaGFyYWN0ZXIgPT0gJygnOgot
ICAgICAgICBlbmRfY2hhcmFjdGVyID0gJyknCi0gICAgaWYgc3RhcnRfY2hhcmFjdGVyID09ICdb
JzoKLSAgICAgICAgZW5kX2NoYXJhY3RlciA9ICddJwotICAgIGlmIHN0YXJ0X2NoYXJhY3RlciA9
PSAneyc6Ci0gICAgICAgIGVuZF9jaGFyYWN0ZXIgPSAnfScKLQotICAgIG51bV9vcGVuID0gbGlu
ZS5jb3VudChzdGFydF9jaGFyYWN0ZXIpIC0gbGluZS5jb3VudChlbmRfY2hhcmFjdGVyKQotICAg
IHdoaWxlIGxpbmVfbnVtYmVyIDwgY2xlYW5fbGluZXMubnVtX2xpbmVzKCkgYW5kIG51bV9vcGVu
ID4gMDoKLSAgICAgICAgbGluZV9udW1iZXIgKz0gMQotICAgICAgICBsaW5lID0gY2xlYW5fbGlu
ZXMuZWxpZGVkW2xpbmVfbnVtYmVyXQotICAgICAgICBudW1fb3BlbiArPSBsaW5lLmNvdW50KHN0
YXJ0X2NoYXJhY3RlcikgLSBsaW5lLmNvdW50KGVuZF9jaGFyYWN0ZXIpCi0gICAgIyBPSywgbm93
IGZpbmQgdGhlIGVuZF9jaGFyYWN0ZXIgdGhhdCBhY3R1YWxseSBnb3QgdXMgYmFjayB0byBldmVu
Ci0gICAgZW5kcG9zID0gbGVuKGxpbmUpCi0gICAgd2hpbGUgbnVtX29wZW4gPj0gMDoKLSAgICAg
ICAgZW5kcG9zID0gbGluZS5yZmluZCgnKScsIDAsIGVuZHBvcykKLSAgICAgICAgbnVtX29wZW4g
LT0gMSAgICAgICAgICAgICAgICAgIyBjaG9wcGVkIG9mZiBhbm90aGVyICkKLSAgICByZXR1cm4g
KGxpbmUsIGxpbmVfbnVtYmVyLCBlbmRwb3MgKyAxKQotCi0KLWRlZiBjaGVja19mb3JfY29weXJp
Z2h0KGZpbGVuYW1lLCBsaW5lcywgZXJyb3IpOgotICAgICIiIkxvZ3MgYW4gZXJyb3IgaWYgbm8g
Q29weXJpZ2h0IG1lc3NhZ2UgYXBwZWFycyBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlLiIiIgotCi0g
ICAgIyBXZSdsbCBzYXkgaXQgc2hvdWxkIG9jY3VyIGJ5IGxpbmUgMTAuIERvbid0IGZvcmdldCB0
aGVyZSdzIGEKLSAgICAjIGR1bW15IGxpbmUgYXQgdGhlIGZyb250LgotICAgIGZvciBsaW5lIGlu
IHhyYW5nZSgxLCBtaW4obGVuKGxpbmVzKSwgMTEpKToKLSAgICAgICAgaWYgcmUuc2VhcmNoKHIn
Q29weXJpZ2h0JywgbGluZXNbbGluZV0sIHJlLkkpOgotICAgICAgICAgICAgYnJlYWsKLSAgICBl
bHNlOiAgICAgICAgICAgICAgICAgICAgICAgIyBtZWFucyBubyBjb3B5cmlnaHQgbGluZSB3YXMg
Zm91bmQKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIDAsICdsZWdhbC9jb3B5cmlnaHQnLCA1LAot
ICAgICAgICAgICAgICAnTm8gY29weXJpZ2h0IG1lc3NhZ2UgZm91bmQuICAnCi0gICAgICAgICAg
ICAgICdZb3Ugc2hvdWxkIGhhdmUgYSBsaW5lOiAiQ29weXJpZ2h0IFt5ZWFyXSA8Q29weXJpZ2h0
IE93bmVyPiInKQotCi0KLWRlZiBnZXRfaGVhZGVyX2d1YXJkX2NwcF92YXJpYWJsZShmaWxlbmFt
ZSk6Ci0gICAgIiIiUmV0dXJucyB0aGUgQ1BQIHZhcmlhYmxlIHRoYXQgc2hvdWxkIGJlIHVzZWQg
YXMgYSBoZWFkZXIgZ3VhcmQuCi0KLSAgICBBcmdzOgotICAgICAgZmlsZW5hbWU6IFRoZSBuYW1l
IG9mIGEgQysrIGhlYWRlciBmaWxlLgotCi0gICAgUmV0dXJuczoKLSAgICAgIFRoZSBDUFAgdmFy
aWFibGUgdGhhdCBzaG91bGQgYmUgdXNlZCBhcyBhIGhlYWRlciBndWFyZCBpbiB0aGUKLSAgICAg
IG5hbWVkIGZpbGUuCi0KLSAgICAiIiIKLQotICAgIHJldHVybiBzdWIocidbLS5cc10nLCAnXycs
IG9zLnBhdGguYmFzZW5hbWUoZmlsZW5hbWUpKQotCi0KLWRlZiBjaGVja19mb3JfaGVhZGVyX2d1
YXJkKGZpbGVuYW1lLCBsaW5lcywgZXJyb3IpOgotICAgICIiIkNoZWNrcyB0aGF0IHRoZSBmaWxl
IGNvbnRhaW5zIGEgaGVhZGVyIGd1YXJkLgotCi0gICAgTG9ncyBhbiBlcnJvciBpZiBubyAjaWZu
ZGVmIGhlYWRlciBndWFyZCBpcyBwcmVzZW50LiAgRm9yIG90aGVyCi0gICAgaGVhZGVycywgY2hl
Y2tzIHRoYXQgdGhlIGZ1bGwgcGF0aG5hbWUgaXMgdXNlZC4KLQotICAgIEFyZ3M6Ci0gICAgICBm
aWxlbmFtZTogVGhlIG5hbWUgb2YgdGhlIEMrKyBoZWFkZXIgZmlsZS4KLSAgICAgIGxpbmVzOiBB
biBhcnJheSBvZiBzdHJpbmdzLCBlYWNoIHJlcHJlc2VudGluZyBhIGxpbmUgb2YgdGhlIGZpbGUu
Ci0gICAgICBlcnJvcjogVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBhbnkgZXJyb3JzIGZvdW5k
LgotICAgICIiIgotCi0gICAgY3BwdmFyID0gZ2V0X2hlYWRlcl9ndWFyZF9jcHBfdmFyaWFibGUo
ZmlsZW5hbWUpCi0KLSAgICBpZm5kZWYgPSBOb25lCi0gICAgaWZuZGVmX2xpbmVfbnVtYmVyID0g
MAotICAgIGRlZmluZSA9IE5vbmUKLSAgICBmb3IgbGluZV9udW1iZXIsIGxpbmUgaW4gZW51bWVy
YXRlKGxpbmVzKToKLSAgICAgICAgbGluZV9zcGxpdCA9IGxpbmUuc3BsaXQoKQotICAgICAgICBp
ZiBsZW4obGluZV9zcGxpdCkgPj0gMjoKLSAgICAgICAgICAgICMgZmluZCB0aGUgZmlyc3Qgb2Nj
dXJyZW5jZSBvZiAjaWZuZGVmIGFuZCAjZGVmaW5lLCBzYXZlIGFyZwotICAgICAgICAgICAgaWYg
bm90IGlmbmRlZiBhbmQgbGluZV9zcGxpdFswXSA9PSAnI2lmbmRlZic6Ci0gICAgICAgICAgICAg
ICAgIyBzZXQgaWZuZGVmIHRvIHRoZSBoZWFkZXIgZ3VhcmQgcHJlc2VudGVkIG9uIHRoZSAjaWZu
ZGVmIGxpbmUuCi0gICAgICAgICAgICAgICAgaWZuZGVmID0gbGluZV9zcGxpdFsxXQotICAgICAg
ICAgICAgICAgIGlmbmRlZl9saW5lX251bWJlciA9IGxpbmVfbnVtYmVyCi0gICAgICAgICAgICBp
ZiBub3QgZGVmaW5lIGFuZCBsaW5lX3NwbGl0WzBdID09ICcjZGVmaW5lJzoKLSAgICAgICAgICAg
ICAgICBkZWZpbmUgPSBsaW5lX3NwbGl0WzFdCi0gICAgICAgICAgICBpZiBkZWZpbmUgYW5kIGlm
bmRlZjoKLSAgICAgICAgICAgICAgICBicmVhawotCi0gICAgaWYgbm90IGlmbmRlZiBvciBub3Qg
ZGVmaW5lIG9yIGlmbmRlZiAhPSBkZWZpbmU6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCAwLCAn
YnVpbGQvaGVhZGVyX2d1YXJkJywgNSwKLSAgICAgICAgICAgICAgJ05vICNpZm5kZWYgaGVhZGVy
IGd1YXJkIGZvdW5kLCBzdWdnZXN0ZWQgQ1BQIHZhcmlhYmxlIGlzOiAlcycgJQotICAgICAgICAg
ICAgICBjcHB2YXIpCi0gICAgICAgIHJldHVybgotCi0gICAgIyBUaGUgZ3VhcmQgc2hvdWxkIGJl
IEZpbGVfaC4KLSAgICBpZiBpZm5kZWYgIT0gY3BwdmFyOgotICAgICAgICBlcnJvcihmaWxlbmFt
ZSwgaWZuZGVmX2xpbmVfbnVtYmVyLCAnYnVpbGQvaGVhZGVyX2d1YXJkJywgNSwKLSAgICAgICAg
ICAgICAgJyNpZm5kZWYgaGVhZGVyIGd1YXJkIGhhcyB3cm9uZyBzdHlsZSwgcGxlYXNlIHVzZTog
JXMnICUgY3BwdmFyKQotCi0KLWRlZiBjaGVja19mb3JfdW5pY29kZV9yZXBsYWNlbWVudF9jaGFy
YWN0ZXJzKGZpbGVuYW1lLCBsaW5lcywgZXJyb3IpOgotICAgICIiIkxvZ3MgYW4gZXJyb3IgZm9y
IGVhY2ggbGluZSBjb250YWluaW5nIFVuaWNvZGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVycy4KLQot
ICAgIFRoZXNlIGluZGljYXRlIHRoYXQgZWl0aGVyIHRoZSBmaWxlIGNvbnRhaW5lZCBpbnZhbGlk
IFVURi04IChsaWtlbHkpCi0gICAgb3IgVW5pY29kZSByZXBsYWNlbWVudCBjaGFyYWN0ZXJzICh3
aGljaCBpdCBzaG91bGRuJ3QpLiAgTm90ZSB0aGF0Ci0gICAgaXQncyBwb3NzaWJsZSBmb3IgdGhp
cyB0byB0aHJvdyBvZmYgbGluZSBudW1iZXJpbmcgaWYgdGhlIGludmFsaWQKLSAgICBVVEYtOCBv
Y2N1cnJlZCBhZGphY2VudCB0byBhIG5ld2xpbmUuCi0KLSAgICBBcmdzOgotICAgICAgZmlsZW5h
bWU6IFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuCi0gICAgICBsaW5lczogQW4gYXJyYXkg
b2Ygc3RyaW5ncywgZWFjaCByZXByZXNlbnRpbmcgYSBsaW5lIG9mIHRoZSBmaWxlLgotICAgICAg
ZXJyb3I6IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4KLSAgICAi
IiIKLSAgICBmb3IgbGluZV9udW1iZXIsIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzKToKLSAgICAg
ICAgaWYgdSdcdWZmZmQnIGluIGxpbmU6Ci0gICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGlu
ZV9udW1iZXIsICdyZWFkYWJpbGl0eS91dGY4JywgNSwKLSAgICAgICAgICAgICAgICAgICdMaW5l
IGNvbnRhaW5zIGludmFsaWQgVVRGLTggKG9yIFVuaWNvZGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVy
KS4nKQotCi0KLWRlZiBjaGVja19mb3JfbmV3X2xpbmVfYXRfZW9mKGZpbGVuYW1lLCBsaW5lcywg
ZXJyb3IpOgotICAgICIiIkxvZ3MgYW4gZXJyb3IgaWYgdGhlcmUgaXMgbm8gbmV3bGluZSBjaGFy
IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuCi0KLSAgICBBcmdzOgotICAgICAgZmlsZW5hbWU6IFRo
ZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuCi0gICAgICBsaW5lczogQW4gYXJyYXkgb2Ygc3Ry
aW5ncywgZWFjaCByZXByZXNlbnRpbmcgYSBsaW5lIG9mIHRoZSBmaWxlLgotICAgICAgZXJyb3I6
IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4KLSAgICAiIiIKLQot
ICAgICMgVGhlIGFycmF5IGxpbmVzKCkgd2FzIGNyZWF0ZWQgYnkgYWRkaW5nIHR3byBuZXdsaW5l
cyB0byB0aGUKLSAgICAjIG9yaWdpbmFsIGZpbGUgKGdvIGZpZ3VyZSksIHRoZW4gc3BsaXR0aW5n
IG9uIFxuLgotICAgICMgVG8gdmVyaWZ5IHRoYXQgdGhlIGZpbGUgZW5kcyBpbiBcbiwgd2UganVz
dCBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUKLSAgICAjIGxhc3QtYnV0LXR3byBlbGVtZW50IG9mIGxp
bmVzKCkgZXhpc3RzIGFuZCBpcyBlbXB0eS4KLSAgICBpZiBsZW4obGluZXMpIDwgMyBvciBsaW5l
c1stMl06Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsZW4obGluZXMpIC0gMiwgJ3doaXRlc3Bh
Y2UvZW5kaW5nX25ld2xpbmUnLCA1LAotICAgICAgICAgICAgICAnQ291bGQgbm90IGZpbmQgYSBu
ZXdsaW5lIGNoYXJhY3RlciBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLicpCi0KLQotZGVmIGNoZWNr
X2Zvcl9tdWx0aWxpbmVfY29tbWVudHNfYW5kX3N0cmluZ3MoZmlsZW5hbWUsIGNsZWFuX2xpbmVz
LCBsaW5lX251bWJlciwgZXJyb3IpOgotICAgICIiIkxvZ3MgYW4gZXJyb3IgaWYgd2Ugc2VlIC8q
IC4uLiAqLyBvciAiLi4uIiB0aGF0IGV4dGVuZCBwYXN0IG9uZSBsaW5lLgotCi0gICAgLyogLi4u
ICovIGNvbW1lbnRzIGFyZSBsZWdpdCBpbnNpZGUgbWFjcm9zLCBmb3Igb25lIGxpbmUuCi0gICAg
T3RoZXJ3aXNlLCB3ZSBwcmVmZXIgLy8gY29tbWVudHMsIHNvIGl0J3Mgb2sgdG8gd2FybiBhYm91
dCB0aGUKLSAgICBvdGhlci4gIExpa2V3aXNlLCBpdCdzIG9rIGZvciBzdHJpbmdzIHRvIGV4dGVu
ZCBhY3Jvc3MgbXVsdGlwbGUKLSAgICBsaW5lcywgYXMgbG9uZyBhcyBhIGxpbmUgY29udGludWF0
aW9uIGNoYXJhY3RlciAoYmFja3NsYXNoKQotICAgIHRlcm1pbmF0ZXMgZWFjaCBsaW5lLiBBbHRo
b3VnaCBub3QgY3VycmVudGx5IHByb2hpYml0ZWQgYnkgdGhlIEMrKwotICAgIHN0eWxlIGd1aWRl
LCBpdCdzIHVnbHkgYW5kIHVubmVjZXNzYXJ5LiBXZSBkb24ndCBkbyB3ZWxsIHdpdGggZWl0aGVy
Ci0gICAgaW4gdGhpcyBsaW50IHByb2dyYW0sIHNvIHdlIHdhcm4gYWJvdXQgYm90aC4KLQotICAg
IEFyZ3M6Ci0gICAgICBmaWxlbmFtZTogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlsZS4KLSAg
ICAgIGNsZWFuX2xpbmVzOiBBIENsZWFuc2VkTGluZXMgaW5zdGFuY2UgY29udGFpbmluZyB0aGUg
ZmlsZS4KLSAgICAgIGxpbmVfbnVtYmVyOiBUaGUgbnVtYmVyIG9mIHRoZSBsaW5lIHRvIGNoZWNr
LgotICAgICAgZXJyb3I6IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3Vu
ZC4KLSAgICAiIiIKLSAgICBsaW5lID0gY2xlYW5fbGluZXMuZWxpZGVkW2xpbmVfbnVtYmVyXQot
Ci0gICAgIyBSZW1vdmUgYWxsIFxcIChlc2NhcGVkIGJhY2tzbGFzaGVzKSBmcm9tIHRoZSBsaW5l
LiBUaGV5IGFyZSBPSywgYW5kIHRoZQotICAgICMgc2Vjb25kIChlc2NhcGVkKSBzbGFzaCBtYXkg
dHJpZ2dlciBsYXRlciBcIiBkZXRlY3Rpb24gZXJyb25lb3VzbHkuCi0gICAgbGluZSA9IGxpbmUu
cmVwbGFjZSgnXFxcXCcsICcnKQotCi0gICAgaWYgbGluZS5jb3VudCgnLyonKSA+IGxpbmUuY291
bnQoJyovJyk6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3JlYWRhYmls
aXR5L211bHRpbGluZV9jb21tZW50JywgNSwKLSAgICAgICAgICAgICAgJ0NvbXBsZXggbXVsdGkt
bGluZSAvKi4uLiovLXN0eWxlIGNvbW1lbnQgZm91bmQuICcKLSAgICAgICAgICAgICAgJ0xpbnQg
bWF5IGdpdmUgYm9ndXMgd2FybmluZ3MuICAnCi0gICAgICAgICAgICAgICdDb25zaWRlciByZXBs
YWNpbmcgdGhlc2Ugd2l0aCAvLy1zdHlsZSBjb21tZW50cywgJwotICAgICAgICAgICAgICAnd2l0
aCAjaWYgMC4uLiNlbmRpZiwgJwotICAgICAgICAgICAgICAnb3Igd2l0aCBtb3JlIGNsZWFybHkg
c3RydWN0dXJlZCBtdWx0aS1saW5lIGNvbW1lbnRzLicpCi0KLSAgICBpZiAobGluZS5jb3VudCgn
IicpIC0gbGluZS5jb3VudCgnXFwiJykpICUgMjoKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxp
bmVfbnVtYmVyLCAncmVhZGFiaWxpdHkvbXVsdGlsaW5lX3N0cmluZycsIDUsCi0gICAgICAgICAg
ICAgICdNdWx0aS1saW5lIHN0cmluZyAoIi4uLiIpIGZvdW5kLiAgVGhpcyBsaW50IHNjcmlwdCBk
b2VzblwndCAnCi0gICAgICAgICAgICAgICdkbyB3ZWxsIHdpdGggc3VjaCBzdHJpbmdzLCBhbmQg
bWF5IGdpdmUgYm9ndXMgd2FybmluZ3MuICBUaGV5XCdyZSAnCi0gICAgICAgICAgICAgICd1Z2x5
IGFuZCB1bm5lY2Vzc2FyeSwgYW5kIHlvdSBzaG91bGQgdXNlIGNvbmNhdGVuYXRpb24gaW5zdGVh
ZCIuJykKLQotCi1fVEhSRUFESU5HX0xJU1QgPSAoCi0gICAgKCdhc2N0aW1lKCcsICdhc2N0aW1l
X3IoJyksCi0gICAgKCdjdGltZSgnLCAnY3RpbWVfcignKSwKLSAgICAoJ2dldGdyZ2lkKCcsICdn
ZXRncmdpZF9yKCcpLAotICAgICgnZ2V0Z3JuYW0oJywgJ2dldGdybmFtX3IoJyksCi0gICAgKCdn
ZXRsb2dpbignLCAnZ2V0bG9naW5fcignKSwKLSAgICAoJ2dldHB3bmFtKCcsICdnZXRwd25hbV9y
KCcpLAotICAgICgnZ2V0cHd1aWQoJywgJ2dldHB3dWlkX3IoJyksCi0gICAgKCdnbXRpbWUoJywg
J2dtdGltZV9yKCcpLAotICAgICgnbG9jYWx0aW1lKCcsICdsb2NhbHRpbWVfcignKSwKLSAgICAo
J3JhbmQoJywgJ3JhbmRfcignKSwKLSAgICAoJ3JlYWRkaXIoJywgJ3JlYWRkaXJfcignKSwKLSAg
ICAoJ3N0cnRvaygnLCAnc3RydG9rX3IoJyksCi0gICAgKCd0dHluYW1lKCcsICd0dHluYW1lX3Io
JyksCi0gICAgKQotCi0KLWRlZiBjaGVja19wb3NpeF90aHJlYWRpbmcoZmlsZW5hbWUsIGNsZWFu
X2xpbmVzLCBsaW5lX251bWJlciwgZXJyb3IpOgotICAgICIiIkNoZWNrcyBmb3IgY2FsbHMgdG8g
dGhyZWFkLXVuc2FmZSBmdW5jdGlvbnMuCi0KLSAgICBNdWNoIGNvZGUgaGFzIGJlZW4gb3JpZ2lu
YWxseSB3cml0dGVuIHdpdGhvdXQgY29uc2lkZXJhdGlvbiBvZgotICAgIG11bHRpLXRocmVhZGlu
Zy4gQWxzbywgZW5naW5lZXJzIGFyZSByZWx5aW5nIG9uIHRoZWlyIG9sZCBleHBlcmllbmNlOwot
ICAgIHRoZXkgaGF2ZSBsZWFybmVkIHBvc2l4IGJlZm9yZSB0aHJlYWRpbmcgZXh0ZW5zaW9ucyB3
ZXJlIGFkZGVkLiBUaGVzZQotICAgIHRlc3RzIGd1aWRlIHRoZSBlbmdpbmVlcnMgdG8gdXNlIHRo
cmVhZC1zYWZlIGZ1bmN0aW9ucyAod2hlbiB1c2luZwotICAgIHBvc2l4IGRpcmVjdGx5KS4KLQot
ICAgIEFyZ3M6Ci0gICAgICBmaWxlbmFtZTogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlsZS4K
LSAgICAgIGNsZWFuX2xpbmVzOiBBIENsZWFuc2VkTGluZXMgaW5zdGFuY2UgY29udGFpbmluZyB0
aGUgZmlsZS4KLSAgICAgIGxpbmVfbnVtYmVyOiBUaGUgbnVtYmVyIG9mIHRoZSBsaW5lIHRvIGNo
ZWNrLgotICAgICAgZXJyb3I6IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBm
b3VuZC4KLSAgICAiIiIKLSAgICBsaW5lID0gY2xlYW5fbGluZXMuZWxpZGVkW2xpbmVfbnVtYmVy
XQotICAgIGZvciBzaW5nbGVfdGhyZWFkX2Z1bmN0aW9uLCBtdWx0aXRocmVhZF9zYWZlX2Z1bmN0
aW9uIGluIF9USFJFQURJTkdfTElTVDoKLSAgICAgICAgaW5kZXggPSBsaW5lLmZpbmQoc2luZ2xl
X3RocmVhZF9mdW5jdGlvbikKLSAgICAgICAgIyBDb21wYXJpc29ucyBtYWRlIGV4cGxpY2l0IGZv
ciBjbGFyaXR5IC0tIHB5bGludDogZGlzYWJsZS1tc2c9QzY0MDMKLSAgICAgICAgaWYgaW5kZXgg
Pj0gMCBhbmQgKGluZGV4ID09IDAgb3IgKG5vdCBsaW5lW2luZGV4IC0gMV0uaXNhbG51bSgpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbGluZVtpbmRleCAt
IDFdIG5vdCBpbiAoJ18nLCAnLicsICc+JykpKToKLSAgICAgICAgICAgIGVycm9yKGZpbGVuYW1l
LCBsaW5lX251bWJlciwgJ3J1bnRpbWUvdGhyZWFkc2FmZV9mbicsIDIsCi0gICAgICAgICAgICAg
ICAgICAnQ29uc2lkZXIgdXNpbmcgJyArIG11bHRpdGhyZWFkX3NhZmVfZnVuY3Rpb24gKwotICAg
ICAgICAgICAgICAgICAgJy4uLikgaW5zdGVhZCBvZiAnICsgc2luZ2xlX3RocmVhZF9mdW5jdGlv
biArCi0gICAgICAgICAgICAgICAgICAnLi4uKSBmb3IgaW1wcm92ZWQgdGhyZWFkIHNhZmV0eS4n
KQotCi0KLSMgTWF0Y2hlcyBpbnZhbGlkIGluY3JlbWVudDogKmNvdW50KyssIHdoaWNoIG1vdmVz
IHBvaW50ZXIgaW5zdGVhZCBvZgotIyBpbmNyZW1lbnRpbmcgYSB2YWx1ZS4KLV9SRV9QQVRURVJO
X0lOVkFMSURfSU5DUkVNRU5UID0gcmUuY29tcGlsZSgKLSAgICByJ15ccypcKlx3KyhcK1wrfC0t
KTsnKQotCi0KLWRlZiBjaGVja19pbnZhbGlkX2luY3JlbWVudChmaWxlbmFtZSwgY2xlYW5fbGlu
ZXMsIGxpbmVfbnVtYmVyLCBlcnJvcik6Ci0gICAgIiIiQ2hlY2tzIGZvciBpbnZhbGlkIGluY3Jl
bWVudCAqY291bnQrKy4KLQotICAgIEZvciBleGFtcGxlIGZvbGxvd2luZyBmdW5jdGlvbjoKLSAg
ICB2b2lkIGluY3JlbWVudF9jb3VudGVyKGludCogY291bnQpIHsKLSAgICAgICAgKmNvdW50Kys7
Ci0gICAgfQotICAgIGlzIGludmFsaWQsIGJlY2F1c2UgaXQgZWZmZWN0aXZlbHkgZG9lcyBjb3Vu
dCsrLCBtb3ZpbmcgcG9pbnRlciwgYW5kIHNob3VsZAotICAgIGJlIHJlcGxhY2VkIHdpdGggKysq
Y291bnQsICgqY291bnQpKysgb3IgKmNvdW50ICs9IDEuCi0KLSAgICBBcmdzOgotICAgICAgZmls
ZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuCi0gICAgICBjbGVhbl9saW5lczog
QSBDbGVhbnNlZExpbmVzIGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIGZpbGUuCi0gICAgICBsaW5l
X251bWJlcjogVGhlIG51bWJlciBvZiB0aGUgbGluZSB0byBjaGVjay4KLSAgICAgIGVycm9yOiBU
aGUgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91bmQuCi0gICAgIiIiCi0gICAg
bGluZSA9IGNsZWFuX2xpbmVzLmVsaWRlZFtsaW5lX251bWJlcl0KLSAgICBpZiBfUkVfUEFUVEVS
Tl9JTlZBTElEX0lOQ1JFTUVOVC5tYXRjaChsaW5lKToKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUs
IGxpbmVfbnVtYmVyLCAncnVudGltZS9pbnZhbGlkX2luY3JlbWVudCcsIDUsCi0gICAgICAgICAg
ICAgICdDaGFuZ2luZyBwb2ludGVyIGluc3RlYWQgb2YgdmFsdWUgKG9yIHVudXNlZCB2YWx1ZSBv
ZiBvcGVyYXRvciopLicpCi0KLQotY2xhc3MgX0NsYXNzSW5mbyhvYmplY3QpOgotICAgICIiIlN0
b3JlcyBpbmZvcm1hdGlvbiBhYm91dCBhIGNsYXNzLiIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIG5hbWUsIGxpbmVfbnVtYmVyKToKLSAgICAgICAgc2VsZi5uYW1lID0gbmFtZQotICAgICAg
ICBzZWxmLmxpbmVfbnVtYmVyID0gbGluZV9udW1iZXIKLSAgICAgICAgc2VsZi5zZWVuX29wZW5f
YnJhY2UgPSBGYWxzZQotICAgICAgICBzZWxmLmlzX2Rlcml2ZWQgPSBGYWxzZQotICAgICAgICBz
ZWxmLnZpcnR1YWxfbWV0aG9kX2xpbmVfbnVtYmVyID0gTm9uZQotICAgICAgICBzZWxmLmhhc192
aXJ0dWFsX2Rlc3RydWN0b3IgPSBGYWxzZQotICAgICAgICBzZWxmLmJyYWNlX2RlcHRoID0gMAot
Ci0KLWNsYXNzIF9DbGFzc1N0YXRlKG9iamVjdCk6Ci0gICAgIiIiSG9sZHMgdGhlIGN1cnJlbnQg
c3RhdGUgb2YgdGhlIHBhcnNlIHJlbGF0aW5nIHRvIGNsYXNzIGRlY2xhcmF0aW9ucy4KLQotICAg
IEl0IG1haW50YWlucyBhIHN0YWNrIG9mIF9DbGFzc0luZm9zIHJlcHJlc2VudGluZyB0aGUgcGFy
c2VyJ3MgZ3Vlc3MKLSAgICBhcyB0byB0aGUgY3VycmVudCBuZXN0aW5nIG9mIGNsYXNzIGRlY2xh
cmF0aW9ucy4gVGhlIGlubmVybW9zdCBjbGFzcwotICAgIGlzIGF0IHRoZSB0b3AgKGJhY2spIG9m
IHRoZSBzdGFjay4gVHlwaWNhbGx5LCB0aGUgc3RhY2sgd2lsbCBlaXRoZXIKLSAgICBiZSBlbXB0
eSBvciBoYXZlIGV4YWN0bHkgb25lIGVudHJ5LgotICAgICIiIgotCi0gICAgZGVmIF9faW5pdF9f
KHNlbGYpOgotICAgICAgICBzZWxmLmNsYXNzaW5mb19zdGFjayA9IFtdCi0KLSAgICBkZWYgY2hl
Y2tfZmluaXNoZWQoc2VsZiwgZmlsZW5hbWUsIGVycm9yKToKLSAgICAgICAgIiIiQ2hlY2tzIHRo
YXQgYWxsIGNsYXNzZXMgaGF2ZSBiZWVuIGNvbXBsZXRlbHkgcGFyc2VkLgotCi0gICAgICAgIENh
bGwgdGhpcyB3aGVuIGFsbCBsaW5lcyBpbiBhIGZpbGUgaGF2ZSBiZWVuIHByb2Nlc3NlZC4KLSAg
ICAgICAgQXJnczoKLSAgICAgICAgICBmaWxlbmFtZTogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQg
ZmlsZS4KLSAgICAgICAgICBlcnJvcjogVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBhbnkgZXJy
b3JzIGZvdW5kLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5jbGFzc2luZm9fc3RhY2s6
Ci0gICAgICAgICAgICAjIE5vdGU6IFRoaXMgdGVzdCBjYW4gcmVzdWx0IGluIGZhbHNlIHBvc2l0
aXZlcyBpZiAjaWZkZWYgY29uc3RydWN0cwotICAgICAgICAgICAgIyBnZXQgaW4gdGhlIHdheSBv
ZiBicmFjZSBtYXRjaGluZy4gU2VlIHRoZSB0ZXN0QnVpbGRDbGFzcyB0ZXN0IGluCi0gICAgICAg
ICAgICAjIGNwcF9zdHlsZV91bml0dGVzdC5weSBmb3IgYW4gZXhhbXBsZSBvZiB0aGlzLgotICAg
ICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIHNlbGYuY2xhc3NpbmZvX3N0YWNrWzBdLmxpbmVfbnVt
YmVyLCAnYnVpbGQvY2xhc3MnLCA1LAotICAgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBmaW5k
IGNvbXBsZXRlIGRlY2xhcmF0aW9uIG9mIGNsYXNzICVzJyAlCi0gICAgICAgICAgICAgICAgICBz
ZWxmLmNsYXNzaW5mb19zdGFja1swXS5uYW1lKQotCi0KLWNsYXNzIF9GaWxlU3RhdGUob2JqZWN0
KToKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuX2RpZF9pbnNpZGVfbmFt
ZXNwYWNlX2luZGVudF93YXJuaW5nID0gRmFsc2UKLQotICAgIGRlZiBzZXRfZGlkX2luc2lkZV9u
YW1lc3BhY2VfaW5kZW50X3dhcm5pbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuX2RpZF9pbnNpZGVf
bmFtZXNwYWNlX2luZGVudF93YXJuaW5nID0gVHJ1ZQotCi0gICAgZGVmIGRpZF9pbnNpZGVfbmFt
ZXNwYWNlX2luZGVudF93YXJuaW5nKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fZGlkX2lu
c2lkZV9uYW1lc3BhY2VfaW5kZW50X3dhcm5pbmcKLQotZGVmIGNoZWNrX2Zvcl9ub25fc3RhbmRh
cmRfY29uc3RydWN0cyhmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19zdGF0ZSwgZXJyb3IpOgotICAg
ICIiIkxvZ3MgYW4gZXJyb3IgaWYgd2Ugc2VlIGNlcnRhaW4gbm9uLUFOU0kgY29uc3RydWN0cyBp
Z25vcmVkIGJ5IGdjYy0yLgotCi0gICAgQ29tcGxhaW4gYWJvdXQgc2V2ZXJhbCBjb25zdHJ1Y3Rz
IHdoaWNoIGdjYy0yIGFjY2VwdHMsIGJ1dCB3aGljaCBhcmUKLSAgICBub3Qgc3RhbmRhcmQgQysr
LiAgV2FybmluZyBhYm91dCB0aGVzZSBpbiBsaW50IGlzIG9uZSB3YXkgdG8gZWFzZSB0aGUKLSAg
ICB0cmFuc2l0aW9uIHRvIG5ldyBjb21waWxlcnMuCi0gICAgLSBwdXQgc3RvcmFnZSBjbGFzcyBm
aXJzdCAoZS5nLiAic3RhdGljIGNvbnN0IiBpbnN0ZWFkIG9mICJjb25zdCBzdGF0aWMiKS4KLSAg
ICAtICIlbGxkIiBpbnN0ZWFkIG9mICVxZCIgaW4gcHJpbnRmLXR5cGUgZnVuY3Rpb25zLgotICAg
IC0gIiUxJGQiIGlzIG5vbi1zdGFuZGFyZCBpbiBwcmludGYtdHlwZSBmdW5jdGlvbnMuCi0gICAg
LSAiXCUiIGlzIGFuIHVuZGVmaW5lZCBjaGFyYWN0ZXIgZXNjYXBlIHNlcXVlbmNlLgotICAgIC0g
dGV4dCBhZnRlciAjZW5kaWYgaXMgbm90IGFsbG93ZWQuCi0gICAgLSBpbnZhbGlkIGlubmVyLXN0
eWxlIGZvcndhcmQgZGVjbGFyYXRpb24uCi0gICAgLSA+PyBhbmQgPD8gb3BlcmF0b3JzLCBhbmQg
dGhlaXIgPj89IGFuZCA8Pz0gY291c2lucy4KLSAgICAtIGNsYXNzZXMgd2l0aCB2aXJ0dWFsIG1l
dGhvZHMgbmVlZCB2aXJ0dWFsIGRlc3RydWN0b3JzIChjb21waWxlciB3YXJuaW5nCi0gICAgICAg
IGF2YWlsYWJsZSwgYnV0IG5vdCB0dXJuZWQgb24geWV0LikKLQotICAgIEFkZGl0aW9uYWxseSwg
Y2hlY2sgZm9yIGNvbnN0cnVjdG9yL2Rlc3RydWN0b3Igc3R5bGUgdmlvbGF0aW9ucyBhcyBpdAot
ICAgIGlzIHZlcnkgY29udmVuaWVudCB0byBkbyBzbyB3aGlsZSBjaGVja2luZyBmb3IgZ2NjLTIg
Y29tcGxpYW5jZS4KLQotICAgIEFyZ3M6Ci0gICAgICBmaWxlbmFtZTogVGhlIG5hbWUgb2YgdGhl
IGN1cnJlbnQgZmlsZS4KLSAgICAgIGNsZWFuX2xpbmVzOiBBIENsZWFuc2VkTGluZXMgaW5zdGFu
Y2UgY29udGFpbmluZyB0aGUgZmlsZS4KLSAgICAgIGxpbmVfbnVtYmVyOiBUaGUgbnVtYmVyIG9m
IHRoZSBsaW5lIHRvIGNoZWNrLgotICAgICAgY2xhc3Nfc3RhdGU6IEEgX0NsYXNzU3RhdGUgaW5z
dGFuY2Ugd2hpY2ggbWFpbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0Ci0gICAgICAgICAgICAgICAg
ICAgdGhlIGN1cnJlbnQgc3RhY2sgb2YgbmVzdGVkIGNsYXNzIGRlY2xhcmF0aW9ucyBiZWluZyBw
YXJzZWQuCi0gICAgICBlcnJvcjogQSBjYWxsYWJsZSB0byB3aGljaCBlcnJvcnMgYXJlIHJlcG9y
dGVkLCB3aGljaCB0YWtlcyA0IGFyZ3VtZW50czoKLSAgICAgICAgICAgICBmaWxlbmFtZSwgbGlu
ZSBudW1iZXIsIGVycm9yIGxldmVsLCBhbmQgbWVzc2FnZQotICAgICIiIgotCi0gICAgIyBSZW1v
dmUgY29tbWVudHMgZnJvbSB0aGUgbGluZSwgYnV0IGxlYXZlIGluIHN0cmluZ3MgZm9yIG5vdy4K
LSAgICBsaW5lID0gY2xlYW5fbGluZXMubGluZXNbbGluZV9udW1iZXJdCi0KLSAgICBpZiBzZWFy
Y2gocidwcmludGZccypcKC4qIi4qJVstKyBdP1xkKnEnLCBsaW5lKToKLSAgICAgICAgZXJyb3Io
ZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAncnVudGltZS9wcmludGZfZm9ybWF0JywgMywKLSAgICAg
ICAgICAgICAgJyVxIGluIGZvcm1hdCBzdHJpbmdzIGlzIGRlcHJlY2F0ZWQuICBVc2UgJWxsIGlu
c3RlYWQuJykKLQotICAgIGlmIHNlYXJjaChyJ3ByaW50ZlxzKlwoLioiLiolXGQrXCQnLCBsaW5l
KToKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAncnVudGltZS9wcmludGZf
Zm9ybWF0JywgMiwKLSAgICAgICAgICAgICAgJyVOJCBmb3JtYXRzIGFyZSB1bmNvbnZlbnRpb25h
bC4gIFRyeSByZXdyaXRpbmcgdG8gYXZvaWQgdGhlbS4nKQotCi0gICAgIyBSZW1vdmUgZXNjYXBl
ZCBiYWNrc2xhc2hlcyBiZWZvcmUgbG9va2luZyBmb3IgdW5kZWZpbmVkIGVzY2FwZXMuCi0gICAg
bGluZSA9IGxpbmUucmVwbGFjZSgnXFxcXCcsICcnKQotCi0gICAgaWYgc2VhcmNoKHInKCJ8XCcp
LipcXCglfFxbfFwofHspJywgbGluZSk6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251
bWJlciwgJ2J1aWxkL3ByaW50Zl9mb3JtYXQnLCAzLAotICAgICAgICAgICAgICAnJSwgWywgKCwg
YW5kIHsgYXJlIHVuZGVmaW5lZCBjaGFyYWN0ZXIgZXNjYXBlcy4gIFVuZXNjYXBlIHRoZW0uJykK
LQotICAgICMgRm9yIHRoZSByZXN0LCB3b3JrIHdpdGggYm90aCBjb21tZW50cyBhbmQgc3RyaW5n
cyByZW1vdmVkLgotICAgIGxpbmUgPSBjbGVhbl9saW5lcy5lbGlkZWRbbGluZV9udW1iZXJdCi0K
LSAgICBpZiBzZWFyY2gocidcYihjb25zdHx2b2xhdGlsZXx2b2lkfGNoYXJ8c2hvcnR8aW50fGxv
bmcnCi0gICAgICAgICAgICAgIHInfGZsb2F0fGRvdWJsZXxzaWduZWR8dW5zaWduZWQnCi0gICAg
ICAgICAgICAgIHInfHNjaGFyfHU/aW50OHx1P2ludDE2fHU/aW50MzJ8dT9pbnQ2NCknCi0gICAg
ICAgICAgICAgIHInXHMrKGF1dG98cmVnaXN0ZXJ8c3RhdGljfGV4dGVybnx0eXBlZGVmKVxiJywK
LSAgICAgICAgICAgICAgbGluZSk6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJl
ciwgJ2J1aWxkL3N0b3JhZ2VfY2xhc3MnLCA1LAotICAgICAgICAgICAgICAnU3RvcmFnZSBjbGFz
cyAoc3RhdGljLCBleHRlcm4sIHR5cGVkZWYsIGV0Yykgc2hvdWxkIGJlIGZpcnN0LicpCi0KLSAg
ICBpZiBtYXRjaChyJ1xzKiNccyplbmRpZlxzKlteL1xzXSsnLCBsaW5lKToKLSAgICAgICAgZXJy
b3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnYnVpbGQvZW5kaWZfY29tbWVudCcsIDUsCi0gICAg
ICAgICAgICAgICdVbmNvbW1lbnRlZCB0ZXh0IGFmdGVyICNlbmRpZiBpcyBub24tc3RhbmRhcmQu
ICBVc2UgYSBjb21tZW50LicpCi0KLSAgICBpZiBtYXRjaChyJ1xzKmNsYXNzXHMrKFx3K1xzKjo6
XHMqKStcdytccyo7JywgbGluZSk6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJl
ciwgJ2J1aWxkL2ZvcndhcmRfZGVjbCcsIDUsCi0gICAgICAgICAgICAgICdJbm5lci1zdHlsZSBm
b3J3YXJkIGRlY2xhcmF0aW9ucyBhcmUgaW52YWxpZC4gIFJlbW92ZSB0aGlzIGxpbmUuJykKLQot
ICAgIGlmIHNlYXJjaChyJyhcdyt8WystXT9cZCsoXC5cZCopPylccyooPHw+KVw/PT9ccyooXHcr
fFsrLV0/XGQrKShcLlxkKik/JywgbGluZSk6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5l
X251bWJlciwgJ2J1aWxkL2RlcHJlY2F0ZWQnLCAzLAotICAgICAgICAgICAgICAnPj8gYW5kIDw/
IChtYXggYW5kIG1pbikgb3BlcmF0b3JzIGFyZSBub24tc3RhbmRhcmQgYW5kIGRlcHJlY2F0ZWQu
JykKLQotICAgICMgVHJhY2sgY2xhc3MgZW50cnkgYW5kIGV4aXQsIGFuZCBhdHRlbXB0IHRvIGZp
bmQgY2FzZXMgd2l0aGluIHRoZQotICAgICMgY2xhc3MgZGVjbGFyYXRpb24gdGhhdCBkb24ndCBt
ZWV0IHRoZSBDKysgc3R5bGUKLSAgICAjIGd1aWRlbGluZXMuIFRyYWNraW5nIGlzIHZlcnkgZGVw
ZW5kZW50IG9uIHRoZSBjb2RlIG1hdGNoaW5nIEdvb2dsZQotICAgICMgc3R5bGUgZ3VpZGVsaW5l
cywgYnV0IGl0IHNlZW1zIHRvIHBlcmZvcm0gd2VsbCBlbm91Z2ggaW4gdGVzdGluZwotICAgICMg
dG8gYmUgYSB3b3J0aHdoaWxlIGFkZGl0aW9uIHRvIHRoZSBjaGVja3MuCi0gICAgY2xhc3NpbmZv
X3N0YWNrID0gY2xhc3Nfc3RhdGUuY2xhc3NpbmZvX3N0YWNrCi0gICAgIyBMb29rIGZvciBhIGNs
YXNzIGRlY2xhcmF0aW9uCi0gICAgY2xhc3NfZGVjbF9tYXRjaCA9IG1hdGNoKAotICAgICAgICBy
J1xzKih0ZW1wbGF0ZVxzKjxbXHdcczw+LDpdKj5ccyopPyhjbGFzc3xzdHJ1Y3QpXHMrKFx3Kyg6
Olx3KykqKScsIGxpbmUpCi0gICAgaWYgY2xhc3NfZGVjbF9tYXRjaDoKLSAgICAgICAgY2xhc3Np
bmZvX3N0YWNrLmFwcGVuZChfQ2xhc3NJbmZvKGNsYXNzX2RlY2xfbWF0Y2guZ3JvdXAoMyksIGxp
bmVfbnVtYmVyKSkKLQotICAgICMgRXZlcnl0aGluZyBlbHNlIGluIHRoaXMgZnVuY3Rpb24gdXNl
cyB0aGUgdG9wIG9mIHRoZSBzdGFjayBpZiBpdCdzCi0gICAgIyBub3QgZW1wdHkuCi0gICAgaWYg
bm90IGNsYXNzaW5mb19zdGFjazoKLSAgICAgICAgcmV0dXJuCi0KLSAgICBjbGFzc2luZm8gPSBj
bGFzc2luZm9fc3RhY2tbLTFdCi0KLSAgICAjIElmIHRoZSBvcGVuaW5nIGJyYWNlIGhhc24ndCBi
ZWVuIHNlZW4gbG9vayBmb3IgaXQgYW5kIGFsc28KLSAgICAjIHBhcmVudCBjbGFzcyBkZWNsYXJh
dGlvbnMuCi0gICAgaWYgbm90IGNsYXNzaW5mby5zZWVuX29wZW5fYnJhY2U6Ci0gICAgICAgICMg
SWYgdGhlIGxpbmUgaGFzIGEgJzsnIGluIGl0LCBhc3N1bWUgaXQncyBhIGZvcndhcmQgZGVjbGFy
YXRpb24gb3IKLSAgICAgICAgIyBhIHNpbmdsZS1saW5lIGNsYXNzIGRlY2xhcmF0aW9uLCB3aGlj
aCB3ZSB3b24ndCBwcm9jZXNzLgotICAgICAgICBpZiBsaW5lLmZpbmQoJzsnKSAhPSAtMToKLSAg
ICAgICAgICAgIGNsYXNzaW5mb19zdGFjay5wb3AoKQotICAgICAgICAgICAgcmV0dXJuCi0gICAg
ICAgIGNsYXNzaW5mby5zZWVuX29wZW5fYnJhY2UgPSAobGluZS5maW5kKCd7JykgIT0gLTEpCi0g
ICAgICAgICMgTG9vayBmb3IgYSBiYXJlICc6JwotICAgICAgICBpZiBzZWFyY2goJyhefFteOl0p
OigkfFteOl0pJywgbGluZSk6Ci0gICAgICAgICAgICBjbGFzc2luZm8uaXNfZGVyaXZlZCA9IFRy
dWUKLSAgICAgICAgaWYgbm90IGNsYXNzaW5mby5zZWVuX29wZW5fYnJhY2U6Ci0gICAgICAgICAg
ICByZXR1cm4gICMgRXZlcnl0aGluZyBlbHNlIGluIHRoaXMgZnVuY3Rpb24gaXMgZm9yIGFmdGVy
IG9wZW4gYnJhY2UKLQotICAgICMgVGhlIGNsYXNzIG1heSBoYXZlIGJlZW4gZGVjbGFyZWQgd2l0
aCBuYW1lc3BhY2Ugb3IgY2xhc3NuYW1lIHF1YWxpZmllcnMuCi0gICAgIyBUaGUgY29uc3RydWN0
b3IgYW5kIGRlc3RydWN0b3Igd2lsbCBub3QgaGF2ZSB0aG9zZSBxdWFsaWZpZXJzLgotICAgIGJh
c2VfY2xhc3NuYW1lID0gY2xhc3NpbmZvLm5hbWUuc3BsaXQoJzo6JylbLTFdCi0KLSAgICAjIExv
b2sgZm9yIHNpbmdsZS1hcmd1bWVudCBjb25zdHJ1Y3RvcnMgdGhhdCBhcmVuJ3QgbWFya2VkIGV4
cGxpY2l0LgotICAgICMgVGVjaG5pY2FsbHkgYSB2YWxpZCBjb25zdHJ1Y3QsIGJ1dCBhZ2FpbnN0
IHN0eWxlLgotICAgIGFyZ3MgPSBtYXRjaChyJyg/PCFleHBsaWNpdClccyslc1xzKlwoKFteLCgp
XSspXCknCi0gICAgICAgICAgICAgICAgICUgcmUuZXNjYXBlKGJhc2VfY2xhc3NuYW1lKSwKLSAg
ICAgICAgICAgICAgICAgbGluZSkKLSAgICBpZiAoYXJncwotICAgICAgICBhbmQgYXJncy5ncm91
cCgxKSAhPSAndm9pZCcKLSAgICAgICAgYW5kIG5vdCBtYXRjaChyJyhjb25zdFxzKyk/JXNccyom
JyAlIHJlLmVzY2FwZShiYXNlX2NsYXNzbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgYXJn
cy5ncm91cCgxKS5zdHJpcCgpKSk6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJl
ciwgJ3J1bnRpbWUvZXhwbGljaXQnLCA1LAotICAgICAgICAgICAgICAnU2luZ2xlLWFyZ3VtZW50
IGNvbnN0cnVjdG9ycyBzaG91bGQgYmUgbWFya2VkIGV4cGxpY2l0LicpCi0KLSAgICAjIExvb2sg
Zm9yIG1ldGhvZHMgZGVjbGFyZWQgdmlydHVhbC4KLSAgICBpZiBzZWFyY2gocidcYnZpcnR1YWxc
YicsIGxpbmUpOgotICAgICAgICBjbGFzc2luZm8udmlydHVhbF9tZXRob2RfbGluZV9udW1iZXIg
PSBsaW5lX251bWJlcgotICAgICAgICAjIE9ubHkgbG9vayBmb3IgYSBkZXN0cnVjdG9yIGRlY2xh
cmF0aW9uIG9uIHRoZSBzYW1lIGxpbmUuIEl0IHdvdWxkCi0gICAgICAgICMgYmUgZXh0cmVtZWx5
IHVubGlrZWx5IGZvciB0aGUgZGVzdHJ1Y3RvciBkZWNsYXJhdGlvbiB0byBvY2N1cHkKLSAgICAg
ICAgIyBtb3JlIHRoYW4gb25lIGxpbmUuCi0gICAgICAgIGlmIHNlYXJjaChyJ34lc1xzKlwoJyAl
IGJhc2VfY2xhc3NuYW1lLCBsaW5lKToKLSAgICAgICAgICAgIGNsYXNzaW5mby5oYXNfdmlydHVh
bF9kZXN0cnVjdG9yID0gVHJ1ZQotCi0gICAgIyBMb29rIGZvciBjbGFzcyBlbmQuCi0gICAgYnJh
Y2VfZGVwdGggPSBjbGFzc2luZm8uYnJhY2VfZGVwdGgKLSAgICBicmFjZV9kZXB0aCA9IGJyYWNl
X2RlcHRoICsgbGluZS5jb3VudCgneycpIC0gbGluZS5jb3VudCgnfScpCi0gICAgaWYgYnJhY2Vf
ZGVwdGggPD0gMDoKLSAgICAgICAgY2xhc3NpbmZvID0gY2xhc3NpbmZvX3N0YWNrLnBvcCgpCi0g
ICAgICAgICMgVHJ5IHRvIGRldGVjdCBtaXNzaW5nIHZpcnR1YWwgZGVzdHJ1Y3RvciBkZWNsYXJh
dGlvbnMuCi0gICAgICAgICMgRm9yIG5vdywgb25seSB3YXJuIGlmIGEgbm9uLWRlcml2ZWQgY2xh
c3Mgd2l0aCB2aXJ0dWFsIG1ldGhvZHMgbGFja3MKLSAgICAgICAgIyBhIHZpcnR1YWwgZGVzdHJ1
Y3Rvci4gVGhpcyBpcyB0byBtYWtlIGl0IGxlc3MgbGlrZWx5IHRoYXQgcGVvcGxlIHdpbGwKLSAg
ICAgICAgIyBkZWNsYXJlIGRlcml2ZWQgdmlydHVhbCBkZXN0cnVjdG9ycyB3aXRob3V0IGRlY2xh
cmluZyB0aGUgYmFzZQotICAgICAgICAjIGRlc3RydWN0b3IgdmlydHVhbC4KLSAgICAgICAgaWYg
KChjbGFzc2luZm8udmlydHVhbF9tZXRob2RfbGluZV9udW1iZXIgaXMgbm90IE5vbmUpCi0gICAg
ICAgICAgICBhbmQgKG5vdCBjbGFzc2luZm8uaGFzX3ZpcnR1YWxfZGVzdHJ1Y3RvcikKLSAgICAg
ICAgICAgIGFuZCAobm90IGNsYXNzaW5mby5pc19kZXJpdmVkKSk6ICAjIE9ubHkgd2FybiBmb3Ig
YmFzZSBjbGFzc2VzCi0gICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgY2xhc3NpbmZvLmxpbmVf
bnVtYmVyLCAncnVudGltZS92aXJ0dWFsJywgNCwKLSAgICAgICAgICAgICAgICAgICdUaGUgY2xh
c3MgJXMgcHJvYmFibHkgbmVlZHMgYSB2aXJ0dWFsIGRlc3RydWN0b3IgZHVlIHRvICcKLSAgICAg
ICAgICAgICAgICAgICdoYXZpbmcgdmlydHVhbCBtZXRob2QocyksIG9uZSBkZWNsYXJlZCBhdCBs
aW5lICVkLicKLSAgICAgICAgICAgICAgICAgICUgKGNsYXNzaW5mby5uYW1lLCBjbGFzc2luZm8u
dmlydHVhbF9tZXRob2RfbGluZV9udW1iZXIpKQotICAgIGVsc2U6Ci0gICAgICAgIGNsYXNzaW5m
by5icmFjZV9kZXB0aCA9IGJyYWNlX2RlcHRoCi0KLQotZGVmIGNoZWNrX3NwYWNpbmdfZm9yX2Z1
bmN0aW9uX2NhbGwoZmlsZW5hbWUsIGxpbmUsIGxpbmVfbnVtYmVyLCBlcnJvcik6Ci0gICAgIiIi
Q2hlY2tzIGZvciB0aGUgY29ycmVjdG5lc3Mgb2YgdmFyaW91cyBzcGFjaW5nIGFyb3VuZCBmdW5j
dGlvbiBjYWxscy4KLQotICAgIEFyZ3M6Ci0gICAgICBmaWxlbmFtZTogVGhlIG5hbWUgb2YgdGhl
IGN1cnJlbnQgZmlsZS4KLSAgICAgIGxpbmU6IFRoZSB0ZXh0IG9mIHRoZSBsaW5lIHRvIGNoZWNr
LgotICAgICAgbGluZV9udW1iZXI6IFRoZSBudW1iZXIgb2YgdGhlIGxpbmUgdG8gY2hlY2suCi0g
ICAgICBlcnJvcjogVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBhbnkgZXJyb3JzIGZvdW5kLgot
ICAgICIiIgotCi0gICAgIyBTaW5jZSBmdW5jdGlvbiBjYWxscyBvZnRlbiBvY2N1ciBpbnNpZGUg
aWYvZm9yL2ZvcmVhY2gvd2hpbGUvc3dpdGNoCi0gICAgIyBleHByZXNzaW9ucyAtIHdoaWNoIGhh
dmUgdGhlaXIgb3duLCBtb3JlIGxpYmVyYWwgY29udmVudGlvbnMgLSB3ZQotICAgICMgZmlyc3Qg
c2VlIGlmIHdlIHNob3VsZCBiZSBsb29raW5nIGluc2lkZSBzdWNoIGFuIGV4cHJlc3Npb24gZm9y
IGEKLSAgICAjIGZ1bmN0aW9uIGNhbGwsIHRvIHdoaWNoIHdlIGNhbiBhcHBseSBtb3JlIHN0cmlj
dCBzdGFuZGFyZHMuCi0gICAgZnVuY3Rpb25fY2FsbCA9IGxpbmUgICAgIyBpZiB0aGVyZSdzIG5v
IGNvbnRyb2wgZmxvdyBjb25zdHJ1Y3QsIGxvb2sgYXQgd2hvbGUgbGluZQotICAgIGZvciBwYXR0
ZXJuIGluIChyJ1xiaWZccypcKCguKilcKVxzKnsnLAotICAgICAgICAgICAgICAgICAgICByJ1xi
Zm9yXHMqXCgoLiopXClccyp7JywKLSAgICAgICAgICAgICAgICAgICAgcidcYmZvcmVhY2hccypc
KCguKilcKVxzKnsnLAotICAgICAgICAgICAgICAgICAgICByJ1xid2hpbGVccypcKCguKilcKVxz
Klt7O10nLAotICAgICAgICAgICAgICAgICAgICByJ1xic3dpdGNoXHMqXCgoLiopXClccyp7Jyk6
Ci0gICAgICAgIG1hdGNoZWQgPSBzZWFyY2gocGF0dGVybiwgbGluZSkKLSAgICAgICAgaWYgbWF0
Y2hlZDoKLSAgICAgICAgICAgIGZ1bmN0aW9uX2NhbGwgPSBtYXRjaGVkLmdyb3VwKDEpICAgICMg
bG9vayBpbnNpZGUgdGhlIHBhcmVucyBmb3IgZnVuY3Rpb24gY2FsbHMKLSAgICAgICAgICAgIGJy
ZWFrCi0KLSAgICAjIEV4Y2VwdCBpbiBpZi9mb3IvZm9yZWFjaC93aGlsZS9zd2l0Y2gsIHRoZXJl
IHNob3VsZCBuZXZlciBiZSBzcGFjZQotICAgICMgaW1tZWRpYXRlbHkgaW5zaWRlIHBhcmVucyAo
ZWcgImYoIDMsIDQgKSIpLiAgV2UgbWFrZSBhbiBleGNlcHRpb24KLSAgICAjIGZvciBuZXN0ZWQg
cGFyZW5zICggKGErYikgKyBjICkuICBMaWtld2lzZSwgdGhlcmUgc2hvdWxkIG5ldmVyIGJlCi0g
ICAgIyBhIHNwYWNlIGJlZm9yZSBhICggd2hlbiBpdCdzIGEgZnVuY3Rpb24gYXJndW1lbnQuICBJ
IGFzc3VtZSBpdCdzIGEKLSAgICAjIGZ1bmN0aW9uIGFyZ3VtZW50IHdoZW4gdGhlIGNoYXIgYmVm
b3JlIHRoZSB3aGl0ZXNwYWNlIGlzIGxlZ2FsIGluCi0gICAgIyBhIGZ1bmN0aW9uIG5hbWUgKGFs
bnVtICsgXykgYW5kIHdlJ3JlIG5vdCBzdGFydGluZyBhIG1hY3JvLiBBbHNvIGlnbm9yZQotICAg
ICMgcG9pbnRlcnMgYW5kIHJlZmVyZW5jZXMgdG8gYXJyYXlzIGFuZCBmdW5jdGlvbnMgY296IHRo
ZXkncmUgdG9vIHRyaWNreToKLSAgICAjIHdlIHVzZSBhIHZlcnkgc2ltcGxlIHdheSB0byByZWNv
Z25pemUgdGhlc2U6Ci0gICAgIyAiIChzb21ldGhpbmcpKG1heWJlLXNvbWV0aGluZykiIG9yCi0g
ICAgIyAiIChzb21ldGhpbmcpKG1heWJlLXNvbWV0aGluZywiIG9yCi0gICAgIyAiIChzb21ldGhp
bmcpW3NvbWV0aGluZ10iCi0gICAgIyBOb3RlIHRoYXQgd2UgYXNzdW1lIHRoZSBjb250ZW50cyBv
ZiBbXSB0byBiZSBzaG9ydCBlbm91Z2ggdGhhdAotICAgICMgdGhleSdsbCBuZXZlciBuZWVkIHRv
IHdyYXAuCi0gICAgaWYgKCAgIyBJZ25vcmUgY29udHJvbCBzdHJ1Y3R1cmVzLgotICAgICAgICBu
b3Qgc2VhcmNoKHInXGIoaWZ8Zm9yfGZvcmVhY2h8d2hpbGV8c3dpdGNofHJldHVybnxuZXd8ZGVs
ZXRlKVxiJywgZnVuY3Rpb25fY2FsbCkKLSAgICAgICAgIyBJZ25vcmUgcG9pbnRlcnMvcmVmZXJl
bmNlcyB0byBmdW5jdGlvbnMuCi0gICAgICAgIGFuZCBub3Qgc2VhcmNoKHInIFwoW14pXStcKVwo
W14pXSooXCl8LCQpJywgZnVuY3Rpb25fY2FsbCkKLSAgICAgICAgIyBJZ25vcmUgcG9pbnRlcnMv
cmVmZXJlbmNlcyB0byBhcnJheXMuCi0gICAgICAgIGFuZCBub3Qgc2VhcmNoKHInIFwoW14pXStc
KVxbW15cXV0rXF0nLCBmdW5jdGlvbl9jYWxsKSk6Ci0gICAgICAgIGlmIHNlYXJjaChyJ1x3XHMq
XChbIFx0XSg/IVxzKlxcJCknLCBmdW5jdGlvbl9jYWxsKTogICAgICAjIGEgKCB1c2VkIGZvciBh
IGZuIGNhbGwKLSAgICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3doaXRl
c3BhY2UvcGFyZW5zJywgNCwKLSAgICAgICAgICAgICAgICAgICdFeHRyYSBzcGFjZSBhZnRlciAo
IGluIGZ1bmN0aW9uIGNhbGwnKQotICAgICAgICBlbGlmIHNlYXJjaChyJ1woWyBcdF0rKD8hKFxz
KlxcKXxcKCknLCBmdW5jdGlvbl9jYWxsKToKLSAgICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBs
aW5lX251bWJlciwgJ3doaXRlc3BhY2UvcGFyZW5zJywgMiwKLSAgICAgICAgICAgICAgICAgICdF
eHRyYSBzcGFjZSBhZnRlciAoJykKLSAgICAgICAgaWYgKHNlYXJjaChyJ1x3XHMrXCgnLCBmdW5j
dGlvbl9jYWxsKQotICAgICAgICAgICAgYW5kIG5vdCBzZWFyY2gocicjXHMqZGVmaW5lfHR5cGVk
ZWYnLCBmdW5jdGlvbl9jYWxsKSk6Ci0gICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9u
dW1iZXIsICd3aGl0ZXNwYWNlL3BhcmVucycsIDQsCi0gICAgICAgICAgICAgICAgICAnRXh0cmEg
c3BhY2UgYmVmb3JlICggaW4gZnVuY3Rpb24gY2FsbCcpCi0gICAgICAgICMgSWYgdGhlICkgaXMg
Zm9sbG93ZWQgb25seSBieSBhIG5ld2xpbmUgb3IgYSB7ICsgbmV3bGluZSwgYXNzdW1lIGl0J3MK
LSAgICAgICAgIyBwYXJ0IG9mIGEgY29udHJvbCBzdGF0ZW1lbnQgKGlmL3doaWxlL2V0YyksIGFu
ZCBkb24ndCBjb21wbGFpbgotICAgICAgICBpZiBzZWFyY2gocidbXilcc11ccytcKSg/IVxzKiR8
e1xzKiQpJywgZnVuY3Rpb25fY2FsbCk6Ci0gICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGlu
ZV9udW1iZXIsICd3aGl0ZXNwYWNlL3BhcmVucycsIDIsCi0gICAgICAgICAgICAgICAgICAnRXh0
cmEgc3BhY2UgYmVmb3JlICknKQotCi0KLWRlZiBpc19ibGFua19saW5lKGxpbmUpOgotICAgICIi
IlJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gbGluZSBpcyBibGFuay4KLQotICAgIFdlIGNvbnNp
ZGVyIGEgbGluZSB0byBiZSBibGFuayBpZiB0aGUgbGluZSBpcyBlbXB0eSBvciBjb25zaXN0cyBv
ZgotICAgIG9ubHkgd2hpdGUgc3BhY2VzLgotCi0gICAgQXJnczoKLSAgICAgIGxpbmU6IEEgbGlu
ZSBvZiBhIHN0cmluZy4KLQotICAgIFJldHVybnM6Ci0gICAgICBUcnVlLCBpZiB0aGUgZ2l2ZW4g
bGluZSBpcyBibGFuay4KLSAgICAiIiIKLSAgICByZXR1cm4gbm90IGxpbmUgb3IgbGluZS5pc3Nw
YWNlKCkKLQotCi1kZWYgY2hlY2tfZm9yX2Z1bmN0aW9uX2xlbmd0aHMoZmlsZW5hbWUsIGNsZWFu
X2xpbmVzLCBsaW5lX251bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5j
dGlvbl9zdGF0ZSwgZXJyb3IpOgotICAgICIiIlJlcG9ydHMgZm9yIGxvbmcgZnVuY3Rpb24gYm9k
aWVzLgotCi0gICAgRm9yIGFuIG92ZXJ2aWV3IHdoeSB0aGlzIGlzIGRvbmUsIHNlZToKLSAgICBo
dHRwOi8vZ29vZ2xlLXN0eWxlZ3VpZGUuZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rL2NwcGd1aWRl
LnhtbCNXcml0ZV9TaG9ydF9GdW5jdGlvbnMKLQotICAgIFVzZXMgYSBzaW1wbGlzdGljIGFsZ29y
aXRobSBhc3N1bWluZyBvdGhlciBzdHlsZSBndWlkZWxpbmVzCi0gICAgKGVzcGVjaWFsbHkgc3Bh
Y2luZykgYXJlIGZvbGxvd2VkLgotICAgIE9ubHkgY2hlY2tzIHVuaW5kZW50ZWQgZnVuY3Rpb25z
LCBzbyBjbGFzcyBtZW1iZXJzIGFyZSB1bmNoZWNrZWQuCi0gICAgVHJpdmlhbCBib2RpZXMgYXJl
IHVuY2hlY2tlZCwgc28gY29uc3RydWN0b3JzIHdpdGggaHVnZSBpbml0aWFsaXplciBsaXN0cwot
ICAgIG1heSBiZSBtaXNzZWQuCi0gICAgQmxhbmsvY29tbWVudCBsaW5lcyBhcmUgbm90IGNvdW50
ZWQgc28gYXMgdG8gYXZvaWQgZW5jb3VyYWdpbmcgdGhlIHJlbW92YWwKLSAgICBvZiB2ZXJ0aWNh
bCBzcGFjZSBhbmQgY29tbW1lbnRzIGp1c3QgdG8gZ2V0IHRocm91Z2ggYSBsaW50IGNoZWNrLgot
ICAgIE5PTElOVCAqb24gdGhlIGxhc3QgbGluZSBvZiBhIGZ1bmN0aW9uKiBkaXNhYmxlcyB0aGlz
IGNoZWNrLgotCi0gICAgQXJnczoKLSAgICAgIGZpbGVuYW1lOiBUaGUgbmFtZSBvZiB0aGUgY3Vy
cmVudCBmaWxlLgotICAgICAgY2xlYW5fbGluZXM6IEEgQ2xlYW5zZWRMaW5lcyBpbnN0YW5jZSBj
b250YWluaW5nIHRoZSBmaWxlLgotICAgICAgbGluZV9udW1iZXI6IFRoZSBudW1iZXIgb2YgdGhl
IGxpbmUgdG8gY2hlY2suCi0gICAgICBmdW5jdGlvbl9zdGF0ZTogQ3VycmVudCBmdW5jdGlvbiBu
YW1lIGFuZCBsaW5lcyBpbiBib2R5IHNvIGZhci4KLSAgICAgIGVycm9yOiBUaGUgZnVuY3Rpb24g
dG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91bmQuCi0gICAgIiIiCi0gICAgbGluZXMgPSBjbGVh
bl9saW5lcy5saW5lcwotICAgIGxpbmUgPSBsaW5lc1tsaW5lX251bWJlcl0KLSAgICByYXcgPSBj
bGVhbl9saW5lcy5yYXdfbGluZXMKLSAgICByYXdfbGluZSA9IHJhd1tsaW5lX251bWJlcl0KLSAg
ICBqb2luZWRfbGluZSA9ICcnCi0KLSAgICBzdGFydGluZ19mdW5jID0gRmFsc2UKLSAgICByZWdl
eHAgPSByJyhcdyhcd3w6OnxcKnxcJnxccykqKVwoJyAgIyBkZWNscyAqICYgc3BhY2U6Om5hbWUo
IC4uLgotICAgIG1hdGNoX3Jlc3VsdCA9IG1hdGNoKHJlZ2V4cCwgbGluZSkKLSAgICBpZiBtYXRj
aF9yZXN1bHQ6Ci0gICAgICAgICMgSWYgdGhlIG5hbWUgaXMgYWxsIGNhcHMgYW5kIHVuZGVyc2Nv
cmVzLCBmaWd1cmUgaXQncyBhIG1hY3JvIGFuZAotICAgICAgICAjIGlnbm9yZSBpdCwgdW5sZXNz
IGl0J3MgVEVTVCBvciBURVNUX0YuCi0gICAgICAgIGZ1bmN0aW9uX25hbWUgPSBtYXRjaF9yZXN1
bHQuZ3JvdXAoMSkuc3BsaXQoKVstMV0KLSAgICAgICAgaWYgZnVuY3Rpb25fbmFtZSA9PSAnVEVT
VCcgb3IgZnVuY3Rpb25fbmFtZSA9PSAnVEVTVF9GJyBvciAobm90IG1hdGNoKHInW0EtWl9dKyQn
LCBmdW5jdGlvbl9uYW1lKSk6Ci0gICAgICAgICAgICBzdGFydGluZ19mdW5jID0gVHJ1ZQotCi0g
ICAgaWYgc3RhcnRpbmdfZnVuYzoKLSAgICAgICAgYm9keV9mb3VuZCA9IEZhbHNlCi0gICAgICAg
IGZvciBzdGFydF9saW5lX251bWJlciBpbiB4cmFuZ2UobGluZV9udW1iZXIsIGNsZWFuX2xpbmVz
Lm51bV9saW5lcygpKToKLSAgICAgICAgICAgIHN0YXJ0X2xpbmUgPSBsaW5lc1tzdGFydF9saW5l
X251bWJlcl0KLSAgICAgICAgICAgIGpvaW5lZF9saW5lICs9ICcgJyArIHN0YXJ0X2xpbmUubHN0
cmlwKCkKLSAgICAgICAgICAgIGlmIHNlYXJjaChyJyg7fH0pJywgc3RhcnRfbGluZSk6ICAjIERl
Y2xhcmF0aW9ucyBhbmQgdHJpdmlhbCBmdW5jdGlvbnMKLSAgICAgICAgICAgICAgICBib2R5X2Zv
dW5kID0gVHJ1ZQotICAgICAgICAgICAgICAgIGJyZWFrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIyAuLi4gaWdub3JlCi0gICAgICAgICAgICBpZiBzZWFyY2gocid7Jywgc3RhcnRfbGlu
ZSk6Ci0gICAgICAgICAgICAgICAgYm9keV9mb3VuZCA9IFRydWUKLSAgICAgICAgICAgICAgICBm
dW5jdGlvbiA9IHNlYXJjaChyJygoXHd8OikqKVwoJywgbGluZSkuZ3JvdXAoMSkKLSAgICAgICAg
ICAgICAgICBpZiBtYXRjaChyJ1RFU1QnLCBmdW5jdGlvbik6ICAgICMgSGFuZGxlIFRFU1QuLi4g
bWFjcm9zCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9yZWdleHAgPSBzZWFyY2gocico
XCguKlwpKScsIGpvaW5lZF9saW5lKQotICAgICAgICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXJf
cmVnZXhwOiAgICAgICAgICAgICAjIElnbm9yZSBiYWQgc3ludGF4Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBmdW5jdGlvbiArPSBwYXJhbWV0ZXJfcmVnZXhwLmdyb3VwKDEpCi0gICAgICAgICAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKz0gJygpJwotICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uX3N0YXRlLmJlZ2luKGZ1bmN0aW9uKQotICAgICAgICAgICAgICAg
IGJyZWFrCi0gICAgICAgIGlmIG5vdCBib2R5X2ZvdW5kOgotICAgICAgICAgICAgIyBObyBib2R5
IGZvciB0aGUgZnVuY3Rpb24gKG9yIGV2aWRlbmNlIG9mIGEgbm9uLWZ1bmN0aW9uKSB3YXMgZm91
bmQuCi0gICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdyZWFkYWJpbGl0
eS9mbl9zaXplJywgNSwKLSAgICAgICAgICAgICAgICAgICdMaW50IGZhaWxlZCB0byBmaW5kIHN0
YXJ0IG9mIGZ1bmN0aW9uIGJvZHkuJykKLSAgICBlbGlmIG1hdGNoKHInXlx9XHMqJCcsIGxpbmUp
OiAgIyBmdW5jdGlvbiBlbmQKLSAgICAgICAgaWYgbm90IHNlYXJjaChyJ1xiTk9MSU5UXGInLCBy
YXdfbGluZSk6Ci0gICAgICAgICAgICBmdW5jdGlvbl9zdGF0ZS5jaGVjayhlcnJvciwgZmlsZW5h
bWUsIGxpbmVfbnVtYmVyKQotICAgICAgICBmdW5jdGlvbl9zdGF0ZS5lbmQoKQotICAgIGVsaWYg
bm90IG1hdGNoKHInXlxzKiQnLCBsaW5lKToKLSAgICAgICAgZnVuY3Rpb25fc3RhdGUuY291bnQo
KSAgIyBDb3VudCBub24tYmxhbmsvbm9uLWNvbW1lbnQgbGluZXMuCi0KLQotZGVmIGNoZWNrX3Nw
YWNpbmcoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZXJyb3IpOgotICAgICIi
IkNoZWNrcyBmb3IgdGhlIGNvcnJlY3RuZXNzIG9mIHZhcmlvdXMgc3BhY2luZyBpc3N1ZXMgaW4g
dGhlIGNvZGUuCi0KLSAgICBUaGluZ3Mgd2UgY2hlY2sgZm9yOiBzcGFjZXMgYXJvdW5kIG9wZXJh
dG9ycywgc3BhY2VzIGFmdGVyCi0gICAgaWYvZm9yL3doaWxlL3N3aXRjaCwgbm8gc3BhY2VzIGFy
b3VuZCBwYXJlbnMgaW4gZnVuY3Rpb24gY2FsbHMsIHR3bwotICAgIHNwYWNlcyBiZXR3ZWVuIGNv
ZGUgYW5kIGNvbW1lbnQsIGRvbid0IHN0YXJ0IGEgYmxvY2sgd2l0aCBhIGJsYW5rCi0gICAgbGlu
ZSwgZG9uJ3QgZW5kIGEgZnVuY3Rpb24gd2l0aCBhIGJsYW5rIGxpbmUsIGRvbid0IGhhdmUgdG9v
IG1hbnkKLSAgICBibGFuayBsaW5lcyBpbiBhIHJvdy4KLQotICAgIEFyZ3M6Ci0gICAgICBmaWxl
bmFtZTogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlsZS4KLSAgICAgIGNsZWFuX2xpbmVzOiBB
IENsZWFuc2VkTGluZXMgaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZmlsZS4KLSAgICAgIGxpbmVf
bnVtYmVyOiBUaGUgbnVtYmVyIG9mIHRoZSBsaW5lIHRvIGNoZWNrLgotICAgICAgZXJyb3I6IFRo
ZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4KLSAgICAiIiIKLQotICAg
IHJhdyA9IGNsZWFuX2xpbmVzLnJhd19saW5lcwotICAgIGxpbmUgPSByYXdbbGluZV9udW1iZXJd
Ci0KLSAgICAjIEJlZm9yZSBuaXhpbmcgY29tbWVudHMsIGNoZWNrIGlmIHRoZSBsaW5lIGlzIGJs
YW5rIGZvciBubyBnb29kCi0gICAgIyByZWFzb24uICBUaGlzIGluY2x1ZGVzIHRoZSBmaXJzdCBs
aW5lIGFmdGVyIGEgYmxvY2sgaXMgb3BlbmVkLCBhbmQKLSAgICAjIGJsYW5rIGxpbmVzIGF0IHRo
ZSBlbmQgb2YgYSBmdW5jdGlvbiAoaWUsIHJpZ2h0IGJlZm9yZSBhIGxpbmUgbGlrZSAnfScpLgot
ICAgIGlmIGlzX2JsYW5rX2xpbmUobGluZSk6Ci0gICAgICAgIGVsaWRlZCA9IGNsZWFuX2xpbmVz
LmVsaWRlZAotICAgICAgICBwcmV2aW91c19saW5lID0gZWxpZGVkW2xpbmVfbnVtYmVyIC0gMV0K
LSAgICAgICAgcHJldmlvdXNfYnJhY2UgPSBwcmV2aW91c19saW5lLnJmaW5kKCd7JykKLSAgICAg
ICAgIyBGSVhNRTogRG9uJ3QgY29tcGxhaW4gaWYgbGluZSBiZWZvcmUgYmxhbmsgbGluZSwgYW5k
IGxpbmUgYWZ0ZXIsCi0gICAgICAgICMgICAgICAgIGJvdGggc3RhcnQgd2l0aCBhbG51bXMgYW5k
IGFyZSBpbmRlbnRlZCB0aGUgc2FtZSBhbW91bnQuCi0gICAgICAgICMgICAgICAgIFRoaXMgaWdu
b3JlcyB3aGl0ZXNwYWNlIGF0IHRoZSBzdGFydCBvZiBhIG5hbWVzcGFjZSBibG9jawotICAgICAg
ICAjICAgICAgICBiZWNhdXNlIHRob3NlIGFyZSBub3QgdXN1YWxseSBpbmRlbnRlZC4KLSAgICAg
ICAgaWYgKHByZXZpb3VzX2JyYWNlICE9IC0xIGFuZCBwcmV2aW91c19saW5lW3ByZXZpb3VzX2Jy
YWNlOl0uZmluZCgnfScpID09IC0xCi0gICAgICAgICAgICBhbmQgcHJldmlvdXNfbGluZVs6cHJl
dmlvdXNfYnJhY2VdLmZpbmQoJ25hbWVzcGFjZScpID09IC0xKToKLSAgICAgICAgICAgICMgT0ss
IHdlIGhhdmUgYSBibGFuayBsaW5lIGF0IHRoZSBzdGFydCBvZiBhIGNvZGUgYmxvY2suICBCZWZv
cmUgd2UKLSAgICAgICAgICAgICMgY29tcGxhaW4sIHdlIGNoZWNrIGlmIGl0IGlzIGFuIGV4Y2Vw
dGlvbiB0byB0aGUgcnVsZTogVGhlIHByZXZpb3VzCi0gICAgICAgICAgICAjIG5vbi1lbXB0eSBs
aW5lIGhhcyB0aGUgcGFyYW1ldGVycyBvZiBhIGZ1bmN0aW9uIGhlYWRlciB0aGF0IGFyZSBpbmRl
bnRlZAotICAgICAgICAgICAgIyA0IHNwYWNlcyAoYmVjYXVzZSB0aGV5IGRpZCBub3QgZml0IGlu
IGEgODAgY29sdW1uIGxpbmUgd2hlbiBwbGFjZWQgb24KLSAgICAgICAgICAgICMgdGhlIHNhbWUg
bGluZSBhcyB0aGUgZnVuY3Rpb24gbmFtZSkuICBXZSBhbHNvIGNoZWNrIGZvciB0aGUgY2FzZSB3
aGVyZQotICAgICAgICAgICAgIyB0aGUgcHJldmlvdXMgbGluZSBpcyBpbmRlbnRlZCA2IHNwYWNl
cywgd2hpY2ggbWF5IGhhcHBlbiB3aGVuIHRoZQotICAgICAgICAgICAgIyBpbml0aWFsaXplcnMg
b2YgYSBjb25zdHJ1Y3RvciBkbyBub3QgZml0IGludG8gYSA4MCBjb2x1bW4gbGluZS4KLSAgICAg
ICAgICAgIGV4Y2VwdGlvbiA9IEZhbHNlCi0gICAgICAgICAgICBpZiBtYXRjaChyJyB7Nn1cdycs
IHByZXZpb3VzX2xpbmUpOiAgIyBJbml0aWFsaXplciBsaXN0PwotICAgICAgICAgICAgICAgICMg
V2UgYXJlIGxvb2tpbmcgZm9yIHRoZSBvcGVuaW5nIGNvbHVtbiBvZiBpbml0aWFsaXplciBsaXN0
LCB3aGljaAotICAgICAgICAgICAgICAgICMgc2hvdWxkIGJlIGluZGVudGVkIDQgc3BhY2VzIHRv
IGNhdXNlIDYgc3BhY2UgaW5kZW50YXRpb24gYWZ0ZXJ3YXJkcy4KLSAgICAgICAgICAgICAgICBz
ZWFyY2hfcG9zaXRpb24gPSBsaW5lX251bWJlciAtIDIKLSAgICAgICAgICAgICAgICB3aGlsZSAo
c2VhcmNoX3Bvc2l0aW9uID49IDAKLSAgICAgICAgICAgICAgICAgICAgICAgYW5kIG1hdGNoKHIn
IHs2fVx3JywgZWxpZGVkW3NlYXJjaF9wb3NpdGlvbl0pKToKLSAgICAgICAgICAgICAgICAgICAg
c2VhcmNoX3Bvc2l0aW9uIC09IDEKLSAgICAgICAgICAgICAgICBleGNlcHRpb24gPSAoc2VhcmNo
X3Bvc2l0aW9uID49IDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGVsaWRlZFtz
ZWFyY2hfcG9zaXRpb25dWzo1XSA9PSAnICAgIDonKQotICAgICAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgICAgICAjIFNlYXJjaCBmb3IgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50cyBvciBhbiBpbml0
aWFsaXplciBsaXN0LiAgV2UgdXNlIGEKLSAgICAgICAgICAgICAgICAjIHNpbXBsZSBoZXVyaXN0
aWMgaGVyZTogSWYgdGhlIGxpbmUgaXMgaW5kZW50ZWQgNCBzcGFjZXM7IGFuZCB3ZSBoYXZlIGEK
LSAgICAgICAgICAgICAgICAjIGNsb3NpbmcgcGFyZW4sIHdpdGhvdXQgdGhlIG9wZW5pbmcgcGFy
ZW4sIGZvbGxvd2VkIGJ5IGFuIG9wZW5pbmcgYnJhY2UKLSAgICAgICAgICAgICAgICAjIG9yIGNv
bG9uIChmb3IgaW5pdGlhbGl6ZXIgbGlzdHMpIHdlIGFzc3VtZSB0aGF0IGl0IGlzIHRoZSBsYXN0
IGxpbmUgb2YKLSAgICAgICAgICAgICAgICAjIGEgZnVuY3Rpb24gaGVhZGVyLiAgSWYgd2UgaGF2
ZSBhIGNvbG9uIGluZGVudGVkIDQgc3BhY2VzLCBpdCBpcyBhbgotICAgICAgICAgICAgICAgICMg
aW5pdGlhbGl6ZXIgbGlzdC4KLSAgICAgICAgICAgICAgICBleGNlcHRpb24gPSAobWF0Y2gocicg
ezR9XHdbXlwoXSpcKVxzKihjb25zdFxzKik/KFx7XHMqJHw6KScsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByZXZpb3VzX2xpbmUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9yIG1hdGNoKHInIHs0fTonLCBwcmV2aW91c19saW5lKSkKLQotICAgICAgICAgICAg
aWYgbm90IGV4Y2VwdGlvbjoKLSAgICAgICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9u
dW1iZXIsICd3aGl0ZXNwYWNlL2JsYW5rX2xpbmUnLCAyLAotICAgICAgICAgICAgICAgICAgICAg
ICdCbGFuayBsaW5lIGF0IHRoZSBzdGFydCBvZiBhIGNvZGUgYmxvY2suICBJcyB0aGlzIG5lZWRl
ZD8nKQotICAgICAgICAjIFRoaXMgZG9lc24ndCBpZ25vcmUgd2hpdGVzcGFjZSBhdCB0aGUgZW5k
IG9mIGEgbmFtZXNwYWNlIGJsb2NrCi0gICAgICAgICMgYmVjYXVzZSB0aGF0IGlzIHRvbyBoYXJk
IHdpdGhvdXQgcGFpcmluZyBvcGVuL2Nsb3NlIGJyYWNlczsKLSAgICAgICAgIyBob3dldmVyLCBh
IHNwZWNpYWwgZXhjZXB0aW9uIGlzIG1hZGUgZm9yIG5hbWVzcGFjZSBjbG9zaW5nCi0gICAgICAg
ICMgYnJhY2tldHMgd2hpY2ggaGF2ZSBhIGNvbW1lbnQgY29udGFpbmluZyAibmFtZXNwYWNlIi4K
LSAgICAgICAgIwotICAgICAgICAjIEFsc28sIGlnbm9yZSBibGFuayBsaW5lcyBhdCB0aGUgZW5k
IG9mIGEgYmxvY2sgaW4gYSBsb25nIGlmLWVsc2UKLSAgICAgICAgIyBjaGFpbiwgbGlrZSB0aGlz
OgotICAgICAgICAjICAgaWYgKGNvbmRpdGlvbjEpIHsKLSAgICAgICAgIyAgICAgLy8gU29tZXRo
aW5nIGZvbGxvd2VkIGJ5IGEgYmxhbmsgbGluZQotICAgICAgICAjCi0gICAgICAgICMgICB9IGVs
c2UgaWYgKGNvbmRpdGlvbjIpIHsKLSAgICAgICAgIyAgICAgLy8gU29tZXRoaW5nIGVsc2UKLSAg
ICAgICAgIyAgIH0KLSAgICAgICAgaWYgbGluZV9udW1iZXIgKyAxIDwgY2xlYW5fbGluZXMubnVt
X2xpbmVzKCk6Ci0gICAgICAgICAgICBuZXh0X2xpbmUgPSByYXdbbGluZV9udW1iZXIgKyAxXQot
ICAgICAgICAgICAgaWYgKG5leHRfbGluZQotICAgICAgICAgICAgICAgIGFuZCBtYXRjaChyJ1xz
Kn0nLCBuZXh0X2xpbmUpCi0gICAgICAgICAgICAgICAgYW5kIG5leHRfbGluZS5maW5kKCduYW1l
c3BhY2UnKSA9PSAtMQotICAgICAgICAgICAgICAgIGFuZCBuZXh0X2xpbmUuZmluZCgnfSBlbHNl
ICcpID09IC0xKToKLSAgICAgICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIs
ICd3aGl0ZXNwYWNlL2JsYW5rX2xpbmUnLCAzLAotICAgICAgICAgICAgICAgICAgICAgICdCbGFu
ayBsaW5lIGF0IHRoZSBlbmQgb2YgYSBjb2RlIGJsb2NrLiAgSXMgdGhpcyBuZWVkZWQ/JykKLQot
ICAgICMgTmV4dCwgd2UgY29tcGxhaW4gaWYgdGhlcmUncyBhIGNvbW1lbnQgdG9vIG5lYXIgdGhl
IHRleHQKLSAgICBjb21tZW50X3Bvc2l0aW9uID0gbGluZS5maW5kKCcvLycpCi0gICAgaWYgY29t
bWVudF9wb3NpdGlvbiAhPSAtMToKLSAgICAgICAgIyBDaGVjayBpZiB0aGUgLy8gbWF5IGJlIGlu
IHF1b3Rlcy4gIElmIHNvLCBpZ25vcmUgaXQKLSAgICAgICAgIyBDb21wYXJpc29ucyBtYWRlIGV4
cGxpY2l0IGZvciBjbGFyaXR5IC0tIHB5bGludDogZGlzYWJsZS1tc2c9QzY0MDMKLSAgICAgICAg
aWYgKGxpbmUuY291bnQoJyInLCAwLCBjb21tZW50X3Bvc2l0aW9uKSAtIGxpbmUuY291bnQoJ1xc
IicsIDAsIGNvbW1lbnRfcG9zaXRpb24pKSAlIDIgPT0gMDogICAjIG5vdCBpbiBxdW90ZXMKLSAg
ICAgICAgICAgICMgQWxsb3cgb25lIHNwYWNlIGJlZm9yZSBlbmQgb2YgbGluZSBjb21tZW50Lgot
ICAgICAgICAgICAgaWYgKG5vdCBtYXRjaChyJ15ccyokJywgbGluZVs6Y29tbWVudF9wb3NpdGlv
bl0pCi0gICAgICAgICAgICAgICAgYW5kIChjb21tZW50X3Bvc2l0aW9uID49IDEKLSAgICAgICAg
ICAgICAgICBhbmQgKChsaW5lW2NvbW1lbnRfcG9zaXRpb24gLSAxXSBub3QgaW4gc3RyaW5nLndo
aXRlc3BhY2UpCi0gICAgICAgICAgICAgICAgICAgICBvciAoY29tbWVudF9wb3NpdGlvbiA+PSAy
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGxpbmVbY29tbWVudF9wb3NpdGlvbiAtIDJd
IGluIHN0cmluZy53aGl0ZXNwYWNlKSkpKToKLSAgICAgICAgICAgICAgICBlcnJvcihmaWxlbmFt
ZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL2NvbW1lbnRzJywgNSwKLSAgICAgICAgICAgICAg
ICAgICAgICAnT25lIHNwYWNlIGJlZm9yZSBlbmQgb2YgbGluZSBjb21tZW50cycpCi0gICAgICAg
ICAgICAjIFRoZXJlIHNob3VsZCBhbHdheXMgYmUgYSBzcGFjZSBiZXR3ZWVuIHRoZSAvLyBhbmQg
dGhlIGNvbW1lbnQKLSAgICAgICAgICAgIGNvbW1lbnRlbmQgPSBjb21tZW50X3Bvc2l0aW9uICsg
MgotICAgICAgICAgICAgaWYgY29tbWVudGVuZCA8IGxlbihsaW5lKSBhbmQgbm90IGxpbmVbY29t
bWVudGVuZF0gPT0gJyAnOgotICAgICAgICAgICAgICAgICMgYnV0IHNvbWUgbGluZXMgYXJlIGV4
Y2VwdGlvbnMgLS0gZS5nLiBpZiB0aGV5J3JlIGJpZwotICAgICAgICAgICAgICAgICMgY29tbWVu
dCBkZWxpbWl0ZXJzIGxpa2U6Ci0gICAgICAgICAgICAgICAgIyAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAg
ICAjIG9yIHRoZXkgYmVnaW4gd2l0aCBtdWx0aXBsZSBzbGFzaGVzIGZvbGxvd2VkIGJ5IGEgc3Bh
Y2U6Ci0gICAgICAgICAgICAgICAgIyAvLy8vLy8vLyBIZWFkZXIgY29tbWVudAotICAgICAgICAg
ICAgICAgIG1hdGNoZWQgPSAoc2VhcmNoKHInWz0vLV17NCx9XHMqJCcsIGxpbmVbY29tbWVudGVu
ZDpdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Igc2VhcmNoKHInXi8rICcsIGxpbmVb
Y29tbWVudGVuZDpdKSkKLSAgICAgICAgICAgICAgICBpZiBub3QgbWF0Y2hlZDoKLSAgICAgICAg
ICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9jb21t
ZW50cycsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdTaG91bGQgaGF2ZSBhIHNwYWNl
IGJldHdlZW4gLy8gYW5kIGNvbW1lbnQnKQotCi0gICAgbGluZSA9IGNsZWFuX2xpbmVzLmVsaWRl
ZFtsaW5lX251bWJlcl0gICMgZ2V0IHJpZCBvZiBjb21tZW50cyBhbmQgc3RyaW5ncwotCi0gICAg
IyBEb24ndCB0cnkgdG8gZG8gc3BhY2luZyBjaGVja3MgZm9yIG9wZXJhdG9yIG1ldGhvZHMKLSAg
ICBsaW5lID0gc3ViKHInb3BlcmF0b3IoPT18IT18PHw8PHw8PXw+PXw+Pnw+KVwoJywgJ29wZXJh
dG9yXCgnLCBsaW5lKQotICAgICMgRG9uJ3QgdHJ5IHRvIGRvIHNwYWNpbmcgY2hlY2tzIGZvciAj
aW5jbHVkZSBvciAjaW1wb3J0IHN0YXRlbWVudHMgYXQKLSAgICAjIG1pbmltdW0gYmVjYXVzZSBp
dCBtZXNzZXMgdXAgY2hlY2tzIGZvciBzcGFjaW5nIGFyb3VuZCAvCi0gICAgaWYgbWF0Y2gocidc
cyojXHMqKD86aW5jbHVkZXxpbXBvcnQpJywgbGluZSk6Ci0gICAgICAgIHJldHVybgotICAgIGlm
IHNlYXJjaChyJ1tcdy5dPVtcdy5dJywgbGluZSk6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBs
aW5lX251bWJlciwgJ3doaXRlc3BhY2Uvb3BlcmF0b3JzJywgNCwKLSAgICAgICAgICAgICAgJ01p
c3Npbmcgc3BhY2VzIGFyb3VuZCA9JykKLQotICAgICMgRklYTUU6IEl0J3Mgbm90IG9rIHRvIGhh
dmUgc3BhY2VzIGFyb3VuZCBiaW5hcnkgb3BlcmF0b3JzIGxpa2UgLgotCi0gICAgIyBZb3Ugc2hv
dWxkIGFsd2F5cyBoYXZlIHdoaXRlc3BhY2UgYXJvdW5kIGJpbmFyeSBvcGVyYXRvcnMuCi0gICAg
IyBBbGFzLCB3ZSBjYW4ndCB0ZXN0IDwgb3IgPiBiZWNhdXNlIHRoZXkncmUgbGVnaXRpbWF0ZWx5
IHVzZWQgc2FucyBzcGFjZXMKLSAgICAjIChhLT5iLCB2ZWN0b3I8aW50PiBhKS4gIFRoZSBvbmx5
IHRpbWUgd2UgY2FuIHRlbGwgaXMgYSA8IHdpdGggbm8gPiwgYW5kCi0gICAgIyBvbmx5IGlmIGl0
J3Mgbm90IHRlbXBsYXRlIHBhcmFtcyBsaXN0IHNwaWxsaW5nIGludG8gdGhlIG5leHQgbGluZS4K
LSAgICBtYXRjaGVkID0gc2VhcmNoKHInW148Pj0hXHNdKD09fCE9fFwrPXwtPXxcKj18Lz18L3xc
fD18Jj18PDw9fD4+PXw8PXw+PXxcfFx8fFx8fCYmfD4+fDw8KVtePD49IVxzXScsIGxpbmUpCi0g
ICAgaWYgbm90IG1hdGNoZWQ6Ci0gICAgICAgICMgTm90ZSB0aGF0IHdoaWxlIGl0IHNlZW1zIHRo
YXQgdGhlICc8W148XSonIHRlcm0gaW4gdGhlIGZvbGxvd2luZwotICAgICAgICAjIHJlZ2V4cCBj
b3VsZCBiZSBzaW1wbGlmaWVkIHRvICc8LionLCB3aGljaCB3b3VsZCBpbmRlZWQgbWF0Y2gKLSAg
ICAgICAgIyB0aGUgc2FtZSBjbGFzcyBvZiBzdHJpbmdzLCB0aGUgW148XSBtZWFucyB0aGF0IHNl
YXJjaGluZyBmb3IgdGhlCi0gICAgICAgICMgcmVnZXhwIHRha2VzIGxpbmVhciByYXRoZXIgdGhh
biBxdWFkcmF0aWMgdGltZS4KLSAgICAgICAgaWYgbm90IHNlYXJjaChyJzxbXjxdKixccyokJywg
bGluZSk6ICAjIHRlbXBsYXRlIHBhcmFtcyBzcGlsbAotICAgICAgICAgICAgbWF0Y2hlZCA9IHNl
YXJjaChyJ1tePD49IVxzXSg8KVtePD49IVxzXShbXj5dfC0+KSokJywgbGluZSkKLSAgICBpZiBt
YXRjaGVkOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNl
L29wZXJhdG9ycycsIDMsCi0gICAgICAgICAgICAgICdNaXNzaW5nIHNwYWNlcyBhcm91bmQgJXMn
ICUgbWF0Y2hlZC5ncm91cCgxKSkKLQotICAgICMgVGhlcmUgc2hvdWxkbid0IGJlIHNwYWNlIGFy
b3VuZCB1bmFyeSBvcGVyYXRvcnMKLSAgICBtYXRjaGVkID0gc2VhcmNoKHInKCFcc3x+XHN8W1xz
XS0tW1xzO118W1xzXVwrXCtbXHM7XSknLCBsaW5lKQotICAgIGlmIG1hdGNoZWQ6Ci0gICAgICAg
IGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3doaXRlc3BhY2Uvb3BlcmF0b3JzJywgNCwK
LSAgICAgICAgICAgICAgJ0V4dHJhIHNwYWNlIGZvciBvcGVyYXRvciAlcycgJSBtYXRjaGVkLmdy
b3VwKDEpKQotCi0gICAgIyBBIHBldCBwZWV2ZSBvZiBtaW5lOiBubyBzcGFjZXMgYWZ0ZXIgYW4g
aWYsIHdoaWxlLCBzd2l0Y2gsIG9yIGZvcgotICAgIG1hdGNoZWQgPSBzZWFyY2gocicgKGlmXCh8
Zm9yXCh8Zm9yZWFjaFwofHdoaWxlXCh8c3dpdGNoXCgpJywgbGluZSkKLSAgICBpZiBtYXRjaGVk
OgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL3BhcmVu
cycsIDUsCi0gICAgICAgICAgICAgICdNaXNzaW5nIHNwYWNlIGJlZm9yZSAoIGluICVzJyAlIG1h
dGNoZWQuZ3JvdXAoMSkpCi0KLSAgICAjIEZvciBpZi9mb3IvZm9yZWFjaC93aGlsZS9zd2l0Y2gs
IHRoZSBsZWZ0IGFuZCByaWdodCBwYXJlbnMgc2hvdWxkIGJlCi0gICAgIyBjb25zaXN0ZW50IGFi
b3V0IGhvdyBtYW55IHNwYWNlcyBhcmUgaW5zaWRlIHRoZSBwYXJlbnMsIGFuZAotICAgICMgdGhl
cmUgc2hvdWxkIGVpdGhlciBiZSB6ZXJvIG9yIG9uZSBzcGFjZXMgaW5zaWRlIHRoZSBwYXJlbnMu
Ci0gICAgIyBXZSBkb24ndCB3YW50OiAiaWYgKCBmb28pIiBvciAiaWYgKCBmb28gICApIi4KLSAg
ICAjIEV4Y2VwdGlvbjogImZvciAoIDsgZm9vOyBiYXIpIiBhbmQgImZvciAoZm9vOyBiYXI7ICki
IGFyZSBhbGxvd2VkLgotICAgIG1hdGNoZWQgPSBzZWFyY2gocidcYihpZnxmb3J8Zm9yZWFjaHx3
aGlsZXxzd2l0Y2gpXHMqXCgoWyBdKikoLikuKlteIF0rKFsgXSopXClccyp7XHMqJCcsCi0gICAg
ICAgICAgICAgICAgICAgICBsaW5lKQotICAgIGlmIG1hdGNoZWQ6Ci0gICAgICAgIGlmIGxlbiht
YXRjaGVkLmdyb3VwKDIpKSAhPSBsZW4obWF0Y2hlZC5ncm91cCg0KSk6Ci0gICAgICAgICAgICBp
ZiBub3QgKG1hdGNoZWQuZ3JvdXAoMykgPT0gJzsnCi0gICAgICAgICAgICAgICAgICAgIGFuZCBs
ZW4obWF0Y2hlZC5ncm91cCgyKSkgPT0gMSArIGxlbihtYXRjaGVkLmdyb3VwKDQpKQotICAgICAg
ICAgICAgICAgICAgICBvciBub3QgbWF0Y2hlZC5ncm91cCgyKSBhbmQgc2VhcmNoKHInXGJmb3Jc
cypcKC4qOyBcKScsIGxpbmUpKToKLSAgICAgICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGlu
ZV9udW1iZXIsICd3aGl0ZXNwYWNlL3BhcmVucycsIDUsCi0gICAgICAgICAgICAgICAgICAgICAg
J01pc21hdGNoaW5nIHNwYWNlcyBpbnNpZGUgKCkgaW4gJXMnICUgbWF0Y2hlZC5ncm91cCgxKSkK
LSAgICAgICAgaWYgbm90IGxlbihtYXRjaGVkLmdyb3VwKDIpKSBpbiBbMCwgMV06Ci0gICAgICAg
ICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL3BhcmVucycsIDUs
Ci0gICAgICAgICAgICAgICAgICAnU2hvdWxkIGhhdmUgemVybyBvciBvbmUgc3BhY2VzIGluc2lk
ZSAoIGFuZCApIGluICVzJyAlCi0gICAgICAgICAgICAgICAgICBtYXRjaGVkLmdyb3VwKDEpKQot
Ci0gICAgIyBZb3Ugc2hvdWxkIGFsd2F5cyBoYXZlIGEgc3BhY2UgYWZ0ZXIgYSBjb21tYSAoZWl0
aGVyIGFzIGZuIGFyZyBvciBvcGVyYXRvcikKLSAgICBpZiBzZWFyY2gocicsW15cc10nLCBsaW5l
KToKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9jb21t
YScsIDMsCi0gICAgICAgICAgICAgICdNaXNzaW5nIHNwYWNlIGFmdGVyICwnKQotCi0gICAgaWYg
ZmlsZW5hbWUuZW5kc3dpdGgoJy5jcHAnKToKLSAgICAgICAgIyBDKysgc2hvdWxkIGhhdmUgdGhl
ICYgb3IgKiBiZXNpZGUgdGhlIHR5cGUgbm90IHRoZSB2YXJpYWJsZSBuYW1lLgotICAgICAgICBt
YXRjaGVkID0gbWF0Y2gocidccypcdysoPzwhXGJyZXR1cm4pXHMrKD9QPHBvaW50ZXJfb3BlcmF0
b3I+XCp8XCYpXHcrJywgbGluZSkKLSAgICAgICAgaWYgbWF0Y2hlZDoKLSAgICAgICAgICAgIGVy
cm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3doaXRlc3BhY2UvZGVjbGFyYXRpb24nLCAzLAot
ICAgICAgICAgICAgICAgICAgJ0RlY2xhcmF0aW9uIGhhcyBzcGFjZSBiZXR3ZWVuIHR5cGUgbmFt
ZSBhbmQgJXMgaW4gJXMnICUgKG1hdGNoZWQuZ3JvdXAoJ3BvaW50ZXJfb3BlcmF0b3InKSwgbWF0
Y2hlZC5ncm91cCgwKS5zdHJpcCgpKSkKLQotICAgIGVsaWYgZmlsZW5hbWUuZW5kc3dpdGgoJy5j
Jyk6Ci0gICAgICAgICMgQyBQb2ludGVyIGRlY2xhcmF0aW9uIHNob3VsZCBoYXZlIHRoZSAqIGJl
c2lkZSB0aGUgdmFyaWFibGUgbm90IHRoZSB0eXBlIG5hbWUuCi0gICAgICAgIG1hdGNoZWQgPSBz
ZWFyY2gocideXHMqXHcrXCpccytcdysnLCBsaW5lKQotICAgICAgICBpZiBtYXRjaGVkOgotICAg
ICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9kZWNsYXJh
dGlvbicsIDMsCi0gICAgICAgICAgICAgICAgICAnRGVjbGFyYXRpb24gaGFzIHNwYWNlIGJldHdl
ZW4gKiBhbmQgdmFyaWFibGUgbmFtZSBpbiAlcycgJSBtYXRjaGVkLmdyb3VwKDApLnN0cmlwKCkp
Ci0KLSAgICAjIE5leHQgd2Ugd2lsbCBsb29rIGZvciBpc3N1ZXMgd2l0aCBmdW5jdGlvbiBjYWxs
cy4KLSAgICBjaGVja19zcGFjaW5nX2Zvcl9mdW5jdGlvbl9jYWxsKGZpbGVuYW1lLCBsaW5lLCBs
aW5lX251bWJlciwgZXJyb3IpCi0KLSAgICAjIEV4Y2VwdCBhZnRlciBhbiBvcGVuaW5nIHBhcmVu
LCB5b3Ugc2hvdWxkIGhhdmUgc3BhY2VzIGJlZm9yZSB5b3VyIGJyYWNlcy4KLSAgICAjIEFuZCBz
aW5jZSB5b3Ugc2hvdWxkIG5ldmVyIGhhdmUgYnJhY2VzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBs
aW5lLCB0aGlzIGlzCi0gICAgIyBhbiBlYXN5IHRlc3QuCi0gICAgaWYgc2VhcmNoKHInW14gKHtd
eycsIGxpbmUpOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNw
YWNlL2JyYWNlcycsIDUsCi0gICAgICAgICAgICAgICdNaXNzaW5nIHNwYWNlIGJlZm9yZSB7JykK
LQotICAgICMgTWFrZSBzdXJlICd9IGVsc2UgeycgaGFzIHNwYWNlcy4KLSAgICBpZiBzZWFyY2go
cid9ZWxzZScsIGxpbmUpOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3
aGl0ZXNwYWNlL2JyYWNlcycsIDUsCi0gICAgICAgICAgICAgICdNaXNzaW5nIHNwYWNlIGJlZm9y
ZSBlbHNlJykKLQotICAgICMgWW91IHNob3VsZG4ndCBoYXZlIHNwYWNlcyBiZWZvcmUgeW91ciBi
cmFja2V0cywgZXhjZXB0IG1heWJlIGFmdGVyCi0gICAgIyAnZGVsZXRlIFtdJyBvciAnbmV3IGNo
YXIgKiBbXScuCi0gICAgaWYgc2VhcmNoKHInXHdccytcWycsIGxpbmUpIGFuZCBub3Qgc2VhcmNo
KHInZGVsZXRlXHMrXFsnLCBsaW5lKToKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVt
YmVyLCAnd2hpdGVzcGFjZS9icmFjZXMnLCA1LAotICAgICAgICAgICAgICAnRXh0cmEgc3BhY2Ug
YmVmb3JlIFsnKQotCi0gICAgIyBZb3Ugc2hvdWxkbid0IGhhdmUgYSBzcGFjZSBiZWZvcmUgYSBz
ZW1pY29sb24gYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4KLSAgICAjIFRoZXJlJ3MgYSBzcGVjaWFs
IGNhc2UgZm9yICJmb3IiIHNpbmNlIHRoZSBzdHlsZSBndWlkZSBhbGxvd3Mgc3BhY2UgYmVmb3Jl
Ci0gICAgIyB0aGUgc2VtaWNvbG9uIHRoZXJlLgotICAgIGlmIHNlYXJjaChyJzpccyo7XHMqJCcs
IGxpbmUpOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNl
L3NlbWljb2xvbicsIDUsCi0gICAgICAgICAgICAgICdTZW1pY29sb24gZGVmaW5pbmcgZW1wdHkg
c3RhdGVtZW50LiBVc2UgeyB9IGluc3RlYWQuJykKLSAgICBlbGlmIHNlYXJjaChyJ15ccyo7XHMq
JCcsIGxpbmUpOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNw
YWNlL3NlbWljb2xvbicsIDUsCi0gICAgICAgICAgICAgICdMaW5lIGNvbnRhaW5zIG9ubHkgc2Vt
aWNvbG9uLiBJZiB0aGlzIHNob3VsZCBiZSBhbiBlbXB0eSBzdGF0ZW1lbnQsICcKLSAgICAgICAg
ICAgICAgJ3VzZSB7IH0gaW5zdGVhZC4nKQotICAgIGVsaWYgKHNlYXJjaChyJ1xzKztccyokJywg
bGluZSkgYW5kIG5vdCBzZWFyY2gocidcYmZvclxiJywgbGluZSkpOgotICAgICAgICBlcnJvcihm
aWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL3NlbWljb2xvbicsIDUsCi0gICAgICAg
ICAgICAgICdFeHRyYSBzcGFjZSBiZWZvcmUgbGFzdCBzZW1pY29sb24uIElmIHRoaXMgc2hvdWxk
IGJlIGFuIGVtcHR5ICcKLSAgICAgICAgICAgICAgJ3N0YXRlbWVudCwgdXNlIHsgfSBpbnN0ZWFk
LicpCi0gICAgZWxpZiAoc2VhcmNoKHInXGIoZm9yfHdoaWxlKVxzKlwoLipcKVxzKjtccyokJywg
bGluZSkKLSAgICAgICAgICBhbmQgbGluZS5jb3VudCgnKCcpID09IGxpbmUuY291bnQoJyknKQot
ICAgICAgICAgICMgQWxsb3cgZG8ge30gd2hpbGUoKTsKLSAgICAgICAgICBhbmQgbm90IHNlYXJj
aChyJ31ccyp3aGlsZScsIGxpbmUpKToKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVt
YmVyLCAnd2hpdGVzcGFjZS9zZW1pY29sb24nLCA1LAotICAgICAgICAgICAgICAnU2VtaWNvbG9u
IGRlZmluaW5nIGVtcHR5IHN0YXRlbWVudCBmb3IgdGhpcyBsb29wLiBVc2UgeyB9IGluc3RlYWQu
JykKLQotCi1kZWYgZ2V0X3ByZXZpb3VzX25vbl9ibGFua19saW5lKGNsZWFuX2xpbmVzLCBsaW5l
X251bWJlcik6Ci0gICAgIiIiUmV0dXJuIHRoZSBtb3N0IHJlY2VudCBub24tYmxhbmsgbGluZSBh
bmQgaXRzIGxpbmUgbnVtYmVyLgotCi0gICAgQXJnczoKLSAgICAgIGNsZWFuX2xpbmVzOiBBIENs
ZWFuc2VkTGluZXMgaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZmlsZSBjb250ZW50cy4KLSAgICAg
IGxpbmVfbnVtYmVyOiBUaGUgbnVtYmVyIG9mIHRoZSBsaW5lIHRvIGNoZWNrLgotCi0gICAgUmV0
dXJuczoKLSAgICAgIEEgdHVwbGUgd2l0aCB0d28gZWxlbWVudHMuICBUaGUgZmlyc3QgZWxlbWVu
dCBpcyB0aGUgY29udGVudHMgb2YgdGhlIGxhc3QKLSAgICAgIG5vbi1ibGFuayBsaW5lIGJlZm9y
ZSB0aGUgY3VycmVudCBsaW5lLCBvciB0aGUgZW1wdHkgc3RyaW5nIGlmIHRoaXMgaXMgdGhlCi0g
ICAgICBmaXJzdCBub24tYmxhbmsgbGluZS4gIFRoZSBzZWNvbmQgaXMgdGhlIGxpbmUgbnVtYmVy
IG9mIHRoYXQgbGluZSwgb3IgLTEKLSAgICAgIGlmIHRoaXMgaXMgdGhlIGZpcnN0IG5vbi1ibGFu
ayBsaW5lLgotICAgICIiIgotCi0gICAgcHJldmlvdXNfbGluZV9udW1iZXIgPSBsaW5lX251bWJl
ciAtIDEKLSAgICB3aGlsZSBwcmV2aW91c19saW5lX251bWJlciA+PSAwOgotICAgICAgICBwcmV2
aW91c19saW5lID0gY2xlYW5fbGluZXMuZWxpZGVkW3ByZXZpb3VzX2xpbmVfbnVtYmVyXQotICAg
ICAgICBpZiBub3QgaXNfYmxhbmtfbGluZShwcmV2aW91c19saW5lKTogICAgICMgaWYgbm90IGEg
YmxhbmsgbGluZS4uLgotICAgICAgICAgICAgcmV0dXJuIChwcmV2aW91c19saW5lLCBwcmV2aW91
c19saW5lX251bWJlcikKLSAgICAgICAgcHJldmlvdXNfbGluZV9udW1iZXIgLT0gMQotICAgIHJl
dHVybiAoJycsIC0xKQotCi0KLWRlZiBjaGVja19uYW1lc3BhY2VfaW5kZW50YXRpb24oZmlsZW5h
bWUsIGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZmlsZV9leHRlbnNpb24sIGZpbGVfc3RhdGUs
IGVycm9yKToKLSAgICAiIiJMb29rcyBmb3IgaW5kZW50YXRpb24gZXJyb3JzIGluc2lkZSBvZiBu
YW1lc3BhY2VzLgotCi0gICAgQXJnczoKLSAgICAgIGZpbGVuYW1lOiBUaGUgbmFtZSBvZiB0aGUg
Y3VycmVudCBmaWxlLgotICAgICAgY2xlYW5fbGluZXM6IEEgQ2xlYW5zZWRMaW5lcyBpbnN0YW5j
ZSBjb250YWluaW5nIHRoZSBmaWxlLgotICAgICAgbGluZV9udW1iZXI6IFRoZSBudW1iZXIgb2Yg
dGhlIGxpbmUgdG8gY2hlY2suCi0gICAgICBmaWxlX2V4dGVuc2lvbjogVGhlIGV4dGVuc2lvbiAo
ZG90IG5vdCBpbmNsdWRlZCkgb2YgdGhlIGZpbGUuCi0gICAgICBmaWxlX3N0YXRlOiBBIF9GaWxl
U3RhdGUgaW5zdGFuY2Ugd2hpY2ggbWFpbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0Ci0gICAgICAg
ICAgICAgICAgICB0aGUgc3RhdGUgb2YgdGhpbmdzIGluIHRoZSBmaWxlLgotICAgICAgZXJyb3I6
IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4KLSAgICAiIiIKLQot
ICAgIGxpbmUgPSBjbGVhbl9saW5lcy5lbGlkZWRbbGluZV9udW1iZXJdICMgR2V0IHJpZCBvZiBj
b21tZW50cyBhbmQgc3RyaW5ncy4KLQotICAgIG5hbWVzcGFjZV9tYXRjaCA9IG1hdGNoKHInKD9Q
PG5hbWVzcGFjZV9pbmRlbnRhdGlvbj5ccyopbmFtZXNwYWNlXHMrXFMrXHMqe1xzKiQnLCBsaW5l
KQotICAgIGlmIG5vdCBuYW1lc3BhY2VfbWF0Y2g6Ci0gICAgICAgIHJldHVybgotCi0gICAgY3Vy
cmVudF9pbmRlbnRhdGlvbl9sZXZlbCA9IGxlbihuYW1lc3BhY2VfbWF0Y2guZ3JvdXAoJ25hbWVz
cGFjZV9pbmRlbnRhdGlvbicpKQotICAgIGlmIGN1cnJlbnRfaW5kZW50YXRpb25fbGV2ZWwgPiAw
OgotICAgICAgICAjIERvbid0IHdhcm4gYWJvdXQgYW4gaW5kZW50ZWQgbmFtZXNwYWNlIGlmIHdl
IGFscmVhZHkgd2FybmVkIGFib3V0IGluZGVudGVkIGNvZGUuCi0gICAgICAgIGlmIG5vdCBmaWxl
X3N0YXRlLmRpZF9pbnNpZGVfbmFtZXNwYWNlX2luZGVudF93YXJuaW5nKCk6Ci0gICAgICAgICAg
ICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL2luZGVudCcsIDQsCi0g
ICAgICAgICAgICAgICAgICAnbmFtZXNwYWNlIHNob3VsZCBuZXZlciBiZSBpbmRlbnRlZC4nKQot
ICAgICAgICByZXR1cm4KLSAgICBsb29raW5nX2Zvcl9zZW1pY29sb24gPSBGYWxzZTsKLSAgICBs
aW5lX29mZnNldCA9IDAKLSAgICBpbl9wcmVwcm9jZXNzb3JfZGlyZWN0aXZlID0gRmFsc2U7Ci0g
ICAgZm9yIGN1cnJlbnRfbGluZSBpbiBjbGVhbl9saW5lcy5lbGlkZWRbbGluZV9udW1iZXIgKyAx
Ol06Ci0gICAgICAgIGxpbmVfb2Zmc2V0ICs9IDEKLSAgICAgICAgaWYgbm90IGN1cnJlbnRfbGlu
ZS5zdHJpcCgpOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgbm90IGN1cnJlbnRf
aW5kZW50YXRpb25fbGV2ZWw6Ci0gICAgICAgICAgICBpZiBub3QgKGluX3ByZXByb2Nlc3Nvcl9k
aXJlY3RpdmUgb3IgbG9va2luZ19mb3Jfc2VtaWNvbG9uKToKLSAgICAgICAgICAgICAgICBpZiBu
b3QgbWF0Y2gocidcUycsIGN1cnJlbnRfbGluZSkgYW5kIG5vdCBmaWxlX3N0YXRlLmRpZF9pbnNp
ZGVfbmFtZXNwYWNlX2luZGVudF93YXJuaW5nKCk6Ci0gICAgICAgICAgICAgICAgICAgIGZpbGVf
c3RhdGUuc2V0X2RpZF9pbnNpZGVfbmFtZXNwYWNlX2luZGVudF93YXJuaW5nKCkKLSAgICAgICAg
ICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyICsgbGluZV9vZmZzZXQsICd3
aGl0ZXNwYWNlL2luZGVudCcsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdDb2RlIGlu
c2lkZSBhIG5hbWVzcGFjZSBzaG91bGQgbm90IGJlIGluZGVudGVkLicpCi0gICAgICAgICAgICBp
ZiBpbl9wcmVwcm9jZXNzb3JfZGlyZWN0aXZlIG9yIChjdXJyZW50X2xpbmUuc3RyaXAoKVswXSA9
PSAnIycpOiAjIFRoaXMgdGFrZXMgY2FyZSBvZiBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIHN5bnRh
eC4KLSAgICAgICAgICAgICAgICBpbl9wcmVwcm9jZXNzb3JfZGlyZWN0aXZlID0gY3VycmVudF9s
aW5lWy0xXSA9PSAnXFwnCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGxvb2tp
bmdfZm9yX3NlbWljb2xvbiA9ICgoY3VycmVudF9saW5lLmZpbmQoJzsnKSA9PSAtMSkgYW5kIChj
dXJyZW50X2xpbmUuc3RyaXAoKVstMV0gIT0gJ30nKSkgb3IgKGN1cnJlbnRfbGluZVstMV0gPT0g
J1xcJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxvb2tpbmdfZm9yX3NlbWljb2xvbiA9
IEZhbHNlOyAjIElmIHdlIGhhdmUgYSBicmFjZSB3ZSBtYXkgbm90IG5lZWQgYSBzZW1pY29sb24u
Ci0gICAgICAgIGN1cnJlbnRfaW5kZW50YXRpb25fbGV2ZWwgKz0gY3VycmVudF9saW5lLmNvdW50
KCd7JykgLSBjdXJyZW50X2xpbmUuY291bnQoJ30nKQotICAgICAgICBpZiBjdXJyZW50X2luZGVu
dGF0aW9uX2xldmVsIDwgMDoKLSAgICAgICAgICAgIGJyZWFrOwotCi1kZWYgY2hlY2tfdXNpbmdf
c3RkKGZpbGVuYW1lLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGVycm9yKToKLSAgICAiIiJM
b29rcyBmb3IgJ3VzaW5nIHN0ZDo6Zm9vOycgc3RhdGVtZW50cyB3aGljaCBzaG91bGQgYmUgcmVw
bGFjZWQgd2l0aCAndXNpbmcgbmFtZXNwYWNlIHN0ZDsnLgotCi0gICAgQXJnczoKLSAgICAgIGZp
bGVuYW1lOiBUaGUgbmFtZSBvZiB0aGUgY3VycmVudCBmaWxlLgotICAgICAgY2xlYW5fbGluZXM6
IEEgQ2xlYW5zZWRMaW5lcyBpbnN0YW5jZSBjb250YWluaW5nIHRoZSBmaWxlLgotICAgICAgbGlu
ZV9udW1iZXI6IFRoZSBudW1iZXIgb2YgdGhlIGxpbmUgdG8gY2hlY2suCi0gICAgICBlcnJvcjog
VGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBhbnkgZXJyb3JzIGZvdW5kLgotICAgICIiIgotCi0g
ICAgIyBUaGlzIGNoZWNrIGRvZXNuJ3QgYXBwbHkgdG8gQyBvciBPYmplY3RpdmUtQyBpbXBsZW1l
bnRhdGlvbiBmaWxlcy4KLSAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCgnLmMnKSBvciBmaWxlbmFt
ZS5lbmRzd2l0aCgnLm0nKToKLSAgICAgICAgcmV0dXJuCi0KLSAgICBsaW5lID0gY2xlYW5fbGlu
ZXMuZWxpZGVkW2xpbmVfbnVtYmVyXSAjIEdldCByaWQgb2YgY29tbWVudHMgYW5kIHN0cmluZ3Mu
Ci0KLSAgICB1c2luZ19zdGRfbWF0Y2ggPSBtYXRjaChyJ1xzKnVzaW5nXHMrc3RkOjooP1A8bWV0
aG9kX25hbWU+XFMrKVxzKjtccyokJywgbGluZSkKLSAgICBpZiBub3QgdXNpbmdfc3RkX21hdGNo
OgotICAgICAgICByZXR1cm4KLQotICAgIG1ldGhvZF9uYW1lID0gdXNpbmdfc3RkX21hdGNoLmdy
b3VwKCdtZXRob2RfbmFtZScpCi0gICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnYnVp
bGQvdXNpbmdfc3RkJywgNCwKLSAgICAgICAgICAiVXNlICd1c2luZyBuYW1lc3BhY2Ugc3RkOycg
aW5zdGVhZCBvZiAndXNpbmcgc3RkOjolczsnLiIgJSBtZXRob2RfbmFtZSkKLQotCi1kZWYgY2hl
Y2tfbWF4X21pbl9tYWNyb3MoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZXJy
b3IpOgotICAgICIiIkxvb2tzIHVzZSBvZiBNQVgoKSBhbmQgTUlOKCkgbWFjcm9zIHRoYXQgc2hv
dWxkIGJlIHJlcGxhY2VkIHdpdGggc3RkOjptYXgoKSBhbmQgc3RkOjptaW4oKS4KLQotICAgIEFy
Z3M6Ci0gICAgICBmaWxlbmFtZTogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlsZS4KLSAgICAg
IGNsZWFuX2xpbmVzOiBBIENsZWFuc2VkTGluZXMgaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZmls
ZS4KLSAgICAgIGxpbmVfbnVtYmVyOiBUaGUgbnVtYmVyIG9mIHRoZSBsaW5lIHRvIGNoZWNrLgot
ICAgICAgZXJyb3I6IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4K
LSAgICAiIiIKLQotICAgICMgVGhpcyBjaGVjayBkb2Vzbid0IGFwcGx5IHRvIEMgb3IgT2JqZWN0
aXZlLUMgaW1wbGVtZW50YXRpb24gZmlsZXMuCi0gICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoJy5j
Jykgb3IgZmlsZW5hbWUuZW5kc3dpdGgoJy5tJyk6Ci0gICAgICAgIHJldHVybgotCi0gICAgbGlu
ZSA9IGNsZWFuX2xpbmVzLmVsaWRlZFtsaW5lX251bWJlcl0gIyBHZXQgcmlkIG9mIGNvbW1lbnRz
IGFuZCBzdHJpbmdzLgotCi0gICAgbWF4X21pbl9tYWNyb3Nfc2VhcmNoID0gc2VhcmNoKHInXGIo
P1A8bWF4X21pbl9tYWNybz4oTUFYfE1JTikpXHMqXCgnLCBsaW5lKQotICAgIGlmIG5vdCBtYXhf
bWluX21hY3Jvc19zZWFyY2g6Ci0gICAgICAgIHJldHVybgotCi0gICAgbWF4X21pbl9tYWNybyA9
IG1heF9taW5fbWFjcm9zX3NlYXJjaC5ncm91cCgnbWF4X21pbl9tYWNybycpCi0gICAgbWF4X21p
bl9tYWNyb19sb3dlciA9IG1heF9taW5fbWFjcm8ubG93ZXIoKQotICAgIGVycm9yKGZpbGVuYW1l
LCBsaW5lX251bWJlciwgJ3J1bnRpbWUvbWF4X21pbl9tYWNyb3MnLCA0LAotICAgICAgICAgICdV
c2Ugc3RkOjolcygpIG9yIHN0ZDo6JXM8dHlwZT4oKSBpbnN0ZWFkIG9mIHRoZSAlcygpIG1hY3Jv
LicKLSAgICAgICAgICAlIChtYXhfbWluX21hY3JvX2xvd2VyLCBtYXhfbWluX21hY3JvX2xvd2Vy
LCBtYXhfbWluX21hY3JvKSkKLQotCi1kZWYgY2hlY2tfc3dpdGNoX2luZGVudGF0aW9uKGZpbGVu
YW1lLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGVycm9yKToKLSAgICAiIiJMb29rcyBmb3Ig
aW5kZW50YXRpb24gZXJyb3JzIGluc2lkZSBvZiBzd2l0Y2ggc3RhdGVtZW50cy4KLQotICAgIEFy
Z3M6Ci0gICAgICBmaWxlbmFtZTogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlsZS4KLSAgICAg
IGNsZWFuX2xpbmVzOiBBIENsZWFuc2VkTGluZXMgaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZmls
ZS4KLSAgICAgIGxpbmVfbnVtYmVyOiBUaGUgbnVtYmVyIG9mIHRoZSBsaW5lIHRvIGNoZWNrLgot
ICAgICAgZXJyb3I6IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4K
LSAgICAiIiIKLQotICAgIGxpbmUgPSBjbGVhbl9saW5lcy5lbGlkZWRbbGluZV9udW1iZXJdICMg
R2V0IHJpZCBvZiBjb21tZW50cyBhbmQgc3RyaW5ncy4KLQotICAgIHN3aXRjaF9tYXRjaCA9IG1h
dGNoKHInKD9QPHN3aXRjaF9pbmRlbnRhdGlvbj5ccyopc3dpdGNoXHMqXCguK1wpXHMqe1xzKiQn
LCBsaW5lKQotICAgIGlmIG5vdCBzd2l0Y2hfbWF0Y2g6Ci0gICAgICAgIHJldHVybgotCi0gICAg
c3dpdGNoX2luZGVudGF0aW9uID0gc3dpdGNoX21hdGNoLmdyb3VwKCdzd2l0Y2hfaW5kZW50YXRp
b24nKQotICAgIGlubmVyX2luZGVudGF0aW9uID0gc3dpdGNoX2luZGVudGF0aW9uICsgJyAnICog
NAotICAgIGxpbmVfb2Zmc2V0ID0gMAotICAgIGVuY291bnRlcmVkX25lc3RlZF9zd2l0Y2ggPSBG
YWxzZQotCi0gICAgZm9yIGN1cnJlbnRfbGluZSBpbiBjbGVhbl9saW5lcy5lbGlkZWRbbGluZV9u
dW1iZXIgKyAxOl06Ci0gICAgICAgIGxpbmVfb2Zmc2V0ICs9IDEKLQotICAgICAgICAjIFNraXAg
bm90IG9ubHkgZW1wdHkgbGluZXMgYnV0IGFsc28gdGhvc2Ugd2l0aCBwcmVwcm9jZXNzb3IgZGly
ZWN0aXZlcy4KLSAgICAgICAgaWYgY3VycmVudF9saW5lLnN0cmlwKCkgPT0gJycgb3IgY3VycmVu
dF9saW5lLnN0YXJ0c3dpdGgoJyMnKToKLSAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAg
aWYgbWF0Y2gocidccypzd2l0Y2hccypcKC4rXClccyp7XHMqJCcsIGN1cnJlbnRfbGluZSk6Ci0g
ICAgICAgICAgICAjIENvbXBsZXhpdHkgYWxhcm0gLSBhbm90aGVyIHN3aXRjaCBzdGF0ZW1lbnQg
bmVzdGVkIGluc2lkZSB0aGUgb25lCi0gICAgICAgICAgICAjIHRoYXQgd2UncmUgY3VycmVudGx5
IHRlc3RpbmcuIFdlJ2xsIG5lZWQgdG8gdHJhY2sgdGhlIGV4dGVudCBvZgotICAgICAgICAgICAg
IyB0aGF0IGlubmVyIHN3aXRjaCBpZiB0aGUgdXBjb21pbmcgbGFiZWwgdGVzdHMgYXJlIHN0aWxs
IHN1cHBvc2VkCi0gICAgICAgICAgICAjIHRvIHdvcmsgY29ycmVjdGx5LiBMZXQncyBub3QgZG8g
dGhhdDsgaW5zdGVhZCwgd2UnbGwgZmluaXNoCi0gICAgICAgICAgICAjIGNoZWNraW5nIHRoaXMg
bGluZSwgYW5kIHRoZW4gbGVhdmUgaXQgbGlrZSB0aGF0LiBBc3N1bWluZyB0aGUKLSAgICAgICAg
ICAgICMgaW5kZW50YXRpb24gaXMgZG9uZSBjb25zaXN0ZW50bHkgKGV2ZW4gaWYgaW5jb3JyZWN0
bHkpLCB0aGlzIHdpbGwKLSAgICAgICAgICAgICMgc3RpbGwgY2F0Y2ggYWxsIGluZGVudGF0aW9u
IGlzc3VlcyBpbiBwcmFjdGljZS4KLSAgICAgICAgICAgIGVuY291bnRlcmVkX25lc3RlZF9zd2l0
Y2ggPSBUcnVlCi0KLSAgICAgICAgY3VycmVudF9pbmRlbnRhdGlvbl9tYXRjaCA9IG1hdGNoKHIn
KD9QPGluZGVudGF0aW9uPlxzKikoP1A8cmVtYWluaW5nX2xpbmU+LiopJCcsIGN1cnJlbnRfbGlu
ZSk7Ci0gICAgICAgIGN1cnJlbnRfaW5kZW50YXRpb24gPSBjdXJyZW50X2luZGVudGF0aW9uX21h
dGNoLmdyb3VwKCdpbmRlbnRhdGlvbicpCi0gICAgICAgIHJlbWFpbmluZ19saW5lID0gY3VycmVu
dF9pbmRlbnRhdGlvbl9tYXRjaC5ncm91cCgncmVtYWluaW5nX2xpbmUnKQotCi0gICAgICAgICMg
RW5kIHRoZSBjaGVjayBhdCB0aGUgZW5kIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50LgotICAgICAg
ICBpZiByZW1haW5pbmdfbGluZS5zdGFydHN3aXRoKCd9JykgYW5kIGN1cnJlbnRfaW5kZW50YXRp
b24gPT0gc3dpdGNoX2luZGVudGF0aW9uOgotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgIyBD
YXNlIGFuZCBkZWZhdWx0IGJyYW5jaGVzIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuIFRoZSByZWdl
eHAgYWxzbwotICAgICAgICAjIGNhdGNoZXMgc2luZ2xlLWxpbmUgY2FzZXMgbGlrZSAiZGVmYXVs
dDogYnJlYWs7IiBidXQgZG9lcyBub3QgdHJpZ2dlcgotICAgICAgICAjIG9uIHN0dWZmIGxpa2Ug
IkRvY3VtZW50OjpGb28oKTsiLgotICAgICAgICBlbGlmIG1hdGNoKHInKGRlZmF1bHR8Y2FzZVxz
Ky4qKVxzKjooW146XS4qKT8kJywgcmVtYWluaW5nX2xpbmUpOgotICAgICAgICAgICAgaWYgY3Vy
cmVudF9pbmRlbnRhdGlvbiAhPSBzd2l0Y2hfaW5kZW50YXRpb246Ci0gICAgICAgICAgICAgICAg
ZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyICsgbGluZV9vZmZzZXQsICd3aGl0ZXNwYWNlL2lu
ZGVudCcsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgJ0EgY2FzZSBsYWJlbCBzaG91bGQgbm90
IGJlIGluZGVudGVkLCBidXQgbGluZSB1cCB3aXRoIGl0cyBzd2l0Y2ggc3RhdGVtZW50LicpCi0g
ICAgICAgICAgICAgICAgIyBEb24ndCB0aHJvdyBhbiBlcnJvciBmb3IgbXVsdGlwbGUgYmFkbHkg
aW5kZW50ZWQgbGFiZWxzLAotICAgICAgICAgICAgICAgICMgb25lIHNob3VsZCBiZSBlbm91Z2gg
dG8gZmlndXJlIG91dCB0aGUgcHJvYmxlbS4KLSAgICAgICAgICAgICAgICBicmVhawotICAgICAg
ICAjIFdlIGlnbm9yZSBnb3RvIGxhYmVscyBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgYSBsaW5l
LgotICAgICAgICBlbGlmIG1hdGNoKHInXHcrXHMqOlxzKiQnLCByZW1haW5pbmdfbGluZSk6Ci0g
ICAgICAgICAgICBjb250aW51ZQotICAgICAgICAjIEl0J3Mgbm90IGEgZ290byBsYWJlbCwgc28g
Y2hlY2sgaWYgaXQncyBpbmRlbnRlZCBhdCBsZWFzdCBhcyBmYXIgYXMKLSAgICAgICAgIyB0aGUg
c3dpdGNoIHN0YXRlbWVudCBwbHVzIG9uZSBtb3JlIGxldmVsIG9mIGluZGVudGF0aW9uLgotICAg
ICAgICBlbGlmIG5vdCBjdXJyZW50X2luZGVudGF0aW9uLnN0YXJ0c3dpdGgoaW5uZXJfaW5kZW50
YXRpb24pOgotICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyICsgbGluZV9v
ZmZzZXQsICd3aGl0ZXNwYWNlL2luZGVudCcsIDQsCi0gICAgICAgICAgICAgICAgICAnTm9uLWxh
YmVsIGNvZGUgaW5zaWRlIHN3aXRjaCBzdGF0ZW1lbnRzIHNob3VsZCBiZSBpbmRlbnRlZC4nKQot
ICAgICAgICAgICAgIyBEb24ndCB0aHJvdyBhbiBlcnJvciBmb3IgbXVsdGlwbGUgYmFkbHkgaW5k
ZW50ZWQgc3RhdGVtZW50cywKLSAgICAgICAgICAgICMgb25lIHNob3VsZCBiZSBlbm91Z2ggdG8g
ZmlndXJlIG91dCB0aGUgcHJvYmxlbS4KLSAgICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgaWYg
ZW5jb3VudGVyZWRfbmVzdGVkX3N3aXRjaDoKLSAgICAgICAgICAgIGJyZWFrCi0KLQotZGVmIGNo
ZWNrX2JyYWNlcyhmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBlcnJvcik6Ci0g
ICAgIiIiTG9va3MgZm9yIG1pc3BsYWNlZCBicmFjZXMgKGUuZy4gYXQgdGhlIGVuZCBvZiBsaW5l
KS4KLQotICAgIEFyZ3M6Ci0gICAgICBmaWxlbmFtZTogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQg
ZmlsZS4KLSAgICAgIGNsZWFuX2xpbmVzOiBBIENsZWFuc2VkTGluZXMgaW5zdGFuY2UgY29udGFp
bmluZyB0aGUgZmlsZS4KLSAgICAgIGxpbmVfbnVtYmVyOiBUaGUgbnVtYmVyIG9mIHRoZSBsaW5l
IHRvIGNoZWNrLgotICAgICAgZXJyb3I6IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVy
cm9ycyBmb3VuZC4KLSAgICAiIiIKLQotICAgIGxpbmUgPSBjbGVhbl9saW5lcy5lbGlkZWRbbGlu
ZV9udW1iZXJdICMgR2V0IHJpZCBvZiBjb21tZW50cyBhbmQgc3RyaW5ncy4KLQotICAgIGlmIG1h
dGNoKHInXHMqe1xzKiQnLCBsaW5lKToKLSAgICAgICAgIyBXZSBhbGxvdyBhbiBvcGVuIGJyYWNl
IHRvIHN0YXJ0IGEgbGluZSBpbiB0aGUgY2FzZSB3aGVyZSBzb21lb25lCi0gICAgICAgICMgaXMg
dXNpbmcgYnJhY2VzIGZvciBmdW5jdGlvbiBkZWZpbml0aW9uIG9yIGluIGEgYmxvY2sgdG8KLSAg
ICAgICAgIyBleHBsaWNpdGx5IGNyZWF0ZSBhIG5ldyBzY29wZSwgd2hpY2ggaXMgY29tbW9ubHkg
dXNlZCB0byBjb250cm9sCi0gICAgICAgICMgdGhlIGxpZmV0aW1lIG9mIHN0YWNrLWFsbG9jYXRl
ZCB2YXJpYWJsZXMuICBXZSBkb24ndCBkZXRlY3QgdGhpcwotICAgICAgICAjIHBlcmZlY3RseTog
d2UganVzdCBkb24ndCBjb21wbGFpbiBpZiB0aGUgbGFzdCBub24td2hpdGVzcGFjZQotICAgICAg
ICAjIGNoYXJhY3RlciBvbiB0aGUgcHJldmlvdXMgbm9uLWJsYW5rIGxpbmUgaXMgJzsnLCAnOics
ICd7JywgJ30nLAotICAgICAgICAjICcpJywgb3IgJykgY29uc3QnIGFuZCBkb2Vzbid0IGJlZ2lu
IHdpdGggJ2lmfGZvcnx3aGlsZXxzd2l0Y2h8ZWxzZScuCi0gICAgICAgICMgV2UgYWxzbyBhbGxv
dyAnIycgZm9yICNlbmRpZiBhbmQgJz0nIGZvciBhcnJheSBpbml0aWFsaXphdGlvbi4KLSAgICAg
ICAgcHJldmlvdXNfbGluZSA9IGdldF9wcmV2aW91c19ub25fYmxhbmtfbGluZShjbGVhbl9saW5l
cywgbGluZV9udW1iZXIpWzBdCi0gICAgICAgIGlmICgobm90IHNlYXJjaChyJ1s7On17KT1dXHMq
JHxcKVxzKmNvbnN0XHMqJCcsIHByZXZpb3VzX2xpbmUpCi0gICAgICAgICAgICAgb3Igc2VhcmNo
KHInXGIoaWZ8Zm9yfGZvcmVhY2h8d2hpbGV8c3dpdGNofGVsc2UpXGInLCBwcmV2aW91c19saW5l
KSkKLSAgICAgICAgICAgIGFuZCBwcmV2aW91c19saW5lLmZpbmQoJyMnKSA8IDApOgotICAgICAg
ICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9icmFjZXMnLCA0
LAotICAgICAgICAgICAgICAgICAgJ1RoaXMgeyBzaG91bGQgYmUgYXQgdGhlIGVuZCBvZiB0aGUg
cHJldmlvdXMgbGluZScpCi0gICAgZWxpZiAoc2VhcmNoKHInXClccyooY29uc3RccyopP3tccyok
JywgbGluZSkKLSAgICAgICAgICBhbmQgbGluZS5jb3VudCgnKCcpID09IGxpbmUuY291bnQoJykn
KQotICAgICAgICAgIGFuZCBub3Qgc2VhcmNoKHInXGIoaWZ8Zm9yfGZvcmVhY2h8d2hpbGV8c3dp
dGNoKVxiJywgbGluZSkKLSAgICAgICAgICBhbmQgbm90IG1hdGNoKHInXHMrW0EtWl9dW0EtWl8w
LTldK1xiJywgbGluZSkpOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3
aGl0ZXNwYWNlL2JyYWNlcycsIDQsCi0gICAgICAgICAgICAgICdQbGFjZSBicmFjZSBvbiBpdHMg
b3duIGxpbmUgZm9yIGZ1bmN0aW9uIGRlZmluaXRpb25zLicpCi0KLSAgICBpZiAobWF0Y2gocidc
cyp9XHMqKGVsc2Vccyooe1xzKik/KT8kJywgbGluZSkgYW5kIGxpbmVfbnVtYmVyID4gMSk6Ci0g
ICAgICAgICMgV2UgY2hlY2sgaWYgYSBjbG9zZWQgYnJhY2UgaGFzIHN0YXJ0ZWQgYSBsaW5lIHRv
IHNlZSBpZiBhCi0gICAgICAgICMgb25lIGxpbmUgY29udHJvbCBzdGF0ZW1lbnQgd2FzIHByZXZp
b3VzLgotICAgICAgICBwcmV2aW91c19saW5lID0gY2xlYW5fbGluZXMuZWxpZGVkW2xpbmVfbnVt
YmVyIC0gMl0KLSAgICAgICAgaWYgKHByZXZpb3VzX2xpbmUuZmluZCgneycpID4gMAotICAgICAg
ICAgICAgYW5kIHNlYXJjaChyJ1xiKGlmfGZvcnxmb3JlYWNofHdoaWxlfGVsc2UpXGInLCBwcmV2
aW91c19saW5lKSk6Ci0gICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3
aGl0ZXNwYWNlL2JyYWNlcycsIDQsCi0gICAgICAgICAgICAgICAgICAnT25lIGxpbmUgY29udHJv
bCBjbGF1c2VzIHNob3VsZCBub3QgdXNlIGJyYWNlcy4nKQotCi0gICAgIyBBbiBlbHNlIGNsYXVz
ZSBzaG91bGQgYmUgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgcHJlY2VkaW5nIGNsb3NpbmcgYnJh
Y2UuCi0gICAgaWYgbWF0Y2gocidccyplbHNlXHMqJywgbGluZSk6Ci0gICAgICAgIHByZXZpb3Vz
X2xpbmUgPSBnZXRfcHJldmlvdXNfbm9uX2JsYW5rX2xpbmUoY2xlYW5fbGluZXMsIGxpbmVfbnVt
YmVyKVswXQotICAgICAgICBpZiBtYXRjaChyJ1xzKn1ccyokJywgcHJldmlvdXNfbGluZSk6Ci0g
ICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL25ld2xp
bmUnLCA0LAotICAgICAgICAgICAgICAgICAgJ0FuIGVsc2Ugc2hvdWxkIGFwcGVhciBvbiB0aGUg
c2FtZSBsaW5lIGFzIHRoZSBwcmVjZWRpbmcgfScpCi0KLSAgICAjIExpa2V3aXNlLCBhbiBlbHNl
IHNob3VsZCBuZXZlciBoYXZlIHRoZSBlbHNlIGNsYXVzZSBvbiB0aGUgc2FtZSBsaW5lCi0gICAg
aWYgc2VhcmNoKHInXGJlbHNlIFteXHN7XScsIGxpbmUpIGFuZCBub3Qgc2VhcmNoKHInXGJlbHNl
IGlmXGInLCBsaW5lKToKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hp
dGVzcGFjZS9uZXdsaW5lJywgNCwKLSAgICAgICAgICAgICAgJ0Vsc2UgY2xhdXNlIHNob3VsZCBu
ZXZlciBiZSBvbiBzYW1lIGxpbmUgYXMgZWxzZSAodXNlIDIgbGluZXMpJykKLQotICAgICMgSW4g
dGhlIHNhbWUgd2F5LCBhIGRvL3doaWxlIHNob3VsZCBuZXZlciBiZSBvbiBvbmUgbGluZQotICAg
IGlmIG1hdGNoKHInXHMqZG8gW15cc3tdJywgbGluZSk6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1l
LCBsaW5lX251bWJlciwgJ3doaXRlc3BhY2UvbmV3bGluZScsIDQsCi0gICAgICAgICAgICAgICdk
by93aGlsZSBjbGF1c2VzIHNob3VsZCBub3QgYmUgb24gYSBzaW5nbGUgbGluZScpCi0KLSAgICAj
IEJyYWNlcyBzaG91bGRuJ3QgYmUgZm9sbG93ZWQgYnkgYSA7IHVubGVzcyB0aGV5J3JlIGRlZmlu
aW5nIGEgc3RydWN0Ci0gICAgIyBvciBpbml0aWFsaXppbmcgYW4gYXJyYXkuCi0gICAgIyBXZSBj
YW4ndCB0ZWxsIGluIGdlbmVyYWwsIGJ1dCB3ZSBjYW4gZm9yIHNvbWUgY29tbW9uIGNhc2VzLgot
ICAgIHByZXZpb3VzX2xpbmVfbnVtYmVyID0gbGluZV9udW1iZXIKLSAgICB3aGlsZSBUcnVlOgot
ICAgICAgICAocHJldmlvdXNfbGluZSwgcHJldmlvdXNfbGluZV9udW1iZXIpID0gZ2V0X3ByZXZp
b3VzX25vbl9ibGFua19saW5lKGNsZWFuX2xpbmVzLCBwcmV2aW91c19saW5lX251bWJlcikKLSAg
ICAgICAgaWYgbWF0Y2gocidccyt7Lip9XHMqOycsIGxpbmUpIGFuZCBub3QgcHJldmlvdXNfbGlu
ZS5jb3VudCgnOycpOgotICAgICAgICAgICAgbGluZSA9IHByZXZpb3VzX2xpbmUgKyBsaW5lCi0g
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBicmVhawotICAgIGlmIChzZWFyY2gocid7Lip9XHMq
OycsIGxpbmUpCi0gICAgICAgIGFuZCBsaW5lLmNvdW50KCd7JykgPT0gbGluZS5jb3VudCgnfScp
Ci0gICAgICAgIGFuZCBub3Qgc2VhcmNoKHInc3RydWN0fGNsYXNzfGVudW18XHMqPVxzKnsnLCBs
aW5lKSk6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3JlYWRhYmlsaXR5
L2JyYWNlcycsIDQsCi0gICAgICAgICAgICAgICJZb3UgZG9uJ3QgbmVlZCBhIDsgYWZ0ZXIgYSB9
IikKLQotCi1kZWYgY2hlY2tfZXhpdF9zdGF0ZW1lbnRfc2ltcGxpZmljYXRpb25zKGZpbGVuYW1l
LCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGVycm9yKToKLSAgICAiIiJMb29rcyBmb3IgZWxz
ZSBvciBlbHNlLWlmIHN0YXRlbWVudHMgdGhhdCBzaG91bGQgYmUgd3JpdHRlbiBhcyBhbgotICAg
IGlmIHN0YXRlbWVudCB3aGVuIHRoZSBwcmlvciBpZiBjb25jbHVkZXMgd2l0aCBhIHJldHVybiwg
YnJlYWssIGNvbnRpbnVlIG9yCi0gICAgZ290byBzdGF0ZW1lbnQuCi0KLSAgICBBcmdzOgotICAg
ICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuCi0gICAgICBjbGVhbl9s
aW5lczogQSBDbGVhbnNlZExpbmVzIGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIGZpbGUuCi0gICAg
ICBsaW5lX251bWJlcjogVGhlIG51bWJlciBvZiB0aGUgbGluZSB0byBjaGVjay4KLSAgICAgIGVy
cm9yOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91bmQuCi0gICAgIiIi
Ci0KLSAgICBsaW5lID0gY2xlYW5fbGluZXMuZWxpZGVkW2xpbmVfbnVtYmVyXSAjIEdldCByaWQg
b2YgY29tbWVudHMgYW5kIHN0cmluZ3MuCi0KLSAgICBlbHNlX21hdGNoID0gbWF0Y2gocicoP1A8
ZWxzZV9pbmRlbnRhdGlvbj5ccyopKFx9XHMqKT9lbHNlKFxzK2lmXHMqXCh8KD9QPGVsc2U+XHMq
KFx7XHMqKT9cWikpJywgbGluZSkKLSAgICBpZiBub3QgZWxzZV9tYXRjaDoKLSAgICAgICAgcmV0
dXJuCi0KLSAgICBlbHNlX2luZGVudGF0aW9uID0gZWxzZV9tYXRjaC5ncm91cCgnZWxzZV9pbmRl
bnRhdGlvbicpCi0gICAgaW5uZXJfaW5kZW50YXRpb24gPSBlbHNlX2luZGVudGF0aW9uICsgJyAn
ICogNAotCi0gICAgcHJldmlvdXNfbGluZXMgPSBjbGVhbl9saW5lcy5lbGlkZWRbOmxpbmVfbnVt
YmVyXQotICAgIHByZXZpb3VzX2xpbmVzLnJldmVyc2UoKQotICAgIGxpbmVfb2Zmc2V0ID0gMAot
ICAgIGVuY291bnRlcmVkX2V4aXRfc3RhdGVtZW50ID0gRmFsc2UKLQotICAgIGZvciBjdXJyZW50
X2xpbmUgaW4gcHJldmlvdXNfbGluZXM6Ci0gICAgICAgIGxpbmVfb2Zmc2V0IC09IDEKLQotICAg
ICAgICAjIFNraXAgbm90IG9ubHkgZW1wdHkgbGluZXMgYnV0IGFsc28gdGhvc2Ugd2l0aCBwcmVw
cm9jZXNzb3IgZGlyZWN0aXZlcwotICAgICAgICAjIGFuZCBnb3RvIGxhYmVscy4KLSAgICAgICAg
aWYgY3VycmVudF9saW5lLnN0cmlwKCkgPT0gJycgb3IgY3VycmVudF9saW5lLnN0YXJ0c3dpdGgo
JyMnKSBvciBtYXRjaChyJ1x3K1xzKjpccyokJywgY3VycmVudF9saW5lKToKLSAgICAgICAgICAg
IGNvbnRpbnVlCi0KLSAgICAgICAgIyBTa2lwIGxpbmVzIHdpdGggY2xvc2luZyBicmFjZXMgb24g
dGhlIG9yaWdpbmFsIGluZGVudGF0aW9uIGxldmVsLgotICAgICAgICAjIEV2ZW4gdGhvdWdoIHRo
ZSBzdHlsZWd1aWRlIHNheXMgdGhleSBzaG91bGQgYmUgb24gdGhlIHNhbWUgbGluZSBhcwotICAg
ICAgICAjIHRoZSAiZWxzZSBpZiIgc3RhdGVtZW50LCB3ZSBhbHNvIHdhbnQgdG8gY2hlY2sgZm9y
IGluc3RhbmNlcyB3aGVyZQotICAgICAgICAjIHRoZSBjdXJyZW50IGNvZGUgZG9lcyBub3QgY29t
cGx5IHdpdGggdGhlIGNvZGluZyBzdHlsZS4gVGh1cywgaWdub3JlCi0gICAgICAgICMgdGhlc2Ug
bGluZXMgYW5kIHByb2NlZWQgdG8gdGhlIGxpbmUgYmVmb3JlIHRoYXQuCi0gICAgICAgIGlmIGN1
cnJlbnRfbGluZSA9PSBlbHNlX2luZGVudGF0aW9uICsgJ30nOgotICAgICAgICAgICAgY29udGlu
dWUKLQotICAgICAgICBjdXJyZW50X2luZGVudGF0aW9uX21hdGNoID0gbWF0Y2gocicoP1A8aW5k
ZW50YXRpb24+XHMqKSg/UDxyZW1haW5pbmdfbGluZT4uKikkJywgY3VycmVudF9saW5lKTsKLSAg
ICAgICAgY3VycmVudF9pbmRlbnRhdGlvbiA9IGN1cnJlbnRfaW5kZW50YXRpb25fbWF0Y2guZ3Jv
dXAoJ2luZGVudGF0aW9uJykKLSAgICAgICAgcmVtYWluaW5nX2xpbmUgPSBjdXJyZW50X2luZGVu
dGF0aW9uX21hdGNoLmdyb3VwKCdyZW1haW5pbmdfbGluZScpCi0KLSAgICAgICAgIyBBcyB3ZSdy
ZSBnb2luZyB1cCB0aGUgbGluZXMsIHRoZSBmaXJzdCByZWFsIHN0YXRlbWVudCB0byBlbmNvdW50
ZXIKLSAgICAgICAgIyBoYXMgdG8gYmUgYW4gZXhpdCBzdGF0ZW1lbnQgKHJldHVybiwgYnJlYWss
IGNvbnRpbnVlIG9yIGdvdG8pIC0KLSAgICAgICAgIyBvdGhlcndpc2UsIHRoaXMgY2hlY2sgZG9l
c24ndCBhcHBseS4KLSAgICAgICAgaWYgbm90IGVuY291bnRlcmVkX2V4aXRfc3RhdGVtZW50Ogot
ICAgICAgICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gZmluZCBleGl0IHN0YXRlbWVudHMgaWYgdGhl
eSBhcmUgb24gZXhhY3RseQotICAgICAgICAgICAgIyB0aGUgc2FtZSBsZXZlbCBvZiBpbmRlbnRh
dGlvbiBhcyBleHBlY3RlZCBmcm9tIHRoZSBjb2RlIGluc2lkZQotICAgICAgICAgICAgIyB0aGUg
YmxvY2suIElmIHRoZSBpbmRlbnRhdGlvbiBkb2Vzbid0IHN0cmljdGx5IG1hdGNoIHRoZW4gd2UK
LSAgICAgICAgICAgICMgbWlnaHQgaGF2ZSBhIG5lc3RlZCBpZiBvciBzb21ldGhpbmcsIHdoaWNo
IG11c3QgYmUgaWdub3JlZC4KLSAgICAgICAgICAgIGlmIGN1cnJlbnRfaW5kZW50YXRpb24gIT0g
aW5uZXJfaW5kZW50YXRpb246Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlm
IG1hdGNoKHInKHJldHVybihcVysuKil8KGJyZWFrfGNvbnRpbnVlKVxzKjt8Z290b1xzKlx3Kzsp
JCcsIHJlbWFpbmluZ19saW5lKToKLSAgICAgICAgICAgICAgICBlbmNvdW50ZXJlZF9leGl0X3N0
YXRlbWVudCA9IFRydWUKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgYnJl
YWsKLQotICAgICAgICAjIFdoZW4gY29kZSBleGVjdXRpb24gcmVhY2hlcyB0aGlzIHBvaW50LCB3
ZSd2ZSBmb3VuZCBhbiBleGl0IHN0YXRlbWVudAotICAgICAgICAjIGFzIGxhc3Qgc3RhdGVtZW50
IG9mIHRoZSBwcmV2aW91cyBibG9jay4gTm93IHdlIG9ubHkgbmVlZCB0byBtYWtlCi0gICAgICAg
ICMgc3VyZSB0aGF0IHRoZSBibG9jayBiZWxvbmdzIHRvIGFuICJpZiIsIHRoZW4gd2UgY2FuIHRo
cm93IGFuIGVycm9yLgotCi0gICAgICAgICMgU2tpcCBsaW5lcyB3aXRoIG9wZW5pbmcgYnJhY2Vz
IG9uIHRoZSBvcmlnaW5hbCBpbmRlbnRhdGlvbiBsZXZlbCwKLSAgICAgICAgIyBzaW1pbGFyIHRv
IHRoZSBjbG9zaW5nIGJyYWNlcyBjaGVjayBhYm92ZS4gKCJpZiAoY29uZGl0aW9uKVxueyIpCi0g
ICAgICAgIGlmIGN1cnJlbnRfbGluZSA9PSBlbHNlX2luZGVudGF0aW9uICsgJ3snOgotICAgICAg
ICAgICAgY29udGludWUKLQotICAgICAgICAjIFNraXAgZXZlcnl0aGluZyB0aGF0J3MgZnVydGhl
ciBpbmRlbnRlZCB0aGFuIG91ciAiZWxzZSIgb3IgImVsc2UgaWYiLgotICAgICAgICBpZiBjdXJy
ZW50X2luZGVudGF0aW9uLnN0YXJ0c3dpdGgoZWxzZV9pbmRlbnRhdGlvbikgYW5kIGN1cnJlbnRf
aW5kZW50YXRpb24gIT0gZWxzZV9pbmRlbnRhdGlvbjoKLSAgICAgICAgICAgIGNvbnRpbnVlCi0K
LSAgICAgICAgIyBTbyB3ZSd2ZSBnb3QgYSBsaW5lIHdpdGggc2FtZSAob3IgbGVzcykgaW5kZW50
YXRpb24uIElzIGl0IGFuICJpZiI/Ci0gICAgICAgICMgSWYgeWVzOiB0aHJvdyBhbiBlcnJvci4g
SWYgbm86IGRvbid0IHRocm93IGFuIGVycm9yLgotICAgICAgICAjIFdoYXRldmVyIHRoZSBvdXRj
b21lLCB0aGlzIGlzIHRoZSBlbmQgb2Ygb3VyIGxvb3AuCi0gICAgICAgIGlmIG1hdGNoKHInaWZc
cypcKCcsIHJlbWFpbmluZ19saW5lKToKLSAgICAgICAgICAgIGlmIGVsc2VfbWF0Y2guc3RhcnQo
J2Vsc2UnKSAhPSAtMToKLSAgICAgICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1i
ZXIgKyBsaW5lX29mZnNldCwgJ3JlYWRhYmlsaXR5L2NvbnRyb2xfZmxvdycsIDQsCi0gICAgICAg
ICAgICAgICAgICAgICAgJ0FuIGVsc2Ugc3RhdGVtZW50IGNhbiBiZSByZW1vdmVkIHdoZW4gdGhl
IHByaW9yICJpZiIgJwotICAgICAgICAgICAgICAgICAgICAgICdjb25jbHVkZXMgd2l0aCBhIHJl
dHVybiwgYnJlYWssIGNvbnRpbnVlIG9yIGdvdG8gc3RhdGVtZW50LicpCi0gICAgICAgICAgICBl
bHNlOgotICAgICAgICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciArIGxpbmVf
b2Zmc2V0LCAncmVhZGFiaWxpdHkvY29udHJvbF9mbG93JywgNCwKLSAgICAgICAgICAgICAgICAg
ICAgICAnQW4gZWxzZSBpZiBzdGF0ZW1lbnQgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYW4gaWYgc3Rh
dGVtZW50ICcKLSAgICAgICAgICAgICAgICAgICAgICAnd2hlbiB0aGUgcHJpb3IgImlmIiBjb25j
bHVkZXMgd2l0aCBhIHJldHVybiwgYnJlYWssICcKLSAgICAgICAgICAgICAgICAgICAgICAnY29u
dGludWUgb3IgZ290byBzdGF0ZW1lbnQuJykKLSAgICAgICAgYnJlYWsKLQotCi1kZWYgcmVwbGFj
ZWFibGVfY2hlY2sob3BlcmF0b3IsIG1hY3JvLCBsaW5lKToKLSAgICAiIiJEZXRlcm1pbmUgd2hl
dGhlciBhIGJhc2ljIENIRUNLIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgbW9yZSBzcGVjaWZpYyBv
bmUuCi0KLSAgICBGb3IgZXhhbXBsZSBzdWdnZXN0IHVzaW5nIENIRUNLX0VRIGluc3RlYWQgb2Yg
Q0hFQ0soYSA9PSBiKSBhbmQKLSAgICBzaW1pbGFybHkgZm9yIENIRUNLX0dFLCBDSEVDS19HVCwg
Q0hFQ0tfTEUsIENIRUNLX0xULCBDSEVDS19ORS4KLQotICAgIEFyZ3M6Ci0gICAgICBvcGVyYXRv
cjogVGhlIEMrKyBvcGVyYXRvciB1c2VkIGluIHRoZSBDSEVDSy4KLSAgICAgIG1hY3JvOiBUaGUg
Q0hFQ0sgb3IgRVhQRUNUIG1hY3JvIGJlaW5nIGNhbGxlZC4KLSAgICAgIGxpbmU6IFRoZSBjdXJy
ZW50IHNvdXJjZSBsaW5lLgotCi0gICAgUmV0dXJuczoKLSAgICAgIFRydWUgaWYgdGhlIENIRUNL
IGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgbW9yZSBzcGVjaWZpYyBvbmUuCi0gICAgIiIiCi0KLSAg
ICAjIFRoaXMgbWF0Y2hlcyBkZWNpbWFsIGFuZCBoZXggaW50ZWdlcnMsIHN0cmluZ3MsIGFuZCBj
aGFycyAoaW4gdGhhdCBvcmRlcikuCi0gICAgbWF0Y2hfY29uc3RhbnQgPSByJyhbLStdPyhcZCt8
MFt4WF1bMC05YS1mQS1GXSspW2xMdVVdezAsM318Ii4qInxcJy4qXCcpJwotCi0gICAgIyBFeHBy
ZXNzaW9uIHRvIG1hdGNoIHR3byBzaWRlcyBvZiB0aGUgb3BlcmF0b3Igd2l0aCBzb21ldGhpbmcg
dGhhdAotICAgICMgbG9va3MgbGlrZSBhIGxpdGVyYWwsIHNpbmNlIENIRUNLKHggPT0gaXRlcmF0
b3IpIHdvbid0IGNvbXBpbGUuCi0gICAgIyBUaGlzIG1lYW5zIHdlIGNhbid0IGNhdGNoIGFsbCB0
aGUgY2FzZXMgd2hlcmUgYSBtb3JlIHNwZWNpZmljCi0gICAgIyBDSEVDSyBpcyBwb3NzaWJsZSwg
YnV0IGl0J3MgbGVzcyBhbm5veWluZyB0aGFuIGRlYWxpbmcgd2l0aAotICAgICMgZXh0cmFuZW91
cyB3YXJuaW5ncy4KLSAgICBtYXRjaF90aGlzID0gKHInXHMqJyArIG1hY3JvICsgcidcKChccyon
ICsKLSAgICAgICAgICAgICAgICAgIG1hdGNoX2NvbnN0YW50ICsgcidccyonICsgb3BlcmF0b3Ig
KyByJ1tePD5dLip8JwotICAgICAgICAgICAgICAgICAgcicuKltePD5dJyArIG9wZXJhdG9yICsg
cidccyonICsgbWF0Y2hfY29uc3RhbnQgKwotICAgICAgICAgICAgICAgICAgcidccypcKSknKQot
Ci0gICAgIyBEb24ndCBjb21wbGFpbiBhYm91dCBDSEVDSyh4ID09IE5VTEwpIG9yIHNpbWlsYXIg
YmVjYXVzZQotICAgICMgQ0hFQ0tfRVEoeCwgTlVMTCkgd29uJ3QgY29tcGlsZSAocmVxdWlyZXMg
YSBjYXN0KS4KLSAgICAjIEFsc28sIGRvbid0IGNvbXBsYWluIGFib3V0IG1vcmUgY29tcGxleCBi
b29sZWFuIGV4cHJlc3Npb25zCi0gICAgIyBpbnZvbHZpbmcgJiYgb3IgfHwgc3VjaCBhcyBDSEVD
SyhhID09IGIgfHwgYyA9PSBkKS4KLSAgICByZXR1cm4gbWF0Y2gobWF0Y2hfdGhpcywgbGluZSkg
YW5kIG5vdCBzZWFyY2gocidOVUxMfCYmfFx8XHwnLCBsaW5lKQotCi0KLWRlZiBjaGVja19jaGVj
ayhmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBlcnJvcik6Ci0gICAgIiIiQ2hl
Y2tzIHRoZSB1c2Ugb2YgQ0hFQ0sgYW5kIEVYUEVDVCBtYWNyb3MuCi0KLSAgICBBcmdzOgotICAg
ICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuCi0gICAgICBjbGVhbl9s
aW5lczogQSBDbGVhbnNlZExpbmVzIGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIGZpbGUuCi0gICAg
ICBsaW5lX251bWJlcjogVGhlIG51bWJlciBvZiB0aGUgbGluZSB0byBjaGVjay4KLSAgICAgIGVy
cm9yOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91bmQuCi0gICAgIiIi
Ci0KLSAgICAjIERlY2lkZSB0aGUgc2V0IG9mIHJlcGxhY2VtZW50IG1hY3JvcyB0aGF0IHNob3Vs
ZCBiZSBzdWdnZXN0ZWQKLSAgICByYXdfbGluZXMgPSBjbGVhbl9saW5lcy5yYXdfbGluZXMKLSAg
ICBjdXJyZW50X21hY3JvID0gJycKLSAgICBmb3IgbWFjcm8gaW4gX0NIRUNLX01BQ1JPUzoKLSAg
ICAgICAgaWYgcmF3X2xpbmVzW2xpbmVfbnVtYmVyXS5maW5kKG1hY3JvKSA+PSAwOgotICAgICAg
ICAgICAgY3VycmVudF9tYWNybyA9IG1hY3JvCi0gICAgICAgICAgICBicmVhawotICAgIGlmIG5v
dCBjdXJyZW50X21hY3JvOgotICAgICAgICAjIERvbid0IHdhc3RlIHRpbWUgaGVyZSBpZiBsaW5l
IGRvZXNuJ3QgY29udGFpbiAnQ0hFQ0snIG9yICdFWFBFQ1QnCi0gICAgICAgIHJldHVybgotCi0g
ICAgbGluZSA9IGNsZWFuX2xpbmVzLmVsaWRlZFtsaW5lX251bWJlcl0gICAgICAgICMgZ2V0IHJp
ZCBvZiBjb21tZW50cyBhbmQgc3RyaW5ncwotCi0gICAgIyBFbmNvdXJhZ2UgcmVwbGFjaW5nIHBs
YWluIENIRUNLcyB3aXRoIENIRUNLX0VRL0NIRUNLX05FL2V0Yy4KLSAgICBmb3Igb3BlcmF0b3Ig
aW4gWyc9PScsICchPScsICc+PScsICc+JywgJzw9JywgJzwnXToKLSAgICAgICAgaWYgcmVwbGFj
ZWFibGVfY2hlY2sob3BlcmF0b3IsIGN1cnJlbnRfbWFjcm8sIGxpbmUpOgotICAgICAgICAgICAg
ZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAncmVhZGFiaWxpdHkvY2hlY2snLCAyLAotICAg
ICAgICAgICAgICAgICAgJ0NvbnNpZGVyIHVzaW5nICVzIGluc3RlYWQgb2YgJXMoYSAlcyBiKScg
JSAoCi0gICAgICAgICAgICAgICAgICAgICAgX0NIRUNLX1JFUExBQ0VNRU5UW2N1cnJlbnRfbWFj
cm9dW29wZXJhdG9yXSwKLSAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X21hY3JvLCBvcGVy
YXRvcikpCi0gICAgICAgICAgICBicmVhawotCi0KLWRlZiBjaGVja19mb3JfY29tcGFyaXNvbnNf
dG9femVybyhmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBlcnJvcik6Ci0gICAg
IyBHZXQgdGhlIGxpbmUgd2l0aG91dCBjb21tZW50cyBhbmQgc3RyaW5ncy4KLSAgICBsaW5lID0g
Y2xlYW5fbGluZXMuZWxpZGVkW2xpbmVfbnVtYmVyXQotCi0gICAgIyBJbmNsdWRlIE5VTEwgaGVy
ZSBzbyB0aGF0IHVzZXJzIGRvbid0IGhhdmUgdG8gY29udmVydCBOVUxMIHRvIDAgZmlyc3QgYW5k
IHRoZW4gZ2V0IHRoaXMgZXJyb3IuCi0gICAgaWYgc2VhcmNoKHInWz0hXT1ccyooTlVMTHwwfHRy
dWV8ZmFsc2UpXFcnLCBsaW5lKSBvciBzZWFyY2gocidcVyhOVUxMfDB8dHJ1ZXxmYWxzZSlccypb
PSFdPScsIGxpbmUpOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdyZWFk
YWJpbGl0eS9jb21wYXJpc29uX3RvX3plcm8nLCA1LAotICAgICAgICAgICAgICAnVGVzdHMgZm9y
IHRydWUvZmFsc2UsIG51bGwvbm9uLW51bGwsIGFuZCB6ZXJvL25vbi16ZXJvIHNob3VsZCBhbGwg
YmUgZG9uZSB3aXRob3V0IGVxdWFsaXR5IGNvbXBhcmlzb25zLicpCi0KLQotZGVmIGNoZWNrX2Zv
cl9udWxsKGZpbGVuYW1lLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGVycm9yKToKLSAgICAj
IFRoaXMgY2hlY2sgZG9lc24ndCBhcHBseSB0byBDIG9yIE9iamVjdGl2ZS1DIGltcGxlbWVudGF0
aW9uIGZpbGVzLgotICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCcuYycpIG9yIGZpbGVuYW1lLmVu
ZHN3aXRoKCcubScpOgotICAgICAgICByZXR1cm4KLQotICAgIGxpbmUgPSBjbGVhbl9saW5lcy5l
bGlkZWRbbGluZV9udW1iZXJdCi0KLSAgICAjIERvbid0IHdhcm4gYWJvdXQgTlVMTCB1c2FnZSBp
biBnX29iamVjdF97Z2V0LHNldH0oKS4gU2VlIEJ1ZyAzMjg1OAotICAgIGlmIHNlYXJjaChyJ1xi
Z19vYmplY3RfW3NnXWV0XGInLCBsaW5lKToKLSAgICAgICAgcmV0dXJuCi0KLSAgICBpZiBzZWFy
Y2gocidcYk5VTExcYicsIGxpbmUpOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1i
ZXIsICdyZWFkYWJpbGl0eS9udWxsJywgNSwgJ1VzZSAwIGluc3RlYWQgb2YgTlVMTC4nKQotICAg
ICAgICByZXR1cm4KLQotICAgIGxpbmUgPSBjbGVhbl9saW5lcy5yYXdfbGluZXNbbGluZV9udW1i
ZXJdCi0gICAgIyBTZWUgaWYgTlVMTCBvY2N1cnMgaW4gYW55IGNvbW1lbnRzIGluIHRoZSBsaW5l
LiBJZiB0aGUgc2VhcmNoIGZvciBOVUxMIHVzaW5nIHRoZSByYXcgbGluZQotICAgICMgbWF0Y2hl
cywgdGhlbiBkbyB0aGUgY2hlY2sgd2l0aCBzdHJpbmdzIGNvbGxhcHNlZCB0byBhdm9pZCBnaXZp
bmcgZXJyb3JzIGZvcgotICAgICMgTlVMTHMgb2NjdXJyaW5nIGluIHN0cmluZ3MuCi0gICAgaWYg
c2VhcmNoKHInXGJOVUxMXGInLCBsaW5lKSBhbmQgc2VhcmNoKHInXGJOVUxMXGInLCBDbGVhbnNl
ZExpbmVzLmNvbGxhcHNlX3N0cmluZ3MobGluZSkpOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwg
bGluZV9udW1iZXIsICdyZWFkYWJpbGl0eS9udWxsJywgNCwgJ1VzZSAwIGluc3RlYWQgb2YgTlVM
TC4nKQotCi1kZWYgZ2V0X2xpbmVfd2lkdGgobGluZSk6Ci0gICAgIiIiRGV0ZXJtaW5lcyB0aGUg
d2lkdGggb2YgdGhlIGxpbmUgaW4gY29sdW1uIHBvc2l0aW9ucy4KLQotICAgIEFyZ3M6Ci0gICAg
ICBsaW5lOiBBIHN0cmluZywgd2hpY2ggbWF5IGJlIGEgVW5pY29kZSBzdHJpbmcuCi0KLSAgICBS
ZXR1cm5zOgotICAgICAgVGhlIHdpZHRoIG9mIHRoZSBsaW5lIGluIGNvbHVtbiBwb3NpdGlvbnMs
IGFjY291bnRpbmcgZm9yIFVuaWNvZGUKLSAgICAgIGNvbWJpbmluZyBjaGFyYWN0ZXJzIGFuZCB3
aWRlIGNoYXJhY3RlcnMuCi0gICAgIiIiCi0gICAgaWYgaXNpbnN0YW5jZShsaW5lLCB1bmljb2Rl
KToKLSAgICAgICAgd2lkdGggPSAwCi0gICAgICAgIGZvciBjIGluIHVuaWNvZGVkYXRhLm5vcm1h
bGl6ZSgnTkZDJywgbGluZSk6Ci0gICAgICAgICAgICBpZiB1bmljb2RlZGF0YS5lYXN0X2FzaWFu
X3dpZHRoKGMpIGluICgnVycsICdGJyk6Ci0gICAgICAgICAgICAgICAgd2lkdGggKz0gMgotICAg
ICAgICAgICAgZWxpZiBub3QgdW5pY29kZWRhdGEuY29tYmluaW5nKGMpOgotICAgICAgICAgICAg
ICAgIHdpZHRoICs9IDEKLSAgICAgICAgcmV0dXJuIHdpZHRoCi0gICAgcmV0dXJuIGxlbihsaW5l
KQotCi0KLWRlZiBjaGVja19zdHlsZShmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVy
LCBmaWxlX2V4dGVuc2lvbiwgZmlsZV9zdGF0ZSwgZXJyb3IpOgotICAgICIiIkNoZWNrcyBydWxl
cyBmcm9tIHRoZSAnQysrIHN0eWxlIHJ1bGVzJyBzZWN0aW9uIG9mIGNwcGd1aWRlLmh0bWwuCi0K
LSAgICBNb3N0IG9mIHRoZXNlIHJ1bGVzIGFyZSBoYXJkIHRvIHRlc3QgKG5hbWluZywgY29tbWVu
dCBzdHlsZSksIGJ1dCB3ZQotICAgIGRvIHdoYXQgd2UgY2FuLiAgSW4gcGFydGljdWxhciB3ZSBj
aGVjayBmb3IgNC1zcGFjZSBpbmRlbnRzLCBsaW5lIGxlbmd0aHMsCi0gICAgdGFiIHVzYWdlLCBz
cGFjZXMgaW5zaWRlIGNvZGUsIGV0Yy4KLQotICAgIEFyZ3M6Ci0gICAgICBmaWxlbmFtZTogVGhl
IG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlsZS4KLSAgICAgIGNsZWFuX2xpbmVzOiBBIENsZWFuc2Vk
TGluZXMgaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZmlsZS4KLSAgICAgIGxpbmVfbnVtYmVyOiBU
aGUgbnVtYmVyIG9mIHRoZSBsaW5lIHRvIGNoZWNrLgotICAgICAgZmlsZV9leHRlbnNpb246IFRo
ZSBleHRlbnNpb24gKHdpdGhvdXQgdGhlIGRvdCkgb2YgdGhlIGZpbGVuYW1lLgotICAgICAgZmls
ZV9zdGF0ZTogQSBfRmlsZVN0YXRlIGluc3RhbmNlIHdoaWNoIG1haW50YWlucyBpbmZvcm1hdGlv
biBhYm91dAotICAgICAgICAgICAgICAgICAgdGhlIHN0YXRlIG9mIHRoaW5ncyBpbiB0aGUgZmls
ZS4KLSAgICAgIGVycm9yOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91
bmQuCi0gICAgIiIiCi0KLSAgICByYXdfbGluZXMgPSBjbGVhbl9saW5lcy5yYXdfbGluZXMKLSAg
ICBsaW5lID0gcmF3X2xpbmVzW2xpbmVfbnVtYmVyXQotCi0gICAgaWYgbGluZS5maW5kKCdcdCcp
ICE9IC0xOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNl
L3RhYicsIDEsCi0gICAgICAgICAgICAgICdUYWIgZm91bmQ7IGJldHRlciB0byB1c2Ugc3BhY2Vz
JykKLQotICAgICMgT25lIG9yIHRocmVlIGJsYW5rIHNwYWNlcyBhdCB0aGUgYmVnaW5uaW5nIG9m
IHRoZSBsaW5lIGlzIHdlaXJkOyBpdCdzCi0gICAgIyBoYXJkIHRvIHJlY29uY2lsZSB0aGF0IHdp
dGggNC1zcGFjZSBpbmRlbnRzLgotICAgICMgTk9URTogaGVyZSBhcmUgdGhlIGNvbmRpdGlvbnMg
cm9iIHBpa2UgdXNlZCBmb3IgaGlzIHRlc3RzLiAgTWluZSBhcmVuJ3QKLSAgICAjIGFzIHNvcGhp
c3RpY2F0ZWQsIGJ1dCBpdCBtYXkgYmUgd29ydGggYmVjb21pbmcgc286ICBSTEVOR1RIPT1pbml0
aWFsX3NwYWNlcwotICAgICMgaWYoUkxFTkdUSCA+IDIwKSBjb21wbGFpbiA9IDA7Ci0gICAgIyBp
ZihtYXRjaCgkMCwgIiArKGVycm9yfHByaXZhdGV8cHVibGljfHByb3RlY3RlZCk6IikpIGNvbXBs
YWluID0gMDsKLSAgICAjIGlmKG1hdGNoKHByZXYsICImJiAqJCIpKSBjb21wbGFpbiA9IDA7Ci0g
ICAgIyBpZihtYXRjaChwcmV2LCAiXFx8XFx8ICokIikpIGNvbXBsYWluID0gMDsKLSAgICAjIGlm
KG1hdGNoKHByZXYsICJbXCIsPT48XSAqJCIpKSBjb21wbGFpbiA9IDA7Ci0gICAgIyBpZihtYXRj
aCgkMCwgIiA8PCIpKSBjb21wbGFpbiA9IDA7Ci0gICAgIyBpZihtYXRjaChwcmV2LCAiICtmb3Ig
XFwoIikpIGNvbXBsYWluID0gMDsKLSAgICAjIGlmKHByZXZvZGQgJiYgbWF0Y2gocHJldnByZXYs
ICIgK2ZvciBcXCgiKSkgY29tcGxhaW4gPSAwOwotICAgIGluaXRpYWxfc3BhY2VzID0gMAotICAg
IGNsZWFuc2VkX2xpbmUgPSBjbGVhbl9saW5lcy5lbGlkZWRbbGluZV9udW1iZXJdCi0gICAgd2hp
bGUgaW5pdGlhbF9zcGFjZXMgPCBsZW4obGluZSkgYW5kIGxpbmVbaW5pdGlhbF9zcGFjZXNdID09
ICcgJzoKLSAgICAgICAgaW5pdGlhbF9zcGFjZXMgKz0gMQotICAgIGlmIGxpbmUgYW5kIGxpbmVb
LTFdLmlzc3BhY2UoKToKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hp
dGVzcGFjZS9lbmRfb2ZfbGluZScsIDQsCi0gICAgICAgICAgICAgICdMaW5lIGVuZHMgaW4gd2hp
dGVzcGFjZS4gIENvbnNpZGVyIGRlbGV0aW5nIHRoZXNlIGV4dHJhIHNwYWNlcy4nKQotICAgICMg
VGhlcmUgYXJlIGNlcnRhaW4gc2l0dWF0aW9ucyB3ZSBhbGxvdyBvbmUgc3BhY2UsIG5vdGFibHkg
Zm9yIGxhYmVscwotICAgIGVsaWYgKChpbml0aWFsX3NwYWNlcyA+PSAxIGFuZCBpbml0aWFsX3Nw
YWNlcyA8PSAzKQotICAgICAgICAgIGFuZCBub3QgbWF0Y2gocidccypcdytccyo6XHMqJCcsIGNs
ZWFuc2VkX2xpbmUpKToKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hp
dGVzcGFjZS9pbmRlbnQnLCAzLAotICAgICAgICAgICAgICAnV2VpcmQgbnVtYmVyIG9mIHNwYWNl
cyBhdCBsaW5lLXN0YXJ0LiAgJwotICAgICAgICAgICAgICAnQXJlIHlvdSB1c2luZyBhIDQtc3Bh
Y2UgaW5kZW50PycpCi0gICAgIyBMYWJlbHMgc2hvdWxkIGFsd2F5cyBiZSBpbmRlbnRlZCBhdCBs
ZWFzdCBvbmUgc3BhY2UuCi0gICAgZWxpZiBub3QgaW5pdGlhbF9zcGFjZXMgYW5kIGxpbmVbOjJd
ICE9ICcvLyc6Ci0gICAgICAgIGxhYmVsX21hdGNoID0gbWF0Y2gocicoP1A8bGFiZWw+W146XSsp
OlxzKiQnLCBsaW5lKQotCi0gICAgICAgIGlmIGxhYmVsX21hdGNoOgotICAgICAgICAgICAgbGFi
ZWwgPSBsYWJlbF9tYXRjaC5ncm91cCgnbGFiZWwnKQotICAgICAgICAgICAgIyBPbmx5IHRocm93
IGVycm9ycyBmb3Igc3R1ZmYgdGhhdCBpcyBkZWZpbml0ZWx5IG5vdCBhIGdvdG8gbGFiZWwsCi0g
ICAgICAgICAgICAjIGJlY2F1c2UgZ290byBsYWJlbHMgY2FuIGluIGZhY3Qgb2NjdXIgYXQgdGhl
IHN0YXJ0IG9mIHRoZSBsaW5lLgotICAgICAgICAgICAgaWYgbGFiZWwgaW4gWydwdWJsaWMnLCAn
cHJpdmF0ZScsICdwcm90ZWN0ZWQnXSBvciBsYWJlbC5maW5kKCcgJykgIT0gLTE6Ci0gICAgICAg
ICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9sYWJlbHMn
LCA0LAotICAgICAgICAgICAgICAgICAgICAgICdMYWJlbHMgc2hvdWxkIGFsd2F5cyBiZSBpbmRl
bnRlZCBhdCBsZWFzdCBvbmUgc3BhY2UuICAnCi0gICAgICAgICAgICAgICAgICAgICAgJ0lmIHRo
aXMgaXMgYSBtZW1iZXItaW5pdGlhbGl6ZXIgbGlzdCBpbiBhIGNvbnN0cnVjdG9yLCAnCi0gICAg
ICAgICAgICAgICAgICAgICAgJ3RoZSBjb2xvbiBzaG91bGQgYmUgb24gdGhlIGxpbmUgYWZ0ZXIg
dGhlIGRlZmluaXRpb24gaGVhZGVyLicpCi0KLSAgICBpZiAoY2xlYW5zZWRfbGluZS5jb3VudCgn
OycpID4gMQotICAgICAgICAjIGZvciBsb29wcyBhcmUgYWxsb3dlZCB0d28gOydzIChhbmQgbWF5
IHJ1biBvdmVyIHR3byBsaW5lcykuCi0gICAgICAgIGFuZCBjbGVhbnNlZF9saW5lLmZpbmQoJ2Zv
cicpID09IC0xCi0gICAgICAgIGFuZCAoZ2V0X3ByZXZpb3VzX25vbl9ibGFua19saW5lKGNsZWFu
X2xpbmVzLCBsaW5lX251bWJlcilbMF0uZmluZCgnZm9yJykgPT0gLTEKLSAgICAgICAgICAgICBv
ciBnZXRfcHJldmlvdXNfbm9uX2JsYW5rX2xpbmUoY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyKVsw
XS5maW5kKCc7JykgIT0gLTEpCi0gICAgICAgICMgSXQncyBvayB0byBoYXZlIG1hbnkgY29tbWFu
ZHMgaW4gYSBzd2l0Y2ggY2FzZSB0aGF0IGZpdHMgaW4gMSBsaW5lCi0gICAgICAgIGFuZCBub3Qg
KChjbGVhbnNlZF9saW5lLmZpbmQoJ2Nhc2UgJykgIT0gLTEKLSAgICAgICAgICAgICAgICAgIG9y
IGNsZWFuc2VkX2xpbmUuZmluZCgnZGVmYXVsdDonKSAhPSAtMSkKLSAgICAgICAgICAgICAgICAg
YW5kIGNsZWFuc2VkX2xpbmUuZmluZCgnYnJlYWs7JykgIT0gLTEpKToKLSAgICAgICAgZXJyb3Io
ZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9uZXdsaW5lJywgNCwKLSAgICAgICAg
ICAgICAgJ01vcmUgdGhhbiBvbmUgY29tbWFuZCBvbiB0aGUgc2FtZSBsaW5lJykKLQotICAgIGlm
IGNsZWFuc2VkX2xpbmUuc3RyaXAoKS5lbmRzd2l0aCgnfHwnKSBvciBjbGVhbnNlZF9saW5lLnN0
cmlwKCkuZW5kc3dpdGgoJyYmJyk6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJl
ciwgJ3doaXRlc3BhY2Uvb3BlcmF0b3JzJywgNCwKLSAgICAgICAgICAgICAgJ0Jvb2xlYW4gZXhw
cmVzc2lvbnMgdGhhdCBzcGFuIG11bHRpcGxlIGxpbmVzIHNob3VsZCBoYXZlIHRoZWlyICcKLSAg
ICAgICAgICAgICAgJ29wZXJhdG9ycyBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBsaW5lIGluc3Rl
YWQgb2YgdGhlIHJpZ2h0IHNpZGUuJykKLQotICAgICMgU29tZSBtb3JlIHN0eWxlIGNoZWNrcwot
ICAgIGNoZWNrX25hbWVzcGFjZV9pbmRlbnRhdGlvbihmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxp
bmVfbnVtYmVyLCBmaWxlX2V4dGVuc2lvbiwgZmlsZV9zdGF0ZSwgZXJyb3IpCi0gICAgY2hlY2tf
dXNpbmdfc3RkKGZpbGVuYW1lLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGVycm9yKQotICAg
IGNoZWNrX21heF9taW5fbWFjcm9zKGZpbGVuYW1lLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIs
IGVycm9yKQotICAgIGNoZWNrX3N3aXRjaF9pbmRlbnRhdGlvbihmaWxlbmFtZSwgY2xlYW5fbGlu
ZXMsIGxpbmVfbnVtYmVyLCBlcnJvcikKLSAgICBjaGVja19icmFjZXMoZmlsZW5hbWUsIGNsZWFu
X2xpbmVzLCBsaW5lX251bWJlciwgZXJyb3IpCi0gICAgY2hlY2tfZXhpdF9zdGF0ZW1lbnRfc2lt
cGxpZmljYXRpb25zKGZpbGVuYW1lLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGVycm9yKQot
ICAgIGNoZWNrX3NwYWNpbmcoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZXJy
b3IpCi0gICAgY2hlY2tfY2hlY2soZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwg
ZXJyb3IpCi0gICAgY2hlY2tfZm9yX2NvbXBhcmlzb25zX3RvX3plcm8oZmlsZW5hbWUsIGNsZWFu
X2xpbmVzLCBsaW5lX251bWJlciwgZXJyb3IpCi0gICAgY2hlY2tfZm9yX251bGwoZmlsZW5hbWUs
IGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZXJyb3IpCi0KLQotX1JFX1BBVFRFUk5fSU5DTFVE
RV9ORVdfU1RZTEUgPSByZS5jb21waWxlKHInI2luY2x1ZGUgKyJbXi9dK1wuaCInKQotX1JFX1BB
VFRFUk5fSU5DTFVERSA9IHJlLmNvbXBpbGUocideXHMqI1xzKmluY2x1ZGVccyooWzwiXSkoW14+
Il0qKVs+Il0uKiQnKQotIyBNYXRjaGVzIHRoZSBmaXJzdCBjb21wb25lbnQgb2YgYSBmaWxlbmFt
ZSBkZWxpbWl0ZWQgYnkgLXMgYW5kIF9zLiBUaGF0IGlzOgotIyAgX1JFX0ZJUlNUX0NPTVBPTkVO
VC5tYXRjaCgnZm9vJykuZ3JvdXAoMCkgPT0gJ2ZvbycKLSMgIF9SRV9GSVJTVF9DT01QT05FTlQu
bWF0Y2goJ2Zvby5jcHAnKS5ncm91cCgwKSA9PSAnZm9vJwotIyAgX1JFX0ZJUlNUX0NPTVBPTkVO
VC5tYXRjaCgnZm9vLWJhcl9iYXouY3BwJykuZ3JvdXAoMCkgPT0gJ2ZvbycKLSMgIF9SRV9GSVJT
VF9DT01QT05FTlQubWF0Y2goJ2Zvb19iYXItYmF6LmNwcCcpLmdyb3VwKDApID09ICdmb28nCi1f
UkVfRklSU1RfQ09NUE9ORU5UID0gcmUuY29tcGlsZShyJ15bXi1fLl0rJykKLQotCi1kZWYgX2Ry
b3BfY29tbW9uX3N1ZmZpeGVzKGZpbGVuYW1lKToKLSAgICAiIiJEcm9wcyBjb21tb24gc3VmZml4
ZXMgbGlrZSBfdGVzdC5jcHAgb3IgLWlubC5oIGZyb20gZmlsZW5hbWUuCi0KLSAgICBGb3IgZXhh
bXBsZToKLSAgICAgID4+PiBfZHJvcF9jb21tb25fc3VmZml4ZXMoJ2Zvby9mb28taW5sLmgnKQot
ICAgICAgJ2Zvby9mb28nCi0gICAgICA+Pj4gX2Ryb3BfY29tbW9uX3N1ZmZpeGVzKCdmb28vYmFy
L2Zvby5jcHAnKQotICAgICAgJ2Zvby9iYXIvZm9vJwotICAgICAgPj4+IF9kcm9wX2NvbW1vbl9z
dWZmaXhlcygnZm9vL2Zvb19pbnRlcm5hbC5oJykKLSAgICAgICdmb28vZm9vJwotICAgICAgPj4+
IF9kcm9wX2NvbW1vbl9zdWZmaXhlcygnZm9vL2Zvb191bnVzdWFsaW50ZXJuYWwuaCcpCi0gICAg
ICAnZm9vL2Zvb191bnVzdWFsaW50ZXJuYWwnCi0KLSAgICBBcmdzOgotICAgICAgZmlsZW5hbWU6
IFRoZSBpbnB1dCBmaWxlbmFtZS4KLQotICAgIFJldHVybnM6Ci0gICAgICBUaGUgZmlsZW5hbWUg
d2l0aCB0aGUgY29tbW9uIHN1ZmZpeCByZW1vdmVkLgotICAgICIiIgotICAgIGZvciBzdWZmaXgg
aW4gKCd0ZXN0LmNwcCcsICdyZWd0ZXN0LmNwcCcsICd1bml0dGVzdC5jcHAnLAotICAgICAgICAg
ICAgICAgICAgICdpbmwuaCcsICdpbXBsLmgnLCAnaW50ZXJuYWwuaCcpOgotICAgICAgICBpZiAo
ZmlsZW5hbWUuZW5kc3dpdGgoc3VmZml4KSBhbmQgbGVuKGZpbGVuYW1lKSA+IGxlbihzdWZmaXgp
Ci0gICAgICAgICAgICBhbmQgZmlsZW5hbWVbLWxlbihzdWZmaXgpIC0gMV0gaW4gKCctJywgJ18n
KSk6Ci0gICAgICAgICAgICByZXR1cm4gZmlsZW5hbWVbOi1sZW4oc3VmZml4KSAtIDFdCi0gICAg
cmV0dXJuIG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzBdCi0KLQotZGVmIF9pc190ZXN0X2Zp
bGVuYW1lKGZpbGVuYW1lKToKLSAgICAiIiJEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiBmaWxlbmFt
ZSBoYXMgYSBzdWZmaXggdGhhdCBpZGVudGlmaWVzIGl0IGFzIGEgdGVzdC4KLQotICAgIEFyZ3M6
Ci0gICAgICBmaWxlbmFtZTogVGhlIGlucHV0IGZpbGVuYW1lLgotCi0gICAgUmV0dXJuczoKLSAg
ICAgIFRydWUgaWYgJ2ZpbGVuYW1lJyBsb29rcyBsaWtlIGEgdGVzdCwgRmFsc2Ugb3RoZXJ3aXNl
LgotICAgICIiIgotICAgIGlmIChmaWxlbmFtZS5lbmRzd2l0aCgnX3Rlc3QuY3BwJykKLSAgICAg
ICAgb3IgZmlsZW5hbWUuZW5kc3dpdGgoJ191bml0dGVzdC5jcHAnKQotICAgICAgICBvciBmaWxl
bmFtZS5lbmRzd2l0aCgnX3JlZ3Rlc3QuY3BwJykpOgotICAgICAgICByZXR1cm4gVHJ1ZQotICAg
IHJldHVybiBGYWxzZQotCi0KLWRlZiBfY2xhc3NpZnlfaW5jbHVkZShmaWxlbmFtZSwgaW5jbHVk
ZSwgaXNfc3lzdGVtLCBpbmNsdWRlX3N0YXRlKToKLSAgICAiIiJGaWd1cmVzIG91dCB3aGF0IGtp
bmQgb2YgaGVhZGVyICdpbmNsdWRlJyBpcy4KLQotICAgIEFyZ3M6Ci0gICAgICBmaWxlbmFtZTog
VGhlIGN1cnJlbnQgZmlsZSBjcHBfc3R5bGUgaXMgcnVubmluZyBvdmVyLgotICAgICAgaW5jbHVk
ZTogVGhlIHBhdGggdG8gYSAjaW5jbHVkZWQgZmlsZS4KLSAgICAgIGlzX3N5c3RlbTogVHJ1ZSBp
ZiB0aGUgI2luY2x1ZGUgdXNlZCA8PiByYXRoZXIgdGhhbiAiIi4KLSAgICAgIGluY2x1ZGVfc3Rh
dGU6IEFuIF9JbmNsdWRlU3RhdGUgaW5zdGFuY2UgaW4gd2hpY2ggdGhlIGhlYWRlcnMgYXJlIGlu
c2VydGVkLgotCi0gICAgUmV0dXJuczoKLSAgICAgIE9uZSBvZiB0aGUgX1hYWF9IRUFERVIgY29u
c3RhbnRzLgotCi0gICAgRm9yIGV4YW1wbGU6Ci0gICAgICA+Pj4gX2NsYXNzaWZ5X2luY2x1ZGUo
J2Zvby5jcHAnLCAnY29uZmlnLmgnLCBGYWxzZSkKLSAgICAgIF9DT05GSUdfSEVBREVSCi0gICAg
ICA+Pj4gX2NsYXNzaWZ5X2luY2x1ZGUoJ2Zvby5jcHAnLCAnZm9vLmgnLCBGYWxzZSkKLSAgICAg
IF9QUklNQVJZX0hFQURFUgotICAgICAgPj4+IF9jbGFzc2lmeV9pbmNsdWRlKCdmb28uY3BwJywg
J2Jhci5oJywgRmFsc2UpCi0gICAgICBfT1RIRVJfSEVBREVSCi0gICAgIiIiCi0KLSAgICAjIElm
IGl0IGlzIGEgc3lzdGVtIGhlYWRlciB3ZSBrbm93IGl0IGlzIGNsYXNzaWZpZWQgYXMgX09USEVS
X0hFQURFUi4KLSAgICBpZiBpc19zeXN0ZW06Ci0gICAgICAgIHJldHVybiBfT1RIRVJfSEVBREVS
Ci0KLSAgICAjIElmIHRoZSBpbmNsdWRlIGlzIG5hbWVkIGNvbmZpZy5oIHRoZW4gdGhpcyBpcyBX
ZWJDb3JlL2NvbmZpZy5oLgotICAgIGlmIGluY2x1ZGUgPT0gImNvbmZpZy5oIjoKLSAgICAgICAg
cmV0dXJuIF9DT05GSUdfSEVBREVSCi0KLSAgICAjIFRoZXJlIGNhbm5vdCBiZSBwcmltYXJ5IGlu
Y2x1ZGVzIGluIGhlYWRlciBmaWxlcyB0aGVtc2VsdmVzLiBPbmx5IGFuCi0gICAgIyBpbmNsdWRl
IGV4YWN0bHkgbWF0Y2hlcyB0aGUgaGVhZGVyIGZpbGVuYW1lIHdpbGwgYmUgaXMgZmxhZ2dlZCBh
cwotICAgICMgcHJpbWFyeSwgc28gdGhhdCBpdCB0cmlnZ2VycyB0aGUgImRvbid0IGluY2x1ZGUg
eW91cnNlbGYiIGNoZWNrLgotICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCcuaCcpIGFuZCBmaWxl
bmFtZSAhPSBpbmNsdWRlOgotICAgICAgICByZXR1cm4gX09USEVSX0hFQURFUjsKLQotICAgICMg
UXQncyBtb2MgZmlsZXMgZG8gbm90IGZvbGxvdyB0aGUgbmFtaW5nIGFuZCBvcmRlcmluZyBydWxl
cywgc28gdGhleSBzaG91bGQgYmUgc2tpcHBlZAotICAgIGlmIGluY2x1ZGUuc3RhcnRzd2l0aCgn
bW9jXycpIGFuZCBpbmNsdWRlLmVuZHN3aXRoKCcuY3BwJyk6Ci0gICAgICAgIHJldHVybiBfTU9D
X0hFQURFUgotCi0gICAgaWYgaW5jbHVkZS5lbmRzd2l0aCgnLm1vYycpOgotICAgICAgICByZXR1
cm4gX01PQ19IRUFERVIKLQotICAgICMgSWYgdGhlIHRhcmdldCBmaWxlIGJhc2VuYW1lIHN0YXJ0
cyB3aXRoIHRoZSBpbmNsdWRlIHdlJ3JlIGNoZWNraW5nCi0gICAgIyB0aGVuIHdlIGNvbnNpZGVy
IGl0IHRoZSBwcmltYXJ5IGhlYWRlci4KLSAgICB0YXJnZXRfYmFzZSA9IEZpbGVJbmZvKGZpbGVu
YW1lKS5iYXNlX25hbWUoKQotICAgIGluY2x1ZGVfYmFzZSA9IEZpbGVJbmZvKGluY2x1ZGUpLmJh
c2VfbmFtZSgpCi0KLSAgICAjIElmIHdlIGhhdmVuJ3QgZW5jb3VudGVyZWQgYSBwcmltYXJ5IGhl
YWRlciwgdGhlbiBiZSBsZW5pZW50IGluIGNoZWNraW5nLgotICAgIGlmIG5vdCBpbmNsdWRlX3N0
YXRlLnZpc2l0ZWRfcHJpbWFyeV9zZWN0aW9uKCkgYW5kIHRhcmdldF9iYXNlLmZpbmQoaW5jbHVk
ZV9iYXNlKSAhPSAtMToKLSAgICAgICAgcmV0dXJuIF9QUklNQVJZX0hFQURFUgotICAgICMgSWYg
d2UgYWxyZWFkeSBlbmNvdW50ZXJlZCBhIHByaW1hcnkgaGVhZGVyLCBwZXJmb3JtIGEgc3RyaWN0
IGNvbXBhcmlzb24uCi0gICAgIyBJbiBjYXNlIHRoZSB0d28gZmlsZW5hbWUgYmFzZXMgYXJlIHRo
ZSBzYW1lIHRoZW4gdGhlIGFib3ZlIGxlbmllbnQgY2hlY2sKLSAgICAjIHByb2JhYmx5IHdhcyBh
IGZhbHNlIHBvc2l0aXZlLgotICAgIGVsaWYgaW5jbHVkZV9zdGF0ZS52aXNpdGVkX3ByaW1hcnlf
c2VjdGlvbigpIGFuZCB0YXJnZXRfYmFzZSA9PSBpbmNsdWRlX2Jhc2U6Ci0gICAgICAgIHJldHVy
biBfUFJJTUFSWV9IRUFERVIKLQotICAgIHJldHVybiBfT1RIRVJfSEVBREVSCi0KLQotCi1kZWYg
Y2hlY2tfaW5jbHVkZV9saW5lKGZpbGVuYW1lLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGlu
Y2x1ZGVfc3RhdGUsIGVycm9yKToKLSAgICAiIiJDaGVjayBydWxlcyB0aGF0IGFyZSBhcHBsaWNh
YmxlIHRvICNpbmNsdWRlIGxpbmVzLgotCi0gICAgU3RyaW5ncyBvbiAjaW5jbHVkZSBsaW5lcyBh
cmUgTk9UIHJlbW92ZWQgZnJvbSBlbGlkZWQgbGluZSwgdG8gbWFrZQotICAgIGNlcnRhaW4gdGFz
a3MgZWFzaWVyLiBIb3dldmVyLCB0byBwcmV2ZW50IGZhbHNlIHBvc2l0aXZlcywgY2hlY2tzCi0g
ICAgYXBwbGljYWJsZSB0byAjaW5jbHVkZSBsaW5lcyBpbiBDaGVja0xhbmd1YWdlIG11c3QgYmUg
cHV0IGhlcmUuCi0KLSAgICBBcmdzOgotICAgICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBj
dXJyZW50IGZpbGUuCi0gICAgICBjbGVhbl9saW5lczogQSBDbGVhbnNlZExpbmVzIGluc3RhbmNl
IGNvbnRhaW5pbmcgdGhlIGZpbGUuCi0gICAgICBsaW5lX251bWJlcjogVGhlIG51bWJlciBvZiB0
aGUgbGluZSB0byBjaGVjay4KLSAgICAgIGluY2x1ZGVfc3RhdGU6IEFuIF9JbmNsdWRlU3RhdGUg
aW5zdGFuY2UgaW4gd2hpY2ggdGhlIGhlYWRlcnMgYXJlIGluc2VydGVkLgotICAgICAgZXJyb3I6
IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4KLSAgICAiIiIKLQot
ICAgIGxpbmUgPSBjbGVhbl9saW5lcy5saW5lc1tsaW5lX251bWJlcl0KLQotICAgIG1hdGNoZWQg
PSBfUkVfUEFUVEVSTl9JTkNMVURFLnNlYXJjaChsaW5lKQotICAgIGlmIG5vdCBtYXRjaGVkOgot
ICAgICAgICByZXR1cm4KLQotICAgIGluY2x1ZGUgPSBtYXRjaGVkLmdyb3VwKDIpCi0gICAgaXNf
c3lzdGVtID0gKG1hdGNoZWQuZ3JvdXAoMSkgPT0gJzwnKQotCi0gICAgIyBMb29rIGZvciBhbnkg
b2YgdGhlIHN0cmVhbSBjbGFzc2VzIHRoYXQgYXJlIHBhcnQgb2Ygc3RhbmRhcmQgQysrLgotICAg
IGlmIG1hdGNoKHInKGZ8aW5kfGlvfGl8b3xwYXJzZXxwZnxzdGRpb3xzdHJ8KT9zdHJlYW0kJywg
aW5jbHVkZSk6Ci0gICAgICAgICMgTWFueSB1bml0IHRlc3RzIHVzZSBjb3V0LCBzbyB3ZSBleGVt
cHQgdGhlbS4KLSAgICAgICAgaWYgbm90IF9pc190ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKToKLSAg
ICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3JlYWRhYmlsaXR5L3N0cmVh
bXMnLCAzLAotICAgICAgICAgICAgICAgICAgJ1N0cmVhbXMgYXJlIGhpZ2hseSBkaXNjb3VyYWdl
ZC4nKQotCi0gICAgIyBMb29rIGZvciBzcGVjaWZpYyBpbmNsdWRlcyB0byBmaXguCi0gICAgaWYg
aW5jbHVkZS5zdGFydHN3aXRoKCd3dGYvJykgYW5kIG5vdCBpc19zeXN0ZW06Ci0gICAgICAgIGVy
cm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ2J1aWxkL2luY2x1ZGUnLCA0LAotICAgICAgICAg
ICAgICAnd3RmIGluY2x1ZGVzIHNob3VsZCBiZSA8d3RmL2ZpbGUuaD4gaW5zdGVhZCBvZiAid3Rm
L2ZpbGUuaCIuJykKLQotICAgIGR1cGxpY2F0ZV9oZWFkZXIgPSBpbmNsdWRlIGluIGluY2x1ZGVf
c3RhdGUKLSAgICBpZiBkdXBsaWNhdGVfaGVhZGVyOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwg
bGluZV9udW1iZXIsICdidWlsZC9pbmNsdWRlJywgNCwKLSAgICAgICAgICAgICAgJyIlcyIgYWxy
ZWFkeSBpbmNsdWRlZCBhdCAlczolcycgJQotICAgICAgICAgICAgICAoaW5jbHVkZSwgZmlsZW5h
bWUsIGluY2x1ZGVfc3RhdGVbaW5jbHVkZV0pKQotICAgIGVsc2U6Ci0gICAgICAgIGluY2x1ZGVf
c3RhdGVbaW5jbHVkZV0gPSBsaW5lX251bWJlcgotCi0gICAgaGVhZGVyX3R5cGUgPSBfY2xhc3Np
ZnlfaW5jbHVkZShmaWxlbmFtZSwgaW5jbHVkZSwgaXNfc3lzdGVtLCBpbmNsdWRlX3N0YXRlKQot
ICAgIGluY2x1ZGVfc3RhdGUuaGVhZGVyX3R5cGVzW2xpbmVfbnVtYmVyXSA9IGhlYWRlcl90eXBl
Ci0KLSAgICAjIE9ubHkgcHJvY2VlZCBpZiB0aGlzIGlzbid0IGEgZHVwbGljYXRlIGhlYWRlci4K
LSAgICBpZiBkdXBsaWNhdGVfaGVhZGVyOgotICAgICAgICByZXR1cm4KLQotICAgICMgV2Ugd2Fu
dCB0byBlbnN1cmUgdGhhdCBoZWFkZXJzIGFwcGVhciBpbiB0aGUgcmlnaHQgb3JkZXI6Ci0gICAg
IyAxKSBmb3IgaW1wbGVtZW50YXRpb24gZmlsZXM6IGNvbmZpZy5oLCBwcmltYXJ5IGhlYWRlciwg
YmxhbmsgbGluZSwgYWxwaGFiZXRpY2FsbHkgc29ydGVkCi0gICAgIyAyKSBmb3IgaGVhZGVyIGZp
bGVzOiBhbHBoYWJldGljYWxseSBzb3J0ZWQKLSAgICAjIFRoZSBpbmNsdWRlX3N0YXRlIG9iamVj
dCBrZWVwcyB0cmFjayBvZiB0aGUgbGFzdCB0eXBlIHNlZW4KLSAgICAjIGFuZCBjb21wbGFpbnMg
aWYgdGhlIGhlYWRlciB0eXBlcyBhcmUgb3V0IG9mIG9yZGVyIG9yIG1pc3NpbmcuCi0gICAgZXJy
b3JfbWVzc2FnZSA9IGluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKGhlYWRl
cl90eXBlLCBmaWxlbmFtZS5lbmRzd2l0aCgnLmgnKSkKLQotICAgICMgQ2hlY2sgdG8gbWFrZSBz
dXJlIHdlIGhhdmUgYSBibGFuayBsaW5lIGFmdGVyIHByaW1hcnkgaGVhZGVyLgotICAgIGlmIG5v
dCBlcnJvcl9tZXNzYWdlIGFuZCBoZWFkZXJfdHlwZSA9PSBfUFJJTUFSWV9IRUFERVI6Ci0gICAg
ICAgICBuZXh0X2xpbmUgPSBjbGVhbl9saW5lcy5yYXdfbGluZXNbbGluZV9udW1iZXIgKyAxXQot
ICAgICAgICAgaWYgbm90IGlzX2JsYW5rX2xpbmUobmV4dF9saW5lKToKLSAgICAgICAgICAgIGVy
cm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ2J1aWxkL2luY2x1ZGVfb3JkZXInLCA0LAotICAg
ICAgICAgICAgICAgICAgJ1lvdSBzaG91bGQgYWRkIGEgYmxhbmsgbGluZSBhZnRlciBpbXBsZW1l
bnRhdGlvbiBmaWxlXCdzIG93biBoZWFkZXIuJykKLQotICAgICMgQ2hlY2sgdG8gbWFrZSBzdXJl
IGFsbCBoZWFkZXJzIGJlc2lkZXMgY29uZmlnLmggYW5kIHRoZSBwcmltYXJ5IGhlYWRlciBhcmUK
LSAgICAjIGFscGhhYmV0aWNhbGx5IHNvcnRlZC4gU2tpcCBRdCdzIG1vYyBmaWxlcy4KLSAgICBp
ZiBub3QgZXJyb3JfbWVzc2FnZSBhbmQgaGVhZGVyX3R5cGUgPT0gX09USEVSX0hFQURFUjoKLSAg
ICAgICAgIHByZXZpb3VzX2xpbmVfbnVtYmVyID0gbGluZV9udW1iZXIgLSAxOwotICAgICAgICAg
cHJldmlvdXNfbGluZSA9IGNsZWFuX2xpbmVzLmxpbmVzW3ByZXZpb3VzX2xpbmVfbnVtYmVyXQot
ICAgICAgICAgcHJldmlvdXNfbWF0Y2ggPSBfUkVfUEFUVEVSTl9JTkNMVURFLnNlYXJjaChwcmV2
aW91c19saW5lKQotICAgICAgICAgd2hpbGUgKG5vdCBwcmV2aW91c19tYXRjaCBhbmQgcHJldmlv
dXNfbGluZV9udW1iZXIgPiAwCi0gICAgICAgICAgICAgICAgYW5kIG5vdCBzZWFyY2gocidcQSgj
aWZ8I2lmZGVmfCNpZm5kZWZ8I2Vsc2V8I2VsaWZ8I2VuZGlmKScsIHByZXZpb3VzX2xpbmUpKToK
LSAgICAgICAgICAgIHByZXZpb3VzX2xpbmVfbnVtYmVyIC09IDE7Ci0gICAgICAgICAgICBwcmV2
aW91c19saW5lID0gY2xlYW5fbGluZXMubGluZXNbcHJldmlvdXNfbGluZV9udW1iZXJdCi0gICAg
ICAgICAgICBwcmV2aW91c19tYXRjaCA9IF9SRV9QQVRURVJOX0lOQ0xVREUuc2VhcmNoKHByZXZp
b3VzX2xpbmUpCi0gICAgICAgICBpZiBwcmV2aW91c19tYXRjaDoKLSAgICAgICAgICAgIHByZXZp
b3VzX2hlYWRlcl90eXBlID0gaW5jbHVkZV9zdGF0ZS5oZWFkZXJfdHlwZXNbcHJldmlvdXNfbGlu
ZV9udW1iZXJdCi0gICAgICAgICAgICBpZiBwcmV2aW91c19oZWFkZXJfdHlwZSA9PSBfT1RIRVJf
SEVBREVSIGFuZCBwcmV2aW91c19saW5lLnN0cmlwKCkgPiBsaW5lLnN0cmlwKCk6Ci0gICAgICAg
ICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnYnVpbGQvaW5jbHVkZV9vcmRl
cicsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgJ0FscGhhYmV0aWNhbCBzb3J0aW5nIHByb2Js
ZW0uJykKLQotICAgIGlmIGVycm9yX21lc3NhZ2U6Ci0gICAgICAgIGlmIGZpbGVuYW1lLmVuZHN3
aXRoKCcuaCcpOgotICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnYnVp
bGQvaW5jbHVkZV9vcmRlcicsIDQsCi0gICAgICAgICAgICAgICAgICAnJXMgU2hvdWxkIGJlOiBh
bHBoYWJldGljYWxseSBzb3J0ZWQuJyAlCi0gICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdl
KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVy
LCAnYnVpbGQvaW5jbHVkZV9vcmRlcicsIDQsCi0gICAgICAgICAgICAgICAgICAnJXMgU2hvdWxk
IGJlOiBjb25maWcuaCwgcHJpbWFyeSBoZWFkZXIsIGJsYW5rIGxpbmUsIGFuZCB0aGVuIGFscGhh
YmV0aWNhbGx5IHNvcnRlZC4nICUKLSAgICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UpCi0K
LQotZGVmIGNoZWNrX2xhbmd1YWdlKGZpbGVuYW1lLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIs
IGZpbGVfZXh0ZW5zaW9uLCBpbmNsdWRlX3N0YXRlLAotICAgICAgICAgICAgICAgICAgIGVycm9y
KToKLSAgICAiIiJDaGVja3MgcnVsZXMgZnJvbSB0aGUgJ0MrKyBsYW5ndWFnZSBydWxlcycgc2Vj
dGlvbiBvZiBjcHBndWlkZS5odG1sLgotCi0gICAgU29tZSBvZiB0aGVzZSBydWxlcyBhcmUgaGFy
ZCB0byB0ZXN0IChmdW5jdGlvbiBvdmVybG9hZGluZywgdXNpbmcKLSAgICB1aW50MzIgaW5hcHBy
b3ByaWF0ZWx5KSwgYnV0IHdlIGRvIHRoZSBiZXN0IHdlIGNhbi4KLQotICAgIEFyZ3M6Ci0gICAg
ICBmaWxlbmFtZTogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlsZS4KLSAgICAgIGNsZWFuX2xp
bmVzOiBBIENsZWFuc2VkTGluZXMgaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZmlsZS4KLSAgICAg
IGxpbmVfbnVtYmVyOiBUaGUgbnVtYmVyIG9mIHRoZSBsaW5lIHRvIGNoZWNrLgotICAgICAgZmls
ZV9leHRlbnNpb246IFRoZSBleHRlbnNpb24gKHdpdGhvdXQgdGhlIGRvdCkgb2YgdGhlIGZpbGVu
YW1lLgotICAgICAgaW5jbHVkZV9zdGF0ZTogQW4gX0luY2x1ZGVTdGF0ZSBpbnN0YW5jZSBpbiB3
aGljaCB0aGUgaGVhZGVycyBhcmUgaW5zZXJ0ZWQuCi0gICAgICBlcnJvcjogVGhlIGZ1bmN0aW9u
IHRvIGNhbGwgd2l0aCBhbnkgZXJyb3JzIGZvdW5kLgotICAgICIiIgotICAgICMgSWYgdGhlIGxp
bmUgaXMgZW1wdHkgb3IgY29uc2lzdHMgb2YgZW50aXJlbHkgYSBjb21tZW50LCBubyBuZWVkIHRv
Ci0gICAgIyBjaGVjayBpdC4KLSAgICBsaW5lID0gY2xlYW5fbGluZXMuZWxpZGVkW2xpbmVfbnVt
YmVyXQotICAgIGlmIG5vdCBsaW5lOgotICAgICAgICByZXR1cm4KLQotICAgIG1hdGNoZWQgPSBf
UkVfUEFUVEVSTl9JTkNMVURFLnNlYXJjaChsaW5lKQotICAgIGlmIG1hdGNoZWQ6Ci0gICAgICAg
IGNoZWNrX2luY2x1ZGVfbGluZShmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBp
bmNsdWRlX3N0YXRlLCBlcnJvcikKLSAgICAgICAgcmV0dXJuCi0KLSAgICAjIEZJWE1FOiBmaWd1
cmUgb3V0IGlmIHRoZXkncmUgdXNpbmcgZGVmYXVsdCBhcmd1bWVudHMgaW4gZm4gcHJvdG8uCi0K
LSAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGV5J3JlIHVzaW5nIGFuIGNvbnZlcnNpb24gZnVuY3Rp
b24gY2FzdC4KLSAgICAjIEkganVzdCB0cnkgdG8gY2FwdHVyZSB0aGUgbW9zdCBjb21tb24gYmFz
aWMgdHlwZXMsIHRob3VnaCB0aGVyZSBhcmUgbW9yZS4KLSAgICAjIFBhcmFtZXRlcmxlc3MgY29u
dmVyc2lvbiBmdW5jdGlvbnMsIHN1Y2ggYXMgYm9vbCgpLCBhcmUgYWxsb3dlZCBhcyB0aGV5IGFy
ZQotICAgICMgcHJvYmFibHkgYSBtZW1iZXIgb3BlcmF0b3IgZGVjbGFyYXRpb24gb3IgZGVmYXVs
dCBjb25zdHJ1Y3Rvci4KLSAgICBtYXRjaGVkID0gc2VhcmNoKAotICAgICAgICByJ1xiKGludHxm
bG9hdHxkb3VibGV8Ym9vbHxjaGFyfGludDMyfHVpbnQzMnxpbnQ2NHx1aW50NjQpXChbXildJywg
bGluZSkKLSAgICBpZiBtYXRjaGVkOgotICAgICAgICAjIGdNb2NrIG1ldGhvZHMgYXJlIGRlZmlu
ZWQgdXNpbmcgc29tZSB2YXJpYW50IG9mIE1PQ0tfTUVUSE9EeChuYW1lLCB0eXBlKQotICAgICAg
ICAjIHdoZXJlIHR5cGUgbWF5IGJlIGZsb2F0KCksIGludChzdHJpbmcpLCBldGMuICBXaXRob3V0
IGNvbnRleHQgdGhleSBhcmUKLSAgICAgICAgIyB2aXJ0dWFsbHkgaW5kaXN0aW5ndWlzaGFibGUg
ZnJvbSBpbnQoeCkgY2FzdHMuCi0gICAgICAgIGlmIG5vdCBtYXRjaChyJ15ccypNT0NLXyhDT05T
VF8pP01FVEhPRFxkKyhfVCk/XCgnLCBsaW5lKToKLSAgICAgICAgICAgIGVycm9yKGZpbGVuYW1l
LCBsaW5lX251bWJlciwgJ3JlYWRhYmlsaXR5L2Nhc3RpbmcnLCA0LAotICAgICAgICAgICAgICAg
ICAgJ1VzaW5nIGRlcHJlY2F0ZWQgY2FzdGluZyBzdHlsZS4gICcKLSAgICAgICAgICAgICAgICAg
ICdVc2Ugc3RhdGljX2Nhc3Q8JXM+KC4uLikgaW5zdGVhZCcgJQotICAgICAgICAgICAgICAgICAg
bWF0Y2hlZC5ncm91cCgxKSkKLQotICAgIGNoZWNrX2Nfc3R5bGVfY2FzdChmaWxlbmFtZSwgbGlu
ZV9udW1iZXIsIGxpbmUsIGNsZWFuX2xpbmVzLnJhd19saW5lc1tsaW5lX251bWJlcl0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICdzdGF0aWNfY2FzdCcsCi0gICAgICAgICAgICAgICAgICAgICAg
IHInXCgoaW50fGZsb2F0fGRvdWJsZXxib29sfGNoYXJ8dT9pbnQoMTZ8MzJ8NjQpKVwpJywKLSAg
ICAgICAgICAgICAgICAgICAgICAgZXJyb3IpCi0gICAgIyBUaGlzIGRvZXNuJ3QgY2F0Y2ggYWxs
IGNhc2VzLiAgQ29uc2lkZXIgKGNvbnN0IGNoYXIgKiBjb25zdCkiaGVsbG8iLgotICAgIGNoZWNr
X2Nfc3R5bGVfY2FzdChmaWxlbmFtZSwgbGluZV9udW1iZXIsIGxpbmUsIGNsZWFuX2xpbmVzLnJh
d19saW5lc1tsaW5lX251bWJlcl0sCi0gICAgICAgICAgICAgICAgICAgICAgICdyZWludGVycHJl
dF9jYXN0JywgcidcKChcdytccz9cKitccz8pXCknLCBlcnJvcikKLQotICAgICMgSW4gYWRkaXRp
b24sIHdlIGxvb2sgZm9yIHBlb3BsZSB0YWtpbmcgdGhlIGFkZHJlc3Mgb2YgYSBjYXN0LiAgVGhp
cwotICAgICMgaXMgZGFuZ2Vyb3VzIC0tIGNhc3RzIGNhbiBhc3NpZ24gdG8gdGVtcG9yYXJpZXMs
IHNvIHRoZSBwb2ludGVyIGRvZXNuJ3QKLSAgICAjIHBvaW50IHdoZXJlIHlvdSB0aGluay4KLSAg
ICBpZiBzZWFyY2goCi0gICAgICAgIHInKCZcKFteKV0rXClbXHcoXSl8KCYoc3RhdGljfGR5bmFt
aWN8cmVpbnRlcnByZXQpX2Nhc3RcYiknLCBsaW5lKToKLSAgICAgICAgZXJyb3IoZmlsZW5hbWUs
IGxpbmVfbnVtYmVyLCAncnVudGltZS9jYXN0aW5nJywgNCwKLSAgICAgICAgICAgICAgKCdBcmUg
eW91IHRha2luZyBhbiBhZGRyZXNzIG9mIGEgY2FzdD8gICcKLSAgICAgICAgICAgICAgICdUaGlz
IGlzIGRhbmdlcm91czogY291bGQgYmUgYSB0ZW1wIHZhci4gICcKLSAgICAgICAgICAgICAgICdU
YWtlIHRoZSBhZGRyZXNzIGJlZm9yZSBkb2luZyB0aGUgY2FzdCwgcmF0aGVyIHRoYW4gYWZ0ZXIn
KSkKLQotICAgICMgQ2hlY2sgZm9yIHBlb3BsZSBkZWNsYXJpbmcgc3RhdGljL2dsb2JhbCBTVEwg
c3RyaW5ncyBhdCB0aGUgdG9wIGxldmVsLgotICAgICMgVGhpcyBpcyBkYW5nZXJvdXMgYmVjYXVz
ZSB0aGUgQysrIGxhbmd1YWdlIGRvZXMgbm90IGd1YXJhbnRlZSB0aGF0Ci0gICAgIyBnbG9iYWxz
IHdpdGggY29uc3RydWN0b3JzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGZpcnN0IGFjY2Vz
cy4KLSAgICBtYXRjaGVkID0gbWF0Y2goCi0gICAgICAgIHInKCg/OnxzdGF0aWMgKykoPzp8Y29u
c3QgKykpc3RyaW5nICsoW2EtekEtWjAtOV86XSspXGIoLiopJywKLSAgICAgICAgbGluZSkKLSAg
ICAjIE1ha2Ugc3VyZSBpdCdzIG5vdCBhIGZ1bmN0aW9uLgotICAgICMgRnVuY3Rpb24gdGVtcGxh
dGUgc3BlY2lhbGl6YXRpb24gbG9va3MgbGlrZTogInN0cmluZyBmb288VHlwZT4oLi4uIi4KLSAg
ICAjIENsYXNzIHRlbXBsYXRlIGRlZmluaXRpb25zIGxvb2sgbGlrZTogInN0cmluZyBGb288VHlw
ZT46Ok1ldGhvZCguLi4iLgotICAgIGlmIG1hdGNoZWQgYW5kIG5vdCBtYXRjaChyJ1xzKig8Lio+
KT8oOjpbYS16QS1aMC05X10rKT9ccypcKChbXiJdfCQpJywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF0Y2hlZC5ncm91cCgzKSk6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5l
X251bWJlciwgJ3J1bnRpbWUvc3RyaW5nJywgNCwKLSAgICAgICAgICAgICAgJ0ZvciBhIHN0YXRp
Yy9nbG9iYWwgc3RyaW5nIGNvbnN0YW50LCB1c2UgYSBDIHN0eWxlIHN0cmluZyBpbnN0ZWFkOiAn
Ci0gICAgICAgICAgICAgICciJXNjaGFyICVzW10iLicgJQotICAgICAgICAgICAgICAobWF0Y2hl
ZC5ncm91cCgxKSwgbWF0Y2hlZC5ncm91cCgyKSkpCi0KLSAgICAjIENoZWNrIHRoYXQgd2UncmUg
bm90IHVzaW5nIFJUVEkgb3V0c2lkZSBvZiB0ZXN0aW5nIGNvZGUuCi0gICAgaWYgc2VhcmNoKHIn
XGJkeW5hbWljX2Nhc3Q8JywgbGluZSkgYW5kIG5vdCBfaXNfdGVzdF9maWxlbmFtZShmaWxlbmFt
ZSk6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3J1bnRpbWUvcnR0aScs
IDUsCi0gICAgICAgICAgICAgICdEbyBub3QgdXNlIGR5bmFtaWNfY2FzdDw+LiAgSWYgeW91IG5l
ZWQgdG8gY2FzdCB3aXRoaW4gYSBjbGFzcyAnCi0gICAgICAgICAgICAgICJoaWVyYXJjaHksIHVz
ZSBzdGF0aWNfY2FzdDw+IHRvIHVwY2FzdC4gIEdvb2dsZSBkb2Vzbid0IHN1cHBvcnQgIgotICAg
ICAgICAgICAgICAnUlRUSS4nKQotCi0gICAgaWYgc2VhcmNoKHInXGIoW0EtWmEtejAtOV9dKl8p
XChcMVwpJywgbGluZSk6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3J1
bnRpbWUvaW5pdCcsIDQsCi0gICAgICAgICAgICAgICdZb3Ugc2VlbSB0byBiZSBpbml0aWFsaXpp
bmcgYSBtZW1iZXIgdmFyaWFibGUgd2l0aCBpdHNlbGYuJykKLQotICAgIGlmIGZpbGVfZXh0ZW5z
aW9uID09ICdoJzoKLSAgICAgICAgIyBGSVhNRTogY2hlY2sgdGhhdCAxLWFyZyBjb25zdHJ1Y3Rv
cnMgYXJlIGV4cGxpY2l0LgotICAgICAgICAjICAgICAgICBIb3cgdG8gdGVsbCBpdCdzIGEgY29u
c3RydWN0b3I/Ci0gICAgICAgICMgICAgICAgIChoYW5kbGVkIGluIGNoZWNrX2Zvcl9ub25fc3Rh
bmRhcmRfY29uc3RydWN0cyBmb3Igbm93KQotICAgICAgICBwYXNzCi0KLSAgICAjIENoZWNrIGlm
IHBlb3BsZSBhcmUgdXNpbmcgdGhlIHZlcmJvdGVuIEMgYmFzaWMgdHlwZXMuICBUaGUgb25seSBl
eGNlcHRpb24KLSAgICAjIHdlIHJlZ3VsYXJseSBhbGxvdyBpcyAidW5zaWduZWQgc2hvcnQgcG9y
dCIgZm9yIHBvcnQuCi0gICAgaWYgc2VhcmNoKHInXGJzaG9ydCBwb3J0XGInLCBsaW5lKToKLSAg
ICAgICAgaWYgbm90IHNlYXJjaChyJ1xidW5zaWduZWQgc2hvcnQgcG9ydFxiJywgbGluZSk6Ci0g
ICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdydW50aW1lL2ludCcsIDQs
Ci0gICAgICAgICAgICAgICAgICAnVXNlICJ1bnNpZ25lZCBzaG9ydCIgZm9yIHBvcnRzLCBub3Qg
InNob3J0IicpCi0KLSAgICAjIFdoZW4gc25wcmludGYgaXMgdXNlZCwgdGhlIHNlY29uZCBhcmd1
bWVudCBzaG91bGRuJ3QgYmUgYSBsaXRlcmFsLgotICAgIG1hdGNoZWQgPSBzZWFyY2gocidzbnBy
aW50ZlxzKlwoKFteLF0qKSxccyooWzAtOV0qKVxzKiwnLCBsaW5lKQotICAgIGlmIG1hdGNoZWQ6
Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3J1bnRpbWUvcHJpbnRmJywg
MywKLSAgICAgICAgICAgICAgJ0lmIHlvdSBjYW4sIHVzZSBzaXplb2YoJXMpIGluc3RlYWQgb2Yg
JXMgYXMgdGhlIDJuZCBhcmcgJwotICAgICAgICAgICAgICAndG8gc25wcmludGYuJyAlIChtYXRj
aGVkLmdyb3VwKDEpLCBtYXRjaGVkLmdyb3VwKDIpKSkKLQotICAgICMgQ2hlY2sgaWYgc29tZSB2
ZXJib3RlbiBDIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZC4KLSAgICBpZiBzZWFyY2gocidcYnNw
cmludGZcYicsIGxpbmUpOgotICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdy
dW50aW1lL3ByaW50ZicsIDUsCi0gICAgICAgICAgICAgICdOZXZlciB1c2Ugc3ByaW50Zi4gIFVz
ZSBzbnByaW50ZiBpbnN0ZWFkLicpCi0gICAgbWF0Y2hlZCA9IHNlYXJjaChyJ1xiKHN0cmNweXxz
dHJjYXQpXGInLCBsaW5lKQotICAgIGlmIG1hdGNoZWQ6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1l
LCBsaW5lX251bWJlciwgJ3J1bnRpbWUvcHJpbnRmJywgNCwKLSAgICAgICAgICAgICAgJ0FsbW9z
dCBhbHdheXMsIHNucHJpbnRmIGlzIGJldHRlciB0aGFuICVzJyAlIG1hdGNoZWQuZ3JvdXAoMSkp
Ci0KLSAgICBpZiBzZWFyY2gocidcYnNzY2FuZlxiJywgbGluZSk6Ci0gICAgICAgIGVycm9yKGZp
bGVuYW1lLCBsaW5lX251bWJlciwgJ3J1bnRpbWUvcHJpbnRmJywgMSwKLSAgICAgICAgICAgICAg
J3NzY2FuZiBjYW4gYmUgb2ssIGJ1dCBpcyBzbG93IGFuZCBjYW4gb3ZlcmZsb3cgYnVmZmVycy4n
KQotCi0gICAgIyBDaGVjayBmb3Igc3VzcGljaW91cyB1c2FnZSBvZiAiaWYiIGxpa2UKLSAgICAj
IH0gaWYgKGEgPT0gYikgewotICAgIGlmIHNlYXJjaChyJ1x9XHMqaWZccypcKCcsIGxpbmUpOgot
ICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdyZWFkYWJpbGl0eS9icmFjZXMn
LCA0LAotICAgICAgICAgICAgICAnRGlkIHlvdSBtZWFuICJlbHNlIGlmIj8gSWYgbm90LCBzdGFy
dCBhIG5ldyBsaW5lIGZvciAiaWYiLicpCi0KLSAgICAjIENoZWNrIGZvciBwb3RlbnRpYWwgZm9y
bWF0IHN0cmluZyBidWdzIGxpa2UgcHJpbnRmKGZvbykuCi0gICAgIyBXZSBjb25zdHJhaW4gdGhl
IHBhdHRlcm4gbm90IHRvIHBpY2sgdGhpbmdzIGxpa2UgRG9jaWRGb3JQcmludGYoZm9vKS4KLSAg
ICAjIE5vdCBwZXJmZWN0IGJ1dCBpdCBjYW4gY2F0Y2ggcHJpbnRmKGZvby5jX3N0cigpKSBhbmQg
cHJpbnRmKGZvby0+Y19zdHIoKSkKLSAgICBtYXRjaGVkID0gcmUuc2VhcmNoKHInXGIoKD86c3Ry
aW5nKT9wcmludGYpXHMqXCgoW1x3LlwtPigpXSspXCknLCBsaW5lLCByZS5JKQotICAgIGlmIG1h
dGNoZWQ6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3J1bnRpbWUvcHJp
bnRmJywgNCwKLSAgICAgICAgICAgICAgJ1BvdGVudGlhbCBmb3JtYXQgc3RyaW5nIGJ1Zy4gRG8g
JXMoIiUlcyIsICVzKSBpbnN0ZWFkLicKLSAgICAgICAgICAgICAgJSAobWF0Y2hlZC5ncm91cCgx
KSwgbWF0Y2hlZC5ncm91cCgyKSkpCi0KLSAgICAjIENoZWNrIGZvciBwb3RlbnRpYWwgbWVtc2V0
IGJ1Z3MgbGlrZSBtZW1zZXQoYnVmLCBzaXplb2YoYnVmKSwgMCkuCi0gICAgbWF0Y2hlZCA9IHNl
YXJjaChyJ21lbXNldFxzKlwoKFteLF0qKSxccyooW14sXSopLFxzKjBccypcKScsIGxpbmUpCi0g
ICAgaWYgbWF0Y2hlZCBhbmQgbm90IG1hdGNoKHIiXicnfC0/WzAtOV0rfDB4WzAtOUEtRmEtZl0k
IiwgbWF0Y2hlZC5ncm91cCgyKSk6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJl
ciwgJ3J1bnRpbWUvbWVtc2V0JywgNCwKLSAgICAgICAgICAgICAgJ0RpZCB5b3UgbWVhbiAibWVt
c2V0KCVzLCAwLCAlcykiPycKLSAgICAgICAgICAgICAgJSAobWF0Y2hlZC5ncm91cCgxKSwgbWF0
Y2hlZC5ncm91cCgyKSkpCi0KLSAgICAjIERldGVjdCB2YXJpYWJsZS1sZW5ndGggYXJyYXlzLgot
ICAgIG1hdGNoZWQgPSBtYXRjaChyJ1xzKiguKzo6KT8oXHcrKSBbYS16XVx3KlxbKC4rKV07Jywg
bGluZSkKLSAgICBpZiAobWF0Y2hlZCBhbmQgbWF0Y2hlZC5ncm91cCgyKSAhPSAncmV0dXJuJyBh
bmQgbWF0Y2hlZC5ncm91cCgyKSAhPSAnZGVsZXRlJyBhbmQKLSAgICAgICAgbWF0Y2hlZC5ncm91
cCgzKS5maW5kKCddJykgPT0gLTEpOgotICAgICAgICAjIFNwbGl0IHRoZSBzaXplIHVzaW5nIHNw
YWNlIGFuZCBhcml0aG1ldGljIG9wZXJhdG9ycyBhcyBkZWxpbWl0ZXJzLgotICAgICAgICAjIElm
IGFueSBvZiB0aGUgcmVzdWx0aW5nIHRva2VucyBhcmUgbm90IGNvbXBpbGUgdGltZSBjb25zdGFu
dHMgdGhlbgotICAgICAgICAjIHJlcG9ydCB0aGUgZXJyb3IuCi0gICAgICAgIHRva2VucyA9IHJl
LnNwbGl0KHInXHN8XCt8XC18XCp8XC98PDx8Pj5dJywgbWF0Y2hlZC5ncm91cCgzKSkKLSAgICAg
ICAgaXNfY29uc3QgPSBUcnVlCi0gICAgICAgIHNraXBfbmV4dCA9IEZhbHNlCi0gICAgICAgIGZv
ciB0b2sgaW4gdG9rZW5zOgotICAgICAgICAgICAgaWYgc2tpcF9uZXh0OgotICAgICAgICAgICAg
ICAgIHNraXBfbmV4dCA9IEZhbHNlCi0gICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAg
ICAgICAgaWYgc2VhcmNoKHInc2l6ZW9mXCguK1wpJywgdG9rKToKLSAgICAgICAgICAgICAgICBj
b250aW51ZQotICAgICAgICAgICAgaWYgc2VhcmNoKHInYXJyYXlzaXplXChcdytcKScsIHRvayk6
Ci0gICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAgdG9rID0gdG9rLmxzdHJp
cCgnKCcpCi0gICAgICAgICAgICB0b2sgPSB0b2sucnN0cmlwKCcpJykKLSAgICAgICAgICAgIGlm
IG5vdCB0b2s6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIG1hdGNo
KHInXGQrJywgdG9rKToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYg
bWF0Y2gocicwW3hYXVswLTlhLWZBLUZdKycsIHRvayk6Ci0gICAgICAgICAgICAgICAgY29udGlu
dWUKLSAgICAgICAgICAgIGlmIG1hdGNoKHIna1tBLVowLTldXHcqJywgdG9rKToKLSAgICAgICAg
ICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgbWF0Y2gocicoLis6Oik/a1tBLVowLTld
XHcqJywgdG9rKToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgbWF0
Y2gocicoLis6Oik/W0EtWl1bQS1aMC05X10qJywgdG9rKToKLSAgICAgICAgICAgICAgICBjb250
aW51ZQotICAgICAgICAgICAgIyBBIGNhdGNoIGFsbCBmb3IgdHJpY2t5IHNpemVvZiBjYXNlcywg
aW5jbHVkaW5nICdzaXplb2YgZXhwcmVzc2lvbicsCi0gICAgICAgICAgICAjICdzaXplb2YoKnR5
cGUpJywgJ3NpemVvZihjb25zdCB0eXBlKScsICdzaXplb2Yoc3RydWN0IFN0cnVjdE5hbWUpJwot
ICAgICAgICAgICAgIyByZXF1aXJlcyBza2lwcGluZyB0aGUgbmV4dCB0b2tlbiBiZWNhc3VlIHdl
IHNwbGl0IG9uICcgJyBhbmQgJyonLgotICAgICAgICAgICAgaWYgdG9rLnN0YXJ0c3dpdGgoJ3Np
emVvZicpOgotICAgICAgICAgICAgICAgIHNraXBfbmV4dCA9IFRydWUKLSAgICAgICAgICAgICAg
ICBjb250aW51ZQotICAgICAgICAgICAgaXNfY29uc3QgPSBGYWxzZQotICAgICAgICAgICAgYnJl
YWsKLSAgICAgICAgaWYgbm90IGlzX2NvbnN0OgotICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUs
IGxpbmVfbnVtYmVyLCAncnVudGltZS9hcnJheXMnLCAxLAotICAgICAgICAgICAgICAgICAgJ0Rv
IG5vdCB1c2UgdmFyaWFibGUtbGVuZ3RoIGFycmF5cy4gIFVzZSBhbiBhcHByb3ByaWF0ZWx5IG5h
bWVkICcKLSAgICAgICAgICAgICAgICAgICIoJ2snIGZvbGxvd2VkIGJ5IENhbWVsQ2FzZSkgY29t
cGlsZS10aW1lIGNvbnN0YW50IGZvciB0aGUgc2l6ZS4iKQotCi0gICAgIyBDaGVjayBmb3IgdXNl
IG9mIHVubmFtZWQgbmFtZXNwYWNlcyBpbiBoZWFkZXIgZmlsZXMuICBSZWdpc3RyYXRpb24KLSAg
ICAjIG1hY3JvcyBhcmUgdHlwaWNhbGx5IE9LLCBzbyB3ZSBhbGxvdyB1c2Ugb2YgIm5hbWVzcGFj
ZSB7IiBvbiBsaW5lcwotICAgICMgdGhhdCBlbmQgd2l0aCBiYWNrc2xhc2hlcy4KLSAgICBpZiAo
ZmlsZV9leHRlbnNpb24gPT0gJ2gnCi0gICAgICAgIGFuZCBzZWFyY2gocidcYm5hbWVzcGFjZVxz
KnsnLCBsaW5lKQotICAgICAgICBhbmQgbGluZVstMV0gIT0gJ1xcJyk6Ci0gICAgICAgIGVycm9y
KGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ2J1aWxkL25hbWVzcGFjZXMnLCA0LAotICAgICAgICAg
ICAgICAnRG8gbm90IHVzZSB1bm5hbWVkIG5hbWVzcGFjZXMgaW4gaGVhZGVyIGZpbGVzLiAgU2Vl
ICcKLSAgICAgICAgICAgICAgJ2h0dHA6Ly9nb29nbGUtc3R5bGVndWlkZS5nb29nbGVjb2RlLmNv
bS9zdm4vdHJ1bmsvY3BwZ3VpZGUueG1sI05hbWVzcGFjZXMnCi0gICAgICAgICAgICAgICcgZm9y
IG1vcmUgaW5mb3JtYXRpb24uJykKLQotICAgIGNoZWNrX2lkZW50aWZpZXJfbmFtZV9pbl9kZWNs
YXJhdGlvbihmaWxlbmFtZSwgbGluZV9udW1iZXIsIGxpbmUsIGVycm9yKQotCi0KLWRlZiBjaGVj
a19pZGVudGlmaWVyX25hbWVfaW5fZGVjbGFyYXRpb24oZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCBs
aW5lLCBlcnJvcik6Ci0gICAgIiIiQ2hlY2tzIGlmIGlkZW50aWZpZXIgbmFtZXMgY29udGFpbiBh
bnkgdW5kZXJzY29yZXMuCi0KLSAgICBBcyBpZGVudGlmaWVycyBpbiBsaWJyYXJpZXMgd2UgYXJl
IHVzaW5nIGhhdmUgYSBidW5jaCBvZgotICAgIHVuZGVyc2NvcmVzLCB3ZSBvbmx5IHdhcm4gYWJv
dXQgdGhlIGRlY2xhcmF0aW9ucyBvZiBpZGVudGlmaWVycwotICAgIGFuZCBkb24ndCBjaGVjayB1
c2Ugb2YgaWRlbnRpZmllcnMuCi0KLSAgICBBcmdzOgotICAgICAgZmlsZW5hbWU6IFRoZSBuYW1l
IG9mIHRoZSBjdXJyZW50IGZpbGUuCi0gICAgICBsaW5lX251bWJlcjogVGhlIG51bWJlciBvZiB0
aGUgbGluZSB0byBjaGVjay4KLSAgICAgIGxpbmU6IFRoZSBsaW5lIG9mIGNvZGUgdG8gY2hlY2su
Ci0gICAgICBlcnJvcjogVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBhbnkgZXJyb3JzIGZvdW5k
LgotICAgICIiIgotICAgICMgV2UgZG9uJ3QgY2hlY2sgYSByZXR1cm4gc3RhdGVtZW50LgotICAg
IGlmIG1hdGNoKHInXHMqKHJldHVybnxkZWxldGUpXGInLCBsaW5lKToKLSAgICAgICAgcmV0dXJu
Ci0KLSAgICAjIEJhc2ljYWxseSwgYSBkZWNsYXJhdGlvbiBpcyBhIHR5cGUgbmFtZSBmb2xsb3dl
ZCBieSB3aGl0ZXNwYWNlcwotICAgICMgZm9sbG93ZWQgYnkgYW4gaWRlbnRpZmllci4gVGhlIHR5
cGUgbmFtZSBjYW4gYmUgY29tcGxpY2F0ZWQKLSAgICAjIGR1ZSB0byB0eXBlIGFkamVjdGl2ZXMg
YW5kIHRlbXBsYXRlcy4gV2UgcmVtb3ZlIHRoZW0gZmlyc3QgdG8KLSAgICAjIHNpbXBsaWZ5IHRo
ZSBwcm9jZXNzIHRvIGZpbmQgZGVjbGFyYXRpb25zIG9mIGlkZW50aWZpZXJzLgotCi0gICAgIyBD
b252ZXJ0ICJsb25nIGxvbmciLCAibG9uZyBkb3VibGUiLCBhbmQgImxvbmcgbG9uZyBpbnQiIHRv
Ci0gICAgIyBzaW1wbGUgdHlwZXMsIGJ1dCBkb24ndCByZW1vdmUgc2ltcGxlICJsb25nIi4KLSAg
ICBsaW5lID0gc3ViKHInbG9uZyAobG9uZyApPyg/PWxvbmd8ZG91YmxlfGludCknLCAnJywgbGlu
ZSkKLSAgICBsaW5lID0gc3ViKHInXGIodW5zaWduZWR8c2lnbmVkfGlubGluZXx1c2luZ3xzdGF0
aWN8Y29uc3R8dm9sYXRpbGV8YXV0b3xyZWdpc3RlcnxleHRlcm58dHlwZWRlZnxyZXN0cmljdHxz
dHJ1Y3R8Y2xhc3N8dmlydHVhbCkoPz1cVyknLCAnJywgbGluZSkKLQotICAgICMgUmVtb3ZlIGFs
bCB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIGJ5IHJlbW92aW5nIG1hdGNoaW5nIDwgYW5kID4uCi0gICAg
IyBMb29wIHVudGlsIG5vIHRlbXBsYXRlcyBhcmUgcmVtb3ZlZCB0byByZW1vdmUgbmVzdGVkIHRl
bXBsYXRlcy4KLSAgICB3aGlsZSBUcnVlOgotICAgICAgICBsaW5lLCBudW1iZXJfb2ZfcmVwbGFj
ZW1lbnRzID0gc3VibihyJzwoW1x3XHM6XXw6OikrXHMqWyomXSpccyo+JywgJycsIGxpbmUpCi0g
ICAgICAgIGlmIG5vdCBudW1iZXJfb2ZfcmVwbGFjZW1lbnRzOgotICAgICAgICAgICAgYnJlYWsK
LQotICAgICMgRGVjbGFyYXRpb25zIG9mIGxvY2FsIHZhcmlhYmxlcyBjYW4gYmUgaW4gY29uZGl0
aW9uIGV4cHJlc3Npb25zCi0gICAgIyBvZiBjb250cm9sIGZsb3cgc3RhdGVtZW50cyAoZS5nLiwg
ImlmIChSZW5kZXJPYmplY3QqIHAgPSBvLT5wYXJlbnQoKSkiKS4KLSAgICAjIFdlIHJlbW92ZSB0
aGUga2V5d29yZHMgYW5kIHRoZSBmaXJzdCBwYXJlbnRoZXNpcy4KLSAgICAjCi0gICAgIyBEZWNs
YXJhdGlvbnMgaW4gIndoaWxlIiwgImlmIiwgYW5kICJzd2l0Y2giIGFyZSBkaWZmZXJlbnQgZnJv
bQotICAgICMgb3RoZXIgZGVjbGFyYXRpb25zIGluIHR3byBhc3BlY3RzOgotICAgICMKLSAgICAj
IC0gVGhlcmUgY2FuIGJlIG9ubHkgb25lIGRlY2xhcmF0aW9uIGJldHdlZW4gdGhlIHBhcmVudGhl
c2VzLgotICAgICMgICAoaS5lLiwgeW91IGNhbm5vdCB3cml0ZSAiaWYgKGludCBpID0gMCwgaiA9
IDEpIHt9IikKLSAgICAjIC0gVGhlIHZhcmlhYmxlIG11c3QgYmUgaW5pdGlhbGl6ZWQuCi0gICAg
IyAgIChpLmUuLCB5b3UgY2Fubm90IHdyaXRlICJpZiAoaW50IGkpIHt9IikKLSAgICAjCi0gICAg
IyBhbmQgd2Ugd2lsbCBuZWVkIGRpZmZlcmVudCB0cmVhdG1lbnRzIGZvciB0aGVtLgotICAgIGxp
bmUgPSBzdWIocideXHMqZm9yXHMqXCgnLCAnJywgbGluZSkKLSAgICBsaW5lLCBjb250cm9sX3N0
YXRlbWVudCA9IHN1Ym4ocideXHMqKHdoaWxlfGVsc2UgaWZ8aWZ8c3dpdGNoKVxzKlwoJywgJycs
IGxpbmUpCi0KLSAgICAjIERldGVjdCB2YXJpYWJsZSBhbmQgZnVuY3Rpb25zLgotICAgIHR5cGVf
cmVnZXhwID0gcidcdyhbXHddfFxzKlsqJl1ccyp8OjopKycKLSAgICBpZGVudGlmaWVyX3JlZ2V4
cCA9IHInKD9QPGlkZW50aWZpZXI+W1x3Ol0rKScKLSAgICBjaGFyYWN0ZXJfYWZ0ZXJfaWRlbnRp
Zmllcl9yZWdleHAgPSByJyg/UDxjaGFyYWN0ZXJfYWZ0ZXJfaWRlbnRpZmllcj5bWzsoKT0sXSko
PyE9KScKLSAgICBkZWNsYXJhdGlvbl93aXRob3V0X3R5cGVfcmVnZXhwID0gcidccyonICsgaWRl
bnRpZmllcl9yZWdleHAgKyByJ1xzKicgKyBjaGFyYWN0ZXJfYWZ0ZXJfaWRlbnRpZmllcl9yZWdl
eHAKLSAgICBkZWNsYXJhdGlvbl93aXRoX3R5cGVfcmVnZXhwID0gcidccyonICsgdHlwZV9yZWdl
eHAgKyByJ1xzJyArIGRlY2xhcmF0aW9uX3dpdGhvdXRfdHlwZV9yZWdleHAKLSAgICBpc19mdW5j
dGlvbl9hcmd1bWVudHMgPSBGYWxzZQotICAgIG51bWJlcl9vZl9pZGVudGlmaWVycyA9IDAKLSAg
ICB3aGlsZSBUcnVlOgotICAgICAgICAjIElmIHdlIGFyZSBzZWVpbmcgdGhlIGZpcnN0IGlkZW50
aWZpZXIgb3IgYXJndW1lbnRzIG9mIGEKLSAgICAgICAgIyBmdW5jdGlvbiwgdGhlcmUgc2hvdWxk
IGJlIGEgdHlwZSBuYW1lIGJlZm9yZSBhbiBpZGVudGlmaWVyLgotICAgICAgICBpZiBub3QgbnVt
YmVyX29mX2lkZW50aWZpZXJzIG9yIGlzX2Z1bmN0aW9uX2FyZ3VtZW50czoKLSAgICAgICAgICAg
IGRlY2xhcmF0aW9uX3JlZ2V4cCA9IGRlY2xhcmF0aW9uX3dpdGhfdHlwZV9yZWdleHAKLSAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgIGRlY2xhcmF0aW9uX3JlZ2V4cCA9IGRlY2xhcmF0aW9uX3dp
dGhvdXRfdHlwZV9yZWdleHAKLQotICAgICAgICBtYXRjaGVkID0gbWF0Y2goZGVjbGFyYXRpb25f
cmVnZXhwLCBsaW5lKQotICAgICAgICBpZiBub3QgbWF0Y2hlZDoKLSAgICAgICAgICAgIHJldHVy
bgotICAgICAgICBpZGVudGlmaWVyID0gbWF0Y2hlZC5ncm91cCgnaWRlbnRpZmllcicpCi0gICAg
ICAgIGNoYXJhY3Rlcl9hZnRlcl9pZGVudGlmaWVyID0gbWF0Y2hlZC5ncm91cCgnY2hhcmFjdGVy
X2FmdGVyX2lkZW50aWZpZXInKQotCi0gICAgICAgICMgSWYgd2UgcmVtb3ZlZCBhIG5vbi1mb3It
Y29udHJvbCBzdGF0ZW1lbnQsIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIKLSAgICAgICAgIyB0aGUgaWRl
bnRpZmllciBzaG91bGQgYmUgJz0nLiBXaXRoIHRoaXMgcnVsZSwgd2UgY2FuIGF2b2lkCi0gICAg
ICAgICMgd2FybmluZyBmb3IgY2FzZXMgbGlrZSAiaWYgKHZhbCAmIElOVF9NQVgpIHsiLgotICAg
ICAgICBpZiBjb250cm9sX3N0YXRlbWVudCBhbmQgY2hhcmFjdGVyX2FmdGVyX2lkZW50aWZpZXIg
IT0gJz0nOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgaXNfZnVuY3Rpb25fYXJndW1l
bnRzID0gaXNfZnVuY3Rpb25fYXJndW1lbnRzIG9yIGNoYXJhY3Rlcl9hZnRlcl9pZGVudGlmaWVy
ID09ICcoJwotCi0gICAgICAgICMgUmVtb3ZlICJtXyIgYW5kICJzXyIgdG8gYWxsb3cgdGhlbS4K
LSAgICAgICAgbW9kaWZpZWRfaWRlbnRpZmllciA9IHN1YihyJyhefCg/PD06OikpW21zXV8nLCAn
JywgaWRlbnRpZmllcikKLSAgICAgICAgaWYgbW9kaWZpZWRfaWRlbnRpZmllci5maW5kKCdfJykg
Pj0gMDoKLSAgICAgICAgICAgICMgVmFyaW91cyBleGNlcHRpb25zIHRvIHRoZSBydWxlOiBKYXZh
U2NyaXB0IG9wIGNvZGVzIGZ1bmN0aW9ucywgY29uc3RfaXRlcmF0b3IuCi0gICAgICAgICAgICBp
ZiAobm90IChmaWxlbmFtZS5maW5kKCdKYXZhU2NyaXB0Q29yZScpID49IDAgYW5kIG1vZGlmaWVk
X2lkZW50aWZpZXIuZmluZCgnX29wXycpID49IDApCi0gICAgICAgICAgICAgICAgYW5kIG5vdCBt
b2RpZmllZF9pZGVudGlmaWVyLnN0YXJ0c3dpdGgoJ3RzdF8nKQotICAgICAgICAgICAgICAgIGFu
ZCBub3QgbW9kaWZpZWRfaWRlbnRpZmllciA9PSAiY29uc3RfaXRlcmF0b3IiKToKLSAgICAgICAg
ICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdyZWFkYWJpbGl0eS9uYW1pbmcn
LCA0LCBpZGVudGlmaWVyICsgIiBpcyBpbmNvcnJlY3RseSBuYW1lZC4gRG9uJ3QgdXNlIHVuZGVy
c2NvcmVzIGluIHlvdXIgaWRlbnRpZmllciBuYW1lcy4iKQotCi0gICAgICAgICMgVGhlcmUgY2Fu
IGJlIG9ubHkgb25lIGRlY2xhcmF0aW9uIGluIG5vbi1mb3ItY29udHJvbCBzdGF0ZW1lbnRzLgot
ICAgICAgICBpZiBjb250cm9sX3N0YXRlbWVudDoKLSAgICAgICAgICAgIHJldHVybgotICAgICAg
ICAjIFdlIHNob3VsZCBjb250aW51ZSBjaGVja2luZyBpZiB0aGlzIGlzIGEgZnVuY3Rpb24KLSAg
ICAgICAgIyBkZWNsYXJhdGlvbiBiZWNhdXNlIHdlIG5lZWQgdG8gY2hlY2sgaXRzIGFyZ3VtZW50
cy4KLSAgICAgICAgIyBBbHNvLCB3ZSBuZWVkIHRvIGNoZWNrIG11bHRpcGxlIGRlY2xhcmF0aW9u
cy4KLSAgICAgICAgaWYgY2hhcmFjdGVyX2FmdGVyX2lkZW50aWZpZXIgIT0gJygnIGFuZCBjaGFy
YWN0ZXJfYWZ0ZXJfaWRlbnRpZmllciAhPSAnLCc6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAg
ICAgICBudW1iZXJfb2ZfaWRlbnRpZmllcnMgKz0gMQotICAgICAgICBsaW5lID0gbGluZVttYXRj
aGVkLmVuZCgpOl0KLQotCi1kZWYgY2hlY2tfY19zdHlsZV9jYXN0KGZpbGVuYW1lLCBsaW5lX251
bWJlciwgbGluZSwgcmF3X2xpbmUsIGNhc3RfdHlwZSwgcGF0dGVybiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgZXJyb3IpOgotICAgICIiIkNoZWNrcyBmb3IgYSBDLXN0eWxlIGNhc3QgYnkgbG9v
a2luZyBmb3IgdGhlIHBhdHRlcm4uCi0KLSAgICBUaGlzIGFsc28gaGFuZGxlcyBzaXplb2YodHlw
ZSkgd2FybmluZ3MsIGR1ZSB0byBzaW1pbGFyaXR5IG9mIGNvbnRlbnQuCi0KLSAgICBBcmdzOgot
ICAgICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuCi0gICAgICBsaW5l
X251bWJlcjogVGhlIG51bWJlciBvZiB0aGUgbGluZSB0byBjaGVjay4KLSAgICAgIGxpbmU6IFRo
ZSBsaW5lIG9mIGNvZGUgdG8gY2hlY2suCi0gICAgICByYXdfbGluZTogVGhlIHJhdyBsaW5lIG9m
IGNvZGUgdG8gY2hlY2ssIHdpdGggY29tbWVudHMuCi0gICAgICBjYXN0X3R5cGU6IFRoZSBzdHJp
bmcgZm9yIHRoZSBDKysgY2FzdCB0byByZWNvbW1lbmQuICBUaGlzIGlzIGVpdGhlcgotICAgICAg
ICAgICAgICAgICByZWludGVycHJldF9jYXN0IG9yIHN0YXRpY19jYXN0LCBkZXBlbmRpbmcuCi0g
ICAgICBwYXR0ZXJuOiBUaGUgcmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gZmluZCBDLXN0eWxl
IGNhc3RzLgotICAgICAgZXJyb3I6IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9y
cyBmb3VuZC4KLSAgICAiIiIKLSAgICBtYXRjaGVkID0gc2VhcmNoKHBhdHRlcm4sIGxpbmUpCi0g
ICAgaWYgbm90IG1hdGNoZWQ6Ci0gICAgICAgIHJldHVybgotCi0gICAgIyBlLmcuLCBzaXplb2Yo
aW50KQotICAgIHNpemVvZl9tYXRjaCA9IG1hdGNoKHInLipzaXplb2ZccyokJywgbGluZVswOm1h
dGNoZWQuc3RhcnQoMSkgLSAxXSkKLSAgICBpZiBzaXplb2ZfbWF0Y2g6Ci0gICAgICAgIGVycm9y
KGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3J1bnRpbWUvc2l6ZW9mJywgMSwKLSAgICAgICAgICAg
ICAgJ1VzaW5nIHNpemVvZih0eXBlKS4gIFVzZSBzaXplb2YodmFybmFtZSkgaW5zdGVhZCBpZiBw
b3NzaWJsZScpCi0gICAgICAgIHJldHVybgotCi0gICAgcmVtYWluZGVyID0gbGluZVttYXRjaGVk
LmVuZCgwKTpdCi0KLSAgICAjIFRoZSBjbG9zZSBwYXJlbiBpcyBmb3IgZnVuY3Rpb24gcG9pbnRl
cnMgYXMgYXJndW1lbnRzIHRvIGEgZnVuY3Rpb24uCi0gICAgIyBlZywgdm9pZCBmb28odm9pZCAo
KmJhcikoaW50KSk7Ci0gICAgIyBUaGUgc2VtaWNvbG9uIGNoZWNrIGlzIGEgbW9yZSBiYXNpYyBm
dW5jdGlvbiBjaGVjazsgYWxzbyBwb3NzaWJseSBhCi0gICAgIyBmdW5jdGlvbiBwb2ludGVyIHR5
cGVkZWYuCi0gICAgIyBlZywgdm9pZCBmb28oaW50KTsgb3Igdm9pZCBmb28oaW50KSBjb25zdDsK
LSAgICAjIFRoZSBlcXVhbHMgY2hlY2sgaXMgZm9yIGZ1bmN0aW9uIHBvaW50ZXIgYXNzaWdubWVu
dC4KLSAgICAjIGVnLCB2b2lkICooKmZvbykoaW50KSA9IC4uLgotICAgICMKLSAgICAjIFJpZ2h0
IG5vdywgdGhpcyB3aWxsIG9ubHkgY2F0Y2ggY2FzZXMgd2hlcmUgdGhlcmUncyBhIHNpbmdsZSBh
cmd1bWVudCwgYW5kCi0gICAgIyBpdCdzIHVubmFtZWQuICBJdCBzaG91bGQgcHJvYmFibHkgYmUg
ZXhwYW5kZWQgdG8gY2hlY2sgZm9yIG11bHRpcGxlCi0gICAgIyBhcmd1bWVudHMgd2l0aCBzb21l
IHVubmFtZWQuCi0gICAgZnVuY3Rpb25fbWF0Y2ggPSBtYXRjaChyJ1xzKihcKXw9fChjb25zdCk/
XHMqKDt8XHt8dGhyb3dcKFwpKSknLCByZW1haW5kZXIpCi0gICAgaWYgZnVuY3Rpb25fbWF0Y2g6
Ci0gICAgICAgIGlmIChub3QgZnVuY3Rpb25fbWF0Y2guZ3JvdXAoMykKLSAgICAgICAgICAgIG9y
IGZ1bmN0aW9uX21hdGNoLmdyb3VwKDMpID09ICc7JwotICAgICAgICAgICAgb3IgcmF3X2xpbmUu
ZmluZCgnLyonKSA8IDApOgotICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVy
LCAncmVhZGFiaWxpdHkvZnVuY3Rpb24nLCAzLAotICAgICAgICAgICAgICAgICAgJ0FsbCBwYXJh
bWV0ZXJzIHNob3VsZCBiZSBuYW1lZCBpbiBhIGZ1bmN0aW9uJykKLSAgICAgICAgcmV0dXJuCi0K
LSAgICAjIEF0IHRoaXMgcG9pbnQsIGFsbCB0aGF0IHNob3VsZCBiZSBsZWZ0IGlzIGFjdHVhbCBj
YXN0cy4KLSAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdyZWFkYWJpbGl0eS9jYXN0
aW5nJywgNCwKLSAgICAgICAgICAnVXNpbmcgQy1zdHlsZSBjYXN0LiAgVXNlICVzPCVzPiguLi4p
IGluc3RlYWQnICUKLSAgICAgICAgICAoY2FzdF90eXBlLCBtYXRjaGVkLmdyb3VwKDEpKSkKLQot
Ci1fSEVBREVSU19DT05UQUlOSU5HX1RFTVBMQVRFUyA9ICgKLSAgICAoJzxkZXF1ZT4nLCAoJ2Rl
cXVlJywpKSwKLSAgICAoJzxmdW5jdGlvbmFsPicsICgndW5hcnlfZnVuY3Rpb24nLCAnYmluYXJ5
X2Z1bmN0aW9uJywKLSAgICAgICAgICAgICAgICAgICAgICAncGx1cycsICdtaW51cycsICdtdWx0
aXBsaWVzJywgJ2RpdmlkZXMnLCAnbW9kdWx1cycsCi0gICAgICAgICAgICAgICAgICAgICAgJ25l
Z2F0ZScsCi0gICAgICAgICAgICAgICAgICAgICAgJ2VxdWFsX3RvJywgJ25vdF9lcXVhbF90bycs
ICdncmVhdGVyJywgJ2xlc3MnLAotICAgICAgICAgICAgICAgICAgICAgICdncmVhdGVyX2VxdWFs
JywgJ2xlc3NfZXF1YWwnLAotICAgICAgICAgICAgICAgICAgICAgICdsb2dpY2FsX2FuZCcsICds
b2dpY2FsX29yJywgJ2xvZ2ljYWxfbm90JywKLSAgICAgICAgICAgICAgICAgICAgICAndW5hcnlf
bmVnYXRlJywgJ25vdDEnLCAnYmluYXJ5X25lZ2F0ZScsICdub3QyJywKLSAgICAgICAgICAgICAg
ICAgICAgICAnYmluZDFzdCcsICdiaW5kMm5kJywKLSAgICAgICAgICAgICAgICAgICAgICAncG9p
bnRlcl90b191bmFyeV9mdW5jdGlvbicsCi0gICAgICAgICAgICAgICAgICAgICAgJ3BvaW50ZXJf
dG9fYmluYXJ5X2Z1bmN0aW9uJywKLSAgICAgICAgICAgICAgICAgICAgICAncHRyX2Z1bicsCi0g
ICAgICAgICAgICAgICAgICAgICAgJ21lbV9mdW5fdCcsICdtZW1fZnVuJywgJ21lbV9mdW4xX3Qn
LCAnbWVtX2Z1bjFfcmVmX3QnLAotICAgICAgICAgICAgICAgICAgICAgICdtZW1fZnVuX3JlZl90
JywKLSAgICAgICAgICAgICAgICAgICAgICAnY29uc3RfbWVtX2Z1bl90JywgJ2NvbnN0X21lbV9m
dW4xX3QnLAotICAgICAgICAgICAgICAgICAgICAgICdjb25zdF9tZW1fZnVuX3JlZl90JywgJ2Nv
bnN0X21lbV9mdW4xX3JlZl90JywKLSAgICAgICAgICAgICAgICAgICAgICAnbWVtX2Z1bl9yZWYn
LAotICAgICAgICAgICAgICAgICAgICAgKSksCi0gICAgKCc8bGltaXRzPicsICgnbnVtZXJpY19s
aW1pdHMnLCkpLAotICAgICgnPGxpc3Q+JywgKCdsaXN0JywpKSwKLSAgICAoJzxtYXA+JywgKCdt
YXAnLCAnbXVsdGltYXAnLCkpLAotICAgICgnPG1lbW9yeT4nLCAoJ2FsbG9jYXRvcicsKSksCi0g
ICAgKCc8cXVldWU+JywgKCdxdWV1ZScsICdwcmlvcml0eV9xdWV1ZScsKSksCi0gICAgKCc8c2V0
PicsICgnc2V0JywgJ211bHRpc2V0JywpKSwKLSAgICAoJzxzdGFjaz4nLCAoJ3N0YWNrJywpKSwK
LSAgICAoJzxzdHJpbmc+JywgKCdjaGFyX3RyYWl0cycsICdiYXNpY19zdHJpbmcnLCkpLAotICAg
ICgnPHV0aWxpdHk+JywgKCdwYWlyJywpKSwKLSAgICAoJzx2ZWN0b3I+JywgKCd2ZWN0b3InLCkp
LAotCi0gICAgIyBnY2MgZXh0ZW5zaW9ucy4KLSAgICAjIE5vdGU6IHN0ZDo6aGFzaCBpcyB0aGVp
ciBoYXNoLCA6Omhhc2ggaXMgb3VyIGhhc2gKLSAgICAoJzxoYXNoX21hcD4nLCAoJ2hhc2hfbWFw
JywgJ2hhc2hfbXVsdGltYXAnLCkpLAotICAgICgnPGhhc2hfc2V0PicsICgnaGFzaF9zZXQnLCAn
aGFzaF9tdWx0aXNldCcsKSksCi0gICAgKCc8c2xpc3Q+JywgKCdzbGlzdCcsKSksCi0gICAgKQot
Ci1fSEVBREVSU19BQ0NFUFRFRF9CVVRfTk9UX1BST01PVEVEID0gewotICAgICMgV2UgY2FuIHRy
dXN0IHdpdGggcmVhc29uYWJsZSBjb25maWRlbmNlIHRoYXQgbWFwIGdpdmVzIHVzIHBhaXI8Piwg
dG9vLgotICAgICdwYWlyPD4nOiAoJ21hcCcsICdtdWx0aW1hcCcsICdoYXNoX21hcCcsICdoYXNo
X211bHRpbWFwJykKLX0KLQotX1JFX1BBVFRFUk5fU1RSSU5HID0gcmUuY29tcGlsZShyJ1xic3Ry
aW5nXGInKQotCi1fcmVfcGF0dGVybl9hbGdvcml0aG1faGVhZGVyID0gW10KLWZvciBfdGVtcGxh
dGUgaW4gKCdjb3B5JywgJ21heCcsICdtaW4nLCAnbWluX2VsZW1lbnQnLCAnc29ydCcsICdzd2Fw
JywKLSAgICAgICAgICAgICAgICAgICd0cmFuc2Zvcm0nKToKLSAgICAjIE1hdGNoIG1heDx0eXBl
PiguLi4sIC4uLiksIG1heCguLi4sIC4uLiksIGJ1dCBub3QgZm9vLT5tYXgsIGZvby5tYXggb3IK
LSAgICAjIHR5cGU6Om1heCgpLgotICAgIF9yZV9wYXR0ZXJuX2FsZ29yaXRobV9oZWFkZXIuYXBw
ZW5kKAotICAgICAgICAocmUuY29tcGlsZShyJ1tePi5dXGInICsgX3RlbXBsYXRlICsgcicoPC4q
Pz4pP1woW15cKV0nKSwKLSAgICAgICAgIF90ZW1wbGF0ZSwKLSAgICAgICAgICc8YWxnb3JpdGht
PicpKQotCi1fcmVfcGF0dGVybl90ZW1wbGF0ZXMgPSBbXQotZm9yIF9oZWFkZXIsIF90ZW1wbGF0
ZXMgaW4gX0hFQURFUlNfQ09OVEFJTklOR19URU1QTEFURVM6Ci0gICAgZm9yIF90ZW1wbGF0ZSBp
biBfdGVtcGxhdGVzOgotICAgICAgICBfcmVfcGF0dGVybl90ZW1wbGF0ZXMuYXBwZW5kKAotICAg
ICAgICAgICAgKHJlLmNvbXBpbGUocicoXDx8XGIpJyArIF90ZW1wbGF0ZSArIHInXHMqXDwnKSwK
LSAgICAgICAgICAgICBfdGVtcGxhdGUgKyAnPD4nLAotICAgICAgICAgICAgIF9oZWFkZXIpKQot
Ci0KLWRlZiBmaWxlc19iZWxvbmdfdG9fc2FtZV9tb2R1bGUoZmlsZW5hbWVfY3BwLCBmaWxlbmFt
ZV9oKToKLSAgICAiIiJDaGVjayBpZiB0aGVzZSB0d28gZmlsZW5hbWVzIGJlbG9uZyB0byB0aGUg
c2FtZSBtb2R1bGUuCi0KLSAgICBUaGUgY29uY2VwdCBvZiBhICdtb2R1bGUnIGhlcmUgaXMgYSBh
cyBmb2xsb3dzOgotICAgIGZvby5oLCBmb28taW5sLmgsIGZvby5jcHAsIGZvb190ZXN0LmNwcCBh
bmQgZm9vX3VuaXR0ZXN0LmNwcCBiZWxvbmcgdG8gdGhlCi0gICAgc2FtZSAnbW9kdWxlJyBpZiB0
aGV5IGFyZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCi0gICAgc29tZS9wYXRoL3B1YmxpYy94eXp6
eSBhbmQgc29tZS9wYXRoL2ludGVybmFsL3h5enp5IGFyZSBhbHNvIGNvbnNpZGVyZWQKLSAgICB0
byBiZWxvbmcgdG8gdGhlIHNhbWUgbW9kdWxlIGhlcmUuCi0KLSAgICBJZiB0aGUgZmlsZW5hbWVf
Y3BwIGNvbnRhaW5zIGEgbG9uZ2VyIHBhdGggdGhhbiB0aGUgZmlsZW5hbWVfaCwgZm9yIGV4YW1w
bGUsCi0gICAgJy9hYnNvbHV0ZS9wYXRoL3RvL2Jhc2Uvc3lzaW5mby5jcHAnLCBhbmQgdGhpcyBm
aWxlIHdvdWxkIGluY2x1ZGUKLSAgICAnYmFzZS9zeXNpbmZvLmgnLCB0aGlzIGZ1bmN0aW9uIGFs
c28gcHJvZHVjZXMgdGhlIHByZWZpeCBuZWVkZWQgdG8gb3BlbiB0aGUKLSAgICBoZWFkZXIuIFRo
aXMgaXMgdXNlZCBieSB0aGUgY2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gdG8gbW9yZSByb2J1c3Rs
eSBvcGVuIHRoZQotICAgIGhlYWRlciBmaWxlLiBXZSBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGUg
cmVhbCBpbmNsdWRlIHBhdGhzIGluIHRoaXMgY29udGV4dCwKLSAgICBzbyB3ZSBuZWVkIHRoaXMg
Z3Vlc3N3b3JrIGhlcmUuCi0KLSAgICBLbm93biBidWdzOiB0b29scy9iYXNlL2Jhci5jcHAgYW5k
IGJhc2UvYmFyLmggYmVsb25nIHRvIHRoZSBzYW1lIG1vZHVsZQotICAgIGFjY29yZGluZyB0byB0
aGlzIGltcGxlbWVudGF0aW9uLiBCZWNhdXNlIG9mIHRoaXMsIHRoaXMgZnVuY3Rpb24gZ2l2ZXMK
LSAgICBzb21lIGZhbHNlIHBvc2l0aXZlcy4gVGhpcyBzaG91bGQgYmUgc3VmZmljaWVudGx5IHJh
cmUgaW4gcHJhY3RpY2UuCi0KLSAgICBBcmdzOgotICAgICAgZmlsZW5hbWVfY3BwOiBpcyB0aGUg
cGF0aCBmb3IgdGhlIC5jcHAgZmlsZQotICAgICAgZmlsZW5hbWVfaDogaXMgdGhlIHBhdGggZm9y
IHRoZSBoZWFkZXIgcGF0aAotCi0gICAgUmV0dXJuczoKLSAgICAgIFR1cGxlIHdpdGggYSBib29s
IGFuZCBhIHN0cmluZzoKLSAgICAgIGJvb2w6IFRydWUgaWYgZmlsZW5hbWVfY3BwIGFuZCBmaWxl
bmFtZV9oIGJlbG9uZyB0byB0aGUgc2FtZSBtb2R1bGUuCi0gICAgICBzdHJpbmc6IHRoZSBhZGRp
dGlvbmFsIHByZWZpeCBuZWVkZWQgdG8gb3BlbiB0aGUgaGVhZGVyIGZpbGUuCi0gICAgIiIiCi0K
LSAgICBpZiBub3QgZmlsZW5hbWVfY3BwLmVuZHN3aXRoKCcuY3BwJyk6Ci0gICAgICAgIHJldHVy
biAoRmFsc2UsICcnKQotICAgIGZpbGVuYW1lX2NwcCA9IGZpbGVuYW1lX2NwcFs6LWxlbignLmNw
cCcpXQotICAgIGlmIGZpbGVuYW1lX2NwcC5lbmRzd2l0aCgnX3VuaXR0ZXN0Jyk6Ci0gICAgICAg
IGZpbGVuYW1lX2NwcCA9IGZpbGVuYW1lX2NwcFs6LWxlbignX3VuaXR0ZXN0JyldCi0gICAgZWxp
ZiBmaWxlbmFtZV9jcHAuZW5kc3dpdGgoJ190ZXN0Jyk6Ci0gICAgICAgIGZpbGVuYW1lX2NwcCA9
IGZpbGVuYW1lX2NwcFs6LWxlbignX3Rlc3QnKV0KLSAgICBmaWxlbmFtZV9jcHAgPSBmaWxlbmFt
ZV9jcHAucmVwbGFjZSgnL3B1YmxpYy8nLCAnLycpCi0gICAgZmlsZW5hbWVfY3BwID0gZmlsZW5h
bWVfY3BwLnJlcGxhY2UoJy9pbnRlcm5hbC8nLCAnLycpCi0KLSAgICBpZiBub3QgZmlsZW5hbWVf
aC5lbmRzd2l0aCgnLmgnKToKLSAgICAgICAgcmV0dXJuIChGYWxzZSwgJycpCi0gICAgZmlsZW5h
bWVfaCA9IGZpbGVuYW1lX2hbOi1sZW4oJy5oJyldCi0gICAgaWYgZmlsZW5hbWVfaC5lbmRzd2l0
aCgnLWlubCcpOgotICAgICAgICBmaWxlbmFtZV9oID0gZmlsZW5hbWVfaFs6LWxlbignLWlubCcp
XQotICAgIGZpbGVuYW1lX2ggPSBmaWxlbmFtZV9oLnJlcGxhY2UoJy9wdWJsaWMvJywgJy8nKQot
ICAgIGZpbGVuYW1lX2ggPSBmaWxlbmFtZV9oLnJlcGxhY2UoJy9pbnRlcm5hbC8nLCAnLycpCi0K
LSAgICBmaWxlc19iZWxvbmdfdG9fc2FtZV9tb2R1bGUgPSBmaWxlbmFtZV9jcHAuZW5kc3dpdGgo
ZmlsZW5hbWVfaCkKLSAgICBjb21tb25fcGF0aCA9ICcnCi0gICAgaWYgZmlsZXNfYmVsb25nX3Rv
X3NhbWVfbW9kdWxlOgotICAgICAgICBjb21tb25fcGF0aCA9IGZpbGVuYW1lX2NwcFs6LWxlbihm
aWxlbmFtZV9oKV0KLSAgICByZXR1cm4gZmlsZXNfYmVsb25nX3RvX3NhbWVfbW9kdWxlLCBjb21t
b25fcGF0aAotCi0KLWRlZiB1cGRhdGVfaW5jbHVkZV9zdGF0ZShmaWxlbmFtZSwgaW5jbHVkZV9z
dGF0ZSwgaW89Y29kZWNzKToKLSAgICAiIiJGaWxsIHVwIHRoZSBpbmNsdWRlX3N0YXRlIHdpdGgg
bmV3IGluY2x1ZGVzIGZvdW5kIGZyb20gdGhlIGZpbGUuCi0KLSAgICBBcmdzOgotICAgICAgZmls
ZW5hbWU6IHRoZSBuYW1lIG9mIHRoZSBoZWFkZXIgdG8gcmVhZC4KLSAgICAgIGluY2x1ZGVfc3Rh
dGU6IGFuIF9JbmNsdWRlU3RhdGUgaW5zdGFuY2UgaW4gd2hpY2ggdGhlIGhlYWRlcnMgYXJlIGlu
c2VydGVkLgotICAgICAgaW86IFRoZSBpbyBmYWN0b3J5IHRvIHVzZSB0byByZWFkIHRoZSBmaWxl
LiBQcm92aWRlZCBmb3IgdGVzdGFiaWxpdHkuCi0KLSAgICBSZXR1cm5zOgotICAgICAgVHJ1ZSBp
ZiBhIGhlYWRlciB3YXMgc3VjY2VzZnVsbHkgYWRkZWQuIEZhbHNlIG90aGVyd2lzZS4KLSAgICAi
IiIKLSAgICBoZWFkZXJfZmlsZSA9IE5vbmUKLSAgICB0cnk6Ci0gICAgICAgIGhlYWRlcl9maWxl
ID0gaW8ub3BlbihmaWxlbmFtZSwgJ3InLCAndXRmOCcsICdyZXBsYWNlJykKLSAgICBleGNlcHQg
SU9FcnJvcjoKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgbGluZV9udW1iZXIgPSAwCi0gICAg
Zm9yIGxpbmUgaW4gaGVhZGVyX2ZpbGU6Ci0gICAgICAgIGxpbmVfbnVtYmVyICs9IDEKLSAgICAg
ICAgY2xlYW5fbGluZSA9IGNsZWFuc2VfY29tbWVudHMobGluZSkKLSAgICAgICAgbWF0Y2hlZCA9
IF9SRV9QQVRURVJOX0lOQ0xVREUuc2VhcmNoKGNsZWFuX2xpbmUpCi0gICAgICAgIGlmIG1hdGNo
ZWQ6Ci0gICAgICAgICAgICBpbmNsdWRlID0gbWF0Y2hlZC5ncm91cCgyKQotICAgICAgICAgICAg
IyBUaGUgdmFsdWUgZm9ybWF0dGluZyBpcyBjdXRlLCBidXQgbm90IHJlYWxseSB1c2VkIHJpZ2h0
IG5vdy4KLSAgICAgICAgICAgICMgV2hhdCBtYXR0ZXJzIGhlcmUgaXMgdGhhdCB0aGUga2V5IGlz
IGluIGluY2x1ZGVfc3RhdGUuCi0gICAgICAgICAgICBpbmNsdWRlX3N0YXRlLnNldGRlZmF1bHQo
aW5jbHVkZSwgJyVzOiVkJyAlIChmaWxlbmFtZSwgbGluZV9udW1iZXIpKQotICAgIHJldHVybiBU
cnVlCi0KLQotZGVmIGNoZWNrX2Zvcl9pbmNsdWRlX3doYXRfeW91X3VzZShmaWxlbmFtZSwgY2xl
YW5fbGluZXMsIGluY2x1ZGVfc3RhdGUsIGVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbz1jb2RlY3MpOgotICAgICIiIlJlcG9ydHMgZm9yIG1pc3Npbmcgc3RsIGlu
Y2x1ZGVzLgotCi0gICAgVGhpcyBmdW5jdGlvbiB3aWxsIG91dHB1dCB3YXJuaW5ncyB0byBtYWtl
IHN1cmUgeW91IGFyZSBpbmNsdWRpbmcgdGhlIGhlYWRlcnMKLSAgICBuZWNlc3NhcnkgZm9yIHRo
ZSBzdGwgY29udGFpbmVycyBhbmQgZnVuY3Rpb25zIHRoYXQgeW91IHVzZS4gV2Ugb25seSBnaXZl
IG9uZQotICAgIHJlYXNvbiB0byBpbmNsdWRlIGEgaGVhZGVyLiBGb3IgZXhhbXBsZSwgaWYgeW91
IHVzZSBib3RoIGVxdWFsX3RvPD4gYW5kCi0gICAgbGVzczw+IGluIGEgLmggZmlsZSwgb25seSBv
bmUgKHRoZSBsYXR0ZXIgaW4gdGhlIGZpbGUpIG9mIHRoZXNlIHdpbGwgYmUKLSAgICByZXBvcnRl
ZCBhcyBhIHJlYXNvbiB0byBpbmNsdWRlIHRoZSA8ZnVuY3Rpb25hbD4uCi0KLSAgICBBcmdzOgot
ICAgICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuCi0gICAgICBjbGVh
bl9saW5lczogQSBDbGVhbnNlZExpbmVzIGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIGZpbGUuCi0g
ICAgICBpbmNsdWRlX3N0YXRlOiBBbiBfSW5jbHVkZVN0YXRlIGluc3RhbmNlLgotICAgICAgZXJy
b3I6IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4KLSAgICAgIGlv
OiBUaGUgSU8gZmFjdG9yeSB0byB1c2UgdG8gcmVhZCB0aGUgaGVhZGVyIGZpbGUuIFByb3ZpZGVk
IGZvciB1bml0dGVzdAotICAgICAgICAgIGluamVjdGlvbi4KLSAgICAiIiIKLSAgICByZXF1aXJl
ZCA9IHt9ICAjIEEgbWFwIG9mIGhlYWRlciBuYW1lIHRvIGxpbmVfbnVtYmVyIGFuZCB0aGUgdGVt
cGxhdGUgZW50aXR5LgotICAgICAgICAjIEV4YW1wbGUgb2YgcmVxdWlyZWQ6IHsgJzxmdW5jdGlv
bmFsPic6ICgxMjE5LCAnbGVzczw+JykgfQotCi0gICAgZm9yIGxpbmVfbnVtYmVyIGluIHhyYW5n
ZShjbGVhbl9saW5lcy5udW1fbGluZXMoKSk6Ci0gICAgICAgIGxpbmUgPSBjbGVhbl9saW5lcy5l
bGlkZWRbbGluZV9udW1iZXJdCi0gICAgICAgIGlmIG5vdCBsaW5lIG9yIGxpbmVbMF0gPT0gJyMn
OgotICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAjIFN0cmluZyBpcyBzcGVjaWFsIC0t
IGl0IGlzIGEgbm9uLXRlbXBsYXRpemVkIHR5cGUgaW4gU1RMLgotICAgICAgICBpZiBfUkVfUEFU
VEVSTl9TVFJJTkcuc2VhcmNoKGxpbmUpOgotICAgICAgICAgICAgcmVxdWlyZWRbJzxzdHJpbmc+
J10gPSAobGluZV9udW1iZXIsICdzdHJpbmcnKQotCi0gICAgICAgIGZvciBwYXR0ZXJuLCB0ZW1w
bGF0ZSwgaGVhZGVyIGluIF9yZV9wYXR0ZXJuX2FsZ29yaXRobV9oZWFkZXI6Ci0gICAgICAgICAg
ICBpZiBwYXR0ZXJuLnNlYXJjaChsaW5lKToKLSAgICAgICAgICAgICAgICByZXF1aXJlZFtoZWFk
ZXJdID0gKGxpbmVfbnVtYmVyLCB0ZW1wbGF0ZSkKLQotICAgICAgICAjIFRoZSBmb2xsb3dpbmcg
ZnVuY3Rpb24gaXMganVzdCBhIHNwZWVkIHVwLCBubyBzZW1hbnRpY3MgYXJlIGNoYW5nZWQuCi0g
ICAgICAgIGlmIG5vdCAnPCcgaW4gbGluZTogICMgUmVkdWNlcyB0aGUgY3B1IHRpbWUgdXNhZ2Ug
Ynkgc2tpcHBpbmcgbGluZXMuCi0gICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgIGZvciBw
YXR0ZXJuLCB0ZW1wbGF0ZSwgaGVhZGVyIGluIF9yZV9wYXR0ZXJuX3RlbXBsYXRlczoKLSAgICAg
ICAgICAgIGlmIHBhdHRlcm4uc2VhcmNoKGxpbmUpOgotICAgICAgICAgICAgICAgIHJlcXVpcmVk
W2hlYWRlcl0gPSAobGluZV9udW1iZXIsIHRlbXBsYXRlKQotCi0gICAgIyBUaGUgcG9saWN5IGlz
IHRoYXQgaWYgeW91ICNpbmNsdWRlIHNvbWV0aGluZyBpbiBmb28uaCB5b3UgZG9uJ3QgbmVlZCB0
bwotICAgICMgaW5jbHVkZSBpdCBhZ2FpbiBpbiBmb28uY3BwLiBIZXJlLCB3ZSB3aWxsIGxvb2sg
YXQgcG9zc2libGUgaW5jbHVkZXMuCi0gICAgIyBMZXQncyBjb3B5IHRoZSBpbmNsdWRlX3N0YXRl
IHNvIGl0IGlzIG9ubHkgbWVzc2VkIHVwIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLgotICAgIGluY2x1
ZGVfc3RhdGUgPSBpbmNsdWRlX3N0YXRlLmNvcHkoKQotCi0gICAgIyBEaWQgd2UgZmluZCB0aGUg
aGVhZGVyIGZvciB0aGlzIGZpbGUgKGlmIGFueSkgYW5kIHN1Y2Nlc2Z1bGx5IGxvYWQgaXQ/Ci0g
ICAgaGVhZGVyX2ZvdW5kID0gRmFsc2UKLQotICAgICMgVXNlIHRoZSBhYnNvbHV0ZSBwYXRoIHNv
IHRoYXQgbWF0Y2hpbmcgd29ya3MgcHJvcGVybHkuCi0gICAgYWJzX2ZpbGVuYW1lID0gb3MucGF0
aC5hYnNwYXRoKGZpbGVuYW1lKQotCi0gICAgIyBGb3IgRW1hY3MncyBmbHltYWtlLgotICAgICMg
SWYgY3BwX3N0eWxlIGlzIGludm9rZWQgZnJvbSBFbWFjcydzIGZseW1ha2UsIGEgdGVtcG9yYXJ5
IGZpbGUgaXMgZ2VuZXJhdGVkCi0gICAgIyBieSBmbHltYWtlIGFuZCB0aGF0IGZpbGUgbmFtZSBt
aWdodCBlbmQgd2l0aCAnX2ZseW1ha2UuY3BwJy4gSW4gdGhhdCBjYXNlLAotICAgICMgcmVzdG9y
ZSBvcmlnaW5hbCBmaWxlIG5hbWUgaGVyZSBzbyB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIGhlYWRl
ciBmaWxlIGNhbiBiZQotICAgICMgZm91bmQuCi0gICAgIyBlLmcuIElmIHRoZSBmaWxlIG5hbWUg
aXMgJ2Zvb19mbHltYWtlLmNwcCcsIHdlIHNob3VsZCBzZWFyY2ggZm9yICdmb28uaCcKLSAgICAj
IGluc3RlYWQgb2YgJ2Zvb19mbHltYWtlLmgnCi0gICAgZW1hY3NfZmx5bWFrZV9zdWZmaXggPSAn
X2ZseW1ha2UuY3BwJwotICAgIGlmIGFic19maWxlbmFtZS5lbmRzd2l0aChlbWFjc19mbHltYWtl
X3N1ZmZpeCk6Ci0gICAgICAgIGFic19maWxlbmFtZSA9IGFic19maWxlbmFtZVs6LWxlbihlbWFj
c19mbHltYWtlX3N1ZmZpeCldICsgJy5jcHAnCi0KLSAgICAjIGluY2x1ZGVfc3RhdGUgaXMgbW9k
aWZpZWQgZHVyaW5nIGl0ZXJhdGlvbiwgc28gd2UgaXRlcmF0ZSBvdmVyIGEgY29weSBvZgotICAg
ICMgdGhlIGtleXMuCi0gICAgZm9yIGhlYWRlciBpbiBpbmNsdWRlX3N0YXRlLmtleXMoKTogICNO
T0xJTlQKLSAgICAgICAgKHNhbWVfbW9kdWxlLCBjb21tb25fcGF0aCkgPSBmaWxlc19iZWxvbmdf
dG9fc2FtZV9tb2R1bGUoYWJzX2ZpbGVuYW1lLCBoZWFkZXIpCi0gICAgICAgIGZ1bGxwYXRoID0g
Y29tbW9uX3BhdGggKyBoZWFkZXIKLSAgICAgICAgaWYgc2FtZV9tb2R1bGUgYW5kIHVwZGF0ZV9p
bmNsdWRlX3N0YXRlKGZ1bGxwYXRoLCBpbmNsdWRlX3N0YXRlLCBpbyk6Ci0gICAgICAgICAgICBo
ZWFkZXJfZm91bmQgPSBUcnVlCi0KLSAgICAjIElmIHdlIGNhbid0IGZpbmQgdGhlIGhlYWRlciBm
aWxlIGZvciBhIC5jcHAsIGFzc3VtZSBpdCdzIGJlY2F1c2Ugd2UgZG9uJ3QKLSAgICAjIGtub3cg
d2hlcmUgdG8gbG9vay4gSW4gdGhhdCBjYXNlIHdlJ2xsIGdpdmUgdXAgYXMgd2UncmUgbm90IHN1
cmUgdGhleQotICAgICMgZGlkbid0IGluY2x1ZGUgaXQgaW4gdGhlIC5oIGZpbGUuCi0gICAgIyBG
SVhNRTogRG8gYSBiZXR0ZXIgam9iIG9mIGZpbmRpbmcgLmggZmlsZXMgc28gd2UgYXJlIGNvbmZp
ZGVudCB0aGF0Ci0gICAgIyAgICAgICAgbm90IGhhdmluZyB0aGUgLmggZmlsZSBtZWFucyB0aGVy
ZSBpc24ndCBvbmUuCi0gICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoJy5jcHAnKSBhbmQgbm90IGhl
YWRlcl9mb3VuZDoKLSAgICAgICAgcmV0dXJuCi0KLSAgICAjIEFsbCB0aGUgbGluZXMgaGF2ZSBi
ZWVuIHByb2Nlc3NlZCwgcmVwb3J0IHRoZSBlcnJvcnMgZm91bmQuCi0gICAgZm9yIHJlcXVpcmVk
X2hlYWRlcl91bnN0cmlwcGVkIGluIHJlcXVpcmVkOgotICAgICAgICB0ZW1wbGF0ZSA9IHJlcXVp
cmVkW3JlcXVpcmVkX2hlYWRlcl91bnN0cmlwcGVkXVsxXQotICAgICAgICBpZiB0ZW1wbGF0ZSBp
biBfSEVBREVSU19BQ0NFUFRFRF9CVVRfTk9UX1BST01PVEVEOgotICAgICAgICAgICAgaGVhZGVy
cyA9IF9IRUFERVJTX0FDQ0VQVEVEX0JVVF9OT1RfUFJPTU9URURbdGVtcGxhdGVdCi0gICAgICAg
ICAgICBpZiBbVHJ1ZSBmb3IgaGVhZGVyIGluIGhlYWRlcnMgaWYgaGVhZGVyIGluIGluY2x1ZGVf
c3RhdGVdOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGlmIHJlcXVpcmVkX2hl
YWRlcl91bnN0cmlwcGVkLnN0cmlwKCc8PiInKSBub3QgaW4gaW5jbHVkZV9zdGF0ZToKLSAgICAg
ICAgICAgIGVycm9yKGZpbGVuYW1lLCByZXF1aXJlZFtyZXF1aXJlZF9oZWFkZXJfdW5zdHJpcHBl
ZF1bMF0sCi0gICAgICAgICAgICAgICAgICAnYnVpbGQvaW5jbHVkZV93aGF0X3lvdV91c2UnLCA0
LAotICAgICAgICAgICAgICAgICAgJ0FkZCAjaW5jbHVkZSAnICsgcmVxdWlyZWRfaGVhZGVyX3Vu
c3RyaXBwZWQgKyAnIGZvciAnICsgdGVtcGxhdGUpCi0KLQotZGVmIHByb2Nlc3NfbGluZShmaWxl
bmFtZSwgZmlsZV9leHRlbnNpb24sCi0gICAgICAgICAgICAgICAgIGNsZWFuX2xpbmVzLCBsaW5l
LCBpbmNsdWRlX3N0YXRlLCBmdW5jdGlvbl9zdGF0ZSwKLSAgICAgICAgICAgICAgICAgY2xhc3Nf
c3RhdGUsIGZpbGVfc3RhdGUsIGVycm9yKToKLSAgICAiIiJQcm9jZXNzZXMgYSBzaW5nbGUgbGlu
ZSBpbiB0aGUgZmlsZS4KLQotICAgIEFyZ3M6Ci0gICAgICBmaWxlbmFtZTogRmlsZW5hbWUgb2Yg
dGhlIGZpbGUgdGhhdCBpcyBiZWluZyBwcm9jZXNzZWQuCi0gICAgICBmaWxlX2V4dGVuc2lvbjog
VGhlIGV4dGVuc2lvbiAoZG90IG5vdCBpbmNsdWRlZCkgb2YgdGhlIGZpbGUuCi0gICAgICBjbGVh
bl9saW5lczogQW4gYXJyYXkgb2Ygc3RyaW5ncywgZWFjaCByZXByZXNlbnRpbmcgYSBsaW5lIG9m
IHRoZSBmaWxlLAotICAgICAgICAgICAgICAgICAgIHdpdGggY29tbWVudHMgc3RyaXBwZWQuCi0g
ICAgICBsaW5lOiBOdW1iZXIgb2YgbGluZSBiZWluZyBwcm9jZXNzZWQuCi0gICAgICBpbmNsdWRl
X3N0YXRlOiBBbiBfSW5jbHVkZVN0YXRlIGluc3RhbmNlIGluIHdoaWNoIHRoZSBoZWFkZXJzIGFy
ZSBpbnNlcnRlZC4KLSAgICAgIGZ1bmN0aW9uX3N0YXRlOiBBIF9GdW5jdGlvblN0YXRlIGluc3Rh
bmNlIHdoaWNoIGNvdW50cyBmdW5jdGlvbiBsaW5lcywgZXRjLgotICAgICAgY2xhc3Nfc3RhdGU6
IEEgX0NsYXNzU3RhdGUgaW5zdGFuY2Ugd2hpY2ggbWFpbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0
Ci0gICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgc3RhY2sgb2YgbmVzdGVkIGNsYXNzIGRl
Y2xhcmF0aW9ucyBiZWluZyBwYXJzZWQuCi0gICAgICBmaWxlX3N0YXRlOiBBIF9GaWxlU3RhdGUg
aW5zdGFuY2Ugd2hpY2ggbWFpbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0Ci0gICAgICAgICAgICAg
ICAgICB0aGUgc3RhdGUgb2YgdGhpbmdzIGluIHRoZSBmaWxlLgotICAgICAgZXJyb3I6IEEgY2Fs
bGFibGUgdG8gd2hpY2ggZXJyb3JzIGFyZSByZXBvcnRlZCwgd2hpY2ggdGFrZXMgNCBhcmd1bWVu
dHM6Ci0gICAgICAgICAgICAgZmlsZW5hbWUsIGxpbmUgbnVtYmVyLCBlcnJvciBsZXZlbCwgYW5k
IG1lc3NhZ2UKLQotICAgICIiIgotICAgIHJhd19saW5lcyA9IGNsZWFuX2xpbmVzLnJhd19saW5l
cwotICAgIGNoZWNrX2Zvcl9mdW5jdGlvbl9sZW5ndGhzKGZpbGVuYW1lLCBjbGVhbl9saW5lcywg
bGluZSwgZnVuY3Rpb25fc3RhdGUsIGVycm9yKQotICAgIGlmIHNlYXJjaChyJ1xiTk9MSU5UXGIn
LCByYXdfbGluZXNbbGluZV0pOiAgIyBpZ25vcmUgbm9saW50IGxpbmVzCi0gICAgICAgIHJldHVy
bgotICAgIGNoZWNrX2Zvcl9tdWx0aWxpbmVfY29tbWVudHNfYW5kX3N0cmluZ3MoZmlsZW5hbWUs
IGNsZWFuX2xpbmVzLCBsaW5lLCBlcnJvcikKLSAgICBjaGVja19zdHlsZShmaWxlbmFtZSwgY2xl
YW5fbGluZXMsIGxpbmUsIGZpbGVfZXh0ZW5zaW9uLCBmaWxlX3N0YXRlLCBlcnJvcikKLSAgICBj
aGVja19sYW5ndWFnZShmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmUsIGZpbGVfZXh0ZW5zaW9u
LCBpbmNsdWRlX3N0YXRlLAotICAgICAgICAgICAgICAgICAgIGVycm9yKQotICAgIGNoZWNrX2Zv
cl9ub25fc3RhbmRhcmRfY29uc3RydWN0cyhmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX3N0YXRlLCBlcnJvcikK
LSAgICBjaGVja19wb3NpeF90aHJlYWRpbmcoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lLCBl
cnJvcikKLSAgICBjaGVja19pbnZhbGlkX2luY3JlbWVudChmaWxlbmFtZSwgY2xlYW5fbGluZXMs
IGxpbmUsIGVycm9yKQotCi0KLWRlZiBwcm9jZXNzX2ZpbGVfZGF0YShmaWxlbmFtZSwgZmlsZV9l
eHRlbnNpb24sIGxpbmVzLCBlcnJvcik6Ci0gICAgIiIiUGVyZm9ybXMgbGludCBjaGVja3MgYW5k
IHJlcG9ydHMgYW55IGVycm9ycyB0byB0aGUgZ2l2ZW4gZXJyb3IgZnVuY3Rpb24uCi0KLSAgICBB
cmdzOgotICAgICAgZmlsZW5hbWU6IEZpbGVuYW1lIG9mIHRoZSBmaWxlIHRoYXQgaXMgYmVpbmcg
cHJvY2Vzc2VkLgotICAgICAgZmlsZV9leHRlbnNpb246IFRoZSBleHRlbnNpb24gKGRvdCBub3Qg
aW5jbHVkZWQpIG9mIHRoZSBmaWxlLgotICAgICAgbGluZXM6IEFuIGFycmF5IG9mIHN0cmluZ3Ms
IGVhY2ggcmVwcmVzZW50aW5nIGEgbGluZSBvZiB0aGUgZmlsZSwgd2l0aCB0aGUKLSAgICAgICAg
ICAgICBsYXN0IGVsZW1lbnQgYmVpbmcgZW1wdHkgaWYgdGhlIGZpbGUgaXMgdGVybWluZWQgd2l0
aCBhIG5ld2xpbmUuCi0gICAgICBlcnJvcjogQSBjYWxsYWJsZSB0byB3aGljaCBlcnJvcnMgYXJl
IHJlcG9ydGVkLCB3aGljaCB0YWtlcyA0IGFyZ3VtZW50czoKLSAgICAiIiIKLSAgICBsaW5lcyA9
IChbJy8vIG1hcmtlciBzbyBsaW5lIG51bWJlcnMgYW5kIGluZGljZXMgYm90aCBzdGFydCBhdCAx
J10gKyBsaW5lcyArCi0gICAgICAgICAgICAgWycvLyBtYXJrZXIgc28gbGluZSBudW1iZXJzIGVu
ZCBpbiBhIGtub3duIHdheSddKQotCi0gICAgaW5jbHVkZV9zdGF0ZSA9IF9JbmNsdWRlU3RhdGUo
KQotICAgIGZ1bmN0aW9uX3N0YXRlID0gX0Z1bmN0aW9uU3RhdGUoKQotICAgIGNsYXNzX3N0YXRl
ID0gX0NsYXNzU3RhdGUoKQotICAgIGZpbGVfc3RhdGUgPSBfRmlsZVN0YXRlKCkKLQotICAgIGNo
ZWNrX2Zvcl9jb3B5cmlnaHQoZmlsZW5hbWUsIGxpbmVzLCBlcnJvcikKLQotICAgIGlmIGZpbGVf
ZXh0ZW5zaW9uID09ICdoJzoKLSAgICAgICAgY2hlY2tfZm9yX2hlYWRlcl9ndWFyZChmaWxlbmFt
ZSwgbGluZXMsIGVycm9yKQotCi0gICAgcmVtb3ZlX211bHRpX2xpbmVfY29tbWVudHMoZmlsZW5h
bWUsIGxpbmVzLCBlcnJvcikKLSAgICBjbGVhbl9saW5lcyA9IENsZWFuc2VkTGluZXMobGluZXMp
Ci0gICAgZm9yIGxpbmUgaW4geHJhbmdlKGNsZWFuX2xpbmVzLm51bV9saW5lcygpKToKLSAgICAg
ICAgcHJvY2Vzc19saW5lKGZpbGVuYW1lLCBmaWxlX2V4dGVuc2lvbiwgY2xlYW5fbGluZXMsIGxp
bmUsCi0gICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX3N0YXRlLCBmdW5jdGlvbl9zdGF0ZSwg
Y2xhc3Nfc3RhdGUsIGZpbGVfc3RhdGUsIGVycm9yKQotICAgIGNsYXNzX3N0YXRlLmNoZWNrX2Zp
bmlzaGVkKGZpbGVuYW1lLCBlcnJvcikKLQotICAgIGNoZWNrX2Zvcl9pbmNsdWRlX3doYXRfeW91
X3VzZShmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGluY2x1ZGVfc3RhdGUsIGVycm9yKQotCi0gICAg
IyBXZSBjaGVjayBoZXJlIHJhdGhlciB0aGFuIGluc2lkZSBwcm9jZXNzX2xpbmUgc28gdGhhdCB3
ZSBzZWUgcmF3Ci0gICAgIyBsaW5lcyByYXRoZXIgdGhhbiAiY2xlYW5lZCIgbGluZXMuCi0gICAg
Y2hlY2tfZm9yX3VuaWNvZGVfcmVwbGFjZW1lbnRfY2hhcmFjdGVycyhmaWxlbmFtZSwgbGluZXMs
IGVycm9yKQotCi0gICAgY2hlY2tfZm9yX25ld19saW5lX2F0X2VvZihmaWxlbmFtZSwgbGluZXMs
IGVycm9yKQotCi0KLWRlZiBwcm9jZXNzX2ZpbGUoZmlsZW5hbWUsIGVycm9yPWVycm9yKToKLSAg
ICAiIiJQZXJmb3JtcyBjcHBfc3R5bGUgb24gYSBzaW5nbGUgZmlsZS4KLQotICAgIEFyZ3M6Ci0g
ICAgICBmaWxlbmFtZTogVGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gcGFyc2UuCi0gICAgICBlcnJv
cjogVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBhbnkgZXJyb3JzIGZvdW5kLgotICAgICIiIgot
ICAgIHRyeToKLSAgICAgICAgIyBTdXBwb3J0IHRoZSBVTklYIGNvbnZlbnRpb24gb2YgdXNpbmcg
Ii0iIGZvciBzdGRpbi4gIE5vdGUgdGhhdAotICAgICAgICAjIHdlIGFyZSBub3Qgb3BlbmluZyB0
aGUgZmlsZSB3aXRoIHVuaXZlcnNhbCBuZXdsaW5lIHN1cHBvcnQKLSAgICAgICAgIyAod2hpY2gg
Y29kZWNzIGRvZXNuJ3Qgc3VwcG9ydCBhbnl3YXkpLCBzbyB0aGUgcmVzdWx0aW5nIGxpbmVzIGRv
Ci0gICAgICAgICMgY29udGFpbiB0cmFpbGluZyAnXHInIGNoYXJhY3RlcnMgaWYgd2UgYXJlIHJl
YWRpbmcgYSBmaWxlIHRoYXQKLSAgICAgICAgIyBoYXMgQ1JMRiBlbmRpbmdzLgotICAgICAgICAj
IElmIGFmdGVyIHRoZSBzcGxpdCBhIHRyYWlsaW5nICdccicgaXMgcHJlc2VudCwgaXQgaXMgcmVt
b3ZlZAotICAgICAgICAjIGJlbG93LiBJZiBpdCBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgcHJlc2Vu
dCAoaS5lLiBvcy5saW5lc2VwICE9Ci0gICAgICAgICMgJ1xyXG4nIGFzIGluIFdpbmRvd3MpLCBh
IHdhcm5pbmcgaXMgaXNzdWVkIGJlbG93IGlmIHRoaXMgZmlsZQotICAgICAgICAjIGlzIHByb2Nl
c3NlZC4KLQotICAgICAgICBpZiBmaWxlbmFtZSA9PSAnLSc6Ci0gICAgICAgICAgICBsaW5lcyA9
IGNvZGVjcy5TdHJlYW1SZWFkZXJXcml0ZXIoc3lzLnN0ZGluLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVjcy5nZXRyZWFkZXIoJ3V0ZjgnKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlY3MuZ2V0d3Jp
dGVyKCd1dGY4JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ3JlcGxhY2UnKS5yZWFkKCkuc3BsaXQoJ1xuJykKLSAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgIGxpbmVzID0gY29kZWNzLm9wZW4oZmlsZW5hbWUsICdyJywgJ3V0ZjgnLCAncmVwbGFjZScp
LnJlYWQoKS5zcGxpdCgnXG4nKQotCi0gICAgICAgIGNhcnJpYWdlX3JldHVybl9mb3VuZCA9IEZh
bHNlCi0gICAgICAgICMgUmVtb3ZlIHRyYWlsaW5nICdccicuCi0gICAgICAgIGZvciBsaW5lX251
bWJlciBpbiByYW5nZShsZW4obGluZXMpKToKLSAgICAgICAgICAgIGlmIGxpbmVzW2xpbmVfbnVt
YmVyXS5lbmRzd2l0aCgnXHInKToKLSAgICAgICAgICAgICAgICBsaW5lc1tsaW5lX251bWJlcl0g
PSBsaW5lc1tsaW5lX251bWJlcl0ucnN0cmlwKCdccicpCi0gICAgICAgICAgICAgICAgY2Fycmlh
Z2VfcmV0dXJuX2ZvdW5kID0gVHJ1ZQotCi0gICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgIHN5
cy5zdGRlcnIud3JpdGUoCi0gICAgICAgICAgICAiU2tpcHBpbmcgaW5wdXQgJyVzJzogQ2FuJ3Qg
b3BlbiBmb3IgcmVhZGluZ1xuIiAlIGZpbGVuYW1lKQotICAgICAgICByZXR1cm4KLQotICAgICMg
Tm90ZSwgaWYgbm8gZG90IGlzIGZvdW5kLCB0aGlzIHdpbGwgZ2l2ZSB0aGUgZW50aXJlIGZpbGVu
YW1lIGFzIHRoZSBleHQuCi0gICAgZmlsZV9leHRlbnNpb24gPSBmaWxlbmFtZVtmaWxlbmFtZS5y
ZmluZCgnLicpICsgMTpdCi0KLSAgICAjIFdoZW4gcmVhZGluZyBmcm9tIHN0ZGluLCB0aGUgZXh0
ZW5zaW9uIGlzIHVua25vd24sIHNvIG5vIGNwcF9zdHlsZSB0ZXN0cwotICAgICMgc2hvdWxkIHJl
bHkgb24gdGhlIGV4dGVuc2lvbi4KLSAgICBpZiAoZmlsZW5hbWUgIT0gJy0nIGFuZCBub3QgY2Fu
X2hhbmRsZShmaWxlbmFtZSkpOgotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdJZ25vcmluZyAl
czsgbm90IGEgLmNwcCwgLmMgb3IgLmggZmlsZVxuJyAlIGZpbGVuYW1lKQotICAgIGVsc2U6Ci0g
ICAgICAgIHByb2Nlc3NfZmlsZV9kYXRhKGZpbGVuYW1lLCBmaWxlX2V4dGVuc2lvbiwgbGluZXMs
IGVycm9yKQotICAgICAgICBpZiBjYXJyaWFnZV9yZXR1cm5fZm91bmQgYW5kIG9zLmxpbmVzZXAg
IT0gJ1xyXG4nOgotICAgICAgICAgICAgIyBVc2UgMCBmb3IgbGluZV9udW1iZXIgc2luY2Ugb3V0
cHV0aW5nIG9ubHkgb25lIGVycm9yIGZvciBwb3RlbnRpYWxseQotICAgICAgICAgICAgIyBzZXZl
cmFsIGxpbmVzLgotICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIDAsICd3aGl0ZXNwYWNlL25l
d2xpbmUnLCAxLAotICAgICAgICAgICAgICAgICAgJ09uZSBvciBtb3JlIHVuZXhwZWN0ZWQgXFxy
ICheTSkgZm91bmQ7JwotICAgICAgICAgICAgICAgICAgJ2JldHRlciB0byB1c2Ugb25seSBhIFxc
bicpCi0KLQotZGVmIGNhbl9oYW5kbGUoZmlsZW5hbWUpOgotICAgICIiIkNoZWNrcyBpZiB0aGlz
IG1vZHVsZSBzdXBwb3J0cyBmb3IgdGhlIHNwZWNpZmllZCBmaWxlIHR5cGUuCi0KLSAgICBBcmdz
OgotICAgICAgZmlsZW5hbWU6IEEgZmlsZW5hbWUuIEl0IG1heSBjb250YWluIGRpcmVjdG9yeSBu
YW1lcy4KLSAgICAgIiIiCi0gICAgcmV0dXJuIG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzFd
IGluICgnLmgnLCAnLmNwcCcsICcuYycpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NwcF9zdHlsZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NwcF9zdHlsZV91bml0dGVzdC5weQkocmV2aXNpb24gNTI4NDkpCisrKyBX
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NwcF9zdHlsZV91bml0dGVzdC5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzNjM1ICswLDAgQEAKLSMhL3Vzci9iaW4vcHl0aG9uCi0jIC0qLSBjb2Rp
bmc6IHV0Zi04OyAtKi0KLSMKLSMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLgot
IyBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwot
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotIiIiVW5pdCB0ZXN0IGZvciBjcHBfc3R5bGUucHkuIiIiCi0KLSMgRklY
TUU6IEFkZCBhIGdvb2QgdGVzdCB0aGF0IHRlc3RzIFVwZGF0ZUluY2x1ZGVTdGF0ZS4KLQotaW1w
b3J0IGNvZGVjcwotaW1wb3J0IG9zCi1pbXBvcnQgcmFuZG9tCi1pbXBvcnQgcmUKLWltcG9ydCB1
bml0dGVzdAotaW1wb3J0IGNwcF9zdHlsZQotIyBGSVhNRTogUmVtb3ZlIHRoZSBuZWVkIHRvIGlt
cG9ydCBzb21ldGhpbmcgZnJvbSBzdHlsZS4gU2VlIHRoZQotIyAgICAgICAgRklYTUUgbm90ZXMg
bmVhciB0aGUgU1RZTEVfQ0FURUdPUklFUyBkZWZpbml0aW9uIGZvciBhCi0jICAgICAgICBzdWdn
ZXN0aW9uIG9uIGhvdyB0byBiZXN0IGRvIHRoaXMuCi1mcm9tIHN0eWxlIGltcG9ydCBTVFlMRV9D
QVRFR09SSUVTCi0KLSMgVGhpcyBjbGFzcyB3b3JrcyBhcyBhbiBlcnJvciBjb2xsZWN0b3IgYW5k
IHJlcGxhY2VzIGNwcF9zdHlsZS5FcnJvcgotIyBmdW5jdGlvbiBmb3IgdGhlIHVuaXQgdGVzdHMu
ICBXZSBhbHNvIHZlcmlmeSBlYWNoIGNhdGVnb3J5IHdlIHNlZQotIyBpcyBpbiBTVFlMRV9DQVRF
R09SSUVTLCB0byBoZWxwIGtlZXAgdGhhdCBsaXN0IHVwIHRvIGRhdGUuCi1jbGFzcyBFcnJvckNv
bGxlY3RvcjoKLSAgICBfYWxsX3N0eWxlX2NhdGVnb3JpZXMgPSBTVFlMRV9DQVRFR09SSUVTCi0g
ICAgIyBUaGlzIGEgbGlzdCBpbmNsdWRpbmcgYWxsIGNhdGVnb3JpZXMgc2VlbiBpbiBhbnkgdW5p
dCB0ZXN0LgotICAgIF9zZWVuX3N0eWxlX2NhdGVnb3JpZXMgPSB7fQotCi0gICAgZGVmIF9faW5p
dF9fKHNlbGYsIGFzc2VydF9mbik6Ci0gICAgICAgICIiImFzc2VydF9mbjogYSBmdW5jdGlvbiB0
byBjYWxsIHdoZW4gd2Ugbm90aWNlIGEgcHJvYmxlbS4iIiIKLSAgICAgICAgc2VsZi5fYXNzZXJ0
X2ZuID0gYXNzZXJ0X2ZuCi0gICAgICAgIHNlbGYuX2Vycm9ycyA9IFtdCi0KLSAgICBkZWYgX19j
YWxsX18oc2VsZiwgdW51c2VkX2ZpbGVuYW1lLCB1bnVzZWRfbGluZW51bSwKLSAgICAgICAgICAg
ICAgICAgY2F0ZWdvcnksIGNvbmZpZGVuY2UsIG1lc3NhZ2UpOgotICAgICAgICBzZWxmLl9hc3Nl
cnRfZm4oY2F0ZWdvcnkgaW4gc2VsZi5fYWxsX3N0eWxlX2NhdGVnb3JpZXMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAnTWVzc2FnZSAiJXMiIGhhcyBjYXRlZ29yeSAiJXMiLCcKLSAgICAgICAg
ICAgICAgICAgICAgICAgICcgd2hpY2ggaXMgbm90IGluIFNUWUxFX0NBVEVHT1JJRVMnICUgKG1l
c3NhZ2UsIGNhdGVnb3J5KSkKLSAgICAgICAgc2VsZi5fc2Vlbl9zdHlsZV9jYXRlZ29yaWVzW2Nh
dGVnb3J5XSA9IDEKLSAgICAgICAgaWYgY3BwX3N0eWxlLl9zaG91bGRfcHJpbnRfZXJyb3IoY2F0
ZWdvcnksIGNvbmZpZGVuY2UpOgotICAgICAgICAgICAgc2VsZi5fZXJyb3JzLmFwcGVuZCgnJXMg
IFslc10gWyVkXScgJSAobWVzc2FnZSwgY2F0ZWdvcnksIGNvbmZpZGVuY2UpKQotCi0gICAgZGVm
IHJlc3VsdHMoc2VsZik6Ci0gICAgICAgIGlmIGxlbihzZWxmLl9lcnJvcnMpIDwgMjoKLSAgICAg
ICAgICAgIHJldHVybiAnJy5qb2luKHNlbGYuX2Vycm9ycykgICMgTW9zdCB0ZXN0cyBleHBlY3Qg
dG8gaGF2ZSBhIHN0cmluZy4KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzZWxm
Ll9lcnJvcnMgICMgTGV0J3MgZ2l2ZSBhIGxpc3QgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZS4K
LQotICAgIGRlZiByZXN1bHRfbGlzdChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2Vycm9y
cwotCi0gICAgZGVmIHZlcmlmeV9hbGxfY2F0ZWdvcmllc19hcmVfc2VlbihzZWxmKToKLSAgICAg
ICAgIiIiRmFpbHMgaWYgdGhlcmUncyBhIGNhdGVnb3J5IGluIF9hbGxfc3R5bGVfY2F0ZWdvcmll
cyAtIF9zZWVuX3N0eWxlX2NhdGVnb3JpZXMuCi0KLSAgICAgICAgVGhpcyBzaG91bGQgb25seSBi
ZSBjYWxsZWQgYWZ0ZXIgYWxsIHRlc3RzIGFyZSBydW4sIHNvCi0gICAgICAgIF9zZWVuX3N0eWxl
X2NhdGVnb3JpZXMgaGFzIGhhZCBhIGNoYW5jZSB0byBmdWxseSBwb3B1bGF0ZS4gIFNpbmNlCi0g
ICAgICAgIHRoaXMgaXNuJ3QgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBub3JtYWwgdW5pdHRlc3Qg
ZnJhbWV3b3JrLCB3ZQotICAgICAgICBjYW4ndCB1c2UgdGhlIG5vcm1hbCB1bml0dGVzdCBhc3Nl
cnQgbWFjcm9zLiAgSW5zdGVhZCB3ZSBqdXN0IGV4aXQKLSAgICAgICAgd2hlbiB3ZSBzZWUgYW4g
ZXJyb3IuICBHb29kIHRoaW5nIHRoaXMgdGVzdCBpcyBhbHdheXMgcnVuIGxhc3QhCi0gICAgICAg
ICIiIgotICAgICAgICBmb3IgY2F0ZWdvcnkgaW4gc2VsZi5fYWxsX3N0eWxlX2NhdGVnb3JpZXM6
Ci0gICAgICAgICAgICBpZiBjYXRlZ29yeSBub3QgaW4gc2VsZi5fc2Vlbl9zdHlsZV9jYXRlZ29y
aWVzOgotICAgICAgICAgICAgICAgIGltcG9ydCBzeXMKLSAgICAgICAgICAgICAgICBzeXMuZXhp
dCgnRkFUQUwgRVJST1I6IFRoZXJlIGFyZSBubyB0ZXN0cyBmb3IgY2F0ZWdvcnkgIiVzIicgJSBj
YXRlZ29yeSkKLQotICAgIGRlZiByZW1vdmVfaWZfcHJlc2VudChzZWxmLCBzdWJzdHIpOgotICAg
ICAgICBmb3IgKGluZGV4LCBlcnJvcikgaW4gZW51bWVyYXRlKHNlbGYuX2Vycm9ycyk6Ci0gICAg
ICAgICAgICBpZiBlcnJvci5maW5kKHN1YnN0cikgIT0gLTE6Ci0gICAgICAgICAgICAgICAgc2Vs
Zi5fZXJyb3JzID0gc2VsZi5fZXJyb3JzWzA6aW5kZXhdICsgc2VsZi5fZXJyb3JzWyhpbmRleCAr
IDEpOl0KLSAgICAgICAgICAgICAgICBicmVhawotCi0KLSMgVGhpcyBjbGFzcyBpcyBhIGxhbWUg
bW9jayBvZiBjb2RlY3MuIFdlIGRvIG5vdCB2ZXJpZnkgZmlsZW5hbWUsIG1vZGUsIG9yCi0jIGVu
Y29kaW5nLCBidXQgZm9yIHRoZSBjdXJyZW50IHVzZSBjYXNlIGl0IGlzIG5vdCBuZWVkZWQuCi1j
bGFzcyBNb2NrSW86Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vY2tfZmlsZSk6Ci0gICAgICAg
IHNlbGYubW9ja19maWxlID0gbW9ja19maWxlCi0KLSAgICBkZWYgb3BlbihzZWxmLCB1bnVzZWRf
ZmlsZW5hbWUsIHVudXNlZF9tb2RlLCB1bnVzZWRfZW5jb2RpbmcsIF8pOiAgIyBOT0xJTlQKLSAg
ICAgICAgIyAobGludCBkb2Vzbid0IGxpa2Ugb3BlbiBhcyBhIG1ldGhvZCBuYW1lKQotICAgICAg
ICByZXR1cm4gc2VsZi5tb2NrX2ZpbGUKLQotCi1jbGFzcyBDcHBTdHlsZVRlc3RCYXNlKHVuaXR0
ZXN0LlRlc3RDYXNlKToKLSAgICAiIiJQcm92aWRlcyBzb21lIHVzZWZ1bCBoZWxwZXIgZnVuY3Rp
b25zIGZvciBjcHBfc3R5bGUgdGVzdHMuIiIiCi0KLSAgICAjIFBlcmZvcm0gbGludCBvbiBzaW5n
bGUgbGluZSBvZiBpbnB1dCBhbmQgcmV0dXJuIHRoZSBlcnJvciBtZXNzYWdlLgotICAgIGRlZiBw
ZXJmb3JtX3NpbmdsZV9saW5lX2xpbnQoc2VsZiwgY29kZSwgZmlsZV9uYW1lKToKLSAgICAgICAg
ZXJyb3JfY29sbGVjdG9yID0gRXJyb3JDb2xsZWN0b3Ioc2VsZi5hc3NlcnRfKQotICAgICAgICBs
aW5lcyA9IGNvZGUuc3BsaXQoJ1xuJykKLSAgICAgICAgY3BwX3N0eWxlLnJlbW92ZV9tdWx0aV9s
aW5lX2NvbW1lbnRzKGZpbGVfbmFtZSwgbGluZXMsIGVycm9yX2NvbGxlY3RvcikKLSAgICAgICAg
Y2xlYW5fbGluZXMgPSBjcHBfc3R5bGUuQ2xlYW5zZWRMaW5lcyhsaW5lcykKLSAgICAgICAgaW5j
bHVkZV9zdGF0ZSA9IGNwcF9zdHlsZS5fSW5jbHVkZVN0YXRlKCkKLSAgICAgICAgZnVuY3Rpb25f
c3RhdGUgPSBjcHBfc3R5bGUuX0Z1bmN0aW9uU3RhdGUoKQotICAgICAgICBleHQgPSBmaWxlX25h
bWVbZmlsZV9uYW1lLnJmaW5kKCcuJykgKyAxOl0KLSAgICAgICAgY2xhc3Nfc3RhdGUgPSBjcHBf
c3R5bGUuX0NsYXNzU3RhdGUoKQotICAgICAgICBmaWxlX3N0YXRlID0gY3BwX3N0eWxlLl9GaWxl
U3RhdGUoKQotICAgICAgICBjcHBfc3R5bGUucHJvY2Vzc19saW5lKGZpbGVfbmFtZSwgZXh0LCBj
bGVhbl9saW5lcywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX3N0
YXRlLCBmdW5jdGlvbl9zdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFz
c19zdGF0ZSwgZmlsZV9zdGF0ZSwgZXJyb3JfY29sbGVjdG9yKQotICAgICAgICAjIFNpbmdsZS1s
aW5lIGxpbnQgdGVzdHMgYXJlIGFsbG93ZWQgdG8gZmFpbCB0aGUgJ3VubGludGFibGUgZnVuY3Rp
b24nCi0gICAgICAgICMgY2hlY2suCi0gICAgICAgIGVycm9yX2NvbGxlY3Rvci5yZW1vdmVfaWZf
cHJlc2VudCgKLSAgICAgICAgICAgICdMaW50IGZhaWxlZCB0byBmaW5kIHN0YXJ0IG9mIGZ1bmN0
aW9uIGJvZHkuJykKLSAgICAgICAgcmV0dXJuIGVycm9yX2NvbGxlY3Rvci5yZXN1bHRzKCkKLQot
ICAgICMgUGVyZm9ybSBsaW50IG92ZXIgbXVsdGlwbGUgbGluZXMgYW5kIHJldHVybiB0aGUgZXJy
b3IgbWVzc2FnZS4KLSAgICBkZWYgcGVyZm9ybV9tdWx0aV9saW5lX2xpbnQoc2VsZiwgY29kZSwg
ZmlsZV9uYW1lKToKLSAgICAgICAgZXJyb3JfY29sbGVjdG9yID0gRXJyb3JDb2xsZWN0b3Ioc2Vs
Zi5hc3NlcnRfKQotICAgICAgICBsaW5lcyA9IGNvZGUuc3BsaXQoJ1xuJykKLSAgICAgICAgY3Bw
X3N0eWxlLnJlbW92ZV9tdWx0aV9saW5lX2NvbW1lbnRzKGZpbGVfbmFtZSwgbGluZXMsIGVycm9y
X2NvbGxlY3RvcikKLSAgICAgICAgbGluZXMgPSBjcHBfc3R5bGUuQ2xlYW5zZWRMaW5lcyhsaW5l
cykKLSAgICAgICAgZXh0ID0gZmlsZV9uYW1lW2ZpbGVfbmFtZS5yZmluZCgnLicpICsgMTpdCi0g
ICAgICAgIGNsYXNzX3N0YXRlID0gY3BwX3N0eWxlLl9DbGFzc1N0YXRlKCkKLSAgICAgICAgZmls
ZV9zdGF0ZSA9IGNwcF9zdHlsZS5fRmlsZVN0YXRlKCkKLSAgICAgICAgZm9yIGkgaW4geHJhbmdl
KGxpbmVzLm51bV9saW5lcygpKToKLSAgICAgICAgICAgIGNwcF9zdHlsZS5jaGVja19zdHlsZShm
aWxlX25hbWUsIGxpbmVzLCBpLCBleHQsIGZpbGVfc3RhdGUsIGVycm9yX2NvbGxlY3RvcikKLSAg
ICAgICAgICAgIGNwcF9zdHlsZS5jaGVja19mb3Jfbm9uX3N0YW5kYXJkX2NvbnN0cnVjdHMoZmls
ZV9uYW1lLCBsaW5lcywgaSwgY2xhc3Nfc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvbGxlY3RvcikKLSAgICAgICAg
Y2xhc3Nfc3RhdGUuY2hlY2tfZmluaXNoZWQoZmlsZV9uYW1lLCBlcnJvcl9jb2xsZWN0b3IpCi0g
ICAgICAgIHJldHVybiBlcnJvcl9jb2xsZWN0b3IucmVzdWx0cygpCi0KLSAgICAjIFNpbWlsYXIg
dG8gcGVyZm9ybV9tdWx0aV9saW5lX2xpbnQsIGJ1dCBjYWxscyBjaGVja19sYW5ndWFnZSBpbnN0
ZWFkIG9mCi0gICAgIyBjaGVja19mb3Jfbm9uX3N0YW5kYXJkX2NvbnN0cnVjdHMKLSAgICBkZWYg
cGVyZm9ybV9sYW5ndWFnZV9ydWxlc19jaGVjayhzZWxmLCBmaWxlX25hbWUsIGNvZGUpOgotICAg
ICAgICBlcnJvcl9jb2xsZWN0b3IgPSBFcnJvckNvbGxlY3RvcihzZWxmLmFzc2VydF8pCi0gICAg
ICAgIGluY2x1ZGVfc3RhdGUgPSBjcHBfc3R5bGUuX0luY2x1ZGVTdGF0ZSgpCi0gICAgICAgIGxp
bmVzID0gY29kZS5zcGxpdCgnXG4nKQotICAgICAgICBjcHBfc3R5bGUucmVtb3ZlX211bHRpX2xp
bmVfY29tbWVudHMoZmlsZV9uYW1lLCBsaW5lcywgZXJyb3JfY29sbGVjdG9yKQotICAgICAgICBs
aW5lcyA9IGNwcF9zdHlsZS5DbGVhbnNlZExpbmVzKGxpbmVzKQotICAgICAgICBleHQgPSBmaWxl
X25hbWVbZmlsZV9uYW1lLnJmaW5kKCcuJykgKyAxOl0KLSAgICAgICAgZm9yIGkgaW4geHJhbmdl
KGxpbmVzLm51bV9saW5lcygpKToKLSAgICAgICAgICAgIGNwcF9zdHlsZS5jaGVja19sYW5ndWFn
ZShmaWxlX25hbWUsIGxpbmVzLCBpLCBleHQsIGluY2x1ZGVfc3RhdGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29sbGVjdG9yKQotICAgICAgICByZXR1cm4g
ZXJyb3JfY29sbGVjdG9yLnJlc3VsdHMoKQotCi0gICAgZGVmIHBlcmZvcm1fZnVuY3Rpb25fbGVu
Z3Roc19jaGVjayhzZWxmLCBjb2RlKToKLSAgICAgICAgIiIiUGVyZm9ybSBMaW50IGZ1bmN0aW9u
IGxlbmd0aCBjaGVjayBvbiBibG9jayBvZiBjb2RlIGFuZCByZXR1cm4gd2FybmluZ3MuCi0KLSAg
ICAgICAgQnVpbGRzIHVwIGFuIGFycmF5IG9mIGxpbmVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNv
ZGUgYW5kIHN0cmlwcyBjb21tZW50cwotICAgICAgICB1c2luZyBjcHBfc3R5bGUgZnVuY3Rpb25z
LgotCi0gICAgICAgIEVzdGFibGlzaGVzIGFuIGVycm9yIGNvbGxlY3RvciBhbmQgaW52b2tlcyB0
aGUgZnVuY3Rpb24gbGVuZ3RoIGNoZWNraW5nCi0gICAgICAgIGZ1bmN0aW9uIGZvbGxvd2luZyBj
cHBfc3R5bGUncyBwYXR0ZXJuLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgY29kZTogQysr
IHNvdXJjZSBjb2RlIGV4cGVjdGVkIHRvIGdlbmVyYXRlIGEgd2FybmluZyBtZXNzYWdlLgotCi0g
ICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgVGhlIGFjY3VtdWxhdGVkIGVycm9ycy4KLSAgICAg
ICAgIiIiCi0gICAgICAgIGZpbGVfbmFtZSA9ICdmb28uY3BwJwotICAgICAgICBlcnJvcl9jb2xs
ZWN0b3IgPSBFcnJvckNvbGxlY3RvcihzZWxmLmFzc2VydF8pCi0gICAgICAgIGZ1bmN0aW9uX3N0
YXRlID0gY3BwX3N0eWxlLl9GdW5jdGlvblN0YXRlKCkKLSAgICAgICAgbGluZXMgPSBjb2RlLnNw
bGl0KCdcbicpCi0gICAgICAgIGNwcF9zdHlsZS5yZW1vdmVfbXVsdGlfbGluZV9jb21tZW50cyhm
aWxlX25hbWUsIGxpbmVzLCBlcnJvcl9jb2xsZWN0b3IpCi0gICAgICAgIGxpbmVzID0gY3BwX3N0
eWxlLkNsZWFuc2VkTGluZXMobGluZXMpCi0gICAgICAgIGZvciBpIGluIHhyYW5nZShsaW5lcy5u
dW1fbGluZXMoKSk6Ci0gICAgICAgICAgICBjcHBfc3R5bGUuY2hlY2tfZm9yX2Z1bmN0aW9uX2xl
bmd0aHMoZmlsZV9uYW1lLCBsaW5lcywgaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbl9zdGF0ZSwgZXJyb3JfY29sbGVjdG9yKQotICAg
ICAgICByZXR1cm4gZXJyb3JfY29sbGVjdG9yLnJlc3VsdHMoKQotCi0gICAgZGVmIHBlcmZvcm1f
aW5jbHVkZV93aGF0X3lvdV91c2Uoc2VsZiwgY29kZSwgZmlsZW5hbWU9J2Zvby5oJywgaW89Y29k
ZWNzKToKLSAgICAgICAgIyBGaXJzdCwgYnVpbGQgdXAgdGhlIGluY2x1ZGUgc3RhdGUuCi0gICAg
ICAgIGVycm9yX2NvbGxlY3RvciA9IEVycm9yQ29sbGVjdG9yKHNlbGYuYXNzZXJ0XykKLSAgICAg
ICAgaW5jbHVkZV9zdGF0ZSA9IGNwcF9zdHlsZS5fSW5jbHVkZVN0YXRlKCkKLSAgICAgICAgbGlu
ZXMgPSBjb2RlLnNwbGl0KCdcbicpCi0gICAgICAgIGNwcF9zdHlsZS5yZW1vdmVfbXVsdGlfbGlu
ZV9jb21tZW50cyhmaWxlbmFtZSwgbGluZXMsIGVycm9yX2NvbGxlY3RvcikKLSAgICAgICAgbGlu
ZXMgPSBjcHBfc3R5bGUuQ2xlYW5zZWRMaW5lcyhsaW5lcykKLSAgICAgICAgZm9yIGkgaW4geHJh
bmdlKGxpbmVzLm51bV9saW5lcygpKToKLSAgICAgICAgICAgIGNwcF9zdHlsZS5jaGVja19sYW5n
dWFnZShmaWxlbmFtZSwgbGluZXMsIGksICcuaCcsIGluY2x1ZGVfc3RhdGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29sbGVjdG9yKQotICAgICAgICAjIFdl
IGNvdWxkIGNsZWFyIHRoZSBlcnJvcl9jb2xsZWN0b3IgaGVyZSwgYnV0IHRoaXMgc2hvdWxkCi0g
ICAgICAgICMgYWxzbyBiZSBmaW5lLCBzaW5jZSBvdXIgSW5jbHVkZVdoYXRZb3VVc2UgdW5pdHRl
c3RzIGRvIG5vdAotICAgICAgICAjIGhhdmUgbGFuZ3VhZ2UgcHJvYmxlbXMuCi0KLSAgICAgICAg
IyBTZWNvbmQsIGxvb2sgZm9yIG1pc3NpbmcgaW5jbHVkZXMuCi0gICAgICAgIGNwcF9zdHlsZS5j
aGVja19mb3JfaW5jbHVkZV93aGF0X3lvdV91c2UoZmlsZW5hbWUsIGxpbmVzLCBpbmNsdWRlX3N0
YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVy
cm9yX2NvbGxlY3RvciwgaW8pCi0gICAgICAgIHJldHVybiBlcnJvcl9jb2xsZWN0b3IucmVzdWx0
cygpCi0KLSAgICAjIFBlcmZvcm0gbGludCBhbmQgY29tcGFyZSB0aGUgZXJyb3IgbWVzc2FnZSB3
aXRoICJleHBlY3RlZF9tZXNzYWdlIi4KLSAgICBkZWYgYXNzZXJ0X2xpbnQoc2VsZiwgY29kZSwg
ZXhwZWN0ZWRfbWVzc2FnZSwgZmlsZV9uYW1lPSdmb28uY3BwJyk6Ci0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKGV4cGVjdGVkX21lc3NhZ2UsIHNlbGYucGVyZm9ybV9zaW5nbGVfbGluZV9saW50
KGNvZGUsIGZpbGVfbmFtZSkpCi0KLSAgICBkZWYgYXNzZXJ0X2xpbnRfb25lX29mX21hbnlfZXJy
b3JzX3JlKHNlbGYsIGNvZGUsIGV4cGVjdGVkX21lc3NhZ2VfcmUsIGZpbGVfbmFtZT0nZm9vLmNw
cCcpOgotICAgICAgICBtZXNzYWdlcyA9IHNlbGYucGVyZm9ybV9zaW5nbGVfbGluZV9saW50KGNv
ZGUsIGZpbGVfbmFtZSkKLSAgICAgICAgZm9yIG1lc3NhZ2UgaW4gbWVzc2FnZXM6Ci0gICAgICAg
ICAgICBpZiByZS5zZWFyY2goZXhwZWN0ZWRfbWVzc2FnZV9yZSwgbWVzc2FnZSk6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRfbWVz
c2FnZSwgbWVzc2FnZXMpCi0KLSAgICBkZWYgYXNzZXJ0X211bHRpX2xpbmVfbGludChzZWxmLCBj
b2RlLCBleHBlY3RlZF9tZXNzYWdlLCBmaWxlX25hbWU9J2Zvby5oJyk6Ci0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKGV4cGVjdGVkX21lc3NhZ2UsIHNlbGYucGVyZm9ybV9tdWx0aV9saW5lX2xp
bnQoY29kZSwgZmlsZV9uYW1lKSkKLQotICAgIGRlZiBhc3NlcnRfbXVsdGlfbGluZV9saW50X3Jl
KHNlbGYsIGNvZGUsIGV4cGVjdGVkX21lc3NhZ2VfcmUsIGZpbGVfbmFtZT0nZm9vLmgnKToKLSAg
ICAgICAgbWVzc2FnZSA9IHNlbGYucGVyZm9ybV9tdWx0aV9saW5lX2xpbnQoY29kZSwgZmlsZV9u
YW1lKQotICAgICAgICBpZiBub3QgcmUuc2VhcmNoKGV4cGVjdGVkX21lc3NhZ2VfcmUsIG1lc3Nh
Z2UpOgotICAgICAgICAgICAgc2VsZi5mYWlsKCdNZXNzYWdlIHdhczpcbicgKyBtZXNzYWdlICsg
J0V4cGVjdGVkIG1hdGNoIHRvICInICsgZXhwZWN0ZWRfbWVzc2FnZV9yZSArICciJykKLQotICAg
IGRlZiBhc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soc2VsZiwgZmlsZV9uYW1lLCBjb2RlLCBl
eHBlY3RlZF9tZXNzYWdlKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRfbWVz
c2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wZXJmb3JtX2xhbmd1YWdlX3J1
bGVzX2NoZWNrKGZpbGVfbmFtZSwgY29kZSkpCi0KLSAgICBkZWYgYXNzZXJ0X2luY2x1ZGVfd2hh
dF95b3VfdXNlKHNlbGYsIGNvZGUsIGV4cGVjdGVkX21lc3NhZ2UpOgotICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhleHBlY3RlZF9tZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLnBlcmZvcm1faW5jbHVkZV93aGF0X3lvdV91c2UoY29kZSkpCi0KLSAgICBkZWYgYXNzZXJ0
X2JsYW5rX2xpbmVzX2NoZWNrKHNlbGYsIGxpbmVzLCBzdGFydF9lcnJvcnMsIGVuZF9lcnJvcnMp
OgotICAgICAgICBlcnJvcl9jb2xsZWN0b3IgPSBFcnJvckNvbGxlY3RvcihzZWxmLmFzc2VydF8p
Ci0gICAgICAgIGNwcF9zdHlsZS5wcm9jZXNzX2ZpbGVfZGF0YSgnZm9vLmNwcCcsICdjcHAnLCBs
aW5lcywgZXJyb3JfY29sbGVjdG9yKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKLSAgICAg
ICAgICAgIHN0YXJ0X2Vycm9ycywKLSAgICAgICAgICAgIGVycm9yX2NvbGxlY3Rvci5yZXN1bHRz
KCkuY291bnQoCi0gICAgICAgICAgICAgICAgJ0JsYW5rIGxpbmUgYXQgdGhlIHN0YXJ0IG9mIGEg
Y29kZSBibG9jay4gIElzIHRoaXMgbmVlZGVkPycKLSAgICAgICAgICAgICAgICAnICBbd2hpdGVz
cGFjZS9ibGFua19saW5lXSBbMl0nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCi0gICAg
ICAgICAgICBlbmRfZXJyb3JzLAotICAgICAgICAgICAgZXJyb3JfY29sbGVjdG9yLnJlc3VsdHMo
KS5jb3VudCgKLSAgICAgICAgICAgICAgICAnQmxhbmsgbGluZSBhdCB0aGUgZW5kIG9mIGEgY29k
ZSBibG9jay4gIElzIHRoaXMgbmVlZGVkPycKLSAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFj
ZS9ibGFua19saW5lXSBbM10nKSkKLQotCi1jbGFzcyBDcHBTdHlsZVRlc3QoQ3BwU3R5bGVUZXN0
QmFzZSk6Ci0KLSAgICAjIFRlc3QgZ2V0IGxpbmUgd2lkdGguCi0gICAgZGVmIHRlc3RfZ2V0X2xp
bmVfd2lkdGgoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDAsIGNwcF9zdHlsZS5n
ZXRfbGluZV93aWR0aCgnJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEwLCBjcHBfc3R5
bGUuZ2V0X2xpbmVfd2lkdGgodSd4JyAqIDEwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
MTYsIGNwcF9zdHlsZS5nZXRfbGluZV93aWR0aCh1J+mDvXzpgZN85bqcfOecjHzmlK/luoEnKSkK
LQotICAgIGRlZiB0ZXN0X2ZpbmRfbmV4dF9tdWx0aV9saW5lX2NvbW1lbnRfc3RhcnQoc2VsZik6
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIGNwcF9zdHlsZS5maW5kX25leHRfbXVsdGlf
bGluZV9jb21tZW50X3N0YXJ0KFsnJ10sIDApKQotCi0gICAgICAgIGxpbmVzID0gWydhJywgJ2In
LCAnLyogYyddCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDIsIGNwcF9zdHlsZS5maW5kX25l
eHRfbXVsdGlfbGluZV9jb21tZW50X3N0YXJ0KGxpbmVzLCAwKSkKLQotICAgICAgICBsaW5lcyA9
IFsnY2hhciBhW10gPSAiLyoiOyddICAjIG5vdCByZWNvZ25pemVkIGFzIGNvbW1lbnQuCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIGNwcF9zdHlsZS5maW5kX25leHRfbXVsdGlfbGluZV9j
b21tZW50X3N0YXJ0KGxpbmVzLCAwKSkKLQotICAgIGRlZiB0ZXN0X2ZpbmRfbmV4dF9tdWx0aV9s
aW5lX2NvbW1lbnRfZW5kKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygxLCBjcHBf
c3R5bGUuZmluZF9uZXh0X211bHRpX2xpbmVfY29tbWVudF9lbmQoWycnXSwgMCkpCi0gICAgICAg
IGxpbmVzID0gWydhJywgJ2InLCAnIGMgKi8nXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygy
LCBjcHBfc3R5bGUuZmluZF9uZXh0X211bHRpX2xpbmVfY29tbWVudF9lbmQobGluZXMsIDApKQot
Ci0gICAgZGVmIHRlc3RfcmVtb3ZlX211bHRpX2xpbmVfY29tbWVudHNfZnJvbV9yYW5nZShzZWxm
KToKLSAgICAgICAgbGluZXMgPSBbJ2EnLCAnICAvKiBjb21tZW50ICcsICcgKiBzdGlsbCBjb21t
ZW50JywgJyBjb21tZW50ICovICAgJywgJ2InXQotICAgICAgICBjcHBfc3R5bGUucmVtb3ZlX211
bHRpX2xpbmVfY29tbWVudHNfZnJvbV9yYW5nZShsaW5lcywgMSwgNCkKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoWydhJywgJy8vIGR1bW15JywgJy8vIGR1bW15JywgJy8vIGR1bW15JywgJ2In
XSwgbGluZXMpCi0KLSAgICBkZWYgdGVzdF9zcGFjZXNfYXRfZW5kX29mX2xpbmUoc2VsZik6Ci0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnLy8gSGVsbG8gdGhlcmUgJywK
LSAgICAgICAgICAgICdMaW5lIGVuZHMgaW4gd2hpdGVzcGFjZS4gIENvbnNpZGVyIGRlbGV0aW5n
IHRoZXNlIGV4dHJhIHNwYWNlcy4nCi0gICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9lbmRfb2Zf
bGluZV0gWzRdJykKLQotICAgICMgVGVzdCBDLXN0eWxlIGNhc3QgY2FzZXMuCi0gICAgZGVmIHRl
c3RfY3N0eWxlX2Nhc3Qoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAg
ICAgICAnaW50IGEgPSAoaW50KTEuMDsnLAotICAgICAgICAgICAgJ1VzaW5nIEMtc3R5bGUgY2Fz
dC4gIFVzZSBzdGF0aWNfY2FzdDxpbnQ+KC4uLikgaW5zdGVhZCcKLSAgICAgICAgICAgICcgIFty
ZWFkYWJpbGl0eS9jYXN0aW5nXSBbNF0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAg
ICAgICAgICAgJ2ludCAqYSA9IChpbnQgKilERUZJTkVEX1ZBTFVFOycsCi0gICAgICAgICAgICAn
VXNpbmcgQy1zdHlsZSBjYXN0LiAgVXNlIHJlaW50ZXJwcmV0X2Nhc3Q8aW50ICo+KC4uLikgaW5z
dGVhZCcKLSAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9jYXN0aW5nXSBbNF0nLCAnZm9vLmMn
KQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJ3VpbnQxNiBhID0gKHVp
bnQxNikxLjA7JywKLSAgICAgICAgICAgICdVc2luZyBDLXN0eWxlIGNhc3QuICBVc2Ugc3RhdGlj
X2Nhc3Q8dWludDE2PiguLi4pIGluc3RlYWQnCi0gICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkv
Y2FzdGluZ10gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICdp
bnQzMiBhID0gKGludDMyKTEuMDsnLAotICAgICAgICAgICAgJ1VzaW5nIEMtc3R5bGUgY2FzdC4g
IFVzZSBzdGF0aWNfY2FzdDxpbnQzMj4oLi4uKSBpbnN0ZWFkJwotICAgICAgICAgICAgJyAgW3Jl
YWRhYmlsaXR5L2Nhc3RpbmddIFs0XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAg
ICAgICAgICAndWludDY0IGEgPSAodWludDY0KTEuMDsnLAotICAgICAgICAgICAgJ1VzaW5nIEMt
c3R5bGUgY2FzdC4gIFVzZSBzdGF0aWNfY2FzdDx1aW50NjQ+KC4uLikgaW5zdGVhZCcKLSAgICAg
ICAgICAgICcgIFtyZWFkYWJpbGl0eS9jYXN0aW5nXSBbNF0nKQotCi0gICAgIyBUZXN0IHRha2lu
ZyBhZGRyZXNzIG9mIGNhc3RzIChydW50aW1lL2Nhc3RpbmcpCi0gICAgZGVmIHRlc3RfcnVudGlt
ZV9jYXN0aW5nKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAg
J2ludCogeCA9ICZzdGF0aWNfY2FzdDxpbnQqPihmb28pOycsCi0gICAgICAgICAgICAnQXJlIHlv
dSB0YWtpbmcgYW4gYWRkcmVzcyBvZiBhIGNhc3Q/ICAnCi0gICAgICAgICAgICAnVGhpcyBpcyBk
YW5nZXJvdXM6IGNvdWxkIGJlIGEgdGVtcCB2YXIuICAnCi0gICAgICAgICAgICAnVGFrZSB0aGUg
YWRkcmVzcyBiZWZvcmUgZG9pbmcgdGhlIGNhc3QsIHJhdGhlciB0aGFuIGFmdGVyJwotICAgICAg
ICAgICAgJyAgW3J1bnRpbWUvY2FzdGluZ10gWzRdJykKLQotICAgICAgICBzZWxmLmFzc2VydF9s
aW50KAotICAgICAgICAgICAgJ2ludCogeCA9ICZkeW5hbWljX2Nhc3Q8aW50ICo+KGZvbyk7JywK
LSAgICAgICAgICAgIFsnQXJlIHlvdSB0YWtpbmcgYW4gYWRkcmVzcyBvZiBhIGNhc3Q/ICAnCi0g
ICAgICAgICAgICAgJ1RoaXMgaXMgZGFuZ2Vyb3VzOiBjb3VsZCBiZSBhIHRlbXAgdmFyLiAgJwot
ICAgICAgICAgICAgICdUYWtlIHRoZSBhZGRyZXNzIGJlZm9yZSBkb2luZyB0aGUgY2FzdCwgcmF0
aGVyIHRoYW4gYWZ0ZXInCi0gICAgICAgICAgICAgJyAgW3J1bnRpbWUvY2FzdGluZ10gWzRdJywK
LSAgICAgICAgICAgICAnRG8gbm90IHVzZSBkeW5hbWljX2Nhc3Q8Pi4gIElmIHlvdSBuZWVkIHRv
IGNhc3Qgd2l0aGluIGEgY2xhc3MgJwotICAgICAgICAgICAgICdoaWVyYXJjaHksIHVzZSBzdGF0
aWNfY2FzdDw+IHRvIHVwY2FzdC4gIEdvb2dsZSBkb2VzblwndCBzdXBwb3J0ICcKLSAgICAgICAg
ICAgICAnUlRUSS4gIFtydW50aW1lL3J0dGldIFs1XSddKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0
X2xpbnQoCi0gICAgICAgICAgICAnaW50KiB4ID0gJnJlaW50ZXJwcmV0X2Nhc3Q8aW50ICo+KGZv
byk7JywKLSAgICAgICAgICAgICdBcmUgeW91IHRha2luZyBhbiBhZGRyZXNzIG9mIGEgY2FzdD8g
ICcKLSAgICAgICAgICAgICdUaGlzIGlzIGRhbmdlcm91czogY291bGQgYmUgYSB0ZW1wIHZhci4g
ICcKLSAgICAgICAgICAgICdUYWtlIHRoZSBhZGRyZXNzIGJlZm9yZSBkb2luZyB0aGUgY2FzdCwg
cmF0aGVyIHRoYW4gYWZ0ZXInCi0gICAgICAgICAgICAnICBbcnVudGltZS9jYXN0aW5nXSBbNF0n
KQotCi0gICAgICAgICMgSXQncyBPSyB0byBjYXN0IGFuIGFkZHJlc3MuCi0gICAgICAgIHNlbGYu
YXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnaW50KiB4ID0gcmVpbnRlcnByZXRfY2FzdDxpbnQg
Kj4oJmZvbyk7JywKLSAgICAgICAgICAgICcnKQotCi0gICAgZGVmIHRlc3RfcnVudGltZV9zZWxm
aW5pdChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICdGb286
OkZvbyhCYXIgciwgQmVsIGwpIDogcl8ocl8pLCBsXyhsXykgeyB9JywKLSAgICAgICAgICAgICdZ
b3Ugc2VlbSB0byBiZSBpbml0aWFsaXppbmcgYSBtZW1iZXIgdmFyaWFibGUgd2l0aCBpdHNlbGYu
JwotICAgICAgICAgICAgJyAgW3J1bnRpbWUvaW5pdF0gWzRdJykKLSAgICAgICAgc2VsZi5hc3Nl
cnRfbGludCgKLSAgICAgICAgICAgICdGb286OkZvbyhCYXIgciwgQmVsIGwpIDogcl8ociksIGxf
KGwpIHsgfScsCi0gICAgICAgICAgICAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAg
ICAgICAgICAgICdGb286OkZvbyhCYXIgcikgOiByXyhyKSwgbF8ocl8pLCBsbF8obF8pIHsgfScs
Ci0gICAgICAgICAgICAnJykKLQotICAgIGRlZiB0ZXN0X3J1bnRpbWVfcnR0aShzZWxmKToKLSAg
ICAgICAgc3RhdGVtZW50ID0gJ2ludCogeCA9IGR5bmFtaWNfY2FzdDxpbnQqPigmZm9vKTsnCi0g
ICAgICAgIGVycm9yX21lc3NhZ2UgPSAoCi0gICAgICAgICAgICAnRG8gbm90IHVzZSBkeW5hbWlj
X2Nhc3Q8Pi4gIElmIHlvdSBuZWVkIHRvIGNhc3Qgd2l0aGluIGEgY2xhc3MgJwotICAgICAgICAg
ICAgJ2hpZXJhcmNoeSwgdXNlIHN0YXRpY19jYXN0PD4gdG8gdXBjYXN0LiAgR29vZ2xlIGRvZXNu
XCd0IHN1cHBvcnQgJwotICAgICAgICAgICAgJ1JUVEkuICBbcnVudGltZS9ydHRpXSBbNV0nKQot
ICAgICAgICAjIGR5bmFtaWNfY2FzdCBpcyBkaXNhbGxvd2VkIGluIG1vc3QgZmlsZXMuCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28uY3BwJywgc3RhdGVtZW50
LCBlcnJvcl9tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVj
aygnZm9vLmgnLCBzdGF0ZW1lbnQsIGVycm9yX21lc3NhZ2UpCi0gICAgICAgICMgSXQgaXMgZXhw
bGljaXRseSBhbGxvd2VkIGluIHRlc3RzLCBob3dldmVyLgotICAgICAgICBzZWxmLmFzc2VydF9s
YW5ndWFnZV9ydWxlc19jaGVjaygnZm9vX3Rlc3QuY3BwJywgc3RhdGVtZW50LCAnJykKLSAgICAg
ICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvb191bml0dGVzdC5jcHAnLCBz
dGF0ZW1lbnQsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygn
Zm9vX3JlZ3Rlc3QuY3BwJywgc3RhdGVtZW50LCAnJykKLQotICAgICMgV2UgY2Fubm90IHRlc3Qg
dGhpcyBmdW5jdGlvbmFsaXR5IGJlY2F1c2Ugb2YgZGlmZmVyZW5jZSBvZgotICAgICMgZnVuY3Rp
b24gZGVmaW5pdGlvbnMuICBBbnl3YXksIHdlIG1heSBuZXZlciBlbmFibGUgdGhpcy4KLSAgICAj
Ci0gICAgIyAjIFRlc3QgZm9yIHVubmFtZWQgYXJndW1lbnRzIGluIGEgbWV0aG9kLgotICAgICMg
ZGVmIHRlc3RfY2hlY2tfZm9yX3VubmFtZWRfcGFyYW1zKHNlbGYpOgotICAgICMgICBtZXNzYWdl
ID0gKCdBbGwgcGFyYW1ldGVycyBzaG91bGQgYmUgbmFtZWQgaW4gYSBmdW5jdGlvbicKLSAgICAj
ICAgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvZnVuY3Rpb25dIFszXScpCi0gICAgIyAgIHNl
bGYuYXNzZXJ0X2xpbnQoJ3ZpcnR1YWwgdm9pZCBBKGludCopIGNvbnN0OycsIG1lc3NhZ2UpCi0g
ICAgIyAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3ZpcnR1YWwgdm9pZCBCKHZvaWQgKCpmbikoaW50Kikp
OycsIG1lc3NhZ2UpCi0gICAgIyAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3ZpcnR1YWwgdm9pZCBDKGlu
dCopOycsIG1lc3NhZ2UpCi0gICAgIyAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3ZvaWQgKigqZikodm9p
ZCAqKSA9IHg7JywgbWVzc2FnZSkKLSAgICAjICAgc2VsZi5hc3NlcnRfbGludCgndm9pZCBNZXRo
b2QoY2hhciopIHsnLCBtZXNzYWdlKQotICAgICMgICBzZWxmLmFzc2VydF9saW50KCd2b2lkIE1l
dGhvZChjaGFyKik7JywgbWVzc2FnZSkKLSAgICAjICAgc2VsZi5hc3NlcnRfbGludCgndm9pZCBN
ZXRob2QoY2hhciogLyp4Ki8pOycsIG1lc3NhZ2UpCi0gICAgIyAgIHNlbGYuYXNzZXJ0X2xpbnQo
J3R5cGVkZWYgdm9pZCAoKk1ldGhvZCkoaW50MzIpOycsIG1lc3NhZ2UpCi0gICAgIyAgIHNlbGYu
YXNzZXJ0X2xpbnQoJ3N0YXRpYyB2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqKSB0aHJvdygp
OycsIG1lc3NhZ2UpCi0gICAgIyAKLSAgICAjICAgc2VsZi5hc3NlcnRfbGludCgndmlydHVhbCB2
b2lkIEQoaW50KiBwKTsnLCAnJykKLSAgICAjICAgc2VsZi5hc3NlcnRfbGludCgndm9pZCBvcGVy
YXRvciBkZWxldGUodm9pZCogeCkgdGhyb3coKTsnLCAnJykKLSAgICAjICAgc2VsZi5hc3NlcnRf
bGludCgndm9pZCBNZXRob2QoY2hhciogeClcbnsnLCAnJykKLSAgICAjICAgc2VsZi5hc3NlcnRf
bGludCgndm9pZCBNZXRob2QoY2hhciogLyp4Ki8pXG57JywgJycpCi0gICAgIyAgIHNlbGYuYXNz
ZXJ0X2xpbnQoJ3ZvaWQgTWV0aG9kKGNoYXIqIHgpOycsICcnKQotICAgICMgICBzZWxmLmFzc2Vy
dF9saW50KCd0eXBlZGVmIHZvaWQgKCpNZXRob2QpKGludDMyIHgpOycsICcnKQotICAgICMgICBz
ZWxmLmFzc2VydF9saW50KCdzdGF0aWMgdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiB4KSB0
aHJvdygpOycsICcnKQotICAgICMgICBzZWxmLmFzc2VydF9saW50KCdzdGF0aWMgdm9pZCBvcGVy
YXRvciBkZWxldGVbXSh2b2lkKiAvKngqLykgdGhyb3coKTsnLCAnJykKLSAgICAjIAotICAgICMg
ICAjIFRoaXMgb25lIHNob3VsZCB0ZWNobmljYWxseSB3YXJuLCBidXQgZG9lc24ndCBiZWNhdXNl
IHRoZSBmdW5jdGlvbgotICAgICMgICAjIHBvaW50ZXIgaXMgY29uZnVzaW5nLgotICAgICMgICBz
ZWxmLmFzc2VydF9saW50KCd2aXJ0dWFsIHZvaWQgRSh2b2lkICgqZm4pKGludCogcCkpOycsICcn
KQotCi0gICAgIyBUZXN0IGRlcHJlY2F0ZWQgY2FzdHMgc3VjaCBhcyBpbnQoZCkKLSAgICBkZWYg
dGVzdF9kZXByZWNhdGVkX2Nhc3Qoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0g
ICAgICAgICAgICAnaW50IGEgPSBpbnQoMi4yKTsnLAotICAgICAgICAgICAgJ1VzaW5nIGRlcHJl
Y2F0ZWQgY2FzdGluZyBzdHlsZS4gICcKLSAgICAgICAgICAgICdVc2Ugc3RhdGljX2Nhc3Q8aW50
PiguLi4pIGluc3RlYWQnCi0gICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY2FzdGluZ10gWzRd
JykKLSAgICAgICAgIyBDaGVja3MgZm9yIGZhbHNlIHBvc2l0aXZlcy4uLgotICAgICAgICBzZWxm
LmFzc2VydF9saW50KAotICAgICAgICAgICAgJ2ludCBhID0gaW50KCk7IC8vIENvbnN0cnVjdG9y
LCBvLmsuJywKLSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAg
ICAgICAgICAgJ1g6OlgoKSA6IGEoaW50KCkpIHt9IC8vIGRlZmF1bHQgQ29uc3RydWN0b3IsIG8u
ay4nLAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAg
ICAgICAnb3BlcmF0b3IgYm9vbCgpOyAvLyBDb252ZXJzaW9uIG9wZXJhdG9yLCBvLmsuJywKLSAg
ICAgICAgICAgICcnKQotCi0gICAgIyBUaGUgc2Vjb25kIHBhcmFtZXRlciB0byBhIGdNb2NrIG1l
dGhvZCBkZWZpbml0aW9uIGlzIGEgZnVuY3Rpb24gc2lnbmF0dXJlCi0gICAgIyB0aGF0IG9mdGVu
IGxvb2tzIGxpa2UgYSBiYWQgY2FzdCBidXQgc2hvdWxkIG5vdCBwaWNrZWQgdXAgYnkgbGludC4K
LSAgICBkZWYgdGVzdF9tb2NrX21ldGhvZChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgKLSAgICAgICAgICAgICdNT0NLX01FVEhPRDAobWV0aG9kLCBpbnQoKSk7JywKLSAgICAgICAg
ICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJ01PQ0tfQ09O
U1RfTUVUSE9EMShtZXRob2QsIGZsb2F0KHN0cmluZykpOycsCi0gICAgICAgICAgICAnJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICdNT0NLX0NPTlNUX01FVEhPRDJf
VChtZXRob2QsIGRvdWJsZShmbG9hdCwgZmxvYXQpKTsnLAotICAgICAgICAgICAgJycpCi0KLSAg
ICAjIFRlc3Qgc2l6ZW9mKHR5cGUpIGNhc2VzLgotICAgIGRlZiB0ZXN0X3NpemVvZl90eXBlKHNl
bGYpOgotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJ3NpemVvZihpbnQp
OycsCi0gICAgICAgICAgICAnVXNpbmcgc2l6ZW9mKHR5cGUpLiAgVXNlIHNpemVvZih2YXJuYW1l
KSBpbnN0ZWFkIGlmIHBvc3NpYmxlJwotICAgICAgICAgICAgJyAgW3J1bnRpbWUvc2l6ZW9mXSBb
MV0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJ3NpemVvZihpbnQg
Kik7JywKLSAgICAgICAgICAgICdVc2luZyBzaXplb2YodHlwZSkuICBVc2Ugc2l6ZW9mKHZhcm5h
bWUpIGluc3RlYWQgaWYgcG9zc2libGUnCi0gICAgICAgICAgICAnICBbcnVudGltZS9zaXplb2Zd
IFsxXScpCi0KLSAgICAjIFRlc3QgdHlwZWRlZiBjYXNlcy4gIFRoZXJlIHdhcyBhIGJ1ZyB0aGF0
IGNwcF9zdHlsZSBtaXNpZGVudGlmaWVkCi0gICAgIyB0eXBlZGVmIGZvciBwb2ludGVyIHRvIGZ1
bmN0aW9uIGFzIEMtc3R5bGUgY2FzdCBhbmQgcHJvZHVjZWQKLSAgICAjIGZhbHNlLXBvc2l0aXZl
IGVycm9yIG1lc3NhZ2VzLgotICAgIGRlZiB0ZXN0X3R5cGVkZWZfZm9yX3BvaW50ZXJfdG9fZnVu
Y3Rpb24oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAndHlw
ZWRlZiB2b2lkICgqRnVuYykoaW50IHgpOycsCi0gICAgICAgICAgICAnJykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICd0eXBlZGVmIHZvaWQgKCpGdW5jKShpbnQgKngp
OycsCi0gICAgICAgICAgICAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAg
ICAgICd0eXBlZGVmIHZvaWQgRnVuYyhpbnQgeCk7JywKLSAgICAgICAgICAgICcnKQotICAgICAg
ICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJ3R5cGVkZWYgdm9pZCBGdW5jKGludCAq
eCk7JywKLSAgICAgICAgICAgICcnKQotCi0gICAgZGVmIHRlc3RfaW5jbHVkZV93aGF0X3lvdV91
c2Vfbm9faW1wbGVtZW50YXRpb25fZmlsZXMoc2VsZik6Ci0gICAgICAgIGNvZGUgPSAnc3RkOjp2
ZWN0b3I8aW50PiBmb287JwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnQWRkICNpbmNsdWRl
IDx2ZWN0b3I+IGZvciB2ZWN0b3I8PicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgW2J1
aWxkL2luY2x1ZGVfd2hhdF95b3VfdXNlXSBbNF0nLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLnBlcmZvcm1faW5jbHVkZV93aGF0X3lvdV91c2UoY29kZSwgJ2Zvby5oJykpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
LnBlcmZvcm1faW5jbHVkZV93aGF0X3lvdV91c2UoY29kZSwgJ2Zvby5jcHAnKSkKLQotICAgIGRl
ZiB0ZXN0X2luY2x1ZGVfd2hhdF95b3VfdXNlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9p
bmNsdWRlX3doYXRfeW91X3VzZSgKLSAgICAgICAgICAgICcnJyNpbmNsdWRlIDx2ZWN0b3I+Ci0g
ICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxpbnQ+IGZvbzsKLSAgICAgICAgICAgICcnJywKLSAg
ICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9pbmNsdWRlX3doYXRfeW91X3VzZSgK
LSAgICAgICAgICAgICcnJyNpbmNsdWRlIDxtYXA+Ci0gICAgICAgICAgICAgICBzdGQ6OnBhaXI8
aW50LGludD4gZm9vOwotICAgICAgICAgICAgJycnLAotICAgICAgICAgICAgJycpCi0gICAgICAg
IHNlbGYuYXNzZXJ0X2luY2x1ZGVfd2hhdF95b3VfdXNlKAotICAgICAgICAgICAgJycnI2luY2x1
ZGUgPG11bHRpbWFwPgotICAgICAgICAgICAgICAgc3RkOjpwYWlyPGludCxpbnQ+IGZvbzsKLSAg
ICAgICAgICAgICcnJywKLSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9pbmNs
dWRlX3doYXRfeW91X3VzZSgKLSAgICAgICAgICAgICcnJyNpbmNsdWRlIDxoYXNoX21hcD4KLSAg
ICAgICAgICAgICAgIHN0ZDo6cGFpcjxpbnQsaW50PiBmb287Ci0gICAgICAgICAgICAnJycsCi0g
ICAgICAgICAgICAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfaW5jbHVkZV93aGF0X3lvdV91c2Uo
Ci0gICAgICAgICAgICAnJycjaW5jbHVkZSA8dXRpbGl0eT4KLSAgICAgICAgICAgICAgIHN0ZDo6
cGFpcjxpbnQsaW50PiBmb287Ci0gICAgICAgICAgICAnJycsCi0gICAgICAgICAgICAnJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRfaW5jbHVkZV93aGF0X3lvdV91c2UoCi0gICAgICAgICAgICAnJycj
aW5jbHVkZSA8dmVjdG9yPgotICAgICAgICAgICAgICAgREVDTEFSRV9zdHJpbmcoZm9vYmFyKTsK
LSAgICAgICAgICAgICcnJywKLSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9p
bmNsdWRlX3doYXRfeW91X3VzZSgKLSAgICAgICAgICAgICcnJyNpbmNsdWRlIDx2ZWN0b3I+Ci0g
ICAgICAgICAgICAgICBERUZJTkVfc3RyaW5nKGZvb2JhciwgIiIsICIiKTsKLSAgICAgICAgICAg
ICcnJywKLSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9pbmNsdWRlX3doYXRf
eW91X3VzZSgKLSAgICAgICAgICAgICcnJyNpbmNsdWRlIDx2ZWN0b3I+Ci0gICAgICAgICAgICAg
ICBzdGQ6OnBhaXI8aW50LGludD4gZm9vOwotICAgICAgICAgICAgJycnLAotICAgICAgICAgICAg
J0FkZCAjaW5jbHVkZSA8dXRpbGl0eT4gZm9yIHBhaXI8PicKLSAgICAgICAgICAgICcgIFtidWls
ZC9pbmNsdWRlX3doYXRfeW91X3VzZV0gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfaW5jbHVk
ZV93aGF0X3lvdV91c2UoCi0gICAgICAgICAgICAnJycjaW5jbHVkZSAiYmFzZS9mb29iYXIuaCIK
LSAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGludD4gZm9vOwotICAgICAgICAgICAgJycnLAot
ICAgICAgICAgICAgJ0FkZCAjaW5jbHVkZSA8dmVjdG9yPiBmb3IgdmVjdG9yPD4nCi0gICAgICAg
ICAgICAnICBbYnVpbGQvaW5jbHVkZV93aGF0X3lvdV91c2VdIFs0XScpCi0gICAgICAgIHNlbGYu
YXNzZXJ0X2luY2x1ZGVfd2hhdF95b3VfdXNlKAotICAgICAgICAgICAgJycnI2luY2x1ZGUgPHZl
Y3Rvcj4KLSAgICAgICAgICAgICAgIHN0ZDo6c2V0PGludD4gZm9vOwotICAgICAgICAgICAgJycn
LAotICAgICAgICAgICAgJ0FkZCAjaW5jbHVkZSA8c2V0PiBmb3Igc2V0PD4nCi0gICAgICAgICAg
ICAnICBbYnVpbGQvaW5jbHVkZV93aGF0X3lvdV91c2VdIFs0XScpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X2luY2x1ZGVfd2hhdF95b3VfdXNlKAotICAgICAgICAgICAgJycnI2luY2x1ZGUgImJhc2Uv
Zm9vYmFyLmgiCi0gICAgICAgICAgICAgIGhhc2hfbWFwPGludCwgaW50PiBmb29iYXI7Ci0gICAg
ICAgICAgICAnJycsCi0gICAgICAgICAgICAnQWRkICNpbmNsdWRlIDxoYXNoX21hcD4gZm9yIGhh
c2hfbWFwPD4nCi0gICAgICAgICAgICAnICBbYnVpbGQvaW5jbHVkZV93aGF0X3lvdV91c2VdIFs0
XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2luY2x1ZGVfd2hhdF95b3VfdXNlKAotICAgICAgICAg
ICAgJycnI2luY2x1ZGUgImJhc2UvZm9vYmFyLmgiCi0gICAgICAgICAgICAgICBib29sIGZvb2Jh
ciA9IHN0ZDo6bGVzczxpbnQ+KDAsMSk7Ci0gICAgICAgICAgICAnJycsCi0gICAgICAgICAgICAn
QWRkICNpbmNsdWRlIDxmdW5jdGlvbmFsPiBmb3IgbGVzczw+JwotICAgICAgICAgICAgJyAgW2J1
aWxkL2luY2x1ZGVfd2hhdF95b3VfdXNlXSBbNF0nKQotICAgICAgICBzZWxmLmFzc2VydF9pbmNs
dWRlX3doYXRfeW91X3VzZSgKLSAgICAgICAgICAgICcnJyNpbmNsdWRlICJiYXNlL2Zvb2Jhci5o
IgotICAgICAgICAgICAgICAgYm9vbCBmb29iYXIgPSBtaW48aW50PigwLDEpOwotICAgICAgICAg
ICAgJycnLAotICAgICAgICAgICAgJ0FkZCAjaW5jbHVkZSA8YWxnb3JpdGhtPiBmb3IgbWluICBb
YnVpbGQvaW5jbHVkZV93aGF0X3lvdV91c2VdIFs0XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2lu
Y2x1ZGVfd2hhdF95b3VfdXNlKAotICAgICAgICAgICAgJ3ZvaWQgYShjb25zdCBzdHJpbmcgJmZv
b2Jhcik7JywKLSAgICAgICAgICAgICdBZGQgI2luY2x1ZGUgPHN0cmluZz4gZm9yIHN0cmluZyAg
W2J1aWxkL2luY2x1ZGVfd2hhdF95b3VfdXNlXSBbNF0nKQotICAgICAgICBzZWxmLmFzc2VydF9p
bmNsdWRlX3doYXRfeW91X3VzZSgKLSAgICAgICAgICAgICcnJyNpbmNsdWRlICJiYXNlL2Zvb2Jh
ci5oIgotICAgICAgICAgICAgICAgYm9vbCBmb29iYXIgPSBzd2FwKDAsMSk7Ci0gICAgICAgICAg
ICAnJycsCi0gICAgICAgICAgICAnQWRkICNpbmNsdWRlIDxhbGdvcml0aG0+IGZvciBzd2FwICBb
YnVpbGQvaW5jbHVkZV93aGF0X3lvdV91c2VdIFs0XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2lu
Y2x1ZGVfd2hhdF95b3VfdXNlKAotICAgICAgICAgICAgJycnI2luY2x1ZGUgImJhc2UvZm9vYmFy
LmgiCi0gICAgICAgICAgICAgICBib29sIGZvb2JhciA9IHRyYW5zZm9ybShhLmJlZ2luKCksIGEu
ZW5kKCksIGIuc3RhcnQoKSwgRm9vKTsKLSAgICAgICAgICAgICcnJywKLSAgICAgICAgICAgICdB
ZGQgI2luY2x1ZGUgPGFsZ29yaXRobT4gZm9yIHRyYW5zZm9ybSAgJwotICAgICAgICAgICAgJ1ti
dWlsZC9pbmNsdWRlX3doYXRfeW91X3VzZV0gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfaW5j
bHVkZV93aGF0X3lvdV91c2UoCi0gICAgICAgICAgICAnJycjaW5jbHVkZSAiYmFzZS9mb29iYXIu
aCIKLSAgICAgICAgICAgICAgIGJvb2wgZm9vYmFyID0gbWluX2VsZW1lbnQoYS5iZWdpbigpLCBh
LmVuZCgpKTsKLSAgICAgICAgICAgICcnJywKLSAgICAgICAgICAgICdBZGQgI2luY2x1ZGUgPGFs
Z29yaXRobT4gZm9yIG1pbl9lbGVtZW50ICAnCi0gICAgICAgICAgICAnW2J1aWxkL2luY2x1ZGVf
d2hhdF95b3VfdXNlXSBbNF0nKQotICAgICAgICBzZWxmLmFzc2VydF9pbmNsdWRlX3doYXRfeW91
X3VzZSgKLSAgICAgICAgICAgICcnJ2Zvby0+c3dhcCgwLDEpOwotICAgICAgICAgICAgICAgZm9v
LnN3YXAoMCwxKTsKLSAgICAgICAgICAgICcnJywKLSAgICAgICAgICAgICcnKQotICAgICAgICBz
ZWxmLmFzc2VydF9pbmNsdWRlX3doYXRfeW91X3VzZSgKLSAgICAgICAgICAgICcnJyNpbmNsdWRl
IDxzdHJpbmc+Ci0gICAgICAgICAgICAgICB2b2lkIGEoY29uc3Qgc3RkOjptdWx0aW1hcDxpbnQs
c3RyaW5nPiAmZm9vYmFyKTsKLSAgICAgICAgICAgICcnJywKLSAgICAgICAgICAgICdBZGQgI2lu
Y2x1ZGUgPG1hcD4gZm9yIG11bHRpbWFwPD4nCi0gICAgICAgICAgICAnICBbYnVpbGQvaW5jbHVk
ZV93aGF0X3lvdV91c2VdIFs0XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2luY2x1ZGVfd2hhdF95
b3VfdXNlKAotICAgICAgICAgICAgJycnI2luY2x1ZGUgPHF1ZXVlPgotICAgICAgICAgICAgICAg
dm9pZCBhKGNvbnN0IHN0ZDo6cHJpb3JpdHlfcXVldWU8aW50PiAmZm9vYmFyKTsKLSAgICAgICAg
ICAgICcnJywKLSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9pbmNsdWRlX3do
YXRfeW91X3VzZSgKLSAgICAgICAgICAgICAnJycjaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgi
Ci0gICAgICAgICAgICAgICAgI2luY2x1ZGUgImJhc2UvcG9ydC5oIgotICAgICAgICAgICAgICAg
ICNpbmNsdWRlIDxhc3NlcnQuaD4KLSAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3RyaW5nPgot
ICAgICAgICAgICAgICAgICNpbmNsdWRlIDx2ZWN0b3I+Ci0gICAgICAgICAgICAgICAgdmVjdG9y
PHN0cmluZz4gaGFqb2E7JycnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfaW5jbHVkZV93aGF0
X3lvdV91c2UoCi0gICAgICAgICAgICAnJycjaW5jbHVkZSA8c3RyaW5nPgotICAgICAgICAgICAg
ICAgaW50IGkgPSBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKQotICAgICAgICAgICAgJycnLAot
ICAgICAgICAgICAgJ0FkZCAjaW5jbHVkZSA8bGltaXRzPiBmb3IgbnVtZXJpY19saW1pdHM8PicK
LSAgICAgICAgICAgICcgIFtidWlsZC9pbmNsdWRlX3doYXRfeW91X3VzZV0gWzRdJykKLSAgICAg
ICAgc2VsZi5hc3NlcnRfaW5jbHVkZV93aGF0X3lvdV91c2UoCi0gICAgICAgICAgICAnJycjaW5j
bHVkZSA8bGltaXRzPgotICAgICAgICAgICAgICAgaW50IGkgPSBudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKQotICAgICAgICAgICAgJycnLAotICAgICAgICAgICAgJycpCi0KLSAgICAgICAgIyBU
ZXN0IHRoZSBVcGRhdGVJbmNsdWRlU3RhdGUgY29kZSBwYXRoLgotICAgICAgICBtb2NrX2hlYWRl
cl9jb250ZW50cyA9IFsnI2luY2x1ZGUgImJsYWgvZm9vLmgiJywgJyNpbmNsdWRlICJibGFoL2Jh
ci5oIiddCi0gICAgICAgIG1lc3NhZ2UgPSBzZWxmLnBlcmZvcm1faW5jbHVkZV93aGF0X3lvdV91
c2UoCi0gICAgICAgICAgICAnI2luY2x1ZGUgImNvbmZpZy5oIlxuJwotICAgICAgICAgICAgJyNp
bmNsdWRlICJibGFoL2EuaCJcbicsCi0gICAgICAgICAgICBmaWxlbmFtZT0nYmxhaC9hLmNwcCcs
Ci0gICAgICAgICAgICBpbz1Nb2NrSW8obW9ja19oZWFkZXJfY29udGVudHMpKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhtZXNzYWdlLCAnJykKLQotICAgICAgICBtb2NrX2hlYWRlcl9jb250
ZW50cyA9IFsnI2luY2x1ZGUgPHNldD4nXQotICAgICAgICBtZXNzYWdlID0gc2VsZi5wZXJmb3Jt
X2luY2x1ZGVfd2hhdF95b3VfdXNlKAotICAgICAgICAgICAgJycnI2luY2x1ZGUgImNvbmZpZy5o
IgotICAgICAgICAgICAgICAgI2luY2x1ZGUgImJsYWgvYS5oIgotCi0gICAgICAgICAgICAgICBz
dGQ6OnNldDxpbnQ+IGZvbzsnJycsCi0gICAgICAgICAgICBmaWxlbmFtZT0nYmxhaC9hLmNwcCcs
Ci0gICAgICAgICAgICBpbz1Nb2NrSW8obW9ja19oZWFkZXJfY29udGVudHMpKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhtZXNzYWdlLCAnJykKLQotICAgICAgICAjIElmIHRoZXJlJ3MganVz
dCBhIC5jcHAgYW5kIHRoZSBoZWFkZXIgY2FuJ3QgYmUgZm91bmQgdGhlbiBpdCdzIG9rLgotICAg
ICAgICBtZXNzYWdlID0gc2VsZi5wZXJmb3JtX2luY2x1ZGVfd2hhdF95b3VfdXNlKAotICAgICAg
ICAgICAgJycnI2luY2x1ZGUgImNvbmZpZy5oIgotICAgICAgICAgICAgICAgI2luY2x1ZGUgImJs
YWgvYS5oIgotCi0gICAgICAgICAgICAgICBzdGQ6OnNldDxpbnQ+IGZvbzsnJycsCi0gICAgICAg
ICAgICBmaWxlbmFtZT0nYmxhaC9hLmNwcCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1l
c3NhZ2UsICcnKQotCi0gICAgICAgICMgTWFrZSBzdXJlIHdlIGZpbmQgdGhlIGhlYWRlcnMgd2l0
aCByZWxhdGl2ZSBwYXRocy4KLSAgICAgICAgbW9ja19oZWFkZXJfY29udGVudHMgPSBbJyddCi0g
ICAgICAgIG1lc3NhZ2UgPSBzZWxmLnBlcmZvcm1faW5jbHVkZV93aGF0X3lvdV91c2UoCi0gICAg
ICAgICAgICAnJycjaW5jbHVkZSAiY29uZmlnLmgiCi0gICAgICAgICAgICAgICAjaW5jbHVkZSAi
JXMvYS5oIgotCi0gICAgICAgICAgICAgICBzdGQ6OnNldDxpbnQ+IGZvbzsnJycgJSBvcy5wYXRo
LmJhc2VuYW1lKG9zLmdldGN3ZCgpKSwKLSAgICAgICAgICAgIGZpbGVuYW1lPSdhLmNwcCcsCi0g
ICAgICAgICAgICBpbz1Nb2NrSW8obW9ja19oZWFkZXJfY29udGVudHMpKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhtZXNzYWdlLCAnQWRkICNpbmNsdWRlIDxzZXQ+IGZvciBzZXQ8PiAgJwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnW2J1aWxkL2luY2x1ZGVfd2hhdF95
b3VfdXNlXSBbNF0nKQotCi0gICAgZGVmIHRlc3RfZmlsZXNfYmVsb25nX3RvX3NhbWVfbW9kdWxl
KHNlbGYpOgotICAgICAgICBmID0gY3BwX3N0eWxlLmZpbGVzX2JlbG9uZ190b19zYW1lX21vZHVs
ZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoVHJ1ZSwgJycpLCBmKCdhLmNwcCcsICdhLmgn
KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKFRydWUsICcnKSwgZignYmFzZS9nb29nbGUu
Y3BwJywgJ2Jhc2UvZ29vZ2xlLmgnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKFRydWUs
ICcnKSwgZignYmFzZS9nb29nbGVfdGVzdC5jcHAnLCAnYmFzZS9nb29nbGUuaCcpKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscygoVHJ1ZSwgJycpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBmKCdiYXNlL2dvb2dsZV91bml0dGVzdC5jcHAnLCAnYmFzZS9nb29nbGUuaCcpKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscygoVHJ1ZSwgJycpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBmKCdiYXNlL2ludGVybmFsL2dvb2dsZV91bml0dGVzdC5jcHAnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdiYXNlL3B1YmxpYy9nb29nbGUuaCcpKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscygoVHJ1ZSwgJ3h4eC95eXkvJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGYo
J3h4eC95eXkvYmFzZS9pbnRlcm5hbC9nb29nbGVfdW5pdHRlc3QuY3BwJywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnYmFzZS9wdWJsaWMvZ29vZ2xlLmgnKSkKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoKFRydWUsICd4eHgveXl5LycpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBmKCd4eHgveXl5L2Jhc2UvZ29vZ2xlX3VuaXR0ZXN0LmNwcCcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ2Jhc2UvcHVibGljL2dvb2dsZS5oJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKChUcnVlLCAnJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGYoJ2Jhc2UvZ29v
Z2xlX3VuaXR0ZXN0LmNwcCcsICdiYXNlL2dvb2dsZS1pbmwuaCcpKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFscygoVHJ1ZSwgJy9ob21lL2J1aWxkL2dvb2dsZTMvJyksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIGYoJy9ob21lL2J1aWxkL2dvb2dsZTMvYmFzZS9nb29nbGUuY3BwJywgJ2Jh
c2UvZ29vZ2xlLmgnKSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoRmFsc2UsICcnKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgZignL2hvbWUvYnVpbGQvZ29vZ2xlMy9iYXNlL2dv
b2dsZS5jcHAnLCAnYmFzdS9nb29nbGUuaCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygo
RmFsc2UsICcnKSwgZignYS5jcHAnLCAnYi5oJykpCi0KLSAgICBkZWYgdGVzdF9jbGVhbnNlX2xp
bmUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdpbnQgZm9vID0gMDsgICcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIGNwcF9zdHlsZS5jbGVhbnNlX2NvbW1lbnRzKCdpbnQg
Zm9vID0gMDsgIC8vIGRhbmdlciEnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ2ludCBv
ID0gMDsnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjcHBfc3R5bGUuY2xlYW5zZV9jb21t
ZW50cygnaW50IC8qIGZvbyAqLyBvID0gMDsnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
J2ZvbyhpbnQgYSwgaW50IGIpOycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNwcF9zdHls
ZS5jbGVhbnNlX2NvbW1lbnRzKCdmb28oaW50IGEgLyogYWJjICovLCBpbnQgYik7JykpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2YoYSwgYik7JywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBjcHBfc3R5bGUuY2xlYW5zZV9jb21tZW50cygnZihhLCAvKiBuYW1lICovIGIpOycpKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdmKGEsIGIpOycsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgY3BwX3N0eWxlLmNsZWFuc2VfY29tbWVudHMoJ2YoYSAvKiBuYW1lICovLCBiKTsnKSkKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZihhLCBiKTsnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIGNwcF9zdHlsZS5jbGVhbnNlX2NvbW1lbnRzKCdmKGEsIC8qIG5hbWUgKi9iKTsnKSkKLQot
ICAgIGRlZiB0ZXN0X211bHRpX2xpbmVfY29tbWVudHMoc2VsZik6Ci0gICAgICAgICMgbWlzc2lu
ZyBleHBsaWNpdCBpcyBiYWQKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAot
ICAgICAgICAgICAgcicnJ2ludCBhID0gMDsKLSAgICAgICAgICAgICAgICAvKiBtdWx0aS1saW5l
cgotICAgICAgICAgICAgICAgIGNsYXNzIEZvbyB7Ci0gICAgICAgICAgICAgICAgRm9vKGludCBm
KTsgIC8vIHNob3VsZCBjYXVzZSBhIGxpbnQgd2FybmluZyBpbiBjb2RlCi0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgKi8gJycnLAotICAgICAgICAnJykKLSAgICAgICAgc2VsZi5hc3Nl
cnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgcicnJy8qIGludCBhID0gMDsgbXVsdGkt
bGluZXIKLSAgICAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgYiA9IDA7JycnLAotICAgICAgJ0Nv
dWxkIG5vdCBmaW5kIGVuZCBvZiBtdWx0aS1saW5lIGNvbW1lbnQnCi0gICAgICAnICBbcmVhZGFi
aWxpdHkvbXVsdGlsaW5lX2NvbW1lbnRdIFs1XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRp
X2xpbmVfbGludChyJycnICAgIC8qIG11bHRpLWxpbmUgY29tbWVudCcnJywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdDb3VsZCBub3QgZmluZCBlbmQgb2YgbXVsdGktbGlu
ZSBjb21tZW50JwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3JlYWRh
YmlsaXR5L211bHRpbGluZV9jb21tZW50XSBbNV0nKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0
aV9saW5lX2xpbnQocicnJyAgICAvLyAvKiBjb21tZW50LCBidXQgbm90IG11bHRpLWxpbmUnJycs
ICcnKQotCi0gICAgZGVmIHRlc3RfbXVsdGlsaW5lX3N0cmluZ3Moc2VsZik6Ci0gICAgICAgIG11
bHRpbGluZV9zdHJpbmdfZXJyb3JfbWVzc2FnZSA9ICgKLSAgICAgICAgICAgICdNdWx0aS1saW5l
IHN0cmluZyAoIi4uLiIpIGZvdW5kLiAgVGhpcyBsaW50IHNjcmlwdCBkb2VzblwndCAnCi0gICAg
ICAgICAgICAnZG8gd2VsbCB3aXRoIHN1Y2ggc3RyaW5ncywgYW5kIG1heSBnaXZlIGJvZ3VzIHdh
cm5pbmdzLiAgVGhleVwncmUgJwotICAgICAgICAgICAgJ3VnbHkgYW5kIHVubmVjZXNzYXJ5LCBh
bmQgeW91IHNob3VsZCB1c2UgY29uY2F0ZW5hdGlvbiBpbnN0ZWFkIi4nCi0gICAgICAgICAgICAn
ICBbcmVhZGFiaWxpdHkvbXVsdGlsaW5lX3N0cmluZ10gWzVdJykKLQotICAgICAgICBmaWxlX3Bh
dGggPSAnbXlkaXIvZm9vLmNwcCcKLQotICAgICAgICBlcnJvcl9jb2xsZWN0b3IgPSBFcnJvckNv
bGxlY3RvcihzZWxmLmFzc2VydF8pCi0gICAgICAgIGNwcF9zdHlsZS5wcm9jZXNzX2ZpbGVfZGF0
YShmaWxlX3BhdGgsICdjcHAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Wydjb25zdCBjaGFyKiBzdHIgPSAiVGhpcyBpcyBhXFwnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICcgbXVsdGlsaW5lIHN0cmluZy4iOyddLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29sbGVjdG9yKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscygKLSAgICAgICAgICAgIDIsICAjIE9uZSBwZXIgbGluZS4KLSAgICAgICAgICAgIGVy
cm9yX2NvbGxlY3Rvci5yZXN1bHRfbGlzdCgpLmNvdW50KG11bHRpbGluZV9zdHJpbmdfZXJyb3Jf
bWVzc2FnZSkpCi0KLSAgICAjIFRlc3Qgbm9uLWV4cGxpY2l0IHNpbmdsZS1hcmd1bWVudCBjb25z
dHJ1Y3RvcnMKLSAgICBkZWYgdGVzdF9leHBsaWNpdF9zaW5nbGVfYXJndW1lbnRfY29uc3RydWN0
b3JzKHNlbGYpOgotICAgICAgICAjIG1pc3NpbmcgZXhwbGljaXQgaXMgYmFkCi0gICAgICAgIHNl
bGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICcnJ2NsYXNzIEZvbyB7Ci0g
ICAgICAgICAgICAgICAgIEZvbyhpbnQgZik7Ci0gICAgICAgICAgICAgICB9OycnJywKLSAgICAg
ICAgICAgICdTaW5nbGUtYXJndW1lbnQgY29uc3RydWN0b3JzIHNob3VsZCBiZSBtYXJrZWQgZXhw
bGljaXQuJwotICAgICAgICAgICAgJyAgW3J1bnRpbWUvZXhwbGljaXRdIFs1XScpCi0gICAgICAg
ICMgbWlzc2luZyBleHBsaWNpdCBpcyBiYWQsIGV2ZW4gd2l0aCB3aGl0ZXNwYWNlCi0gICAgICAg
IHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICcnJ2NsYXNzIEZvbyB7
Ci0gICAgICAgICAgICAgICAgIEZvbyAoaW50IGYpOwotICAgICAgICAgICAgICAgfTsnJycsCi0g
ICAgICAgICAgICBbJ0V4dHJhIHNwYWNlIGJlZm9yZSAoIGluIGZ1bmN0aW9uIGNhbGwgIFt3aGl0
ZXNwYWNlL3BhcmVuc10gWzRdJywKLSAgICAgICAgICAgICAnU2luZ2xlLWFyZ3VtZW50IGNvbnN0
cnVjdG9ycyBzaG91bGQgYmUgbWFya2VkIGV4cGxpY2l0LicKLSAgICAgICAgICAgICAnICBbcnVu
dGltZS9leHBsaWNpdF0gWzVdJ10pCi0gICAgICAgICMgbWlzc2luZyBleHBsaWNpdCwgd2l0aCBk
aXN0cmFjdGluZyBjb21tZW50LCBpcyBzdGlsbCBiYWQKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVs
dGlfbGluZV9saW50KAotICAgICAgICAgICAgJycnY2xhc3MgRm9vIHsKLSAgICAgICAgICAgICAg
ICAgRm9vKGludCBmKTsgLy8gc2ltcGxlciB0aGFuIEZvbyhibGFyZ2gsIGJsYXJnKQotICAgICAg
ICAgICAgICAgfTsnJycsCi0gICAgICAgICAgICAnU2luZ2xlLWFyZ3VtZW50IGNvbnN0cnVjdG9y
cyBzaG91bGQgYmUgbWFya2VkIGV4cGxpY2l0LicKLSAgICAgICAgICAgICcgIFtydW50aW1lL2V4
cGxpY2l0XSBbNV0nKQotICAgICAgICAjIG1pc3NpbmcgZXhwbGljaXQsIHdpdGggcXVhbGlmaWVk
IGNsYXNzbmFtZQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAg
ICAgICAnJydjbGFzcyBRdWFsaWZpZXI6OkFub3RoZXJPbmU6OkZvbyB7Ci0gICAgICAgICAgICAg
ICAgIEZvbyhpbnQgZik7Ci0gICAgICAgICAgICAgICB9OycnJywKLSAgICAgICAgICAgICdTaW5n
bGUtYXJndW1lbnQgY29uc3RydWN0b3JzIHNob3VsZCBiZSBtYXJrZWQgZXhwbGljaXQuJwotICAg
ICAgICAgICAgJyAgW3J1bnRpbWUvZXhwbGljaXRdIFs1XScpCi0gICAgICAgICMgc3RydWN0cyBh
cmUgY2F1Z2h0IGFzIHdlbGwuCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgK
LSAgICAgICAgICAgICcnJ3N0cnVjdCBGb28gewotICAgICAgICAgICAgICAgICBGb28oaW50IGYp
OwotICAgICAgICAgICAgICAgfTsnJycsCi0gICAgICAgICAgICAnU2luZ2xlLWFyZ3VtZW50IGNv
bnN0cnVjdG9ycyBzaG91bGQgYmUgbWFya2VkIGV4cGxpY2l0LicKLSAgICAgICAgICAgICcgIFty
dW50aW1lL2V4cGxpY2l0XSBbNV0nKQotICAgICAgICAjIFRlbXBsYXRpemVkIGNsYXNzZXMgYXJl
IGNhdWdodCBhcyB3ZWxsLgotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0g
ICAgICAgICAgICAnJyd0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBGb28gewotICAgICAgICAg
ICAgICAgICBGb28oaW50IGYpOwotICAgICAgICAgICAgICAgfTsnJycsCi0gICAgICAgICAgICAn
U2luZ2xlLWFyZ3VtZW50IGNvbnN0cnVjdG9ycyBzaG91bGQgYmUgbWFya2VkIGV4cGxpY2l0LicK
LSAgICAgICAgICAgICcgIFtydW50aW1lL2V4cGxpY2l0XSBbNV0nKQotICAgICAgICAjIHByb3Bl
ciBzdHlsZSBpcyBva2F5Ci0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAg
ICAgICAgICAgICcnJ2NsYXNzIEZvbyB7Ci0gICAgICAgICAgICAgICAgIGV4cGxpY2l0IEZvbyhp
bnQgZik7Ci0gICAgICAgICAgICAgICB9OycnJywKLSAgICAgICAgICAgICcnKQotICAgICAgICAj
IHR3byBhcmd1bWVudCBjb25zdHJ1Y3RvciBpcyBva2F5Ci0gICAgICAgIHNlbGYuYXNzZXJ0X211
bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICcnJ2NsYXNzIEZvbyB7Ci0gICAgICAgICAgICAg
ICAgIEZvbyhpbnQgZiwgaW50IGIpOwotICAgICAgICAgICAgICAgfTsnJycsCi0gICAgICAgICAg
ICAnJykKLSAgICAgICAgIyB0d28gYXJndW1lbnQgY29uc3RydWN0b3IsIGFjcm9zcyB0d28gbGlu
ZXMsIGlzIG9rYXkKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAg
ICAgICAgJycnY2xhc3MgRm9vIHsKLSAgICAgICAgICAgICAgICAgRm9vKGludCBmLAotICAgICAg
ICAgICAgICAgICAgICAgaW50IGIpOwotICAgICAgICAgICAgICAgfTsnJycsCi0gICAgICAgICAg
ICAnJykKLSAgICAgICAgIyBub24tY29uc3RydWN0b3IgKGJ1dCBzaW1pbGFyIG5hbWUpLCBpcyBv
a2F5Ci0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICcn
J2NsYXNzIEZvbyB7Ci0gICAgICAgICAgICAgICAgIGFGb28oaW50IGYpOwotICAgICAgICAgICAg
ICAgfTsnJycsCi0gICAgICAgICAgICAnJykKLSAgICAgICAgIyBjb25zdHJ1Y3RvciB3aXRoIHZv
aWQgYXJndW1lbnQgaXMgb2theQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQo
Ci0gICAgICAgICAgICAnJydjbGFzcyBGb28gewotICAgICAgICAgICAgICAgICBGb28odm9pZCk7
Ci0gICAgICAgICAgICAgICB9OycnJywKLSAgICAgICAgICAgICcnKQotICAgICAgICAjIHNpbmds
ZSBhcmd1bWVudCBtZXRob2QgaXMgb2theQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5l
X2xpbnQoCi0gICAgICAgICAgICAnJydjbGFzcyBGb28gewotICAgICAgICAgICAgICAgICBCYXIo
aW50IGIpOwotICAgICAgICAgICAgICAgfTsnJycsCi0gICAgICAgICAgICAnJykKLSAgICAgICAg
IyBjb21tZW50cyBzaG91bGQgYmUgaWdub3JlZAotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9s
aW5lX2xpbnQoCi0gICAgICAgICAgICAnJydjbGFzcyBGb28gewotICAgICAgICAgICAgICAgLy8g
Rm9vKGludCBmKTsKLSAgICAgICAgICAgICAgIH07JycnLAotICAgICAgICAgICAgJycpCi0gICAg
ICAgICMgc2luZ2xlIGFyZ3VtZW50IGZ1bmN0aW9uIGZvbGxvd2luZyBjbGFzcyBkZWZpbml0aW9u
IGlzIG9rYXkKLSAgICAgICAgIyAob2theSwgaXQncyBub3QgYWN0dWFsbHkgdmFsaWQsIGJ1dCB3
ZSBkb24ndCB3YW50IGEgZmFsc2UgcG9zaXRpdmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRp
X2xpbmVfbGludCgKLSAgICAgICAgICAgICcnJ2NsYXNzIEZvbyB7Ci0gICAgICAgICAgICAgICAg
IEZvbyhpbnQgZiwgaW50IGIpOwotICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgIEZv
byhpbnQgZik7JycnLAotICAgICAgICAgICAgJycpCi0gICAgICAgICMgc2luZ2xlIGFyZ3VtZW50
IGZ1bmN0aW9uIGlzIG9rYXkKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAot
ICAgICAgICAgICAgJycnc3RhdGljIEZvbyhpbnQgZik7JycnLAotICAgICAgICAgICAgJycpCi0g
ICAgICAgICMgc2luZ2xlIGFyZ3VtZW50IGNvcHkgY29uc3RydWN0b3IgaXMgb2theS4KLSAgICAg
ICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJycnY2xhc3MgRm9v
IHsKLSAgICAgICAgICAgICAgICAgRm9vKGNvbnN0IEZvbyYpOwotICAgICAgICAgICAgICAgfTsn
JycsCi0gICAgICAgICAgICAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50
KAotICAgICAgICAgICAgJycnY2xhc3MgRm9vIHsKLSAgICAgICAgICAgICAgICAgRm9vKEZvbyYp
OwotICAgICAgICAgICAgICAgfTsnJycsCi0gICAgICAgICAgICAnJykKLQotICAgIGRlZiB0ZXN0
X3NsYXNoX3N0YXJfY29tbWVudF9vbl9zaW5nbGVfbGluZShzZWxmKToKLSAgICAgICAgc2VsZi5h
c3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJycnLyogc3RhdGljICovIEZvbyhp
bnQgZik7JycnLAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xp
bmVfbGludCgKLSAgICAgICAgICAgICcnJy8qLyBzdGF0aWMgKi8gIEZvbyhpbnQgZik7JycnLAot
ICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAg
ICAgICAgICAgICcnJy8qLyBzdGF0aWMgRm9vKGludCBmKTsnJycsCi0gICAgICAgICAgICAnQ291
bGQgbm90IGZpbmQgZW5kIG9mIG11bHRpLWxpbmUgY29tbWVudCcKLSAgICAgICAgICAgICcgIFty
ZWFkYWJpbGl0eS9tdWx0aWxpbmVfY29tbWVudF0gWzVdJykKLSAgICAgICAgc2VsZi5hc3NlcnRf
bXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJycnICAgIC8qLyBzdGF0aWMgRm9vKGludCBm
KTsnJycsCi0gICAgICAgICAgICAnQ291bGQgbm90IGZpbmQgZW5kIG9mIG11bHRpLWxpbmUgY29t
bWVudCcKLSAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9tdWx0aWxpbmVfY29tbWVudF0gWzVd
JykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJycn
ICAgIC8qKi8gc3RhdGljIEZvbyhpbnQgZik7JycnLAotICAgICAgICAgICAgJycpCi0KLSAgICAj
IFRlc3Qgc3VzcGljaW91cyB1c2FnZSBvZiAiaWYiIGxpa2UgdGhpczoKLSAgICAjIGlmIChhID09
IGIpIHsKLSAgICAjICAgRG9Tb21ldGhpbmcoKTsKLSAgICAjIH0gaWYgKGEgPT0gYykgeyAgIC8v
IFNob3VsZCBiZSAiZWxzZSBpZiIuCi0gICAgIyAgIERvU29tZXRoaW5nKCk7ICAvLyBUaGlzIGdl
dHMgY2FsbGVkIHR3aWNlIGlmIGEgPT0gYiAmJiBhID09IGMuCi0gICAgIyB9Ci0gICAgZGVmIHRl
c3Rfc3VzcGljaW91c191c2FnZV9vZl9pZihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgKLSAgICAgICAgICAgICcgICAgaWYgKGEgPT0gYikgeycsCi0gICAgICAgICAgICAnJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICcgICAgfSBpZiAoYSA9PSBiKSB7
JywKLSAgICAgICAgICAgICdEaWQgeW91IG1lYW4gImVsc2UgaWYiPyBJZiBub3QsIHN0YXJ0IGEg
bmV3IGxpbmUgZm9yICJpZiIuJwotICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2JyYWNlc10g
WzRdJykKLQotICAgICMgVGVzdCBzdXNwaWNpb3VzIHVzYWdlIG9mIG1lbXNldC4gU3BlY2lmaWNh
bGx5LCBhIDAKLSAgICAjIGFzIHRoZSBmaW5hbCBhcmd1bWVudCBpcyBhbG1vc3QgY2VydGFpbmx5
IGFuIGVycm9yLgotICAgIGRlZiB0ZXN0X3N1c3BpY2lvdXNfdXNhZ2Vfb2ZfbWVtc2V0KHNlbGYp
OgotICAgICAgICAjIE5vcm1hbCB1c2UgaXMgb2theS4KLSAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgKLSAgICAgICAgICAgICcgICAgbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpJywKLSAgICAg
ICAgICAgICcnKQotCi0gICAgICAgICMgQSAwIGFzIHRoZSBmaW5hbCBhcmd1bWVudCBpcyBhbG1v
c3QgY2VydGFpbmx5IGFuIGVycm9yLgotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAg
ICAgICAgJyAgICBtZW1zZXQoYnVmLCBzaXplb2YoYnVmKSwgMCknLAotICAgICAgICAgICAgJ0Rp
ZCB5b3UgbWVhbiAibWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpIj8nCi0gICAgICAgICAgICAn
ICBbcnVudGltZS9tZW1zZXRdIFs0XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAg
ICAgICAgICAnICAgIG1lbXNldChidWYsIHhzaXplICogeXNpemUsIDApJywKLSAgICAgICAgICAg
ICdEaWQgeW91IG1lYW4gIm1lbXNldChidWYsIDAsIHhzaXplICogeXNpemUpIj8nCi0gICAgICAg
ICAgICAnICBbcnVudGltZS9tZW1zZXRdIFs0XScpCi0KLSAgICAgICAgIyBUaGVyZSBpcyBsZWdp
dGltYXRlIHRlc3QgY29kZSB0aGF0IHVzZXMgdGhpcyBmb3JtLgotICAgICAgICAjIFRoaXMgaXMg
b2theSBzaW5jZSB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGEgbGl0ZXJhbC4KLSAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICIgICAgbWVtc2V0KGJ1ZiwgJ3knLCAwKSIsCi0g
ICAgICAgICAgICAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICcg
ICAgbWVtc2V0KGJ1ZiwgNCwgMCknLAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X2xpbnQoCi0gICAgICAgICAgICAnICAgIG1lbXNldChidWYsIC0xLCAwKScsCi0gICAgICAg
ICAgICAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICcgICAgbWVt
c2V0KGJ1ZiwgMHhGMSwgMCknLAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0
X2xpbnQoCi0gICAgICAgICAgICAnICAgIG1lbXNldChidWYsIDB4Y2QsIDApJywKLSAgICAgICAg
ICAgICcnKQotCi0gICAgZGVmIHRlc3RfY2hlY2tfcG9zaXhfdGhyZWFkaW5nKHNlbGYpOgotICAg
ICAgICBzZWxmLmFzc2VydF9saW50KCdzY3RpbWVfcigpJywgJycpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X2xpbnQoJ3N0cnRva19yKCknLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnICAg
IHN0cnRva19yKGZvbywgYmEsIHIpJywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2Jy
YW5kKCknLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnX3JhbmQoKScsICcnKQotICAg
ICAgICBzZWxmLmFzc2VydF9saW50KCcucmFuZCgpJywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0
X2xpbnQoJz5yYW5kKCknLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgncmFuZCgpJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2lkZXIgdXNpbmcgcmFuZF9yKC4uLikgaW5z
dGVhZCBvZiByYW5kKC4uLiknCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyBmb3IgaW1wcm92
ZWQgdGhyZWFkIHNhZmV0eS4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3J1bnRpbWUv
dGhyZWFkc2FmZV9mbl0gWzJdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnc3RydG9rKCkn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zaWRlciB1c2luZyBzdHJ0b2tfciguLi4p
ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAnaW5zdGVhZCBvZiBzdHJ0b2soLi4uKScKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAnIGZvciBpbXByb3ZlZCB0aHJlYWQgc2FmZXR5LicKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAnICBbcnVudGltZS90aHJlYWRzYWZlX2ZuXSBbMl0nKQot
Ci0gICAgIyBUZXN0IHBvdGVudGlhbCBmb3JtYXQgc3RyaW5nIGJ1Z3MgbGlrZSBwcmludGYoZm9v
KS4KLSAgICBkZWYgdGVzdF9mb3JtYXRfc3RyaW5ncyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3Nl
cnRfbGludCgncHJpbnRmKCJmb28iKScsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdw
cmludGYoImZvbzogJXMiLCBmb28pJywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ0Rv
Y2lkRm9yUHJpbnRmKGRvY2lkKScsICcnKSAgIyBTaG91bGQgbm90IHRyaWdnZXIuCi0gICAgICAg
IHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAncHJpbnRmKGZvbyknLAotICAgICAgICAg
ICAgJ1BvdGVudGlhbCBmb3JtYXQgc3RyaW5nIGJ1Zy4gRG8gcHJpbnRmKCIlcyIsIGZvbykgaW5z
dGVhZC4nCi0gICAgICAgICAgICAnICBbcnVudGltZS9wcmludGZdIFs0XScpCi0gICAgICAgIHNl
bGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAncHJpbnRmKGZvby5jX3N0cigpKScsCi0gICAg
ICAgICAgICAnUG90ZW50aWFsIGZvcm1hdCBzdHJpbmcgYnVnLiAnCi0gICAgICAgICAgICAnRG8g
cHJpbnRmKCIlcyIsIGZvby5jX3N0cigpKSBpbnN0ZWFkLicKLSAgICAgICAgICAgICcgIFtydW50
aW1lL3ByaW50Zl0gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAg
ICdwcmludGYoZm9vLT5jX3N0cigpKScsCi0gICAgICAgICAgICAnUG90ZW50aWFsIGZvcm1hdCBz
dHJpbmcgYnVnLiAnCi0gICAgICAgICAgICAnRG8gcHJpbnRmKCIlcyIsIGZvby0+Y19zdHIoKSkg
aW5zdGVhZC4nCi0gICAgICAgICAgICAnICBbcnVudGltZS9wcmludGZdIFs0XScpCi0gICAgICAg
IHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnU3RyaW5nUHJpbnRmKGZvbyknLAotICAg
ICAgICAgICAgJ1BvdGVudGlhbCBmb3JtYXQgc3RyaW5nIGJ1Zy4gRG8gU3RyaW5nUHJpbnRmKCIl
cyIsIGZvbykgaW5zdGVhZC4nCi0gICAgICAgICAgICAnJwotICAgICAgICAgICAgJyAgW3J1bnRp
bWUvcHJpbnRmXSBbNF0nKQotCi0gICAgIyBWYXJpYWJsZS1sZW5ndGggYXJyYXlzIGFyZSBub3Qg
cGVybWl0dGVkLgotICAgIGRlZiB0ZXN0X3ZhcmlhYmxlX2xlbmd0aF9hcnJheV9kZXRlY3Rpb24o
c2VsZik6Ci0gICAgICAgIGVycm1zZyA9ICgnRG8gbm90IHVzZSB2YXJpYWJsZS1sZW5ndGggYXJy
YXlzLiAgVXNlIGFuIGFwcHJvcHJpYXRlbHkgbmFtZWQgJwotICAgICAgICAgICAgICAgICAgIign
aycgZm9sbG93ZWQgYnkgQ2FtZWxDYXNlKSBjb21waWxlLXRpbWUgY29uc3RhbnQgZm9yIHRoZSBz
aXplLiIKLSAgICAgICAgICAgICAgICAgICcgIFtydW50aW1lL2FycmF5c10gWzFdJykKLQotICAg
ICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQgYVthbnlfb2xkX3ZhcmlhYmxlXTsnLCBlcnJtc2cp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBkb3VibGVzaXplW3NvbWVfdmFyICogMl07
JywgZXJybXNnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQgYVthZnVuY3Rpb24oKV07
JywgZXJybXNnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQgYVtmdW5jdGlvbihrTWF4
Rm9vQmFycyldOycsIGVycm1zZykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnYm9vbCBhTGlz
dFtpdGVtc18tPnNpemUoKV07JywgZXJybXNnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdu
YW1lc3BhY2U6OlR5cGUgYnVmZmVyW2xlbisxXTsnLCBlcnJtc2cpCi0KLSAgICAgICAgc2VsZi5h
c3NlcnRfbGludCgnaW50IGFbNjRdOycsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdp
bnQgYVsweEZGXTsnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50IGZpcnN0WzI1
Nl0sIHNlY29uZFsyNTZdOycsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQgYXJy
YXlOYW1lW2tDb21waWxlVGltZUNvbnN0YW50XTsnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRf
bGludCgnY2hhciBidWZbc29tZW5hbWVzcGFjZTo6a0J1ZlNpemVdOycsICcnKQotICAgICAgICBz
ZWxmLmFzc2VydF9saW50KCdpbnQgYXJyYXlOYW1lW0FMTF9DQVBTXTsnLCAnJykKLSAgICAgICAg
c2VsZi5hc3NlcnRfbGludCgnQUNsYXNzIGFycmF5MVtmb286OmJhcjo6QUxMX0NBUFNdOycsICcn
KQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQgYVtrTWF4U3RyTGVuICsgMV07JywgJycp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBhW3NpemVvZihmb28pXTsnLCAnJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50IGFbc2l6ZW9mKCpmb28pXTsnLCAnJykKLSAgICAg
ICAgc2VsZi5hc3NlcnRfbGludCgnaW50IGFbc2l6ZW9mIGZvb107JywgJycpCi0gICAgICAgIHNl
bGYuYXNzZXJ0X2xpbnQoJ2ludCBhW3NpemVvZihzdHJ1Y3QgRm9vKV07JywgJycpCi0gICAgICAg
IHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBhWzEyOCAtIHNpemVvZihjb25zdCBiYXIpXTsnLCAnJykK
LSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50IGFbKHNpemVvZihmb28pICogNCldOycsICcn
KQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQgYVsoYXJyYXlzaXplKGZpeGVkX3NpemVf
YXJyYXkpLzIpIDw8IDFdOycsICdNaXNzaW5nIHNwYWNlcyBhcm91bmQgLyAgW3doaXRlc3BhY2Uv
b3BlcmF0b3JzXSBbM10nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdkZWxldGUgYVtzb21l
X3Zhcl07JywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3JldHVybiBhW3NvbWVfdmFy
XTsnLCAnJykKLQotICAgICMgQnJhY2UgdXNhZ2UKLSAgICBkZWYgdGVzdF9icmFjZXMoc2VsZik6
Ci0gICAgICAgICMgQnJhY2VzIHNob3VsZG4ndCBiZSBmb2xsb3dlZCBieSBhIDsgdW5sZXNzIHRo
ZXkncmUgZGVmaW5pbmcgYSBzdHJ1Y3QKLSAgICAgICAgIyBvciBpbml0aWFsaXppbmcgYW4gYXJy
YXkKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50IGFbM10gPSB7IDEsIDIsIDMgfTsnLCAn
JykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICcnJ2NvbnN0IGludCBm
b29bXSA9Ci0gICAgICAgICAgICAgICAgICAgezEsIDIsIDMgfTsnJycsCi0gICAgICAgICAgICAn
JykKLSAgICAgICAgIyBGb3Igc2luZ2xlIGxpbmUsIHVubWF0Y2hlZCAnfScgd2l0aCBhICc7JyBp
cyBpZ25vcmVkIChub3QgZW5vdWdoIGNvbnRleHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRp
X2xpbmVfbGludCgKLSAgICAgICAgICAgICcnJ2ludCBhWzNdID0geyAxLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMyB9OycnJywK
LSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0g
ICAgICAgICAgICAnJydpbnQgYVsyXVszXSA9IHsgeyAxLCAyIH0sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsgMywgNCB9IH07JycnLAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNl
bGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICcnJ2ludCBhWzJdWzNdID0K
LSAgICAgICAgICAgICAgICAgICB7IHsgMSwgMiB9LAotICAgICAgICAgICAgICAgICAgICAgeyAz
LCA0IH0gfTsnJycsCi0gICAgICAgICAgICAnJykKLQotICAgICMgQ0hFQ0svRVhQRUNUX1RSVUUv
RVhQRUNUX0ZBTFNFIHJlcGxhY2VtZW50cwotICAgIGRlZiB0ZXN0X2NoZWNrX2NoZWNrKHNlbGYp
OgotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdDSEVDSyh4ID09IDQyKScsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgJ0NvbnNpZGVyIHVzaW5nIENIRUNLX0VRIGluc3RlYWQgb2YgQ0hFQ0so
YSA9PSBiKScKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY2hlY2td
IFsyXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ0NIRUNLKHggIT0gNDIpJywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAnQ29uc2lkZXIgdXNpbmcgQ0hFQ0tfTkUgaW5zdGVhZCBvZiBD
SEVDSyhhICE9IGIpJwotICAgICAgICAgICAgICAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9j
aGVja10gWzJdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnQ0hFQ0soeCA+PSA0MiknLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zaWRlciB1c2luZyBDSEVDS19HRSBpbnN0ZWFk
IG9mIENIRUNLKGEgPj0gYiknCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3JlYWRhYmls
aXR5L2NoZWNrXSBbMl0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdDSEVDSyh4ID4gNDIp
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2lkZXIgdXNpbmcgQ0hFQ0tfR1QgaW5z
dGVhZCBvZiBDSEVDSyhhID4gYiknCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3JlYWRh
YmlsaXR5L2NoZWNrXSBbMl0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdDSEVDSyh4IDw9
IDQyKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNpZGVyIHVzaW5nIENIRUNLX0xF
IGluc3RlYWQgb2YgQ0hFQ0soYSA8PSBiKScKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICBb
cmVhZGFiaWxpdHkvY2hlY2tdIFsyXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ0NIRUNL
KHggPCA0MiknLAotICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zaWRlciB1c2luZyBDSEVD
S19MVCBpbnN0ZWFkIG9mIENIRUNLKGEgPCBiKScKLSAgICAgICAgICAgICAgICAgICAgICAgICAn
ICBbcmVhZGFiaWxpdHkvY2hlY2tdIFsyXScpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgn
RENIRUNLKHggPT0gNDIpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2lkZXIgdXNp
bmcgRENIRUNLX0VRIGluc3RlYWQgb2YgRENIRUNLKGEgPT0gYiknCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2NoZWNrXSBbMl0nKQotICAgICAgICBzZWxmLmFzc2Vy
dF9saW50KCdEQ0hFQ0soeCAhPSA0MiknLAotICAgICAgICAgICAgICAgICAgICAgICAgICdDb25z
aWRlciB1c2luZyBEQ0hFQ0tfTkUgaW5zdGVhZCBvZiBEQ0hFQ0soYSAhPSBiKScKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY2hlY2tdIFsyXScpCi0gICAgICAgIHNl
bGYuYXNzZXJ0X2xpbnQoJ0RDSEVDSyh4ID49IDQyKScsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgJ0NvbnNpZGVyIHVzaW5nIERDSEVDS19HRSBpbnN0ZWFkIG9mIERDSEVDSyhhID49IGIpJwot
ICAgICAgICAgICAgICAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9jaGVja10gWzJdJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgnRENIRUNLKHggPiA0MiknLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICdDb25zaWRlciB1c2luZyBEQ0hFQ0tfR1QgaW5zdGVhZCBvZiBEQ0hFQ0soYSA+
IGIpJwotICAgICAgICAgICAgICAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9jaGVja10gWzJd
JykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnRENIRUNLKHggPD0gNDIpJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAnQ29uc2lkZXIgdXNpbmcgRENIRUNLX0xFIGluc3RlYWQgb2YgRENI
RUNLKGEgPD0gYiknCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2No
ZWNrXSBbMl0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdEQ0hFQ0soeCA8IDQyKScsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNpZGVyIHVzaW5nIERDSEVDS19MVCBpbnN0ZWFk
IG9mIERDSEVDSyhhIDwgYiknCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3JlYWRhYmls
aXR5L2NoZWNrXSBbMl0nKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAg
ICAnRVhQRUNUX1RSVUUoIjQyIiA9PSB4KScsCi0gICAgICAgICAgICAnQ29uc2lkZXIgdXNpbmcg
RVhQRUNUX0VRIGluc3RlYWQgb2YgRVhQRUNUX1RSVUUoYSA9PSBiKScKLSAgICAgICAgICAgICcg
IFtyZWFkYWJpbGl0eS9jaGVja10gWzJdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAg
ICAgICAgICAgICdFWFBFQ1RfVFJVRSgiNDIiICE9IHgpJywKLSAgICAgICAgICAgICdDb25zaWRl
ciB1c2luZyBFWFBFQ1RfTkUgaW5zdGVhZCBvZiBFWFBFQ1RfVFJVRShhICE9IGIpJwotICAgICAg
ICAgICAgJyAgW3JlYWRhYmlsaXR5L2NoZWNrXSBbMl0nKQotICAgICAgICBzZWxmLmFzc2VydF9s
aW50KAotICAgICAgICAgICAgJ0VYUEVDVF9UUlVFKCs0MiA+PSB4KScsCi0gICAgICAgICAgICAn
Q29uc2lkZXIgdXNpbmcgRVhQRUNUX0dFIGluc3RlYWQgb2YgRVhQRUNUX1RSVUUoYSA+PSBiKScK
LSAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9jaGVja10gWzJdJykKLSAgICAgICAgc2VsZi5h
c3NlcnRfbGludCgKLSAgICAgICAgICAgICdFWFBFQ1RfVFJVRV9NKC00MiA+IHgpJywKLSAgICAg
ICAgICAgICdDb25zaWRlciB1c2luZyBFWFBFQ1RfR1RfTSBpbnN0ZWFkIG9mIEVYUEVDVF9UUlVF
X00oYSA+IGIpJwotICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2NoZWNrXSBbMl0nKQotICAg
ICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJ0VYUEVDVF9UUlVFX00oNDJVIDw9
IHgpJywKLSAgICAgICAgICAgICdDb25zaWRlciB1c2luZyBFWFBFQ1RfTEVfTSBpbnN0ZWFkIG9m
IEVYUEVDVF9UUlVFX00oYSA8PSBiKScKLSAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9jaGVj
a10gWzJdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICdFWFBFQ1Rf
VFJVRV9NKDQyTCA8IHgpJywKLSAgICAgICAgICAgICdDb25zaWRlciB1c2luZyBFWFBFQ1RfTFRf
TSBpbnN0ZWFkIG9mIEVYUEVDVF9UUlVFX00oYSA8IGIpJwotICAgICAgICAgICAgJyAgW3JlYWRh
YmlsaXR5L2NoZWNrXSBbMl0nKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAg
ICAgICAnRVhQRUNUX0ZBTFNFKHggPT0gNDIpJywKLSAgICAgICAgICAgICdDb25zaWRlciB1c2lu
ZyBFWFBFQ1RfTkUgaW5zdGVhZCBvZiBFWFBFQ1RfRkFMU0UoYSA9PSBiKScKLSAgICAgICAgICAg
ICcgIFtyZWFkYWJpbGl0eS9jaGVja10gWzJdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgK
LSAgICAgICAgICAgICdFWFBFQ1RfRkFMU0UoeCAhPSA0MiknLAotICAgICAgICAgICAgJ0NvbnNp
ZGVyIHVzaW5nIEVYUEVDVF9FUSBpbnN0ZWFkIG9mIEVYUEVDVF9GQUxTRShhICE9IGIpJwotICAg
ICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2NoZWNrXSBbMl0nKQotICAgICAgICBzZWxmLmFzc2Vy
dF9saW50KAotICAgICAgICAgICAgJ0VYUEVDVF9GQUxTRSh4ID49IDQyKScsCi0gICAgICAgICAg
ICAnQ29uc2lkZXIgdXNpbmcgRVhQRUNUX0xUIGluc3RlYWQgb2YgRVhQRUNUX0ZBTFNFKGEgPj0g
YiknCi0gICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY2hlY2tdIFsyXScpCi0gICAgICAgIHNl
bGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnQVNTRVJUX0ZBTFNFKHggPiA0MiknLAotICAg
ICAgICAgICAgJ0NvbnNpZGVyIHVzaW5nIEFTU0VSVF9MRSBpbnN0ZWFkIG9mIEFTU0VSVF9GQUxT
RShhID4gYiknCi0gICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY2hlY2tdIFsyXScpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnQVNTRVJUX0ZBTFNFKHggPD0gNDIp
JywKLSAgICAgICAgICAgICdDb25zaWRlciB1c2luZyBBU1NFUlRfR1QgaW5zdGVhZCBvZiBBU1NF
UlRfRkFMU0UoYSA8PSBiKScKLSAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9jaGVja10gWzJd
JykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICdBU1NFUlRfRkFMU0Vf
TSh4IDwgNDIpJywKLSAgICAgICAgICAgICdDb25zaWRlciB1c2luZyBBU1NFUlRfR0VfTSBpbnN0
ZWFkIG9mIEFTU0VSVF9GQUxTRV9NKGEgPCBiKScKLSAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0
eS9jaGVja10gWzJdJykKLQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdDSEVDSyhzb21lX2l0
ZXJhdG9yID09IG9iai5lbmQoKSknLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnRVhQ
RUNUX1RSVUUoc29tZV9pdGVyYXRvciA9PSBvYmouZW5kKCkpJywgJycpCi0gICAgICAgIHNlbGYu
YXNzZXJ0X2xpbnQoJ0VYUEVDVF9GQUxTRShzb21lX2l0ZXJhdG9yID09IG9iai5lbmQoKSknLCAn
JykKLQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdDSEVDSyhDcmVhdGVUZXN0RmlsZShkaXIs
ICgxIDw8IDIwKSkpOycsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdDSEVDSyhDcmVh
dGVUZXN0RmlsZShkaXIsICgxID4+IDIwKSkpOycsICcnKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0
X2xpbnQoJ0NIRUNLKHg8NDIpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICBbJ01pc3Npbmcg
c3BhY2VzIGFyb3VuZCA8JwotICAgICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFj
ZS9vcGVyYXRvcnNdIFszXScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zaWRlciB1
c2luZyBDSEVDS19MVCBpbnN0ZWFkIG9mIENIRUNLKGEgPCBiKScKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2NoZWNrXSBbMl0nXSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRfbGludCgnQ0hFQ0soeD40MiknLAotICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zaWRl
ciB1c2luZyBDSEVDS19HVCBpbnN0ZWFkIG9mIENIRUNLKGEgPiBiKScKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY2hlY2tdIFsyXScpCi0KLSAgICAgICAgc2VsZi5h
c3NlcnRfbGludCgKLSAgICAgICAgICAgICcgICAgRVhQRUNUX1RSVUUoNDIgPCB4KSAvLyBSYW5k
b20gY29tbWVudC4nLAotICAgICAgICAgICAgJ0NvbnNpZGVyIHVzaW5nIEVYUEVDVF9MVCBpbnN0
ZWFkIG9mIEVYUEVDVF9UUlVFKGEgPCBiKScKLSAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9j
aGVja10gWzJdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICdFWFBF
Q1RfVFJVRSggNDIgPCB4ICknLAotICAgICAgICAgICAgWydFeHRyYSBzcGFjZSBhZnRlciAoIGlu
IGZ1bmN0aW9uIGNhbGwnCi0gICAgICAgICAgICAgJyAgW3doaXRlc3BhY2UvcGFyZW5zXSBbNF0n
LAotICAgICAgICAgICAgICdDb25zaWRlciB1c2luZyBFWFBFQ1RfTFQgaW5zdGVhZCBvZiBFWFBF
Q1RfVFJVRShhIDwgYiknCi0gICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2NoZWNrXSBbMl0n
XSkKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICdDSEVDSygiZm9vIiA9
PSAiZm9vIiknLAotICAgICAgICAgICAgJ0NvbnNpZGVyIHVzaW5nIENIRUNLX0VRIGluc3RlYWQg
b2YgQ0hFQ0soYSA9PSBiKScKLSAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9jaGVja10gWzJd
JykKLQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdDSEVDS19FUSgiZm9vIiwgImZvbyIpJywg
JycpCi0KLSAgICBkZWYgdGVzdF9icmFjZV9hdF9iZWdpbl9vZl9saW5lKHNlbGYpOgotICAgICAg
ICBzZWxmLmFzc2VydF9saW50KCd7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnVGhpcyB7
IHNob3VsZCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBsaW5lJwotICAgICAgICAgICAg
ICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzRdJykKLSAgICAgICAgc2VsZi5h
c3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJyNlbmRpZlxuJwotICAgICAgICAg
ICAgJ3tcbicKLSAgICAgICAgICAgICd9XG4nLAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNl
bGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdpZiAoY29uZGl0aW9uKSB7
JywKLSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQo
Ci0gICAgICAgICAgICAnICAgIE1BQ1JPMShtYWNyb0FyZykgeycsCi0gICAgICAgICAgICAnJykK
LSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ0FDQ0VT
U09SX0dFVFRFUihNZXNzYWdlRXZlbnRQb3J0cykgeycsCi0gICAgICAgICAgICAnUGxhY2UgYnJh
Y2Ugb24gaXRzIG93biBsaW5lIGZvciBmdW5jdGlvbiBkZWZpbml0aW9ucy4gIFt3aGl0ZXNwYWNl
L2JyYWNlc10gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAg
ICAgICAgICAgJ2ludCBmb28oKSB7JywKLSAgICAgICAgICAgICdQbGFjZSBicmFjZSBvbiBpdHMg
b3duIGxpbmUgZm9yIGZ1bmN0aW9uIGRlZmluaXRpb25zLiAgW3doaXRlc3BhY2UvYnJhY2VzXSBb
NF0nKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAn
aW50IGZvbygpIGNvbnN0IHsnLAotICAgICAgICAgICAgJ1BsYWNlIGJyYWNlIG9uIGl0cyBvd24g
bGluZSBmb3IgZnVuY3Rpb24gZGVmaW5pdGlvbnMuICBbd2hpdGVzcGFjZS9icmFjZXNdIFs0XScp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdpbnQg
Zm9vKCkgY29uc3RcbicKLSAgICAgICAgICAgICd7XG4nCi0gICAgICAgICAgICAnfVxuJywKLSAg
ICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAg
ICAgICAgICAnaWYgKGNvbmRpdGlvblxuJwotICAgICAgICAgICAgJyAgICAmJiBjb25kaXRpb24y
XG4nCi0gICAgICAgICAgICAnICAgICYmIGNvbmRpdGlvbjMpIHtcbicKLSAgICAgICAgICAgICd9
XG4nLAotICAgICAgICAgICAgJycpCi0KLSAgICBkZWYgdGVzdF9taXNtYXRjaGluZ19zcGFjZXNf
aW5fcGFyZW5zKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpZiAoZm9vICkgeycs
ICdNaXNtYXRjaGluZyBzcGFjZXMgaW5zaWRlICgpIGluIGlmJwotICAgICAgICAgICAgICAgICAg
ICAgICAgICcgIFt3aGl0ZXNwYWNlL3BhcmVuc10gWzVdJykKLSAgICAgICAgc2VsZi5hc3NlcnRf
bGludCgnc3dpdGNoICggZm9vKSB7JywgJ01pc21hdGNoaW5nIHNwYWNlcyBpbnNpZGUgKCkgaW4g
c3dpdGNoJwotICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL3BhcmVuc10g
WzVdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnZm9yIChmb287IGJhOyBiYXIgKSB7Jywg
J01pc21hdGNoaW5nIHNwYWNlcyBpbnNpZGUgKCkgaW4gZm9yJwotICAgICAgICAgICAgICAgICAg
ICAgICAgICcgIFt3aGl0ZXNwYWNlL3BhcmVuc10gWzVdJykKLSAgICAgICAgc2VsZi5hc3NlcnRf
bGludCgnZm9yICg7IGZvbzsgYmFyKSB7JywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQo
J2ZvciAoIDsgZm9vOyBiYXIpIHsnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnZm9y
ICggOyBmb287IGJhciApIHsnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnZm9yIChm
b287IGJhcjsgKSB7JywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ZvcmVhY2ggKGZv
bywgZm9vcyApIHsnLCAnTWlzbWF0Y2hpbmcgc3BhY2VzIGluc2lkZSAoKSBpbiBmb3JlYWNoJwot
ICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL3BhcmVuc10gWzVdJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgnZm9yZWFjaCAoIGZvbywgZm9vcykgeycsICdNaXNtYXRj
aGluZyBzcGFjZXMgaW5zaWRlICgpIGluIGZvcmVhY2gnCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgJyAgW3doaXRlc3BhY2UvcGFyZW5zXSBbNV0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50
KCd3aGlsZSAoICBmb28gICkgeycsICdTaG91bGQgaGF2ZSB6ZXJvIG9yIG9uZSBzcGFjZXMgaW5z
aWRlJwotICAgICAgICAgICAgICAgICAgICAgICAgICcgKCBhbmQgKSBpbiB3aGlsZSAgW3doaXRl
c3BhY2UvcGFyZW5zXSBbNV0nKQotCi0gICAgZGVmIHRlc3Rfc3BhY2luZ19mb3JfZm5jYWxsKHNl
bGYpOgotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpZiAoZm9vKSB7JywgJycpCi0gICAgICAg
IHNlbGYuYXNzZXJ0X2xpbnQoJ2ZvciAoZm9vO2JhcjtiYXopIHsnLCAnJykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgnZm9yZWFjaCAoZm9vLCBmb29zKSB7JywgJycpCi0gICAgICAgIHNlbGYu
YXNzZXJ0X2xpbnQoJ3doaWxlIChmb28pIHsnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgnc3dpdGNoIChmb28pIHsnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnbmV3IChS
ZW5kZXJBcmVuYSgpKSBSZW5kZXJJbmxpbmUoZG9jdW1lbnQoKSknLCAnJykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgnZm9vKCBiYXIpJywgJ0V4dHJhIHNwYWNlIGFmdGVyICggaW4gZnVuY3Rp
b24gY2FsbCcKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9wYXJlbnNd
IFs0XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2Zvb2JhciggXFwnLCAnJykKLSAgICAg
ICAgc2VsZi5hc3NlcnRfbGludCgnZm9vYmFyKCAgICAgXFwnLCAnJykKLSAgICAgICAgc2VsZi5h
c3NlcnRfbGludCgnKCBhICsgYiknLCAnRXh0cmEgc3BhY2UgYWZ0ZXIgKCcKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9wYXJlbnNdIFsyXScpCi0gICAgICAgIHNlbGYu
YXNzZXJ0X2xpbnQoJygoYStiKSknLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnZm9v
IChmb28pJywgJ0V4dHJhIHNwYWNlIGJlZm9yZSAoIGluIGZ1bmN0aW9uIGNhbGwnCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgJyAgW3doaXRlc3BhY2UvcGFyZW5zXSBbNF0nKQotICAgICAgICBz
ZWxmLmFzc2VydF9saW50KCd0eXBlZGVmIGZvbyAoKmZvbykoZm9vKScsICcnKQotICAgICAgICBz
ZWxmLmFzc2VydF9saW50KCd0eXBlZGVmIGZvbyAoKmZvbzEyYmFyXykoZm9vKScsICcnKQotICAg
ICAgICBzZWxmLmFzc2VydF9saW50KCd0eXBlZGVmIGZvbyAoRm9vOjoqYmFyKShmb28pJywgJycp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ZvbyAoRm9vOjoqYmFyKSgnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICdFeHRyYSBzcGFjZSBiZWZvcmUgKCBpbiBmdW5jdGlvbiBjYWxsJwot
ICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL3BhcmVuc10gWzRdJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgndHlwZWRlZiBmb28gKEZvbzo6KmJhcikoJywgJycpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJyhmb28pKGJhciknLCAnJykKLSAgICAgICAgc2VsZi5h
c3NlcnRfbGludCgnRm9vICgqZm9vKShiYXIpJywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xp
bnQoJ0ZvbyAoKmZvbykoQmFyIGJhciwnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgn
Y2hhciAoKnApW3NpemVvZihmb28pXSA9ICZmb28nLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRf
bGludCgnY2hhciAoJnJlZilbc2l6ZW9mKGZvbyldID0gJmZvbycsICcnKQotICAgICAgICBzZWxm
LmFzc2VydF9saW50KCdjb25zdCBjaGFyMzIgKCp0YWJsZVtdKVs2XTsnLCAnJykKLQotICAgIGRl
ZiB0ZXN0X3NwYWNpbmdfYmVmb3JlX2JyYWNlcyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRf
bGludCgnaWYgKGZvbyl7JywgJ01pc3Npbmcgc3BhY2UgYmVmb3JlIHsnCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgJyAgW3doaXRlc3BhY2UvYnJhY2VzXSBbNV0nKQotICAgICAgICBzZWxmLmFz
c2VydF9saW50KCdmb3J7JywgJ01pc3Npbmcgc3BhY2UgYmVmb3JlIHsnCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgJyAgW3doaXRlc3BhY2UvYnJhY2VzXSBbNV0nKQotICAgICAgICBzZWxmLmFz
c2VydF9saW50KCdmb3IgeycsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdFWFBFQ1Rf
REVCVUdfREVBVEgoeycsICcnKQotCi0gICAgZGVmIHRlc3Rfc3BhY2luZ19hcm91bmRfZWxzZShz
ZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnfWVsc2UgeycsICdNaXNzaW5nIHNwYWNl
IGJlZm9yZSBlbHNlJwotICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL2Jy
YWNlc10gWzVdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnfSBlbHNleycsICdNaXNzaW5n
IHNwYWNlIGJlZm9yZSB7JwotICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNl
L2JyYWNlc10gWzVdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnfSBlbHNlIHsnLCAnJykK
LSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnfSBlbHNlIGlmJywgJycpCi0KLSAgICBkZWYgdGVz
dF9zcGFjaW5nX2Zvcl9iaW5hcnlfb3BzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9saW50
KCdpZiAoZm9vPD1iYXIpIHsnLCAnTWlzc2luZyBzcGFjZXMgYXJvdW5kIDw9JwotICAgICAgICAg
ICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL29wZXJhdG9yc10gWzNdJykKLSAgICAgICAg
c2VsZi5hc3NlcnRfbGludCgnaWYgKGZvbzxiYXIpIHsnLCAnTWlzc2luZyBzcGFjZXMgYXJvdW5k
IDwnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3doaXRlc3BhY2Uvb3BlcmF0b3JzXSBb
M10nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpZiAoZm9vPGJhci0+YmF6KSB7JywgJ01p
c3Npbmcgc3BhY2VzIGFyb3VuZCA8JwotICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0
ZXNwYWNlL29wZXJhdG9yc10gWzNdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaWYgKGZv
bzxiYXItPmJhcikgeycsICdNaXNzaW5nIHNwYWNlcyBhcm91bmQgPCcKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9vcGVyYXRvcnNdIFszXScpCi0gICAgICAgIHNlbGYu
YXNzZXJ0X2xpbnQoJ3R5cGVkZWYgaGFzaF9tYXA8Rm9vLCBCYXInLCAnTWlzc2luZyBzcGFjZXMg
YXJvdW5kIDwnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3doaXRlc3BhY2Uvb3BlcmF0
b3JzXSBbM10nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCd0eXBlZGVmIGhhc2hfbWFwPEZv
b29vb1R5cGUsIEJhYWFhYXJUeXBlLCcsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdh
PEZvbz4gdCs9YjsnLCAnTWlzc2luZyBzcGFjZXMgYXJvdW5kICs9JwotICAgICAgICAgICAgICAg
ICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL29wZXJhdG9yc10gWzNdJykKLSAgICAgICAgc2VsZi5h
c3NlcnRfbGludCgnYTxGb28+IHQtPWI7JywgJ01pc3Npbmcgc3BhY2VzIGFyb3VuZCAtPScKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9vcGVyYXRvcnNdIFszXScpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2E8Rm9vKj4gdCo9YjsnLCAnTWlzc2luZyBzcGFjZXMg
YXJvdW5kICo9JwotICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL29wZXJh
dG9yc10gWzNdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnYTxGb28qPiB0Lz1iOycsICdN
aXNzaW5nIHNwYWNlcyBhcm91bmQgLz0nCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3do
aXRlc3BhY2Uvb3BlcmF0b3JzXSBbM10nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdhPEZv
byo+IHR8PWI7JywgJ01pc3Npbmcgc3BhY2VzIGFyb3VuZCB8PScKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAnICBbd2hpdGVzcGFjZS9vcGVyYXRvcnNdIFszXScpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X2xpbnQoJ2E8Rm9vKj4gdCY9YjsnLCAnTWlzc2luZyBzcGFjZXMgYXJvdW5kICY9JwotICAg
ICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL29wZXJhdG9yc10gWzNdJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgnYTxGb28qPiB0PDw9YjsnLCAnTWlzc2luZyBzcGFjZXMg
YXJvdW5kIDw8PScKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9vcGVy
YXRvcnNdIFszXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2E8Rm9vKj4gdD4+PWI7Jywg
J01pc3Npbmcgc3BhY2VzIGFyb3VuZCA+Pj0nCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAg
W3doaXRlc3BhY2Uvb3BlcmF0b3JzXSBbM10nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdh
PEZvbyo+IHQ+Pj0mYnxjOycsICdNaXNzaW5nIHNwYWNlcyBhcm91bmQgPj49JwotICAgICAgICAg
ICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL29wZXJhdG9yc10gWzNdJykKLSAgICAgICAg
c2VsZi5hc3NlcnRfbGludCgnYTxGb28qPiB0PDw9KmIvYzsnLCAnTWlzc2luZyBzcGFjZXMgYXJv
dW5kIDw8PScKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9vcGVyYXRv
cnNdIFszXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2E8Rm9vPiB0IC09IGI7JywgJycp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2E8Rm9vPiB0ICs9IGI7JywgJycpCi0gICAgICAg
IHNlbGYuYXNzZXJ0X2xpbnQoJ2E8Rm9vKj4gdCAqPSBiOycsICcnKQotICAgICAgICBzZWxmLmFz
c2VydF9saW50KCdhPEZvbyo+IHQgLz0gYjsnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgnYTxGb28qPiB0IHw9IGI7JywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2E8Rm9v
Kj4gdCAmPSBiOycsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdhPEZvbyo+IHQgPDw9
IGI7JywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2E8Rm9vKj4gdCA+Pj0gYjsnLCAn
JykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnYTxGb28qPiB0ID4+PSAmYnxjOycsICdNaXNz
aW5nIHNwYWNlcyBhcm91bmQgfCcKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVz
cGFjZS9vcGVyYXRvcnNdIFszXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2E8Rm9vKj4g
dCA8PD0gKmIvYzsnLCAnTWlzc2luZyBzcGFjZXMgYXJvdW5kIC8nCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgJyAgW3doaXRlc3BhY2Uvb3BlcmF0b3JzXSBbM10nKQotICAgICAgICBzZWxmLmFz
c2VydF9saW50KCdhPEZvbyo+IHQgPDw9IGIvYzsgLy9UZXN0JywgWwotICAgICAgICAgICAgICAg
ICAgICAgICAgICdTaG91bGQgaGF2ZSBhIHNwYWNlIGJldHdlZW4gLy8gYW5kIGNvbW1lbnQgICcK
LSAgICAgICAgICAgICAgICAgICAgICAgICAnW3doaXRlc3BhY2UvY29tbWVudHNdIFs0XScsICdN
aXNzaW5nJwotICAgICAgICAgICAgICAgICAgICAgICAgICcgc3BhY2VzIGFyb3VuZCAvICBbd2hp
dGVzcGFjZS9vcGVyYXRvcnNdIFszXSddKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdhPEZv
byo+IHQgPDw9IGJ8fGM7ICAvL1Rlc3QnLCBbJ09uZSBzcGFjZSBiZWZvcmUgZW5kJwotICAgICAg
ICAgICAgICAgICAgICAgICAgICcgb2YgbGluZSBjb21tZW50cyAgW3doaXRlc3BhY2UvY29tbWVu
dHNdIFs1XScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ1Nob3VsZCBoYXZlIGEgc3BhY2Ug
YmV0d2VlbiAvLyBhbmQgY29tbWVudCAgJwotICAgICAgICAgICAgICAgICAgICAgICAgICdbd2hp
dGVzcGFjZS9jb21tZW50c10gWzRdJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnTWlzc2lu
ZyBzcGFjZXMgYXJvdW5kIHx8ICBbd2hpdGVzcGFjZS9vcGVyYXRvcnNdIFszXSddKQotICAgICAg
ICBzZWxmLmFzc2VydF9saW50KCdhPEZvbyo+IHQgPDw9IGImJmM7IC8vIFRlc3QnLCAnTWlzc2lu
ZyBzcGFjZXMgYXJvdW5kJwotICAgICAgICAgICAgICAgICAgICAgICAgICcgJiYgIFt3aGl0ZXNw
YWNlL29wZXJhdG9yc10gWzNdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnYTxGb28qPiB0
IDw8PSBiJiYmYzsgLy8gVGVzdCcsICdNaXNzaW5nIHNwYWNlcyBhcm91bmQnCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgJyAmJiAgW3doaXRlc3BhY2Uvb3BlcmF0b3JzXSBbM10nKQotICAgICAg
ICBzZWxmLmFzc2VydF9saW50KCdhPEZvbyo+IHQgPDw9IGImJipjOyAvLyBUZXN0JywgJ01pc3Np
bmcgc3BhY2VzIGFyb3VuZCcKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICYmICBbd2hpdGVz
cGFjZS9vcGVyYXRvcnNdIFszXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2E8Rm9vKj4g
dCA8PD0gYiAmJiAqYzsgLy8gVGVzdCcsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdh
PEZvbyo+IHQgPDw9IGIgJiYgJmM7IC8vIFRlc3QnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRf
bGludCgnYTxGb28qPiB0IDw8PSBiIHx8ICZjOyAgLypUZXN0JywgJ0NvbXBsZXggbXVsdGktbGlu
ZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJy8qLi4uKi8tc3R5bGUgY29tbWVudCBmb3Vu
ZC4gTGludCBtYXkgZ2l2ZSBib2d1cyAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ3dhcm5p
bmdzLiAgQ29uc2lkZXIgcmVwbGFjaW5nIHRoZXNlIHdpdGggLy8tc3R5bGUnCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgJyBjb21tZW50cywgd2l0aCAjaWYgMC4uLiNlbmRpZiwgb3Igd2l0aCBt
b3JlIGNsZWFybHknCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyBzdHJ1Y3R1cmVkIG11bHRp
LWxpbmUgY29tbWVudHMuICBbcmVhZGFiaWxpdHkvbXVsdGlsaW5lX2NvbW1lbnRdIFs1XScpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2E8Rm9vJj4gdCA8PD0gJmIgfCAmYzsnLCAnJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgnYTxGb28qPiB0IDw8PSAmYiAmICZjOyAvLyBUZXN0Jywg
JycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2E8Rm9vKj4gdCA8PD0gKmIgLyAmYzsgLy8g
VGVzdCcsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpZiAoYT1iID09IDEpJywgJ01p
c3Npbmcgc3BhY2VzIGFyb3VuZCA9ICBbd2hpdGVzcGFjZS9vcGVyYXRvcnNdIFs0XScpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2EgPSAxPDwyMCcsICdNaXNzaW5nIHNwYWNlcyBhcm91bmQg
PDwgIFt3aGl0ZXNwYWNlL29wZXJhdG9yc10gWzNdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgnaWYgKGEgPSBiID09IDEpJywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2EgPSAx
IDw8IDIwJywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgnI2luY2x1
ZGUgImNvbmZpZy5oIlxuI2luY2x1ZGUgPHN5cy9pby5oPlxuJywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xp
bnQoJyNpbmNsdWRlICJjb25maWcuaCJcbiNpbXBvcnQgPGZvby9iYXIuaD5cbicsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJykKLQotICAgIGRlZiB0ZXN0X3NwYWNpbmdf
YmVmb3JlX2xhc3Rfc2VtaWNvbG9uKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdj
YWxsX2Z1bmN0aW9uKCkgOycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ0V4dHJhIHNwYWNl
IGJlZm9yZSBsYXN0IHNlbWljb2xvbi4gSWYgdGhpcyBzaG91bGQgYmUgYW4gJwotICAgICAgICAg
ICAgICAgICAgICAgICAgICdlbXB0eSBzdGF0ZW1lbnQsIHVzZSB7IH0gaW5zdGVhZC4nCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgJyAgW3doaXRlc3BhY2Uvc2VtaWNvbG9uXSBbNV0nKQotICAg
ICAgICBzZWxmLmFzc2VydF9saW50KCd3aGlsZSAodHJ1ZSkgOycsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgJ0V4dHJhIHNwYWNlIGJlZm9yZSBsYXN0IHNlbWljb2xvbi4gSWYgdGhpcyBzaG91
bGQgYmUgYW4gJwotICAgICAgICAgICAgICAgICAgICAgICAgICdlbXB0eSBzdGF0ZW1lbnQsIHVz
ZSB7IH0gaW5zdGVhZC4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3doaXRlc3BhY2Uv
c2VtaWNvbG9uXSBbNV0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdkZWZhdWx0OjsnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICdTZW1pY29sb24gZGVmaW5pbmcgZW1wdHkgc3RhdGVt
ZW50LiBVc2UgeyB9IGluc3RlYWQuJwotICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0
ZXNwYWNlL3NlbWljb2xvbl0gWzVdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnICAgICAg
OycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ0xpbmUgY29udGFpbnMgb25seSBzZW1pY29s
b24uIElmIHRoaXMgc2hvdWxkIGJlIGFuIGVtcHR5ICcKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAnc3RhdGVtZW50LCB1c2UgeyB9IGluc3RlYWQuJwotICAgICAgICAgICAgICAgICAgICAgICAg
ICcgIFt3aGl0ZXNwYWNlL3NlbWljb2xvbl0gWzVdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgnZm9yIChpbnQgaSA9IDA7IDsnLCAnJykKLQotICAgICMgU3RhdGljIG9yIGdsb2JhbCBTVEwg
c3RyaW5ncy4KLSAgICBkZWYgdGVzdF9zdGF0aWNfb3JfZ2xvYmFsX3N0bHN0cmluZ3Moc2VsZik6
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3N0cmluZyBmb287JywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAnRm9yIGEgc3RhdGljL2dsb2JhbCBzdHJpbmcgY29uc3RhbnQsIHVzZSBhIEMg
c3R5bGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICdzdHJpbmcgaW5zdGVhZDogImNoYXIg
Zm9vW10iLicKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICBbcnVudGltZS9zdHJpbmddIFs0
XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3N0cmluZyBrRm9vID0gImhlbGxvIjsgLy8g
RW5nbGlzaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ0ZvciBhIHN0YXRpYy9nbG9iYWwg
c3RyaW5nIGNvbnN0YW50LCB1c2UgYSBDIHN0eWxlICcKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAnc3RyaW5nIGluc3RlYWQ6ICJjaGFyIGtGb29bXSIuJwotICAgICAgICAgICAgICAgICAgICAg
ICAgICcgIFtydW50aW1lL3N0cmluZ10gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgn
c3RhdGljIHN0cmluZyBmb287JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnRm9yIGEgc3Rh
dGljL2dsb2JhbCBzdHJpbmcgY29uc3RhbnQsIHVzZSBhIEMgc3R5bGUgJwotICAgICAgICAgICAg
ICAgICAgICAgICAgICdzdHJpbmcgaW5zdGVhZDogInN0YXRpYyBjaGFyIGZvb1tdIi4nCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgJyAgW3J1bnRpbWUvc3RyaW5nXSBbNF0nKQotICAgICAgICBz
ZWxmLmFzc2VydF9saW50KCdzdGF0aWMgY29uc3Qgc3RyaW5nIGZvbzsnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICdGb3IgYSBzdGF0aWMvZ2xvYmFsIHN0cmluZyBjb25zdGFudCwgdXNlIGEg
QyBzdHlsZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cmluZyBpbnN0ZWFkOiAic3Rh
dGljIGNvbnN0IGNoYXIgZm9vW10iLicKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICBbcnVu
dGltZS9zdHJpbmddIFs0XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3N0cmluZyBGb286
OmJhcjsnLAotICAgICAgICAgICAgICAgICAgICAgICAgICdGb3IgYSBzdGF0aWMvZ2xvYmFsIHN0
cmluZyBjb25zdGFudCwgdXNlIGEgQyBzdHlsZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAg
J3N0cmluZyBpbnN0ZWFkOiAiY2hhciBGb286OmJhcltdIi4nCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgJyAgW3J1bnRpbWUvc3RyaW5nXSBbNF0nKQotICAgICAgICAjIFJhcmUgY2FzZS4KLSAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgnc3RyaW5nIGZvbygiZm9vYmFyIik7JywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAnRm9yIGEgc3RhdGljL2dsb2JhbCBzdHJpbmcgY29uc3RhbnQsIHVz
ZSBhIEMgc3R5bGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICdzdHJpbmcgaW5zdGVhZDog
ImNoYXIgZm9vW10iLicKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICBbcnVudGltZS9zdHJp
bmddIFs0XScpCi0gICAgICAgICMgU2hvdWxkIG5vdCBjYXRjaCBsb2NhbCBvciBtZW1iZXIgdmFy
aWFibGVzLgotICAgICAgICBzZWxmLmFzc2VydF9saW50KCcgICAgc3RyaW5nIGZvbycsICcnKQot
ICAgICAgICAjIFNob3VsZCBub3QgY2F0Y2ggZnVuY3Rpb25zLgotICAgICAgICBzZWxmLmFzc2Vy
dF9saW50KCdzdHJpbmcgRW1wdHlTdHJpbmcoKSB7IHJldHVybiAiIjsgfScsICcnKQotICAgICAg
ICBzZWxmLmFzc2VydF9saW50KCdzdHJpbmcgRW1wdHlTdHJpbmcgKCkgeyByZXR1cm4gIiI7IH0n
LCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnc3RyaW5nIFZlcnlMb25nTmFtZUZ1bmN0
aW9uU29tZXRpbWVzRW5kc1dpdGgoXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBW
ZXJ5TG9uZ05hbWVUeXBlIHZlcnlfbG9uZ19uYW1lX3ZhcmlhYmxlKSB7fScsICcnKQotICAgICAg
ICBzZWxmLmFzc2VydF9saW50KCd0ZW1wbGF0ZTw+XG4nCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgJ3N0cmluZyBGdW5jdGlvblRlbXBsYXRlU3BlY2lhbGl6YXRpb248U29tZVR5cGU+KFxuJwot
ICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgICBpbnQgeCkgeyByZXR1cm4gIiI7IH0nLCAn
JykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgndGVtcGxhdGU8PlxuJwotICAgICAgICAgICAg
ICAgICAgICAgICAgICdzdHJpbmcgRnVuY3Rpb25UZW1wbGF0ZVNwZWNpYWxpemF0aW9uPHZlY3Rv
cjxBOjpCPiogPihcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgaW50IHgpIHsg
cmV0dXJuICIiOyB9JywgJycpCi0KLSAgICAgICAgIyBzaG91bGQgbm90IGNhdGNoIG1ldGhvZHMg
b2YgdGVtcGxhdGUgY2xhc3Nlcy4KLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnc3RyaW5nIENs
YXNzPFR5cGU+OjpNZXRob2QoKSBjb25zdFxuJwotICAgICAgICAgICAgICAgICAgICAgICAgICd7
XG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgcmV0dXJuICIiO1xuJwotICAgICAgICAg
ICAgICAgICAgICAgICAgICd9XG4nLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnc3Ry
aW5nIENsYXNzPFR5cGU+OjpNZXRob2QoXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAg
IGludCBhcmcpIGNvbnN0XG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ3tcbicKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAnICByZXR1cm4gIiI7XG4nCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgJ31cbicsICcnKQotCi0gICAgZGVmIHRlc3Rfbm9fc3BhY2VzX2luX2Z1bmN0aW9uX2Nh
bGxzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdUZWxsU3RvcnkoMSwgMyk7JywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgn
VGVsbFN0b3J5KDEsIDMgKTsnLAotICAgICAgICAgICAgICAgICAgICAgICAgICdFeHRyYSBzcGFj
ZSBiZWZvcmUgKScKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9wYXJl
bnNdIFsyXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ1RlbGxTdG9yeSgxIC8qIHdvbGYg
Ki8sIDMgLyogcGlncyAqLyk7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnJykKLSAgICAg
ICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KCcjZW5kaWZcbiAgICApOycsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJykKLQotICAgIGRlZiB0ZXN0X3R3b19zcGFj
ZXNfYmV0d2Vlbl9jb2RlX2FuZF9jb21tZW50cyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRf
bGludCgnfSAvLyBuYW1lc3BhY2UgZm9vJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnJykK
LSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnfS8vIG5hbWVzcGFjZSBmb28nLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICdPbmUgc3BhY2UgYmVmb3JlIGVuZCBvZiBsaW5lIGNvbW1lbnRzJwot
ICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL2NvbW1lbnRzXSBbNV0nKQot
ICAgICAgICBzZWxmLmFzc2VydF9saW50KCdwcmludGYoImZvbyIpOyAvLyBPdXRzaWRlIHF1b3Rl
cy4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9s
aW50KCdpbnQgaSA9IDA7IC8vIEhhdmluZyBvbmUgc3BhY2UgaXMgZmluZS4nLCcnKQotICAgICAg
ICBzZWxmLmFzc2VydF9saW50KCdpbnQgaSA9IDA7ICAvLyBIYXZpbmcgdHdvIHNwYWNlcyBpcyBi
YWQuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnT25lIHNwYWNlIGJlZm9yZSBlbmQgb2Yg
bGluZSBjb21tZW50cycKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9j
b21tZW50c10gWzVdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50IGkgPSAwOyAgIC8v
IEhhdmluZyB0aHJlZSBzcGFjZXMgaXMgYmFkLicsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
J09uZSBzcGFjZSBiZWZvcmUgZW5kIG9mIGxpbmUgY29tbWVudHMnCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgJyAgW3doaXRlc3BhY2UvY29tbWVudHNdIFs1XScpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X2xpbnQoJy8vIFRvcCBsZXZlbCBjb21tZW50JywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0
X2xpbnQoJyAgICAvLyBMaW5lIHN0YXJ0cyB3aXRoIGZvdXIgc3BhY2VzLicsICcnKQotICAgICAg
ICBzZWxmLmFzc2VydF9saW50KCdmb28oKTtcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAn
eyAvLyBBIHNjb3BlIGlzIG9wZW5pbmcuJywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQo
JyAgICBmb28oKTtcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIHsgLy8gQW4gaW5k
ZW50ZWQgc2NvcGUgaXMgb3BlbmluZy4nLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgn
aWYgKGZvbykgeyAvLyBub3QgYSBwdXJlIHNjb3BlJywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgncHJpbnRmKCIvLyBJbiBxdW90ZXMuIikn
LCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgncHJpbnRmKCJcXCIlcyAvLyBJbiBxdW90
ZXMuIiknLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgncHJpbnRmKCIlcyIsICIvLyBJ
biBxdW90ZXMuIiknLCAnJykKLQotICAgIGRlZiB0ZXN0X3NwYWNlX2FmdGVyX2NvbW1lbnRfbWFy
a2VyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9saW50KCcvLycsICcnKQotICAgICAgICBz
ZWxmLmFzc2VydF9saW50KCcvL3gnLCAnU2hvdWxkIGhhdmUgYSBzcGFjZSBiZXR3ZWVuIC8vIGFu
ZCBjb21tZW50JwotICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL2NvbW1l
bnRzXSBbNF0nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCcvLyB4JywgJycpCi0gICAgICAg
IHNlbGYuYXNzZXJ0X2xpbnQoJy8vLS0tLScsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50
KCcvLz09PT0nLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnLy8vLy8vJywgJycpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJy8vLy8vLyB4JywgJycpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X2xpbnQoJy8vLyB4JywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJy8vLy94Jywg
J1Nob3VsZCBoYXZlIGEgc3BhY2UgYmV0d2VlbiAvLyBhbmQgY29tbWVudCcKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9jb21tZW50c10gWzRdJykKLQotICAgIGRlZiB0
ZXN0X25ld2xpbmVfYXRfZW9mKHNlbGYpOgotICAgICAgICBkZWYgZG9fdGVzdChzZWxmLCBkYXRh
LCBpc19taXNzaW5nX2VvZik6Ci0gICAgICAgICAgICBlcnJvcl9jb2xsZWN0b3IgPSBFcnJvckNv
bGxlY3RvcihzZWxmLmFzc2VydF8pCi0gICAgICAgICAgICBjcHBfc3R5bGUucHJvY2Vzc19maWxl
X2RhdGEoJ2Zvby5jcHAnLCAnY3BwJywgZGF0YS5zcGxpdCgnXG4nKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2xsZWN0b3IpCi0gICAgICAgICAgICAj
IFRoZSB3YXJuaW5nIGFwcGVhcnMgb25seSBvbmNlLgotICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoCi0gICAgICAgICAgICAgICAgaW50KGlzX21pc3NpbmdfZW9mKSwKLSAgICAgICAgICAg
ICAgICBlcnJvcl9jb2xsZWN0b3IucmVzdWx0cygpLmNvdW50KAotICAgICAgICAgICAgICAgICAg
ICAnQ291bGQgbm90IGZpbmQgYSBuZXdsaW5lIGNoYXJhY3RlciBhdCB0aGUgZW5kIG9mIHRoZSBm
aWxlLicKLSAgICAgICAgICAgICAgICAgICAgJyAgW3doaXRlc3BhY2UvZW5kaW5nX25ld2xpbmVd
IFs1XScpKQotCi0gICAgICAgIGRvX3Rlc3Qoc2VsZiwgJy8vIE5ld2xpbmVcbi8vIGF0IEVPRlxu
JywgRmFsc2UpCi0gICAgICAgIGRvX3Rlc3Qoc2VsZiwgJy8vIE5vIG5ld2xpbmVcbi8vIGF0IEVP
RicsIFRydWUpCi0KLSAgICBkZWYgdGVzdF9pbnZhbGlkX3V0Zjgoc2VsZik6Ci0gICAgICAgIGRl
ZiBkb190ZXN0KHNlbGYsIHJhd19ieXRlcywgaGFzX2ludmFsaWRfdXRmOCk6Ci0gICAgICAgICAg
ICBlcnJvcl9jb2xsZWN0b3IgPSBFcnJvckNvbGxlY3RvcihzZWxmLmFzc2VydF8pCi0gICAgICAg
ICAgICBjcHBfc3R5bGUucHJvY2Vzc19maWxlX2RhdGEoCi0gICAgICAgICAgICAgICAgJ2Zvby5j
cHAnLCAnY3BwJywKLSAgICAgICAgICAgICAgICB1bmljb2RlKHJhd19ieXRlcywgJ3V0ZjgnLCAn
cmVwbGFjZScpLnNwbGl0KCdcbicpLAotICAgICAgICAgICAgICAgIGVycm9yX2NvbGxlY3RvcikK
LSAgICAgICAgICAgICMgVGhlIHdhcm5pbmcgYXBwZWFycyBvbmx5IG9uY2UuCi0gICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscygKLSAgICAgICAgICAgICAgICBpbnQoaGFzX2ludmFsaWRfdXRm
OCksCi0gICAgICAgICAgICAgICAgZXJyb3JfY29sbGVjdG9yLnJlc3VsdHMoKS5jb3VudCgKLSAg
ICAgICAgICAgICAgICAgICAgJ0xpbmUgY29udGFpbnMgaW52YWxpZCBVVEYtOCcKLSAgICAgICAg
ICAgICAgICAgICAgJyAob3IgVW5pY29kZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIpLicKLSAgICAg
ICAgICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L3V0ZjhdIFs1XScpKQotCi0gICAgICAgIGRv
X3Rlc3Qoc2VsZiwgJ0hlbGxvIHdvcmxkXG4nLCBGYWxzZSkKLSAgICAgICAgZG9fdGVzdChzZWxm
LCAnXHhlOVx4OGVceGJkXG4nLCBGYWxzZSkKLSAgICAgICAgZG9fdGVzdChzZWxmLCAnXHhlOXhc
eDhlXHhiZFxuJywgVHJ1ZSkKLSAgICAgICAgIyBUaGlzIGlzIHRoZSBlbmNvZGluZyBvZiB0aGUg
cmVwbGFjZW1lbnQgY2hhcmFjdGVyIGl0c2VsZiAod2hpY2gKLSAgICAgICAgIyB5b3UgY2FuIHNl
ZSBieSBldmFsdWF0aW5nIGNvZGVjcy5nZXRlbmNvZGVyKCd1dGY4JykodSdcdWZmZmQnKSkuCi0g
ICAgICAgIGRvX3Rlc3Qoc2VsZiwgJ1x4ZWZceGJmXHhiZFxuJywgVHJ1ZSkKLQotICAgIGRlZiB0
ZXN0X2lzX2JsYW5rX2xpbmUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhjcHBfc3R5bGUu
aXNfYmxhbmtfbGluZSgnJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhjcHBfc3R5bGUuaXNfYmxh
bmtfbGluZSgnICcpKQotICAgICAgICBzZWxmLmFzc2VydF8oY3BwX3N0eWxlLmlzX2JsYW5rX2xp
bmUoJyBcdFxyXG4nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjcHBfc3R5bGUuaXNfYmxh
bmtfbGluZSgnaW50IGE7JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgY3BwX3N0eWxlLmlz
X2JsYW5rX2xpbmUoJ3snKSkKLQotICAgIGRlZiB0ZXN0X2JsYW5rX2xpbmVzX2NoZWNrKHNlbGYp
OgotICAgICAgICBzZWxmLmFzc2VydF9ibGFua19saW5lc19jaGVjayhbJ3tcbicsICdcbicsICdc
bicsICd9XG4nXSwgMSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfYmxhbmtfbGluZXNfY2hlY2so
WycgIGlmIChmb28pIHtcbicsICdcbicsICcgIH1cbiddLCAxLCAxKQotICAgICAgICBzZWxmLmFz
c2VydF9ibGFua19saW5lc19jaGVjaygKLSAgICAgICAgICAgIFsnXG4nLCAnLy8ge1xuJywgJ1xu
JywgJ1xuJywgJy8vIENvbW1lbnRcbicsICd7XG4nLCAnfVxuJ10sIDAsIDApCi0gICAgICAgIHNl
bGYuYXNzZXJ0X2JsYW5rX2xpbmVzX2NoZWNrKFsnXG4nLCAncnVuKCJ7Iik7XG4nLCAnXG4nXSwg
MCwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfYmxhbmtfbGluZXNfY2hlY2soWydcbicsICcgIGlm
IChmb28pIHsgcmV0dXJuIDA7IH1cbicsICdcbiddLCAwLCAwKQotCi0gICAgZGVmIHRlc3RfYWxs
b3dfYmxhbmtfbGluZV9iZWZvcmVfY2xvc2luZ19uYW1lc3BhY2Uoc2VsZik6Ci0gICAgICAgIGVy
cm9yX2NvbGxlY3RvciA9IEVycm9yQ29sbGVjdG9yKHNlbGYuYXNzZXJ0XykKLSAgICAgICAgY3Bw
X3N0eWxlLnByb2Nlc3NfZmlsZV9kYXRhKCdmb28uY3BwJywgJ2NwcCcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBbJ25hbWVzcGFjZSB7JywgJycsICd9ICAvLyBuYW1lc3Bh
Y2UnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvbGxlY3Rv
cikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMCwgZXJyb3JfY29sbGVjdG9yLnJlc3VsdHMo
KS5jb3VudCgKLSAgICAgICAgICAgICdCbGFuayBsaW5lIGF0IHRoZSBlbmQgb2YgYSBjb2RlIGJs
b2NrLiAgSXMgdGhpcyBuZWVkZWQ/JwotICAgICAgICAgICAgJyAgW3doaXRlc3BhY2UvYmxhbmtf
bGluZV0gWzNdJykpCi0KLSAgICBkZWYgdGVzdF9hbGxvd19ibGFua19saW5lX2JlZm9yZV9pZl9l
bHNlX2NoYWluKHNlbGYpOgotICAgICAgICBlcnJvcl9jb2xsZWN0b3IgPSBFcnJvckNvbGxlY3Rv
cihzZWxmLmFzc2VydF8pCi0gICAgICAgIGNwcF9zdHlsZS5wcm9jZXNzX2ZpbGVfZGF0YSgnZm9v
LmNwcCcsICdjcHAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydpZiAo
aG9nZSkgeycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsICAjIE5v
IHdhcm5pbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBlbHNlIGlm
IChwaXlvKSB7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywgICMg
Tm8gd2FybmluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IGVsc2Ug
aWYgKHBpeW9waXlvKSB7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
ICBob2dlID0gdHJ1ZTsnLCAgIyBObyB3YXJuaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ30gZWxzZSB7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnJywgICMgV2FybmluZyBvbiB0aGlzIGxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnfSddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXJyb3JfY29sbGVjdG9yKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygxLCBlcnJvcl9jb2xs
ZWN0b3IucmVzdWx0cygpLmNvdW50KAotICAgICAgICAgICAgJ0JsYW5rIGxpbmUgYXQgdGhlIGVu
ZCBvZiBhIGNvZGUgYmxvY2suICBJcyB0aGlzIG5lZWRlZD8nCi0gICAgICAgICAgICAnICBbd2hp
dGVzcGFjZS9ibGFua19saW5lXSBbM10nKSkKLQotICAgIGRlZiB0ZXN0X2Vsc2Vfb25fc2FtZV9s
aW5lX2FzX2Nsb3NpbmdfYnJhY2VzKHNlbGYpOgotICAgICAgICBlcnJvcl9jb2xsZWN0b3IgPSBF
cnJvckNvbGxlY3RvcihzZWxmLmFzc2VydF8pCi0gICAgICAgIGNwcF9zdHlsZS5wcm9jZXNzX2Zp
bGVfZGF0YSgnZm9vLmNwcCcsICdjcHAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWydpZiAoaG9nZSkgeycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30nLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgZWxzZSB7JyAgIyBXYXJuaW5nIG9uIHRo
aXMgbGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9J10sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlcnJvcl9jb2xsZWN0b3IpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKDEsIGVycm9yX2NvbGxlY3Rvci5yZXN1bHRzKCkuY291bnQoCi0gICAgICAgICAgICAnQW4g
ZWxzZSBzaG91bGQgYXBwZWFyIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIHByZWNlZGluZyB9Jwot
ICAgICAgICAgICAgJyAgW3doaXRlc3BhY2UvbmV3bGluZV0gWzRdJykpCi0KLSAgICBkZWYgdGVz
dF9lbHNlX2NsYXVzZV9ub3Rfb25fc2FtZV9saW5lX2FzX2Vsc2Uoc2VsZik6Ci0gICAgICAgIHNl
bGYuYXNzZXJ0X2xpbnQoJyAgICBlbHNlIERvU29tZXRoaW5nRWxzZSgpOycsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgJ0Vsc2UgY2xhdXNlIHNob3VsZCBuZXZlciBiZSBvbiBzYW1lIGxpbmUg
YXMgZWxzZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyh1c2UgMiBsaW5lcykgIFt3aGl0
ZXNwYWNlL25ld2xpbmVdIFs0XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJyAgICBlbHNl
IGlmRG9Tb21ldGhpbmdFbHNlKCk7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnRWxzZSBj
bGF1c2Ugc2hvdWxkIG5ldmVyIGJlIG9uIHNhbWUgbGluZSBhcyBlbHNlICcKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAnKHVzZSAyIGxpbmVzKSAgW3doaXRlc3BhY2UvbmV3bGluZV0gWzRdJykK
LSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnICAgIGVsc2UgaWYgKGJsYWgpIHsnLCAnJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgnICAgIHZhcmlhYmxlX2VuZHNfaW5fZWxzZSA9IHRydWU7
JywgJycpCi0KLSAgICBkZWYgdGVzdF9jb21tYShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRf
bGludCgnYSA9IGYoMSwyKTsnLAotICAgICAgICAgICAgICAgICAgICAgICAgICdNaXNzaW5nIHNw
YWNlIGFmdGVyICwgIFt3aGl0ZXNwYWNlL2NvbW1hXSBbM10nKQotICAgICAgICBzZWxmLmFzc2Vy
dF9saW50KCdpbnQgdG1wPWEsYT1iLGI9dG1wOycsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
WydNaXNzaW5nIHNwYWNlcyBhcm91bmQgPSAgW3doaXRlc3BhY2Uvb3BlcmF0b3JzXSBbNF0nLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlzc2luZyBzcGFjZSBhZnRlciAsICBbd2hpdGVz
cGFjZS9jb21tYV0gWzNdJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2YoYSwgLyogbmFt
ZSAqLyBiKTsnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnZihhLCAvKiBuYW1lICov
Yik7JywgJycpCi0KLSAgICBkZWYgdGVzdF9wb2ludGVyX3JlZmVyZW5jZV9tYXJrZXJfbG9jYXRp
b24oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCogYjsnLCAnJywgJ2Zvby5j
cHAnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQgKmI7JywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAnRGVjbGFyYXRpb24gaGFzIHNwYWNlIGJldHdlZW4gdHlwZSBuYW1lIGFuZCAq
IGluIGludCAqYiAgW3doaXRlc3BhY2UvZGVjbGFyYXRpb25dIFszXScsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgJ2Zvby5jcHAnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdyZXR1cm4g
KmI7JywgJycsICdmb28uY3BwJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50ICpiOycs
ICcnLCAnZm9vLmMnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQqIGI7JywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAnRGVjbGFyYXRpb24gaGFzIHNwYWNlIGJldHdlZW4gKiBhbmQg
dmFyaWFibGUgbmFtZSBpbiBpbnQqIGIgIFt3aGl0ZXNwYWNlL2RlY2xhcmF0aW9uXSBbM10nLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICdmb28uYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xp
bnQoJ2ludCYgYjsnLCAnJywgJ2Zvby5jcHAnKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdp
bnQgJmI7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnRGVjbGFyYXRpb24gaGFzIHNwYWNl
IGJldHdlZW4gdHlwZSBuYW1lIGFuZCAmIGluIGludCAmYiAgW3doaXRlc3BhY2UvZGVjbGFyYXRp
b25dIFszXScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvby5jcHAnKQotICAgICAgICBz
ZWxmLmFzc2VydF9saW50KCdyZXR1cm4gJmI7JywgJycsICdmb28uY3BwJykKLQotICAgIGRlZiB0
ZXN0X2luZGVudChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnc3RhdGljIGludCBu
b2luZGVudDsnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnICAgIGludCBmb3VyU3Bh
Y2VJbmRlbnQ7JywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJyBpbnQgb25lU3BhY2VJ
bmRlbnQ7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnV2VpcmQgbnVtYmVyIG9mIHNwYWNl
cyBhdCBsaW5lLXN0YXJ0LiAgJwotICAgICAgICAgICAgICAgICAgICAgICAgICdBcmUgeW91IHVz
aW5nIGEgNC1zcGFjZSBpbmRlbnQ/ICBbd2hpdGVzcGFjZS9pbmRlbnRdIFszXScpCi0gICAgICAg
IHNlbGYuYXNzZXJ0X2xpbnQoJyAgIGludCB0aHJlZVNwYWNlSW5kZW50OycsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgJ1dlaXJkIG51bWJlciBvZiBzcGFjZXMgYXQgbGluZS1zdGFydC4gICcK
LSAgICAgICAgICAgICAgICAgICAgICAgICAnQXJlIHlvdSB1c2luZyBhIDQtc3BhY2UgaW5kZW50
PyAgW3doaXRlc3BhY2UvaW5kZW50XSBbM10nKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCcg
Y2hhciogb25lU3BhY2VJbmRlbnQgPSAicHVibGljOiI7JywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAnV2VpcmQgbnVtYmVyIG9mIHNwYWNlcyBhdCBsaW5lLXN0YXJ0LiAgJwotICAgICAgICAg
ICAgICAgICAgICAgICAgICdBcmUgeW91IHVzaW5nIGEgNC1zcGFjZSBpbmRlbnQ/ICBbd2hpdGVz
cGFjZS9pbmRlbnRdIFszXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJyBwdWJsaWM6Jywg
JycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJyAgcHVibGljOicsICcnKQotICAgICAgICBz
ZWxmLmFzc2VydF9saW50KCcgICBwdWJsaWM6JywgJycpCi0KLSAgICBkZWYgdGVzdF9sYWJlbChz
ZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgncHVibGljOicsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgJ0xhYmVscyBzaG91bGQgYWx3YXlzIGJlIGluZGVudGVkIGF0IGxlYXN0IG9u
ZSBzcGFjZS4gICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAnSWYgdGhpcyBpcyBhIG1lbWJl
ci1pbml0aWFsaXplciBsaXN0IGluIGEgY29uc3RydWN0b3IsICcKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAndGhlIGNvbG9uIHNob3VsZCBiZSBvbiB0aGUgbGluZSBhZnRlciB0aGUgZGVmaW5p
dGlvbiAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2hlYWRlci4gIFt3aGl0ZXNwYWNlL2xh
YmVsc10gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnICBwdWJsaWM6JywgJycpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJyAgIHB1YmxpYzonLCAnJykKLSAgICAgICAgc2VsZi5h
c3NlcnRfbGludCgnIHB1YmxpYzonLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnICBw
dWJsaWM6JywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJyAgIHB1YmxpYzonLCAnJykK
LQotICAgIGRlZiB0ZXN0X25vdF9hbGFiZWwoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xp
bnQoJ015VmVyeUxvbmdOYW1lc3BhY2U6Ok15VmVyeUxvbmdDbGFzc05hbWU6OicsICcnKQotCi0g
ICAgZGVmIHRlc3RfdGFiKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdcdGludCBh
OycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ1RhYiBmb3VuZDsgYmV0dGVyIHRvIHVzZSBz
cGFjZXMgIFt3aGl0ZXNwYWNlL3RhYl0gWzFdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgn
aW50IGEgPSA1O1x0Ly8gc2V0IGEgdG8gNScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ1Rh
YiBmb3VuZDsgYmV0dGVyIHRvIHVzZSBzcGFjZXMgIFt3aGl0ZXNwYWNlL3RhYl0gWzFdJykKLQot
ICAgIGRlZiB0ZXN0X2ZpbHRlcihzZWxmKToKLSAgICAgICAgb2xkX2ZpbHRlcnMgPSBjcHBfc3R5
bGUuX2NwcF9zdHlsZV9zdGF0ZS5maWx0ZXJzCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNw
cF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLnNldF9maWx0ZXJzKFsnLScsICcrd2hpdGVzcGFjZScs
ICctd2hpdGVzcGFjZS9pbmRlbnQnXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0g
ICAgICAgICAgICAgICAgJy8vIEhlbGxvIHRoZXJlICcsCi0gICAgICAgICAgICAgICAgJ0xpbmUg
ZW5kcyBpbiB3aGl0ZXNwYWNlLiAgQ29uc2lkZXIgZGVsZXRpbmcgdGhlc2UgZXh0cmEgc3BhY2Vz
LicKLSAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9lbmRfb2ZfbGluZV0gWzRdJykKLSAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBhID0gKGludCkxLjA7JywgJycpCi0gICAg
ICAgICAgICBzZWxmLmFzc2VydF9saW50KCcgd2VpcmQgb3BlbmluZyBzcGFjZScsICcnKQotICAg
ICAgICBmaW5hbGx5OgotICAgICAgICAgICAgY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUuZmls
dGVycyA9IG9sZF9maWx0ZXJzCi0KLSAgICBkZWYgdGVzdF9maWx0ZXJfYXBwZW5kaW5nKHNlbGYp
OgotICAgICAgICBvbGRfZmlsdGVycyA9IGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLmZpbHRl
cnMKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBSZXNldCBmaWx0ZXJzCi0gICAgICAgICAg
ICBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS5zZXRfZmlsdGVycyhbJy13aGl0ZXNwYWNlJ10p
Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF9saW50KCcvLyBIZWxsbyB0aGVyZSAnLCAnJykKLSAg
ICAgICAgICAgIGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLnNldF9maWx0ZXJzKFsnLXdoaXRl
c3BhY2UnLCAnK3doaXRlc3BhY2UvZW5kX29mX2xpbmUnXSkKLSAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0X2xpbnQoCi0gICAgICAgICAgICAgICAgJy8vIEhlbGxvIHRoZXJlICcsCi0gICAgICAgICAg
ICAgICAgJ0xpbmUgZW5kcyBpbiB3aGl0ZXNwYWNlLiAgQ29uc2lkZXIgZGVsZXRpbmcgdGhlc2Ug
ZXh0cmEgc3BhY2VzLicKLSAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9lbmRfb2ZfbGlu
ZV0gWzRdJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJyB3ZWlyZCBvcGVuaW5nIHNw
YWNlJywgJycpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBjcHBfc3R5bGUuX2NwcF9z
dHlsZV9zdGF0ZS5maWx0ZXJzID0gb2xkX2ZpbHRlcnMKLQotICAgIGRlZiB0ZXN0X3VubmFtZWRf
bmFtZXNwYWNlc19pbl9oZWFkZXJzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFn
ZV9ydWxlc19jaGVjaygKLSAgICAgICAgICAgICdmb28uaCcsICduYW1lc3BhY2UgeycsCi0gICAg
ICAgICAgICAnRG8gbm90IHVzZSB1bm5hbWVkIG5hbWVzcGFjZXMgaW4gaGVhZGVyIGZpbGVzLiAg
U2VlJwotICAgICAgICAgICAgJyBodHRwOi8vZ29vZ2xlLXN0eWxlZ3VpZGUuZ29vZ2xlY29kZS5j
b20vc3ZuL3RydW5rL2NwcGd1aWRlLnhtbCNOYW1lc3BhY2VzJwotICAgICAgICAgICAgJyBmb3Ig
bW9yZSBpbmZvcm1hdGlvbi4gIFtidWlsZC9uYW1lc3BhY2VzXSBbNF0nKQotICAgICAgICAjIG5h
bWVzcGFjZSByZWdpc3RyYXRpb24gbWFjcm9zIGFyZSBPSy4KLSAgICAgICAgc2VsZi5hc3NlcnRf
bGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby5oJywgJ25hbWVzcGFjZSB7ICBcXCcsICcnKQotICAg
ICAgICAjIG5hbWVkIG5hbWVzcGFjZXMgYXJlIE9LLgotICAgICAgICBzZWxmLmFzc2VydF9sYW5n
dWFnZV9ydWxlc19jaGVjaygnZm9vLmgnLCAnbmFtZXNwYWNlIGZvbyB7JywgJycpCi0gICAgICAg
IHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28uaCcsICduYW1lc3BhY2UgZm9v
bmFtZXNwYWNlIHsnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hl
Y2soJ2Zvby5jcHAnLCAnbmFtZXNwYWNlIHsnLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGFu
Z3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby5jcHAnLCAnbmFtZXNwYWNlIGZvbyB7JywgJycpCi0KLSAg
ICBkZWYgdGVzdF9idWlsZF9jbGFzcyhzZWxmKToKLSAgICAgICAgIyBUZXN0IHRoYXQgdGhlIGxp
bnRlciBjYW4gcGFyc2UgdG8gdGhlIGVuZCBvZiBjbGFzcyBkZWZpbml0aW9ucywKLSAgICAgICAg
IyBhbmQgdGhhdCBpdCB3aWxsIHJlcG9ydCB3aGVuIGl0IGNhbid0LgotICAgICAgICAjIFVzZSBt
dWx0aS1saW5lIGxpbnRlciBiZWNhdXNlIGl0IHBlcmZvcm1zIHRoZSBDbGFzc1N0YXRlIGNoZWNr
LgotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnY2xh
c3MgRm9vIHsnLAotICAgICAgICAgICAgJ0ZhaWxlZCB0byBmaW5kIGNvbXBsZXRlIGRlY2xhcmF0
aW9uIG9mIGNsYXNzIEZvbycKLSAgICAgICAgICAgICcgIFtidWlsZC9jbGFzc10gWzVdJykKLSAg
ICAgICAgIyBEb24ndCB3YXJuIG9uIGZvcndhcmQgZGVjbGFyYXRpb25zIG9mIHZhcmlvdXMgdHlw
ZXMuCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdj
bGFzcyBGb287JywKLSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9s
aW5lX2xpbnQoCi0gICAgICAgICAgICAnJydzdHJ1Y3QgRm9vKgotICAgICAgICAgICAgICAgICBm
b28gPSBOZXdGb28oKTsnJycsCi0gICAgICAgICAgICAnJykKLSAgICAgICAgIyBIZXJlIGlzIGFu
IGV4YW1wbGUgd2hlcmUgdGhlIGxpbnRlciBnZXRzIGNvbmZ1c2VkLCBldmVuIHRob3VnaAotICAg
ICAgICAjIHRoZSBjb2RlIGRvZXNuJ3QgdmlvbGF0ZSB0aGUgc3R5bGUgZ3VpZGUuCi0gICAgICAg
IHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICcnJ2NsYXNzIEZvbwot
ICAgICAgICAgICAgI2lmZGVmIERFUklWRV9GUk9NX0dPTwotICAgICAgICAgICAgICA6IHB1Ymxp
YyBHb28gewotICAgICAgICAgICAgI2Vsc2UKLSAgICAgICAgICAgICAgOiBwdWJsaWMgSG9vIHsK
LSAgICAgICAgICAgICNlbmRpZgotICAgICAgICAgICAgICB9OycnJywKLSAgICAgICAgICAgICdG
YWlsZWQgdG8gZmluZCBjb21wbGV0ZSBkZWNsYXJhdGlvbiBvZiBjbGFzcyBGb28nCi0gICAgICAg
ICAgICAnICBbYnVpbGQvY2xhc3NdIFs1XScpCi0KLSAgICBkZWYgdGVzdF9idWlsZF9lbmRfY29t
bWVudChzZWxmKToKLSAgICAgICAgIyBUaGUgY3Jvc3N0b29sIGNvbXBpbGVyIHdlIGN1cnJlbnRs
eSB1c2Ugd2lsbCBmYWlsIHRvIGNvbXBpbGUgdGhlCi0gICAgICAgICMgY29kZSBpbiB0aGlzIHRl
c3QsIHNvIHdlIG1pZ2h0IGNvbnNpZGVyIHJlbW92aW5nIHRoZSBsaW50IGNoZWNrLgotICAgICAg
ICBzZWxmLmFzc2VydF9saW50KCcjZW5kaWYgTm90IGEgY29tbWVudCcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgJ1VuY29tbWVudGVkIHRleHQgYWZ0ZXIgI2VuZGlmIGlzIG5vbi1zdGFuZGFy
ZC4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgVXNlIGEgY29tbWVudC4nCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgJyAgW2J1aWxkL2VuZGlmX2NvbW1lbnRdIFs1XScpCi0KLSAgICBk
ZWYgdGVzdF9idWlsZF9mb3J3YXJkX2RlY2woc2VsZik6Ci0gICAgICAgICMgVGhlIGNyb3NzdG9v
bCBjb21waWxlciB3ZSBjdXJyZW50bHkgdXNlIHdpbGwgZmFpbCB0byBjb21waWxlIHRoZQotICAg
ICAgICAjIGNvZGUgaW4gdGhpcyB0ZXN0LCBzbyB3ZSBtaWdodCBjb25zaWRlciByZW1vdmluZyB0
aGUgbGludCBjaGVjay4KLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnY2xhc3MgRm9vOjpHb287
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnSW5uZXItc3R5bGUgZm9yd2FyZCBkZWNsYXJh
dGlvbnMgYXJlIGludmFsaWQuJwotICAgICAgICAgICAgICAgICAgICAgICAgICcgIFJlbW92ZSB0
aGlzIGxpbmUuJwotICAgICAgICAgICAgICAgICAgICAgICAgICcgIFtidWlsZC9mb3J3YXJkX2Rl
Y2xdIFs1XScpCi0KLSAgICBkZWYgdGVzdF9idWlsZF9oZWFkZXJfZ3VhcmQoc2VsZik6Ci0gICAg
ICAgIGZpbGVfcGF0aCA9ICdteWRpci9Gb28uaCcKLQotICAgICAgICAjIFdlIGNhbid0IHJlbHkg
b24gb3VyIGludGVybmFsIHN0dWZmIHRvIGdldCBhIHNhbmUgcGF0aCBvbiB0aGUgb3BlbiBzb3Vy
Y2UKLSAgICAgICAgIyBzaWRlIG9mIHRoaW5ncywgc28ganVzdCBwYXJzZSBvdXQgdGhlIHN1Z2dl
c3RlZCBoZWFkZXIgZ3VhcmQuIFRoaXMKLSAgICAgICAgIyBkb2Vzbid0IGFsbG93IHVzIHRvIHRl
c3QgdGhlIHN1Z2dlc3RlZCBoZWFkZXIgZ3VhcmQsIGJ1dCBpdCBkb2VzIGxldCB1cwotICAgICAg
ICAjIHRlc3QgYWxsIHRoZSBvdGhlciBoZWFkZXIgdGVzdHMuCi0gICAgICAgIGVycm9yX2NvbGxl
Y3RvciA9IEVycm9yQ29sbGVjdG9yKHNlbGYuYXNzZXJ0XykKLSAgICAgICAgY3BwX3N0eWxlLnBy
b2Nlc3NfZmlsZV9kYXRhKGZpbGVfcGF0aCwgJ2gnLCBbXSwgZXJyb3JfY29sbGVjdG9yKQotICAg
ICAgICBleHBlY3RlZF9ndWFyZCA9ICcnCi0gICAgICAgIG1hdGNoZXIgPSByZS5jb21waWxlKAot
ICAgICAgICAgICAgJ05vIFwjaWZuZGVmIGhlYWRlciBndWFyZCBmb3VuZFwsIHN1Z2dlc3RlZCBD
UFAgdmFyaWFibGUgaXNcOiAoW0EtWmEtel8wLTldKykgJykKLSAgICAgICAgZm9yIGVycm9yIGlu
IGVycm9yX2NvbGxlY3Rvci5yZXN1bHRfbGlzdCgpOgotICAgICAgICAgICAgbWF0Y2hlcyA9IG1h
dGNoZXIubWF0Y2goZXJyb3IpCi0gICAgICAgICAgICBpZiBtYXRjaGVzOgotICAgICAgICAgICAg
ICAgIGV4cGVjdGVkX2d1YXJkID0gbWF0Y2hlcy5ncm91cCgxKQotICAgICAgICAgICAgICAgIGJy
ZWFrCi0KLSAgICAgICAgIyBNYWtlIHN1cmUgd2UgZXh0cmFjdGVkIHNvbWV0aGluZyBmb3Igb3Vy
IGhlYWRlciBndWFyZC4KLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChleHBlY3RlZF9ndWFy
ZCwgJycpCi0KLSAgICAgICAgIyBXcm9uZyBndWFyZAotICAgICAgICBlcnJvcl9jb2xsZWN0b3Ig
PSBFcnJvckNvbGxlY3RvcihzZWxmLmFzc2VydF8pCi0gICAgICAgIGNwcF9zdHlsZS5wcm9jZXNz
X2ZpbGVfZGF0YShmaWxlX3BhdGgsICdoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFsnI2lmbmRlZiBGT09fSCcsICcjZGVmaW5lIEZPT19IJ10sIGVycm9yX2NvbGxlY3Rv
cikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCi0gICAgICAgICAgICAxLAotICAgICAgICAg
ICAgZXJyb3JfY29sbGVjdG9yLnJlc3VsdF9saXN0KCkuY291bnQoCi0gICAgICAgICAgICAgICAg
JyNpZm5kZWYgaGVhZGVyIGd1YXJkIGhhcyB3cm9uZyBzdHlsZSwgcGxlYXNlIHVzZTogJXMnCi0g
ICAgICAgICAgICAgICAgJyAgW2J1aWxkL2hlYWRlcl9ndWFyZF0gWzVdJyAlIGV4cGVjdGVkX2d1
YXJkKSwKLSAgICAgICAgICAgIGVycm9yX2NvbGxlY3Rvci5yZXN1bHRfbGlzdCgpKQotCi0gICAg
ICAgICMgTm8gZGVmaW5lCi0gICAgICAgIGVycm9yX2NvbGxlY3RvciA9IEVycm9yQ29sbGVjdG9y
KHNlbGYuYXNzZXJ0XykKLSAgICAgICAgY3BwX3N0eWxlLnByb2Nlc3NfZmlsZV9kYXRhKGZpbGVf
cGF0aCwgJ2gnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycjaWZuZGVm
ICVzJyAlIGV4cGVjdGVkX2d1YXJkXSwgZXJyb3JfY29sbGVjdG9yKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFscygKLSAgICAgICAgICAgIDEsCi0gICAgICAgICAgICBlcnJvcl9jb2xsZWN0b3Iu
cmVzdWx0X2xpc3QoKS5jb3VudCgKLSAgICAgICAgICAgICAgICAnTm8gI2lmbmRlZiBoZWFkZXIg
Z3VhcmQgZm91bmQsIHN1Z2dlc3RlZCBDUFAgdmFyaWFibGUgaXM6ICVzJwotICAgICAgICAgICAg
ICAgICcgIFtidWlsZC9oZWFkZXJfZ3VhcmRdIFs1XScgJSBleHBlY3RlZF9ndWFyZCksCi0gICAg
ICAgICAgICBlcnJvcl9jb2xsZWN0b3IucmVzdWx0X2xpc3QoKSkKLQotICAgICAgICAjIE1pc21h
dGNoZWQgZGVmaW5lCi0gICAgICAgIGVycm9yX2NvbGxlY3RvciA9IEVycm9yQ29sbGVjdG9yKHNl
bGYuYXNzZXJ0XykKLSAgICAgICAgY3BwX3N0eWxlLnByb2Nlc3NfZmlsZV9kYXRhKGZpbGVfcGF0
aCwgJ2gnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycjaWZuZGVmICVz
JyAlIGV4cGVjdGVkX2d1YXJkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICcjZGVmaW5lIEZPT19IJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
cnJvcl9jb2xsZWN0b3IpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAotICAgICAgICAgICAg
MSwKLSAgICAgICAgICAgIGVycm9yX2NvbGxlY3Rvci5yZXN1bHRfbGlzdCgpLmNvdW50KAotICAg
ICAgICAgICAgICAgICdObyAjaWZuZGVmIGhlYWRlciBndWFyZCBmb3VuZCwgc3VnZ2VzdGVkIENQ
UCB2YXJpYWJsZSBpczogJXMnCi0gICAgICAgICAgICAgICAgJyAgW2J1aWxkL2hlYWRlcl9ndWFy
ZF0gWzVdJyAlIGV4cGVjdGVkX2d1YXJkKSwKLSAgICAgICAgICAgIGVycm9yX2NvbGxlY3Rvci5y
ZXN1bHRfbGlzdCgpKQotCi0gICAgICAgICMgTm8gaGVhZGVyIGd1YXJkIGVycm9ycwotICAgICAg
ICBlcnJvcl9jb2xsZWN0b3IgPSBFcnJvckNvbGxlY3RvcihzZWxmLmFzc2VydF8pCi0gICAgICAg
IGNwcF9zdHlsZS5wcm9jZXNzX2ZpbGVfZGF0YShmaWxlX3BhdGgsICdoJywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFsnI2lmbmRlZiAlcycgJSBleHBlY3RlZF9ndWFyZCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2RlZmluZSAlcycgJSBleHBl
Y3RlZF9ndWFyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2VuZGlm
IC8vICVzJyAlIGV4cGVjdGVkX2d1YXJkXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVycm9yX2NvbGxlY3RvcikKLSAgICAgICAgZm9yIGxpbmUgaW4gZXJyb3JfY29sbGVj
dG9yLnJlc3VsdF9saXN0KCk6Ci0gICAgICAgICAgICBpZiBsaW5lLmZpbmQoJ2J1aWxkL2hlYWRl
cl9ndWFyZCcpICE9IC0xOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5leHBlY3RlZCBl
cnJvcjogJXMnICUgbGluZSkKLQotICAgICAgICAjIENvbXBsZXRlbHkgaW5jb3JyZWN0IGhlYWRl
ciBndWFyZAotICAgICAgICBlcnJvcl9jb2xsZWN0b3IgPSBFcnJvckNvbGxlY3RvcihzZWxmLmFz
c2VydF8pCi0gICAgICAgIGNwcF9zdHlsZS5wcm9jZXNzX2ZpbGVfZGF0YShmaWxlX3BhdGgsICdo
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnI2lmbmRlZiBGT08nLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjZGVmaW5lIEZPTycsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNlbmRpZiAgLy8gRk9PJ10sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2xsZWN0b3IpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKAotICAgICAgICAgICAgMSwKLSAgICAgICAgICAgIGVycm9yX2Nv
bGxlY3Rvci5yZXN1bHRfbGlzdCgpLmNvdW50KAotICAgICAgICAgICAgICAgICcjaWZuZGVmIGhl
YWRlciBndWFyZCBoYXMgd3Jvbmcgc3R5bGUsIHBsZWFzZSB1c2U6ICVzJwotICAgICAgICAgICAg
ICAgICcgIFtidWlsZC9oZWFkZXJfZ3VhcmRdIFs1XScgJSBleHBlY3RlZF9ndWFyZCksCi0gICAg
ICAgICAgICBlcnJvcl9jb2xsZWN0b3IucmVzdWx0X2xpc3QoKSkKLQotICAgIGRlZiB0ZXN0X2J1
aWxkX3ByaW50Zl9mb3JtYXQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAg
ICAgICAgICByJ3ByaW50ZigiXCUlZCIsIHZhbHVlKTsnLAotICAgICAgICAgICAgJyUsIFssICgs
IGFuZCB7IGFyZSB1bmRlZmluZWQgY2hhcmFjdGVyIGVzY2FwZXMuICBVbmVzY2FwZSB0aGVtLicK
LSAgICAgICAgICAgICcgIFtidWlsZC9wcmludGZfZm9ybWF0XSBbM10nKQotCi0gICAgICAgIHNl
bGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICByJ3NucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1
ZmZlciksICJcWyVkIiwgdmFsdWUpOycsCi0gICAgICAgICAgICAnJSwgWywgKCwgYW5kIHsgYXJl
IHVuZGVmaW5lZCBjaGFyYWN0ZXIgZXNjYXBlcy4gIFVuZXNjYXBlIHRoZW0uJwotICAgICAgICAg
ICAgJyAgW2J1aWxkL3ByaW50Zl9mb3JtYXRdIFszXScpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRf
bGludCgKLSAgICAgICAgICAgIHInZnByaW50ZihmaWxlLCAiXCglZCIsIHZhbHVlKTsnLAotICAg
ICAgICAgICAgJyUsIFssICgsIGFuZCB7IGFyZSB1bmRlZmluZWQgY2hhcmFjdGVyIGVzY2FwZXMu
ICBVbmVzY2FwZSB0aGVtLicKLSAgICAgICAgICAgICcgIFtidWlsZC9wcmludGZfZm9ybWF0XSBb
M10nKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICByJ3ZzbnByaW50
ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiXFxceyVkIiwgYXApOycsCi0gICAgICAgICAgICAn
JSwgWywgKCwgYW5kIHsgYXJlIHVuZGVmaW5lZCBjaGFyYWN0ZXIgZXNjYXBlcy4gIFVuZXNjYXBl
IHRoZW0uJwotICAgICAgICAgICAgJyAgW2J1aWxkL3ByaW50Zl9mb3JtYXRdIFszXScpCi0KLSAg
ICAgICAgIyBEb24ndCB3YXJuIGlmIGRvdWJsZS1zbGFzaCBwcmVjZWRlcyB0aGUgc3ltYm9sCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQocidwcmludGYoIlxcJSUlZCIsIHZhbHVlKTsnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICcnKQotCi0gICAgZGVmIHRlc3RfcnVudGltZV9wcmludGZf
Zm9ybWF0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgcidm
cHJpbnRmKGZpbGUsICIlcSIsIHZhbHVlKTsnLAotICAgICAgICAgICAgJyVxIGluIGZvcm1hdCBz
dHJpbmdzIGlzIGRlcHJlY2F0ZWQuICBVc2UgJWxsIGluc3RlYWQuJwotICAgICAgICAgICAgJyAg
W3J1bnRpbWUvcHJpbnRmX2Zvcm1hdF0gWzNdJykKLQotICAgICAgICBzZWxmLmFzc2VydF9saW50
KAotICAgICAgICAgICAgcidhcHJpbnRmKGZpbGUsICJUaGUgbnVtYmVyIGlzICUxMnEiLCB2YWx1
ZSk7JywKLSAgICAgICAgICAgICclcSBpbiBmb3JtYXQgc3RyaW5ncyBpcyBkZXByZWNhdGVkLiAg
VXNlICVsbCBpbnN0ZWFkLicKLSAgICAgICAgICAgICcgIFtydW50aW1lL3ByaW50Zl9mb3JtYXRd
IFszXScpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgIHIncHJpbnRm
KGZpbGUsICJUaGUgbnVtYmVyIGlzIiAiJS0xMnEiLCB2YWx1ZSk7JywKLSAgICAgICAgICAgICcl
cSBpbiBmb3JtYXQgc3RyaW5ncyBpcyBkZXByZWNhdGVkLiAgVXNlICVsbCBpbnN0ZWFkLicKLSAg
ICAgICAgICAgICcgIFtydW50aW1lL3ByaW50Zl9mb3JtYXRdIFszXScpCi0KLSAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgIHIncHJpbnRmKGZpbGUsICJUaGUgbnVtYmVyIGlz
IiAiJSsxMnEiLCB2YWx1ZSk7JywKLSAgICAgICAgICAgICclcSBpbiBmb3JtYXQgc3RyaW5ncyBp
cyBkZXByZWNhdGVkLiAgVXNlICVsbCBpbnN0ZWFkLicKLSAgICAgICAgICAgICcgIFtydW50aW1l
L3ByaW50Zl9mb3JtYXRdIFszXScpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAg
ICAgICAgIHIncHJpbnRmKGZpbGUsICJUaGUgbnVtYmVyIGlzIiAiJSAxMnEiLCB2YWx1ZSk7JywK
LSAgICAgICAgICAgICclcSBpbiBmb3JtYXQgc3RyaW5ncyBpcyBkZXByZWNhdGVkLiAgVXNlICVs
bCBpbnN0ZWFkLicKLSAgICAgICAgICAgICcgIFtydW50aW1lL3ByaW50Zl9mb3JtYXRdIFszXScp
Ci0KLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgIHInc25wcmludGYoZmls
ZSwgIk5ldmVyIG1peCAlZCBhbmQgJTEkZCBwYXJtYWV0ZXJzISIsIHZhbHVlKTsnLAotICAgICAg
ICAgICAgJyVOJCBmb3JtYXRzIGFyZSB1bmNvbnZlbnRpb25hbC4gIFRyeSByZXdyaXRpbmcgdG8g
YXZvaWQgdGhlbS4nCi0gICAgICAgICAgICAnICBbcnVudGltZS9wcmludGZfZm9ybWF0XSBbMl0n
KQotCi0gICAgZGVmIGFzc2VydF9saW50TG9nQ29kZU9uRXJyb3Ioc2VsZiwgY29kZSwgZXhwZWN0
ZWRfbWVzc2FnZSk6Ci0gICAgICAgICMgU3BlY2lhbCBhc3NlcnRfbGludCB3aGljaCBsb2dzIHRo
ZSBpbnB1dCBjb2RlIG9uIGVycm9yLgotICAgICAgICByZXN1bHQgPSBzZWxmLnBlcmZvcm1fc2lu
Z2xlX2xpbmVfbGludChjb2RlLCAnZm9vLmNwcCcpCi0gICAgICAgIGlmIHJlc3VsdCAhPSBleHBl
Y3RlZF9tZXNzYWdlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCdGb3IgY29kZTogIiVzIlxuR290
OiAiJXMiXG5FeHBlY3RlZDogIiVzIicKLSAgICAgICAgICAgICAgICAgICAgICAlIChjb2RlLCBy
ZXN1bHQsIGV4cGVjdGVkX21lc3NhZ2UpKQotCi0gICAgZGVmIHRlc3RfYnVpbGRfc3RvcmFnZV9j
bGFzcyhzZWxmKToKLSAgICAgICAgcXVhbGlmaWVycyA9IFtOb25lLCAnY29uc3QnLCAndm9sYXRp
bGUnXQotICAgICAgICBzaWducyA9IFtOb25lLCAnc2lnbmVkJywgJ3Vuc2lnbmVkJ10KLSAgICAg
ICAgdHlwZXMgPSBbJ3ZvaWQnLCAnY2hhcicsICdpbnQnLCAnZmxvYXQnLCAnZG91YmxlJywKLSAg
ICAgICAgICAgICAgICAgJ3NjaGFyJywgJ2ludDgnLCAndWludDgnLCAnaW50MTYnLCAndWludDE2
JywKLSAgICAgICAgICAgICAgICAgJ2ludDMyJywgJ3VpbnQzMicsICdpbnQ2NCcsICd1aW50NjQn
XQotICAgICAgICBzdG9yYWdlX2NsYXNzZXMgPSBbJ2F1dG8nLCAnZXh0ZXJuJywgJ3JlZ2lzdGVy
JywgJ3N0YXRpYycsICd0eXBlZGVmJ10KLQotICAgICAgICBidWlsZF9zdG9yYWdlX2NsYXNzX2Vy
cm9yX21lc3NhZ2UgPSAoCi0gICAgICAgICAgICAnU3RvcmFnZSBjbGFzcyAoc3RhdGljLCBleHRl
cm4sIHR5cGVkZWYsIGV0Yykgc2hvdWxkIGJlIGZpcnN0LicKLSAgICAgICAgICAgICcgIFtidWls
ZC9zdG9yYWdlX2NsYXNzXSBbNV0nKQotCi0gICAgICAgICMgU29tZSBleHBsaWNpdCBjYXNlcy4g
TGVnYWwgaW4gQysrLCBkZXByZWNhdGVkIGluIEM5OS4KLSAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgnY29uc3QgaW50IHN0YXRpYyBmb28gPSA1OycsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
YnVpbGRfc3RvcmFnZV9jbGFzc19lcnJvcl9tZXNzYWdlKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0
X2xpbnQoJ2NoYXIgc3RhdGljIGZvbzsnLAotICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxk
X3N0b3JhZ2VfY2xhc3NfZXJyb3JfbWVzc2FnZSkKLQotICAgICAgICBzZWxmLmFzc2VydF9saW50
KCdkb3VibGUgY29uc3Qgc3RhdGljIGZvbyA9IDIuMDsnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIGJ1aWxkX3N0b3JhZ2VfY2xhc3NfZXJyb3JfbWVzc2FnZSkKLQotICAgICAgICBzZWxmLmFz
c2VydF9saW50KCd1aW50NjQgdHlwZWRlZiB1bnNpZ25lZExvbmdMb25nOycsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgYnVpbGRfc3RvcmFnZV9jbGFzc19lcnJvcl9tZXNzYWdlKQotCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCByZWdpc3RlciBmb28gPSAwOycsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgYnVpbGRfc3RvcmFnZV9jbGFzc19lcnJvcl9tZXNzYWdlKQotCi0gICAg
ICAgICMgU2luY2UgdGhlcmUgYXJlIGEgdmVyeSBsYXJnZSBudW1iZXIgb2YgcG9zc2liaWxpdGll
cywgcmFuZG9tbHkKLSAgICAgICAgIyBjb25zdHJ1Y3QgZGVjbGFyYXRpb25zLgotICAgICAgICAj
IE1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNsYXJhdGlvbiBpcyBsb2dnZWQgaWYgdGhlcmUncyBhbiBl
cnJvci4KLSAgICAgICAgIyBTZWVkIGdlbmVyYXRvciB3aXRoIGFuIGludGVnZXIgZm9yIGFic29s
dXRlIHJlcHJvZHVjaWJpbGl0eS4KLSAgICAgICAgcmFuZG9tLnNlZWQoMjUpCi0gICAgICAgIGZv
ciB1bnVzZWRfaSBpbiByYW5nZSgxMCk6Ci0gICAgICAgICAgICAjIEJ1aWxkIHVwIHJhbmRvbSBs
aXN0IG9mIG5vbi1zdG9yYWdlLWNsYXNzIGRlY2xhcmF0aW9uIHNwZWNzLgotICAgICAgICAgICAg
b3RoZXJfZGVjbF9zcGVjcyA9IFtyYW5kb20uY2hvaWNlKHF1YWxpZmllcnMpLCByYW5kb20uY2hv
aWNlKHNpZ25zKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tLmNob2lj
ZSh0eXBlcyldCi0gICAgICAgICAgICAjIHJlbW92ZSBOb25lCi0gICAgICAgICAgICBvdGhlcl9k
ZWNsX3NwZWNzID0gZmlsdGVyKGxhbWJkYSB4OiB4IGlzIG5vdCBOb25lLCBvdGhlcl9kZWNsX3Nw
ZWNzKQotCi0gICAgICAgICAgICAjIHNodWZmbGUKLSAgICAgICAgICAgIHJhbmRvbS5zaHVmZmxl
KG90aGVyX2RlY2xfc3BlY3MpCi0KLSAgICAgICAgICAgICMgaW5zZXJ0IHN0b3JhZ2UgY2xhc3Mg
YWZ0ZXIgdGhlIGZpcnN0Ci0gICAgICAgICAgICBzdG9yYWdlX2NsYXNzID0gcmFuZG9tLmNob2lj
ZShzdG9yYWdlX2NsYXNzZXMpCi0gICAgICAgICAgICBpbnNlcnRpb25fcG9pbnQgPSByYW5kb20u
cmFuZGludCgxLCBsZW4ob3RoZXJfZGVjbF9zcGVjcykpCi0gICAgICAgICAgICBkZWNsX3NwZWNz
ID0gKG90aGVyX2RlY2xfc3BlY3NbMDppbnNlcnRpb25fcG9pbnRdCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICsgW3N0b3JhZ2VfY2xhc3NdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICsg
b3RoZXJfZGVjbF9zcGVjc1tpbnNlcnRpb25fcG9pbnQ6XSkKLQotICAgICAgICAgICAgc2VsZi5h
c3NlcnRfbGludExvZ0NvZGVPbkVycm9yKAotICAgICAgICAgICAgICAgICcgJy5qb2luKGRlY2xf
c3BlY3MpICsgJzsnLAotICAgICAgICAgICAgICAgIGJ1aWxkX3N0b3JhZ2VfY2xhc3NfZXJyb3Jf
bWVzc2FnZSkKLQotICAgICAgICAgICAgIyBidXQgbm8gZXJyb3IgaWYgc3RvcmFnZSBjbGFzcyBp
cyBmaXJzdAotICAgICAgICAgICAgc2VsZi5hc3NlcnRfbGludExvZ0NvZGVPbkVycm9yKAotICAg
ICAgICAgICAgICAgIHN0b3JhZ2VfY2xhc3MgKyAnICcgKyAnICcuam9pbihvdGhlcl9kZWNsX3Nw
ZWNzKSwKLSAgICAgICAgICAgICAgICAnJykKLQotICAgIGRlZiB0ZXN0X2xlZ2FsX2NvcHlyaWdo
dChzZWxmKToKLSAgICAgICAgbGVnYWxfY29weXJpZ2h0X21lc3NhZ2UgPSAoCi0gICAgICAgICAg
ICAnTm8gY29weXJpZ2h0IG1lc3NhZ2UgZm91bmQuICAnCi0gICAgICAgICAgICAnWW91IHNob3Vs
ZCBoYXZlIGEgbGluZTogIkNvcHlyaWdodCBbeWVhcl0gPENvcHlyaWdodCBPd25lcj4iJwotICAg
ICAgICAgICAgJyAgW2xlZ2FsL2NvcHlyaWdodF0gWzVdJykKLQotICAgICAgICBjb3B5cmlnaHRf
bGluZSA9ICcvLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LicKLQotICAgICAgICBmaWxlX3BhdGggPSAnbXlkaXIvZ29vZ2xlY2xpZW50L2Zvby5jcHAnCi0K
LSAgICAgICAgIyBUaGVyZSBzaG91bGQgYmUgYSBjb3B5cmlnaHQgbWVzc2FnZSBpbiB0aGUgZmly
c3QgMTAgbGluZXMKLSAgICAgICAgZXJyb3JfY29sbGVjdG9yID0gRXJyb3JDb2xsZWN0b3Ioc2Vs
Zi5hc3NlcnRfKQotICAgICAgICBjcHBfc3R5bGUucHJvY2Vzc19maWxlX2RhdGEoZmlsZV9wYXRo
LCAnY3BwJywgW10sIGVycm9yX2NvbGxlY3RvcikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
Ci0gICAgICAgICAgICAxLAotICAgICAgICAgICAgZXJyb3JfY29sbGVjdG9yLnJlc3VsdF9saXN0
KCkuY291bnQobGVnYWxfY29weXJpZ2h0X21lc3NhZ2UpKQotCi0gICAgICAgIGVycm9yX2NvbGxl
Y3RvciA9IEVycm9yQ29sbGVjdG9yKHNlbGYuYXNzZXJ0XykKLSAgICAgICAgY3BwX3N0eWxlLnBy
b2Nlc3NfZmlsZV9kYXRhKAotICAgICAgICAgICAgZmlsZV9wYXRoLCAnY3BwJywKLSAgICAgICAg
ICAgIFsnJyBmb3IgdW51c2VkX2kgaW4gcmFuZ2UoMTApXSArIFtjb3B5cmlnaHRfbGluZV0sCi0g
ICAgICAgICAgICBlcnJvcl9jb2xsZWN0b3IpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAot
ICAgICAgICAgICAgMSwKLSAgICAgICAgICAgIGVycm9yX2NvbGxlY3Rvci5yZXN1bHRfbGlzdCgp
LmNvdW50KGxlZ2FsX2NvcHlyaWdodF9tZXNzYWdlKSkKLQotICAgICAgICAjIFRlc3QgdGhhdCB3
YXJuaW5nIGlzbid0IGlzc3VlZCBpZiBDb3B5cmlnaHQgbGluZSBhcHBlYXJzIGVhcmx5IGVub3Vn
aC4KLSAgICAgICAgZXJyb3JfY29sbGVjdG9yID0gRXJyb3JDb2xsZWN0b3Ioc2VsZi5hc3NlcnRf
KQotICAgICAgICBjcHBfc3R5bGUucHJvY2Vzc19maWxlX2RhdGEoZmlsZV9wYXRoLCAnY3BwJywg
W2NvcHlyaWdodF9saW5lXSwgZXJyb3JfY29sbGVjdG9yKQotICAgICAgICBmb3IgbWVzc2FnZSBp
biBlcnJvcl9jb2xsZWN0b3IucmVzdWx0X2xpc3QoKToKLSAgICAgICAgICAgIGlmIG1lc3NhZ2Uu
ZmluZCgnbGVnYWwvY29weXJpZ2h0JykgIT0gLTE6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWls
KCdVbmV4cGVjdGVkIGVycm9yOiAlcycgJSBtZXNzYWdlKQotCi0gICAgICAgIGVycm9yX2NvbGxl
Y3RvciA9IEVycm9yQ29sbGVjdG9yKHNlbGYuYXNzZXJ0XykKLSAgICAgICAgY3BwX3N0eWxlLnBy
b2Nlc3NfZmlsZV9kYXRhKAotICAgICAgICAgICAgZmlsZV9wYXRoLCAnY3BwJywKLSAgICAgICAg
ICAgIFsnJyBmb3IgdW51c2VkX2kgaW4gcmFuZ2UoOSldICsgW2NvcHlyaWdodF9saW5lXSwKLSAg
ICAgICAgICAgIGVycm9yX2NvbGxlY3RvcikKLSAgICAgICAgZm9yIG1lc3NhZ2UgaW4gZXJyb3Jf
Y29sbGVjdG9yLnJlc3VsdF9saXN0KCk6Ci0gICAgICAgICAgICBpZiBtZXNzYWdlLmZpbmQoJ2xl
Z2FsL2NvcHlyaWdodCcpICE9IC0xOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5leHBl
Y3RlZCBlcnJvcjogJXMnICUgbWVzc2FnZSkKLQotICAgIGRlZiB0ZXN0X2ludmFsaWRfaW5jcmVt
ZW50KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9saW50KCcqY291bnQrKzsnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICdDaGFuZ2luZyBwb2ludGVyIGluc3RlYWQgb2YgdmFsdWUgKG9y
IHVudXNlZCB2YWx1ZSBvZiAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ29wZXJhdG9yKiku
ICBbcnVudGltZS9pbnZhbGlkX2luY3JlbWVudF0gWzVdJykKLQotCi1jbGFzcyBDbGVhbnNlZExp
bmVzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfaW5pdChzZWxmKToKLSAg
ICAgICAgbGluZXMgPSBbJ0xpbmUgMScsCi0gICAgICAgICAgICAgICAgICdMaW5lIDInLAotICAg
ICAgICAgICAgICAgICAnTGluZSAzIC8vIENvbW1lbnQgdGVzdCcsCi0gICAgICAgICAgICAgICAg
ICdMaW5lIDQgImZvbyInXQotCi0gICAgICAgIGNsZWFuX2xpbmVzID0gY3BwX3N0eWxlLkNsZWFu
c2VkTGluZXMobGluZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxpbmVzLCBjbGVhbl9s
aW5lcy5yYXdfbGluZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDQsIGNsZWFuX2xpbmVz
Lm51bV9saW5lcygpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsnTGluZSAxJywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdMaW5lIDInLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ0xpbmUgMyAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0xpbmUgNCAiZm9v
IiddLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhbl9saW5lcy5saW5lcykKLQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhbJ0xpbmUgMScsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAnTGluZSAyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICdMaW5lIDMgJywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdMaW5lIDQgIiInXSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xlYW5fbGluZXMuZWxpZGVkKQotCi0gICAgZGVmIHRlc3RfaW5pdF9lbXB0eShz
ZWxmKToKLSAgICAgICAgY2xlYW5fbGluZXMgPSBjcHBfc3R5bGUuQ2xlYW5zZWRMaW5lcyhbXSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoW10sIGNsZWFuX2xpbmVzLnJhd19saW5lcykKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMCwgY2xlYW5fbGluZXMubnVtX2xpbmVzKCkpCi0KLSAg
ICBkZWYgdGVzdF9jb2xsYXBzZV9zdHJpbmdzKHNlbGYpOgotICAgICAgICBjb2xsYXBzZSA9IGNw
cF9zdHlsZS5DbGVhbnNlZExpbmVzLmNvbGxhcHNlX3N0cmluZ3MKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMoJyIiJywgY29sbGFwc2UoJyIiJykpICAgICAgICAgICAgICMgIiIgICAgIChlbXB0
eSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJyIiIicsIGNvbGxhcHNlKCciIiInKSkgICAg
ICAgICAgICMgIiIiICAgIChiYWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCciIicsIGNv
bGxhcHNlKCcieHl6IicpKSAgICAgICAgICAjICJ4eXoiICAoc3RyaW5nKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFscygnIiInLCBjb2xsYXBzZSgnIlxcXCIiJykpICAgICAgICAgIyAiXCIiICAg
KHN0cmluZykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJyIiJywgY29sbGFwc2UoJyJcJyIn
KSkgICAgICAgICAgICMgIiciICAgIChzdHJpbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KCciXCInLCBjb2xsYXBzZSgnIlwiJykpICAgICAgICAgICAjICJcIiAgICAoYmFkKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscygnIiInLCBjb2xsYXBzZSgnIlxcXFwiJykpICAgICAgICAgIyAi
XFwiICAgKHN0cmluZykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJyInLCBjb2xsYXBzZSgn
IlxcXFxcXCInKSkgICAgICAgICMgIlxcXCIgIChiYWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKCciIicsIGNvbGxhcHNlKCciXFxcXFxcXFwiJykpICAgICAjICJcXFxcIiAoc3RyaW5nKQot
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdcJ1wnJywgY29sbGFwc2UoJ1wnXCcnKSkgICAg
ICAgICAjICcnICAgICAoZW1wdHkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdcJ1wnJywg
Y29sbGFwc2UoJ1wnYVwnJykpICAgICAgICAjICdhJyAgICAoY2hhcikKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoJ1wnXCcnLCBjb2xsYXBzZSgnXCdcXFwnXCcnKSkgICAgICMgJ1wnJyAgIChj
aGFyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnXCcnLCBjb2xsYXBzZSgnXCdcXFwnJykp
ICAgICAgICAgIyAnXCcgICAgKGJhZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJycsIGNv
bGxhcHNlKCdcXDAxMicpKSAgICAgICAgICAgICMgJ1wwMTInIChjaGFyKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFscygnJywgY29sbGFwc2UoJ1xceGZGMCcpKSAgICAgICAgICAgIyAnXHhmRjAn
IChjaGFyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnJywgY29sbGFwc2UoJ1xcbicpKSAg
ICAgICAgICAgICAgIyAnXG4nIChjaGFyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnXCMn
LCBjb2xsYXBzZSgnXFwjJykpICAgICAgICAgICAgIyAnXCMnIChiYWQpCi0KLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoJ1N0cmluZ1JlcGxhY2UoYm9keSwgIiIsICIiKTsnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2xsYXBzZSgnU3RyaW5nUmVwbGFjZShib2R5LCAiXFxcXCIsICJc
XFxcXFxcXCIpOycpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnXCdcJyAiIicsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlKCdcJyJcJyAiZm9vIicpKQotCi0KLWNsYXNz
IE9yZGVyT2ZJbmNsdWRlc1Rlc3QoQ3BwU3R5bGVUZXN0QmFzZSk6Ci0gICAgZGVmIHNldFVwKHNl
bGYpOgotICAgICAgICBzZWxmLmluY2x1ZGVfc3RhdGUgPSBjcHBfc3R5bGUuX0luY2x1ZGVTdGF0
ZSgpCi0KLSAgICAgICAgIyBDaGVhdCBvcy5wYXRoLmFic3BhdGggY2FsbGVkIGluIEZpbGVJbmZv
IGNsYXNzLgotICAgICAgICBzZWxmLm9zX3BhdGhfYWJzcGF0aF9vcmlnID0gb3MucGF0aC5hYnNw
YXRoCi0gICAgICAgIG9zLnBhdGguYWJzcGF0aCA9IGxhbWJkYSB2YWx1ZTogdmFsdWUKLQotICAg
IGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgb3MucGF0aC5hYnNwYXRoID0gc2VsZi5vc19w
YXRoX2Fic3BhdGhfb3JpZwotCi0gICAgZGVmIHRlc3RfdHJ5X2Ryb3BfY29tbW9uX3N1ZmZpeGVz
KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdmb28vZm9vJywgY3BwX3N0eWxlLl9k
cm9wX2NvbW1vbl9zdWZmaXhlcygnZm9vL2Zvby1pbmwuaCcpKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCdmb28vYmFyL2ZvbycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY3BwX3N0eWxl
Ll9kcm9wX2NvbW1vbl9zdWZmaXhlcygnZm9vL2Jhci9mb29faW5sLmgnKSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnZm9vL2ZvbycsIGNwcF9zdHlsZS5fZHJvcF9jb21tb25fc3VmZml4ZXMo
J2Zvby9mb28uY3BwJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2Zvby9mb29fdW51c3Vh
bGludGVybmFsJywKLSAgICAgICAgICAgICAgICAgICAgICAgICBjcHBfc3R5bGUuX2Ryb3BfY29t
bW9uX3N1ZmZpeGVzKCdmb28vZm9vX3VudXN1YWxpbnRlcm5hbC5oJykpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY3BwX3N0eWxlLl9kcm9w
X2NvbW1vbl9zdWZmaXhlcygnX3Rlc3QuY3BwJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
J3Rlc3QnLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNwcF9zdHlsZS5fZHJvcF9jb21tb25f
c3VmZml4ZXMoJ3Rlc3QuY3BwJykpCi0KLQotY2xhc3MgT3JkZXJPZkluY2x1ZGVzVGVzdChDcHBT
dHlsZVRlc3RCYXNlKToKLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYuaW5jbHVk
ZV9zdGF0ZSA9IGNwcF9zdHlsZS5fSW5jbHVkZVN0YXRlKCkKLQotICAgICAgICAjIENoZWF0IG9z
LnBhdGguYWJzcGF0aCBjYWxsZWQgaW4gRmlsZUluZm8gY2xhc3MuCi0gICAgICAgIHNlbGYub3Nf
cGF0aF9hYnNwYXRoX29yaWcgPSBvcy5wYXRoLmFic3BhdGgKLSAgICAgICAgb3MucGF0aC5hYnNw
YXRoID0gbGFtYmRhIHZhbHVlOiB2YWx1ZQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAg
ICAgICBvcy5wYXRoLmFic3BhdGggPSBzZWxmLm9zX3BhdGhfYWJzcGF0aF9vcmlnCi0KLSAgICBk
ZWYgdGVzdF9jaGVja19uZXh0X2luY2x1ZGVfb3JkZXJfX25vX2NvbmZpZyhzZWxmKToKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgnSGVhZGVyIGZpbGUgc2hvdWxkIG5vdCBjb250YWluIFdlYkNv
cmUgY29uZmlnLmguJywKLSAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluY2x1ZGVfc3Rh
dGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKGNwcF9zdHlsZS5fQ09ORklHX0hFQURFUiwgVHJ1
ZSkpCi0KLSAgICBkZWYgdGVzdF9jaGVja19uZXh0X2luY2x1ZGVfb3JkZXJfX25vX3NlbGYoc2Vs
Zik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0hlYWRlciBmaWxlIHNob3VsZCBub3QgY29u
dGFpbiBpdHNlbGYuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluY2x1ZGVfc3Rh
dGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKGNwcF9zdHlsZS5fUFJJTUFSWV9IRUFERVIsIFRy
dWUpKQotICAgICAgICAjIFRlc3QgYWN0dWFsIGNvZGUgdG8gbWFrZSBzdXJlIHRoYXQgaGVhZGVy
IHR5cGVzIGFyZSBjb3JyZWN0bHkgYXNzaWduZWQuCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1
YWdlX3J1bGVzX2NoZWNrKCdGb28uaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICcjaW5jbHVkZSAiRm9vLmgiXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnSGVhZGVyIGZpbGUgc2hvdWxkIG5vdCBjb250YWluIGl0c2VsZi4g
U2hvdWxkIGJlOiBhbHBoYWJldGljYWxseSBzb3J0ZWQuJwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnICBbYnVpbGQvaW5jbHVkZV9vcmRlcl0gWzRdJykKLSAgICAg
ICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ0Zvb0Jhci5oJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJGb28uaCJcbicsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnKQotCi0gICAgZGVmIHRl
c3RfY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyX19saWtlbHlfdGhlbl9jb25maWcoc2VsZik6Ci0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0ZvdW5kIGhlYWRlciB0aGlzIGZpbGUgaW1wbGVtZW50
cyBiZWZvcmUgV2ViQ29yZSBjb25maWcuaC4nLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuaW5jbHVkZV9zdGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoY3BwX3N0eWxlLl9QUklN
QVJZX0hFQURFUiwgRmFsc2UpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdGb3VuZCBXZWJD
b3JlIGNvbmZpZy5oIGFmdGVyIGEgaGVhZGVyIHRoaXMgZmlsZSBpbXBsZW1lbnRzLicsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVk
ZV9vcmRlcihjcHBfc3R5bGUuX0NPTkZJR19IRUFERVIsIEZhbHNlKSkKLQotICAgIGRlZiB0ZXN0
X2NoZWNrX25leHRfaW5jbHVkZV9vcmRlcl9fb3RoZXJfdGhlbl9jb25maWcoc2VsZik6Ci0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0ZvdW5kIG90aGVyIGhlYWRlciBiZWZvcmUgV2ViQ29yZSBj
b25maWcuaC4nLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9zdGF0ZS5j
aGVja19uZXh0X2luY2x1ZGVfb3JkZXIoY3BwX3N0eWxlLl9PVEhFUl9IRUFERVIsIEZhbHNlKSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnRm91bmQgV2ViQ29yZSBjb25maWcuaCBhZnRlciBv
dGhlciBoZWFkZXIuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluY2x1ZGVfc3Rh
dGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKGNwcF9zdHlsZS5fQ09ORklHX0hFQURFUiwgRmFs
c2UpKQotCi0gICAgZGVmIHRlc3RfY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyX19jb25maWdfdGhl
bl9vdGhlcl90aGVuX2xpa2VseShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywg
c2VsZi5pbmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcihjcHBfc3R5bGUuX0NP
TkZJR19IRUFERVIsIEZhbHNlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnRm91bmQgb3Ro
ZXIgaGVhZGVyIGJlZm9yZSBhIGhlYWRlciB0aGlzIGZpbGUgaW1wbGVtZW50cy4nLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9zdGF0ZS5jaGVja19uZXh0X2luY2x1ZGVf
b3JkZXIoY3BwX3N0eWxlLl9PVEhFUl9IRUFERVIsIEZhbHNlKSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnRm91bmQgaGVhZGVyIHRoaXMgZmlsZSBpbXBsZW1lbnRzIGFmdGVyIG90aGVyIGhl
YWRlci4nLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9zdGF0ZS5jaGVj
a19uZXh0X2luY2x1ZGVfb3JkZXIoY3BwX3N0eWxlLl9QUklNQVJZX0hFQURFUiwgRmFsc2UpKQot
Ci0gICAgZGVmIHRlc3RfY2hlY2tfYWxwaGFiZXRpY2FsX2luY2x1ZGVfb3JkZXIoc2VsZik6Ci0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28uaCcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiYS5oIlxuJwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgImMuaCJcbicK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJiLmgi
XG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWxwaGFiZXRp
Y2FsIHNvcnRpbmcgcHJvYmxlbS4gIFtidWlsZC9pbmNsdWRlX29yZGVyXSBbNF0nKQotCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28uaCcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiYS5oIlxuJwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgImIuaCJcbicKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJjLmgiXG4n
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJykKLQotICAgICAg
ICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vLmgnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgPGFzc2VydC5oPlxuJwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgImJhci5oIlxu
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FscGhhYmV0aWNh
bCBzb3J0aW5nIHByb2JsZW0uICBbYnVpbGQvaW5jbHVkZV9vcmRlcl0gWzRdJykKLQotICAgICAg
ICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vLmgnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgImJhci5oIlxuJwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgPGFzc2VydC5oPlxu
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycpCi0KLSAgICBk
ZWYgdGVzdF9jaGVja19saW5lX2JyZWFrX2FmdGVyX293bl9oZWFkZXIoc2VsZik6Ci0gICAgICAg
IHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28uY3BwJywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJjb25maWcuaCJcbicKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJmb28uaCJc
bicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJi
YXIuaCJcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdZb3Ug
c2hvdWxkIGFkZCBhIGJsYW5rIGxpbmUgYWZ0ZXIgaW1wbGVtZW50YXRpb24gZmlsZVwncyBvd24g
aGVhZGVyLiAgW2J1aWxkL2luY2x1ZGVfb3JkZXJdIFs0XScpCi0KLSAgICAgICAgc2VsZi5hc3Nl
cnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby5jcHAnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgImNvbmZpZy5oIlxuJwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgImZvby5oIlxuJwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiYmFyLmgiXG4nLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJykKLQotICAgIGRlZiB0ZXN0X2NoZWNr
X3ByZXByb2Nlc3Nvcl9pbl9pbmNsdWRlX3NlY3Rpb24oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNz
ZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28uY3BwJywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJjb25maWcuaCJcbicKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJmb28uaCJcbicKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnI2lmZGVmIEJBWlxuJwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgImJhei5oIlxuJwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2Vsc2VcbicKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJmb29iYXIuaCJcbicKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNlbmRpZiJcbicKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJiYXIuaCJcbicsICMg
Tm8gZmxhZyBiZWNhdXNlIHByZXZpb3VzIGlzIGluIHByZXByb2Nlc3NvciBzZWN0aW9uCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnKQotCi0gICAgICAgIHNlbGYu
YXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28uY3BwJywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJjb25maWcuaCJcbicKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJmb28uaCJcbicKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2lmZGVmIEJBWlxuJwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgImJhei5oIlxuJwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2VuZGlmIlxuJwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgImJhci5oIlxuJwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgImEuaCJcbics
ICMgU2hvdWxkIHN0aWxsIGZsYWcgdGhpcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ0FscGhhYmV0aWNhbCBzb3J0aW5nIHByb2JsZW0uICBbYnVpbGQvaW5jbHVk
ZV9vcmRlcl0gWzRdJykKLQotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVj
aygnZm9vLmNwcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcj
aW5jbHVkZSAiY29uZmlnLmgiXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICcjaW5jbHVkZSAiZm9vLmgiXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJyNpZmRlZiBCQVpcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJyNpbmNsdWRlICJiYXouaCJcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJyNpbmNsdWRlICJiYXIuaCJcbicgI1Nob3VsZCBzdGlsbCBmbGFnIHRoaXMKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNlbmRpZiJcbicsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBbHBoYWJldGljYWwgc29ydGlu
ZyBwcm9ibGVtLiAgW2J1aWxkL2luY2x1ZGVfb3JkZXJdIFs0XScpCi0KLSAgICAgICAgc2VsZi5h
c3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby5jcHAnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgImNvbmZpZy5oIlxuJwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgImZvby5oIlxuJwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaWZkZWYgQkFaXG4nCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiYmF6LmgiXG4nCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjZW5kaWYiXG4nCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaWZkZWYgRk9PQkFSXG4nCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiZm9vYmFyLmgiXG4n
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjZW5kaWYiXG4nCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiYmFyLmgi
XG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAi
YS5oIlxuJywgIyBTaG91bGQgc3RpbGwgZmxhZyB0aGlzLgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnQWxwaGFiZXRpY2FsIHNvcnRpbmcgcHJvYmxlbS4gIFtidWls
ZC9pbmNsdWRlX29yZGVyXSBbNF0nKQotCi0gICAgICAgICMgQ2hlY2sgdGhhdCBhZnRlciBhbiBh
bHJlYWR5IGluY2x1ZGVkIGVycm9yLCB0aGUgc29ydGluZyBydWxlcyBzdGlsbCB3b3JrLgotICAg
ICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vLmNwcCcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiY29uZmlnLmgiXG4n
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiZm9v
LmgiXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJmb28uaCJc
bicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJn
LmgiXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnImZvby5o
IiBhbHJlYWR5IGluY2x1ZGVkIGF0IGZvby5jcHA6MSAgW2J1aWxkL2luY2x1ZGVdIFs0XScpCi0K
LSAgICBkZWYgdGVzdF9jaGVja193dGZfaW5jbHVkZXMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNz
ZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28uY3BwJywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJjb25maWcuaCJcbicKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJmb28uaCJcbicKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+XG4n
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJykKLSAgICAgICAg
c2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby5jcHAnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgImNvbmZpZy5oIlxuJwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgImZvby5oIlxu
JwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAid3RmL0Fzc2VydGlv
bnMuaCJcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3dGYg
aW5jbHVkZXMgc2hvdWxkIGJlIDx3dGYvZmlsZS5oPiBpbnN0ZWFkIG9mICJ3dGYvZmlsZS5oIi4n
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIFtidWlsZC9pbmNs
dWRlXSBbNF0nKQotCi0gICAgZGVmIHRlc3RfY2xhc3NpZnlfaW5jbHVkZShzZWxmKToKLSAgICAg
ICAgY2xhc3NpZnlfaW5jbHVkZSA9IGNwcF9zdHlsZS5fY2xhc3NpZnlfaW5jbHVkZQotICAgICAg
ICBpbmNsdWRlX3N0YXRlID0gY3BwX3N0eWxlLl9JbmNsdWRlU3RhdGUoKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGNwcF9zdHlsZS5fQ09ORklHX0hFQURFUiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBjbGFzc2lmeV9pbmNsdWRlKCdmb28vZm9vLmNwcCcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlnLmgnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UsIGluY2x1ZGVfc3RhdGUpKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGNwcF9zdHlsZS5fUFJJTUFSWV9IRUFERVIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgY2xhc3NpZnlfaW5jbHVkZSgnZm9vL2ludGVybmFsL2Zvby5jcHAnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvby9wdWJsaWMvZm9vLmgn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UsIGluY2x1
ZGVfc3RhdGUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNwcF9zdHlsZS5fUFJJTUFSWV9I
RUFERVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZnlfaW5jbHVkZSgnZm9vL2lu
dGVybmFsL2Zvby5jcHAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ2Zvby9vdGhlci9wdWJsaWMvZm9vLmgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRmFsc2UsIGluY2x1ZGVfc3RhdGUpKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGNwcF9zdHlsZS5fT1RIRVJfSEVBREVSLAotICAgICAgICAgICAgICAgICAgICAgICAg
IGNsYXNzaWZ5X2luY2x1ZGUoJ2Zvby9pbnRlcm5hbC9mb28uY3BwJywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb28vb3RoZXIvcHVibGljL2Zvb3AuaCcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSwgaW5jbHVkZV9z
dGF0ZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3BwX3N0eWxlLl9PVEhFUl9IRUFERVIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZnlfaW5jbHVkZSgnZm9vL2Zvby5jcHAn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cmluZycsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlLCBpbmNsdWRlX3N0
YXRlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBfc3R5bGUuX1BSSU1BUllfSEVBREVS
LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZ5X2luY2x1ZGUoJ2Zvb0N1c3RvbS5j
cHAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvby5oJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlLCBpbmNsdWRl
X3N0YXRlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBfc3R5bGUuX1BSSU1BUllfSEVB
REVSLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZ5X2luY2x1ZGUoJ1ByZWZpeEZv
b0N1c3RvbS5jcHAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J0Zvby5oJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNl
LCBpbmNsdWRlX3N0YXRlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBfc3R5bGUuX01P
Q19IRUFERVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZnlfaW5jbHVkZSgnZm9v
LmNwcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vLm1v
YycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSwgaW5j
bHVkZV9zdGF0ZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3BwX3N0eWxlLl9NT0NfSEVB
REVSLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZ5X2luY2x1ZGUoJ2Zvby5jcHAn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21vY19mb28uY3Bw
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlLCBpbmNs
dWRlX3N0YXRlKSkKLSAgICAgICAgIyBUcmlja3kgZXhhbXBsZSB3aGVyZSBib3RoIGluY2x1ZGVz
IG1pZ2h0IGJlIGNsYXNzaWZpZWQgYXMgcHJpbWFyeS4KLSAgICAgICAgc2VsZi5hc3NlcnRfbGFu
Z3VhZ2VfcnVsZXNfY2hlY2soJ1Njcm9sbGJhclRoZW1lV2luY2UuY3BwJywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJjb25maWcuaCJcbicKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJTY3JvbGxi
YXJUaGVtZVdpbmNlLmgiXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNs
dWRlICJTY3JvbGxiYXIuaCJcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnU2Ny
b2xsYmFyVGhlbWVXaW5jZS5jcHAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnI2luY2x1ZGUgImNvbmZpZy5oIlxuJwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgIlNjcm9sbGJhci5oIlxuJwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVXaW5jZS5oIlxuJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZvdW5kIGhlYWRlciB0
aGlzIGZpbGUgaW1wbGVtZW50cyBhZnRlciBhIGhlYWRlciB0aGlzIGZpbGUgaW1wbGVtZW50cy4n
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgU2hvdWxkIGJlOiBj
b25maWcuaCwgcHJpbWFyeSBoZWFkZXIsIGJsYW5rIGxpbmUsIGFuZCB0aGVuIGFscGhhYmV0aWNh
bGx5IHNvcnRlZC4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcg
IFtidWlsZC9pbmNsdWRlX29yZGVyXSBbNF0nKQotCi0gICAgZGVmIHRlc3RfdHJ5X2Ryb3BfY29t
bW9uX3N1ZmZpeGVzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdmb28vZm9vJywg
Y3BwX3N0eWxlLl9kcm9wX2NvbW1vbl9zdWZmaXhlcygnZm9vL2Zvby1pbmwuaCcpKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCdmb28vYmFyL2ZvbycsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgY3BwX3N0eWxlLl9kcm9wX2NvbW1vbl9zdWZmaXhlcygnZm9vL2Jhci9mb29faW5sLmgnKSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZm9vL2ZvbycsIGNwcF9zdHlsZS5fZHJvcF9jb21t
b25fc3VmZml4ZXMoJ2Zvby9mb28uY3BwJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2Zv
by9mb29fdW51c3VhbGludGVybmFsJywKLSAgICAgICAgICAgICAgICAgICAgICAgICBjcHBfc3R5
bGUuX2Ryb3BfY29tbW9uX3N1ZmZpeGVzKCdmb28vZm9vX3VudXN1YWxpbnRlcm5hbC5oJykpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY3Bw
X3N0eWxlLl9kcm9wX2NvbW1vbl9zdWZmaXhlcygnX3Rlc3QuY3BwJykpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJ3Rlc3QnLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNwcF9zdHlsZS5f
ZHJvcF9jb21tb25fc3VmZml4ZXMoJ3Rlc3QuY3BwJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJ3Rlc3QnLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNwcF9zdHlsZS5fZHJvcF9jb21t
b25fc3VmZml4ZXMoJ3Rlc3QuY3BwJykpCi0KLWNsYXNzIENoZWNrRm9yRnVuY3Rpb25MZW5ndGhz
VGVzdChDcHBTdHlsZVRlc3RCYXNlKToKLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgICMg
UmVkdWNpbmcgdGhlc2UgdGhyZXNob2xkcyBmb3IgdGhlIHRlc3RzIHNwZWVkcyB1cCB0ZXN0cyBz
aWduaWZpY2FudGx5LgotICAgICAgICBzZWxmLm9sZF9ub3JtYWxfdHJpZ2dlciA9IGNwcF9zdHls
ZS5fRnVuY3Rpb25TdGF0ZS5fTk9STUFMX1RSSUdHRVIKLSAgICAgICAgc2VsZi5vbGRfdGVzdF90
cmlnZ2VyID0gY3BwX3N0eWxlLl9GdW5jdGlvblN0YXRlLl9URVNUX1RSSUdHRVIKLQotICAgICAg
ICBjcHBfc3R5bGUuX0Z1bmN0aW9uU3RhdGUuX05PUk1BTF9UUklHR0VSID0gMTAKLSAgICAgICAg
Y3BwX3N0eWxlLl9GdW5jdGlvblN0YXRlLl9URVNUX1RSSUdHRVIgPSAyNQotCi0gICAgZGVmIHRl
YXJEb3duKHNlbGYpOgotICAgICAgICBjcHBfc3R5bGUuX0Z1bmN0aW9uU3RhdGUuX05PUk1BTF9U
UklHR0VSID0gc2VsZi5vbGRfbm9ybWFsX3RyaWdnZXIKLSAgICAgICAgY3BwX3N0eWxlLl9GdW5j
dGlvblN0YXRlLl9URVNUX1RSSUdHRVIgPSBzZWxmLm9sZF90ZXN0X3RyaWdnZXIKLQotICAgIGRl
ZiBhc3NlcnRfZnVuY3Rpb25fbGVuZ3Roc19jaGVjayhzZWxmLCBjb2RlLCBleHBlY3RlZF9tZXNz
YWdlKToKLSAgICAgICAgIiIiQ2hlY2sgd2FybmluZ3MgZm9yIGxvbmcgZnVuY3Rpb24gYm9kaWVz
IGFyZSBhcyBleHBlY3RlZC4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgIGNvZGU6IEMrKyBz
b3VyY2UgY29kZSBleHBlY3RlZCB0byBnZW5lcmF0ZSBhIHdhcm5pbmcgbWVzc2FnZS4KLSAgICAg
ICAgICBleHBlY3RlZF9tZXNzYWdlOiBNZXNzYWdlIGV4cGVjdGVkIHRvIGJlIGdlbmVyYXRlZCBi
eSB0aGUgQysrIGNvZGUuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhl
eHBlY3RlZF9tZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBlcmZvcm1f
ZnVuY3Rpb25fbGVuZ3Roc19jaGVjayhjb2RlKSkKLQotICAgIGRlZiB0cmlnZ2VyX2xpbmVzKHNl
bGYsIGVycm9yX2xldmVsKToKLSAgICAgICAgIiIiUmV0dXJuIG51bWJlciBvZiBsaW5lcyBuZWVk
ZWQgdG8gdHJpZ2dlciBhIGZ1bmN0aW9uIGxlbmd0aCB3YXJuaW5nLgotCi0gICAgICAgIEFyZ3M6
Ci0gICAgICAgICAgZXJyb3JfbGV2ZWw6IC0tdiBzZXR0aW5nIGZvciBjcHBfc3R5bGUuCi0KLSAg
ICAgICAgUmV0dXJuczoKLSAgICAgICAgICBOdW1iZXIgb2YgbGluZXMgbmVlZGVkIHRvIHRyaWdn
ZXIgYSBmdW5jdGlvbiBsZW5ndGggd2FybmluZy4KLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVy
biBjcHBfc3R5bGUuX0Z1bmN0aW9uU3RhdGUuX05PUk1BTF9UUklHR0VSICogMiAqKiBlcnJvcl9s
ZXZlbAotCi0gICAgZGVmIHRyaWdnZXJfdGVzdF9saW5lcyhzZWxmLCBlcnJvcl9sZXZlbCk6Ci0g
ICAgICAgICIiIlJldHVybiBudW1iZXIgb2YgbGluZXMgbmVlZGVkIHRvIHRyaWdnZXIgYSB0ZXN0
IGZ1bmN0aW9uIGxlbmd0aCB3YXJuaW5nLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgZXJy
b3JfbGV2ZWw6IC0tdiBzZXR0aW5nIGZvciBjcHBfc3R5bGUuCi0KLSAgICAgICAgUmV0dXJuczoK
LSAgICAgICAgICBOdW1iZXIgb2YgbGluZXMgbmVlZGVkIHRvIHRyaWdnZXIgYSB0ZXN0IGZ1bmN0
aW9uIGxlbmd0aCB3YXJuaW5nLgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIGNwcF9zdHls
ZS5fRnVuY3Rpb25TdGF0ZS5fVEVTVF9UUklHR0VSICogMiAqKiBlcnJvcl9sZXZlbAotCi0gICAg
ZGVmIGFzc2VydF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbihzZWxmLCBsaW5lcywg
ZXJyb3JfbGV2ZWwpOgotICAgICAgICAiIiJHZW5lcmF0ZSBsb25nIGZ1bmN0aW9uIGRlZmluaXRp
b24gYW5kIGNoZWNrIHdhcm5pbmdzIGFyZSBhcyBleHBlY3RlZC4KLQotICAgICAgICBBcmdzOgot
ICAgICAgICAgIGxpbmVzOiBOdW1iZXIgb2YgbGluZXMgdG8gZ2VuZXJhdGUuCi0gICAgICAgICAg
ZXJyb3JfbGV2ZWw6ICAtLXYgc2V0dGluZyBmb3IgY3BwX3N0eWxlLgotICAgICAgICAiIiIKLSAg
ICAgICAgdHJpZ2dlcl9sZXZlbCA9IHNlbGYudHJpZ2dlcl9saW5lcyhjcHBfc3R5bGUuX3ZlcmJv
c2VfbGV2ZWwoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3Roc19jaGVjaygK
LSAgICAgICAgICAgICd2b2lkIHRlc3QoaW50IHgpJyArIHNlbGYuZnVuY3Rpb25fYm9keShsaW5l
cyksCi0gICAgICAgICAgICAoJ1NtYWxsIGFuZCBmb2N1c2VkIGZ1bmN0aW9ucyBhcmUgcHJlZmVy
cmVkOiAnCi0gICAgICAgICAgICAgJ3Rlc3QoKSBoYXMgJWQgbm9uLWNvbW1lbnQgbGluZXMgJwot
ICAgICAgICAgICAgICcoZXJyb3IgdHJpZ2dlcmVkIGJ5IGV4Y2VlZGluZyAlZCBsaW5lcykuJwot
ICAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9mbl9zaXplXSBbJWRdJwotICAgICAgICAgICAg
ICUgKGxpbmVzLCB0cmlnZ2VyX2xldmVsLCBlcnJvcl9sZXZlbCkpKQotCi0gICAgZGVmIGFzc2Vy
dF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9vayhzZWxmLCBsaW5lcyk6Ci0gICAg
ICAgICIiIkdlbmVyYXRlIHNob3J0ZXIgZnVuY3Rpb24gZGVmaW5pdGlvbiBhbmQgY2hlY2sgbm8g
d2FybmluZyBpcyBwcm9kdWNlZC4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgIGxpbmVzOiBO
dW1iZXIgb2YgbGluZXMgdG8gZ2VuZXJhdGUuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLmFz
c2VydF9mdW5jdGlvbl9sZW5ndGhzX2NoZWNrKAotICAgICAgICAgICAgJ3ZvaWQgdGVzdChpbnQg
eCknICsgc2VsZi5mdW5jdGlvbl9ib2R5KGxpbmVzKSwKLSAgICAgICAgICAgICcnKQotCi0gICAg
ZGVmIGFzc2VydF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfYXRfZXJyb3JfbGV2ZWwoc2VsZiwgZXJy
b3JfbGV2ZWwpOgotICAgICAgICAiIiJHZW5lcmF0ZSBhbmQgY2hlY2sgZnVuY3Rpb24gYXQgdGhl
IHRyaWdnZXIgbGV2ZWwgZm9yIC0tdiBzZXR0aW5nLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAg
ICAgZXJyb3JfbGV2ZWw6IC0tdiBzZXR0aW5nIGZvciBjcHBfc3R5bGUuCi0gICAgICAgICIiIgot
ICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbihzZWxm
LnRyaWdnZXJfbGluZXMoZXJyb3JfbGV2ZWwpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9sZXZlbCkKLQotICAgIGRlZiBhc3NlcnRf
ZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2JlbG93X2Vycm9yX2xldmVsKHNlbGYsIGVycm9yX2xldmVs
KToKLSAgICAgICAgIiIiR2VuZXJhdGUgYW5kIGNoZWNrIGZ1bmN0aW9uIGp1c3QgYmVsb3cgdGhl
IHRyaWdnZXIgbGV2ZWwgZm9yIC0tdiBzZXR0aW5nLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAg
ICAgZXJyb3JfbGV2ZWw6IC0tdiBzZXR0aW5nIGZvciBjcHBfc3R5bGUuCi0gICAgICAgICIiIgot
ICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbihzZWxm
LnRyaWdnZXJfbGluZXMoZXJyb3JfbGV2ZWwpIC0gMSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbGV2ZWwgLSAxKQotCi0gICAgZGVm
IGFzc2VydF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfYWJvdmVfZXJyb3JfbGV2ZWwoc2VsZiwgZXJy
b3JfbGV2ZWwpOgotICAgICAgICAiIiJHZW5lcmF0ZSBhbmQgY2hlY2sgZnVuY3Rpb24ganVzdCBh
Ym92ZSB0aGUgdHJpZ2dlciBsZXZlbCBmb3IgLS12IHNldHRpbmcuCi0KLSAgICAgICAgQXJnczoK
LSAgICAgICAgICBlcnJvcl9sZXZlbDogLS12IHNldHRpbmcgZm9yIGNwcF9zdHlsZS4KLSAgICAg
ICAgIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19kZWZpbml0
aW9uKHNlbGYudHJpZ2dlcl9saW5lcyhlcnJvcl9sZXZlbCkgKyAxLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9sZXZlbCkKLQotICAg
IGRlZiBmdW5jdGlvbl9ib2R5KHNlbGYsIG51bWJlcl9vZl9saW5lcyk6Ci0gICAgICAgIHJldHVy
biAnIHtcbicgKyAnICAgIHRoaXNfaXNfanVzdF9hX3Rlc3QoKTtcbicgKiBudW1iZXJfb2ZfbGlu
ZXMgKyAnfScKLQotICAgIGRlZiBmdW5jdGlvbl9ib2R5X3dpdGhfYmxhbmtfbGluZXMoc2VsZiwg
bnVtYmVyX29mX2xpbmVzKToKLSAgICAgICAgcmV0dXJuICcge1xuJyArICcgICAgdGhpc19pc19q
dXN0X2FfdGVzdCgpO1xuXG4nICogbnVtYmVyX29mX2xpbmVzICsgJ30nCi0KLSAgICBkZWYgZnVu
Y3Rpb25fYm9keV93aXRoX25vX2xpbnRzKHNlbGYsIG51bWJlcl9vZl9saW5lcyk6Ci0gICAgICAg
IHJldHVybiAnIHtcbicgKyAnICAgIHRoaXNfaXNfanVzdF9hX3Rlc3QoKTsgIC8vIE5PTElOVFxu
JyAqIG51bWJlcl9vZl9saW5lcyArICd9JwotCi0gICAgIyBUZXN0IGxpbmUgbGVuZ3RoIGNoZWNr
cy4KLSAgICBkZWYgdGVzdF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVjbGFyYXRpb24oc2VsZik6
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aHNfY2hlY2soCi0gICAgICAgICAg
ICAndm9pZCB0ZXN0KCk7JywgICMgTm90IGEgZnVuY3Rpb24gZGVmaW5pdGlvbgotICAgICAgICAg
ICAgJycpCi0KLSAgICBkZWYgdGVzdF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVjbGFyYXRpb25f
d2l0aF9ibG9ja19mb2xsb3dpbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9u
X2xlbmd0aHNfY2hlY2soCi0gICAgICAgICAgICAoJ3ZvaWQgdGVzdCgpO1xuJwotICAgICAgICAg
ICAgICsgc2VsZi5mdW5jdGlvbl9ib2R5KDY2KSksICAjIE5vdCBhIGZ1bmN0aW9uIGRlZmluaXRp
b24KLSAgICAgICAgICAgICcnKQotCi0gICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNr
X2NsYXNzX2RlZmluaXRpb24oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xl
bmd0aHNfY2hlY2soICAjIE5vdCBhIGZ1bmN0aW9uIGRlZmluaXRpb24KLSAgICAgICAgICAgICdj
bGFzcyBUZXN0JyArIHNlbGYuZnVuY3Rpb25fYm9keSg2NikgKyAnOycsCi0gICAgICAgICAgICAn
JykKLQotICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja190cml2aWFsKHNlbGYpOgot
ICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhzX2NoZWNrKAotICAgICAgICAgICAg
J3ZvaWQgdGVzdCgpIHt9JywgICMgTm90IGNvdW50ZWQKLSAgICAgICAgICAgICcnKQotCi0gICAg
ZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2VtcHR5KHNlbGYpOgotICAgICAgICBzZWxm
LmFzc2VydF9mdW5jdGlvbl9sZW5ndGhzX2NoZWNrKAotICAgICAgICAgICAgJ3ZvaWQgdGVzdCgp
IHtcbn0nLAotICAgICAgICAgICAgJycpCi0KLSAgICBkZWYgdGVzdF9mdW5jdGlvbl9sZW5ndGhf
Y2hlY2tfZGVmaW5pdGlvbl9iZWxvd19zZXZlcml0eTAoc2VsZik6Ci0gICAgICAgIG9sZF92ZXJi
b3NpdHkgPSBjcHBfc3R5bGUuX3NldF92ZXJib3NlX2xldmVsKDApCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19kZWZpbml0aW9uX29rKHNlbGYudHJpZ2dlcl9saW5l
cygwKSAtIDEpCi0gICAgICAgIGNwcF9zdHlsZS5fc2V0X3ZlcmJvc2VfbGV2ZWwob2xkX3ZlcmJv
c2l0eSkKLQotICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19kZWZpbml0aW9uX2F0
X3NldmVyaXR5MChzZWxmKToKLSAgICAgICAgb2xkX3ZlcmJvc2l0eSA9IGNwcF9zdHlsZS5fc2V0
X3ZlcmJvc2VfbGV2ZWwoMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3RoX2No
ZWNrX2RlZmluaXRpb25fb2soc2VsZi50cmlnZ2VyX2xpbmVzKDApKQotICAgICAgICBjcHBfc3R5
bGUuX3NldF92ZXJib3NlX2xldmVsKG9sZF92ZXJib3NpdHkpCi0KLSAgICBkZWYgdGVzdF9mdW5j
dGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9hYm92ZV9zZXZlcml0eTAoc2VsZik6Ci0gICAg
ICAgIG9sZF92ZXJib3NpdHkgPSBjcHBfc3R5bGUuX3NldF92ZXJib3NlX2xldmVsKDApCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19hYm92ZV9lcnJvcl9sZXZlbCgw
KQotICAgICAgICBjcHBfc3R5bGUuX3NldF92ZXJib3NlX2xldmVsKG9sZF92ZXJib3NpdHkpCi0K
LSAgICBkZWYgdGVzdF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9iZWxvd19zZXZl
cml0eTF2MChzZWxmKToKLSAgICAgICAgb2xkX3ZlcmJvc2l0eSA9IGNwcF9zdHlsZS5fc2V0X3Zl
cmJvc2VfbGV2ZWwoMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3RoX2NoZWNr
X2JlbG93X2Vycm9yX2xldmVsKDEpCi0gICAgICAgIGNwcF9zdHlsZS5fc2V0X3ZlcmJvc2VfbGV2
ZWwob2xkX3ZlcmJvc2l0eSkKLQotICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19k
ZWZpbml0aW9uX2F0X3NldmVyaXR5MXYwKHNlbGYpOgotICAgICAgICBvbGRfdmVyYm9zaXR5ID0g
Y3BwX3N0eWxlLl9zZXRfdmVyYm9zZV9sZXZlbCgwKQotICAgICAgICBzZWxmLmFzc2VydF9mdW5j
dGlvbl9sZW5ndGhfY2hlY2tfYXRfZXJyb3JfbGV2ZWwoMSkKLSAgICAgICAgY3BwX3N0eWxlLl9z
ZXRfdmVyYm9zZV9sZXZlbChvbGRfdmVyYm9zaXR5KQotCi0gICAgZGVmIHRlc3RfZnVuY3Rpb25f
bGVuZ3RoX2NoZWNrX2RlZmluaXRpb25fYmVsb3dfc2V2ZXJpdHkxKHNlbGYpOgotICAgICAgICBz
ZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9vayhzZWxmLnRyaWdn
ZXJfbGluZXMoMSkgLSAxKQotCi0gICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2Rl
ZmluaXRpb25fYXRfc2V2ZXJpdHkxKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlv
bl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9vayhzZWxmLnRyaWdnZXJfbGluZXMoMSkpCi0KLSAg
ICBkZWYgdGVzdF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9hYm92ZV9zZXZlcml0
eTEoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19hYm92
ZV9lcnJvcl9sZXZlbCgxKQotCi0gICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2Rl
ZmluaXRpb25fc2V2ZXJpdHkxX3BsdXNfYmxhbmtzKHNlbGYpOgotICAgICAgICBlcnJvcl9sZXZl
bCA9IDEKLSAgICAgICAgZXJyb3JfbGluZXMgPSBzZWxmLnRyaWdnZXJfbGluZXMoZXJyb3JfbGV2
ZWwpICsgMQotICAgICAgICB0cmlnZ2VyX2xldmVsID0gc2VsZi50cmlnZ2VyX2xpbmVzKGNwcF9z
dHlsZS5fdmVyYm9zZV9sZXZlbCgpKQotICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5n
dGhzX2NoZWNrKAotICAgICAgICAgICAgJ3ZvaWQgdGVzdF9ibGFua3MoaW50IHgpJyArIHNlbGYu
ZnVuY3Rpb25fYm9keShlcnJvcl9saW5lcyksCi0gICAgICAgICAgICAoJ1NtYWxsIGFuZCBmb2N1
c2VkIGZ1bmN0aW9ucyBhcmUgcHJlZmVycmVkOiAnCi0gICAgICAgICAgICAgJ3Rlc3RfYmxhbmtz
KCkgaGFzICVkIG5vbi1jb21tZW50IGxpbmVzICcKLSAgICAgICAgICAgICAnKGVycm9yIHRyaWdn
ZXJlZCBieSBleGNlZWRpbmcgJWQgbGluZXMpLicKLSAgICAgICAgICAgICAnICBbcmVhZGFiaWxp
dHkvZm5fc2l6ZV0gWyVkXScpCi0gICAgICAgICAgICAlIChlcnJvcl9saW5lcywgdHJpZ2dlcl9s
ZXZlbCwgZXJyb3JfbGV2ZWwpKQotCi0gICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNr
X2NvbXBsZXhfZGVmaW5pdGlvbl9zZXZlcml0eTEoc2VsZik6Ci0gICAgICAgIGVycm9yX2xldmVs
ID0gMQotICAgICAgICBlcnJvcl9saW5lcyA9IHNlbGYudHJpZ2dlcl9saW5lcyhlcnJvcl9sZXZl
bCkgKyAxCi0gICAgICAgIHRyaWdnZXJfbGV2ZWwgPSBzZWxmLnRyaWdnZXJfbGluZXMoY3BwX3N0
eWxlLl92ZXJib3NlX2xldmVsKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0
aHNfY2hlY2soCi0gICAgICAgICAgICAoJ215X25hbWVzcGFjZTo6bXlfb3RoZXJfbmFtZXNwYWNl
OjpNeVZlcnlMb25nVHlwZU5hbWUqXG4nCi0gICAgICAgICAgICAgJ215X25hbWVzcGFjZTo6bXlf
b3RoZXJfbmFtZXNwYWNlOjpNeUZ1bmN0aW9uKGludCBhcmcxLCBjaGFyKiBhcmcyKScKLSAgICAg
ICAgICAgICArIHNlbGYuZnVuY3Rpb25fYm9keShlcnJvcl9saW5lcykpLAotICAgICAgICAgICAg
KCdTbWFsbCBhbmQgZm9jdXNlZCBmdW5jdGlvbnMgYXJlIHByZWZlcnJlZDogJwotICAgICAgICAg
ICAgICdteV9uYW1lc3BhY2U6Om15X290aGVyX25hbWVzcGFjZTo6TXlGdW5jdGlvbigpJwotICAg
ICAgICAgICAgICcgaGFzICVkIG5vbi1jb21tZW50IGxpbmVzICcKLSAgICAgICAgICAgICAnKGVy
cm9yIHRyaWdnZXJlZCBieSBleGNlZWRpbmcgJWQgbGluZXMpLicKLSAgICAgICAgICAgICAnICBb
cmVhZGFiaWxpdHkvZm5fc2l6ZV0gWyVkXScpCi0gICAgICAgICAgICAlIChlcnJvcl9saW5lcywg
dHJpZ2dlcl9sZXZlbCwgZXJyb3JfbGV2ZWwpKQotCi0gICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVu
Z3RoX2NoZWNrX2RlZmluaXRpb25fc2V2ZXJpdHkxX2Zvcl90ZXN0KHNlbGYpOgotICAgICAgICBl
cnJvcl9sZXZlbCA9IDEKLSAgICAgICAgZXJyb3JfbGluZXMgPSBzZWxmLnRyaWdnZXJfdGVzdF9s
aW5lcyhlcnJvcl9sZXZlbCkgKyAxCi0gICAgICAgIHRyaWdnZXJfbGV2ZWwgPSBzZWxmLnRyaWdn
ZXJfdGVzdF9saW5lcyhjcHBfc3R5bGUuX3ZlcmJvc2VfbGV2ZWwoKSkKLSAgICAgICAgc2VsZi5h
c3NlcnRfZnVuY3Rpb25fbGVuZ3Roc19jaGVjaygKLSAgICAgICAgICAgICdURVNUX0YoVGVzdCwg
TXV0YXRvciknICsgc2VsZi5mdW5jdGlvbl9ib2R5KGVycm9yX2xpbmVzKSwKLSAgICAgICAgICAg
ICgnU21hbGwgYW5kIGZvY3VzZWQgZnVuY3Rpb25zIGFyZSBwcmVmZXJyZWQ6ICcKLSAgICAgICAg
ICAgICAnVEVTVF9GKFRlc3QsIE11dGF0b3IpIGhhcyAlZCBub24tY29tbWVudCBsaW5lcyAnCi0g
ICAgICAgICAgICAgJyhlcnJvciB0cmlnZ2VyZWQgYnkgZXhjZWVkaW5nICVkIGxpbmVzKS4nCi0g
ICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2ZuX3NpemVdIFslZF0nKQotICAgICAgICAgICAg
JSAoZXJyb3JfbGluZXMsIHRyaWdnZXJfbGV2ZWwsIGVycm9yX2xldmVsKSkKLQotICAgIGRlZiB0
ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19kZWZpbml0aW9uX3NldmVyaXR5MV9mb3Jfc3BsaXRf
bGluZV90ZXN0KHNlbGYpOgotICAgICAgICBlcnJvcl9sZXZlbCA9IDEKLSAgICAgICAgZXJyb3Jf
bGluZXMgPSBzZWxmLnRyaWdnZXJfdGVzdF9saW5lcyhlcnJvcl9sZXZlbCkgKyAxCi0gICAgICAg
IHRyaWdnZXJfbGV2ZWwgPSBzZWxmLnRyaWdnZXJfdGVzdF9saW5lcyhjcHBfc3R5bGUuX3ZlcmJv
c2VfbGV2ZWwoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3Roc19jaGVjaygK
LSAgICAgICAgICAgICgnVEVTVF9GKEdvb2dsZVVwZGF0ZVJlY292ZXJ5UmVnaXN0cnlQcm90ZWN0
ZWRUZXN0LFxuJwotICAgICAgICAgICAgICcgICAgRml4R29vZ2xlVXBkYXRlX0FsbFZhbHVlc19N
YWNoaW5lQXBwKScgICMgbm90ZTogNCBzcGFjZXMKLSAgICAgICAgICAgICArIHNlbGYuZnVuY3Rp
b25fYm9keShlcnJvcl9saW5lcykpLAotICAgICAgICAgICAgKCdTbWFsbCBhbmQgZm9jdXNlZCBm
dW5jdGlvbnMgYXJlIHByZWZlcnJlZDogJwotICAgICAgICAgICAgICdURVNUX0YoR29vZ2xlVXBk
YXRlUmVjb3ZlcnlSZWdpc3RyeVByb3RlY3RlZFRlc3QsICcgICMgMSBzcGFjZQotICAgICAgICAg
ICAgICdGaXhHb29nbGVVcGRhdGVfQWxsVmFsdWVzX01hY2hpbmVBcHApIGhhcyAlZCBub24tY29t
bWVudCBsaW5lcyAnCi0gICAgICAgICAgICAgJyhlcnJvciB0cmlnZ2VyZWQgYnkgZXhjZWVkaW5n
ICVkIGxpbmVzKS4nCi0gICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2ZuX3NpemVdIFslZF0n
KQotICAgICAgICAgICAgJSAoZXJyb3JfbGluZXMrMSwgdHJpZ2dlcl9sZXZlbCwgZXJyb3JfbGV2
ZWwpKQotCi0gICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25fc2V2
ZXJpdHkxX2Zvcl9iYWRfdGVzdF9kb2VzbnRfYnJlYWsoc2VsZik6Ci0gICAgICAgIGVycm9yX2xl
dmVsID0gMQotICAgICAgICBlcnJvcl9saW5lcyA9IHNlbGYudHJpZ2dlcl90ZXN0X2xpbmVzKGVy
cm9yX2xldmVsKSArIDEKLSAgICAgICAgdHJpZ2dlcl9sZXZlbCA9IHNlbGYudHJpZ2dlcl90ZXN0
X2xpbmVzKGNwcF9zdHlsZS5fdmVyYm9zZV9sZXZlbCgpKQotICAgICAgICBzZWxmLmFzc2VydF9m
dW5jdGlvbl9sZW5ndGhzX2NoZWNrKAotICAgICAgICAgICAgKCdURVNUX0YoJwotICAgICAgICAg
ICAgICsgc2VsZi5mdW5jdGlvbl9ib2R5KGVycm9yX2xpbmVzKSksCi0gICAgICAgICAgICAoJ1Nt
YWxsIGFuZCBmb2N1c2VkIGZ1bmN0aW9ucyBhcmUgcHJlZmVycmVkOiAnCi0gICAgICAgICAgICAg
J1RFU1RfRiBoYXMgJWQgbm9uLWNvbW1lbnQgbGluZXMgJwotICAgICAgICAgICAgICcoZXJyb3Ig
dHJpZ2dlcmVkIGJ5IGV4Y2VlZGluZyAlZCBsaW5lcykuJwotICAgICAgICAgICAgICcgIFtyZWFk
YWJpbGl0eS9mbl9zaXplXSBbJWRdJykKLSAgICAgICAgICAgICUgKGVycm9yX2xpbmVzLCB0cmln
Z2VyX2xldmVsLCBlcnJvcl9sZXZlbCkpCi0KLSAgICBkZWYgdGVzdF9mdW5jdGlvbl9sZW5ndGhf
Y2hlY2tfZGVmaW5pdGlvbl9zZXZlcml0eTFfd2l0aF9lbWJlZGRlZF9ub19saW50cyhzZWxmKToK
LSAgICAgICAgZXJyb3JfbGV2ZWwgPSAxCi0gICAgICAgIGVycm9yX2xpbmVzID0gc2VsZi50cmln
Z2VyX2xpbmVzKGVycm9yX2xldmVsKSArIDEKLSAgICAgICAgdHJpZ2dlcl9sZXZlbCA9IHNlbGYu
dHJpZ2dlcl9saW5lcyhjcHBfc3R5bGUuX3ZlcmJvc2VfbGV2ZWwoKSkKLSAgICAgICAgc2VsZi5h
c3NlcnRfZnVuY3Rpb25fbGVuZ3Roc19jaGVjaygKLSAgICAgICAgICAgICd2b2lkIHRlc3QoaW50
IHgpJyArIHNlbGYuZnVuY3Rpb25fYm9keV93aXRoX25vX2xpbnRzKGVycm9yX2xpbmVzKSwKLSAg
ICAgICAgICAgICgnU21hbGwgYW5kIGZvY3VzZWQgZnVuY3Rpb25zIGFyZSBwcmVmZXJyZWQ6ICcK
LSAgICAgICAgICAgICAndGVzdCgpIGhhcyAlZCBub24tY29tbWVudCBsaW5lcyAnCi0gICAgICAg
ICAgICAgJyhlcnJvciB0cmlnZ2VyZWQgYnkgZXhjZWVkaW5nICVkIGxpbmVzKS4nCi0gICAgICAg
ICAgICAgJyAgW3JlYWRhYmlsaXR5L2ZuX3NpemVdIFslZF0nKQotICAgICAgICAgICAgJSAoZXJy
b3JfbGluZXMsIHRyaWdnZXJfbGV2ZWwsIGVycm9yX2xldmVsKSkKLQotICAgIGRlZiB0ZXN0X2Z1
bmN0aW9uX2xlbmd0aF9jaGVja19kZWZpbml0aW9uX3NldmVyaXR5MV93aXRoX25vX2xpbnQoc2Vs
Zik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aHNfY2hlY2soCi0gICAgICAg
ICAgICAoJ3ZvaWQgdGVzdChpbnQgeCknICsgc2VsZi5mdW5jdGlvbl9ib2R5KHNlbGYudHJpZ2dl
cl9saW5lcygxKSkKLSAgICAgICAgICAgICArICcgIC8vIE5PTElOVCAtLSBsb25nIGZ1bmN0aW9u
JyksCi0gICAgICAgICAgICAnJykKLQotICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVj
a19kZWZpbml0aW9uX2JlbG93X3NldmVyaXR5MihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRf
ZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2JlbG93X2Vycm9yX2xldmVsKDIpCi0KLSAgICBkZWYgdGVz
dF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9zZXZlcml0eTIoc2VsZik6Ci0gICAg
ICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19hdF9lcnJvcl9sZXZlbCgyKQot
Ci0gICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25fYWJvdmVfc2V2
ZXJpdHkyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tf
YWJvdmVfZXJyb3JfbGV2ZWwoMikKLQotICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVj
a19kZWZpbml0aW9uX2JlbG93X3NldmVyaXR5MyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRf
ZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2JlbG93X2Vycm9yX2xldmVsKDMpCi0KLSAgICBkZWYgdGVz
dF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9zZXZlcml0eTMoc2VsZik6Ci0gICAg
ICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19hdF9lcnJvcl9sZXZlbCgzKQot
Ci0gICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25fYWJvdmVfc2V2
ZXJpdHkzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tf
YWJvdmVfZXJyb3JfbGV2ZWwoMykKLQotICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVj
a19kZWZpbml0aW9uX2JlbG93X3NldmVyaXR5NChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRf
ZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2JlbG93X2Vycm9yX2xldmVsKDQpCi0KLSAgICBkZWYgdGVz
dF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9zZXZlcml0eTQoc2VsZik6Ci0gICAg
ICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19hdF9lcnJvcl9sZXZlbCg0KQot
Ci0gICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25fYWJvdmVfc2V2
ZXJpdHk0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tf
YWJvdmVfZXJyb3JfbGV2ZWwoNCkKLQotICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVj
a19kZWZpbml0aW9uX2JlbG93X3NldmVyaXR5NShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRf
ZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2JlbG93X2Vycm9yX2xldmVsKDUpCi0KLSAgICBkZWYgdGVz
dF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9hdF9zZXZlcml0eTUoc2VsZik6Ci0g
ICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19hdF9lcnJvcl9sZXZlbCg1
KQotCi0gICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25fYWJvdmVf
c2V2ZXJpdHk1KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhfY2hl
Y2tfYWJvdmVfZXJyb3JfbGV2ZWwoNSkKLQotICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9j
aGVja19kZWZpbml0aW9uX2h1Z2VfbGluZXMoc2VsZik6Ci0gICAgICAgICMgNSBpcyB0aGUgbGlt
aXQKLSAgICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb24o
c2VsZi50cmlnZ2VyX2xpbmVzKDEwKSwgNSkKLQotICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0
aF9ub3RfZGV0ZXJtaW5hYmxlKHNlbGYpOgotICAgICAgICAjIE1hY3JvIGludm9jYXRpb24gd2l0
aG91dCB0ZXJtaW5hdGluZyBzZW1pY29sb24uCi0gICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9u
X2xlbmd0aHNfY2hlY2soCi0gICAgICAgICAgICAnTUFDUk8oYXJnKScsCi0gICAgICAgICAgICAn
JykKLQotICAgICAgICAjIE1hY3JvIHdpdGggdW5kZXJzY29yZXMKLSAgICAgICAgc2VsZi5hc3Nl
cnRfZnVuY3Rpb25fbGVuZ3Roc19jaGVjaygKLSAgICAgICAgICAgICdNQUNST19XSVRIX1VOREVS
U0NPUkVTKGFyZzEsIGFyZzIsIGFyZzMpJywKLSAgICAgICAgICAgICcnKQotCi0gICAgICAgIHNl
bGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aHNfY2hlY2soCi0gICAgICAgICAgICAnTm9uTWFjcm8o
YXJnKScsCi0gICAgICAgICAgICAnTGludCBmYWlsZWQgdG8gZmluZCBzdGFydCBvZiBmdW5jdGlv
biBib2R5LicKLSAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9mbl9zaXplXSBbNV0nKQotCi0K
LWNsYXNzIE5vTm9uVmlydHVhbERlc3RydWN0b3JzVGVzdChDcHBTdHlsZVRlc3RCYXNlKToKLQot
ICAgIGRlZiB0ZXN0X25vX2Vycm9yKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9s
aW5lX2xpbnQoCi0gICAgICAgICAgICAnJydjbGFzcyBGb28gewotICAgICAgICAgICAgICAgICAg
IHZpcnR1YWwgfkZvbygpOwotICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBmb28oKTsK
LSAgICAgICAgICAgICAgIH07JycnLAotICAgICAgICAgICAgJycpCi0KLSAgICAgICAgc2VsZi5h
c3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJycnY2xhc3MgRm9vIHsKLSAgICAg
ICAgICAgICAgICAgICB2aXJ0dWFsIGlubGluZSB+Rm9vKCk7Ci0gICAgICAgICAgICAgICAgICAg
dmlydHVhbCB2b2lkIGZvbygpOwotICAgICAgICAgICAgICAgfTsnJycsCi0gICAgICAgICAgICAn
JykKLQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAn
JydjbGFzcyBGb28gewotICAgICAgICAgICAgICAgICAgIGlubGluZSB2aXJ0dWFsIH5Gb28oKTsK
LSAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZm9vKCk7Ci0gICAgICAgICAgICAgICB9
OycnJywKLSAgICAgICAgICAgICcnKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVf
bGludCgKLSAgICAgICAgICAgICcnJ2NsYXNzIEZvbzo6R29vIHsKLSAgICAgICAgICAgICAgICAg
ICB2aXJ0dWFsIH5Hb28oKTsKLSAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZ29vKCk7
Ci0gICAgICAgICAgICAgICB9OycnJywKLSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFz
c2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnY2xhc3MgRm9vIHsgdm9pZCBmb28o
KTsgfTsnLAotICAgICAgICAgICAgJ01vcmUgdGhhbiBvbmUgY29tbWFuZCBvbiB0aGUgc2FtZSBs
aW5lICBbd2hpdGVzcGFjZS9uZXdsaW5lXSBbNF0nKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X211
bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICcnJ2NsYXNzIFF1YWxpZmllZDo6R29vIDogcHVi
bGljIEZvbyB7Ci0gICAgICAgICAgICAgICAgICAgdmlydHVhbCB2b2lkIGdvbygpOwotICAgICAg
ICAgICAgICAgfTsnJycsCi0gICAgICAgICAgICAnJykKLQotICAgICAgICBzZWxmLmFzc2VydF9t
dWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAjIExpbmUtZW5kaW5nIDoKLSAgICAgICAgICAg
ICcnJ2NsYXNzIEdvbyA6Ci0gICAgICAgICAgICAgICBwdWJsaWMgRm9vIHsKLSAgICAgICAgICAg
ICAgICAgICAgdmlydHVhbCB2b2lkIGdvbygpOwotICAgICAgICAgICAgICAgfTsnJycsCi0gICAg
ICAgICAgICAnTGFiZWxzIHNob3VsZCBhbHdheXMgYmUgaW5kZW50ZWQgYXQgbGVhc3Qgb25lIHNw
YWNlLiAgSWYgdGhpcyBpcyBhICcKLSAgICAgICAgICAgICdtZW1iZXItaW5pdGlhbGl6ZXIgbGlz
dCBpbiBhIGNvbnN0cnVjdG9yLCB0aGUgY29sb24gc2hvdWxkIGJlIG9uIHRoZSAnCi0gICAgICAg
ICAgICAnbGluZSBhZnRlciB0aGUgZGVmaW5pdGlvbiBoZWFkZXIuICBbd2hpdGVzcGFjZS9sYWJl
bHNdIFs0XScpCi0KLSAgICBkZWYgdGVzdF9ub19kZXN0cnVjdG9yX3doZW5fdmlydHVhbF9uZWVk
ZWQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludF9yZSgKLSAgICAg
ICAgICAgICcnJ2NsYXNzIEZvbyB7Ci0gICAgICAgICAgICAgICAgICAgdmlydHVhbCB2b2lkIGZv
bygpOwotICAgICAgICAgICAgICAgfTsnJycsCi0gICAgICAgICAgICAnVGhlIGNsYXNzIEZvbyBw
cm9iYWJseSBuZWVkcyBhIHZpcnR1YWwgZGVzdHJ1Y3RvcicpCi0KLSAgICBkZWYgdGVzdF9kZXN0
cnVjdG9yX25vbl92aXJ0dWFsX3doZW5fdmlydHVhbF9uZWVkZWQoc2VsZik6Ci0gICAgICAgIHNl
bGYuYXNzZXJ0X211bHRpX2xpbmVfbGludF9yZSgKLSAgICAgICAgICAgICcnJ2NsYXNzIEZvbyB7
Ci0gICAgICAgICAgICAgICAgICAgfkZvbygpOwotICAgICAgICAgICAgICAgICAgIHZpcnR1YWwg
dm9pZCBmb28oKTsKLSAgICAgICAgICAgICAgIH07JycnLAotICAgICAgICAgICAgJ1RoZSBjbGFz
cyBGb28gcHJvYmFibHkgbmVlZHMgYSB2aXJ0dWFsIGRlc3RydWN0b3InKQotCi0gICAgZGVmIHRl
c3Rfbm9fd2Fybl93aGVuX2Rlcml2ZWQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRp
X2xpbmVfbGludCgKLSAgICAgICAgICAgICcnJ2NsYXNzIEZvbyA6IHB1YmxpYyBHb28gewotICAg
ICAgICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBmb28oKTsKLSAgICAgICAgICAgICAgIH07Jycn
LAotICAgICAgICAgICAgJycpCi0KLSAgICBkZWYgdGVzdF9pbnRlcm5hbF9icmFjZXMoc2VsZik6
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludF9yZSgKLSAgICAgICAgICAgICcn
J2NsYXNzIEZvbyB7Ci0gICAgICAgICAgICAgICAgICAgZW51bSBHb28gewotICAgICAgICAgICAg
ICAgICAgICAgICBHT08KLSAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAg
IHZpcnR1YWwgdm9pZCBmb28oKTsKLSAgICAgICAgICAgICAgIH07JycnLAotICAgICAgICAgICAg
J1RoZSBjbGFzcyBGb28gcHJvYmFibHkgbmVlZHMgYSB2aXJ0dWFsIGRlc3RydWN0b3InKQotCi0g
ICAgZGVmIHRlc3RfaW5uZXJfY2xhc3NfbmVlZHNfdmlydHVhbF9kZXN0cnVjdG9yKHNlbGYpOgot
ICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnRfcmUoCi0gICAgICAgICAgICAnJydj
bGFzcyBGb28gewotICAgICAgICAgICAgICAgICAgIGNsYXNzIEdvbyB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgIHZpcnR1YWwgdm9pZCBnb28oKTsKLSAgICAgICAgICAgICAgICAgICB9OwotICAg
ICAgICAgICAgICAgfTsnJycsCi0gICAgICAgICAgICAnVGhlIGNsYXNzIEdvbyBwcm9iYWJseSBu
ZWVkcyBhIHZpcnR1YWwgZGVzdHJ1Y3RvcicpCi0KLSAgICBkZWYgdGVzdF9vdXRlcl9jbGFzc19u
ZWVkc192aXJ0dWFsX2Rlc3RydWN0b3Ioc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRp
X2xpbmVfbGludF9yZSgKLSAgICAgICAgICAgICcnJ2NsYXNzIEZvbyB7Ci0gICAgICAgICAgICAg
ICAgICAgY2xhc3MgR29vIHsKLSAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAg
ICAgIHZpcnR1YWwgdm9pZCBmb28oKTsKLSAgICAgICAgICAgICAgIH07JycnLAotICAgICAgICAg
ICAgJ1RoZSBjbGFzcyBGb28gcHJvYmFibHkgbmVlZHMgYSB2aXJ0dWFsIGRlc3RydWN0b3InKQot
Ci0gICAgZGVmIHRlc3RfcXVhbGlmaWVkX2NsYXNzX25lZWRzX3ZpcnR1YWxfZGVzdHJ1Y3Rvcihz
ZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50X3JlKAotICAgICAgICAg
ICAgJycnY2xhc3MgUXVhbGlmaWVkOjpGb28gewotICAgICAgICAgICAgICAgICAgIHZpcnR1YWwg
dm9pZCBmb28oKTsKLSAgICAgICAgICAgICAgIH07JycnLAotICAgICAgICAgICAgJ1RoZSBjbGFz
cyBRdWFsaWZpZWQ6OkZvbyBwcm9iYWJseSBuZWVkcyBhIHZpcnR1YWwgZGVzdHJ1Y3RvcicpCi0K
LSAgICBkZWYgdGVzdF9tdWx0aV9saW5lX2RlY2xhcmF0aW9uX25vX2Vycm9yKHNlbGYpOgotICAg
ICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnRfcmUoCi0gICAgICAgICAgICAnJydjbGFz
cyBGb28KLSAgICAgICAgICAgICAgICAgICA6IHB1YmxpYyBHb28gewotICAgICAgICAgICAgICAg
ICAgIHZpcnR1YWwgdm9pZCBmb28oKTsKLSAgICAgICAgICAgICAgIH07JycnLAotICAgICAgICAg
ICAgJycpCi0KLSAgICBkZWYgdGVzdF9tdWx0aV9saW5lX2RlY2xhcmF0aW9uX3dpdGhfZXJyb3Io
c2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAg
ICcnJ2NsYXNzIEZvbwotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgIHZpcnR1
YWwgdm9pZCBmb28oKTsKLSAgICAgICAgICAgICAgIH07JycnLAotICAgICAgICAgICAgWydUaGlz
IHsgc2hvdWxkIGJlIGF0IHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGxpbmUgICcKLSAgICAgICAg
ICAgICAnW3doaXRlc3BhY2UvYnJhY2VzXSBbNF0nLAotICAgICAgICAgICAgICdUaGUgY2xhc3Mg
Rm9vIHByb2JhYmx5IG5lZWRzIGEgdmlydHVhbCBkZXN0cnVjdG9yIGR1ZSB0byBoYXZpbmcgJwot
ICAgICAgICAgICAgICd2aXJ0dWFsIG1ldGhvZChzKSwgb25lIGRlY2xhcmVkIGF0IGxpbmUgMi4g
IFtydW50aW1lL3ZpcnR1YWxdIFs0XSddKQotCi0KLWNsYXNzIENwcFN0eWxlU3RhdGVUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9lcnJvcl9jb3VudChzZWxmKToKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMoMCwgY3BwX3N0eWxlLmVycm9yX2NvdW50KCkpCi0gICAgICAg
IGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLmluY3JlbWVudF9lcnJvcl9jb3VudCgpCi0gICAg
ICAgIGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLmluY3JlbWVudF9lcnJvcl9jb3VudCgpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDIsIGNwcF9zdHlsZS5lcnJvcl9jb3VudCgpKQotICAg
ICAgICBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS5yZXNldF9lcnJvcl9jb3VudCgpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDAsIGNwcF9zdHlsZS5lcnJvcl9jb3VudCgpKQotCi0KLWNs
YXNzIFdlYktpdFN0eWxlVGVzdChDcHBTdHlsZVRlc3RCYXNlKToKLQotICAgICMgZm9yIGh0dHA6
Ly93ZWJraXQub3JnL2NvZGluZy9jb2Rpbmctc3R5bGUuaHRtbAotICAgIGRlZiB0ZXN0X2luZGVu
dGF0aW9uKHNlbGYpOgotICAgICAgICAjIDEuIFVzZSBzcGFjZXMsIG5vdCB0YWJzLiBUYWJzIHNo
b3VsZCBvbmx5IGFwcGVhciBpbiBmaWxlcyB0aGF0Ci0gICAgICAgICMgICAgcmVxdWlyZSB0aGVt
IGZvciBzZW1hbnRpYyBtZWFuaW5nLCBsaWtlIE1ha2VmaWxlcy4KLSAgICAgICAgc2VsZi5hc3Nl
cnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ2NsYXNzIEZvbyB7XG4nCi0gICAgICAg
ICAgICAnICAgIGludCBnb287XG4nCi0gICAgICAgICAgICAnfTsnLAotICAgICAgICAgICAgJycp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdjbGFz
cyBGb28ge1xuJwotICAgICAgICAgICAgJ1x0aW50IGdvbztcbicKLSAgICAgICAgICAgICd9Oycs
Ci0gICAgICAgICAgICAnVGFiIGZvdW5kOyBiZXR0ZXIgdG8gdXNlIHNwYWNlcyAgW3doaXRlc3Bh
Y2UvdGFiXSBbMV0nKQotCi0gICAgICAgICMgMi4gVGhlIGluZGVudCBzaXplIGlzIDQgc3BhY2Vz
LgotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnY2xh
c3MgRm9vIHtcbicKLSAgICAgICAgICAgICcgICAgaW50IGdvbztcbicKLSAgICAgICAgICAgICd9
OycsCi0gICAgICAgICAgICAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50
KAotICAgICAgICAgICAgJ2NsYXNzIEZvbyB7XG4nCi0gICAgICAgICAgICAnICAgaW50IGdvbztc
bicKLSAgICAgICAgICAgICd9OycsCi0gICAgICAgICAgICAnV2VpcmQgbnVtYmVyIG9mIHNwYWNl
cyBhdCBsaW5lLXN0YXJ0LiAgQXJlIHlvdSB1c2luZyBhIDQtc3BhY2UgaW5kZW50PyAgW3doaXRl
c3BhY2UvaW5kZW50XSBbM10nKQotICAgICAgICAjIEZJWE1FOiBObyB0ZXN0cyBmb3IgOC1zcGFj
ZXMuCi0KLSAgICAgICAgIyAzLiBJbiBhIGhlYWRlciwgY29kZSBpbnNpZGUgYSBuYW1lc3BhY2Ug
c2hvdWxkIG5vdCBiZSBpbmRlbnRlZC4KLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9s
aW50KAotICAgICAgICAgICAgJ25hbWVzcGFjZSBXZWJDb3JlIHtcblxuJwotICAgICAgICAgICAg
J2NsYXNzIERvY3VtZW50IHtcbicKLSAgICAgICAgICAgICcgICAgaW50IG15VmFyaWFibGU7XG4n
Ci0gICAgICAgICAgICAnfTtcbicKLSAgICAgICAgICAgICd9JywKLSAgICAgICAgICAgICcnLAot
ICAgICAgICAgICAgJ2Zvby5oJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50
KAotICAgICAgICAgICAgJ25hbWVzcGFjZSBPdXRlck5hbWVzcGFjZSB7XG4nCi0gICAgICAgICAg
ICAnICAgIG5hbWVzcGFjZSBJbm5lck5hbWVzcGFjZSB7XG4nCi0gICAgICAgICAgICAnICAgIGNs
YXNzIERvY3VtZW50IHtcbicKLSAgICAgICAgICAgICd9O1xuJwotICAgICAgICAgICAgJ307XG4n
Ci0gICAgICAgICAgICAnfScsCi0gICAgICAgICAgICAnQ29kZSBpbnNpZGUgYSBuYW1lc3BhY2Ug
c2hvdWxkIG5vdCBiZSBpbmRlbnRlZC4gIFt3aGl0ZXNwYWNlL2luZGVudF0gWzRdJywKLSAgICAg
ICAgICAgICdmb28uaCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAg
ICAgICAgICAgICduYW1lc3BhY2UgT3V0ZXJOYW1lc3BhY2Uge1xuJwotICAgICAgICAgICAgJyAg
ICBjbGFzcyBEb2N1bWVudCB7XG4nCi0gICAgICAgICAgICAnICAgIG5hbWVzcGFjZSBJbm5lck5h
bWVzcGFjZSB7XG4nCi0gICAgICAgICAgICAnfTtcbicKLSAgICAgICAgICAgICd9O1xuJwotICAg
ICAgICAgICAgJ30nLAotICAgICAgICAgICAgJ0NvZGUgaW5zaWRlIGEgbmFtZXNwYWNlIHNob3Vs
ZCBub3QgYmUgaW5kZW50ZWQuICBbd2hpdGVzcGFjZS9pbmRlbnRdIFs0XScsCi0gICAgICAgICAg
ICAnZm9vLmgnKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAg
ICAgICAnbmFtZXNwYWNlIFdlYkNvcmUge1xuJwotICAgICAgICAgICAgJyNpZiAwXG4nCi0gICAg
ICAgICAgICAnICAgIGNsYXNzIERvY3VtZW50IHtcbicKLSAgICAgICAgICAgICd9O1xuJwotICAg
ICAgICAgICAgJyNlbmRpZlxuJwotICAgICAgICAgICAgJ30nLAotICAgICAgICAgICAgJ0NvZGUg
aW5zaWRlIGEgbmFtZXNwYWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuICBbd2hpdGVzcGFjZS9p
bmRlbnRdIFs0XScsCi0gICAgICAgICAgICAnZm9vLmgnKQotICAgICAgICBzZWxmLmFzc2VydF9t
dWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnbmFtZXNwYWNlIFdlYkNvcmUge1xuJwotICAg
ICAgICAgICAgJ2NsYXNzIERvY3VtZW50IHtcbicKLSAgICAgICAgICAgICd9O1xuJwotICAgICAg
ICAgICAgJ30nLAotICAgICAgICAgICAgJycsCi0gICAgICAgICAgICAnZm9vLmgnKQotCi0gICAg
ICAgICMgNC4gSW4gYW4gaW1wbGVtZW50YXRpb24gZmlsZSAoZmlsZXMgd2l0aCB0aGUgZXh0ZW5z
aW9uIC5jcHAsIC5jCi0gICAgICAgICMgICAgb3IgLm1tKSwgY29kZSBpbnNpZGUgYSBuYW1lc3Bh
Y2Ugc2hvdWxkIG5vdCBiZSBpbmRlbnRlZC4KLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGlu
ZV9saW50KAotICAgICAgICAgICAgJ25hbWVzcGFjZSBXZWJDb3JlIHtcblxuJwotICAgICAgICAg
ICAgJ0RvY3VtZW50OjpGb28oKVxuJwotICAgICAgICAgICAgJyAgICA6IGZvbyhiYXIpXG4nCi0g
ICAgICAgICAgICAnICAgICwgYm9vKGZhcilcbicKLSAgICAgICAgICAgICd7XG4nCi0gICAgICAg
ICAgICAnICAgIHN0dWZmKCk7XG4nCi0gICAgICAgICAgICAnfScsCi0gICAgICAgICAgICAnJywK
LSAgICAgICAgICAgICdmb28uY3BwJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9s
aW50KAotICAgICAgICAgICAgJ25hbWVzcGFjZSBPdXRlck5hbWVzcGFjZSB7XG4nCi0gICAgICAg
ICAgICAnbmFtZXNwYWNlIElubmVyTmFtZXNwYWNlIHtcbicKLSAgICAgICAgICAgICdEb2N1bWVu
dDo6Rm9vKCkgeyB9XG4nCi0gICAgICAgICAgICAnICAgIHZvaWQqIHA7XG4nCi0gICAgICAgICAg
ICAnfVxuJwotICAgICAgICAgICAgJ31cbicsCi0gICAgICAgICAgICAnQ29kZSBpbnNpZGUgYSBu
YW1lc3BhY2Ugc2hvdWxkIG5vdCBiZSBpbmRlbnRlZC4gIFt3aGl0ZXNwYWNlL2luZGVudF0gWzRd
JywKLSAgICAgICAgICAgICdmb28uY3BwJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGlu
ZV9saW50KAotICAgICAgICAgICAgJ25hbWVzcGFjZSBPdXRlck5hbWVzcGFjZSB7XG4nCi0gICAg
ICAgICAgICAnbmFtZXNwYWNlIElubmVyTmFtZXNwYWNlIHtcbicKLSAgICAgICAgICAgICdEb2N1
bWVudDo6Rm9vKCkgeyB9XG4nCi0gICAgICAgICAgICAnfVxuJwotICAgICAgICAgICAgJyAgICB2
b2lkKiBwO1xuJwotICAgICAgICAgICAgJ31cbicsCi0gICAgICAgICAgICAnQ29kZSBpbnNpZGUg
YSBuYW1lc3BhY2Ugc2hvdWxkIG5vdCBiZSBpbmRlbnRlZC4gIFt3aGl0ZXNwYWNlL2luZGVudF0g
WzRdJywKLSAgICAgICAgICAgICdmb28uY3BwJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlf
bGluZV9saW50KAotICAgICAgICAgICAgJ25hbWVzcGFjZSBXZWJDb3JlIHtcblxuJwotICAgICAg
ICAgICAgJyAgICBjb25zdCBjaGFyKiBmb28gPSAic3RhcnQ6OyJcbicKLSAgICAgICAgICAgICcg
ICAgICAgICJkZnNmc2ZzIjtcbicKLSAgICAgICAgICAgICd9XG4nLAotICAgICAgICAgICAgJ0Nv
ZGUgaW5zaWRlIGEgbmFtZXNwYWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuICBbd2hpdGVzcGFj
ZS9pbmRlbnRdIFs0XScsCi0gICAgICAgICAgICAnZm9vLmNwcCcpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICduYW1lc3BhY2UgV2ViQ29yZSB7XG5c
bicKLSAgICAgICAgICAgICdjb25zdCBjaGFyKiBmb28odm9pZCogYSA9ICI7IiwgLy8gO1xuJwot
ICAgICAgICAgICAgJyAgICB2b2lkKiBiKTtcbicKLSAgICAgICAgICAgICcgICAgdm9pZCogcDtc
bicKLSAgICAgICAgICAgICd9XG4nLAotICAgICAgICAgICAgJ0NvZGUgaW5zaWRlIGEgbmFtZXNw
YWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuICBbd2hpdGVzcGFjZS9pbmRlbnRdIFs0XScsCi0g
ICAgICAgICAgICAnZm9vLmNwcCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGlu
dCgKLSAgICAgICAgICAgICduYW1lc3BhY2UgV2ViQ29yZSB7XG5cbicKLSAgICAgICAgICAgICdj
b25zdCBjaGFyKiBmb29bXSA9IHtcbicKLSAgICAgICAgICAgICcgICAgInZvaWQqIGIpOyIsIC8v
IDtcbicKLSAgICAgICAgICAgICcgICAgImFzZmRmIixcbicKLSAgICAgICAgICAgICcgICAgfVxu
JwotICAgICAgICAgICAgJyAgICB2b2lkKiBwO1xuJwotICAgICAgICAgICAgJ31cbicsCi0gICAg
ICAgICAgICAnQ29kZSBpbnNpZGUgYSBuYW1lc3BhY2Ugc2hvdWxkIG5vdCBiZSBpbmRlbnRlZC4g
IFt3aGl0ZXNwYWNlL2luZGVudF0gWzRdJywKLSAgICAgICAgICAgICdmb28uY3BwJykKLSAgICAg
ICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ25hbWVzcGFjZSBX
ZWJDb3JlIHtcblxuJwotICAgICAgICAgICAgJ2NvbnN0IGNoYXIqIGZvb1tdID0ge1xuJwotICAg
ICAgICAgICAgJyAgICAidm9pZCogYik7IiwgLy8gfVxuJwotICAgICAgICAgICAgJyAgICAiYXNm
ZGYiLFxuJwotICAgICAgICAgICAgJyAgICB9XG4nCi0gICAgICAgICAgICAnfVxuJywKLSAgICAg
ICAgICAgICcnLAotICAgICAgICAgICAgJ2Zvby5jcHAnKQotICAgICAgICBzZWxmLmFzc2VydF9t
dWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnICAgIG5hbWVzcGFjZSBXZWJDb3JlIHtcblxu
JwotICAgICAgICAgICAgJyAgICB2b2lkIERvY3VtZW50OjpGb28oKVxuJwotICAgICAgICAgICAg
JyAgICB7XG4nCi0gICAgICAgICAgICAnc3RhcnQ6IC8vIGluZmluaXRlIGxvb3BzIGFyZSBmdW4h
XG4nCi0gICAgICAgICAgICAnICAgICAgICBnb3RvIHN0YXJ0O1xuJwotICAgICAgICAgICAgJyAg
ICB9JywKLSAgICAgICAgICAgICduYW1lc3BhY2Ugc2hvdWxkIG5ldmVyIGJlIGluZGVudGVkLiAg
W3doaXRlc3BhY2UvaW5kZW50XSBbNF0nLAotICAgICAgICAgICAgJ2Zvby5jcHAnKQotICAgICAg
ICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnbmFtZXNwYWNlIFdl
YkNvcmUge1xuJwotICAgICAgICAgICAgJyAgICBEb2N1bWVudDo6Rm9vKCkgeyB9XG4nCi0gICAg
ICAgICAgICAnfScsCi0gICAgICAgICAgICAnQ29kZSBpbnNpZGUgYSBuYW1lc3BhY2Ugc2hvdWxk
IG5vdCBiZSBpbmRlbnRlZC4nCi0gICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9pbmRlbnRdIFs0
XScsCi0gICAgICAgICAgICAnZm9vLmNwcCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xp
bmVfbGludCgKLSAgICAgICAgICAgICduYW1lc3BhY2UgV2ViQ29yZSB7XG4nCi0gICAgICAgICAg
ICAnI2RlZmluZSBhYmMoeCkgeDsgXFxcbicKLSAgICAgICAgICAgICcgICAgeFxuJwotICAgICAg
ICAgICAgJ30nLAotICAgICAgICAgICAgJycsCi0gICAgICAgICAgICAnZm9vLmNwcCcpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICduYW1lc3BhY2Ug
V2ViQ29yZSB7XG4nCi0gICAgICAgICAgICAnI2RlZmluZSBhYmMoeCkgeDsgXFxcbicKLSAgICAg
ICAgICAgICcgICAgeFxuJwotICAgICAgICAgICAgJyAgICB2b2lkKiB4OycKLSAgICAgICAgICAg
ICd9JywKLSAgICAgICAgICAgICdDb2RlIGluc2lkZSBhIG5hbWVzcGFjZSBzaG91bGQgbm90IGJl
IGluZGVudGVkLiAgW3doaXRlc3BhY2UvaW5kZW50XSBbNF0nLAotICAgICAgICAgICAgJ2Zvby5j
cHAnKQotCi0gICAgICAgICMgNS4gQSBjYXNlIGxhYmVsIHNob3VsZCBsaW5lIHVwIHdpdGggaXRz
IHN3aXRjaCBzdGF0ZW1lbnQuIFRoZQotICAgICAgICAjICAgIGNhc2Ugc3RhdGVtZW50IGlzIGlu
ZGVudGVkLgotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAg
ICAnICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7XG4nCi0gICAgICAgICAgICAnICAgIGNhc2UgZm9v
Q29uZGl0aW9uOlxuJwotICAgICAgICAgICAgJyAgICBjYXNlIGJhckNvbmRpdGlvbjpcbicKLSAg
ICAgICAgICAgICcgICAgICAgIGkrKztcbicKLSAgICAgICAgICAgICcgICAgICAgIGJyZWFrO1xu
JwotICAgICAgICAgICAgJyAgICBkZWZhdWx0OlxuJwotICAgICAgICAgICAgJyAgICAgICAgaS0t
O1xuJwotICAgICAgICAgICAgJyAgICB9XG4nLAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNl
bGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICcgICAgc3dpdGNoIChjb25k
aXRpb24pIHtcbicKLSAgICAgICAgICAgICcgICAgY2FzZSBmb29Db25kaXRpb246XG4nCi0gICAg
ICAgICAgICAnICAgICAgICBzd2l0Y2ggKG90aGVyQ29uZGl0aW9uKSB7XG4nCi0gICAgICAgICAg
ICAnICAgICAgICBkZWZhdWx0OlxuJwotICAgICAgICAgICAgJyAgICAgICAgICAgIHJldHVybjtc
bicKLSAgICAgICAgICAgICcgICAgICAgIH1cbicKLSAgICAgICAgICAgICcgICAgZGVmYXVsdDpc
bicKLSAgICAgICAgICAgICcgICAgICAgIGktLTtcbicKLSAgICAgICAgICAgICcgICAgfVxuJywK
LSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0g
ICAgICAgICAgICAnICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7XG4nCi0gICAgICAgICAgICAnICAg
IGNhc2UgZm9vQ29uZGl0aW9uOiBicmVhaztcbicKLSAgICAgICAgICAgICcgICAgZGVmYXVsdDog
cmV0dXJuO1xuJwotICAgICAgICAgICAgJyAgICB9XG4nLAotICAgICAgICAgICAgJycpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICcgICAgc3dpdGNo
IChjb25kaXRpb24pIHtcbicKLSAgICAgICAgICAgICcgICAgICAgIGNhc2UgZm9vQ29uZGl0aW9u
OlxuJwotICAgICAgICAgICAgJyAgICAgICAgY2FzZSBiYXJDb25kaXRpb246XG4nCi0gICAgICAg
ICAgICAnICAgICAgICAgICAgaSsrO1xuJwotICAgICAgICAgICAgJyAgICAgICAgICAgIGJyZWFr
O1xuJwotICAgICAgICAgICAgJyAgICAgICAgZGVmYXVsdDpcbicKLSAgICAgICAgICAgICcgICAg
ICAgICAgICBpLS07XG4nCi0gICAgICAgICAgICAnICAgIH1cbicsCi0gICAgICAgICAgICAnQSBj
YXNlIGxhYmVsIHNob3VsZCBub3QgYmUgaW5kZW50ZWQsIGJ1dCBsaW5lIHVwIHdpdGggaXRzIHN3
aXRjaCBzdGF0ZW1lbnQuJwotICAgICAgICAgICAgJyAgW3doaXRlc3BhY2UvaW5kZW50XSBbNF0n
KQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnICAg
IHN3aXRjaCAoY29uZGl0aW9uKSB7XG4nCi0gICAgICAgICAgICAnICAgICAgICBjYXNlIGZvb0Nv
bmRpdGlvbjpcbicKLSAgICAgICAgICAgICcgICAgICAgICAgICBicmVhaztcbicKLSAgICAgICAg
ICAgICcgICAgZGVmYXVsdDpcbicKLSAgICAgICAgICAgICcgICAgICAgICAgICBpLS07XG4nCi0g
ICAgICAgICAgICAnICAgIH1cbicsCi0gICAgICAgICAgICAnQSBjYXNlIGxhYmVsIHNob3VsZCBu
b3QgYmUgaW5kZW50ZWQsIGJ1dCBsaW5lIHVwIHdpdGggaXRzIHN3aXRjaCBzdGF0ZW1lbnQuJwot
ICAgICAgICAgICAgJyAgW3doaXRlc3BhY2UvaW5kZW50XSBbNF0nKQotICAgICAgICBzZWxmLmFz
c2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnICAgIHN3aXRjaCAoY29uZGl0aW9u
KSB7XG4nCi0gICAgICAgICAgICAnICAgIGNhc2UgZm9vQ29uZGl0aW9uOlxuJwotICAgICAgICAg
ICAgJyAgICBjYXNlIGJhckNvbmRpdGlvbjpcbicKLSAgICAgICAgICAgICcgICAgICAgIHN3aXRj
aCAob3RoZXJDb25kaXRpb24pIHtcbicKLSAgICAgICAgICAgICcgICAgICAgICAgICBkZWZhdWx0
OlxuJwotICAgICAgICAgICAgJyAgICAgICAgICAgIHJldHVybjtcbicKLSAgICAgICAgICAgICcg
ICAgICAgIH1cbicKLSAgICAgICAgICAgICcgICAgZGVmYXVsdDpcbicKLSAgICAgICAgICAgICcg
ICAgICAgIGktLTtcbicKLSAgICAgICAgICAgICcgICAgfVxuJywKLSAgICAgICAgICAgICdBIGNh
c2UgbGFiZWwgc2hvdWxkIG5vdCBiZSBpbmRlbnRlZCwgYnV0IGxpbmUgdXAgd2l0aCBpdHMgc3dp
dGNoIHN0YXRlbWVudC4nCi0gICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9pbmRlbnRdIFs0XScp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICcgICAg
c3dpdGNoIChjb25kaXRpb24pIHtcbicKLSAgICAgICAgICAgICcgICAgY2FzZSBmb29Db25kaXRp
b246XG4nCi0gICAgICAgICAgICAnICAgIGNhc2UgYmFyQ29uZGl0aW9uOlxuJwotICAgICAgICAg
ICAgJyAgICBpKys7XG4nCi0gICAgICAgICAgICAnICAgIGJyZWFrO1xuXG4nCi0gICAgICAgICAg
ICAnICAgIGRlZmF1bHQ6XG4nCi0gICAgICAgICAgICAnICAgIGktLTtcbicKLSAgICAgICAgICAg
ICcgICAgfVxuJywKLSAgICAgICAgICAgICdOb24tbGFiZWwgY29kZSBpbnNpZGUgc3dpdGNoIHN0
YXRlbWVudHMgc2hvdWxkIGJlIGluZGVudGVkLicKLSAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNl
L2luZGVudF0gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAg
ICAgICAgICAgJyAgICBzd2l0Y2ggKGNvbmRpdGlvbikge1xuJwotICAgICAgICAgICAgJyAgICBj
YXNlIGZvb0NvbmRpdGlvbjpcbicKLSAgICAgICAgICAgICcgICAgY2FzZSBiYXJDb25kaXRpb246
XG4nCi0gICAgICAgICAgICAnICAgICAgICBzd2l0Y2ggKG90aGVyQ29uZGl0aW9uKSB7XG4nCi0g
ICAgICAgICAgICAnICAgICAgICBkZWZhdWx0OlxuJwotICAgICAgICAgICAgJyAgICAgICAgcmV0
dXJuO1xuJwotICAgICAgICAgICAgJyAgICAgICAgfVxuJwotICAgICAgICAgICAgJyAgICBkZWZh
dWx0OlxuJwotICAgICAgICAgICAgJyAgICAgICAgaS0tO1xuJwotICAgICAgICAgICAgJyAgICB9
XG4nLAotICAgICAgICAgICAgJ05vbi1sYWJlbCBjb2RlIGluc2lkZSBzd2l0Y2ggc3RhdGVtZW50
cyBzaG91bGQgYmUgaW5kZW50ZWQuJwotICAgICAgICAgICAgJyAgW3doaXRlc3BhY2UvaW5kZW50
XSBbNF0nKQotCi0gICAgICAgICMgNi4gQm9vbGVhbiBleHByZXNzaW9ucyBhdCB0aGUgc2FtZSBu
ZXN0aW5nIGxldmVsIHRoYXQgc3BhbgotICAgICAgICAjICAgbXVsdGlwbGUgbGluZXMgc2hvdWxk
IGhhdmUgdGhlaXIgb3BlcmF0b3JzIG9uIHRoZSBsZWZ0IHNpZGUgb2YKLSAgICAgICAgIyAgIHRo
ZSBsaW5lIGluc3RlYWQgb2YgdGhlIHJpZ2h0IHNpZGUuCi0gICAgICAgIHNlbGYuYXNzZXJ0X211
bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICcgICAgcmV0dXJuIGF0dHItPm5hbWUoKSA9PSBz
cmNBdHRyXG4nCi0gICAgICAgICAgICAnICAgICAgICB8fCBhdHRyLT5uYW1lKCkgPT0gbG93c3Jj
QXR0cjtcbicsCi0gICAgICAgICAgICAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGlu
ZV9saW50KAotICAgICAgICAgICAgJyAgICByZXR1cm4gYXR0ci0+bmFtZSgpID09IHNyY0F0dHIg
fHxcbicKLSAgICAgICAgICAgICcgICAgICAgIGF0dHItPm5hbWUoKSA9PSBsb3dzcmNBdHRyO1xu
JywKLSAgICAgICAgICAgICdCb29sZWFuIGV4cHJlc3Npb25zIHRoYXQgc3BhbiBtdWx0aXBsZSBs
aW5lcyBzaG91bGQgaGF2ZSB0aGVpciAnCi0gICAgICAgICAgICAnb3BlcmF0b3JzIG9uIHRoZSBs
ZWZ0IHNpZGUgb2YgdGhlIGxpbmUgaW5zdGVhZCBvZiB0aGUgcmlnaHQgc2lkZS4nCi0gICAgICAg
ICAgICAnICBbd2hpdGVzcGFjZS9vcGVyYXRvcnNdIFs0XScpCi0KLSAgICBkZWYgdGVzdF9zcGFj
aW5nKHNlbGYpOgotICAgICAgICAjIDEuIERvIG5vdCBwbGFjZSBzcGFjZXMgYXJvdW5kIHVuYXJ5
IG9wZXJhdG9ycy4KLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAg
ICAgICAgJ2krKzsnLAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRp
X2xpbmVfbGludCgKLSAgICAgICAgICAgICdpICsrOycsCi0gICAgICAgICAgICAnRXh0cmEgc3Bh
Y2UgZm9yIG9wZXJhdG9yICArKzsgIFt3aGl0ZXNwYWNlL29wZXJhdG9yc10gWzRdJykKLQotICAg
ICAgICAjIDIuIERvIHBsYWNlIHNwYWNlcyBhcm91bmQgYmluYXJ5IGFuZCB0ZXJuYXJ5IG9wZXJh
dG9ycy4KLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAg
J3kgPSBtICogeCArIGI7JywKLSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9t
dWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnZihhLCBiKTsnLAotICAgICAgICAgICAgJycp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdjID0g
YSB8IGI7JywKLSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5l
X2xpbnQoCi0gICAgICAgICAgICAncmV0dXJuIGNvbmRpdGlvbiA/IDEgOiAwOycsCi0gICAgICAg
ICAgICAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAg
ICAgJ3k9bSp4K2I7JywKLSAgICAgICAgICAgICdNaXNzaW5nIHNwYWNlcyBhcm91bmQgPSAgW3do
aXRlc3BhY2Uvb3BlcmF0b3JzXSBbNF0nKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5l
X2xpbnQoCi0gICAgICAgICAgICAnZihhLGIpOycsCi0gICAgICAgICAgICAnTWlzc2luZyBzcGFj
ZSBhZnRlciAsICBbd2hpdGVzcGFjZS9jb21tYV0gWzNdJykKLSAgICAgICAgc2VsZi5hc3NlcnRf
bXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ2MgPSBhfGI7JywKLSAgICAgICAgICAgICdN
aXNzaW5nIHNwYWNlcyBhcm91bmQgfCAgW3doaXRlc3BhY2Uvb3BlcmF0b3JzXSBbM10nKQotICAg
ICAgICAjIEZJWE1FOiBXZSBjYW5ub3QgY2F0Y2ggdGhpcyBsaW50IGVycm9yLgotICAgICAgICAj
IHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgIyAgICAgJ3JldHVybiBjb25k
aXRpb24gPyAxOjA7JywKLSAgICAgICAgIyAgICAgJycpCi0KLSAgICAgICAgIyAzLiBQbGFjZSBz
cGFjZXMgYmV0d2VlbiBjb250cm9sIHN0YXRlbWVudHMgYW5kIHRoZWlyIHBhcmVudGhlc2VzLgot
ICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnICAgIGlm
IChjb25kaXRpb24pXG4nCi0gICAgICAgICAgICAnICAgICAgICBkb0l0KCk7XG4nLAotICAgICAg
ICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAg
ICAgICcgICAgaWYoY29uZGl0aW9uKVxuJwotICAgICAgICAgICAgJyAgICAgICAgZG9JdCgpO1xu
JywKLSAgICAgICAgICAgICdNaXNzaW5nIHNwYWNlIGJlZm9yZSAoIGluIGlmKCAgW3doaXRlc3Bh
Y2UvcGFyZW5zXSBbNV0nKQotCi0gICAgICAgICMgNC4gRG8gbm90IHBsYWNlIHNwYWNlcyBiZXR3
ZWVuIGEgZnVuY3Rpb24gYW5kIGl0cyBwYXJlbnRoZXNlcywKLSAgICAgICAgIyAgICBvciBiZXR3
ZWVuIGEgcGFyZW50aGVzaXMgYW5kIGl0cyBjb250ZW50LgotICAgICAgICBzZWxmLmFzc2VydF9t
dWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnZihhLCBiKTsnLAotICAgICAgICAgICAgJycp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdmIChh
LCBiKTsnLAotICAgICAgICAgICAgJ0V4dHJhIHNwYWNlIGJlZm9yZSAoIGluIGZ1bmN0aW9uIGNh
bGwgIFt3aGl0ZXNwYWNlL3BhcmVuc10gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlf
bGluZV9saW50KAotICAgICAgICAgICAgJ2YoIGEsIGIgKTsnLAotICAgICAgICAgICAgWydFeHRy
YSBzcGFjZSBhZnRlciAoIGluIGZ1bmN0aW9uIGNhbGwgIFt3aGl0ZXNwYWNlL3BhcmVuc10gWzRd
JywKLSAgICAgICAgICAgICAnRXh0cmEgc3BhY2UgYmVmb3JlICkgIFt3aGl0ZXNwYWNlL3BhcmVu
c10gWzJdJ10pCi0KLSAgICBkZWYgdGVzdF9saW5lX2JyZWFraW5nKHNlbGYpOgotICAgICAgICAj
IDEuIEVhY2ggc3RhdGVtZW50IHNob3VsZCBnZXQgaXRzIG93biBsaW5lLgotICAgICAgICBzZWxm
LmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnICAgIHgrKztcbicKLSAgICAg
ICAgICAgICcgICAgeSsrO1xuJwotICAgICAgICAgICAgJyAgICBpZiAoY29uZGl0aW9uKTtcbicK
LSAgICAgICAgICAgICcgICAgICAgIGRvSXQoKTtcbicsCi0gICAgICAgICAgICAnJykKLSAgICAg
ICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJyAgICB4Kys7IHkr
KzsnLAotICAgICAgICAgICAgJ01vcmUgdGhhbiBvbmUgY29tbWFuZCBvbiB0aGUgc2FtZSBsaW5l
ICBbd2hpdGVzcGFjZS9uZXdsaW5lXSBbNF0nKQotICAgICAgICAjIEZJWE1FOiBNYWtlIHRoaXMg
ZmFpbC4KLSAgICAgICAgIyBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICMg
ICAgICcgICAgaWYgKGNvbmRpdGlvbikgZG9JdCgpO1xuJywKLSAgICAgICAgIyAgICAgJycpCi0K
LSAgICAgICAgIyAyLiBBbiBlbHNlIHN0YXRlbWVudCBzaG91bGQgZ28gb24gdGhlIHNhbWUgbGlu
ZSBhcyBhIHByZWNlZGluZwotICAgICAgICAjICAgY2xvc2UgYnJhY2UgaWYgb25lIGlzIHByZXNl
bnQsIGVsc2UgaXQgc2hvdWxkIGxpbmUgdXAgd2l0aCB0aGUKLSAgICAgICAgIyAgIGlmIHN0YXRl
bWVudC4KLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAg
J2lmIChjb25kaXRpb24pIHtcbicKLSAgICAgICAgICAgICcgICAgZG9Tb21ldGhpbmcoKTtcbicK
LSAgICAgICAgICAgICcgICAgZG9Tb21ldGhpbmdBZ2FpbigpO1xuJwotICAgICAgICAgICAgJ30g
ZWxzZSB7XG4nCi0gICAgICAgICAgICAnICAgIGRvU29tZXRoaW5nRWxzZSgpO1xuJwotICAgICAg
ICAgICAgJyAgICBkb1NvbWV0aGluZ0Vsc2VBZ2FpbigpO1xuJwotICAgICAgICAgICAgJ31cbics
Ci0gICAgICAgICAgICAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAot
ICAgICAgICAgICAgJ2lmIChjb25kaXRpb24pXG4nCi0gICAgICAgICAgICAnICAgIGRvU29tZXRo
aW5nKCk7XG4nCi0gICAgICAgICAgICAnZWxzZVxuJwotICAgICAgICAgICAgJyAgICBkb1NvbWV0
aGluZ0Vsc2UoKTtcbicsCi0gICAgICAgICAgICAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVs
dGlfbGluZV9saW50KAotICAgICAgICAgICAgJ2lmIChjb25kaXRpb24pXG4nCi0gICAgICAgICAg
ICAnICAgIGRvU29tZXRoaW5nKCk7XG4nCi0gICAgICAgICAgICAnZWxzZSB7XG4nCi0gICAgICAg
ICAgICAnICAgIGRvU29tZXRoaW5nRWxzZSgpO1xuJwotICAgICAgICAgICAgJyAgICBkb1NvbWV0
aGluZ0Vsc2VBZ2FpbigpO1xuJwotICAgICAgICAgICAgJ31cbicsCi0gICAgICAgICAgICAnJykK
LQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnaWYg
KGNvbmRpdGlvbikge1xuJwotICAgICAgICAgICAgJyAgICBkb1NvbWV0aGluZygpO1xuJwotICAg
ICAgICAgICAgJyAgICBkb1NvbWV0aGluZ0FnYWluKCk7XG4nCi0gICAgICAgICAgICAnfVxuJwot
ICAgICAgICAgICAgJ2Vsc2Uge1xuJwotICAgICAgICAgICAgJyAgICBkb1NvbWV0aGluZ0Vsc2Uo
KTtcbicKLSAgICAgICAgICAgICcgICAgZG9Tb21ldGhpbmdFbHNlQWdhaW4oKTtcbicKLSAgICAg
ICAgICAgICd9XG4nLAotICAgICAgICAgICAgJ0FuIGVsc2Ugc2hvdWxkIGFwcGVhciBvbiB0aGUg
c2FtZSBsaW5lIGFzIHRoZSBwcmVjZWRpbmcgfSAgW3doaXRlc3BhY2UvbmV3bGluZV0gWzRdJykK
LSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ2lmIChj
b25kaXRpb24pIGRvU29tZXRoaW5nKCk7IGVsc2UgZG9Tb21ldGhpbmdFbHNlKCk7XG4nLAotICAg
ICAgICAgICAgWydNb3JlIHRoYW4gb25lIGNvbW1hbmQgb24gdGhlIHNhbWUgbGluZSAgW3doaXRl
c3BhY2UvbmV3bGluZV0gWzRdJywKLSAgICAgICAgICAgICAnRWxzZSBjbGF1c2Ugc2hvdWxkIG5l
dmVyIGJlIG9uIHNhbWUgbGluZSBhcyBlbHNlICh1c2UgMiBsaW5lcykgIFt3aGl0ZXNwYWNlL25l
d2xpbmVdIFs0XSddKQotICAgICAgICAjIEZJWE1FOiBNYWtlIHRoaXMgZmFpbC4KLSAgICAgICAg
IyBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICMgICAgICdpZiAoY29uZGl0
aW9uKSBkb1NvbWV0aGluZygpOyBlbHNlIHtcbicKLSAgICAgICAgIyAgICAgJyAgICBkb1NvbWV0
aGluZ0Vsc2UoKTtcbicKLSAgICAgICAgIyAgICAgJ31cbicsCi0gICAgICAgICMgICAgICcnKQot
Ci0gICAgICAgICMgMy4gQW4gZWxzZSBpZiBzdGF0ZW1lbnQgc2hvdWxkIGJlIHdyaXR0ZW4gYXMg
YW4gaWYgc3RhdGVtZW50Ci0gICAgICAgICMgICAgd2hlbiB0aGUgcHJpb3IgaWYgY29uY2x1ZGVz
IHdpdGggYSByZXR1cm4gc3RhdGVtZW50LgotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5l
X2xpbnQoCi0gICAgICAgICAgICAnaWYgKG1vdGl2YXRlZCkge1xuJwotICAgICAgICAgICAgJyAg
ICBpZiAobGlxdWlkKVxuJwotICAgICAgICAgICAgJyAgICAgICAgcmV0dXJuIG1vbmV5O1xuJwot
ICAgICAgICAgICAgJ30gZWxzZSBpZiAodGlyZWQpXG4nCi0gICAgICAgICAgICAnICAgIGJyZWFr
O1xuJywKLSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xp
bnQoCi0gICAgICAgICAgICAnaWYgKGNvbmRpdGlvbilcbicKLSAgICAgICAgICAgICcgICAgZG9T
b21ldGhpbmcoKTtcbicKLSAgICAgICAgICAgICdlbHNlIGlmIChvdGhlckNvbmRpdGlvbilcbicK
LSAgICAgICAgICAgICcgICAgZG9Tb21ldGhpbmdFbHNlKCk7XG4nLAotICAgICAgICAgICAgJycp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdpZiAo
Y29uZGl0aW9uKVxuJwotICAgICAgICAgICAgJyAgICBkb1NvbWV0aGluZygpO1xuJwotICAgICAg
ICAgICAgJ2Vsc2VcbicKLSAgICAgICAgICAgICcgICAgZG9Tb21ldGhpbmdFbHNlKCk7XG4nLAot
ICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAg
ICAgICAgICAgICdpZiAoY29uZGl0aW9uKVxuJwotICAgICAgICAgICAgJyAgICByZXR1cm5WYWx1
ZSA9IGZvbztcbicKLSAgICAgICAgICAgICdlbHNlIGlmIChvdGhlckNvbmRpdGlvbilcbicKLSAg
ICAgICAgICAgICcgICAgcmV0dXJuVmFsdWUgPSBiYXI7XG4nLAotICAgICAgICAgICAgJycpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdpZiAoY29u
ZGl0aW9uKVxuJwotICAgICAgICAgICAgJyAgICByZXR1cm5WYWx1ZSA9IGZvbztcbicKLSAgICAg
ICAgICAgICdlbHNlXG4nCi0gICAgICAgICAgICAnICAgIHJldHVyblZhbHVlID0gYmFyO1xuJywK
LSAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0g
ICAgICAgICAgICAnaWYgKGNvbmRpdGlvbilcbicKLSAgICAgICAgICAgICcgICAgZG9Tb21ldGhp
bmcoKTtcbicKLSAgICAgICAgICAgICdlbHNlIGlmIChsaXF1aWQpXG4nCi0gICAgICAgICAgICAn
ICAgIHJldHVybiBtb25leTtcbicKLSAgICAgICAgICAgICdlbHNlIGlmIChicm9rZSlcbicKLSAg
ICAgICAgICAgICcgICAgcmV0dXJuIGZhdm9yO1xuJwotICAgICAgICAgICAgJ2Vsc2VcbicKLSAg
ICAgICAgICAgICcgICAgc2xlZXAoMjg4MDApO1xuJywKLSAgICAgICAgICAgICcnKQotICAgICAg
ICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnaWYgKGxpcXVpZCkg
e1xuJwotICAgICAgICAgICAgJyAgICBwcmVwYXJlKCk7XG4nCi0gICAgICAgICAgICAnICAgIHJl
dHVybiBtb25leTtcbicKLSAgICAgICAgICAgICd9IGVsc2UgaWYgKGdyZWVkeSkge1xuJwotICAg
ICAgICAgICAgJyAgICBrZWVwKCk7XG4nCi0gICAgICAgICAgICAnICAgIHJldHVybiBub3RoaW5n
O1xuJwotICAgICAgICAgICAgJ31cbicsCi0gICAgICAgICAgICAnQW4gZWxzZSBpZiBzdGF0ZW1l
bnQgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYW4gaWYgc3RhdGVtZW50IHdoZW4gdGhlICcKLSAgICAg
ICAgICAgICdwcmlvciAiaWYiIGNvbmNsdWRlcyB3aXRoIGEgcmV0dXJuLCBicmVhaywgY29udGlu
dWUgb3IgZ290byBzdGF0ZW1lbnQuJwotICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2NvbnRy
b2xfZmxvd10gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAg
ICAgICAgICAgJyAgICBpZiAoc3R1cGlkKSB7XG4nCi0gICAgICAgICAgICAnaW5maW5pdGVMb29w
OlxuJwotICAgICAgICAgICAgJyAgICAgICAgZ290byBpbmZpbml0ZUxvb3A7XG4nCi0gICAgICAg
ICAgICAnICAgIH0gZWxzZSBpZiAoZXZpbClcbicKLSAgICAgICAgICAgICcgICAgICAgIGdvdG8g
aGVsbDtcbicsCi0gICAgICAgICAgICAnQW4gZWxzZSBpZiBzdGF0ZW1lbnQgc2hvdWxkIGJlIHdy
aXR0ZW4gYXMgYW4gaWYgc3RhdGVtZW50IHdoZW4gdGhlICcKLSAgICAgICAgICAgICdwcmlvciAi
aWYiIGNvbmNsdWRlcyB3aXRoIGEgcmV0dXJuLCBicmVhaywgY29udGludWUgb3IgZ290byBzdGF0
ZW1lbnQuJwotICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2NvbnRyb2xfZmxvd10gWzRdJykK
LSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ2lmIChs
aXF1aWQpXG4nCi0gICAgICAgICAgICAne1xuJwotICAgICAgICAgICAgJyAgICBwcmVwYXJlKCk7
XG4nCi0gICAgICAgICAgICAnICAgIHJldHVybiBtb25leTtcbicKLSAgICAgICAgICAgICd9XG4n
Ci0gICAgICAgICAgICAnZWxzZSBpZiAoZ3JlZWR5KVxuJwotICAgICAgICAgICAgJyAgICBrZWVw
KCk7XG4nLAotICAgICAgICAgICAgWydUaGlzIHsgc2hvdWxkIGJlIGF0IHRoZSBlbmQgb2YgdGhl
IHByZXZpb3VzIGxpbmUgIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzRdJywKLSAgICAgICAgICAgICdB
biBlbHNlIHNob3VsZCBhcHBlYXIgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgcHJlY2VkaW5nIH0g
IFt3aGl0ZXNwYWNlL25ld2xpbmVdIFs0XScsCi0gICAgICAgICAgICAnQW4gZWxzZSBpZiBzdGF0
ZW1lbnQgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYW4gaWYgc3RhdGVtZW50IHdoZW4gdGhlICcKLSAg
ICAgICAgICAgICdwcmlvciAiaWYiIGNvbmNsdWRlcyB3aXRoIGEgcmV0dXJuLCBicmVhaywgY29u
dGludWUgb3IgZ290byBzdGF0ZW1lbnQuJwotICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2Nv
bnRyb2xfZmxvd10gWzRdJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgK
LSAgICAgICAgICAgICdpZiAoZ29uZSlcbicKLSAgICAgICAgICAgICcgICAgcmV0dXJuO1xuJwot
ICAgICAgICAgICAgJ2Vsc2UgaWYgKGhlcmUpXG4nCi0gICAgICAgICAgICAnICAgIGdvKCk7XG4n
LAotICAgICAgICAgICAgJ0FuIGVsc2UgaWYgc3RhdGVtZW50IHNob3VsZCBiZSB3cml0dGVuIGFz
IGFuIGlmIHN0YXRlbWVudCB3aGVuIHRoZSAnCi0gICAgICAgICAgICAncHJpb3IgImlmIiBjb25j
bHVkZXMgd2l0aCBhIHJldHVybiwgYnJlYWssIGNvbnRpbnVlIG9yIGdvdG8gc3RhdGVtZW50LicK
LSAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9jb250cm9sX2Zsb3ddIFs0XScpCi0gICAgICAg
IHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdpZiAoZ29uZSlcbicK
LSAgICAgICAgICAgICcgICAgcmV0dXJuO1xuJwotICAgICAgICAgICAgJ2Vsc2VcbicKLSAgICAg
ICAgICAgICcgICAgZ28oKTtcbicsCi0gICAgICAgICAgICAnQW4gZWxzZSBzdGF0ZW1lbnQgY2Fu
IGJlIHJlbW92ZWQgd2hlbiB0aGUgcHJpb3IgImlmIiBjb25jbHVkZXMgJwotICAgICAgICAgICAg
J3dpdGggYSByZXR1cm4sIGJyZWFrLCBjb250aW51ZSBvciBnb3RvIHN0YXRlbWVudC4nCi0gICAg
ICAgICAgICAnICBbcmVhZGFiaWxpdHkvY29udHJvbF9mbG93XSBbNF0nKQotICAgICAgICBzZWxm
LmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnaWYgKG1vdGl2YXRlZCkge1xu
JwotICAgICAgICAgICAgJyAgICBwcmVwYXJlKCk7XG4nCi0gICAgICAgICAgICAnICAgIGNvbnRp
bnVlO1xuJwotICAgICAgICAgICAgJ30gZWxzZSB7XG4nCi0gICAgICAgICAgICAnICAgIGNsZWFu
VXAoKTtcbicKLSAgICAgICAgICAgICcgICAgYnJlYWs7XG4nCi0gICAgICAgICAgICAnfVxuJywK
LSAgICAgICAgICAgICdBbiBlbHNlIHN0YXRlbWVudCBjYW4gYmUgcmVtb3ZlZCB3aGVuIHRoZSBw
cmlvciAiaWYiIGNvbmNsdWRlcyAnCi0gICAgICAgICAgICAnd2l0aCBhIHJldHVybiwgYnJlYWss
IGNvbnRpbnVlIG9yIGdvdG8gc3RhdGVtZW50LicKLSAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0
eS9jb250cm9sX2Zsb3ddIFs0XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGlu
dCgKLSAgICAgICAgICAgICdpZiAodGlyZWQpXG4nCi0gICAgICAgICAgICAnICAgIGJyZWFrO1xu
JwotICAgICAgICAgICAgJ2Vsc2Uge1xuJwotICAgICAgICAgICAgJyAgICBwcmVwYXJlKCk7XG4n
Ci0gICAgICAgICAgICAnICAgIGNvbnRpbnVlO1xuJwotICAgICAgICAgICAgJ31cbicsCi0gICAg
ICAgICAgICAnQW4gZWxzZSBzdGF0ZW1lbnQgY2FuIGJlIHJlbW92ZWQgd2hlbiB0aGUgcHJpb3Ig
ImlmIiBjb25jbHVkZXMgJwotICAgICAgICAgICAgJ3dpdGggYSByZXR1cm4sIGJyZWFrLCBjb250
aW51ZSBvciBnb3RvIHN0YXRlbWVudC4nCi0gICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY29u
dHJvbF9mbG93XSBbNF0nKQotCi0gICAgZGVmIHRlc3RfYnJhY2VzKHNlbGYpOgotICAgICAgICAj
IDEuIEZ1bmN0aW9uIGRlZmluaXRpb25zOiBwbGFjZSBlYWNoIGJyYWNlIG9uIGl0cyBvd24gbGlu
ZS4KLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ2lu
dCBtYWluKClcbicKLSAgICAgICAgICAgICd7XG4nCi0gICAgICAgICAgICAnICAgIGRvU29tZXRo
aW5nKCk7XG4nCi0gICAgICAgICAgICAnfVxuJywKLSAgICAgICAgICAgICcnKQotICAgICAgICBz
ZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnaW50IG1haW4oKSB7XG4n
Ci0gICAgICAgICAgICAnICAgIGRvU29tZXRoaW5nKCk7XG4nCi0gICAgICAgICAgICAnfVxuJywK
LSAgICAgICAgICAgICdQbGFjZSBicmFjZSBvbiBpdHMgb3duIGxpbmUgZm9yIGZ1bmN0aW9uIGRl
ZmluaXRpb25zLiAgW3doaXRlc3BhY2UvYnJhY2VzXSBbNF0nKQotCi0gICAgICAgICMgMi4gT3Ro
ZXIgYnJhY2VzOiBwbGFjZSB0aGUgb3BlbiBicmFjZSBvbiB0aGUgbGluZSBwcmVjZWRpbmcgdGhl
Ci0gICAgICAgICMgICAgY29kZSBibG9jazsgcGxhY2UgdGhlIGNsb3NlIGJyYWNlIG9uIGl0cyBv
d24gbGluZS4KLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAg
ICAgJ2NsYXNzIE15Q2xhc3Mge1xuJwotICAgICAgICAgICAgJyAgICBpbnQgZm9vO1xuJwotICAg
ICAgICAgICAgJ307XG4nLAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211
bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICduYW1lc3BhY2UgV2ViQ29yZSB7XG4nCi0gICAg
ICAgICAgICAnaW50IGZvbztcbicKLSAgICAgICAgICAgICd9O1xuJywKLSAgICAgICAgICAgICcn
KQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnZm9y
IChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4nCi0gICAgICAgICAgICAnICAgIERvU29tZXRo
aW5nKCk7XG4nCi0gICAgICAgICAgICAnfTtcbicsCi0gICAgICAgICAgICAnJykKLSAgICAgICAg
c2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ2NsYXNzIE15Q2xhc3Nc
bicKLSAgICAgICAgICAgICd7XG4nCi0gICAgICAgICAgICAnICAgIGludCBmb287XG4nCi0gICAg
ICAgICAgICAnfTtcbicsCi0gICAgICAgICAgICAnVGhpcyB7IHNob3VsZCBiZSBhdCB0aGUgZW5k
IG9mIHRoZSBwcmV2aW91cyBsaW5lICBbd2hpdGVzcGFjZS9icmFjZXNdIFs0XScpCi0gICAgICAg
IHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdpZiAoY29uZGl0aW9u
KVxuJwotICAgICAgICAgICAgJ3tcbicKLSAgICAgICAgICAgICcgICAgaW50IGZvbztcbicKLSAg
ICAgICAgICAgICd9XG4nLAotICAgICAgICAgICAgJ1RoaXMgeyBzaG91bGQgYmUgYXQgdGhlIGVu
ZCBvZiB0aGUgcHJldmlvdXMgbGluZSAgW3doaXRlc3BhY2UvYnJhY2VzXSBbNF0nKQotICAgICAg
ICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnZm9yIChpbnQgaSA9
IDA7IGkgPCAxMDsgaSsrKVxuJwotICAgICAgICAgICAgJ3tcbicKLSAgICAgICAgICAgICcgICAg
aW50IGZvbztcbicKLSAgICAgICAgICAgICd9XG4nLAotICAgICAgICAgICAgJ1RoaXMgeyBzaG91
bGQgYmUgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbGluZSAgW3doaXRlc3BhY2UvYnJhY2Vz
XSBbNF0nKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAg
ICAnd2hpbGUgKHRydWUpXG4nCi0gICAgICAgICAgICAne1xuJwotICAgICAgICAgICAgJyAgICBp
bnQgZm9vO1xuJwotICAgICAgICAgICAgJ31cbicsCi0gICAgICAgICAgICAnVGhpcyB7IHNob3Vs
ZCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBsaW5lICBbd2hpdGVzcGFjZS9icmFjZXNd
IFs0XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAg
ICdmb3JlYWNoIChGb28qIGZvbywgZm9vcylcbicKLSAgICAgICAgICAgICd7XG4nCi0gICAgICAg
ICAgICAnICAgIGludCBiYXI7XG4nCi0gICAgICAgICAgICAnfVxuJywKLSAgICAgICAgICAgICdU
aGlzIHsgc2hvdWxkIGJlIGF0IHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGxpbmUgIFt3aGl0ZXNw
YWNlL2JyYWNlc10gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAot
ICAgICAgICAgICAgJ3N3aXRjaCAodHlwZSlcbicKLSAgICAgICAgICAgICd7XG4nCi0gICAgICAg
ICAgICAnY2FzZSBmb286IHJldHVybjtcbicKLSAgICAgICAgICAgICd9XG4nLAotICAgICAgICAg
ICAgJ1RoaXMgeyBzaG91bGQgYmUgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbGluZSAgW3do
aXRlc3BhY2UvYnJhY2VzXSBbNF0nKQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xp
bnQoCi0gICAgICAgICAgICAnaWYgKGNvbmRpdGlvbilcbicKLSAgICAgICAgICAgICd7XG4nCi0g
ICAgICAgICAgICAnICAgIGludCBmb287XG4nCi0gICAgICAgICAgICAnfVxuJywKLSAgICAgICAg
ICAgICdUaGlzIHsgc2hvdWxkIGJlIGF0IHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGxpbmUgIFt3
aGl0ZXNwYWNlL2JyYWNlc10gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9s
aW50KAotICAgICAgICAgICAgJ2ZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKylcbicKLSAgICAg
ICAgICAgICd7XG4nCi0gICAgICAgICAgICAnICAgIGludCBmb287XG4nCi0gICAgICAgICAgICAn
fVxuJywKLSAgICAgICAgICAgICdUaGlzIHsgc2hvdWxkIGJlIGF0IHRoZSBlbmQgb2YgdGhlIHBy
ZXZpb3VzIGxpbmUgIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzRdJykKLSAgICAgICAgc2VsZi5hc3Nl
cnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ3doaWxlICh0cnVlKVxuJwotICAgICAg
ICAgICAgJ3tcbicKLSAgICAgICAgICAgICcgICAgaW50IGZvbztcbicKLSAgICAgICAgICAgICd9
XG4nLAotICAgICAgICAgICAgJ1RoaXMgeyBzaG91bGQgYmUgYXQgdGhlIGVuZCBvZiB0aGUgcHJl
dmlvdXMgbGluZSAgW3doaXRlc3BhY2UvYnJhY2VzXSBbNF0nKQotICAgICAgICBzZWxmLmFzc2Vy
dF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnc3dpdGNoICh0eXBlKVxuJwotICAgICAg
ICAgICAgJ3tcbicKLSAgICAgICAgICAgICdjYXNlIGZvbzogcmV0dXJuO1xuJwotICAgICAgICAg
ICAgJ31cbicsCi0gICAgICAgICAgICAnVGhpcyB7IHNob3VsZCBiZSBhdCB0aGUgZW5kIG9mIHRo
ZSBwcmV2aW91cyBsaW5lICBbd2hpdGVzcGFjZS9icmFjZXNdIFs0XScpCi0gICAgICAgIHNlbGYu
YXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdlbHNlIGlmICh0eXBlKVxuJwot
ICAgICAgICAgICAgJ3tcbicKLSAgICAgICAgICAgICdjYXNlIGZvbzogcmV0dXJuO1xuJwotICAg
ICAgICAgICAgJ31cbicsCi0gICAgICAgICAgICAnVGhpcyB7IHNob3VsZCBiZSBhdCB0aGUgZW5k
IG9mIHRoZSBwcmV2aW91cyBsaW5lICBbd2hpdGVzcGFjZS9icmFjZXNdIFs0XScpCi0KLSAgICAg
ICAgIyAzLiBPbmUtbGluZSBjb250cm9sIGNsYXVzZXMgc2hvdWxkIG5vdCB1c2UgYnJhY2VzIHVu
bGVzcwotICAgICAgICAjICAgIGNvbW1lbnRzIGFyZSBpbmNsdWRlZCBvciBhIHNpbmdsZSBzdGF0
ZW1lbnQgc3BhbnMgbXVsdGlwbGUKLSAgICAgICAgIyAgICBsaW5lcy4KLSAgICAgICAgc2VsZi5h
c3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ2lmICh0cnVlKSB7XG4nCi0gICAg
ICAgICAgICAnICAgIGludCBmb287XG4nCi0gICAgICAgICAgICAnfVxuJywKLSAgICAgICAgICAg
ICdPbmUgbGluZSBjb250cm9sIGNsYXVzZXMgc2hvdWxkIG5vdCB1c2UgYnJhY2VzLiAgW3doaXRl
c3BhY2UvYnJhY2VzXSBbNF0nKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGlu
dCgKLSAgICAgICAgICAgICdmb3IgKDsgZm9vOyBiYXIpIHtcbicKLSAgICAgICAgICAgICcgICAg
aW50IGZvbztcbicKLSAgICAgICAgICAgICd9XG4nLAotICAgICAgICAgICAgJ09uZSBsaW5lIGNv
bnRyb2wgY2xhdXNlcyBzaG91bGQgbm90IHVzZSBicmFjZXMuICBbd2hpdGVzcGFjZS9icmFjZXNd
IFs0XScpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAg
ICAgJ2ZvcmVhY2ggKGZvbywgZm9vcykge1xuJwotICAgICAgICAgICAgJyAgICBpbnQgYmFyO1xu
JwotICAgICAgICAgICAgJ31cbicsCi0gICAgICAgICAgICAnT25lIGxpbmUgY29udHJvbCBjbGF1
c2VzIHNob3VsZCBub3QgdXNlIGJyYWNlcy4gIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzRdJykKLQot
ICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnd2hpbGUg
KHRydWUpIHtcbicKLSAgICAgICAgICAgICcgICAgaW50IGZvbztcbicKLSAgICAgICAgICAgICd9
XG4nLAotICAgICAgICAgICAgJ09uZSBsaW5lIGNvbnRyb2wgY2xhdXNlcyBzaG91bGQgbm90IHVz
ZSBicmFjZXMuICBbd2hpdGVzcGFjZS9icmFjZXNdIFs0XScpCi0KLSAgICAgICAgc2VsZi5hc3Nl
cnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ2lmICh0cnVlKVxuJwotICAgICAgICAg
ICAgJyAgICBpbnQgZm9vO1xuJwotICAgICAgICAgICAgJ2Vsc2Uge1xuJwotICAgICAgICAgICAg
JyAgICBpbnQgZm9vO1xuJwotICAgICAgICAgICAgJ31cbicsCi0gICAgICAgICAgICAnT25lIGxp
bmUgY29udHJvbCBjbGF1c2VzIHNob3VsZCBub3QgdXNlIGJyYWNlcy4gIFt3aGl0ZXNwYWNlL2Jy
YWNlc10gWzRdJykKLQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAg
ICAgICAgICAnaWYgKHRydWUpIHtcbicKLSAgICAgICAgICAgICcgICAgaW50IGZvbztcbicKLSAg
ICAgICAgICAgICd9IGVsc2VcbicKLSAgICAgICAgICAgICcgICAgaW50IGZvbztcbicsCi0gICAg
ICAgICAgICAnT25lIGxpbmUgY29udHJvbCBjbGF1c2VzIHNob3VsZCBub3QgdXNlIGJyYWNlcy4g
IFt3aGl0ZXNwYWNlL2JyYWNlc10gWzRdJykKLQotICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9s
aW5lX2xpbnQoCi0gICAgICAgICAgICAnaWYgKHRydWUpIHtcbicKLSAgICAgICAgICAgICcgICAg
Ly8gU29tZSBjb21tZW50XG4nCi0gICAgICAgICAgICAnICAgIGludCBmb287XG4nCi0gICAgICAg
ICAgICAnfVxuJywKLSAgICAgICAgICAgICcnKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRp
X2xpbmVfbGludCgKLSAgICAgICAgICAgICdpZiAodHJ1ZSkge1xuJwotICAgICAgICAgICAgJyAg
ICBteUZ1bmN0aW9uKHJlYWxseUxvbmdQYXJhbTEsIHJlYWxseUxvbmdQYXJhbTIsXG4nCi0gICAg
ICAgICAgICAnICAgICAgICAgICAgICAgcmVhbGx5TG9uZ1BhcmFtMyk7XG4nCi0gICAgICAgICAg
ICAnfVxuJywKLSAgICAgICAgICAgICcnKQotCi0gICAgICAgICMgNC4gQ29udHJvbCBjbGF1c2Vz
IHdpdGhvdXQgYSBib2R5IHNob3VsZCB1c2UgZW1wdHkgYnJhY2VzLgotICAgICAgICBzZWxmLmFz
c2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAnZm9yICggOyBjdXJyZW50OyBjdXJy
ZW50ID0gY3VycmVudC0+bmV4dCkgeyB9XG4nLAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNl
bGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICdmb3IgKCA7IGN1cnJlbnQ7
XG4nCi0gICAgICAgICAgICAnICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dCkge31cbicsCi0g
ICAgICAgICAgICAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAg
ICAgICAgICAgJ2ZvciAoIDsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHQpO1xuJywK
LSAgICAgICAgICAgICdTZW1pY29sb24gZGVmaW5pbmcgZW1wdHkgc3RhdGVtZW50IGZvciB0aGlz
IGxvb3AuIFVzZSB7IH0gaW5zdGVhZC4gIFt3aGl0ZXNwYWNlL3NlbWljb2xvbl0gWzVdJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJ3doaWxlICh0
cnVlKTtcbicsCi0gICAgICAgICAgICAnU2VtaWNvbG9uIGRlZmluaW5nIGVtcHR5IHN0YXRlbWVu
dCBmb3IgdGhpcyBsb29wLiBVc2UgeyB9IGluc3RlYWQuICBbd2hpdGVzcGFjZS9zZW1pY29sb25d
IFs1XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAg
ICd9IHdoaWxlICh0cnVlKTtcbicsCi0gICAgICAgICAgICAnJykKLQotICAgIGRlZiB0ZXN0X251
bGxfZmFsc2VfemVybyhzZWxmKToKLSAgICAgICAgIyAxLiBJbiBDKyssIHRoZSBudWxsIHBvaW50
ZXIgdmFsdWUgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgMC4gSW4gQywKLSAgICAgICAgIyAgICBpdCBz
aG91bGQgYmUgd3JpdHRlbiBhcyBOVUxMLiBJbiBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMr
KywKLSAgICAgICAgIyAgICBmb2xsb3cgdGhlIGd1aWRlbGluZSBmb3IgQyBvciBDKyssIHJlc3Bl
Y3RpdmVseSwgYnV0IHVzZSBuaWwgdG8KLSAgICAgICAgIyAgICByZXByZXNlbnQgYSBudWxsIE9i
amVjdGl2ZS1DIG9iamVjdC4KLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAg
ICdmdW5jdGlvbkNhbGwoTlVMTCknLAotICAgICAgICAgICAgJ1VzZSAwIGluc3RlYWQgb2YgTlVM
TC4nCi0gICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvbnVsbF0gWzVdJywKLSAgICAgICAgICAg
ICdmb28uY3BwJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICIvLyBE
b24ndCB1c2UgTlVMTCBpbiBjb21tZW50cyBzaW5jZSBpdCBpc24ndCBpbiBjb2RlLiIsCi0gICAg
ICAgICAgICAnVXNlIDAgaW5zdGVhZCBvZiBOVUxMLicKLSAgICAgICAgICAgICcgIFtyZWFkYWJp
bGl0eS9udWxsXSBbNF0nLAotICAgICAgICAgICAgJ2Zvby5jcHAnKQotICAgICAgICBzZWxmLmFz
c2VydF9saW50KAotICAgICAgICAgICAgJyJBIHN0cmluZyB3aXRoIE5VTEwiIC8vIGFuZCBhIGNv
bW1lbnQgd2l0aCBOVUxMIGlzIHRyaWNreSB0byBmbGFnIGNvcnJlY3RseSBpbiBjcHBfc3R5bGUu
JywKLSAgICAgICAgICAgICdVc2UgMCBpbnN0ZWFkIG9mIE5VTEwuJwotICAgICAgICAgICAgJyAg
W3JlYWRhYmlsaXR5L251bGxdIFs0XScsCi0gICAgICAgICAgICAnZm9vLmNwcCcpCi0gICAgICAg
IHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnIkEgc3RyaW5nIGNvbnRhaW5pbmcgTlVM
TCBpcyBvayInLAotICAgICAgICAgICAgJycsCi0gICAgICAgICAgICAnZm9vLmNwcCcpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnaWYgKGFib3V0TlVMTCknLAotICAg
ICAgICAgICAgJycsCi0gICAgICAgICAgICAnZm9vLmNwcCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0
X2xpbnQoCi0gICAgICAgICAgICAnbXlWYXJpYWJsZSA9IE5VTExpZnknLAotICAgICAgICAgICAg
JycsCi0gICAgICAgICAgICAnZm9vLmNwcCcpCi0gICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhl
IE5VTEwgY2hlY2sgZG9lcyBub3QgYXBwbHkgdG8gQyBhbmQgT2JqZWN0aXZlLUMgZmlsZXMuCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnZnVuY3Rpb25DYWxsKE5VTEwp
JywKLSAgICAgICAgICAgICcnLAotICAgICAgICAgICAgJ2Zvby5jJykKLSAgICAgICAgc2VsZi5h
c3NlcnRfbGludCgKLSAgICAgICAgICAgICdmdW5jdGlvbkNhbGwoTlVMTCknLAotICAgICAgICAg
ICAgJycsCi0gICAgICAgICAgICAnZm9vLm0nKQotCi0gICAgICAgICMgTWFrZSBzdXJlIHRoYXQg
dGhlIE5VTEwgY2hlY2sgZG9lcyBub3QgYXBwbHkgdG8gZ19vYmplY3Rfe3NldCxnZXR9Ci0gICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnZ19vYmplY3RfZ2V0KGZvbywgInBy
b3AiLCAmYmFyLCBOVUxMKTsnLAotICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0
X2xpbnQoCi0gICAgICAgICAgICAnZ19vYmplY3Rfc2V0KGZvbywgInByb3AiLCBiYXIsIE5VTEwp
OycsCi0gICAgICAgICAgICAnJykKLQotICAgICAgICAjIDIuIEMrKyBhbmQgQyBib29sIHZhbHVl
cyBzaG91bGQgYmUgd3JpdHRlbiBhcyB0cnVlIGFuZAotICAgICAgICAjICAgIGZhbHNlLiBPYmpl
Y3RpdmUtQyBCT09MIHZhbHVlcyBzaG91bGQgYmUgd3JpdHRlbiBhcyBZRVMgYW5kIE5PLgotICAg
ICAgICAjIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLQotICAgICAgICAjIDMuIFRlc3RzIGZvciB0
cnVlL2ZhbHNlLCBudWxsL25vbi1udWxsLCBhbmQgemVyby9ub24temVybyBzaG91bGQKLSAgICAg
ICAgIyAgICBhbGwgYmUgZG9uZSB3aXRob3V0IGVxdWFsaXR5IGNvbXBhcmlzb25zLgotICAgICAg
ICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJ2lmIChjb3VudCA9PSAwKScsCi0gICAg
ICAgICAgICAnVGVzdHMgZm9yIHRydWUvZmFsc2UsIG51bGwvbm9uLW51bGwsIGFuZCB6ZXJvL25v
bi16ZXJvIHNob3VsZCBhbGwgYmUgZG9uZSB3aXRob3V0IGVxdWFsaXR5IGNvbXBhcmlzb25zLicK
LSAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9jb21wYXJpc29uX3RvX3plcm9dIFs1XScpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnRfb25lX29mX21hbnlfZXJyb3JzX3JlKAotICAgICAgICAg
ICAgJ2lmIChzdHJpbmcgIT0gTlVMTCknLAotICAgICAgICAgICAgcidUZXN0cyBmb3IgdHJ1ZS9m
YWxzZSwgbnVsbC9ub24tbnVsbCwgYW5kIHplcm8vbm9uLXplcm8gc2hvdWxkIGFsbCBiZSBkb25l
IHdpdGhvdXQgZXF1YWxpdHkgY29tcGFyaXNvbnNcLicpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xp
bnQoCi0gICAgICAgICAgICAnaWYgKGNvbmRpdGlvbiA9PSB0cnVlKScsCi0gICAgICAgICAgICAn
VGVzdHMgZm9yIHRydWUvZmFsc2UsIG51bGwvbm9uLW51bGwsIGFuZCB6ZXJvL25vbi16ZXJvIHNo
b3VsZCBhbGwgYmUgZG9uZSB3aXRob3V0IGVxdWFsaXR5IGNvbXBhcmlzb25zLicKLSAgICAgICAg
ICAgICcgIFtyZWFkYWJpbGl0eS9jb21wYXJpc29uX3RvX3plcm9dIFs1XScpCi0gICAgICAgIHNl
bGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnaWYgKG15VmFyaWFibGUgIT0gLyogV2h5IHdv
dWxkIGFueW9uZSBwdXQgYSBjb21tZW50IGhlcmU/ICovIGZhbHNlKScsCi0gICAgICAgICAgICAn
VGVzdHMgZm9yIHRydWUvZmFsc2UsIG51bGwvbm9uLW51bGwsIGFuZCB6ZXJvL25vbi16ZXJvIHNo
b3VsZCBhbGwgYmUgZG9uZSB3aXRob3V0IGVxdWFsaXR5IGNvbXBhcmlzb25zLicKLSAgICAgICAg
ICAgICcgIFtyZWFkYWJpbGl0eS9jb21wYXJpc29uX3RvX3plcm9dIFs1XScpCi0KLSAgICAgICAg
c2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICdpZiAoMCAvKiBUaGlzIGNvbW1lbnQgYWxz
byBsb29rcyBvZGQgdG8gbWUuICovICE9IGFMb25nZXJWYXJpYWJsZU5hbWUpJywKLSAgICAgICAg
ICAgICdUZXN0cyBmb3IgdHJ1ZS9mYWxzZSwgbnVsbC9ub24tbnVsbCwgYW5kIHplcm8vbm9uLXpl
cm8gc2hvdWxkIGFsbCBiZSBkb25lIHdpdGhvdXQgZXF1YWxpdHkgY29tcGFyaXNvbnMuJwotICAg
ICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2NvbXBhcmlzb25fdG9femVyb10gWzVdJykKLSAgICAg
ICAgc2VsZi5hc3NlcnRfbGludF9vbmVfb2ZfbWFueV9lcnJvcnNfcmUoCi0gICAgICAgICAgICAn
aWYgKE5VTEwgPT0gdGhpc01heUJlTnVsbCknLAotICAgICAgICAgICAgcidUZXN0cyBmb3IgdHJ1
ZS9mYWxzZSwgbnVsbC9ub24tbnVsbCwgYW5kIHplcm8vbm9uLXplcm8gc2hvdWxkIGFsbCBiZSBk
b25lIHdpdGhvdXQgZXF1YWxpdHkgY29tcGFyaXNvbnNcLicpCi0gICAgICAgIHNlbGYuYXNzZXJ0
X2xpbnQoCi0gICAgICAgICAgICAnaWYgKHRydWUgIT0gYW5vdGhlckNvbmRpdGlvbiknLAotICAg
ICAgICAgICAgJ1Rlc3RzIGZvciB0cnVlL2ZhbHNlLCBudWxsL25vbi1udWxsLCBhbmQgemVyby9u
b24temVybyBzaG91bGQgYWxsIGJlIGRvbmUgd2l0aG91dCBlcXVhbGl0eSBjb21wYXJpc29ucy4n
Ci0gICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY29tcGFyaXNvbl90b196ZXJvXSBbNV0nKQot
ICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJ2lmIChmYWxzZSA9PSBteUJv
b2xWYWx1ZSknLAotICAgICAgICAgICAgJ1Rlc3RzIGZvciB0cnVlL2ZhbHNlLCBudWxsL25vbi1u
dWxsLCBhbmQgemVyby9ub24temVybyBzaG91bGQgYWxsIGJlIGRvbmUgd2l0aG91dCBlcXVhbGl0
eSBjb21wYXJpc29ucy4nCi0gICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY29tcGFyaXNvbl90
b196ZXJvXSBbNV0nKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAn
aWYgKGZvbnRUeXBlID09IHRydWVUeXBlKScsCi0gICAgICAgICAgICAnJykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICdpZiAob3RoZXJ0cnVlID09IGZvbnRUeXBlKScs
Ci0gICAgICAgICAgICAnJykKLQotICAgIGRlZiB0ZXN0X3VzaW5nX3N0ZChzZWxmKToKLSAgICAg
ICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICd1c2luZyBzdGQ6Om1pbjsnLAotICAg
ICAgICAgICAgIlVzZSAndXNpbmcgbmFtZXNwYWNlIHN0ZDsnIGluc3RlYWQgb2YgJ3VzaW5nIHN0
ZDo6bWluOycuIgotICAgICAgICAgICAgIiAgW2J1aWxkL3VzaW5nX3N0ZF0gWzRdIiwKLSAgICAg
ICAgICAgICdmb28uY3BwJykKLQotICAgIGRlZiB0ZXN0X21heF9tYWNybyhzZWxmKToKLSAgICAg
ICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICdpbnQgaSA9IE1BWCgwLCAxKTsnLAot
ICAgICAgICAgICAgJycsCi0gICAgICAgICAgICAnZm9vLmMnKQotCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X2xpbnQoCi0gICAgICAgICAgICAnaW50IGkgPSBNQVgoMCwgMSk7JywKLSAgICAgICAgICAg
ICdVc2Ugc3RkOjptYXgoKSBvciBzdGQ6Om1heDx0eXBlPigpIGluc3RlYWQgb2YgdGhlIE1BWCgp
IG1hY3JvLicKLSAgICAgICAgICAgICcgIFtydW50aW1lL21heF9taW5fbWFjcm9zXSBbNF0nLAot
ICAgICAgICAgICAgJ2Zvby5jcHAnKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAg
ICAgICAgICAnaW5saW5lIGludCBmb28oKSB7IHJldHVybiBNQVgoMCwgMSk7IH0nLAotICAgICAg
ICAgICAgJ1VzZSBzdGQ6Om1heCgpIG9yIHN0ZDo6bWF4PHR5cGU+KCkgaW5zdGVhZCBvZiB0aGUg
TUFYKCkgbWFjcm8uJwotICAgICAgICAgICAgJyAgW3J1bnRpbWUvbWF4X21pbl9tYWNyb3NdIFs0
XScsCi0gICAgICAgICAgICAnZm9vLmgnKQotCi0gICAgZGVmIHRlc3RfbWluX21hY3JvKHNlbGYp
OgotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJ2ludCBpID0gTUlOKDAs
IDEpOycsCi0gICAgICAgICAgICAnJywKLSAgICAgICAgICAgICdmb28uYycpCi0KLSAgICAgICAg
c2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICdpbnQgaSA9IE1JTigwLCAxKTsnLAotICAg
ICAgICAgICAgJ1VzZSBzdGQ6Om1pbigpIG9yIHN0ZDo6bWluPHR5cGU+KCkgaW5zdGVhZCBvZiB0
aGUgTUlOKCkgbWFjcm8uJwotICAgICAgICAgICAgJyAgW3J1bnRpbWUvbWF4X21pbl9tYWNyb3Nd
IFs0XScsCi0gICAgICAgICAgICAnZm9vLmNwcCcpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgKLSAgICAgICAgICAgICdpbmxpbmUgaW50IGZvbygpIHsgcmV0dXJuIE1JTigwLCAxKTsgfScs
Ci0gICAgICAgICAgICAnVXNlIHN0ZDo6bWluKCkgb3Igc3RkOjptaW48dHlwZT4oKSBpbnN0ZWFk
IG9mIHRoZSBNSU4oKSBtYWNyby4nCi0gICAgICAgICAgICAnICBbcnVudGltZS9tYXhfbWluX21h
Y3Jvc10gWzRdJywKLSAgICAgICAgICAgICdmb28uaCcpCi0KLSAgICBkZWYgdGVzdF9uYW1lcyhz
ZWxmKToKLSAgICAgICAgbmFtZV9lcnJvcl9tZXNzYWdlID0gIiBpcyBpbmNvcnJlY3RseSBuYW1l
ZC4gRG9uJ3QgdXNlIHVuZGVyc2NvcmVzIGluIHlvdXIgaWRlbnRpZmllciBuYW1lcy4gIFtyZWFk
YWJpbGl0eS9uYW1pbmddIFs0XSIKLQotICAgICAgICAjIEJhc2ljIGNhc2VzIGZyb20gV2ViS2l0
IHN0eWxlIGd1aWRlLgotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdzdHJ1Y3QgRGF0YTsnLCAn
JykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnc2l6ZV90IGJ1ZmZlclNpemU7JywgJycpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2NsYXNzIEhUTUxEb2N1bWVudDsnLCAnJykKLSAgICAg
ICAgc2VsZi5hc3NlcnRfbGludCgnU3RyaW5nIG1pbWVUeXBlKCk7JywgJycpCi0gICAgICAgIHNl
bGYuYXNzZXJ0X2xpbnQoJ3NpemVfdCBidWZmZXJfc2l6ZTsnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICdidWZmZXJfc2l6ZScgKyBuYW1lX2Vycm9yX21lc3NhZ2UpCi0gICAgICAgIHNlbGYu
YXNzZXJ0X2xpbnQoJ3Nob3J0IG1fbGVuZ3RoOycsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9s
aW50KCdzaG9ydCBfbGVuZ3RoOycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ19sZW5ndGgn
ICsgbmFtZV9lcnJvcl9tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdzaG9ydCBs
ZW5ndGhfOycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2xlbmd0aF8nICsgbmFtZV9lcnJv
cl9tZXNzYWdlKQotCi0gICAgICAgICMgUG9pbnRlcnMsIHJlZmVyZW5jZXMsIGZ1bmN0aW9ucywg
dGVtcGxhdGVzLCBhbmQgYWRqZWN0aXZlcy4KLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnY2hh
ciogdW5kZXJfc2NvcmU7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAndW5kZXJfc2NvcmUn
ICsgbmFtZV9lcnJvcl9tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdjb25zdCBp
bnQgVU5ERVJfU0NPUkU7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnVU5ERVJfU0NPUkUn
ICsgbmFtZV9lcnJvcl9tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdzdGF0aWMg
aW5saW5lIGNvbnN0IGNoYXIgY29uc3QmIGNvbnN0IHVuZGVyX3Njb3JlOycsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgJ3VuZGVyX3Njb3JlJyArIG5hbWVfZXJyb3JfbWVzc2FnZSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRfbGludCgnV2ViQ29yZTo6UmVuZGVyT2JqZWN0KiB1bmRlcl9zY29yZTsn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICd1bmRlcl9zY29yZScgKyBuYW1lX2Vycm9yX21l
c3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBmdW5jX25hbWUoKTsnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICdmdW5jX25hbWUnICsgbmFtZV9lcnJvcl9tZXNzYWdlKQot
ICAgICAgICBzZWxmLmFzc2VydF9saW50KCdSZWZQdHI8UmVuZGVyT2JqZWN0Kj4gdW5kZXJfc2Nv
cmU7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAndW5kZXJfc2NvcmUnICsgbmFtZV9lcnJv
cl9tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdXVEY6OlZlY3RvcjxXVEY6OlJl
ZlB0cjxjb25zdCBSZW5kZXJPYmplY3QqIGNvbnN0PiA+IHVuZGVyX3Njb3JlOycsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgJ3VuZGVyX3Njb3JlJyArIG5hbWVfZXJyb3JfbWVzc2FnZSkKLSAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50IHVuZGVyX3Njb3JlW107JywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAndW5kZXJfc2NvcmUnICsgbmFtZV9lcnJvcl9tZXNzYWdlKQotICAgICAg
ICBzZWxmLmFzc2VydF9saW50KCdzdHJ1Y3QgZGlyZW50KiB1bmRlcl9zY29yZTsnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICd1bmRlcl9zY29yZScgKyBuYW1lX2Vycm9yX21lc3NhZ2UpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2xvbmcgdW5kZXJfc2NvcmU7JywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAndW5kZXJfc2NvcmUnICsgbmFtZV9lcnJvcl9tZXNzYWdlKQotICAgICAg
ICBzZWxmLmFzc2VydF9saW50KCdsb25nIGxvbmcgdW5kZXJfc2NvcmU7JywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAndW5kZXJfc2NvcmUnICsgbmFtZV9lcnJvcl9tZXNzYWdlKQotICAgICAg
ICBzZWxmLmFzc2VydF9saW50KCdsb25nIGRvdWJsZSB1bmRlcl9zY29yZTsnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICd1bmRlcl9zY29yZScgKyBuYW1lX2Vycm9yX21lc3NhZ2UpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2xvbmcgbG9uZyBpbnQgdW5kZXJfc2NvcmU7JywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAndW5kZXJfc2NvcmUnICsgbmFtZV9lcnJvcl9tZXNzYWdlKQot
Ci0gICAgICAgICMgRGVjbGFyYXRpb25zIGluIGNvbnRyb2wgc3RhdGVtZW50LgotICAgICAgICBz
ZWxmLmFzc2VydF9saW50KCdpZiAoaW50IHVuZGVyX3Njb3JlID0gNDIpIHsnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICd1bmRlcl9zY29yZScgKyBuYW1lX2Vycm9yX21lc3NhZ2UpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2Vsc2UgaWYgKGludCB1bmRlcl9zY29yZSA9IDQyKSB7JywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAndW5kZXJfc2NvcmUnICsgbmFtZV9lcnJvcl9tZXNz
YWdlKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCdmb3IgKGludCB1bmRlcl9zY29yZSA9IDQy
OyBjb25kOyBpKyspIHsnLAotICAgICAgICAgICAgICAgICAgICAgICAgICd1bmRlcl9zY29yZScg
KyBuYW1lX2Vycm9yX21lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3doaWxlIChm
b28gJiB1bmRlcl9zY29yZSA9IGJhcikgeycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ3Vu
ZGVyX3Njb3JlJyArIG5hbWVfZXJyb3JfbWVzc2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgnZm9yIChmb28gKiB1bmRlcl9zY29yZSA9IHA7IGNvbmQ7IGkrKykgeycsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgJ3VuZGVyX3Njb3JlJyArIG5hbWVfZXJyb3JfbWVzc2FnZSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRfbGludCgnZm9yIChmb28gKiB1bmRlcl9zY29yZTsgY29uZDsgaSsrKSB7
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAndW5kZXJfc2NvcmUnICsgbmFtZV9lcnJvcl9t
ZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydF9saW50KCd3aGlsZSAoZm9vICYgdmFsdWVfaW5f
dGhpcmRwYXJ0eV9saWJyYXJ5KSB7JywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3do
aWxlIChmb28gKiB2YWx1ZV9pbl90aGlyZHBhcnR5X2xpYnJhcnkpIHsnLCAnJykKLSAgICAgICAg
c2VsZi5hc3NlcnRfbGludCgnaWYgKG1saSAmJiBTX09LID09IG1saS0+Zm9vKCkpIHsnLCAnJykK
LQotICAgICAgICAjIE1vcmUgbWVtYmVyIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zLgotICAgICAg
ICBzZWxmLmFzc2VydF9saW50KCdpbnQgU29tZUNsYXNzOjpzX3ZhbGlkTmFtZScsICcnKQotICAg
ICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQgbV91bmRlcl9zY29yZTsnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICdtX3VuZGVyX3Njb3JlJyArIG5hbWVfZXJyb3JfbWVzc2FnZSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRfbGludCgnaW50IFNvbWVDbGFzczo6c191bmRlcl9zY29yZSA9IDA7JywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAnU29tZUNsYXNzOjpzX3VuZGVyX3Njb3JlJyArIG5h
bWVfZXJyb3JfbWVzc2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50IFNvbWVDbGFz
czo6dW5kZXJfc2NvcmUgPSAwOycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ1NvbWVDbGFz
czo6dW5kZXJfc2NvcmUnICsgbmFtZV9lcnJvcl9tZXNzYWdlKQotCi0gICAgICAgICMgT3RoZXIg
c3RhdGVtZW50cy4KLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgncmV0dXJuIElOVF9NQVg7Jywg
JycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3JldHVybl90IHVuZGVyX3Njb3JlOycsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgJ3VuZGVyX3Njb3JlJyArIG5hbWVfZXJyb3JfbWVzc2Fn
ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnZ290byB1bmRlcl9zY29yZTsnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICd1bmRlcl9zY29yZScgKyBuYW1lX2Vycm9yX21lc3NhZ2UpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2RlbGV0ZSBzdGF0aWNfY2FzdDxGb28qPihwKTsnLCAn
JykKLQotICAgICAgICAjIE11bHRpcGxlIHZhcmlhYmxlcyBpbiBvbmUgbGluZS4KLSAgICAgICAg
c2VsZi5hc3NlcnRfbGludCgndm9pZCBteUZ1bmN0aW9uKGludCB2YXJpYWJsZTEsIGludCBhbm90
aGVyX3ZhcmlhYmxlKTsnLAotICAgICAgICAgICAgICAgICAgICAgICAgICdhbm90aGVyX3Zhcmlh
YmxlJyArIG5hbWVfZXJyb3JfbWVzc2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50
IHZhcmlhYmxlMSwgYW5vdGhlcl92YXJpYWJsZTsnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICdhbm90aGVyX3ZhcmlhYmxlJyArIG5hbWVfZXJyb3JfbWVzc2FnZSkKLSAgICAgICAgc2VsZi5h
c3NlcnRfbGludCgnaW50IGZpcnN0X3ZhcmlhYmxlLCBzZWNvbmRWYXJpYWJsZTsnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICdmaXJzdF92YXJpYWJsZScgKyBuYW1lX2Vycm9yX21lc3NhZ2Up
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3ZvaWQgbXlfZnVuY3Rpb24oaW50IHZhcmlhYmxl
XzEsIGludCB2YXJpYWJsZV8yKTsnLAotICAgICAgICAgICAgICAgICAgICAgICAgIFsnbXlfZnVu
Y3Rpb24nICsgbmFtZV9lcnJvcl9tZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAn
dmFyaWFibGVfMScgKyBuYW1lX2Vycm9yX21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICd2YXJpYWJsZV8yJyArIG5hbWVfZXJyb3JfbWVzc2FnZV0pCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X2xpbnQoJ2ZvciAoaW50IHZhcmlhYmxlXzEsIHZhcmlhYmxlXzI7OykgeycsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgWyd2YXJpYWJsZV8xJyArIG5hbWVfZXJyb3JfbWVzc2FnZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhcmlhYmxlXzInICsgbmFtZV9lcnJvcl9tZXNzYWdl
XSkKLQotICAgICAgICAjIFRoZXJlIGlzIGFuIGV4Y2VwdGlvbiBmb3Igb3AgY29kZSBmdW5jdGlv
bnMgYnV0IG9ubHkgaW4gdGhlIEphdmFTY3JpcHRDb3JlIGRpcmVjdG9yeS4KLSAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgndm9pZCB0aGlzX29wX2NvZGUoaW50IHZhcjEsIGludCB2YXIyKScsICcn
LCAnSmF2YVNjcmlwdENvcmUvZm9vLmNwcCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3Zv
aWQgdGhpc19vcF9jb2RlKGludCB2YXIxLCBpbnQgdmFyMiknLCAndGhpc19vcF9jb2RlJyArIG5h
bWVfZXJyb3JfbWVzc2FnZSkKLQotICAgICAgICAjIFRoZXJlIGlzIGFuIGV4Y2VwdGlvbiBmb3Ig
c29tZSB1bml0IHRlc3RzIHRoYXQgYmVnaW4gd2l0aCAidHN0XyIuCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X2xpbnQoJ3ZvaWQgdHN0X1FXZWJGcmFtZTo6YXJyYXlPYmplY3RFbnVtZXJhYmxlKGludCB2
YXIxLCBpbnQgdmFyMiknLCAnJykKLQotICAgICAgICAjIGNvbnN0X2l0ZXJhdG9yIGlzIGFsbG93
ZWQgYXMgd2VsbC4KLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgndHlwZWRlZiBWZWN0b3JUeXBl
Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsnLCAnJykKLQotCi0gICAgZGVmIHRlc3Rf
Y29tbWVudHMoc2VsZik6Ci0gICAgICAgICMgQSBjb21tZW50IGF0IHRoZSBiZWdpbm5pbmcgb2Yg
YSBsaW5lIGlzIG9rLgotICAgICAgICBzZWxmLmFzc2VydF9saW50KCcvLyBjb21tZW50JywgJycp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJyAgICAvLyBjb21tZW50JywgJycpCi0KLSAgICAg
ICAgc2VsZi5hc3NlcnRfbGludCgnfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICdPbmUgc3BhY2UgYmVmb3JlIGVuZCBvZiBsaW5lIGNvbW1lbnRzJwot
ICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL2NvbW1lbnRzXSBbNV0nKQot
Ci0gICAgZGVmIHRlc3Rfb3RoZXIoc2VsZik6Ci0gICAgICAgICMgRklYTUU6IEltcGxlbWVudCB0
aGlzLgotICAgICAgICBwYXNzCi0KLQotICAgIGRlZiB0ZXN0X2Nhbl9oYW5kbGUoc2VsZik6Ci0g
ICAgICAgICIiIlRlc3RzIGZvciBjcHBfc3R5bGUuY2FuX2hhbmRsZSgpLiIiIgotICAgICAgICBz
ZWxmLmFzc2VydF8obm90IGNwcF9zdHlsZS5jYW5faGFuZGxlKCcnKSkKLSAgICAgICAgc2VsZi5h
c3NlcnRfKGNwcF9zdHlsZS5jYW5faGFuZGxlKCdmb28uaCcpKQotICAgICAgICBzZWxmLmFzc2Vy
dF8obm90IGNwcF9zdHlsZS5jYW5faGFuZGxlKCdmb28uaHBwJykpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0XyhjcHBfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLmMnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRf
KGNwcF9zdHlsZS5jYW5faGFuZGxlKCdmb28uY3BwJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhu
b3QgY3BwX3N0eWxlLmNhbl9oYW5kbGUoJ2Zvby5jYycpKQotICAgICAgICBzZWxmLmFzc2VydF8o
bm90IGNwcF9zdHlsZS5jYW5faGFuZGxlKCdmb28uY3h4JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0
Xyhub3QgY3BwX3N0eWxlLmNhbl9oYW5kbGUoJ2Zvby5DJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0
Xyhub3QgY3BwX3N0eWxlLmNhbl9oYW5kbGUoJ2Zvby5tbScpKQotICAgICAgICBzZWxmLmFzc2Vy
dF8obm90IGNwcF9zdHlsZS5jYW5faGFuZGxlKCctJykpCi0KLQotZGVmIHRlYXJEb3duKCk6Ci0g
ICAgIiIiQSBnbG9iYWwgY2hlY2sgdG8gbWFrZSBzdXJlIGFsbCBlcnJvci1jYXRlZ29yaWVzIGhh
dmUgYmVlbiB0ZXN0ZWQuCi0KLSAgICBUaGUgbWFpbiB0ZWFyRG93bigpIHJvdXRpbmUgaXMgdGhl
IG9ubHkgY29kZSB3ZSBjYW4gZ3VhcmFudGVlIHdpbGwgYmUKLSAgICBydW4gYWZ0ZXIgYWxsIG90
aGVyIHRlc3RzIGhhdmUgYmVlbiBleGVjdXRlZC4KLSAgICAiIiIKLSAgICB0cnk6Ci0gICAgICAg
IGlmIF9ydW5fdmVyaWZ5YWxsY2F0ZWdvcmllc3NlZW46Ci0gICAgICAgICAgICBFcnJvckNvbGxl
Y3RvcihOb25lKS52ZXJpZnlfYWxsX2NhdGVnb3JpZXNfYXJlX3NlZW4oKQotICAgIGV4Y2VwdCBO
YW1lRXJyb3I6Ci0gICAgICAgICMgSWYgbm9ib2R5IHNldCB0aGUgZ2xvYmFsIF9ydW5fdmVyaWZ5
YWxsY2F0ZWdvcmllc3NlZW4sIHRoZW4KLSAgICAgICAgIyB3ZSBhc3N1bWUgd2Ugc2hvdWxkbid0
IHJ1biB0aGUgdGVzdAotICAgICAgICBwYXNzCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6
Ci0gICAgaW1wb3J0IHN5cwotICAgICMgV2UgZG9uJ3Qgd2FudCB0byBydW4gdGhlIHZlcmlmeV9h
bGxfY2F0ZWdvcmllc19hcmVfc2VlbigpIHRlc3QgdW5sZXNzCi0gICAgIyB3ZSdyZSBydW5uaW5n
IHRoZSBmdWxsIHRlc3Qgc3VpdGU6IGlmIHdlIG9ubHkgcnVuIG9uZSB0ZXN0LAotICAgICMgb2J2
aW91c2x5IHdlJ3JlIG5vdCBnb2luZyB0byBzZWUgYWxsIHRoZSBlcnJvciBjYXRlZ29yaWVzLiAg
U28gd2UKLSAgICAjIG9ubHkgcnVuIHZlcmlmeV9hbGxfY2F0ZWdvcmllc19hcmVfc2VlbigpIHdo
ZW4gbm8gY29tbWFuZGxpbmUgZmxhZ3MKLSAgICAjIGFyZSBwYXNzZWQgaW4uCi0gICAgZ2xvYmFs
IF9ydW5fdmVyaWZ5YWxsY2F0ZWdvcmllc3NlZW4KLSAgICBfcnVuX3ZlcmlmeWFsbGNhdGVnb3Jp
ZXNzZWVuID0gKGxlbihzeXMuYXJndikgPT0gMSkKLQotICAgIHVuaXR0ZXN0Lm1haW4oKQpJbmRl
eDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlLnB5CShyZXZpc2lvbiA1Mjg0OSkKKysr
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUucHkJKHdvcmtpbmcgY29weSkKQEAg
LTEsNTUyICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2hyaXMu
amVyZG9uZWtAZ21haWwuY29tKQotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBt
ZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0j
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiRnJvbnQgZW5kIG9m
IHNvbWUgc3R5bGUtY2hlY2tlciBtb2R1bGVzLiIiIgotCi0jIEZJWE1FOiBNb3ZlIG1vcmUgY29k
ZSBmcm9tIGNwcF9zdHlsZSB0byBoZXJlLgotCi1pbXBvcnQgZ2V0b3B0Ci1pbXBvcnQgb3MucGF0
aAotaW1wb3J0IHN5cwotCi1pbXBvcnQgY3BwX3N0eWxlCi1pbXBvcnQgdGV4dF9zdHlsZQotZnJv
bSBkaWZmX3BhcnNlciBpbXBvcnQgRGlmZlBhcnNlcgotCi0KLSMgVGhlc2UgZGVmYXVsdHMgYXJl
IHVzZWQgYnkgY2hlY2std2Via2l0LXN0eWxlLgotREVGQVVMVF9WRVJCT1NJVFkgPSAxCi1ERUZB
VUxUX09VVFBVVF9GT1JNQVQgPSAnZW1hY3MnCi0KLQotIyBGSVhNRTogRm9yIHN0eWxlIGNhdGVn
b3JpZXMgd2Ugd2lsbCBuZXZlciB3YW50IHRvIGhhdmUsIHJlbW92ZSB0aGVtLgotIyAgICAgICAg
Rm9yIGNhdGVnb3JpZXMgZm9yIHdoaWNoIHdlIHdhbnQgdG8gaGF2ZSBzaW1pbGFyIGZ1bmN0aW9u
YWxpdHksCi0jICAgICAgICBtb2RpZnkgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBlbmFibGUgdGhl
bS4KLSMKLSMgVGhyb3VnaG91dCB0aGlzIG1vZHVsZSwgd2UgdXNlICJmaWx0ZXIgcnVsZSIgcmF0
aGVyIHRoYW4gImZpbHRlciIKLSMgZm9yIGFuIGluZGl2aWR1YWwgYm9vbGVhbiBmaWx0ZXIgZmxh
ZyBsaWtlICIrZm9vIi4gVGhpcyBhbGxvd3MgdXMgdG8KLSMgcmVzZXJ2ZSAiZmlsdGVyIiBmb3Ig
d2hhdCBvbmUgZ2V0cyBieSBjb2xsZWN0aXZlbHkgYXBwbHlpbmcgYWxsIG9mCi0jIHRoZSBmaWx0
ZXIgcnVsZXMuCi0jCi0jIFRoZSBfV0VCS0lUX0ZJTFRFUl9SVUxFUyBhcmUgcHJlcGVuZGVkIHRv
IGFueSB1c2VyLXNwZWNpZmllZCBmaWx0ZXIKLSMgcnVsZXMuIFNpbmNlIGJ5IGRlZmF1bHQgYWxs
IGVycm9ycyBhcmUgb24sIG9ubHkgaW5jbHVkZSBydWxlcyB0aGF0Ci0jIGJlZ2luIHdpdGggYSAt
IHNpZ24uCi1XRUJLSVRfRklMVEVSX1JVTEVTID0gWwotICAgICctYnVpbGQvZW5kaWZfY29tbWVu
dCcsCi0gICAgJy1idWlsZC9pbmNsdWRlX3doYXRfeW91X3VzZScsICAjIDxzdHJpbmc+IGZvciBz
dGQ6OnN0cmluZwotICAgICctYnVpbGQvc3RvcmFnZV9jbGFzcycsICAjIGNvbnN0IHN0YXRpYwot
ICAgICctbGVnYWwvY29weXJpZ2h0JywKLSAgICAnLXJlYWRhYmlsaXR5L211bHRpbGluZV9jb21t
ZW50JywKLSAgICAnLXJlYWRhYmlsaXR5L2JyYWNlcycsICAjIGludCBmb28oKSB7fTsKLSAgICAn
LXJlYWRhYmlsaXR5L2ZuX3NpemUnLAotICAgICctcmVhZGFiaWxpdHkvY2FzdGluZycsCi0gICAg
Jy1yZWFkYWJpbGl0eS9mdW5jdGlvbicsCi0gICAgJy1ydW50aW1lL2FycmF5cycsICAjIHZhcmlh
YmxlIGxlbmd0aCBhcnJheQotICAgICctcnVudGltZS9jYXN0aW5nJywKLSAgICAnLXJ1bnRpbWUv
c2l6ZW9mJywKLSAgICAnLXJ1bnRpbWUvZXhwbGljaXQnLCAgIyBleHBsaWNpdAotICAgICctcnVu
dGltZS92aXJ0dWFsJywgICMgdmlydHVhbCBkdG9yCi0gICAgJy1ydW50aW1lL3ByaW50ZicsCi0g
ICAgJy1ydW50aW1lL3RocmVhZHNhZmVfZm4nLAotICAgICctcnVudGltZS9ydHRpJywKLSAgICAn
LXdoaXRlc3BhY2UvYmxhbmtfbGluZScsCi0gICAgJy13aGl0ZXNwYWNlL2VuZF9vZl9saW5lJywK
LSAgICAnLXdoaXRlc3BhY2UvbGFiZWxzJywKLSAgICBdCi0KLQotIyBGSVhNRTogVGhlIFNUWUxF
X0NBVEVHT1JJRVMgc2hvdyB1cCBpbiBib3RoIGZpbGUgdHlwZXMgY3BwX3N0eWxlLnB5Ci0jICAg
ICAgICBhbmQgdGV4dF9zdHlsZS5weS4gQnJlYWsgdGhpcyBsaXN0IGludG8gcG9zc2libHkgb3Zl
cmxhcHBpbmcKLSMgICAgICAgIHN1Yi1saXN0cywgYW5kIHN0b3JlIGVhY2ggc3ViLWxpc3QgaW4g
dGhlIGNvcnJlc3BvbmRpbmcgLnB5Ci0jICAgICAgICBmaWxlLiBUaGUgZmlsZSBzdHlsZS5weSBj
YW4gb2J0YWluIHRoZSBtYXN0ZXIgbGlzdCBieSB0YWtpbmcKLSMgICAgICAgIHRoZSB1bmlvbi4g
VGhpcyB3aWxsIGFsbG93IHRoZSB1bml0IHRlc3RzIGZvciBlYWNoIGZpbGUgdHlwZQotIyAgICAg
ICAgdG8gY2hlY2sgdGhhdCBhbGwgb2YgdGhlaXIgcmVzcGVjdGl2ZSBzdHlsZSBjYXRlZ29yaWVz
IGFyZQotIyAgICAgICAgcmVwcmVzZW50ZWQgLS0gd2l0aG91dCBoYXZpbmcgdG8gcmVmZXJlbmNl
IHN0eWxlLnB5IG9yIGJlCi0jICAgICAgICBhd2FyZSBvZiB0aGUgZXhpc3RlbmNlIG9mIG90aGVy
IGZpbGUgdHlwZXMuCi0jCi0jIFdlIGNhdGVnb3JpemUgZWFjaCBzdHlsZSBydWxlIHdlIHByaW50
LiAgSGVyZSBhcmUgdGhlIGNhdGVnb3JpZXMuCi0jIFdlIHdhbnQgYW4gZXhwbGljaXQgbGlzdCBz
byB3ZSBjYW4gZGlzcGxheSBhIGZ1bGwgbGlzdCB0byB0aGUgdXNlci4KLSMgSWYgeW91IGFkZCBh
IG5ldyBlcnJvciBtZXNzYWdlIHdpdGggYSBuZXcgY2F0ZWdvcnksIGFkZCBpdCB0byB0aGUgbGlz
dAotIyBoZXJlISAgY3BwX3N0eWxlX3VuaXR0ZXN0LnB5IHNob3VsZCB0ZWxsIHlvdSBpZiB5b3Ug
Zm9yZ2V0IHRvIGRvIHRoaXMuCi1TVFlMRV9DQVRFR09SSUVTID0gWwotICAgICdidWlsZC9jbGFz
cycsCi0gICAgJ2J1aWxkL2RlcHJlY2F0ZWQnLAotICAgICdidWlsZC9lbmRpZl9jb21tZW50JywK
LSAgICAnYnVpbGQvZm9yd2FyZF9kZWNsJywKLSAgICAnYnVpbGQvaGVhZGVyX2d1YXJkJywKLSAg
ICAnYnVpbGQvaW5jbHVkZScsCi0gICAgJ2J1aWxkL2luY2x1ZGVfb3JkZXInLAotICAgICdidWls
ZC9pbmNsdWRlX3doYXRfeW91X3VzZScsCi0gICAgJ2J1aWxkL25hbWVzcGFjZXMnLAotICAgICdi
dWlsZC9wcmludGZfZm9ybWF0JywKLSAgICAnYnVpbGQvc3RvcmFnZV9jbGFzcycsCi0gICAgJ2J1
aWxkL3VzaW5nX3N0ZCcsCi0gICAgJ2xlZ2FsL2NvcHlyaWdodCcsCi0gICAgJ3JlYWRhYmlsaXR5
L2JyYWNlcycsCi0gICAgJ3JlYWRhYmlsaXR5L2Nhc3RpbmcnLAotICAgICdyZWFkYWJpbGl0eS9j
aGVjaycsCi0gICAgJ3JlYWRhYmlsaXR5L2NvbXBhcmlzb25fdG9femVybycsCi0gICAgJ3JlYWRh
YmlsaXR5L2NvbnN0cnVjdG9ycycsCi0gICAgJ3JlYWRhYmlsaXR5L2NvbnRyb2xfZmxvdycsCi0g
ICAgJ3JlYWRhYmlsaXR5L2ZuX3NpemUnLAotICAgICdyZWFkYWJpbGl0eS9mdW5jdGlvbicsCi0g
ICAgJ3JlYWRhYmlsaXR5L211bHRpbGluZV9jb21tZW50JywKLSAgICAncmVhZGFiaWxpdHkvbXVs
dGlsaW5lX3N0cmluZycsCi0gICAgJ3JlYWRhYmlsaXR5L25hbWluZycsCi0gICAgJ3JlYWRhYmls
aXR5L251bGwnLAotICAgICdyZWFkYWJpbGl0eS9zdHJlYW1zJywKLSAgICAncmVhZGFiaWxpdHkv
dG9kbycsCi0gICAgJ3JlYWRhYmlsaXR5L3V0ZjgnLAotICAgICdydW50aW1lL2FycmF5cycsCi0g
ICAgJ3J1bnRpbWUvY2FzdGluZycsCi0gICAgJ3J1bnRpbWUvZXhwbGljaXQnLAotICAgICdydW50
aW1lL2luaXQnLAotICAgICdydW50aW1lL2ludCcsCi0gICAgJ3J1bnRpbWUvaW52YWxpZF9pbmNy
ZW1lbnQnLAotICAgICdydW50aW1lL21heF9taW5fbWFjcm9zJywKLSAgICAncnVudGltZS9tZW1z
ZXQnLAotICAgICdydW50aW1lL3ByaW50ZicsCi0gICAgJ3J1bnRpbWUvcHJpbnRmX2Zvcm1hdCcs
Ci0gICAgJ3J1bnRpbWUvcmVmZXJlbmNlcycsCi0gICAgJ3J1bnRpbWUvcnR0aScsCi0gICAgJ3J1
bnRpbWUvc2l6ZW9mJywKLSAgICAncnVudGltZS9zdHJpbmcnLAotICAgICdydW50aW1lL3RocmVh
ZHNhZmVfZm4nLAotICAgICdydW50aW1lL3ZpcnR1YWwnLAotICAgICd3aGl0ZXNwYWNlL2JsYW5r
X2xpbmUnLAotICAgICd3aGl0ZXNwYWNlL2JyYWNlcycsCi0gICAgJ3doaXRlc3BhY2UvY29tbWEn
LAotICAgICd3aGl0ZXNwYWNlL2NvbW1lbnRzJywKLSAgICAnd2hpdGVzcGFjZS9kZWNsYXJhdGlv
bicsCi0gICAgJ3doaXRlc3BhY2UvZW5kX29mX2xpbmUnLAotICAgICd3aGl0ZXNwYWNlL2VuZGlu
Z19uZXdsaW5lJywKLSAgICAnd2hpdGVzcGFjZS9pbmRlbnQnLAotICAgICd3aGl0ZXNwYWNlL2xh
YmVscycsCi0gICAgJ3doaXRlc3BhY2UvbGluZV9sZW5ndGgnLAotICAgICd3aGl0ZXNwYWNlL25l
d2xpbmUnLAotICAgICd3aGl0ZXNwYWNlL29wZXJhdG9ycycsCi0gICAgJ3doaXRlc3BhY2UvcGFy
ZW5zJywKLSAgICAnd2hpdGVzcGFjZS9zZW1pY29sb24nLAotICAgICd3aGl0ZXNwYWNlL3RhYics
Ci0gICAgJ3doaXRlc3BhY2UvdG9kbycsCi0gICAgXQotCi0KLWRlZiBfY3JlYXRlX3VzYWdlKGRl
ZmF1bHRzKToKLSAgICAiIiJSZXR1cm4gdGhlIHVzYWdlIHN0cmluZyB0byBkaXNwbGF5IGZvciBj
b21tYW5kIGhlbHAuCi0KLSAgICBBcmdzOgotICAgICAgZGVmYXVsdHM6IEFuIEFyZ3VtZW50RGVm
YXVsdHMgaW5zdGFuY2UuCi0KLSAgICAiIiIKLSAgICB1c2FnZSA9ICIiIgotU3ludGF4OiAlKHBy
b2dyYW1fbmFtZSlzIFstLXZlcmJvc2U9I10gWy0tZ2l0LWNvbW1pdD08U2luZ2xlQ29tbWl0Pl0g
Wy0tb3V0cHV0PXZzN10KLSAgICAgICAgWy0tZmlsdGVyPS14LCt5LC4uLl0gW2ZpbGVdIC4uLgot
Ci0gIFRoZSBzdHlsZSBndWlkZWxpbmVzIHRoaXMgdHJpZXMgdG8gZm9sbG93IGFyZSBoZXJlOgot
ICAgIGh0dHA6Ly93ZWJraXQub3JnL2NvZGluZy9jb2Rpbmctc3R5bGUuaHRtbAotCi0gIEV2ZXJ5
IHN0eWxlIGVycm9yIGlzIGdpdmVuIGEgY29uZmlkZW5jZSBzY29yZSBmcm9tIDEtNSwgd2l0aCA1
IG1lYW5pbmcKLSAgd2UgYXJlIGNlcnRhaW4gb2YgdGhlIHByb2JsZW0sIGFuZCAxIG1lYW5pbmcg
aXQgY291bGQgYmUgYSBsZWdpdGltYXRlCi0gIGNvbnN0cnVjdC4gIFRoaXMgY2FuIG1pc3Mgc29t
ZSBlcnJvcnMgYW5kIGRvZXMgbm90IHN1YnN0aXR1dGUgZm9yCi0gIGNvZGUgcmV2aWV3LgotCi0g
IFRvIHByZXZlbnQgc3BlY2lmaWMgbGluZXMgZnJvbSBiZWluZyBsaW50ZWQsIGFkZCBhICcvLyBO
T0xJTlQnIGNvbW1lbnQgdG8gdGhlCi0gIGVuZCBvZiB0aGUgbGluZS4KLQotICBMaW50ZWQgZXh0
ZW5zaW9ucyBhcmUgLmNwcCwgLmMgYW5kIC5oLiAgT3RoZXIgZmlsZSB0eXBlcyBhcmUgaWdub3Jl
ZC4KLQotICBUaGUgZmlsZSBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgYW5kIGFjY2VwdHMgbXVsdGlw
bGUgZmlsZXMuICBMZWF2aW5nCi0gIG91dCB0aGUgZmlsZSBwYXJhbWV0ZXIgYXBwbGllcyB0aGUg
Y2hlY2sgdG8gYWxsIGZpbGVzIGNvbnNpZGVyZWQgY2hhbmdlZAotICBieSB5b3VyIHNvdXJjZSBj
b250cm9sIG1hbmFnZW1lbnQgc3lzdGVtLgotCi0gIEZsYWdzOgotCi0gICAgdmVyYm9zZT0jCi0g
ICAgICBBIG51bWJlciAxLTUgdGhhdCByZXN0cmljdHMgb3V0cHV0IHRvIGVycm9ycyB3aXRoIGEg
Y29uZmlkZW5jZQotICAgICAgc2NvcmUgYXQgb3IgYWJvdmUgdGhpcyB2YWx1ZS4gSW4gcGFydGlj
dWxhciwgdGhlIHZhbHVlIDEgZGlzcGxheXMKLSAgICAgIGFsbCBlcnJvcnMuIFRoZSBkZWZhdWx0
IGlzICUoZGVmYXVsdF92ZXJib3NpdHkpcy4KLQotICAgIGdpdC1jb21taXQ9PFNpbmdsZUNvbW1p
dD4KLSAgICAgIENoZWNrcyB0aGUgc3R5bGUgb2YgZXZlcnl0aGluZyBmcm9tIHRoZSBnaXZlbiBj
b21taXQgdG8gdGhlIGxvY2FsIHRyZWUuCi0KLSAgICBvdXRwdXQ9dnM3Ci0gICAgICBUaGUgb3V0
cHV0IGZvcm1hdCwgd2hpY2ggbWF5IGJlIG9uZSBvZgotICAgICAgICBlbWFjcyA6IHRvIGVhc2Ug
ZW1hY3MgcGFyc2luZwotICAgICAgICB2czcgICA6IGNvbXBhdGlibGUgd2l0aCBWaXN1YWwgU3R1
ZGlvCi0gICAgICBEZWZhdWx0cyB0byAiJShkZWZhdWx0X291dHB1dF9mb3JtYXQpcyIuIE90aGVy
IGZvcm1hdHMgYXJlIHVuc3VwcG9ydGVkLgotCi0gICAgZmlsdGVyPS14LCt5LC4uLgotICAgICAg
QSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBib29sZWFuIGZpbHRlciBydWxlcyB1c2VkIHRvIGZp
bHRlcgotICAgICAgd2hpY2ggY2F0ZWdvcmllcyBvZiBzdHlsZSBndWlkZWxpbmVzIHRvIGNoZWNr
LiAgVGhlIHNjcmlwdCBjaGVja3MKLSAgICAgIGEgY2F0ZWdvcnkgaWYgdGhlIGNhdGVnb3J5IHBh
c3NlcyB0aGUgZmlsdGVyIHJ1bGVzLCBhcyBmb2xsb3dzLgotCi0gICAgICBBbnkgd2Via2l0IGNh
dGVnb3J5IHN0YXJ0cyBvdXQgcGFzc2luZy4gIEFsbCBmaWx0ZXIgcnVsZXMgYXJlIHRoZW4KLSAg
ICAgIGV2YWx1YXRlZCBsZWZ0IHRvIHJpZ2h0LCB3aXRoIGxhdGVyIHJ1bGVzIHRha2luZyBwcmVj
ZWRlbmNlLiAgRm9yCi0gICAgICBleGFtcGxlLCB0aGUgcnVsZSAiK2ZvbyIgcGFzc2VzIGFueSBj
YXRlZ29yeSB0aGF0IHN0YXJ0cyB3aXRoICJmb28iLAotICAgICAgYW5kICItZm9vIiBmYWlscyBh
bnkgc3VjaCBjYXRlZ29yeS4gIFRoZSBmaWx0ZXIgaW5wdXQgIi13aGl0ZXNwYWNlLAotICAgICAg
K3doaXRlc3BhY2UvYnJhY2VzIiBmYWlscyB0aGUgY2F0ZWdvcnkgIndoaXRlc3BhY2UvdGFiIiBh
bmQgcGFzc2VzCi0gICAgICAid2hpdGVzcGFjZS9icmFjZXMiLgotCi0gICAgICBFeGFtcGxlczog
LS1maWx0ZXI9LXdoaXRlc3BhY2UsK3doaXRlc3BhY2UvYnJhY2VzCi0gICAgICAgICAgICAgICAg
LS1maWx0ZXI9LXdoaXRlc3BhY2UsLXJ1bnRpbWUvcHJpbnRmLCtydW50aW1lL3ByaW50Zl9mb3Jt
YXQKLSAgICAgICAgICAgICAgICAtLWZpbHRlcj0tLCtidWlsZC9pbmNsdWRlX3doYXRfeW91X3Vz
ZQotCi0gICAgICBDYXRlZ29yeSBuYW1lcyBhcHBlYXIgaW4gZXJyb3IgbWVzc2FnZXMgaW4gYnJh
Y2tldHMsIGZvciBleGFtcGxlCi0gICAgICBbd2hpdGVzcGFjZS9pbmRlbnRdLiAgVG8gc2VlIGEg
bGlzdCBvZiBhbGwgY2F0ZWdvcmllcyBhdmFpbGFibGUgdG8KLSAgICAgICUocHJvZ3JhbV9uYW1l
KXMsIGFsb25nIHdpdGggd2hpY2ggYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCwgcGFzcwotICAgICAg
dGhlIGVtcHR5IGZpbHRlciBhcyBmb2xsb3dzOgotICAgICAgICAgLS1maWx0ZXI9Ci0iIiIgJSB7
J3Byb2dyYW1fbmFtZSc6IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pLAotICAgICAgICdk
ZWZhdWx0X3ZlcmJvc2l0eSc6IGRlZmF1bHRzLnZlcmJvc2l0eSwKLSAgICAgICAnZGVmYXVsdF9v
dXRwdXRfZm9ybWF0JzogZGVmYXVsdHMub3V0cHV0X2Zvcm1hdH0KLQotICAgIHJldHVybiB1c2Fn
ZQotCi0KLSMgVGhpcyBjbGFzcyBzaG91bGQgbm90IGhhdmUga25vd2xlZGdlIG9mIHRoZSBmbGFn
IGtleSBuYW1lcy4KLWNsYXNzIFByb2Nlc3Nvck9wdGlvbnMob2JqZWN0KToKLQotICAgICIiIkEg
Y29udGFpbmVyIHRvIHN0b3JlIG9wdGlvbnMgdG8gdXNlIHdoZW4gY2hlY2tpbmcgc3R5bGUuCi0K
LSAgICBBdHRyaWJ1dGVzOgotICAgICAgb3V0cHV0X2Zvcm1hdDogQSBzdHJpbmcgdGhhdCBpcyB0
aGUgb3V0cHV0IGZvcm1hdC4gVGhlIHN1cHBvcnRlZAotICAgICAgICAgICAgICAgICAgICAgb3V0
cHV0IGZvcm1hdHMgYXJlICJlbWFjcyIgd2hpY2ggZW1hY3MgY2FuIHBhcnNlCi0gICAgICAgICAg
ICAgICAgICAgICBhbmQgInZzNyIgd2hpY2ggTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gNyBjYW4g
cGFyc2UuCi0KLSAgICAgIHZlcmJvc2l0eTogQW4gaW50ZWdlciAxLTUgdGhhdCByZXN0cmljdHMg
b3V0cHV0IHRvIGVycm9ycyB3aXRoIGEKLSAgICAgICAgICAgICAgICAgY29uZmlkZW5jZSBzY29y
ZSBhdCBvciBhYm92ZSB0aGlzIHZhbHVlLgotICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBp
cyAxLCB3aGljaCBkaXNwbGF5cyBhbGwgZXJyb3JzLgotCi0gICAgICBmaWx0ZXJfcnVsZXM6IEEg
bGlzdCBvZiBzdHJpbmdzIHRoYXQgYXJlIGJvb2xlYW4gZmlsdGVyIHJ1bGVzIHVzZWQKLSAgICAg
ICAgICAgICAgICAgICAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBzdHlsZSBjYXRlZ29yeSBzaG91
bGQgYmUgY2hlY2tlZC4KLSAgICAgICAgICAgICAgICAgICAgRWFjaCBzdHJpbmcgc2hvdWxkIHN0
YXJ0IHdpdGggKyBvciAtLiBBbiBleGFtcGxlCi0gICAgICAgICAgICAgICAgICAgIHN0cmluZyBp
cyAiK3doaXRlc3BhY2UvaW5kZW50Ii4gVGhlIGxpc3QgaW5jbHVkZXMgYW55Ci0gICAgICAgICAg
ICAgICAgICAgIHByZXBlbmRlZCBkZWZhdWx0IGZpbHRlciBydWxlcy4gVGhlIGRlZmF1bHQgaXMg
dGhlCi0gICAgICAgICAgICAgICAgICAgIGVtcHR5IGxpc3QsIHdoaWNoIGluY2x1ZGVzIGFsbCBj
YXRlZ29yaWVzLgotCi0gICAgICBnaXRfY29tbWl0OiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhl
IGdpdCBjb21taXQgdG8gY2hlY2suCi0gICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyBO
b25lLgotCi0gICAgICBleHRyYV9mbGFnX3ZhbHVlczogQSBzdHJpbmctc3RyaW5nIGRpY3Rpb25h
cnkgb2YgYWxsIGZsYWcga2V5LXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgcGFpcnMg
dGhhdCBhcmUgbm90IG90aGVyd2lzZSByZXByZXNlbnRlZCBieSB0aGlzCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgY2xhc3MuIFRoZSBkZWZhdWx0IGlzIHRoZSBlbXB0eSBkaWN0aW9uYXJ5Lgot
ICAgICIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG91dHB1dF9mb3JtYXQsIHZlcmJvc2l0
eT0xLCBmaWx0ZXJfcnVsZXM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgZ2l0X2NvbW1pdD1Ob25l
LCBleHRyYV9mbGFnX3ZhbHVlcz1Ob25lKToKLSAgICAgICAgaWYgZmlsdGVyX3J1bGVzIGlzIE5v
bmU6Ci0gICAgICAgICAgICBmaWx0ZXJfcnVsZXMgPSBbXQotICAgICAgICBpZiBleHRyYV9mbGFn
X3ZhbHVlcyBpcyBOb25lOgotICAgICAgICAgICAgZXh0cmFfZmxhZ192YWx1ZXMgPSB7fQotCi0g
ICAgICAgIHNlbGYub3V0cHV0X2Zvcm1hdCA9IG91dHB1dF9mb3JtYXQKLSAgICAgICAgc2VsZi52
ZXJib3NpdHkgPSB2ZXJib3NpdHkKLSAgICAgICAgc2VsZi5maWx0ZXJfcnVsZXMgPSBmaWx0ZXJf
cnVsZXMKLSAgICAgICAgc2VsZi5naXRfY29tbWl0ID0gZ2l0X2NvbW1pdAotICAgICAgICBzZWxm
LmV4dHJhX2ZsYWdfdmFsdWVzID0gZXh0cmFfZmxhZ192YWx1ZXMKLQotCi0jIEZJWE1FOiBFbGlt
aW5hdGUgdGhlIG5lZWQgZm9yIHRoaXMgZnVuY3Rpb24uCi0jICAgICAgICBPcHRpb25zIHNob3Vs
ZCBiZSBwYXNzZWQgaW50byBwcm9jZXNzX2ZpbGUgaW5zdGVhZC4KLWRlZiBzZXRfb3B0aW9ucyhv
cHRpb25zKToKLSAgICAiIiJJbml0aWFsaXplIGdsb2JhbCBfQ3BwU3R5bGVTdGF0ZSBpbnN0YW5j
ZS4KLQotICAgIFRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIHByb2Nlc3Nf
ZmlsZS4KLQotICAgIEFyZ3M6Ci0gICAgICBvcHRpb25zOiBBIFByb2Nlc3Nvck9wdGlvbnMgaW5z
dGFuY2UuCi0gICAgIiIiCi0gICAgY3BwX3N0eWxlLl9zZXRfb3V0cHV0X2Zvcm1hdChvcHRpb25z
Lm91dHB1dF9mb3JtYXQpCi0gICAgY3BwX3N0eWxlLl9zZXRfdmVyYm9zZV9sZXZlbChvcHRpb25z
LnZlcmJvc2l0eSkKLSAgICBjcHBfc3R5bGUuX3NldF9maWx0ZXJzKG9wdGlvbnMuZmlsdGVyX3J1
bGVzKQotCi0KLSMgVGhpcyBjbGFzcyBzaG91bGQgbm90IGhhdmUga25vd2xlZGdlIG9mIHRoZSBm
bGFnIGtleSBuYW1lcy4KLWNsYXNzIEFyZ3VtZW50RGVmYXVsdHMob2JqZWN0KToKLQotICAgICIi
IkEgY29udGFpbmVyIHRvIHN0b3JlIGRlZmF1bHQgYXJndW1lbnQgdmFsdWVzLgotCi0gICAgQXR0
cmlidXRlczoKLSAgICAgIG91dHB1dF9mb3JtYXQ6IEEgc3RyaW5nIHRoYXQgaXMgdGhlIGRlZmF1
bHQgb3V0cHV0IGZvcm1hdC4KLSAgICAgIHZlcmJvc2l0eTogQW4gaW50ZWdlciB0aGF0IGlzIHRo
ZSBkZWZhdWx0IHZlcmJvc2l0eSBsZXZlbC4KLSAgICAgIGZpbHRlcl9ydWxlczogQSBsaXN0IG9m
IHN0cmluZ3MgdGhhdCBhcmUgYm9vbGVhbiBmaWx0ZXIgcnVsZXMKLSAgICAgICAgICAgICAgICAg
ICAgdG8gcHJlcGVuZCB0byBhbnkgdXNlci1zcGVjaWZpZWQgcnVsZXMuCi0KLSAgICAiIiIKLQot
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZWZhdWx0X291dHB1dF9mb3JtYXQsIGRlZmF1bHRfdmVy
Ym9zaXR5LAotICAgICAgICAgICAgICAgICBkZWZhdWx0X2ZpbHRlcl9ydWxlcyk6Ci0gICAgICAg
IHNlbGYub3V0cHV0X2Zvcm1hdCA9IGRlZmF1bHRfb3V0cHV0X2Zvcm1hdAotICAgICAgICBzZWxm
LnZlcmJvc2l0eSA9IGRlZmF1bHRfdmVyYm9zaXR5Ci0gICAgICAgIHNlbGYuZmlsdGVyX3J1bGVz
ID0gZGVmYXVsdF9maWx0ZXJfcnVsZXMKLQotCi1jbGFzcyBBcmd1bWVudFByaW50ZXIob2JqZWN0
KToKLQotICAgICIiIlN1cHBvcnRzIHRoZSBwcmludGluZyBvZiBjaGVjay13ZWJraXQtc3R5bGUg
Y29tbWFuZCBhcmd1bWVudHMuIiIiCi0KLSAgICBkZWYgX2ZsYWdfcGFpcl90b19zdHJpbmcoc2Vs
ZiwgZmxhZ19rZXksIGZsYWdfdmFsdWUpOgotICAgICAgICByZXR1cm4gJy0tJShrZXkpcz0lKHZh
bClzJyAlIHsna2V5JzogZmxhZ19rZXksICd2YWwnOiBmbGFnX3ZhbHVlIH0KLQotICAgIGRlZiB0
b19mbGFnX3N0cmluZyhzZWxmLCBvcHRpb25zKToKLSAgICAgICAgIiIiUmV0dXJuIGEgZmxhZyBz
dHJpbmcgeWllbGRpbmcgdGhlIGdpdmVuIFByb2Nlc3Nvck9wdGlvbnMgaW5zdGFuY2UuCi0KLSAg
ICAgICAgVGhpcyBtZXRob2Qgb3JkZXJzIHRoZSBmbGFnIHZhbHVlcyBhbHBoYWJldGljYWxseSBi
eSB0aGUgZmxhZyBrZXkuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICBvcHRpb25zOiBBIFBy
b2Nlc3Nvck9wdGlvbnMgaW5zdGFuY2UuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIGZsYWdzID0g
b3B0aW9ucy5leHRyYV9mbGFnX3ZhbHVlcy5jb3B5KCkKLQotICAgICAgICBmbGFnc1snb3V0cHV0
J10gPSBvcHRpb25zLm91dHB1dF9mb3JtYXQKLSAgICAgICAgZmxhZ3NbJ3ZlcmJvc2UnXSA9IG9w
dGlvbnMudmVyYm9zaXR5Ci0gICAgICAgIGlmIG9wdGlvbnMuZmlsdGVyX3J1bGVzOgotICAgICAg
ICAgICAgZmxhZ3NbJ2ZpbHRlciddID0gJywnLmpvaW4ob3B0aW9ucy5maWx0ZXJfcnVsZXMpCi0g
ICAgICAgIGlmIG9wdGlvbnMuZ2l0X2NvbW1pdDoKLSAgICAgICAgICAgIGZsYWdzWydnaXQtY29t
bWl0J10gPSBvcHRpb25zLmdpdF9jb21taXQKLQotICAgICAgICBmbGFnX3N0cmluZyA9ICcnCi0g
ICAgICAgICMgQWxwaGFiZXRpemluZyBsZXRzIHVzIHVuaXQgdGVzdCB0aGlzIG1ldGhvZC4KLSAg
ICAgICAgZm9yIGtleSBpbiBzb3J0ZWQoZmxhZ3Mua2V5cygpKToKLSAgICAgICAgICAgIGZsYWdf
c3RyaW5nICs9IHNlbGYuX2ZsYWdfcGFpcl90b19zdHJpbmcoa2V5LCBmbGFnc1trZXldKSArICcg
JwotCi0gICAgICAgIHJldHVybiBmbGFnX3N0cmluZy5zdHJpcCgpCi0KLQotY2xhc3MgQXJndW1l
bnRQYXJzZXIob2JqZWN0KToKLQotICAgICIiIlN1cHBvcnRzIHRoZSBwYXJzaW5nIG9mIGNoZWNr
LXdlYmtpdC1zdHlsZSBjb21tYW5kIGFyZ3VtZW50cy4KLQotICAgIEF0dHJpYnV0ZXM6Ci0gICAg
ICBkZWZhdWx0czogQW4gQXJndW1lbnREZWZhdWx0cyBpbnN0YW5jZS4KLSAgICAgIGNyZWF0ZV91
c2FnZTogQSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYW4gQXJndW1lbnREZWZhdWx0cyBpbnN0YW5j
ZQotICAgICAgICAgICAgICAgICAgICBhbmQgcmV0dXJucyBhIHN0cmluZyBvZiB1c2FnZSBpbnN0
cnVjdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgZGVmYXVsdHMgdG8gdGhlIGZ1bmN0
aW9uIHVzZWQgdG8gZ2VuZXJhdGUgdGhlCi0gICAgICAgICAgICAgICAgICAgIHVzYWdlIHN0cmlu
ZyBmb3IgY2hlY2std2Via2l0LXN0eWxlLgotICAgICAgZG9jX3ByaW50OiBBIGZ1bmN0aW9uIHRo
YXQgYWNjZXB0cyBhIHN0cmluZyBwYXJhbWV0ZXIgYW5kIHRoYXQgaXMKLSAgICAgICAgICAgICAg
ICAgY2FsbGVkIHRvIGRpc3BsYXkgaGVscCBtZXNzYWdlcy4gVGhpcyBkZWZhdWx0cyB0bwotICAg
ICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCkuCi0KLSAgICAiIiIKLQotICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBhcmd1bWVudF9kZWZhdWx0cywgY3JlYXRlX3VzYWdlPU5vbmUsIGRvY19w
cmludD1Ob25lKToKLSAgICAgICAgaWYgY3JlYXRlX3VzYWdlIGlzIE5vbmU6Ci0gICAgICAgICAg
ICBjcmVhdGVfdXNhZ2UgPSBfY3JlYXRlX3VzYWdlCi0gICAgICAgIGlmIGRvY19wcmludCBpcyBO
b25lOgotICAgICAgICAgICAgZG9jX3ByaW50ID0gc3lzLnN0ZGVyci53cml0ZQotCi0gICAgICAg
IHNlbGYuZGVmYXVsdHMgPSBhcmd1bWVudF9kZWZhdWx0cwotICAgICAgICBzZWxmLmNyZWF0ZV91
c2FnZSA9IGNyZWF0ZV91c2FnZQotICAgICAgICBzZWxmLmRvY19wcmludCA9IGRvY19wcmludAot
Ci0gICAgZGVmIF9leGl0X3dpdGhfdXNhZ2Uoc2VsZiwgZXJyb3JfbWVzc2FnZT0nJyk6Ci0gICAg
ICAgICIiIkV4aXQgYW5kIHByaW50IGEgdXNhZ2Ugc3RyaW5nIHdpdGggYW4gb3B0aW9uYWwgZXJy
b3IgbWVzc2FnZS4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgIGVycm9yX21lc3NhZ2U6IEEg
c3RyaW5nIHRoYXQgaXMgYW4gZXJyb3IgbWVzc2FnZSB0byBwcmludC4KLSAgICAgICAgIiIiCi0g
ICAgICAgIHVzYWdlID0gc2VsZi5jcmVhdGVfdXNhZ2Uoc2VsZi5kZWZhdWx0cykKLSAgICAgICAg
c2VsZi5kb2NfcHJpbnQodXNhZ2UpCi0gICAgICAgIGlmIGVycm9yX21lc3NhZ2U6Ci0gICAgICAg
ICAgICBzeXMuZXhpdCgnXG5GQVRBTCBFUlJPUjogJyArIGVycm9yX21lc3NhZ2UpCi0gICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgZGVmIF9leGl0X3dpdGhfY2F0
ZWdvcmllcyhzZWxmKToKLSAgICAgICAgIiIiRXhpdCBhbmQgcHJpbnQgdGhlIHN0eWxlIGNhdGVn
b3JpZXMgYW5kIGRlZmF1bHQgZmlsdGVyIHJ1bGVzLiIiIgotICAgICAgICBzZWxmLmRvY19wcmlu
dCgnXG5BbGwgY2F0ZWdvcmllczpcbicpCi0gICAgICAgIGZvciBjYXRlZ29yeSBpbiBzb3J0ZWQo
U1RZTEVfQ0FURUdPUklFUyk6Ci0gICAgICAgICAgICBzZWxmLmRvY19wcmludCgnICAgICcgKyBj
YXRlZ29yeSArICdcbicpCi0KLSAgICAgICAgc2VsZi5kb2NfcHJpbnQoJ1xuRGVmYXVsdCBmaWx0
ZXIgcnVsZXMqKjpcbicpCi0gICAgICAgIGZvciBmaWx0ZXJfcnVsZSBpbiBzb3J0ZWQoc2VsZi5k
ZWZhdWx0cy5maWx0ZXJfcnVsZXMpOgotICAgICAgICAgICAgc2VsZi5kb2NfcHJpbnQoJyAgICAn
ICsgZmlsdGVyX3J1bGUgKyAnXG4nKQotICAgICAgICBzZWxmLmRvY19wcmludCgnXG4qKlRoZSBj
b21tYW5kIGFsd2F5cyBldmFsdWF0ZXMgdGhlIGFib3ZlIHJ1bGVzLCAnCi0gICAgICAgICAgICAg
ICAgICAgICAgICdhbmQgYmVmb3JlIGFueSAtLWZpbHRlciBmbGFnLlxuXG4nKQotCi0gICAgICAg
IHN5cy5leGl0KDApCi0KLSAgICBkZWYgX3BhcnNlX2ZpbHRlcl9mbGFnKHNlbGYsIGZsYWdfdmFs
dWUpOgotICAgICAgICAiIiJQYXJzZSB0aGUgdmFsdWUgb2YgdGhlIC0tZmlsdGVyIGZsYWcuCi0K
LSAgICAgICAgVGhlc2UgZmlsdGVycyBhcmUgYXBwbGllZCB3aGVuIGRlY2lkaW5nIHdoZXRoZXIg
dG8gZW1pdCBhIGdpdmVuCi0gICAgICAgIGVycm9yIG1lc3NhZ2UuCi0KLSAgICAgICAgQXJnczoK
LSAgICAgICAgICBmbGFnX3ZhbHVlOiBBIHN0cmluZyBvZiBjb21tYS1zZXBhcmF0ZWQgZmlsdGVy
IHJ1bGVzLCBmb3IKLSAgICAgICAgICAgICAgICAgICAgICBleGFtcGxlICItd2hpdGVzcGFjZSwr
d2hpdGVzcGFjZS9pbmRlbnQiLgotCi0gICAgICAgICIiIgotICAgICAgICBmaWx0ZXJzID0gW10K
LSAgICAgICAgZm9yIHVuY2xlYW5lZF9maWx0ZXIgaW4gZmxhZ192YWx1ZS5zcGxpdCgnLCcpOgot
ICAgICAgICAgICAgZmlsdGVyID0gdW5jbGVhbmVkX2ZpbHRlci5zdHJpcCgpCi0gICAgICAgICAg
ICBpZiBub3QgZmlsdGVyOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBm
aWx0ZXJzLmFwcGVuZChmaWx0ZXIpCi0gICAgICAgIHJldHVybiBmaWx0ZXJzCi0KLSAgICBkZWYg
cGFyc2Uoc2VsZiwgYXJncywgZXh0cmFfZmxhZ3M9Tm9uZSk6Ci0gICAgICAgICIiIlBhcnNlIHRo
ZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIGNoZWNrLXdlYmtpdC1zdHlsZS4KLQotICAgICAg
ICBBcmdzOgotICAgICAgICAgIGFyZ3M6IEEgbGlzdCBvZiBjb21tYW5kLWxpbmUgYXJndW1lbnRz
IGFzIHJldHVybmVkIGJ5IHN5cy5hcmd2WzE6XS4KLSAgICAgICAgICBleHRyYV9mbGFnczogQSBs
aXN0IG9mIGZsYWdzIHdob3NlIHZhbHVlcyB3ZSB3YW50IHRvIGV4dHJhY3QsIGJ1dAotICAgICAg
ICAgICAgICAgICAgICAgICBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgUHJvY2Vzc29yT3B0aW9u
cyBjbGFzcy4KLSAgICAgICAgICAgICAgICAgICAgICAgQW4gZXhhbXBsZSBmbGFnICJuZXdfZmxh
Zz0iLiBUaGlzIGRlZmF1bHRzIHRvIHRoZQotICAgICAgICAgICAgICAgICAgICAgICBlbXB0eSBs
aXN0LgotCi0gICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgQSB0dXBsZSBvZiAoZmlsZW5hbWVz
LCBvcHRpb25zKQotCi0gICAgICAgICAgZmlsZW5hbWVzOiBUaGUgbGlzdCBvZiBmaWxlbmFtZXMg
dG8gY2hlY2suCi0gICAgICAgICAgb3B0aW9uczogQSBQcm9jZXNzb3JPcHRpb25zIGluc3RhbmNl
LgotCi0gICAgICAgICIiIgotICAgICAgICBpZiBleHRyYV9mbGFncyBpcyBOb25lOgotICAgICAg
ICAgICAgZXh0cmFfZmxhZ3MgPSBbXQotCi0gICAgICAgIG91dHB1dF9mb3JtYXQgPSBzZWxmLmRl
ZmF1bHRzLm91dHB1dF9mb3JtYXQKLSAgICAgICAgdmVyYm9zaXR5ID0gc2VsZi5kZWZhdWx0cy52
ZXJib3NpdHkKLSAgICAgICAgZmlsdGVyX3J1bGVzID0gc2VsZi5kZWZhdWx0cy5maWx0ZXJfcnVs
ZXMKLQotICAgICAgICAjIFRoZSBmbGFncyBhbHJlYWR5IHN1cHBvcnRlZCBieSB0aGUgUHJvY2Vz
c29yT3B0aW9ucyBjbGFzcy4KLSAgICAgICAgZmxhZ3MgPSBbJ2hlbHAnLCAnb3V0cHV0PScsICd2
ZXJib3NlPScsICdmaWx0ZXI9JywgJ2dpdC1jb21taXQ9J10KLQotICAgICAgICBmb3IgZXh0cmFf
ZmxhZyBpbiBleHRyYV9mbGFnczoKLSAgICAgICAgICAgIGlmIGV4dHJhX2ZsYWcgaW4gZmxhZ3M6
Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignRmxhZyBcJyUoZXh0cmFfZmxhZylz
IGlzIGR1cGxpY2F0ZWQgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29yIGFs
cmVhZHkgc3VwcG9ydGVkLicgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeydl
eHRyYV9mbGFnJzogZXh0cmFfZmxhZ30pCi0gICAgICAgICAgICBmbGFncy5hcHBlbmQoZXh0cmFf
ZmxhZykKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAob3B0cywgZmlsZW5hbWVzKSA9IGdl
dG9wdC5nZXRvcHQoYXJncywgJycsIGZsYWdzKQotICAgICAgICBleGNlcHQgZ2V0b3B0LkdldG9w
dEVycm9yOgotICAgICAgICAgICAgIyBGSVhNRTogU2V0dGxlIG9uIGFuIGVycm9yIGhhbmRsaW5n
IGFwcHJvYWNoOiBjb21lIHVwCi0gICAgICAgICAgICAjICAgICAgICB3aXRoIGEgY29uc2lzdGVu
dCBndWlkZWxpbmUgYXMgdG8gd2hlbiBhbmQgd2hldGhlcgotICAgICAgICAgICAgIyAgICAgICAg
YSBWYWx1ZUVycm9yIHNob3VsZCBiZSByYWlzZWQgdmVyc3VzIGNhbGxpbmcKLSAgICAgICAgICAg
ICMgICAgICAgIHN5cy5leGl0IHdoZW4gbmVlZGluZyB0byBpbnRlcnJ1cHQgZXhlY3V0aW9uLgot
ICAgICAgICAgICAgc2VsZi5fZXhpdF93aXRoX3VzYWdlKCdJbnZhbGlkIGFyZ3VtZW50cy4nKQot
Ci0gICAgICAgIGV4dHJhX2ZsYWdfdmFsdWVzID0ge30KLSAgICAgICAgZ2l0X2NvbW1pdCA9IE5v
bmUKLQotICAgICAgICBmb3IgKG9wdCwgdmFsKSBpbiBvcHRzOgotICAgICAgICAgICAgaWYgb3B0
ID09ICctLWhlbHAnOgotICAgICAgICAgICAgICAgIHNlbGYuX2V4aXRfd2l0aF91c2FnZSgpCi0g
ICAgICAgICAgICBlbGlmIG9wdCA9PSAnLS1vdXRwdXQnOgotICAgICAgICAgICAgICAgIG91dHB1
dF9mb3JtYXQgPSB2YWwKLSAgICAgICAgICAgIGVsaWYgb3B0ID09ICctLXZlcmJvc2UnOgotICAg
ICAgICAgICAgICAgIHZlcmJvc2l0eSA9IHZhbAotICAgICAgICAgICAgZWxpZiBvcHQgPT0gJy0t
Z2l0LWNvbW1pdCc6Ci0gICAgICAgICAgICAgICAgZ2l0X2NvbW1pdCA9IHZhbAotICAgICAgICAg
ICAgZWxpZiBvcHQgPT0gJy0tZmlsdGVyJzoKLSAgICAgICAgICAgICAgICBpZiBub3QgdmFsOgot
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9leGl0X3dpdGhfY2F0ZWdvcmllcygpCi0gICAgICAg
ICAgICAgICAgIyBQcmVwZW5kIHRoZSBkZWZhdWx0cy4KLSAgICAgICAgICAgICAgICBmaWx0ZXJf
cnVsZXMgPSBmaWx0ZXJfcnVsZXMgKyBzZWxmLl9wYXJzZV9maWx0ZXJfZmxhZyh2YWwpCi0gICAg
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGV4dHJhX2ZsYWdfdmFsdWVzW29wdF0gPSB2
YWwKLQotICAgICAgICAjIENoZWNrIHZhbGlkaXR5IG9mIHJlc3VsdGluZyB2YWx1ZXMuCi0gICAg
ICAgIGlmIGZpbGVuYW1lcyBhbmQgKGdpdF9jb21taXQgIT0gTm9uZSk6Ci0gICAgICAgICAgICBz
ZWxmLl9leGl0X3dpdGhfdXNhZ2UoJ0l0IGlzIG5vdCBwb3NzaWJsZSB0byBjaGVjayBmaWxlcyBh
bmQgYSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NwZWNpZmljIGNvbW1p
dCBhdCB0aGUgc2FtZSB0aW1lLicpCi0KLSAgICAgICAgaWYgb3V0cHV0X2Zvcm1hdCBub3QgaW4g
KCdlbWFjcycsICd2czcnKToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQg
LS1vdXRwdXQgdmFsdWUgIiVzIjogVGhlIG9ubHkgJwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnYWxsb3dlZCBvdXRwdXQgZm9ybWF0cyBhcmUgZW1hY3MgYW5kIHZzNy4nICUKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Zvcm1hdCkKLQotICAgICAgICB2ZXJib3Np
dHkgPSBpbnQodmVyYm9zaXR5KQotICAgICAgICBpZiAoKHZlcmJvc2l0eSA8IDEpIG9yICh2ZXJi
b3NpdHkgPiA1KSk6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIC0tdmVy
Ym9zZSB2YWx1ZSAlczogdmFsdWUgbXVzdCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdiZSBiZXR3ZWVuIDEtNS4nICUgdmVyYm9zaXR5KQotCi0gICAgICAgIGZvciBydWxlIGluIGZp
bHRlcl9ydWxlczoKLSAgICAgICAgICAgIGlmIG5vdCAocnVsZS5zdGFydHN3aXRoKCcrJykgb3Ig
cnVsZS5zdGFydHN3aXRoKCctJykpOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
J0ludmFsaWQgZmlsdGVyIHJ1bGUgIiVzIjogZXZlcnkgcnVsZSAnCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAncnVsZSBpbiB0aGUgLS1maWx0ZXIgZmxhZyBtdXN0IHN0YXJ0ICcK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoICsgb3IgLS4nICUgcnVsZSkK
LQotICAgICAgICBvcHRpb25zID0gUHJvY2Vzc29yT3B0aW9ucyhvdXRwdXRfZm9ybWF0LCB2ZXJi
b3NpdHksIGZpbHRlcl9ydWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2l0X2NvbW1pdCwgZXh0cmFfZmxhZ192YWx1ZXMpCi0KLSAgICAgICAgcmV0dXJuIChmaWxlbmFt
ZXMsIG9wdGlvbnMpCi0KLQotZGVmIHByb2Nlc3NfZmlsZShmaWxlbmFtZSk6Ci0gICAgIiIiQ2hl
Y2tzIHN0eWxlIGZvciB0aGUgc3BlY2lmaWVkIGZpbGUuCi0KLSAgICBJZiB0aGUgc3BlY2lmaWVk
IGZpbGVuYW1lIGlzICctJywgYXBwbGllcyBjcHBfc3R5bGUgdG8gdGhlIHN0YW5kYXJkIGlucHV0
LgotICAgICIiIgotICAgIGlmIGNwcF9zdHlsZS5jYW5faGFuZGxlKGZpbGVuYW1lKSBvciBmaWxl
bmFtZSA9PSAnLSc6Ci0gICAgICAgIGNwcF9zdHlsZS5wcm9jZXNzX2ZpbGUoZmlsZW5hbWUpCi0g
ICAgZWxpZiB0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoZmlsZW5hbWUpOgotICAgICAgICB0ZXh0X3N0
eWxlLnByb2Nlc3NfZmlsZShmaWxlbmFtZSkKLQotCi1kZWYgcHJvY2Vzc19wYXRjaChwYXRjaF9z
dHJpbmcpOgotICAgICIiIkRvZXMgbGludCBvbiBhIHNpbmdsZSBwYXRjaC4KLQotICAgIEFyZ3M6
Ci0gICAgICBwYXRjaF9zdHJpbmc6IEEgc3RyaW5nIG9mIGEgcGF0Y2guCi0gICAgIiIiCi0gICAg
cGF0Y2ggPSBEaWZmUGFyc2VyKHBhdGNoX3N0cmluZy5zcGxpdGxpbmVzKCkpCi0gICAgZm9yIGZp
bGVuYW1lLCBkaWZmIGluIHBhdGNoLmZpbGVzLml0ZXJpdGVtcygpOgotICAgICAgICBmaWxlX2V4
dGVuc2lvbiA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzFdCi0gICAgICAgIGxpbmVfbnVt
YmVycyA9IHNldCgpCi0KLSAgICAgICAgZGVmIGVycm9yX2Zvcl9wYXRjaChmaWxlbmFtZSwgbGlu
ZV9udW1iZXIsIGNhdGVnb3J5LCBjb25maWRlbmNlLCBtZXNzYWdlKToKLSAgICAgICAgICAgICIi
IldyYXBwZXIgZnVuY3Rpb24gb2YgY3BwX3N0eWxlLmVycm9yIGZvciBwYXRjaGVzLgotCi0gICAg
ICAgICAgICBUaGlzIGZ1bmN0aW9uIG91dHB1dHMgZXJyb3JzIG9ubHkgaWYgdGhlIGxpbmUgbnVt
YmVyCi0gICAgICAgICAgICBjb3JyZXNwb25kcyB0byBsaW5lcyB3aGljaCBhcmUgbW9kaWZpZWQg
b3IgYWRkZWQuCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgICAgIGlmIG5vdCBsaW5lX251bWJl
cnM6Ci0gICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZGlmZi5saW5lczoKLSAgICAgICAgICAg
ICAgICAgICAgIyBXaGVuIGRlbGV0ZWQgbGluZSBpcyBub3Qgc2V0LCBpdCBtZWFucyB0aGF0Ci0g
ICAgICAgICAgICAgICAgICAgICMgdGhlIGxpbmUgaXMgbmV3bHkgYWRkZWQuCi0gICAgICAgICAg
ICAgICAgICAgIGlmIG5vdCBsaW5lWzBdOgotICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9u
dW1iZXJzLmFkZChsaW5lWzFdKQotCi0gICAgICAgICAgICBpZiBsaW5lX251bWJlciBpbiBsaW5l
X251bWJlcnM6Ci0gICAgICAgICAgICAgICAgY3BwX3N0eWxlLmVycm9yKGZpbGVuYW1lLCBsaW5l
X251bWJlciwgY2F0ZWdvcnksIGNvbmZpZGVuY2UsIG1lc3NhZ2UpCi0KLSAgICAgICAgaWYgY3Bw
X3N0eWxlLmNhbl9oYW5kbGUoZmlsZW5hbWUpOgotICAgICAgICAgICAgY3BwX3N0eWxlLnByb2Nl
c3NfZmlsZShmaWxlbmFtZSwgZXJyb3I9ZXJyb3JfZm9yX3BhdGNoKQotICAgICAgICBlbGlmIHRl
eHRfc3R5bGUuY2FuX2hhbmRsZShmaWxlbmFtZSk6Ci0gICAgICAgICAgICB0ZXh0X3N0eWxlLnBy
b2Nlc3NfZmlsZShmaWxlbmFtZSwgZXJyb3I9ZXJyb3JfZm9yX3BhdGNoKQotCi0KLWRlZiBlcnJv
cl9jb3VudCgpOgotICAgICIiIlJldHVybnMgdGhlIHRvdGFsIGVycm9yIGNvdW50LiIiIgotICAg
IHJldHVybiBjcHBfc3R5bGUuZXJyb3JfY291bnQoKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9zdHlsZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA1Mjg0OSkKKysrIFdl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGVfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMjE1ICswLDAgQEAKLSMhL3Vzci9iaW4vcHl0aG9uCi0jIC0qLSBjb2Rpbmc6IHV0
Zi04OyAtKi0KLSMKLSMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLgotIyBDb3B5
cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmln
aHQgKEMpIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNocmlzLmplcmRvbmVrQGdtYWlsLmNvbSkKLSMK
LSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0j
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0j
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0j
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLSIiIlVuaXQgdGVzdHMgZm9yIHN0eWxlLnB5LiIiIgotCi1pbXBvcnQg
dW5pdHRlc3QKLQotaW1wb3J0IHN0eWxlCi0KLQotY2xhc3MgRGVmYXVsdEFyZ3VtZW50c1Rlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgIiIiVGVzdHMgdmFsaWRpdHkgb2YgZGVmYXVsdCBh
cmd1bWVudHMgdXNlZCBieSBjaGVjay13ZWJraXQtc3R5bGUuIiIiCi0KLSAgICBkZWYgdGVzdF9m
aWx0ZXJfcnVsZXMoc2VsZik6Ci0gICAgICAgIGFscmVhZHlfc2VlbiA9IFtdCi0gICAgICAgIGZv
ciBydWxlIGluIHN0eWxlLldFQktJVF9GSUxURVJfUlVMRVM6Ci0gICAgICAgICAgICAjIEFsbCBj
YXRlZ29yaWVzIGFyZSBvbiBieSBkZWZhdWx0LCBzbyBkZWZhdWx0cyBzaG91bGQKLSAgICAgICAg
ICAgICMgYmVnaW4gd2l0aCAtLgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1bGUuc3Rh
cnRzd2l0aCgnLScpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1bGVbMTpdIGluIHN0
eWxlLlNUWUxFX0NBVEVHT1JJRVMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJ1bGUg
aW4gYWxyZWFkeV9zZWVuKQotICAgICAgICAgICAgYWxyZWFkeV9zZWVuLmFwcGVuZChydWxlKQot
Ci0gICAgZGVmIHRlc3RfZGVmYXVsdHMoc2VsZik6Ci0gICAgICAgICIiIkNoZWNrIHRoYXQgZGVm
YXVsdCBhcmd1bWVudHMgYXJlIHZhbGlkLiIiIgotICAgICAgICBkZWZhdWx0cyA9IHN0eWxlLkFy
Z3VtZW50RGVmYXVsdHMoc3R5bGUuREVGQVVMVF9PVVRQVVRfRk9STUFULAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUuREVGQVVMVF9WRVJCT1NJVFksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5XRUJLSVRfRklM
VEVSX1JVTEVTKQotICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQgdG8gY2FsbCBw
YXJzZSgpIHRvIGRldGVybWluZQotICAgICAgICAjICAgICAgICB3aGV0aGVyIHRoZSBkZWZhdWx0
IGFyZ3VtZW50cyBhcmUgdmFsaWQuCi0gICAgICAgIHBhcnNlciA9IHN0eWxlLkFyZ3VtZW50UGFy
c2VyKGRlZmF1bHRzKQotICAgICAgICAjIE5vIG5lZWQgdG8gdGVzdCB0aGUgcmV0dXJuIHZhbHVl
IGhlcmUgc2luY2Ugd2UgdGVzdCBwYXJzZSgpCi0gICAgICAgICMgb24gdmFsaWQgYXJndW1lbnRz
IGVsc2V3aGVyZS4KLSAgICAgICAgcGFyc2VyLnBhcnNlKFtdKSAjIGFyZ3VtZW50cyB2YWxpZDog
bm8gZXJyb3Igb3IgU3lzdGVtRXhpdAotCi0KLWNsYXNzIEFyZ3VtZW50UHJpbnRlclRlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgotCi0gICAgIiIiVGVzdHMgdGhlIEFyZ3VtZW50UHJpbnRlciBjbGFz
cy4iIiIKLQotICAgIF9wcmludGVyID0gc3R5bGUuQXJndW1lbnRQcmludGVyKCkKLQotICAgIGRl
ZiBfY3JlYXRlX29wdGlvbnMoc2VsZiwgb3V0cHV0X2Zvcm1hdD0nZW1hY3MnLCB2ZXJib3NpdHk9
MywKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9ydWxlcz1bXSwgZ2l0X2NvbW1pdD1O
b25lLAotICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfZmxhZ192YWx1ZXM9e30pOgotICAg
ICAgICByZXR1cm4gc3R5bGUuUHJvY2Vzc29yT3B0aW9ucyhvdXRwdXRfZm9ybWF0LCB2ZXJib3Np
dHksIGZpbHRlcl9ydWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2l0X2NvbW1pdCwgZXh0cmFfZmxhZ192YWx1ZXMpCi0KLSAgICBkZWYgdGVzdF90b19mbGFnX3N0
cmluZyhzZWxmKToKLSAgICAgICAgb3B0aW9ucyA9IHNlbGYuX2NyZWF0ZV9vcHRpb25zKCd2czcn
LCA1LCBbJytmb28nLCAnLWJhciddLCAnZ2l0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsnYSc6IDAsICd6JzogMX0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KCctLWE9MCAtLWZpbHRlcj0rZm9vLC1iYXIgLS1naXQtY29tbWl0PWdpdCAnCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICctLW91dHB1dD12czcgLS12ZXJib3NlPTUgLS16PTEnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9wcmludGVyLnRvX2ZsYWdfc3RyaW5nKG9wdGlvbnMp
KQotCi0gICAgICAgICMgVGhpcyBpcyB0byBjaGVjayB0aGF0IC0tZmlsdGVyIGFuZCAtLWdpdC1j
b21taXQgZG8gbm90Ci0gICAgICAgICMgc2hvdyB1cCB3aGVuIG5vdCB1c2VyLXNwZWNpZmllZC4K
LSAgICAgICAgb3B0aW9ucyA9IHNlbGYuX2NyZWF0ZV9vcHRpb25zKCkKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoJy0tb3V0cHV0PWVtYWNzIC0tdmVyYm9zZT0zJywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fcHJpbnRlci50b19mbGFnX3N0cmluZyhvcHRpb25zKSkKLQotCi1j
bGFzcyBBcmd1bWVudFBhcnNlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgIiIiVGVz
dCB0aGUgQXJndW1lbnRQYXJzZXIgY2xhc3MuIiIiCi0KLSAgICBkZWYgX3BhcnNlKHNlbGYpOgot
ICAgICAgICAiIiJSZXR1cm4gYSBkZWZhdWx0IHBhcnNlKCkgZnVuY3Rpb24gZm9yIHRlc3Rpbmcu
IiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9jcmVhdGVfcGFyc2VyKCkucGFyc2UKLQotICAgIGRl
ZiBfY3JlYXRlX2RlZmF1bHRzKHNlbGYsIGRlZmF1bHRfb3V0cHV0X2Zvcm1hdD0ndnM3JywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3ZlcmJvc2l0eT0zLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHRfZmlsdGVyX3J1bGVzPVsnLScsICcrd2hpdGVzcGFjZSddKToK
LSAgICAgICAgIiIiIlJldHVybiBhIGRlZmF1bHQgQXJndW1lbnREZWZhdWx0cyBpbnN0YW5jZSBm
b3IgdGVzdGluZy4iIiIKLSAgICAgICAgcmV0dXJuIHN0eWxlLkFyZ3VtZW50RGVmYXVsdHMoZGVm
YXVsdF9vdXRwdXRfZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0X3ZlcmJvc2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdF9maWx0ZXJfcnVsZXMpCi0KLSAgICBkZWYgX2NyZWF0ZV9wYXJzZXIoc2VsZiwg
ZGVmYXVsdHM9Tm9uZSk6Ci0gICAgICAgICIiIiJSZXR1cm4gYW4gQXJndW1lbnRQYXJzZXIgaW5z
dGFuY2UgZm9yIHRlc3RpbmcuIiIiCi0gICAgICAgIGRlZiBjcmVhdGVfdXNhZ2UoX2RlZmF1bHRz
KToKLSAgICAgICAgICAgICIiIlJldHVybiBhIHVzYWdlIHN0cmluZyBmb3IgdGVzdGluZy4iIiIK
LSAgICAgICAgICAgIHJldHVybiAidXNhZ2UiCi0KLSAgICAgICAgZGVmIGRvY19wcmludChtZXNz
YWdlKToKLSAgICAgICAgICAgICMgV2UgZG8gbm90IHdhbnQgdGhlIHVzYWdlIHN0cmluZyBvciBz
dHlsZSBjYXRlZ29yaWVzCi0gICAgICAgICAgICAjIHRvIHByaW50IGR1cmluZyB1bml0IHRlc3Rz
LCBzbyBwcmludCBub3RoaW5nLgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgaWYgZGVm
YXVsdHMgaXMgTm9uZToKLSAgICAgICAgICAgIGRlZmF1bHRzID0gc2VsZi5fY3JlYXRlX2RlZmF1
bHRzKCkKLQotICAgICAgICByZXR1cm4gc3R5bGUuQXJndW1lbnRQYXJzZXIoZGVmYXVsdHMsIGNy
ZWF0ZV91c2FnZSwgZG9jX3ByaW50KQotCi0gICAgZGVmIHRlc3RfcGFyc2VfZG9jdW1lbnRhdGlv
bihzZWxmKToKLSAgICAgICAgcGFyc2UgPSBzZWxmLl9wYXJzZSgpCi0KLSAgICAgICAgIyBGSVhN
RTogVGVzdCBib3RoIHRoZSBwcmludGluZyBvZiB0aGUgdXNhZ2Ugc3RyaW5nIGFuZCB0aGUKLSAg
ICAgICAgIyAgICAgICAgZmlsdGVyIGNhdGVnb3JpZXMgaGVscC4KLQotICAgICAgICAjIFJlcXVl
c3QgdGhlIHVzYWdlIHN0cmluZy4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhp
dCwgcGFyc2UsIFsnLS1oZWxwJ10pCi0gICAgICAgICMgUmVxdWVzdCBkZWZhdWx0IGZpbHRlciBy
dWxlcyBhbmQgYXZhaWxhYmxlIHN0eWxlIGNhdGVnb3JpZXMuCi0gICAgICAgIHNlbGYuYXNzZXJ0
UmFpc2VzKFN5c3RlbUV4aXQsIHBhcnNlLCBbJy0tZmlsdGVyPSddKQotCi0gICAgZGVmIHRlc3Rf
cGFyc2VfYmFkX3ZhbHVlcyhzZWxmKToKLSAgICAgICAgcGFyc2UgPSBzZWxmLl9wYXJzZSgpCi0K
LSAgICAgICAgIyBQYXNzIGFuIHVuc3VwcG9ydGVkIGFyZ3VtZW50LgotICAgICAgICBzZWxmLmFz
c2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBwYXJzZSwgWyctLWJhZCddKQotCi0gICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBhcnNlLCBbJy0tdmVyYm9zZT1iYWQnXSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGFyc2UsIFsnLS12ZXJib3NlPTAnXSkK
LSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGFyc2UsIFsnLS12ZXJib3Nl
PTYnXSkKLSAgICAgICAgcGFyc2UoWyctLXZlcmJvc2U9MSddKSAjIHdvcmtzCi0gICAgICAgIHBh
cnNlKFsnLS12ZXJib3NlPTUnXSkgIyB3b3JrcwotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
KFZhbHVlRXJyb3IsIHBhcnNlLCBbJy0tb3V0cHV0PWJhZCddKQotICAgICAgICBwYXJzZShbJy0t
b3V0cHV0PXZzNyddKSAjIHdvcmtzCi0KLSAgICAgICAgIyBQYXNzIGEgZmlsdGVyIHJ1bGUgbm90
IGJlZ2lubmluZyB3aXRoICsgb3IgLS4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVF
cnJvciwgcGFyc2UsIFsnLS1maWx0ZXI9Zm9vJ10pCi0gICAgICAgIHBhcnNlKFsnLS1maWx0ZXI9
K2ZvbyddKSAjIHdvcmtzCi0gICAgICAgICMgUGFzcyBmaWxlcyBhbmQgZ2l0LWNvbW1pdCBhdCB0
aGUgc2FtZSB0aW1lLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBwYXJz
ZSwgWyctLWdpdC1jb21taXQ9JywgJ2ZpbGUudHh0J10pCi0gICAgICAgICMgUGFzcyBhbiBleHRy
YSBmbGFnIGFscmVhZHkgc3VwcG9ydGVkLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1
ZUVycm9yLCBwYXJzZSwgW10sIFsnZmlsdGVyPSddKQotICAgICAgICBwYXJzZShbXSwgWydleHRy
YT0nXSkgIyB3b3JrcwotICAgICAgICAjIFBhc3MgYW4gZXh0cmEgZmxhZyB3aXRoIHR5cG8uCi0g
ICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQsIHBhcnNlLCBbJy0tZXh0cmF0eXBv
PSddLCBbJ2V4dHJhPSddKQotICAgICAgICBwYXJzZShbJy0tZXh0cmE9J10sIFsnZXh0cmE9J10p
ICMgd29ya3MKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGFyc2UsIFtd
LCBbJ2V4dHJhPScsICdleHRyYT0nXSkKLQotCi0gICAgZGVmIHRlc3RfcGFyc2VfZGVmYXVsdF9h
cmd1bWVudHMoc2VsZik6Ci0gICAgICAgIHBhcnNlID0gc2VsZi5fcGFyc2UoKQotCi0gICAgICAg
IChmaWxlcywgb3B0aW9ucykgPSBwYXJzZShbXSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhmaWxlcywgW10pCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5vdXRwdXRf
Zm9ybWF0LCAndnM3JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy52ZXJib3Np
dHksIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wdGlvbnMuZmlsdGVyX3J1bGVzLCBb
Jy0nLCAnK3doaXRlc3BhY2UnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5n
aXRfY29tbWl0LCBOb25lKQotCi0gICAgZGVmIHRlc3RfcGFyc2VfZXhwbGljaXRfYXJndW1lbnRz
KHNlbGYpOgotICAgICAgICBwYXJzZSA9IHNlbGYuX3BhcnNlKCkKLQotICAgICAgICAjIFBhc3Mg
bm9uLWRlZmF1bHQgZXhwbGljaXQgdmFsdWVzLgotICAgICAgICAoZmlsZXMsIG9wdGlvbnMpID0g
cGFyc2UoWyctLW91dHB1dD1lbWFjcyddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRp
b25zLm91dHB1dF9mb3JtYXQsICdlbWFjcycpCi0gICAgICAgIChmaWxlcywgb3B0aW9ucykgPSBw
YXJzZShbJy0tdmVyYm9zZT00J10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wdGlvbnMu
dmVyYm9zaXR5LCA0KQotICAgICAgICAoZmlsZXMsIG9wdGlvbnMpID0gcGFyc2UoWyctLWdpdC1j
b21taXQ9Y29tbWl0J10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wdGlvbnMuZ2l0X2Nv
bW1pdCwgJ2NvbW1pdCcpCi0gICAgICAgIChmaWxlcywgb3B0aW9ucykgPSBwYXJzZShbJy0tZmls
dGVyPStmb28sLWJhciddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25zLmZpbHRl
cl9ydWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgWyctJywgJyt3aGl0ZXNwYWNlJywg
Jytmb28nLCAnLWJhciddKQotCi0gICAgICAgICMgUGFzcyBleHRyYSBmbGFnIHZhbHVlcy4KLSAg
ICAgICAgKGZpbGVzLCBvcHRpb25zKSA9IHBhcnNlKFsnLS1leHRyYSddLCBbJ2V4dHJhJ10pCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wdGlvbnMuZXh0cmFfZmxhZ192YWx1ZXMsIHsnLS1l
eHRyYSc6ICcnfSkKLSAgICAgICAgKGZpbGVzLCBvcHRpb25zKSA9IHBhcnNlKFsnLS1leHRyYT0n
XSwgWydleHRyYT0nXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5leHRyYV9m
bGFnX3ZhbHVlcywgeyctLWV4dHJhJzogJyd9KQotICAgICAgICAoZmlsZXMsIG9wdGlvbnMpID0g
cGFyc2UoWyctLWV4dHJhPXgnXSwgWydleHRyYT0nXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMob3B0aW9ucy5leHRyYV9mbGFnX3ZhbHVlcywgeyctLWV4dHJhJzogJ3gnfSkKLQotICAgIGRl
ZiB0ZXN0X3BhcnNlX2ZpbGVzKHNlbGYpOgotICAgICAgICBwYXJzZSA9IHNlbGYuX3BhcnNlKCkK
LQotICAgICAgICAoZmlsZXMsIG9wdGlvbnMpID0gcGFyc2UoWydmb28uY3BwJ10pCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKGZpbGVzLCBbJ2Zvby5jcHAnXSkKLQotICAgICAgICAjIFBhc3Mg
bXVsdGlwbGUgZmlsZXMuCi0gICAgICAgIChmaWxlcywgb3B0aW9ucykgPSBwYXJzZShbJy0tb3V0
cHV0PWVtYWNzJywgJ2Zvby5jcHAnLCAnYmFyLmNwcCddKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhmaWxlcywgWydmb28uY3BwJywgJ2Jhci5jcHAnXSkKLQotCi1pZiBfX25hbWVfXyA9PSAn
X19tYWluX18nOgotICAgIGltcG9ydCBzeXMKLQotICAgIHVuaXR0ZXN0Lm1haW4oKQpJbmRleDog
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXh0X3N0eWxlLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGV4dF9zdHlsZS5weQkocmV2aXNpb24gNTI4
NDkpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RleHRfc3R5bGUucHkJKHdvcmtp
bmcgY29weSkKQEAgLTEsNzggKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0j
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIkRvZXMgV2Vi
S2l0LWxpbnQgb24gdGV4dCBmaWxlcy4KLQotVGhpcyBtb2R1bGUgc2hhcmVzIGVycm9yIGNvdW50
LCBmaWx0ZXIgc2V0dGluZywgb3V0cHV0IHNldHRpbmcsIGV0Yy4gd2l0aCBjcHBfc3R5bGUuCi0i
IiIKLQotaW1wb3J0IGNvZGVjcwotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCBzeXMKLQotaW1wb3J0
IGNwcF9zdHlsZQotCi0KLWRlZiBwcm9jZXNzX2ZpbGVfZGF0YShmaWxlbmFtZSwgbGluZXMsIGVy
cm9yKToKLSAgICAiIiJQZXJmb3JtcyBsaW50IGNoZWNrIGZvciB0ZXh0IG9uIHRoZSBzcGVjaWZp
ZWQgbGluZXMuCi0KLSAgICBJdCByZXBvcnRzIGVycm9ycyB0byB0aGUgZ2l2ZW4gZXJyb3IgZnVu
Y3Rpb24uCi0gICAgIiIiCi0gICAgbGluZXMgPSAoWycvLyBhZGp1c3QgbGluZSBudW1iZXJzIHRv
IG1ha2UgdGhlIGZpcnN0IGxpbmUgMS4nXSArIGxpbmVzKQotCi0gICAgIyBGSVhNRTogc2hhcmUg
d2l0aCBjcHBfc3R5bGUuY2hlY2tfc3R5bGUoKQotICAgIGZvciBsaW5lX251bWJlciwgbGluZSBp
biBlbnVtZXJhdGUobGluZXMpOgotICAgICAgICBpZiAnXHQnIGluIGxpbmU6Ci0gICAgICAgICAg
ICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL3RhYicsIDUsICdMaW5l
IGNvbnRhaW5zIHRhYiBjaGFyYWN0ZXIuJykKLQotCi1kZWYgcHJvY2Vzc19maWxlKGZpbGVuYW1l
LCBlcnJvcj1jcHBfc3R5bGUuZXJyb3IpOgotICAgICIiIlBlcmZvcm1zIGxpbnQgY2hlY2sgZm9y
IHRleHQgb24gYSBzaW5nbGUgZmlsZS4iIiIKLSAgICBpZiAobm90IGNhbl9oYW5kbGUoZmlsZW5h
bWUpKToKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnSWdub3JpbmcgJXM7IG5vdCBhIHN1cHBv
cnRlZCBmaWxlXG4nICUgZmlsZW5hbWUpCi0gICAgICAgIHJldHVybgotCi0gICAgIyBGSVhNRTog
c2hhcmUgY29kZSB3aXRoIGNwcF9zdHlsZS5wcm9jZXNzX2ZpbGUoKS4KLSAgICB0cnk6Ci0gICAg
ICAgICMgRG8gbm90IHN1cHBvcnQgZm9yIGZpbGVuYW1lPSctJy4gY3BwX3N0eWxlIGhhbmRsZXMg
aXQuCi0gICAgICAgIGxpbmVzID0gY29kZWNzLm9wZW4oZmlsZW5hbWUsICdyJywgJ3V0ZjgnLCAn
cmVwbGFjZScpLnJlYWQoKS5zcGxpdCgnXG4nKQotICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAg
ICBzeXMuc3RkZXJyLndyaXRlKCJTa2lwcGluZyBpbnB1dCAnJXMnOiBDYW4ndCBvcGVuIGZvciBy
ZWFkaW5nXG4iICUgZmlsZW5hbWUpCi0gICAgICAgIHJldHVybgotICAgIHByb2Nlc3NfZmlsZV9k
YXRhKGZpbGVuYW1lLCBsaW5lcywgZXJyb3IpCi0KLQotZGVmIGNhbl9oYW5kbGUoZmlsZW5hbWUp
OgotICAgICIiIkNoZWNrcyBpZiB0aGlzIG1vZHVsZSBzdXBwb3J0cyB0aGUgc3BlY2lmaWVkIGZp
bGUgdHlwZS4KLQotICAgIEFyZ3M6Ci0gICAgICBmaWxlbmFtZTogQSBmaWxlbmFtZS4gSXQgbWF5
IGNvbnRhaW4gZGlyZWN0b3J5IG5hbWVzLgotICAgICIiIgotICAgIHJldHVybiAoIkNoYW5nZUxv
ZyIgaW4gZmlsZW5hbWUKLSAgICAgICAgICAgIG9yICJXZWJLaXRUb29scy9TY3JpcHRzLyIgaW4g
ZmlsZW5hbWUKLSAgICAgICAgICAgIG9yIG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzFdIGlu
ICgnLmNzcycsICcuaHRtbCcsICcuaWRsJywgJy5qcycsICcubW0nLCAnLnBocCcsICcucG0nLCAn
LnB5JywgJy50eHQnKSkgYW5kIG5vdCAiTGF5b3V0VGVzdHMvIiBpbiBmaWxlbmFtZQpJbmRleDog
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXh0X3N0eWxlX3VuaXR0ZXN0LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGV4dF9zdHlsZV91bml0dGVz
dC5weQkocmV2aXNpb24gNTI4NDkpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rl
eHRfc3R5bGVfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEyICswLDAgQEAKLSMh
L3Vzci9iaW4vcHl0aG9uCi0jIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0j
Ci0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiVW5pdCB0ZXN0IGZvciB0ZXh0
X3N0eWxlLnB5LiIiIgotCi1pbXBvcnQgdW5pdHRlc3QKLQotaW1wb3J0IHRleHRfc3R5bGUKLQot
Ci1jbGFzcyBUZXh0U3R5bGVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgIiIiVGVz
dENhc2UgZm9yIHRleHRfc3R5bGUucHkiIiIKLQotICAgIGRlZiBhc3NlcnROb0Vycm9yKHNlbGYs
IGxpbmVzKToKLSAgICAgICAgIiIiQXNzZXJ0cyB0aGF0IHRoZSBzcGVjaWZpZWQgbGluZXMgaGFz
IG5vIGVycm9ycy4iIiIKLSAgICAgICAgc2VsZi5oYWRfZXJyb3IgPSBGYWxzZQotCi0gICAgICAg
IGRlZiBlcnJvcl9mb3JfdGVzdChmaWxlbmFtZSwgbGluZV9udW1iZXIsIGNhdGVnb3J5LCBjb25m
aWRlbmNlLCBtZXNzYWdlKToKLSAgICAgICAgICAgICIiIlJlY29yZHMgaWYgYW4gZXJyb3Igb2Nj
dXJzLiIiIgotICAgICAgICAgICAgc2VsZi5oYWRfZXJyb3IgPSBUcnVlCi0KLSAgICAgICAgdGV4
dF9zdHlsZS5wcm9jZXNzX2ZpbGVfZGF0YSgnJywgbGluZXMsIGVycm9yX2Zvcl90ZXN0KQotICAg
ICAgICBzZWxmLmFzc2VydF8obm90IHNlbGYuaGFkX2Vycm9yLCAnJXMgc2hvdWxkIG5vdCBoYXZl
IGFueSBlcnJvcnMuJyAlIGxpbmVzKQotCi0gICAgZGVmIGFzc2VydEVycm9yKHNlbGYsIGxpbmVz
LCBleHBlY3RlZF9saW5lX251bWJlcik6Ci0gICAgICAgICIiIkFzc2VydHMgdGhhdCB0aGUgc3Bl
Y2lmaWVkIGxpbmVzIGhhcyBhbiBlcnJvci4iIiIKLSAgICAgICAgc2VsZi5oYWRfZXJyb3IgPSBG
YWxzZQotCi0gICAgICAgIGRlZiBlcnJvcl9mb3JfdGVzdChmaWxlbmFtZSwgbGluZV9udW1iZXIs
IGNhdGVnb3J5LCBjb25maWRlbmNlLCBtZXNzYWdlKToKLSAgICAgICAgICAgICIiIkNoZWNrcyBp
ZiB0aGUgZXhwZWN0ZWQgZXJyb3Igb2NjdXJzLiIiIgotICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoZXhwZWN0ZWRfbGluZV9udW1iZXIsIGxpbmVfbnVtYmVyKQotICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoJ3doaXRlc3BhY2UvdGFiJywgY2F0ZWdvcnkpCi0gICAgICAgICAgICBz
ZWxmLmhhZF9lcnJvciA9IFRydWUKLQotICAgICAgICB0ZXh0X3N0eWxlLnByb2Nlc3NfZmlsZV9k
YXRhKCcnLCBsaW5lcywgZXJyb3JfZm9yX3Rlc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxm
LmhhZF9lcnJvciwgJyVzIHNob3VsZCBoYXZlIGFuIGVycm9yIFt3aGl0ZXNwYWNlL3RhYl0uJyAl
IGxpbmVzKQotCi0KLSAgICBkZWYgdGVzdF9ub19lcnJvcihzZWxmKToKLSAgICAgICAgIiIiVGVz
dHMgZm9yIG5vIGVycm9yIGNhc2VzLiIiIgotICAgICAgICBzZWxmLmFzc2VydE5vRXJyb3IoWycn
XSkKLSAgICAgICAgc2VsZi5hc3NlcnROb0Vycm9yKFsnYWJjIGRlZicsICdnZ2cnXSkKLQotCi0g
ICAgZGVmIHRlc3RfZXJyb3Ioc2VsZik6Ci0gICAgICAgICIiIlRlc3RzIGZvciBlcnJvciBjYXNl
cy4iIiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcnJvcihbJzIwMDktMTItMTZcdEtlbnQgVGFtdXJh
XHQ8dGtlbnRAY2hyb21pdW0ub3JnPiddLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVycm9yKFsn
MjAwOS0xMi0xNiBLZW50IFRhbXVyYSA8dGtlbnRAY2hyb21pdW0ub3JnPicsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnXHRSZXZpZXdl
ZCBieSBOT0JPRFkuJ10sIDMpCi0KLQotICAgIGRlZiB0ZXN0X2Nhbl9oYW5kbGUoc2VsZik6Ci0g
ICAgICAgICIiIlRlc3RzIGZvciB0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoKS4iIiIKLSAgICAgICAg
c2VsZi5hc3NlcnRfKG5vdCB0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJycpKQotICAgICAgICBzZWxm
LmFzc2VydF8obm90IHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnLScpKQotICAgICAgICBzZWxmLmFz
c2VydF8odGV4dF9zdHlsZS5jYW5faGFuZGxlKCdDaGFuZ2VMb2cnKSkKLSAgICAgICAgc2VsZi5h
c3NlcnRfKHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnV2ViQ29yZS9DaGFuZ2VMb2cnKSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRfKHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnRm9vQ2hhbmdlTG9nLmJhaycp
KQotICAgICAgICBzZWxmLmFzc2VydF8odGV4dF9zdHlsZS5jYW5faGFuZGxlKCdXZWJLaXRUb29s
cy9TY3JpcHRzL2NoZWNrLXdlYmtpdD1zdHlsZScpKQotICAgICAgICBzZWxmLmFzc2VydF8odGV4
dF9zdHlsZS5jYW5faGFuZGxlKCdXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvdGV4dF9zdHls
ZS5weScpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IHRleHRfc3R5bGUuY2FuX2hhbmRsZSgn
V2ViS2l0VG9vbHMvU2NyaXB0cycpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0ZXh0X3N0eWxl
LmNhbl9oYW5kbGUoJ2Zvby5jc3MnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHRleHRfc3R5bGUu
Y2FuX2hhbmRsZSgnZm9vLmh0bWwnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHRleHRfc3R5bGUu
Y2FuX2hhbmRsZSgnZm9vLmlkbCcpKQotICAgICAgICBzZWxmLmFzc2VydF8odGV4dF9zdHlsZS5j
YW5faGFuZGxlKCdmb28uanMnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHRleHRfc3R5bGUuY2Fu
X2hhbmRsZSgnV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcycpKQotICAg
ICAgICBzZWxmLmFzc2VydF8odGV4dF9zdHlsZS5jYW5faGFuZGxlKCdmb28ubW0nKSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRfKHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLnBocCcpKQotICAgICAg
ICBzZWxmLmFzc2VydF8odGV4dF9zdHlsZS5jYW5faGFuZGxlKCdmb28ucG0nKSkKLSAgICAgICAg
c2VsZi5hc3NlcnRfKHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLnB5JykpCi0gICAgICAgIHNl
bGYuYXNzZXJ0Xyh0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ2Zvby50eHQnKSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfKG5vdCB0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ2Zvby5jJykpCi0gICAgICAgIHNl
bGYuYXNzZXJ0Xyhub3QgdGV4dF9zdHlsZS5jYW5faGFuZGxlKCdmb28uYycpKQotICAgICAgICBz
ZWxmLmFzc2VydF8obm90IHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLmMnKSkKLSAgICAgICAg
c2VsZi5hc3NlcnRfKG5vdCB0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ2Zvby5wbmcnKSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRfKG5vdCB0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ2Zvby5jL2Jhci5wbmcn
KSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ1dlYktp
dC9FbmdsaXNoLmxwcm9qL0xvY2FsaXphYmxlLnN0cmluZ3MnKSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRfKG5vdCB0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ01ha2VmaWxlJykpCi0gICAgICAgIHNlbGYu
YXNzZXJ0Xyhub3QgdGV4dF9zdHlsZS5jYW5faGFuZGxlKCdXZWJDb3JlL0FuZHJvaWQubWsnKSkK
LSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ0xheW91dFRl
c3RzL2luc3BlY3Rvci9jb25zb2xlLXRlc3RzLmpzJykpCi0KLQotaWYgX19uYW1lX18gPT0gJ19f
bWFpbl9fJzoKLSAgICB1bml0dGVzdC5tYWluKCkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9fX2luaXRfXy5weQkocmV2aXNpb24gMCkKKysrIFdlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvX19pbml0X18ucHkJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNiBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9y
eSBmb3IgbW9kdWxlIGZpbGVzCisKK2ltcG9ydCBvcworCisjIEFkZCBjb250YWluaW5nICJ3ZWJr
aXRweSIgcGFja2FnZSBkaXJlY3RvcnkgdG8gc2VhcmNoIHBhdGguCitfX3BhdGhfXy5hcHBlbmQo
b3MucGF0aC5qb2luKF9fcGF0aF9fWzBdLCAiLi4iKSkKSW5kZXg6IFdlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkJKHJldmlzaW9uIDUyODQ5KQkoZnJvbSBX
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlLnB5OjUyODQ5KQorKysgV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTUyIEBACisjIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNocmlzLmpl
cmRvbmVrQGdtYWlsLmNvbSkKKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0
OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkZyb250IGVuZCBvZiBz
b21lIHN0eWxlLWNoZWNrZXIgbW9kdWxlcy4iIiIKKworIyBGSVhNRTogTW92ZSBtb3JlIGNvZGUg
ZnJvbSBjcHBfc3R5bGUgdG8gaGVyZS4KKworaW1wb3J0IGdldG9wdAoraW1wb3J0IG9zLnBhdGgK
K2ltcG9ydCBzeXMKKworaW1wb3J0IGNwcF9zdHlsZQoraW1wb3J0IHRleHRfc3R5bGUKK2Zyb20g
ZGlmZl9wYXJzZXIgaW1wb3J0IERpZmZQYXJzZXIKKworCisjIFRoZXNlIGRlZmF1bHRzIGFyZSB1
c2VkIGJ5IGNoZWNrLXdlYmtpdC1zdHlsZS4KK0RFRkFVTFRfVkVSQk9TSVRZID0gMQorREVGQVVM
VF9PVVRQVVRfRk9STUFUID0gJ2VtYWNzJworCisKKyMgRklYTUU6IEZvciBzdHlsZSBjYXRlZ29y
aWVzIHdlIHdpbGwgbmV2ZXIgd2FudCB0byBoYXZlLCByZW1vdmUgdGhlbS4KKyMgICAgICAgIEZv
ciBjYXRlZ29yaWVzIGZvciB3aGljaCB3ZSB3YW50IHRvIGhhdmUgc2ltaWxhciBmdW5jdGlvbmFs
aXR5LAorIyAgICAgICAgbW9kaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgZW5hYmxlIHRoZW0u
CisjCisjIFRocm91Z2hvdXQgdGhpcyBtb2R1bGUsIHdlIHVzZSAiZmlsdGVyIHJ1bGUiIHJhdGhl
ciB0aGFuICJmaWx0ZXIiCisjIGZvciBhbiBpbmRpdmlkdWFsIGJvb2xlYW4gZmlsdGVyIGZsYWcg
bGlrZSAiK2ZvbyIuIFRoaXMgYWxsb3dzIHVzIHRvCisjIHJlc2VydmUgImZpbHRlciIgZm9yIHdo
YXQgb25lIGdldHMgYnkgY29sbGVjdGl2ZWx5IGFwcGx5aW5nIGFsbCBvZgorIyB0aGUgZmlsdGVy
IHJ1bGVzLgorIworIyBUaGUgX1dFQktJVF9GSUxURVJfUlVMRVMgYXJlIHByZXBlbmRlZCB0byBh
bnkgdXNlci1zcGVjaWZpZWQgZmlsdGVyCisjIHJ1bGVzLiBTaW5jZSBieSBkZWZhdWx0IGFsbCBl
cnJvcnMgYXJlIG9uLCBvbmx5IGluY2x1ZGUgcnVsZXMgdGhhdAorIyBiZWdpbiB3aXRoIGEgLSBz
aWduLgorV0VCS0lUX0ZJTFRFUl9SVUxFUyA9IFsKKyAgICAnLWJ1aWxkL2VuZGlmX2NvbW1lbnQn
LAorICAgICctYnVpbGQvaW5jbHVkZV93aGF0X3lvdV91c2UnLCAgIyA8c3RyaW5nPiBmb3Igc3Rk
OjpzdHJpbmcKKyAgICAnLWJ1aWxkL3N0b3JhZ2VfY2xhc3MnLCAgIyBjb25zdCBzdGF0aWMKKyAg
ICAnLWxlZ2FsL2NvcHlyaWdodCcsCisgICAgJy1yZWFkYWJpbGl0eS9tdWx0aWxpbmVfY29tbWVu
dCcsCisgICAgJy1yZWFkYWJpbGl0eS9icmFjZXMnLCAgIyBpbnQgZm9vKCkge307CisgICAgJy1y
ZWFkYWJpbGl0eS9mbl9zaXplJywKKyAgICAnLXJlYWRhYmlsaXR5L2Nhc3RpbmcnLAorICAgICct
cmVhZGFiaWxpdHkvZnVuY3Rpb24nLAorICAgICctcnVudGltZS9hcnJheXMnLCAgIyB2YXJpYWJs
ZSBsZW5ndGggYXJyYXkKKyAgICAnLXJ1bnRpbWUvY2FzdGluZycsCisgICAgJy1ydW50aW1lL3Np
emVvZicsCisgICAgJy1ydW50aW1lL2V4cGxpY2l0JywgICMgZXhwbGljaXQKKyAgICAnLXJ1bnRp
bWUvdmlydHVhbCcsICAjIHZpcnR1YWwgZHRvcgorICAgICctcnVudGltZS9wcmludGYnLAorICAg
ICctcnVudGltZS90aHJlYWRzYWZlX2ZuJywKKyAgICAnLXJ1bnRpbWUvcnR0aScsCisgICAgJy13
aGl0ZXNwYWNlL2JsYW5rX2xpbmUnLAorICAgICctd2hpdGVzcGFjZS9lbmRfb2ZfbGluZScsCisg
ICAgJy13aGl0ZXNwYWNlL2xhYmVscycsCisgICAgXQorCisKKyMgRklYTUU6IFRoZSBTVFlMRV9D
QVRFR09SSUVTIHNob3cgdXAgaW4gYm90aCBmaWxlIHR5cGVzIGNwcF9zdHlsZS5weQorIyAgICAg
ICAgYW5kIHRleHRfc3R5bGUucHkuIEJyZWFrIHRoaXMgbGlzdCBpbnRvIHBvc3NpYmx5IG92ZXJs
YXBwaW5nCisjICAgICAgICBzdWItbGlzdHMsIGFuZCBzdG9yZSBlYWNoIHN1Yi1saXN0IGluIHRo
ZSBjb3JyZXNwb25kaW5nIC5weQorIyAgICAgICAgZmlsZS4gVGhlIGZpbGUgc3R5bGUucHkgY2Fu
IG9idGFpbiB0aGUgbWFzdGVyIGxpc3QgYnkgdGFraW5nCisjICAgICAgICB0aGUgdW5pb24uIFRo
aXMgd2lsbCBhbGxvdyB0aGUgdW5pdCB0ZXN0cyBmb3IgZWFjaCBmaWxlIHR5cGUKKyMgICAgICAg
IHRvIGNoZWNrIHRoYXQgYWxsIG9mIHRoZWlyIHJlc3BlY3RpdmUgc3R5bGUgY2F0ZWdvcmllcyBh
cmUKKyMgICAgICAgIHJlcHJlc2VudGVkIC0tIHdpdGhvdXQgaGF2aW5nIHRvIHJlZmVyZW5jZSBz
dHlsZS5weSBvciBiZQorIyAgICAgICAgYXdhcmUgb2YgdGhlIGV4aXN0ZW5jZSBvZiBvdGhlciBm
aWxlIHR5cGVzLgorIworIyBXZSBjYXRlZ29yaXplIGVhY2ggc3R5bGUgcnVsZSB3ZSBwcmludC4g
IEhlcmUgYXJlIHRoZSBjYXRlZ29yaWVzLgorIyBXZSB3YW50IGFuIGV4cGxpY2l0IGxpc3Qgc28g
d2UgY2FuIGRpc3BsYXkgYSBmdWxsIGxpc3QgdG8gdGhlIHVzZXIuCisjIElmIHlvdSBhZGQgYSBu
ZXcgZXJyb3IgbWVzc2FnZSB3aXRoIGEgbmV3IGNhdGVnb3J5LCBhZGQgaXQgdG8gdGhlIGxpc3QK
KyMgaGVyZSEgIGNwcF9zdHlsZV91bml0dGVzdC5weSBzaG91bGQgdGVsbCB5b3UgaWYgeW91IGZv
cmdldCB0byBkbyB0aGlzLgorU1RZTEVfQ0FURUdPUklFUyA9IFsKKyAgICAnYnVpbGQvY2xhc3Mn
LAorICAgICdidWlsZC9kZXByZWNhdGVkJywKKyAgICAnYnVpbGQvZW5kaWZfY29tbWVudCcsCisg
ICAgJ2J1aWxkL2ZvcndhcmRfZGVjbCcsCisgICAgJ2J1aWxkL2hlYWRlcl9ndWFyZCcsCisgICAg
J2J1aWxkL2luY2x1ZGUnLAorICAgICdidWlsZC9pbmNsdWRlX29yZGVyJywKKyAgICAnYnVpbGQv
aW5jbHVkZV93aGF0X3lvdV91c2UnLAorICAgICdidWlsZC9uYW1lc3BhY2VzJywKKyAgICAnYnVp
bGQvcHJpbnRmX2Zvcm1hdCcsCisgICAgJ2J1aWxkL3N0b3JhZ2VfY2xhc3MnLAorICAgICdidWls
ZC91c2luZ19zdGQnLAorICAgICdsZWdhbC9jb3B5cmlnaHQnLAorICAgICdyZWFkYWJpbGl0eS9i
cmFjZXMnLAorICAgICdyZWFkYWJpbGl0eS9jYXN0aW5nJywKKyAgICAncmVhZGFiaWxpdHkvY2hl
Y2snLAorICAgICdyZWFkYWJpbGl0eS9jb21wYXJpc29uX3RvX3plcm8nLAorICAgICdyZWFkYWJp
bGl0eS9jb25zdHJ1Y3RvcnMnLAorICAgICdyZWFkYWJpbGl0eS9jb250cm9sX2Zsb3cnLAorICAg
ICdyZWFkYWJpbGl0eS9mbl9zaXplJywKKyAgICAncmVhZGFiaWxpdHkvZnVuY3Rpb24nLAorICAg
ICdyZWFkYWJpbGl0eS9tdWx0aWxpbmVfY29tbWVudCcsCisgICAgJ3JlYWRhYmlsaXR5L211bHRp
bGluZV9zdHJpbmcnLAorICAgICdyZWFkYWJpbGl0eS9uYW1pbmcnLAorICAgICdyZWFkYWJpbGl0
eS9udWxsJywKKyAgICAncmVhZGFiaWxpdHkvc3RyZWFtcycsCisgICAgJ3JlYWRhYmlsaXR5L3Rv
ZG8nLAorICAgICdyZWFkYWJpbGl0eS91dGY4JywKKyAgICAncnVudGltZS9hcnJheXMnLAorICAg
ICdydW50aW1lL2Nhc3RpbmcnLAorICAgICdydW50aW1lL2V4cGxpY2l0JywKKyAgICAncnVudGlt
ZS9pbml0JywKKyAgICAncnVudGltZS9pbnQnLAorICAgICdydW50aW1lL2ludmFsaWRfaW5jcmVt
ZW50JywKKyAgICAncnVudGltZS9tYXhfbWluX21hY3JvcycsCisgICAgJ3J1bnRpbWUvbWVtc2V0
JywKKyAgICAncnVudGltZS9wcmludGYnLAorICAgICdydW50aW1lL3ByaW50Zl9mb3JtYXQnLAor
ICAgICdydW50aW1lL3JlZmVyZW5jZXMnLAorICAgICdydW50aW1lL3J0dGknLAorICAgICdydW50
aW1lL3NpemVvZicsCisgICAgJ3J1bnRpbWUvc3RyaW5nJywKKyAgICAncnVudGltZS90aHJlYWRz
YWZlX2ZuJywKKyAgICAncnVudGltZS92aXJ0dWFsJywKKyAgICAnd2hpdGVzcGFjZS9ibGFua19s
aW5lJywKKyAgICAnd2hpdGVzcGFjZS9icmFjZXMnLAorICAgICd3aGl0ZXNwYWNlL2NvbW1hJywK
KyAgICAnd2hpdGVzcGFjZS9jb21tZW50cycsCisgICAgJ3doaXRlc3BhY2UvZGVjbGFyYXRpb24n
LAorICAgICd3aGl0ZXNwYWNlL2VuZF9vZl9saW5lJywKKyAgICAnd2hpdGVzcGFjZS9lbmRpbmdf
bmV3bGluZScsCisgICAgJ3doaXRlc3BhY2UvaW5kZW50JywKKyAgICAnd2hpdGVzcGFjZS9sYWJl
bHMnLAorICAgICd3aGl0ZXNwYWNlL2xpbmVfbGVuZ3RoJywKKyAgICAnd2hpdGVzcGFjZS9uZXds
aW5lJywKKyAgICAnd2hpdGVzcGFjZS9vcGVyYXRvcnMnLAorICAgICd3aGl0ZXNwYWNlL3BhcmVu
cycsCisgICAgJ3doaXRlc3BhY2Uvc2VtaWNvbG9uJywKKyAgICAnd2hpdGVzcGFjZS90YWInLAor
ICAgICd3aGl0ZXNwYWNlL3RvZG8nLAorICAgIF0KKworCitkZWYgX2NyZWF0ZV91c2FnZShkZWZh
dWx0cyk6CisgICAgIiIiUmV0dXJuIHRoZSB1c2FnZSBzdHJpbmcgdG8gZGlzcGxheSBmb3IgY29t
bWFuZCBoZWxwLgorCisgICAgQXJnczoKKyAgICAgIGRlZmF1bHRzOiBBbiBBcmd1bWVudERlZmF1
bHRzIGluc3RhbmNlLgorCisgICAgIiIiCisgICAgdXNhZ2UgPSAiIiIKK1N5bnRheDogJShwcm9n
cmFtX25hbWUpcyBbLS12ZXJib3NlPSNdIFstLWdpdC1jb21taXQ9PFNpbmdsZUNvbW1pdD5dIFst
LW91dHB1dD12czddCisgICAgICAgIFstLWZpbHRlcj0teCwreSwuLi5dIFtmaWxlXSAuLi4KKwor
ICBUaGUgc3R5bGUgZ3VpZGVsaW5lcyB0aGlzIHRyaWVzIHRvIGZvbGxvdyBhcmUgaGVyZToKKyAg
ICBodHRwOi8vd2Via2l0Lm9yZy9jb2RpbmcvY29kaW5nLXN0eWxlLmh0bWwKKworICBFdmVyeSBz
dHlsZSBlcnJvciBpcyBnaXZlbiBhIGNvbmZpZGVuY2Ugc2NvcmUgZnJvbSAxLTUsIHdpdGggNSBt
ZWFuaW5nCisgIHdlIGFyZSBjZXJ0YWluIG9mIHRoZSBwcm9ibGVtLCBhbmQgMSBtZWFuaW5nIGl0
IGNvdWxkIGJlIGEgbGVnaXRpbWF0ZQorICBjb25zdHJ1Y3QuICBUaGlzIGNhbiBtaXNzIHNvbWUg
ZXJyb3JzIGFuZCBkb2VzIG5vdCBzdWJzdGl0dXRlIGZvcgorICBjb2RlIHJldmlldy4KKworICBU
byBwcmV2ZW50IHNwZWNpZmljIGxpbmVzIGZyb20gYmVpbmcgbGludGVkLCBhZGQgYSAnLy8gTk9M
SU5UJyBjb21tZW50IHRvIHRoZQorICBlbmQgb2YgdGhlIGxpbmUuCisKKyAgTGludGVkIGV4dGVu
c2lvbnMgYXJlIC5jcHAsIC5jIGFuZCAuaC4gIE90aGVyIGZpbGUgdHlwZXMgYXJlIGlnbm9yZWQu
CisKKyAgVGhlIGZpbGUgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIGFuZCBhY2NlcHRzIG11bHRpcGxl
IGZpbGVzLiAgTGVhdmluZworICBvdXQgdGhlIGZpbGUgcGFyYW1ldGVyIGFwcGxpZXMgdGhlIGNo
ZWNrIHRvIGFsbCBmaWxlcyBjb25zaWRlcmVkIGNoYW5nZWQKKyAgYnkgeW91ciBzb3VyY2UgY29u
dHJvbCBtYW5hZ2VtZW50IHN5c3RlbS4KKworICBGbGFnczoKKworICAgIHZlcmJvc2U9IworICAg
ICAgQSBudW1iZXIgMS01IHRoYXQgcmVzdHJpY3RzIG91dHB1dCB0byBlcnJvcnMgd2l0aCBhIGNv
bmZpZGVuY2UKKyAgICAgIHNjb3JlIGF0IG9yIGFib3ZlIHRoaXMgdmFsdWUuIEluIHBhcnRpY3Vs
YXIsIHRoZSB2YWx1ZSAxIGRpc3BsYXlzCisgICAgICBhbGwgZXJyb3JzLiBUaGUgZGVmYXVsdCBp
cyAlKGRlZmF1bHRfdmVyYm9zaXR5KXMuCisKKyAgICBnaXQtY29tbWl0PTxTaW5nbGVDb21taXQ+
CisgICAgICBDaGVja3MgdGhlIHN0eWxlIG9mIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgZ2l2ZW4gY29t
bWl0IHRvIHRoZSBsb2NhbCB0cmVlLgorCisgICAgb3V0cHV0PXZzNworICAgICAgVGhlIG91dHB1
dCBmb3JtYXQsIHdoaWNoIG1heSBiZSBvbmUgb2YKKyAgICAgICAgZW1hY3MgOiB0byBlYXNlIGVt
YWNzIHBhcnNpbmcKKyAgICAgICAgdnM3ICAgOiBjb21wYXRpYmxlIHdpdGggVmlzdWFsIFN0dWRp
bworICAgICAgRGVmYXVsdHMgdG8gIiUoZGVmYXVsdF9vdXRwdXRfZm9ybWF0KXMiLiBPdGhlciBm
b3JtYXRzIGFyZSB1bnN1cHBvcnRlZC4KKworICAgIGZpbHRlcj0teCwreSwuLi4KKyAgICAgIEEg
Y29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYm9vbGVhbiBmaWx0ZXIgcnVsZXMgdXNlZCB0byBmaWx0
ZXIKKyAgICAgIHdoaWNoIGNhdGVnb3JpZXMgb2Ygc3R5bGUgZ3VpZGVsaW5lcyB0byBjaGVjay4g
IFRoZSBzY3JpcHQgY2hlY2tzCisgICAgICBhIGNhdGVnb3J5IGlmIHRoZSBjYXRlZ29yeSBwYXNz
ZXMgdGhlIGZpbHRlciBydWxlcywgYXMgZm9sbG93cy4KKworICAgICAgQW55IHdlYmtpdCBjYXRl
Z29yeSBzdGFydHMgb3V0IHBhc3NpbmcuICBBbGwgZmlsdGVyIHJ1bGVzIGFyZSB0aGVuCisgICAg
ICBldmFsdWF0ZWQgbGVmdCB0byByaWdodCwgd2l0aCBsYXRlciBydWxlcyB0YWtpbmcgcHJlY2Vk
ZW5jZS4gIEZvcgorICAgICAgZXhhbXBsZSwgdGhlIHJ1bGUgIitmb28iIHBhc3NlcyBhbnkgY2F0
ZWdvcnkgdGhhdCBzdGFydHMgd2l0aCAiZm9vIiwKKyAgICAgIGFuZCAiLWZvbyIgZmFpbHMgYW55
IHN1Y2ggY2F0ZWdvcnkuICBUaGUgZmlsdGVyIGlucHV0ICItd2hpdGVzcGFjZSwKKyAgICAgICt3
aGl0ZXNwYWNlL2JyYWNlcyIgZmFpbHMgdGhlIGNhdGVnb3J5ICJ3aGl0ZXNwYWNlL3RhYiIgYW5k
IHBhc3NlcworICAgICAgIndoaXRlc3BhY2UvYnJhY2VzIi4KKworICAgICAgRXhhbXBsZXM6IC0t
ZmlsdGVyPS13aGl0ZXNwYWNlLCt3aGl0ZXNwYWNlL2JyYWNlcworICAgICAgICAgICAgICAgIC0t
ZmlsdGVyPS13aGl0ZXNwYWNlLC1ydW50aW1lL3ByaW50ZiwrcnVudGltZS9wcmludGZfZm9ybWF0
CisgICAgICAgICAgICAgICAgLS1maWx0ZXI9LSwrYnVpbGQvaW5jbHVkZV93aGF0X3lvdV91c2UK
KworICAgICAgQ2F0ZWdvcnkgbmFtZXMgYXBwZWFyIGluIGVycm9yIG1lc3NhZ2VzIGluIGJyYWNr
ZXRzLCBmb3IgZXhhbXBsZQorICAgICAgW3doaXRlc3BhY2UvaW5kZW50XS4gIFRvIHNlZSBhIGxp
c3Qgb2YgYWxsIGNhdGVnb3JpZXMgYXZhaWxhYmxlIHRvCisgICAgICAlKHByb2dyYW1fbmFtZSlz
LCBhbG9uZyB3aXRoIHdoaWNoIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQsIHBhc3MKKyAgICAgIHRo
ZSBlbXB0eSBmaWx0ZXIgYXMgZm9sbG93czoKKyAgICAgICAgIC0tZmlsdGVyPQorIiIiICUgeydw
cm9ncmFtX25hbWUnOiBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKSwKKyAgICAgICAnZGVm
YXVsdF92ZXJib3NpdHknOiBkZWZhdWx0cy52ZXJib3NpdHksCisgICAgICAgJ2RlZmF1bHRfb3V0
cHV0X2Zvcm1hdCc6IGRlZmF1bHRzLm91dHB1dF9mb3JtYXR9CisKKyAgICByZXR1cm4gdXNhZ2UK
KworCisjIFRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBoYXZlIGtub3dsZWRnZSBvZiB0aGUgZmxhZyBr
ZXkgbmFtZXMuCitjbGFzcyBQcm9jZXNzb3JPcHRpb25zKG9iamVjdCk6CisKKyAgICAiIiJBIGNv
bnRhaW5lciB0byBzdG9yZSBvcHRpb25zIHRvIHVzZSB3aGVuIGNoZWNraW5nIHN0eWxlLgorCisg
ICAgQXR0cmlidXRlczoKKyAgICAgIG91dHB1dF9mb3JtYXQ6IEEgc3RyaW5nIHRoYXQgaXMgdGhl
IG91dHB1dCBmb3JtYXQuIFRoZSBzdXBwb3J0ZWQKKyAgICAgICAgICAgICAgICAgICAgIG91dHB1
dCBmb3JtYXRzIGFyZSAiZW1hY3MiIHdoaWNoIGVtYWNzIGNhbiBwYXJzZQorICAgICAgICAgICAg
ICAgICAgICAgYW5kICJ2czciIHdoaWNoIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDcgY2FuIHBh
cnNlLgorCisgICAgICB2ZXJib3NpdHk6IEFuIGludGVnZXIgMS01IHRoYXQgcmVzdHJpY3RzIG91
dHB1dCB0byBlcnJvcnMgd2l0aCBhCisgICAgICAgICAgICAgICAgIGNvbmZpZGVuY2Ugc2NvcmUg
YXQgb3IgYWJvdmUgdGhpcyB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMg
MSwgd2hpY2ggZGlzcGxheXMgYWxsIGVycm9ycy4KKworICAgICAgZmlsdGVyX3J1bGVzOiBBIGxp
c3Qgb2Ygc3RyaW5ncyB0aGF0IGFyZSBib29sZWFuIGZpbHRlciBydWxlcyB1c2VkCisgICAgICAg
ICAgICAgICAgICAgIHRvIGRldGVybWluZSB3aGV0aGVyIGEgc3R5bGUgY2F0ZWdvcnkgc2hvdWxk
IGJlIGNoZWNrZWQuCisgICAgICAgICAgICAgICAgICAgIEVhY2ggc3RyaW5nIHNob3VsZCBzdGFy
dCB3aXRoICsgb3IgLS4gQW4gZXhhbXBsZQorICAgICAgICAgICAgICAgICAgICBzdHJpbmcgaXMg
Iit3aGl0ZXNwYWNlL2luZGVudCIuIFRoZSBsaXN0IGluY2x1ZGVzIGFueQorICAgICAgICAgICAg
ICAgICAgICBwcmVwZW5kZWQgZGVmYXVsdCBmaWx0ZXIgcnVsZXMuIFRoZSBkZWZhdWx0IGlzIHRo
ZQorICAgICAgICAgICAgICAgICAgICBlbXB0eSBsaXN0LCB3aGljaCBpbmNsdWRlcyBhbGwgY2F0
ZWdvcmllcy4KKworICAgICAgZ2l0X2NvbW1pdDogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBn
aXQgY29tbWl0IHRvIGNoZWNrLgorICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgTm9u
ZS4KKworICAgICAgZXh0cmFfZmxhZ192YWx1ZXM6IEEgc3RyaW5nLXN0cmluZyBkaWN0aW9uYXJ5
IG9mIGFsbCBmbGFnIGtleS12YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgIHBhaXJzIHRo
YXQgYXJlIG5vdCBvdGhlcndpc2UgcmVwcmVzZW50ZWQgYnkgdGhpcworICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsYXNzLiBUaGUgZGVmYXVsdCBpcyB0aGUgZW1wdHkgZGljdGlvbmFyeS4KKyAg
ICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRwdXRfZm9ybWF0LCB2ZXJib3NpdHk9
MSwgZmlsdGVyX3J1bGVzPU5vbmUsCisgICAgICAgICAgICAgICAgIGdpdF9jb21taXQ9Tm9uZSwg
ZXh0cmFfZmxhZ192YWx1ZXM9Tm9uZSk6CisgICAgICAgIGlmIGZpbHRlcl9ydWxlcyBpcyBOb25l
OgorICAgICAgICAgICAgZmlsdGVyX3J1bGVzID0gW10KKyAgICAgICAgaWYgZXh0cmFfZmxhZ192
YWx1ZXMgaXMgTm9uZToKKyAgICAgICAgICAgIGV4dHJhX2ZsYWdfdmFsdWVzID0ge30KKworICAg
ICAgICBzZWxmLm91dHB1dF9mb3JtYXQgPSBvdXRwdXRfZm9ybWF0CisgICAgICAgIHNlbGYudmVy
Ym9zaXR5ID0gdmVyYm9zaXR5CisgICAgICAgIHNlbGYuZmlsdGVyX3J1bGVzID0gZmlsdGVyX3J1
bGVzCisgICAgICAgIHNlbGYuZ2l0X2NvbW1pdCA9IGdpdF9jb21taXQKKyAgICAgICAgc2VsZi5l
eHRyYV9mbGFnX3ZhbHVlcyA9IGV4dHJhX2ZsYWdfdmFsdWVzCisKKworIyBGSVhNRTogRWxpbWlu
YXRlIHRoZSBuZWVkIGZvciB0aGlzIGZ1bmN0aW9uLgorIyAgICAgICAgT3B0aW9ucyBzaG91bGQg
YmUgcGFzc2VkIGludG8gcHJvY2Vzc19maWxlIGluc3RlYWQuCitkZWYgc2V0X29wdGlvbnMob3B0
aW9ucyk6CisgICAgIiIiSW5pdGlhbGl6ZSBnbG9iYWwgX0NwcFN0eWxlU3RhdGUgaW5zdGFuY2Uu
CisKKyAgICBUaGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBwcm9jZXNzX2Zp
bGUuCisKKyAgICBBcmdzOgorICAgICAgb3B0aW9uczogQSBQcm9jZXNzb3JPcHRpb25zIGluc3Rh
bmNlLgorICAgICIiIgorICAgIGNwcF9zdHlsZS5fc2V0X291dHB1dF9mb3JtYXQob3B0aW9ucy5v
dXRwdXRfZm9ybWF0KQorICAgIGNwcF9zdHlsZS5fc2V0X3ZlcmJvc2VfbGV2ZWwob3B0aW9ucy52
ZXJib3NpdHkpCisgICAgY3BwX3N0eWxlLl9zZXRfZmlsdGVycyhvcHRpb25zLmZpbHRlcl9ydWxl
cykKKworCisjIFRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBoYXZlIGtub3dsZWRnZSBvZiB0aGUgZmxh
ZyBrZXkgbmFtZXMuCitjbGFzcyBBcmd1bWVudERlZmF1bHRzKG9iamVjdCk6CisKKyAgICAiIiJB
IGNvbnRhaW5lciB0byBzdG9yZSBkZWZhdWx0IGFyZ3VtZW50IHZhbHVlcy4KKworICAgIEF0dHJp
YnV0ZXM6CisgICAgICBvdXRwdXRfZm9ybWF0OiBBIHN0cmluZyB0aGF0IGlzIHRoZSBkZWZhdWx0
IG91dHB1dCBmb3JtYXQuCisgICAgICB2ZXJib3NpdHk6IEFuIGludGVnZXIgdGhhdCBpcyB0aGUg
ZGVmYXVsdCB2ZXJib3NpdHkgbGV2ZWwuCisgICAgICBmaWx0ZXJfcnVsZXM6IEEgbGlzdCBvZiBz
dHJpbmdzIHRoYXQgYXJlIGJvb2xlYW4gZmlsdGVyIHJ1bGVzCisgICAgICAgICAgICAgICAgICAg
IHRvIHByZXBlbmQgdG8gYW55IHVzZXItc3BlY2lmaWVkIHJ1bGVzLgorCisgICAgIiIiCisKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgZGVmYXVsdF9vdXRwdXRfZm9ybWF0LCBkZWZhdWx0X3ZlcmJv
c2l0eSwKKyAgICAgICAgICAgICAgICAgZGVmYXVsdF9maWx0ZXJfcnVsZXMpOgorICAgICAgICBz
ZWxmLm91dHB1dF9mb3JtYXQgPSBkZWZhdWx0X291dHB1dF9mb3JtYXQKKyAgICAgICAgc2VsZi52
ZXJib3NpdHkgPSBkZWZhdWx0X3ZlcmJvc2l0eQorICAgICAgICBzZWxmLmZpbHRlcl9ydWxlcyA9
IGRlZmF1bHRfZmlsdGVyX3J1bGVzCisKKworY2xhc3MgQXJndW1lbnRQcmludGVyKG9iamVjdCk6
CisKKyAgICAiIiJTdXBwb3J0cyB0aGUgcHJpbnRpbmcgb2YgY2hlY2std2Via2l0LXN0eWxlIGNv
bW1hbmQgYXJndW1lbnRzLiIiIgorCisgICAgZGVmIF9mbGFnX3BhaXJfdG9fc3RyaW5nKHNlbGYs
IGZsYWdfa2V5LCBmbGFnX3ZhbHVlKToKKyAgICAgICAgcmV0dXJuICctLSUoa2V5KXM9JSh2YWwp
cycgJSB7J2tleSc6IGZsYWdfa2V5LCAndmFsJzogZmxhZ192YWx1ZSB9CisKKyAgICBkZWYgdG9f
ZmxhZ19zdHJpbmcoc2VsZiwgb3B0aW9ucyk6CisgICAgICAgICIiIlJldHVybiBhIGZsYWcgc3Ry
aW5nIHlpZWxkaW5nIHRoZSBnaXZlbiBQcm9jZXNzb3JPcHRpb25zIGluc3RhbmNlLgorCisgICAg
ICAgIFRoaXMgbWV0aG9kIG9yZGVycyB0aGUgZmxhZyB2YWx1ZXMgYWxwaGFiZXRpY2FsbHkgYnkg
dGhlIGZsYWcga2V5LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgb3B0aW9uczogQSBQcm9j
ZXNzb3JPcHRpb25zIGluc3RhbmNlLgorCisgICAgICAgICIiIgorICAgICAgICBmbGFncyA9IG9w
dGlvbnMuZXh0cmFfZmxhZ192YWx1ZXMuY29weSgpCisKKyAgICAgICAgZmxhZ3NbJ291dHB1dCdd
ID0gb3B0aW9ucy5vdXRwdXRfZm9ybWF0CisgICAgICAgIGZsYWdzWyd2ZXJib3NlJ10gPSBvcHRp
b25zLnZlcmJvc2l0eQorICAgICAgICBpZiBvcHRpb25zLmZpbHRlcl9ydWxlczoKKyAgICAgICAg
ICAgIGZsYWdzWydmaWx0ZXInXSA9ICcsJy5qb2luKG9wdGlvbnMuZmlsdGVyX3J1bGVzKQorICAg
ICAgICBpZiBvcHRpb25zLmdpdF9jb21taXQ6CisgICAgICAgICAgICBmbGFnc1snZ2l0LWNvbW1p
dCddID0gb3B0aW9ucy5naXRfY29tbWl0CisKKyAgICAgICAgZmxhZ19zdHJpbmcgPSAnJworICAg
ICAgICAjIEFscGhhYmV0aXppbmcgbGV0cyB1cyB1bml0IHRlc3QgdGhpcyBtZXRob2QuCisgICAg
ICAgIGZvciBrZXkgaW4gc29ydGVkKGZsYWdzLmtleXMoKSk6CisgICAgICAgICAgICBmbGFnX3N0
cmluZyArPSBzZWxmLl9mbGFnX3BhaXJfdG9fc3RyaW5nKGtleSwgZmxhZ3Nba2V5XSkgKyAnICcK
KworICAgICAgICByZXR1cm4gZmxhZ19zdHJpbmcuc3RyaXAoKQorCisKK2NsYXNzIEFyZ3VtZW50
UGFyc2VyKG9iamVjdCk6CisKKyAgICAiIiJTdXBwb3J0cyB0aGUgcGFyc2luZyBvZiBjaGVjay13
ZWJraXQtc3R5bGUgY29tbWFuZCBhcmd1bWVudHMuCisKKyAgICBBdHRyaWJ1dGVzOgorICAgICAg
ZGVmYXVsdHM6IEFuIEFyZ3VtZW50RGVmYXVsdHMgaW5zdGFuY2UuCisgICAgICBjcmVhdGVfdXNh
Z2U6IEEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGFuIEFyZ3VtZW50RGVmYXVsdHMgaW5zdGFuY2UK
KyAgICAgICAgICAgICAgICAgICAgYW5kIHJldHVybnMgYSBzdHJpbmcgb2YgdXNhZ2UgaW5zdHJ1
Y3Rpb25zLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGRlZmF1bHRzIHRvIHRoZSBmdW5jdGlv
biB1c2VkIHRvIGdlbmVyYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICB1c2FnZSBzdHJpbmcg
Zm9yIGNoZWNrLXdlYmtpdC1zdHlsZS4KKyAgICAgIGRvY19wcmludDogQSBmdW5jdGlvbiB0aGF0
IGFjY2VwdHMgYSBzdHJpbmcgcGFyYW1ldGVyIGFuZCB0aGF0IGlzCisgICAgICAgICAgICAgICAg
IGNhbGxlZCB0byBkaXNwbGF5IGhlbHAgbWVzc2FnZXMuIFRoaXMgZGVmYXVsdHMgdG8KKyAgICAg
ICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgpLgorCisgICAgIiIiCisKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgYXJndW1lbnRfZGVmYXVsdHMsIGNyZWF0ZV91c2FnZT1Ob25lLCBkb2NfcHJp
bnQ9Tm9uZSk6CisgICAgICAgIGlmIGNyZWF0ZV91c2FnZSBpcyBOb25lOgorICAgICAgICAgICAg
Y3JlYXRlX3VzYWdlID0gX2NyZWF0ZV91c2FnZQorICAgICAgICBpZiBkb2NfcHJpbnQgaXMgTm9u
ZToKKyAgICAgICAgICAgIGRvY19wcmludCA9IHN5cy5zdGRlcnIud3JpdGUKKworICAgICAgICBz
ZWxmLmRlZmF1bHRzID0gYXJndW1lbnRfZGVmYXVsdHMKKyAgICAgICAgc2VsZi5jcmVhdGVfdXNh
Z2UgPSBjcmVhdGVfdXNhZ2UKKyAgICAgICAgc2VsZi5kb2NfcHJpbnQgPSBkb2NfcHJpbnQKKwor
ICAgIGRlZiBfZXhpdF93aXRoX3VzYWdlKHNlbGYsIGVycm9yX21lc3NhZ2U9JycpOgorICAgICAg
ICAiIiJFeGl0IGFuZCBwcmludCBhIHVzYWdlIHN0cmluZyB3aXRoIGFuIG9wdGlvbmFsIGVycm9y
IG1lc3NhZ2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBlcnJvcl9tZXNzYWdlOiBBIHN0
cmluZyB0aGF0IGlzIGFuIGVycm9yIG1lc3NhZ2UgdG8gcHJpbnQuCisgICAgICAgICIiIgorICAg
ICAgICB1c2FnZSA9IHNlbGYuY3JlYXRlX3VzYWdlKHNlbGYuZGVmYXVsdHMpCisgICAgICAgIHNl
bGYuZG9jX3ByaW50KHVzYWdlKQorICAgICAgICBpZiBlcnJvcl9tZXNzYWdlOgorICAgICAgICAg
ICAgc3lzLmV4aXQoJ1xuRkFUQUwgRVJST1I6ICcgKyBlcnJvcl9tZXNzYWdlKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGRlZiBfZXhpdF93aXRoX2NhdGVn
b3JpZXMoc2VsZik6CisgICAgICAgICIiIkV4aXQgYW5kIHByaW50IHRoZSBzdHlsZSBjYXRlZ29y
aWVzIGFuZCBkZWZhdWx0IGZpbHRlciBydWxlcy4iIiIKKyAgICAgICAgc2VsZi5kb2NfcHJpbnQo
J1xuQWxsIGNhdGVnb3JpZXM6XG4nKQorICAgICAgICBmb3IgY2F0ZWdvcnkgaW4gc29ydGVkKFNU
WUxFX0NBVEVHT1JJRVMpOgorICAgICAgICAgICAgc2VsZi5kb2NfcHJpbnQoJyAgICAnICsgY2F0
ZWdvcnkgKyAnXG4nKQorCisgICAgICAgIHNlbGYuZG9jX3ByaW50KCdcbkRlZmF1bHQgZmlsdGVy
IHJ1bGVzKio6XG4nKQorICAgICAgICBmb3IgZmlsdGVyX3J1bGUgaW4gc29ydGVkKHNlbGYuZGVm
YXVsdHMuZmlsdGVyX3J1bGVzKToKKyAgICAgICAgICAgIHNlbGYuZG9jX3ByaW50KCcgICAgJyAr
IGZpbHRlcl9ydWxlICsgJ1xuJykKKyAgICAgICAgc2VsZi5kb2NfcHJpbnQoJ1xuKipUaGUgY29t
bWFuZCBhbHdheXMgZXZhbHVhdGVzIHRoZSBhYm92ZSBydWxlcywgJworICAgICAgICAgICAgICAg
ICAgICAgICAnYW5kIGJlZm9yZSBhbnkgLS1maWx0ZXIgZmxhZy5cblxuJykKKworICAgICAgICBz
eXMuZXhpdCgwKQorCisgICAgZGVmIF9wYXJzZV9maWx0ZXJfZmxhZyhzZWxmLCBmbGFnX3ZhbHVl
KToKKyAgICAgICAgIiIiUGFyc2UgdGhlIHZhbHVlIG9mIHRoZSAtLWZpbHRlciBmbGFnLgorCisg
ICAgICAgIFRoZXNlIGZpbHRlcnMgYXJlIGFwcGxpZWQgd2hlbiBkZWNpZGluZyB3aGV0aGVyIHRv
IGVtaXQgYSBnaXZlbgorICAgICAgICBlcnJvciBtZXNzYWdlLgorCisgICAgICAgIEFyZ3M6Cisg
ICAgICAgICAgZmxhZ192YWx1ZTogQSBzdHJpbmcgb2YgY29tbWEtc2VwYXJhdGVkIGZpbHRlciBy
dWxlcywgZm9yCisgICAgICAgICAgICAgICAgICAgICAgZXhhbXBsZSAiLXdoaXRlc3BhY2UsK3do
aXRlc3BhY2UvaW5kZW50Ii4KKworICAgICAgICAiIiIKKyAgICAgICAgZmlsdGVycyA9IFtdCisg
ICAgICAgIGZvciB1bmNsZWFuZWRfZmlsdGVyIGluIGZsYWdfdmFsdWUuc3BsaXQoJywnKToKKyAg
ICAgICAgICAgIGZpbHRlciA9IHVuY2xlYW5lZF9maWx0ZXIuc3RyaXAoKQorICAgICAgICAgICAg
aWYgbm90IGZpbHRlcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZmls
dGVycy5hcHBlbmQoZmlsdGVyKQorICAgICAgICByZXR1cm4gZmlsdGVycworCisgICAgZGVmIHBh
cnNlKHNlbGYsIGFyZ3MsIGV4dHJhX2ZsYWdzPU5vbmUpOgorICAgICAgICAiIiJQYXJzZSB0aGUg
Y29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byBjaGVjay13ZWJraXQtc3R5bGUuCisKKyAgICAgICAg
QXJnczoKKyAgICAgICAgICBhcmdzOiBBIGxpc3Qgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBh
cyByZXR1cm5lZCBieSBzeXMuYXJndlsxOl0uCisgICAgICAgICAgZXh0cmFfZmxhZ3M6IEEgbGlz
dCBvZiBmbGFncyB3aG9zZSB2YWx1ZXMgd2Ugd2FudCB0byBleHRyYWN0LCBidXQKKyAgICAgICAg
ICAgICAgICAgICAgICAgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIFByb2Nlc3Nvck9wdGlvbnMg
Y2xhc3MuCisgICAgICAgICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgZmxhZyAibmV3X2ZsYWc9
Ii4gVGhpcyBkZWZhdWx0cyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgZW1wdHkgbGlz
dC4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgIEEgdHVwbGUgb2YgKGZpbGVuYW1lcywg
b3B0aW9ucykKKworICAgICAgICAgIGZpbGVuYW1lczogVGhlIGxpc3Qgb2YgZmlsZW5hbWVzIHRv
IGNoZWNrLgorICAgICAgICAgIG9wdGlvbnM6IEEgUHJvY2Vzc29yT3B0aW9ucyBpbnN0YW5jZS4K
KworICAgICAgICAiIiIKKyAgICAgICAgaWYgZXh0cmFfZmxhZ3MgaXMgTm9uZToKKyAgICAgICAg
ICAgIGV4dHJhX2ZsYWdzID0gW10KKworICAgICAgICBvdXRwdXRfZm9ybWF0ID0gc2VsZi5kZWZh
dWx0cy5vdXRwdXRfZm9ybWF0CisgICAgICAgIHZlcmJvc2l0eSA9IHNlbGYuZGVmYXVsdHMudmVy
Ym9zaXR5CisgICAgICAgIGZpbHRlcl9ydWxlcyA9IHNlbGYuZGVmYXVsdHMuZmlsdGVyX3J1bGVz
CisKKyAgICAgICAgIyBUaGUgZmxhZ3MgYWxyZWFkeSBzdXBwb3J0ZWQgYnkgdGhlIFByb2Nlc3Nv
ck9wdGlvbnMgY2xhc3MuCisgICAgICAgIGZsYWdzID0gWydoZWxwJywgJ291dHB1dD0nLCAndmVy
Ym9zZT0nLCAnZmlsdGVyPScsICdnaXQtY29tbWl0PSddCisKKyAgICAgICAgZm9yIGV4dHJhX2Zs
YWcgaW4gZXh0cmFfZmxhZ3M6CisgICAgICAgICAgICBpZiBleHRyYV9mbGFnIGluIGZsYWdzOgor
ICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ZsYWcgXCclKGV4dHJhX2ZsYWcpcyBp
cyBkdXBsaWNhdGVkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvciBhbHJl
YWR5IHN1cHBvcnRlZC4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnZXh0
cmFfZmxhZyc6IGV4dHJhX2ZsYWd9KQorICAgICAgICAgICAgZmxhZ3MuYXBwZW5kKGV4dHJhX2Zs
YWcpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgKG9wdHMsIGZpbGVuYW1lcykgPSBnZXRv
cHQuZ2V0b3B0KGFyZ3MsICcnLCBmbGFncykKKyAgICAgICAgZXhjZXB0IGdldG9wdC5HZXRvcHRF
cnJvcjoKKyAgICAgICAgICAgICMgRklYTUU6IFNldHRsZSBvbiBhbiBlcnJvciBoYW5kbGluZyBh
cHByb2FjaDogY29tZSB1cAorICAgICAgICAgICAgIyAgICAgICAgd2l0aCBhIGNvbnNpc3RlbnQg
Z3VpZGVsaW5lIGFzIHRvIHdoZW4gYW5kIHdoZXRoZXIKKyAgICAgICAgICAgICMgICAgICAgIGEg
VmFsdWVFcnJvciBzaG91bGQgYmUgcmFpc2VkIHZlcnN1cyBjYWxsaW5nCisgICAgICAgICAgICAj
ICAgICAgICBzeXMuZXhpdCB3aGVuIG5lZWRpbmcgdG8gaW50ZXJydXB0IGV4ZWN1dGlvbi4KKyAg
ICAgICAgICAgIHNlbGYuX2V4aXRfd2l0aF91c2FnZSgnSW52YWxpZCBhcmd1bWVudHMuJykKKwor
ICAgICAgICBleHRyYV9mbGFnX3ZhbHVlcyA9IHt9CisgICAgICAgIGdpdF9jb21taXQgPSBOb25l
CisKKyAgICAgICAgZm9yIChvcHQsIHZhbCkgaW4gb3B0czoKKyAgICAgICAgICAgIGlmIG9wdCA9
PSAnLS1oZWxwJzoKKyAgICAgICAgICAgICAgICBzZWxmLl9leGl0X3dpdGhfdXNhZ2UoKQorICAg
ICAgICAgICAgZWxpZiBvcHQgPT0gJy0tb3V0cHV0JzoKKyAgICAgICAgICAgICAgICBvdXRwdXRf
Zm9ybWF0ID0gdmFsCisgICAgICAgICAgICBlbGlmIG9wdCA9PSAnLS12ZXJib3NlJzoKKyAgICAg
ICAgICAgICAgICB2ZXJib3NpdHkgPSB2YWwKKyAgICAgICAgICAgIGVsaWYgb3B0ID09ICctLWdp
dC1jb21taXQnOgorICAgICAgICAgICAgICAgIGdpdF9jb21taXQgPSB2YWwKKyAgICAgICAgICAg
IGVsaWYgb3B0ID09ICctLWZpbHRlcic6CisgICAgICAgICAgICAgICAgaWYgbm90IHZhbDoKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fZXhpdF93aXRoX2NhdGVnb3JpZXMoKQorICAgICAgICAg
ICAgICAgICMgUHJlcGVuZCB0aGUgZGVmYXVsdHMuCisgICAgICAgICAgICAgICAgZmlsdGVyX3J1
bGVzID0gZmlsdGVyX3J1bGVzICsgc2VsZi5fcGFyc2VfZmlsdGVyX2ZsYWcodmFsKQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBleHRyYV9mbGFnX3ZhbHVlc1tvcHRdID0gdmFs
CisKKyAgICAgICAgIyBDaGVjayB2YWxpZGl0eSBvZiByZXN1bHRpbmcgdmFsdWVzLgorICAgICAg
ICBpZiBmaWxlbmFtZXMgYW5kIChnaXRfY29tbWl0ICE9IE5vbmUpOgorICAgICAgICAgICAgc2Vs
Zi5fZXhpdF93aXRoX3VzYWdlKCdJdCBpcyBub3QgcG9zc2libGUgdG8gY2hlY2sgZmlsZXMgYW5k
IGEgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGVjaWZpYyBjb21taXQg
YXQgdGhlIHNhbWUgdGltZS4nKQorCisgICAgICAgIGlmIG91dHB1dF9mb3JtYXQgbm90IGluICgn
ZW1hY3MnLCAndnM3Jyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIC0t
b3V0cHV0IHZhbHVlICIlcyI6IFRoZSBvbmx5ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ2FsbG93ZWQgb3V0cHV0IGZvcm1hdHMgYXJlIGVtYWNzIGFuZCB2czcuJyAlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mb3JtYXQpCisKKyAgICAgICAgdmVyYm9zaXR5
ID0gaW50KHZlcmJvc2l0eSkKKyAgICAgICAgaWYgKCh2ZXJib3NpdHkgPCAxKSBvciAodmVyYm9z
aXR5ID4gNSkpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCAtLXZlcmJv
c2UgdmFsdWUgJXM6IHZhbHVlIG11c3QgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
YmUgYmV0d2VlbiAxLTUuJyAlIHZlcmJvc2l0eSkKKworICAgICAgICBmb3IgcnVsZSBpbiBmaWx0
ZXJfcnVsZXM6CisgICAgICAgICAgICBpZiBub3QgKHJ1bGUuc3RhcnRzd2l0aCgnKycpIG9yIHJ1
bGUuc3RhcnRzd2l0aCgnLScpKToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJ
bnZhbGlkIGZpbHRlciBydWxlICIlcyI6IGV2ZXJ5IHJ1bGUgJworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ3J1bGUgaW4gdGhlIC0tZmlsdGVyIGZsYWcgbXVzdCBzdGFydCAnCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2l0aCArIG9yIC0uJyAlIHJ1bGUpCisK
KyAgICAgICAgb3B0aW9ucyA9IFByb2Nlc3Nvck9wdGlvbnMob3V0cHV0X2Zvcm1hdCwgdmVyYm9z
aXR5LCBmaWx0ZXJfcnVsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdp
dF9jb21taXQsIGV4dHJhX2ZsYWdfdmFsdWVzKQorCisgICAgICAgIHJldHVybiAoZmlsZW5hbWVz
LCBvcHRpb25zKQorCisKK2RlZiBwcm9jZXNzX2ZpbGUoZmlsZW5hbWUpOgorICAgICIiIkNoZWNr
cyBzdHlsZSBmb3IgdGhlIHNwZWNpZmllZCBmaWxlLgorCisgICAgSWYgdGhlIHNwZWNpZmllZCBm
aWxlbmFtZSBpcyAnLScsIGFwcGxpZXMgY3BwX3N0eWxlIHRvIHRoZSBzdGFuZGFyZCBpbnB1dC4K
KyAgICAiIiIKKyAgICBpZiBjcHBfc3R5bGUuY2FuX2hhbmRsZShmaWxlbmFtZSkgb3IgZmlsZW5h
bWUgPT0gJy0nOgorICAgICAgICBjcHBfc3R5bGUucHJvY2Vzc19maWxlKGZpbGVuYW1lKQorICAg
IGVsaWYgdGV4dF9zdHlsZS5jYW5faGFuZGxlKGZpbGVuYW1lKToKKyAgICAgICAgdGV4dF9zdHls
ZS5wcm9jZXNzX2ZpbGUoZmlsZW5hbWUpCisKKworZGVmIHByb2Nlc3NfcGF0Y2gocGF0Y2hfc3Ry
aW5nKToKKyAgICAiIiJEb2VzIGxpbnQgb24gYSBzaW5nbGUgcGF0Y2guCisKKyAgICBBcmdzOgor
ICAgICAgcGF0Y2hfc3RyaW5nOiBBIHN0cmluZyBvZiBhIHBhdGNoLgorICAgICIiIgorICAgIHBh
dGNoID0gRGlmZlBhcnNlcihwYXRjaF9zdHJpbmcuc3BsaXRsaW5lcygpKQorICAgIGZvciBmaWxl
bmFtZSwgZGlmZiBpbiBwYXRjaC5maWxlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgZmlsZV9leHRl
bnNpb24gPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVsxXQorICAgICAgICBsaW5lX251bWJl
cnMgPSBzZXQoKQorCisgICAgICAgIGRlZiBlcnJvcl9mb3JfcGF0Y2goZmlsZW5hbWUsIGxpbmVf
bnVtYmVyLCBjYXRlZ29yeSwgY29uZmlkZW5jZSwgbWVzc2FnZSk6CisgICAgICAgICAgICAiIiJX
cmFwcGVyIGZ1bmN0aW9uIG9mIGNwcF9zdHlsZS5lcnJvciBmb3IgcGF0Y2hlcy4KKworICAgICAg
ICAgICAgVGhpcyBmdW5jdGlvbiBvdXRwdXRzIGVycm9ycyBvbmx5IGlmIHRoZSBsaW5lIG51bWJl
cgorICAgICAgICAgICAgY29ycmVzcG9uZHMgdG8gbGluZXMgd2hpY2ggYXJlIG1vZGlmaWVkIG9y
IGFkZGVkLgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBpZiBub3QgbGluZV9udW1iZXJz
OgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGRpZmYubGluZXM6CisgICAgICAgICAgICAg
ICAgICAgICMgV2hlbiBkZWxldGVkIGxpbmUgaXMgbm90IHNldCwgaXQgbWVhbnMgdGhhdAorICAg
ICAgICAgICAgICAgICAgICAjIHRoZSBsaW5lIGlzIG5ld2x5IGFkZGVkLgorICAgICAgICAgICAg
ICAgICAgICBpZiBub3QgbGluZVswXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbnVt
YmVycy5hZGQobGluZVsxXSkKKworICAgICAgICAgICAgaWYgbGluZV9udW1iZXIgaW4gbGluZV9u
dW1iZXJzOgorICAgICAgICAgICAgICAgIGNwcF9zdHlsZS5lcnJvcihmaWxlbmFtZSwgbGluZV9u
dW1iZXIsIGNhdGVnb3J5LCBjb25maWRlbmNlLCBtZXNzYWdlKQorCisgICAgICAgIGlmIGNwcF9z
dHlsZS5jYW5faGFuZGxlKGZpbGVuYW1lKToKKyAgICAgICAgICAgIGNwcF9zdHlsZS5wcm9jZXNz
X2ZpbGUoZmlsZW5hbWUsIGVycm9yPWVycm9yX2Zvcl9wYXRjaCkKKyAgICAgICAgZWxpZiB0ZXh0
X3N0eWxlLmNhbl9oYW5kbGUoZmlsZW5hbWUpOgorICAgICAgICAgICAgdGV4dF9zdHlsZS5wcm9j
ZXNzX2ZpbGUoZmlsZW5hbWUsIGVycm9yPWVycm9yX2Zvcl9wYXRjaCkKKworCitkZWYgZXJyb3Jf
Y291bnQoKToKKyAgICAiIiJSZXR1cm5zIHRoZSB0b3RhbCBlcnJvciBjb3VudC4iIiIKKyAgICBy
ZXR1cm4gY3BwX3N0eWxlLmVycm9yX2NvdW50KCkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHkJKHJldmlzaW9u
IDUyODQ5KQkoZnJvbSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlX3VuaXR0ZXN0
LnB5OjUyODQ5KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vy
X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE1IEBACisjIS91c3IvYmlu
L3B5dGhvbgorIyAtKi0gY29kaW5nOiB1dGYtODsgLSotCisjCisjIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMDkg
VG9yY2ggTW9iaWxlIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDEwIENocmlzIEplcmRvbmVrIChjaHJp
cy5qZXJkb25la0BnbWFpbC5jb20pCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisj
IG1ldDoKKyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisj
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJVbml0IHRlc3RzIGZv
ciBzdHlsZS5weS4iIiIKKworaW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBzdHlsZQorCisKK2Ns
YXNzIERlZmF1bHRBcmd1bWVudHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICIiIlRl
c3RzIHZhbGlkaXR5IG9mIGRlZmF1bHQgYXJndW1lbnRzIHVzZWQgYnkgY2hlY2std2Via2l0LXN0
eWxlLiIiIgorCisgICAgZGVmIHRlc3RfZmlsdGVyX3J1bGVzKHNlbGYpOgorICAgICAgICBhbHJl
YWR5X3NlZW4gPSBbXQorICAgICAgICBmb3IgcnVsZSBpbiBzdHlsZS5XRUJLSVRfRklMVEVSX1JV
TEVTOgorICAgICAgICAgICAgIyBBbGwgY2F0ZWdvcmllcyBhcmUgb24gYnkgZGVmYXVsdCwgc28g
ZGVmYXVsdHMgc2hvdWxkCisgICAgICAgICAgICAjIGJlZ2luIHdpdGggLS4KKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShydWxlLnN0YXJ0c3dpdGgoJy0nKSkKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShydWxlWzE6XSBpbiBzdHlsZS5TVFlMRV9DQVRFR09SSUVTKQorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRGYWxzZShydWxlIGluIGFscmVhZHlfc2VlbikKKyAgICAgICAgICAgIGFs
cmVhZHlfc2Vlbi5hcHBlbmQocnVsZSkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRzKHNlbGYpOgor
ICAgICAgICAiIiJDaGVjayB0aGF0IGRlZmF1bHQgYXJndW1lbnRzIGFyZSB2YWxpZC4iIiIKKyAg
ICAgICAgZGVmYXVsdHMgPSBzdHlsZS5Bcmd1bWVudERlZmF1bHRzKHN0eWxlLkRFRkFVTFRfT1VU
UFVUX0ZPUk1BVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
eWxlLkRFRkFVTFRfVkVSQk9TSVRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3R5bGUuV0VCS0lUX0ZJTFRFUl9SVUxFUykKKyAgICAgICAgIyBGSVhNRTogV2Ug
c2hvdWxkIG5vdCBuZWVkIHRvIGNhbGwgcGFyc2UoKSB0byBkZXRlcm1pbmUKKyAgICAgICAgIyAg
ICAgICAgd2hldGhlciB0aGUgZGVmYXVsdCBhcmd1bWVudHMgYXJlIHZhbGlkLgorICAgICAgICBw
YXJzZXIgPSBzdHlsZS5Bcmd1bWVudFBhcnNlcihkZWZhdWx0cykKKyAgICAgICAgIyBObyBuZWVk
IHRvIHRlc3QgdGhlIHJldHVybiB2YWx1ZSBoZXJlIHNpbmNlIHdlIHRlc3QgcGFyc2UoKQorICAg
ICAgICAjIG9uIHZhbGlkIGFyZ3VtZW50cyBlbHNld2hlcmUuCisgICAgICAgIHBhcnNlci5wYXJz
ZShbXSkgIyBhcmd1bWVudHMgdmFsaWQ6IG5vIGVycm9yIG9yIFN5c3RlbUV4aXQKKworCitjbGFz
cyBBcmd1bWVudFByaW50ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICIiIlRlc3Rz
IHRoZSBBcmd1bWVudFByaW50ZXIgY2xhc3MuIiIiCisKKyAgICBfcHJpbnRlciA9IHN0eWxlLkFy
Z3VtZW50UHJpbnRlcigpCisKKyAgICBkZWYgX2NyZWF0ZV9vcHRpb25zKHNlbGYsIG91dHB1dF9m
b3JtYXQ9J2VtYWNzJywgdmVyYm9zaXR5PTMsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWx0
ZXJfcnVsZXM9W10sIGdpdF9jb21taXQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4
dHJhX2ZsYWdfdmFsdWVzPXt9KToKKyAgICAgICAgcmV0dXJuIHN0eWxlLlByb2Nlc3Nvck9wdGlv
bnMob3V0cHV0X2Zvcm1hdCwgdmVyYm9zaXR5LCBmaWx0ZXJfcnVsZXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdpdF9jb21taXQsIGV4dHJhX2ZsYWdfdmFsdWVzKQor
CisgICAgZGVmIHRlc3RfdG9fZmxhZ19zdHJpbmcoc2VsZik6CisgICAgICAgIG9wdGlvbnMgPSBz
ZWxmLl9jcmVhdGVfb3B0aW9ucygndnM3JywgNSwgWycrZm9vJywgJy1iYXInXSwgJ2dpdCcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiAwLCAneic6IDF9KQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnLS1hPTAgLS1maWx0ZXI9K2ZvbywtYmFyIC0tZ2l0
LWNvbW1pdD1naXQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1vdXRwdXQ9dnM3IC0t
dmVyYm9zZT01IC0tej0xJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRl
ci50b19mbGFnX3N0cmluZyhvcHRpb25zKSkKKworICAgICAgICAjIFRoaXMgaXMgdG8gY2hlY2sg
dGhhdCAtLWZpbHRlciBhbmQgLS1naXQtY29tbWl0IGRvIG5vdAorICAgICAgICAjIHNob3cgdXAg
d2hlbiBub3QgdXNlci1zcGVjaWZpZWQuCisgICAgICAgIG9wdGlvbnMgPSBzZWxmLl9jcmVhdGVf
b3B0aW9ucygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCctLW91dHB1dD1lbWFjcyAtLXZl
cmJvc2U9MycsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIudG9fZmxh
Z19zdHJpbmcob3B0aW9ucykpCisKKworY2xhc3MgQXJndW1lbnRQYXJzZXJUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKKworICAgICIiIlRlc3QgdGhlIEFyZ3VtZW50UGFyc2VyIGNsYXNzLiIiIgor
CisgICAgZGVmIF9wYXJzZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgZGVmYXVsdCBwYXJz
ZSgpIGZ1bmN0aW9uIGZvciB0ZXN0aW5nLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fY3JlYXRl
X3BhcnNlcigpLnBhcnNlCisKKyAgICBkZWYgX2NyZWF0ZV9kZWZhdWx0cyhzZWxmLCBkZWZhdWx0
X291dHB1dF9mb3JtYXQ9J3ZzNycsCisgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF92
ZXJib3NpdHk9MywKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X2ZpbHRlcl9ydWxl
cz1bJy0nLCAnK3doaXRlc3BhY2UnXSk6CisgICAgICAgICIiIiJSZXR1cm4gYSBkZWZhdWx0IEFy
Z3VtZW50RGVmYXVsdHMgaW5zdGFuY2UgZm9yIHRlc3RpbmcuIiIiCisgICAgICAgIHJldHVybiBz
dHlsZS5Bcmd1bWVudERlZmF1bHRzKGRlZmF1bHRfb3V0cHV0X2Zvcm1hdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF92ZXJib3NpdHksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfZmlsdGVyX3J1bGVzKQorCisgICAg
ZGVmIF9jcmVhdGVfcGFyc2VyKHNlbGYsIGRlZmF1bHRzPU5vbmUpOgorICAgICAgICAiIiIiUmV0
dXJuIGFuIEFyZ3VtZW50UGFyc2VyIGluc3RhbmNlIGZvciB0ZXN0aW5nLiIiIgorICAgICAgICBk
ZWYgY3JlYXRlX3VzYWdlKF9kZWZhdWx0cyk6CisgICAgICAgICAgICAiIiJSZXR1cm4gYSB1c2Fn
ZSBzdHJpbmcgZm9yIHRlc3RpbmcuIiIiCisgICAgICAgICAgICByZXR1cm4gInVzYWdlIgorCisg
ICAgICAgIGRlZiBkb2NfcHJpbnQobWVzc2FnZSk6CisgICAgICAgICAgICAjIFdlIGRvIG5vdCB3
YW50IHRoZSB1c2FnZSBzdHJpbmcgb3Igc3R5bGUgY2F0ZWdvcmllcworICAgICAgICAgICAgIyB0
byBwcmludCBkdXJpbmcgdW5pdCB0ZXN0cywgc28gcHJpbnQgbm90aGluZy4KKyAgICAgICAgICAg
IHJldHVybgorCisgICAgICAgIGlmIGRlZmF1bHRzIGlzIE5vbmU6CisgICAgICAgICAgICBkZWZh
dWx0cyA9IHNlbGYuX2NyZWF0ZV9kZWZhdWx0cygpCisKKyAgICAgICAgcmV0dXJuIHN0eWxlLkFy
Z3VtZW50UGFyc2VyKGRlZmF1bHRzLCBjcmVhdGVfdXNhZ2UsIGRvY19wcmludCkKKworICAgIGRl
ZiB0ZXN0X3BhcnNlX2RvY3VtZW50YXRpb24oc2VsZik6CisgICAgICAgIHBhcnNlID0gc2VsZi5f
cGFyc2UoKQorCisgICAgICAgICMgRklYTUU6IFRlc3QgYm90aCB0aGUgcHJpbnRpbmcgb2YgdGhl
IHVzYWdlIHN0cmluZyBhbmQgdGhlCisgICAgICAgICMgICAgICAgIGZpbHRlciBjYXRlZ29yaWVz
IGhlbHAuCisKKyAgICAgICAgIyBSZXF1ZXN0IHRoZSB1c2FnZSBzdHJpbmcuCisgICAgICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQsIHBhcnNlLCBbJy0taGVscCddKQorICAgICAgICAj
IFJlcXVlc3QgZGVmYXVsdCBmaWx0ZXIgcnVsZXMgYW5kIGF2YWlsYWJsZSBzdHlsZSBjYXRlZ29y
aWVzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBwYXJzZSwgWyctLWZp
bHRlcj0nXSkKKworICAgIGRlZiB0ZXN0X3BhcnNlX2JhZF92YWx1ZXMoc2VsZik6CisgICAgICAg
IHBhcnNlID0gc2VsZi5fcGFyc2UoKQorCisgICAgICAgICMgUGFzcyBhbiB1bnN1cHBvcnRlZCBh
cmd1bWVudC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCwgcGFyc2UsIFsn
LS1iYWQnXSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwYXJzZSwg
WyctLXZlcmJvc2U9YmFkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3Is
IHBhcnNlLCBbJy0tdmVyYm9zZT0wJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVl
RXJyb3IsIHBhcnNlLCBbJy0tdmVyYm9zZT02J10pCisgICAgICAgIHBhcnNlKFsnLS12ZXJib3Nl
PTEnXSkgIyB3b3JrcworICAgICAgICBwYXJzZShbJy0tdmVyYm9zZT01J10pICMgd29ya3MKKwor
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwYXJzZSwgWyctLW91dHB1dD1i
YWQnXSkKKyAgICAgICAgcGFyc2UoWyctLW91dHB1dD12czcnXSkgIyB3b3JrcworCisgICAgICAg
ICMgUGFzcyBhIGZpbHRlciBydWxlIG5vdCBiZWdpbm5pbmcgd2l0aCArIG9yIC0uCisgICAgICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBhcnNlLCBbJy0tZmlsdGVyPWZvbyddKQor
ICAgICAgICBwYXJzZShbJy0tZmlsdGVyPStmb28nXSkgIyB3b3JrcworICAgICAgICAjIFBhc3Mg
ZmlsZXMgYW5kIGdpdC1jb21taXQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoU3lzdGVtRXhpdCwgcGFyc2UsIFsnLS1naXQtY29tbWl0PScsICdmaWxlLnR4dCdd
KQorICAgICAgICAjIFBhc3MgYW4gZXh0cmEgZmxhZyBhbHJlYWR5IHN1cHBvcnRlZC4KKyAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGFyc2UsIFtdLCBbJ2ZpbHRlcj0nXSkK
KyAgICAgICAgcGFyc2UoW10sIFsnZXh0cmE9J10pICMgd29ya3MKKyAgICAgICAgIyBQYXNzIGFu
IGV4dHJhIGZsYWcgd2l0aCB0eXBvLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1F
eGl0LCBwYXJzZSwgWyctLWV4dHJhdHlwbz0nXSwgWydleHRyYT0nXSkKKyAgICAgICAgcGFyc2Uo
WyctLWV4dHJhPSddLCBbJ2V4dHJhPSddKSAjIHdvcmtzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFp
c2VzKFZhbHVlRXJyb3IsIHBhcnNlLCBbXSwgWydleHRyYT0nLCAnZXh0cmE9J10pCisKKworICAg
IGRlZiB0ZXN0X3BhcnNlX2RlZmF1bHRfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICBwYXJzZSA9
IHNlbGYuX3BhcnNlKCkKKworICAgICAgICAoZmlsZXMsIG9wdGlvbnMpID0gcGFyc2UoW10pCisK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZmlsZXMsIFtdKQorCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKG9wdGlvbnMub3V0cHV0X2Zvcm1hdCwgJ3ZzNycpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKG9wdGlvbnMudmVyYm9zaXR5LCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhvcHRpb25zLmZpbHRlcl9ydWxlcywgWyctJywgJyt3aGl0ZXNwYWNlJ10pCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKG9wdGlvbnMuZ2l0X2NvbW1pdCwgTm9uZSkKKworICAgIGRlZiB0ZXN0
X3BhcnNlX2V4cGxpY2l0X2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgcGFyc2UgPSBzZWxmLl9w
YXJzZSgpCisKKyAgICAgICAgIyBQYXNzIG5vbi1kZWZhdWx0IGV4cGxpY2l0IHZhbHVlcy4KKyAg
ICAgICAgKGZpbGVzLCBvcHRpb25zKSA9IHBhcnNlKFsnLS1vdXRwdXQ9ZW1hY3MnXSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5vdXRwdXRfZm9ybWF0LCAnZW1hY3MnKQorICAg
ICAgICAoZmlsZXMsIG9wdGlvbnMpID0gcGFyc2UoWyctLXZlcmJvc2U9NCddKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhvcHRpb25zLnZlcmJvc2l0eSwgNCkKKyAgICAgICAgKGZpbGVzLCBv
cHRpb25zKSA9IHBhcnNlKFsnLS1naXQtY29tbWl0PWNvbW1pdCddKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhvcHRpb25zLmdpdF9jb21taXQsICdjb21taXQnKQorICAgICAgICAoZmlsZXMs
IG9wdGlvbnMpID0gcGFyc2UoWyctLWZpbHRlcj0rZm9vLC1iYXInXSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMob3B0aW9ucy5maWx0ZXJfcnVsZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIFsnLScsICcrd2hpdGVzcGFjZScsICcrZm9vJywgJy1iYXInXSkKKworICAgICAgICAjIFBh
c3MgZXh0cmEgZmxhZyB2YWx1ZXMuCisgICAgICAgIChmaWxlcywgb3B0aW9ucykgPSBwYXJzZShb
Jy0tZXh0cmEnXSwgWydleHRyYSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25z
LmV4dHJhX2ZsYWdfdmFsdWVzLCB7Jy0tZXh0cmEnOiAnJ30pCisgICAgICAgIChmaWxlcywgb3B0
aW9ucykgPSBwYXJzZShbJy0tZXh0cmE9J10sIFsnZXh0cmE9J10pCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKG9wdGlvbnMuZXh0cmFfZmxhZ192YWx1ZXMsIHsnLS1leHRyYSc6ICcnfSkKKyAg
ICAgICAgKGZpbGVzLCBvcHRpb25zKSA9IHBhcnNlKFsnLS1leHRyYT14J10sIFsnZXh0cmE9J10p
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wdGlvbnMuZXh0cmFfZmxhZ192YWx1ZXMsIHsn
LS1leHRyYSc6ICd4J30pCisKKyAgICBkZWYgdGVzdF9wYXJzZV9maWxlcyhzZWxmKToKKyAgICAg
ICAgcGFyc2UgPSBzZWxmLl9wYXJzZSgpCisKKyAgICAgICAgKGZpbGVzLCBvcHRpb25zKSA9IHBh
cnNlKFsnZm9vLmNwcCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmaWxlcywgWydmb28u
Y3BwJ10pCisKKyAgICAgICAgIyBQYXNzIG11bHRpcGxlIGZpbGVzLgorICAgICAgICAoZmlsZXMs
IG9wdGlvbnMpID0gcGFyc2UoWyctLW91dHB1dD1lbWFjcycsICdmb28uY3BwJywgJ2Jhci5jcHAn
XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZmlsZXMsIFsnZm9vLmNwcCcsICdiYXIuY3Bw
J10pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgc3lzCisKKyAg
ICB1bml0dGVzdC5tYWluKCkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5
bGUvY2hlY2tlcl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDUyODQ5KQorKysg
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAKIGltcG9ydCB1bml0dGVzdAogCi1pbXBv
cnQgc3R5bGUKK2ltcG9ydCBjaGVja2VyIGFzIHN0eWxlCiAKIAogY2xhc3MgRGVmYXVsdEFyZ3Vt
ZW50c1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9jcHBfc3R5bGUucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jcHBfc3R5bGUucHkJKHJldmlzaW9uIDUyODQ5KQkoZnJvbSBX
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NwcF9zdHlsZS5weTo1Mjg0OSkKKysrIFdlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY3BwX3N0eWxlLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzA2MiBAQAorIyEvdXNyL2Jpbi9weXRob24KKyMgLSotIGNvZGluZzogdXRm
LTggLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4KKyMgQ29weXJp
Z2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKyMgVGhpcyBpcyB0aGUgbW9kaWZpZWQgdmVyc2lvbiBvZiBHb29nbGUncyBjcHBsaW50
LiBUaGUgb3JpZ2luYWwgY29kZSBpcworIyBodHRwOi8vZ29vZ2xlLXN0eWxlZ3VpZGUuZ29vZ2xl
Y29kZS5jb20vc3ZuL3RydW5rL2NwcGxpbnQvY3BwbGludC5weQorCisiIiJTdXBwb3J0IGZvciBj
aGVjay13ZWJraXQtc3R5bGUuIiIiCisKK2ltcG9ydCBjb2RlY3MKK2ltcG9ydCBtYXRoICAjIGZv
ciBsb2cKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCByZQoraW1wb3J0IHNyZV9j
b21waWxlCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pY29kZWRhdGEKKwor
CisjIEhlYWRlcnMgdGhhdCB3ZSBjb25zaWRlciBTVEwgaGVhZGVycy4KK19TVExfSEVBREVSUyA9
IGZyb3plbnNldChbCisgICAgJ2FsZ29iYXNlLmgnLCAnYWxnb3JpdGhtJywgJ2FsbG9jLmgnLCAn
Yml0c2V0JywgJ2RlcXVlJywgJ2V4Y2VwdGlvbicsCisgICAgJ2Z1bmN0aW9uLmgnLCAnZnVuY3Rp
b25hbCcsICdoYXNoX21hcCcsICdoYXNoX21hcC5oJywgJ2hhc2hfc2V0JywKKyAgICAnaGFzaF9z
ZXQuaCcsICdpdGVyYXRvcicsICdsaXN0JywgJ2xpc3QuaCcsICdtYXAnLCAnbWVtb3J5JywgJ3Bh
aXIuaCcsCisgICAgJ3B0aHJlYWRfYWxsb2MnLCAncXVldWUnLCAnc2V0JywgJ3NldC5oJywgJ3Nz
dHJlYW0nLCAnc3RhY2snLAorICAgICdzdGxfYWxsb2MuaCcsICdzdGxfcmVsb3BzLmgnLCAndHlw
ZV90cmFpdHMuaCcsCisgICAgJ3V0aWxpdHknLCAndmVjdG9yJywgJ3ZlY3Rvci5oJywKKyAgICBd
KQorCisKKyMgTm9uLVNUTCBDKysgc3lzdGVtIGhlYWRlcnMuCitfQ1BQX0hFQURFUlMgPSBmcm96
ZW5zZXQoWworICAgICdhbGdvLmgnLCAnYnVpbHRpbmJ1Zi5oJywgJ2J2ZWN0b3IuaCcsICdjYXNz
ZXJ0JywgJ2NjdHlwZScsCisgICAgJ2NlcnJubycsICdjZmxvYXQnLCAnY2lzbzY0NicsICdjbGlt
aXRzJywgJ2Nsb2NhbGUnLCAnY21hdGgnLAorICAgICdjb21wbGV4JywgJ2NvbXBsZXguaCcsICdj
c2V0am1wJywgJ2NzaWduYWwnLCAnY3N0ZGFyZycsICdjc3RkZGVmJywKKyAgICAnY3N0ZGlvJywg
J2NzdGRsaWInLCAnY3N0cmluZycsICdjdGltZScsICdjd2NoYXInLCAnY3djdHlwZScsCisgICAg
J2RlZmFsbG9jLmgnLCAnZGVxdWUuaCcsICdlZGl0YnVmLmgnLCAnZXhjZXB0aW9uJywgJ2ZzdHJl
YW0nLAorICAgICdmc3RyZWFtLmgnLCAnaGFzaHRhYmxlLmgnLCAnaGVhcC5oJywgJ2luZHN0cmVh
bS5oJywgJ2lvbWFuaXAnLAorICAgICdpb21hbmlwLmgnLCAnaW9zJywgJ2lvc2Z3ZCcsICdpb3N0
cmVhbScsICdpb3N0cmVhbS5oJywgJ2lzdHJlYW0uaCcsCisgICAgJ2l0ZXJhdG9yLmgnLCAnbGlt
aXRzJywgJ21hcC5oJywgJ211bHRpbWFwLmgnLCAnbXVsdGlzZXQuaCcsCisgICAgJ251bWVyaWMn
LCAnb3N0cmVhbS5oJywgJ3BhcnNlc3RyZWFtLmgnLCAncGZzdHJlYW0uaCcsICdQbG90RmlsZS5o
JywKKyAgICAncHJvY2J1Zi5oJywgJ3B0aHJlYWRfYWxsb2MuaCcsICdyb3BlJywgJ3JvcGUuaCcs
ICdyb3BlaW1wbC5oJywKKyAgICAnU0ZpbGUuaCcsICdzbGlzdCcsICdzbGlzdC5oJywgJ3N0YWNr
LmgnLCAnc3RkZXhjZXB0JywKKyAgICAnc3RkaW9zdHJlYW0uaCcsICdzdHJlYW1idWYuaCcsICdz
dHJlYW0uaCcsICdzdHJmaWxlLmgnLCAnc3RyaW5nJywKKyAgICAnc3Ryc3RyZWFtJywgJ3N0cnN0
cmVhbS5oJywgJ3RlbXBidWYuaCcsICd0cmVlLmgnLCAndHlwZWluZm8nLCAndmFsYXJyYXknLAor
ICAgIF0pCisKKworIyBBc3NlcnRpb24gbWFjcm9zLiAgVGhlc2UgYXJlIGRlZmluZWQgaW4gYmFz
ZS9sb2dnaW5nLmggYW5kCisjIHRlc3RpbmcvYmFzZS9ndW5pdC5oLiAgTm90ZSB0aGF0IHRoZSBf
TSB2ZXJzaW9ucyBuZWVkIHRvIGNvbWUgZmlyc3QKKyMgZm9yIHN1YnN0cmluZyBtYXRjaGluZyB0
byB3b3JrLgorX0NIRUNLX01BQ1JPUyA9IFsKKyAgICAnRENIRUNLJywgJ0NIRUNLJywKKyAgICAn
RVhQRUNUX1RSVUVfTScsICdFWFBFQ1RfVFJVRScsCisgICAgJ0FTU0VSVF9UUlVFX00nLCAnQVNT
RVJUX1RSVUUnLAorICAgICdFWFBFQ1RfRkFMU0VfTScsICdFWFBFQ1RfRkFMU0UnLAorICAgICdB
U1NFUlRfRkFMU0VfTScsICdBU1NFUlRfRkFMU0UnLAorICAgIF0KKworIyBSZXBsYWNlbWVudCBt
YWNyb3MgZm9yIENIRUNLL0RDSEVDSy9FWFBFQ1RfVFJVRS9FWFBFQ1RfRkFMU0UKK19DSEVDS19S
RVBMQUNFTUVOVCA9IGRpY3QoWyhtLCB7fSkgZm9yIG0gaW4gX0NIRUNLX01BQ1JPU10pCisKK2Zv
ciBvcCwgcmVwbGFjZW1lbnQgaW4gWygnPT0nLCAnRVEnKSwgKCchPScsICdORScpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgKCc+PScsICdHRScpLCAoJz4nLCAnR1QnKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICgnPD0nLCAnTEUnKSwgKCc8JywgJ0xUJyldOgorICAgIF9DSEVDS19SRVBM
QUNFTUVOVFsnRENIRUNLJ11bb3BdID0gJ0RDSEVDS18lcycgJSByZXBsYWNlbWVudAorICAgIF9D
SEVDS19SRVBMQUNFTUVOVFsnQ0hFQ0snXVtvcF0gPSAnQ0hFQ0tfJXMnICUgcmVwbGFjZW1lbnQK
KyAgICBfQ0hFQ0tfUkVQTEFDRU1FTlRbJ0VYUEVDVF9UUlVFJ11bb3BdID0gJ0VYUEVDVF8lcycg
JSByZXBsYWNlbWVudAorICAgIF9DSEVDS19SRVBMQUNFTUVOVFsnQVNTRVJUX1RSVUUnXVtvcF0g
PSAnQVNTRVJUXyVzJyAlIHJlcGxhY2VtZW50CisgICAgX0NIRUNLX1JFUExBQ0VNRU5UWydFWFBF
Q1RfVFJVRV9NJ11bb3BdID0gJ0VYUEVDVF8lc19NJyAlIHJlcGxhY2VtZW50CisgICAgX0NIRUNL
X1JFUExBQ0VNRU5UWydBU1NFUlRfVFJVRV9NJ11bb3BdID0gJ0FTU0VSVF8lc19NJyAlIHJlcGxh
Y2VtZW50CisKK2ZvciBvcCwgaW52X3JlcGxhY2VtZW50IGluIFsoJz09JywgJ05FJyksICgnIT0n
LCAnRVEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJz49JywgJ0xUJyksICgnPics
ICdMRScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnPD0nLCAnR1QnKSwgKCc8Jywg
J0dFJyldOgorICAgIF9DSEVDS19SRVBMQUNFTUVOVFsnRVhQRUNUX0ZBTFNFJ11bb3BdID0gJ0VY
UEVDVF8lcycgJSBpbnZfcmVwbGFjZW1lbnQKKyAgICBfQ0hFQ0tfUkVQTEFDRU1FTlRbJ0FTU0VS
VF9GQUxTRSddW29wXSA9ICdBU1NFUlRfJXMnICUgaW52X3JlcGxhY2VtZW50CisgICAgX0NIRUNL
X1JFUExBQ0VNRU5UWydFWFBFQ1RfRkFMU0VfTSddW29wXSA9ICdFWFBFQ1RfJXNfTScgJSBpbnZf
cmVwbGFjZW1lbnQKKyAgICBfQ0hFQ0tfUkVQTEFDRU1FTlRbJ0FTU0VSVF9GQUxTRV9NJ11bb3Bd
ID0gJ0FTU0VSVF8lc19NJyAlIGludl9yZXBsYWNlbWVudAorCisKKyMgVGhlc2UgY29uc3RhbnRz
IGRlZmluZSB0eXBlcyBvZiBoZWFkZXJzIGZvciB1c2Ugd2l0aAorIyBfSW5jbHVkZVN0YXRlLmNo
ZWNrX25leHRfaW5jbHVkZV9vcmRlcigpLgorX0NPTkZJR19IRUFERVIgPSAwCitfUFJJTUFSWV9I
RUFERVIgPSAxCitfT1RIRVJfSEVBREVSID0gMgorX01PQ19IRUFERVIgPSAzCisKKworIyBUaGUg
cmVnZXhwIGNvbXBpbGF0aW9uIGNhY2hpbmcgaXMgaW5saW5lZCBpbiBhbGwgcmVnZXhwIGZ1bmN0
aW9ucyBmb3IKKyMgcGVyZm9ybWFuY2UgcmVhc29uczsgZmFjdG9yaW5nIGl0IG91dCBpbnRvIGEg
c2VwYXJhdGUgZnVuY3Rpb24gdHVybnMgb3V0CisjIHRvIGJlIG5vdGljZWFibHkgZXhwZW5zaXZl
LgorX3JlZ2V4cF9jb21waWxlX2NhY2hlID0ge30KKworCitkZWYgbWF0Y2gocGF0dGVybiwgcyk6
CisgICAgIiIiTWF0Y2hlcyB0aGUgc3RyaW5nIHdpdGggdGhlIHBhdHRlcm4sIGNhY2hpbmcgdGhl
IGNvbXBpbGVkIHJlZ2V4cC4iIiIKKyAgICBpZiBub3QgcGF0dGVybiBpbiBfcmVnZXhwX2NvbXBp
bGVfY2FjaGU6CisgICAgICAgIF9yZWdleHBfY29tcGlsZV9jYWNoZVtwYXR0ZXJuXSA9IHNyZV9j
b21waWxlLmNvbXBpbGUocGF0dGVybikKKyAgICByZXR1cm4gX3JlZ2V4cF9jb21waWxlX2NhY2hl
W3BhdHRlcm5dLm1hdGNoKHMpCisKKworZGVmIHNlYXJjaChwYXR0ZXJuLCBzKToKKyAgICAiIiJT
ZWFyY2hlcyB0aGUgc3RyaW5nIGZvciB0aGUgcGF0dGVybiwgY2FjaGluZyB0aGUgY29tcGlsZWQg
cmVnZXhwLiIiIgorICAgIGlmIG5vdCBwYXR0ZXJuIGluIF9yZWdleHBfY29tcGlsZV9jYWNoZToK
KyAgICAgICAgX3JlZ2V4cF9jb21waWxlX2NhY2hlW3BhdHRlcm5dID0gc3JlX2NvbXBpbGUuY29t
cGlsZShwYXR0ZXJuKQorICAgIHJldHVybiBfcmVnZXhwX2NvbXBpbGVfY2FjaGVbcGF0dGVybl0u
c2VhcmNoKHMpCisKKworZGVmIHN1YihwYXR0ZXJuLCByZXBsYWNlbWVudCwgcyk6CisgICAgIiIi
U3Vic3RpdHV0ZXMgb2NjdXJyZW5jZXMgb2YgYSBwYXR0ZXJuLCBjYWNoaW5nIHRoZSBjb21waWxl
ZCByZWdleHAuIiIiCisgICAgaWYgbm90IHBhdHRlcm4gaW4gX3JlZ2V4cF9jb21waWxlX2NhY2hl
OgorICAgICAgICBfcmVnZXhwX2NvbXBpbGVfY2FjaGVbcGF0dGVybl0gPSBzcmVfY29tcGlsZS5j
b21waWxlKHBhdHRlcm4pCisgICAgcmV0dXJuIF9yZWdleHBfY29tcGlsZV9jYWNoZVtwYXR0ZXJu
XS5zdWIocmVwbGFjZW1lbnQsIHMpCisKKworZGVmIHN1Ym4ocGF0dGVybiwgcmVwbGFjZW1lbnQs
IHMpOgorICAgICIiIlN1YnN0aXR1dGVzIG9jY3VycmVuY2VzIG9mIGEgcGF0dGVybiwgY2FjaGlu
ZyB0aGUgY29tcGlsZWQgcmVnZXhwLiIiIgorICAgIGlmIG5vdCBwYXR0ZXJuIGluIF9yZWdleHBf
Y29tcGlsZV9jYWNoZToKKyAgICAgICAgX3JlZ2V4cF9jb21waWxlX2NhY2hlW3BhdHRlcm5dID0g
c3JlX2NvbXBpbGUuY29tcGlsZShwYXR0ZXJuKQorICAgIHJldHVybiBfcmVnZXhwX2NvbXBpbGVf
Y2FjaGVbcGF0dGVybl0uc3VibihyZXBsYWNlbWVudCwgcykKKworCitjbGFzcyBfSW5jbHVkZVN0
YXRlKGRpY3QpOgorICAgICIiIlRyYWNrcyBsaW5lIG51bWJlcnMgZm9yIGluY2x1ZGVzLCBhbmQg
dGhlIG9yZGVyIGluIHdoaWNoIGluY2x1ZGVzIGFwcGVhci4KKworICAgIEFzIGEgZGljdCwgYW4g
X0luY2x1ZGVTdGF0ZSBvYmplY3Qgc2VydmVzIGFzIGEgbWFwcGluZyBiZXR3ZWVuIGluY2x1ZGUK
KyAgICBmaWxlbmFtZSBhbmQgbGluZSBudW1iZXIgb24gd2hpY2ggdGhhdCBmaWxlIHdhcyBpbmNs
dWRlZC4KKworICAgIENhbGwgY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKCkgb25jZSBmb3IgZWFj
aCBoZWFkZXIgaW4gdGhlIGZpbGUsIHBhc3NpbmcKKyAgICBpbiB0aGUgdHlwZSBjb25zdGFudHMg
ZGVmaW5lZCBhYm92ZS4gQ2FsbHMgaW4gYW4gaWxsZWdhbCBvcmRlciB3aWxsCisgICAgcmFpc2Ug
YW4gX0luY2x1ZGVFcnJvciB3aXRoIGFuIGFwcHJvcHJpYXRlIGVycm9yIG1lc3NhZ2UuCisKKyAg
ICAiIiIKKyAgICAjIHNlbGYuX3NlY3Rpb24gd2lsbCBtb3ZlIG1vbm90b25pY2FsbHkgdGhyb3Vn
aCB0aGlzIHNldC4gSWYgaXQgZXZlcgorICAgICMgbmVlZHMgdG8gbW92ZSBiYWNrd2FyZHMsIGNo
ZWNrX25leHRfaW5jbHVkZV9vcmRlciB3aWxsIHJhaXNlIGFuIGVycm9yLgorICAgIF9JTklUSUFM
X1NFQ1RJT04gPSAwCisgICAgX0NPTkZJR19TRUNUSU9OID0gMQorICAgIF9QUklNQVJZX1NFQ1RJ
T04gPSAyCisgICAgX09USEVSX1NFQ1RJT04gPSAzCisKKyAgICBfVFlQRV9OQU1FUyA9IHsKKyAg
ICAgICAgX0NPTkZJR19IRUFERVI6ICdXZWJDb3JlIGNvbmZpZy5oJywKKyAgICAgICAgX1BSSU1B
UllfSEVBREVSOiAnaGVhZGVyIHRoaXMgZmlsZSBpbXBsZW1lbnRzJywKKyAgICAgICAgX09USEVS
X0hFQURFUjogJ290aGVyIGhlYWRlcicsCisgICAgICAgIF9NT0NfSEVBREVSOiAnbW9jIGZpbGUn
LAorICAgICAgICB9CisgICAgX1NFQ1RJT05fTkFNRVMgPSB7CisgICAgICAgIF9JTklUSUFMX1NF
Q1RJT046ICIuLi4gbm90aGluZy4iLAorICAgICAgICBfQ09ORklHX1NFQ1RJT046ICJXZWJDb3Jl
IGNvbmZpZy5oLiIsCisgICAgICAgIF9QUklNQVJZX1NFQ1RJT046ICdhIGhlYWRlciB0aGlzIGZp
bGUgaW1wbGVtZW50cy4nLAorICAgICAgICBfT1RIRVJfU0VDVElPTjogJ290aGVyIGhlYWRlci4n
LAorICAgICAgICB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGRpY3QuX19p
bml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fc2VjdGlvbiA9IHNlbGYuX0lOSVRJQUxfU0VDVElP
TgorICAgICAgICBzZWxmLl92aXNpdGVkX3ByaW1hcnlfc2VjdGlvbiA9IEZhbHNlCisgICAgICAg
IHNlbGYuaGVhZGVyX3R5cGVzID0gZGljdCgpOworCisgICAgZGVmIHZpc2l0ZWRfcHJpbWFyeV9z
ZWN0aW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdmlzaXRlZF9wcmltYXJ5X3NlY3Rp
b24KKworICAgIGRlZiBjaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoc2VsZiwgaGVhZGVyX3R5cGUs
IGZpbGVfaXNfaGVhZGVyKToKKyAgICAgICAgIiIiUmV0dXJucyBhIG5vbi1lbXB0eSBlcnJvciBt
ZXNzYWdlIGlmIHRoZSBuZXh0IGhlYWRlciBpcyBvdXQgb2Ygb3JkZXIuCisKKyAgICAgICAgVGhp
cyBmdW5jdGlvbiBhbHNvIHVwZGF0ZXMgdGhlIGludGVybmFsIHN0YXRlIHRvIGJlIHJlYWR5IHRv
IGNoZWNrCisgICAgICAgIHRoZSBuZXh0IGluY2x1ZGUuCisKKyAgICAgICAgQXJnczoKKyAgICAg
ICAgICBoZWFkZXJfdHlwZTogT25lIG9mIHRoZSBfWFhYX0hFQURFUiBjb25zdGFudHMgZGVmaW5l
ZCBhYm92ZS4KKyAgICAgICAgICBmaWxlX2lzX2hlYWRlcjogV2hldGhlciB0aGUgZmlsZSB0aGF0
IG93bnMgdGhpcyBfSW5jbHVkZVN0YXRlIGlzIGl0c2VsZiBhIGhlYWRlcgorCisgICAgICAgIFJl
dHVybnM6CisgICAgICAgICAgVGhlIGVtcHR5IHN0cmluZyBpZiB0aGUgaGVhZGVyIGlzIGluIHRo
ZSByaWdodCBvcmRlciwgb3IgYW4KKyAgICAgICAgICBlcnJvciBtZXNzYWdlIGRlc2NyaWJpbmcg
d2hhdCdzIHdyb25nLgorCisgICAgICAgICIiIgorICAgICAgICBpZiBoZWFkZXJfdHlwZSA9PSBf
Q09ORklHX0hFQURFUiBhbmQgZmlsZV9pc19oZWFkZXI6CisgICAgICAgICAgICByZXR1cm4gJ0hl
YWRlciBmaWxlIHNob3VsZCBub3QgY29udGFpbiBXZWJDb3JlIGNvbmZpZy5oLicKKyAgICAgICAg
aWYgaGVhZGVyX3R5cGUgPT0gX1BSSU1BUllfSEVBREVSIGFuZCBmaWxlX2lzX2hlYWRlcjoKKyAg
ICAgICAgICAgIHJldHVybiAnSGVhZGVyIGZpbGUgc2hvdWxkIG5vdCBjb250YWluIGl0c2VsZi4n
CisgICAgICAgIGlmIGhlYWRlcl90eXBlID09IF9NT0NfSEVBREVSOgorICAgICAgICAgICAgcmV0
dXJuICcnCisKKyAgICAgICAgZXJyb3JfbWVzc2FnZSA9ICcnCisgICAgICAgIGlmIHNlbGYuX3Nl
Y3Rpb24gIT0gc2VsZi5fT1RIRVJfU0VDVElPTjoKKyAgICAgICAgICAgIGJlZm9yZV9lcnJvcl9t
ZXNzYWdlID0gKCdGb3VuZCAlcyBiZWZvcmUgJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChzZWxmLl9UWVBFX05BTUVTW2hlYWRlcl90eXBlXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9TRUNUSU9OX05BTUVTW3NlbGYuX3NlY3Rp
b24gKyAxXSkpCisgICAgICAgIGFmdGVyX2Vycm9yX21lc3NhZ2UgPSAoJ0ZvdW5kICVzIGFmdGVy
ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9UWVBFX05BTUVT
W2hlYWRlcl90eXBlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX1NF
Q1RJT05fTkFNRVNbc2VsZi5fc2VjdGlvbl0pKQorCisgICAgICAgIGlmIGhlYWRlcl90eXBlID09
IF9DT05GSUdfSEVBREVSOgorICAgICAgICAgICAgaWYgc2VsZi5fc2VjdGlvbiA+PSBzZWxmLl9D
T05GSUdfU0VDVElPTjoKKyAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gYWZ0ZXJfZXJy
b3JfbWVzc2FnZQorICAgICAgICAgICAgc2VsZi5fc2VjdGlvbiA9IHNlbGYuX0NPTkZJR19TRUNU
SU9OCisgICAgICAgIGVsaWYgaGVhZGVyX3R5cGUgPT0gX1BSSU1BUllfSEVBREVSOgorICAgICAg
ICAgICAgaWYgc2VsZi5fc2VjdGlvbiA+PSBzZWxmLl9QUklNQVJZX1NFQ1RJT046CisgICAgICAg
ICAgICAgICAgZXJyb3JfbWVzc2FnZSA9IGFmdGVyX2Vycm9yX21lc3NhZ2UKKyAgICAgICAgICAg
IGVsaWYgc2VsZi5fc2VjdGlvbiA8IHNlbGYuX0NPTkZJR19TRUNUSU9OOgorICAgICAgICAgICAg
ICAgIGVycm9yX21lc3NhZ2UgPSBiZWZvcmVfZXJyb3JfbWVzc2FnZQorICAgICAgICAgICAgc2Vs
Zi5fc2VjdGlvbiA9IHNlbGYuX1BSSU1BUllfU0VDVElPTgorICAgICAgICAgICAgc2VsZi5fdmlz
aXRlZF9wcmltYXJ5X3NlY3Rpb24gPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBh
c3NlcnQgaGVhZGVyX3R5cGUgPT0gX09USEVSX0hFQURFUgorICAgICAgICAgICAgaWYgbm90IGZp
bGVfaXNfaGVhZGVyIGFuZCBzZWxmLl9zZWN0aW9uIDwgc2VsZi5fUFJJTUFSWV9TRUNUSU9OOgor
ICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UgPSBiZWZvcmVfZXJyb3JfbWVzc2FnZQorICAg
ICAgICAgICAgc2VsZi5fc2VjdGlvbiA9IHNlbGYuX09USEVSX1NFQ1RJT04KKworICAgICAgICBy
ZXR1cm4gZXJyb3JfbWVzc2FnZQorCisKK2NsYXNzIF9DcHBTdHlsZVN0YXRlKG9iamVjdCk6Cisg
ICAgIiIiTWFpbnRhaW5zIG1vZHVsZS13aWRlIHN0YXRlLi4iIiIKKworICAgIGRlZiBfX2luaXRf
XyhzZWxmKToKKyAgICAgICAgc2VsZi52ZXJib3NlX2xldmVsID0gMSAgIyBnbG9iYWwgc2V0dGlu
Zy4KKyAgICAgICAgc2VsZi5lcnJvcl9jb3VudCA9IDAgICAgIyBnbG9iYWwgY291bnQgb2YgcmVw
b3J0ZWQgZXJyb3JzCisgICAgICAgICMgZmlsdGVycyB0byBhcHBseSB3aGVuIGVtaXR0aW5nIGVy
cm9yIG1lc3NhZ2VzCisgICAgICAgIHNlbGYuZmlsdGVycyA9IFtdCisKKyAgICAgICAgIyBvdXRw
dXQgZm9ybWF0OgorICAgICAgICAjICJlbWFjcyIgLSBmb3JtYXQgdGhhdCBlbWFjcyBjYW4gcGFy
c2UgKGRlZmF1bHQpCisgICAgICAgICMgInZzNyIgLSBmb3JtYXQgdGhhdCBNaWNyb3NvZnQgVmlz
dWFsIFN0dWRpbyA3IGNhbiBwYXJzZQorICAgICAgICBzZWxmLm91dHB1dF9mb3JtYXQgPSAnZW1h
Y3MnCisKKyAgICBkZWYgc2V0X291dHB1dF9mb3JtYXQoc2VsZiwgb3V0cHV0X2Zvcm1hdCk6Cisg
ICAgICAgICIiIlNldHMgdGhlIG91dHB1dCBmb3JtYXQgZm9yIGVycm9ycy4iIiIKKyAgICAgICAg
c2VsZi5vdXRwdXRfZm9ybWF0ID0gb3V0cHV0X2Zvcm1hdAorCisgICAgZGVmIHNldF92ZXJib3Nl
X2xldmVsKHNlbGYsIGxldmVsKToKKyAgICAgICAgIiIiU2V0cyB0aGUgbW9kdWxlJ3MgdmVyYm9z
aXR5LCBhbmQgcmV0dXJucyB0aGUgcHJldmlvdXMgc2V0dGluZy4iIiIKKyAgICAgICAgbGFzdF92
ZXJib3NlX2xldmVsID0gc2VsZi52ZXJib3NlX2xldmVsCisgICAgICAgIHNlbGYudmVyYm9zZV9s
ZXZlbCA9IGxldmVsCisgICAgICAgIHJldHVybiBsYXN0X3ZlcmJvc2VfbGV2ZWwKKworICAgIGRl
ZiBzZXRfZmlsdGVycyhzZWxmLCBmaWx0ZXJzKToKKyAgICAgICAgIiIiU2V0cyB0aGUgZXJyb3It
bWVzc2FnZSBmaWx0ZXJzLgorCisgICAgICAgIFRoZXNlIGZpbHRlcnMgYXJlIGFwcGxpZWQgd2hl
biBkZWNpZGluZyB3aGV0aGVyIHRvIGVtaXQgYSBnaXZlbgorICAgICAgICBlcnJvciBtZXNzYWdl
LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgZmlsdGVyczogQSBsaXN0IG9mIHN0cmluZ3Mg
dGhhdCBhcmUgYm9vbGVhbiBmaWx0ZXIgcnVsZXMgdXNlZAorICAgICAgICAgICAgICAgICAgIHRv
IGRldGVybWluZSB3aGV0aGVyIGEgc3R5bGUgY2F0ZWdvcnkgc2hvdWxkIGJlIGNoZWNrZWQuCisg
ICAgICAgICAgICAgICAgICAgRWFjaCBzdHJpbmcgc2hvdWxkIHN0YXJ0IHdpdGggKyBvciAtLiBB
biBleGFtcGxlCisgICAgICAgICAgICAgICAgICAgc3RyaW5nIGlzICIrd2hpdGVzcGFjZS9pbmRl
bnQiLiBUaGUgbGlzdCBpbmNsdWRlcyBhbnkKKyAgICAgICAgICAgICAgICAgICBwcmVwZW5kZWQg
ZGVmYXVsdCBmaWx0ZXIgcnVsZXMuCisKKyAgICAgICAgUmFpc2VzOgorICAgICAgICAgIFZhbHVl
RXJyb3I6IE5vdCBhbGwgZmlsdGVycyBzdGFydGVkIHdpdGggJysnIG9yICctJy4gRm9yIGV4YW1w
bGUsCisgICAgICAgICAgICAgICAgICAgICAgIi0sK3doaXRlc3BhY2UsLXdoaXRlc3BhY2UvaW5k
ZW50LHdoaXRlc3BhY2UvYmFkZmlsdGVyIgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5maWx0
ZXJzID0gW10KKyAgICAgICAgZm9yIGZpbHRlciBpbiBmaWx0ZXJzOgorICAgICAgICAgICAgY2xl
YW5fZmlsdGVyID0gZmlsdGVyLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIGNsZWFuX2ZpbHRlcjoK
KyAgICAgICAgICAgICAgICBzZWxmLmZpbHRlcnMuYXBwZW5kKGNsZWFuX2ZpbHRlcikKKyAgICAg
ICAgZm9yIGZpbHRlciBpbiBzZWxmLmZpbHRlcnM6CisgICAgICAgICAgICBpZiBub3QgKGZpbHRl
ci5zdGFydHN3aXRoKCcrJykgb3IgZmlsdGVyLnN0YXJ0c3dpdGgoJy0nKSk6CisgICAgICAgICAg
ICAgICAgcmFpc2UgVmFsdWVFcnJvcignRXZlcnkgZmlsdGVyIGluIC0tZmlsdGVyIG11c3Qgc3Rh
cnQgd2l0aCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKyBvciAtICglcyBk
b2VzIG5vdCknICUgZmlsdGVyKQorCisgICAgZGVmIHJlc2V0X2Vycm9yX2NvdW50KHNlbGYpOgor
ICAgICAgICAiIiJTZXRzIHRoZSBtb2R1bGUncyBlcnJvciBzdGF0aXN0aWMgYmFjayB0byB6ZXJv
LiIiIgorICAgICAgICBzZWxmLmVycm9yX2NvdW50ID0gMAorCisgICAgZGVmIGluY3JlbWVudF9l
cnJvcl9jb3VudChzZWxmKToKKyAgICAgICAgIiIiQnVtcHMgdGhlIG1vZHVsZSdzIGVycm9yIHN0
YXRpc3RpYy4iIiIKKyAgICAgICAgc2VsZi5lcnJvcl9jb3VudCArPSAxCisKKworX2NwcF9zdHls
ZV9zdGF0ZSA9IF9DcHBTdHlsZVN0YXRlKCkKKworCitkZWYgX291dHB1dF9mb3JtYXQoKToKKyAg
ICAiIiJHZXRzIHRoZSBtb2R1bGUncyBvdXRwdXQgZm9ybWF0LiIiIgorICAgIHJldHVybiBfY3Bw
X3N0eWxlX3N0YXRlLm91dHB1dF9mb3JtYXQKKworCitkZWYgX3NldF9vdXRwdXRfZm9ybWF0KG91
dHB1dF9mb3JtYXQpOgorICAgICIiIlNldHMgdGhlIG1vZHVsZSdzIG91dHB1dCBmb3JtYXQuIiIi
CisgICAgX2NwcF9zdHlsZV9zdGF0ZS5zZXRfb3V0cHV0X2Zvcm1hdChvdXRwdXRfZm9ybWF0KQor
CisKK2RlZiBfdmVyYm9zZV9sZXZlbCgpOgorICAgICIiIlJldHVybnMgdGhlIG1vZHVsZSdzIHZl
cmJvc2l0eSBzZXR0aW5nLiIiIgorICAgIHJldHVybiBfY3BwX3N0eWxlX3N0YXRlLnZlcmJvc2Vf
bGV2ZWwKKworCitkZWYgX3NldF92ZXJib3NlX2xldmVsKGxldmVsKToKKyAgICAiIiJTZXRzIHRo
ZSBtb2R1bGUncyB2ZXJib3NpdHksIGFuZCByZXR1cm5zIHRoZSBwcmV2aW91cyBzZXR0aW5nLiIi
IgorICAgIHJldHVybiBfY3BwX3N0eWxlX3N0YXRlLnNldF92ZXJib3NlX2xldmVsKGxldmVsKQor
CisKK2RlZiBfZmlsdGVycygpOgorICAgICIiIlJldHVybnMgdGhlIG1vZHVsZSdzIGxpc3Qgb2Yg
b3V0cHV0IGZpbHRlcnMsIGFzIGEgbGlzdC4iIiIKKyAgICByZXR1cm4gX2NwcF9zdHlsZV9zdGF0
ZS5maWx0ZXJzCisKKworZGVmIF9zZXRfZmlsdGVycyhmaWx0ZXJzKToKKyAgICAiIiJTZXRzIHRo
ZSBtb2R1bGUncyBlcnJvci1tZXNzYWdlIGZpbHRlcnMuCisKKyAgICBUaGVzZSBmaWx0ZXJzIGFy
ZSBhcHBsaWVkIHdoZW4gZGVjaWRpbmcgd2hldGhlciB0byBlbWl0IGEgZ2l2ZW4KKyAgICBlcnJv
ciBtZXNzYWdlLgorCisgICAgQXJnczoKKyAgICAgIGZpbHRlcnM6IEEgbGlzdCBvZiBzdHJpbmdz
IHRoYXQgYXJlIGJvb2xlYW4gZmlsdGVyIHJ1bGVzIHVzZWQKKyAgICAgICAgICAgICAgIHRvIGRl
dGVybWluZSB3aGV0aGVyIGEgc3R5bGUgY2F0ZWdvcnkgc2hvdWxkIGJlIGNoZWNrZWQuCisgICAg
ICAgICAgICAgICBFYWNoIHN0cmluZyBzaG91bGQgc3RhcnQgd2l0aCArIG9yIC0uIEFuIGV4YW1w
bGUKKyAgICAgICAgICAgICAgIHN0cmluZyBpcyAiK3doaXRlc3BhY2UvaW5kZW50Ii4gVGhlIGxp
c3QgaW5jbHVkZXMgYW55CisgICAgICAgICAgICAgICBwcmVwZW5kZWQgZGVmYXVsdCBmaWx0ZXIg
cnVsZXMuCisgICAgIiIiCisgICAgX2NwcF9zdHlsZV9zdGF0ZS5zZXRfZmlsdGVycyhmaWx0ZXJz
KQorCisKK2RlZiBlcnJvcl9jb3VudCgpOgorICAgICIiIlJldHVybnMgdGhlIGdsb2JhbCBjb3Vu
dCBvZiByZXBvcnRlZCBlcnJvcnMuIiIiCisgICAgcmV0dXJuIF9jcHBfc3R5bGVfc3RhdGUuZXJy
b3JfY291bnQKKworCitjbGFzcyBfRnVuY3Rpb25TdGF0ZShvYmplY3QpOgorICAgICIiIlRyYWNr
cyBjdXJyZW50IGZ1bmN0aW9uIG5hbWUgYW5kIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gaXRzIGJv
ZHkuIiIiCisKKyAgICBfTk9STUFMX1RSSUdHRVIgPSAyNTAgICMgZm9yIC0tdj0wLCA1MDAgZm9y
IC0tdj0xLCBldGMuCisgICAgX1RFU1RfVFJJR0dFUiA9IDQwMCAgICAjIGFib3V0IDUwJSBtb3Jl
IHRoYW4gX05PUk1BTF9UUklHR0VSLgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAg
ICBzZWxmLmluX2FfZnVuY3Rpb24gPSBGYWxzZQorICAgICAgICBzZWxmLmxpbmVzX2luX2Z1bmN0
aW9uID0gMAorICAgICAgICBzZWxmLmN1cnJlbnRfZnVuY3Rpb24gPSAnJworCisgICAgZGVmIGJl
Z2luKHNlbGYsIGZ1bmN0aW9uX25hbWUpOgorICAgICAgICAiIiJTdGFydCBhbmFseXppbmcgZnVu
Y3Rpb24gYm9keS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZnVuY3Rpb25fbmFtZTog
VGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIGJlaW5nIHRyYWNrZWQuCisgICAgICAgICIiIgorICAg
ICAgICBzZWxmLmluX2FfZnVuY3Rpb24gPSBUcnVlCisgICAgICAgIHNlbGYubGluZXNfaW5fZnVu
Y3Rpb24gPSAwCisgICAgICAgIHNlbGYuY3VycmVudF9mdW5jdGlvbiA9IGZ1bmN0aW9uX25hbWUK
KworICAgIGRlZiBjb3VudChzZWxmKToKKyAgICAgICAgIiIiQ291bnQgbGluZSBpbiBjdXJyZW50
IGZ1bmN0aW9uIGJvZHkuIiIiCisgICAgICAgIGlmIHNlbGYuaW5fYV9mdW5jdGlvbjoKKyAgICAg
ICAgICAgIHNlbGYubGluZXNfaW5fZnVuY3Rpb24gKz0gMQorCisgICAgZGVmIGNoZWNrKHNlbGYs
IGVycm9yLCBmaWxlbmFtZSwgbGluZV9udW1iZXIpOgorICAgICAgICAiIiJSZXBvcnQgaWYgdG9v
IG1hbnkgbGluZXMgaW4gZnVuY3Rpb24gYm9keS4KKworICAgICAgICBBcmdzOgorICAgICAgICAg
IGVycm9yOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91bmQuCisgICAg
ICAgICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuCisgICAgICAgICAg
bGluZV9udW1iZXI6IFRoZSBudW1iZXIgb2YgdGhlIGxpbmUgdG8gY2hlY2suCisgICAgICAgICIi
IgorICAgICAgICBpZiBtYXRjaChyJ1QoRVNUfGVzdCknLCBzZWxmLmN1cnJlbnRfZnVuY3Rpb24p
OgorICAgICAgICAgICAgYmFzZV90cmlnZ2VyID0gc2VsZi5fVEVTVF9UUklHR0VSCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBiYXNlX3RyaWdnZXIgPSBzZWxmLl9OT1JNQUxfVFJJR0dFUgor
ICAgICAgICB0cmlnZ2VyID0gYmFzZV90cmlnZ2VyICogMiAqKiBfdmVyYm9zZV9sZXZlbCgpCisK
KyAgICAgICAgaWYgc2VsZi5saW5lc19pbl9mdW5jdGlvbiA+IHRyaWdnZXI6CisgICAgICAgICAg
ICBlcnJvcl9sZXZlbCA9IGludChtYXRoLmxvZyhzZWxmLmxpbmVzX2luX2Z1bmN0aW9uIC8gYmFz
ZV90cmlnZ2VyLCAyKSkKKyAgICAgICAgICAgICMgNTAgPT4gMCwgMTAwID0+IDEsIDIwMCA9PiAy
LCA0MDAgPT4gMywgODAwID0+IDQsIDE2MDAgPT4gNSwgLi4uCisgICAgICAgICAgICBpZiBlcnJv
cl9sZXZlbCA+IDU6CisgICAgICAgICAgICAgICAgZXJyb3JfbGV2ZWwgPSA1CisgICAgICAgICAg
ICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdyZWFkYWJpbGl0eS9mbl9zaXplJywgZXJy
b3JfbGV2ZWwsCisgICAgICAgICAgICAgICAgICAnU21hbGwgYW5kIGZvY3VzZWQgZnVuY3Rpb25z
IGFyZSBwcmVmZXJyZWQ6JworICAgICAgICAgICAgICAgICAgJyAlcyBoYXMgJWQgbm9uLWNvbW1l
bnQgbGluZXMnCisgICAgICAgICAgICAgICAgICAnIChlcnJvciB0cmlnZ2VyZWQgYnkgZXhjZWVk
aW5nICVkIGxpbmVzKS4nICAlICgKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRf
ZnVuY3Rpb24sIHNlbGYubGluZXNfaW5fZnVuY3Rpb24sIHRyaWdnZXIpKQorCisgICAgZGVmIGVu
ZChzZWxmKToKKyAgICAgICAgIiIiU3RvcCBhbmFsaXppbmcgZnVuY3Rpb24gYm9keS4iIiIKKyAg
ICAgICAgc2VsZi5pbl9hX2Z1bmN0aW9uID0gRmFsc2UKKworCitjbGFzcyBfSW5jbHVkZUVycm9y
KEV4Y2VwdGlvbik6CisgICAgIiIiSW5kaWNhdGVzIGEgcHJvYmxlbSB3aXRoIHRoZSBpbmNsdWRl
IG9yZGVyIGluIGEgZmlsZS4iIiIKKyAgICBwYXNzCisKKworY2xhc3MgRmlsZUluZm86CisgICAg
IiIiUHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGZpbGVuYW1lcy4KKworICAgIEZpbGVJ
bmZvIHByb3ZpZGVzIGVhc3kgYWNjZXNzIHRvIHRoZSBjb21wb25lbnRzIG9mIGEgZmlsZSdzIHBh
dGgKKyAgICByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCByb290LgorICAgICIiIgorCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgc2VsZi5fZmlsZW5hbWUgPSBmaWxl
bmFtZQorCisgICAgZGVmIGZ1bGxfbmFtZShzZWxmKToKKyAgICAgICAgIiIiTWFrZSBXaW5kb3dz
IHBhdGhzIGxpa2UgVW5peC4iIiIKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguYWJzcGF0aChzZWxm
Ll9maWxlbmFtZSkucmVwbGFjZSgnXFwnLCAnLycpCisKKyAgICBkZWYgcmVwb3NpdG9yeV9uYW1l
KHNlbGYpOgorICAgICAgICAiIiJGdWxsIG5hbWUgYWZ0ZXIgcmVtb3ZpbmcgdGhlIGxvY2FsIHBh
dGggdG8gdGhlIHJlcG9zaXRvcnkuCisKKyAgICAgICAgSWYgd2UgaGF2ZSBhIHJlYWwgYWJzb2x1
dGUgcGF0aCBuYW1lIGhlcmUgd2UgY2FuIHRyeSB0byBkbyBzb21ldGhpbmcgc21hcnQ6CisgICAg
ICAgIGRldGVjdGluZyB0aGUgcm9vdCBvZiB0aGUgY2hlY2tvdXQgYW5kIHRydW5jYXRpbmcgL3Bh
dGgvdG8vY2hlY2tvdXQgZnJvbQorICAgICAgICB0aGUgbmFtZSBzbyB0aGF0IHdlIGdldCBoZWFk
ZXIgZ3VhcmRzIHRoYXQgZG9uJ3QgaW5jbHVkZSB0aGluZ3MgbGlrZQorICAgICAgICAiQzpcRG9j
dW1lbnRzIGFuZCBTZXR0aW5nc1wuLi4iIG9yICIvaG9tZS91c2VybmFtZS8uLi4iIGluIHRoZW0g
YW5kIHRodXMKKyAgICAgICAgcGVvcGxlIG9uIGRpZmZlcmVudCBjb21wdXRlcnMgd2hvIGhhdmUg
Y2hlY2tlZCB0aGUgc291cmNlIG91dCB0byBkaWZmZXJlbnQKKyAgICAgICAgbG9jYXRpb25zIHdv
bid0IHNlZSBib2d1cyBlcnJvcnMuCisgICAgICAgICIiIgorICAgICAgICBmdWxsbmFtZSA9IHNl
bGYuZnVsbF9uYW1lKCkKKworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmdWxsbmFtZSk6Cisg
ICAgICAgICAgICBwcm9qZWN0X2RpciA9IG9zLnBhdGguZGlybmFtZShmdWxsbmFtZSkKKworICAg
ICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHByb2plY3RfZGlyLCAiLnN2
biIpKToKKyAgICAgICAgICAgICAgICAjIElmIHRoZXJlJ3MgYSAuc3ZuIGZpbGUgaW4gdGhlIGN1
cnJlbnQgZGlyZWN0b3J5LCB3ZQorICAgICAgICAgICAgICAgICMgcmVjdXJzaXZlbHkgbG9vayB1
cCB0aGUgZGlyZWN0b3J5IHRyZWUgZm9yIHRoZSB0b3AKKyAgICAgICAgICAgICAgICAjIG9mIHRo
ZSBTVk4gY2hlY2tvdXQKKyAgICAgICAgICAgICAgICByb290X2RpciA9IHByb2plY3RfZGlyCisg
ICAgICAgICAgICAgICAgb25lX3VwX2RpciA9IG9zLnBhdGguZGlybmFtZShyb290X2RpcikKKyAg
ICAgICAgICAgICAgICB3aGlsZSBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ob25lX3VwX2Rp
ciwgIi5zdm4iKSk6CisgICAgICAgICAgICAgICAgICAgIHJvb3RfZGlyID0gb3MucGF0aC5kaXJu
YW1lKHJvb3RfZGlyKQorICAgICAgICAgICAgICAgICAgICBvbmVfdXBfZGlyID0gb3MucGF0aC5k
aXJuYW1lKG9uZV91cF9kaXIpCisKKyAgICAgICAgICAgICAgICBwcmVmaXggPSBvcy5wYXRoLmNv
bW1vbnByZWZpeChbcm9vdF9kaXIsIHByb2plY3RfZGlyXSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZnVsbG5hbWVbbGVuKHByZWZpeCkgKyAxOl0KKworICAgICAgICAgICAgIyBOb3QgU1ZOPyBU
cnkgdG8gZmluZCBhIGdpdCB0b3AgbGV2ZWwgZGlyZWN0b3J5IGJ5CisgICAgICAgICAgICAjIHNl
YXJjaGluZyB1cCBmcm9tIHRoZSBjdXJyZW50IHBhdGguCisgICAgICAgICAgICByb290X2RpciA9
IG9zLnBhdGguZGlybmFtZShmdWxsbmFtZSkKKyAgICAgICAgICAgIHdoaWxlIChyb290X2RpciAh
PSBvcy5wYXRoLmRpcm5hbWUocm9vdF9kaXIpCisgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBv
cy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocm9vdF9kaXIsICIuZ2l0IikpKToKKyAgICAgICAg
ICAgICAgICByb290X2RpciA9IG9zLnBhdGguZGlybmFtZShyb290X2RpcikKKyAgICAgICAgICAg
ICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocm9vdF9kaXIsICIuZ2l0IikpOgor
ICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSBvcy5wYXRoLmNvbW1vbnByZWZpeChbcm9vdF9k
aXIsIHByb2plY3RfZGlyXSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bGxuYW1lW2xl
bihwcmVmaXgpICsgMTpdCisKKyAgICAgICAgIyBEb24ndCBrbm93IHdoYXQgdG8gZG87IGhlYWRl
ciBndWFyZCB3YXJuaW5ncyBtYXkgYmUgd3JvbmcuLi4KKyAgICAgICAgcmV0dXJuIGZ1bGxuYW1l
CisKKyAgICBkZWYgc3BsaXQoc2VsZik6CisgICAgICAgICIiIlNwbGl0cyB0aGUgZmlsZSBpbnRv
IHRoZSBkaXJlY3RvcnksIGJhc2VuYW1lLCBhbmQgZXh0ZW5zaW9uLgorCisgICAgICAgIEZvciAn
Y2hyb21lL2Jyb3dzZXIvYnJvd3Nlci5jcHAnLCBTcGxpdCgpIHdvdWxkCisgICAgICAgIHJldHVy
biAoJ2Nocm9tZS9icm93c2VyJywgJ2Jyb3dzZXInLCAnLmNwcCcpCisKKyAgICAgICAgUmV0dXJu
czoKKyAgICAgICAgICBBIHR1cGxlIG9mIChkaXJlY3RvcnksIGJhc2VuYW1lLCBleHRlbnNpb24p
LgorICAgICAgICAiIiIKKworICAgICAgICBnb29nbGVuYW1lID0gc2VsZi5yZXBvc2l0b3J5X25h
bWUoKQorICAgICAgICBwcm9qZWN0LCByZXN0ID0gb3MucGF0aC5zcGxpdChnb29nbGVuYW1lKQor
ICAgICAgICByZXR1cm4gKHByb2plY3QsKSArIG9zLnBhdGguc3BsaXRleHQocmVzdCkKKworICAg
IGRlZiBiYXNlX25hbWUoc2VsZik6CisgICAgICAgICIiIkZpbGUgYmFzZSBuYW1lIC0gdGV4dCBh
ZnRlciB0aGUgZmluYWwgc2xhc2gsIGJlZm9yZSB0aGUgZmluYWwgcGVyaW9kLiIiIgorICAgICAg
ICByZXR1cm4gc2VsZi5zcGxpdCgpWzFdCisKKyAgICBkZWYgZXh0ZW5zaW9uKHNlbGYpOgorICAg
ICAgICAiIiJGaWxlIGV4dGVuc2lvbiAtIHRleHQgZm9sbG93aW5nIHRoZSBmaW5hbCBwZXJpb2Qu
IiIiCisgICAgICAgIHJldHVybiBzZWxmLnNwbGl0KClbMl0KKworICAgIGRlZiBub19leHRlbnNp
b24oc2VsZik6CisgICAgICAgICIiIkZpbGUgaGFzIG5vIHNvdXJjZSBmaWxlIGV4dGVuc2lvbi4i
IiIKKyAgICAgICAgcmV0dXJuICcvJy5qb2luKHNlbGYuc3BsaXQoKVswOjJdKQorCisgICAgZGVm
IGlzX3NvdXJjZShzZWxmKToKKyAgICAgICAgIiIiRmlsZSBoYXMgYSBzb3VyY2UgZmlsZSBleHRl
bnNpb24uIiIiCisgICAgICAgIHJldHVybiBzZWxmLmV4dGVuc2lvbigpWzE6XSBpbiAoJ2MnLCAn
Y2MnLCAnY3BwJywgJ2N4eCcpCisKKworZGVmIF9zaG91bGRfcHJpbnRfZXJyb3IoY2F0ZWdvcnks
IGNvbmZpZGVuY2UpOgorICAgICIiIlJldHVybnMgdHJ1ZSBpZmYgY29uZmlkZW5jZSA+PSB2ZXJi
b3NlLCBhbmQgY2F0ZWdvcnkgcGFzc2VzIGZpbHRlci4iIiIKKyAgICAjIFRoZXJlIGFyZSB0d28g
d2F5cyB3ZSBtaWdodCBkZWNpZGUgbm90IHRvIHByaW50IGFuIGVycm9yIG1lc3NhZ2U6CisgICAg
IyB0aGUgdmVyYm9zaXR5IGxldmVsIGlzbid0IGhpZ2ggZW5vdWdoLCBvciB0aGUgZmlsdGVycyBm
aWx0ZXIgaXQgb3V0LgorICAgIGlmIGNvbmZpZGVuY2UgPCBfY3BwX3N0eWxlX3N0YXRlLnZlcmJv
c2VfbGV2ZWw6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgaXNfZmlsdGVyZWQgPSBGYWxz
ZQorICAgIGZvciBvbmVfZmlsdGVyIGluIF9maWx0ZXJzKCk6CisgICAgICAgIGlmIG9uZV9maWx0
ZXIuc3RhcnRzd2l0aCgnLScpOgorICAgICAgICAgICAgaWYgY2F0ZWdvcnkuc3RhcnRzd2l0aChv
bmVfZmlsdGVyWzE6XSk6CisgICAgICAgICAgICAgICAgaXNfZmlsdGVyZWQgPSBUcnVlCisgICAg
ICAgIGVsaWYgb25lX2ZpbHRlci5zdGFydHN3aXRoKCcrJyk6CisgICAgICAgICAgICBpZiBjYXRl
Z29yeS5zdGFydHN3aXRoKG9uZV9maWx0ZXJbMTpdKToKKyAgICAgICAgICAgICAgICBpc19maWx0
ZXJlZCA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgRmFsc2UgICMg
c2hvdWxkIGhhdmUgYmVlbiBjaGVja2VkIGZvciBpbiBzZXRfZmlsdGVyLgorICAgIGlmIGlzX2Zp
bHRlcmVkOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHJldHVybiBUcnVlCisKKworZGVm
IGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgY2F0ZWdvcnksIGNvbmZpZGVuY2UsIG1lc3Nh
Z2UpOgorICAgICIiIkxvZ3MgdGhlIGZhY3Qgd2UndmUgZm91bmQgYSBsaW50IGVycm9yLgorCisg
ICAgV2UgbG9nIHdoZXJlIHRoZSBlcnJvciB3YXMgZm91bmQsIGFuZCBhbHNvIG91ciBjb25maWRl
bmNlIGluIHRoZSBlcnJvciwKKyAgICB0aGF0IGlzLCBob3cgY2VydGFpbiB3ZSBhcmUgdGhpcyBp
cyBhIGxlZ2l0aW1hdGUgc3R5bGUgcmVncmVzc2lvbiwgYW5kCisgICAgbm90IGEgbWlzaWRlbnRp
ZmljYXRpb24gb3IgYSB1c2UgdGhhdCdzIHNvbWV0aW1lcyBqdXN0aWZpZWQuCisKKyAgICBBcmdz
OgorICAgICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGVy
cm9yLgorICAgICAgbGluZV9udW1iZXI6IFRoZSBudW1iZXIgb2YgdGhlIGxpbmUgY29udGFpbmlu
ZyB0aGUgZXJyb3IuCisgICAgICBjYXRlZ29yeTogQSBzdHJpbmcgdXNlZCB0byBkZXNjcmliZSB0
aGUgImNhdGVnb3J5IiB0aGlzIGJ1ZworICAgICAgICAgICAgICAgIGZhbGxzIHVuZGVyOiAid2hp
dGVzcGFjZSIsIHNheSwgb3IgInJ1bnRpbWUiLiAgQ2F0ZWdvcmllcworICAgICAgICAgICAgICAg
IG1heSBoYXZlIGEgaGllcmFyY2h5IHNlcGFyYXRlZCBieSBzbGFzaGVzOiAid2hpdGVzcGFjZS9p
bmRlbnQiLgorICAgICAgY29uZmlkZW5jZTogQSBudW1iZXIgZnJvbSAxLTUgcmVwcmVzZW50aW5n
IGEgY29uZmlkZW5jZSBzY29yZSBmb3IKKyAgICAgICAgICAgICAgICAgIHRoZSBlcnJvciwgd2l0
aCA1IG1lYW5pbmcgdGhhdCB3ZSBhcmUgY2VydGFpbiBvZiB0aGUgcHJvYmxlbSwKKyAgICAgICAg
ICAgICAgICAgIGFuZCAxIG1lYW5pbmcgdGhhdCBpdCBjb3VsZCBiZSBhIGxlZ2l0aW1hdGUgY29u
c3RydWN0LgorICAgICAgbWVzc2FnZTogVGhlIGVycm9yIG1lc3NhZ2UuCisgICAgIiIiCisgICAg
IyBUaGVyZSBhcmUgdHdvIHdheXMgd2UgbWlnaHQgZGVjaWRlIG5vdCB0byBwcmludCBhbiBlcnJv
ciBtZXNzYWdlOgorICAgICMgdGhlIHZlcmJvc2l0eSBsZXZlbCBpc24ndCBoaWdoIGVub3VnaCwg
b3IgdGhlIGZpbHRlcnMgZmlsdGVyIGl0IG91dC4KKyAgICBpZiBfc2hvdWxkX3ByaW50X2Vycm9y
KGNhdGVnb3J5LCBjb25maWRlbmNlKToKKyAgICAgICAgX2NwcF9zdHlsZV9zdGF0ZS5pbmNyZW1l
bnRfZXJyb3JfY291bnQoKQorICAgICAgICBpZiBfY3BwX3N0eWxlX3N0YXRlLm91dHB1dF9mb3Jt
YXQgPT0gJ3ZzNyc6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCclcyglcyk6ICAlcyAg
WyVzXSBbJWRdXG4nICUgKAorICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBsaW5lX251bWJlciwg
bWVzc2FnZSwgY2F0ZWdvcnksIGNvbmZpZGVuY2UpKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgc3lzLnN0ZGVyci53cml0ZSgnJXM6JXM6ICAlcyAgWyVzXSBbJWRdXG4nICUgKAorICAgICAg
ICAgICAgICAgIGZpbGVuYW1lLCBsaW5lX251bWJlciwgbWVzc2FnZSwgY2F0ZWdvcnksIGNvbmZp
ZGVuY2UpKQorCisKKyMgTWF0Y2hlcyBzdGFuZGFyZCBDKysgZXNjYXBlIGVzZXF1ZW5jZXMgcGVy
IDIuMTMuMi4zIG9mIHRoZSBDKysgc3RhbmRhcmQuCitfUkVfUEFUVEVSTl9DTEVBTlNFX0xJTkVf
RVNDQVBFUyA9IHJlLmNvbXBpbGUoCisgICAgcidcXChbYWJmbnJ0dj8iXFxcJ118XGQrfHhbMC05
YS1mQS1GXSspJykKKyMgTWF0Y2hlcyBzdHJpbmdzLiAgRXNjYXBlIGNvZGVzIHNob3VsZCBhbHJl
YWR5IGJlIHJlbW92ZWQgYnkgRVNDQVBFUy4KK19SRV9QQVRURVJOX0NMRUFOU0VfTElORV9ET1VC
TEVfUVVPVEVTID0gcmUuY29tcGlsZShyJyJbXiJdKiInKQorIyBNYXRjaGVzIGNoYXJhY3RlcnMu
ICBFc2NhcGUgY29kZXMgc2hvdWxkIGFscmVhZHkgYmUgcmVtb3ZlZCBieSBFU0NBUEVTLgorX1JF
X1BBVFRFUk5fQ0xFQU5TRV9MSU5FX1NJTkdMRV9RVU9URVMgPSByZS5jb21waWxlKHIiJy4nIikK
KyMgTWF0Y2hlcyBtdWx0aS1saW5lIEMrKyBjb21tZW50cy4KKyMgVGhpcyBSRSBpcyBhIGxpdHRs
ZSBiaXQgbW9yZSBjb21wbGljYXRlZCB0aGFuIG9uZSBtaWdodCBleHBlY3QsIGJlY2F1c2Ugd2UK
KyMgaGF2ZSB0byB0YWtlIGNhcmUgb2Ygc3BhY2UgcmVtb3ZhbHMgdG9vbHMgc28gd2UgY2FuIGhh
bmRsZSBjb21tZW50cyBpbnNpZGUKKyMgc3RhdGVtZW50cyBiZXR0ZXIuCisjIFRoZSBjdXJyZW50
IHJ1bGUgaXM6IFdlIG9ubHkgY2xlYXIgc3BhY2VzIGZyb20gYm90aCBzaWRlcyB3aGVuIHdlJ3Jl
IGF0IHRoZQorIyBlbmQgb2YgdGhlIGxpbmUuIE90aGVyd2lzZSwgd2UgdHJ5IHRvIHJlbW92ZSBz
cGFjZXMgZnJvbSB0aGUgcmlnaHQgc2lkZSwKKyMgaWYgdGhpcyBkb2Vzbid0IHdvcmsgd2UgdHJ5
IG9uIGxlZnQgc2lkZSBidXQgb25seSBpZiB0aGVyZSdzIGEgbm9uLWNoYXJhY3RlcgorIyBvbiB0
aGUgcmlnaHQuCitfUkVfUEFUVEVSTl9DTEVBTlNFX0xJTkVfQ19DT01NRU5UUyA9IHJlLmNvbXBp
bGUoCisgICAgciIiIihccyovXCouKlwqL1xzKiR8CisgICAgICAgICAgICAvXCouKlwqL1xzK3wK
KyAgICAgICAgIFxzKy9cKi4qXCovKD89XFcpfAorICAgICAgICAgICAgL1wqLipcKi8pIiIiLCBy
ZS5WRVJCT1NFKQorCisKK2RlZiBpc19jcHBfc3RyaW5nKGxpbmUpOgorICAgICIiIkRvZXMgbGlu
ZSB0ZXJtaW5hdGUgc28sIHRoYXQgdGhlIG5leHQgc3ltYm9sIGlzIGluIHN0cmluZyBjb25zdGFu
dC4KKworICAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY29uc2lkZXIgc2luZ2xlLWxpbmUgbm9y
IG11bHRpLWxpbmUgY29tbWVudHMuCisKKyAgICBBcmdzOgorICAgICAgbGluZTogaXMgYSBwYXJ0
aWFsIGxpbmUgb2YgY29kZSBzdGFydGluZyBmcm9tIHRoZSAwLi5uLgorCisgICAgUmV0dXJuczoK
KyAgICAgIFRydWUsIGlmIG5leHQgY2hhcmFjdGVyIGFwcGVuZGVkIHRvICdsaW5lJyBpcyBpbnNp
ZGUgYQorICAgICAgc3RyaW5nIGNvbnN0YW50LgorICAgICIiIgorCisgICAgbGluZSA9IGxpbmUu
cmVwbGFjZShyJ1xcJywgJ1hYJykgICMgYWZ0ZXIgdGhpcywgXFwiIGRvZXMgbm90IG1hdGNoIHRv
IFwiCisgICAgcmV0dXJuICgobGluZS5jb3VudCgnIicpIC0gbGluZS5jb3VudChyJ1wiJykgLSBs
aW5lLmNvdW50KCInXCInIikpICYgMSkgPT0gMQorCisKK2RlZiBmaW5kX25leHRfbXVsdGlfbGlu
ZV9jb21tZW50X3N0YXJ0KGxpbmVzLCBsaW5lX2luZGV4KToKKyAgICAiIiJGaW5kIHRoZSBiZWdp
bm5pbmcgbWFya2VyIGZvciBhIG11bHRpbGluZSBjb21tZW50LiIiIgorICAgIHdoaWxlIGxpbmVf
aW5kZXggPCBsZW4obGluZXMpOgorICAgICAgICBpZiBsaW5lc1tsaW5lX2luZGV4XS5zdHJpcCgp
LnN0YXJ0c3dpdGgoJy8qJyk6CisgICAgICAgICAgICAjIE9ubHkgcmV0dXJuIHRoaXMgbWFya2Vy
IGlmIHRoZSBjb21tZW50IGdvZXMgYmV5b25kIHRoaXMgbGluZQorICAgICAgICAgICAgaWYgbGlu
ZXNbbGluZV9pbmRleF0uc3RyaXAoKS5maW5kKCcqLycsIDIpIDwgMDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbGluZV9pbmRleAorICAgICAgICBsaW5lX2luZGV4ICs9IDEKKyAgICByZXR1cm4g
bGVuKGxpbmVzKQorCisKK2RlZiBmaW5kX25leHRfbXVsdGlfbGluZV9jb21tZW50X2VuZChsaW5l
cywgbGluZV9pbmRleCk6CisgICAgIiIiV2UgYXJlIGluc2lkZSBhIGNvbW1lbnQsIGZpbmQgdGhl
IGVuZCBtYXJrZXIuIiIiCisgICAgd2hpbGUgbGluZV9pbmRleCA8IGxlbihsaW5lcyk6CisgICAg
ICAgIGlmIGxpbmVzW2xpbmVfaW5kZXhdLnN0cmlwKCkuZW5kc3dpdGgoJyovJyk6CisgICAgICAg
ICAgICByZXR1cm4gbGluZV9pbmRleAorICAgICAgICBsaW5lX2luZGV4ICs9IDEKKyAgICByZXR1
cm4gbGVuKGxpbmVzKQorCisKK2RlZiByZW1vdmVfbXVsdGlfbGluZV9jb21tZW50c19mcm9tX3Jh
bmdlKGxpbmVzLCBiZWdpbiwgZW5kKToKKyAgICAiIiJDbGVhcnMgYSByYW5nZSBvZiBsaW5lcyBm
b3IgbXVsdGktbGluZSBjb21tZW50cy4iIiIKKyAgICAjIEhhdmluZyAvLyBkdW1teSBjb21tZW50
cyBtYWtlcyB0aGUgbGluZXMgbm9uLWVtcHR5LCBzbyB3ZSB3aWxsIG5vdCBnZXQKKyAgICAjIHVu
bmVjZXNzYXJ5IGJsYW5rIGxpbmUgd2FybmluZ3MgbGF0ZXIgaW4gdGhlIGNvZGUuCisgICAgZm9y
IGkgaW4gcmFuZ2UoYmVnaW4sIGVuZCk6CisgICAgICAgIGxpbmVzW2ldID0gJy8vIGR1bW15Jwor
CisKK2RlZiByZW1vdmVfbXVsdGlfbGluZV9jb21tZW50cyhmaWxlbmFtZSwgbGluZXMsIGVycm9y
KToKKyAgICAiIiJSZW1vdmVzIG11bHRpbGluZSAoYy1zdHlsZSkgY29tbWVudHMgZnJvbSBsaW5l
cy4iIiIKKyAgICBsaW5lX2luZGV4ID0gMAorICAgIHdoaWxlIGxpbmVfaW5kZXggPCBsZW4obGlu
ZXMpOgorICAgICAgICBsaW5lX2luZGV4X2JlZ2luID0gZmluZF9uZXh0X211bHRpX2xpbmVfY29t
bWVudF9zdGFydChsaW5lcywgbGluZV9pbmRleCkKKyAgICAgICAgaWYgbGluZV9pbmRleF9iZWdp
biA+PSBsZW4obGluZXMpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGxpbmVfaW5kZXhf
ZW5kID0gZmluZF9uZXh0X211bHRpX2xpbmVfY29tbWVudF9lbmQobGluZXMsIGxpbmVfaW5kZXhf
YmVnaW4pCisgICAgICAgIGlmIGxpbmVfaW5kZXhfZW5kID49IGxlbihsaW5lcyk6CisgICAgICAg
ICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9pbmRleF9iZWdpbiArIDEsICdyZWFkYWJpbGl0eS9t
dWx0aWxpbmVfY29tbWVudCcsIDUsCisgICAgICAgICAgICAgICAgICAnQ291bGQgbm90IGZpbmQg
ZW5kIG9mIG11bHRpLWxpbmUgY29tbWVudCcpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAg
cmVtb3ZlX211bHRpX2xpbmVfY29tbWVudHNfZnJvbV9yYW5nZShsaW5lcywgbGluZV9pbmRleF9i
ZWdpbiwgbGluZV9pbmRleF9lbmQgKyAxKQorICAgICAgICBsaW5lX2luZGV4ID0gbGluZV9pbmRl
eF9lbmQgKyAxCisKKworZGVmIGNsZWFuc2VfY29tbWVudHMobGluZSk6CisgICAgIiIiUmVtb3Zl
cyAvLy1jb21tZW50cyBhbmQgc2luZ2xlLWxpbmUgQy1zdHlsZSAvKiAqLyBjb21tZW50cy4KKwor
ICAgIEFyZ3M6CisgICAgICBsaW5lOiBBIGxpbmUgb2YgQysrIHNvdXJjZS4KKworICAgIFJldHVy
bnM6CisgICAgICBUaGUgbGluZSB3aXRoIHNpbmdsZS1saW5lIGNvbW1lbnRzIHJlbW92ZWQuCisg
ICAgIiIiCisgICAgY29tbWVudF9wb3NpdGlvbiA9IGxpbmUuZmluZCgnLy8nKQorICAgIGlmIGNv
bW1lbnRfcG9zaXRpb24gIT0gLTEgYW5kIG5vdCBpc19jcHBfc3RyaW5nKGxpbmVbOmNvbW1lbnRf
cG9zaXRpb25dKToKKyAgICAgICAgbGluZSA9IGxpbmVbOmNvbW1lbnRfcG9zaXRpb25dCisgICAg
IyBnZXQgcmlkIG9mIC8qIC4uLiAqLworICAgIHJldHVybiBfUkVfUEFUVEVSTl9DTEVBTlNFX0xJ
TkVfQ19DT01NRU5UUy5zdWIoJycsIGxpbmUpCisKKworY2xhc3MgQ2xlYW5zZWRMaW5lcyhvYmpl
Y3QpOgorICAgICIiIkhvbGRzIDMgY29waWVzIG9mIGFsbCBsaW5lcyB3aXRoIGRpZmZlcmVudCBw
cmVwcm9jZXNzaW5nIGFwcGxpZWQgdG8gdGhlbS4KKworICAgIDEpIGVsaWRlZCBtZW1iZXIgY29u
dGFpbnMgbGluZXMgd2l0aG91dCBzdHJpbmdzIGFuZCBjb21tZW50cywKKyAgICAyKSBsaW5lcyBt
ZW1iZXIgY29udGFpbnMgbGluZXMgd2l0aG91dCBjb21tZW50cywgYW5kCisgICAgMykgcmF3IG1l
bWJlciBjb250YWlucyBhbGwgdGhlIGxpbmVzIHdpdGhvdXQgcHJvY2Vzc2luZy4KKyAgICBBbGwg
dGhlc2UgdGhyZWUgbWVtYmVycyBhcmUgb2YgPHR5cGUgJ2xpc3QnPiwgYW5kIG9mIHRoZSBzYW1l
IGxlbmd0aC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5lcyk6CisgICAg
ICAgIHNlbGYuZWxpZGVkID0gW10KKyAgICAgICAgc2VsZi5saW5lcyA9IFtdCisgICAgICAgIHNl
bGYucmF3X2xpbmVzID0gbGluZXMKKyAgICAgICAgc2VsZi5fbnVtX2xpbmVzID0gbGVuKGxpbmVz
KQorICAgICAgICBmb3IgbGluZV9udW1iZXIgaW4gcmFuZ2UobGVuKGxpbmVzKSk6CisgICAgICAg
ICAgICBzZWxmLmxpbmVzLmFwcGVuZChjbGVhbnNlX2NvbW1lbnRzKGxpbmVzW2xpbmVfbnVtYmVy
XSkpCisgICAgICAgICAgICBlbGlkZWQgPSBzZWxmLmNvbGxhcHNlX3N0cmluZ3MobGluZXNbbGlu
ZV9udW1iZXJdKQorICAgICAgICAgICAgc2VsZi5lbGlkZWQuYXBwZW5kKGNsZWFuc2VfY29tbWVu
dHMoZWxpZGVkKSkKKworICAgIGRlZiBudW1fbGluZXMoc2VsZik6CisgICAgICAgICIiIlJldHVy
bnMgdGhlIG51bWJlciBvZiBsaW5lcyByZXByZXNlbnRlZC4iIiIKKyAgICAgICAgcmV0dXJuIHNl
bGYuX251bV9saW5lcworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjb2xsYXBzZV9zdHJp
bmdzKGVsaWRlZCk6CisgICAgICAgICIiIkNvbGxhcHNlcyBzdHJpbmdzIGFuZCBjaGFycyBvbiBh
IGxpbmUgdG8gc2ltcGxlICIiIG9yICcnIGJsb2Nrcy4KKworICAgICAgICBXZSBuaXggc3RyaW5n
cyBmaXJzdCBzbyB3ZSdyZSBub3QgZm9vbGVkIGJ5IHRleHQgbGlrZSAnImh0dHA6Ly8iJworCisg
ICAgICAgIEFyZ3M6CisgICAgICAgICAgZWxpZGVkOiBUaGUgbGluZSBiZWluZyBwcm9jZXNzZWQu
CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICBUaGUgbGluZSB3aXRoIGNvbGxhcHNlZCBz
dHJpbmdzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IF9SRV9QQVRURVJOX0lOQ0xVREUu
bWF0Y2goZWxpZGVkKToKKyAgICAgICAgICAgICMgUmVtb3ZlIGVzY2FwZWQgY2hhcmFjdGVycyBm
aXJzdCB0byBtYWtlIHF1b3RlL3NpbmdsZSBxdW90ZSBjb2xsYXBzaW5nCisgICAgICAgICAgICAj
IGJhc2ljLiAgVGhpbmdzIHRoYXQgbG9vayBsaWtlIGVzY2FwZWQgY2hhcmFjdGVycyBzaG91bGRu
J3Qgb2NjdXIKKyAgICAgICAgICAgICMgb3V0c2lkZSBvZiBzdHJpbmdzIGFuZCBjaGFycy4KKyAg
ICAgICAgICAgIGVsaWRlZCA9IF9SRV9QQVRURVJOX0NMRUFOU0VfTElORV9FU0NBUEVTLnN1Yign
JywgZWxpZGVkKQorICAgICAgICAgICAgZWxpZGVkID0gX1JFX1BBVFRFUk5fQ0xFQU5TRV9MSU5F
X1NJTkdMRV9RVU9URVMuc3ViKCInJyIsIGVsaWRlZCkKKyAgICAgICAgICAgIGVsaWRlZCA9IF9S
RV9QQVRURVJOX0NMRUFOU0VfTElORV9ET1VCTEVfUVVPVEVTLnN1YignIiInLCBlbGlkZWQpCisg
ICAgICAgIHJldHVybiBlbGlkZWQKKworCitkZWYgY2xvc2VfZXhwcmVzc2lvbihjbGVhbl9saW5l
cywgbGluZV9udW1iZXIsIHBvcyk6CisgICAgIiIiSWYgaW5wdXQgcG9pbnRzIHRvICggb3IgeyBv
ciBbLCBmaW5kcyB0aGUgcG9zaXRpb24gdGhhdCBjbG9zZXMgaXQuCisKKyAgICBJZiBsaW5lc1ts
aW5lX251bWJlcl1bcG9zXSBwb2ludHMgdG8gYSAnKCcgb3IgJ3snIG9yICdbJywgZmluZHMgdGhl
IHRoZQorICAgIGxpbmVfbnVtYmVyL3BvcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIGNsb3Npbmcg
b2YgdGhlIGV4cHJlc3Npb24uCisKKyAgICBBcmdzOgorICAgICAgY2xlYW5fbGluZXM6IEEgQ2xl
YW5zZWRMaW5lcyBpbnN0YW5jZSBjb250YWluaW5nIHRoZSBmaWxlLgorICAgICAgbGluZV9udW1i
ZXI6IFRoZSBudW1iZXIgb2YgdGhlIGxpbmUgdG8gY2hlY2suCisgICAgICBwb3M6IEEgcG9zaXRp
b24gb24gdGhlIGxpbmUuCisKKyAgICBSZXR1cm5zOgorICAgICAgQSB0dXBsZSAobGluZSwgbGlu
ZV9udW1iZXIsIHBvcykgcG9pbnRlciAqcGFzdCogdGhlIGNsb3NpbmcgYnJhY2UsIG9yCisgICAg
ICAobGluZSwgbGVuKGxpbmVzKSwgLTEpIGlmIHdlIG5ldmVyIGZpbmQgYSBjbG9zZS4gIE5vdGUg
d2UgaWdub3JlCisgICAgICBzdHJpbmdzIGFuZCBjb21tZW50cyB3aGVuIG1hdGNoaW5nOyBhbmQg
dGhlIGxpbmUgd2UgcmV0dXJuIGlzIHRoZQorICAgICAgJ2NsZWFuc2VkJyBsaW5lIGF0IGxpbmVf
bnVtYmVyLgorICAgICIiIgorCisgICAgbGluZSA9IGNsZWFuX2xpbmVzLmVsaWRlZFtsaW5lX251
bWJlcl0KKyAgICBzdGFydF9jaGFyYWN0ZXIgPSBsaW5lW3Bvc10KKyAgICBpZiBzdGFydF9jaGFy
YWN0ZXIgbm90IGluICcoe1snOgorICAgICAgICByZXR1cm4gKGxpbmUsIGNsZWFuX2xpbmVzLm51
bV9saW5lcygpLCAtMSkKKyAgICBpZiBzdGFydF9jaGFyYWN0ZXIgPT0gJygnOgorICAgICAgICBl
bmRfY2hhcmFjdGVyID0gJyknCisgICAgaWYgc3RhcnRfY2hhcmFjdGVyID09ICdbJzoKKyAgICAg
ICAgZW5kX2NoYXJhY3RlciA9ICddJworICAgIGlmIHN0YXJ0X2NoYXJhY3RlciA9PSAneyc6Cisg
ICAgICAgIGVuZF9jaGFyYWN0ZXIgPSAnfScKKworICAgIG51bV9vcGVuID0gbGluZS5jb3VudChz
dGFydF9jaGFyYWN0ZXIpIC0gbGluZS5jb3VudChlbmRfY2hhcmFjdGVyKQorICAgIHdoaWxlIGxp
bmVfbnVtYmVyIDwgY2xlYW5fbGluZXMubnVtX2xpbmVzKCkgYW5kIG51bV9vcGVuID4gMDoKKyAg
ICAgICAgbGluZV9udW1iZXIgKz0gMQorICAgICAgICBsaW5lID0gY2xlYW5fbGluZXMuZWxpZGVk
W2xpbmVfbnVtYmVyXQorICAgICAgICBudW1fb3BlbiArPSBsaW5lLmNvdW50KHN0YXJ0X2NoYXJh
Y3RlcikgLSBsaW5lLmNvdW50KGVuZF9jaGFyYWN0ZXIpCisgICAgIyBPSywgbm93IGZpbmQgdGhl
IGVuZF9jaGFyYWN0ZXIgdGhhdCBhY3R1YWxseSBnb3QgdXMgYmFjayB0byBldmVuCisgICAgZW5k
cG9zID0gbGVuKGxpbmUpCisgICAgd2hpbGUgbnVtX29wZW4gPj0gMDoKKyAgICAgICAgZW5kcG9z
ID0gbGluZS5yZmluZCgnKScsIDAsIGVuZHBvcykKKyAgICAgICAgbnVtX29wZW4gLT0gMSAgICAg
ICAgICAgICAgICAgIyBjaG9wcGVkIG9mZiBhbm90aGVyICkKKyAgICByZXR1cm4gKGxpbmUsIGxp
bmVfbnVtYmVyLCBlbmRwb3MgKyAxKQorCisKK2RlZiBjaGVja19mb3JfY29weXJpZ2h0KGZpbGVu
YW1lLCBsaW5lcywgZXJyb3IpOgorICAgICIiIkxvZ3MgYW4gZXJyb3IgaWYgbm8gQ29weXJpZ2h0
IG1lc3NhZ2UgYXBwZWFycyBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlLiIiIgorCisgICAgIyBXZSds
bCBzYXkgaXQgc2hvdWxkIG9jY3VyIGJ5IGxpbmUgMTAuIERvbid0IGZvcmdldCB0aGVyZSdzIGEK
KyAgICAjIGR1bW15IGxpbmUgYXQgdGhlIGZyb250LgorICAgIGZvciBsaW5lIGluIHhyYW5nZSgx
LCBtaW4obGVuKGxpbmVzKSwgMTEpKToKKyAgICAgICAgaWYgcmUuc2VhcmNoKHInQ29weXJpZ2h0
JywgbGluZXNbbGluZV0sIHJlLkkpOgorICAgICAgICAgICAgYnJlYWsKKyAgICBlbHNlOiAgICAg
ICAgICAgICAgICAgICAgICAgIyBtZWFucyBubyBjb3B5cmlnaHQgbGluZSB3YXMgZm91bmQKKyAg
ICAgICAgZXJyb3IoZmlsZW5hbWUsIDAsICdsZWdhbC9jb3B5cmlnaHQnLCA1LAorICAgICAgICAg
ICAgICAnTm8gY29weXJpZ2h0IG1lc3NhZ2UgZm91bmQuICAnCisgICAgICAgICAgICAgICdZb3Ug
c2hvdWxkIGhhdmUgYSBsaW5lOiAiQ29weXJpZ2h0IFt5ZWFyXSA8Q29weXJpZ2h0IE93bmVyPiIn
KQorCisKK2RlZiBnZXRfaGVhZGVyX2d1YXJkX2NwcF92YXJpYWJsZShmaWxlbmFtZSk6CisgICAg
IiIiUmV0dXJucyB0aGUgQ1BQIHZhcmlhYmxlIHRoYXQgc2hvdWxkIGJlIHVzZWQgYXMgYSBoZWFk
ZXIgZ3VhcmQuCisKKyAgICBBcmdzOgorICAgICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIGEgQysr
IGhlYWRlciBmaWxlLgorCisgICAgUmV0dXJuczoKKyAgICAgIFRoZSBDUFAgdmFyaWFibGUgdGhh
dCBzaG91bGQgYmUgdXNlZCBhcyBhIGhlYWRlciBndWFyZCBpbiB0aGUKKyAgICAgIG5hbWVkIGZp
bGUuCisKKyAgICAiIiIKKworICAgIHJldHVybiBzdWIocidbLS5cc10nLCAnXycsIG9zLnBhdGgu
YmFzZW5hbWUoZmlsZW5hbWUpKQorCisKK2RlZiBjaGVja19mb3JfaGVhZGVyX2d1YXJkKGZpbGVu
YW1lLCBsaW5lcywgZXJyb3IpOgorICAgICIiIkNoZWNrcyB0aGF0IHRoZSBmaWxlIGNvbnRhaW5z
IGEgaGVhZGVyIGd1YXJkLgorCisgICAgTG9ncyBhbiBlcnJvciBpZiBubyAjaWZuZGVmIGhlYWRl
ciBndWFyZCBpcyBwcmVzZW50LiAgRm9yIG90aGVyCisgICAgaGVhZGVycywgY2hlY2tzIHRoYXQg
dGhlIGZ1bGwgcGF0aG5hbWUgaXMgdXNlZC4KKworICAgIEFyZ3M6CisgICAgICBmaWxlbmFtZTog
VGhlIG5hbWUgb2YgdGhlIEMrKyBoZWFkZXIgZmlsZS4KKyAgICAgIGxpbmVzOiBBbiBhcnJheSBv
ZiBzdHJpbmdzLCBlYWNoIHJlcHJlc2VudGluZyBhIGxpbmUgb2YgdGhlIGZpbGUuCisgICAgICBl
cnJvcjogVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBhbnkgZXJyb3JzIGZvdW5kLgorICAgICIi
IgorCisgICAgY3BwdmFyID0gZ2V0X2hlYWRlcl9ndWFyZF9jcHBfdmFyaWFibGUoZmlsZW5hbWUp
CisKKyAgICBpZm5kZWYgPSBOb25lCisgICAgaWZuZGVmX2xpbmVfbnVtYmVyID0gMAorICAgIGRl
ZmluZSA9IE5vbmUKKyAgICBmb3IgbGluZV9udW1iZXIsIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVz
KToKKyAgICAgICAgbGluZV9zcGxpdCA9IGxpbmUuc3BsaXQoKQorICAgICAgICBpZiBsZW4obGlu
ZV9zcGxpdCkgPj0gMjoKKyAgICAgICAgICAgICMgZmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBv
ZiAjaWZuZGVmIGFuZCAjZGVmaW5lLCBzYXZlIGFyZworICAgICAgICAgICAgaWYgbm90IGlmbmRl
ZiBhbmQgbGluZV9zcGxpdFswXSA9PSAnI2lmbmRlZic6CisgICAgICAgICAgICAgICAgIyBzZXQg
aWZuZGVmIHRvIHRoZSBoZWFkZXIgZ3VhcmQgcHJlc2VudGVkIG9uIHRoZSAjaWZuZGVmIGxpbmUu
CisgICAgICAgICAgICAgICAgaWZuZGVmID0gbGluZV9zcGxpdFsxXQorICAgICAgICAgICAgICAg
IGlmbmRlZl9saW5lX251bWJlciA9IGxpbmVfbnVtYmVyCisgICAgICAgICAgICBpZiBub3QgZGVm
aW5lIGFuZCBsaW5lX3NwbGl0WzBdID09ICcjZGVmaW5lJzoKKyAgICAgICAgICAgICAgICBkZWZp
bmUgPSBsaW5lX3NwbGl0WzFdCisgICAgICAgICAgICBpZiBkZWZpbmUgYW5kIGlmbmRlZjoKKyAg
ICAgICAgICAgICAgICBicmVhaworCisgICAgaWYgbm90IGlmbmRlZiBvciBub3QgZGVmaW5lIG9y
IGlmbmRlZiAhPSBkZWZpbmU6CisgICAgICAgIGVycm9yKGZpbGVuYW1lLCAwLCAnYnVpbGQvaGVh
ZGVyX2d1YXJkJywgNSwKKyAgICAgICAgICAgICAgJ05vICNpZm5kZWYgaGVhZGVyIGd1YXJkIGZv
dW5kLCBzdWdnZXN0ZWQgQ1BQIHZhcmlhYmxlIGlzOiAlcycgJQorICAgICAgICAgICAgICBjcHB2
YXIpCisgICAgICAgIHJldHVybgorCisgICAgIyBUaGUgZ3VhcmQgc2hvdWxkIGJlIEZpbGVfaC4K
KyAgICBpZiBpZm5kZWYgIT0gY3BwdmFyOgorICAgICAgICBlcnJvcihmaWxlbmFtZSwgaWZuZGVm
X2xpbmVfbnVtYmVyLCAnYnVpbGQvaGVhZGVyX2d1YXJkJywgNSwKKyAgICAgICAgICAgICAgJyNp
Zm5kZWYgaGVhZGVyIGd1YXJkIGhhcyB3cm9uZyBzdHlsZSwgcGxlYXNlIHVzZTogJXMnICUgY3Bw
dmFyKQorCisKK2RlZiBjaGVja19mb3JfdW5pY29kZV9yZXBsYWNlbWVudF9jaGFyYWN0ZXJzKGZp
bGVuYW1lLCBsaW5lcywgZXJyb3IpOgorICAgICIiIkxvZ3MgYW4gZXJyb3IgZm9yIGVhY2ggbGlu
ZSBjb250YWluaW5nIFVuaWNvZGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVycy4KKworICAgIFRoZXNl
IGluZGljYXRlIHRoYXQgZWl0aGVyIHRoZSBmaWxlIGNvbnRhaW5lZCBpbnZhbGlkIFVURi04IChs
aWtlbHkpCisgICAgb3IgVW5pY29kZSByZXBsYWNlbWVudCBjaGFyYWN0ZXJzICh3aGljaCBpdCBz
aG91bGRuJ3QpLiAgTm90ZSB0aGF0CisgICAgaXQncyBwb3NzaWJsZSBmb3IgdGhpcyB0byB0aHJv
dyBvZmYgbGluZSBudW1iZXJpbmcgaWYgdGhlIGludmFsaWQKKyAgICBVVEYtOCBvY2N1cnJlZCBh
ZGphY2VudCB0byBhIG5ld2xpbmUuCisKKyAgICBBcmdzOgorICAgICAgZmlsZW5hbWU6IFRoZSBu
YW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuCisgICAgICBsaW5lczogQW4gYXJyYXkgb2Ygc3RyaW5n
cywgZWFjaCByZXByZXNlbnRpbmcgYSBsaW5lIG9mIHRoZSBmaWxlLgorICAgICAgZXJyb3I6IFRo
ZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4KKyAgICAiIiIKKyAgICBm
b3IgbGluZV9udW1iZXIsIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzKToKKyAgICAgICAgaWYgdSdc
dWZmZmQnIGluIGxpbmU6CisgICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIs
ICdyZWFkYWJpbGl0eS91dGY4JywgNSwKKyAgICAgICAgICAgICAgICAgICdMaW5lIGNvbnRhaW5z
IGludmFsaWQgVVRGLTggKG9yIFVuaWNvZGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVyKS4nKQorCisK
K2RlZiBjaGVja19mb3JfbmV3X2xpbmVfYXRfZW9mKGZpbGVuYW1lLCBsaW5lcywgZXJyb3IpOgor
ICAgICIiIkxvZ3MgYW4gZXJyb3IgaWYgdGhlcmUgaXMgbm8gbmV3bGluZSBjaGFyIGF0IHRoZSBl
bmQgb2YgdGhlIGZpbGUuCisKKyAgICBBcmdzOgorICAgICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9m
IHRoZSBjdXJyZW50IGZpbGUuCisgICAgICBsaW5lczogQW4gYXJyYXkgb2Ygc3RyaW5ncywgZWFj
aCByZXByZXNlbnRpbmcgYSBsaW5lIG9mIHRoZSBmaWxlLgorICAgICAgZXJyb3I6IFRoZSBmdW5j
dGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4KKyAgICAiIiIKKworICAgICMgVGhl
IGFycmF5IGxpbmVzKCkgd2FzIGNyZWF0ZWQgYnkgYWRkaW5nIHR3byBuZXdsaW5lcyB0byB0aGUK
KyAgICAjIG9yaWdpbmFsIGZpbGUgKGdvIGZpZ3VyZSksIHRoZW4gc3BsaXR0aW5nIG9uIFxuLgor
ICAgICMgVG8gdmVyaWZ5IHRoYXQgdGhlIGZpbGUgZW5kcyBpbiBcbiwgd2UganVzdCBoYXZlIHRv
IG1ha2Ugc3VyZSB0aGUKKyAgICAjIGxhc3QtYnV0LXR3byBlbGVtZW50IG9mIGxpbmVzKCkgZXhp
c3RzIGFuZCBpcyBlbXB0eS4KKyAgICBpZiBsZW4obGluZXMpIDwgMyBvciBsaW5lc1stMl06Cisg
ICAgICAgIGVycm9yKGZpbGVuYW1lLCBsZW4obGluZXMpIC0gMiwgJ3doaXRlc3BhY2UvZW5kaW5n
X25ld2xpbmUnLCA1LAorICAgICAgICAgICAgICAnQ291bGQgbm90IGZpbmQgYSBuZXdsaW5lIGNo
YXJhY3RlciBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLicpCisKKworZGVmIGNoZWNrX2Zvcl9tdWx0
aWxpbmVfY29tbWVudHNfYW5kX3N0cmluZ3MoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lX251
bWJlciwgZXJyb3IpOgorICAgICIiIkxvZ3MgYW4gZXJyb3IgaWYgd2Ugc2VlIC8qIC4uLiAqLyBv
ciAiLi4uIiB0aGF0IGV4dGVuZCBwYXN0IG9uZSBsaW5lLgorCisgICAgLyogLi4uICovIGNvbW1l
bnRzIGFyZSBsZWdpdCBpbnNpZGUgbWFjcm9zLCBmb3Igb25lIGxpbmUuCisgICAgT3RoZXJ3aXNl
LCB3ZSBwcmVmZXIgLy8gY29tbWVudHMsIHNvIGl0J3Mgb2sgdG8gd2FybiBhYm91dCB0aGUKKyAg
ICBvdGhlci4gIExpa2V3aXNlLCBpdCdzIG9rIGZvciBzdHJpbmdzIHRvIGV4dGVuZCBhY3Jvc3Mg
bXVsdGlwbGUKKyAgICBsaW5lcywgYXMgbG9uZyBhcyBhIGxpbmUgY29udGludWF0aW9uIGNoYXJh
Y3RlciAoYmFja3NsYXNoKQorICAgIHRlcm1pbmF0ZXMgZWFjaCBsaW5lLiBBbHRob3VnaCBub3Qg
Y3VycmVudGx5IHByb2hpYml0ZWQgYnkgdGhlIEMrKworICAgIHN0eWxlIGd1aWRlLCBpdCdzIHVn
bHkgYW5kIHVubmVjZXNzYXJ5LiBXZSBkb24ndCBkbyB3ZWxsIHdpdGggZWl0aGVyCisgICAgaW4g
dGhpcyBsaW50IHByb2dyYW0sIHNvIHdlIHdhcm4gYWJvdXQgYm90aC4KKworICAgIEFyZ3M6Cisg
ICAgICBmaWxlbmFtZTogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlsZS4KKyAgICAgIGNsZWFu
X2xpbmVzOiBBIENsZWFuc2VkTGluZXMgaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZmlsZS4KKyAg
ICAgIGxpbmVfbnVtYmVyOiBUaGUgbnVtYmVyIG9mIHRoZSBsaW5lIHRvIGNoZWNrLgorICAgICAg
ZXJyb3I6IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4KKyAgICAi
IiIKKyAgICBsaW5lID0gY2xlYW5fbGluZXMuZWxpZGVkW2xpbmVfbnVtYmVyXQorCisgICAgIyBS
ZW1vdmUgYWxsIFxcIChlc2NhcGVkIGJhY2tzbGFzaGVzKSBmcm9tIHRoZSBsaW5lLiBUaGV5IGFy
ZSBPSywgYW5kIHRoZQorICAgICMgc2Vjb25kIChlc2NhcGVkKSBzbGFzaCBtYXkgdHJpZ2dlciBs
YXRlciBcIiBkZXRlY3Rpb24gZXJyb25lb3VzbHkuCisgICAgbGluZSA9IGxpbmUucmVwbGFjZSgn
XFxcXCcsICcnKQorCisgICAgaWYgbGluZS5jb3VudCgnLyonKSA+IGxpbmUuY291bnQoJyovJyk6
CisgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3JlYWRhYmlsaXR5L211bHRp
bGluZV9jb21tZW50JywgNSwKKyAgICAgICAgICAgICAgJ0NvbXBsZXggbXVsdGktbGluZSAvKi4u
LiovLXN0eWxlIGNvbW1lbnQgZm91bmQuICcKKyAgICAgICAgICAgICAgJ0xpbnQgbWF5IGdpdmUg
Ym9ndXMgd2FybmluZ3MuICAnCisgICAgICAgICAgICAgICdDb25zaWRlciByZXBsYWNpbmcgdGhl
c2Ugd2l0aCAvLy1zdHlsZSBjb21tZW50cywgJworICAgICAgICAgICAgICAnd2l0aCAjaWYgMC4u
LiNlbmRpZiwgJworICAgICAgICAgICAgICAnb3Igd2l0aCBtb3JlIGNsZWFybHkgc3RydWN0dXJl
ZCBtdWx0aS1saW5lIGNvbW1lbnRzLicpCisKKyAgICBpZiAobGluZS5jb3VudCgnIicpIC0gbGlu
ZS5jb3VudCgnXFwiJykpICUgMjoKKyAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVy
LCAncmVhZGFiaWxpdHkvbXVsdGlsaW5lX3N0cmluZycsIDUsCisgICAgICAgICAgICAgICdNdWx0
aS1saW5lIHN0cmluZyAoIi4uLiIpIGZvdW5kLiAgVGhpcyBsaW50IHNjcmlwdCBkb2VzblwndCAn
CisgICAgICAgICAgICAgICdkbyB3ZWxsIHdpdGggc3VjaCBzdHJpbmdzLCBhbmQgbWF5IGdpdmUg
Ym9ndXMgd2FybmluZ3MuICBUaGV5XCdyZSAnCisgICAgICAgICAgICAgICd1Z2x5IGFuZCB1bm5l
Y2Vzc2FyeSwgYW5kIHlvdSBzaG91bGQgdXNlIGNvbmNhdGVuYXRpb24gaW5zdGVhZCIuJykKKwor
CitfVEhSRUFESU5HX0xJU1QgPSAoCisgICAgKCdhc2N0aW1lKCcsICdhc2N0aW1lX3IoJyksCisg
ICAgKCdjdGltZSgnLCAnY3RpbWVfcignKSwKKyAgICAoJ2dldGdyZ2lkKCcsICdnZXRncmdpZF9y
KCcpLAorICAgICgnZ2V0Z3JuYW0oJywgJ2dldGdybmFtX3IoJyksCisgICAgKCdnZXRsb2dpbign
LCAnZ2V0bG9naW5fcignKSwKKyAgICAoJ2dldHB3bmFtKCcsICdnZXRwd25hbV9yKCcpLAorICAg
ICgnZ2V0cHd1aWQoJywgJ2dldHB3dWlkX3IoJyksCisgICAgKCdnbXRpbWUoJywgJ2dtdGltZV9y
KCcpLAorICAgICgnbG9jYWx0aW1lKCcsICdsb2NhbHRpbWVfcignKSwKKyAgICAoJ3JhbmQoJywg
J3JhbmRfcignKSwKKyAgICAoJ3JlYWRkaXIoJywgJ3JlYWRkaXJfcignKSwKKyAgICAoJ3N0cnRv
aygnLCAnc3RydG9rX3IoJyksCisgICAgKCd0dHluYW1lKCcsICd0dHluYW1lX3IoJyksCisgICAg
KQorCisKK2RlZiBjaGVja19wb3NpeF90aHJlYWRpbmcoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBs
aW5lX251bWJlciwgZXJyb3IpOgorICAgICIiIkNoZWNrcyBmb3IgY2FsbHMgdG8gdGhyZWFkLXVu
c2FmZSBmdW5jdGlvbnMuCisKKyAgICBNdWNoIGNvZGUgaGFzIGJlZW4gb3JpZ2luYWxseSB3cml0
dGVuIHdpdGhvdXQgY29uc2lkZXJhdGlvbiBvZgorICAgIG11bHRpLXRocmVhZGluZy4gQWxzbywg
ZW5naW5lZXJzIGFyZSByZWx5aW5nIG9uIHRoZWlyIG9sZCBleHBlcmllbmNlOworICAgIHRoZXkg
aGF2ZSBsZWFybmVkIHBvc2l4IGJlZm9yZSB0aHJlYWRpbmcgZXh0ZW5zaW9ucyB3ZXJlIGFkZGVk
LiBUaGVzZQorICAgIHRlc3RzIGd1aWRlIHRoZSBlbmdpbmVlcnMgdG8gdXNlIHRocmVhZC1zYWZl
IGZ1bmN0aW9ucyAod2hlbiB1c2luZworICAgIHBvc2l4IGRpcmVjdGx5KS4KKworICAgIEFyZ3M6
CisgICAgICBmaWxlbmFtZTogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlsZS4KKyAgICAgIGNs
ZWFuX2xpbmVzOiBBIENsZWFuc2VkTGluZXMgaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZmlsZS4K
KyAgICAgIGxpbmVfbnVtYmVyOiBUaGUgbnVtYmVyIG9mIHRoZSBsaW5lIHRvIGNoZWNrLgorICAg
ICAgZXJyb3I6IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4KKyAg
ICAiIiIKKyAgICBsaW5lID0gY2xlYW5fbGluZXMuZWxpZGVkW2xpbmVfbnVtYmVyXQorICAgIGZv
ciBzaW5nbGVfdGhyZWFkX2Z1bmN0aW9uLCBtdWx0aXRocmVhZF9zYWZlX2Z1bmN0aW9uIGluIF9U
SFJFQURJTkdfTElTVDoKKyAgICAgICAgaW5kZXggPSBsaW5lLmZpbmQoc2luZ2xlX3RocmVhZF9m
dW5jdGlvbikKKyAgICAgICAgIyBDb21wYXJpc29ucyBtYWRlIGV4cGxpY2l0IGZvciBjbGFyaXR5
IC0tIHB5bGludDogZGlzYWJsZS1tc2c9QzY0MDMKKyAgICAgICAgaWYgaW5kZXggPj0gMCBhbmQg
KGluZGV4ID09IDAgb3IgKG5vdCBsaW5lW2luZGV4IC0gMV0uaXNhbG51bSgpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbGluZVtpbmRleCAtIDFdIG5vdCBp
biAoJ18nLCAnLicsICc+JykpKToKKyAgICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251
bWJlciwgJ3J1bnRpbWUvdGhyZWFkc2FmZV9mbicsIDIsCisgICAgICAgICAgICAgICAgICAnQ29u
c2lkZXIgdXNpbmcgJyArIG11bHRpdGhyZWFkX3NhZmVfZnVuY3Rpb24gKworICAgICAgICAgICAg
ICAgICAgJy4uLikgaW5zdGVhZCBvZiAnICsgc2luZ2xlX3RocmVhZF9mdW5jdGlvbiArCisgICAg
ICAgICAgICAgICAgICAnLi4uKSBmb3IgaW1wcm92ZWQgdGhyZWFkIHNhZmV0eS4nKQorCisKKyMg
TWF0Y2hlcyBpbnZhbGlkIGluY3JlbWVudDogKmNvdW50KyssIHdoaWNoIG1vdmVzIHBvaW50ZXIg
aW5zdGVhZCBvZgorIyBpbmNyZW1lbnRpbmcgYSB2YWx1ZS4KK19SRV9QQVRURVJOX0lOVkFMSURf
SU5DUkVNRU5UID0gcmUuY29tcGlsZSgKKyAgICByJ15ccypcKlx3KyhcK1wrfC0tKTsnKQorCisK
K2RlZiBjaGVja19pbnZhbGlkX2luY3JlbWVudChmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVf
bnVtYmVyLCBlcnJvcik6CisgICAgIiIiQ2hlY2tzIGZvciBpbnZhbGlkIGluY3JlbWVudCAqY291
bnQrKy4KKworICAgIEZvciBleGFtcGxlIGZvbGxvd2luZyBmdW5jdGlvbjoKKyAgICB2b2lkIGlu
Y3JlbWVudF9jb3VudGVyKGludCogY291bnQpIHsKKyAgICAgICAgKmNvdW50Kys7CisgICAgfQor
ICAgIGlzIGludmFsaWQsIGJlY2F1c2UgaXQgZWZmZWN0aXZlbHkgZG9lcyBjb3VudCsrLCBtb3Zp
bmcgcG9pbnRlciwgYW5kIHNob3VsZAorICAgIGJlIHJlcGxhY2VkIHdpdGggKysqY291bnQsICgq
Y291bnQpKysgb3IgKmNvdW50ICs9IDEuCisKKyAgICBBcmdzOgorICAgICAgZmlsZW5hbWU6IFRo
ZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuCisgICAgICBjbGVhbl9saW5lczogQSBDbGVhbnNl
ZExpbmVzIGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIGZpbGUuCisgICAgICBsaW5lX251bWJlcjog
VGhlIG51bWJlciBvZiB0aGUgbGluZSB0byBjaGVjay4KKyAgICAgIGVycm9yOiBUaGUgZnVuY3Rp
b24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91bmQuCisgICAgIiIiCisgICAgbGluZSA9IGNs
ZWFuX2xpbmVzLmVsaWRlZFtsaW5lX251bWJlcl0KKyAgICBpZiBfUkVfUEFUVEVSTl9JTlZBTElE
X0lOQ1JFTUVOVC5tYXRjaChsaW5lKToKKyAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVt
YmVyLCAncnVudGltZS9pbnZhbGlkX2luY3JlbWVudCcsIDUsCisgICAgICAgICAgICAgICdDaGFu
Z2luZyBwb2ludGVyIGluc3RlYWQgb2YgdmFsdWUgKG9yIHVudXNlZCB2YWx1ZSBvZiBvcGVyYXRv
ciopLicpCisKKworY2xhc3MgX0NsYXNzSW5mbyhvYmplY3QpOgorICAgICIiIlN0b3JlcyBpbmZv
cm1hdGlvbiBhYm91dCBhIGNsYXNzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUs
IGxpbmVfbnVtYmVyKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmxp
bmVfbnVtYmVyID0gbGluZV9udW1iZXIKKyAgICAgICAgc2VsZi5zZWVuX29wZW5fYnJhY2UgPSBG
YWxzZQorICAgICAgICBzZWxmLmlzX2Rlcml2ZWQgPSBGYWxzZQorICAgICAgICBzZWxmLnZpcnR1
YWxfbWV0aG9kX2xpbmVfbnVtYmVyID0gTm9uZQorICAgICAgICBzZWxmLmhhc192aXJ0dWFsX2Rl
c3RydWN0b3IgPSBGYWxzZQorICAgICAgICBzZWxmLmJyYWNlX2RlcHRoID0gMAorCisKK2NsYXNz
IF9DbGFzc1N0YXRlKG9iamVjdCk6CisgICAgIiIiSG9sZHMgdGhlIGN1cnJlbnQgc3RhdGUgb2Yg
dGhlIHBhcnNlIHJlbGF0aW5nIHRvIGNsYXNzIGRlY2xhcmF0aW9ucy4KKworICAgIEl0IG1haW50
YWlucyBhIHN0YWNrIG9mIF9DbGFzc0luZm9zIHJlcHJlc2VudGluZyB0aGUgcGFyc2VyJ3MgZ3Vl
c3MKKyAgICBhcyB0byB0aGUgY3VycmVudCBuZXN0aW5nIG9mIGNsYXNzIGRlY2xhcmF0aW9ucy4g
VGhlIGlubmVybW9zdCBjbGFzcworICAgIGlzIGF0IHRoZSB0b3AgKGJhY2spIG9mIHRoZSBzdGFj
ay4gVHlwaWNhbGx5LCB0aGUgc3RhY2sgd2lsbCBlaXRoZXIKKyAgICBiZSBlbXB0eSBvciBoYXZl
IGV4YWN0bHkgb25lIGVudHJ5LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgor
ICAgICAgICBzZWxmLmNsYXNzaW5mb19zdGFjayA9IFtdCisKKyAgICBkZWYgY2hlY2tfZmluaXNo
ZWQoc2VsZiwgZmlsZW5hbWUsIGVycm9yKToKKyAgICAgICAgIiIiQ2hlY2tzIHRoYXQgYWxsIGNs
YXNzZXMgaGF2ZSBiZWVuIGNvbXBsZXRlbHkgcGFyc2VkLgorCisgICAgICAgIENhbGwgdGhpcyB3
aGVuIGFsbCBsaW5lcyBpbiBhIGZpbGUgaGF2ZSBiZWVuIHByb2Nlc3NlZC4KKyAgICAgICAgQXJn
czoKKyAgICAgICAgICBmaWxlbmFtZTogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlsZS4KKyAg
ICAgICAgICBlcnJvcjogVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBhbnkgZXJyb3JzIGZvdW5k
LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5jbGFzc2luZm9fc3RhY2s6CisgICAgICAg
ICAgICAjIE5vdGU6IFRoaXMgdGVzdCBjYW4gcmVzdWx0IGluIGZhbHNlIHBvc2l0aXZlcyBpZiAj
aWZkZWYgY29uc3RydWN0cworICAgICAgICAgICAgIyBnZXQgaW4gdGhlIHdheSBvZiBicmFjZSBt
YXRjaGluZy4gU2VlIHRoZSB0ZXN0QnVpbGRDbGFzcyB0ZXN0IGluCisgICAgICAgICAgICAjIGNw
cF9zdHlsZV91bml0dGVzdC5weSBmb3IgYW4gZXhhbXBsZSBvZiB0aGlzLgorICAgICAgICAgICAg
ZXJyb3IoZmlsZW5hbWUsIHNlbGYuY2xhc3NpbmZvX3N0YWNrWzBdLmxpbmVfbnVtYmVyLCAnYnVp
bGQvY2xhc3MnLCA1LAorICAgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBmaW5kIGNvbXBsZXRl
IGRlY2xhcmF0aW9uIG9mIGNsYXNzICVzJyAlCisgICAgICAgICAgICAgICAgICBzZWxmLmNsYXNz
aW5mb19zdGFja1swXS5uYW1lKQorCisKK2NsYXNzIF9GaWxlU3RhdGUob2JqZWN0KToKKyAgICBk
ZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2RpZF9pbnNpZGVfbmFtZXNwYWNlX2lu
ZGVudF93YXJuaW5nID0gRmFsc2UKKworICAgIGRlZiBzZXRfZGlkX2luc2lkZV9uYW1lc3BhY2Vf
aW5kZW50X3dhcm5pbmcoc2VsZik6CisgICAgICAgIHNlbGYuX2RpZF9pbnNpZGVfbmFtZXNwYWNl
X2luZGVudF93YXJuaW5nID0gVHJ1ZQorCisgICAgZGVmIGRpZF9pbnNpZGVfbmFtZXNwYWNlX2lu
ZGVudF93YXJuaW5nKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGlkX2luc2lkZV9uYW1l
c3BhY2VfaW5kZW50X3dhcm5pbmcKKworZGVmIGNoZWNrX2Zvcl9ub25fc3RhbmRhcmRfY29uc3Ry
dWN0cyhmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19zdGF0ZSwgZXJyb3IpOgorICAgICIiIkxvZ3Mg
YW4gZXJyb3IgaWYgd2Ugc2VlIGNlcnRhaW4gbm9uLUFOU0kgY29uc3RydWN0cyBpZ25vcmVkIGJ5
IGdjYy0yLgorCisgICAgQ29tcGxhaW4gYWJvdXQgc2V2ZXJhbCBjb25zdHJ1Y3RzIHdoaWNoIGdj
Yy0yIGFjY2VwdHMsIGJ1dCB3aGljaCBhcmUKKyAgICBub3Qgc3RhbmRhcmQgQysrLiAgV2Fybmlu
ZyBhYm91dCB0aGVzZSBpbiBsaW50IGlzIG9uZSB3YXkgdG8gZWFzZSB0aGUKKyAgICB0cmFuc2l0
aW9uIHRvIG5ldyBjb21waWxlcnMuCisgICAgLSBwdXQgc3RvcmFnZSBjbGFzcyBmaXJzdCAoZS5n
LiAic3RhdGljIGNvbnN0IiBpbnN0ZWFkIG9mICJjb25zdCBzdGF0aWMiKS4KKyAgICAtICIlbGxk
IiBpbnN0ZWFkIG9mICVxZCIgaW4gcHJpbnRmLXR5cGUgZnVuY3Rpb25zLgorICAgIC0gIiUxJGQi
IGlzIG5vbi1zdGFuZGFyZCBpbiBwcmludGYtdHlwZSBmdW5jdGlvbnMuCisgICAgLSAiXCUiIGlz
IGFuIHVuZGVmaW5lZCBjaGFyYWN0ZXIgZXNjYXBlIHNlcXVlbmNlLgorICAgIC0gdGV4dCBhZnRl
ciAjZW5kaWYgaXMgbm90IGFsbG93ZWQuCisgICAgLSBpbnZhbGlkIGlubmVyLXN0eWxlIGZvcndh
cmQgZGVjbGFyYXRpb24uCisgICAgLSA+PyBhbmQgPD8gb3BlcmF0b3JzLCBhbmQgdGhlaXIgPj89
IGFuZCA8Pz0gY291c2lucy4KKyAgICAtIGNsYXNzZXMgd2l0aCB2aXJ0dWFsIG1ldGhvZHMgbmVl
ZCB2aXJ0dWFsIGRlc3RydWN0b3JzIChjb21waWxlciB3YXJuaW5nCisgICAgICAgIGF2YWlsYWJs
ZSwgYnV0IG5vdCB0dXJuZWQgb24geWV0LikKKworICAgIEFkZGl0aW9uYWxseSwgY2hlY2sgZm9y
IGNvbnN0cnVjdG9yL2Rlc3RydWN0b3Igc3R5bGUgdmlvbGF0aW9ucyBhcyBpdAorICAgIGlzIHZl
cnkgY29udmVuaWVudCB0byBkbyBzbyB3aGlsZSBjaGVja2luZyBmb3IgZ2NjLTIgY29tcGxpYW5j
ZS4KKworICAgIEFyZ3M6CisgICAgICBmaWxlbmFtZTogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQg
ZmlsZS4KKyAgICAgIGNsZWFuX2xpbmVzOiBBIENsZWFuc2VkTGluZXMgaW5zdGFuY2UgY29udGFp
bmluZyB0aGUgZmlsZS4KKyAgICAgIGxpbmVfbnVtYmVyOiBUaGUgbnVtYmVyIG9mIHRoZSBsaW5l
IHRvIGNoZWNrLgorICAgICAgY2xhc3Nfc3RhdGU6IEEgX0NsYXNzU3RhdGUgaW5zdGFuY2Ugd2hp
Y2ggbWFpbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0CisgICAgICAgICAgICAgICAgICAgdGhlIGN1
cnJlbnQgc3RhY2sgb2YgbmVzdGVkIGNsYXNzIGRlY2xhcmF0aW9ucyBiZWluZyBwYXJzZWQuCisg
ICAgICBlcnJvcjogQSBjYWxsYWJsZSB0byB3aGljaCBlcnJvcnMgYXJlIHJlcG9ydGVkLCB3aGlj
aCB0YWtlcyA0IGFyZ3VtZW50czoKKyAgICAgICAgICAgICBmaWxlbmFtZSwgbGluZSBudW1iZXIs
IGVycm9yIGxldmVsLCBhbmQgbWVzc2FnZQorICAgICIiIgorCisgICAgIyBSZW1vdmUgY29tbWVu
dHMgZnJvbSB0aGUgbGluZSwgYnV0IGxlYXZlIGluIHN0cmluZ3MgZm9yIG5vdy4KKyAgICBsaW5l
ID0gY2xlYW5fbGluZXMubGluZXNbbGluZV9udW1iZXJdCisKKyAgICBpZiBzZWFyY2gocidwcmlu
dGZccypcKC4qIi4qJVstKyBdP1xkKnEnLCBsaW5lKToKKyAgICAgICAgZXJyb3IoZmlsZW5hbWUs
IGxpbmVfbnVtYmVyLCAncnVudGltZS9wcmludGZfZm9ybWF0JywgMywKKyAgICAgICAgICAgICAg
JyVxIGluIGZvcm1hdCBzdHJpbmdzIGlzIGRlcHJlY2F0ZWQuICBVc2UgJWxsIGluc3RlYWQuJykK
KworICAgIGlmIHNlYXJjaChyJ3ByaW50ZlxzKlwoLioiLiolXGQrXCQnLCBsaW5lKToKKyAgICAg
ICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAncnVudGltZS9wcmludGZfZm9ybWF0Jywg
MiwKKyAgICAgICAgICAgICAgJyVOJCBmb3JtYXRzIGFyZSB1bmNvbnZlbnRpb25hbC4gIFRyeSBy
ZXdyaXRpbmcgdG8gYXZvaWQgdGhlbS4nKQorCisgICAgIyBSZW1vdmUgZXNjYXBlZCBiYWNrc2xh
c2hlcyBiZWZvcmUgbG9va2luZyBmb3IgdW5kZWZpbmVkIGVzY2FwZXMuCisgICAgbGluZSA9IGxp
bmUucmVwbGFjZSgnXFxcXCcsICcnKQorCisgICAgaWYgc2VhcmNoKHInKCJ8XCcpLipcXCglfFxb
fFwofHspJywgbGluZSk6CisgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ2J1
aWxkL3ByaW50Zl9mb3JtYXQnLCAzLAorICAgICAgICAgICAgICAnJSwgWywgKCwgYW5kIHsgYXJl
IHVuZGVmaW5lZCBjaGFyYWN0ZXIgZXNjYXBlcy4gIFVuZXNjYXBlIHRoZW0uJykKKworICAgICMg
Rm9yIHRoZSByZXN0LCB3b3JrIHdpdGggYm90aCBjb21tZW50cyBhbmQgc3RyaW5ncyByZW1vdmVk
LgorICAgIGxpbmUgPSBjbGVhbl9saW5lcy5lbGlkZWRbbGluZV9udW1iZXJdCisKKyAgICBpZiBz
ZWFyY2gocidcYihjb25zdHx2b2xhdGlsZXx2b2lkfGNoYXJ8c2hvcnR8aW50fGxvbmcnCisgICAg
ICAgICAgICAgIHInfGZsb2F0fGRvdWJsZXxzaWduZWR8dW5zaWduZWQnCisgICAgICAgICAgICAg
IHInfHNjaGFyfHU/aW50OHx1P2ludDE2fHU/aW50MzJ8dT9pbnQ2NCknCisgICAgICAgICAgICAg
IHInXHMrKGF1dG98cmVnaXN0ZXJ8c3RhdGljfGV4dGVybnx0eXBlZGVmKVxiJywKKyAgICAgICAg
ICAgICAgbGluZSk6CisgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ2J1aWxk
L3N0b3JhZ2VfY2xhc3MnLCA1LAorICAgICAgICAgICAgICAnU3RvcmFnZSBjbGFzcyAoc3RhdGlj
LCBleHRlcm4sIHR5cGVkZWYsIGV0Yykgc2hvdWxkIGJlIGZpcnN0LicpCisKKyAgICBpZiBtYXRj
aChyJ1xzKiNccyplbmRpZlxzKlteL1xzXSsnLCBsaW5lKToKKyAgICAgICAgZXJyb3IoZmlsZW5h
bWUsIGxpbmVfbnVtYmVyLCAnYnVpbGQvZW5kaWZfY29tbWVudCcsIDUsCisgICAgICAgICAgICAg
ICdVbmNvbW1lbnRlZCB0ZXh0IGFmdGVyICNlbmRpZiBpcyBub24tc3RhbmRhcmQuICBVc2UgYSBj
b21tZW50LicpCisKKyAgICBpZiBtYXRjaChyJ1xzKmNsYXNzXHMrKFx3K1xzKjo6XHMqKStcdytc
cyo7JywgbGluZSk6CisgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ2J1aWxk
L2ZvcndhcmRfZGVjbCcsIDUsCisgICAgICAgICAgICAgICdJbm5lci1zdHlsZSBmb3J3YXJkIGRl
Y2xhcmF0aW9ucyBhcmUgaW52YWxpZC4gIFJlbW92ZSB0aGlzIGxpbmUuJykKKworICAgIGlmIHNl
YXJjaChyJyhcdyt8WystXT9cZCsoXC5cZCopPylccyooPHw+KVw/PT9ccyooXHcrfFsrLV0/XGQr
KShcLlxkKik/JywgbGluZSk6CisgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwg
J2J1aWxkL2RlcHJlY2F0ZWQnLCAzLAorICAgICAgICAgICAgICAnPj8gYW5kIDw/IChtYXggYW5k
IG1pbikgb3BlcmF0b3JzIGFyZSBub24tc3RhbmRhcmQgYW5kIGRlcHJlY2F0ZWQuJykKKworICAg
ICMgVHJhY2sgY2xhc3MgZW50cnkgYW5kIGV4aXQsIGFuZCBhdHRlbXB0IHRvIGZpbmQgY2FzZXMg
d2l0aGluIHRoZQorICAgICMgY2xhc3MgZGVjbGFyYXRpb24gdGhhdCBkb24ndCBtZWV0IHRoZSBD
Kysgc3R5bGUKKyAgICAjIGd1aWRlbGluZXMuIFRyYWNraW5nIGlzIHZlcnkgZGVwZW5kZW50IG9u
IHRoZSBjb2RlIG1hdGNoaW5nIEdvb2dsZQorICAgICMgc3R5bGUgZ3VpZGVsaW5lcywgYnV0IGl0
IHNlZW1zIHRvIHBlcmZvcm0gd2VsbCBlbm91Z2ggaW4gdGVzdGluZworICAgICMgdG8gYmUgYSB3
b3J0aHdoaWxlIGFkZGl0aW9uIHRvIHRoZSBjaGVja3MuCisgICAgY2xhc3NpbmZvX3N0YWNrID0g
Y2xhc3Nfc3RhdGUuY2xhc3NpbmZvX3N0YWNrCisgICAgIyBMb29rIGZvciBhIGNsYXNzIGRlY2xh
cmF0aW9uCisgICAgY2xhc3NfZGVjbF9tYXRjaCA9IG1hdGNoKAorICAgICAgICByJ1xzKih0ZW1w
bGF0ZVxzKjxbXHdcczw+LDpdKj5ccyopPyhjbGFzc3xzdHJ1Y3QpXHMrKFx3Kyg6Olx3KykqKScs
IGxpbmUpCisgICAgaWYgY2xhc3NfZGVjbF9tYXRjaDoKKyAgICAgICAgY2xhc3NpbmZvX3N0YWNr
LmFwcGVuZChfQ2xhc3NJbmZvKGNsYXNzX2RlY2xfbWF0Y2guZ3JvdXAoMyksIGxpbmVfbnVtYmVy
KSkKKworICAgICMgRXZlcnl0aGluZyBlbHNlIGluIHRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgdG9w
IG9mIHRoZSBzdGFjayBpZiBpdCdzCisgICAgIyBub3QgZW1wdHkuCisgICAgaWYgbm90IGNsYXNz
aW5mb19zdGFjazoKKyAgICAgICAgcmV0dXJuCisKKyAgICBjbGFzc2luZm8gPSBjbGFzc2luZm9f
c3RhY2tbLTFdCisKKyAgICAjIElmIHRoZSBvcGVuaW5nIGJyYWNlIGhhc24ndCBiZWVuIHNlZW4g
bG9vayBmb3IgaXQgYW5kIGFsc28KKyAgICAjIHBhcmVudCBjbGFzcyBkZWNsYXJhdGlvbnMuCisg
ICAgaWYgbm90IGNsYXNzaW5mby5zZWVuX29wZW5fYnJhY2U6CisgICAgICAgICMgSWYgdGhlIGxp
bmUgaGFzIGEgJzsnIGluIGl0LCBhc3N1bWUgaXQncyBhIGZvcndhcmQgZGVjbGFyYXRpb24gb3IK
KyAgICAgICAgIyBhIHNpbmdsZS1saW5lIGNsYXNzIGRlY2xhcmF0aW9uLCB3aGljaCB3ZSB3b24n
dCBwcm9jZXNzLgorICAgICAgICBpZiBsaW5lLmZpbmQoJzsnKSAhPSAtMToKKyAgICAgICAgICAg
IGNsYXNzaW5mb19zdGFjay5wb3AoKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGNsYXNz
aW5mby5zZWVuX29wZW5fYnJhY2UgPSAobGluZS5maW5kKCd7JykgIT0gLTEpCisgICAgICAgICMg
TG9vayBmb3IgYSBiYXJlICc6JworICAgICAgICBpZiBzZWFyY2goJyhefFteOl0pOigkfFteOl0p
JywgbGluZSk6CisgICAgICAgICAgICBjbGFzc2luZm8uaXNfZGVyaXZlZCA9IFRydWUKKyAgICAg
ICAgaWYgbm90IGNsYXNzaW5mby5zZWVuX29wZW5fYnJhY2U6CisgICAgICAgICAgICByZXR1cm4g
ICMgRXZlcnl0aGluZyBlbHNlIGluIHRoaXMgZnVuY3Rpb24gaXMgZm9yIGFmdGVyIG9wZW4gYnJh
Y2UKKworICAgICMgVGhlIGNsYXNzIG1heSBoYXZlIGJlZW4gZGVjbGFyZWQgd2l0aCBuYW1lc3Bh
Y2Ugb3IgY2xhc3NuYW1lIHF1YWxpZmllcnMuCisgICAgIyBUaGUgY29uc3RydWN0b3IgYW5kIGRl
c3RydWN0b3Igd2lsbCBub3QgaGF2ZSB0aG9zZSBxdWFsaWZpZXJzLgorICAgIGJhc2VfY2xhc3Nu
YW1lID0gY2xhc3NpbmZvLm5hbWUuc3BsaXQoJzo6JylbLTFdCisKKyAgICAjIExvb2sgZm9yIHNp
bmdsZS1hcmd1bWVudCBjb25zdHJ1Y3RvcnMgdGhhdCBhcmVuJ3QgbWFya2VkIGV4cGxpY2l0Lgor
ICAgICMgVGVjaG5pY2FsbHkgYSB2YWxpZCBjb25zdHJ1Y3QsIGJ1dCBhZ2FpbnN0IHN0eWxlLgor
ICAgIGFyZ3MgPSBtYXRjaChyJyg/PCFleHBsaWNpdClccyslc1xzKlwoKFteLCgpXSspXCknCisg
ICAgICAgICAgICAgICAgICUgcmUuZXNjYXBlKGJhc2VfY2xhc3NuYW1lKSwKKyAgICAgICAgICAg
ICAgICAgbGluZSkKKyAgICBpZiAoYXJncworICAgICAgICBhbmQgYXJncy5ncm91cCgxKSAhPSAn
dm9pZCcKKyAgICAgICAgYW5kIG5vdCBtYXRjaChyJyhjb25zdFxzKyk/JXNccyomJyAlIHJlLmVz
Y2FwZShiYXNlX2NsYXNzbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgYXJncy5ncm91cCgx
KS5zdHJpcCgpKSk6CisgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3J1bnRp
bWUvZXhwbGljaXQnLCA1LAorICAgICAgICAgICAgICAnU2luZ2xlLWFyZ3VtZW50IGNvbnN0cnVj
dG9ycyBzaG91bGQgYmUgbWFya2VkIGV4cGxpY2l0LicpCisKKyAgICAjIExvb2sgZm9yIG1ldGhv
ZHMgZGVjbGFyZWQgdmlydHVhbC4KKyAgICBpZiBzZWFyY2gocidcYnZpcnR1YWxcYicsIGxpbmUp
OgorICAgICAgICBjbGFzc2luZm8udmlydHVhbF9tZXRob2RfbGluZV9udW1iZXIgPSBsaW5lX251
bWJlcgorICAgICAgICAjIE9ubHkgbG9vayBmb3IgYSBkZXN0cnVjdG9yIGRlY2xhcmF0aW9uIG9u
IHRoZSBzYW1lIGxpbmUuIEl0IHdvdWxkCisgICAgICAgICMgYmUgZXh0cmVtZWx5IHVubGlrZWx5
IGZvciB0aGUgZGVzdHJ1Y3RvciBkZWNsYXJhdGlvbiB0byBvY2N1cHkKKyAgICAgICAgIyBtb3Jl
IHRoYW4gb25lIGxpbmUuCisgICAgICAgIGlmIHNlYXJjaChyJ34lc1xzKlwoJyAlIGJhc2VfY2xh
c3NuYW1lLCBsaW5lKToKKyAgICAgICAgICAgIGNsYXNzaW5mby5oYXNfdmlydHVhbF9kZXN0cnVj
dG9yID0gVHJ1ZQorCisgICAgIyBMb29rIGZvciBjbGFzcyBlbmQuCisgICAgYnJhY2VfZGVwdGgg
PSBjbGFzc2luZm8uYnJhY2VfZGVwdGgKKyAgICBicmFjZV9kZXB0aCA9IGJyYWNlX2RlcHRoICsg
bGluZS5jb3VudCgneycpIC0gbGluZS5jb3VudCgnfScpCisgICAgaWYgYnJhY2VfZGVwdGggPD0g
MDoKKyAgICAgICAgY2xhc3NpbmZvID0gY2xhc3NpbmZvX3N0YWNrLnBvcCgpCisgICAgICAgICMg
VHJ5IHRvIGRldGVjdCBtaXNzaW5nIHZpcnR1YWwgZGVzdHJ1Y3RvciBkZWNsYXJhdGlvbnMuCisg
ICAgICAgICMgRm9yIG5vdywgb25seSB3YXJuIGlmIGEgbm9uLWRlcml2ZWQgY2xhc3Mgd2l0aCB2
aXJ0dWFsIG1ldGhvZHMgbGFja3MKKyAgICAgICAgIyBhIHZpcnR1YWwgZGVzdHJ1Y3Rvci4gVGhp
cyBpcyB0byBtYWtlIGl0IGxlc3MgbGlrZWx5IHRoYXQgcGVvcGxlIHdpbGwKKyAgICAgICAgIyBk
ZWNsYXJlIGRlcml2ZWQgdmlydHVhbCBkZXN0cnVjdG9ycyB3aXRob3V0IGRlY2xhcmluZyB0aGUg
YmFzZQorICAgICAgICAjIGRlc3RydWN0b3IgdmlydHVhbC4KKyAgICAgICAgaWYgKChjbGFzc2lu
Zm8udmlydHVhbF9tZXRob2RfbGluZV9udW1iZXIgaXMgbm90IE5vbmUpCisgICAgICAgICAgICBh
bmQgKG5vdCBjbGFzc2luZm8uaGFzX3ZpcnR1YWxfZGVzdHJ1Y3RvcikKKyAgICAgICAgICAgIGFu
ZCAobm90IGNsYXNzaW5mby5pc19kZXJpdmVkKSk6ICAjIE9ubHkgd2FybiBmb3IgYmFzZSBjbGFz
c2VzCisgICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgY2xhc3NpbmZvLmxpbmVfbnVtYmVyLCAn
cnVudGltZS92aXJ0dWFsJywgNCwKKyAgICAgICAgICAgICAgICAgICdUaGUgY2xhc3MgJXMgcHJv
YmFibHkgbmVlZHMgYSB2aXJ0dWFsIGRlc3RydWN0b3IgZHVlIHRvICcKKyAgICAgICAgICAgICAg
ICAgICdoYXZpbmcgdmlydHVhbCBtZXRob2QocyksIG9uZSBkZWNsYXJlZCBhdCBsaW5lICVkLicK
KyAgICAgICAgICAgICAgICAgICUgKGNsYXNzaW5mby5uYW1lLCBjbGFzc2luZm8udmlydHVhbF9t
ZXRob2RfbGluZV9udW1iZXIpKQorICAgIGVsc2U6CisgICAgICAgIGNsYXNzaW5mby5icmFjZV9k
ZXB0aCA9IGJyYWNlX2RlcHRoCisKKworZGVmIGNoZWNrX3NwYWNpbmdfZm9yX2Z1bmN0aW9uX2Nh
bGwoZmlsZW5hbWUsIGxpbmUsIGxpbmVfbnVtYmVyLCBlcnJvcik6CisgICAgIiIiQ2hlY2tzIGZv
ciB0aGUgY29ycmVjdG5lc3Mgb2YgdmFyaW91cyBzcGFjaW5nIGFyb3VuZCBmdW5jdGlvbiBjYWxs
cy4KKworICAgIEFyZ3M6CisgICAgICBmaWxlbmFtZTogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQg
ZmlsZS4KKyAgICAgIGxpbmU6IFRoZSB0ZXh0IG9mIHRoZSBsaW5lIHRvIGNoZWNrLgorICAgICAg
bGluZV9udW1iZXI6IFRoZSBudW1iZXIgb2YgdGhlIGxpbmUgdG8gY2hlY2suCisgICAgICBlcnJv
cjogVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBhbnkgZXJyb3JzIGZvdW5kLgorICAgICIiIgor
CisgICAgIyBTaW5jZSBmdW5jdGlvbiBjYWxscyBvZnRlbiBvY2N1ciBpbnNpZGUgaWYvZm9yL2Zv
cmVhY2gvd2hpbGUvc3dpdGNoCisgICAgIyBleHByZXNzaW9ucyAtIHdoaWNoIGhhdmUgdGhlaXIg
b3duLCBtb3JlIGxpYmVyYWwgY29udmVudGlvbnMgLSB3ZQorICAgICMgZmlyc3Qgc2VlIGlmIHdl
IHNob3VsZCBiZSBsb29raW5nIGluc2lkZSBzdWNoIGFuIGV4cHJlc3Npb24gZm9yIGEKKyAgICAj
IGZ1bmN0aW9uIGNhbGwsIHRvIHdoaWNoIHdlIGNhbiBhcHBseSBtb3JlIHN0cmljdCBzdGFuZGFy
ZHMuCisgICAgZnVuY3Rpb25fY2FsbCA9IGxpbmUgICAgIyBpZiB0aGVyZSdzIG5vIGNvbnRyb2wg
ZmxvdyBjb25zdHJ1Y3QsIGxvb2sgYXQgd2hvbGUgbGluZQorICAgIGZvciBwYXR0ZXJuIGluIChy
J1xiaWZccypcKCguKilcKVxzKnsnLAorICAgICAgICAgICAgICAgICAgICByJ1xiZm9yXHMqXCgo
LiopXClccyp7JywKKyAgICAgICAgICAgICAgICAgICAgcidcYmZvcmVhY2hccypcKCguKilcKVxz
KnsnLAorICAgICAgICAgICAgICAgICAgICByJ1xid2hpbGVccypcKCguKilcKVxzKlt7O10nLAor
ICAgICAgICAgICAgICAgICAgICByJ1xic3dpdGNoXHMqXCgoLiopXClccyp7Jyk6CisgICAgICAg
IG1hdGNoZWQgPSBzZWFyY2gocGF0dGVybiwgbGluZSkKKyAgICAgICAgaWYgbWF0Y2hlZDoKKyAg
ICAgICAgICAgIGZ1bmN0aW9uX2NhbGwgPSBtYXRjaGVkLmdyb3VwKDEpICAgICMgbG9vayBpbnNp
ZGUgdGhlIHBhcmVucyBmb3IgZnVuY3Rpb24gY2FsbHMKKyAgICAgICAgICAgIGJyZWFrCisKKyAg
ICAjIEV4Y2VwdCBpbiBpZi9mb3IvZm9yZWFjaC93aGlsZS9zd2l0Y2gsIHRoZXJlIHNob3VsZCBu
ZXZlciBiZSBzcGFjZQorICAgICMgaW1tZWRpYXRlbHkgaW5zaWRlIHBhcmVucyAoZWcgImYoIDMs
IDQgKSIpLiAgV2UgbWFrZSBhbiBleGNlcHRpb24KKyAgICAjIGZvciBuZXN0ZWQgcGFyZW5zICgg
KGErYikgKyBjICkuICBMaWtld2lzZSwgdGhlcmUgc2hvdWxkIG5ldmVyIGJlCisgICAgIyBhIHNw
YWNlIGJlZm9yZSBhICggd2hlbiBpdCdzIGEgZnVuY3Rpb24gYXJndW1lbnQuICBJIGFzc3VtZSBp
dCdzIGEKKyAgICAjIGZ1bmN0aW9uIGFyZ3VtZW50IHdoZW4gdGhlIGNoYXIgYmVmb3JlIHRoZSB3
aGl0ZXNwYWNlIGlzIGxlZ2FsIGluCisgICAgIyBhIGZ1bmN0aW9uIG5hbWUgKGFsbnVtICsgXykg
YW5kIHdlJ3JlIG5vdCBzdGFydGluZyBhIG1hY3JvLiBBbHNvIGlnbm9yZQorICAgICMgcG9pbnRl
cnMgYW5kIHJlZmVyZW5jZXMgdG8gYXJyYXlzIGFuZCBmdW5jdGlvbnMgY296IHRoZXkncmUgdG9v
IHRyaWNreToKKyAgICAjIHdlIHVzZSBhIHZlcnkgc2ltcGxlIHdheSB0byByZWNvZ25pemUgdGhl
c2U6CisgICAgIyAiIChzb21ldGhpbmcpKG1heWJlLXNvbWV0aGluZykiIG9yCisgICAgIyAiIChz
b21ldGhpbmcpKG1heWJlLXNvbWV0aGluZywiIG9yCisgICAgIyAiIChzb21ldGhpbmcpW3NvbWV0
aGluZ10iCisgICAgIyBOb3RlIHRoYXQgd2UgYXNzdW1lIHRoZSBjb250ZW50cyBvZiBbXSB0byBi
ZSBzaG9ydCBlbm91Z2ggdGhhdAorICAgICMgdGhleSdsbCBuZXZlciBuZWVkIHRvIHdyYXAuCisg
ICAgaWYgKCAgIyBJZ25vcmUgY29udHJvbCBzdHJ1Y3R1cmVzLgorICAgICAgICBub3Qgc2VhcmNo
KHInXGIoaWZ8Zm9yfGZvcmVhY2h8d2hpbGV8c3dpdGNofHJldHVybnxuZXd8ZGVsZXRlKVxiJywg
ZnVuY3Rpb25fY2FsbCkKKyAgICAgICAgIyBJZ25vcmUgcG9pbnRlcnMvcmVmZXJlbmNlcyB0byBm
dW5jdGlvbnMuCisgICAgICAgIGFuZCBub3Qgc2VhcmNoKHInIFwoW14pXStcKVwoW14pXSooXCl8
LCQpJywgZnVuY3Rpb25fY2FsbCkKKyAgICAgICAgIyBJZ25vcmUgcG9pbnRlcnMvcmVmZXJlbmNl
cyB0byBhcnJheXMuCisgICAgICAgIGFuZCBub3Qgc2VhcmNoKHInIFwoW14pXStcKVxbW15cXV0r
XF0nLCBmdW5jdGlvbl9jYWxsKSk6CisgICAgICAgIGlmIHNlYXJjaChyJ1x3XHMqXChbIFx0XSg/
IVxzKlxcJCknLCBmdW5jdGlvbl9jYWxsKTogICAgICAjIGEgKCB1c2VkIGZvciBhIGZuIGNhbGwK
KyAgICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3doaXRlc3BhY2UvcGFy
ZW5zJywgNCwKKyAgICAgICAgICAgICAgICAgICdFeHRyYSBzcGFjZSBhZnRlciAoIGluIGZ1bmN0
aW9uIGNhbGwnKQorICAgICAgICBlbGlmIHNlYXJjaChyJ1woWyBcdF0rKD8hKFxzKlxcKXxcKCkn
LCBmdW5jdGlvbl9jYWxsKToKKyAgICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJl
ciwgJ3doaXRlc3BhY2UvcGFyZW5zJywgMiwKKyAgICAgICAgICAgICAgICAgICdFeHRyYSBzcGFj
ZSBhZnRlciAoJykKKyAgICAgICAgaWYgKHNlYXJjaChyJ1x3XHMrXCgnLCBmdW5jdGlvbl9jYWxs
KQorICAgICAgICAgICAgYW5kIG5vdCBzZWFyY2gocicjXHMqZGVmaW5lfHR5cGVkZWYnLCBmdW5j
dGlvbl9jYWxsKSk6CisgICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3
aGl0ZXNwYWNlL3BhcmVucycsIDQsCisgICAgICAgICAgICAgICAgICAnRXh0cmEgc3BhY2UgYmVm
b3JlICggaW4gZnVuY3Rpb24gY2FsbCcpCisgICAgICAgICMgSWYgdGhlICkgaXMgZm9sbG93ZWQg
b25seSBieSBhIG5ld2xpbmUgb3IgYSB7ICsgbmV3bGluZSwgYXNzdW1lIGl0J3MKKyAgICAgICAg
IyBwYXJ0IG9mIGEgY29udHJvbCBzdGF0ZW1lbnQgKGlmL3doaWxlL2V0YyksIGFuZCBkb24ndCBj
b21wbGFpbgorICAgICAgICBpZiBzZWFyY2gocidbXilcc11ccytcKSg/IVxzKiR8e1xzKiQpJywg
ZnVuY3Rpb25fY2FsbCk6CisgICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIs
ICd3aGl0ZXNwYWNlL3BhcmVucycsIDIsCisgICAgICAgICAgICAgICAgICAnRXh0cmEgc3BhY2Ug
YmVmb3JlICknKQorCisKK2RlZiBpc19ibGFua19saW5lKGxpbmUpOgorICAgICIiIlJldHVybnMg
dHJ1ZSBpZiB0aGUgZ2l2ZW4gbGluZSBpcyBibGFuay4KKworICAgIFdlIGNvbnNpZGVyIGEgbGlu
ZSB0byBiZSBibGFuayBpZiB0aGUgbGluZSBpcyBlbXB0eSBvciBjb25zaXN0cyBvZgorICAgIG9u
bHkgd2hpdGUgc3BhY2VzLgorCisgICAgQXJnczoKKyAgICAgIGxpbmU6IEEgbGluZSBvZiBhIHN0
cmluZy4KKworICAgIFJldHVybnM6CisgICAgICBUcnVlLCBpZiB0aGUgZ2l2ZW4gbGluZSBpcyBi
bGFuay4KKyAgICAiIiIKKyAgICByZXR1cm4gbm90IGxpbmUgb3IgbGluZS5pc3NwYWNlKCkKKwor
CitkZWYgY2hlY2tfZm9yX2Z1bmN0aW9uX2xlbmd0aHMoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBs
aW5lX251bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbl9zdGF0
ZSwgZXJyb3IpOgorICAgICIiIlJlcG9ydHMgZm9yIGxvbmcgZnVuY3Rpb24gYm9kaWVzLgorCisg
ICAgRm9yIGFuIG92ZXJ2aWV3IHdoeSB0aGlzIGlzIGRvbmUsIHNlZToKKyAgICBodHRwOi8vZ29v
Z2xlLXN0eWxlZ3VpZGUuZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rL2NwcGd1aWRlLnhtbCNXcml0
ZV9TaG9ydF9GdW5jdGlvbnMKKworICAgIFVzZXMgYSBzaW1wbGlzdGljIGFsZ29yaXRobSBhc3N1
bWluZyBvdGhlciBzdHlsZSBndWlkZWxpbmVzCisgICAgKGVzcGVjaWFsbHkgc3BhY2luZykgYXJl
IGZvbGxvd2VkLgorICAgIE9ubHkgY2hlY2tzIHVuaW5kZW50ZWQgZnVuY3Rpb25zLCBzbyBjbGFz
cyBtZW1iZXJzIGFyZSB1bmNoZWNrZWQuCisgICAgVHJpdmlhbCBib2RpZXMgYXJlIHVuY2hlY2tl
ZCwgc28gY29uc3RydWN0b3JzIHdpdGggaHVnZSBpbml0aWFsaXplciBsaXN0cworICAgIG1heSBi
ZSBtaXNzZWQuCisgICAgQmxhbmsvY29tbWVudCBsaW5lcyBhcmUgbm90IGNvdW50ZWQgc28gYXMg
dG8gYXZvaWQgZW5jb3VyYWdpbmcgdGhlIHJlbW92YWwKKyAgICBvZiB2ZXJ0aWNhbCBzcGFjZSBh
bmQgY29tbW1lbnRzIGp1c3QgdG8gZ2V0IHRocm91Z2ggYSBsaW50IGNoZWNrLgorICAgIE5PTElO
VCAqb24gdGhlIGxhc3QgbGluZSBvZiBhIGZ1bmN0aW9uKiBkaXNhYmxlcyB0aGlzIGNoZWNrLgor
CisgICAgQXJnczoKKyAgICAgIGZpbGVuYW1lOiBUaGUgbmFtZSBvZiB0aGUgY3VycmVudCBmaWxl
LgorICAgICAgY2xlYW5fbGluZXM6IEEgQ2xlYW5zZWRMaW5lcyBpbnN0YW5jZSBjb250YWluaW5n
IHRoZSBmaWxlLgorICAgICAgbGluZV9udW1iZXI6IFRoZSBudW1iZXIgb2YgdGhlIGxpbmUgdG8g
Y2hlY2suCisgICAgICBmdW5jdGlvbl9zdGF0ZTogQ3VycmVudCBmdW5jdGlvbiBuYW1lIGFuZCBs
aW5lcyBpbiBib2R5IHNvIGZhci4KKyAgICAgIGVycm9yOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3
aXRoIGFueSBlcnJvcnMgZm91bmQuCisgICAgIiIiCisgICAgbGluZXMgPSBjbGVhbl9saW5lcy5s
aW5lcworICAgIGxpbmUgPSBsaW5lc1tsaW5lX251bWJlcl0KKyAgICByYXcgPSBjbGVhbl9saW5l
cy5yYXdfbGluZXMKKyAgICByYXdfbGluZSA9IHJhd1tsaW5lX251bWJlcl0KKyAgICBqb2luZWRf
bGluZSA9ICcnCisKKyAgICBzdGFydGluZ19mdW5jID0gRmFsc2UKKyAgICByZWdleHAgPSByJyhc
dyhcd3w6OnxcKnxcJnxccykqKVwoJyAgIyBkZWNscyAqICYgc3BhY2U6Om5hbWUoIC4uLgorICAg
IG1hdGNoX3Jlc3VsdCA9IG1hdGNoKHJlZ2V4cCwgbGluZSkKKyAgICBpZiBtYXRjaF9yZXN1bHQ6
CisgICAgICAgICMgSWYgdGhlIG5hbWUgaXMgYWxsIGNhcHMgYW5kIHVuZGVyc2NvcmVzLCBmaWd1
cmUgaXQncyBhIG1hY3JvIGFuZAorICAgICAgICAjIGlnbm9yZSBpdCwgdW5sZXNzIGl0J3MgVEVT
VCBvciBURVNUX0YuCisgICAgICAgIGZ1bmN0aW9uX25hbWUgPSBtYXRjaF9yZXN1bHQuZ3JvdXAo
MSkuc3BsaXQoKVstMV0KKyAgICAgICAgaWYgZnVuY3Rpb25fbmFtZSA9PSAnVEVTVCcgb3IgZnVu
Y3Rpb25fbmFtZSA9PSAnVEVTVF9GJyBvciAobm90IG1hdGNoKHInW0EtWl9dKyQnLCBmdW5jdGlv
bl9uYW1lKSk6CisgICAgICAgICAgICBzdGFydGluZ19mdW5jID0gVHJ1ZQorCisgICAgaWYgc3Rh
cnRpbmdfZnVuYzoKKyAgICAgICAgYm9keV9mb3VuZCA9IEZhbHNlCisgICAgICAgIGZvciBzdGFy
dF9saW5lX251bWJlciBpbiB4cmFuZ2UobGluZV9udW1iZXIsIGNsZWFuX2xpbmVzLm51bV9saW5l
cygpKToKKyAgICAgICAgICAgIHN0YXJ0X2xpbmUgPSBsaW5lc1tzdGFydF9saW5lX251bWJlcl0K
KyAgICAgICAgICAgIGpvaW5lZF9saW5lICs9ICcgJyArIHN0YXJ0X2xpbmUubHN0cmlwKCkKKyAg
ICAgICAgICAgIGlmIHNlYXJjaChyJyg7fH0pJywgc3RhcnRfbGluZSk6ICAjIERlY2xhcmF0aW9u
cyBhbmQgdHJpdmlhbCBmdW5jdGlvbnMKKyAgICAgICAgICAgICAgICBib2R5X2ZvdW5kID0gVHJ1
ZQorICAgICAgICAgICAgICAgIGJyZWFrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAu
Li4gaWdub3JlCisgICAgICAgICAgICBpZiBzZWFyY2gocid7Jywgc3RhcnRfbGluZSk6CisgICAg
ICAgICAgICAgICAgYm9keV9mb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiA9
IHNlYXJjaChyJygoXHd8OikqKVwoJywgbGluZSkuZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICBp
ZiBtYXRjaChyJ1RFU1QnLCBmdW5jdGlvbik6ICAgICMgSGFuZGxlIFRFU1QuLi4gbWFjcm9zCisg
ICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9yZWdleHAgPSBzZWFyY2gocicoXCguKlwpKScs
IGpvaW5lZF9saW5lKQorICAgICAgICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXJfcmVnZXhwOiAg
ICAgICAgICAgICAjIElnbm9yZSBiYWQgc3ludGF4CisgICAgICAgICAgICAgICAgICAgICAgICBm
dW5jdGlvbiArPSBwYXJhbWV0ZXJfcmVnZXhwLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKz0gJygpJworICAgICAgICAgICAgICAg
IGZ1bmN0aW9uX3N0YXRlLmJlZ2luKGZ1bmN0aW9uKQorICAgICAgICAgICAgICAgIGJyZWFrCisg
ICAgICAgIGlmIG5vdCBib2R5X2ZvdW5kOgorICAgICAgICAgICAgIyBObyBib2R5IGZvciB0aGUg
ZnVuY3Rpb24gKG9yIGV2aWRlbmNlIG9mIGEgbm9uLWZ1bmN0aW9uKSB3YXMgZm91bmQuCisgICAg
ICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdyZWFkYWJpbGl0eS9mbl9zaXpl
JywgNSwKKyAgICAgICAgICAgICAgICAgICdMaW50IGZhaWxlZCB0byBmaW5kIHN0YXJ0IG9mIGZ1
bmN0aW9uIGJvZHkuJykKKyAgICBlbGlmIG1hdGNoKHInXlx9XHMqJCcsIGxpbmUpOiAgIyBmdW5j
dGlvbiBlbmQKKyAgICAgICAgaWYgbm90IHNlYXJjaChyJ1xiTk9MSU5UXGInLCByYXdfbGluZSk6
CisgICAgICAgICAgICBmdW5jdGlvbl9zdGF0ZS5jaGVjayhlcnJvciwgZmlsZW5hbWUsIGxpbmVf
bnVtYmVyKQorICAgICAgICBmdW5jdGlvbl9zdGF0ZS5lbmQoKQorICAgIGVsaWYgbm90IG1hdGNo
KHInXlxzKiQnLCBsaW5lKToKKyAgICAgICAgZnVuY3Rpb25fc3RhdGUuY291bnQoKSAgIyBDb3Vu
dCBub24tYmxhbmsvbm9uLWNvbW1lbnQgbGluZXMuCisKKworZGVmIGNoZWNrX3NwYWNpbmcoZmls
ZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZXJyb3IpOgorICAgICIiIkNoZWNrcyBm
b3IgdGhlIGNvcnJlY3RuZXNzIG9mIHZhcmlvdXMgc3BhY2luZyBpc3N1ZXMgaW4gdGhlIGNvZGUu
CisKKyAgICBUaGluZ3Mgd2UgY2hlY2sgZm9yOiBzcGFjZXMgYXJvdW5kIG9wZXJhdG9ycywgc3Bh
Y2VzIGFmdGVyCisgICAgaWYvZm9yL3doaWxlL3N3aXRjaCwgbm8gc3BhY2VzIGFyb3VuZCBwYXJl
bnMgaW4gZnVuY3Rpb24gY2FsbHMsIHR3bworICAgIHNwYWNlcyBiZXR3ZWVuIGNvZGUgYW5kIGNv
bW1lbnQsIGRvbid0IHN0YXJ0IGEgYmxvY2sgd2l0aCBhIGJsYW5rCisgICAgbGluZSwgZG9uJ3Qg
ZW5kIGEgZnVuY3Rpb24gd2l0aCBhIGJsYW5rIGxpbmUsIGRvbid0IGhhdmUgdG9vIG1hbnkKKyAg
ICBibGFuayBsaW5lcyBpbiBhIHJvdy4KKworICAgIEFyZ3M6CisgICAgICBmaWxlbmFtZTogVGhl
IG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlsZS4KKyAgICAgIGNsZWFuX2xpbmVzOiBBIENsZWFuc2Vk
TGluZXMgaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZmlsZS4KKyAgICAgIGxpbmVfbnVtYmVyOiBU
aGUgbnVtYmVyIG9mIHRoZSBsaW5lIHRvIGNoZWNrLgorICAgICAgZXJyb3I6IFRoZSBmdW5jdGlv
biB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4KKyAgICAiIiIKKworICAgIHJhdyA9IGNs
ZWFuX2xpbmVzLnJhd19saW5lcworICAgIGxpbmUgPSByYXdbbGluZV9udW1iZXJdCisKKyAgICAj
IEJlZm9yZSBuaXhpbmcgY29tbWVudHMsIGNoZWNrIGlmIHRoZSBsaW5lIGlzIGJsYW5rIGZvciBu
byBnb29kCisgICAgIyByZWFzb24uICBUaGlzIGluY2x1ZGVzIHRoZSBmaXJzdCBsaW5lIGFmdGVy
IGEgYmxvY2sgaXMgb3BlbmVkLCBhbmQKKyAgICAjIGJsYW5rIGxpbmVzIGF0IHRoZSBlbmQgb2Yg
YSBmdW5jdGlvbiAoaWUsIHJpZ2h0IGJlZm9yZSBhIGxpbmUgbGlrZSAnfScpLgorICAgIGlmIGlz
X2JsYW5rX2xpbmUobGluZSk6CisgICAgICAgIGVsaWRlZCA9IGNsZWFuX2xpbmVzLmVsaWRlZAor
ICAgICAgICBwcmV2aW91c19saW5lID0gZWxpZGVkW2xpbmVfbnVtYmVyIC0gMV0KKyAgICAgICAg
cHJldmlvdXNfYnJhY2UgPSBwcmV2aW91c19saW5lLnJmaW5kKCd7JykKKyAgICAgICAgIyBGSVhN
RTogRG9uJ3QgY29tcGxhaW4gaWYgbGluZSBiZWZvcmUgYmxhbmsgbGluZSwgYW5kIGxpbmUgYWZ0
ZXIsCisgICAgICAgICMgICAgICAgIGJvdGggc3RhcnQgd2l0aCBhbG51bXMgYW5kIGFyZSBpbmRl
bnRlZCB0aGUgc2FtZSBhbW91bnQuCisgICAgICAgICMgICAgICAgIFRoaXMgaWdub3JlcyB3aGl0
ZXNwYWNlIGF0IHRoZSBzdGFydCBvZiBhIG5hbWVzcGFjZSBibG9jaworICAgICAgICAjICAgICAg
ICBiZWNhdXNlIHRob3NlIGFyZSBub3QgdXN1YWxseSBpbmRlbnRlZC4KKyAgICAgICAgaWYgKHBy
ZXZpb3VzX2JyYWNlICE9IC0xIGFuZCBwcmV2aW91c19saW5lW3ByZXZpb3VzX2JyYWNlOl0uZmlu
ZCgnfScpID09IC0xCisgICAgICAgICAgICBhbmQgcHJldmlvdXNfbGluZVs6cHJldmlvdXNfYnJh
Y2VdLmZpbmQoJ25hbWVzcGFjZScpID09IC0xKToKKyAgICAgICAgICAgICMgT0ssIHdlIGhhdmUg
YSBibGFuayBsaW5lIGF0IHRoZSBzdGFydCBvZiBhIGNvZGUgYmxvY2suICBCZWZvcmUgd2UKKyAg
ICAgICAgICAgICMgY29tcGxhaW4sIHdlIGNoZWNrIGlmIGl0IGlzIGFuIGV4Y2VwdGlvbiB0byB0
aGUgcnVsZTogVGhlIHByZXZpb3VzCisgICAgICAgICAgICAjIG5vbi1lbXB0eSBsaW5lIGhhcyB0
aGUgcGFyYW1ldGVycyBvZiBhIGZ1bmN0aW9uIGhlYWRlciB0aGF0IGFyZSBpbmRlbnRlZAorICAg
ICAgICAgICAgIyA0IHNwYWNlcyAoYmVjYXVzZSB0aGV5IGRpZCBub3QgZml0IGluIGEgODAgY29s
dW1uIGxpbmUgd2hlbiBwbGFjZWQgb24KKyAgICAgICAgICAgICMgdGhlIHNhbWUgbGluZSBhcyB0
aGUgZnVuY3Rpb24gbmFtZSkuICBXZSBhbHNvIGNoZWNrIGZvciB0aGUgY2FzZSB3aGVyZQorICAg
ICAgICAgICAgIyB0aGUgcHJldmlvdXMgbGluZSBpcyBpbmRlbnRlZCA2IHNwYWNlcywgd2hpY2gg
bWF5IGhhcHBlbiB3aGVuIHRoZQorICAgICAgICAgICAgIyBpbml0aWFsaXplcnMgb2YgYSBjb25z
dHJ1Y3RvciBkbyBub3QgZml0IGludG8gYSA4MCBjb2x1bW4gbGluZS4KKyAgICAgICAgICAgIGV4
Y2VwdGlvbiA9IEZhbHNlCisgICAgICAgICAgICBpZiBtYXRjaChyJyB7Nn1cdycsIHByZXZpb3Vz
X2xpbmUpOiAgIyBJbml0aWFsaXplciBsaXN0PworICAgICAgICAgICAgICAgICMgV2UgYXJlIGxv
b2tpbmcgZm9yIHRoZSBvcGVuaW5nIGNvbHVtbiBvZiBpbml0aWFsaXplciBsaXN0LCB3aGljaAor
ICAgICAgICAgICAgICAgICMgc2hvdWxkIGJlIGluZGVudGVkIDQgc3BhY2VzIHRvIGNhdXNlIDYg
c3BhY2UgaW5kZW50YXRpb24gYWZ0ZXJ3YXJkcy4KKyAgICAgICAgICAgICAgICBzZWFyY2hfcG9z
aXRpb24gPSBsaW5lX251bWJlciAtIDIKKyAgICAgICAgICAgICAgICB3aGlsZSAoc2VhcmNoX3Bv
c2l0aW9uID49IDAKKyAgICAgICAgICAgICAgICAgICAgICAgYW5kIG1hdGNoKHInIHs2fVx3Jywg
ZWxpZGVkW3NlYXJjaF9wb3NpdGlvbl0pKToKKyAgICAgICAgICAgICAgICAgICAgc2VhcmNoX3Bv
c2l0aW9uIC09IDEKKyAgICAgICAgICAgICAgICBleGNlcHRpb24gPSAoc2VhcmNoX3Bvc2l0aW9u
ID49IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGVsaWRlZFtzZWFyY2hfcG9z
aXRpb25dWzo1XSA9PSAnICAgIDonKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICAjIFNlYXJjaCBmb3IgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50cyBvciBhbiBpbml0aWFsaXplciBs
aXN0LiAgV2UgdXNlIGEKKyAgICAgICAgICAgICAgICAjIHNpbXBsZSBoZXVyaXN0aWMgaGVyZTog
SWYgdGhlIGxpbmUgaXMgaW5kZW50ZWQgNCBzcGFjZXM7IGFuZCB3ZSBoYXZlIGEKKyAgICAgICAg
ICAgICAgICAjIGNsb3NpbmcgcGFyZW4sIHdpdGhvdXQgdGhlIG9wZW5pbmcgcGFyZW4sIGZvbGxv
d2VkIGJ5IGFuIG9wZW5pbmcgYnJhY2UKKyAgICAgICAgICAgICAgICAjIG9yIGNvbG9uIChmb3Ig
aW5pdGlhbGl6ZXIgbGlzdHMpIHdlIGFzc3VtZSB0aGF0IGl0IGlzIHRoZSBsYXN0IGxpbmUgb2YK
KyAgICAgICAgICAgICAgICAjIGEgZnVuY3Rpb24gaGVhZGVyLiAgSWYgd2UgaGF2ZSBhIGNvbG9u
IGluZGVudGVkIDQgc3BhY2VzLCBpdCBpcyBhbgorICAgICAgICAgICAgICAgICMgaW5pdGlhbGl6
ZXIgbGlzdC4KKyAgICAgICAgICAgICAgICBleGNlcHRpb24gPSAobWF0Y2gocicgezR9XHdbXlwo
XSpcKVxzKihjb25zdFxzKik/KFx7XHMqJHw6KScsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByZXZpb3VzX2xpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9y
IG1hdGNoKHInIHs0fTonLCBwcmV2aW91c19saW5lKSkKKworICAgICAgICAgICAgaWYgbm90IGV4
Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3
aGl0ZXNwYWNlL2JsYW5rX2xpbmUnLCAyLAorICAgICAgICAgICAgICAgICAgICAgICdCbGFuayBs
aW5lIGF0IHRoZSBzdGFydCBvZiBhIGNvZGUgYmxvY2suICBJcyB0aGlzIG5lZWRlZD8nKQorICAg
ICAgICAjIFRoaXMgZG9lc24ndCBpZ25vcmUgd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9mIGEgbmFt
ZXNwYWNlIGJsb2NrCisgICAgICAgICMgYmVjYXVzZSB0aGF0IGlzIHRvbyBoYXJkIHdpdGhvdXQg
cGFpcmluZyBvcGVuL2Nsb3NlIGJyYWNlczsKKyAgICAgICAgIyBob3dldmVyLCBhIHNwZWNpYWwg
ZXhjZXB0aW9uIGlzIG1hZGUgZm9yIG5hbWVzcGFjZSBjbG9zaW5nCisgICAgICAgICMgYnJhY2tl
dHMgd2hpY2ggaGF2ZSBhIGNvbW1lbnQgY29udGFpbmluZyAibmFtZXNwYWNlIi4KKyAgICAgICAg
IworICAgICAgICAjIEFsc28sIGlnbm9yZSBibGFuayBsaW5lcyBhdCB0aGUgZW5kIG9mIGEgYmxv
Y2sgaW4gYSBsb25nIGlmLWVsc2UKKyAgICAgICAgIyBjaGFpbiwgbGlrZSB0aGlzOgorICAgICAg
ICAjICAgaWYgKGNvbmRpdGlvbjEpIHsKKyAgICAgICAgIyAgICAgLy8gU29tZXRoaW5nIGZvbGxv
d2VkIGJ5IGEgYmxhbmsgbGluZQorICAgICAgICAjCisgICAgICAgICMgICB9IGVsc2UgaWYgKGNv
bmRpdGlvbjIpIHsKKyAgICAgICAgIyAgICAgLy8gU29tZXRoaW5nIGVsc2UKKyAgICAgICAgIyAg
IH0KKyAgICAgICAgaWYgbGluZV9udW1iZXIgKyAxIDwgY2xlYW5fbGluZXMubnVtX2xpbmVzKCk6
CisgICAgICAgICAgICBuZXh0X2xpbmUgPSByYXdbbGluZV9udW1iZXIgKyAxXQorICAgICAgICAg
ICAgaWYgKG5leHRfbGluZQorICAgICAgICAgICAgICAgIGFuZCBtYXRjaChyJ1xzKn0nLCBuZXh0
X2xpbmUpCisgICAgICAgICAgICAgICAgYW5kIG5leHRfbGluZS5maW5kKCduYW1lc3BhY2UnKSA9
PSAtMQorICAgICAgICAgICAgICAgIGFuZCBuZXh0X2xpbmUuZmluZCgnfSBlbHNlICcpID09IC0x
KToKKyAgICAgICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNw
YWNlL2JsYW5rX2xpbmUnLCAzLAorICAgICAgICAgICAgICAgICAgICAgICdCbGFuayBsaW5lIGF0
IHRoZSBlbmQgb2YgYSBjb2RlIGJsb2NrLiAgSXMgdGhpcyBuZWVkZWQ/JykKKworICAgICMgTmV4
dCwgd2UgY29tcGxhaW4gaWYgdGhlcmUncyBhIGNvbW1lbnQgdG9vIG5lYXIgdGhlIHRleHQKKyAg
ICBjb21tZW50X3Bvc2l0aW9uID0gbGluZS5maW5kKCcvLycpCisgICAgaWYgY29tbWVudF9wb3Np
dGlvbiAhPSAtMToKKyAgICAgICAgIyBDaGVjayBpZiB0aGUgLy8gbWF5IGJlIGluIHF1b3Rlcy4g
IElmIHNvLCBpZ25vcmUgaXQKKyAgICAgICAgIyBDb21wYXJpc29ucyBtYWRlIGV4cGxpY2l0IGZv
ciBjbGFyaXR5IC0tIHB5bGludDogZGlzYWJsZS1tc2c9QzY0MDMKKyAgICAgICAgaWYgKGxpbmUu
Y291bnQoJyInLCAwLCBjb21tZW50X3Bvc2l0aW9uKSAtIGxpbmUuY291bnQoJ1xcIicsIDAsIGNv
bW1lbnRfcG9zaXRpb24pKSAlIDIgPT0gMDogICAjIG5vdCBpbiBxdW90ZXMKKyAgICAgICAgICAg
ICMgQWxsb3cgb25lIHNwYWNlIGJlZm9yZSBlbmQgb2YgbGluZSBjb21tZW50LgorICAgICAgICAg
ICAgaWYgKG5vdCBtYXRjaChyJ15ccyokJywgbGluZVs6Y29tbWVudF9wb3NpdGlvbl0pCisgICAg
ICAgICAgICAgICAgYW5kIChjb21tZW50X3Bvc2l0aW9uID49IDEKKyAgICAgICAgICAgICAgICBh
bmQgKChsaW5lW2NvbW1lbnRfcG9zaXRpb24gLSAxXSBub3QgaW4gc3RyaW5nLndoaXRlc3BhY2Up
CisgICAgICAgICAgICAgICAgICAgICBvciAoY29tbWVudF9wb3NpdGlvbiA+PSAyCisgICAgICAg
ICAgICAgICAgICAgICAgICAgYW5kIGxpbmVbY29tbWVudF9wb3NpdGlvbiAtIDJdIGluIHN0cmlu
Zy53aGl0ZXNwYWNlKSkpKToKKyAgICAgICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9u
dW1iZXIsICd3aGl0ZXNwYWNlL2NvbW1lbnRzJywgNSwKKyAgICAgICAgICAgICAgICAgICAgICAn
T25lIHNwYWNlIGJlZm9yZSBlbmQgb2YgbGluZSBjb21tZW50cycpCisgICAgICAgICAgICAjIFRo
ZXJlIHNob3VsZCBhbHdheXMgYmUgYSBzcGFjZSBiZXR3ZWVuIHRoZSAvLyBhbmQgdGhlIGNvbW1l
bnQKKyAgICAgICAgICAgIGNvbW1lbnRlbmQgPSBjb21tZW50X3Bvc2l0aW9uICsgMgorICAgICAg
ICAgICAgaWYgY29tbWVudGVuZCA8IGxlbihsaW5lKSBhbmQgbm90IGxpbmVbY29tbWVudGVuZF0g
PT0gJyAnOgorICAgICAgICAgICAgICAgICMgYnV0IHNvbWUgbGluZXMgYXJlIGV4Y2VwdGlvbnMg
LS0gZS5nLiBpZiB0aGV5J3JlIGJpZworICAgICAgICAgICAgICAgICMgY29tbWVudCBkZWxpbWl0
ZXJzIGxpa2U6CisgICAgICAgICAgICAgICAgIyAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAjIG9yIHRo
ZXkgYmVnaW4gd2l0aCBtdWx0aXBsZSBzbGFzaGVzIGZvbGxvd2VkIGJ5IGEgc3BhY2U6CisgICAg
ICAgICAgICAgICAgIyAvLy8vLy8vLyBIZWFkZXIgY29tbWVudAorICAgICAgICAgICAgICAgIG1h
dGNoZWQgPSAoc2VhcmNoKHInWz0vLV17NCx9XHMqJCcsIGxpbmVbY29tbWVudGVuZDpdKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3Igc2VhcmNoKHInXi8rICcsIGxpbmVbY29tbWVudGVu
ZDpdKSkKKyAgICAgICAgICAgICAgICBpZiBub3QgbWF0Y2hlZDoKKyAgICAgICAgICAgICAgICAg
ICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9jb21tZW50cycsIDQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICdTaG91bGQgaGF2ZSBhIHNwYWNlIGJldHdlZW4g
Ly8gYW5kIGNvbW1lbnQnKQorCisgICAgbGluZSA9IGNsZWFuX2xpbmVzLmVsaWRlZFtsaW5lX251
bWJlcl0gICMgZ2V0IHJpZCBvZiBjb21tZW50cyBhbmQgc3RyaW5ncworCisgICAgIyBEb24ndCB0
cnkgdG8gZG8gc3BhY2luZyBjaGVja3MgZm9yIG9wZXJhdG9yIG1ldGhvZHMKKyAgICBsaW5lID0g
c3ViKHInb3BlcmF0b3IoPT18IT18PHw8PHw8PXw+PXw+Pnw+KVwoJywgJ29wZXJhdG9yXCgnLCBs
aW5lKQorICAgICMgRG9uJ3QgdHJ5IHRvIGRvIHNwYWNpbmcgY2hlY2tzIGZvciAjaW5jbHVkZSBv
ciAjaW1wb3J0IHN0YXRlbWVudHMgYXQKKyAgICAjIG1pbmltdW0gYmVjYXVzZSBpdCBtZXNzZXMg
dXAgY2hlY2tzIGZvciBzcGFjaW5nIGFyb3VuZCAvCisgICAgaWYgbWF0Y2gocidccyojXHMqKD86
aW5jbHVkZXxpbXBvcnQpJywgbGluZSk6CisgICAgICAgIHJldHVybgorICAgIGlmIHNlYXJjaChy
J1tcdy5dPVtcdy5dJywgbGluZSk6CisgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJl
ciwgJ3doaXRlc3BhY2Uvb3BlcmF0b3JzJywgNCwKKyAgICAgICAgICAgICAgJ01pc3Npbmcgc3Bh
Y2VzIGFyb3VuZCA9JykKKworICAgICMgRklYTUU6IEl0J3Mgbm90IG9rIHRvIGhhdmUgc3BhY2Vz
IGFyb3VuZCBiaW5hcnkgb3BlcmF0b3JzIGxpa2UgLgorCisgICAgIyBZb3Ugc2hvdWxkIGFsd2F5
cyBoYXZlIHdoaXRlc3BhY2UgYXJvdW5kIGJpbmFyeSBvcGVyYXRvcnMuCisgICAgIyBBbGFzLCB3
ZSBjYW4ndCB0ZXN0IDwgb3IgPiBiZWNhdXNlIHRoZXkncmUgbGVnaXRpbWF0ZWx5IHVzZWQgc2Fu
cyBzcGFjZXMKKyAgICAjIChhLT5iLCB2ZWN0b3I8aW50PiBhKS4gIFRoZSBvbmx5IHRpbWUgd2Ug
Y2FuIHRlbGwgaXMgYSA8IHdpdGggbm8gPiwgYW5kCisgICAgIyBvbmx5IGlmIGl0J3Mgbm90IHRl
bXBsYXRlIHBhcmFtcyBsaXN0IHNwaWxsaW5nIGludG8gdGhlIG5leHQgbGluZS4KKyAgICBtYXRj
aGVkID0gc2VhcmNoKHInW148Pj0hXHNdKD09fCE9fFwrPXwtPXxcKj18Lz18L3xcfD18Jj18PDw9
fD4+PXw8PXw+PXxcfFx8fFx8fCYmfD4+fDw8KVtePD49IVxzXScsIGxpbmUpCisgICAgaWYgbm90
IG1hdGNoZWQ6CisgICAgICAgICMgTm90ZSB0aGF0IHdoaWxlIGl0IHNlZW1zIHRoYXQgdGhlICc8
W148XSonIHRlcm0gaW4gdGhlIGZvbGxvd2luZworICAgICAgICAjIHJlZ2V4cCBjb3VsZCBiZSBz
aW1wbGlmaWVkIHRvICc8LionLCB3aGljaCB3b3VsZCBpbmRlZWQgbWF0Y2gKKyAgICAgICAgIyB0
aGUgc2FtZSBjbGFzcyBvZiBzdHJpbmdzLCB0aGUgW148XSBtZWFucyB0aGF0IHNlYXJjaGluZyBm
b3IgdGhlCisgICAgICAgICMgcmVnZXhwIHRha2VzIGxpbmVhciByYXRoZXIgdGhhbiBxdWFkcmF0
aWMgdGltZS4KKyAgICAgICAgaWYgbm90IHNlYXJjaChyJzxbXjxdKixccyokJywgbGluZSk6ICAj
IHRlbXBsYXRlIHBhcmFtcyBzcGlsbAorICAgICAgICAgICAgbWF0Y2hlZCA9IHNlYXJjaChyJ1te
PD49IVxzXSg8KVtePD49IVxzXShbXj5dfC0+KSokJywgbGluZSkKKyAgICBpZiBtYXRjaGVkOgor
ICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL29wZXJhdG9y
cycsIDMsCisgICAgICAgICAgICAgICdNaXNzaW5nIHNwYWNlcyBhcm91bmQgJXMnICUgbWF0Y2hl
ZC5ncm91cCgxKSkKKworICAgICMgVGhlcmUgc2hvdWxkbid0IGJlIHNwYWNlIGFyb3VuZCB1bmFy
eSBvcGVyYXRvcnMKKyAgICBtYXRjaGVkID0gc2VhcmNoKHInKCFcc3x+XHN8W1xzXS0tW1xzO118
W1xzXVwrXCtbXHM7XSknLCBsaW5lKQorICAgIGlmIG1hdGNoZWQ6CisgICAgICAgIGVycm9yKGZp
bGVuYW1lLCBsaW5lX251bWJlciwgJ3doaXRlc3BhY2Uvb3BlcmF0b3JzJywgNCwKKyAgICAgICAg
ICAgICAgJ0V4dHJhIHNwYWNlIGZvciBvcGVyYXRvciAlcycgJSBtYXRjaGVkLmdyb3VwKDEpKQor
CisgICAgIyBBIHBldCBwZWV2ZSBvZiBtaW5lOiBubyBzcGFjZXMgYWZ0ZXIgYW4gaWYsIHdoaWxl
LCBzd2l0Y2gsIG9yIGZvcgorICAgIG1hdGNoZWQgPSBzZWFyY2gocicgKGlmXCh8Zm9yXCh8Zm9y
ZWFjaFwofHdoaWxlXCh8c3dpdGNoXCgpJywgbGluZSkKKyAgICBpZiBtYXRjaGVkOgorICAgICAg
ICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL3BhcmVucycsIDUsCisg
ICAgICAgICAgICAgICdNaXNzaW5nIHNwYWNlIGJlZm9yZSAoIGluICVzJyAlIG1hdGNoZWQuZ3Jv
dXAoMSkpCisKKyAgICAjIEZvciBpZi9mb3IvZm9yZWFjaC93aGlsZS9zd2l0Y2gsIHRoZSBsZWZ0
IGFuZCByaWdodCBwYXJlbnMgc2hvdWxkIGJlCisgICAgIyBjb25zaXN0ZW50IGFib3V0IGhvdyBt
YW55IHNwYWNlcyBhcmUgaW5zaWRlIHRoZSBwYXJlbnMsIGFuZAorICAgICMgdGhlcmUgc2hvdWxk
IGVpdGhlciBiZSB6ZXJvIG9yIG9uZSBzcGFjZXMgaW5zaWRlIHRoZSBwYXJlbnMuCisgICAgIyBX
ZSBkb24ndCB3YW50OiAiaWYgKCBmb28pIiBvciAiaWYgKCBmb28gICApIi4KKyAgICAjIEV4Y2Vw
dGlvbjogImZvciAoIDsgZm9vOyBiYXIpIiBhbmQgImZvciAoZm9vOyBiYXI7ICkiIGFyZSBhbGxv
d2VkLgorICAgIG1hdGNoZWQgPSBzZWFyY2gocidcYihpZnxmb3J8Zm9yZWFjaHx3aGlsZXxzd2l0
Y2gpXHMqXCgoWyBdKikoLikuKlteIF0rKFsgXSopXClccyp7XHMqJCcsCisgICAgICAgICAgICAg
ICAgICAgICBsaW5lKQorICAgIGlmIG1hdGNoZWQ6CisgICAgICAgIGlmIGxlbihtYXRjaGVkLmdy
b3VwKDIpKSAhPSBsZW4obWF0Y2hlZC5ncm91cCg0KSk6CisgICAgICAgICAgICBpZiBub3QgKG1h
dGNoZWQuZ3JvdXAoMykgPT0gJzsnCisgICAgICAgICAgICAgICAgICAgIGFuZCBsZW4obWF0Y2hl
ZC5ncm91cCgyKSkgPT0gMSArIGxlbihtYXRjaGVkLmdyb3VwKDQpKQorICAgICAgICAgICAgICAg
ICAgICBvciBub3QgbWF0Y2hlZC5ncm91cCgyKSBhbmQgc2VhcmNoKHInXGJmb3JccypcKC4qOyBc
KScsIGxpbmUpKToKKyAgICAgICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIs
ICd3aGl0ZXNwYWNlL3BhcmVucycsIDUsCisgICAgICAgICAgICAgICAgICAgICAgJ01pc21hdGNo
aW5nIHNwYWNlcyBpbnNpZGUgKCkgaW4gJXMnICUgbWF0Y2hlZC5ncm91cCgxKSkKKyAgICAgICAg
aWYgbm90IGxlbihtYXRjaGVkLmdyb3VwKDIpKSBpbiBbMCwgMV06CisgICAgICAgICAgICBlcnJv
cihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL3BhcmVucycsIDUsCisgICAgICAg
ICAgICAgICAgICAnU2hvdWxkIGhhdmUgemVybyBvciBvbmUgc3BhY2VzIGluc2lkZSAoIGFuZCAp
IGluICVzJyAlCisgICAgICAgICAgICAgICAgICBtYXRjaGVkLmdyb3VwKDEpKQorCisgICAgIyBZ
b3Ugc2hvdWxkIGFsd2F5cyBoYXZlIGEgc3BhY2UgYWZ0ZXIgYSBjb21tYSAoZWl0aGVyIGFzIGZu
IGFyZyBvciBvcGVyYXRvcikKKyAgICBpZiBzZWFyY2gocicsW15cc10nLCBsaW5lKToKKyAgICAg
ICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9jb21tYScsIDMsCisg
ICAgICAgICAgICAgICdNaXNzaW5nIHNwYWNlIGFmdGVyICwnKQorCisgICAgaWYgZmlsZW5hbWUu
ZW5kc3dpdGgoJy5jcHAnKToKKyAgICAgICAgIyBDKysgc2hvdWxkIGhhdmUgdGhlICYgb3IgKiBi
ZXNpZGUgdGhlIHR5cGUgbm90IHRoZSB2YXJpYWJsZSBuYW1lLgorICAgICAgICBtYXRjaGVkID0g
bWF0Y2gocidccypcdysoPzwhXGJyZXR1cm4pXHMrKD9QPHBvaW50ZXJfb3BlcmF0b3I+XCp8XCYp
XHcrJywgbGluZSkKKyAgICAgICAgaWYgbWF0Y2hlZDoKKyAgICAgICAgICAgIGVycm9yKGZpbGVu
YW1lLCBsaW5lX251bWJlciwgJ3doaXRlc3BhY2UvZGVjbGFyYXRpb24nLCAzLAorICAgICAgICAg
ICAgICAgICAgJ0RlY2xhcmF0aW9uIGhhcyBzcGFjZSBiZXR3ZWVuIHR5cGUgbmFtZSBhbmQgJXMg
aW4gJXMnICUgKG1hdGNoZWQuZ3JvdXAoJ3BvaW50ZXJfb3BlcmF0b3InKSwgbWF0Y2hlZC5ncm91
cCgwKS5zdHJpcCgpKSkKKworICAgIGVsaWYgZmlsZW5hbWUuZW5kc3dpdGgoJy5jJyk6CisgICAg
ICAgICMgQyBQb2ludGVyIGRlY2xhcmF0aW9uIHNob3VsZCBoYXZlIHRoZSAqIGJlc2lkZSB0aGUg
dmFyaWFibGUgbm90IHRoZSB0eXBlIG5hbWUuCisgICAgICAgIG1hdGNoZWQgPSBzZWFyY2gocide
XHMqXHcrXCpccytcdysnLCBsaW5lKQorICAgICAgICBpZiBtYXRjaGVkOgorICAgICAgICAgICAg
ZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9kZWNsYXJhdGlvbicsIDMs
CisgICAgICAgICAgICAgICAgICAnRGVjbGFyYXRpb24gaGFzIHNwYWNlIGJldHdlZW4gKiBhbmQg
dmFyaWFibGUgbmFtZSBpbiAlcycgJSBtYXRjaGVkLmdyb3VwKDApLnN0cmlwKCkpCisKKyAgICAj
IE5leHQgd2Ugd2lsbCBsb29rIGZvciBpc3N1ZXMgd2l0aCBmdW5jdGlvbiBjYWxscy4KKyAgICBj
aGVja19zcGFjaW5nX2Zvcl9mdW5jdGlvbl9jYWxsKGZpbGVuYW1lLCBsaW5lLCBsaW5lX251bWJl
ciwgZXJyb3IpCisKKyAgICAjIEV4Y2VwdCBhZnRlciBhbiBvcGVuaW5nIHBhcmVuLCB5b3Ugc2hv
dWxkIGhhdmUgc3BhY2VzIGJlZm9yZSB5b3VyIGJyYWNlcy4KKyAgICAjIEFuZCBzaW5jZSB5b3Ug
c2hvdWxkIG5ldmVyIGhhdmUgYnJhY2VzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLCB0aGlz
IGlzCisgICAgIyBhbiBlYXN5IHRlc3QuCisgICAgaWYgc2VhcmNoKHInW14gKHtdeycsIGxpbmUp
OgorICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL2JyYWNl
cycsIDUsCisgICAgICAgICAgICAgICdNaXNzaW5nIHNwYWNlIGJlZm9yZSB7JykKKworICAgICMg
TWFrZSBzdXJlICd9IGVsc2UgeycgaGFzIHNwYWNlcy4KKyAgICBpZiBzZWFyY2gocid9ZWxzZScs
IGxpbmUpOgorICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNl
L2JyYWNlcycsIDUsCisgICAgICAgICAgICAgICdNaXNzaW5nIHNwYWNlIGJlZm9yZSBlbHNlJykK
KworICAgICMgWW91IHNob3VsZG4ndCBoYXZlIHNwYWNlcyBiZWZvcmUgeW91ciBicmFja2V0cywg
ZXhjZXB0IG1heWJlIGFmdGVyCisgICAgIyAnZGVsZXRlIFtdJyBvciAnbmV3IGNoYXIgKiBbXScu
CisgICAgaWYgc2VhcmNoKHInXHdccytcWycsIGxpbmUpIGFuZCBub3Qgc2VhcmNoKHInZGVsZXRl
XHMrXFsnLCBsaW5lKToKKyAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hp
dGVzcGFjZS9icmFjZXMnLCA1LAorICAgICAgICAgICAgICAnRXh0cmEgc3BhY2UgYmVmb3JlIFsn
KQorCisgICAgIyBZb3Ugc2hvdWxkbid0IGhhdmUgYSBzcGFjZSBiZWZvcmUgYSBzZW1pY29sb24g
YXQgdGhlIGVuZCBvZiB0aGUgbGluZS4KKyAgICAjIFRoZXJlJ3MgYSBzcGVjaWFsIGNhc2UgZm9y
ICJmb3IiIHNpbmNlIHRoZSBzdHlsZSBndWlkZSBhbGxvd3Mgc3BhY2UgYmVmb3JlCisgICAgIyB0
aGUgc2VtaWNvbG9uIHRoZXJlLgorICAgIGlmIHNlYXJjaChyJzpccyo7XHMqJCcsIGxpbmUpOgor
ICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL3NlbWljb2xv
bicsIDUsCisgICAgICAgICAgICAgICdTZW1pY29sb24gZGVmaW5pbmcgZW1wdHkgc3RhdGVtZW50
LiBVc2UgeyB9IGluc3RlYWQuJykKKyAgICBlbGlmIHNlYXJjaChyJ15ccyo7XHMqJCcsIGxpbmUp
OgorICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL3NlbWlj
b2xvbicsIDUsCisgICAgICAgICAgICAgICdMaW5lIGNvbnRhaW5zIG9ubHkgc2VtaWNvbG9uLiBJ
ZiB0aGlzIHNob3VsZCBiZSBhbiBlbXB0eSBzdGF0ZW1lbnQsICcKKyAgICAgICAgICAgICAgJ3Vz
ZSB7IH0gaW5zdGVhZC4nKQorICAgIGVsaWYgKHNlYXJjaChyJ1xzKztccyokJywgbGluZSkgYW5k
IG5vdCBzZWFyY2gocidcYmZvclxiJywgbGluZSkpOgorICAgICAgICBlcnJvcihmaWxlbmFtZSwg
bGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL3NlbWljb2xvbicsIDUsCisgICAgICAgICAgICAgICdF
eHRyYSBzcGFjZSBiZWZvcmUgbGFzdCBzZW1pY29sb24uIElmIHRoaXMgc2hvdWxkIGJlIGFuIGVt
cHR5ICcKKyAgICAgICAgICAgICAgJ3N0YXRlbWVudCwgdXNlIHsgfSBpbnN0ZWFkLicpCisgICAg
ZWxpZiAoc2VhcmNoKHInXGIoZm9yfHdoaWxlKVxzKlwoLipcKVxzKjtccyokJywgbGluZSkKKyAg
ICAgICAgICBhbmQgbGluZS5jb3VudCgnKCcpID09IGxpbmUuY291bnQoJyknKQorICAgICAgICAg
ICMgQWxsb3cgZG8ge30gd2hpbGUoKTsKKyAgICAgICAgICBhbmQgbm90IHNlYXJjaChyJ31ccyp3
aGlsZScsIGxpbmUpKToKKyAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hp
dGVzcGFjZS9zZW1pY29sb24nLCA1LAorICAgICAgICAgICAgICAnU2VtaWNvbG9uIGRlZmluaW5n
IGVtcHR5IHN0YXRlbWVudCBmb3IgdGhpcyBsb29wLiBVc2UgeyB9IGluc3RlYWQuJykKKworCitk
ZWYgZ2V0X3ByZXZpb3VzX25vbl9ibGFua19saW5lKGNsZWFuX2xpbmVzLCBsaW5lX251bWJlcik6
CisgICAgIiIiUmV0dXJuIHRoZSBtb3N0IHJlY2VudCBub24tYmxhbmsgbGluZSBhbmQgaXRzIGxp
bmUgbnVtYmVyLgorCisgICAgQXJnczoKKyAgICAgIGNsZWFuX2xpbmVzOiBBIENsZWFuc2VkTGlu
ZXMgaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZmlsZSBjb250ZW50cy4KKyAgICAgIGxpbmVfbnVt
YmVyOiBUaGUgbnVtYmVyIG9mIHRoZSBsaW5lIHRvIGNoZWNrLgorCisgICAgUmV0dXJuczoKKyAg
ICAgIEEgdHVwbGUgd2l0aCB0d28gZWxlbWVudHMuICBUaGUgZmlyc3QgZWxlbWVudCBpcyB0aGUg
Y29udGVudHMgb2YgdGhlIGxhc3QKKyAgICAgIG5vbi1ibGFuayBsaW5lIGJlZm9yZSB0aGUgY3Vy
cmVudCBsaW5lLCBvciB0aGUgZW1wdHkgc3RyaW5nIGlmIHRoaXMgaXMgdGhlCisgICAgICBmaXJz
dCBub24tYmxhbmsgbGluZS4gIFRoZSBzZWNvbmQgaXMgdGhlIGxpbmUgbnVtYmVyIG9mIHRoYXQg
bGluZSwgb3IgLTEKKyAgICAgIGlmIHRoaXMgaXMgdGhlIGZpcnN0IG5vbi1ibGFuayBsaW5lLgor
ICAgICIiIgorCisgICAgcHJldmlvdXNfbGluZV9udW1iZXIgPSBsaW5lX251bWJlciAtIDEKKyAg
ICB3aGlsZSBwcmV2aW91c19saW5lX251bWJlciA+PSAwOgorICAgICAgICBwcmV2aW91c19saW5l
ID0gY2xlYW5fbGluZXMuZWxpZGVkW3ByZXZpb3VzX2xpbmVfbnVtYmVyXQorICAgICAgICBpZiBu
b3QgaXNfYmxhbmtfbGluZShwcmV2aW91c19saW5lKTogICAgICMgaWYgbm90IGEgYmxhbmsgbGlu
ZS4uLgorICAgICAgICAgICAgcmV0dXJuIChwcmV2aW91c19saW5lLCBwcmV2aW91c19saW5lX251
bWJlcikKKyAgICAgICAgcHJldmlvdXNfbGluZV9udW1iZXIgLT0gMQorICAgIHJldHVybiAoJycs
IC0xKQorCisKK2RlZiBjaGVja19uYW1lc3BhY2VfaW5kZW50YXRpb24oZmlsZW5hbWUsIGNsZWFu
X2xpbmVzLCBsaW5lX251bWJlciwgZmlsZV9leHRlbnNpb24sIGZpbGVfc3RhdGUsIGVycm9yKToK
KyAgICAiIiJMb29rcyBmb3IgaW5kZW50YXRpb24gZXJyb3JzIGluc2lkZSBvZiBuYW1lc3BhY2Vz
LgorCisgICAgQXJnczoKKyAgICAgIGZpbGVuYW1lOiBUaGUgbmFtZSBvZiB0aGUgY3VycmVudCBm
aWxlLgorICAgICAgY2xlYW5fbGluZXM6IEEgQ2xlYW5zZWRMaW5lcyBpbnN0YW5jZSBjb250YWlu
aW5nIHRoZSBmaWxlLgorICAgICAgbGluZV9udW1iZXI6IFRoZSBudW1iZXIgb2YgdGhlIGxpbmUg
dG8gY2hlY2suCisgICAgICBmaWxlX2V4dGVuc2lvbjogVGhlIGV4dGVuc2lvbiAoZG90IG5vdCBp
bmNsdWRlZCkgb2YgdGhlIGZpbGUuCisgICAgICBmaWxlX3N0YXRlOiBBIF9GaWxlU3RhdGUgaW5z
dGFuY2Ugd2hpY2ggbWFpbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0CisgICAgICAgICAgICAgICAg
ICB0aGUgc3RhdGUgb2YgdGhpbmdzIGluIHRoZSBmaWxlLgorICAgICAgZXJyb3I6IFRoZSBmdW5j
dGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4KKyAgICAiIiIKKworICAgIGxpbmUg
PSBjbGVhbl9saW5lcy5lbGlkZWRbbGluZV9udW1iZXJdICMgR2V0IHJpZCBvZiBjb21tZW50cyBh
bmQgc3RyaW5ncy4KKworICAgIG5hbWVzcGFjZV9tYXRjaCA9IG1hdGNoKHInKD9QPG5hbWVzcGFj
ZV9pbmRlbnRhdGlvbj5ccyopbmFtZXNwYWNlXHMrXFMrXHMqe1xzKiQnLCBsaW5lKQorICAgIGlm
IG5vdCBuYW1lc3BhY2VfbWF0Y2g6CisgICAgICAgIHJldHVybgorCisgICAgY3VycmVudF9pbmRl
bnRhdGlvbl9sZXZlbCA9IGxlbihuYW1lc3BhY2VfbWF0Y2guZ3JvdXAoJ25hbWVzcGFjZV9pbmRl
bnRhdGlvbicpKQorICAgIGlmIGN1cnJlbnRfaW5kZW50YXRpb25fbGV2ZWwgPiAwOgorICAgICAg
ICAjIERvbid0IHdhcm4gYWJvdXQgYW4gaW5kZW50ZWQgbmFtZXNwYWNlIGlmIHdlIGFscmVhZHkg
d2FybmVkIGFib3V0IGluZGVudGVkIGNvZGUuCisgICAgICAgIGlmIG5vdCBmaWxlX3N0YXRlLmRp
ZF9pbnNpZGVfbmFtZXNwYWNlX2luZGVudF93YXJuaW5nKCk6CisgICAgICAgICAgICBlcnJvcihm
aWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL2luZGVudCcsIDQsCisgICAgICAgICAg
ICAgICAgICAnbmFtZXNwYWNlIHNob3VsZCBuZXZlciBiZSBpbmRlbnRlZC4nKQorICAgICAgICBy
ZXR1cm4KKyAgICBsb29raW5nX2Zvcl9zZW1pY29sb24gPSBGYWxzZTsKKyAgICBsaW5lX29mZnNl
dCA9IDAKKyAgICBpbl9wcmVwcm9jZXNzb3JfZGlyZWN0aXZlID0gRmFsc2U7CisgICAgZm9yIGN1
cnJlbnRfbGluZSBpbiBjbGVhbl9saW5lcy5lbGlkZWRbbGluZV9udW1iZXIgKyAxOl06CisgICAg
ICAgIGxpbmVfb2Zmc2V0ICs9IDEKKyAgICAgICAgaWYgbm90IGN1cnJlbnRfbGluZS5zdHJpcCgp
OgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgbm90IGN1cnJlbnRfaW5kZW50YXRp
b25fbGV2ZWw6CisgICAgICAgICAgICBpZiBub3QgKGluX3ByZXByb2Nlc3Nvcl9kaXJlY3RpdmUg
b3IgbG9va2luZ19mb3Jfc2VtaWNvbG9uKToKKyAgICAgICAgICAgICAgICBpZiBub3QgbWF0Y2go
cidcUycsIGN1cnJlbnRfbGluZSkgYW5kIG5vdCBmaWxlX3N0YXRlLmRpZF9pbnNpZGVfbmFtZXNw
YWNlX2luZGVudF93YXJuaW5nKCk6CisgICAgICAgICAgICAgICAgICAgIGZpbGVfc3RhdGUuc2V0
X2RpZF9pbnNpZGVfbmFtZXNwYWNlX2luZGVudF93YXJuaW5nKCkKKyAgICAgICAgICAgICAgICAg
ICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyICsgbGluZV9vZmZzZXQsICd3aGl0ZXNwYWNl
L2luZGVudCcsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdDb2RlIGluc2lkZSBhIG5h
bWVzcGFjZSBzaG91bGQgbm90IGJlIGluZGVudGVkLicpCisgICAgICAgICAgICBpZiBpbl9wcmVw
cm9jZXNzb3JfZGlyZWN0aXZlIG9yIChjdXJyZW50X2xpbmUuc3RyaXAoKVswXSA9PSAnIycpOiAj
IFRoaXMgdGFrZXMgY2FyZSBvZiBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIHN5bnRheC4KKyAgICAg
ICAgICAgICAgICBpbl9wcmVwcm9jZXNzb3JfZGlyZWN0aXZlID0gY3VycmVudF9saW5lWy0xXSA9
PSAnXFwnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvb2tpbmdfZm9yX3Nl
bWljb2xvbiA9ICgoY3VycmVudF9saW5lLmZpbmQoJzsnKSA9PSAtMSkgYW5kIChjdXJyZW50X2xp
bmUuc3RyaXAoKVstMV0gIT0gJ30nKSkgb3IgKGN1cnJlbnRfbGluZVstMV0gPT0gJ1xcJykKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvb2tpbmdfZm9yX3NlbWljb2xvbiA9IEZhbHNlOyAj
IElmIHdlIGhhdmUgYSBicmFjZSB3ZSBtYXkgbm90IG5lZWQgYSBzZW1pY29sb24uCisgICAgICAg
IGN1cnJlbnRfaW5kZW50YXRpb25fbGV2ZWwgKz0gY3VycmVudF9saW5lLmNvdW50KCd7JykgLSBj
dXJyZW50X2xpbmUuY291bnQoJ30nKQorICAgICAgICBpZiBjdXJyZW50X2luZGVudGF0aW9uX2xl
dmVsIDwgMDoKKyAgICAgICAgICAgIGJyZWFrOworCitkZWYgY2hlY2tfdXNpbmdfc3RkKGZpbGVu
YW1lLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGVycm9yKToKKyAgICAiIiJMb29rcyBmb3Ig
J3VzaW5nIHN0ZDo6Zm9vOycgc3RhdGVtZW50cyB3aGljaCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0
aCAndXNpbmcgbmFtZXNwYWNlIHN0ZDsnLgorCisgICAgQXJnczoKKyAgICAgIGZpbGVuYW1lOiBU
aGUgbmFtZSBvZiB0aGUgY3VycmVudCBmaWxlLgorICAgICAgY2xlYW5fbGluZXM6IEEgQ2xlYW5z
ZWRMaW5lcyBpbnN0YW5jZSBjb250YWluaW5nIHRoZSBmaWxlLgorICAgICAgbGluZV9udW1iZXI6
IFRoZSBudW1iZXIgb2YgdGhlIGxpbmUgdG8gY2hlY2suCisgICAgICBlcnJvcjogVGhlIGZ1bmN0
aW9uIHRvIGNhbGwgd2l0aCBhbnkgZXJyb3JzIGZvdW5kLgorICAgICIiIgorCisgICAgIyBUaGlz
IGNoZWNrIGRvZXNuJ3QgYXBwbHkgdG8gQyBvciBPYmplY3RpdmUtQyBpbXBsZW1lbnRhdGlvbiBm
aWxlcy4KKyAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCgnLmMnKSBvciBmaWxlbmFtZS5lbmRzd2l0
aCgnLm0nKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBsaW5lID0gY2xlYW5fbGluZXMuZWxpZGVk
W2xpbmVfbnVtYmVyXSAjIEdldCByaWQgb2YgY29tbWVudHMgYW5kIHN0cmluZ3MuCisKKyAgICB1
c2luZ19zdGRfbWF0Y2ggPSBtYXRjaChyJ1xzKnVzaW5nXHMrc3RkOjooP1A8bWV0aG9kX25hbWU+
XFMrKVxzKjtccyokJywgbGluZSkKKyAgICBpZiBub3QgdXNpbmdfc3RkX21hdGNoOgorICAgICAg
ICByZXR1cm4KKworICAgIG1ldGhvZF9uYW1lID0gdXNpbmdfc3RkX21hdGNoLmdyb3VwKCdtZXRo
b2RfbmFtZScpCisgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnYnVpbGQvdXNpbmdf
c3RkJywgNCwKKyAgICAgICAgICAiVXNlICd1c2luZyBuYW1lc3BhY2Ugc3RkOycgaW5zdGVhZCBv
ZiAndXNpbmcgc3RkOjolczsnLiIgJSBtZXRob2RfbmFtZSkKKworCitkZWYgY2hlY2tfbWF4X21p
bl9tYWNyb3MoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZXJyb3IpOgorICAg
ICIiIkxvb2tzIHVzZSBvZiBNQVgoKSBhbmQgTUlOKCkgbWFjcm9zIHRoYXQgc2hvdWxkIGJlIHJl
cGxhY2VkIHdpdGggc3RkOjptYXgoKSBhbmQgc3RkOjptaW4oKS4KKworICAgIEFyZ3M6CisgICAg
ICBmaWxlbmFtZTogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlsZS4KKyAgICAgIGNsZWFuX2xp
bmVzOiBBIENsZWFuc2VkTGluZXMgaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZmlsZS4KKyAgICAg
IGxpbmVfbnVtYmVyOiBUaGUgbnVtYmVyIG9mIHRoZSBsaW5lIHRvIGNoZWNrLgorICAgICAgZXJy
b3I6IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4KKyAgICAiIiIK
KworICAgICMgVGhpcyBjaGVjayBkb2Vzbid0IGFwcGx5IHRvIEMgb3IgT2JqZWN0aXZlLUMgaW1w
bGVtZW50YXRpb24gZmlsZXMuCisgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoJy5jJykgb3IgZmls
ZW5hbWUuZW5kc3dpdGgoJy5tJyk6CisgICAgICAgIHJldHVybgorCisgICAgbGluZSA9IGNsZWFu
X2xpbmVzLmVsaWRlZFtsaW5lX251bWJlcl0gIyBHZXQgcmlkIG9mIGNvbW1lbnRzIGFuZCBzdHJp
bmdzLgorCisgICAgbWF4X21pbl9tYWNyb3Nfc2VhcmNoID0gc2VhcmNoKHInXGIoP1A8bWF4X21p
bl9tYWNybz4oTUFYfE1JTikpXHMqXCgnLCBsaW5lKQorICAgIGlmIG5vdCBtYXhfbWluX21hY3Jv
c19zZWFyY2g6CisgICAgICAgIHJldHVybgorCisgICAgbWF4X21pbl9tYWNybyA9IG1heF9taW5f
bWFjcm9zX3NlYXJjaC5ncm91cCgnbWF4X21pbl9tYWNybycpCisgICAgbWF4X21pbl9tYWNyb19s
b3dlciA9IG1heF9taW5fbWFjcm8ubG93ZXIoKQorICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251
bWJlciwgJ3J1bnRpbWUvbWF4X21pbl9tYWNyb3MnLCA0LAorICAgICAgICAgICdVc2Ugc3RkOjol
cygpIG9yIHN0ZDo6JXM8dHlwZT4oKSBpbnN0ZWFkIG9mIHRoZSAlcygpIG1hY3JvLicKKyAgICAg
ICAgICAlIChtYXhfbWluX21hY3JvX2xvd2VyLCBtYXhfbWluX21hY3JvX2xvd2VyLCBtYXhfbWlu
X21hY3JvKSkKKworCitkZWYgY2hlY2tfc3dpdGNoX2luZGVudGF0aW9uKGZpbGVuYW1lLCBjbGVh
bl9saW5lcywgbGluZV9udW1iZXIsIGVycm9yKToKKyAgICAiIiJMb29rcyBmb3IgaW5kZW50YXRp
b24gZXJyb3JzIGluc2lkZSBvZiBzd2l0Y2ggc3RhdGVtZW50cy4KKworICAgIEFyZ3M6CisgICAg
ICBmaWxlbmFtZTogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlsZS4KKyAgICAgIGNsZWFuX2xp
bmVzOiBBIENsZWFuc2VkTGluZXMgaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZmlsZS4KKyAgICAg
IGxpbmVfbnVtYmVyOiBUaGUgbnVtYmVyIG9mIHRoZSBsaW5lIHRvIGNoZWNrLgorICAgICAgZXJy
b3I6IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4KKyAgICAiIiIK
KworICAgIGxpbmUgPSBjbGVhbl9saW5lcy5lbGlkZWRbbGluZV9udW1iZXJdICMgR2V0IHJpZCBv
ZiBjb21tZW50cyBhbmQgc3RyaW5ncy4KKworICAgIHN3aXRjaF9tYXRjaCA9IG1hdGNoKHInKD9Q
PHN3aXRjaF9pbmRlbnRhdGlvbj5ccyopc3dpdGNoXHMqXCguK1wpXHMqe1xzKiQnLCBsaW5lKQor
ICAgIGlmIG5vdCBzd2l0Y2hfbWF0Y2g6CisgICAgICAgIHJldHVybgorCisgICAgc3dpdGNoX2lu
ZGVudGF0aW9uID0gc3dpdGNoX21hdGNoLmdyb3VwKCdzd2l0Y2hfaW5kZW50YXRpb24nKQorICAg
IGlubmVyX2luZGVudGF0aW9uID0gc3dpdGNoX2luZGVudGF0aW9uICsgJyAnICogNAorICAgIGxp
bmVfb2Zmc2V0ID0gMAorICAgIGVuY291bnRlcmVkX25lc3RlZF9zd2l0Y2ggPSBGYWxzZQorCisg
ICAgZm9yIGN1cnJlbnRfbGluZSBpbiBjbGVhbl9saW5lcy5lbGlkZWRbbGluZV9udW1iZXIgKyAx
Ol06CisgICAgICAgIGxpbmVfb2Zmc2V0ICs9IDEKKworICAgICAgICAjIFNraXAgbm90IG9ubHkg
ZW1wdHkgbGluZXMgYnV0IGFsc28gdGhvc2Ugd2l0aCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4K
KyAgICAgICAgaWYgY3VycmVudF9saW5lLnN0cmlwKCkgPT0gJycgb3IgY3VycmVudF9saW5lLnN0
YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgbWF0Y2go
cidccypzd2l0Y2hccypcKC4rXClccyp7XHMqJCcsIGN1cnJlbnRfbGluZSk6CisgICAgICAgICAg
ICAjIENvbXBsZXhpdHkgYWxhcm0gLSBhbm90aGVyIHN3aXRjaCBzdGF0ZW1lbnQgbmVzdGVkIGlu
c2lkZSB0aGUgb25lCisgICAgICAgICAgICAjIHRoYXQgd2UncmUgY3VycmVudGx5IHRlc3Rpbmcu
IFdlJ2xsIG5lZWQgdG8gdHJhY2sgdGhlIGV4dGVudCBvZgorICAgICAgICAgICAgIyB0aGF0IGlu
bmVyIHN3aXRjaCBpZiB0aGUgdXBjb21pbmcgbGFiZWwgdGVzdHMgYXJlIHN0aWxsIHN1cHBvc2Vk
CisgICAgICAgICAgICAjIHRvIHdvcmsgY29ycmVjdGx5LiBMZXQncyBub3QgZG8gdGhhdDsgaW5z
dGVhZCwgd2UnbGwgZmluaXNoCisgICAgICAgICAgICAjIGNoZWNraW5nIHRoaXMgbGluZSwgYW5k
IHRoZW4gbGVhdmUgaXQgbGlrZSB0aGF0LiBBc3N1bWluZyB0aGUKKyAgICAgICAgICAgICMgaW5k
ZW50YXRpb24gaXMgZG9uZSBjb25zaXN0ZW50bHkgKGV2ZW4gaWYgaW5jb3JyZWN0bHkpLCB0aGlz
IHdpbGwKKyAgICAgICAgICAgICMgc3RpbGwgY2F0Y2ggYWxsIGluZGVudGF0aW9uIGlzc3VlcyBp
biBwcmFjdGljZS4KKyAgICAgICAgICAgIGVuY291bnRlcmVkX25lc3RlZF9zd2l0Y2ggPSBUcnVl
CisKKyAgICAgICAgY3VycmVudF9pbmRlbnRhdGlvbl9tYXRjaCA9IG1hdGNoKHInKD9QPGluZGVu
dGF0aW9uPlxzKikoP1A8cmVtYWluaW5nX2xpbmU+LiopJCcsIGN1cnJlbnRfbGluZSk7CisgICAg
ICAgIGN1cnJlbnRfaW5kZW50YXRpb24gPSBjdXJyZW50X2luZGVudGF0aW9uX21hdGNoLmdyb3Vw
KCdpbmRlbnRhdGlvbicpCisgICAgICAgIHJlbWFpbmluZ19saW5lID0gY3VycmVudF9pbmRlbnRh
dGlvbl9tYXRjaC5ncm91cCgncmVtYWluaW5nX2xpbmUnKQorCisgICAgICAgICMgRW5kIHRoZSBj
aGVjayBhdCB0aGUgZW5kIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50LgorICAgICAgICBpZiByZW1h
aW5pbmdfbGluZS5zdGFydHN3aXRoKCd9JykgYW5kIGN1cnJlbnRfaW5kZW50YXRpb24gPT0gc3dp
dGNoX2luZGVudGF0aW9uOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgIyBDYXNlIGFuZCBk
ZWZhdWx0IGJyYW5jaGVzIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuIFRoZSByZWdleHAgYWxzbwor
ICAgICAgICAjIGNhdGNoZXMgc2luZ2xlLWxpbmUgY2FzZXMgbGlrZSAiZGVmYXVsdDogYnJlYWs7
IiBidXQgZG9lcyBub3QgdHJpZ2dlcgorICAgICAgICAjIG9uIHN0dWZmIGxpa2UgIkRvY3VtZW50
OjpGb28oKTsiLgorICAgICAgICBlbGlmIG1hdGNoKHInKGRlZmF1bHR8Y2FzZVxzKy4qKVxzKjoo
W146XS4qKT8kJywgcmVtYWluaW5nX2xpbmUpOgorICAgICAgICAgICAgaWYgY3VycmVudF9pbmRl
bnRhdGlvbiAhPSBzd2l0Y2hfaW5kZW50YXRpb246CisgICAgICAgICAgICAgICAgZXJyb3IoZmls
ZW5hbWUsIGxpbmVfbnVtYmVyICsgbGluZV9vZmZzZXQsICd3aGl0ZXNwYWNlL2luZGVudCcsIDQs
CisgICAgICAgICAgICAgICAgICAgICAgJ0EgY2FzZSBsYWJlbCBzaG91bGQgbm90IGJlIGluZGVu
dGVkLCBidXQgbGluZSB1cCB3aXRoIGl0cyBzd2l0Y2ggc3RhdGVtZW50LicpCisgICAgICAgICAg
ICAgICAgIyBEb24ndCB0aHJvdyBhbiBlcnJvciBmb3IgbXVsdGlwbGUgYmFkbHkgaW5kZW50ZWQg
bGFiZWxzLAorICAgICAgICAgICAgICAgICMgb25lIHNob3VsZCBiZSBlbm91Z2ggdG8gZmlndXJl
IG91dCB0aGUgcHJvYmxlbS4KKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAjIFdlIGln
bm9yZSBnb3RvIGxhYmVscyBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgYSBsaW5lLgorICAgICAg
ICBlbGlmIG1hdGNoKHInXHcrXHMqOlxzKiQnLCByZW1haW5pbmdfbGluZSk6CisgICAgICAgICAg
ICBjb250aW51ZQorICAgICAgICAjIEl0J3Mgbm90IGEgZ290byBsYWJlbCwgc28gY2hlY2sgaWYg
aXQncyBpbmRlbnRlZCBhdCBsZWFzdCBhcyBmYXIgYXMKKyAgICAgICAgIyB0aGUgc3dpdGNoIHN0
YXRlbWVudCBwbHVzIG9uZSBtb3JlIGxldmVsIG9mIGluZGVudGF0aW9uLgorICAgICAgICBlbGlm
IG5vdCBjdXJyZW50X2luZGVudGF0aW9uLnN0YXJ0c3dpdGgoaW5uZXJfaW5kZW50YXRpb24pOgor
ICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyICsgbGluZV9vZmZzZXQsICd3
aGl0ZXNwYWNlL2luZGVudCcsIDQsCisgICAgICAgICAgICAgICAgICAnTm9uLWxhYmVsIGNvZGUg
aW5zaWRlIHN3aXRjaCBzdGF0ZW1lbnRzIHNob3VsZCBiZSBpbmRlbnRlZC4nKQorICAgICAgICAg
ICAgIyBEb24ndCB0aHJvdyBhbiBlcnJvciBmb3IgbXVsdGlwbGUgYmFkbHkgaW5kZW50ZWQgc3Rh
dGVtZW50cywKKyAgICAgICAgICAgICMgb25lIHNob3VsZCBiZSBlbm91Z2ggdG8gZmlndXJlIG91
dCB0aGUgcHJvYmxlbS4KKyAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgZW5jb3VudGVy
ZWRfbmVzdGVkX3N3aXRjaDoKKyAgICAgICAgICAgIGJyZWFrCisKKworZGVmIGNoZWNrX2JyYWNl
cyhmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBlcnJvcik6CisgICAgIiIiTG9v
a3MgZm9yIG1pc3BsYWNlZCBicmFjZXMgKGUuZy4gYXQgdGhlIGVuZCBvZiBsaW5lKS4KKworICAg
IEFyZ3M6CisgICAgICBmaWxlbmFtZTogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlsZS4KKyAg
ICAgIGNsZWFuX2xpbmVzOiBBIENsZWFuc2VkTGluZXMgaW5zdGFuY2UgY29udGFpbmluZyB0aGUg
ZmlsZS4KKyAgICAgIGxpbmVfbnVtYmVyOiBUaGUgbnVtYmVyIG9mIHRoZSBsaW5lIHRvIGNoZWNr
LgorICAgICAgZXJyb3I6IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3Vu
ZC4KKyAgICAiIiIKKworICAgIGxpbmUgPSBjbGVhbl9saW5lcy5lbGlkZWRbbGluZV9udW1iZXJd
ICMgR2V0IHJpZCBvZiBjb21tZW50cyBhbmQgc3RyaW5ncy4KKworICAgIGlmIG1hdGNoKHInXHMq
e1xzKiQnLCBsaW5lKToKKyAgICAgICAgIyBXZSBhbGxvdyBhbiBvcGVuIGJyYWNlIHRvIHN0YXJ0
IGEgbGluZSBpbiB0aGUgY2FzZSB3aGVyZSBzb21lb25lCisgICAgICAgICMgaXMgdXNpbmcgYnJh
Y2VzIGZvciBmdW5jdGlvbiBkZWZpbml0aW9uIG9yIGluIGEgYmxvY2sgdG8KKyAgICAgICAgIyBl
eHBsaWNpdGx5IGNyZWF0ZSBhIG5ldyBzY29wZSwgd2hpY2ggaXMgY29tbW9ubHkgdXNlZCB0byBj
b250cm9sCisgICAgICAgICMgdGhlIGxpZmV0aW1lIG9mIHN0YWNrLWFsbG9jYXRlZCB2YXJpYWJs
ZXMuICBXZSBkb24ndCBkZXRlY3QgdGhpcworICAgICAgICAjIHBlcmZlY3RseTogd2UganVzdCBk
b24ndCBjb21wbGFpbiBpZiB0aGUgbGFzdCBub24td2hpdGVzcGFjZQorICAgICAgICAjIGNoYXJh
Y3RlciBvbiB0aGUgcHJldmlvdXMgbm9uLWJsYW5rIGxpbmUgaXMgJzsnLCAnOicsICd7JywgJ30n
LAorICAgICAgICAjICcpJywgb3IgJykgY29uc3QnIGFuZCBkb2Vzbid0IGJlZ2luIHdpdGggJ2lm
fGZvcnx3aGlsZXxzd2l0Y2h8ZWxzZScuCisgICAgICAgICMgV2UgYWxzbyBhbGxvdyAnIycgZm9y
ICNlbmRpZiBhbmQgJz0nIGZvciBhcnJheSBpbml0aWFsaXphdGlvbi4KKyAgICAgICAgcHJldmlv
dXNfbGluZSA9IGdldF9wcmV2aW91c19ub25fYmxhbmtfbGluZShjbGVhbl9saW5lcywgbGluZV9u
dW1iZXIpWzBdCisgICAgICAgIGlmICgobm90IHNlYXJjaChyJ1s7On17KT1dXHMqJHxcKVxzKmNv
bnN0XHMqJCcsIHByZXZpb3VzX2xpbmUpCisgICAgICAgICAgICAgb3Igc2VhcmNoKHInXGIoaWZ8
Zm9yfGZvcmVhY2h8d2hpbGV8c3dpdGNofGVsc2UpXGInLCBwcmV2aW91c19saW5lKSkKKyAgICAg
ICAgICAgIGFuZCBwcmV2aW91c19saW5lLmZpbmQoJyMnKSA8IDApOgorICAgICAgICAgICAgZXJy
b3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9icmFjZXMnLCA0LAorICAgICAg
ICAgICAgICAgICAgJ1RoaXMgeyBzaG91bGQgYmUgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMg
bGluZScpCisgICAgZWxpZiAoc2VhcmNoKHInXClccyooY29uc3RccyopP3tccyokJywgbGluZSkK
KyAgICAgICAgICBhbmQgbGluZS5jb3VudCgnKCcpID09IGxpbmUuY291bnQoJyknKQorICAgICAg
ICAgIGFuZCBub3Qgc2VhcmNoKHInXGIoaWZ8Zm9yfGZvcmVhY2h8d2hpbGV8c3dpdGNoKVxiJywg
bGluZSkKKyAgICAgICAgICBhbmQgbm90IG1hdGNoKHInXHMrW0EtWl9dW0EtWl8wLTldK1xiJywg
bGluZSkpOgorICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNl
L2JyYWNlcycsIDQsCisgICAgICAgICAgICAgICdQbGFjZSBicmFjZSBvbiBpdHMgb3duIGxpbmUg
Zm9yIGZ1bmN0aW9uIGRlZmluaXRpb25zLicpCisKKyAgICBpZiAobWF0Y2gocidccyp9XHMqKGVs
c2Vccyooe1xzKik/KT8kJywgbGluZSkgYW5kIGxpbmVfbnVtYmVyID4gMSk6CisgICAgICAgICMg
V2UgY2hlY2sgaWYgYSBjbG9zZWQgYnJhY2UgaGFzIHN0YXJ0ZWQgYSBsaW5lIHRvIHNlZSBpZiBh
CisgICAgICAgICMgb25lIGxpbmUgY29udHJvbCBzdGF0ZW1lbnQgd2FzIHByZXZpb3VzLgorICAg
ICAgICBwcmV2aW91c19saW5lID0gY2xlYW5fbGluZXMuZWxpZGVkW2xpbmVfbnVtYmVyIC0gMl0K
KyAgICAgICAgaWYgKHByZXZpb3VzX2xpbmUuZmluZCgneycpID4gMAorICAgICAgICAgICAgYW5k
IHNlYXJjaChyJ1xiKGlmfGZvcnxmb3JlYWNofHdoaWxlfGVsc2UpXGInLCBwcmV2aW91c19saW5l
KSk6CisgICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNl
L2JyYWNlcycsIDQsCisgICAgICAgICAgICAgICAgICAnT25lIGxpbmUgY29udHJvbCBjbGF1c2Vz
IHNob3VsZCBub3QgdXNlIGJyYWNlcy4nKQorCisgICAgIyBBbiBlbHNlIGNsYXVzZSBzaG91bGQg
YmUgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgcHJlY2VkaW5nIGNsb3NpbmcgYnJhY2UuCisgICAg
aWYgbWF0Y2gocidccyplbHNlXHMqJywgbGluZSk6CisgICAgICAgIHByZXZpb3VzX2xpbmUgPSBn
ZXRfcHJldmlvdXNfbm9uX2JsYW5rX2xpbmUoY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyKVswXQor
ICAgICAgICBpZiBtYXRjaChyJ1xzKn1ccyokJywgcHJldmlvdXNfbGluZSk6CisgICAgICAgICAg
ICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL25ld2xpbmUnLCA0LAor
ICAgICAgICAgICAgICAgICAgJ0FuIGVsc2Ugc2hvdWxkIGFwcGVhciBvbiB0aGUgc2FtZSBsaW5l
IGFzIHRoZSBwcmVjZWRpbmcgfScpCisKKyAgICAjIExpa2V3aXNlLCBhbiBlbHNlIHNob3VsZCBu
ZXZlciBoYXZlIHRoZSBlbHNlIGNsYXVzZSBvbiB0aGUgc2FtZSBsaW5lCisgICAgaWYgc2VhcmNo
KHInXGJlbHNlIFteXHN7XScsIGxpbmUpIGFuZCBub3Qgc2VhcmNoKHInXGJlbHNlIGlmXGInLCBs
aW5lKToKKyAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9u
ZXdsaW5lJywgNCwKKyAgICAgICAgICAgICAgJ0Vsc2UgY2xhdXNlIHNob3VsZCBuZXZlciBiZSBv
biBzYW1lIGxpbmUgYXMgZWxzZSAodXNlIDIgbGluZXMpJykKKworICAgICMgSW4gdGhlIHNhbWUg
d2F5LCBhIGRvL3doaWxlIHNob3VsZCBuZXZlciBiZSBvbiBvbmUgbGluZQorICAgIGlmIG1hdGNo
KHInXHMqZG8gW15cc3tdJywgbGluZSk6CisgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251
bWJlciwgJ3doaXRlc3BhY2UvbmV3bGluZScsIDQsCisgICAgICAgICAgICAgICdkby93aGlsZSBj
bGF1c2VzIHNob3VsZCBub3QgYmUgb24gYSBzaW5nbGUgbGluZScpCisKKyAgICAjIEJyYWNlcyBz
aG91bGRuJ3QgYmUgZm9sbG93ZWQgYnkgYSA7IHVubGVzcyB0aGV5J3JlIGRlZmluaW5nIGEgc3Ry
dWN0CisgICAgIyBvciBpbml0aWFsaXppbmcgYW4gYXJyYXkuCisgICAgIyBXZSBjYW4ndCB0ZWxs
IGluIGdlbmVyYWwsIGJ1dCB3ZSBjYW4gZm9yIHNvbWUgY29tbW9uIGNhc2VzLgorICAgIHByZXZp
b3VzX2xpbmVfbnVtYmVyID0gbGluZV9udW1iZXIKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICAo
cHJldmlvdXNfbGluZSwgcHJldmlvdXNfbGluZV9udW1iZXIpID0gZ2V0X3ByZXZpb3VzX25vbl9i
bGFua19saW5lKGNsZWFuX2xpbmVzLCBwcmV2aW91c19saW5lX251bWJlcikKKyAgICAgICAgaWYg
bWF0Y2gocidccyt7Lip9XHMqOycsIGxpbmUpIGFuZCBub3QgcHJldmlvdXNfbGluZS5jb3VudCgn
OycpOgorICAgICAgICAgICAgbGluZSA9IHByZXZpb3VzX2xpbmUgKyBsaW5lCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBicmVhaworICAgIGlmIChzZWFyY2gocid7Lip9XHMqOycsIGxpbmUp
CisgICAgICAgIGFuZCBsaW5lLmNvdW50KCd7JykgPT0gbGluZS5jb3VudCgnfScpCisgICAgICAg
IGFuZCBub3Qgc2VhcmNoKHInc3RydWN0fGNsYXNzfGVudW18XHMqPVxzKnsnLCBsaW5lKSk6Cisg
ICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3JlYWRhYmlsaXR5L2JyYWNlcycs
IDQsCisgICAgICAgICAgICAgICJZb3UgZG9uJ3QgbmVlZCBhIDsgYWZ0ZXIgYSB9IikKKworCitk
ZWYgY2hlY2tfZXhpdF9zdGF0ZW1lbnRfc2ltcGxpZmljYXRpb25zKGZpbGVuYW1lLCBjbGVhbl9s
aW5lcywgbGluZV9udW1iZXIsIGVycm9yKToKKyAgICAiIiJMb29rcyBmb3IgZWxzZSBvciBlbHNl
LWlmIHN0YXRlbWVudHMgdGhhdCBzaG91bGQgYmUgd3JpdHRlbiBhcyBhbgorICAgIGlmIHN0YXRl
bWVudCB3aGVuIHRoZSBwcmlvciBpZiBjb25jbHVkZXMgd2l0aCBhIHJldHVybiwgYnJlYWssIGNv
bnRpbnVlIG9yCisgICAgZ290byBzdGF0ZW1lbnQuCisKKyAgICBBcmdzOgorICAgICAgZmlsZW5h
bWU6IFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuCisgICAgICBjbGVhbl9saW5lczogQSBD
bGVhbnNlZExpbmVzIGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIGZpbGUuCisgICAgICBsaW5lX251
bWJlcjogVGhlIG51bWJlciBvZiB0aGUgbGluZSB0byBjaGVjay4KKyAgICAgIGVycm9yOiBUaGUg
ZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91bmQuCisgICAgIiIiCisKKyAgICBs
aW5lID0gY2xlYW5fbGluZXMuZWxpZGVkW2xpbmVfbnVtYmVyXSAjIEdldCByaWQgb2YgY29tbWVu
dHMgYW5kIHN0cmluZ3MuCisKKyAgICBlbHNlX21hdGNoID0gbWF0Y2gocicoP1A8ZWxzZV9pbmRl
bnRhdGlvbj5ccyopKFx9XHMqKT9lbHNlKFxzK2lmXHMqXCh8KD9QPGVsc2U+XHMqKFx7XHMqKT9c
WikpJywgbGluZSkKKyAgICBpZiBub3QgZWxzZV9tYXRjaDoKKyAgICAgICAgcmV0dXJuCisKKyAg
ICBlbHNlX2luZGVudGF0aW9uID0gZWxzZV9tYXRjaC5ncm91cCgnZWxzZV9pbmRlbnRhdGlvbicp
CisgICAgaW5uZXJfaW5kZW50YXRpb24gPSBlbHNlX2luZGVudGF0aW9uICsgJyAnICogNAorCisg
ICAgcHJldmlvdXNfbGluZXMgPSBjbGVhbl9saW5lcy5lbGlkZWRbOmxpbmVfbnVtYmVyXQorICAg
IHByZXZpb3VzX2xpbmVzLnJldmVyc2UoKQorICAgIGxpbmVfb2Zmc2V0ID0gMAorICAgIGVuY291
bnRlcmVkX2V4aXRfc3RhdGVtZW50ID0gRmFsc2UKKworICAgIGZvciBjdXJyZW50X2xpbmUgaW4g
cHJldmlvdXNfbGluZXM6CisgICAgICAgIGxpbmVfb2Zmc2V0IC09IDEKKworICAgICAgICAjIFNr
aXAgbm90IG9ubHkgZW1wdHkgbGluZXMgYnV0IGFsc28gdGhvc2Ugd2l0aCBwcmVwcm9jZXNzb3Ig
ZGlyZWN0aXZlcworICAgICAgICAjIGFuZCBnb3RvIGxhYmVscy4KKyAgICAgICAgaWYgY3VycmVu
dF9saW5lLnN0cmlwKCkgPT0gJycgb3IgY3VycmVudF9saW5lLnN0YXJ0c3dpdGgoJyMnKSBvciBt
YXRjaChyJ1x3K1xzKjpccyokJywgY3VycmVudF9saW5lKToKKyAgICAgICAgICAgIGNvbnRpbnVl
CisKKyAgICAgICAgIyBTa2lwIGxpbmVzIHdpdGggY2xvc2luZyBicmFjZXMgb24gdGhlIG9yaWdp
bmFsIGluZGVudGF0aW9uIGxldmVsLgorICAgICAgICAjIEV2ZW4gdGhvdWdoIHRoZSBzdHlsZWd1
aWRlIHNheXMgdGhleSBzaG91bGQgYmUgb24gdGhlIHNhbWUgbGluZSBhcworICAgICAgICAjIHRo
ZSAiZWxzZSBpZiIgc3RhdGVtZW50LCB3ZSBhbHNvIHdhbnQgdG8gY2hlY2sgZm9yIGluc3RhbmNl
cyB3aGVyZQorICAgICAgICAjIHRoZSBjdXJyZW50IGNvZGUgZG9lcyBub3QgY29tcGx5IHdpdGgg
dGhlIGNvZGluZyBzdHlsZS4gVGh1cywgaWdub3JlCisgICAgICAgICMgdGhlc2UgbGluZXMgYW5k
IHByb2NlZWQgdG8gdGhlIGxpbmUgYmVmb3JlIHRoYXQuCisgICAgICAgIGlmIGN1cnJlbnRfbGlu
ZSA9PSBlbHNlX2luZGVudGF0aW9uICsgJ30nOgorICAgICAgICAgICAgY29udGludWUKKworICAg
ICAgICBjdXJyZW50X2luZGVudGF0aW9uX21hdGNoID0gbWF0Y2gocicoP1A8aW5kZW50YXRpb24+
XHMqKSg/UDxyZW1haW5pbmdfbGluZT4uKikkJywgY3VycmVudF9saW5lKTsKKyAgICAgICAgY3Vy
cmVudF9pbmRlbnRhdGlvbiA9IGN1cnJlbnRfaW5kZW50YXRpb25fbWF0Y2guZ3JvdXAoJ2luZGVu
dGF0aW9uJykKKyAgICAgICAgcmVtYWluaW5nX2xpbmUgPSBjdXJyZW50X2luZGVudGF0aW9uX21h
dGNoLmdyb3VwKCdyZW1haW5pbmdfbGluZScpCisKKyAgICAgICAgIyBBcyB3ZSdyZSBnb2luZyB1
cCB0aGUgbGluZXMsIHRoZSBmaXJzdCByZWFsIHN0YXRlbWVudCB0byBlbmNvdW50ZXIKKyAgICAg
ICAgIyBoYXMgdG8gYmUgYW4gZXhpdCBzdGF0ZW1lbnQgKHJldHVybiwgYnJlYWssIGNvbnRpbnVl
IG9yIGdvdG8pIC0KKyAgICAgICAgIyBvdGhlcndpc2UsIHRoaXMgY2hlY2sgZG9lc24ndCBhcHBs
eS4KKyAgICAgICAgaWYgbm90IGVuY291bnRlcmVkX2V4aXRfc3RhdGVtZW50OgorICAgICAgICAg
ICAgIyBXZSBvbmx5IHdhbnQgdG8gZmluZCBleGl0IHN0YXRlbWVudHMgaWYgdGhleSBhcmUgb24g
ZXhhY3RseQorICAgICAgICAgICAgIyB0aGUgc2FtZSBsZXZlbCBvZiBpbmRlbnRhdGlvbiBhcyBl
eHBlY3RlZCBmcm9tIHRoZSBjb2RlIGluc2lkZQorICAgICAgICAgICAgIyB0aGUgYmxvY2suIElm
IHRoZSBpbmRlbnRhdGlvbiBkb2Vzbid0IHN0cmljdGx5IG1hdGNoIHRoZW4gd2UKKyAgICAgICAg
ICAgICMgbWlnaHQgaGF2ZSBhIG5lc3RlZCBpZiBvciBzb21ldGhpbmcsIHdoaWNoIG11c3QgYmUg
aWdub3JlZC4KKyAgICAgICAgICAgIGlmIGN1cnJlbnRfaW5kZW50YXRpb24gIT0gaW5uZXJfaW5k
ZW50YXRpb246CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIG1hdGNoKHIn
KHJldHVybihcVysuKil8KGJyZWFrfGNvbnRpbnVlKVxzKjt8Z290b1xzKlx3KzspJCcsIHJlbWFp
bmluZ19saW5lKToKKyAgICAgICAgICAgICAgICBlbmNvdW50ZXJlZF9leGl0X3N0YXRlbWVudCA9
IFRydWUKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgYnJlYWsKKworICAg
ICAgICAjIFdoZW4gY29kZSBleGVjdXRpb24gcmVhY2hlcyB0aGlzIHBvaW50LCB3ZSd2ZSBmb3Vu
ZCBhbiBleGl0IHN0YXRlbWVudAorICAgICAgICAjIGFzIGxhc3Qgc3RhdGVtZW50IG9mIHRoZSBw
cmV2aW91cyBibG9jay4gTm93IHdlIG9ubHkgbmVlZCB0byBtYWtlCisgICAgICAgICMgc3VyZSB0
aGF0IHRoZSBibG9jayBiZWxvbmdzIHRvIGFuICJpZiIsIHRoZW4gd2UgY2FuIHRocm93IGFuIGVy
cm9yLgorCisgICAgICAgICMgU2tpcCBsaW5lcyB3aXRoIG9wZW5pbmcgYnJhY2VzIG9uIHRoZSBv
cmlnaW5hbCBpbmRlbnRhdGlvbiBsZXZlbCwKKyAgICAgICAgIyBzaW1pbGFyIHRvIHRoZSBjbG9z
aW5nIGJyYWNlcyBjaGVjayBhYm92ZS4gKCJpZiAoY29uZGl0aW9uKVxueyIpCisgICAgICAgIGlm
IGN1cnJlbnRfbGluZSA9PSBlbHNlX2luZGVudGF0aW9uICsgJ3snOgorICAgICAgICAgICAgY29u
dGludWUKKworICAgICAgICAjIFNraXAgZXZlcnl0aGluZyB0aGF0J3MgZnVydGhlciBpbmRlbnRl
ZCB0aGFuIG91ciAiZWxzZSIgb3IgImVsc2UgaWYiLgorICAgICAgICBpZiBjdXJyZW50X2luZGVu
dGF0aW9uLnN0YXJ0c3dpdGgoZWxzZV9pbmRlbnRhdGlvbikgYW5kIGN1cnJlbnRfaW5kZW50YXRp
b24gIT0gZWxzZV9pbmRlbnRhdGlvbjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAg
IyBTbyB3ZSd2ZSBnb3QgYSBsaW5lIHdpdGggc2FtZSAob3IgbGVzcykgaW5kZW50YXRpb24uIElz
IGl0IGFuICJpZiI/CisgICAgICAgICMgSWYgeWVzOiB0aHJvdyBhbiBlcnJvci4gSWYgbm86IGRv
bid0IHRocm93IGFuIGVycm9yLgorICAgICAgICAjIFdoYXRldmVyIHRoZSBvdXRjb21lLCB0aGlz
IGlzIHRoZSBlbmQgb2Ygb3VyIGxvb3AuCisgICAgICAgIGlmIG1hdGNoKHInaWZccypcKCcsIHJl
bWFpbmluZ19saW5lKToKKyAgICAgICAgICAgIGlmIGVsc2VfbWF0Y2guc3RhcnQoJ2Vsc2UnKSAh
PSAtMToKKyAgICAgICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIgKyBsaW5l
X29mZnNldCwgJ3JlYWRhYmlsaXR5L2NvbnRyb2xfZmxvdycsIDQsCisgICAgICAgICAgICAgICAg
ICAgICAgJ0FuIGVsc2Ugc3RhdGVtZW50IGNhbiBiZSByZW1vdmVkIHdoZW4gdGhlIHByaW9yICJp
ZiIgJworICAgICAgICAgICAgICAgICAgICAgICdjb25jbHVkZXMgd2l0aCBhIHJldHVybiwgYnJl
YWssIGNvbnRpbnVlIG9yIGdvdG8gc3RhdGVtZW50LicpCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciArIGxpbmVfb2Zmc2V0LCAn
cmVhZGFiaWxpdHkvY29udHJvbF9mbG93JywgNCwKKyAgICAgICAgICAgICAgICAgICAgICAnQW4g
ZWxzZSBpZiBzdGF0ZW1lbnQgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYW4gaWYgc3RhdGVtZW50ICcK
KyAgICAgICAgICAgICAgICAgICAgICAnd2hlbiB0aGUgcHJpb3IgImlmIiBjb25jbHVkZXMgd2l0
aCBhIHJldHVybiwgYnJlYWssICcKKyAgICAgICAgICAgICAgICAgICAgICAnY29udGludWUgb3Ig
Z290byBzdGF0ZW1lbnQuJykKKyAgICAgICAgYnJlYWsKKworCitkZWYgcmVwbGFjZWFibGVfY2hl
Y2sob3BlcmF0b3IsIG1hY3JvLCBsaW5lKToKKyAgICAiIiJEZXRlcm1pbmUgd2hldGhlciBhIGJh
c2ljIENIRUNLIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgbW9yZSBzcGVjaWZpYyBvbmUuCisKKyAg
ICBGb3IgZXhhbXBsZSBzdWdnZXN0IHVzaW5nIENIRUNLX0VRIGluc3RlYWQgb2YgQ0hFQ0soYSA9
PSBiKSBhbmQKKyAgICBzaW1pbGFybHkgZm9yIENIRUNLX0dFLCBDSEVDS19HVCwgQ0hFQ0tfTEUs
IENIRUNLX0xULCBDSEVDS19ORS4KKworICAgIEFyZ3M6CisgICAgICBvcGVyYXRvcjogVGhlIEMr
KyBvcGVyYXRvciB1c2VkIGluIHRoZSBDSEVDSy4KKyAgICAgIG1hY3JvOiBUaGUgQ0hFQ0sgb3Ig
RVhQRUNUIG1hY3JvIGJlaW5nIGNhbGxlZC4KKyAgICAgIGxpbmU6IFRoZSBjdXJyZW50IHNvdXJj
ZSBsaW5lLgorCisgICAgUmV0dXJuczoKKyAgICAgIFRydWUgaWYgdGhlIENIRUNLIGNhbiBiZSBy
ZXBsYWNlZCB3aXRoIGEgbW9yZSBzcGVjaWZpYyBvbmUuCisgICAgIiIiCisKKyAgICAjIFRoaXMg
bWF0Y2hlcyBkZWNpbWFsIGFuZCBoZXggaW50ZWdlcnMsIHN0cmluZ3MsIGFuZCBjaGFycyAoaW4g
dGhhdCBvcmRlcikuCisgICAgbWF0Y2hfY29uc3RhbnQgPSByJyhbLStdPyhcZCt8MFt4WF1bMC05
YS1mQS1GXSspW2xMdVVdezAsM318Ii4qInxcJy4qXCcpJworCisgICAgIyBFeHByZXNzaW9uIHRv
IG1hdGNoIHR3byBzaWRlcyBvZiB0aGUgb3BlcmF0b3Igd2l0aCBzb21ldGhpbmcgdGhhdAorICAg
ICMgbG9va3MgbGlrZSBhIGxpdGVyYWwsIHNpbmNlIENIRUNLKHggPT0gaXRlcmF0b3IpIHdvbid0
IGNvbXBpbGUuCisgICAgIyBUaGlzIG1lYW5zIHdlIGNhbid0IGNhdGNoIGFsbCB0aGUgY2FzZXMg
d2hlcmUgYSBtb3JlIHNwZWNpZmljCisgICAgIyBDSEVDSyBpcyBwb3NzaWJsZSwgYnV0IGl0J3Mg
bGVzcyBhbm5veWluZyB0aGFuIGRlYWxpbmcgd2l0aAorICAgICMgZXh0cmFuZW91cyB3YXJuaW5n
cy4KKyAgICBtYXRjaF90aGlzID0gKHInXHMqJyArIG1hY3JvICsgcidcKChccyonICsKKyAgICAg
ICAgICAgICAgICAgIG1hdGNoX2NvbnN0YW50ICsgcidccyonICsgb3BlcmF0b3IgKyByJ1tePD5d
Lip8JworICAgICAgICAgICAgICAgICAgcicuKltePD5dJyArIG9wZXJhdG9yICsgcidccyonICsg
bWF0Y2hfY29uc3RhbnQgKworICAgICAgICAgICAgICAgICAgcidccypcKSknKQorCisgICAgIyBE
b24ndCBjb21wbGFpbiBhYm91dCBDSEVDSyh4ID09IE5VTEwpIG9yIHNpbWlsYXIgYmVjYXVzZQor
ICAgICMgQ0hFQ0tfRVEoeCwgTlVMTCkgd29uJ3QgY29tcGlsZSAocmVxdWlyZXMgYSBjYXN0KS4K
KyAgICAjIEFsc28sIGRvbid0IGNvbXBsYWluIGFib3V0IG1vcmUgY29tcGxleCBib29sZWFuIGV4
cHJlc3Npb25zCisgICAgIyBpbnZvbHZpbmcgJiYgb3IgfHwgc3VjaCBhcyBDSEVDSyhhID09IGIg
fHwgYyA9PSBkKS4KKyAgICByZXR1cm4gbWF0Y2gobWF0Y2hfdGhpcywgbGluZSkgYW5kIG5vdCBz
ZWFyY2gocidOVUxMfCYmfFx8XHwnLCBsaW5lKQorCisKK2RlZiBjaGVja19jaGVjayhmaWxlbmFt
ZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBlcnJvcik6CisgICAgIiIiQ2hlY2tzIHRoZSB1
c2Ugb2YgQ0hFQ0sgYW5kIEVYUEVDVCBtYWNyb3MuCisKKyAgICBBcmdzOgorICAgICAgZmlsZW5h
bWU6IFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuCisgICAgICBjbGVhbl9saW5lczogQSBD
bGVhbnNlZExpbmVzIGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIGZpbGUuCisgICAgICBsaW5lX251
bWJlcjogVGhlIG51bWJlciBvZiB0aGUgbGluZSB0byBjaGVjay4KKyAgICAgIGVycm9yOiBUaGUg
ZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91bmQuCisgICAgIiIiCisKKyAgICAj
IERlY2lkZSB0aGUgc2V0IG9mIHJlcGxhY2VtZW50IG1hY3JvcyB0aGF0IHNob3VsZCBiZSBzdWdn
ZXN0ZWQKKyAgICByYXdfbGluZXMgPSBjbGVhbl9saW5lcy5yYXdfbGluZXMKKyAgICBjdXJyZW50
X21hY3JvID0gJycKKyAgICBmb3IgbWFjcm8gaW4gX0NIRUNLX01BQ1JPUzoKKyAgICAgICAgaWYg
cmF3X2xpbmVzW2xpbmVfbnVtYmVyXS5maW5kKG1hY3JvKSA+PSAwOgorICAgICAgICAgICAgY3Vy
cmVudF9tYWNybyA9IG1hY3JvCisgICAgICAgICAgICBicmVhaworICAgIGlmIG5vdCBjdXJyZW50
X21hY3JvOgorICAgICAgICAjIERvbid0IHdhc3RlIHRpbWUgaGVyZSBpZiBsaW5lIGRvZXNuJ3Qg
Y29udGFpbiAnQ0hFQ0snIG9yICdFWFBFQ1QnCisgICAgICAgIHJldHVybgorCisgICAgbGluZSA9
IGNsZWFuX2xpbmVzLmVsaWRlZFtsaW5lX251bWJlcl0gICAgICAgICMgZ2V0IHJpZCBvZiBjb21t
ZW50cyBhbmQgc3RyaW5ncworCisgICAgIyBFbmNvdXJhZ2UgcmVwbGFjaW5nIHBsYWluIENIRUNL
cyB3aXRoIENIRUNLX0VRL0NIRUNLX05FL2V0Yy4KKyAgICBmb3Igb3BlcmF0b3IgaW4gWyc9PScs
ICchPScsICc+PScsICc+JywgJzw9JywgJzwnXToKKyAgICAgICAgaWYgcmVwbGFjZWFibGVfY2hl
Y2sob3BlcmF0b3IsIGN1cnJlbnRfbWFjcm8sIGxpbmUpOgorICAgICAgICAgICAgZXJyb3IoZmls
ZW5hbWUsIGxpbmVfbnVtYmVyLCAncmVhZGFiaWxpdHkvY2hlY2snLCAyLAorICAgICAgICAgICAg
ICAgICAgJ0NvbnNpZGVyIHVzaW5nICVzIGluc3RlYWQgb2YgJXMoYSAlcyBiKScgJSAoCisgICAg
ICAgICAgICAgICAgICAgICAgX0NIRUNLX1JFUExBQ0VNRU5UW2N1cnJlbnRfbWFjcm9dW29wZXJh
dG9yXSwKKyAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X21hY3JvLCBvcGVyYXRvcikpCisg
ICAgICAgICAgICBicmVhaworCisKK2RlZiBjaGVja19mb3JfY29tcGFyaXNvbnNfdG9femVybyhm
aWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBlcnJvcik6CisgICAgIyBHZXQgdGhl
IGxpbmUgd2l0aG91dCBjb21tZW50cyBhbmQgc3RyaW5ncy4KKyAgICBsaW5lID0gY2xlYW5fbGlu
ZXMuZWxpZGVkW2xpbmVfbnVtYmVyXQorCisgICAgIyBJbmNsdWRlIE5VTEwgaGVyZSBzbyB0aGF0
IHVzZXJzIGRvbid0IGhhdmUgdG8gY29udmVydCBOVUxMIHRvIDAgZmlyc3QgYW5kIHRoZW4gZ2V0
IHRoaXMgZXJyb3IuCisgICAgaWYgc2VhcmNoKHInWz0hXT1ccyooTlVMTHwwfHRydWV8ZmFsc2Up
XFcnLCBsaW5lKSBvciBzZWFyY2gocidcVyhOVUxMfDB8dHJ1ZXxmYWxzZSlccypbPSFdPScsIGxp
bmUpOgorICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdyZWFkYWJpbGl0eS9j
b21wYXJpc29uX3RvX3plcm8nLCA1LAorICAgICAgICAgICAgICAnVGVzdHMgZm9yIHRydWUvZmFs
c2UsIG51bGwvbm9uLW51bGwsIGFuZCB6ZXJvL25vbi16ZXJvIHNob3VsZCBhbGwgYmUgZG9uZSB3
aXRob3V0IGVxdWFsaXR5IGNvbXBhcmlzb25zLicpCisKKworZGVmIGNoZWNrX2Zvcl9udWxsKGZp
bGVuYW1lLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGVycm9yKToKKyAgICAjIFRoaXMgY2hl
Y2sgZG9lc24ndCBhcHBseSB0byBDIG9yIE9iamVjdGl2ZS1DIGltcGxlbWVudGF0aW9uIGZpbGVz
LgorICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCcuYycpIG9yIGZpbGVuYW1lLmVuZHN3aXRoKCcu
bScpOgorICAgICAgICByZXR1cm4KKworICAgIGxpbmUgPSBjbGVhbl9saW5lcy5lbGlkZWRbbGlu
ZV9udW1iZXJdCisKKyAgICAjIERvbid0IHdhcm4gYWJvdXQgTlVMTCB1c2FnZSBpbiBnX29iamVj
dF97Z2V0LHNldH0oKS4gU2VlIEJ1ZyAzMjg1OAorICAgIGlmIHNlYXJjaChyJ1xiZ19vYmplY3Rf
W3NnXWV0XGInLCBsaW5lKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBzZWFyY2gocidcYk5V
TExcYicsIGxpbmUpOgorICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdyZWFk
YWJpbGl0eS9udWxsJywgNSwgJ1VzZSAwIGluc3RlYWQgb2YgTlVMTC4nKQorICAgICAgICByZXR1
cm4KKworICAgIGxpbmUgPSBjbGVhbl9saW5lcy5yYXdfbGluZXNbbGluZV9udW1iZXJdCisgICAg
IyBTZWUgaWYgTlVMTCBvY2N1cnMgaW4gYW55IGNvbW1lbnRzIGluIHRoZSBsaW5lLiBJZiB0aGUg
c2VhcmNoIGZvciBOVUxMIHVzaW5nIHRoZSByYXcgbGluZQorICAgICMgbWF0Y2hlcywgdGhlbiBk
byB0aGUgY2hlY2sgd2l0aCBzdHJpbmdzIGNvbGxhcHNlZCB0byBhdm9pZCBnaXZpbmcgZXJyb3Jz
IGZvcgorICAgICMgTlVMTHMgb2NjdXJyaW5nIGluIHN0cmluZ3MuCisgICAgaWYgc2VhcmNoKHIn
XGJOVUxMXGInLCBsaW5lKSBhbmQgc2VhcmNoKHInXGJOVUxMXGInLCBDbGVhbnNlZExpbmVzLmNv
bGxhcHNlX3N0cmluZ3MobGluZSkpOgorICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1i
ZXIsICdyZWFkYWJpbGl0eS9udWxsJywgNCwgJ1VzZSAwIGluc3RlYWQgb2YgTlVMTC4nKQorCitk
ZWYgZ2V0X2xpbmVfd2lkdGgobGluZSk6CisgICAgIiIiRGV0ZXJtaW5lcyB0aGUgd2lkdGggb2Yg
dGhlIGxpbmUgaW4gY29sdW1uIHBvc2l0aW9ucy4KKworICAgIEFyZ3M6CisgICAgICBsaW5lOiBB
IHN0cmluZywgd2hpY2ggbWF5IGJlIGEgVW5pY29kZSBzdHJpbmcuCisKKyAgICBSZXR1cm5zOgor
ICAgICAgVGhlIHdpZHRoIG9mIHRoZSBsaW5lIGluIGNvbHVtbiBwb3NpdGlvbnMsIGFjY291bnRp
bmcgZm9yIFVuaWNvZGUKKyAgICAgIGNvbWJpbmluZyBjaGFyYWN0ZXJzIGFuZCB3aWRlIGNoYXJh
Y3RlcnMuCisgICAgIiIiCisgICAgaWYgaXNpbnN0YW5jZShsaW5lLCB1bmljb2RlKToKKyAgICAg
ICAgd2lkdGggPSAwCisgICAgICAgIGZvciBjIGluIHVuaWNvZGVkYXRhLm5vcm1hbGl6ZSgnTkZD
JywgbGluZSk6CisgICAgICAgICAgICBpZiB1bmljb2RlZGF0YS5lYXN0X2FzaWFuX3dpZHRoKGMp
IGluICgnVycsICdGJyk6CisgICAgICAgICAgICAgICAgd2lkdGggKz0gMgorICAgICAgICAgICAg
ZWxpZiBub3QgdW5pY29kZWRhdGEuY29tYmluaW5nKGMpOgorICAgICAgICAgICAgICAgIHdpZHRo
ICs9IDEKKyAgICAgICAgcmV0dXJuIHdpZHRoCisgICAgcmV0dXJuIGxlbihsaW5lKQorCisKK2Rl
ZiBjaGVja19zdHlsZShmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBmaWxlX2V4
dGVuc2lvbiwgZmlsZV9zdGF0ZSwgZXJyb3IpOgorICAgICIiIkNoZWNrcyBydWxlcyBmcm9tIHRo
ZSAnQysrIHN0eWxlIHJ1bGVzJyBzZWN0aW9uIG9mIGNwcGd1aWRlLmh0bWwuCisKKyAgICBNb3N0
IG9mIHRoZXNlIHJ1bGVzIGFyZSBoYXJkIHRvIHRlc3QgKG5hbWluZywgY29tbWVudCBzdHlsZSks
IGJ1dCB3ZQorICAgIGRvIHdoYXQgd2UgY2FuLiAgSW4gcGFydGljdWxhciB3ZSBjaGVjayBmb3Ig
NC1zcGFjZSBpbmRlbnRzLCBsaW5lIGxlbmd0aHMsCisgICAgdGFiIHVzYWdlLCBzcGFjZXMgaW5z
aWRlIGNvZGUsIGV0Yy4KKworICAgIEFyZ3M6CisgICAgICBmaWxlbmFtZTogVGhlIG5hbWUgb2Yg
dGhlIGN1cnJlbnQgZmlsZS4KKyAgICAgIGNsZWFuX2xpbmVzOiBBIENsZWFuc2VkTGluZXMgaW5z
dGFuY2UgY29udGFpbmluZyB0aGUgZmlsZS4KKyAgICAgIGxpbmVfbnVtYmVyOiBUaGUgbnVtYmVy
IG9mIHRoZSBsaW5lIHRvIGNoZWNrLgorICAgICAgZmlsZV9leHRlbnNpb246IFRoZSBleHRlbnNp
b24gKHdpdGhvdXQgdGhlIGRvdCkgb2YgdGhlIGZpbGVuYW1lLgorICAgICAgZmlsZV9zdGF0ZTog
QSBfRmlsZVN0YXRlIGluc3RhbmNlIHdoaWNoIG1haW50YWlucyBpbmZvcm1hdGlvbiBhYm91dAor
ICAgICAgICAgICAgICAgICAgdGhlIHN0YXRlIG9mIHRoaW5ncyBpbiB0aGUgZmlsZS4KKyAgICAg
IGVycm9yOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91bmQuCisgICAg
IiIiCisKKyAgICByYXdfbGluZXMgPSBjbGVhbl9saW5lcy5yYXdfbGluZXMKKyAgICBsaW5lID0g
cmF3X2xpbmVzW2xpbmVfbnVtYmVyXQorCisgICAgaWYgbGluZS5maW5kKCdcdCcpICE9IC0xOgor
ICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL3RhYicsIDEs
CisgICAgICAgICAgICAgICdUYWIgZm91bmQ7IGJldHRlciB0byB1c2Ugc3BhY2VzJykKKworICAg
ICMgT25lIG9yIHRocmVlIGJsYW5rIHNwYWNlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5l
IGlzIHdlaXJkOyBpdCdzCisgICAgIyBoYXJkIHRvIHJlY29uY2lsZSB0aGF0IHdpdGggNC1zcGFj
ZSBpbmRlbnRzLgorICAgICMgTk9URTogaGVyZSBhcmUgdGhlIGNvbmRpdGlvbnMgcm9iIHBpa2Ug
dXNlZCBmb3IgaGlzIHRlc3RzLiAgTWluZSBhcmVuJ3QKKyAgICAjIGFzIHNvcGhpc3RpY2F0ZWQs
IGJ1dCBpdCBtYXkgYmUgd29ydGggYmVjb21pbmcgc286ICBSTEVOR1RIPT1pbml0aWFsX3NwYWNl
cworICAgICMgaWYoUkxFTkdUSCA+IDIwKSBjb21wbGFpbiA9IDA7CisgICAgIyBpZihtYXRjaCgk
MCwgIiArKGVycm9yfHByaXZhdGV8cHVibGljfHByb3RlY3RlZCk6IikpIGNvbXBsYWluID0gMDsK
KyAgICAjIGlmKG1hdGNoKHByZXYsICImJiAqJCIpKSBjb21wbGFpbiA9IDA7CisgICAgIyBpZiht
YXRjaChwcmV2LCAiXFx8XFx8ICokIikpIGNvbXBsYWluID0gMDsKKyAgICAjIGlmKG1hdGNoKHBy
ZXYsICJbXCIsPT48XSAqJCIpKSBjb21wbGFpbiA9IDA7CisgICAgIyBpZihtYXRjaCgkMCwgIiA8
PCIpKSBjb21wbGFpbiA9IDA7CisgICAgIyBpZihtYXRjaChwcmV2LCAiICtmb3IgXFwoIikpIGNv
bXBsYWluID0gMDsKKyAgICAjIGlmKHByZXZvZGQgJiYgbWF0Y2gocHJldnByZXYsICIgK2ZvciBc
XCgiKSkgY29tcGxhaW4gPSAwOworICAgIGluaXRpYWxfc3BhY2VzID0gMAorICAgIGNsZWFuc2Vk
X2xpbmUgPSBjbGVhbl9saW5lcy5lbGlkZWRbbGluZV9udW1iZXJdCisgICAgd2hpbGUgaW5pdGlh
bF9zcGFjZXMgPCBsZW4obGluZSkgYW5kIGxpbmVbaW5pdGlhbF9zcGFjZXNdID09ICcgJzoKKyAg
ICAgICAgaW5pdGlhbF9zcGFjZXMgKz0gMQorICAgIGlmIGxpbmUgYW5kIGxpbmVbLTFdLmlzc3Bh
Y2UoKToKKyAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9l
bmRfb2ZfbGluZScsIDQsCisgICAgICAgICAgICAgICdMaW5lIGVuZHMgaW4gd2hpdGVzcGFjZS4g
IENvbnNpZGVyIGRlbGV0aW5nIHRoZXNlIGV4dHJhIHNwYWNlcy4nKQorICAgICMgVGhlcmUgYXJl
IGNlcnRhaW4gc2l0dWF0aW9ucyB3ZSBhbGxvdyBvbmUgc3BhY2UsIG5vdGFibHkgZm9yIGxhYmVs
cworICAgIGVsaWYgKChpbml0aWFsX3NwYWNlcyA+PSAxIGFuZCBpbml0aWFsX3NwYWNlcyA8PSAz
KQorICAgICAgICAgIGFuZCBub3QgbWF0Y2gocidccypcdytccyo6XHMqJCcsIGNsZWFuc2VkX2xp
bmUpKToKKyAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9p
bmRlbnQnLCAzLAorICAgICAgICAgICAgICAnV2VpcmQgbnVtYmVyIG9mIHNwYWNlcyBhdCBsaW5l
LXN0YXJ0LiAgJworICAgICAgICAgICAgICAnQXJlIHlvdSB1c2luZyBhIDQtc3BhY2UgaW5kZW50
PycpCisgICAgIyBMYWJlbHMgc2hvdWxkIGFsd2F5cyBiZSBpbmRlbnRlZCBhdCBsZWFzdCBvbmUg
c3BhY2UuCisgICAgZWxpZiBub3QgaW5pdGlhbF9zcGFjZXMgYW5kIGxpbmVbOjJdICE9ICcvLyc6
CisgICAgICAgIGxhYmVsX21hdGNoID0gbWF0Y2gocicoP1A8bGFiZWw+W146XSspOlxzKiQnLCBs
aW5lKQorCisgICAgICAgIGlmIGxhYmVsX21hdGNoOgorICAgICAgICAgICAgbGFiZWwgPSBsYWJl
bF9tYXRjaC5ncm91cCgnbGFiZWwnKQorICAgICAgICAgICAgIyBPbmx5IHRocm93IGVycm9ycyBm
b3Igc3R1ZmYgdGhhdCBpcyBkZWZpbml0ZWx5IG5vdCBhIGdvdG8gbGFiZWwsCisgICAgICAgICAg
ICAjIGJlY2F1c2UgZ290byBsYWJlbHMgY2FuIGluIGZhY3Qgb2NjdXIgYXQgdGhlIHN0YXJ0IG9m
IHRoZSBsaW5lLgorICAgICAgICAgICAgaWYgbGFiZWwgaW4gWydwdWJsaWMnLCAncHJpdmF0ZScs
ICdwcm90ZWN0ZWQnXSBvciBsYWJlbC5maW5kKCcgJykgIT0gLTE6CisgICAgICAgICAgICAgICAg
ZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9sYWJlbHMnLCA0LAorICAg
ICAgICAgICAgICAgICAgICAgICdMYWJlbHMgc2hvdWxkIGFsd2F5cyBiZSBpbmRlbnRlZCBhdCBs
ZWFzdCBvbmUgc3BhY2UuICAnCisgICAgICAgICAgICAgICAgICAgICAgJ0lmIHRoaXMgaXMgYSBt
ZW1iZXItaW5pdGlhbGl6ZXIgbGlzdCBpbiBhIGNvbnN0cnVjdG9yLCAnCisgICAgICAgICAgICAg
ICAgICAgICAgJ3RoZSBjb2xvbiBzaG91bGQgYmUgb24gdGhlIGxpbmUgYWZ0ZXIgdGhlIGRlZmlu
aXRpb24gaGVhZGVyLicpCisKKyAgICBpZiAoY2xlYW5zZWRfbGluZS5jb3VudCgnOycpID4gMQor
ICAgICAgICAjIGZvciBsb29wcyBhcmUgYWxsb3dlZCB0d28gOydzIChhbmQgbWF5IHJ1biBvdmVy
IHR3byBsaW5lcykuCisgICAgICAgIGFuZCBjbGVhbnNlZF9saW5lLmZpbmQoJ2ZvcicpID09IC0x
CisgICAgICAgIGFuZCAoZ2V0X3ByZXZpb3VzX25vbl9ibGFua19saW5lKGNsZWFuX2xpbmVzLCBs
aW5lX251bWJlcilbMF0uZmluZCgnZm9yJykgPT0gLTEKKyAgICAgICAgICAgICBvciBnZXRfcHJl
dmlvdXNfbm9uX2JsYW5rX2xpbmUoY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyKVswXS5maW5kKCc7
JykgIT0gLTEpCisgICAgICAgICMgSXQncyBvayB0byBoYXZlIG1hbnkgY29tbWFuZHMgaW4gYSBz
d2l0Y2ggY2FzZSB0aGF0IGZpdHMgaW4gMSBsaW5lCisgICAgICAgIGFuZCBub3QgKChjbGVhbnNl
ZF9saW5lLmZpbmQoJ2Nhc2UgJykgIT0gLTEKKyAgICAgICAgICAgICAgICAgIG9yIGNsZWFuc2Vk
X2xpbmUuZmluZCgnZGVmYXVsdDonKSAhPSAtMSkKKyAgICAgICAgICAgICAgICAgYW5kIGNsZWFu
c2VkX2xpbmUuZmluZCgnYnJlYWs7JykgIT0gLTEpKToKKyAgICAgICAgZXJyb3IoZmlsZW5hbWUs
IGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9uZXdsaW5lJywgNCwKKyAgICAgICAgICAgICAgJ01v
cmUgdGhhbiBvbmUgY29tbWFuZCBvbiB0aGUgc2FtZSBsaW5lJykKKworICAgIGlmIGNsZWFuc2Vk
X2xpbmUuc3RyaXAoKS5lbmRzd2l0aCgnfHwnKSBvciBjbGVhbnNlZF9saW5lLnN0cmlwKCkuZW5k
c3dpdGgoJyYmJyk6CisgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3doaXRl
c3BhY2Uvb3BlcmF0b3JzJywgNCwKKyAgICAgICAgICAgICAgJ0Jvb2xlYW4gZXhwcmVzc2lvbnMg
dGhhdCBzcGFuIG11bHRpcGxlIGxpbmVzIHNob3VsZCBoYXZlIHRoZWlyICcKKyAgICAgICAgICAg
ICAgJ29wZXJhdG9ycyBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBsaW5lIGluc3RlYWQgb2YgdGhl
IHJpZ2h0IHNpZGUuJykKKworICAgICMgU29tZSBtb3JlIHN0eWxlIGNoZWNrcworICAgIGNoZWNr
X25hbWVzcGFjZV9pbmRlbnRhdGlvbihmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVy
LCBmaWxlX2V4dGVuc2lvbiwgZmlsZV9zdGF0ZSwgZXJyb3IpCisgICAgY2hlY2tfdXNpbmdfc3Rk
KGZpbGVuYW1lLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGVycm9yKQorICAgIGNoZWNrX21h
eF9taW5fbWFjcm9zKGZpbGVuYW1lLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGVycm9yKQor
ICAgIGNoZWNrX3N3aXRjaF9pbmRlbnRhdGlvbihmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVf
bnVtYmVyLCBlcnJvcikKKyAgICBjaGVja19icmFjZXMoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBs
aW5lX251bWJlciwgZXJyb3IpCisgICAgY2hlY2tfZXhpdF9zdGF0ZW1lbnRfc2ltcGxpZmljYXRp
b25zKGZpbGVuYW1lLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGVycm9yKQorICAgIGNoZWNr
X3NwYWNpbmcoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZXJyb3IpCisgICAg
Y2hlY2tfY2hlY2soZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZXJyb3IpCisg
ICAgY2hlY2tfZm9yX2NvbXBhcmlzb25zX3RvX3plcm8oZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBs
aW5lX251bWJlciwgZXJyb3IpCisgICAgY2hlY2tfZm9yX251bGwoZmlsZW5hbWUsIGNsZWFuX2xp
bmVzLCBsaW5lX251bWJlciwgZXJyb3IpCisKKworX1JFX1BBVFRFUk5fSU5DTFVERV9ORVdfU1RZ
TEUgPSByZS5jb21waWxlKHInI2luY2x1ZGUgKyJbXi9dK1wuaCInKQorX1JFX1BBVFRFUk5fSU5D
TFVERSA9IHJlLmNvbXBpbGUocideXHMqI1xzKmluY2x1ZGVccyooWzwiXSkoW14+Il0qKVs+Il0u
KiQnKQorIyBNYXRjaGVzIHRoZSBmaXJzdCBjb21wb25lbnQgb2YgYSBmaWxlbmFtZSBkZWxpbWl0
ZWQgYnkgLXMgYW5kIF9zLiBUaGF0IGlzOgorIyAgX1JFX0ZJUlNUX0NPTVBPTkVOVC5tYXRjaCgn
Zm9vJykuZ3JvdXAoMCkgPT0gJ2ZvbycKKyMgIF9SRV9GSVJTVF9DT01QT05FTlQubWF0Y2goJ2Zv
by5jcHAnKS5ncm91cCgwKSA9PSAnZm9vJworIyAgX1JFX0ZJUlNUX0NPTVBPTkVOVC5tYXRjaCgn
Zm9vLWJhcl9iYXouY3BwJykuZ3JvdXAoMCkgPT0gJ2ZvbycKKyMgIF9SRV9GSVJTVF9DT01QT05F
TlQubWF0Y2goJ2Zvb19iYXItYmF6LmNwcCcpLmdyb3VwKDApID09ICdmb28nCitfUkVfRklSU1Rf
Q09NUE9ORU5UID0gcmUuY29tcGlsZShyJ15bXi1fLl0rJykKKworCitkZWYgX2Ryb3BfY29tbW9u
X3N1ZmZpeGVzKGZpbGVuYW1lKToKKyAgICAiIiJEcm9wcyBjb21tb24gc3VmZml4ZXMgbGlrZSBf
dGVzdC5jcHAgb3IgLWlubC5oIGZyb20gZmlsZW5hbWUuCisKKyAgICBGb3IgZXhhbXBsZToKKyAg
ICAgID4+PiBfZHJvcF9jb21tb25fc3VmZml4ZXMoJ2Zvby9mb28taW5sLmgnKQorICAgICAgJ2Zv
by9mb28nCisgICAgICA+Pj4gX2Ryb3BfY29tbW9uX3N1ZmZpeGVzKCdmb28vYmFyL2Zvby5jcHAn
KQorICAgICAgJ2Zvby9iYXIvZm9vJworICAgICAgPj4+IF9kcm9wX2NvbW1vbl9zdWZmaXhlcygn
Zm9vL2Zvb19pbnRlcm5hbC5oJykKKyAgICAgICdmb28vZm9vJworICAgICAgPj4+IF9kcm9wX2Nv
bW1vbl9zdWZmaXhlcygnZm9vL2Zvb191bnVzdWFsaW50ZXJuYWwuaCcpCisgICAgICAnZm9vL2Zv
b191bnVzdWFsaW50ZXJuYWwnCisKKyAgICBBcmdzOgorICAgICAgZmlsZW5hbWU6IFRoZSBpbnB1
dCBmaWxlbmFtZS4KKworICAgIFJldHVybnM6CisgICAgICBUaGUgZmlsZW5hbWUgd2l0aCB0aGUg
Y29tbW9uIHN1ZmZpeCByZW1vdmVkLgorICAgICIiIgorICAgIGZvciBzdWZmaXggaW4gKCd0ZXN0
LmNwcCcsICdyZWd0ZXN0LmNwcCcsICd1bml0dGVzdC5jcHAnLAorICAgICAgICAgICAgICAgICAg
ICdpbmwuaCcsICdpbXBsLmgnLCAnaW50ZXJuYWwuaCcpOgorICAgICAgICBpZiAoZmlsZW5hbWUu
ZW5kc3dpdGgoc3VmZml4KSBhbmQgbGVuKGZpbGVuYW1lKSA+IGxlbihzdWZmaXgpCisgICAgICAg
ICAgICBhbmQgZmlsZW5hbWVbLWxlbihzdWZmaXgpIC0gMV0gaW4gKCctJywgJ18nKSk6CisgICAg
ICAgICAgICByZXR1cm4gZmlsZW5hbWVbOi1sZW4oc3VmZml4KSAtIDFdCisgICAgcmV0dXJuIG9z
LnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzBdCisKKworZGVmIF9pc190ZXN0X2ZpbGVuYW1lKGZp
bGVuYW1lKToKKyAgICAiIiJEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiBmaWxlbmFtZSBoYXMgYSBz
dWZmaXggdGhhdCBpZGVudGlmaWVzIGl0IGFzIGEgdGVzdC4KKworICAgIEFyZ3M6CisgICAgICBm
aWxlbmFtZTogVGhlIGlucHV0IGZpbGVuYW1lLgorCisgICAgUmV0dXJuczoKKyAgICAgIFRydWUg
aWYgJ2ZpbGVuYW1lJyBsb29rcyBsaWtlIGEgdGVzdCwgRmFsc2Ugb3RoZXJ3aXNlLgorICAgICIi
IgorICAgIGlmIChmaWxlbmFtZS5lbmRzd2l0aCgnX3Rlc3QuY3BwJykKKyAgICAgICAgb3IgZmls
ZW5hbWUuZW5kc3dpdGgoJ191bml0dGVzdC5jcHAnKQorICAgICAgICBvciBmaWxlbmFtZS5lbmRz
d2l0aCgnX3JlZ3Rlc3QuY3BwJykpOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBG
YWxzZQorCisKK2RlZiBfY2xhc3NpZnlfaW5jbHVkZShmaWxlbmFtZSwgaW5jbHVkZSwgaXNfc3lz
dGVtLCBpbmNsdWRlX3N0YXRlKToKKyAgICAiIiJGaWd1cmVzIG91dCB3aGF0IGtpbmQgb2YgaGVh
ZGVyICdpbmNsdWRlJyBpcy4KKworICAgIEFyZ3M6CisgICAgICBmaWxlbmFtZTogVGhlIGN1cnJl
bnQgZmlsZSBjcHBfc3R5bGUgaXMgcnVubmluZyBvdmVyLgorICAgICAgaW5jbHVkZTogVGhlIHBh
dGggdG8gYSAjaW5jbHVkZWQgZmlsZS4KKyAgICAgIGlzX3N5c3RlbTogVHJ1ZSBpZiB0aGUgI2lu
Y2x1ZGUgdXNlZCA8PiByYXRoZXIgdGhhbiAiIi4KKyAgICAgIGluY2x1ZGVfc3RhdGU6IEFuIF9J
bmNsdWRlU3RhdGUgaW5zdGFuY2UgaW4gd2hpY2ggdGhlIGhlYWRlcnMgYXJlIGluc2VydGVkLgor
CisgICAgUmV0dXJuczoKKyAgICAgIE9uZSBvZiB0aGUgX1hYWF9IRUFERVIgY29uc3RhbnRzLgor
CisgICAgRm9yIGV4YW1wbGU6CisgICAgICA+Pj4gX2NsYXNzaWZ5X2luY2x1ZGUoJ2Zvby5jcHAn
LCAnY29uZmlnLmgnLCBGYWxzZSkKKyAgICAgIF9DT05GSUdfSEVBREVSCisgICAgICA+Pj4gX2Ns
YXNzaWZ5X2luY2x1ZGUoJ2Zvby5jcHAnLCAnZm9vLmgnLCBGYWxzZSkKKyAgICAgIF9QUklNQVJZ
X0hFQURFUgorICAgICAgPj4+IF9jbGFzc2lmeV9pbmNsdWRlKCdmb28uY3BwJywgJ2Jhci5oJywg
RmFsc2UpCisgICAgICBfT1RIRVJfSEVBREVSCisgICAgIiIiCisKKyAgICAjIElmIGl0IGlzIGEg
c3lzdGVtIGhlYWRlciB3ZSBrbm93IGl0IGlzIGNsYXNzaWZpZWQgYXMgX09USEVSX0hFQURFUi4K
KyAgICBpZiBpc19zeXN0ZW06CisgICAgICAgIHJldHVybiBfT1RIRVJfSEVBREVSCisKKyAgICAj
IElmIHRoZSBpbmNsdWRlIGlzIG5hbWVkIGNvbmZpZy5oIHRoZW4gdGhpcyBpcyBXZWJDb3JlL2Nv
bmZpZy5oLgorICAgIGlmIGluY2x1ZGUgPT0gImNvbmZpZy5oIjoKKyAgICAgICAgcmV0dXJuIF9D
T05GSUdfSEVBREVSCisKKyAgICAjIFRoZXJlIGNhbm5vdCBiZSBwcmltYXJ5IGluY2x1ZGVzIGlu
IGhlYWRlciBmaWxlcyB0aGVtc2VsdmVzLiBPbmx5IGFuCisgICAgIyBpbmNsdWRlIGV4YWN0bHkg
bWF0Y2hlcyB0aGUgaGVhZGVyIGZpbGVuYW1lIHdpbGwgYmUgaXMgZmxhZ2dlZCBhcworICAgICMg
cHJpbWFyeSwgc28gdGhhdCBpdCB0cmlnZ2VycyB0aGUgImRvbid0IGluY2x1ZGUgeW91cnNlbGYi
IGNoZWNrLgorICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCcuaCcpIGFuZCBmaWxlbmFtZSAhPSBp
bmNsdWRlOgorICAgICAgICByZXR1cm4gX09USEVSX0hFQURFUjsKKworICAgICMgUXQncyBtb2Mg
ZmlsZXMgZG8gbm90IGZvbGxvdyB0aGUgbmFtaW5nIGFuZCBvcmRlcmluZyBydWxlcywgc28gdGhl
eSBzaG91bGQgYmUgc2tpcHBlZAorICAgIGlmIGluY2x1ZGUuc3RhcnRzd2l0aCgnbW9jXycpIGFu
ZCBpbmNsdWRlLmVuZHN3aXRoKCcuY3BwJyk6CisgICAgICAgIHJldHVybiBfTU9DX0hFQURFUgor
CisgICAgaWYgaW5jbHVkZS5lbmRzd2l0aCgnLm1vYycpOgorICAgICAgICByZXR1cm4gX01PQ19I
RUFERVIKKworICAgICMgSWYgdGhlIHRhcmdldCBmaWxlIGJhc2VuYW1lIHN0YXJ0cyB3aXRoIHRo
ZSBpbmNsdWRlIHdlJ3JlIGNoZWNraW5nCisgICAgIyB0aGVuIHdlIGNvbnNpZGVyIGl0IHRoZSBw
cmltYXJ5IGhlYWRlci4KKyAgICB0YXJnZXRfYmFzZSA9IEZpbGVJbmZvKGZpbGVuYW1lKS5iYXNl
X25hbWUoKQorICAgIGluY2x1ZGVfYmFzZSA9IEZpbGVJbmZvKGluY2x1ZGUpLmJhc2VfbmFtZSgp
CisKKyAgICAjIElmIHdlIGhhdmVuJ3QgZW5jb3VudGVyZWQgYSBwcmltYXJ5IGhlYWRlciwgdGhl
biBiZSBsZW5pZW50IGluIGNoZWNraW5nLgorICAgIGlmIG5vdCBpbmNsdWRlX3N0YXRlLnZpc2l0
ZWRfcHJpbWFyeV9zZWN0aW9uKCkgYW5kIHRhcmdldF9iYXNlLmZpbmQoaW5jbHVkZV9iYXNlKSAh
PSAtMToKKyAgICAgICAgcmV0dXJuIF9QUklNQVJZX0hFQURFUgorICAgICMgSWYgd2UgYWxyZWFk
eSBlbmNvdW50ZXJlZCBhIHByaW1hcnkgaGVhZGVyLCBwZXJmb3JtIGEgc3RyaWN0IGNvbXBhcmlz
b24uCisgICAgIyBJbiBjYXNlIHRoZSB0d28gZmlsZW5hbWUgYmFzZXMgYXJlIHRoZSBzYW1lIHRo
ZW4gdGhlIGFib3ZlIGxlbmllbnQgY2hlY2sKKyAgICAjIHByb2JhYmx5IHdhcyBhIGZhbHNlIHBv
c2l0aXZlLgorICAgIGVsaWYgaW5jbHVkZV9zdGF0ZS52aXNpdGVkX3ByaW1hcnlfc2VjdGlvbigp
IGFuZCB0YXJnZXRfYmFzZSA9PSBpbmNsdWRlX2Jhc2U6CisgICAgICAgIHJldHVybiBfUFJJTUFS
WV9IRUFERVIKKworICAgIHJldHVybiBfT1RIRVJfSEVBREVSCisKKworCitkZWYgY2hlY2tfaW5j
bHVkZV9saW5lKGZpbGVuYW1lLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGluY2x1ZGVfc3Rh
dGUsIGVycm9yKToKKyAgICAiIiJDaGVjayBydWxlcyB0aGF0IGFyZSBhcHBsaWNhYmxlIHRvICNp
bmNsdWRlIGxpbmVzLgorCisgICAgU3RyaW5ncyBvbiAjaW5jbHVkZSBsaW5lcyBhcmUgTk9UIHJl
bW92ZWQgZnJvbSBlbGlkZWQgbGluZSwgdG8gbWFrZQorICAgIGNlcnRhaW4gdGFza3MgZWFzaWVy
LiBIb3dldmVyLCB0byBwcmV2ZW50IGZhbHNlIHBvc2l0aXZlcywgY2hlY2tzCisgICAgYXBwbGlj
YWJsZSB0byAjaW5jbHVkZSBsaW5lcyBpbiBDaGVja0xhbmd1YWdlIG11c3QgYmUgcHV0IGhlcmUu
CisKKyAgICBBcmdzOgorICAgICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZp
bGUuCisgICAgICBjbGVhbl9saW5lczogQSBDbGVhbnNlZExpbmVzIGluc3RhbmNlIGNvbnRhaW5p
bmcgdGhlIGZpbGUuCisgICAgICBsaW5lX251bWJlcjogVGhlIG51bWJlciBvZiB0aGUgbGluZSB0
byBjaGVjay4KKyAgICAgIGluY2x1ZGVfc3RhdGU6IEFuIF9JbmNsdWRlU3RhdGUgaW5zdGFuY2Ug
aW4gd2hpY2ggdGhlIGhlYWRlcnMgYXJlIGluc2VydGVkLgorICAgICAgZXJyb3I6IFRoZSBmdW5j
dGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4KKyAgICAiIiIKKworICAgIGxpbmUg
PSBjbGVhbl9saW5lcy5saW5lc1tsaW5lX251bWJlcl0KKworICAgIG1hdGNoZWQgPSBfUkVfUEFU
VEVSTl9JTkNMVURFLnNlYXJjaChsaW5lKQorICAgIGlmIG5vdCBtYXRjaGVkOgorICAgICAgICBy
ZXR1cm4KKworICAgIGluY2x1ZGUgPSBtYXRjaGVkLmdyb3VwKDIpCisgICAgaXNfc3lzdGVtID0g
KG1hdGNoZWQuZ3JvdXAoMSkgPT0gJzwnKQorCisgICAgIyBMb29rIGZvciBhbnkgb2YgdGhlIHN0
cmVhbSBjbGFzc2VzIHRoYXQgYXJlIHBhcnQgb2Ygc3RhbmRhcmQgQysrLgorICAgIGlmIG1hdGNo
KHInKGZ8aW5kfGlvfGl8b3xwYXJzZXxwZnxzdGRpb3xzdHJ8KT9zdHJlYW0kJywgaW5jbHVkZSk6
CisgICAgICAgICMgTWFueSB1bml0IHRlc3RzIHVzZSBjb3V0LCBzbyB3ZSBleGVtcHQgdGhlbS4K
KyAgICAgICAgaWYgbm90IF9pc190ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKToKKyAgICAgICAgICAg
IGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3JlYWRhYmlsaXR5L3N0cmVhbXMnLCAzLAor
ICAgICAgICAgICAgICAgICAgJ1N0cmVhbXMgYXJlIGhpZ2hseSBkaXNjb3VyYWdlZC4nKQorCisg
ICAgIyBMb29rIGZvciBzcGVjaWZpYyBpbmNsdWRlcyB0byBmaXguCisgICAgaWYgaW5jbHVkZS5z
dGFydHN3aXRoKCd3dGYvJykgYW5kIG5vdCBpc19zeXN0ZW06CisgICAgICAgIGVycm9yKGZpbGVu
YW1lLCBsaW5lX251bWJlciwgJ2J1aWxkL2luY2x1ZGUnLCA0LAorICAgICAgICAgICAgICAnd3Rm
IGluY2x1ZGVzIHNob3VsZCBiZSA8d3RmL2ZpbGUuaD4gaW5zdGVhZCBvZiAid3RmL2ZpbGUuaCIu
JykKKworICAgIGR1cGxpY2F0ZV9oZWFkZXIgPSBpbmNsdWRlIGluIGluY2x1ZGVfc3RhdGUKKyAg
ICBpZiBkdXBsaWNhdGVfaGVhZGVyOgorICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1i
ZXIsICdidWlsZC9pbmNsdWRlJywgNCwKKyAgICAgICAgICAgICAgJyIlcyIgYWxyZWFkeSBpbmNs
dWRlZCBhdCAlczolcycgJQorICAgICAgICAgICAgICAoaW5jbHVkZSwgZmlsZW5hbWUsIGluY2x1
ZGVfc3RhdGVbaW5jbHVkZV0pKQorICAgIGVsc2U6CisgICAgICAgIGluY2x1ZGVfc3RhdGVbaW5j
bHVkZV0gPSBsaW5lX251bWJlcgorCisgICAgaGVhZGVyX3R5cGUgPSBfY2xhc3NpZnlfaW5jbHVk
ZShmaWxlbmFtZSwgaW5jbHVkZSwgaXNfc3lzdGVtLCBpbmNsdWRlX3N0YXRlKQorICAgIGluY2x1
ZGVfc3RhdGUuaGVhZGVyX3R5cGVzW2xpbmVfbnVtYmVyXSA9IGhlYWRlcl90eXBlCisKKyAgICAj
IE9ubHkgcHJvY2VlZCBpZiB0aGlzIGlzbid0IGEgZHVwbGljYXRlIGhlYWRlci4KKyAgICBpZiBk
dXBsaWNhdGVfaGVhZGVyOgorICAgICAgICByZXR1cm4KKworICAgICMgV2Ugd2FudCB0byBlbnN1
cmUgdGhhdCBoZWFkZXJzIGFwcGVhciBpbiB0aGUgcmlnaHQgb3JkZXI6CisgICAgIyAxKSBmb3Ig
aW1wbGVtZW50YXRpb24gZmlsZXM6IGNvbmZpZy5oLCBwcmltYXJ5IGhlYWRlciwgYmxhbmsgbGlu
ZSwgYWxwaGFiZXRpY2FsbHkgc29ydGVkCisgICAgIyAyKSBmb3IgaGVhZGVyIGZpbGVzOiBhbHBo
YWJldGljYWxseSBzb3J0ZWQKKyAgICAjIFRoZSBpbmNsdWRlX3N0YXRlIG9iamVjdCBrZWVwcyB0
cmFjayBvZiB0aGUgbGFzdCB0eXBlIHNlZW4KKyAgICAjIGFuZCBjb21wbGFpbnMgaWYgdGhlIGhl
YWRlciB0eXBlcyBhcmUgb3V0IG9mIG9yZGVyIG9yIG1pc3NpbmcuCisgICAgZXJyb3JfbWVzc2Fn
ZSA9IGluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKGhlYWRlcl90eXBlLCBm
aWxlbmFtZS5lbmRzd2l0aCgnLmgnKSkKKworICAgICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGhh
dmUgYSBibGFuayBsaW5lIGFmdGVyIHByaW1hcnkgaGVhZGVyLgorICAgIGlmIG5vdCBlcnJvcl9t
ZXNzYWdlIGFuZCBoZWFkZXJfdHlwZSA9PSBfUFJJTUFSWV9IRUFERVI6CisgICAgICAgICBuZXh0
X2xpbmUgPSBjbGVhbl9saW5lcy5yYXdfbGluZXNbbGluZV9udW1iZXIgKyAxXQorICAgICAgICAg
aWYgbm90IGlzX2JsYW5rX2xpbmUobmV4dF9saW5lKToKKyAgICAgICAgICAgIGVycm9yKGZpbGVu
YW1lLCBsaW5lX251bWJlciwgJ2J1aWxkL2luY2x1ZGVfb3JkZXInLCA0LAorICAgICAgICAgICAg
ICAgICAgJ1lvdSBzaG91bGQgYWRkIGEgYmxhbmsgbGluZSBhZnRlciBpbXBsZW1lbnRhdGlvbiBm
aWxlXCdzIG93biBoZWFkZXIuJykKKworICAgICMgQ2hlY2sgdG8gbWFrZSBzdXJlIGFsbCBoZWFk
ZXJzIGJlc2lkZXMgY29uZmlnLmggYW5kIHRoZSBwcmltYXJ5IGhlYWRlciBhcmUKKyAgICAjIGFs
cGhhYmV0aWNhbGx5IHNvcnRlZC4gU2tpcCBRdCdzIG1vYyBmaWxlcy4KKyAgICBpZiBub3QgZXJy
b3JfbWVzc2FnZSBhbmQgaGVhZGVyX3R5cGUgPT0gX09USEVSX0hFQURFUjoKKyAgICAgICAgIHBy
ZXZpb3VzX2xpbmVfbnVtYmVyID0gbGluZV9udW1iZXIgLSAxOworICAgICAgICAgcHJldmlvdXNf
bGluZSA9IGNsZWFuX2xpbmVzLmxpbmVzW3ByZXZpb3VzX2xpbmVfbnVtYmVyXQorICAgICAgICAg
cHJldmlvdXNfbWF0Y2ggPSBfUkVfUEFUVEVSTl9JTkNMVURFLnNlYXJjaChwcmV2aW91c19saW5l
KQorICAgICAgICAgd2hpbGUgKG5vdCBwcmV2aW91c19tYXRjaCBhbmQgcHJldmlvdXNfbGluZV9u
dW1iZXIgPiAwCisgICAgICAgICAgICAgICAgYW5kIG5vdCBzZWFyY2gocidcQSgjaWZ8I2lmZGVm
fCNpZm5kZWZ8I2Vsc2V8I2VsaWZ8I2VuZGlmKScsIHByZXZpb3VzX2xpbmUpKToKKyAgICAgICAg
ICAgIHByZXZpb3VzX2xpbmVfbnVtYmVyIC09IDE7CisgICAgICAgICAgICBwcmV2aW91c19saW5l
ID0gY2xlYW5fbGluZXMubGluZXNbcHJldmlvdXNfbGluZV9udW1iZXJdCisgICAgICAgICAgICBw
cmV2aW91c19tYXRjaCA9IF9SRV9QQVRURVJOX0lOQ0xVREUuc2VhcmNoKHByZXZpb3VzX2xpbmUp
CisgICAgICAgICBpZiBwcmV2aW91c19tYXRjaDoKKyAgICAgICAgICAgIHByZXZpb3VzX2hlYWRl
cl90eXBlID0gaW5jbHVkZV9zdGF0ZS5oZWFkZXJfdHlwZXNbcHJldmlvdXNfbGluZV9udW1iZXJd
CisgICAgICAgICAgICBpZiBwcmV2aW91c19oZWFkZXJfdHlwZSA9PSBfT1RIRVJfSEVBREVSIGFu
ZCBwcmV2aW91c19saW5lLnN0cmlwKCkgPiBsaW5lLnN0cmlwKCk6CisgICAgICAgICAgICAgICAg
ZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnYnVpbGQvaW5jbHVkZV9vcmRlcicsIDQsCisg
ICAgICAgICAgICAgICAgICAgICAgJ0FscGhhYmV0aWNhbCBzb3J0aW5nIHByb2JsZW0uJykKKwor
ICAgIGlmIGVycm9yX21lc3NhZ2U6CisgICAgICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCcuaCcp
OgorICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnYnVpbGQvaW5jbHVk
ZV9vcmRlcicsIDQsCisgICAgICAgICAgICAgICAgICAnJXMgU2hvdWxkIGJlOiBhbHBoYWJldGlj
YWxseSBzb3J0ZWQuJyAlCisgICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnYnVpbGQv
aW5jbHVkZV9vcmRlcicsIDQsCisgICAgICAgICAgICAgICAgICAnJXMgU2hvdWxkIGJlOiBjb25m
aWcuaCwgcHJpbWFyeSBoZWFkZXIsIGJsYW5rIGxpbmUsIGFuZCB0aGVuIGFscGhhYmV0aWNhbGx5
IHNvcnRlZC4nICUKKyAgICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UpCisKKworZGVmIGNo
ZWNrX2xhbmd1YWdlKGZpbGVuYW1lLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGZpbGVfZXh0
ZW5zaW9uLCBpbmNsdWRlX3N0YXRlLAorICAgICAgICAgICAgICAgICAgIGVycm9yKToKKyAgICAi
IiJDaGVja3MgcnVsZXMgZnJvbSB0aGUgJ0MrKyBsYW5ndWFnZSBydWxlcycgc2VjdGlvbiBvZiBj
cHBndWlkZS5odG1sLgorCisgICAgU29tZSBvZiB0aGVzZSBydWxlcyBhcmUgaGFyZCB0byB0ZXN0
IChmdW5jdGlvbiBvdmVybG9hZGluZywgdXNpbmcKKyAgICB1aW50MzIgaW5hcHByb3ByaWF0ZWx5
KSwgYnV0IHdlIGRvIHRoZSBiZXN0IHdlIGNhbi4KKworICAgIEFyZ3M6CisgICAgICBmaWxlbmFt
ZTogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlsZS4KKyAgICAgIGNsZWFuX2xpbmVzOiBBIENs
ZWFuc2VkTGluZXMgaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZmlsZS4KKyAgICAgIGxpbmVfbnVt
YmVyOiBUaGUgbnVtYmVyIG9mIHRoZSBsaW5lIHRvIGNoZWNrLgorICAgICAgZmlsZV9leHRlbnNp
b246IFRoZSBleHRlbnNpb24gKHdpdGhvdXQgdGhlIGRvdCkgb2YgdGhlIGZpbGVuYW1lLgorICAg
ICAgaW5jbHVkZV9zdGF0ZTogQW4gX0luY2x1ZGVTdGF0ZSBpbnN0YW5jZSBpbiB3aGljaCB0aGUg
aGVhZGVycyBhcmUgaW5zZXJ0ZWQuCisgICAgICBlcnJvcjogVGhlIGZ1bmN0aW9uIHRvIGNhbGwg
d2l0aCBhbnkgZXJyb3JzIGZvdW5kLgorICAgICIiIgorICAgICMgSWYgdGhlIGxpbmUgaXMgZW1w
dHkgb3IgY29uc2lzdHMgb2YgZW50aXJlbHkgYSBjb21tZW50LCBubyBuZWVkIHRvCisgICAgIyBj
aGVjayBpdC4KKyAgICBsaW5lID0gY2xlYW5fbGluZXMuZWxpZGVkW2xpbmVfbnVtYmVyXQorICAg
IGlmIG5vdCBsaW5lOgorICAgICAgICByZXR1cm4KKworICAgIG1hdGNoZWQgPSBfUkVfUEFUVEVS
Tl9JTkNMVURFLnNlYXJjaChsaW5lKQorICAgIGlmIG1hdGNoZWQ6CisgICAgICAgIGNoZWNrX2lu
Y2x1ZGVfbGluZShmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBpbmNsdWRlX3N0
YXRlLCBlcnJvcikKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIEZJWE1FOiBmaWd1cmUgb3V0IGlm
IHRoZXkncmUgdXNpbmcgZGVmYXVsdCBhcmd1bWVudHMgaW4gZm4gcHJvdG8uCisKKyAgICAjIENo
ZWNrIHRvIHNlZSBpZiB0aGV5J3JlIHVzaW5nIGFuIGNvbnZlcnNpb24gZnVuY3Rpb24gY2FzdC4K
KyAgICAjIEkganVzdCB0cnkgdG8gY2FwdHVyZSB0aGUgbW9zdCBjb21tb24gYmFzaWMgdHlwZXMs
IHRob3VnaCB0aGVyZSBhcmUgbW9yZS4KKyAgICAjIFBhcmFtZXRlcmxlc3MgY29udmVyc2lvbiBm
dW5jdGlvbnMsIHN1Y2ggYXMgYm9vbCgpLCBhcmUgYWxsb3dlZCBhcyB0aGV5IGFyZQorICAgICMg
cHJvYmFibHkgYSBtZW1iZXIgb3BlcmF0b3IgZGVjbGFyYXRpb24gb3IgZGVmYXVsdCBjb25zdHJ1
Y3Rvci4KKyAgICBtYXRjaGVkID0gc2VhcmNoKAorICAgICAgICByJ1xiKGludHxmbG9hdHxkb3Vi
bGV8Ym9vbHxjaGFyfGludDMyfHVpbnQzMnxpbnQ2NHx1aW50NjQpXChbXildJywgbGluZSkKKyAg
ICBpZiBtYXRjaGVkOgorICAgICAgICAjIGdNb2NrIG1ldGhvZHMgYXJlIGRlZmluZWQgdXNpbmcg
c29tZSB2YXJpYW50IG9mIE1PQ0tfTUVUSE9EeChuYW1lLCB0eXBlKQorICAgICAgICAjIHdoZXJl
IHR5cGUgbWF5IGJlIGZsb2F0KCksIGludChzdHJpbmcpLCBldGMuICBXaXRob3V0IGNvbnRleHQg
dGhleSBhcmUKKyAgICAgICAgIyB2aXJ0dWFsbHkgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBpbnQo
eCkgY2FzdHMuCisgICAgICAgIGlmIG5vdCBtYXRjaChyJ15ccypNT0NLXyhDT05TVF8pP01FVEhP
RFxkKyhfVCk/XCgnLCBsaW5lKToKKyAgICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251
bWJlciwgJ3JlYWRhYmlsaXR5L2Nhc3RpbmcnLCA0LAorICAgICAgICAgICAgICAgICAgJ1VzaW5n
IGRlcHJlY2F0ZWQgY2FzdGluZyBzdHlsZS4gICcKKyAgICAgICAgICAgICAgICAgICdVc2Ugc3Rh
dGljX2Nhc3Q8JXM+KC4uLikgaW5zdGVhZCcgJQorICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5n
cm91cCgxKSkKKworICAgIGNoZWNrX2Nfc3R5bGVfY2FzdChmaWxlbmFtZSwgbGluZV9udW1iZXIs
IGxpbmUsIGNsZWFuX2xpbmVzLnJhd19saW5lc1tsaW5lX251bWJlcl0sCisgICAgICAgICAgICAg
ICAgICAgICAgICdzdGF0aWNfY2FzdCcsCisgICAgICAgICAgICAgICAgICAgICAgIHInXCgoaW50
fGZsb2F0fGRvdWJsZXxib29sfGNoYXJ8dT9pbnQoMTZ8MzJ8NjQpKVwpJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgZXJyb3IpCisgICAgIyBUaGlzIGRvZXNuJ3QgY2F0Y2ggYWxsIGNhc2VzLiAg
Q29uc2lkZXIgKGNvbnN0IGNoYXIgKiBjb25zdCkiaGVsbG8iLgorICAgIGNoZWNrX2Nfc3R5bGVf
Y2FzdChmaWxlbmFtZSwgbGluZV9udW1iZXIsIGxpbmUsIGNsZWFuX2xpbmVzLnJhd19saW5lc1ts
aW5lX251bWJlcl0sCisgICAgICAgICAgICAgICAgICAgICAgICdyZWludGVycHJldF9jYXN0Jywg
cidcKChcdytccz9cKitccz8pXCknLCBlcnJvcikKKworICAgICMgSW4gYWRkaXRpb24sIHdlIGxv
b2sgZm9yIHBlb3BsZSB0YWtpbmcgdGhlIGFkZHJlc3Mgb2YgYSBjYXN0LiAgVGhpcworICAgICMg
aXMgZGFuZ2Vyb3VzIC0tIGNhc3RzIGNhbiBhc3NpZ24gdG8gdGVtcG9yYXJpZXMsIHNvIHRoZSBw
b2ludGVyIGRvZXNuJ3QKKyAgICAjIHBvaW50IHdoZXJlIHlvdSB0aGluay4KKyAgICBpZiBzZWFy
Y2goCisgICAgICAgIHInKCZcKFteKV0rXClbXHcoXSl8KCYoc3RhdGljfGR5bmFtaWN8cmVpbnRl
cnByZXQpX2Nhc3RcYiknLCBsaW5lKToKKyAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVt
YmVyLCAncnVudGltZS9jYXN0aW5nJywgNCwKKyAgICAgICAgICAgICAgKCdBcmUgeW91IHRha2lu
ZyBhbiBhZGRyZXNzIG9mIGEgY2FzdD8gICcKKyAgICAgICAgICAgICAgICdUaGlzIGlzIGRhbmdl
cm91czogY291bGQgYmUgYSB0ZW1wIHZhci4gICcKKyAgICAgICAgICAgICAgICdUYWtlIHRoZSBh
ZGRyZXNzIGJlZm9yZSBkb2luZyB0aGUgY2FzdCwgcmF0aGVyIHRoYW4gYWZ0ZXInKSkKKworICAg
ICMgQ2hlY2sgZm9yIHBlb3BsZSBkZWNsYXJpbmcgc3RhdGljL2dsb2JhbCBTVEwgc3RyaW5ncyBh
dCB0aGUgdG9wIGxldmVsLgorICAgICMgVGhpcyBpcyBkYW5nZXJvdXMgYmVjYXVzZSB0aGUgQysr
IGxhbmd1YWdlIGRvZXMgbm90IGd1YXJhbnRlZSB0aGF0CisgICAgIyBnbG9iYWxzIHdpdGggY29u
c3RydWN0b3JzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGZpcnN0IGFjY2Vzcy4KKyAgICBt
YXRjaGVkID0gbWF0Y2goCisgICAgICAgIHInKCg/OnxzdGF0aWMgKykoPzp8Y29uc3QgKykpc3Ry
aW5nICsoW2EtekEtWjAtOV86XSspXGIoLiopJywKKyAgICAgICAgbGluZSkKKyAgICAjIE1ha2Ug
c3VyZSBpdCdzIG5vdCBhIGZ1bmN0aW9uLgorICAgICMgRnVuY3Rpb24gdGVtcGxhdGUgc3BlY2lh
bGl6YXRpb24gbG9va3MgbGlrZTogInN0cmluZyBmb288VHlwZT4oLi4uIi4KKyAgICAjIENsYXNz
IHRlbXBsYXRlIGRlZmluaXRpb25zIGxvb2sgbGlrZTogInN0cmluZyBGb288VHlwZT46Ok1ldGhv
ZCguLi4iLgorICAgIGlmIG1hdGNoZWQgYW5kIG5vdCBtYXRjaChyJ1xzKig8Lio+KT8oOjpbYS16
QS1aMC05X10rKT9ccypcKChbXiJdfCQpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWF0Y2hlZC5ncm91cCgzKSk6CisgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwg
J3J1bnRpbWUvc3RyaW5nJywgNCwKKyAgICAgICAgICAgICAgJ0ZvciBhIHN0YXRpYy9nbG9iYWwg
c3RyaW5nIGNvbnN0YW50LCB1c2UgYSBDIHN0eWxlIHN0cmluZyBpbnN0ZWFkOiAnCisgICAgICAg
ICAgICAgICciJXNjaGFyICVzW10iLicgJQorICAgICAgICAgICAgICAobWF0Y2hlZC5ncm91cCgx
KSwgbWF0Y2hlZC5ncm91cCgyKSkpCisKKyAgICAjIENoZWNrIHRoYXQgd2UncmUgbm90IHVzaW5n
IFJUVEkgb3V0c2lkZSBvZiB0ZXN0aW5nIGNvZGUuCisgICAgaWYgc2VhcmNoKHInXGJkeW5hbWlj
X2Nhc3Q8JywgbGluZSkgYW5kIG5vdCBfaXNfdGVzdF9maWxlbmFtZShmaWxlbmFtZSk6CisgICAg
ICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3J1bnRpbWUvcnR0aScsIDUsCisgICAg
ICAgICAgICAgICdEbyBub3QgdXNlIGR5bmFtaWNfY2FzdDw+LiAgSWYgeW91IG5lZWQgdG8gY2Fz
dCB3aXRoaW4gYSBjbGFzcyAnCisgICAgICAgICAgICAgICJoaWVyYXJjaHksIHVzZSBzdGF0aWNf
Y2FzdDw+IHRvIHVwY2FzdC4gIEdvb2dsZSBkb2Vzbid0IHN1cHBvcnQgIgorICAgICAgICAgICAg
ICAnUlRUSS4nKQorCisgICAgaWYgc2VhcmNoKHInXGIoW0EtWmEtejAtOV9dKl8pXChcMVwpJywg
bGluZSk6CisgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3J1bnRpbWUvaW5p
dCcsIDQsCisgICAgICAgICAgICAgICdZb3Ugc2VlbSB0byBiZSBpbml0aWFsaXppbmcgYSBtZW1i
ZXIgdmFyaWFibGUgd2l0aCBpdHNlbGYuJykKKworICAgIGlmIGZpbGVfZXh0ZW5zaW9uID09ICdo
JzoKKyAgICAgICAgIyBGSVhNRTogY2hlY2sgdGhhdCAxLWFyZyBjb25zdHJ1Y3RvcnMgYXJlIGV4
cGxpY2l0LgorICAgICAgICAjICAgICAgICBIb3cgdG8gdGVsbCBpdCdzIGEgY29uc3RydWN0b3I/
CisgICAgICAgICMgICAgICAgIChoYW5kbGVkIGluIGNoZWNrX2Zvcl9ub25fc3RhbmRhcmRfY29u
c3RydWN0cyBmb3Igbm93KQorICAgICAgICBwYXNzCisKKyAgICAjIENoZWNrIGlmIHBlb3BsZSBh
cmUgdXNpbmcgdGhlIHZlcmJvdGVuIEMgYmFzaWMgdHlwZXMuICBUaGUgb25seSBleGNlcHRpb24K
KyAgICAjIHdlIHJlZ3VsYXJseSBhbGxvdyBpcyAidW5zaWduZWQgc2hvcnQgcG9ydCIgZm9yIHBv
cnQuCisgICAgaWYgc2VhcmNoKHInXGJzaG9ydCBwb3J0XGInLCBsaW5lKToKKyAgICAgICAgaWYg
bm90IHNlYXJjaChyJ1xidW5zaWduZWQgc2hvcnQgcG9ydFxiJywgbGluZSk6CisgICAgICAgICAg
ICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdydW50aW1lL2ludCcsIDQsCisgICAgICAg
ICAgICAgICAgICAnVXNlICJ1bnNpZ25lZCBzaG9ydCIgZm9yIHBvcnRzLCBub3QgInNob3J0Iicp
CisKKyAgICAjIFdoZW4gc25wcmludGYgaXMgdXNlZCwgdGhlIHNlY29uZCBhcmd1bWVudCBzaG91
bGRuJ3QgYmUgYSBsaXRlcmFsLgorICAgIG1hdGNoZWQgPSBzZWFyY2gocidzbnByaW50ZlxzKlwo
KFteLF0qKSxccyooWzAtOV0qKVxzKiwnLCBsaW5lKQorICAgIGlmIG1hdGNoZWQ6CisgICAgICAg
IGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3J1bnRpbWUvcHJpbnRmJywgMywKKyAgICAg
ICAgICAgICAgJ0lmIHlvdSBjYW4sIHVzZSBzaXplb2YoJXMpIGluc3RlYWQgb2YgJXMgYXMgdGhl
IDJuZCBhcmcgJworICAgICAgICAgICAgICAndG8gc25wcmludGYuJyAlIChtYXRjaGVkLmdyb3Vw
KDEpLCBtYXRjaGVkLmdyb3VwKDIpKSkKKworICAgICMgQ2hlY2sgaWYgc29tZSB2ZXJib3RlbiBD
IGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZC4KKyAgICBpZiBzZWFyY2gocidcYnNwcmludGZcYics
IGxpbmUpOgorICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdydW50aW1lL3By
aW50ZicsIDUsCisgICAgICAgICAgICAgICdOZXZlciB1c2Ugc3ByaW50Zi4gIFVzZSBzbnByaW50
ZiBpbnN0ZWFkLicpCisgICAgbWF0Y2hlZCA9IHNlYXJjaChyJ1xiKHN0cmNweXxzdHJjYXQpXGIn
LCBsaW5lKQorICAgIGlmIG1hdGNoZWQ6CisgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251
bWJlciwgJ3J1bnRpbWUvcHJpbnRmJywgNCwKKyAgICAgICAgICAgICAgJ0FsbW9zdCBhbHdheXMs
IHNucHJpbnRmIGlzIGJldHRlciB0aGFuICVzJyAlIG1hdGNoZWQuZ3JvdXAoMSkpCisKKyAgICBp
ZiBzZWFyY2gocidcYnNzY2FuZlxiJywgbGluZSk6CisgICAgICAgIGVycm9yKGZpbGVuYW1lLCBs
aW5lX251bWJlciwgJ3J1bnRpbWUvcHJpbnRmJywgMSwKKyAgICAgICAgICAgICAgJ3NzY2FuZiBj
YW4gYmUgb2ssIGJ1dCBpcyBzbG93IGFuZCBjYW4gb3ZlcmZsb3cgYnVmZmVycy4nKQorCisgICAg
IyBDaGVjayBmb3Igc3VzcGljaW91cyB1c2FnZSBvZiAiaWYiIGxpa2UKKyAgICAjIH0gaWYgKGEg
PT0gYikgeworICAgIGlmIHNlYXJjaChyJ1x9XHMqaWZccypcKCcsIGxpbmUpOgorICAgICAgICBl
cnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdyZWFkYWJpbGl0eS9icmFjZXMnLCA0LAorICAg
ICAgICAgICAgICAnRGlkIHlvdSBtZWFuICJlbHNlIGlmIj8gSWYgbm90LCBzdGFydCBhIG5ldyBs
aW5lIGZvciAiaWYiLicpCisKKyAgICAjIENoZWNrIGZvciBwb3RlbnRpYWwgZm9ybWF0IHN0cmlu
ZyBidWdzIGxpa2UgcHJpbnRmKGZvbykuCisgICAgIyBXZSBjb25zdHJhaW4gdGhlIHBhdHRlcm4g
bm90IHRvIHBpY2sgdGhpbmdzIGxpa2UgRG9jaWRGb3JQcmludGYoZm9vKS4KKyAgICAjIE5vdCBw
ZXJmZWN0IGJ1dCBpdCBjYW4gY2F0Y2ggcHJpbnRmKGZvby5jX3N0cigpKSBhbmQgcHJpbnRmKGZv
by0+Y19zdHIoKSkKKyAgICBtYXRjaGVkID0gcmUuc2VhcmNoKHInXGIoKD86c3RyaW5nKT9wcmlu
dGYpXHMqXCgoW1x3LlwtPigpXSspXCknLCBsaW5lLCByZS5JKQorICAgIGlmIG1hdGNoZWQ6Cisg
ICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3J1bnRpbWUvcHJpbnRmJywgNCwK
KyAgICAgICAgICAgICAgJ1BvdGVudGlhbCBmb3JtYXQgc3RyaW5nIGJ1Zy4gRG8gJXMoIiUlcyIs
ICVzKSBpbnN0ZWFkLicKKyAgICAgICAgICAgICAgJSAobWF0Y2hlZC5ncm91cCgxKSwgbWF0Y2hl
ZC5ncm91cCgyKSkpCisKKyAgICAjIENoZWNrIGZvciBwb3RlbnRpYWwgbWVtc2V0IGJ1Z3MgbGlr
ZSBtZW1zZXQoYnVmLCBzaXplb2YoYnVmKSwgMCkuCisgICAgbWF0Y2hlZCA9IHNlYXJjaChyJ21l
bXNldFxzKlwoKFteLF0qKSxccyooW14sXSopLFxzKjBccypcKScsIGxpbmUpCisgICAgaWYgbWF0
Y2hlZCBhbmQgbm90IG1hdGNoKHIiXicnfC0/WzAtOV0rfDB4WzAtOUEtRmEtZl0kIiwgbWF0Y2hl
ZC5ncm91cCgyKSk6CisgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3J1bnRp
bWUvbWVtc2V0JywgNCwKKyAgICAgICAgICAgICAgJ0RpZCB5b3UgbWVhbiAibWVtc2V0KCVzLCAw
LCAlcykiPycKKyAgICAgICAgICAgICAgJSAobWF0Y2hlZC5ncm91cCgxKSwgbWF0Y2hlZC5ncm91
cCgyKSkpCisKKyAgICAjIERldGVjdCB2YXJpYWJsZS1sZW5ndGggYXJyYXlzLgorICAgIG1hdGNo
ZWQgPSBtYXRjaChyJ1xzKiguKzo6KT8oXHcrKSBbYS16XVx3KlxbKC4rKV07JywgbGluZSkKKyAg
ICBpZiAobWF0Y2hlZCBhbmQgbWF0Y2hlZC5ncm91cCgyKSAhPSAncmV0dXJuJyBhbmQgbWF0Y2hl
ZC5ncm91cCgyKSAhPSAnZGVsZXRlJyBhbmQKKyAgICAgICAgbWF0Y2hlZC5ncm91cCgzKS5maW5k
KCddJykgPT0gLTEpOgorICAgICAgICAjIFNwbGl0IHRoZSBzaXplIHVzaW5nIHNwYWNlIGFuZCBh
cml0aG1ldGljIG9wZXJhdG9ycyBhcyBkZWxpbWl0ZXJzLgorICAgICAgICAjIElmIGFueSBvZiB0
aGUgcmVzdWx0aW5nIHRva2VucyBhcmUgbm90IGNvbXBpbGUgdGltZSBjb25zdGFudHMgdGhlbgor
ICAgICAgICAjIHJlcG9ydCB0aGUgZXJyb3IuCisgICAgICAgIHRva2VucyA9IHJlLnNwbGl0KHIn
XHN8XCt8XC18XCp8XC98PDx8Pj5dJywgbWF0Y2hlZC5ncm91cCgzKSkKKyAgICAgICAgaXNfY29u
c3QgPSBUcnVlCisgICAgICAgIHNraXBfbmV4dCA9IEZhbHNlCisgICAgICAgIGZvciB0b2sgaW4g
dG9rZW5zOgorICAgICAgICAgICAgaWYgc2tpcF9uZXh0OgorICAgICAgICAgICAgICAgIHNraXBf
bmV4dCA9IEZhbHNlCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYg
c2VhcmNoKHInc2l6ZW9mXCguK1wpJywgdG9rKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQor
ICAgICAgICAgICAgaWYgc2VhcmNoKHInYXJyYXlzaXplXChcdytcKScsIHRvayk6CisgICAgICAg
ICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgdG9rID0gdG9rLmxzdHJpcCgnKCcpCisg
ICAgICAgICAgICB0b2sgPSB0b2sucnN0cmlwKCcpJykKKyAgICAgICAgICAgIGlmIG5vdCB0b2s6
CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIG1hdGNoKHInXGQrJywg
dG9rKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbWF0Y2gocicw
W3hYXVswLTlhLWZBLUZdKycsIHRvayk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAg
ICAgICAgIGlmIG1hdGNoKHIna1tBLVowLTldXHcqJywgdG9rKToKKyAgICAgICAgICAgICAgICBj
b250aW51ZQorICAgICAgICAgICAgaWYgbWF0Y2gocicoLis6Oik/a1tBLVowLTldXHcqJywgdG9r
KToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbWF0Y2gocicoLis6
Oik/W0EtWl1bQS1aMC05X10qJywgdG9rKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAg
ICAgICAgICAgIyBBIGNhdGNoIGFsbCBmb3IgdHJpY2t5IHNpemVvZiBjYXNlcywgaW5jbHVkaW5n
ICdzaXplb2YgZXhwcmVzc2lvbicsCisgICAgICAgICAgICAjICdzaXplb2YoKnR5cGUpJywgJ3Np
emVvZihjb25zdCB0eXBlKScsICdzaXplb2Yoc3RydWN0IFN0cnVjdE5hbWUpJworICAgICAgICAg
ICAgIyByZXF1aXJlcyBza2lwcGluZyB0aGUgbmV4dCB0b2tlbiBiZWNhc3VlIHdlIHNwbGl0IG9u
ICcgJyBhbmQgJyonLgorICAgICAgICAgICAgaWYgdG9rLnN0YXJ0c3dpdGgoJ3NpemVvZicpOgor
ICAgICAgICAgICAgICAgIHNraXBfbmV4dCA9IFRydWUKKyAgICAgICAgICAgICAgICBjb250aW51
ZQorICAgICAgICAgICAgaXNfY29uc3QgPSBGYWxzZQorICAgICAgICAgICAgYnJlYWsKKyAgICAg
ICAgaWYgbm90IGlzX2NvbnN0OgorICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVt
YmVyLCAncnVudGltZS9hcnJheXMnLCAxLAorICAgICAgICAgICAgICAgICAgJ0RvIG5vdCB1c2Ug
dmFyaWFibGUtbGVuZ3RoIGFycmF5cy4gIFVzZSBhbiBhcHByb3ByaWF0ZWx5IG5hbWVkICcKKyAg
ICAgICAgICAgICAgICAgICIoJ2snIGZvbGxvd2VkIGJ5IENhbWVsQ2FzZSkgY29tcGlsZS10aW1l
IGNvbnN0YW50IGZvciB0aGUgc2l6ZS4iKQorCisgICAgIyBDaGVjayBmb3IgdXNlIG9mIHVubmFt
ZWQgbmFtZXNwYWNlcyBpbiBoZWFkZXIgZmlsZXMuICBSZWdpc3RyYXRpb24KKyAgICAjIG1hY3Jv
cyBhcmUgdHlwaWNhbGx5IE9LLCBzbyB3ZSBhbGxvdyB1c2Ugb2YgIm5hbWVzcGFjZSB7IiBvbiBs
aW5lcworICAgICMgdGhhdCBlbmQgd2l0aCBiYWNrc2xhc2hlcy4KKyAgICBpZiAoZmlsZV9leHRl
bnNpb24gPT0gJ2gnCisgICAgICAgIGFuZCBzZWFyY2gocidcYm5hbWVzcGFjZVxzKnsnLCBsaW5l
KQorICAgICAgICBhbmQgbGluZVstMV0gIT0gJ1xcJyk6CisgICAgICAgIGVycm9yKGZpbGVuYW1l
LCBsaW5lX251bWJlciwgJ2J1aWxkL25hbWVzcGFjZXMnLCA0LAorICAgICAgICAgICAgICAnRG8g
bm90IHVzZSB1bm5hbWVkIG5hbWVzcGFjZXMgaW4gaGVhZGVyIGZpbGVzLiAgU2VlICcKKyAgICAg
ICAgICAgICAgJ2h0dHA6Ly9nb29nbGUtc3R5bGVndWlkZS5nb29nbGVjb2RlLmNvbS9zdm4vdHJ1
bmsvY3BwZ3VpZGUueG1sI05hbWVzcGFjZXMnCisgICAgICAgICAgICAgICcgZm9yIG1vcmUgaW5m
b3JtYXRpb24uJykKKworICAgIGNoZWNrX2lkZW50aWZpZXJfbmFtZV9pbl9kZWNsYXJhdGlvbihm
aWxlbmFtZSwgbGluZV9udW1iZXIsIGxpbmUsIGVycm9yKQorCisKK2RlZiBjaGVja19pZGVudGlm
aWVyX25hbWVfaW5fZGVjbGFyYXRpb24oZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCBsaW5lLCBlcnJv
cik6CisgICAgIiIiQ2hlY2tzIGlmIGlkZW50aWZpZXIgbmFtZXMgY29udGFpbiBhbnkgdW5kZXJz
Y29yZXMuCisKKyAgICBBcyBpZGVudGlmaWVycyBpbiBsaWJyYXJpZXMgd2UgYXJlIHVzaW5nIGhh
dmUgYSBidW5jaCBvZgorICAgIHVuZGVyc2NvcmVzLCB3ZSBvbmx5IHdhcm4gYWJvdXQgdGhlIGRl
Y2xhcmF0aW9ucyBvZiBpZGVudGlmaWVycworICAgIGFuZCBkb24ndCBjaGVjayB1c2Ugb2YgaWRl
bnRpZmllcnMuCisKKyAgICBBcmdzOgorICAgICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBj
dXJyZW50IGZpbGUuCisgICAgICBsaW5lX251bWJlcjogVGhlIG51bWJlciBvZiB0aGUgbGluZSB0
byBjaGVjay4KKyAgICAgIGxpbmU6IFRoZSBsaW5lIG9mIGNvZGUgdG8gY2hlY2suCisgICAgICBl
cnJvcjogVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBhbnkgZXJyb3JzIGZvdW5kLgorICAgICIi
IgorICAgICMgV2UgZG9uJ3QgY2hlY2sgYSByZXR1cm4gc3RhdGVtZW50LgorICAgIGlmIG1hdGNo
KHInXHMqKHJldHVybnxkZWxldGUpXGInLCBsaW5lKToKKyAgICAgICAgcmV0dXJuCisKKyAgICAj
IEJhc2ljYWxseSwgYSBkZWNsYXJhdGlvbiBpcyBhIHR5cGUgbmFtZSBmb2xsb3dlZCBieSB3aGl0
ZXNwYWNlcworICAgICMgZm9sbG93ZWQgYnkgYW4gaWRlbnRpZmllci4gVGhlIHR5cGUgbmFtZSBj
YW4gYmUgY29tcGxpY2F0ZWQKKyAgICAjIGR1ZSB0byB0eXBlIGFkamVjdGl2ZXMgYW5kIHRlbXBs
YXRlcy4gV2UgcmVtb3ZlIHRoZW0gZmlyc3QgdG8KKyAgICAjIHNpbXBsaWZ5IHRoZSBwcm9jZXNz
IHRvIGZpbmQgZGVjbGFyYXRpb25zIG9mIGlkZW50aWZpZXJzLgorCisgICAgIyBDb252ZXJ0ICJs
b25nIGxvbmciLCAibG9uZyBkb3VibGUiLCBhbmQgImxvbmcgbG9uZyBpbnQiIHRvCisgICAgIyBz
aW1wbGUgdHlwZXMsIGJ1dCBkb24ndCByZW1vdmUgc2ltcGxlICJsb25nIi4KKyAgICBsaW5lID0g
c3ViKHInbG9uZyAobG9uZyApPyg/PWxvbmd8ZG91YmxlfGludCknLCAnJywgbGluZSkKKyAgICBs
aW5lID0gc3ViKHInXGIodW5zaWduZWR8c2lnbmVkfGlubGluZXx1c2luZ3xzdGF0aWN8Y29uc3R8
dm9sYXRpbGV8YXV0b3xyZWdpc3RlcnxleHRlcm58dHlwZWRlZnxyZXN0cmljdHxzdHJ1Y3R8Y2xh
c3N8dmlydHVhbCkoPz1cVyknLCAnJywgbGluZSkKKworICAgICMgUmVtb3ZlIGFsbCB0ZW1wbGF0
ZSBwYXJhbWV0ZXJzIGJ5IHJlbW92aW5nIG1hdGNoaW5nIDwgYW5kID4uCisgICAgIyBMb29wIHVu
dGlsIG5vIHRlbXBsYXRlcyBhcmUgcmVtb3ZlZCB0byByZW1vdmUgbmVzdGVkIHRlbXBsYXRlcy4K
KyAgICB3aGlsZSBUcnVlOgorICAgICAgICBsaW5lLCBudW1iZXJfb2ZfcmVwbGFjZW1lbnRzID0g
c3VibihyJzwoW1x3XHM6XXw6OikrXHMqWyomXSpccyo+JywgJycsIGxpbmUpCisgICAgICAgIGlm
IG5vdCBudW1iZXJfb2ZfcmVwbGFjZW1lbnRzOgorICAgICAgICAgICAgYnJlYWsKKworICAgICMg
RGVjbGFyYXRpb25zIG9mIGxvY2FsIHZhcmlhYmxlcyBjYW4gYmUgaW4gY29uZGl0aW9uIGV4cHJl
c3Npb25zCisgICAgIyBvZiBjb250cm9sIGZsb3cgc3RhdGVtZW50cyAoZS5nLiwgImlmIChSZW5k
ZXJPYmplY3QqIHAgPSBvLT5wYXJlbnQoKSkiKS4KKyAgICAjIFdlIHJlbW92ZSB0aGUga2V5d29y
ZHMgYW5kIHRoZSBmaXJzdCBwYXJlbnRoZXNpcy4KKyAgICAjCisgICAgIyBEZWNsYXJhdGlvbnMg
aW4gIndoaWxlIiwgImlmIiwgYW5kICJzd2l0Y2giIGFyZSBkaWZmZXJlbnQgZnJvbQorICAgICMg
b3RoZXIgZGVjbGFyYXRpb25zIGluIHR3byBhc3BlY3RzOgorICAgICMKKyAgICAjIC0gVGhlcmUg
Y2FuIGJlIG9ubHkgb25lIGRlY2xhcmF0aW9uIGJldHdlZW4gdGhlIHBhcmVudGhlc2VzLgorICAg
ICMgICAoaS5lLiwgeW91IGNhbm5vdCB3cml0ZSAiaWYgKGludCBpID0gMCwgaiA9IDEpIHt9IikK
KyAgICAjIC0gVGhlIHZhcmlhYmxlIG11c3QgYmUgaW5pdGlhbGl6ZWQuCisgICAgIyAgIChpLmUu
LCB5b3UgY2Fubm90IHdyaXRlICJpZiAoaW50IGkpIHt9IikKKyAgICAjCisgICAgIyBhbmQgd2Ug
d2lsbCBuZWVkIGRpZmZlcmVudCB0cmVhdG1lbnRzIGZvciB0aGVtLgorICAgIGxpbmUgPSBzdWIo
cideXHMqZm9yXHMqXCgnLCAnJywgbGluZSkKKyAgICBsaW5lLCBjb250cm9sX3N0YXRlbWVudCA9
IHN1Ym4ocideXHMqKHdoaWxlfGVsc2UgaWZ8aWZ8c3dpdGNoKVxzKlwoJywgJycsIGxpbmUpCisK
KyAgICAjIERldGVjdCB2YXJpYWJsZSBhbmQgZnVuY3Rpb25zLgorICAgIHR5cGVfcmVnZXhwID0g
cidcdyhbXHddfFxzKlsqJl1ccyp8OjopKycKKyAgICBpZGVudGlmaWVyX3JlZ2V4cCA9IHInKD9Q
PGlkZW50aWZpZXI+W1x3Ol0rKScKKyAgICBjaGFyYWN0ZXJfYWZ0ZXJfaWRlbnRpZmllcl9yZWdl
eHAgPSByJyg/UDxjaGFyYWN0ZXJfYWZ0ZXJfaWRlbnRpZmllcj5bWzsoKT0sXSkoPyE9KScKKyAg
ICBkZWNsYXJhdGlvbl93aXRob3V0X3R5cGVfcmVnZXhwID0gcidccyonICsgaWRlbnRpZmllcl9y
ZWdleHAgKyByJ1xzKicgKyBjaGFyYWN0ZXJfYWZ0ZXJfaWRlbnRpZmllcl9yZWdleHAKKyAgICBk
ZWNsYXJhdGlvbl93aXRoX3R5cGVfcmVnZXhwID0gcidccyonICsgdHlwZV9yZWdleHAgKyByJ1xz
JyArIGRlY2xhcmF0aW9uX3dpdGhvdXRfdHlwZV9yZWdleHAKKyAgICBpc19mdW5jdGlvbl9hcmd1
bWVudHMgPSBGYWxzZQorICAgIG51bWJlcl9vZl9pZGVudGlmaWVycyA9IDAKKyAgICB3aGlsZSBU
cnVlOgorICAgICAgICAjIElmIHdlIGFyZSBzZWVpbmcgdGhlIGZpcnN0IGlkZW50aWZpZXIgb3Ig
YXJndW1lbnRzIG9mIGEKKyAgICAgICAgIyBmdW5jdGlvbiwgdGhlcmUgc2hvdWxkIGJlIGEgdHlw
ZSBuYW1lIGJlZm9yZSBhbiBpZGVudGlmaWVyLgorICAgICAgICBpZiBub3QgbnVtYmVyX29mX2lk
ZW50aWZpZXJzIG9yIGlzX2Z1bmN0aW9uX2FyZ3VtZW50czoKKyAgICAgICAgICAgIGRlY2xhcmF0
aW9uX3JlZ2V4cCA9IGRlY2xhcmF0aW9uX3dpdGhfdHlwZV9yZWdleHAKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIGRlY2xhcmF0aW9uX3JlZ2V4cCA9IGRlY2xhcmF0aW9uX3dpdGhvdXRfdHlw
ZV9yZWdleHAKKworICAgICAgICBtYXRjaGVkID0gbWF0Y2goZGVjbGFyYXRpb25fcmVnZXhwLCBs
aW5lKQorICAgICAgICBpZiBub3QgbWF0Y2hlZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAg
ICBpZGVudGlmaWVyID0gbWF0Y2hlZC5ncm91cCgnaWRlbnRpZmllcicpCisgICAgICAgIGNoYXJh
Y3Rlcl9hZnRlcl9pZGVudGlmaWVyID0gbWF0Y2hlZC5ncm91cCgnY2hhcmFjdGVyX2FmdGVyX2lk
ZW50aWZpZXInKQorCisgICAgICAgICMgSWYgd2UgcmVtb3ZlZCBhIG5vbi1mb3ItY29udHJvbCBz
dGF0ZW1lbnQsIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIKKyAgICAgICAgIyB0aGUgaWRlbnRpZmllciBz
aG91bGQgYmUgJz0nLiBXaXRoIHRoaXMgcnVsZSwgd2UgY2FuIGF2b2lkCisgICAgICAgICMgd2Fy
bmluZyBmb3IgY2FzZXMgbGlrZSAiaWYgKHZhbCAmIElOVF9NQVgpIHsiLgorICAgICAgICBpZiBj
b250cm9sX3N0YXRlbWVudCBhbmQgY2hhcmFjdGVyX2FmdGVyX2lkZW50aWZpZXIgIT0gJz0nOgor
ICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaXNfZnVuY3Rpb25fYXJndW1lbnRzID0gaXNf
ZnVuY3Rpb25fYXJndW1lbnRzIG9yIGNoYXJhY3Rlcl9hZnRlcl9pZGVudGlmaWVyID09ICcoJwor
CisgICAgICAgICMgUmVtb3ZlICJtXyIgYW5kICJzXyIgdG8gYWxsb3cgdGhlbS4KKyAgICAgICAg
bW9kaWZpZWRfaWRlbnRpZmllciA9IHN1YihyJyhefCg/PD06OikpW21zXV8nLCAnJywgaWRlbnRp
ZmllcikKKyAgICAgICAgaWYgbW9kaWZpZWRfaWRlbnRpZmllci5maW5kKCdfJykgPj0gMDoKKyAg
ICAgICAgICAgICMgVmFyaW91cyBleGNlcHRpb25zIHRvIHRoZSBydWxlOiBKYXZhU2NyaXB0IG9w
IGNvZGVzIGZ1bmN0aW9ucywgY29uc3RfaXRlcmF0b3IuCisgICAgICAgICAgICBpZiAobm90IChm
aWxlbmFtZS5maW5kKCdKYXZhU2NyaXB0Q29yZScpID49IDAgYW5kIG1vZGlmaWVkX2lkZW50aWZp
ZXIuZmluZCgnX29wXycpID49IDApCisgICAgICAgICAgICAgICAgYW5kIG5vdCBtb2RpZmllZF9p
ZGVudGlmaWVyLnN0YXJ0c3dpdGgoJ3RzdF8nKQorICAgICAgICAgICAgICAgIGFuZCBub3QgbW9k
aWZpZWRfaWRlbnRpZmllciA9PSAiY29uc3RfaXRlcmF0b3IiKToKKyAgICAgICAgICAgICAgICBl
cnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdyZWFkYWJpbGl0eS9uYW1pbmcnLCA0LCBpZGVu
dGlmaWVyICsgIiBpcyBpbmNvcnJlY3RseSBuYW1lZC4gRG9uJ3QgdXNlIHVuZGVyc2NvcmVzIGlu
IHlvdXIgaWRlbnRpZmllciBuYW1lcy4iKQorCisgICAgICAgICMgVGhlcmUgY2FuIGJlIG9ubHkg
b25lIGRlY2xhcmF0aW9uIGluIG5vbi1mb3ItY29udHJvbCBzdGF0ZW1lbnRzLgorICAgICAgICBp
ZiBjb250cm9sX3N0YXRlbWVudDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAjIFdlIHNo
b3VsZCBjb250aW51ZSBjaGVja2luZyBpZiB0aGlzIGlzIGEgZnVuY3Rpb24KKyAgICAgICAgIyBk
ZWNsYXJhdGlvbiBiZWNhdXNlIHdlIG5lZWQgdG8gY2hlY2sgaXRzIGFyZ3VtZW50cy4KKyAgICAg
ICAgIyBBbHNvLCB3ZSBuZWVkIHRvIGNoZWNrIG11bHRpcGxlIGRlY2xhcmF0aW9ucy4KKyAgICAg
ICAgaWYgY2hhcmFjdGVyX2FmdGVyX2lkZW50aWZpZXIgIT0gJygnIGFuZCBjaGFyYWN0ZXJfYWZ0
ZXJfaWRlbnRpZmllciAhPSAnLCc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBudW1i
ZXJfb2ZfaWRlbnRpZmllcnMgKz0gMQorICAgICAgICBsaW5lID0gbGluZVttYXRjaGVkLmVuZCgp
Ol0KKworCitkZWYgY2hlY2tfY19zdHlsZV9jYXN0KGZpbGVuYW1lLCBsaW5lX251bWJlciwgbGlu
ZSwgcmF3X2xpbmUsIGNhc3RfdHlwZSwgcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ZXJyb3IpOgorICAgICIiIkNoZWNrcyBmb3IgYSBDLXN0eWxlIGNhc3QgYnkgbG9va2luZyBmb3Ig
dGhlIHBhdHRlcm4uCisKKyAgICBUaGlzIGFsc28gaGFuZGxlcyBzaXplb2YodHlwZSkgd2Fybmlu
Z3MsIGR1ZSB0byBzaW1pbGFyaXR5IG9mIGNvbnRlbnQuCisKKyAgICBBcmdzOgorICAgICAgZmls
ZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuCisgICAgICBsaW5lX251bWJlcjog
VGhlIG51bWJlciBvZiB0aGUgbGluZSB0byBjaGVjay4KKyAgICAgIGxpbmU6IFRoZSBsaW5lIG9m
IGNvZGUgdG8gY2hlY2suCisgICAgICByYXdfbGluZTogVGhlIHJhdyBsaW5lIG9mIGNvZGUgdG8g
Y2hlY2ssIHdpdGggY29tbWVudHMuCisgICAgICBjYXN0X3R5cGU6IFRoZSBzdHJpbmcgZm9yIHRo
ZSBDKysgY2FzdCB0byByZWNvbW1lbmQuICBUaGlzIGlzIGVpdGhlcgorICAgICAgICAgICAgICAg
ICByZWludGVycHJldF9jYXN0IG9yIHN0YXRpY19jYXN0LCBkZXBlbmRpbmcuCisgICAgICBwYXR0
ZXJuOiBUaGUgcmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gZmluZCBDLXN0eWxlIGNhc3RzLgor
ICAgICAgZXJyb3I6IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4K
KyAgICAiIiIKKyAgICBtYXRjaGVkID0gc2VhcmNoKHBhdHRlcm4sIGxpbmUpCisgICAgaWYgbm90
IG1hdGNoZWQ6CisgICAgICAgIHJldHVybgorCisgICAgIyBlLmcuLCBzaXplb2YoaW50KQorICAg
IHNpemVvZl9tYXRjaCA9IG1hdGNoKHInLipzaXplb2ZccyokJywgbGluZVswOm1hdGNoZWQuc3Rh
cnQoMSkgLSAxXSkKKyAgICBpZiBzaXplb2ZfbWF0Y2g6CisgICAgICAgIGVycm9yKGZpbGVuYW1l
LCBsaW5lX251bWJlciwgJ3J1bnRpbWUvc2l6ZW9mJywgMSwKKyAgICAgICAgICAgICAgJ1VzaW5n
IHNpemVvZih0eXBlKS4gIFVzZSBzaXplb2YodmFybmFtZSkgaW5zdGVhZCBpZiBwb3NzaWJsZScp
CisgICAgICAgIHJldHVybgorCisgICAgcmVtYWluZGVyID0gbGluZVttYXRjaGVkLmVuZCgwKTpd
CisKKyAgICAjIFRoZSBjbG9zZSBwYXJlbiBpcyBmb3IgZnVuY3Rpb24gcG9pbnRlcnMgYXMgYXJn
dW1lbnRzIHRvIGEgZnVuY3Rpb24uCisgICAgIyBlZywgdm9pZCBmb28odm9pZCAoKmJhcikoaW50
KSk7CisgICAgIyBUaGUgc2VtaWNvbG9uIGNoZWNrIGlzIGEgbW9yZSBiYXNpYyBmdW5jdGlvbiBj
aGVjazsgYWxzbyBwb3NzaWJseSBhCisgICAgIyBmdW5jdGlvbiBwb2ludGVyIHR5cGVkZWYuCisg
ICAgIyBlZywgdm9pZCBmb28oaW50KTsgb3Igdm9pZCBmb28oaW50KSBjb25zdDsKKyAgICAjIFRo
ZSBlcXVhbHMgY2hlY2sgaXMgZm9yIGZ1bmN0aW9uIHBvaW50ZXIgYXNzaWdubWVudC4KKyAgICAj
IGVnLCB2b2lkICooKmZvbykoaW50KSA9IC4uLgorICAgICMKKyAgICAjIFJpZ2h0IG5vdywgdGhp
cyB3aWxsIG9ubHkgY2F0Y2ggY2FzZXMgd2hlcmUgdGhlcmUncyBhIHNpbmdsZSBhcmd1bWVudCwg
YW5kCisgICAgIyBpdCdzIHVubmFtZWQuICBJdCBzaG91bGQgcHJvYmFibHkgYmUgZXhwYW5kZWQg
dG8gY2hlY2sgZm9yIG11bHRpcGxlCisgICAgIyBhcmd1bWVudHMgd2l0aCBzb21lIHVubmFtZWQu
CisgICAgZnVuY3Rpb25fbWF0Y2ggPSBtYXRjaChyJ1xzKihcKXw9fChjb25zdCk/XHMqKDt8XHt8
dGhyb3dcKFwpKSknLCByZW1haW5kZXIpCisgICAgaWYgZnVuY3Rpb25fbWF0Y2g6CisgICAgICAg
IGlmIChub3QgZnVuY3Rpb25fbWF0Y2guZ3JvdXAoMykKKyAgICAgICAgICAgIG9yIGZ1bmN0aW9u
X21hdGNoLmdyb3VwKDMpID09ICc7JworICAgICAgICAgICAgb3IgcmF3X2xpbmUuZmluZCgnLyon
KSA8IDApOgorICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAncmVhZGFi
aWxpdHkvZnVuY3Rpb24nLCAzLAorICAgICAgICAgICAgICAgICAgJ0FsbCBwYXJhbWV0ZXJzIHNo
b3VsZCBiZSBuYW1lZCBpbiBhIGZ1bmN0aW9uJykKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIEF0
IHRoaXMgcG9pbnQsIGFsbCB0aGF0IHNob3VsZCBiZSBsZWZ0IGlzIGFjdHVhbCBjYXN0cy4KKyAg
ICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdyZWFkYWJpbGl0eS9jYXN0aW5nJywgNCwK
KyAgICAgICAgICAnVXNpbmcgQy1zdHlsZSBjYXN0LiAgVXNlICVzPCVzPiguLi4pIGluc3RlYWQn
ICUKKyAgICAgICAgICAoY2FzdF90eXBlLCBtYXRjaGVkLmdyb3VwKDEpKSkKKworCitfSEVBREVS
U19DT05UQUlOSU5HX1RFTVBMQVRFUyA9ICgKKyAgICAoJzxkZXF1ZT4nLCAoJ2RlcXVlJywpKSwK
KyAgICAoJzxmdW5jdGlvbmFsPicsICgndW5hcnlfZnVuY3Rpb24nLCAnYmluYXJ5X2Z1bmN0aW9u
JywKKyAgICAgICAgICAgICAgICAgICAgICAncGx1cycsICdtaW51cycsICdtdWx0aXBsaWVzJywg
J2RpdmlkZXMnLCAnbW9kdWx1cycsCisgICAgICAgICAgICAgICAgICAgICAgJ25lZ2F0ZScsCisg
ICAgICAgICAgICAgICAgICAgICAgJ2VxdWFsX3RvJywgJ25vdF9lcXVhbF90bycsICdncmVhdGVy
JywgJ2xlc3MnLAorICAgICAgICAgICAgICAgICAgICAgICdncmVhdGVyX2VxdWFsJywgJ2xlc3Nf
ZXF1YWwnLAorICAgICAgICAgICAgICAgICAgICAgICdsb2dpY2FsX2FuZCcsICdsb2dpY2FsX29y
JywgJ2xvZ2ljYWxfbm90JywKKyAgICAgICAgICAgICAgICAgICAgICAndW5hcnlfbmVnYXRlJywg
J25vdDEnLCAnYmluYXJ5X25lZ2F0ZScsICdub3QyJywKKyAgICAgICAgICAgICAgICAgICAgICAn
YmluZDFzdCcsICdiaW5kMm5kJywKKyAgICAgICAgICAgICAgICAgICAgICAncG9pbnRlcl90b191
bmFyeV9mdW5jdGlvbicsCisgICAgICAgICAgICAgICAgICAgICAgJ3BvaW50ZXJfdG9fYmluYXJ5
X2Z1bmN0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgICAncHRyX2Z1bicsCisgICAgICAgICAg
ICAgICAgICAgICAgJ21lbV9mdW5fdCcsICdtZW1fZnVuJywgJ21lbV9mdW4xX3QnLCAnbWVtX2Z1
bjFfcmVmX3QnLAorICAgICAgICAgICAgICAgICAgICAgICdtZW1fZnVuX3JlZl90JywKKyAgICAg
ICAgICAgICAgICAgICAgICAnY29uc3RfbWVtX2Z1bl90JywgJ2NvbnN0X21lbV9mdW4xX3QnLAor
ICAgICAgICAgICAgICAgICAgICAgICdjb25zdF9tZW1fZnVuX3JlZl90JywgJ2NvbnN0X21lbV9m
dW4xX3JlZl90JywKKyAgICAgICAgICAgICAgICAgICAgICAnbWVtX2Z1bl9yZWYnLAorICAgICAg
ICAgICAgICAgICAgICAgKSksCisgICAgKCc8bGltaXRzPicsICgnbnVtZXJpY19saW1pdHMnLCkp
LAorICAgICgnPGxpc3Q+JywgKCdsaXN0JywpKSwKKyAgICAoJzxtYXA+JywgKCdtYXAnLCAnbXVs
dGltYXAnLCkpLAorICAgICgnPG1lbW9yeT4nLCAoJ2FsbG9jYXRvcicsKSksCisgICAgKCc8cXVl
dWU+JywgKCdxdWV1ZScsICdwcmlvcml0eV9xdWV1ZScsKSksCisgICAgKCc8c2V0PicsICgnc2V0
JywgJ211bHRpc2V0JywpKSwKKyAgICAoJzxzdGFjaz4nLCAoJ3N0YWNrJywpKSwKKyAgICAoJzxz
dHJpbmc+JywgKCdjaGFyX3RyYWl0cycsICdiYXNpY19zdHJpbmcnLCkpLAorICAgICgnPHV0aWxp
dHk+JywgKCdwYWlyJywpKSwKKyAgICAoJzx2ZWN0b3I+JywgKCd2ZWN0b3InLCkpLAorCisgICAg
IyBnY2MgZXh0ZW5zaW9ucy4KKyAgICAjIE5vdGU6IHN0ZDo6aGFzaCBpcyB0aGVpciBoYXNoLCA6
Omhhc2ggaXMgb3VyIGhhc2gKKyAgICAoJzxoYXNoX21hcD4nLCAoJ2hhc2hfbWFwJywgJ2hhc2hf
bXVsdGltYXAnLCkpLAorICAgICgnPGhhc2hfc2V0PicsICgnaGFzaF9zZXQnLCAnaGFzaF9tdWx0
aXNldCcsKSksCisgICAgKCc8c2xpc3Q+JywgKCdzbGlzdCcsKSksCisgICAgKQorCitfSEVBREVS
U19BQ0NFUFRFRF9CVVRfTk9UX1BST01PVEVEID0geworICAgICMgV2UgY2FuIHRydXN0IHdpdGgg
cmVhc29uYWJsZSBjb25maWRlbmNlIHRoYXQgbWFwIGdpdmVzIHVzIHBhaXI8PiwgdG9vLgorICAg
ICdwYWlyPD4nOiAoJ21hcCcsICdtdWx0aW1hcCcsICdoYXNoX21hcCcsICdoYXNoX211bHRpbWFw
JykKK30KKworX1JFX1BBVFRFUk5fU1RSSU5HID0gcmUuY29tcGlsZShyJ1xic3RyaW5nXGInKQor
CitfcmVfcGF0dGVybl9hbGdvcml0aG1faGVhZGVyID0gW10KK2ZvciBfdGVtcGxhdGUgaW4gKCdj
b3B5JywgJ21heCcsICdtaW4nLCAnbWluX2VsZW1lbnQnLCAnc29ydCcsICdzd2FwJywKKyAgICAg
ICAgICAgICAgICAgICd0cmFuc2Zvcm0nKToKKyAgICAjIE1hdGNoIG1heDx0eXBlPiguLi4sIC4u
LiksIG1heCguLi4sIC4uLiksIGJ1dCBub3QgZm9vLT5tYXgsIGZvby5tYXggb3IKKyAgICAjIHR5
cGU6Om1heCgpLgorICAgIF9yZV9wYXR0ZXJuX2FsZ29yaXRobV9oZWFkZXIuYXBwZW5kKAorICAg
ICAgICAocmUuY29tcGlsZShyJ1tePi5dXGInICsgX3RlbXBsYXRlICsgcicoPC4qPz4pP1woW15c
KV0nKSwKKyAgICAgICAgIF90ZW1wbGF0ZSwKKyAgICAgICAgICc8YWxnb3JpdGhtPicpKQorCitf
cmVfcGF0dGVybl90ZW1wbGF0ZXMgPSBbXQorZm9yIF9oZWFkZXIsIF90ZW1wbGF0ZXMgaW4gX0hF
QURFUlNfQ09OVEFJTklOR19URU1QTEFURVM6CisgICAgZm9yIF90ZW1wbGF0ZSBpbiBfdGVtcGxh
dGVzOgorICAgICAgICBfcmVfcGF0dGVybl90ZW1wbGF0ZXMuYXBwZW5kKAorICAgICAgICAgICAg
KHJlLmNvbXBpbGUocicoXDx8XGIpJyArIF90ZW1wbGF0ZSArIHInXHMqXDwnKSwKKyAgICAgICAg
ICAgICBfdGVtcGxhdGUgKyAnPD4nLAorICAgICAgICAgICAgIF9oZWFkZXIpKQorCisKK2RlZiBm
aWxlc19iZWxvbmdfdG9fc2FtZV9tb2R1bGUoZmlsZW5hbWVfY3BwLCBmaWxlbmFtZV9oKToKKyAg
ICAiIiJDaGVjayBpZiB0aGVzZSB0d28gZmlsZW5hbWVzIGJlbG9uZyB0byB0aGUgc2FtZSBtb2R1
bGUuCisKKyAgICBUaGUgY29uY2VwdCBvZiBhICdtb2R1bGUnIGhlcmUgaXMgYSBhcyBmb2xsb3dz
OgorICAgIGZvby5oLCBmb28taW5sLmgsIGZvby5jcHAsIGZvb190ZXN0LmNwcCBhbmQgZm9vX3Vu
aXR0ZXN0LmNwcCBiZWxvbmcgdG8gdGhlCisgICAgc2FtZSAnbW9kdWxlJyBpZiB0aGV5IGFyZSBp
biB0aGUgc2FtZSBkaXJlY3RvcnkuCisgICAgc29tZS9wYXRoL3B1YmxpYy94eXp6eSBhbmQgc29t
ZS9wYXRoL2ludGVybmFsL3h5enp5IGFyZSBhbHNvIGNvbnNpZGVyZWQKKyAgICB0byBiZWxvbmcg
dG8gdGhlIHNhbWUgbW9kdWxlIGhlcmUuCisKKyAgICBJZiB0aGUgZmlsZW5hbWVfY3BwIGNvbnRh
aW5zIGEgbG9uZ2VyIHBhdGggdGhhbiB0aGUgZmlsZW5hbWVfaCwgZm9yIGV4YW1wbGUsCisgICAg
Jy9hYnNvbHV0ZS9wYXRoL3RvL2Jhc2Uvc3lzaW5mby5jcHAnLCBhbmQgdGhpcyBmaWxlIHdvdWxk
IGluY2x1ZGUKKyAgICAnYmFzZS9zeXNpbmZvLmgnLCB0aGlzIGZ1bmN0aW9uIGFsc28gcHJvZHVj
ZXMgdGhlIHByZWZpeCBuZWVkZWQgdG8gb3BlbiB0aGUKKyAgICBoZWFkZXIuIFRoaXMgaXMgdXNl
ZCBieSB0aGUgY2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gdG8gbW9yZSByb2J1c3RseSBvcGVuIHRo
ZQorICAgIGhlYWRlciBmaWxlLiBXZSBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGUgcmVhbCBpbmNs
dWRlIHBhdGhzIGluIHRoaXMgY29udGV4dCwKKyAgICBzbyB3ZSBuZWVkIHRoaXMgZ3Vlc3N3b3Jr
IGhlcmUuCisKKyAgICBLbm93biBidWdzOiB0b29scy9iYXNlL2Jhci5jcHAgYW5kIGJhc2UvYmFy
LmggYmVsb25nIHRvIHRoZSBzYW1lIG1vZHVsZQorICAgIGFjY29yZGluZyB0byB0aGlzIGltcGxl
bWVudGF0aW9uLiBCZWNhdXNlIG9mIHRoaXMsIHRoaXMgZnVuY3Rpb24gZ2l2ZXMKKyAgICBzb21l
IGZhbHNlIHBvc2l0aXZlcy4gVGhpcyBzaG91bGQgYmUgc3VmZmljaWVudGx5IHJhcmUgaW4gcHJh
Y3RpY2UuCisKKyAgICBBcmdzOgorICAgICAgZmlsZW5hbWVfY3BwOiBpcyB0aGUgcGF0aCBmb3Ig
dGhlIC5jcHAgZmlsZQorICAgICAgZmlsZW5hbWVfaDogaXMgdGhlIHBhdGggZm9yIHRoZSBoZWFk
ZXIgcGF0aAorCisgICAgUmV0dXJuczoKKyAgICAgIFR1cGxlIHdpdGggYSBib29sIGFuZCBhIHN0
cmluZzoKKyAgICAgIGJvb2w6IFRydWUgaWYgZmlsZW5hbWVfY3BwIGFuZCBmaWxlbmFtZV9oIGJl
bG9uZyB0byB0aGUgc2FtZSBtb2R1bGUuCisgICAgICBzdHJpbmc6IHRoZSBhZGRpdGlvbmFsIHBy
ZWZpeCBuZWVkZWQgdG8gb3BlbiB0aGUgaGVhZGVyIGZpbGUuCisgICAgIiIiCisKKyAgICBpZiBu
b3QgZmlsZW5hbWVfY3BwLmVuZHN3aXRoKCcuY3BwJyk6CisgICAgICAgIHJldHVybiAoRmFsc2Us
ICcnKQorICAgIGZpbGVuYW1lX2NwcCA9IGZpbGVuYW1lX2NwcFs6LWxlbignLmNwcCcpXQorICAg
IGlmIGZpbGVuYW1lX2NwcC5lbmRzd2l0aCgnX3VuaXR0ZXN0Jyk6CisgICAgICAgIGZpbGVuYW1l
X2NwcCA9IGZpbGVuYW1lX2NwcFs6LWxlbignX3VuaXR0ZXN0JyldCisgICAgZWxpZiBmaWxlbmFt
ZV9jcHAuZW5kc3dpdGgoJ190ZXN0Jyk6CisgICAgICAgIGZpbGVuYW1lX2NwcCA9IGZpbGVuYW1l
X2NwcFs6LWxlbignX3Rlc3QnKV0KKyAgICBmaWxlbmFtZV9jcHAgPSBmaWxlbmFtZV9jcHAucmVw
bGFjZSgnL3B1YmxpYy8nLCAnLycpCisgICAgZmlsZW5hbWVfY3BwID0gZmlsZW5hbWVfY3BwLnJl
cGxhY2UoJy9pbnRlcm5hbC8nLCAnLycpCisKKyAgICBpZiBub3QgZmlsZW5hbWVfaC5lbmRzd2l0
aCgnLmgnKToKKyAgICAgICAgcmV0dXJuIChGYWxzZSwgJycpCisgICAgZmlsZW5hbWVfaCA9IGZp
bGVuYW1lX2hbOi1sZW4oJy5oJyldCisgICAgaWYgZmlsZW5hbWVfaC5lbmRzd2l0aCgnLWlubCcp
OgorICAgICAgICBmaWxlbmFtZV9oID0gZmlsZW5hbWVfaFs6LWxlbignLWlubCcpXQorICAgIGZp
bGVuYW1lX2ggPSBmaWxlbmFtZV9oLnJlcGxhY2UoJy9wdWJsaWMvJywgJy8nKQorICAgIGZpbGVu
YW1lX2ggPSBmaWxlbmFtZV9oLnJlcGxhY2UoJy9pbnRlcm5hbC8nLCAnLycpCisKKyAgICBmaWxl
c19iZWxvbmdfdG9fc2FtZV9tb2R1bGUgPSBmaWxlbmFtZV9jcHAuZW5kc3dpdGgoZmlsZW5hbWVf
aCkKKyAgICBjb21tb25fcGF0aCA9ICcnCisgICAgaWYgZmlsZXNfYmVsb25nX3RvX3NhbWVfbW9k
dWxlOgorICAgICAgICBjb21tb25fcGF0aCA9IGZpbGVuYW1lX2NwcFs6LWxlbihmaWxlbmFtZV9o
KV0KKyAgICByZXR1cm4gZmlsZXNfYmVsb25nX3RvX3NhbWVfbW9kdWxlLCBjb21tb25fcGF0aAor
CisKK2RlZiB1cGRhdGVfaW5jbHVkZV9zdGF0ZShmaWxlbmFtZSwgaW5jbHVkZV9zdGF0ZSwgaW89
Y29kZWNzKToKKyAgICAiIiJGaWxsIHVwIHRoZSBpbmNsdWRlX3N0YXRlIHdpdGggbmV3IGluY2x1
ZGVzIGZvdW5kIGZyb20gdGhlIGZpbGUuCisKKyAgICBBcmdzOgorICAgICAgZmlsZW5hbWU6IHRo
ZSBuYW1lIG9mIHRoZSBoZWFkZXIgdG8gcmVhZC4KKyAgICAgIGluY2x1ZGVfc3RhdGU6IGFuIF9J
bmNsdWRlU3RhdGUgaW5zdGFuY2UgaW4gd2hpY2ggdGhlIGhlYWRlcnMgYXJlIGluc2VydGVkLgor
ICAgICAgaW86IFRoZSBpbyBmYWN0b3J5IHRvIHVzZSB0byByZWFkIHRoZSBmaWxlLiBQcm92aWRl
ZCBmb3IgdGVzdGFiaWxpdHkuCisKKyAgICBSZXR1cm5zOgorICAgICAgVHJ1ZSBpZiBhIGhlYWRl
ciB3YXMgc3VjY2VzZnVsbHkgYWRkZWQuIEZhbHNlIG90aGVyd2lzZS4KKyAgICAiIiIKKyAgICBo
ZWFkZXJfZmlsZSA9IE5vbmUKKyAgICB0cnk6CisgICAgICAgIGhlYWRlcl9maWxlID0gaW8ub3Bl
bihmaWxlbmFtZSwgJ3InLCAndXRmOCcsICdyZXBsYWNlJykKKyAgICBleGNlcHQgSU9FcnJvcjoK
KyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgbGluZV9udW1iZXIgPSAwCisgICAgZm9yIGxpbmUg
aW4gaGVhZGVyX2ZpbGU6CisgICAgICAgIGxpbmVfbnVtYmVyICs9IDEKKyAgICAgICAgY2xlYW5f
bGluZSA9IGNsZWFuc2VfY29tbWVudHMobGluZSkKKyAgICAgICAgbWF0Y2hlZCA9IF9SRV9QQVRU
RVJOX0lOQ0xVREUuc2VhcmNoKGNsZWFuX2xpbmUpCisgICAgICAgIGlmIG1hdGNoZWQ6CisgICAg
ICAgICAgICBpbmNsdWRlID0gbWF0Y2hlZC5ncm91cCgyKQorICAgICAgICAgICAgIyBUaGUgdmFs
dWUgZm9ybWF0dGluZyBpcyBjdXRlLCBidXQgbm90IHJlYWxseSB1c2VkIHJpZ2h0IG5vdy4KKyAg
ICAgICAgICAgICMgV2hhdCBtYXR0ZXJzIGhlcmUgaXMgdGhhdCB0aGUga2V5IGlzIGluIGluY2x1
ZGVfc3RhdGUuCisgICAgICAgICAgICBpbmNsdWRlX3N0YXRlLnNldGRlZmF1bHQoaW5jbHVkZSwg
JyVzOiVkJyAlIChmaWxlbmFtZSwgbGluZV9udW1iZXIpKQorICAgIHJldHVybiBUcnVlCisKKwor
ZGVmIGNoZWNrX2Zvcl9pbmNsdWRlX3doYXRfeW91X3VzZShmaWxlbmFtZSwgY2xlYW5fbGluZXMs
IGluY2x1ZGVfc3RhdGUsIGVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbz1jb2RlY3MpOgorICAgICIiIlJlcG9ydHMgZm9yIG1pc3Npbmcgc3RsIGluY2x1ZGVzLgor
CisgICAgVGhpcyBmdW5jdGlvbiB3aWxsIG91dHB1dCB3YXJuaW5ncyB0byBtYWtlIHN1cmUgeW91
IGFyZSBpbmNsdWRpbmcgdGhlIGhlYWRlcnMKKyAgICBuZWNlc3NhcnkgZm9yIHRoZSBzdGwgY29u
dGFpbmVycyBhbmQgZnVuY3Rpb25zIHRoYXQgeW91IHVzZS4gV2Ugb25seSBnaXZlIG9uZQorICAg
IHJlYXNvbiB0byBpbmNsdWRlIGEgaGVhZGVyLiBGb3IgZXhhbXBsZSwgaWYgeW91IHVzZSBib3Ro
IGVxdWFsX3RvPD4gYW5kCisgICAgbGVzczw+IGluIGEgLmggZmlsZSwgb25seSBvbmUgKHRoZSBs
YXR0ZXIgaW4gdGhlIGZpbGUpIG9mIHRoZXNlIHdpbGwgYmUKKyAgICByZXBvcnRlZCBhcyBhIHJl
YXNvbiB0byBpbmNsdWRlIHRoZSA8ZnVuY3Rpb25hbD4uCisKKyAgICBBcmdzOgorICAgICAgZmls
ZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuCisgICAgICBjbGVhbl9saW5lczog
QSBDbGVhbnNlZExpbmVzIGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIGZpbGUuCisgICAgICBpbmNs
dWRlX3N0YXRlOiBBbiBfSW5jbHVkZVN0YXRlIGluc3RhbmNlLgorICAgICAgZXJyb3I6IFRoZSBm
dW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4KKyAgICAgIGlvOiBUaGUgSU8g
ZmFjdG9yeSB0byB1c2UgdG8gcmVhZCB0aGUgaGVhZGVyIGZpbGUuIFByb3ZpZGVkIGZvciB1bml0
dGVzdAorICAgICAgICAgIGluamVjdGlvbi4KKyAgICAiIiIKKyAgICByZXF1aXJlZCA9IHt9ICAj
IEEgbWFwIG9mIGhlYWRlciBuYW1lIHRvIGxpbmVfbnVtYmVyIGFuZCB0aGUgdGVtcGxhdGUgZW50
aXR5LgorICAgICAgICAjIEV4YW1wbGUgb2YgcmVxdWlyZWQ6IHsgJzxmdW5jdGlvbmFsPic6ICgx
MjE5LCAnbGVzczw+JykgfQorCisgICAgZm9yIGxpbmVfbnVtYmVyIGluIHhyYW5nZShjbGVhbl9s
aW5lcy5udW1fbGluZXMoKSk6CisgICAgICAgIGxpbmUgPSBjbGVhbl9saW5lcy5lbGlkZWRbbGlu
ZV9udW1iZXJdCisgICAgICAgIGlmIG5vdCBsaW5lIG9yIGxpbmVbMF0gPT0gJyMnOgorICAgICAg
ICAgICAgY29udGludWUKKworICAgICAgICAjIFN0cmluZyBpcyBzcGVjaWFsIC0tIGl0IGlzIGEg
bm9uLXRlbXBsYXRpemVkIHR5cGUgaW4gU1RMLgorICAgICAgICBpZiBfUkVfUEFUVEVSTl9TVFJJ
Tkcuc2VhcmNoKGxpbmUpOgorICAgICAgICAgICAgcmVxdWlyZWRbJzxzdHJpbmc+J10gPSAobGlu
ZV9udW1iZXIsICdzdHJpbmcnKQorCisgICAgICAgIGZvciBwYXR0ZXJuLCB0ZW1wbGF0ZSwgaGVh
ZGVyIGluIF9yZV9wYXR0ZXJuX2FsZ29yaXRobV9oZWFkZXI6CisgICAgICAgICAgICBpZiBwYXR0
ZXJuLnNlYXJjaChsaW5lKToKKyAgICAgICAgICAgICAgICByZXF1aXJlZFtoZWFkZXJdID0gKGxp
bmVfbnVtYmVyLCB0ZW1wbGF0ZSkKKworICAgICAgICAjIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24g
aXMganVzdCBhIHNwZWVkIHVwLCBubyBzZW1hbnRpY3MgYXJlIGNoYW5nZWQuCisgICAgICAgIGlm
IG5vdCAnPCcgaW4gbGluZTogICMgUmVkdWNlcyB0aGUgY3B1IHRpbWUgdXNhZ2UgYnkgc2tpcHBp
bmcgbGluZXMuCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGZvciBwYXR0ZXJuLCB0
ZW1wbGF0ZSwgaGVhZGVyIGluIF9yZV9wYXR0ZXJuX3RlbXBsYXRlczoKKyAgICAgICAgICAgIGlm
IHBhdHRlcm4uc2VhcmNoKGxpbmUpOgorICAgICAgICAgICAgICAgIHJlcXVpcmVkW2hlYWRlcl0g
PSAobGluZV9udW1iZXIsIHRlbXBsYXRlKQorCisgICAgIyBUaGUgcG9saWN5IGlzIHRoYXQgaWYg
eW91ICNpbmNsdWRlIHNvbWV0aGluZyBpbiBmb28uaCB5b3UgZG9uJ3QgbmVlZCB0bworICAgICMg
aW5jbHVkZSBpdCBhZ2FpbiBpbiBmb28uY3BwLiBIZXJlLCB3ZSB3aWxsIGxvb2sgYXQgcG9zc2li
bGUgaW5jbHVkZXMuCisgICAgIyBMZXQncyBjb3B5IHRoZSBpbmNsdWRlX3N0YXRlIHNvIGl0IGlz
IG9ubHkgbWVzc2VkIHVwIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLgorICAgIGluY2x1ZGVfc3RhdGUg
PSBpbmNsdWRlX3N0YXRlLmNvcHkoKQorCisgICAgIyBEaWQgd2UgZmluZCB0aGUgaGVhZGVyIGZv
ciB0aGlzIGZpbGUgKGlmIGFueSkgYW5kIHN1Y2Nlc2Z1bGx5IGxvYWQgaXQ/CisgICAgaGVhZGVy
X2ZvdW5kID0gRmFsc2UKKworICAgICMgVXNlIHRoZSBhYnNvbHV0ZSBwYXRoIHNvIHRoYXQgbWF0
Y2hpbmcgd29ya3MgcHJvcGVybHkuCisgICAgYWJzX2ZpbGVuYW1lID0gb3MucGF0aC5hYnNwYXRo
KGZpbGVuYW1lKQorCisgICAgIyBGb3IgRW1hY3MncyBmbHltYWtlLgorICAgICMgSWYgY3BwX3N0
eWxlIGlzIGludm9rZWQgZnJvbSBFbWFjcydzIGZseW1ha2UsIGEgdGVtcG9yYXJ5IGZpbGUgaXMg
Z2VuZXJhdGVkCisgICAgIyBieSBmbHltYWtlIGFuZCB0aGF0IGZpbGUgbmFtZSBtaWdodCBlbmQg
d2l0aCAnX2ZseW1ha2UuY3BwJy4gSW4gdGhhdCBjYXNlLAorICAgICMgcmVzdG9yZSBvcmlnaW5h
bCBmaWxlIG5hbWUgaGVyZSBzbyB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIGhlYWRlciBmaWxlIGNh
biBiZQorICAgICMgZm91bmQuCisgICAgIyBlLmcuIElmIHRoZSBmaWxlIG5hbWUgaXMgJ2Zvb19m
bHltYWtlLmNwcCcsIHdlIHNob3VsZCBzZWFyY2ggZm9yICdmb28uaCcKKyAgICAjIGluc3RlYWQg
b2YgJ2Zvb19mbHltYWtlLmgnCisgICAgZW1hY3NfZmx5bWFrZV9zdWZmaXggPSAnX2ZseW1ha2Uu
Y3BwJworICAgIGlmIGFic19maWxlbmFtZS5lbmRzd2l0aChlbWFjc19mbHltYWtlX3N1ZmZpeCk6
CisgICAgICAgIGFic19maWxlbmFtZSA9IGFic19maWxlbmFtZVs6LWxlbihlbWFjc19mbHltYWtl
X3N1ZmZpeCldICsgJy5jcHAnCisKKyAgICAjIGluY2x1ZGVfc3RhdGUgaXMgbW9kaWZpZWQgZHVy
aW5nIGl0ZXJhdGlvbiwgc28gd2UgaXRlcmF0ZSBvdmVyIGEgY29weSBvZgorICAgICMgdGhlIGtl
eXMuCisgICAgZm9yIGhlYWRlciBpbiBpbmNsdWRlX3N0YXRlLmtleXMoKTogICNOT0xJTlQKKyAg
ICAgICAgKHNhbWVfbW9kdWxlLCBjb21tb25fcGF0aCkgPSBmaWxlc19iZWxvbmdfdG9fc2FtZV9t
b2R1bGUoYWJzX2ZpbGVuYW1lLCBoZWFkZXIpCisgICAgICAgIGZ1bGxwYXRoID0gY29tbW9uX3Bh
dGggKyBoZWFkZXIKKyAgICAgICAgaWYgc2FtZV9tb2R1bGUgYW5kIHVwZGF0ZV9pbmNsdWRlX3N0
YXRlKGZ1bGxwYXRoLCBpbmNsdWRlX3N0YXRlLCBpbyk6CisgICAgICAgICAgICBoZWFkZXJfZm91
bmQgPSBUcnVlCisKKyAgICAjIElmIHdlIGNhbid0IGZpbmQgdGhlIGhlYWRlciBmaWxlIGZvciBh
IC5jcHAsIGFzc3VtZSBpdCdzIGJlY2F1c2Ugd2UgZG9uJ3QKKyAgICAjIGtub3cgd2hlcmUgdG8g
bG9vay4gSW4gdGhhdCBjYXNlIHdlJ2xsIGdpdmUgdXAgYXMgd2UncmUgbm90IHN1cmUgdGhleQor
ICAgICMgZGlkbid0IGluY2x1ZGUgaXQgaW4gdGhlIC5oIGZpbGUuCisgICAgIyBGSVhNRTogRG8g
YSBiZXR0ZXIgam9iIG9mIGZpbmRpbmcgLmggZmlsZXMgc28gd2UgYXJlIGNvbmZpZGVudCB0aGF0
CisgICAgIyAgICAgICAgbm90IGhhdmluZyB0aGUgLmggZmlsZSBtZWFucyB0aGVyZSBpc24ndCBv
bmUuCisgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoJy5jcHAnKSBhbmQgbm90IGhlYWRlcl9mb3Vu
ZDoKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIEFsbCB0aGUgbGluZXMgaGF2ZSBiZWVuIHByb2Nl
c3NlZCwgcmVwb3J0IHRoZSBlcnJvcnMgZm91bmQuCisgICAgZm9yIHJlcXVpcmVkX2hlYWRlcl91
bnN0cmlwcGVkIGluIHJlcXVpcmVkOgorICAgICAgICB0ZW1wbGF0ZSA9IHJlcXVpcmVkW3JlcXVp
cmVkX2hlYWRlcl91bnN0cmlwcGVkXVsxXQorICAgICAgICBpZiB0ZW1wbGF0ZSBpbiBfSEVBREVS
U19BQ0NFUFRFRF9CVVRfTk9UX1BST01PVEVEOgorICAgICAgICAgICAgaGVhZGVycyA9IF9IRUFE
RVJTX0FDQ0VQVEVEX0JVVF9OT1RfUFJPTU9URURbdGVtcGxhdGVdCisgICAgICAgICAgICBpZiBb
VHJ1ZSBmb3IgaGVhZGVyIGluIGhlYWRlcnMgaWYgaGVhZGVyIGluIGluY2x1ZGVfc3RhdGVdOgor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIHJlcXVpcmVkX2hlYWRlcl91bnN0
cmlwcGVkLnN0cmlwKCc8PiInKSBub3QgaW4gaW5jbHVkZV9zdGF0ZToKKyAgICAgICAgICAgIGVy
cm9yKGZpbGVuYW1lLCByZXF1aXJlZFtyZXF1aXJlZF9oZWFkZXJfdW5zdHJpcHBlZF1bMF0sCisg
ICAgICAgICAgICAgICAgICAnYnVpbGQvaW5jbHVkZV93aGF0X3lvdV91c2UnLCA0LAorICAgICAg
ICAgICAgICAgICAgJ0FkZCAjaW5jbHVkZSAnICsgcmVxdWlyZWRfaGVhZGVyX3Vuc3RyaXBwZWQg
KyAnIGZvciAnICsgdGVtcGxhdGUpCisKKworZGVmIHByb2Nlc3NfbGluZShmaWxlbmFtZSwgZmls
ZV9leHRlbnNpb24sCisgICAgICAgICAgICAgICAgIGNsZWFuX2xpbmVzLCBsaW5lLCBpbmNsdWRl
X3N0YXRlLCBmdW5jdGlvbl9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgY2xhc3Nfc3RhdGUsIGZp
bGVfc3RhdGUsIGVycm9yKToKKyAgICAiIiJQcm9jZXNzZXMgYSBzaW5nbGUgbGluZSBpbiB0aGUg
ZmlsZS4KKworICAgIEFyZ3M6CisgICAgICBmaWxlbmFtZTogRmlsZW5hbWUgb2YgdGhlIGZpbGUg
dGhhdCBpcyBiZWluZyBwcm9jZXNzZWQuCisgICAgICBmaWxlX2V4dGVuc2lvbjogVGhlIGV4dGVu
c2lvbiAoZG90IG5vdCBpbmNsdWRlZCkgb2YgdGhlIGZpbGUuCisgICAgICBjbGVhbl9saW5lczog
QW4gYXJyYXkgb2Ygc3RyaW5ncywgZWFjaCByZXByZXNlbnRpbmcgYSBsaW5lIG9mIHRoZSBmaWxl
LAorICAgICAgICAgICAgICAgICAgIHdpdGggY29tbWVudHMgc3RyaXBwZWQuCisgICAgICBsaW5l
OiBOdW1iZXIgb2YgbGluZSBiZWluZyBwcm9jZXNzZWQuCisgICAgICBpbmNsdWRlX3N0YXRlOiBB
biBfSW5jbHVkZVN0YXRlIGluc3RhbmNlIGluIHdoaWNoIHRoZSBoZWFkZXJzIGFyZSBpbnNlcnRl
ZC4KKyAgICAgIGZ1bmN0aW9uX3N0YXRlOiBBIF9GdW5jdGlvblN0YXRlIGluc3RhbmNlIHdoaWNo
IGNvdW50cyBmdW5jdGlvbiBsaW5lcywgZXRjLgorICAgICAgY2xhc3Nfc3RhdGU6IEEgX0NsYXNz
U3RhdGUgaW5zdGFuY2Ugd2hpY2ggbWFpbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0CisgICAgICAg
ICAgICAgICAgICAgdGhlIGN1cnJlbnQgc3RhY2sgb2YgbmVzdGVkIGNsYXNzIGRlY2xhcmF0aW9u
cyBiZWluZyBwYXJzZWQuCisgICAgICBmaWxlX3N0YXRlOiBBIF9GaWxlU3RhdGUgaW5zdGFuY2Ug
d2hpY2ggbWFpbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0CisgICAgICAgICAgICAgICAgICB0aGUg
c3RhdGUgb2YgdGhpbmdzIGluIHRoZSBmaWxlLgorICAgICAgZXJyb3I6IEEgY2FsbGFibGUgdG8g
d2hpY2ggZXJyb3JzIGFyZSByZXBvcnRlZCwgd2hpY2ggdGFrZXMgNCBhcmd1bWVudHM6CisgICAg
ICAgICAgICAgZmlsZW5hbWUsIGxpbmUgbnVtYmVyLCBlcnJvciBsZXZlbCwgYW5kIG1lc3NhZ2UK
KworICAgICIiIgorICAgIHJhd19saW5lcyA9IGNsZWFuX2xpbmVzLnJhd19saW5lcworICAgIGNo
ZWNrX2Zvcl9mdW5jdGlvbl9sZW5ndGhzKGZpbGVuYW1lLCBjbGVhbl9saW5lcywgbGluZSwgZnVu
Y3Rpb25fc3RhdGUsIGVycm9yKQorICAgIGlmIHNlYXJjaChyJ1xiTk9MSU5UXGInLCByYXdfbGlu
ZXNbbGluZV0pOiAgIyBpZ25vcmUgbm9saW50IGxpbmVzCisgICAgICAgIHJldHVybgorICAgIGNo
ZWNrX2Zvcl9tdWx0aWxpbmVfY29tbWVudHNfYW5kX3N0cmluZ3MoZmlsZW5hbWUsIGNsZWFuX2xp
bmVzLCBsaW5lLCBlcnJvcikKKyAgICBjaGVja19zdHlsZShmaWxlbmFtZSwgY2xlYW5fbGluZXMs
IGxpbmUsIGZpbGVfZXh0ZW5zaW9uLCBmaWxlX3N0YXRlLCBlcnJvcikKKyAgICBjaGVja19sYW5n
dWFnZShmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmUsIGZpbGVfZXh0ZW5zaW9uLCBpbmNsdWRl
X3N0YXRlLAorICAgICAgICAgICAgICAgICAgIGVycm9yKQorICAgIGNoZWNrX2Zvcl9ub25fc3Rh
bmRhcmRfY29uc3RydWN0cyhmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX3N0YXRlLCBlcnJvcikKKyAgICBjaGVj
a19wb3NpeF90aHJlYWRpbmcoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lLCBlcnJvcikKKyAg
ICBjaGVja19pbnZhbGlkX2luY3JlbWVudChmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmUsIGVy
cm9yKQorCisKK2RlZiBwcm9jZXNzX2ZpbGVfZGF0YShmaWxlbmFtZSwgZmlsZV9leHRlbnNpb24s
IGxpbmVzLCBlcnJvcik6CisgICAgIiIiUGVyZm9ybXMgbGludCBjaGVja3MgYW5kIHJlcG9ydHMg
YW55IGVycm9ycyB0byB0aGUgZ2l2ZW4gZXJyb3IgZnVuY3Rpb24uCisKKyAgICBBcmdzOgorICAg
ICAgZmlsZW5hbWU6IEZpbGVuYW1lIG9mIHRoZSBmaWxlIHRoYXQgaXMgYmVpbmcgcHJvY2Vzc2Vk
LgorICAgICAgZmlsZV9leHRlbnNpb246IFRoZSBleHRlbnNpb24gKGRvdCBub3QgaW5jbHVkZWQp
IG9mIHRoZSBmaWxlLgorICAgICAgbGluZXM6IEFuIGFycmF5IG9mIHN0cmluZ3MsIGVhY2ggcmVw
cmVzZW50aW5nIGEgbGluZSBvZiB0aGUgZmlsZSwgd2l0aCB0aGUKKyAgICAgICAgICAgICBsYXN0
IGVsZW1lbnQgYmVpbmcgZW1wdHkgaWYgdGhlIGZpbGUgaXMgdGVybWluZWQgd2l0aCBhIG5ld2xp
bmUuCisgICAgICBlcnJvcjogQSBjYWxsYWJsZSB0byB3aGljaCBlcnJvcnMgYXJlIHJlcG9ydGVk
LCB3aGljaCB0YWtlcyA0IGFyZ3VtZW50czoKKyAgICAiIiIKKyAgICBsaW5lcyA9IChbJy8vIG1h
cmtlciBzbyBsaW5lIG51bWJlcnMgYW5kIGluZGljZXMgYm90aCBzdGFydCBhdCAxJ10gKyBsaW5l
cyArCisgICAgICAgICAgICAgWycvLyBtYXJrZXIgc28gbGluZSBudW1iZXJzIGVuZCBpbiBhIGtu
b3duIHdheSddKQorCisgICAgaW5jbHVkZV9zdGF0ZSA9IF9JbmNsdWRlU3RhdGUoKQorICAgIGZ1
bmN0aW9uX3N0YXRlID0gX0Z1bmN0aW9uU3RhdGUoKQorICAgIGNsYXNzX3N0YXRlID0gX0NsYXNz
U3RhdGUoKQorICAgIGZpbGVfc3RhdGUgPSBfRmlsZVN0YXRlKCkKKworICAgIGNoZWNrX2Zvcl9j
b3B5cmlnaHQoZmlsZW5hbWUsIGxpbmVzLCBlcnJvcikKKworICAgIGlmIGZpbGVfZXh0ZW5zaW9u
ID09ICdoJzoKKyAgICAgICAgY2hlY2tfZm9yX2hlYWRlcl9ndWFyZChmaWxlbmFtZSwgbGluZXMs
IGVycm9yKQorCisgICAgcmVtb3ZlX211bHRpX2xpbmVfY29tbWVudHMoZmlsZW5hbWUsIGxpbmVz
LCBlcnJvcikKKyAgICBjbGVhbl9saW5lcyA9IENsZWFuc2VkTGluZXMobGluZXMpCisgICAgZm9y
IGxpbmUgaW4geHJhbmdlKGNsZWFuX2xpbmVzLm51bV9saW5lcygpKToKKyAgICAgICAgcHJvY2Vz
c19saW5lKGZpbGVuYW1lLCBmaWxlX2V4dGVuc2lvbiwgY2xlYW5fbGluZXMsIGxpbmUsCisgICAg
ICAgICAgICAgICAgICAgICBpbmNsdWRlX3N0YXRlLCBmdW5jdGlvbl9zdGF0ZSwgY2xhc3Nfc3Rh
dGUsIGZpbGVfc3RhdGUsIGVycm9yKQorICAgIGNsYXNzX3N0YXRlLmNoZWNrX2ZpbmlzaGVkKGZp
bGVuYW1lLCBlcnJvcikKKworICAgIGNoZWNrX2Zvcl9pbmNsdWRlX3doYXRfeW91X3VzZShmaWxl
bmFtZSwgY2xlYW5fbGluZXMsIGluY2x1ZGVfc3RhdGUsIGVycm9yKQorCisgICAgIyBXZSBjaGVj
ayBoZXJlIHJhdGhlciB0aGFuIGluc2lkZSBwcm9jZXNzX2xpbmUgc28gdGhhdCB3ZSBzZWUgcmF3
CisgICAgIyBsaW5lcyByYXRoZXIgdGhhbiAiY2xlYW5lZCIgbGluZXMuCisgICAgY2hlY2tfZm9y
X3VuaWNvZGVfcmVwbGFjZW1lbnRfY2hhcmFjdGVycyhmaWxlbmFtZSwgbGluZXMsIGVycm9yKQor
CisgICAgY2hlY2tfZm9yX25ld19saW5lX2F0X2VvZihmaWxlbmFtZSwgbGluZXMsIGVycm9yKQor
CisKK2RlZiBwcm9jZXNzX2ZpbGUoZmlsZW5hbWUsIGVycm9yPWVycm9yKToKKyAgICAiIiJQZXJm
b3JtcyBjcHBfc3R5bGUgb24gYSBzaW5nbGUgZmlsZS4KKworICAgIEFyZ3M6CisgICAgICBmaWxl
bmFtZTogVGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gcGFyc2UuCisgICAgICBlcnJvcjogVGhlIGZ1
bmN0aW9uIHRvIGNhbGwgd2l0aCBhbnkgZXJyb3JzIGZvdW5kLgorICAgICIiIgorICAgIHRyeToK
KyAgICAgICAgIyBTdXBwb3J0IHRoZSBVTklYIGNvbnZlbnRpb24gb2YgdXNpbmcgIi0iIGZvciBz
dGRpbi4gIE5vdGUgdGhhdAorICAgICAgICAjIHdlIGFyZSBub3Qgb3BlbmluZyB0aGUgZmlsZSB3
aXRoIHVuaXZlcnNhbCBuZXdsaW5lIHN1cHBvcnQKKyAgICAgICAgIyAod2hpY2ggY29kZWNzIGRv
ZXNuJ3Qgc3VwcG9ydCBhbnl3YXkpLCBzbyB0aGUgcmVzdWx0aW5nIGxpbmVzIGRvCisgICAgICAg
ICMgY29udGFpbiB0cmFpbGluZyAnXHInIGNoYXJhY3RlcnMgaWYgd2UgYXJlIHJlYWRpbmcgYSBm
aWxlIHRoYXQKKyAgICAgICAgIyBoYXMgQ1JMRiBlbmRpbmdzLgorICAgICAgICAjIElmIGFmdGVy
IHRoZSBzcGxpdCBhIHRyYWlsaW5nICdccicgaXMgcHJlc2VudCwgaXQgaXMgcmVtb3ZlZAorICAg
ICAgICAjIGJlbG93LiBJZiBpdCBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgcHJlc2VudCAoaS5lLiBv
cy5saW5lc2VwICE9CisgICAgICAgICMgJ1xyXG4nIGFzIGluIFdpbmRvd3MpLCBhIHdhcm5pbmcg
aXMgaXNzdWVkIGJlbG93IGlmIHRoaXMgZmlsZQorICAgICAgICAjIGlzIHByb2Nlc3NlZC4KKwor
ICAgICAgICBpZiBmaWxlbmFtZSA9PSAnLSc6CisgICAgICAgICAgICBsaW5lcyA9IGNvZGVjcy5T
dHJlYW1SZWFkZXJXcml0ZXIoc3lzLnN0ZGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvZGVjcy5nZXRyZWFkZXIoJ3V0ZjgnKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlY3MuZ2V0d3JpdGVyKCd1dGY4
JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcGxh
Y2UnKS5yZWFkKCkuc3BsaXQoJ1xuJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVz
ID0gY29kZWNzLm9wZW4oZmlsZW5hbWUsICdyJywgJ3V0ZjgnLCAncmVwbGFjZScpLnJlYWQoKS5z
cGxpdCgnXG4nKQorCisgICAgICAgIGNhcnJpYWdlX3JldHVybl9mb3VuZCA9IEZhbHNlCisgICAg
ICAgICMgUmVtb3ZlIHRyYWlsaW5nICdccicuCisgICAgICAgIGZvciBsaW5lX251bWJlciBpbiBy
YW5nZShsZW4obGluZXMpKToKKyAgICAgICAgICAgIGlmIGxpbmVzW2xpbmVfbnVtYmVyXS5lbmRz
d2l0aCgnXHInKToKKyAgICAgICAgICAgICAgICBsaW5lc1tsaW5lX251bWJlcl0gPSBsaW5lc1ts
aW5lX251bWJlcl0ucnN0cmlwKCdccicpCisgICAgICAgICAgICAgICAgY2FycmlhZ2VfcmV0dXJu
X2ZvdW5kID0gVHJ1ZQorCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHN5cy5zdGRlcnIu
d3JpdGUoCisgICAgICAgICAgICAiU2tpcHBpbmcgaW5wdXQgJyVzJzogQ2FuJ3Qgb3BlbiBmb3Ig
cmVhZGluZ1xuIiAlIGZpbGVuYW1lKQorICAgICAgICByZXR1cm4KKworICAgICMgTm90ZSwgaWYg
bm8gZG90IGlzIGZvdW5kLCB0aGlzIHdpbGwgZ2l2ZSB0aGUgZW50aXJlIGZpbGVuYW1lIGFzIHRo
ZSBleHQuCisgICAgZmlsZV9leHRlbnNpb24gPSBmaWxlbmFtZVtmaWxlbmFtZS5yZmluZCgnLicp
ICsgMTpdCisKKyAgICAjIFdoZW4gcmVhZGluZyBmcm9tIHN0ZGluLCB0aGUgZXh0ZW5zaW9uIGlz
IHVua25vd24sIHNvIG5vIGNwcF9zdHlsZSB0ZXN0cworICAgICMgc2hvdWxkIHJlbHkgb24gdGhl
IGV4dGVuc2lvbi4KKyAgICBpZiAoZmlsZW5hbWUgIT0gJy0nIGFuZCBub3QgY2FuX2hhbmRsZShm
aWxlbmFtZSkpOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdJZ25vcmluZyAlczsgbm90IGEg
LmNwcCwgLmMgb3IgLmggZmlsZVxuJyAlIGZpbGVuYW1lKQorICAgIGVsc2U6CisgICAgICAgIHBy
b2Nlc3NfZmlsZV9kYXRhKGZpbGVuYW1lLCBmaWxlX2V4dGVuc2lvbiwgbGluZXMsIGVycm9yKQor
ICAgICAgICBpZiBjYXJyaWFnZV9yZXR1cm5fZm91bmQgYW5kIG9zLmxpbmVzZXAgIT0gJ1xyXG4n
OgorICAgICAgICAgICAgIyBVc2UgMCBmb3IgbGluZV9udW1iZXIgc2luY2Ugb3V0cHV0aW5nIG9u
bHkgb25lIGVycm9yIGZvciBwb3RlbnRpYWxseQorICAgICAgICAgICAgIyBzZXZlcmFsIGxpbmVz
LgorICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIDAsICd3aGl0ZXNwYWNlL25ld2xpbmUnLCAx
LAorICAgICAgICAgICAgICAgICAgJ09uZSBvciBtb3JlIHVuZXhwZWN0ZWQgXFxyICheTSkgZm91
bmQ7JworICAgICAgICAgICAgICAgICAgJ2JldHRlciB0byB1c2Ugb25seSBhIFxcbicpCisKKwor
ZGVmIGNhbl9oYW5kbGUoZmlsZW5hbWUpOgorICAgICIiIkNoZWNrcyBpZiB0aGlzIG1vZHVsZSBz
dXBwb3J0cyBmb3IgdGhlIHNwZWNpZmllZCBmaWxlIHR5cGUuCisKKyAgICBBcmdzOgorICAgICAg
ZmlsZW5hbWU6IEEgZmlsZW5hbWUuIEl0IG1heSBjb250YWluIGRpcmVjdG9yeSBuYW1lcy4KKyAg
ICAgIiIiCisgICAgcmV0dXJuIG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzFdIGluICgnLmgn
LCAnLmNwcCcsICcuYycpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxl
L2NwcF9zdHlsZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NwcF9zdHlsZV91bml0dGVzdC5weQkocmV2aXNpb24gNTI4NDkpCShm
cm9tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY3BwX3N0eWxlX3VuaXR0ZXN0LnB5OjUy
ODQ5KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jcHBfc3R5bGVfdW5p
dHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNjM1IEBACisjIS91c3IvYmluL3B5
dGhvbgorIyAtKi0gY29kaW5nOiB1dGYtODsgLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMDkgVG9y
Y2ggTW9iaWxlIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIwor
IyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBk
aXN0cmlidXRpb24uCisjICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIlVuaXQgdGVzdCBmb3IgY3BwX3N0eWxl
LnB5LiIiIgorCisjIEZJWE1FOiBBZGQgYSBnb29kIHRlc3QgdGhhdCB0ZXN0cyBVcGRhdGVJbmNs
dWRlU3RhdGUuCisKK2ltcG9ydCBjb2RlY3MKK2ltcG9ydCBvcworaW1wb3J0IHJhbmRvbQoraW1w
b3J0IHJlCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBjcHBfc3R5bGUKKyMgRklYTUU6IFJlbW92
ZSB0aGUgbmVlZCB0byBpbXBvcnQgc29tZXRoaW5nIGZyb20gc3R5bGUuIFNlZSB0aGUKKyMgICAg
ICAgIEZJWE1FIG5vdGVzIG5lYXIgdGhlIFNUWUxFX0NBVEVHT1JJRVMgZGVmaW5pdGlvbiBmb3Ig
YQorIyAgICAgICAgc3VnZ2VzdGlvbiBvbiBob3cgdG8gYmVzdCBkbyB0aGlzLgorZnJvbSBzdHls
ZSBpbXBvcnQgU1RZTEVfQ0FURUdPUklFUworCisjIFRoaXMgY2xhc3Mgd29ya3MgYXMgYW4gZXJy
b3IgY29sbGVjdG9yIGFuZCByZXBsYWNlcyBjcHBfc3R5bGUuRXJyb3IKKyMgZnVuY3Rpb24gZm9y
IHRoZSB1bml0IHRlc3RzLiAgV2UgYWxzbyB2ZXJpZnkgZWFjaCBjYXRlZ29yeSB3ZSBzZWUKKyMg
aXMgaW4gU1RZTEVfQ0FURUdPUklFUywgdG8gaGVscCBrZWVwIHRoYXQgbGlzdCB1cCB0byBkYXRl
LgorY2xhc3MgRXJyb3JDb2xsZWN0b3I6CisgICAgX2FsbF9zdHlsZV9jYXRlZ29yaWVzID0gU1RZ
TEVfQ0FURUdPUklFUworICAgICMgVGhpcyBhIGxpc3QgaW5jbHVkaW5nIGFsbCBjYXRlZ29yaWVz
IHNlZW4gaW4gYW55IHVuaXQgdGVzdC4KKyAgICBfc2Vlbl9zdHlsZV9jYXRlZ29yaWVzID0ge30K
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhc3NlcnRfZm4pOgorICAgICAgICAiIiJhc3NlcnRf
Zm46IGEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHdlIG5vdGljZSBhIHByb2JsZW0uIiIiCisgICAg
ICAgIHNlbGYuX2Fzc2VydF9mbiA9IGFzc2VydF9mbgorICAgICAgICBzZWxmLl9lcnJvcnMgPSBb
XQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHVudXNlZF9maWxlbmFtZSwgdW51c2VkX2xpbmVu
dW0sCisgICAgICAgICAgICAgICAgIGNhdGVnb3J5LCBjb25maWRlbmNlLCBtZXNzYWdlKToKKyAg
ICAgICAgc2VsZi5fYXNzZXJ0X2ZuKGNhdGVnb3J5IGluIHNlbGYuX2FsbF9zdHlsZV9jYXRlZ29y
aWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgJ01lc3NhZ2UgIiVzIiBoYXMgY2F0ZWdvcnkg
IiVzIiwnCisgICAgICAgICAgICAgICAgICAgICAgICAnIHdoaWNoIGlzIG5vdCBpbiBTVFlMRV9D
QVRFR09SSUVTJyAlIChtZXNzYWdlLCBjYXRlZ29yeSkpCisgICAgICAgIHNlbGYuX3NlZW5fc3R5
bGVfY2F0ZWdvcmllc1tjYXRlZ29yeV0gPSAxCisgICAgICAgIGlmIGNwcF9zdHlsZS5fc2hvdWxk
X3ByaW50X2Vycm9yKGNhdGVnb3J5LCBjb25maWRlbmNlKToKKyAgICAgICAgICAgIHNlbGYuX2Vy
cm9ycy5hcHBlbmQoJyVzICBbJXNdIFslZF0nICUgKG1lc3NhZ2UsIGNhdGVnb3J5LCBjb25maWRl
bmNlKSkKKworICAgIGRlZiByZXN1bHRzKHNlbGYpOgorICAgICAgICBpZiBsZW4oc2VsZi5fZXJy
b3JzKSA8IDI6CisgICAgICAgICAgICByZXR1cm4gJycuam9pbihzZWxmLl9lcnJvcnMpICAjIE1v
c3QgdGVzdHMgZXhwZWN0IHRvIGhhdmUgYSBzdHJpbmcuCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICByZXR1cm4gc2VsZi5fZXJyb3JzICAjIExldCdzIGdpdmUgYSBsaXN0IGlmIHRoZXJlIGlz
IG1vcmUgdGhhbiBvbmUuCisKKyAgICBkZWYgcmVzdWx0X2xpc3Qoc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLl9lcnJvcnMKKworICAgIGRlZiB2ZXJpZnlfYWxsX2NhdGVnb3JpZXNfYXJlX3Nl
ZW4oc2VsZik6CisgICAgICAgICIiIkZhaWxzIGlmIHRoZXJlJ3MgYSBjYXRlZ29yeSBpbiBfYWxs
X3N0eWxlX2NhdGVnb3JpZXMgLSBfc2Vlbl9zdHlsZV9jYXRlZ29yaWVzLgorCisgICAgICAgIFRo
aXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGFsbCB0ZXN0cyBhcmUgcnVuLCBzbworICAg
ICAgICBfc2Vlbl9zdHlsZV9jYXRlZ29yaWVzIGhhcyBoYWQgYSBjaGFuY2UgdG8gZnVsbHkgcG9w
dWxhdGUuICBTaW5jZQorICAgICAgICB0aGlzIGlzbid0IGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUg
bm9ybWFsIHVuaXR0ZXN0IGZyYW1ld29yaywgd2UKKyAgICAgICAgY2FuJ3QgdXNlIHRoZSBub3Jt
YWwgdW5pdHRlc3QgYXNzZXJ0IG1hY3Jvcy4gIEluc3RlYWQgd2UganVzdCBleGl0CisgICAgICAg
IHdoZW4gd2Ugc2VlIGFuIGVycm9yLiAgR29vZCB0aGluZyB0aGlzIHRlc3QgaXMgYWx3YXlzIHJ1
biBsYXN0IQorICAgICAgICAiIiIKKyAgICAgICAgZm9yIGNhdGVnb3J5IGluIHNlbGYuX2FsbF9z
dHlsZV9jYXRlZ29yaWVzOgorICAgICAgICAgICAgaWYgY2F0ZWdvcnkgbm90IGluIHNlbGYuX3Nl
ZW5fc3R5bGVfY2F0ZWdvcmllczoKKyAgICAgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAg
ICAgICAgICAgc3lzLmV4aXQoJ0ZBVEFMIEVSUk9SOiBUaGVyZSBhcmUgbm8gdGVzdHMgZm9yIGNh
dGVnb3J5ICIlcyInICUgY2F0ZWdvcnkpCisKKyAgICBkZWYgcmVtb3ZlX2lmX3ByZXNlbnQoc2Vs
Ziwgc3Vic3RyKToKKyAgICAgICAgZm9yIChpbmRleCwgZXJyb3IpIGluIGVudW1lcmF0ZShzZWxm
Ll9lcnJvcnMpOgorICAgICAgICAgICAgaWYgZXJyb3IuZmluZChzdWJzdHIpICE9IC0xOgorICAg
ICAgICAgICAgICAgIHNlbGYuX2Vycm9ycyA9IHNlbGYuX2Vycm9yc1swOmluZGV4XSArIHNlbGYu
X2Vycm9yc1soaW5kZXggKyAxKTpdCisgICAgICAgICAgICAgICAgYnJlYWsKKworCisjIFRoaXMg
Y2xhc3MgaXMgYSBsYW1lIG1vY2sgb2YgY29kZWNzLiBXZSBkbyBub3QgdmVyaWZ5IGZpbGVuYW1l
LCBtb2RlLCBvcgorIyBlbmNvZGluZywgYnV0IGZvciB0aGUgY3VycmVudCB1c2UgY2FzZSBpdCBp
cyBub3QgbmVlZGVkLgorY2xhc3MgTW9ja0lvOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2Nr
X2ZpbGUpOgorICAgICAgICBzZWxmLm1vY2tfZmlsZSA9IG1vY2tfZmlsZQorCisgICAgZGVmIG9w
ZW4oc2VsZiwgdW51c2VkX2ZpbGVuYW1lLCB1bnVzZWRfbW9kZSwgdW51c2VkX2VuY29kaW5nLCBf
KTogICMgTk9MSU5UCisgICAgICAgICMgKGxpbnQgZG9lc24ndCBsaWtlIG9wZW4gYXMgYSBtZXRo
b2QgbmFtZSkKKyAgICAgICAgcmV0dXJuIHNlbGYubW9ja19maWxlCisKKworY2xhc3MgQ3BwU3R5
bGVUZXN0QmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiUHJvdmlkZXMgc29tZSB1c2Vm
dWwgaGVscGVyIGZ1bmN0aW9ucyBmb3IgY3BwX3N0eWxlIHRlc3RzLiIiIgorCisgICAgIyBQZXJm
b3JtIGxpbnQgb24gc2luZ2xlIGxpbmUgb2YgaW5wdXQgYW5kIHJldHVybiB0aGUgZXJyb3IgbWVz
c2FnZS4KKyAgICBkZWYgcGVyZm9ybV9zaW5nbGVfbGluZV9saW50KHNlbGYsIGNvZGUsIGZpbGVf
bmFtZSk6CisgICAgICAgIGVycm9yX2NvbGxlY3RvciA9IEVycm9yQ29sbGVjdG9yKHNlbGYuYXNz
ZXJ0XykKKyAgICAgICAgbGluZXMgPSBjb2RlLnNwbGl0KCdcbicpCisgICAgICAgIGNwcF9zdHls
ZS5yZW1vdmVfbXVsdGlfbGluZV9jb21tZW50cyhmaWxlX25hbWUsIGxpbmVzLCBlcnJvcl9jb2xs
ZWN0b3IpCisgICAgICAgIGNsZWFuX2xpbmVzID0gY3BwX3N0eWxlLkNsZWFuc2VkTGluZXMobGlu
ZXMpCisgICAgICAgIGluY2x1ZGVfc3RhdGUgPSBjcHBfc3R5bGUuX0luY2x1ZGVTdGF0ZSgpCisg
ICAgICAgIGZ1bmN0aW9uX3N0YXRlID0gY3BwX3N0eWxlLl9GdW5jdGlvblN0YXRlKCkKKyAgICAg
ICAgZXh0ID0gZmlsZV9uYW1lW2ZpbGVfbmFtZS5yZmluZCgnLicpICsgMTpdCisgICAgICAgIGNs
YXNzX3N0YXRlID0gY3BwX3N0eWxlLl9DbGFzc1N0YXRlKCkKKyAgICAgICAgZmlsZV9zdGF0ZSA9
IGNwcF9zdHlsZS5fRmlsZVN0YXRlKCkKKyAgICAgICAgY3BwX3N0eWxlLnByb2Nlc3NfbGluZShm
aWxlX25hbWUsIGV4dCwgY2xlYW5fbGluZXMsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5jbHVkZV9zdGF0ZSwgZnVuY3Rpb25fc3RhdGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2xhc3Nfc3RhdGUsIGZpbGVfc3RhdGUsIGVycm9yX2NvbGxlY3RvcikKKyAg
ICAgICAgIyBTaW5nbGUtbGluZSBsaW50IHRlc3RzIGFyZSBhbGxvd2VkIHRvIGZhaWwgdGhlICd1
bmxpbnRhYmxlIGZ1bmN0aW9uJworICAgICAgICAjIGNoZWNrLgorICAgICAgICBlcnJvcl9jb2xs
ZWN0b3IucmVtb3ZlX2lmX3ByZXNlbnQoCisgICAgICAgICAgICAnTGludCBmYWlsZWQgdG8gZmlu
ZCBzdGFydCBvZiBmdW5jdGlvbiBib2R5LicpCisgICAgICAgIHJldHVybiBlcnJvcl9jb2xsZWN0
b3IucmVzdWx0cygpCisKKyAgICAjIFBlcmZvcm0gbGludCBvdmVyIG11bHRpcGxlIGxpbmVzIGFu
ZCByZXR1cm4gdGhlIGVycm9yIG1lc3NhZ2UuCisgICAgZGVmIHBlcmZvcm1fbXVsdGlfbGluZV9s
aW50KHNlbGYsIGNvZGUsIGZpbGVfbmFtZSk6CisgICAgICAgIGVycm9yX2NvbGxlY3RvciA9IEVy
cm9yQ29sbGVjdG9yKHNlbGYuYXNzZXJ0XykKKyAgICAgICAgbGluZXMgPSBjb2RlLnNwbGl0KCdc
bicpCisgICAgICAgIGNwcF9zdHlsZS5yZW1vdmVfbXVsdGlfbGluZV9jb21tZW50cyhmaWxlX25h
bWUsIGxpbmVzLCBlcnJvcl9jb2xsZWN0b3IpCisgICAgICAgIGxpbmVzID0gY3BwX3N0eWxlLkNs
ZWFuc2VkTGluZXMobGluZXMpCisgICAgICAgIGV4dCA9IGZpbGVfbmFtZVtmaWxlX25hbWUucmZp
bmQoJy4nKSArIDE6XQorICAgICAgICBjbGFzc19zdGF0ZSA9IGNwcF9zdHlsZS5fQ2xhc3NTdGF0
ZSgpCisgICAgICAgIGZpbGVfc3RhdGUgPSBjcHBfc3R5bGUuX0ZpbGVTdGF0ZSgpCisgICAgICAg
IGZvciBpIGluIHhyYW5nZShsaW5lcy5udW1fbGluZXMoKSk6CisgICAgICAgICAgICBjcHBfc3R5
bGUuY2hlY2tfc3R5bGUoZmlsZV9uYW1lLCBsaW5lcywgaSwgZXh0LCBmaWxlX3N0YXRlLCBlcnJv
cl9jb2xsZWN0b3IpCisgICAgICAgICAgICBjcHBfc3R5bGUuY2hlY2tfZm9yX25vbl9zdGFuZGFy
ZF9jb25zdHJ1Y3RzKGZpbGVfbmFtZSwgbGluZXMsIGksIGNsYXNzX3N0YXRlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2xs
ZWN0b3IpCisgICAgICAgIGNsYXNzX3N0YXRlLmNoZWNrX2ZpbmlzaGVkKGZpbGVfbmFtZSwgZXJy
b3JfY29sbGVjdG9yKQorICAgICAgICByZXR1cm4gZXJyb3JfY29sbGVjdG9yLnJlc3VsdHMoKQor
CisgICAgIyBTaW1pbGFyIHRvIHBlcmZvcm1fbXVsdGlfbGluZV9saW50LCBidXQgY2FsbHMgY2hl
Y2tfbGFuZ3VhZ2UgaW5zdGVhZCBvZgorICAgICMgY2hlY2tfZm9yX25vbl9zdGFuZGFyZF9jb25z
dHJ1Y3RzCisgICAgZGVmIHBlcmZvcm1fbGFuZ3VhZ2VfcnVsZXNfY2hlY2soc2VsZiwgZmlsZV9u
YW1lLCBjb2RlKToKKyAgICAgICAgZXJyb3JfY29sbGVjdG9yID0gRXJyb3JDb2xsZWN0b3Ioc2Vs
Zi5hc3NlcnRfKQorICAgICAgICBpbmNsdWRlX3N0YXRlID0gY3BwX3N0eWxlLl9JbmNsdWRlU3Rh
dGUoKQorICAgICAgICBsaW5lcyA9IGNvZGUuc3BsaXQoJ1xuJykKKyAgICAgICAgY3BwX3N0eWxl
LnJlbW92ZV9tdWx0aV9saW5lX2NvbW1lbnRzKGZpbGVfbmFtZSwgbGluZXMsIGVycm9yX2NvbGxl
Y3RvcikKKyAgICAgICAgbGluZXMgPSBjcHBfc3R5bGUuQ2xlYW5zZWRMaW5lcyhsaW5lcykKKyAg
ICAgICAgZXh0ID0gZmlsZV9uYW1lW2ZpbGVfbmFtZS5yZmluZCgnLicpICsgMTpdCisgICAgICAg
IGZvciBpIGluIHhyYW5nZShsaW5lcy5udW1fbGluZXMoKSk6CisgICAgICAgICAgICBjcHBfc3R5
bGUuY2hlY2tfbGFuZ3VhZ2UoZmlsZV9uYW1lLCBsaW5lcywgaSwgZXh0LCBpbmNsdWRlX3N0YXRl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvbGxlY3RvcikK
KyAgICAgICAgcmV0dXJuIGVycm9yX2NvbGxlY3Rvci5yZXN1bHRzKCkKKworICAgIGRlZiBwZXJm
b3JtX2Z1bmN0aW9uX2xlbmd0aHNfY2hlY2soc2VsZiwgY29kZSk6CisgICAgICAgICIiIlBlcmZv
cm0gTGludCBmdW5jdGlvbiBsZW5ndGggY2hlY2sgb24gYmxvY2sgb2YgY29kZSBhbmQgcmV0dXJu
IHdhcm5pbmdzLgorCisgICAgICAgIEJ1aWxkcyB1cCBhbiBhcnJheSBvZiBsaW5lcyBjb3JyZXNw
b25kaW5nIHRvIHRoZSBjb2RlIGFuZCBzdHJpcHMgY29tbWVudHMKKyAgICAgICAgdXNpbmcgY3Bw
X3N0eWxlIGZ1bmN0aW9ucy4KKworICAgICAgICBFc3RhYmxpc2hlcyBhbiBlcnJvciBjb2xsZWN0
b3IgYW5kIGludm9rZXMgdGhlIGZ1bmN0aW9uIGxlbmd0aCBjaGVja2luZworICAgICAgICBmdW5j
dGlvbiBmb2xsb3dpbmcgY3BwX3N0eWxlJ3MgcGF0dGVybi4KKworICAgICAgICBBcmdzOgorICAg
ICAgICAgIGNvZGU6IEMrKyBzb3VyY2UgY29kZSBleHBlY3RlZCB0byBnZW5lcmF0ZSBhIHdhcm5p
bmcgbWVzc2FnZS4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgIFRoZSBhY2N1bXVsYXRl
ZCBlcnJvcnMuCisgICAgICAgICIiIgorICAgICAgICBmaWxlX25hbWUgPSAnZm9vLmNwcCcKKyAg
ICAgICAgZXJyb3JfY29sbGVjdG9yID0gRXJyb3JDb2xsZWN0b3Ioc2VsZi5hc3NlcnRfKQorICAg
ICAgICBmdW5jdGlvbl9zdGF0ZSA9IGNwcF9zdHlsZS5fRnVuY3Rpb25TdGF0ZSgpCisgICAgICAg
IGxpbmVzID0gY29kZS5zcGxpdCgnXG4nKQorICAgICAgICBjcHBfc3R5bGUucmVtb3ZlX211bHRp
X2xpbmVfY29tbWVudHMoZmlsZV9uYW1lLCBsaW5lcywgZXJyb3JfY29sbGVjdG9yKQorICAgICAg
ICBsaW5lcyA9IGNwcF9zdHlsZS5DbGVhbnNlZExpbmVzKGxpbmVzKQorICAgICAgICBmb3IgaSBp
biB4cmFuZ2UobGluZXMubnVtX2xpbmVzKCkpOgorICAgICAgICAgICAgY3BwX3N0eWxlLmNoZWNr
X2Zvcl9mdW5jdGlvbl9sZW5ndGhzKGZpbGVfbmFtZSwgbGluZXMsIGksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25fc3RhdGUsIGVycm9y
X2NvbGxlY3RvcikKKyAgICAgICAgcmV0dXJuIGVycm9yX2NvbGxlY3Rvci5yZXN1bHRzKCkKKwor
ICAgIGRlZiBwZXJmb3JtX2luY2x1ZGVfd2hhdF95b3VfdXNlKHNlbGYsIGNvZGUsIGZpbGVuYW1l
PSdmb28uaCcsIGlvPWNvZGVjcyk6CisgICAgICAgICMgRmlyc3QsIGJ1aWxkIHVwIHRoZSBpbmNs
dWRlIHN0YXRlLgorICAgICAgICBlcnJvcl9jb2xsZWN0b3IgPSBFcnJvckNvbGxlY3RvcihzZWxm
LmFzc2VydF8pCisgICAgICAgIGluY2x1ZGVfc3RhdGUgPSBjcHBfc3R5bGUuX0luY2x1ZGVTdGF0
ZSgpCisgICAgICAgIGxpbmVzID0gY29kZS5zcGxpdCgnXG4nKQorICAgICAgICBjcHBfc3R5bGUu
cmVtb3ZlX211bHRpX2xpbmVfY29tbWVudHMoZmlsZW5hbWUsIGxpbmVzLCBlcnJvcl9jb2xsZWN0
b3IpCisgICAgICAgIGxpbmVzID0gY3BwX3N0eWxlLkNsZWFuc2VkTGluZXMobGluZXMpCisgICAg
ICAgIGZvciBpIGluIHhyYW5nZShsaW5lcy5udW1fbGluZXMoKSk6CisgICAgICAgICAgICBjcHBf
c3R5bGUuY2hlY2tfbGFuZ3VhZ2UoZmlsZW5hbWUsIGxpbmVzLCBpLCAnLmgnLCBpbmNsdWRlX3N0
YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvbGxlY3Rv
cikKKyAgICAgICAgIyBXZSBjb3VsZCBjbGVhciB0aGUgZXJyb3JfY29sbGVjdG9yIGhlcmUsIGJ1
dCB0aGlzIHNob3VsZAorICAgICAgICAjIGFsc28gYmUgZmluZSwgc2luY2Ugb3VyIEluY2x1ZGVX
aGF0WW91VXNlIHVuaXR0ZXN0cyBkbyBub3QKKyAgICAgICAgIyBoYXZlIGxhbmd1YWdlIHByb2Js
ZW1zLgorCisgICAgICAgICMgU2Vjb25kLCBsb29rIGZvciBtaXNzaW5nIGluY2x1ZGVzLgorICAg
ICAgICBjcHBfc3R5bGUuY2hlY2tfZm9yX2luY2x1ZGVfd2hhdF95b3VfdXNlKGZpbGVuYW1lLCBs
aW5lcywgaW5jbHVkZV9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlcnJvcl9jb2xsZWN0b3IsIGlvKQorICAgICAgICByZXR1cm4gZXJyb3Jf
Y29sbGVjdG9yLnJlc3VsdHMoKQorCisgICAgIyBQZXJmb3JtIGxpbnQgYW5kIGNvbXBhcmUgdGhl
IGVycm9yIG1lc3NhZ2Ugd2l0aCAiZXhwZWN0ZWRfbWVzc2FnZSIuCisgICAgZGVmIGFzc2VydF9s
aW50KHNlbGYsIGNvZGUsIGV4cGVjdGVkX21lc3NhZ2UsIGZpbGVfbmFtZT0nZm9vLmNwcCcpOgor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3RlZF9tZXNzYWdlLCBzZWxmLnBlcmZvcm1f
c2luZ2xlX2xpbmVfbGludChjb2RlLCBmaWxlX25hbWUpKQorCisgICAgZGVmIGFzc2VydF9saW50
X29uZV9vZl9tYW55X2Vycm9yc19yZShzZWxmLCBjb2RlLCBleHBlY3RlZF9tZXNzYWdlX3JlLCBm
aWxlX25hbWU9J2Zvby5jcHAnKToKKyAgICAgICAgbWVzc2FnZXMgPSBzZWxmLnBlcmZvcm1fc2lu
Z2xlX2xpbmVfbGludChjb2RlLCBmaWxlX25hbWUpCisgICAgICAgIGZvciBtZXNzYWdlIGluIG1l
c3NhZ2VzOgorICAgICAgICAgICAgaWYgcmUuc2VhcmNoKGV4cGVjdGVkX21lc3NhZ2VfcmUsIG1l
c3NhZ2UpOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKGV4cGVjdGVkX21lc3NhZ2UsIG1lc3NhZ2VzKQorCisgICAgZGVmIGFzc2VydF9tdWx0aV9s
aW5lX2xpbnQoc2VsZiwgY29kZSwgZXhwZWN0ZWRfbWVzc2FnZSwgZmlsZV9uYW1lPSdmb28uaCcp
OgorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3RlZF9tZXNzYWdlLCBzZWxmLnBlcmZv
cm1fbXVsdGlfbGluZV9saW50KGNvZGUsIGZpbGVfbmFtZSkpCisKKyAgICBkZWYgYXNzZXJ0X211
bHRpX2xpbmVfbGludF9yZShzZWxmLCBjb2RlLCBleHBlY3RlZF9tZXNzYWdlX3JlLCBmaWxlX25h
bWU9J2Zvby5oJyk6CisgICAgICAgIG1lc3NhZ2UgPSBzZWxmLnBlcmZvcm1fbXVsdGlfbGluZV9s
aW50KGNvZGUsIGZpbGVfbmFtZSkKKyAgICAgICAgaWYgbm90IHJlLnNlYXJjaChleHBlY3RlZF9t
ZXNzYWdlX3JlLCBtZXNzYWdlKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnTWVzc2FnZSB3YXM6
XG4nICsgbWVzc2FnZSArICdFeHBlY3RlZCBtYXRjaCB0byAiJyArIGV4cGVjdGVkX21lc3NhZ2Vf
cmUgKyAnIicpCisKKyAgICBkZWYgYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKHNlbGYsIGZp
bGVfbmFtZSwgY29kZSwgZXhwZWN0ZWRfbWVzc2FnZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKGV4cGVjdGVkX21lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGVy
Zm9ybV9sYW5ndWFnZV9ydWxlc19jaGVjayhmaWxlX25hbWUsIGNvZGUpKQorCisgICAgZGVmIGFz
c2VydF9pbmNsdWRlX3doYXRfeW91X3VzZShzZWxmLCBjb2RlLCBleHBlY3RlZF9tZXNzYWdlKToK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRfbWVzc2FnZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5wZXJmb3JtX2luY2x1ZGVfd2hhdF95b3VfdXNlKGNvZGUpKQor
CisgICAgZGVmIGFzc2VydF9ibGFua19saW5lc19jaGVjayhzZWxmLCBsaW5lcywgc3RhcnRfZXJy
b3JzLCBlbmRfZXJyb3JzKToKKyAgICAgICAgZXJyb3JfY29sbGVjdG9yID0gRXJyb3JDb2xsZWN0
b3Ioc2VsZi5hc3NlcnRfKQorICAgICAgICBjcHBfc3R5bGUucHJvY2Vzc19maWxlX2RhdGEoJ2Zv
by5jcHAnLCAnY3BwJywgbGluZXMsIGVycm9yX2NvbGxlY3RvcikKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMoCisgICAgICAgICAgICBzdGFydF9lcnJvcnMsCisgICAgICAgICAgICBlcnJvcl9j
b2xsZWN0b3IucmVzdWx0cygpLmNvdW50KAorICAgICAgICAgICAgICAgICdCbGFuayBsaW5lIGF0
IHRoZSBzdGFydCBvZiBhIGNvZGUgYmxvY2suICBJcyB0aGlzIG5lZWRlZD8nCisgICAgICAgICAg
ICAgICAgJyAgW3doaXRlc3BhY2UvYmxhbmtfbGluZV0gWzJdJykpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKAorICAgICAgICAgICAgZW5kX2Vycm9ycywKKyAgICAgICAgICAgIGVycm9yX2Nv
bGxlY3Rvci5yZXN1bHRzKCkuY291bnQoCisgICAgICAgICAgICAgICAgJ0JsYW5rIGxpbmUgYXQg
dGhlIGVuZCBvZiBhIGNvZGUgYmxvY2suICBJcyB0aGlzIG5lZWRlZD8nCisgICAgICAgICAgICAg
ICAgJyAgW3doaXRlc3BhY2UvYmxhbmtfbGluZV0gWzNdJykpCisKKworY2xhc3MgQ3BwU3R5bGVU
ZXN0KENwcFN0eWxlVGVzdEJhc2UpOgorCisgICAgIyBUZXN0IGdldCBsaW5lIHdpZHRoLgorICAg
IGRlZiB0ZXN0X2dldF9saW5lX3dpZHRoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cygwLCBjcHBfc3R5bGUuZ2V0X2xpbmVfd2lkdGgoJycpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscygxMCwgY3BwX3N0eWxlLmdldF9saW5lX3dpZHRoKHUneCcgKiAxMCkpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKDE2LCBjcHBfc3R5bGUuZ2V0X2xpbmVfd2lkdGgodSfpg7186YGTfOW6
nHznnIx85pSv5bqBJykpCisKKyAgICBkZWYgdGVzdF9maW5kX25leHRfbXVsdGlfbGluZV9jb21t
ZW50X3N0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygxLCBjcHBfc3R5bGUu
ZmluZF9uZXh0X211bHRpX2xpbmVfY29tbWVudF9zdGFydChbJyddLCAwKSkKKworICAgICAgICBs
aW5lcyA9IFsnYScsICdiJywgJy8qIGMnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygyLCBj
cHBfc3R5bGUuZmluZF9uZXh0X211bHRpX2xpbmVfY29tbWVudF9zdGFydChsaW5lcywgMCkpCisK
KyAgICAgICAgbGluZXMgPSBbJ2NoYXIgYVtdID0gIi8qIjsnXSAgIyBub3QgcmVjb2duaXplZCBh
cyBjb21tZW50LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygxLCBjcHBfc3R5bGUuZmluZF9u
ZXh0X211bHRpX2xpbmVfY29tbWVudF9zdGFydChsaW5lcywgMCkpCisKKyAgICBkZWYgdGVzdF9m
aW5kX25leHRfbXVsdGlfbGluZV9jb21tZW50X2VuZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMoMSwgY3BwX3N0eWxlLmZpbmRfbmV4dF9tdWx0aV9saW5lX2NvbW1lbnRfZW5kKFsn
J10sIDApKQorICAgICAgICBsaW5lcyA9IFsnYScsICdiJywgJyBjICovJ10KKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoMiwgY3BwX3N0eWxlLmZpbmRfbmV4dF9tdWx0aV9saW5lX2NvbW1lbnRf
ZW5kKGxpbmVzLCAwKSkKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9tdWx0aV9saW5lX2NvbW1lbnRz
X2Zyb21fcmFuZ2Uoc2VsZik6CisgICAgICAgIGxpbmVzID0gWydhJywgJyAgLyogY29tbWVudCAn
LCAnICogc3RpbGwgY29tbWVudCcsICcgY29tbWVudCAqLyAgICcsICdiJ10KKyAgICAgICAgY3Bw
X3N0eWxlLnJlbW92ZV9tdWx0aV9saW5lX2NvbW1lbnRzX2Zyb21fcmFuZ2UobGluZXMsIDEsIDQp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsnYScsICcvLyBkdW1teScsICcvLyBkdW1teScs
ICcvLyBkdW1teScsICdiJ10sIGxpbmVzKQorCisgICAgZGVmIHRlc3Rfc3BhY2VzX2F0X2VuZF9v
Zl9saW5lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9saW50KAorICAgICAgICAgICAgJy8v
IEhlbGxvIHRoZXJlICcsCisgICAgICAgICAgICAnTGluZSBlbmRzIGluIHdoaXRlc3BhY2UuICBD
b25zaWRlciBkZWxldGluZyB0aGVzZSBleHRyYSBzcGFjZXMuJworICAgICAgICAgICAgJyAgW3do
aXRlc3BhY2UvZW5kX29mX2xpbmVdIFs0XScpCisKKyAgICAjIFRlc3QgQy1zdHlsZSBjYXN0IGNh
c2VzLgorICAgIGRlZiB0ZXN0X2NzdHlsZV9jYXN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2Vy
dF9saW50KAorICAgICAgICAgICAgJ2ludCBhID0gKGludCkxLjA7JywKKyAgICAgICAgICAgICdV
c2luZyBDLXN0eWxlIGNhc3QuICBVc2Ugc3RhdGljX2Nhc3Q8aW50PiguLi4pIGluc3RlYWQnCisg
ICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY2FzdGluZ10gWzRdJykKKyAgICAgICAgc2VsZi5h
c3NlcnRfbGludCgKKyAgICAgICAgICAgICdpbnQgKmEgPSAoaW50ICopREVGSU5FRF9WQUxVRTsn
LAorICAgICAgICAgICAgJ1VzaW5nIEMtc3R5bGUgY2FzdC4gIFVzZSByZWludGVycHJldF9jYXN0
PGludCAqPiguLi4pIGluc3RlYWQnCisgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY2FzdGlu
Z10gWzRdJywgJ2Zvby5jJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKKyAgICAgICAgICAg
ICd1aW50MTYgYSA9ICh1aW50MTYpMS4wOycsCisgICAgICAgICAgICAnVXNpbmcgQy1zdHlsZSBj
YXN0LiAgVXNlIHN0YXRpY19jYXN0PHVpbnQxNj4oLi4uKSBpbnN0ZWFkJworICAgICAgICAgICAg
JyAgW3JlYWRhYmlsaXR5L2Nhc3RpbmddIFs0XScpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQo
CisgICAgICAgICAgICAnaW50MzIgYSA9IChpbnQzMikxLjA7JywKKyAgICAgICAgICAgICdVc2lu
ZyBDLXN0eWxlIGNhc3QuICBVc2Ugc3RhdGljX2Nhc3Q8aW50MzI+KC4uLikgaW5zdGVhZCcKKyAg
ICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9jYXN0aW5nXSBbNF0nKQorICAgICAgICBzZWxmLmFz
c2VydF9saW50KAorICAgICAgICAgICAgJ3VpbnQ2NCBhID0gKHVpbnQ2NCkxLjA7JywKKyAgICAg
ICAgICAgICdVc2luZyBDLXN0eWxlIGNhc3QuICBVc2Ugc3RhdGljX2Nhc3Q8dWludDY0PiguLi4p
IGluc3RlYWQnCisgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY2FzdGluZ10gWzRdJykKKwor
ICAgICMgVGVzdCB0YWtpbmcgYWRkcmVzcyBvZiBjYXN0cyAocnVudGltZS9jYXN0aW5nKQorICAg
IGRlZiB0ZXN0X3J1bnRpbWVfY2FzdGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgKKyAgICAgICAgICAgICdpbnQqIHggPSAmc3RhdGljX2Nhc3Q8aW50Kj4oZm9vKTsnLAorICAg
ICAgICAgICAgJ0FyZSB5b3UgdGFraW5nIGFuIGFkZHJlc3Mgb2YgYSBjYXN0PyAgJworICAgICAg
ICAgICAgJ1RoaXMgaXMgZGFuZ2Vyb3VzOiBjb3VsZCBiZSBhIHRlbXAgdmFyLiAgJworICAgICAg
ICAgICAgJ1Rha2UgdGhlIGFkZHJlc3MgYmVmb3JlIGRvaW5nIHRoZSBjYXN0LCByYXRoZXIgdGhh
biBhZnRlcicKKyAgICAgICAgICAgICcgIFtydW50aW1lL2Nhc3RpbmddIFs0XScpCisKKyAgICAg
ICAgc2VsZi5hc3NlcnRfbGludCgKKyAgICAgICAgICAgICdpbnQqIHggPSAmZHluYW1pY19jYXN0
PGludCAqPihmb28pOycsCisgICAgICAgICAgICBbJ0FyZSB5b3UgdGFraW5nIGFuIGFkZHJlc3Mg
b2YgYSBjYXN0PyAgJworICAgICAgICAgICAgICdUaGlzIGlzIGRhbmdlcm91czogY291bGQgYmUg
YSB0ZW1wIHZhci4gICcKKyAgICAgICAgICAgICAnVGFrZSB0aGUgYWRkcmVzcyBiZWZvcmUgZG9p
bmcgdGhlIGNhc3QsIHJhdGhlciB0aGFuIGFmdGVyJworICAgICAgICAgICAgICcgIFtydW50aW1l
L2Nhc3RpbmddIFs0XScsCisgICAgICAgICAgICAgJ0RvIG5vdCB1c2UgZHluYW1pY19jYXN0PD4u
ICBJZiB5b3UgbmVlZCB0byBjYXN0IHdpdGhpbiBhIGNsYXNzICcKKyAgICAgICAgICAgICAnaGll
cmFyY2h5LCB1c2Ugc3RhdGljX2Nhc3Q8PiB0byB1cGNhc3QuICBHb29nbGUgZG9lc25cJ3Qgc3Vw
cG9ydCAnCisgICAgICAgICAgICAgJ1JUVEkuICBbcnVudGltZS9ydHRpXSBbNV0nXSkKKworICAg
ICAgICBzZWxmLmFzc2VydF9saW50KAorICAgICAgICAgICAgJ2ludCogeCA9ICZyZWludGVycHJl
dF9jYXN0PGludCAqPihmb28pOycsCisgICAgICAgICAgICAnQXJlIHlvdSB0YWtpbmcgYW4gYWRk
cmVzcyBvZiBhIGNhc3Q/ICAnCisgICAgICAgICAgICAnVGhpcyBpcyBkYW5nZXJvdXM6IGNvdWxk
IGJlIGEgdGVtcCB2YXIuICAnCisgICAgICAgICAgICAnVGFrZSB0aGUgYWRkcmVzcyBiZWZvcmUg
ZG9pbmcgdGhlIGNhc3QsIHJhdGhlciB0aGFuIGFmdGVyJworICAgICAgICAgICAgJyAgW3J1bnRp
bWUvY2FzdGluZ10gWzRdJykKKworICAgICAgICAjIEl0J3MgT0sgdG8gY2FzdCBhbiBhZGRyZXNz
LgorICAgICAgICBzZWxmLmFzc2VydF9saW50KAorICAgICAgICAgICAgJ2ludCogeCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8aW50ICo+KCZmb28pOycsCisgICAgICAgICAgICAnJykKKworICAgIGRlZiB0
ZXN0X3J1bnRpbWVfc2VsZmluaXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisg
ICAgICAgICAgICAnRm9vOjpGb28oQmFyIHIsIEJlbCBsKSA6IHJfKHJfKSwgbF8obF8pIHsgfScs
CisgICAgICAgICAgICAnWW91IHNlZW0gdG8gYmUgaW5pdGlhbGl6aW5nIGEgbWVtYmVyIHZhcmlh
YmxlIHdpdGggaXRzZWxmLicKKyAgICAgICAgICAgICcgIFtydW50aW1lL2luaXRdIFs0XScpCisg
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAgICAnRm9vOjpGb28oQmFyIHIsIEJl
bCBsKSA6IHJfKHIpLCBsXyhsKSB7IH0nLAorICAgICAgICAgICAgJycpCisgICAgICAgIHNlbGYu
YXNzZXJ0X2xpbnQoCisgICAgICAgICAgICAnRm9vOjpGb28oQmFyIHIpIDogcl8ociksIGxfKHJf
KSwgbGxfKGxfKSB7IH0nLAorICAgICAgICAgICAgJycpCisKKyAgICBkZWYgdGVzdF9ydW50aW1l
X3J0dGkoc2VsZik6CisgICAgICAgIHN0YXRlbWVudCA9ICdpbnQqIHggPSBkeW5hbWljX2Nhc3Q8
aW50Kj4oJmZvbyk7JworICAgICAgICBlcnJvcl9tZXNzYWdlID0gKAorICAgICAgICAgICAgJ0Rv
IG5vdCB1c2UgZHluYW1pY19jYXN0PD4uICBJZiB5b3UgbmVlZCB0byBjYXN0IHdpdGhpbiBhIGNs
YXNzICcKKyAgICAgICAgICAgICdoaWVyYXJjaHksIHVzZSBzdGF0aWNfY2FzdDw+IHRvIHVwY2Fz
dC4gIEdvb2dsZSBkb2VzblwndCBzdXBwb3J0ICcKKyAgICAgICAgICAgICdSVFRJLiAgW3J1bnRp
bWUvcnR0aV0gWzVdJykKKyAgICAgICAgIyBkeW5hbWljX2Nhc3QgaXMgZGlzYWxsb3dlZCBpbiBt
b3N0IGZpbGVzLgorICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9v
LmNwcCcsIHN0YXRlbWVudCwgZXJyb3JfbWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRfbGFu
Z3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby5oJywgc3RhdGVtZW50LCBlcnJvcl9tZXNzYWdlKQorICAg
ICAgICAjIEl0IGlzIGV4cGxpY2l0bHkgYWxsb3dlZCBpbiB0ZXN0cywgaG93ZXZlci4KKyAgICAg
ICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvb190ZXN0LmNwcCcsIHN0YXRl
bWVudCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb29f
dW5pdHRlc3QuY3BwJywgc3RhdGVtZW50LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3Vh
Z2VfcnVsZXNfY2hlY2soJ2Zvb19yZWd0ZXN0LmNwcCcsIHN0YXRlbWVudCwgJycpCisKKyAgICAj
IFdlIGNhbm5vdCB0ZXN0IHRoaXMgZnVuY3Rpb25hbGl0eSBiZWNhdXNlIG9mIGRpZmZlcmVuY2Ug
b2YKKyAgICAjIGZ1bmN0aW9uIGRlZmluaXRpb25zLiAgQW55d2F5LCB3ZSBtYXkgbmV2ZXIgZW5h
YmxlIHRoaXMuCisgICAgIworICAgICMgIyBUZXN0IGZvciB1bm5hbWVkIGFyZ3VtZW50cyBpbiBh
IG1ldGhvZC4KKyAgICAjIGRlZiB0ZXN0X2NoZWNrX2Zvcl91bm5hbWVkX3BhcmFtcyhzZWxmKToK
KyAgICAjICAgbWVzc2FnZSA9ICgnQWxsIHBhcmFtZXRlcnMgc2hvdWxkIGJlIG5hbWVkIGluIGEg
ZnVuY3Rpb24nCisgICAgIyAgICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2Z1bmN0aW9uXSBb
M10nKQorICAgICMgICBzZWxmLmFzc2VydF9saW50KCd2aXJ0dWFsIHZvaWQgQShpbnQqKSBjb25z
dDsnLCBtZXNzYWdlKQorICAgICMgICBzZWxmLmFzc2VydF9saW50KCd2aXJ0dWFsIHZvaWQgQih2
b2lkICgqZm4pKGludCopKTsnLCBtZXNzYWdlKQorICAgICMgICBzZWxmLmFzc2VydF9saW50KCd2
aXJ0dWFsIHZvaWQgQyhpbnQqKTsnLCBtZXNzYWdlKQorICAgICMgICBzZWxmLmFzc2VydF9saW50
KCd2b2lkICooKmYpKHZvaWQgKikgPSB4OycsIG1lc3NhZ2UpCisgICAgIyAgIHNlbGYuYXNzZXJ0
X2xpbnQoJ3ZvaWQgTWV0aG9kKGNoYXIqKSB7JywgbWVzc2FnZSkKKyAgICAjICAgc2VsZi5hc3Nl
cnRfbGludCgndm9pZCBNZXRob2QoY2hhciopOycsIG1lc3NhZ2UpCisgICAgIyAgIHNlbGYuYXNz
ZXJ0X2xpbnQoJ3ZvaWQgTWV0aG9kKGNoYXIqIC8qeCovKTsnLCBtZXNzYWdlKQorICAgICMgICBz
ZWxmLmFzc2VydF9saW50KCd0eXBlZGVmIHZvaWQgKCpNZXRob2QpKGludDMyKTsnLCBtZXNzYWdl
KQorICAgICMgICBzZWxmLmFzc2VydF9saW50KCdzdGF0aWMgdm9pZCBvcGVyYXRvciBkZWxldGVb
XSh2b2lkKikgdGhyb3coKTsnLCBtZXNzYWdlKQorICAgICMgCisgICAgIyAgIHNlbGYuYXNzZXJ0
X2xpbnQoJ3ZpcnR1YWwgdm9pZCBEKGludCogcCk7JywgJycpCisgICAgIyAgIHNlbGYuYXNzZXJ0
X2xpbnQoJ3ZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHgpIHRocm93KCk7JywgJycpCisgICAg
IyAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3ZvaWQgTWV0aG9kKGNoYXIqIHgpXG57JywgJycpCisgICAg
IyAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3ZvaWQgTWV0aG9kKGNoYXIqIC8qeCovKVxueycsICcnKQor
ICAgICMgICBzZWxmLmFzc2VydF9saW50KCd2b2lkIE1ldGhvZChjaGFyKiB4KTsnLCAnJykKKyAg
ICAjICAgc2VsZi5hc3NlcnRfbGludCgndHlwZWRlZiB2b2lkICgqTWV0aG9kKShpbnQzMiB4KTsn
LCAnJykKKyAgICAjICAgc2VsZi5hc3NlcnRfbGludCgnc3RhdGljIHZvaWQgb3BlcmF0b3IgZGVs
ZXRlW10odm9pZCogeCkgdGhyb3coKTsnLCAnJykKKyAgICAjICAgc2VsZi5hc3NlcnRfbGludCgn
c3RhdGljIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCogLyp4Ki8pIHRocm93KCk7JywgJycp
CisgICAgIyAKKyAgICAjICAgIyBUaGlzIG9uZSBzaG91bGQgdGVjaG5pY2FsbHkgd2FybiwgYnV0
IGRvZXNuJ3QgYmVjYXVzZSB0aGUgZnVuY3Rpb24KKyAgICAjICAgIyBwb2ludGVyIGlzIGNvbmZ1
c2luZy4KKyAgICAjICAgc2VsZi5hc3NlcnRfbGludCgndmlydHVhbCB2b2lkIEUodm9pZCAoKmZu
KShpbnQqIHApKTsnLCAnJykKKworICAgICMgVGVzdCBkZXByZWNhdGVkIGNhc3RzIHN1Y2ggYXMg
aW50KGQpCisgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9jYXN0KHNlbGYpOgorICAgICAgICBzZWxm
LmFzc2VydF9saW50KAorICAgICAgICAgICAgJ2ludCBhID0gaW50KDIuMik7JywKKyAgICAgICAg
ICAgICdVc2luZyBkZXByZWNhdGVkIGNhc3Rpbmcgc3R5bGUuICAnCisgICAgICAgICAgICAnVXNl
IHN0YXRpY19jYXN0PGludD4oLi4uKSBpbnN0ZWFkJworICAgICAgICAgICAgJyAgW3JlYWRhYmls
aXR5L2Nhc3RpbmddIFs0XScpCisgICAgICAgICMgQ2hlY2tzIGZvciBmYWxzZSBwb3NpdGl2ZXMu
Li4KKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKKyAgICAgICAgICAgICdpbnQgYSA9IGludCgp
OyAvLyBDb25zdHJ1Y3Rvciwgby5rLicsCisgICAgICAgICAgICAnJykKKyAgICAgICAgc2VsZi5h
c3NlcnRfbGludCgKKyAgICAgICAgICAgICdYOjpYKCkgOiBhKGludCgpKSB7fSAvLyBkZWZhdWx0
IENvbnN0cnVjdG9yLCBvLmsuJywKKyAgICAgICAgICAgICcnKQorICAgICAgICBzZWxmLmFzc2Vy
dF9saW50KAorICAgICAgICAgICAgJ29wZXJhdG9yIGJvb2woKTsgLy8gQ29udmVyc2lvbiBvcGVy
YXRvciwgby5rLicsCisgICAgICAgICAgICAnJykKKworICAgICMgVGhlIHNlY29uZCBwYXJhbWV0
ZXIgdG8gYSBnTW9jayBtZXRob2QgZGVmaW5pdGlvbiBpcyBhIGZ1bmN0aW9uIHNpZ25hdHVyZQor
ICAgICMgdGhhdCBvZnRlbiBsb29rcyBsaWtlIGEgYmFkIGNhc3QgYnV0IHNob3VsZCBub3QgcGlj
a2VkIHVwIGJ5IGxpbnQuCisgICAgZGVmIHRlc3RfbW9ja19tZXRob2Qoc2VsZik6CisgICAgICAg
IHNlbGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAgICAnTU9DS19NRVRIT0QwKG1ldGhvZCwgaW50
KCkpOycsCisgICAgICAgICAgICAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKKyAgICAg
ICAgICAgICdNT0NLX0NPTlNUX01FVEhPRDEobWV0aG9kLCBmbG9hdChzdHJpbmcpKTsnLAorICAg
ICAgICAgICAgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAgICAnTU9D
S19DT05TVF9NRVRIT0QyX1QobWV0aG9kLCBkb3VibGUoZmxvYXQsIGZsb2F0KSk7JywKKyAgICAg
ICAgICAgICcnKQorCisgICAgIyBUZXN0IHNpemVvZih0eXBlKSBjYXNlcy4KKyAgICBkZWYgdGVz
dF9zaXplb2ZfdHlwZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKKyAgICAgICAg
ICAgICdzaXplb2YoaW50KTsnLAorICAgICAgICAgICAgJ1VzaW5nIHNpemVvZih0eXBlKS4gIFVz
ZSBzaXplb2YodmFybmFtZSkgaW5zdGVhZCBpZiBwb3NzaWJsZScKKyAgICAgICAgICAgICcgIFty
dW50aW1lL3NpemVvZl0gWzFdJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKKyAgICAgICAg
ICAgICdzaXplb2YoaW50ICopOycsCisgICAgICAgICAgICAnVXNpbmcgc2l6ZW9mKHR5cGUpLiAg
VXNlIHNpemVvZih2YXJuYW1lKSBpbnN0ZWFkIGlmIHBvc3NpYmxlJworICAgICAgICAgICAgJyAg
W3J1bnRpbWUvc2l6ZW9mXSBbMV0nKQorCisgICAgIyBUZXN0IHR5cGVkZWYgY2FzZXMuICBUaGVy
ZSB3YXMgYSBidWcgdGhhdCBjcHBfc3R5bGUgbWlzaWRlbnRpZmllZAorICAgICMgdHlwZWRlZiBm
b3IgcG9pbnRlciB0byBmdW5jdGlvbiBhcyBDLXN0eWxlIGNhc3QgYW5kIHByb2R1Y2VkCisgICAg
IyBmYWxzZS1wb3NpdGl2ZSBlcnJvciBtZXNzYWdlcy4KKyAgICBkZWYgdGVzdF90eXBlZGVmX2Zv
cl9wb2ludGVyX3RvX2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9saW50KAor
ICAgICAgICAgICAgJ3R5cGVkZWYgdm9pZCAoKkZ1bmMpKGludCB4KTsnLAorICAgICAgICAgICAg
JycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAgICAndHlwZWRlZiB2b2lk
ICgqRnVuYykoaW50ICp4KTsnLAorICAgICAgICAgICAgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0
X2xpbnQoCisgICAgICAgICAgICAndHlwZWRlZiB2b2lkIEZ1bmMoaW50IHgpOycsCisgICAgICAg
ICAgICAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKKyAgICAgICAgICAgICd0eXBlZGVm
IHZvaWQgRnVuYyhpbnQgKngpOycsCisgICAgICAgICAgICAnJykKKworICAgIGRlZiB0ZXN0X2lu
Y2x1ZGVfd2hhdF95b3VfdXNlX25vX2ltcGxlbWVudGF0aW9uX2ZpbGVzKHNlbGYpOgorICAgICAg
ICBjb2RlID0gJ3N0ZDo6dmVjdG9yPGludD4gZm9vOycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMoJ0FkZCAjaW5jbHVkZSA8dmVjdG9yPiBmb3IgdmVjdG9yPD4nCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICcgIFtidWlsZC9pbmNsdWRlX3doYXRfeW91X3VzZV0gWzRdJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5wZXJmb3JtX2luY2x1ZGVfd2hhdF95b3VfdXNlKGNvZGUs
ICdmb28uaCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5wZXJmb3JtX2luY2x1ZGVfd2hhdF95b3VfdXNlKGNvZGUsICdmb28u
Y3BwJykpCisKKyAgICBkZWYgdGVzdF9pbmNsdWRlX3doYXRfeW91X3VzZShzZWxmKToKKyAgICAg
ICAgc2VsZi5hc3NlcnRfaW5jbHVkZV93aGF0X3lvdV91c2UoCisgICAgICAgICAgICAnJycjaW5j
bHVkZSA8dmVjdG9yPgorICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8aW50PiBmb287CisgICAg
ICAgICAgICAnJycsCisgICAgICAgICAgICAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfaW5jbHVk
ZV93aGF0X3lvdV91c2UoCisgICAgICAgICAgICAnJycjaW5jbHVkZSA8bWFwPgorICAgICAgICAg
ICAgICAgc3RkOjpwYWlyPGludCxpbnQ+IGZvbzsKKyAgICAgICAgICAgICcnJywKKyAgICAgICAg
ICAgICcnKQorICAgICAgICBzZWxmLmFzc2VydF9pbmNsdWRlX3doYXRfeW91X3VzZSgKKyAgICAg
ICAgICAgICcnJyNpbmNsdWRlIDxtdWx0aW1hcD4KKyAgICAgICAgICAgICAgIHN0ZDo6cGFpcjxp
bnQsaW50PiBmb287CisgICAgICAgICAgICAnJycsCisgICAgICAgICAgICAnJykKKyAgICAgICAg
c2VsZi5hc3NlcnRfaW5jbHVkZV93aGF0X3lvdV91c2UoCisgICAgICAgICAgICAnJycjaW5jbHVk
ZSA8aGFzaF9tYXA+CisgICAgICAgICAgICAgICBzdGQ6OnBhaXI8aW50LGludD4gZm9vOworICAg
ICAgICAgICAgJycnLAorICAgICAgICAgICAgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2luY2x1
ZGVfd2hhdF95b3VfdXNlKAorICAgICAgICAgICAgJycnI2luY2x1ZGUgPHV0aWxpdHk+CisgICAg
ICAgICAgICAgICBzdGQ6OnBhaXI8aW50LGludD4gZm9vOworICAgICAgICAgICAgJycnLAorICAg
ICAgICAgICAgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2luY2x1ZGVfd2hhdF95b3VfdXNlKAor
ICAgICAgICAgICAgJycnI2luY2x1ZGUgPHZlY3Rvcj4KKyAgICAgICAgICAgICAgIERFQ0xBUkVf
c3RyaW5nKGZvb2Jhcik7CisgICAgICAgICAgICAnJycsCisgICAgICAgICAgICAnJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRfaW5jbHVkZV93aGF0X3lvdV91c2UoCisgICAgICAgICAgICAnJycjaW5j
bHVkZSA8dmVjdG9yPgorICAgICAgICAgICAgICAgREVGSU5FX3N0cmluZyhmb29iYXIsICIiLCAi
Iik7CisgICAgICAgICAgICAnJycsCisgICAgICAgICAgICAnJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRfaW5jbHVkZV93aGF0X3lvdV91c2UoCisgICAgICAgICAgICAnJycjaW5jbHVkZSA8dmVjdG9y
PgorICAgICAgICAgICAgICAgc3RkOjpwYWlyPGludCxpbnQ+IGZvbzsKKyAgICAgICAgICAgICcn
JywKKyAgICAgICAgICAgICdBZGQgI2luY2x1ZGUgPHV0aWxpdHk+IGZvciBwYWlyPD4nCisgICAg
ICAgICAgICAnICBbYnVpbGQvaW5jbHVkZV93aGF0X3lvdV91c2VdIFs0XScpCisgICAgICAgIHNl
bGYuYXNzZXJ0X2luY2x1ZGVfd2hhdF95b3VfdXNlKAorICAgICAgICAgICAgJycnI2luY2x1ZGUg
ImJhc2UvZm9vYmFyLmgiCisgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxpbnQ+IGZvbzsKKyAg
ICAgICAgICAgICcnJywKKyAgICAgICAgICAgICdBZGQgI2luY2x1ZGUgPHZlY3Rvcj4gZm9yIHZl
Y3Rvcjw+JworICAgICAgICAgICAgJyAgW2J1aWxkL2luY2x1ZGVfd2hhdF95b3VfdXNlXSBbNF0n
KQorICAgICAgICBzZWxmLmFzc2VydF9pbmNsdWRlX3doYXRfeW91X3VzZSgKKyAgICAgICAgICAg
ICcnJyNpbmNsdWRlIDx2ZWN0b3I+CisgICAgICAgICAgICAgICBzdGQ6OnNldDxpbnQ+IGZvbzsK
KyAgICAgICAgICAgICcnJywKKyAgICAgICAgICAgICdBZGQgI2luY2x1ZGUgPHNldD4gZm9yIHNl
dDw+JworICAgICAgICAgICAgJyAgW2J1aWxkL2luY2x1ZGVfd2hhdF95b3VfdXNlXSBbNF0nKQor
ICAgICAgICBzZWxmLmFzc2VydF9pbmNsdWRlX3doYXRfeW91X3VzZSgKKyAgICAgICAgICAgICcn
JyNpbmNsdWRlICJiYXNlL2Zvb2Jhci5oIgorICAgICAgICAgICAgICBoYXNoX21hcDxpbnQsIGlu
dD4gZm9vYmFyOworICAgICAgICAgICAgJycnLAorICAgICAgICAgICAgJ0FkZCAjaW5jbHVkZSA8
aGFzaF9tYXA+IGZvciBoYXNoX21hcDw+JworICAgICAgICAgICAgJyAgW2J1aWxkL2luY2x1ZGVf
d2hhdF95b3VfdXNlXSBbNF0nKQorICAgICAgICBzZWxmLmFzc2VydF9pbmNsdWRlX3doYXRfeW91
X3VzZSgKKyAgICAgICAgICAgICcnJyNpbmNsdWRlICJiYXNlL2Zvb2Jhci5oIgorICAgICAgICAg
ICAgICAgYm9vbCBmb29iYXIgPSBzdGQ6Omxlc3M8aW50PigwLDEpOworICAgICAgICAgICAgJycn
LAorICAgICAgICAgICAgJ0FkZCAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4gZm9yIGxlc3M8PicKKyAg
ICAgICAgICAgICcgIFtidWlsZC9pbmNsdWRlX3doYXRfeW91X3VzZV0gWzRdJykKKyAgICAgICAg
c2VsZi5hc3NlcnRfaW5jbHVkZV93aGF0X3lvdV91c2UoCisgICAgICAgICAgICAnJycjaW5jbHVk
ZSAiYmFzZS9mb29iYXIuaCIKKyAgICAgICAgICAgICAgIGJvb2wgZm9vYmFyID0gbWluPGludD4o
MCwxKTsKKyAgICAgICAgICAgICcnJywKKyAgICAgICAgICAgICdBZGQgI2luY2x1ZGUgPGFsZ29y
aXRobT4gZm9yIG1pbiAgW2J1aWxkL2luY2x1ZGVfd2hhdF95b3VfdXNlXSBbNF0nKQorICAgICAg
ICBzZWxmLmFzc2VydF9pbmNsdWRlX3doYXRfeW91X3VzZSgKKyAgICAgICAgICAgICd2b2lkIGEo
Y29uc3Qgc3RyaW5nICZmb29iYXIpOycsCisgICAgICAgICAgICAnQWRkICNpbmNsdWRlIDxzdHJp
bmc+IGZvciBzdHJpbmcgIFtidWlsZC9pbmNsdWRlX3doYXRfeW91X3VzZV0gWzRdJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRfaW5jbHVkZV93aGF0X3lvdV91c2UoCisgICAgICAgICAgICAnJycjaW5j
bHVkZSAiYmFzZS9mb29iYXIuaCIKKyAgICAgICAgICAgICAgIGJvb2wgZm9vYmFyID0gc3dhcCgw
LDEpOworICAgICAgICAgICAgJycnLAorICAgICAgICAgICAgJ0FkZCAjaW5jbHVkZSA8YWxnb3Jp
dGhtPiBmb3Igc3dhcCAgW2J1aWxkL2luY2x1ZGVfd2hhdF95b3VfdXNlXSBbNF0nKQorICAgICAg
ICBzZWxmLmFzc2VydF9pbmNsdWRlX3doYXRfeW91X3VzZSgKKyAgICAgICAgICAgICcnJyNpbmNs
dWRlICJiYXNlL2Zvb2Jhci5oIgorICAgICAgICAgICAgICAgYm9vbCBmb29iYXIgPSB0cmFuc2Zv
cm0oYS5iZWdpbigpLCBhLmVuZCgpLCBiLnN0YXJ0KCksIEZvbyk7CisgICAgICAgICAgICAnJycs
CisgICAgICAgICAgICAnQWRkICNpbmNsdWRlIDxhbGdvcml0aG0+IGZvciB0cmFuc2Zvcm0gICcK
KyAgICAgICAgICAgICdbYnVpbGQvaW5jbHVkZV93aGF0X3lvdV91c2VdIFs0XScpCisgICAgICAg
IHNlbGYuYXNzZXJ0X2luY2x1ZGVfd2hhdF95b3VfdXNlKAorICAgICAgICAgICAgJycnI2luY2x1
ZGUgImJhc2UvZm9vYmFyLmgiCisgICAgICAgICAgICAgICBib29sIGZvb2JhciA9IG1pbl9lbGVt
ZW50KGEuYmVnaW4oKSwgYS5lbmQoKSk7CisgICAgICAgICAgICAnJycsCisgICAgICAgICAgICAn
QWRkICNpbmNsdWRlIDxhbGdvcml0aG0+IGZvciBtaW5fZWxlbWVudCAgJworICAgICAgICAgICAg
J1tidWlsZC9pbmNsdWRlX3doYXRfeW91X3VzZV0gWzRdJykKKyAgICAgICAgc2VsZi5hc3NlcnRf
aW5jbHVkZV93aGF0X3lvdV91c2UoCisgICAgICAgICAgICAnJydmb28tPnN3YXAoMCwxKTsKKyAg
ICAgICAgICAgICAgIGZvby5zd2FwKDAsMSk7CisgICAgICAgICAgICAnJycsCisgICAgICAgICAg
ICAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfaW5jbHVkZV93aGF0X3lvdV91c2UoCisgICAgICAg
ICAgICAnJycjaW5jbHVkZSA8c3RyaW5nPgorICAgICAgICAgICAgICAgdm9pZCBhKGNvbnN0IHN0
ZDo6bXVsdGltYXA8aW50LHN0cmluZz4gJmZvb2Jhcik7CisgICAgICAgICAgICAnJycsCisgICAg
ICAgICAgICAnQWRkICNpbmNsdWRlIDxtYXA+IGZvciBtdWx0aW1hcDw+JworICAgICAgICAgICAg
JyAgW2J1aWxkL2luY2x1ZGVfd2hhdF95b3VfdXNlXSBbNF0nKQorICAgICAgICBzZWxmLmFzc2Vy
dF9pbmNsdWRlX3doYXRfeW91X3VzZSgKKyAgICAgICAgICAgICcnJyNpbmNsdWRlIDxxdWV1ZT4K
KyAgICAgICAgICAgICAgIHZvaWQgYShjb25zdCBzdGQ6OnByaW9yaXR5X3F1ZXVlPGludD4gJmZv
b2Jhcik7CisgICAgICAgICAgICAnJycsCisgICAgICAgICAgICAnJykKKyAgICAgICAgc2VsZi5h
c3NlcnRfaW5jbHVkZV93aGF0X3lvdV91c2UoCisgICAgICAgICAgICAgJycnI2luY2x1ZGUgImJh
c2UvYmFzaWN0eXBlcy5oIgorICAgICAgICAgICAgICAgICNpbmNsdWRlICJiYXNlL3BvcnQuaCIK
KyAgICAgICAgICAgICAgICAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgICAgICAgICAgICAgICAgI2lu
Y2x1ZGUgPHN0cmluZz4KKyAgICAgICAgICAgICAgICAjaW5jbHVkZSA8dmVjdG9yPgorICAgICAg
ICAgICAgICAgIHZlY3RvcjxzdHJpbmc+IGhham9hOycnJywgJycpCisgICAgICAgIHNlbGYuYXNz
ZXJ0X2luY2x1ZGVfd2hhdF95b3VfdXNlKAorICAgICAgICAgICAgJycnI2luY2x1ZGUgPHN0cmlu
Zz4KKyAgICAgICAgICAgICAgIGludCBpID0gbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkKKyAg
ICAgICAgICAgICcnJywKKyAgICAgICAgICAgICdBZGQgI2luY2x1ZGUgPGxpbWl0cz4gZm9yIG51
bWVyaWNfbGltaXRzPD4nCisgICAgICAgICAgICAnICBbYnVpbGQvaW5jbHVkZV93aGF0X3lvdV91
c2VdIFs0XScpCisgICAgICAgIHNlbGYuYXNzZXJ0X2luY2x1ZGVfd2hhdF95b3VfdXNlKAorICAg
ICAgICAgICAgJycnI2luY2x1ZGUgPGxpbWl0cz4KKyAgICAgICAgICAgICAgIGludCBpID0gbnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCkKKyAgICAgICAgICAgICcnJywKKyAgICAgICAgICAgICcn
KQorCisgICAgICAgICMgVGVzdCB0aGUgVXBkYXRlSW5jbHVkZVN0YXRlIGNvZGUgcGF0aC4KKyAg
ICAgICAgbW9ja19oZWFkZXJfY29udGVudHMgPSBbJyNpbmNsdWRlICJibGFoL2Zvby5oIicsICcj
aW5jbHVkZSAiYmxhaC9iYXIuaCInXQorICAgICAgICBtZXNzYWdlID0gc2VsZi5wZXJmb3JtX2lu
Y2x1ZGVfd2hhdF95b3VfdXNlKAorICAgICAgICAgICAgJyNpbmNsdWRlICJjb25maWcuaCJcbicK
KyAgICAgICAgICAgICcjaW5jbHVkZSAiYmxhaC9hLmgiXG4nLAorICAgICAgICAgICAgZmlsZW5h
bWU9J2JsYWgvYS5jcHAnLAorICAgICAgICAgICAgaW89TW9ja0lvKG1vY2tfaGVhZGVyX2NvbnRl
bnRzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWVzc2FnZSwgJycpCisKKyAgICAgICAg
bW9ja19oZWFkZXJfY29udGVudHMgPSBbJyNpbmNsdWRlIDxzZXQ+J10KKyAgICAgICAgbWVzc2Fn
ZSA9IHNlbGYucGVyZm9ybV9pbmNsdWRlX3doYXRfeW91X3VzZSgKKyAgICAgICAgICAgICcnJyNp
bmNsdWRlICJjb25maWcuaCIKKyAgICAgICAgICAgICAgICNpbmNsdWRlICJibGFoL2EuaCIKKwor
ICAgICAgICAgICAgICAgc3RkOjpzZXQ8aW50PiBmb287JycnLAorICAgICAgICAgICAgZmlsZW5h
bWU9J2JsYWgvYS5jcHAnLAorICAgICAgICAgICAgaW89TW9ja0lvKG1vY2tfaGVhZGVyX2NvbnRl
bnRzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWVzc2FnZSwgJycpCisKKyAgICAgICAg
IyBJZiB0aGVyZSdzIGp1c3QgYSAuY3BwIGFuZCB0aGUgaGVhZGVyIGNhbid0IGJlIGZvdW5kIHRo
ZW4gaXQncyBvay4KKyAgICAgICAgbWVzc2FnZSA9IHNlbGYucGVyZm9ybV9pbmNsdWRlX3doYXRf
eW91X3VzZSgKKyAgICAgICAgICAgICcnJyNpbmNsdWRlICJjb25maWcuaCIKKyAgICAgICAgICAg
ICAgICNpbmNsdWRlICJibGFoL2EuaCIKKworICAgICAgICAgICAgICAgc3RkOjpzZXQ8aW50PiBm
b287JycnLAorICAgICAgICAgICAgZmlsZW5hbWU9J2JsYWgvYS5jcHAnKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhtZXNzYWdlLCAnJykKKworICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBmaW5k
IHRoZSBoZWFkZXJzIHdpdGggcmVsYXRpdmUgcGF0aHMuCisgICAgICAgIG1vY2tfaGVhZGVyX2Nv
bnRlbnRzID0gWycnXQorICAgICAgICBtZXNzYWdlID0gc2VsZi5wZXJmb3JtX2luY2x1ZGVfd2hh
dF95b3VfdXNlKAorICAgICAgICAgICAgJycnI2luY2x1ZGUgImNvbmZpZy5oIgorICAgICAgICAg
ICAgICAgI2luY2x1ZGUgIiVzL2EuaCIKKworICAgICAgICAgICAgICAgc3RkOjpzZXQ8aW50PiBm
b287JycnICUgb3MucGF0aC5iYXNlbmFtZShvcy5nZXRjd2QoKSksCisgICAgICAgICAgICBmaWxl
bmFtZT0nYS5jcHAnLAorICAgICAgICAgICAgaW89TW9ja0lvKG1vY2tfaGVhZGVyX2NvbnRlbnRz
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWVzc2FnZSwgJ0FkZCAjaW5jbHVkZSA8c2V0
PiBmb3Igc2V0PD4gICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1tidWls
ZC9pbmNsdWRlX3doYXRfeW91X3VzZV0gWzRdJykKKworICAgIGRlZiB0ZXN0X2ZpbGVzX2JlbG9u
Z190b19zYW1lX21vZHVsZShzZWxmKToKKyAgICAgICAgZiA9IGNwcF9zdHlsZS5maWxlc19iZWxv
bmdfdG9fc2FtZV9tb2R1bGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKFRydWUsICcnKSwg
ZignYS5jcHAnLCAnYS5oJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKChUcnVlLCAnJyks
IGYoJ2Jhc2UvZ29vZ2xlLmNwcCcsICdiYXNlL2dvb2dsZS5oJykpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKChUcnVlLCAnJyksIGYoJ2Jhc2UvZ29vZ2xlX3Rlc3QuY3BwJywgJ2Jhc2UvZ29v
Z2xlLmgnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKFRydWUsICcnKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgZignYmFzZS9nb29nbGVfdW5pdHRlc3QuY3BwJywgJ2Jhc2UvZ29v
Z2xlLmgnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKFRydWUsICcnKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgZignYmFzZS9pbnRlcm5hbC9nb29nbGVfdW5pdHRlc3QuY3BwJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFzZS9wdWJsaWMvZ29vZ2xlLmgnKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKFRydWUsICd4eHgveXl5LycpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBmKCd4eHgveXl5L2Jhc2UvaW50ZXJuYWwvZ29vZ2xlX3VuaXR0ZXN0LmNw
cCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Jhc2UvcHVibGljL2dvb2dsZS5oJykp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKChUcnVlLCAneHh4L3l5eS8nKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgZigneHh4L3l5eS9iYXNlL2dvb2dsZV91bml0dGVzdC5jcHAnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYXNlL3B1YmxpYy9nb29nbGUuaCcpKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscygoVHJ1ZSwgJycpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBmKCdiYXNlL2dvb2dsZV91bml0dGVzdC5jcHAnLCAnYmFzZS9nb29nbGUtaW5sLmgnKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKFRydWUsICcvaG9tZS9idWlsZC9nb29nbGUzLycp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBmKCcvaG9tZS9idWlsZC9nb29nbGUzL2Jhc2Uv
Z29vZ2xlLmNwcCcsICdiYXNlL2dvb2dsZS5oJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMoKEZhbHNlLCAnJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGYoJy9ob21lL2J1aWxk
L2dvb2dsZTMvYmFzZS9nb29nbGUuY3BwJywgJ2Jhc3UvZ29vZ2xlLmgnKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoKEZhbHNlLCAnJyksIGYoJ2EuY3BwJywgJ2IuaCcpKQorCisgICAgZGVm
IHRlc3RfY2xlYW5zZV9saW5lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnaW50
IGZvbyA9IDA7ICAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjcHBfc3R5bGUuY2xlYW5z
ZV9jb21tZW50cygnaW50IGZvbyA9IDA7ICAvLyBkYW5nZXIhJykpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKCdpbnQgbyA9IDA7JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3BwX3N0
eWxlLmNsZWFuc2VfY29tbWVudHMoJ2ludCAvKiBmb28gKi8gbyA9IDA7JykpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKCdmb28oaW50IGEsIGludCBiKTsnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBjcHBfc3R5bGUuY2xlYW5zZV9jb21tZW50cygnZm9vKGludCBhIC8qIGFiYyAqLywg
aW50IGIpOycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdmKGEsIGIpOycsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgY3BwX3N0eWxlLmNsZWFuc2VfY29tbWVudHMoJ2YoYSwgLyogbmFt
ZSAqLyBiKTsnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZihhLCBiKTsnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGNwcF9zdHlsZS5jbGVhbnNlX2NvbW1lbnRzKCdmKGEgLyogbmFt
ZSAqLywgYik7JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2YoYSwgYik7JywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBjcHBfc3R5bGUuY2xlYW5zZV9jb21tZW50cygnZihhLCAvKiBu
YW1lICovYik7JykpCisKKyAgICBkZWYgdGVzdF9tdWx0aV9saW5lX2NvbW1lbnRzKHNlbGYpOgor
ICAgICAgICAjIG1pc3NpbmcgZXhwbGljaXQgaXMgYmFkCisgICAgICAgIHNlbGYuYXNzZXJ0X211
bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgIHInJydpbnQgYSA9IDA7CisgICAgICAgICAgICAg
ICAgLyogbXVsdGktbGluZXIKKyAgICAgICAgICAgICAgICBjbGFzcyBGb28geworICAgICAgICAg
ICAgICAgIEZvbyhpbnQgZik7ICAvLyBzaG91bGQgY2F1c2UgYSBsaW50IHdhcm5pbmcgaW4gY29k
ZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICovICcnJywKKyAgICAgICAgJycpCisg
ICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgIHInJycvKiBp
bnQgYSA9IDA7IG11bHRpLWxpbmVyCisgICAgICAgICAgICBzdGF0aWMgY29uc3QgaW50IGIgPSAw
OycnJywKKyAgICAgICdDb3VsZCBub3QgZmluZCBlbmQgb2YgbXVsdGktbGluZSBjb21tZW50Jwor
ICAgICAgJyAgW3JlYWRhYmlsaXR5L211bHRpbGluZV9jb21tZW50XSBbNV0nKQorICAgICAgICBz
ZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQocicnJyAgICAvKiBtdWx0aS1saW5lIGNvbW1lbnQn
JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ291bGQgbm90IGZpbmQg
ZW5kIG9mIG11bHRpLWxpbmUgY29tbWVudCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICcgIFtyZWFkYWJpbGl0eS9tdWx0aWxpbmVfY29tbWVudF0gWzVdJykKKyAgICAgICAg
c2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KHInJycgICAgLy8gLyogY29tbWVudCwgYnV0IG5v
dCBtdWx0aS1saW5lJycnLCAnJykKKworICAgIGRlZiB0ZXN0X211bHRpbGluZV9zdHJpbmdzKHNl
bGYpOgorICAgICAgICBtdWx0aWxpbmVfc3RyaW5nX2Vycm9yX21lc3NhZ2UgPSAoCisgICAgICAg
ICAgICAnTXVsdGktbGluZSBzdHJpbmcgKCIuLi4iKSBmb3VuZC4gIFRoaXMgbGludCBzY3JpcHQg
ZG9lc25cJ3QgJworICAgICAgICAgICAgJ2RvIHdlbGwgd2l0aCBzdWNoIHN0cmluZ3MsIGFuZCBt
YXkgZ2l2ZSBib2d1cyB3YXJuaW5ncy4gIFRoZXlcJ3JlICcKKyAgICAgICAgICAgICd1Z2x5IGFu
ZCB1bm5lY2Vzc2FyeSwgYW5kIHlvdSBzaG91bGQgdXNlIGNvbmNhdGVuYXRpb24gaW5zdGVhZCIu
JworICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L211bHRpbGluZV9zdHJpbmddIFs1XScpCisK
KyAgICAgICAgZmlsZV9wYXRoID0gJ215ZGlyL2Zvby5jcHAnCisKKyAgICAgICAgZXJyb3JfY29s
bGVjdG9yID0gRXJyb3JDb2xsZWN0b3Ioc2VsZi5hc3NlcnRfKQorICAgICAgICBjcHBfc3R5bGUu
cHJvY2Vzc19maWxlX2RhdGEoZmlsZV9wYXRoLCAnY3BwJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFsnY29uc3QgY2hhciogc3RyID0gIlRoaXMgaXMgYVxcJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIG11bHRpbGluZSBzdHJpbmcuIjsnXSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvbGxlY3RvcikKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgICAgICAyLCAgIyBPbmUgcGVyIGxpbmUu
CisgICAgICAgICAgICBlcnJvcl9jb2xsZWN0b3IucmVzdWx0X2xpc3QoKS5jb3VudChtdWx0aWxp
bmVfc3RyaW5nX2Vycm9yX21lc3NhZ2UpKQorCisgICAgIyBUZXN0IG5vbi1leHBsaWNpdCBzaW5n
bGUtYXJndW1lbnQgY29uc3RydWN0b3JzCisgICAgZGVmIHRlc3RfZXhwbGljaXRfc2luZ2xlX2Fy
Z3VtZW50X2NvbnN0cnVjdG9ycyhzZWxmKToKKyAgICAgICAgIyBtaXNzaW5nIGV4cGxpY2l0IGlz
IGJhZAorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAn
JydjbGFzcyBGb28geworICAgICAgICAgICAgICAgICBGb28oaW50IGYpOworICAgICAgICAgICAg
ICAgfTsnJycsCisgICAgICAgICAgICAnU2luZ2xlLWFyZ3VtZW50IGNvbnN0cnVjdG9ycyBzaG91
bGQgYmUgbWFya2VkIGV4cGxpY2l0LicKKyAgICAgICAgICAgICcgIFtydW50aW1lL2V4cGxpY2l0
XSBbNV0nKQorICAgICAgICAjIG1pc3NpbmcgZXhwbGljaXQgaXMgYmFkLCBldmVuIHdpdGggd2hp
dGVzcGFjZQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAg
ICAnJydjbGFzcyBGb28geworICAgICAgICAgICAgICAgICBGb28gKGludCBmKTsKKyAgICAgICAg
ICAgICAgIH07JycnLAorICAgICAgICAgICAgWydFeHRyYSBzcGFjZSBiZWZvcmUgKCBpbiBmdW5j
dGlvbiBjYWxsICBbd2hpdGVzcGFjZS9wYXJlbnNdIFs0XScsCisgICAgICAgICAgICAgJ1Npbmds
ZS1hcmd1bWVudCBjb25zdHJ1Y3RvcnMgc2hvdWxkIGJlIG1hcmtlZCBleHBsaWNpdC4nCisgICAg
ICAgICAgICAgJyAgW3J1bnRpbWUvZXhwbGljaXRdIFs1XSddKQorICAgICAgICAjIG1pc3Npbmcg
ZXhwbGljaXQsIHdpdGggZGlzdHJhY3RpbmcgY29tbWVudCwgaXMgc3RpbGwgYmFkCisgICAgICAg
IHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICcnJ2NsYXNzIEZvbyB7
CisgICAgICAgICAgICAgICAgIEZvbyhpbnQgZik7IC8vIHNpbXBsZXIgdGhhbiBGb28oYmxhcmdo
LCBibGFyZykKKyAgICAgICAgICAgICAgIH07JycnLAorICAgICAgICAgICAgJ1NpbmdsZS1hcmd1
bWVudCBjb25zdHJ1Y3RvcnMgc2hvdWxkIGJlIG1hcmtlZCBleHBsaWNpdC4nCisgICAgICAgICAg
ICAnICBbcnVudGltZS9leHBsaWNpdF0gWzVdJykKKyAgICAgICAgIyBtaXNzaW5nIGV4cGxpY2l0
LCB3aXRoIHF1YWxpZmllZCBjbGFzc25hbWUKKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGlu
ZV9saW50KAorICAgICAgICAgICAgJycnY2xhc3MgUXVhbGlmaWVyOjpBbm90aGVyT25lOjpGb28g
eworICAgICAgICAgICAgICAgICBGb28oaW50IGYpOworICAgICAgICAgICAgICAgfTsnJycsCisg
ICAgICAgICAgICAnU2luZ2xlLWFyZ3VtZW50IGNvbnN0cnVjdG9ycyBzaG91bGQgYmUgbWFya2Vk
IGV4cGxpY2l0LicKKyAgICAgICAgICAgICcgIFtydW50aW1lL2V4cGxpY2l0XSBbNV0nKQorICAg
ICAgICAjIHN0cnVjdHMgYXJlIGNhdWdodCBhcyB3ZWxsLgorICAgICAgICBzZWxmLmFzc2VydF9t
dWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnJydzdHJ1Y3QgRm9vIHsKKyAgICAgICAgICAg
ICAgICAgRm9vKGludCBmKTsKKyAgICAgICAgICAgICAgIH07JycnLAorICAgICAgICAgICAgJ1Np
bmdsZS1hcmd1bWVudCBjb25zdHJ1Y3RvcnMgc2hvdWxkIGJlIG1hcmtlZCBleHBsaWNpdC4nCisg
ICAgICAgICAgICAnICBbcnVudGltZS9leHBsaWNpdF0gWzVdJykKKyAgICAgICAgIyBUZW1wbGF0
aXplZCBjbGFzc2VzIGFyZSBjYXVnaHQgYXMgd2VsbC4KKyAgICAgICAgc2VsZi5hc3NlcnRfbXVs
dGlfbGluZV9saW50KAorICAgICAgICAgICAgJycndGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3Mg
Rm9vIHsKKyAgICAgICAgICAgICAgICAgRm9vKGludCBmKTsKKyAgICAgICAgICAgICAgIH07Jycn
LAorICAgICAgICAgICAgJ1NpbmdsZS1hcmd1bWVudCBjb25zdHJ1Y3RvcnMgc2hvdWxkIGJlIG1h
cmtlZCBleHBsaWNpdC4nCisgICAgICAgICAgICAnICBbcnVudGltZS9leHBsaWNpdF0gWzVdJykK
KyAgICAgICAgIyBwcm9wZXIgc3R5bGUgaXMgb2theQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0
aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnJydjbGFzcyBGb28geworICAgICAgICAgICAgICAg
ICBleHBsaWNpdCBGb28oaW50IGYpOworICAgICAgICAgICAgICAgfTsnJycsCisgICAgICAgICAg
ICAnJykKKyAgICAgICAgIyB0d28gYXJndW1lbnQgY29uc3RydWN0b3IgaXMgb2theQorICAgICAg
ICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnJydjbGFzcyBGb28g
eworICAgICAgICAgICAgICAgICBGb28oaW50IGYsIGludCBiKTsKKyAgICAgICAgICAgICAgIH07
JycnLAorICAgICAgICAgICAgJycpCisgICAgICAgICMgdHdvIGFyZ3VtZW50IGNvbnN0cnVjdG9y
LCBhY3Jvc3MgdHdvIGxpbmVzLCBpcyBva2F5CisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xp
bmVfbGludCgKKyAgICAgICAgICAgICcnJ2NsYXNzIEZvbyB7CisgICAgICAgICAgICAgICAgIEZv
byhpbnQgZiwKKyAgICAgICAgICAgICAgICAgICAgIGludCBiKTsKKyAgICAgICAgICAgICAgIH07
JycnLAorICAgICAgICAgICAgJycpCisgICAgICAgICMgbm9uLWNvbnN0cnVjdG9yIChidXQgc2lt
aWxhciBuYW1lKSwgaXMgb2theQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQo
CisgICAgICAgICAgICAnJydjbGFzcyBGb28geworICAgICAgICAgICAgICAgICBhRm9vKGludCBm
KTsKKyAgICAgICAgICAgICAgIH07JycnLAorICAgICAgICAgICAgJycpCisgICAgICAgICMgY29u
c3RydWN0b3Igd2l0aCB2b2lkIGFyZ3VtZW50IGlzIG9rYXkKKyAgICAgICAgc2VsZi5hc3NlcnRf
bXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAgJycnY2xhc3MgRm9vIHsKKyAgICAgICAgICAg
ICAgICAgRm9vKHZvaWQpOworICAgICAgICAgICAgICAgfTsnJycsCisgICAgICAgICAgICAnJykK
KyAgICAgICAgIyBzaW5nbGUgYXJndW1lbnQgbWV0aG9kIGlzIG9rYXkKKyAgICAgICAgc2VsZi5h
c3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAgJycnY2xhc3MgRm9vIHsKKyAgICAg
ICAgICAgICAgICAgQmFyKGludCBiKTsKKyAgICAgICAgICAgICAgIH07JycnLAorICAgICAgICAg
ICAgJycpCisgICAgICAgICMgY29tbWVudHMgc2hvdWxkIGJlIGlnbm9yZWQKKyAgICAgICAgc2Vs
Zi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAgJycnY2xhc3MgRm9vIHsKKyAg
ICAgICAgICAgICAgIC8vIEZvbyhpbnQgZik7CisgICAgICAgICAgICAgICB9OycnJywKKyAgICAg
ICAgICAgICcnKQorICAgICAgICAjIHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBmb2xsb3dpbmcg
Y2xhc3MgZGVmaW5pdGlvbiBpcyBva2F5CisgICAgICAgICMgKG9rYXksIGl0J3Mgbm90IGFjdHVh
bGx5IHZhbGlkLCBidXQgd2UgZG9uJ3Qgd2FudCBhIGZhbHNlIHBvc2l0aXZlKQorICAgICAgICBz
ZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnJydjbGFzcyBGb28gewor
ICAgICAgICAgICAgICAgICBGb28oaW50IGYsIGludCBiKTsKKyAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICAgICBGb28oaW50IGYpOycnJywKKyAgICAgICAgICAgICcnKQorICAgICAgICAj
IHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBpcyBva2F5CisgICAgICAgIHNlbGYuYXNzZXJ0X211
bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICcnJ3N0YXRpYyBGb28oaW50IGYpOycnJywKKyAg
ICAgICAgICAgICcnKQorICAgICAgICAjIHNpbmdsZSBhcmd1bWVudCBjb3B5IGNvbnN0cnVjdG9y
IGlzIG9rYXkuCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAg
ICAgICcnJ2NsYXNzIEZvbyB7CisgICAgICAgICAgICAgICAgIEZvbyhjb25zdCBGb28mKTsKKyAg
ICAgICAgICAgICAgIH07JycnLAorICAgICAgICAgICAgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0
X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICcnJ2NsYXNzIEZvbyB7CisgICAgICAgICAg
ICAgICAgIEZvbyhGb28mKTsKKyAgICAgICAgICAgICAgIH07JycnLAorICAgICAgICAgICAgJycp
CisKKyAgICBkZWYgdGVzdF9zbGFzaF9zdGFyX2NvbW1lbnRfb25fc2luZ2xlX2xpbmUoc2VsZik6
CisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICcnJy8q
IHN0YXRpYyAqLyBGb28oaW50IGYpOycnJywKKyAgICAgICAgICAgICcnKQorICAgICAgICBzZWxm
LmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnJycvKi8gc3RhdGljICovICBG
b28oaW50IGYpOycnJywKKyAgICAgICAgICAgICcnKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0
aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnJycvKi8gc3RhdGljIEZvbyhpbnQgZik7JycnLAor
ICAgICAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIGVuZCBvZiBtdWx0aS1saW5lIGNvbW1lbnQnCisg
ICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvbXVsdGlsaW5lX2NvbW1lbnRdIFs1XScpCisgICAg
ICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICcnJyAgICAvKi8g
c3RhdGljIEZvbyhpbnQgZik7JycnLAorICAgICAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIGVuZCBv
ZiBtdWx0aS1saW5lIGNvbW1lbnQnCisgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvbXVsdGls
aW5lX2NvbW1lbnRdIFs1XScpCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgK
KyAgICAgICAgICAgICcnJyAgICAvKiovIHN0YXRpYyBGb28oaW50IGYpOycnJywKKyAgICAgICAg
ICAgICcnKQorCisgICAgIyBUZXN0IHN1c3BpY2lvdXMgdXNhZ2Ugb2YgImlmIiBsaWtlIHRoaXM6
CisgICAgIyBpZiAoYSA9PSBiKSB7CisgICAgIyAgIERvU29tZXRoaW5nKCk7CisgICAgIyB9IGlm
IChhID09IGMpIHsgICAvLyBTaG91bGQgYmUgImVsc2UgaWYiLgorICAgICMgICBEb1NvbWV0aGlu
ZygpOyAgLy8gVGhpcyBnZXRzIGNhbGxlZCB0d2ljZSBpZiBhID09IGIgJiYgYSA9PSBjLgorICAg
ICMgfQorICAgIGRlZiB0ZXN0X3N1c3BpY2lvdXNfdXNhZ2Vfb2ZfaWYoc2VsZik6CisgICAgICAg
IHNlbGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAgICAnICAgIGlmIChhID09IGIpIHsnLAorICAg
ICAgICAgICAgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAgICAnICAg
IH0gaWYgKGEgPT0gYikgeycsCisgICAgICAgICAgICAnRGlkIHlvdSBtZWFuICJlbHNlIGlmIj8g
SWYgbm90LCBzdGFydCBhIG5ldyBsaW5lIGZvciAiaWYiLicKKyAgICAgICAgICAgICcgIFtyZWFk
YWJpbGl0eS9icmFjZXNdIFs0XScpCisKKyAgICAjIFRlc3Qgc3VzcGljaW91cyB1c2FnZSBvZiBt
ZW1zZXQuIFNwZWNpZmljYWxseSwgYSAwCisgICAgIyBhcyB0aGUgZmluYWwgYXJndW1lbnQgaXMg
YWxtb3N0IGNlcnRhaW5seSBhbiBlcnJvci4KKyAgICBkZWYgdGVzdF9zdXNwaWNpb3VzX3VzYWdl
X29mX21lbXNldChzZWxmKToKKyAgICAgICAgIyBOb3JtYWwgdXNlIGlzIG9rYXkuCisgICAgICAg
IHNlbGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAgICAnICAgIG1lbXNldChidWYsIDAsIHNpemVv
ZihidWYpKScsCisgICAgICAgICAgICAnJykKKworICAgICAgICAjIEEgMCBhcyB0aGUgZmluYWwg
YXJndW1lbnQgaXMgYWxtb3N0IGNlcnRhaW5seSBhbiBlcnJvci4KKyAgICAgICAgc2VsZi5hc3Nl
cnRfbGludCgKKyAgICAgICAgICAgICcgICAgbWVtc2V0KGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApJywK
KyAgICAgICAgICAgICdEaWQgeW91IG1lYW4gIm1lbXNldChidWYsIDAsIHNpemVvZihidWYpKSI/
JworICAgICAgICAgICAgJyAgW3J1bnRpbWUvbWVtc2V0XSBbNF0nKQorICAgICAgICBzZWxmLmFz
c2VydF9saW50KAorICAgICAgICAgICAgJyAgICBtZW1zZXQoYnVmLCB4c2l6ZSAqIHlzaXplLCAw
KScsCisgICAgICAgICAgICAnRGlkIHlvdSBtZWFuICJtZW1zZXQoYnVmLCAwLCB4c2l6ZSAqIHlz
aXplKSI/JworICAgICAgICAgICAgJyAgW3J1bnRpbWUvbWVtc2V0XSBbNF0nKQorCisgICAgICAg
ICMgVGhlcmUgaXMgbGVnaXRpbWF0ZSB0ZXN0IGNvZGUgdGhhdCB1c2VzIHRoaXMgZm9ybS4KKyAg
ICAgICAgIyBUaGlzIGlzIG9rYXkgc2luY2UgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIGxpdGVy
YWwuCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAgICAiICAgIG1lbXNldChi
dWYsICd5JywgMCkiLAorICAgICAgICAgICAgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQo
CisgICAgICAgICAgICAnICAgIG1lbXNldChidWYsIDQsIDApJywKKyAgICAgICAgICAgICcnKQor
ICAgICAgICBzZWxmLmFzc2VydF9saW50KAorICAgICAgICAgICAgJyAgICBtZW1zZXQoYnVmLCAt
MSwgMCknLAorICAgICAgICAgICAgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisgICAg
ICAgICAgICAnICAgIG1lbXNldChidWYsIDB4RjEsIDApJywKKyAgICAgICAgICAgICcnKQorICAg
ICAgICBzZWxmLmFzc2VydF9saW50KAorICAgICAgICAgICAgJyAgICBtZW1zZXQoYnVmLCAweGNk
LCAwKScsCisgICAgICAgICAgICAnJykKKworICAgIGRlZiB0ZXN0X2NoZWNrX3Bvc2l4X3RocmVh
ZGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnc2N0aW1lX3IoKScsICcnKQor
ICAgICAgICBzZWxmLmFzc2VydF9saW50KCdzdHJ0b2tfcigpJywgJycpCisgICAgICAgIHNlbGYu
YXNzZXJ0X2xpbnQoJyAgICBzdHJ0b2tfcihmb28sIGJhLCByKScsICcnKQorICAgICAgICBzZWxm
LmFzc2VydF9saW50KCdicmFuZCgpJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ19y
YW5kKCknLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnLnJhbmQoKScsICcnKQorICAg
ICAgICBzZWxmLmFzc2VydF9saW50KCc+cmFuZCgpJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0
X2xpbnQoJ3JhbmQoKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNpZGVyIHVzaW5n
IHJhbmRfciguLi4pIGluc3RlYWQgb2YgcmFuZCguLi4pJworICAgICAgICAgICAgICAgICAgICAg
ICAgICcgZm9yIGltcHJvdmVkIHRocmVhZCBzYWZldHkuJworICAgICAgICAgICAgICAgICAgICAg
ICAgICcgIFtydW50aW1lL3RocmVhZHNhZmVfZm5dIFsyXScpCisgICAgICAgIHNlbGYuYXNzZXJ0
X2xpbnQoJ3N0cnRvaygpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2lkZXIgdXNp
bmcgc3RydG9rX3IoLi4uKSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2luc3RlYWQgb2Yg
c3RydG9rKC4uLiknCisgICAgICAgICAgICAgICAgICAgICAgICAgJyBmb3IgaW1wcm92ZWQgdGhy
ZWFkIHNhZmV0eS4nCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3J1bnRpbWUvdGhyZWFk
c2FmZV9mbl0gWzJdJykKKworICAgICMgVGVzdCBwb3RlbnRpYWwgZm9ybWF0IHN0cmluZyBidWdz
IGxpa2UgcHJpbnRmKGZvbykuCisgICAgZGVmIHRlc3RfZm9ybWF0X3N0cmluZ3Moc2VsZik6Cisg
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3ByaW50ZigiZm9vIiknLCAnJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgncHJpbnRmKCJmb286ICVzIiwgZm9vKScsICcnKQorICAgICAgICBzZWxm
LmFzc2VydF9saW50KCdEb2NpZEZvclByaW50Zihkb2NpZCknLCAnJykgICMgU2hvdWxkIG5vdCB0
cmlnZ2VyLgorICAgICAgICBzZWxmLmFzc2VydF9saW50KAorICAgICAgICAgICAgJ3ByaW50Zihm
b28pJywKKyAgICAgICAgICAgICdQb3RlbnRpYWwgZm9ybWF0IHN0cmluZyBidWcuIERvIHByaW50
ZigiJXMiLCBmb28pIGluc3RlYWQuJworICAgICAgICAgICAgJyAgW3J1bnRpbWUvcHJpbnRmXSBb
NF0nKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KAorICAgICAgICAgICAgJ3ByaW50Zihmb28u
Y19zdHIoKSknLAorICAgICAgICAgICAgJ1BvdGVudGlhbCBmb3JtYXQgc3RyaW5nIGJ1Zy4gJwor
ICAgICAgICAgICAgJ0RvIHByaW50ZigiJXMiLCBmb28uY19zdHIoKSkgaW5zdGVhZC4nCisgICAg
ICAgICAgICAnICBbcnVudGltZS9wcmludGZdIFs0XScpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xp
bnQoCisgICAgICAgICAgICAncHJpbnRmKGZvby0+Y19zdHIoKSknLAorICAgICAgICAgICAgJ1Bv
dGVudGlhbCBmb3JtYXQgc3RyaW5nIGJ1Zy4gJworICAgICAgICAgICAgJ0RvIHByaW50ZigiJXMi
LCBmb28tPmNfc3RyKCkpIGluc3RlYWQuJworICAgICAgICAgICAgJyAgW3J1bnRpbWUvcHJpbnRm
XSBbNF0nKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KAorICAgICAgICAgICAgJ1N0cmluZ1By
aW50Zihmb28pJywKKyAgICAgICAgICAgICdQb3RlbnRpYWwgZm9ybWF0IHN0cmluZyBidWcuIERv
IFN0cmluZ1ByaW50ZigiJXMiLCBmb28pIGluc3RlYWQuJworICAgICAgICAgICAgJycKKyAgICAg
ICAgICAgICcgIFtydW50aW1lL3ByaW50Zl0gWzRdJykKKworICAgICMgVmFyaWFibGUtbGVuZ3Ro
IGFycmF5cyBhcmUgbm90IHBlcm1pdHRlZC4KKyAgICBkZWYgdGVzdF92YXJpYWJsZV9sZW5ndGhf
YXJyYXlfZGV0ZWN0aW9uKHNlbGYpOgorICAgICAgICBlcnJtc2cgPSAoJ0RvIG5vdCB1c2UgdmFy
aWFibGUtbGVuZ3RoIGFycmF5cy4gIFVzZSBhbiBhcHByb3ByaWF0ZWx5IG5hbWVkICcKKyAgICAg
ICAgICAgICAgICAgICIoJ2snIGZvbGxvd2VkIGJ5IENhbWVsQ2FzZSkgY29tcGlsZS10aW1lIGNv
bnN0YW50IGZvciB0aGUgc2l6ZS4iCisgICAgICAgICAgICAgICAgICAnICBbcnVudGltZS9hcnJh
eXNdIFsxXScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50IGFbYW55X29sZF92YXJp
YWJsZV07JywgZXJybXNnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQgZG91Ymxlc2l6
ZVtzb21lX3ZhciAqIDJdOycsIGVycm1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50
IGFbYWZ1bmN0aW9uKCldOycsIGVycm1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50
IGFbZnVuY3Rpb24oa01heEZvb0JhcnMpXTsnLCBlcnJtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0
X2xpbnQoJ2Jvb2wgYUxpc3RbaXRlbXNfLT5zaXplKCldOycsIGVycm1zZykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgnbmFtZXNwYWNlOjpUeXBlIGJ1ZmZlcltsZW4rMV07JywgZXJybXNnKQor
CisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBhWzY0XTsnLCAnJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgnaW50IGFbMHhGRl07JywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xp
bnQoJ2ludCBmaXJzdFsyNTZdLCBzZWNvbmRbMjU2XTsnLCAnJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRfbGludCgnaW50IGFycmF5TmFtZVtrQ29tcGlsZVRpbWVDb25zdGFudF07JywgJycpCisgICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2NoYXIgYnVmW3NvbWVuYW1lc3BhY2U6OmtCdWZTaXplXTsn
LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50IGFycmF5TmFtZVtBTExfQ0FQU107
JywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ0FDbGFzcyBhcnJheTFbZm9vOjpiYXI6
OkFMTF9DQVBTXTsnLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50IGFba01heFN0
ckxlbiArIDFdOycsICcnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQgYVtzaXplb2Yo
Zm9vKV07JywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBhW3NpemVvZigqZm9v
KV07JywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBhW3NpemVvZiBmb29dOycs
ICcnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQgYVtzaXplb2Yoc3RydWN0IEZvbyld
OycsICcnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQgYVsxMjggLSBzaXplb2YoY29u
c3QgYmFyKV07JywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBhWyhzaXplb2Yo
Zm9vKSAqIDQpXTsnLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50IGFbKGFycmF5
c2l6ZShmaXhlZF9zaXplX2FycmF5KS8yKSA8PCAxXTsnLCAnTWlzc2luZyBzcGFjZXMgYXJvdW5k
IC8gIFt3aGl0ZXNwYWNlL29wZXJhdG9yc10gWzNdJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgnZGVsZXRlIGFbc29tZV92YXJdOycsICcnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdy
ZXR1cm4gYVtzb21lX3Zhcl07JywgJycpCisKKyAgICAjIEJyYWNlIHVzYWdlCisgICAgZGVmIHRl
c3RfYnJhY2VzKHNlbGYpOgorICAgICAgICAjIEJyYWNlcyBzaG91bGRuJ3QgYmUgZm9sbG93ZWQg
YnkgYSA7IHVubGVzcyB0aGV5J3JlIGRlZmluaW5nIGEgc3RydWN0CisgICAgICAgICMgb3IgaW5p
dGlhbGl6aW5nIGFuIGFycmF5CisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBhWzNdID0g
eyAxLCAyLCAzIH07JywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAg
ICAnJydjb25zdCBpbnQgZm9vW10gPQorICAgICAgICAgICAgICAgICAgIHsxLCAyLCAzIH07Jycn
LAorICAgICAgICAgICAgJycpCisgICAgICAgICMgRm9yIHNpbmdsZSBsaW5lLCB1bm1hdGNoZWQg
J30nIHdpdGggYSAnOycgaXMgaWdub3JlZCAobm90IGVub3VnaCBjb250ZXh0KQorICAgICAgICBz
ZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnJydpbnQgYVszXSA9IHsg
MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDMgfTsnJycsCisgICAgICAgICAgICAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbXVs
dGlfbGluZV9saW50KAorICAgICAgICAgICAgJycnaW50IGFbMl1bM10gPSB7IHsgMSwgMiB9LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IDMsIDQgfSB9OycnJywKKyAgICAgICAgICAg
ICcnKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAn
JydpbnQgYVsyXVszXSA9CisgICAgICAgICAgICAgICAgICAgeyB7IDEsIDIgfSwKKyAgICAgICAg
ICAgICAgICAgICAgIHsgMywgNCB9IH07JycnLAorICAgICAgICAgICAgJycpCisKKyAgICAjIENI
RUNLL0VYUEVDVF9UUlVFL0VYUEVDVF9GQUxTRSByZXBsYWNlbWVudHMKKyAgICBkZWYgdGVzdF9j
aGVja19jaGVjayhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnQ0hFQ0soeCA9PSA0
MiknLAorICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zaWRlciB1c2luZyBDSEVDS19FUSBp
bnN0ZWFkIG9mIENIRUNLKGEgPT0gYiknCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3Jl
YWRhYmlsaXR5L2NoZWNrXSBbMl0nKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdDSEVDSyh4
ICE9IDQyKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNpZGVyIHVzaW5nIENIRUNL
X05FIGluc3RlYWQgb2YgQ0hFQ0soYSAhPSBiKScKKyAgICAgICAgICAgICAgICAgICAgICAgICAn
ICBbcmVhZGFiaWxpdHkvY2hlY2tdIFsyXScpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ0NI
RUNLKHggPj0gNDIpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2lkZXIgdXNpbmcg
Q0hFQ0tfR0UgaW5zdGVhZCBvZiBDSEVDSyhhID49IGIpJworICAgICAgICAgICAgICAgICAgICAg
ICAgICcgIFtyZWFkYWJpbGl0eS9jaGVja10gWzJdJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgnQ0hFQ0soeCA+IDQyKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNpZGVyIHVz
aW5nIENIRUNLX0dUIGluc3RlYWQgb2YgQ0hFQ0soYSA+IGIpJworICAgICAgICAgICAgICAgICAg
ICAgICAgICcgIFtyZWFkYWJpbGl0eS9jaGVja10gWzJdJykKKyAgICAgICAgc2VsZi5hc3NlcnRf
bGludCgnQ0hFQ0soeCA8PSA0MiknLAorICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zaWRl
ciB1c2luZyBDSEVDS19MRSBpbnN0ZWFkIG9mIENIRUNLKGEgPD0gYiknCisgICAgICAgICAgICAg
ICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2NoZWNrXSBbMl0nKQorICAgICAgICBzZWxmLmFz
c2VydF9saW50KCdDSEVDSyh4IDwgNDIpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnQ29u
c2lkZXIgdXNpbmcgQ0hFQ0tfTFQgaW5zdGVhZCBvZiBDSEVDSyhhIDwgYiknCisgICAgICAgICAg
ICAgICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2NoZWNrXSBbMl0nKQorCisgICAgICAgIHNl
bGYuYXNzZXJ0X2xpbnQoJ0RDSEVDSyh4ID09IDQyKScsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgJ0NvbnNpZGVyIHVzaW5nIERDSEVDS19FUSBpbnN0ZWFkIG9mIERDSEVDSyhhID09IGIpJwor
ICAgICAgICAgICAgICAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9jaGVja10gWzJdJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgnRENIRUNLKHggIT0gNDIpJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAnQ29uc2lkZXIgdXNpbmcgRENIRUNLX05FIGluc3RlYWQgb2YgRENIRUNLKGEg
IT0gYiknCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2NoZWNrXSBb
Ml0nKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdEQ0hFQ0soeCA+PSA0MiknLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICdDb25zaWRlciB1c2luZyBEQ0hFQ0tfR0UgaW5zdGVhZCBvZiBE
Q0hFQ0soYSA+PSBiKScKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkv
Y2hlY2tdIFsyXScpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ0RDSEVDSyh4ID4gNDIpJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2lkZXIgdXNpbmcgRENIRUNLX0dUIGluc3Rl
YWQgb2YgRENIRUNLKGEgPiBiKScKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICBbcmVhZGFi
aWxpdHkvY2hlY2tdIFsyXScpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ0RDSEVDSyh4IDw9
IDQyKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNpZGVyIHVzaW5nIERDSEVDS19M
RSBpbnN0ZWFkIG9mIERDSEVDSyhhIDw9IGIpJworICAgICAgICAgICAgICAgICAgICAgICAgICcg
IFtyZWFkYWJpbGl0eS9jaGVja10gWzJdJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnRENI
RUNLKHggPCA0MiknLAorICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zaWRlciB1c2luZyBE
Q0hFQ0tfTFQgaW5zdGVhZCBvZiBEQ0hFQ0soYSA8IGIpJworICAgICAgICAgICAgICAgICAgICAg
ICAgICcgIFtyZWFkYWJpbGl0eS9jaGVja10gWzJdJykKKworICAgICAgICBzZWxmLmFzc2VydF9s
aW50KAorICAgICAgICAgICAgJ0VYUEVDVF9UUlVFKCI0MiIgPT0geCknLAorICAgICAgICAgICAg
J0NvbnNpZGVyIHVzaW5nIEVYUEVDVF9FUSBpbnN0ZWFkIG9mIEVYUEVDVF9UUlVFKGEgPT0gYikn
CisgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY2hlY2tdIFsyXScpCisgICAgICAgIHNlbGYu
YXNzZXJ0X2xpbnQoCisgICAgICAgICAgICAnRVhQRUNUX1RSVUUoIjQyIiAhPSB4KScsCisgICAg
ICAgICAgICAnQ29uc2lkZXIgdXNpbmcgRVhQRUNUX05FIGluc3RlYWQgb2YgRVhQRUNUX1RSVUUo
YSAhPSBiKScKKyAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9jaGVja10gWzJdJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRfbGludCgKKyAgICAgICAgICAgICdFWFBFQ1RfVFJVRSgrNDIgPj0geCkn
LAorICAgICAgICAgICAgJ0NvbnNpZGVyIHVzaW5nIEVYUEVDVF9HRSBpbnN0ZWFkIG9mIEVYUEVD
VF9UUlVFKGEgPj0gYiknCisgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY2hlY2tdIFsyXScp
CisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAgICAnRVhQRUNUX1RSVUVfTSgt
NDIgPiB4KScsCisgICAgICAgICAgICAnQ29uc2lkZXIgdXNpbmcgRVhQRUNUX0dUX00gaW5zdGVh
ZCBvZiBFWFBFQ1RfVFJVRV9NKGEgPiBiKScKKyAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9j
aGVja10gWzJdJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKKyAgICAgICAgICAgICdFWFBF
Q1RfVFJVRV9NKDQyVSA8PSB4KScsCisgICAgICAgICAgICAnQ29uc2lkZXIgdXNpbmcgRVhQRUNU
X0xFX00gaW5zdGVhZCBvZiBFWFBFQ1RfVFJVRV9NKGEgPD0gYiknCisgICAgICAgICAgICAnICBb
cmVhZGFiaWxpdHkvY2hlY2tdIFsyXScpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisgICAg
ICAgICAgICAnRVhQRUNUX1RSVUVfTSg0MkwgPCB4KScsCisgICAgICAgICAgICAnQ29uc2lkZXIg
dXNpbmcgRVhQRUNUX0xUX00gaW5zdGVhZCBvZiBFWFBFQ1RfVFJVRV9NKGEgPCBiKScKKyAgICAg
ICAgICAgICcgIFtyZWFkYWJpbGl0eS9jaGVja10gWzJdJykKKworICAgICAgICBzZWxmLmFzc2Vy
dF9saW50KAorICAgICAgICAgICAgJ0VYUEVDVF9GQUxTRSh4ID09IDQyKScsCisgICAgICAgICAg
ICAnQ29uc2lkZXIgdXNpbmcgRVhQRUNUX05FIGluc3RlYWQgb2YgRVhQRUNUX0ZBTFNFKGEgPT0g
YiknCisgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY2hlY2tdIFsyXScpCisgICAgICAgIHNl
bGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAgICAnRVhQRUNUX0ZBTFNFKHggIT0gNDIpJywKKyAg
ICAgICAgICAgICdDb25zaWRlciB1c2luZyBFWFBFQ1RfRVEgaW5zdGVhZCBvZiBFWFBFQ1RfRkFM
U0UoYSAhPSBiKScKKyAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9jaGVja10gWzJdJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgKKyAgICAgICAgICAgICdFWFBFQ1RfRkFMU0UoeCA+PSA0
MiknLAorICAgICAgICAgICAgJ0NvbnNpZGVyIHVzaW5nIEVYUEVDVF9MVCBpbnN0ZWFkIG9mIEVY
UEVDVF9GQUxTRShhID49IGIpJworICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2NoZWNrXSBb
Ml0nKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KAorICAgICAgICAgICAgJ0FTU0VSVF9GQUxT
RSh4ID4gNDIpJywKKyAgICAgICAgICAgICdDb25zaWRlciB1c2luZyBBU1NFUlRfTEUgaW5zdGVh
ZCBvZiBBU1NFUlRfRkFMU0UoYSA+IGIpJworICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2No
ZWNrXSBbMl0nKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KAorICAgICAgICAgICAgJ0FTU0VS
VF9GQUxTRSh4IDw9IDQyKScsCisgICAgICAgICAgICAnQ29uc2lkZXIgdXNpbmcgQVNTRVJUX0dU
IGluc3RlYWQgb2YgQVNTRVJUX0ZBTFNFKGEgPD0gYiknCisgICAgICAgICAgICAnICBbcmVhZGFi
aWxpdHkvY2hlY2tdIFsyXScpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAg
ICAnQVNTRVJUX0ZBTFNFX00oeCA8IDQyKScsCisgICAgICAgICAgICAnQ29uc2lkZXIgdXNpbmcg
QVNTRVJUX0dFX00gaW5zdGVhZCBvZiBBU1NFUlRfRkFMU0VfTShhIDwgYiknCisgICAgICAgICAg
ICAnICBbcmVhZGFiaWxpdHkvY2hlY2tdIFsyXScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgnQ0hFQ0soc29tZV9pdGVyYXRvciA9PSBvYmouZW5kKCkpJywgJycpCisgICAgICAgIHNlbGYu
YXNzZXJ0X2xpbnQoJ0VYUEVDVF9UUlVFKHNvbWVfaXRlcmF0b3IgPT0gb2JqLmVuZCgpKScsICcn
KQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdFWFBFQ1RfRkFMU0Uoc29tZV9pdGVyYXRvciA9
PSBvYmouZW5kKCkpJywgJycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnQ0hFQ0soQ3Jl
YXRlVGVzdEZpbGUoZGlyLCAoMSA8PCAyMCkpKTsnLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRf
bGludCgnQ0hFQ0soQ3JlYXRlVGVzdEZpbGUoZGlyLCAoMSA+PiAyMCkpKTsnLCAnJykKKworICAg
ICAgICBzZWxmLmFzc2VydF9saW50KCdDSEVDSyh4PDQyKScsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgWydNaXNzaW5nIHNwYWNlcyBhcm91bmQgPCcKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgJyAgW3doaXRlc3BhY2Uvb3BlcmF0b3JzXSBbM10nLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAnQ29uc2lkZXIgdXNpbmcgQ0hFQ0tfTFQgaW5zdGVhZCBvZiBDSEVDSyhhIDwgYiknCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9jaGVja10gWzJdJ10pCisg
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ0NIRUNLKHg+NDIpJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAnQ29uc2lkZXIgdXNpbmcgQ0hFQ0tfR1QgaW5zdGVhZCBvZiBDSEVDSyhhID4gYikn
CisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2NoZWNrXSBbMl0nKQor
CisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAgICAnICAgIEVYUEVDVF9UUlVF
KDQyIDwgeCkgLy8gUmFuZG9tIGNvbW1lbnQuJywKKyAgICAgICAgICAgICdDb25zaWRlciB1c2lu
ZyBFWFBFQ1RfTFQgaW5zdGVhZCBvZiBFWFBFQ1RfVFJVRShhIDwgYiknCisgICAgICAgICAgICAn
ICBbcmVhZGFiaWxpdHkvY2hlY2tdIFsyXScpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisg
ICAgICAgICAgICAnRVhQRUNUX1RSVUUoIDQyIDwgeCApJywKKyAgICAgICAgICAgIFsnRXh0cmEg
c3BhY2UgYWZ0ZXIgKCBpbiBmdW5jdGlvbiBjYWxsJworICAgICAgICAgICAgICcgIFt3aGl0ZXNw
YWNlL3BhcmVuc10gWzRdJywKKyAgICAgICAgICAgICAnQ29uc2lkZXIgdXNpbmcgRVhQRUNUX0xU
IGluc3RlYWQgb2YgRVhQRUNUX1RSVUUoYSA8IGIpJworICAgICAgICAgICAgICcgIFtyZWFkYWJp
bGl0eS9jaGVja10gWzJdJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAg
ICAnQ0hFQ0soImZvbyIgPT0gImZvbyIpJywKKyAgICAgICAgICAgICdDb25zaWRlciB1c2luZyBD
SEVDS19FUSBpbnN0ZWFkIG9mIENIRUNLKGEgPT0gYiknCisgICAgICAgICAgICAnICBbcmVhZGFi
aWxpdHkvY2hlY2tdIFsyXScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnQ0hFQ0tfRVEo
ImZvbyIsICJmb28iKScsICcnKQorCisgICAgZGVmIHRlc3RfYnJhY2VfYXRfYmVnaW5fb2ZfbGlu
ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgneycsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgJ1RoaXMgeyBzaG91bGQgYmUgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbGlu
ZScKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9icmFjZXNdIFs0XScp
CisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICcjZW5k
aWZcbicKKyAgICAgICAgICAgICd7XG4nCisgICAgICAgICAgICAnfVxuJywKKyAgICAgICAgICAg
ICcnKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAn
aWYgKGNvbmRpdGlvbikgeycsCisgICAgICAgICAgICAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRf
bXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAgJyAgICBNQUNSTzEobWFjcm9BcmcpIHsnLAor
ICAgICAgICAgICAgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAg
ICAgICAgICAgICdBQ0NFU1NPUl9HRVRURVIoTWVzc2FnZUV2ZW50UG9ydHMpIHsnLAorICAgICAg
ICAgICAgJ1BsYWNlIGJyYWNlIG9uIGl0cyBvd24gbGluZSBmb3IgZnVuY3Rpb24gZGVmaW5pdGlv
bnMuICBbd2hpdGVzcGFjZS9icmFjZXNdIFs0XScpCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRp
X2xpbmVfbGludCgKKyAgICAgICAgICAgICdpbnQgZm9vKCkgeycsCisgICAgICAgICAgICAnUGxh
Y2UgYnJhY2Ugb24gaXRzIG93biBsaW5lIGZvciBmdW5jdGlvbiBkZWZpbml0aW9ucy4gIFt3aGl0
ZXNwYWNlL2JyYWNlc10gWzRdJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50
KAorICAgICAgICAgICAgJ2ludCBmb28oKSBjb25zdCB7JywKKyAgICAgICAgICAgICdQbGFjZSBi
cmFjZSBvbiBpdHMgb3duIGxpbmUgZm9yIGZ1bmN0aW9uIGRlZmluaXRpb25zLiAgW3doaXRlc3Bh
Y2UvYnJhY2VzXSBbNF0nKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisg
ICAgICAgICAgICAnaW50IGZvbygpIGNvbnN0XG4nCisgICAgICAgICAgICAne1xuJworICAgICAg
ICAgICAgJ31cbicsCisgICAgICAgICAgICAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlf
bGluZV9saW50KAorICAgICAgICAgICAgJ2lmIChjb25kaXRpb25cbicKKyAgICAgICAgICAgICcg
ICAgJiYgY29uZGl0aW9uMlxuJworICAgICAgICAgICAgJyAgICAmJiBjb25kaXRpb24zKSB7XG4n
CisgICAgICAgICAgICAnfVxuJywKKyAgICAgICAgICAgICcnKQorCisgICAgZGVmIHRlc3RfbWlz
bWF0Y2hpbmdfc3BhY2VzX2luX3BhcmVucyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgnaWYgKGZvbyApIHsnLCAnTWlzbWF0Y2hpbmcgc3BhY2VzIGluc2lkZSAoKSBpbiBpZicKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9wYXJlbnNdIFs1XScpCisgICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3N3aXRjaCAoIGZvbykgeycsICdNaXNtYXRjaGluZyBzcGFj
ZXMgaW5zaWRlICgpIGluIHN3aXRjaCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hp
dGVzcGFjZS9wYXJlbnNdIFs1XScpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ZvciAoZm9v
OyBiYTsgYmFyICkgeycsICdNaXNtYXRjaGluZyBzcGFjZXMgaW5zaWRlICgpIGluIGZvcicKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9wYXJlbnNdIFs1XScpCisgICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ZvciAoOyBmb287IGJhcikgeycsICcnKQorICAgICAgICBz
ZWxmLmFzc2VydF9saW50KCdmb3IgKCA7IGZvbzsgYmFyKSB7JywgJycpCisgICAgICAgIHNlbGYu
YXNzZXJ0X2xpbnQoJ2ZvciAoIDsgZm9vOyBiYXIgKSB7JywgJycpCisgICAgICAgIHNlbGYuYXNz
ZXJ0X2xpbnQoJ2ZvciAoZm9vOyBiYXI7ICkgeycsICcnKQorICAgICAgICBzZWxmLmFzc2VydF9s
aW50KCdmb3JlYWNoIChmb28sIGZvb3MgKSB7JywgJ01pc21hdGNoaW5nIHNwYWNlcyBpbnNpZGUg
KCkgaW4gZm9yZWFjaCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9w
YXJlbnNdIFs1XScpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ZvcmVhY2ggKCBmb28sIGZv
b3MpIHsnLCAnTWlzbWF0Y2hpbmcgc3BhY2VzIGluc2lkZSAoKSBpbiBmb3JlYWNoJworICAgICAg
ICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL3BhcmVuc10gWzVdJykKKyAgICAgICAg
c2VsZi5hc3NlcnRfbGludCgnd2hpbGUgKCAgZm9vICApIHsnLCAnU2hvdWxkIGhhdmUgemVybyBv
ciBvbmUgc3BhY2VzIGluc2lkZScKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICggYW5kICkg
aW4gd2hpbGUgIFt3aGl0ZXNwYWNlL3BhcmVuc10gWzVdJykKKworICAgIGRlZiB0ZXN0X3NwYWNp
bmdfZm9yX2ZuY2FsbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaWYgKGZvbykg
eycsICcnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdmb3IgKGZvbztiYXI7YmF6KSB7Jywg
JycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ZvcmVhY2ggKGZvbywgZm9vcykgeycsICcn
KQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCd3aGlsZSAoZm9vKSB7JywgJycpCisgICAgICAg
IHNlbGYuYXNzZXJ0X2xpbnQoJ3N3aXRjaCAoZm9vKSB7JywgJycpCisgICAgICAgIHNlbGYuYXNz
ZXJ0X2xpbnQoJ25ldyAoUmVuZGVyQXJlbmEoKSkgUmVuZGVySW5saW5lKGRvY3VtZW50KCkpJywg
JycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ZvbyggYmFyKScsICdFeHRyYSBzcGFjZSBh
ZnRlciAoIGluIGZ1bmN0aW9uIGNhbGwnCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3do
aXRlc3BhY2UvcGFyZW5zXSBbNF0nKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdmb29iYXIo
IFxcJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2Zvb2JhciggICAgIFxcJywgJycp
CisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJyggYSArIGIpJywgJ0V4dHJhIHNwYWNlIGFmdGVy
ICgnCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3doaXRlc3BhY2UvcGFyZW5zXSBbMl0n
KQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCcoKGErYikpJywgJycpCisgICAgICAgIHNlbGYu
YXNzZXJ0X2xpbnQoJ2ZvbyAoZm9vKScsICdFeHRyYSBzcGFjZSBiZWZvcmUgKCBpbiBmdW5jdGlv
biBjYWxsJworICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL3BhcmVuc10g
WzRdJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgndHlwZWRlZiBmb28gKCpmb28pKGZvbykn
LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgndHlwZWRlZiBmb28gKCpmb28xMmJhcl8p
KGZvbyknLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgndHlwZWRlZiBmb28gKEZvbzo6
KmJhcikoZm9vKScsICcnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdmb28gKEZvbzo6KmJh
cikoJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnRXh0cmEgc3BhY2UgYmVmb3JlICggaW4g
ZnVuY3Rpb24gY2FsbCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9w
YXJlbnNdIFs0XScpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3R5cGVkZWYgZm9vIChGb286
OipiYXIpKCcsICcnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCcoZm9vKShiYXIpJywgJycp
CisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ0ZvbyAoKmZvbykoYmFyKScsICcnKQorICAgICAg
ICBzZWxmLmFzc2VydF9saW50KCdGb28gKCpmb28pKEJhciBiYXIsJywgJycpCisgICAgICAgIHNl
bGYuYXNzZXJ0X2xpbnQoJ2NoYXIgKCpwKVtzaXplb2YoZm9vKV0gPSAmZm9vJywgJycpCisgICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2NoYXIgKCZyZWYpW3NpemVvZihmb28pXSA9ICZmb28nLCAn
JykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnY29uc3QgY2hhcjMyICgqdGFibGVbXSlbNl07
JywgJycpCisKKyAgICBkZWYgdGVzdF9zcGFjaW5nX2JlZm9yZV9icmFjZXMoc2VsZik6CisgICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2lmIChmb28peycsICdNaXNzaW5nIHNwYWNlIGJlZm9yZSB7
JworICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzVdJykK
KyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnZm9yeycsICdNaXNzaW5nIHNwYWNlIGJlZm9yZSB7
JworICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzVdJykK
KyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnZm9yIHsnLCAnJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRfbGludCgnRVhQRUNUX0RFQlVHX0RFQVRIKHsnLCAnJykKKworICAgIGRlZiB0ZXN0X3NwYWNp
bmdfYXJvdW5kX2Vsc2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ31lbHNlIHsn
LCAnTWlzc2luZyBzcGFjZSBiZWZvcmUgZWxzZScKKyAgICAgICAgICAgICAgICAgICAgICAgICAn
ICBbd2hpdGVzcGFjZS9icmFjZXNdIFs1XScpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ30g
ZWxzZXsnLCAnTWlzc2luZyBzcGFjZSBiZWZvcmUgeycKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAnICBbd2hpdGVzcGFjZS9icmFjZXNdIFs1XScpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQo
J30gZWxzZSB7JywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ30gZWxzZSBpZicsICcn
KQorCisgICAgZGVmIHRlc3Rfc3BhY2luZ19mb3JfYmluYXJ5X29wcyhzZWxmKToKKyAgICAgICAg
c2VsZi5hc3NlcnRfbGludCgnaWYgKGZvbzw9YmFyKSB7JywgJ01pc3Npbmcgc3BhY2VzIGFyb3Vu
ZCA8PScKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9vcGVyYXRvcnNd
IFszXScpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2lmIChmb288YmFyKSB7JywgJ01pc3Np
bmcgc3BhY2VzIGFyb3VuZCA8JworICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNw
YWNlL29wZXJhdG9yc10gWzNdJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaWYgKGZvbzxi
YXItPmJheikgeycsICdNaXNzaW5nIHNwYWNlcyBhcm91bmQgPCcKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAnICBbd2hpdGVzcGFjZS9vcGVyYXRvcnNdIFszXScpCisgICAgICAgIHNlbGYuYXNz
ZXJ0X2xpbnQoJ2lmIChmb288YmFyLT5iYXIpIHsnLCAnTWlzc2luZyBzcGFjZXMgYXJvdW5kIDwn
CisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3doaXRlc3BhY2Uvb3BlcmF0b3JzXSBbM10n
KQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCd0eXBlZGVmIGhhc2hfbWFwPEZvbywgQmFyJywg
J01pc3Npbmcgc3BhY2VzIGFyb3VuZCA8JworICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3
aGl0ZXNwYWNlL29wZXJhdG9yc10gWzNdJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgndHlw
ZWRlZiBoYXNoX21hcDxGb29vb29UeXBlLCBCYWFhYWFyVHlwZSwnLCAnJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgnYTxGb28+IHQrPWI7JywgJ01pc3Npbmcgc3BhY2VzIGFyb3VuZCArPScK
KyAgICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9vcGVyYXRvcnNdIFszXScp
CisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2E8Rm9vPiB0LT1iOycsICdNaXNzaW5nIHNwYWNl
cyBhcm91bmQgLT0nCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3doaXRlc3BhY2Uvb3Bl
cmF0b3JzXSBbM10nKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdhPEZvbyo+IHQqPWI7Jywg
J01pc3Npbmcgc3BhY2VzIGFyb3VuZCAqPScKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICBb
d2hpdGVzcGFjZS9vcGVyYXRvcnNdIFszXScpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2E8
Rm9vKj4gdC89YjsnLCAnTWlzc2luZyBzcGFjZXMgYXJvdW5kIC89JworICAgICAgICAgICAgICAg
ICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL29wZXJhdG9yc10gWzNdJykKKyAgICAgICAgc2VsZi5h
c3NlcnRfbGludCgnYTxGb28qPiB0fD1iOycsICdNaXNzaW5nIHNwYWNlcyBhcm91bmQgfD0nCisg
ICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3doaXRlc3BhY2Uvb3BlcmF0b3JzXSBbM10nKQor
ICAgICAgICBzZWxmLmFzc2VydF9saW50KCdhPEZvbyo+IHQmPWI7JywgJ01pc3Npbmcgc3BhY2Vz
IGFyb3VuZCAmPScKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9vcGVy
YXRvcnNdIFszXScpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2E8Rm9vKj4gdDw8PWI7Jywg
J01pc3Npbmcgc3BhY2VzIGFyb3VuZCA8PD0nCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAg
W3doaXRlc3BhY2Uvb3BlcmF0b3JzXSBbM10nKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdh
PEZvbyo+IHQ+Pj1iOycsICdNaXNzaW5nIHNwYWNlcyBhcm91bmQgPj49JworICAgICAgICAgICAg
ICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL29wZXJhdG9yc10gWzNdJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgnYTxGb28qPiB0Pj49JmJ8YzsnLCAnTWlzc2luZyBzcGFjZXMgYXJvdW5k
ID4+PScKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9vcGVyYXRvcnNd
IFszXScpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2E8Rm9vKj4gdDw8PSpiL2M7JywgJ01p
c3Npbmcgc3BhY2VzIGFyb3VuZCA8PD0nCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3do
aXRlc3BhY2Uvb3BlcmF0b3JzXSBbM10nKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdhPEZv
bz4gdCAtPSBiOycsICcnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdhPEZvbz4gdCArPSBi
OycsICcnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdhPEZvbyo+IHQgKj0gYjsnLCAnJykK
KyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnYTxGb28qPiB0IC89IGI7JywgJycpCisgICAgICAg
IHNlbGYuYXNzZXJ0X2xpbnQoJ2E8Rm9vKj4gdCB8PSBiOycsICcnKQorICAgICAgICBzZWxmLmFz
c2VydF9saW50KCdhPEZvbyo+IHQgJj0gYjsnLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgnYTxGb28qPiB0IDw8PSBiOycsICcnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdhPEZv
byo+IHQgPj49IGI7JywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2E8Rm9vKj4gdCA+
Pj0gJmJ8YzsnLCAnTWlzc2luZyBzcGFjZXMgYXJvdW5kIHwnCisgICAgICAgICAgICAgICAgICAg
ICAgICAgJyAgW3doaXRlc3BhY2Uvb3BlcmF0b3JzXSBbM10nKQorICAgICAgICBzZWxmLmFzc2Vy
dF9saW50KCdhPEZvbyo+IHQgPDw9ICpiL2M7JywgJ01pc3Npbmcgc3BhY2VzIGFyb3VuZCAvJwor
ICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL29wZXJhdG9yc10gWzNdJykK
KyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnYTxGb28qPiB0IDw8PSBiL2M7IC8vVGVzdCcsIFsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAnU2hvdWxkIGhhdmUgYSBzcGFjZSBiZXR3ZWVuIC8v
IGFuZCBjb21tZW50ICAnCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1t3aGl0ZXNwYWNlL2Nv
bW1lbnRzXSBbNF0nLCAnTWlzc2luZycKKyAgICAgICAgICAgICAgICAgICAgICAgICAnIHNwYWNl
cyBhcm91bmQgLyAgW3doaXRlc3BhY2Uvb3BlcmF0b3JzXSBbM10nXSkKKyAgICAgICAgc2VsZi5h
c3NlcnRfbGludCgnYTxGb28qPiB0IDw8PSBifHxjOyAgLy9UZXN0JywgWydPbmUgc3BhY2UgYmVm
b3JlIGVuZCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAnIG9mIGxpbmUgY29tbWVudHMgIFt3
aGl0ZXNwYWNlL2NvbW1lbnRzXSBbNV0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTaG91
bGQgaGF2ZSBhIHNwYWNlIGJldHdlZW4gLy8gYW5kIGNvbW1lbnQgICcKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAnW3doaXRlc3BhY2UvY29tbWVudHNdIFs0XScsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgJ01pc3Npbmcgc3BhY2VzIGFyb3VuZCB8fCAgW3doaXRlc3BhY2Uvb3BlcmF0b3Jz
XSBbM10nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnYTxGb28qPiB0IDw8PSBiJiZjOyAv
LyBUZXN0JywgJ01pc3Npbmcgc3BhY2VzIGFyb3VuZCcKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAnICYmICBbd2hpdGVzcGFjZS9vcGVyYXRvcnNdIFszXScpCisgICAgICAgIHNlbGYuYXNzZXJ0
X2xpbnQoJ2E8Rm9vKj4gdCA8PD0gYiYmJmM7IC8vIFRlc3QnLCAnTWlzc2luZyBzcGFjZXMgYXJv
dW5kJworICAgICAgICAgICAgICAgICAgICAgICAgICcgJiYgIFt3aGl0ZXNwYWNlL29wZXJhdG9y
c10gWzNdJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnYTxGb28qPiB0IDw8PSBiJiYqYzsg
Ly8gVGVzdCcsICdNaXNzaW5nIHNwYWNlcyBhcm91bmQnCisgICAgICAgICAgICAgICAgICAgICAg
ICAgJyAmJiAgW3doaXRlc3BhY2Uvb3BlcmF0b3JzXSBbM10nKQorICAgICAgICBzZWxmLmFzc2Vy
dF9saW50KCdhPEZvbyo+IHQgPDw9IGIgJiYgKmM7IC8vIFRlc3QnLCAnJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgnYTxGb28qPiB0IDw8PSBiICYmICZjOyAvLyBUZXN0JywgJycpCisgICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2E8Rm9vKj4gdCA8PD0gYiB8fCAmYzsgIC8qVGVzdCcsICdD
b21wbGV4IG11bHRpLWxpbmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICcvKi4uLiovLXN0
eWxlIGNvbW1lbnQgZm91bmQuIExpbnQgbWF5IGdpdmUgYm9ndXMgJworICAgICAgICAgICAgICAg
ICAgICAgICAgICd3YXJuaW5ncy4gIENvbnNpZGVyIHJlcGxhY2luZyB0aGVzZSB3aXRoIC8vLXN0
eWxlJworICAgICAgICAgICAgICAgICAgICAgICAgICcgY29tbWVudHMsIHdpdGggI2lmIDAuLi4j
ZW5kaWYsIG9yIHdpdGggbW9yZSBjbGVhcmx5JworICAgICAgICAgICAgICAgICAgICAgICAgICcg
c3RydWN0dXJlZCBtdWx0aS1saW5lIGNvbW1lbnRzLiAgW3JlYWRhYmlsaXR5L211bHRpbGluZV9j
b21tZW50XSBbNV0nKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdhPEZvbyY+IHQgPDw9ICZi
IHwgJmM7JywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2E8Rm9vKj4gdCA8PD0gJmIg
JiAmYzsgLy8gVGVzdCcsICcnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdhPEZvbyo+IHQg
PDw9ICpiIC8gJmM7IC8vIFRlc3QnLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaWYg
KGE9YiA9PSAxKScsICdNaXNzaW5nIHNwYWNlcyBhcm91bmQgPSAgW3doaXRlc3BhY2Uvb3BlcmF0
b3JzXSBbNF0nKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdhID0gMTw8MjAnLCAnTWlzc2lu
ZyBzcGFjZXMgYXJvdW5kIDw8ICBbd2hpdGVzcGFjZS9vcGVyYXRvcnNdIFszXScpCisgICAgICAg
IHNlbGYuYXNzZXJ0X2xpbnQoJ2lmIChhID0gYiA9PSAxKScsICcnKQorICAgICAgICBzZWxmLmFz
c2VydF9saW50KCdhID0gMSA8PCAyMCcsICcnKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9s
aW5lX2xpbnQoJyNpbmNsdWRlICJjb25maWcuaCJcbiNpbmNsdWRlIDxzeXMvaW8uaD5cbicsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRfbXVsdGlfbGluZV9saW50KCcjaW5jbHVkZSAiY29uZmlnLmgiXG4jaW1wb3J0IDxmb28vYmFy
Lmg+XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycpCisKKyAgICBk
ZWYgdGVzdF9zcGFjaW5nX2JlZm9yZV9sYXN0X3NlbWljb2xvbihzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgnY2FsbF9mdW5jdGlvbigpIDsnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICdFeHRyYSBzcGFjZSBiZWZvcmUgbGFzdCBzZW1pY29sb24uIElmIHRoaXMgc2hvdWxkIGJl
IGFuICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZW1wdHkgc3RhdGVtZW50LCB1c2UgeyB9
IGluc3RlYWQuJworICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL3NlbWlj
b2xvbl0gWzVdJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnd2hpbGUgKHRydWUpIDsnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICdFeHRyYSBzcGFjZSBiZWZvcmUgbGFzdCBzZW1pY29s
b24uIElmIHRoaXMgc2hvdWxkIGJlIGFuICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZW1w
dHkgc3RhdGVtZW50LCB1c2UgeyB9IGluc3RlYWQuJworICAgICAgICAgICAgICAgICAgICAgICAg
ICcgIFt3aGl0ZXNwYWNlL3NlbWljb2xvbl0gWzVdJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgnZGVmYXVsdDo7JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU2VtaWNvbG9uIGRlZmlu
aW5nIGVtcHR5IHN0YXRlbWVudC4gVXNlIHsgfSBpbnN0ZWFkLicKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAnICBbd2hpdGVzcGFjZS9zZW1pY29sb25dIFs1XScpCisgICAgICAgIHNlbGYuYXNz
ZXJ0X2xpbnQoJyAgICAgIDsnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdMaW5lIGNvbnRh
aW5zIG9ubHkgc2VtaWNvbG9uLiBJZiB0aGlzIHNob3VsZCBiZSBhbiBlbXB0eSAnCisgICAgICAg
ICAgICAgICAgICAgICAgICAgJ3N0YXRlbWVudCwgdXNlIHsgfSBpbnN0ZWFkLicKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9zZW1pY29sb25dIFs1XScpCisgICAgICAg
IHNlbGYuYXNzZXJ0X2xpbnQoJ2ZvciAoaW50IGkgPSAwOyA7JywgJycpCisKKyAgICAjIFN0YXRp
YyBvciBnbG9iYWwgU1RMIHN0cmluZ3MuCisgICAgZGVmIHRlc3Rfc3RhdGljX29yX2dsb2JhbF9z
dGxzdHJpbmdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdzdHJpbmcgZm9vOycs
CisgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZvciBhIHN0YXRpYy9nbG9iYWwgc3RyaW5nIGNv
bnN0YW50LCB1c2UgYSBDIHN0eWxlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAnc3RyaW5n
IGluc3RlYWQ6ICJjaGFyIGZvb1tdIi4nCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3J1
bnRpbWUvc3RyaW5nXSBbNF0nKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdzdHJpbmcga0Zv
byA9ICJoZWxsbyI7IC8vIEVuZ2xpc2gnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdGb3Ig
YSBzdGF0aWMvZ2xvYmFsIHN0cmluZyBjb25zdGFudCwgdXNlIGEgQyBzdHlsZSAnCisgICAgICAg
ICAgICAgICAgICAgICAgICAgJ3N0cmluZyBpbnN0ZWFkOiAiY2hhciBrRm9vW10iLicKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAnICBbcnVudGltZS9zdHJpbmddIFs0XScpCisgICAgICAgIHNl
bGYuYXNzZXJ0X2xpbnQoJ3N0YXRpYyBzdHJpbmcgZm9vOycsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgJ0ZvciBhIHN0YXRpYy9nbG9iYWwgc3RyaW5nIGNvbnN0YW50LCB1c2UgYSBDIHN0eWxl
ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAnc3RyaW5nIGluc3RlYWQ6ICJzdGF0aWMgY2hh
ciBmb29bXSIuJworICAgICAgICAgICAgICAgICAgICAgICAgICcgIFtydW50aW1lL3N0cmluZ10g
WzRdJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnc3RhdGljIGNvbnN0IHN0cmluZyBmb287
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnRm9yIGEgc3RhdGljL2dsb2JhbCBzdHJpbmcg
Y29uc3RhbnQsIHVzZSBhIEMgc3R5bGUgJworICAgICAgICAgICAgICAgICAgICAgICAgICdzdHJp
bmcgaW5zdGVhZDogInN0YXRpYyBjb25zdCBjaGFyIGZvb1tdIi4nCisgICAgICAgICAgICAgICAg
ICAgICAgICAgJyAgW3J1bnRpbWUvc3RyaW5nXSBbNF0nKQorICAgICAgICBzZWxmLmFzc2VydF9s
aW50KCdzdHJpbmcgRm9vOjpiYXI7JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnRm9yIGEg
c3RhdGljL2dsb2JhbCBzdHJpbmcgY29uc3RhbnQsIHVzZSBhIEMgc3R5bGUgJworICAgICAgICAg
ICAgICAgICAgICAgICAgICdzdHJpbmcgaW5zdGVhZDogImNoYXIgRm9vOjpiYXJbXSIuJworICAg
ICAgICAgICAgICAgICAgICAgICAgICcgIFtydW50aW1lL3N0cmluZ10gWzRdJykKKyAgICAgICAg
IyBSYXJlIGNhc2UuCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3N0cmluZyBmb28oImZvb2Jh
ciIpOycsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZvciBhIHN0YXRpYy9nbG9iYWwgc3Ry
aW5nIGNvbnN0YW50LCB1c2UgYSBDIHN0eWxlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAn
c3RyaW5nIGluc3RlYWQ6ICJjaGFyIGZvb1tdIi4nCisgICAgICAgICAgICAgICAgICAgICAgICAg
JyAgW3J1bnRpbWUvc3RyaW5nXSBbNF0nKQorICAgICAgICAjIFNob3VsZCBub3QgY2F0Y2ggbG9j
YWwgb3IgbWVtYmVyIHZhcmlhYmxlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnICAgIHN0
cmluZyBmb28nLCAnJykKKyAgICAgICAgIyBTaG91bGQgbm90IGNhdGNoIGZ1bmN0aW9ucy4KKyAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgnc3RyaW5nIEVtcHR5U3RyaW5nKCkgeyByZXR1cm4gIiI7
IH0nLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnc3RyaW5nIEVtcHR5U3RyaW5nICgp
IHsgcmV0dXJuICIiOyB9JywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3N0cmluZyBW
ZXJ5TG9uZ05hbWVGdW5jdGlvblNvbWV0aW1lc0VuZHNXaXRoKFxuJworICAgICAgICAgICAgICAg
ICAgICAgICAgICcgICAgVmVyeUxvbmdOYW1lVHlwZSB2ZXJ5X2xvbmdfbmFtZV92YXJpYWJsZSkg
e30nLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgndGVtcGxhdGU8PlxuJworICAgICAg
ICAgICAgICAgICAgICAgICAgICdzdHJpbmcgRnVuY3Rpb25UZW1wbGF0ZVNwZWNpYWxpemF0aW9u
PFNvbWVUeXBlPihcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgaW50IHgpIHsg
cmV0dXJuICIiOyB9JywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3RlbXBsYXRlPD5c
bicKKyAgICAgICAgICAgICAgICAgICAgICAgICAnc3RyaW5nIEZ1bmN0aW9uVGVtcGxhdGVTcGVj
aWFsaXphdGlvbjx2ZWN0b3I8QTo6Qj4qID4oXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAg
JyAgICAgIGludCB4KSB7IHJldHVybiAiIjsgfScsICcnKQorCisgICAgICAgICMgc2hvdWxkIG5v
dCBjYXRjaCBtZXRob2RzIG9mIHRlbXBsYXRlIGNsYXNzZXMuCisgICAgICAgIHNlbGYuYXNzZXJ0
X2xpbnQoJ3N0cmluZyBDbGFzczxUeXBlPjo6TWV0aG9kKCkgY29uc3RcbicKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAne1xuJworICAgICAgICAgICAgICAgICAgICAgICAgICcgIHJldHVybiAi
IjtcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJywgJycpCisgICAgICAgIHNlbGYu
YXNzZXJ0X2xpbnQoJ3N0cmluZyBDbGFzczxUeXBlPjo6TWV0aG9kKFxuJworICAgICAgICAgICAg
ICAgICAgICAgICAgICcgICBpbnQgYXJnKSBjb25zdFxuJworICAgICAgICAgICAgICAgICAgICAg
ICAgICd7XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcmV0dXJuICIiO1xuJworICAg
ICAgICAgICAgICAgICAgICAgICAgICd9XG4nLCAnJykKKworICAgIGRlZiB0ZXN0X25vX3NwYWNl
c19pbl9mdW5jdGlvbl9jYWxscyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnVGVs
bFN0b3J5KDEsIDMpOycsCisgICAgICAgICAgICAgICAgICAgICAgICAgJycpCisgICAgICAgIHNl
bGYuYXNzZXJ0X2xpbnQoJ1RlbGxTdG9yeSgxLCAzICk7JywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAnRXh0cmEgc3BhY2UgYmVmb3JlICknCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAg
W3doaXRlc3BhY2UvcGFyZW5zXSBbMl0nKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdUZWxs
U3RvcnkoMSAvKiB3b2xmICovLCAzIC8qIHBpZ3MgKi8pOycsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgnI2VuZGlmXG4g
ICAgKTsnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycpCisKKyAgICBk
ZWYgdGVzdF90d29fc3BhY2VzX2JldHdlZW5fY29kZV9hbmRfY29tbWVudHMoc2VsZik6CisgICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ30gLy8gbmFtZXNwYWNlIGZvbycsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ30vLyBuYW1lc3BhY2Ug
Zm9vJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnT25lIHNwYWNlIGJlZm9yZSBlbmQgb2Yg
bGluZSBjb21tZW50cycKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9j
b21tZW50c10gWzVdJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgncHJpbnRmKCJmb28iKTsg
Ly8gT3V0c2lkZSBxdW90ZXMuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRfbGludCgnaW50IGkgPSAwOyAvLyBIYXZpbmcgb25lIHNwYWNlIGlzIGZp
bmUuJywnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50IGkgPSAwOyAgLy8gSGF2aW5n
IHR3byBzcGFjZXMgaXMgYmFkLicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ09uZSBzcGFj
ZSBiZWZvcmUgZW5kIG9mIGxpbmUgY29tbWVudHMnCisgICAgICAgICAgICAgICAgICAgICAgICAg
JyAgW3doaXRlc3BhY2UvY29tbWVudHNdIFs1XScpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQo
J2ludCBpID0gMDsgICAvLyBIYXZpbmcgdGhyZWUgc3BhY2VzIGlzIGJhZC4nLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICdPbmUgc3BhY2UgYmVmb3JlIGVuZCBvZiBsaW5lIGNvbW1lbnRzJwor
ICAgICAgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL2NvbW1lbnRzXSBbNV0nKQor
ICAgICAgICBzZWxmLmFzc2VydF9saW50KCcvLyBUb3AgbGV2ZWwgY29tbWVudCcsICcnKQorICAg
ICAgICBzZWxmLmFzc2VydF9saW50KCcgICAgLy8gTGluZSBzdGFydHMgd2l0aCBmb3VyIHNwYWNl
cy4nLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnZm9vKCk7XG4nCisgICAgICAgICAg
ICAgICAgICAgICAgICAgJ3sgLy8gQSBzY29wZSBpcyBvcGVuaW5nLicsICcnKQorICAgICAgICBz
ZWxmLmFzc2VydF9saW50KCcgICAgZm9vKCk7XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAg
JyAgICB7IC8vIEFuIGluZGVudGVkIHNjb3BlIGlzIG9wZW5pbmcuJywgJycpCisgICAgICAgIHNl
bGYuYXNzZXJ0X2xpbnQoJ2lmIChmb28pIHsgLy8gbm90IGEgcHVyZSBzY29wZScsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3ByaW50Zigi
Ly8gSW4gcXVvdGVzLiIpJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3ByaW50Zigi
XFwiJXMgLy8gSW4gcXVvdGVzLiIpJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3By
aW50ZigiJXMiLCAiLy8gSW4gcXVvdGVzLiIpJywgJycpCisKKyAgICBkZWYgdGVzdF9zcGFjZV9h
ZnRlcl9jb21tZW50X21hcmtlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnLy8n
LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnLy94JywgJ1Nob3VsZCBoYXZlIGEgc3Bh
Y2UgYmV0d2VlbiAvLyBhbmQgY29tbWVudCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICBb
d2hpdGVzcGFjZS9jb21tZW50c10gWzRdJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnLy8g
eCcsICcnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCcvLy0tLS0nLCAnJykKKyAgICAgICAg
c2VsZi5hc3NlcnRfbGludCgnLy89PT09JywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQo
Jy8vLy8vLycsICcnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCcvLy8vLy8geCcsICcnKQor
ICAgICAgICBzZWxmLmFzc2VydF9saW50KCcvLy8geCcsICcnKQorICAgICAgICBzZWxmLmFzc2Vy
dF9saW50KCcvLy8veCcsICdTaG91bGQgaGF2ZSBhIHNwYWNlIGJldHdlZW4gLy8gYW5kIGNvbW1l
bnQnCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgW3doaXRlc3BhY2UvY29tbWVudHNdIFs0
XScpCisKKyAgICBkZWYgdGVzdF9uZXdsaW5lX2F0X2VvZihzZWxmKToKKyAgICAgICAgZGVmIGRv
X3Rlc3Qoc2VsZiwgZGF0YSwgaXNfbWlzc2luZ19lb2YpOgorICAgICAgICAgICAgZXJyb3JfY29s
bGVjdG9yID0gRXJyb3JDb2xsZWN0b3Ioc2VsZi5hc3NlcnRfKQorICAgICAgICAgICAgY3BwX3N0
eWxlLnByb2Nlc3NfZmlsZV9kYXRhKCdmb28uY3BwJywgJ2NwcCcsIGRhdGEuc3BsaXQoJ1xuJyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29sbGVjdG9y
KQorICAgICAgICAgICAgIyBUaGUgd2FybmluZyBhcHBlYXJzIG9ubHkgb25jZS4KKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICAgICAgICAgIGludChpc19taXNzaW5nX2Vv
ZiksCisgICAgICAgICAgICAgICAgZXJyb3JfY29sbGVjdG9yLnJlc3VsdHMoKS5jb3VudCgKKyAg
ICAgICAgICAgICAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIGEgbmV3bGluZSBjaGFyYWN0ZXIgYXQg
dGhlIGVuZCBvZiB0aGUgZmlsZS4nCisgICAgICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNl
L2VuZGluZ19uZXdsaW5lXSBbNV0nKSkKKworICAgICAgICBkb190ZXN0KHNlbGYsICcvLyBOZXds
aW5lXG4vLyBhdCBFT0ZcbicsIEZhbHNlKQorICAgICAgICBkb190ZXN0KHNlbGYsICcvLyBObyBu
ZXdsaW5lXG4vLyBhdCBFT0YnLCBUcnVlKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF91dGY4KHNl
bGYpOgorICAgICAgICBkZWYgZG9fdGVzdChzZWxmLCByYXdfYnl0ZXMsIGhhc19pbnZhbGlkX3V0
ZjgpOgorICAgICAgICAgICAgZXJyb3JfY29sbGVjdG9yID0gRXJyb3JDb2xsZWN0b3Ioc2VsZi5h
c3NlcnRfKQorICAgICAgICAgICAgY3BwX3N0eWxlLnByb2Nlc3NfZmlsZV9kYXRhKAorICAgICAg
ICAgICAgICAgICdmb28uY3BwJywgJ2NwcCcsCisgICAgICAgICAgICAgICAgdW5pY29kZShyYXdf
Ynl0ZXMsICd1dGY4JywgJ3JlcGxhY2UnKS5zcGxpdCgnXG4nKSwKKyAgICAgICAgICAgICAgICBl
cnJvcl9jb2xsZWN0b3IpCisgICAgICAgICAgICAjIFRoZSB3YXJuaW5nIGFwcGVhcnMgb25seSBv
bmNlLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgICAgICAgICAgaW50
KGhhc19pbnZhbGlkX3V0ZjgpLAorICAgICAgICAgICAgICAgIGVycm9yX2NvbGxlY3Rvci5yZXN1
bHRzKCkuY291bnQoCisgICAgICAgICAgICAgICAgICAgICdMaW5lIGNvbnRhaW5zIGludmFsaWQg
VVRGLTgnCisgICAgICAgICAgICAgICAgICAgICcgKG9yIFVuaWNvZGUgcmVwbGFjZW1lbnQgY2hh
cmFjdGVyKS4nCisgICAgICAgICAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS91dGY4XSBbNV0n
KSkKKworICAgICAgICBkb190ZXN0KHNlbGYsICdIZWxsbyB3b3JsZFxuJywgRmFsc2UpCisgICAg
ICAgIGRvX3Rlc3Qoc2VsZiwgJ1x4ZTlceDhlXHhiZFxuJywgRmFsc2UpCisgICAgICAgIGRvX3Rl
c3Qoc2VsZiwgJ1x4ZTl4XHg4ZVx4YmRcbicsIFRydWUpCisgICAgICAgICMgVGhpcyBpcyB0aGUg
ZW5jb2Rpbmcgb2YgdGhlIHJlcGxhY2VtZW50IGNoYXJhY3RlciBpdHNlbGYgKHdoaWNoCisgICAg
ICAgICMgeW91IGNhbiBzZWUgYnkgZXZhbHVhdGluZyBjb2RlY3MuZ2V0ZW5jb2RlcigndXRmOCcp
KHUnXHVmZmZkJykpLgorICAgICAgICBkb190ZXN0KHNlbGYsICdceGVmXHhiZlx4YmRcbicsIFRy
dWUpCisKKyAgICBkZWYgdGVzdF9pc19ibGFua19saW5lKHNlbGYpOgorICAgICAgICBzZWxmLmFz
c2VydF8oY3BwX3N0eWxlLmlzX2JsYW5rX2xpbmUoJycpKQorICAgICAgICBzZWxmLmFzc2VydF8o
Y3BwX3N0eWxlLmlzX2JsYW5rX2xpbmUoJyAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKGNwcF9z
dHlsZS5pc19ibGFua19saW5lKCcgXHRcclxuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Xyhub3Qg
Y3BwX3N0eWxlLmlzX2JsYW5rX2xpbmUoJ2ludCBhOycpKQorICAgICAgICBzZWxmLmFzc2VydF8o
bm90IGNwcF9zdHlsZS5pc19ibGFua19saW5lKCd7JykpCisKKyAgICBkZWYgdGVzdF9ibGFua19s
aW5lc19jaGVjayhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfYmxhbmtfbGluZXNfY2hlY2so
Wyd7XG4nLCAnXG4nLCAnXG4nLCAnfVxuJ10sIDEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0X2Js
YW5rX2xpbmVzX2NoZWNrKFsnICBpZiAoZm9vKSB7XG4nLCAnXG4nLCAnICB9XG4nXSwgMSwgMSkK
KyAgICAgICAgc2VsZi5hc3NlcnRfYmxhbmtfbGluZXNfY2hlY2soCisgICAgICAgICAgICBbJ1xu
JywgJy8vIHtcbicsICdcbicsICdcbicsICcvLyBDb21tZW50XG4nLCAne1xuJywgJ31cbiddLCAw
LCAwKQorICAgICAgICBzZWxmLmFzc2VydF9ibGFua19saW5lc19jaGVjayhbJ1xuJywgJ3J1bigi
eyIpO1xuJywgJ1xuJ10sIDAsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0X2JsYW5rX2xpbmVzX2No
ZWNrKFsnXG4nLCAnICBpZiAoZm9vKSB7IHJldHVybiAwOyB9XG4nLCAnXG4nXSwgMCwgMCkKKwor
ICAgIGRlZiB0ZXN0X2FsbG93X2JsYW5rX2xpbmVfYmVmb3JlX2Nsb3NpbmdfbmFtZXNwYWNlKHNl
bGYpOgorICAgICAgICBlcnJvcl9jb2xsZWN0b3IgPSBFcnJvckNvbGxlY3RvcihzZWxmLmFzc2Vy
dF8pCisgICAgICAgIGNwcF9zdHlsZS5wcm9jZXNzX2ZpbGVfZGF0YSgnZm9vLmNwcCcsICdjcHAn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyduYW1lc3BhY2UgeycsICcn
LCAnfSAgLy8gbmFtZXNwYWNlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlcnJvcl9jb2xsZWN0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDAsIGVycm9yX2Nv
bGxlY3Rvci5yZXN1bHRzKCkuY291bnQoCisgICAgICAgICAgICAnQmxhbmsgbGluZSBhdCB0aGUg
ZW5kIG9mIGEgY29kZSBibG9jay4gIElzIHRoaXMgbmVlZGVkPycKKyAgICAgICAgICAgICcgIFt3
aGl0ZXNwYWNlL2JsYW5rX2xpbmVdIFszXScpKQorCisgICAgZGVmIHRlc3RfYWxsb3dfYmxhbmtf
bGluZV9iZWZvcmVfaWZfZWxzZV9jaGFpbihzZWxmKToKKyAgICAgICAgZXJyb3JfY29sbGVjdG9y
ID0gRXJyb3JDb2xsZWN0b3Ioc2VsZi5hc3NlcnRfKQorICAgICAgICBjcHBfc3R5bGUucHJvY2Vz
c19maWxlX2RhdGEoJ2Zvby5jcHAnLCAnY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFsnaWYgKGhvZ2UpIHsnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICcnLCAgIyBObyB3YXJuaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ30gZWxzZSBpZiAocGl5bykgeycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJycsICAjIE5vIHdhcm5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnfSBlbHNlIGlmIChwaXlvcGl5bykgeycsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJyAgaG9nZSA9IHRydWU7JywgICMgTm8gd2FybmluZworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IGVsc2UgeycsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJycsICAjIFdhcm5pbmcgb24gdGhpcyBsaW5lCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30nXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVycm9yX2NvbGxlY3RvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMoMSwgZXJyb3JfY29sbGVjdG9yLnJlc3VsdHMoKS5jb3VudCgKKyAgICAgICAgICAgICdCbGFu
ayBsaW5lIGF0IHRoZSBlbmQgb2YgYSBjb2RlIGJsb2NrLiAgSXMgdGhpcyBuZWVkZWQ/JworICAg
ICAgICAgICAgJyAgW3doaXRlc3BhY2UvYmxhbmtfbGluZV0gWzNdJykpCisKKyAgICBkZWYgdGVz
dF9lbHNlX29uX3NhbWVfbGluZV9hc19jbG9zaW5nX2JyYWNlcyhzZWxmKToKKyAgICAgICAgZXJy
b3JfY29sbGVjdG9yID0gRXJyb3JDb2xsZWN0b3Ioc2VsZi5hc3NlcnRfKQorICAgICAgICBjcHBf
c3R5bGUucHJvY2Vzc19maWxlX2RhdGEoJ2Zvby5jcHAnLCAnY3BwJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFsnaWYgKGhvZ2UpIHsnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICd9JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGVsc2Ugeycg
ICMgV2FybmluZyBvbiB0aGlzIGxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSddLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29sbGVjdG9yKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscygxLCBlcnJvcl9jb2xsZWN0b3IucmVzdWx0cygpLmNvdW50KAor
ICAgICAgICAgICAgJ0FuIGVsc2Ugc2hvdWxkIGFwcGVhciBvbiB0aGUgc2FtZSBsaW5lIGFzIHRo
ZSBwcmVjZWRpbmcgfScKKyAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL25ld2xpbmVdIFs0XScp
KQorCisgICAgZGVmIHRlc3RfZWxzZV9jbGF1c2Vfbm90X29uX3NhbWVfbGluZV9hc19lbHNlKHNl
bGYpOgorICAgICAgICBzZWxmLmFzc2VydF9saW50KCcgICAgZWxzZSBEb1NvbWV0aGluZ0Vsc2Uo
KTsnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdFbHNlIGNsYXVzZSBzaG91bGQgbmV2ZXIg
YmUgb24gc2FtZSBsaW5lIGFzIGVsc2UgJworICAgICAgICAgICAgICAgICAgICAgICAgICcodXNl
IDIgbGluZXMpICBbd2hpdGVzcGFjZS9uZXdsaW5lXSBbNF0nKQorICAgICAgICBzZWxmLmFzc2Vy
dF9saW50KCcgICAgZWxzZSBpZkRvU29tZXRoaW5nRWxzZSgpOycsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgJ0Vsc2UgY2xhdXNlIHNob3VsZCBuZXZlciBiZSBvbiBzYW1lIGxpbmUgYXMgZWxz
ZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgJyh1c2UgMiBsaW5lcykgIFt3aGl0ZXNwYWNl
L25ld2xpbmVdIFs0XScpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJyAgICBlbHNlIGlmIChi
bGFoKSB7JywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJyAgICB2YXJpYWJsZV9lbmRz
X2luX2Vsc2UgPSB0cnVlOycsICcnKQorCisgICAgZGVmIHRlc3RfY29tbWEoc2VsZik6CisgICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2EgPSBmKDEsMik7JywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAnTWlzc2luZyBzcGFjZSBhZnRlciAsICBbd2hpdGVzcGFjZS9jb21tYV0gWzNdJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50IHRtcD1hLGE9YixiPXRtcDsnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIFsnTWlzc2luZyBzcGFjZXMgYXJvdW5kID0gIFt3aGl0ZXNwYWNlL29w
ZXJhdG9yc10gWzRdJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pc3Npbmcgc3BhY2Ug
YWZ0ZXIgLCAgW3doaXRlc3BhY2UvY29tbWFdIFszXSddKQorICAgICAgICBzZWxmLmFzc2VydF9s
aW50KCdmKGEsIC8qIG5hbWUgKi8gYik7JywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQo
J2YoYSwgLyogbmFtZSAqL2IpOycsICcnKQorCisgICAgZGVmIHRlc3RfcG9pbnRlcl9yZWZlcmVu
Y2VfbWFya2VyX2xvY2F0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQq
IGI7JywgJycsICdmb28uY3BwJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50ICpiOycs
CisgICAgICAgICAgICAgICAgICAgICAgICAgJ0RlY2xhcmF0aW9uIGhhcyBzcGFjZSBiZXR3ZWVu
IHR5cGUgbmFtZSBhbmQgKiBpbiBpbnQgKmIgIFt3aGl0ZXNwYWNlL2RlY2xhcmF0aW9uXSBbM10n
LAorICAgICAgICAgICAgICAgICAgICAgICAgICdmb28uY3BwJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRfbGludCgncmV0dXJuICpiOycsICcnLCAnZm9vLmNwcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0
X2xpbnQoJ2ludCAqYjsnLCAnJywgJ2Zvby5jJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgn
aW50KiBiOycsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0RlY2xhcmF0aW9uIGhhcyBzcGFj
ZSBiZXR3ZWVuICogYW5kIHZhcmlhYmxlIG5hbWUgaW4gaW50KiBiICBbd2hpdGVzcGFjZS9kZWNs
YXJhdGlvbl0gWzNdJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vLmMnKQorICAgICAg
ICBzZWxmLmFzc2VydF9saW50KCdpbnQmIGI7JywgJycsICdmb28uY3BwJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgnaW50ICZiOycsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0RlY2xh
cmF0aW9uIGhhcyBzcGFjZSBiZXR3ZWVuIHR5cGUgbmFtZSBhbmQgJiBpbiBpbnQgJmIgIFt3aGl0
ZXNwYWNlL2RlY2xhcmF0aW9uXSBbM10nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdmb28u
Y3BwJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgncmV0dXJuICZiOycsICcnLCAnZm9vLmNw
cCcpCisKKyAgICBkZWYgdGVzdF9pbmRlbnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X2xp
bnQoJ3N0YXRpYyBpbnQgbm9pbmRlbnQ7JywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQo
JyAgICBpbnQgZm91clNwYWNlSW5kZW50OycsICcnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50
KCcgaW50IG9uZVNwYWNlSW5kZW50OycsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1dlaXJk
IG51bWJlciBvZiBzcGFjZXMgYXQgbGluZS1zdGFydC4gICcKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAnQXJlIHlvdSB1c2luZyBhIDQtc3BhY2UgaW5kZW50PyAgW3doaXRlc3BhY2UvaW5kZW50
XSBbM10nKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCcgICBpbnQgdGhyZWVTcGFjZUluZGVu
dDsnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdXZWlyZCBudW1iZXIgb2Ygc3BhY2VzIGF0
IGxpbmUtc3RhcnQuICAnCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0FyZSB5b3UgdXNpbmcg
YSA0LXNwYWNlIGluZGVudD8gIFt3aGl0ZXNwYWNlL2luZGVudF0gWzNdJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRfbGludCgnIGNoYXIqIG9uZVNwYWNlSW5kZW50ID0gInB1YmxpYzoiOycsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgJ1dlaXJkIG51bWJlciBvZiBzcGFjZXMgYXQgbGluZS1zdGFy
dC4gICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAnQXJlIHlvdSB1c2luZyBhIDQtc3BhY2Ug
aW5kZW50PyAgW3doaXRlc3BhY2UvaW5kZW50XSBbM10nKQorICAgICAgICBzZWxmLmFzc2VydF9s
aW50KCcgcHVibGljOicsICcnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCcgIHB1YmxpYzon
LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnICAgcHVibGljOicsICcnKQorCisgICAg
ZGVmIHRlc3RfbGFiZWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3B1YmxpYzon
LAorICAgICAgICAgICAgICAgICAgICAgICAgICdMYWJlbHMgc2hvdWxkIGFsd2F5cyBiZSBpbmRl
bnRlZCBhdCBsZWFzdCBvbmUgc3BhY2UuICAnCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0lm
IHRoaXMgaXMgYSBtZW1iZXItaW5pdGlhbGl6ZXIgbGlzdCBpbiBhIGNvbnN0cnVjdG9yLCAnCisg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3RoZSBjb2xvbiBzaG91bGQgYmUgb24gdGhlIGxpbmUg
YWZ0ZXIgdGhlIGRlZmluaXRpb24gJworICAgICAgICAgICAgICAgICAgICAgICAgICdoZWFkZXIu
ICBbd2hpdGVzcGFjZS9sYWJlbHNdIFs0XScpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJyAg
cHVibGljOicsICcnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCcgICBwdWJsaWM6JywgJycp
CisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJyBwdWJsaWM6JywgJycpCisgICAgICAgIHNlbGYu
YXNzZXJ0X2xpbnQoJyAgcHVibGljOicsICcnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCcg
ICBwdWJsaWM6JywgJycpCisKKyAgICBkZWYgdGVzdF9ub3RfYWxhYmVsKHNlbGYpOgorICAgICAg
ICBzZWxmLmFzc2VydF9saW50KCdNeVZlcnlMb25nTmFtZXNwYWNlOjpNeVZlcnlMb25nQ2xhc3NO
YW1lOjonLCAnJykKKworICAgIGRlZiB0ZXN0X3RhYihzZWxmKToKKyAgICAgICAgc2VsZi5hc3Nl
cnRfbGludCgnXHRpbnQgYTsnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdUYWIgZm91bmQ7
IGJldHRlciB0byB1c2Ugc3BhY2VzICBbd2hpdGVzcGFjZS90YWJdIFsxXScpCisgICAgICAgIHNl
bGYuYXNzZXJ0X2xpbnQoJ2ludCBhID0gNTtcdC8vIHNldCBhIHRvIDUnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICdUYWIgZm91bmQ7IGJldHRlciB0byB1c2Ugc3BhY2VzICBbd2hpdGVzcGFj
ZS90YWJdIFsxXScpCisKKyAgICBkZWYgdGVzdF9maWx0ZXIoc2VsZik6CisgICAgICAgIG9sZF9m
aWx0ZXJzID0gY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUuZmlsdGVycworICAgICAgICB0cnk6
CisgICAgICAgICAgICBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS5zZXRfZmlsdGVycyhbJy0n
LCAnK3doaXRlc3BhY2UnLCAnLXdoaXRlc3BhY2UvaW5kZW50J10pCisgICAgICAgICAgICBzZWxm
LmFzc2VydF9saW50KAorICAgICAgICAgICAgICAgICcvLyBIZWxsbyB0aGVyZSAnLAorICAgICAg
ICAgICAgICAgICdMaW5lIGVuZHMgaW4gd2hpdGVzcGFjZS4gIENvbnNpZGVyIGRlbGV0aW5nIHRo
ZXNlIGV4dHJhIHNwYWNlcy4nCisgICAgICAgICAgICAgICAgJyAgW3doaXRlc3BhY2UvZW5kX29m
X2xpbmVdIFs0XScpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQgYSA9IChpbnQp
MS4wOycsICcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnIHdlaXJkIG9wZW5pbmcg
c3BhY2UnLCAnJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNwcF9zdHlsZS5fY3Bw
X3N0eWxlX3N0YXRlLmZpbHRlcnMgPSBvbGRfZmlsdGVycworCisgICAgZGVmIHRlc3RfZmlsdGVy
X2FwcGVuZGluZyhzZWxmKToKKyAgICAgICAgb2xkX2ZpbHRlcnMgPSBjcHBfc3R5bGUuX2NwcF9z
dHlsZV9zdGF0ZS5maWx0ZXJzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgUmVzZXQgZmls
dGVycworICAgICAgICAgICAgY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUuc2V0X2ZpbHRlcnMo
Wyctd2hpdGVzcGFjZSddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnLy8gSGVsbG8g
dGhlcmUgJywgJycpCisgICAgICAgICAgICBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS5zZXRf
ZmlsdGVycyhbJy13aGl0ZXNwYWNlJywgJyt3aGl0ZXNwYWNlL2VuZF9vZl9saW5lJ10pCisgICAg
ICAgICAgICBzZWxmLmFzc2VydF9saW50KAorICAgICAgICAgICAgICAgICcvLyBIZWxsbyB0aGVy
ZSAnLAorICAgICAgICAgICAgICAgICdMaW5lIGVuZHMgaW4gd2hpdGVzcGFjZS4gIENvbnNpZGVy
IGRlbGV0aW5nIHRoZXNlIGV4dHJhIHNwYWNlcy4nCisgICAgICAgICAgICAgICAgJyAgW3doaXRl
c3BhY2UvZW5kX29mX2xpbmVdIFs0XScpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9saW50KCcg
d2VpcmQgb3BlbmluZyBzcGFjZScsICcnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAg
Y3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUuZmlsdGVycyA9IG9sZF9maWx0ZXJzCisKKyAgICBk
ZWYgdGVzdF91bm5hbWVkX25hbWVzcGFjZXNfaW5faGVhZGVycyhzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soCisgICAgICAgICAgICAnZm9vLmgnLCAnbmFt
ZXNwYWNlIHsnLAorICAgICAgICAgICAgJ0RvIG5vdCB1c2UgdW5uYW1lZCBuYW1lc3BhY2VzIGlu
IGhlYWRlciBmaWxlcy4gIFNlZScKKyAgICAgICAgICAgICcgaHR0cDovL2dvb2dsZS1zdHlsZWd1
aWRlLmdvb2dsZWNvZGUuY29tL3N2bi90cnVuay9jcHBndWlkZS54bWwjTmFtZXNwYWNlcycKKyAg
ICAgICAgICAgICcgZm9yIG1vcmUgaW5mb3JtYXRpb24uICBbYnVpbGQvbmFtZXNwYWNlc10gWzRd
JykKKyAgICAgICAgIyBuYW1lc3BhY2UgcmVnaXN0cmF0aW9uIG1hY3JvcyBhcmUgT0suCisgICAg
ICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28uaCcsICduYW1lc3BhY2Ug
eyAgXFwnLCAnJykKKyAgICAgICAgIyBuYW1lZCBuYW1lc3BhY2VzIGFyZSBPSy4KKyAgICAgICAg
c2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby5oJywgJ25hbWVzcGFjZSBmb28g
eycsICcnKQorICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vLmgn
LCAnbmFtZXNwYWNlIGZvb25hbWVzcGFjZSB7JywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xh
bmd1YWdlX3J1bGVzX2NoZWNrKCdmb28uY3BwJywgJ25hbWVzcGFjZSB7JywgJycpCisgICAgICAg
IHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28uY3BwJywgJ25hbWVzcGFjZSBm
b28geycsICcnKQorCisgICAgZGVmIHRlc3RfYnVpbGRfY2xhc3Moc2VsZik6CisgICAgICAgICMg
VGVzdCB0aGF0IHRoZSBsaW50ZXIgY2FuIHBhcnNlIHRvIHRoZSBlbmQgb2YgY2xhc3MgZGVmaW5p
dGlvbnMsCisgICAgICAgICMgYW5kIHRoYXQgaXQgd2lsbCByZXBvcnQgd2hlbiBpdCBjYW4ndC4K
KyAgICAgICAgIyBVc2UgbXVsdGktbGluZSBsaW50ZXIgYmVjYXVzZSBpdCBwZXJmb3JtcyB0aGUg
Q2xhc3NTdGF0ZSBjaGVjay4KKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAor
ICAgICAgICAgICAgJ2NsYXNzIEZvbyB7JywKKyAgICAgICAgICAgICdGYWlsZWQgdG8gZmluZCBj
b21wbGV0ZSBkZWNsYXJhdGlvbiBvZiBjbGFzcyBGb28nCisgICAgICAgICAgICAnICBbYnVpbGQv
Y2xhc3NdIFs1XScpCisgICAgICAgICMgRG9uJ3Qgd2FybiBvbiBmb3J3YXJkIGRlY2xhcmF0aW9u
cyBvZiB2YXJpb3VzIHR5cGVzLgorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQo
CisgICAgICAgICAgICAnY2xhc3MgRm9vOycsCisgICAgICAgICAgICAnJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAgJycnc3RydWN0IEZvbyoKKyAg
ICAgICAgICAgICAgICAgZm9vID0gTmV3Rm9vKCk7JycnLAorICAgICAgICAgICAgJycpCisgICAg
ICAgICMgSGVyZSBpcyBhbiBleGFtcGxlIHdoZXJlIHRoZSBsaW50ZXIgZ2V0cyBjb25mdXNlZCwg
ZXZlbiB0aG91Z2gKKyAgICAgICAgIyB0aGUgY29kZSBkb2Vzbid0IHZpb2xhdGUgdGhlIHN0eWxl
IGd1aWRlLgorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAg
ICAnJydjbGFzcyBGb28KKyAgICAgICAgICAgICNpZmRlZiBERVJJVkVfRlJPTV9HT08KKyAgICAg
ICAgICAgICAgOiBwdWJsaWMgR29vIHsKKyAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAg
IDogcHVibGljIEhvbyB7CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgfTsnJycs
CisgICAgICAgICAgICAnRmFpbGVkIHRvIGZpbmQgY29tcGxldGUgZGVjbGFyYXRpb24gb2YgY2xh
c3MgRm9vJworICAgICAgICAgICAgJyAgW2J1aWxkL2NsYXNzXSBbNV0nKQorCisgICAgZGVmIHRl
c3RfYnVpbGRfZW5kX2NvbW1lbnQoc2VsZik6CisgICAgICAgICMgVGhlIGNyb3NzdG9vbCBjb21w
aWxlciB3ZSBjdXJyZW50bHkgdXNlIHdpbGwgZmFpbCB0byBjb21waWxlIHRoZQorICAgICAgICAj
IGNvZGUgaW4gdGhpcyB0ZXN0LCBzbyB3ZSBtaWdodCBjb25zaWRlciByZW1vdmluZyB0aGUgbGlu
dCBjaGVjay4KKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnI2VuZGlmIE5vdCBhIGNvbW1lbnQn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICdVbmNvbW1lbnRlZCB0ZXh0IGFmdGVyICNlbmRp
ZiBpcyBub24tc3RhbmRhcmQuJworICAgICAgICAgICAgICAgICAgICAgICAgICcgIFVzZSBhIGNv
bW1lbnQuJworICAgICAgICAgICAgICAgICAgICAgICAgICcgIFtidWlsZC9lbmRpZl9jb21tZW50
XSBbNV0nKQorCisgICAgZGVmIHRlc3RfYnVpbGRfZm9yd2FyZF9kZWNsKHNlbGYpOgorICAgICAg
ICAjIFRoZSBjcm9zc3Rvb2wgY29tcGlsZXIgd2UgY3VycmVudGx5IHVzZSB3aWxsIGZhaWwgdG8g
Y29tcGlsZSB0aGUKKyAgICAgICAgIyBjb2RlIGluIHRoaXMgdGVzdCwgc28gd2UgbWlnaHQgY29u
c2lkZXIgcmVtb3ZpbmcgdGhlIGxpbnQgY2hlY2suCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQo
J2NsYXNzIEZvbzo6R29vOycsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0lubmVyLXN0eWxl
IGZvcndhcmQgZGVjbGFyYXRpb25zIGFyZSBpbnZhbGlkLicKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAnICBSZW1vdmUgdGhpcyBsaW5lLicKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICBb
YnVpbGQvZm9yd2FyZF9kZWNsXSBbNV0nKQorCisgICAgZGVmIHRlc3RfYnVpbGRfaGVhZGVyX2d1
YXJkKHNlbGYpOgorICAgICAgICBmaWxlX3BhdGggPSAnbXlkaXIvRm9vLmgnCisKKyAgICAgICAg
IyBXZSBjYW4ndCByZWx5IG9uIG91ciBpbnRlcm5hbCBzdHVmZiB0byBnZXQgYSBzYW5lIHBhdGgg
b24gdGhlIG9wZW4gc291cmNlCisgICAgICAgICMgc2lkZSBvZiB0aGluZ3MsIHNvIGp1c3QgcGFy
c2Ugb3V0IHRoZSBzdWdnZXN0ZWQgaGVhZGVyIGd1YXJkLiBUaGlzCisgICAgICAgICMgZG9lc24n
dCBhbGxvdyB1cyB0byB0ZXN0IHRoZSBzdWdnZXN0ZWQgaGVhZGVyIGd1YXJkLCBidXQgaXQgZG9l
cyBsZXQgdXMKKyAgICAgICAgIyB0ZXN0IGFsbCB0aGUgb3RoZXIgaGVhZGVyIHRlc3RzLgorICAg
ICAgICBlcnJvcl9jb2xsZWN0b3IgPSBFcnJvckNvbGxlY3RvcihzZWxmLmFzc2VydF8pCisgICAg
ICAgIGNwcF9zdHlsZS5wcm9jZXNzX2ZpbGVfZGF0YShmaWxlX3BhdGgsICdoJywgW10sIGVycm9y
X2NvbGxlY3RvcikKKyAgICAgICAgZXhwZWN0ZWRfZ3VhcmQgPSAnJworICAgICAgICBtYXRjaGVy
ID0gcmUuY29tcGlsZSgKKyAgICAgICAgICAgICdObyBcI2lmbmRlZiBoZWFkZXIgZ3VhcmQgZm91
bmRcLCBzdWdnZXN0ZWQgQ1BQIHZhcmlhYmxlIGlzXDogKFtBLVphLXpfMC05XSspICcpCisgICAg
ICAgIGZvciBlcnJvciBpbiBlcnJvcl9jb2xsZWN0b3IucmVzdWx0X2xpc3QoKToKKyAgICAgICAg
ICAgIG1hdGNoZXMgPSBtYXRjaGVyLm1hdGNoKGVycm9yKQorICAgICAgICAgICAgaWYgbWF0Y2hl
czoKKyAgICAgICAgICAgICAgICBleHBlY3RlZF9ndWFyZCA9IG1hdGNoZXMuZ3JvdXAoMSkKKyAg
ICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICMgTWFrZSBzdXJlIHdlIGV4dHJhY3RlZCBz
b21ldGhpbmcgZm9yIG91ciBoZWFkZXIgZ3VhcmQuCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1
YWwoZXhwZWN0ZWRfZ3VhcmQsICcnKQorCisgICAgICAgICMgV3JvbmcgZ3VhcmQKKyAgICAgICAg
ZXJyb3JfY29sbGVjdG9yID0gRXJyb3JDb2xsZWN0b3Ioc2VsZi5hc3NlcnRfKQorICAgICAgICBj
cHBfc3R5bGUucHJvY2Vzc19maWxlX2RhdGEoZmlsZV9wYXRoLCAnaCcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBbJyNpZm5kZWYgRk9PX0gnLCAnI2RlZmluZSBGT09fSCdd
LCBlcnJvcl9jb2xsZWN0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICAg
ICAgMSwKKyAgICAgICAgICAgIGVycm9yX2NvbGxlY3Rvci5yZXN1bHRfbGlzdCgpLmNvdW50KAor
ICAgICAgICAgICAgICAgICcjaWZuZGVmIGhlYWRlciBndWFyZCBoYXMgd3Jvbmcgc3R5bGUsIHBs
ZWFzZSB1c2U6ICVzJworICAgICAgICAgICAgICAgICcgIFtidWlsZC9oZWFkZXJfZ3VhcmRdIFs1
XScgJSBleHBlY3RlZF9ndWFyZCksCisgICAgICAgICAgICBlcnJvcl9jb2xsZWN0b3IucmVzdWx0
X2xpc3QoKSkKKworICAgICAgICAjIE5vIGRlZmluZQorICAgICAgICBlcnJvcl9jb2xsZWN0b3Ig
PSBFcnJvckNvbGxlY3RvcihzZWxmLmFzc2VydF8pCisgICAgICAgIGNwcF9zdHlsZS5wcm9jZXNz
X2ZpbGVfZGF0YShmaWxlX3BhdGgsICdoJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFsnI2lmbmRlZiAlcycgJSBleHBlY3RlZF9ndWFyZF0sIGVycm9yX2NvbGxlY3RvcikK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgICAgICAxLAorICAgICAgICAgICAg
ZXJyb3JfY29sbGVjdG9yLnJlc3VsdF9saXN0KCkuY291bnQoCisgICAgICAgICAgICAgICAgJ05v
ICNpZm5kZWYgaGVhZGVyIGd1YXJkIGZvdW5kLCBzdWdnZXN0ZWQgQ1BQIHZhcmlhYmxlIGlzOiAl
cycKKyAgICAgICAgICAgICAgICAnICBbYnVpbGQvaGVhZGVyX2d1YXJkXSBbNV0nICUgZXhwZWN0
ZWRfZ3VhcmQpLAorICAgICAgICAgICAgZXJyb3JfY29sbGVjdG9yLnJlc3VsdF9saXN0KCkpCisK
KyAgICAgICAgIyBNaXNtYXRjaGVkIGRlZmluZQorICAgICAgICBlcnJvcl9jb2xsZWN0b3IgPSBF
cnJvckNvbGxlY3RvcihzZWxmLmFzc2VydF8pCisgICAgICAgIGNwcF9zdHlsZS5wcm9jZXNzX2Zp
bGVfZGF0YShmaWxlX3BhdGgsICdoJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFsnI2lmbmRlZiAlcycgJSBleHBlY3RlZF9ndWFyZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnI2RlZmluZSBGT09fSCddLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXJyb3JfY29sbGVjdG9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cygKKyAgICAgICAgICAgIDEsCisgICAgICAgICAgICBlcnJvcl9jb2xsZWN0b3IucmVzdWx0X2xp
c3QoKS5jb3VudCgKKyAgICAgICAgICAgICAgICAnTm8gI2lmbmRlZiBoZWFkZXIgZ3VhcmQgZm91
bmQsIHN1Z2dlc3RlZCBDUFAgdmFyaWFibGUgaXM6ICVzJworICAgICAgICAgICAgICAgICcgIFti
dWlsZC9oZWFkZXJfZ3VhcmRdIFs1XScgJSBleHBlY3RlZF9ndWFyZCksCisgICAgICAgICAgICBl
cnJvcl9jb2xsZWN0b3IucmVzdWx0X2xpc3QoKSkKKworICAgICAgICAjIE5vIGhlYWRlciBndWFy
ZCBlcnJvcnMKKyAgICAgICAgZXJyb3JfY29sbGVjdG9yID0gRXJyb3JDb2xsZWN0b3Ioc2VsZi5h
c3NlcnRfKQorICAgICAgICBjcHBfc3R5bGUucHJvY2Vzc19maWxlX2RhdGEoZmlsZV9wYXRoLCAn
aCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJyNpZm5kZWYgJXMnICUg
ZXhwZWN0ZWRfZ3VhcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNk
ZWZpbmUgJXMnICUgZXhwZWN0ZWRfZ3VhcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJyNlbmRpZiAvLyAlcycgJSBleHBlY3RlZF9ndWFyZF0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2xsZWN0b3IpCisgICAgICAgIGZvciBsaW5l
IGluIGVycm9yX2NvbGxlY3Rvci5yZXN1bHRfbGlzdCgpOgorICAgICAgICAgICAgaWYgbGluZS5m
aW5kKCdidWlsZC9oZWFkZXJfZ3VhcmQnKSAhPSAtMToKKyAgICAgICAgICAgICAgICBzZWxmLmZh
aWwoJ1VuZXhwZWN0ZWQgZXJyb3I6ICVzJyAlIGxpbmUpCisKKyAgICAgICAgIyBDb21wbGV0ZWx5
IGluY29ycmVjdCBoZWFkZXIgZ3VhcmQKKyAgICAgICAgZXJyb3JfY29sbGVjdG9yID0gRXJyb3JD
b2xsZWN0b3Ioc2VsZi5hc3NlcnRfKQorICAgICAgICBjcHBfc3R5bGUucHJvY2Vzc19maWxlX2Rh
dGEoZmlsZV9wYXRoLCAnaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
JyNpZm5kZWYgRk9PJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2Rl
ZmluZSBGT08nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjZW5kaWYg
IC8vIEZPTyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29s
bGVjdG9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgICAgIDEsCisgICAg
ICAgICAgICBlcnJvcl9jb2xsZWN0b3IucmVzdWx0X2xpc3QoKS5jb3VudCgKKyAgICAgICAgICAg
ICAgICAnI2lmbmRlZiBoZWFkZXIgZ3VhcmQgaGFzIHdyb25nIHN0eWxlLCBwbGVhc2UgdXNlOiAl
cycKKyAgICAgICAgICAgICAgICAnICBbYnVpbGQvaGVhZGVyX2d1YXJkXSBbNV0nICUgZXhwZWN0
ZWRfZ3VhcmQpLAorICAgICAgICAgICAgZXJyb3JfY29sbGVjdG9yLnJlc3VsdF9saXN0KCkpCisK
KyAgICBkZWYgdGVzdF9idWlsZF9wcmludGZfZm9ybWF0KHNlbGYpOgorICAgICAgICBzZWxmLmFz
c2VydF9saW50KAorICAgICAgICAgICAgcidwcmludGYoIlwlJWQiLCB2YWx1ZSk7JywKKyAgICAg
ICAgICAgICclLCBbLCAoLCBhbmQgeyBhcmUgdW5kZWZpbmVkIGNoYXJhY3RlciBlc2NhcGVzLiAg
VW5lc2NhcGUgdGhlbS4nCisgICAgICAgICAgICAnICBbYnVpbGQvcHJpbnRmX2Zvcm1hdF0gWzNd
JykKKworICAgICAgICBzZWxmLmFzc2VydF9saW50KAorICAgICAgICAgICAgcidzbnByaW50Zihi
dWZmZXIsIHNpemVvZihidWZmZXIpLCAiXFslZCIsIHZhbHVlKTsnLAorICAgICAgICAgICAgJyUs
IFssICgsIGFuZCB7IGFyZSB1bmRlZmluZWQgY2hhcmFjdGVyIGVzY2FwZXMuICBVbmVzY2FwZSB0
aGVtLicKKyAgICAgICAgICAgICcgIFtidWlsZC9wcmludGZfZm9ybWF0XSBbM10nKQorCisgICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAgICByJ2ZwcmludGYoZmlsZSwgIlwoJWQi
LCB2YWx1ZSk7JywKKyAgICAgICAgICAgICclLCBbLCAoLCBhbmQgeyBhcmUgdW5kZWZpbmVkIGNo
YXJhY3RlciBlc2NhcGVzLiAgVW5lc2NhcGUgdGhlbS4nCisgICAgICAgICAgICAnICBbYnVpbGQv
cHJpbnRmX2Zvcm1hdF0gWzNdJykKKworICAgICAgICBzZWxmLmFzc2VydF9saW50KAorICAgICAg
ICAgICAgcid2c25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIlxcXHslZCIsIGFwKTsn
LAorICAgICAgICAgICAgJyUsIFssICgsIGFuZCB7IGFyZSB1bmRlZmluZWQgY2hhcmFjdGVyIGVz
Y2FwZXMuICBVbmVzY2FwZSB0aGVtLicKKyAgICAgICAgICAgICcgIFtidWlsZC9wcmludGZfZm9y
bWF0XSBbM10nKQorCisgICAgICAgICMgRG9uJ3Qgd2FybiBpZiBkb3VibGUtc2xhc2ggcHJlY2Vk
ZXMgdGhlIHN5bWJvbAorICAgICAgICBzZWxmLmFzc2VydF9saW50KHIncHJpbnRmKCJcXCUlJWQi
LCB2YWx1ZSk7JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnJykKKworICAgIGRlZiB0ZXN0
X3J1bnRpbWVfcHJpbnRmX2Zvcm1hdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgK
KyAgICAgICAgICAgIHInZnByaW50ZihmaWxlLCAiJXEiLCB2YWx1ZSk7JywKKyAgICAgICAgICAg
ICclcSBpbiBmb3JtYXQgc3RyaW5ncyBpcyBkZXByZWNhdGVkLiAgVXNlICVsbCBpbnN0ZWFkLicK
KyAgICAgICAgICAgICcgIFtydW50aW1lL3ByaW50Zl9mb3JtYXRdIFszXScpCisKKyAgICAgICAg
c2VsZi5hc3NlcnRfbGludCgKKyAgICAgICAgICAgIHInYXByaW50ZihmaWxlLCAiVGhlIG51bWJl
ciBpcyAlMTJxIiwgdmFsdWUpOycsCisgICAgICAgICAgICAnJXEgaW4gZm9ybWF0IHN0cmluZ3Mg
aXMgZGVwcmVjYXRlZC4gIFVzZSAlbGwgaW5zdGVhZC4nCisgICAgICAgICAgICAnICBbcnVudGlt
ZS9wcmludGZfZm9ybWF0XSBbM10nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisgICAg
ICAgICAgICByJ3ByaW50ZihmaWxlLCAiVGhlIG51bWJlciBpcyIgIiUtMTJxIiwgdmFsdWUpOycs
CisgICAgICAgICAgICAnJXEgaW4gZm9ybWF0IHN0cmluZ3MgaXMgZGVwcmVjYXRlZC4gIFVzZSAl
bGwgaW5zdGVhZC4nCisgICAgICAgICAgICAnICBbcnVudGltZS9wcmludGZfZm9ybWF0XSBbM10n
KQorCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAgICByJ3ByaW50ZihmaWxl
LCAiVGhlIG51bWJlciBpcyIgIiUrMTJxIiwgdmFsdWUpOycsCisgICAgICAgICAgICAnJXEgaW4g
Zm9ybWF0IHN0cmluZ3MgaXMgZGVwcmVjYXRlZC4gIFVzZSAlbGwgaW5zdGVhZC4nCisgICAgICAg
ICAgICAnICBbcnVudGltZS9wcmludGZfZm9ybWF0XSBbM10nKQorCisgICAgICAgIHNlbGYuYXNz
ZXJ0X2xpbnQoCisgICAgICAgICAgICByJ3ByaW50ZihmaWxlLCAiVGhlIG51bWJlciBpcyIgIiUg
MTJxIiwgdmFsdWUpOycsCisgICAgICAgICAgICAnJXEgaW4gZm9ybWF0IHN0cmluZ3MgaXMgZGVw
cmVjYXRlZC4gIFVzZSAlbGwgaW5zdGVhZC4nCisgICAgICAgICAgICAnICBbcnVudGltZS9wcmlu
dGZfZm9ybWF0XSBbM10nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAg
ICByJ3NucHJpbnRmKGZpbGUsICJOZXZlciBtaXggJWQgYW5kICUxJGQgcGFybWFldGVycyEiLCB2
YWx1ZSk7JywKKyAgICAgICAgICAgICclTiQgZm9ybWF0cyBhcmUgdW5jb252ZW50aW9uYWwuICBU
cnkgcmV3cml0aW5nIHRvIGF2b2lkIHRoZW0uJworICAgICAgICAgICAgJyAgW3J1bnRpbWUvcHJp
bnRmX2Zvcm1hdF0gWzJdJykKKworICAgIGRlZiBhc3NlcnRfbGludExvZ0NvZGVPbkVycm9yKHNl
bGYsIGNvZGUsIGV4cGVjdGVkX21lc3NhZ2UpOgorICAgICAgICAjIFNwZWNpYWwgYXNzZXJ0X2xp
bnQgd2hpY2ggbG9ncyB0aGUgaW5wdXQgY29kZSBvbiBlcnJvci4KKyAgICAgICAgcmVzdWx0ID0g
c2VsZi5wZXJmb3JtX3NpbmdsZV9saW5lX2xpbnQoY29kZSwgJ2Zvby5jcHAnKQorICAgICAgICBp
ZiByZXN1bHQgIT0gZXhwZWN0ZWRfbWVzc2FnZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnRm9y
IGNvZGU6ICIlcyJcbkdvdDogIiVzIlxuRXhwZWN0ZWQ6ICIlcyInCisgICAgICAgICAgICAgICAg
ICAgICAgJSAoY29kZSwgcmVzdWx0LCBleHBlY3RlZF9tZXNzYWdlKSkKKworICAgIGRlZiB0ZXN0
X2J1aWxkX3N0b3JhZ2VfY2xhc3Moc2VsZik6CisgICAgICAgIHF1YWxpZmllcnMgPSBbTm9uZSwg
J2NvbnN0JywgJ3ZvbGF0aWxlJ10KKyAgICAgICAgc2lnbnMgPSBbTm9uZSwgJ3NpZ25lZCcsICd1
bnNpZ25lZCddCisgICAgICAgIHR5cGVzID0gWyd2b2lkJywgJ2NoYXInLCAnaW50JywgJ2Zsb2F0
JywgJ2RvdWJsZScsCisgICAgICAgICAgICAgICAgICdzY2hhcicsICdpbnQ4JywgJ3VpbnQ4Jywg
J2ludDE2JywgJ3VpbnQxNicsCisgICAgICAgICAgICAgICAgICdpbnQzMicsICd1aW50MzInLCAn
aW50NjQnLCAndWludDY0J10KKyAgICAgICAgc3RvcmFnZV9jbGFzc2VzID0gWydhdXRvJywgJ2V4
dGVybicsICdyZWdpc3RlcicsICdzdGF0aWMnLCAndHlwZWRlZiddCisKKyAgICAgICAgYnVpbGRf
c3RvcmFnZV9jbGFzc19lcnJvcl9tZXNzYWdlID0gKAorICAgICAgICAgICAgJ1N0b3JhZ2UgY2xh
c3MgKHN0YXRpYywgZXh0ZXJuLCB0eXBlZGVmLCBldGMpIHNob3VsZCBiZSBmaXJzdC4nCisgICAg
ICAgICAgICAnICBbYnVpbGQvc3RvcmFnZV9jbGFzc10gWzVdJykKKworICAgICAgICAjIFNvbWUg
ZXhwbGljaXQgY2FzZXMuIExlZ2FsIGluIEMrKywgZGVwcmVjYXRlZCBpbiBDOTkuCisgICAgICAg
IHNlbGYuYXNzZXJ0X2xpbnQoJ2NvbnN0IGludCBzdGF0aWMgZm9vID0gNTsnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGJ1aWxkX3N0b3JhZ2VfY2xhc3NfZXJyb3JfbWVzc2FnZSkKKworICAg
ICAgICBzZWxmLmFzc2VydF9saW50KCdjaGFyIHN0YXRpYyBmb287JywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBidWlsZF9zdG9yYWdlX2NsYXNzX2Vycm9yX21lc3NhZ2UpCisKKyAgICAgICAg
c2VsZi5hc3NlcnRfbGludCgnZG91YmxlIGNvbnN0IHN0YXRpYyBmb28gPSAyLjA7JywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBidWlsZF9zdG9yYWdlX2NsYXNzX2Vycm9yX21lc3NhZ2UpCisK
KyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgndWludDY0IHR5cGVkZWYgdW5zaWduZWRMb25nTG9u
ZzsnLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3N0b3JhZ2VfY2xhc3NfZXJyb3Jf
bWVzc2FnZSkKKworICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQgcmVnaXN0ZXIgZm9vID0g
MDsnLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3N0b3JhZ2VfY2xhc3NfZXJyb3Jf
bWVzc2FnZSkKKworICAgICAgICAjIFNpbmNlIHRoZXJlIGFyZSBhIHZlcnkgbGFyZ2UgbnVtYmVy
IG9mIHBvc3NpYmlsaXRpZXMsIHJhbmRvbWx5CisgICAgICAgICMgY29uc3RydWN0IGRlY2xhcmF0
aW9ucy4KKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgZGVjbGFyYXRpb24gaXMgbG9nZ2Vk
IGlmIHRoZXJlJ3MgYW4gZXJyb3IuCisgICAgICAgICMgU2VlZCBnZW5lcmF0b3Igd2l0aCBhbiBp
bnRlZ2VyIGZvciBhYnNvbHV0ZSByZXByb2R1Y2liaWxpdHkuCisgICAgICAgIHJhbmRvbS5zZWVk
KDI1KQorICAgICAgICBmb3IgdW51c2VkX2kgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgIyBC
dWlsZCB1cCByYW5kb20gbGlzdCBvZiBub24tc3RvcmFnZS1jbGFzcyBkZWNsYXJhdGlvbiBzcGVj
cy4KKyAgICAgICAgICAgIG90aGVyX2RlY2xfc3BlY3MgPSBbcmFuZG9tLmNob2ljZShxdWFsaWZp
ZXJzKSwgcmFuZG9tLmNob2ljZShzaWducyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJhbmRvbS5jaG9pY2UodHlwZXMpXQorICAgICAgICAgICAgIyByZW1vdmUgTm9uZQorICAg
ICAgICAgICAgb3RoZXJfZGVjbF9zcGVjcyA9IGZpbHRlcihsYW1iZGEgeDogeCBpcyBub3QgTm9u
ZSwgb3RoZXJfZGVjbF9zcGVjcykKKworICAgICAgICAgICAgIyBzaHVmZmxlCisgICAgICAgICAg
ICByYW5kb20uc2h1ZmZsZShvdGhlcl9kZWNsX3NwZWNzKQorCisgICAgICAgICAgICAjIGluc2Vy
dCBzdG9yYWdlIGNsYXNzIGFmdGVyIHRoZSBmaXJzdAorICAgICAgICAgICAgc3RvcmFnZV9jbGFz
cyA9IHJhbmRvbS5jaG9pY2Uoc3RvcmFnZV9jbGFzc2VzKQorICAgICAgICAgICAgaW5zZXJ0aW9u
X3BvaW50ID0gcmFuZG9tLnJhbmRpbnQoMSwgbGVuKG90aGVyX2RlY2xfc3BlY3MpKQorICAgICAg
ICAgICAgZGVjbF9zcGVjcyA9IChvdGhlcl9kZWNsX3NwZWNzWzA6aW5zZXJ0aW9uX3BvaW50XQor
ICAgICAgICAgICAgICAgICAgICAgICAgICArIFtzdG9yYWdlX2NsYXNzXQorICAgICAgICAgICAg
ICAgICAgICAgICAgICArIG90aGVyX2RlY2xfc3BlY3NbaW5zZXJ0aW9uX3BvaW50Ol0pCisKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnRMb2dDb2RlT25FcnJvcigKKyAgICAgICAgICAgICAg
ICAnICcuam9pbihkZWNsX3NwZWNzKSArICc7JywKKyAgICAgICAgICAgICAgICBidWlsZF9zdG9y
YWdlX2NsYXNzX2Vycm9yX21lc3NhZ2UpCisKKyAgICAgICAgICAgICMgYnV0IG5vIGVycm9yIGlm
IHN0b3JhZ2UgY2xhc3MgaXMgZmlyc3QKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnRMb2dD
b2RlT25FcnJvcigKKyAgICAgICAgICAgICAgICBzdG9yYWdlX2NsYXNzICsgJyAnICsgJyAnLmpv
aW4ob3RoZXJfZGVjbF9zcGVjcyksCisgICAgICAgICAgICAgICAgJycpCisKKyAgICBkZWYgdGVz
dF9sZWdhbF9jb3B5cmlnaHQoc2VsZik6CisgICAgICAgIGxlZ2FsX2NvcHlyaWdodF9tZXNzYWdl
ID0gKAorICAgICAgICAgICAgJ05vIGNvcHlyaWdodCBtZXNzYWdlIGZvdW5kLiAgJworICAgICAg
ICAgICAgJ1lvdSBzaG91bGQgaGF2ZSBhIGxpbmU6ICJDb3B5cmlnaHQgW3llYXJdIDxDb3B5cmln
aHQgT3duZXI+IicKKyAgICAgICAgICAgICcgIFtsZWdhbC9jb3B5cmlnaHRdIFs1XScpCisKKyAg
ICAgICAgY29weXJpZ2h0X2xpbmUgPSAnLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4nCisKKyAgICAgICAgZmlsZV9wYXRoID0gJ215ZGlyL2dvb2dsZWNs
aWVudC9mb28uY3BwJworCisgICAgICAgICMgVGhlcmUgc2hvdWxkIGJlIGEgY29weXJpZ2h0IG1l
c3NhZ2UgaW4gdGhlIGZpcnN0IDEwIGxpbmVzCisgICAgICAgIGVycm9yX2NvbGxlY3RvciA9IEVy
cm9yQ29sbGVjdG9yKHNlbGYuYXNzZXJ0XykKKyAgICAgICAgY3BwX3N0eWxlLnByb2Nlc3NfZmls
ZV9kYXRhKGZpbGVfcGF0aCwgJ2NwcCcsIFtdLCBlcnJvcl9jb2xsZWN0b3IpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICAgICAgMSwKKyAgICAgICAgICAgIGVycm9yX2NvbGxl
Y3Rvci5yZXN1bHRfbGlzdCgpLmNvdW50KGxlZ2FsX2NvcHlyaWdodF9tZXNzYWdlKSkKKworICAg
ICAgICBlcnJvcl9jb2xsZWN0b3IgPSBFcnJvckNvbGxlY3RvcihzZWxmLmFzc2VydF8pCisgICAg
ICAgIGNwcF9zdHlsZS5wcm9jZXNzX2ZpbGVfZGF0YSgKKyAgICAgICAgICAgIGZpbGVfcGF0aCwg
J2NwcCcsCisgICAgICAgICAgICBbJycgZm9yIHVudXNlZF9pIGluIHJhbmdlKDEwKV0gKyBbY29w
eXJpZ2h0X2xpbmVdLAorICAgICAgICAgICAgZXJyb3JfY29sbGVjdG9yKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFscygKKyAgICAgICAgICAgIDEsCisgICAgICAgICAgICBlcnJvcl9jb2xsZWN0
b3IucmVzdWx0X2xpc3QoKS5jb3VudChsZWdhbF9jb3B5cmlnaHRfbWVzc2FnZSkpCisKKyAgICAg
ICAgIyBUZXN0IHRoYXQgd2FybmluZyBpc24ndCBpc3N1ZWQgaWYgQ29weXJpZ2h0IGxpbmUgYXBw
ZWFycyBlYXJseSBlbm91Z2guCisgICAgICAgIGVycm9yX2NvbGxlY3RvciA9IEVycm9yQ29sbGVj
dG9yKHNlbGYuYXNzZXJ0XykKKyAgICAgICAgY3BwX3N0eWxlLnByb2Nlc3NfZmlsZV9kYXRhKGZp
bGVfcGF0aCwgJ2NwcCcsIFtjb3B5cmlnaHRfbGluZV0sIGVycm9yX2NvbGxlY3RvcikKKyAgICAg
ICAgZm9yIG1lc3NhZ2UgaW4gZXJyb3JfY29sbGVjdG9yLnJlc3VsdF9saXN0KCk6CisgICAgICAg
ICAgICBpZiBtZXNzYWdlLmZpbmQoJ2xlZ2FsL2NvcHlyaWdodCcpICE9IC0xOgorICAgICAgICAg
ICAgICAgIHNlbGYuZmFpbCgnVW5leHBlY3RlZCBlcnJvcjogJXMnICUgbWVzc2FnZSkKKworICAg
ICAgICBlcnJvcl9jb2xsZWN0b3IgPSBFcnJvckNvbGxlY3RvcihzZWxmLmFzc2VydF8pCisgICAg
ICAgIGNwcF9zdHlsZS5wcm9jZXNzX2ZpbGVfZGF0YSgKKyAgICAgICAgICAgIGZpbGVfcGF0aCwg
J2NwcCcsCisgICAgICAgICAgICBbJycgZm9yIHVudXNlZF9pIGluIHJhbmdlKDkpXSArIFtjb3B5
cmlnaHRfbGluZV0sCisgICAgICAgICAgICBlcnJvcl9jb2xsZWN0b3IpCisgICAgICAgIGZvciBt
ZXNzYWdlIGluIGVycm9yX2NvbGxlY3Rvci5yZXN1bHRfbGlzdCgpOgorICAgICAgICAgICAgaWYg
bWVzc2FnZS5maW5kKCdsZWdhbC9jb3B5cmlnaHQnKSAhPSAtMToKKyAgICAgICAgICAgICAgICBz
ZWxmLmZhaWwoJ1VuZXhwZWN0ZWQgZXJyb3I6ICVzJyAlIG1lc3NhZ2UpCisKKyAgICBkZWYgdGVz
dF9pbnZhbGlkX2luY3JlbWVudChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnKmNv
dW50Kys7JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnQ2hhbmdpbmcgcG9pbnRlciBpbnN0
ZWFkIG9mIHZhbHVlIChvciB1bnVzZWQgdmFsdWUgb2YgJworICAgICAgICAgICAgICAgICAgICAg
ICAgICdvcGVyYXRvciopLiAgW3J1bnRpbWUvaW52YWxpZF9pbmNyZW1lbnRdIFs1XScpCisKKwor
Y2xhc3MgQ2xlYW5zZWRMaW5lc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0
X2luaXQoc2VsZik6CisgICAgICAgIGxpbmVzID0gWydMaW5lIDEnLAorICAgICAgICAgICAgICAg
ICAnTGluZSAyJywKKyAgICAgICAgICAgICAgICAgJ0xpbmUgMyAvLyBDb21tZW50IHRlc3QnLAor
ICAgICAgICAgICAgICAgICAnTGluZSA0ICJmb28iJ10KKworICAgICAgICBjbGVhbl9saW5lcyA9
IGNwcF9zdHlsZS5DbGVhbnNlZExpbmVzKGxpbmVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhsaW5lcywgY2xlYW5fbGluZXMucmF3X2xpbmVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyg0LCBjbGVhbl9saW5lcy5udW1fbGluZXMoKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhbJ0xpbmUgMScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnTGluZSAyJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdMaW5lIDMgJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdMaW5lIDQgImZvbyInXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5fbGlu
ZXMubGluZXMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWydMaW5lIDEnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ0xpbmUgMicsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnTGluZSAzICcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnTGluZSA0ICIiJ10sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuX2xpbmVzLmVsaWRlZCkKKworICAgIGRlZiB0
ZXN0X2luaXRfZW1wdHkoc2VsZik6CisgICAgICAgIGNsZWFuX2xpbmVzID0gY3BwX3N0eWxlLkNs
ZWFuc2VkTGluZXMoW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFtdLCBjbGVhbl9saW5l
cy5yYXdfbGluZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDAsIGNsZWFuX2xpbmVzLm51
bV9saW5lcygpKQorCisgICAgZGVmIHRlc3RfY29sbGFwc2Vfc3RyaW5ncyhzZWxmKToKKyAgICAg
ICAgY29sbGFwc2UgPSBjcHBfc3R5bGUuQ2xlYW5zZWRMaW5lcy5jb2xsYXBzZV9zdHJpbmdzCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCciIicsIGNvbGxhcHNlKCciIicpKSAgICAgICAgICAg
ICAjICIiICAgICAoZW1wdHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCciIiInLCBjb2xs
YXBzZSgnIiIiJykpICAgICAgICAgICAjICIiIiAgICAoYmFkKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscygnIiInLCBjb2xsYXBzZSgnInh5eiInKSkgICAgICAgICAgIyAieHl6IiAgKHN0cmlu
ZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJyIiJywgY29sbGFwc2UoJyJcXFwiIicpKSAg
ICAgICAgICMgIlwiIiAgIChzdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCciIics
IGNvbGxhcHNlKCciXCciJykpICAgICAgICAgICAjICInIiAgICAoc3RyaW5nKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscygnIlwiJywgY29sbGFwc2UoJyJcIicpKSAgICAgICAgICAgIyAiXCIg
ICAgKGJhZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJyIiJywgY29sbGFwc2UoJyJcXFxc
IicpKSAgICAgICAgICMgIlxcIiAgIChzdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KCciJywgY29sbGFwc2UoJyJcXFxcXFwiJykpICAgICAgICAjICJcXFwiICAoYmFkKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscygnIiInLCBjb2xsYXBzZSgnIlxcXFxcXFxcIicpKSAgICAgIyAi
XFxcXCIgKHN0cmluZykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnXCdcJycsIGNvbGxh
cHNlKCdcJ1wnJykpICAgICAgICAgIyAnJyAgICAgKGVtcHR5KQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscygnXCdcJycsIGNvbGxhcHNlKCdcJ2FcJycpKSAgICAgICAgIyAnYScgICAgKGNoYXIp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdcJ1wnJywgY29sbGFwc2UoJ1wnXFxcJ1wnJykp
ICAgICAjICdcJycgICAoY2hhcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ1wnJywgY29s
bGFwc2UoJ1wnXFxcJycpKSAgICAgICAgICMgJ1wnICAgIChiYWQpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKCcnLCBjb2xsYXBzZSgnXFwwMTInKSkgICAgICAgICAgICAjICdcMDEyJyAoY2hh
cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJycsIGNvbGxhcHNlKCdcXHhmRjAnKSkgICAg
ICAgICAgICMgJ1x4ZkYwJyAoY2hhcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJycsIGNv
bGxhcHNlKCdcXG4nKSkgICAgICAgICAgICAgICMgJ1xuJyAoY2hhcikKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoJ1wjJywgY29sbGFwc2UoJ1xcIycpKSAgICAgICAgICAgICMgJ1wjJyAoYmFk
KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdTdHJpbmdSZXBsYWNlKGJvZHksICIiLCAi
Iik7JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2UoJ1N0cmluZ1JlcGxhY2Uo
Ym9keSwgIlxcXFwiLCAiXFxcXFxcXFwiKTsnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
J1wnXCcgIiInLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZSgnXCciXCcgImZv
byInKSkKKworCitjbGFzcyBPcmRlck9mSW5jbHVkZXNUZXN0KENwcFN0eWxlVGVzdEJhc2UpOgor
ICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5pbmNsdWRlX3N0YXRlID0gY3BwX3N0
eWxlLl9JbmNsdWRlU3RhdGUoKQorCisgICAgICAgICMgQ2hlYXQgb3MucGF0aC5hYnNwYXRoIGNh
bGxlZCBpbiBGaWxlSW5mbyBjbGFzcy4KKyAgICAgICAgc2VsZi5vc19wYXRoX2Fic3BhdGhfb3Jp
ZyA9IG9zLnBhdGguYWJzcGF0aAorICAgICAgICBvcy5wYXRoLmFic3BhdGggPSBsYW1iZGEgdmFs
dWU6IHZhbHVlCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIG9zLnBhdGguYWJz
cGF0aCA9IHNlbGYub3NfcGF0aF9hYnNwYXRoX29yaWcKKworICAgIGRlZiB0ZXN0X3RyeV9kcm9w
X2NvbW1vbl9zdWZmaXhlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZm9vL2Zv
bycsIGNwcF9zdHlsZS5fZHJvcF9jb21tb25fc3VmZml4ZXMoJ2Zvby9mb28taW5sLmgnKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZm9vL2Jhci9mb28nLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGNwcF9zdHlsZS5fZHJvcF9jb21tb25fc3VmZml4ZXMoJ2Zvby9iYXIvZm9vX2lubC5o
JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2Zvby9mb28nLCBjcHBfc3R5bGUuX2Ryb3Bf
Y29tbW9uX3N1ZmZpeGVzKCdmb28vZm9vLmNwcCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCdmb28vZm9vX3VudXN1YWxpbnRlcm5hbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgY3Bw
X3N0eWxlLl9kcm9wX2NvbW1vbl9zdWZmaXhlcygnZm9vL2Zvb191bnVzdWFsaW50ZXJuYWwuaCcp
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLAorICAgICAgICAgICAgICAgICAgICAgICAg
IGNwcF9zdHlsZS5fZHJvcF9jb21tb25fc3VmZml4ZXMoJ190ZXN0LmNwcCcpKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCd0ZXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjcHBfc3R5
bGUuX2Ryb3BfY29tbW9uX3N1ZmZpeGVzKCd0ZXN0LmNwcCcpKQorCisKK2NsYXNzIE9yZGVyT2ZJ
bmNsdWRlc1Rlc3QoQ3BwU3R5bGVUZXN0QmFzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAg
ICAgICBzZWxmLmluY2x1ZGVfc3RhdGUgPSBjcHBfc3R5bGUuX0luY2x1ZGVTdGF0ZSgpCisKKyAg
ICAgICAgIyBDaGVhdCBvcy5wYXRoLmFic3BhdGggY2FsbGVkIGluIEZpbGVJbmZvIGNsYXNzLgor
ICAgICAgICBzZWxmLm9zX3BhdGhfYWJzcGF0aF9vcmlnID0gb3MucGF0aC5hYnNwYXRoCisgICAg
ICAgIG9zLnBhdGguYWJzcGF0aCA9IGxhbWJkYSB2YWx1ZTogdmFsdWUKKworICAgIGRlZiB0ZWFy
RG93bihzZWxmKToKKyAgICAgICAgb3MucGF0aC5hYnNwYXRoID0gc2VsZi5vc19wYXRoX2Fic3Bh
dGhfb3JpZworCisgICAgZGVmIHRlc3RfY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyX19ub19jb25m
aWcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0hlYWRlciBmaWxlIHNob3VsZCBu
b3QgY29udGFpbiBXZWJDb3JlIGNvbmZpZy5oLicsCisgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5pbmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcihjcHBfc3R5bGUuX0NP
TkZJR19IRUFERVIsIFRydWUpKQorCisgICAgZGVmIHRlc3RfY2hlY2tfbmV4dF9pbmNsdWRlX29y
ZGVyX19ub19zZWxmKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdIZWFkZXIgZmls
ZSBzaG91bGQgbm90IGNvbnRhaW4gaXRzZWxmLicsCisgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5pbmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcihjcHBfc3R5bGUuX1BS
SU1BUllfSEVBREVSLCBUcnVlKSkKKyAgICAgICAgIyBUZXN0IGFjdHVhbCBjb2RlIHRvIG1ha2Ug
c3VyZSB0aGF0IGhlYWRlciB0eXBlcyBhcmUgY29ycmVjdGx5IGFzc2lnbmVkLgorICAgICAgICBz
ZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnRm9vLmgnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgIkZvby5oIlxuJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0hlYWRlciBmaWxlIHNob3VsZCBub3Qg
Y29udGFpbiBpdHNlbGYuIFNob3VsZCBiZTogYWxwaGFiZXRpY2FsbHkgc29ydGVkLicKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgW2J1aWxkL2luY2x1ZGVfb3Jk
ZXJdIFs0XScpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdGb29C
YXIuaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVk
ZSAiRm9vLmgiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
JykKKworICAgIGRlZiB0ZXN0X2NoZWNrX25leHRfaW5jbHVkZV9vcmRlcl9fbGlrZWx5X3RoZW5f
Y29uZmlnKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdGb3VuZCBoZWFkZXIgdGhp
cyBmaWxlIGltcGxlbWVudHMgYmVmb3JlIFdlYkNvcmUgY29uZmlnLmguJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLmluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVy
KGNwcF9zdHlsZS5fUFJJTUFSWV9IRUFERVIsIEZhbHNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgnRm91bmQgV2ViQ29yZSBjb25maWcuaCBhZnRlciBhIGhlYWRlciB0aGlzIGZpbGUgaW1w
bGVtZW50cy4nLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9zdGF0ZS5j
aGVja19uZXh0X2luY2x1ZGVfb3JkZXIoY3BwX3N0eWxlLl9DT05GSUdfSEVBREVSLCBGYWxzZSkp
CisKKyAgICBkZWYgdGVzdF9jaGVja19uZXh0X2luY2x1ZGVfb3JkZXJfX290aGVyX3RoZW5fY29u
ZmlnKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdGb3VuZCBvdGhlciBoZWFkZXIg
YmVmb3JlIFdlYkNvcmUgY29uZmlnLmguJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
LmluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKGNwcF9zdHlsZS5fT1RIRVJf
SEVBREVSLCBGYWxzZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0ZvdW5kIFdlYkNvcmUg
Y29uZmlnLmggYWZ0ZXIgb3RoZXIgaGVhZGVyLicsCisgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5pbmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcihjcHBfc3R5bGUuX0NP
TkZJR19IRUFERVIsIEZhbHNlKSkKKworICAgIGRlZiB0ZXN0X2NoZWNrX25leHRfaW5jbHVkZV9v
cmRlcl9fY29uZmlnX3RoZW5fb3RoZXJfdGhlbl9saWtlbHkoc2VsZik6CisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJycsIHNlbGYuaW5jbHVkZV9zdGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3Jk
ZXIoY3BwX3N0eWxlLl9DT05GSUdfSEVBREVSLCBGYWxzZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoJ0ZvdW5kIG90aGVyIGhlYWRlciBiZWZvcmUgYSBoZWFkZXIgdGhpcyBmaWxlIGltcGxl
bWVudHMuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluY2x1ZGVfc3RhdGUuY2hl
Y2tfbmV4dF9pbmNsdWRlX29yZGVyKGNwcF9zdHlsZS5fT1RIRVJfSEVBREVSLCBGYWxzZSkpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0ZvdW5kIGhlYWRlciB0aGlzIGZpbGUgaW1wbGVtZW50
cyBhZnRlciBvdGhlciBoZWFkZXIuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlu
Y2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKGNwcF9zdHlsZS5fUFJJTUFSWV9I
RUFERVIsIEZhbHNlKSkKKworICAgIGRlZiB0ZXN0X2NoZWNrX2FscGhhYmV0aWNhbF9pbmNsdWRl
X29yZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygn
Zm9vLmgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1
ZGUgImEuaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNp
bmNsdWRlICJjLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICcjaW5jbHVkZSAiYi5oIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ0FscGhhYmV0aWNhbCBzb3J0aW5nIHByb2JsZW0uICBbYnVpbGQvaW5jbHVkZV9vcmRl
cl0gWzRdJykKKworICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9v
LmgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUg
ImEuaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNs
dWRlICJiLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcj
aW5jbHVkZSAiYy5oIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby5o
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlIDxh
c3NlcnQuaD5cbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNp
bmNsdWRlICJiYXIuaCJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdBbHBoYWJldGljYWwgc29ydGluZyBwcm9ibGVtLiAgW2J1aWxkL2luY2x1ZGVfb3JkZXJd
IFs0XScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby5o
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJi
YXIuaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNs
dWRlIDxhc3NlcnQuaD5cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICcnKQorCisgICAgZGVmIHRlc3RfY2hlY2tfbGluZV9icmVha19hZnRlcl9vd25faGVhZGVy
KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vLmNw
cCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAi
Y29uZmlnLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcj
aW5jbHVkZSAiZm9vLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICcjaW5jbHVkZSAiYmFyLmgiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnWW91IHNob3VsZCBhZGQgYSBibGFuayBsaW5lIGFmdGVyIGltcGxlbWVudGF0
aW9uIGZpbGVcJ3Mgb3duIGhlYWRlci4gIFtidWlsZC9pbmNsdWRlX29yZGVyXSBbNF0nKQorCisg
ICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28uY3BwJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJjb25maWcuaCJc
bicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJm
b28uaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgImJhci5o
IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycpCisKKyAg
ICBkZWYgdGVzdF9jaGVja19wcmVwcm9jZXNzb3JfaW5faW5jbHVkZV9zZWN0aW9uKHNlbGYpOgor
ICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vLmNwcCcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiY29uZmlnLmgi
XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAi
Zm9vLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpZmRlZiBCQVpcbicK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJiYXou
aCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNlbHNlXG4n
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiZm9v
YmFyLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjZW5k
aWYiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVk
ZSAiYmFyLmgiXG4nLCAjIE5vIGZsYWcgYmVjYXVzZSBwcmV2aW91cyBpcyBpbiBwcmVwcm9jZXNz
b3Igc2VjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJykK
KworICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vLmNwcCcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiY29uZmln
LmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVk
ZSAiZm9vLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdc
bicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpZmRlZiBCQVpc
bicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJi
YXouaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNlbmRp
ZiJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRl
ICJiYXIuaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNp
bmNsdWRlICJhLmgiXG4nLCAjIFNob3VsZCBzdGlsbCBmbGFnIHRoaXMuCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBbHBoYWJldGljYWwgc29ydGluZyBwcm9ibGVt
LiAgW2J1aWxkL2luY2x1ZGVfb3JkZXJdIFs0XScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRfbGFu
Z3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby5jcHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnI2luY2x1ZGUgImNvbmZpZy5oIlxuJworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgImZvby5oIlxuJworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICcjaWZkZWYgQkFaXG4nCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiYmF6LmgiXG4nCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiYmFyLmgiXG4nICNTaG91bGQgc3Rp
bGwgZmxhZyB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcj
ZW5kaWYiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWxw
aGFiZXRpY2FsIHNvcnRpbmcgcHJvYmxlbS4gIFtidWlsZC9pbmNsdWRlX29yZGVyXSBbNF0nKQor
CisgICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28uY3BwJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJjb25maWcu
aCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRl
ICJmb28uaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xu
JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2lmZGVmIEJBWlxu
JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgImJh
ei5oIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2VuZGlm
IlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2lmZGVmIEZP
T0JBUlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1
ZGUgImZvb2Jhci5oIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnI2VuZGlmIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
I2luY2x1ZGUgImJhci5oIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnI2luY2x1ZGUgImEuaCJcbicsICMgU2hvdWxkIHN0aWxsIGZsYWcgdGhpcy4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FscGhhYmV0aWNhbCBzb3J0aW5n
IHByb2JsZW0uICBbYnVpbGQvaW5jbHVkZV9vcmRlcl0gWzRdJykKKworICAgICAgICAjIENoZWNr
IHRoYXQgYWZ0ZXIgYW4gYWxyZWFkeSBpbmNsdWRlZCBlcnJvciwgdGhlIHNvcnRpbmcgcnVsZXMg
c3RpbGwgd29yay4KKyAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zv
by5jcHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1
ZGUgImNvbmZpZy5oIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnI2luY2x1ZGUgImZvby5oIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcj
aW5jbHVkZSAiZm9vLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICcjaW5jbHVkZSAiZy5oIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJyJmb28uaCIgYWxyZWFkeSBpbmNsdWRlZCBhdCBmb28uY3BwOjEgIFtidWlsZC9p
bmNsdWRlXSBbNF0nKQorCisgICAgZGVmIHRlc3RfY2hlY2tfd3RmX2luY2x1ZGVzKHNlbGYpOgor
ICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vLmNwcCcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiY29uZmlnLmgi
XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAi
Zm9vLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28uY3Bw
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJj
b25maWcuaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNp
bmNsdWRlICJmb28uaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ1xuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1
ZGUgInd0Zi9Bc3NlcnRpb25zLmgiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnd3RmIGluY2x1ZGVzIHNob3VsZCBiZSA8d3RmL2ZpbGUuaD4gaW5zdGVhZCBv
ZiAid3RmL2ZpbGUuaCIuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnICBbYnVpbGQvaW5jbHVkZV0gWzRdJykKKworICAgIGRlZiB0ZXN0X2NsYXNzaWZ5X2luY2x1
ZGUoc2VsZik6CisgICAgICAgIGNsYXNzaWZ5X2luY2x1ZGUgPSBjcHBfc3R5bGUuX2NsYXNzaWZ5
X2luY2x1ZGUKKyAgICAgICAgaW5jbHVkZV9zdGF0ZSA9IGNwcF9zdHlsZS5fSW5jbHVkZVN0YXRl
KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBfc3R5bGUuX0NPTkZJR19IRUFERVIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZnlfaW5jbHVkZSgnZm9vL2Zvby5jcHAnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmZpZy5oJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlLCBpbmNsdWRlX3N0
YXRlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBfc3R5bGUuX1BSSU1BUllfSEVBREVS
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZ5X2luY2x1ZGUoJ2Zvby9pbnRlcm5h
bC9mb28uY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdm
b28vcHVibGljL2Zvby5oJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEZhbHNlLCBpbmNsdWRlX3N0YXRlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBf
c3R5bGUuX1BSSU1BUllfSEVBREVSLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZ5
X2luY2x1ZGUoJ2Zvby9pbnRlcm5hbC9mb28uY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdmb28vb3RoZXIvcHVibGljL2Zvby5oJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlLCBpbmNsdWRlX3N0YXRlKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBfc3R5bGUuX09USEVSX0hFQURFUiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBjbGFzc2lmeV9pbmNsdWRlKCdmb28vaW50ZXJuYWwvZm9vLmNwcCcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vL290aGVyL3B1
YmxpYy9mb29wLmgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RmFsc2UsIGluY2x1ZGVfc3RhdGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNwcF9zdHls
ZS5fT1RIRVJfSEVBREVSLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZ5X2luY2x1
ZGUoJ2Zvby9mb28uY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdzdHJpbmcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VHJ1ZSwgaW5jbHVkZV9zdGF0ZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3BwX3N0eWxl
Ll9QUklNQVJZX0hFQURFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmeV9pbmNs
dWRlKCdmb29DdXN0b20uY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdmb28uaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGYWxzZSwgaW5jbHVkZV9zdGF0ZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3BwX3N0
eWxlLl9QUklNQVJZX0hFQURFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmeV9p
bmNsdWRlKCdQcmVmaXhGb29DdXN0b20uY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdGb28uaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGYWxzZSwgaW5jbHVkZV9zdGF0ZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoY3BwX3N0eWxlLl9NT0NfSEVBREVSLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNz
aWZ5X2luY2x1ZGUoJ2Zvby5jcHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ2Zvby5tb2MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRmFsc2UsIGluY2x1ZGVfc3RhdGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNw
cF9zdHlsZS5fTU9DX0hFQURFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmeV9p
bmNsdWRlKCdmb28uY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdtb2NfZm9vLmNwcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBGYWxzZSwgaW5jbHVkZV9zdGF0ZSkpCisgICAgICAgICMgVHJpY2t5IGV4YW1wbGUgd2hl
cmUgYm90aCBpbmNsdWRlcyBtaWdodCBiZSBjbGFzc2lmaWVkIGFzIHByaW1hcnkuCisgICAgICAg
IHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdTY3JvbGxiYXJUaGVtZVdpbmNlLmNw
cCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAi
Y29uZmlnLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcj
aW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVXaW5jZS5oIlxuJworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICcjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiXG4nLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2Vf
cnVsZXNfY2hlY2soJ1Njcm9sbGJhclRoZW1lV2luY2UuY3BwJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJjb25maWcuaCJcbicKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJTY3JvbGxiYXIuaCJc
bicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgIlNjcm9sbGJhclRo
ZW1lV2luY2UuaCJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdGb3VuZCBoZWFkZXIgdGhpcyBmaWxlIGltcGxlbWVudHMgYWZ0ZXIgYSBoZWFkZXIgdGhpcyBm
aWxlIGltcGxlbWVudHMuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnIFNob3VsZCBiZTogY29uZmlnLmgsIHByaW1hcnkgaGVhZGVyLCBibGFuayBsaW5lLCBhbmQg
dGhlbiBhbHBoYWJldGljYWxseSBzb3J0ZWQuJworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnICBbYnVpbGQvaW5jbHVkZV9vcmRlcl0gWzRdJykKKworICAgIGRlZiB0
ZXN0X3RyeV9kcm9wX2NvbW1vbl9zdWZmaXhlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgnZm9vL2ZvbycsIGNwcF9zdHlsZS5fZHJvcF9jb21tb25fc3VmZml4ZXMoJ2Zvby9mb28t
aW5sLmgnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZm9vL2Jhci9mb28nLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGNwcF9zdHlsZS5fZHJvcF9jb21tb25fc3VmZml4ZXMoJ2Zvby9i
YXIvZm9vX2lubC5oJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2Zvby9mb28nLCBjcHBf
c3R5bGUuX2Ryb3BfY29tbW9uX3N1ZmZpeGVzKCdmb28vZm9vLmNwcCcpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCdmb28vZm9vX3VudXN1YWxpbnRlcm5hbCcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgY3BwX3N0eWxlLl9kcm9wX2NvbW1vbl9zdWZmaXhlcygnZm9vL2Zvb191bnVzdWFs
aW50ZXJuYWwuaCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIGNwcF9zdHlsZS5fZHJvcF9jb21tb25fc3VmZml4ZXMoJ190ZXN0LmNwcCcp
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd0ZXN0JywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBjcHBfc3R5bGUuX2Ryb3BfY29tbW9uX3N1ZmZpeGVzKCd0ZXN0LmNwcCcpKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCd0ZXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjcHBf
c3R5bGUuX2Ryb3BfY29tbW9uX3N1ZmZpeGVzKCd0ZXN0LmNwcCcpKQorCitjbGFzcyBDaGVja0Zv
ckZ1bmN0aW9uTGVuZ3Roc1Rlc3QoQ3BwU3R5bGVUZXN0QmFzZSk6CisgICAgZGVmIHNldFVwKHNl
bGYpOgorICAgICAgICAjIFJlZHVjaW5nIHRoZXNlIHRocmVzaG9sZHMgZm9yIHRoZSB0ZXN0cyBz
cGVlZHMgdXAgdGVzdHMgc2lnbmlmaWNhbnRseS4KKyAgICAgICAgc2VsZi5vbGRfbm9ybWFsX3Ry
aWdnZXIgPSBjcHBfc3R5bGUuX0Z1bmN0aW9uU3RhdGUuX05PUk1BTF9UUklHR0VSCisgICAgICAg
IHNlbGYub2xkX3Rlc3RfdHJpZ2dlciA9IGNwcF9zdHlsZS5fRnVuY3Rpb25TdGF0ZS5fVEVTVF9U
UklHR0VSCisKKyAgICAgICAgY3BwX3N0eWxlLl9GdW5jdGlvblN0YXRlLl9OT1JNQUxfVFJJR0dF
UiA9IDEwCisgICAgICAgIGNwcF9zdHlsZS5fRnVuY3Rpb25TdGF0ZS5fVEVTVF9UUklHR0VSID0g
MjUKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgY3BwX3N0eWxlLl9GdW5jdGlv
blN0YXRlLl9OT1JNQUxfVFJJR0dFUiA9IHNlbGYub2xkX25vcm1hbF90cmlnZ2VyCisgICAgICAg
IGNwcF9zdHlsZS5fRnVuY3Rpb25TdGF0ZS5fVEVTVF9UUklHR0VSID0gc2VsZi5vbGRfdGVzdF90
cmlnZ2VyCisKKyAgICBkZWYgYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aHNfY2hlY2soc2VsZiwgY29k
ZSwgZXhwZWN0ZWRfbWVzc2FnZSk6CisgICAgICAgICIiIkNoZWNrIHdhcm5pbmdzIGZvciBsb25n
IGZ1bmN0aW9uIGJvZGllcyBhcmUgYXMgZXhwZWN0ZWQuCisKKyAgICAgICAgQXJnczoKKyAgICAg
ICAgICBjb2RlOiBDKysgc291cmNlIGNvZGUgZXhwZWN0ZWQgdG8gZ2VuZXJhdGUgYSB3YXJuaW5n
IG1lc3NhZ2UuCisgICAgICAgICAgZXhwZWN0ZWRfbWVzc2FnZTogTWVzc2FnZSBleHBlY3RlZCB0
byBiZSBnZW5lcmF0ZWQgYnkgdGhlIEMrKyBjb2RlLgorICAgICAgICAiIiIKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRfbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2xlbmd0aHNfY2hlY2soY29kZSkpCisKKyAgICBkZWYg
dHJpZ2dlcl9saW5lcyhzZWxmLCBlcnJvcl9sZXZlbCk6CisgICAgICAgICIiIlJldHVybiBudW1i
ZXIgb2YgbGluZXMgbmVlZGVkIHRvIHRyaWdnZXIgYSBmdW5jdGlvbiBsZW5ndGggd2FybmluZy4K
KworICAgICAgICBBcmdzOgorICAgICAgICAgIGVycm9yX2xldmVsOiAtLXYgc2V0dGluZyBmb3Ig
Y3BwX3N0eWxlLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgTnVtYmVyIG9mIGxpbmVz
IG5lZWRlZCB0byB0cmlnZ2VyIGEgZnVuY3Rpb24gbGVuZ3RoIHdhcm5pbmcuCisgICAgICAgICIi
IgorICAgICAgICByZXR1cm4gY3BwX3N0eWxlLl9GdW5jdGlvblN0YXRlLl9OT1JNQUxfVFJJR0dF
UiAqIDIgKiogZXJyb3JfbGV2ZWwKKworICAgIGRlZiB0cmlnZ2VyX3Rlc3RfbGluZXMoc2VsZiwg
ZXJyb3JfbGV2ZWwpOgorICAgICAgICAiIiJSZXR1cm4gbnVtYmVyIG9mIGxpbmVzIG5lZWRlZCB0
byB0cmlnZ2VyIGEgdGVzdCBmdW5jdGlvbiBsZW5ndGggd2FybmluZy4KKworICAgICAgICBBcmdz
OgorICAgICAgICAgIGVycm9yX2xldmVsOiAtLXYgc2V0dGluZyBmb3IgY3BwX3N0eWxlLgorCisg
ICAgICAgIFJldHVybnM6CisgICAgICAgICAgTnVtYmVyIG9mIGxpbmVzIG5lZWRlZCB0byB0cmln
Z2VyIGEgdGVzdCBmdW5jdGlvbiBsZW5ndGggd2FybmluZy4KKyAgICAgICAgIiIiCisgICAgICAg
IHJldHVybiBjcHBfc3R5bGUuX0Z1bmN0aW9uU3RhdGUuX1RFU1RfVFJJR0dFUiAqIDIgKiogZXJy
b3JfbGV2ZWwKKworICAgIGRlZiBhc3NlcnRfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRp
b24oc2VsZiwgbGluZXMsIGVycm9yX2xldmVsKToKKyAgICAgICAgIiIiR2VuZXJhdGUgbG9uZyBm
dW5jdGlvbiBkZWZpbml0aW9uIGFuZCBjaGVjayB3YXJuaW5ncyBhcmUgYXMgZXhwZWN0ZWQuCisK
KyAgICAgICAgQXJnczoKKyAgICAgICAgICBsaW5lczogTnVtYmVyIG9mIGxpbmVzIHRvIGdlbmVy
YXRlLgorICAgICAgICAgIGVycm9yX2xldmVsOiAgLS12IHNldHRpbmcgZm9yIGNwcF9zdHlsZS4K
KyAgICAgICAgIiIiCisgICAgICAgIHRyaWdnZXJfbGV2ZWwgPSBzZWxmLnRyaWdnZXJfbGluZXMo
Y3BwX3N0eWxlLl92ZXJib3NlX2xldmVsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9u
X2xlbmd0aHNfY2hlY2soCisgICAgICAgICAgICAndm9pZCB0ZXN0KGludCB4KScgKyBzZWxmLmZ1
bmN0aW9uX2JvZHkobGluZXMpLAorICAgICAgICAgICAgKCdTbWFsbCBhbmQgZm9jdXNlZCBmdW5j
dGlvbnMgYXJlIHByZWZlcnJlZDogJworICAgICAgICAgICAgICd0ZXN0KCkgaGFzICVkIG5vbi1j
b21tZW50IGxpbmVzICcKKyAgICAgICAgICAgICAnKGVycm9yIHRyaWdnZXJlZCBieSBleGNlZWRp
bmcgJWQgbGluZXMpLicKKyAgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvZm5fc2l6ZV0gWyVk
XScKKyAgICAgICAgICAgICAlIChsaW5lcywgdHJpZ2dlcl9sZXZlbCwgZXJyb3JfbGV2ZWwpKSkK
KworICAgIGRlZiBhc3NlcnRfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25fb2soc2Vs
ZiwgbGluZXMpOgorICAgICAgICAiIiJHZW5lcmF0ZSBzaG9ydGVyIGZ1bmN0aW9uIGRlZmluaXRp
b24gYW5kIGNoZWNrIG5vIHdhcm5pbmcgaXMgcHJvZHVjZWQuCisKKyAgICAgICAgQXJnczoKKyAg
ICAgICAgICBsaW5lczogTnVtYmVyIG9mIGxpbmVzIHRvIGdlbmVyYXRlLgorICAgICAgICAiIiIK
KyAgICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3Roc19jaGVjaygKKyAgICAgICAgICAg
ICd2b2lkIHRlc3QoaW50IHgpJyArIHNlbGYuZnVuY3Rpb25fYm9keShsaW5lcyksCisgICAgICAg
ICAgICAnJykKKworICAgIGRlZiBhc3NlcnRfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2F0X2Vycm9y
X2xldmVsKHNlbGYsIGVycm9yX2xldmVsKToKKyAgICAgICAgIiIiR2VuZXJhdGUgYW5kIGNoZWNr
IGZ1bmN0aW9uIGF0IHRoZSB0cmlnZ2VyIGxldmVsIGZvciAtLXYgc2V0dGluZy4KKworICAgICAg
ICBBcmdzOgorICAgICAgICAgIGVycm9yX2xldmVsOiAtLXYgc2V0dGluZyBmb3IgY3BwX3N0eWxl
LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3RoX2NoZWNr
X2RlZmluaXRpb24oc2VsZi50cmlnZ2VyX2xpbmVzKGVycm9yX2xldmVsKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbGV2ZWwpCisK
KyAgICBkZWYgYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19iZWxvd19lcnJvcl9sZXZlbChz
ZWxmLCBlcnJvcl9sZXZlbCk6CisgICAgICAgICIiIkdlbmVyYXRlIGFuZCBjaGVjayBmdW5jdGlv
biBqdXN0IGJlbG93IHRoZSB0cmlnZ2VyIGxldmVsIGZvciAtLXYgc2V0dGluZy4KKworICAgICAg
ICBBcmdzOgorICAgICAgICAgIGVycm9yX2xldmVsOiAtLXYgc2V0dGluZyBmb3IgY3BwX3N0eWxl
LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3RoX2NoZWNr
X2RlZmluaXRpb24oc2VsZi50cmlnZ2VyX2xpbmVzKGVycm9yX2xldmVsKSAtIDEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2xldmVs
IC0gMSkKKworICAgIGRlZiBhc3NlcnRfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2Fib3ZlX2Vycm9y
X2xldmVsKHNlbGYsIGVycm9yX2xldmVsKToKKyAgICAgICAgIiIiR2VuZXJhdGUgYW5kIGNoZWNr
IGZ1bmN0aW9uIGp1c3QgYWJvdmUgdGhlIHRyaWdnZXIgbGV2ZWwgZm9yIC0tdiBzZXR0aW5nLgor
CisgICAgICAgIEFyZ3M6CisgICAgICAgICAgZXJyb3JfbGV2ZWw6IC0tdiBzZXR0aW5nIGZvciBj
cHBfc3R5bGUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5n
dGhfY2hlY2tfZGVmaW5pdGlvbihzZWxmLnRyaWdnZXJfbGluZXMoZXJyb3JfbGV2ZWwpICsgMSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJy
b3JfbGV2ZWwpCisKKyAgICBkZWYgZnVuY3Rpb25fYm9keShzZWxmLCBudW1iZXJfb2ZfbGluZXMp
OgorICAgICAgICByZXR1cm4gJyB7XG4nICsgJyAgICB0aGlzX2lzX2p1c3RfYV90ZXN0KCk7XG4n
ICogbnVtYmVyX29mX2xpbmVzICsgJ30nCisKKyAgICBkZWYgZnVuY3Rpb25fYm9keV93aXRoX2Js
YW5rX2xpbmVzKHNlbGYsIG51bWJlcl9vZl9saW5lcyk6CisgICAgICAgIHJldHVybiAnIHtcbicg
KyAnICAgIHRoaXNfaXNfanVzdF9hX3Rlc3QoKTtcblxuJyAqIG51bWJlcl9vZl9saW5lcyArICd9
JworCisgICAgZGVmIGZ1bmN0aW9uX2JvZHlfd2l0aF9ub19saW50cyhzZWxmLCBudW1iZXJfb2Zf
bGluZXMpOgorICAgICAgICByZXR1cm4gJyB7XG4nICsgJyAgICB0aGlzX2lzX2p1c3RfYV90ZXN0
KCk7ICAvLyBOT0xJTlRcbicgKiBudW1iZXJfb2ZfbGluZXMgKyAnfScKKworICAgICMgVGVzdCBs
aW5lIGxlbmd0aCBjaGVja3MuCisgICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2Rl
Y2xhcmF0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhzX2No
ZWNrKAorICAgICAgICAgICAgJ3ZvaWQgdGVzdCgpOycsICAjIE5vdCBhIGZ1bmN0aW9uIGRlZmlu
aXRpb24KKyAgICAgICAgICAgICcnKQorCisgICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2No
ZWNrX2RlY2xhcmF0aW9uX3dpdGhfYmxvY2tfZm9sbG93aW5nKHNlbGYpOgorICAgICAgICBzZWxm
LmFzc2VydF9mdW5jdGlvbl9sZW5ndGhzX2NoZWNrKAorICAgICAgICAgICAgKCd2b2lkIHRlc3Qo
KTtcbicKKyAgICAgICAgICAgICArIHNlbGYuZnVuY3Rpb25fYm9keSg2NikpLCAgIyBOb3QgYSBm
dW5jdGlvbiBkZWZpbml0aW9uCisgICAgICAgICAgICAnJykKKworICAgIGRlZiB0ZXN0X2Z1bmN0
aW9uX2xlbmd0aF9jaGVja19jbGFzc19kZWZpbml0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFz
c2VydF9mdW5jdGlvbl9sZW5ndGhzX2NoZWNrKCAgIyBOb3QgYSBmdW5jdGlvbiBkZWZpbml0aW9u
CisgICAgICAgICAgICAnY2xhc3MgVGVzdCcgKyBzZWxmLmZ1bmN0aW9uX2JvZHkoNjYpICsgJzsn
LAorICAgICAgICAgICAgJycpCisKKyAgICBkZWYgdGVzdF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tf
dHJpdmlhbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3Roc19jaGVj
aygKKyAgICAgICAgICAgICd2b2lkIHRlc3QoKSB7fScsICAjIE5vdCBjb3VudGVkCisgICAgICAg
ICAgICAnJykKKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19lbXB0eShzZWxm
KToKKyAgICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3Roc19jaGVjaygKKyAgICAgICAg
ICAgICd2b2lkIHRlc3QoKSB7XG59JywKKyAgICAgICAgICAgICcnKQorCisgICAgZGVmIHRlc3Rf
ZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25fYmVsb3dfc2V2ZXJpdHkwKHNlbGYpOgor
ICAgICAgICBvbGRfdmVyYm9zaXR5ID0gY3BwX3N0eWxlLl9zZXRfdmVyYm9zZV9sZXZlbCgwKQor
ICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9vayhz
ZWxmLnRyaWdnZXJfbGluZXMoMCkgLSAxKQorICAgICAgICBjcHBfc3R5bGUuX3NldF92ZXJib3Nl
X2xldmVsKG9sZF92ZXJib3NpdHkpCisKKyAgICBkZWYgdGVzdF9mdW5jdGlvbl9sZW5ndGhfY2hl
Y2tfZGVmaW5pdGlvbl9hdF9zZXZlcml0eTAoc2VsZik6CisgICAgICAgIG9sZF92ZXJib3NpdHkg
PSBjcHBfc3R5bGUuX3NldF92ZXJib3NlX2xldmVsKDApCisgICAgICAgIHNlbGYuYXNzZXJ0X2Z1
bmN0aW9uX2xlbmd0aF9jaGVja19kZWZpbml0aW9uX29rKHNlbGYudHJpZ2dlcl9saW5lcygwKSkK
KyAgICAgICAgY3BwX3N0eWxlLl9zZXRfdmVyYm9zZV9sZXZlbChvbGRfdmVyYm9zaXR5KQorCisg
ICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25fYWJvdmVfc2V2ZXJp
dHkwKHNlbGYpOgorICAgICAgICBvbGRfdmVyYm9zaXR5ID0gY3BwX3N0eWxlLl9zZXRfdmVyYm9z
ZV9sZXZlbCgwKQorICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfYWJv
dmVfZXJyb3JfbGV2ZWwoMCkKKyAgICAgICAgY3BwX3N0eWxlLl9zZXRfdmVyYm9zZV9sZXZlbChv
bGRfdmVyYm9zaXR5KQorCisgICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmlu
aXRpb25fYmVsb3dfc2V2ZXJpdHkxdjAoc2VsZik6CisgICAgICAgIG9sZF92ZXJib3NpdHkgPSBj
cHBfc3R5bGUuX3NldF92ZXJib3NlX2xldmVsKDApCisgICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0
aW9uX2xlbmd0aF9jaGVja19iZWxvd19lcnJvcl9sZXZlbCgxKQorICAgICAgICBjcHBfc3R5bGUu
X3NldF92ZXJib3NlX2xldmVsKG9sZF92ZXJib3NpdHkpCisKKyAgICBkZWYgdGVzdF9mdW5jdGlv
bl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9hdF9zZXZlcml0eTF2MChzZWxmKToKKyAgICAgICAg
b2xkX3ZlcmJvc2l0eSA9IGNwcF9zdHlsZS5fc2V0X3ZlcmJvc2VfbGV2ZWwoMCkKKyAgICAgICAg
c2VsZi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2F0X2Vycm9yX2xldmVsKDEpCisgICAg
ICAgIGNwcF9zdHlsZS5fc2V0X3ZlcmJvc2VfbGV2ZWwob2xkX3ZlcmJvc2l0eSkKKworICAgIGRl
ZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19kZWZpbml0aW9uX2JlbG93X3NldmVyaXR5MShz
ZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRp
b25fb2soc2VsZi50cmlnZ2VyX2xpbmVzKDEpIC0gMSkKKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9u
X2xlbmd0aF9jaGVja19kZWZpbml0aW9uX2F0X3NldmVyaXR5MShzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25fb2soc2VsZi50cmlnZ2Vy
X2xpbmVzKDEpKQorCisgICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRp
b25fYWJvdmVfc2V2ZXJpdHkxKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9s
ZW5ndGhfY2hlY2tfYWJvdmVfZXJyb3JfbGV2ZWwoMSkKKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9u
X2xlbmd0aF9jaGVja19kZWZpbml0aW9uX3NldmVyaXR5MV9wbHVzX2JsYW5rcyhzZWxmKToKKyAg
ICAgICAgZXJyb3JfbGV2ZWwgPSAxCisgICAgICAgIGVycm9yX2xpbmVzID0gc2VsZi50cmlnZ2Vy
X2xpbmVzKGVycm9yX2xldmVsKSArIDEKKyAgICAgICAgdHJpZ2dlcl9sZXZlbCA9IHNlbGYudHJp
Z2dlcl9saW5lcyhjcHBfc3R5bGUuX3ZlcmJvc2VfbGV2ZWwoKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRfZnVuY3Rpb25fbGVuZ3Roc19jaGVjaygKKyAgICAgICAgICAgICd2b2lkIHRlc3RfYmxhbmtz
KGludCB4KScgKyBzZWxmLmZ1bmN0aW9uX2JvZHkoZXJyb3JfbGluZXMpLAorICAgICAgICAgICAg
KCdTbWFsbCBhbmQgZm9jdXNlZCBmdW5jdGlvbnMgYXJlIHByZWZlcnJlZDogJworICAgICAgICAg
ICAgICd0ZXN0X2JsYW5rcygpIGhhcyAlZCBub24tY29tbWVudCBsaW5lcyAnCisgICAgICAgICAg
ICAgJyhlcnJvciB0cmlnZ2VyZWQgYnkgZXhjZWVkaW5nICVkIGxpbmVzKS4nCisgICAgICAgICAg
ICAgJyAgW3JlYWRhYmlsaXR5L2ZuX3NpemVdIFslZF0nKQorICAgICAgICAgICAgJSAoZXJyb3Jf
bGluZXMsIHRyaWdnZXJfbGV2ZWwsIGVycm9yX2xldmVsKSkKKworICAgIGRlZiB0ZXN0X2Z1bmN0
aW9uX2xlbmd0aF9jaGVja19jb21wbGV4X2RlZmluaXRpb25fc2V2ZXJpdHkxKHNlbGYpOgorICAg
ICAgICBlcnJvcl9sZXZlbCA9IDEKKyAgICAgICAgZXJyb3JfbGluZXMgPSBzZWxmLnRyaWdnZXJf
bGluZXMoZXJyb3JfbGV2ZWwpICsgMQorICAgICAgICB0cmlnZ2VyX2xldmVsID0gc2VsZi50cmln
Z2VyX2xpbmVzKGNwcF9zdHlsZS5fdmVyYm9zZV9sZXZlbCgpKQorICAgICAgICBzZWxmLmFzc2Vy
dF9mdW5jdGlvbl9sZW5ndGhzX2NoZWNrKAorICAgICAgICAgICAgKCdteV9uYW1lc3BhY2U6Om15
X290aGVyX25hbWVzcGFjZTo6TXlWZXJ5TG9uZ1R5cGVOYW1lKlxuJworICAgICAgICAgICAgICdt
eV9uYW1lc3BhY2U6Om15X290aGVyX25hbWVzcGFjZTo6TXlGdW5jdGlvbihpbnQgYXJnMSwgY2hh
ciogYXJnMiknCisgICAgICAgICAgICAgKyBzZWxmLmZ1bmN0aW9uX2JvZHkoZXJyb3JfbGluZXMp
KSwKKyAgICAgICAgICAgICgnU21hbGwgYW5kIGZvY3VzZWQgZnVuY3Rpb25zIGFyZSBwcmVmZXJy
ZWQ6ICcKKyAgICAgICAgICAgICAnbXlfbmFtZXNwYWNlOjpteV9vdGhlcl9uYW1lc3BhY2U6Ok15
RnVuY3Rpb24oKScKKyAgICAgICAgICAgICAnIGhhcyAlZCBub24tY29tbWVudCBsaW5lcyAnCisg
ICAgICAgICAgICAgJyhlcnJvciB0cmlnZ2VyZWQgYnkgZXhjZWVkaW5nICVkIGxpbmVzKS4nCisg
ICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2ZuX3NpemVdIFslZF0nKQorICAgICAgICAgICAg
JSAoZXJyb3JfbGluZXMsIHRyaWdnZXJfbGV2ZWwsIGVycm9yX2xldmVsKSkKKworICAgIGRlZiB0
ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19kZWZpbml0aW9uX3NldmVyaXR5MV9mb3JfdGVzdChz
ZWxmKToKKyAgICAgICAgZXJyb3JfbGV2ZWwgPSAxCisgICAgICAgIGVycm9yX2xpbmVzID0gc2Vs
Zi50cmlnZ2VyX3Rlc3RfbGluZXMoZXJyb3JfbGV2ZWwpICsgMQorICAgICAgICB0cmlnZ2VyX2xl
dmVsID0gc2VsZi50cmlnZ2VyX3Rlc3RfbGluZXMoY3BwX3N0eWxlLl92ZXJib3NlX2xldmVsKCkp
CisgICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aHNfY2hlY2soCisgICAgICAgICAg
ICAnVEVTVF9GKFRlc3QsIE11dGF0b3IpJyArIHNlbGYuZnVuY3Rpb25fYm9keShlcnJvcl9saW5l
cyksCisgICAgICAgICAgICAoJ1NtYWxsIGFuZCBmb2N1c2VkIGZ1bmN0aW9ucyBhcmUgcHJlZmVy
cmVkOiAnCisgICAgICAgICAgICAgJ1RFU1RfRihUZXN0LCBNdXRhdG9yKSBoYXMgJWQgbm9uLWNv
bW1lbnQgbGluZXMgJworICAgICAgICAgICAgICcoZXJyb3IgdHJpZ2dlcmVkIGJ5IGV4Y2VlZGlu
ZyAlZCBsaW5lcykuJworICAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9mbl9zaXplXSBbJWRd
JykKKyAgICAgICAgICAgICUgKGVycm9yX2xpbmVzLCB0cmlnZ2VyX2xldmVsLCBlcnJvcl9sZXZl
bCkpCisKKyAgICBkZWYgdGVzdF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9zZXZl
cml0eTFfZm9yX3NwbGl0X2xpbmVfdGVzdChzZWxmKToKKyAgICAgICAgZXJyb3JfbGV2ZWwgPSAx
CisgICAgICAgIGVycm9yX2xpbmVzID0gc2VsZi50cmlnZ2VyX3Rlc3RfbGluZXMoZXJyb3JfbGV2
ZWwpICsgMQorICAgICAgICB0cmlnZ2VyX2xldmVsID0gc2VsZi50cmlnZ2VyX3Rlc3RfbGluZXMo
Y3BwX3N0eWxlLl92ZXJib3NlX2xldmVsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9u
X2xlbmd0aHNfY2hlY2soCisgICAgICAgICAgICAoJ1RFU1RfRihHb29nbGVVcGRhdGVSZWNvdmVy
eVJlZ2lzdHJ5UHJvdGVjdGVkVGVzdCxcbicKKyAgICAgICAgICAgICAnICAgIEZpeEdvb2dsZVVw
ZGF0ZV9BbGxWYWx1ZXNfTWFjaGluZUFwcCknICAjIG5vdGU6IDQgc3BhY2VzCisgICAgICAgICAg
ICAgKyBzZWxmLmZ1bmN0aW9uX2JvZHkoZXJyb3JfbGluZXMpKSwKKyAgICAgICAgICAgICgnU21h
bGwgYW5kIGZvY3VzZWQgZnVuY3Rpb25zIGFyZSBwcmVmZXJyZWQ6ICcKKyAgICAgICAgICAgICAn
VEVTVF9GKEdvb2dsZVVwZGF0ZVJlY292ZXJ5UmVnaXN0cnlQcm90ZWN0ZWRUZXN0LCAnICAjIDEg
c3BhY2UKKyAgICAgICAgICAgICAnRml4R29vZ2xlVXBkYXRlX0FsbFZhbHVlc19NYWNoaW5lQXBw
KSBoYXMgJWQgbm9uLWNvbW1lbnQgbGluZXMgJworICAgICAgICAgICAgICcoZXJyb3IgdHJpZ2dl
cmVkIGJ5IGV4Y2VlZGluZyAlZCBsaW5lcykuJworICAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0
eS9mbl9zaXplXSBbJWRdJykKKyAgICAgICAgICAgICUgKGVycm9yX2xpbmVzKzEsIHRyaWdnZXJf
bGV2ZWwsIGVycm9yX2xldmVsKSkKKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVj
a19kZWZpbml0aW9uX3NldmVyaXR5MV9mb3JfYmFkX3Rlc3RfZG9lc250X2JyZWFrKHNlbGYpOgor
ICAgICAgICBlcnJvcl9sZXZlbCA9IDEKKyAgICAgICAgZXJyb3JfbGluZXMgPSBzZWxmLnRyaWdn
ZXJfdGVzdF9saW5lcyhlcnJvcl9sZXZlbCkgKyAxCisgICAgICAgIHRyaWdnZXJfbGV2ZWwgPSBz
ZWxmLnRyaWdnZXJfdGVzdF9saW5lcyhjcHBfc3R5bGUuX3ZlcmJvc2VfbGV2ZWwoKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3Roc19jaGVjaygKKyAgICAgICAgICAgICgnVEVT
VF9GKCcKKyAgICAgICAgICAgICArIHNlbGYuZnVuY3Rpb25fYm9keShlcnJvcl9saW5lcykpLAor
ICAgICAgICAgICAgKCdTbWFsbCBhbmQgZm9jdXNlZCBmdW5jdGlvbnMgYXJlIHByZWZlcnJlZDog
JworICAgICAgICAgICAgICdURVNUX0YgaGFzICVkIG5vbi1jb21tZW50IGxpbmVzICcKKyAgICAg
ICAgICAgICAnKGVycm9yIHRyaWdnZXJlZCBieSBleGNlZWRpbmcgJWQgbGluZXMpLicKKyAgICAg
ICAgICAgICAnICBbcmVhZGFiaWxpdHkvZm5fc2l6ZV0gWyVkXScpCisgICAgICAgICAgICAlIChl
cnJvcl9saW5lcywgdHJpZ2dlcl9sZXZlbCwgZXJyb3JfbGV2ZWwpKQorCisgICAgZGVmIHRlc3Rf
ZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25fc2V2ZXJpdHkxX3dpdGhfZW1iZWRkZWRf
bm9fbGludHMoc2VsZik6CisgICAgICAgIGVycm9yX2xldmVsID0gMQorICAgICAgICBlcnJvcl9s
aW5lcyA9IHNlbGYudHJpZ2dlcl9saW5lcyhlcnJvcl9sZXZlbCkgKyAxCisgICAgICAgIHRyaWdn
ZXJfbGV2ZWwgPSBzZWxmLnRyaWdnZXJfbGluZXMoY3BwX3N0eWxlLl92ZXJib3NlX2xldmVsKCkp
CisgICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aHNfY2hlY2soCisgICAgICAgICAg
ICAndm9pZCB0ZXN0KGludCB4KScgKyBzZWxmLmZ1bmN0aW9uX2JvZHlfd2l0aF9ub19saW50cyhl
cnJvcl9saW5lcyksCisgICAgICAgICAgICAoJ1NtYWxsIGFuZCBmb2N1c2VkIGZ1bmN0aW9ucyBh
cmUgcHJlZmVycmVkOiAnCisgICAgICAgICAgICAgJ3Rlc3QoKSBoYXMgJWQgbm9uLWNvbW1lbnQg
bGluZXMgJworICAgICAgICAgICAgICcoZXJyb3IgdHJpZ2dlcmVkIGJ5IGV4Y2VlZGluZyAlZCBs
aW5lcykuJworICAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9mbl9zaXplXSBbJWRdJykKKyAg
ICAgICAgICAgICUgKGVycm9yX2xpbmVzLCB0cmlnZ2VyX2xldmVsLCBlcnJvcl9sZXZlbCkpCisK
KyAgICBkZWYgdGVzdF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9zZXZlcml0eTFf
d2l0aF9ub19saW50KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhz
X2NoZWNrKAorICAgICAgICAgICAgKCd2b2lkIHRlc3QoaW50IHgpJyArIHNlbGYuZnVuY3Rpb25f
Ym9keShzZWxmLnRyaWdnZXJfbGluZXMoMSkpCisgICAgICAgICAgICAgKyAnICAvLyBOT0xJTlQg
LS0gbG9uZyBmdW5jdGlvbicpLAorICAgICAgICAgICAgJycpCisKKyAgICBkZWYgdGVzdF9mdW5j
dGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9iZWxvd19zZXZlcml0eTIoc2VsZik6CisgICAg
ICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19iZWxvd19lcnJvcl9sZXZlbCgy
KQorCisgICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25fc2V2ZXJp
dHkyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfYXRf
ZXJyb3JfbGV2ZWwoMikKKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19kZWZp
bml0aW9uX2Fib3ZlX3NldmVyaXR5MihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rp
b25fbGVuZ3RoX2NoZWNrX2Fib3ZlX2Vycm9yX2xldmVsKDIpCisKKyAgICBkZWYgdGVzdF9mdW5j
dGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9iZWxvd19zZXZlcml0eTMoc2VsZik6CisgICAg
ICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19iZWxvd19lcnJvcl9sZXZlbCgz
KQorCisgICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25fc2V2ZXJp
dHkzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfYXRf
ZXJyb3JfbGV2ZWwoMykKKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19kZWZp
bml0aW9uX2Fib3ZlX3NldmVyaXR5MyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rp
b25fbGVuZ3RoX2NoZWNrX2Fib3ZlX2Vycm9yX2xldmVsKDMpCisKKyAgICBkZWYgdGVzdF9mdW5j
dGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9iZWxvd19zZXZlcml0eTQoc2VsZik6CisgICAg
ICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19iZWxvd19lcnJvcl9sZXZlbCg0
KQorCisgICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25fc2V2ZXJp
dHk0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfYXRf
ZXJyb3JfbGV2ZWwoNCkKKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19kZWZp
bml0aW9uX2Fib3ZlX3NldmVyaXR5NChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rp
b25fbGVuZ3RoX2NoZWNrX2Fib3ZlX2Vycm9yX2xldmVsKDQpCisKKyAgICBkZWYgdGVzdF9mdW5j
dGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9iZWxvd19zZXZlcml0eTUoc2VsZik6CisgICAg
ICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19iZWxvd19lcnJvcl9sZXZlbCg1
KQorCisgICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25fYXRfc2V2
ZXJpdHk1KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tf
YXRfZXJyb3JfbGV2ZWwoNSkKKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19k
ZWZpbml0aW9uX2Fib3ZlX3NldmVyaXR5NShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfZnVu
Y3Rpb25fbGVuZ3RoX2NoZWNrX2Fib3ZlX2Vycm9yX2xldmVsKDUpCisKKyAgICBkZWYgdGVzdF9m
dW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9odWdlX2xpbmVzKHNlbGYpOgorICAgICAg
ICAjIDUgaXMgdGhlIGxpbWl0CisgICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aF9j
aGVja19kZWZpbml0aW9uKHNlbGYudHJpZ2dlcl9saW5lcygxMCksIDUpCisKKyAgICBkZWYgdGVz
dF9mdW5jdGlvbl9sZW5ndGhfbm90X2RldGVybWluYWJsZShzZWxmKToKKyAgICAgICAgIyBNYWNy
byBpbnZvY2F0aW9uIHdpdGhvdXQgdGVybWluYXRpbmcgc2VtaWNvbG9uLgorICAgICAgICBzZWxm
LmFzc2VydF9mdW5jdGlvbl9sZW5ndGhzX2NoZWNrKAorICAgICAgICAgICAgJ01BQ1JPKGFyZykn
LAorICAgICAgICAgICAgJycpCisKKyAgICAgICAgIyBNYWNybyB3aXRoIHVuZGVyc2NvcmVzCisg
ICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aHNfY2hlY2soCisgICAgICAgICAgICAn
TUFDUk9fV0lUSF9VTkRFUlNDT1JFUyhhcmcxLCBhcmcyLCBhcmczKScsCisgICAgICAgICAgICAn
JykKKworICAgICAgICBzZWxmLmFzc2VydF9mdW5jdGlvbl9sZW5ndGhzX2NoZWNrKAorICAgICAg
ICAgICAgJ05vbk1hY3JvKGFyZyknLAorICAgICAgICAgICAgJ0xpbnQgZmFpbGVkIHRvIGZpbmQg
c3RhcnQgb2YgZnVuY3Rpb24gYm9keS4nCisgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvZm5f
c2l6ZV0gWzVdJykKKworCitjbGFzcyBOb05vblZpcnR1YWxEZXN0cnVjdG9yc1Rlc3QoQ3BwU3R5
bGVUZXN0QmFzZSk6CisKKyAgICBkZWYgdGVzdF9ub19lcnJvcihzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAgJycnY2xhc3MgRm9vIHsKKyAg
ICAgICAgICAgICAgICAgICB2aXJ0dWFsIH5Gb28oKTsKKyAgICAgICAgICAgICAgICAgICB2aXJ0
dWFsIHZvaWQgZm9vKCk7CisgICAgICAgICAgICAgICB9OycnJywKKyAgICAgICAgICAgICcnKQor
CisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICcnJ2Ns
YXNzIEZvbyB7CisgICAgICAgICAgICAgICAgICAgdmlydHVhbCBpbmxpbmUgfkZvbygpOworICAg
ICAgICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBmb28oKTsKKyAgICAgICAgICAgICAgIH07Jycn
LAorICAgICAgICAgICAgJycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50
KAorICAgICAgICAgICAgJycnY2xhc3MgRm9vIHsKKyAgICAgICAgICAgICAgICAgICBpbmxpbmUg
dmlydHVhbCB+Rm9vKCk7CisgICAgICAgICAgICAgICAgICAgdmlydHVhbCB2b2lkIGZvbygpOwor
ICAgICAgICAgICAgICAgfTsnJycsCisgICAgICAgICAgICAnJykKKworICAgICAgICBzZWxmLmFz
c2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnJydjbGFzcyBGb286OkdvbyB7Cisg
ICAgICAgICAgICAgICAgICAgdmlydHVhbCB+R29vKCk7CisgICAgICAgICAgICAgICAgICAgdmly
dHVhbCB2b2lkIGdvbygpOworICAgICAgICAgICAgICAgfTsnJycsCisgICAgICAgICAgICAnJykK
KyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAgJ2NsYXNz
IEZvbyB7IHZvaWQgZm9vKCk7IH07JywKKyAgICAgICAgICAgICdNb3JlIHRoYW4gb25lIGNvbW1h
bmQgb24gdGhlIHNhbWUgbGluZSAgW3doaXRlc3BhY2UvbmV3bGluZV0gWzRdJykKKworICAgICAg
ICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnJydjbGFzcyBRdWFs
aWZpZWQ6OkdvbyA6IHB1YmxpYyBGb28geworICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgdm9p
ZCBnb28oKTsKKyAgICAgICAgICAgICAgIH07JycnLAorICAgICAgICAgICAgJycpCisKKyAgICAg
ICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAgIyBMaW5lLWVuZGlu
ZyA6CisgICAgICAgICAgICAnJydjbGFzcyBHb28gOgorICAgICAgICAgICAgICAgcHVibGljIEZv
byB7CisgICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBnb28oKTsKKyAgICAgICAgICAg
ICAgIH07JycnLAorICAgICAgICAgICAgJ0xhYmVscyBzaG91bGQgYWx3YXlzIGJlIGluZGVudGVk
IGF0IGxlYXN0IG9uZSBzcGFjZS4gIElmIHRoaXMgaXMgYSAnCisgICAgICAgICAgICAnbWVtYmVy
LWluaXRpYWxpemVyIGxpc3QgaW4gYSBjb25zdHJ1Y3RvciwgdGhlIGNvbG9uIHNob3VsZCBiZSBv
biB0aGUgJworICAgICAgICAgICAgJ2xpbmUgYWZ0ZXIgdGhlIGRlZmluaXRpb24gaGVhZGVyLiAg
W3doaXRlc3BhY2UvbGFiZWxzXSBbNF0nKQorCisgICAgZGVmIHRlc3Rfbm9fZGVzdHJ1Y3Rvcl93
aGVuX3ZpcnR1YWxfbmVlZGVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5l
X2xpbnRfcmUoCisgICAgICAgICAgICAnJydjbGFzcyBGb28geworICAgICAgICAgICAgICAgICAg
IHZpcnR1YWwgdm9pZCBmb28oKTsKKyAgICAgICAgICAgICAgIH07JycnLAorICAgICAgICAgICAg
J1RoZSBjbGFzcyBGb28gcHJvYmFibHkgbmVlZHMgYSB2aXJ0dWFsIGRlc3RydWN0b3InKQorCisg
ICAgZGVmIHRlc3RfZGVzdHJ1Y3Rvcl9ub25fdmlydHVhbF93aGVuX3ZpcnR1YWxfbmVlZGVkKHNl
bGYpOgorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnRfcmUoCisgICAgICAgICAg
ICAnJydjbGFzcyBGb28geworICAgICAgICAgICAgICAgICAgIH5Gb28oKTsKKyAgICAgICAgICAg
ICAgICAgICB2aXJ0dWFsIHZvaWQgZm9vKCk7CisgICAgICAgICAgICAgICB9OycnJywKKyAgICAg
ICAgICAgICdUaGUgY2xhc3MgRm9vIHByb2JhYmx5IG5lZWRzIGEgdmlydHVhbCBkZXN0cnVjdG9y
JykKKworICAgIGRlZiB0ZXN0X25vX3dhcm5fd2hlbl9kZXJpdmVkKHNlbGYpOgorICAgICAgICBz
ZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnJydjbGFzcyBGb28gOiBw
dWJsaWMgR29vIHsKKyAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZm9vKCk7CisgICAg
ICAgICAgICAgICB9OycnJywKKyAgICAgICAgICAgICcnKQorCisgICAgZGVmIHRlc3RfaW50ZXJu
YWxfYnJhY2VzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnRfcmUo
CisgICAgICAgICAgICAnJydjbGFzcyBGb28geworICAgICAgICAgICAgICAgICAgIGVudW0gR29v
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgR09PCisgICAgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZm9vKCk7CisgICAgICAgICAgICAgICB9Oycn
JywKKyAgICAgICAgICAgICdUaGUgY2xhc3MgRm9vIHByb2JhYmx5IG5lZWRzIGEgdmlydHVhbCBk
ZXN0cnVjdG9yJykKKworICAgIGRlZiB0ZXN0X2lubmVyX2NsYXNzX25lZWRzX3ZpcnR1YWxfZGVz
dHJ1Y3RvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50X3JlKAor
ICAgICAgICAgICAgJycnY2xhc3MgRm9vIHsKKyAgICAgICAgICAgICAgICAgICBjbGFzcyBHb28g
eworICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZ29vKCk7CisgICAgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgIH07JycnLAorICAgICAgICAgICAgJ1RoZSBjbGFz
cyBHb28gcHJvYmFibHkgbmVlZHMgYSB2aXJ0dWFsIGRlc3RydWN0b3InKQorCisgICAgZGVmIHRl
c3Rfb3V0ZXJfY2xhc3NfbmVlZHNfdmlydHVhbF9kZXN0cnVjdG9yKHNlbGYpOgorICAgICAgICBz
ZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnRfcmUoCisgICAgICAgICAgICAnJydjbGFzcyBGb28g
eworICAgICAgICAgICAgICAgICAgIGNsYXNzIEdvbyB7CisgICAgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZm9vKCk7CisgICAgICAgICAgICAgICB9
OycnJywKKyAgICAgICAgICAgICdUaGUgY2xhc3MgRm9vIHByb2JhYmx5IG5lZWRzIGEgdmlydHVh
bCBkZXN0cnVjdG9yJykKKworICAgIGRlZiB0ZXN0X3F1YWxpZmllZF9jbGFzc19uZWVkc192aXJ0
dWFsX2Rlc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGlu
dF9yZSgKKyAgICAgICAgICAgICcnJ2NsYXNzIFF1YWxpZmllZDo6Rm9vIHsKKyAgICAgICAgICAg
ICAgICAgICB2aXJ0dWFsIHZvaWQgZm9vKCk7CisgICAgICAgICAgICAgICB9OycnJywKKyAgICAg
ICAgICAgICdUaGUgY2xhc3MgUXVhbGlmaWVkOjpGb28gcHJvYmFibHkgbmVlZHMgYSB2aXJ0dWFs
IGRlc3RydWN0b3InKQorCisgICAgZGVmIHRlc3RfbXVsdGlfbGluZV9kZWNsYXJhdGlvbl9ub19l
cnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50X3JlKAorICAg
ICAgICAgICAgJycnY2xhc3MgRm9vCisgICAgICAgICAgICAgICAgICAgOiBwdWJsaWMgR29vIHsK
KyAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZm9vKCk7CisgICAgICAgICAgICAgICB9
OycnJywKKyAgICAgICAgICAgICcnKQorCisgICAgZGVmIHRlc3RfbXVsdGlfbGluZV9kZWNsYXJh
dGlvbl93aXRoX2Vycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xp
bnQoCisgICAgICAgICAgICAnJydjbGFzcyBGb28KKyAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZm9vKCk7CisgICAgICAgICAgICAgICB9OycnJywKKyAg
ICAgICAgICAgIFsnVGhpcyB7IHNob3VsZCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBs
aW5lICAnCisgICAgICAgICAgICAgJ1t3aGl0ZXNwYWNlL2JyYWNlc10gWzRdJywKKyAgICAgICAg
ICAgICAnVGhlIGNsYXNzIEZvbyBwcm9iYWJseSBuZWVkcyBhIHZpcnR1YWwgZGVzdHJ1Y3RvciBk
dWUgdG8gaGF2aW5nICcKKyAgICAgICAgICAgICAndmlydHVhbCBtZXRob2QocyksIG9uZSBkZWNs
YXJlZCBhdCBsaW5lIDIuICBbcnVudGltZS92aXJ0dWFsXSBbNF0nXSkKKworCitjbGFzcyBDcHBT
dHlsZVN0YXRlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZXJyb3JfY291
bnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDAsIGNwcF9zdHlsZS5lcnJvcl9j
b3VudCgpKQorICAgICAgICBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS5pbmNyZW1lbnRfZXJy
b3JfY291bnQoKQorICAgICAgICBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS5pbmNyZW1lbnRf
ZXJyb3JfY291bnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygyLCBjcHBfc3R5bGUuZXJy
b3JfY291bnQoKSkKKyAgICAgICAgY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUucmVzZXRfZXJy
b3JfY291bnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygwLCBjcHBfc3R5bGUuZXJyb3Jf
Y291bnQoKSkKKworCitjbGFzcyBXZWJLaXRTdHlsZVRlc3QoQ3BwU3R5bGVUZXN0QmFzZSk6CisK
KyAgICAjIGZvciBodHRwOi8vd2Via2l0Lm9yZy9jb2RpbmcvY29kaW5nLXN0eWxlLmh0bWwKKyAg
ICBkZWYgdGVzdF9pbmRlbnRhdGlvbihzZWxmKToKKyAgICAgICAgIyAxLiBVc2Ugc3BhY2VzLCBu
b3QgdGFicy4gVGFicyBzaG91bGQgb25seSBhcHBlYXIgaW4gZmlsZXMgdGhhdAorICAgICAgICAj
ICAgIHJlcXVpcmUgdGhlbSBmb3Igc2VtYW50aWMgbWVhbmluZywgbGlrZSBNYWtlZmlsZXMuCisg
ICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICdjbGFzcyBG
b28ge1xuJworICAgICAgICAgICAgJyAgICBpbnQgZ29vO1xuJworICAgICAgICAgICAgJ307JywK
KyAgICAgICAgICAgICcnKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisg
ICAgICAgICAgICAnY2xhc3MgRm9vIHtcbicKKyAgICAgICAgICAgICdcdGludCBnb287XG4nCisg
ICAgICAgICAgICAnfTsnLAorICAgICAgICAgICAgJ1RhYiBmb3VuZDsgYmV0dGVyIHRvIHVzZSBz
cGFjZXMgIFt3aGl0ZXNwYWNlL3RhYl0gWzFdJykKKworICAgICAgICAjIDIuIFRoZSBpbmRlbnQg
c2l6ZSBpcyA0IHNwYWNlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAor
ICAgICAgICAgICAgJ2NsYXNzIEZvbyB7XG4nCisgICAgICAgICAgICAnICAgIGludCBnb287XG4n
CisgICAgICAgICAgICAnfTsnLAorICAgICAgICAgICAgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0
X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICdjbGFzcyBGb28ge1xuJworICAgICAgICAg
ICAgJyAgIGludCBnb287XG4nCisgICAgICAgICAgICAnfTsnLAorICAgICAgICAgICAgJ1dlaXJk
IG51bWJlciBvZiBzcGFjZXMgYXQgbGluZS1zdGFydC4gIEFyZSB5b3UgdXNpbmcgYSA0LXNwYWNl
IGluZGVudD8gIFt3aGl0ZXNwYWNlL2luZGVudF0gWzNdJykKKyAgICAgICAgIyBGSVhNRTogTm8g
dGVzdHMgZm9yIDgtc3BhY2VzLgorCisgICAgICAgICMgMy4gSW4gYSBoZWFkZXIsIGNvZGUgaW5z
aWRlIGEgbmFtZXNwYWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuCisgICAgICAgIHNlbGYuYXNz
ZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICduYW1lc3BhY2UgV2ViQ29yZSB7XG5c
bicKKyAgICAgICAgICAgICdjbGFzcyBEb2N1bWVudCB7XG4nCisgICAgICAgICAgICAnICAgIGlu
dCBteVZhcmlhYmxlO1xuJworICAgICAgICAgICAgJ307XG4nCisgICAgICAgICAgICAnfScsCisg
ICAgICAgICAgICAnJywKKyAgICAgICAgICAgICdmb28uaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0
X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICduYW1lc3BhY2UgT3V0ZXJOYW1lc3BhY2Ug
e1xuJworICAgICAgICAgICAgJyAgICBuYW1lc3BhY2UgSW5uZXJOYW1lc3BhY2Uge1xuJworICAg
ICAgICAgICAgJyAgICBjbGFzcyBEb2N1bWVudCB7XG4nCisgICAgICAgICAgICAnfTtcbicKKyAg
ICAgICAgICAgICd9O1xuJworICAgICAgICAgICAgJ30nLAorICAgICAgICAgICAgJ0NvZGUgaW5z
aWRlIGEgbmFtZXNwYWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuICBbd2hpdGVzcGFjZS9pbmRl
bnRdIFs0XScsCisgICAgICAgICAgICAnZm9vLmgnKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0
aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnbmFtZXNwYWNlIE91dGVyTmFtZXNwYWNlIHtcbicK
KyAgICAgICAgICAgICcgICAgY2xhc3MgRG9jdW1lbnQge1xuJworICAgICAgICAgICAgJyAgICBu
YW1lc3BhY2UgSW5uZXJOYW1lc3BhY2Uge1xuJworICAgICAgICAgICAgJ307XG4nCisgICAgICAg
ICAgICAnfTtcbicKKyAgICAgICAgICAgICd9JywKKyAgICAgICAgICAgICdDb2RlIGluc2lkZSBh
IG5hbWVzcGFjZSBzaG91bGQgbm90IGJlIGluZGVudGVkLiAgW3doaXRlc3BhY2UvaW5kZW50XSBb
NF0nLAorICAgICAgICAgICAgJ2Zvby5oJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGlu
ZV9saW50KAorICAgICAgICAgICAgJ25hbWVzcGFjZSBXZWJDb3JlIHtcbicKKyAgICAgICAgICAg
ICcjaWYgMFxuJworICAgICAgICAgICAgJyAgICBjbGFzcyBEb2N1bWVudCB7XG4nCisgICAgICAg
ICAgICAnfTtcbicKKyAgICAgICAgICAgICcjZW5kaWZcbicKKyAgICAgICAgICAgICd9JywKKyAg
ICAgICAgICAgICdDb2RlIGluc2lkZSBhIG5hbWVzcGFjZSBzaG91bGQgbm90IGJlIGluZGVudGVk
LiAgW3doaXRlc3BhY2UvaW5kZW50XSBbNF0nLAorICAgICAgICAgICAgJ2Zvby5oJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAgJ25hbWVzcGFjZSBX
ZWJDb3JlIHtcbicKKyAgICAgICAgICAgICdjbGFzcyBEb2N1bWVudCB7XG4nCisgICAgICAgICAg
ICAnfTtcbicKKyAgICAgICAgICAgICd9JywKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAg
J2Zvby5oJykKKworICAgICAgICAjIDQuIEluIGFuIGltcGxlbWVudGF0aW9uIGZpbGUgKGZpbGVz
IHdpdGggdGhlIGV4dGVuc2lvbiAuY3BwLCAuYworICAgICAgICAjICAgIG9yIC5tbSksIGNvZGUg
aW5zaWRlIGEgbmFtZXNwYWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuCisgICAgICAgIHNlbGYu
YXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICduYW1lc3BhY2UgV2ViQ29yZSB7
XG5cbicKKyAgICAgICAgICAgICdEb2N1bWVudDo6Rm9vKClcbicKKyAgICAgICAgICAgICcgICAg
OiBmb28oYmFyKVxuJworICAgICAgICAgICAgJyAgICAsIGJvbyhmYXIpXG4nCisgICAgICAgICAg
ICAne1xuJworICAgICAgICAgICAgJyAgICBzdHVmZigpO1xuJworICAgICAgICAgICAgJ30nLAor
ICAgICAgICAgICAgJycsCisgICAgICAgICAgICAnZm9vLmNwcCcpCisgICAgICAgIHNlbGYuYXNz
ZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICduYW1lc3BhY2UgT3V0ZXJOYW1lc3Bh
Y2Uge1xuJworICAgICAgICAgICAgJ25hbWVzcGFjZSBJbm5lck5hbWVzcGFjZSB7XG4nCisgICAg
ICAgICAgICAnRG9jdW1lbnQ6OkZvbygpIHsgfVxuJworICAgICAgICAgICAgJyAgICB2b2lkKiBw
O1xuJworICAgICAgICAgICAgJ31cbicKKyAgICAgICAgICAgICd9XG4nLAorICAgICAgICAgICAg
J0NvZGUgaW5zaWRlIGEgbmFtZXNwYWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuICBbd2hpdGVz
cGFjZS9pbmRlbnRdIFs0XScsCisgICAgICAgICAgICAnZm9vLmNwcCcpCisgICAgICAgIHNlbGYu
YXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICduYW1lc3BhY2UgT3V0ZXJOYW1l
c3BhY2Uge1xuJworICAgICAgICAgICAgJ25hbWVzcGFjZSBJbm5lck5hbWVzcGFjZSB7XG4nCisg
ICAgICAgICAgICAnRG9jdW1lbnQ6OkZvbygpIHsgfVxuJworICAgICAgICAgICAgJ31cbicKKyAg
ICAgICAgICAgICcgICAgdm9pZCogcDtcbicKKyAgICAgICAgICAgICd9XG4nLAorICAgICAgICAg
ICAgJ0NvZGUgaW5zaWRlIGEgbmFtZXNwYWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuICBbd2hp
dGVzcGFjZS9pbmRlbnRdIFs0XScsCisgICAgICAgICAgICAnZm9vLmNwcCcpCisgICAgICAgIHNl
bGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICduYW1lc3BhY2UgV2ViQ29y
ZSB7XG5cbicKKyAgICAgICAgICAgICcgICAgY29uc3QgY2hhciogZm9vID0gInN0YXJ0OjsiXG4n
CisgICAgICAgICAgICAnICAgICAgICAiZGZzZnNmcyI7XG4nCisgICAgICAgICAgICAnfVxuJywK
KyAgICAgICAgICAgICdDb2RlIGluc2lkZSBhIG5hbWVzcGFjZSBzaG91bGQgbm90IGJlIGluZGVu
dGVkLiAgW3doaXRlc3BhY2UvaW5kZW50XSBbNF0nLAorICAgICAgICAgICAgJ2Zvby5jcHAnKQor
ICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnbmFtZXNw
YWNlIFdlYkNvcmUge1xuXG4nCisgICAgICAgICAgICAnY29uc3QgY2hhciogZm9vKHZvaWQqIGEg
PSAiOyIsIC8vIDtcbicKKyAgICAgICAgICAgICcgICAgdm9pZCogYik7XG4nCisgICAgICAgICAg
ICAnICAgIHZvaWQqIHA7XG4nCisgICAgICAgICAgICAnfVxuJywKKyAgICAgICAgICAgICdDb2Rl
IGluc2lkZSBhIG5hbWVzcGFjZSBzaG91bGQgbm90IGJlIGluZGVudGVkLiAgW3doaXRlc3BhY2Uv
aW5kZW50XSBbNF0nLAorICAgICAgICAgICAgJ2Zvby5jcHAnKQorICAgICAgICBzZWxmLmFzc2Vy
dF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnbmFtZXNwYWNlIFdlYkNvcmUge1xuXG4n
CisgICAgICAgICAgICAnY29uc3QgY2hhciogZm9vW10gPSB7XG4nCisgICAgICAgICAgICAnICAg
ICJ2b2lkKiBiKTsiLCAvLyA7XG4nCisgICAgICAgICAgICAnICAgICJhc2ZkZiIsXG4nCisgICAg
ICAgICAgICAnICAgIH1cbicKKyAgICAgICAgICAgICcgICAgdm9pZCogcDtcbicKKyAgICAgICAg
ICAgICd9XG4nLAorICAgICAgICAgICAgJ0NvZGUgaW5zaWRlIGEgbmFtZXNwYWNlIHNob3VsZCBu
b3QgYmUgaW5kZW50ZWQuICBbd2hpdGVzcGFjZS9pbmRlbnRdIFs0XScsCisgICAgICAgICAgICAn
Zm9vLmNwcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAg
ICAgICduYW1lc3BhY2UgV2ViQ29yZSB7XG5cbicKKyAgICAgICAgICAgICdjb25zdCBjaGFyKiBm
b29bXSA9IHtcbicKKyAgICAgICAgICAgICcgICAgInZvaWQqIGIpOyIsIC8vIH1cbicKKyAgICAg
ICAgICAgICcgICAgImFzZmRmIixcbicKKyAgICAgICAgICAgICcgICAgfVxuJworICAgICAgICAg
ICAgJ31cbicsCisgICAgICAgICAgICAnJywKKyAgICAgICAgICAgICdmb28uY3BwJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAgJyAgICBuYW1lc3Bh
Y2UgV2ViQ29yZSB7XG5cbicKKyAgICAgICAgICAgICcgICAgdm9pZCBEb2N1bWVudDo6Rm9vKClc
bicKKyAgICAgICAgICAgICcgICAge1xuJworICAgICAgICAgICAgJ3N0YXJ0OiAvLyBpbmZpbml0
ZSBsb29wcyBhcmUgZnVuIVxuJworICAgICAgICAgICAgJyAgICAgICAgZ290byBzdGFydDtcbicK
KyAgICAgICAgICAgICcgICAgfScsCisgICAgICAgICAgICAnbmFtZXNwYWNlIHNob3VsZCBuZXZl
ciBiZSBpbmRlbnRlZC4gIFt3aGl0ZXNwYWNlL2luZGVudF0gWzRdJywKKyAgICAgICAgICAgICdm
b28uY3BwJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAg
ICAgJ25hbWVzcGFjZSBXZWJDb3JlIHtcbicKKyAgICAgICAgICAgICcgICAgRG9jdW1lbnQ6OkZv
bygpIHsgfVxuJworICAgICAgICAgICAgJ30nLAorICAgICAgICAgICAgJ0NvZGUgaW5zaWRlIGEg
bmFtZXNwYWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuJworICAgICAgICAgICAgJyAgW3doaXRl
c3BhY2UvaW5kZW50XSBbNF0nLAorICAgICAgICAgICAgJ2Zvby5jcHAnKQorICAgICAgICBzZWxm
LmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnbmFtZXNwYWNlIFdlYkNvcmUg
e1xuJworICAgICAgICAgICAgJyNkZWZpbmUgYWJjKHgpIHg7IFxcXG4nCisgICAgICAgICAgICAn
ICAgIHhcbicKKyAgICAgICAgICAgICd9JywKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAg
J2Zvby5jcHAnKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAg
ICAgICAnbmFtZXNwYWNlIFdlYkNvcmUge1xuJworICAgICAgICAgICAgJyNkZWZpbmUgYWJjKHgp
IHg7IFxcXG4nCisgICAgICAgICAgICAnICAgIHhcbicKKyAgICAgICAgICAgICcgICAgdm9pZCog
eDsnCisgICAgICAgICAgICAnfScsCisgICAgICAgICAgICAnQ29kZSBpbnNpZGUgYSBuYW1lc3Bh
Y2Ugc2hvdWxkIG5vdCBiZSBpbmRlbnRlZC4gIFt3aGl0ZXNwYWNlL2luZGVudF0gWzRdJywKKyAg
ICAgICAgICAgICdmb28uY3BwJykKKworICAgICAgICAjIDUuIEEgY2FzZSBsYWJlbCBzaG91bGQg
bGluZSB1cCB3aXRoIGl0cyBzd2l0Y2ggc3RhdGVtZW50LiBUaGUKKyAgICAgICAgIyAgICBjYXNl
IHN0YXRlbWVudCBpcyBpbmRlbnRlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9s
aW50KAorICAgICAgICAgICAgJyAgICBzd2l0Y2ggKGNvbmRpdGlvbikge1xuJworICAgICAgICAg
ICAgJyAgICBjYXNlIGZvb0NvbmRpdGlvbjpcbicKKyAgICAgICAgICAgICcgICAgY2FzZSBiYXJD
b25kaXRpb246XG4nCisgICAgICAgICAgICAnICAgICAgICBpKys7XG4nCisgICAgICAgICAgICAn
ICAgICAgICBicmVhaztcbicKKyAgICAgICAgICAgICcgICAgZGVmYXVsdDpcbicKKyAgICAgICAg
ICAgICcgICAgICAgIGktLTtcbicKKyAgICAgICAgICAgICcgICAgfVxuJywKKyAgICAgICAgICAg
ICcnKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAn
ICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7XG4nCisgICAgICAgICAgICAnICAgIGNhc2UgZm9vQ29u
ZGl0aW9uOlxuJworICAgICAgICAgICAgJyAgICAgICAgc3dpdGNoIChvdGhlckNvbmRpdGlvbikg
e1xuJworICAgICAgICAgICAgJyAgICAgICAgZGVmYXVsdDpcbicKKyAgICAgICAgICAgICcgICAg
ICAgICAgICByZXR1cm47XG4nCisgICAgICAgICAgICAnICAgICAgICB9XG4nCisgICAgICAgICAg
ICAnICAgIGRlZmF1bHQ6XG4nCisgICAgICAgICAgICAnICAgICAgICBpLS07XG4nCisgICAgICAg
ICAgICAnICAgIH1cbicsCisgICAgICAgICAgICAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbXVs
dGlfbGluZV9saW50KAorICAgICAgICAgICAgJyAgICBzd2l0Y2ggKGNvbmRpdGlvbikge1xuJwor
ICAgICAgICAgICAgJyAgICBjYXNlIGZvb0NvbmRpdGlvbjogYnJlYWs7XG4nCisgICAgICAgICAg
ICAnICAgIGRlZmF1bHQ6IHJldHVybjtcbicKKyAgICAgICAgICAgICcgICAgfVxuJywKKyAgICAg
ICAgICAgICcnKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAg
ICAgICAnICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7XG4nCisgICAgICAgICAgICAnICAgICAgICBj
YXNlIGZvb0NvbmRpdGlvbjpcbicKKyAgICAgICAgICAgICcgICAgICAgIGNhc2UgYmFyQ29uZGl0
aW9uOlxuJworICAgICAgICAgICAgJyAgICAgICAgICAgIGkrKztcbicKKyAgICAgICAgICAgICcg
ICAgICAgICAgICBicmVhaztcbicKKyAgICAgICAgICAgICcgICAgICAgIGRlZmF1bHQ6XG4nCisg
ICAgICAgICAgICAnICAgICAgICAgICAgaS0tO1xuJworICAgICAgICAgICAgJyAgICB9XG4nLAor
ICAgICAgICAgICAgJ0EgY2FzZSBsYWJlbCBzaG91bGQgbm90IGJlIGluZGVudGVkLCBidXQgbGlu
ZSB1cCB3aXRoIGl0cyBzd2l0Y2ggc3RhdGVtZW50LicKKyAgICAgICAgICAgICcgIFt3aGl0ZXNw
YWNlL2luZGVudF0gWzRdJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAor
ICAgICAgICAgICAgJyAgICBzd2l0Y2ggKGNvbmRpdGlvbikge1xuJworICAgICAgICAgICAgJyAg
ICAgICAgY2FzZSBmb29Db25kaXRpb246XG4nCisgICAgICAgICAgICAnICAgICAgICAgICAgYnJl
YWs7XG4nCisgICAgICAgICAgICAnICAgIGRlZmF1bHQ6XG4nCisgICAgICAgICAgICAnICAgICAg
ICAgICAgaS0tO1xuJworICAgICAgICAgICAgJyAgICB9XG4nLAorICAgICAgICAgICAgJ0EgY2Fz
ZSBsYWJlbCBzaG91bGQgbm90IGJlIGluZGVudGVkLCBidXQgbGluZSB1cCB3aXRoIGl0cyBzd2l0
Y2ggc3RhdGVtZW50LicKKyAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL2luZGVudF0gWzRdJykK
KyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAgJyAgICBz
d2l0Y2ggKGNvbmRpdGlvbikge1xuJworICAgICAgICAgICAgJyAgICBjYXNlIGZvb0NvbmRpdGlv
bjpcbicKKyAgICAgICAgICAgICcgICAgY2FzZSBiYXJDb25kaXRpb246XG4nCisgICAgICAgICAg
ICAnICAgICAgICBzd2l0Y2ggKG90aGVyQ29uZGl0aW9uKSB7XG4nCisgICAgICAgICAgICAnICAg
ICAgICAgICAgZGVmYXVsdDpcbicKKyAgICAgICAgICAgICcgICAgICAgICAgICByZXR1cm47XG4n
CisgICAgICAgICAgICAnICAgICAgICB9XG4nCisgICAgICAgICAgICAnICAgIGRlZmF1bHQ6XG4n
CisgICAgICAgICAgICAnICAgICAgICBpLS07XG4nCisgICAgICAgICAgICAnICAgIH1cbicsCisg
ICAgICAgICAgICAnQSBjYXNlIGxhYmVsIHNob3VsZCBub3QgYmUgaW5kZW50ZWQsIGJ1dCBsaW5l
IHVwIHdpdGggaXRzIHN3aXRjaCBzdGF0ZW1lbnQuJworICAgICAgICAgICAgJyAgW3doaXRlc3Bh
Y2UvaW5kZW50XSBbNF0nKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisg
ICAgICAgICAgICAnICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7XG4nCisgICAgICAgICAgICAnICAg
IGNhc2UgZm9vQ29uZGl0aW9uOlxuJworICAgICAgICAgICAgJyAgICBjYXNlIGJhckNvbmRpdGlv
bjpcbicKKyAgICAgICAgICAgICcgICAgaSsrO1xuJworICAgICAgICAgICAgJyAgICBicmVhaztc
blxuJworICAgICAgICAgICAgJyAgICBkZWZhdWx0OlxuJworICAgICAgICAgICAgJyAgICBpLS07
XG4nCisgICAgICAgICAgICAnICAgIH1cbicsCisgICAgICAgICAgICAnTm9uLWxhYmVsIGNvZGUg
aW5zaWRlIHN3aXRjaCBzdGF0ZW1lbnRzIHNob3VsZCBiZSBpbmRlbnRlZC4nCisgICAgICAgICAg
ICAnICBbd2hpdGVzcGFjZS9pbmRlbnRdIFs0XScpCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRp
X2xpbmVfbGludCgKKyAgICAgICAgICAgICcgICAgc3dpdGNoIChjb25kaXRpb24pIHtcbicKKyAg
ICAgICAgICAgICcgICAgY2FzZSBmb29Db25kaXRpb246XG4nCisgICAgICAgICAgICAnICAgIGNh
c2UgYmFyQ29uZGl0aW9uOlxuJworICAgICAgICAgICAgJyAgICAgICAgc3dpdGNoIChvdGhlckNv
bmRpdGlvbikge1xuJworICAgICAgICAgICAgJyAgICAgICAgZGVmYXVsdDpcbicKKyAgICAgICAg
ICAgICcgICAgICAgIHJldHVybjtcbicKKyAgICAgICAgICAgICcgICAgICAgIH1cbicKKyAgICAg
ICAgICAgICcgICAgZGVmYXVsdDpcbicKKyAgICAgICAgICAgICcgICAgICAgIGktLTtcbicKKyAg
ICAgICAgICAgICcgICAgfVxuJywKKyAgICAgICAgICAgICdOb24tbGFiZWwgY29kZSBpbnNpZGUg
c3dpdGNoIHN0YXRlbWVudHMgc2hvdWxkIGJlIGluZGVudGVkLicKKyAgICAgICAgICAgICcgIFt3
aGl0ZXNwYWNlL2luZGVudF0gWzRdJykKKworICAgICAgICAjIDYuIEJvb2xlYW4gZXhwcmVzc2lv
bnMgYXQgdGhlIHNhbWUgbmVzdGluZyBsZXZlbCB0aGF0IHNwYW4KKyAgICAgICAgIyAgIG11bHRp
cGxlIGxpbmVzIHNob3VsZCBoYXZlIHRoZWlyIG9wZXJhdG9ycyBvbiB0aGUgbGVmdCBzaWRlIG9m
CisgICAgICAgICMgICB0aGUgbGluZSBpbnN0ZWFkIG9mIHRoZSByaWdodCBzaWRlLgorICAgICAg
ICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnICAgIHJldHVybiBh
dHRyLT5uYW1lKCkgPT0gc3JjQXR0clxuJworICAgICAgICAgICAgJyAgICAgICAgfHwgYXR0ci0+
bmFtZSgpID09IGxvd3NyY0F0dHI7XG4nLAorICAgICAgICAgICAgJycpCisgICAgICAgIHNlbGYu
YXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICcgICAgcmV0dXJuIGF0dHItPm5h
bWUoKSA9PSBzcmNBdHRyIHx8XG4nCisgICAgICAgICAgICAnICAgICAgICBhdHRyLT5uYW1lKCkg
PT0gbG93c3JjQXR0cjtcbicsCisgICAgICAgICAgICAnQm9vbGVhbiBleHByZXNzaW9ucyB0aGF0
IHNwYW4gbXVsdGlwbGUgbGluZXMgc2hvdWxkIGhhdmUgdGhlaXIgJworICAgICAgICAgICAgJ29w
ZXJhdG9ycyBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBsaW5lIGluc3RlYWQgb2YgdGhlIHJpZ2h0
IHNpZGUuJworICAgICAgICAgICAgJyAgW3doaXRlc3BhY2Uvb3BlcmF0b3JzXSBbNF0nKQorCisg
ICAgZGVmIHRlc3Rfc3BhY2luZyhzZWxmKToKKyAgICAgICAgIyAxLiBEbyBub3QgcGxhY2Ugc3Bh
Y2VzIGFyb3VuZCB1bmFyeSBvcGVyYXRvcnMuCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xp
bmVfbGludCgKKyAgICAgICAgICAgICdpKys7JywKKyAgICAgICAgICAgICcnKQorICAgICAgICBz
ZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnaSArKzsnLAorICAgICAg
ICAgICAgJ0V4dHJhIHNwYWNlIGZvciBvcGVyYXRvciAgKys7ICBbd2hpdGVzcGFjZS9vcGVyYXRv
cnNdIFs0XScpCisKKyAgICAgICAgIyAyLiBEbyBwbGFjZSBzcGFjZXMgYXJvdW5kIGJpbmFyeSBh
bmQgdGVybmFyeSBvcGVyYXRvcnMuCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGlu
dCgKKyAgICAgICAgICAgICd5ID0gbSAqIHggKyBiOycsCisgICAgICAgICAgICAnJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAgJ2YoYSwgYik7JywK
KyAgICAgICAgICAgICcnKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisg
ICAgICAgICAgICAnYyA9IGEgfCBiOycsCisgICAgICAgICAgICAnJykKKyAgICAgICAgc2VsZi5h
c3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAgJ3JldHVybiBjb25kaXRpb24gPyAx
IDogMDsnLAorICAgICAgICAgICAgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVf
bGludCgKKyAgICAgICAgICAgICd5PW0qeCtiOycsCisgICAgICAgICAgICAnTWlzc2luZyBzcGFj
ZXMgYXJvdW5kID0gIFt3aGl0ZXNwYWNlL29wZXJhdG9yc10gWzRdJykKKyAgICAgICAgc2VsZi5h
c3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAgJ2YoYSxiKTsnLAorICAgICAgICAg
ICAgJ01pc3Npbmcgc3BhY2UgYWZ0ZXIgLCAgW3doaXRlc3BhY2UvY29tbWFdIFszXScpCisgICAg
ICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICdjID0gYXxiOycs
CisgICAgICAgICAgICAnTWlzc2luZyBzcGFjZXMgYXJvdW5kIHwgIFt3aGl0ZXNwYWNlL29wZXJh
dG9yc10gWzNdJykKKyAgICAgICAgIyBGSVhNRTogV2UgY2Fubm90IGNhdGNoIHRoaXMgbGludCBl
cnJvci4KKyAgICAgICAgIyBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICMg
ICAgICdyZXR1cm4gY29uZGl0aW9uID8gMTowOycsCisgICAgICAgICMgICAgICcnKQorCisgICAg
ICAgICMgMy4gUGxhY2Ugc3BhY2VzIGJldHdlZW4gY29udHJvbCBzdGF0ZW1lbnRzIGFuZCB0aGVp
ciBwYXJlbnRoZXNlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAorICAg
ICAgICAgICAgJyAgICBpZiAoY29uZGl0aW9uKVxuJworICAgICAgICAgICAgJyAgICAgICAgZG9J
dCgpO1xuJywKKyAgICAgICAgICAgICcnKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5l
X2xpbnQoCisgICAgICAgICAgICAnICAgIGlmKGNvbmRpdGlvbilcbicKKyAgICAgICAgICAgICcg
ICAgICAgIGRvSXQoKTtcbicsCisgICAgICAgICAgICAnTWlzc2luZyBzcGFjZSBiZWZvcmUgKCBp
biBpZiggIFt3aGl0ZXNwYWNlL3BhcmVuc10gWzVdJykKKworICAgICAgICAjIDQuIERvIG5vdCBw
bGFjZSBzcGFjZXMgYmV0d2VlbiBhIGZ1bmN0aW9uIGFuZCBpdHMgcGFyZW50aGVzZXMsCisgICAg
ICAgICMgICAgb3IgYmV0d2VlbiBhIHBhcmVudGhlc2lzIGFuZCBpdHMgY29udGVudC4KKyAgICAg
ICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAgJ2YoYSwgYik7JywK
KyAgICAgICAgICAgICcnKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisg
ICAgICAgICAgICAnZiAoYSwgYik7JywKKyAgICAgICAgICAgICdFeHRyYSBzcGFjZSBiZWZvcmUg
KCBpbiBmdW5jdGlvbiBjYWxsICBbd2hpdGVzcGFjZS9wYXJlbnNdIFs0XScpCisgICAgICAgIHNl
bGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICdmKCBhLCBiICk7JywKKyAg
ICAgICAgICAgIFsnRXh0cmEgc3BhY2UgYWZ0ZXIgKCBpbiBmdW5jdGlvbiBjYWxsICBbd2hpdGVz
cGFjZS9wYXJlbnNdIFs0XScsCisgICAgICAgICAgICAgJ0V4dHJhIHNwYWNlIGJlZm9yZSApICBb
d2hpdGVzcGFjZS9wYXJlbnNdIFsyXSddKQorCisgICAgZGVmIHRlc3RfbGluZV9icmVha2luZyhz
ZWxmKToKKyAgICAgICAgIyAxLiBFYWNoIHN0YXRlbWVudCBzaG91bGQgZ2V0IGl0cyBvd24gbGlu
ZS4KKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAgJyAg
ICB4Kys7XG4nCisgICAgICAgICAgICAnICAgIHkrKztcbicKKyAgICAgICAgICAgICcgICAgaWYg
KGNvbmRpdGlvbik7XG4nCisgICAgICAgICAgICAnICAgICAgICBkb0l0KCk7XG4nLAorICAgICAg
ICAgICAgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAg
ICAgICcgICAgeCsrOyB5Kys7JywKKyAgICAgICAgICAgICdNb3JlIHRoYW4gb25lIGNvbW1hbmQg
b24gdGhlIHNhbWUgbGluZSAgW3doaXRlc3BhY2UvbmV3bGluZV0gWzRdJykKKyAgICAgICAgIyBG
SVhNRTogTWFrZSB0aGlzIGZhaWwuCisgICAgICAgICMgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9s
aW50KAorICAgICAgICAjICAgICAnICAgIGlmIChjb25kaXRpb24pIGRvSXQoKTtcbicsCisgICAg
ICAgICMgICAgICcnKQorCisgICAgICAgICMgMi4gQW4gZWxzZSBzdGF0ZW1lbnQgc2hvdWxkIGdv
IG9uIHRoZSBzYW1lIGxpbmUgYXMgYSBwcmVjZWRpbmcKKyAgICAgICAgIyAgIGNsb3NlIGJyYWNl
IGlmIG9uZSBpcyBwcmVzZW50LCBlbHNlIGl0IHNob3VsZCBsaW5lIHVwIHdpdGggdGhlCisgICAg
ICAgICMgICBpZiBzdGF0ZW1lbnQuCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGlu
dCgKKyAgICAgICAgICAgICdpZiAoY29uZGl0aW9uKSB7XG4nCisgICAgICAgICAgICAnICAgIGRv
U29tZXRoaW5nKCk7XG4nCisgICAgICAgICAgICAnICAgIGRvU29tZXRoaW5nQWdhaW4oKTtcbicK
KyAgICAgICAgICAgICd9IGVsc2Uge1xuJworICAgICAgICAgICAgJyAgICBkb1NvbWV0aGluZ0Vs
c2UoKTtcbicKKyAgICAgICAgICAgICcgICAgZG9Tb21ldGhpbmdFbHNlQWdhaW4oKTtcbicKKyAg
ICAgICAgICAgICd9XG4nLAorICAgICAgICAgICAgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X211
bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICdpZiAoY29uZGl0aW9uKVxuJworICAgICAgICAg
ICAgJyAgICBkb1NvbWV0aGluZygpO1xuJworICAgICAgICAgICAgJ2Vsc2VcbicKKyAgICAgICAg
ICAgICcgICAgZG9Tb21ldGhpbmdFbHNlKCk7XG4nLAorICAgICAgICAgICAgJycpCisgICAgICAg
IHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICdpZiAoY29uZGl0aW9u
KVxuJworICAgICAgICAgICAgJyAgICBkb1NvbWV0aGluZygpO1xuJworICAgICAgICAgICAgJ2Vs
c2Uge1xuJworICAgICAgICAgICAgJyAgICBkb1NvbWV0aGluZ0Vsc2UoKTtcbicKKyAgICAgICAg
ICAgICcgICAgZG9Tb21ldGhpbmdFbHNlQWdhaW4oKTtcbicKKyAgICAgICAgICAgICd9XG4nLAor
ICAgICAgICAgICAgJycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAor
ICAgICAgICAgICAgJ2lmIChjb25kaXRpb24pIHtcbicKKyAgICAgICAgICAgICcgICAgZG9Tb21l
dGhpbmcoKTtcbicKKyAgICAgICAgICAgICcgICAgZG9Tb21ldGhpbmdBZ2FpbigpO1xuJworICAg
ICAgICAgICAgJ31cbicKKyAgICAgICAgICAgICdlbHNlIHtcbicKKyAgICAgICAgICAgICcgICAg
ZG9Tb21ldGhpbmdFbHNlKCk7XG4nCisgICAgICAgICAgICAnICAgIGRvU29tZXRoaW5nRWxzZUFn
YWluKCk7XG4nCisgICAgICAgICAgICAnfVxuJywKKyAgICAgICAgICAgICdBbiBlbHNlIHNob3Vs
ZCBhcHBlYXIgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgcHJlY2VkaW5nIH0gIFt3aGl0ZXNwYWNl
L25ld2xpbmVdIFs0XScpCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAg
ICAgICAgICAgICdpZiAoY29uZGl0aW9uKSBkb1NvbWV0aGluZygpOyBlbHNlIGRvU29tZXRoaW5n
RWxzZSgpO1xuJywKKyAgICAgICAgICAgIFsnTW9yZSB0aGFuIG9uZSBjb21tYW5kIG9uIHRoZSBz
YW1lIGxpbmUgIFt3aGl0ZXNwYWNlL25ld2xpbmVdIFs0XScsCisgICAgICAgICAgICAgJ0Vsc2Ug
Y2xhdXNlIHNob3VsZCBuZXZlciBiZSBvbiBzYW1lIGxpbmUgYXMgZWxzZSAodXNlIDIgbGluZXMp
ICBbd2hpdGVzcGFjZS9uZXdsaW5lXSBbNF0nXSkKKyAgICAgICAgIyBGSVhNRTogTWFrZSB0aGlz
IGZhaWwuCisgICAgICAgICMgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAj
ICAgICAnaWYgKGNvbmRpdGlvbikgZG9Tb21ldGhpbmcoKTsgZWxzZSB7XG4nCisgICAgICAgICMg
ICAgICcgICAgZG9Tb21ldGhpbmdFbHNlKCk7XG4nCisgICAgICAgICMgICAgICd9XG4nLAorICAg
ICAgICAjICAgICAnJykKKworICAgICAgICAjIDMuIEFuIGVsc2UgaWYgc3RhdGVtZW50IHNob3Vs
ZCBiZSB3cml0dGVuIGFzIGFuIGlmIHN0YXRlbWVudAorICAgICAgICAjICAgIHdoZW4gdGhlIHBy
aW9yIGlmIGNvbmNsdWRlcyB3aXRoIGEgcmV0dXJuIHN0YXRlbWVudC4KKyAgICAgICAgc2VsZi5h
c3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAgJ2lmIChtb3RpdmF0ZWQpIHtcbicK
KyAgICAgICAgICAgICcgICAgaWYgKGxpcXVpZClcbicKKyAgICAgICAgICAgICcgICAgICAgIHJl
dHVybiBtb25leTtcbicKKyAgICAgICAgICAgICd9IGVsc2UgaWYgKHRpcmVkKVxuJworICAgICAg
ICAgICAgJyAgICBicmVhaztcbicsCisgICAgICAgICAgICAnJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAgJ2lmIChjb25kaXRpb24pXG4nCisgICAg
ICAgICAgICAnICAgIGRvU29tZXRoaW5nKCk7XG4nCisgICAgICAgICAgICAnZWxzZSBpZiAob3Ro
ZXJDb25kaXRpb24pXG4nCisgICAgICAgICAgICAnICAgIGRvU29tZXRoaW5nRWxzZSgpO1xuJywK
KyAgICAgICAgICAgICcnKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisg
ICAgICAgICAgICAnaWYgKGNvbmRpdGlvbilcbicKKyAgICAgICAgICAgICcgICAgZG9Tb21ldGhp
bmcoKTtcbicKKyAgICAgICAgICAgICdlbHNlXG4nCisgICAgICAgICAgICAnICAgIGRvU29tZXRo
aW5nRWxzZSgpO1xuJywKKyAgICAgICAgICAgICcnKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0
aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnaWYgKGNvbmRpdGlvbilcbicKKyAgICAgICAgICAg
ICcgICAgcmV0dXJuVmFsdWUgPSBmb287XG4nCisgICAgICAgICAgICAnZWxzZSBpZiAob3RoZXJD
b25kaXRpb24pXG4nCisgICAgICAgICAgICAnICAgIHJldHVyblZhbHVlID0gYmFyO1xuJywKKyAg
ICAgICAgICAgICcnKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAg
ICAgICAgICAnaWYgKGNvbmRpdGlvbilcbicKKyAgICAgICAgICAgICcgICAgcmV0dXJuVmFsdWUg
PSBmb287XG4nCisgICAgICAgICAgICAnZWxzZVxuJworICAgICAgICAgICAgJyAgICByZXR1cm5W
YWx1ZSA9IGJhcjtcbicsCisgICAgICAgICAgICAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbXVs
dGlfbGluZV9saW50KAorICAgICAgICAgICAgJ2lmIChjb25kaXRpb24pXG4nCisgICAgICAgICAg
ICAnICAgIGRvU29tZXRoaW5nKCk7XG4nCisgICAgICAgICAgICAnZWxzZSBpZiAobGlxdWlkKVxu
JworICAgICAgICAgICAgJyAgICByZXR1cm4gbW9uZXk7XG4nCisgICAgICAgICAgICAnZWxzZSBp
ZiAoYnJva2UpXG4nCisgICAgICAgICAgICAnICAgIHJldHVybiBmYXZvcjtcbicKKyAgICAgICAg
ICAgICdlbHNlXG4nCisgICAgICAgICAgICAnICAgIHNsZWVwKDI4ODAwKTtcbicsCisgICAgICAg
ICAgICAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAg
ICAgJ2lmIChsaXF1aWQpIHtcbicKKyAgICAgICAgICAgICcgICAgcHJlcGFyZSgpO1xuJworICAg
ICAgICAgICAgJyAgICByZXR1cm4gbW9uZXk7XG4nCisgICAgICAgICAgICAnfSBlbHNlIGlmIChn
cmVlZHkpIHtcbicKKyAgICAgICAgICAgICcgICAga2VlcCgpO1xuJworICAgICAgICAgICAgJyAg
ICByZXR1cm4gbm90aGluZztcbicKKyAgICAgICAgICAgICd9XG4nLAorICAgICAgICAgICAgJ0Fu
IGVsc2UgaWYgc3RhdGVtZW50IHNob3VsZCBiZSB3cml0dGVuIGFzIGFuIGlmIHN0YXRlbWVudCB3
aGVuIHRoZSAnCisgICAgICAgICAgICAncHJpb3IgImlmIiBjb25jbHVkZXMgd2l0aCBhIHJldHVy
biwgYnJlYWssIGNvbnRpbnVlIG9yIGdvdG8gc3RhdGVtZW50LicKKyAgICAgICAgICAgICcgIFty
ZWFkYWJpbGl0eS9jb250cm9sX2Zsb3ddIFs0XScpCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRp
X2xpbmVfbGludCgKKyAgICAgICAgICAgICcgICAgaWYgKHN0dXBpZCkge1xuJworICAgICAgICAg
ICAgJ2luZmluaXRlTG9vcDpcbicKKyAgICAgICAgICAgICcgICAgICAgIGdvdG8gaW5maW5pdGVM
b29wO1xuJworICAgICAgICAgICAgJyAgICB9IGVsc2UgaWYgKGV2aWwpXG4nCisgICAgICAgICAg
ICAnICAgICAgICBnb3RvIGhlbGw7XG4nLAorICAgICAgICAgICAgJ0FuIGVsc2UgaWYgc3RhdGVt
ZW50IHNob3VsZCBiZSB3cml0dGVuIGFzIGFuIGlmIHN0YXRlbWVudCB3aGVuIHRoZSAnCisgICAg
ICAgICAgICAncHJpb3IgImlmIiBjb25jbHVkZXMgd2l0aCBhIHJldHVybiwgYnJlYWssIGNvbnRp
bnVlIG9yIGdvdG8gc3RhdGVtZW50LicKKyAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9jb250
cm9sX2Zsb3ddIFs0XScpCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAg
ICAgICAgICAgICdpZiAobGlxdWlkKVxuJworICAgICAgICAgICAgJ3tcbicKKyAgICAgICAgICAg
ICcgICAgcHJlcGFyZSgpO1xuJworICAgICAgICAgICAgJyAgICByZXR1cm4gbW9uZXk7XG4nCisg
ICAgICAgICAgICAnfVxuJworICAgICAgICAgICAgJ2Vsc2UgaWYgKGdyZWVkeSlcbicKKyAgICAg
ICAgICAgICcgICAga2VlcCgpO1xuJywKKyAgICAgICAgICAgIFsnVGhpcyB7IHNob3VsZCBiZSBh
dCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBsaW5lICBbd2hpdGVzcGFjZS9icmFjZXNdIFs0XScs
CisgICAgICAgICAgICAnQW4gZWxzZSBzaG91bGQgYXBwZWFyIG9uIHRoZSBzYW1lIGxpbmUgYXMg
dGhlIHByZWNlZGluZyB9ICBbd2hpdGVzcGFjZS9uZXdsaW5lXSBbNF0nLAorICAgICAgICAgICAg
J0FuIGVsc2UgaWYgc3RhdGVtZW50IHNob3VsZCBiZSB3cml0dGVuIGFzIGFuIGlmIHN0YXRlbWVu
dCB3aGVuIHRoZSAnCisgICAgICAgICAgICAncHJpb3IgImlmIiBjb25jbHVkZXMgd2l0aCBhIHJl
dHVybiwgYnJlYWssIGNvbnRpbnVlIG9yIGdvdG8gc3RhdGVtZW50LicKKyAgICAgICAgICAgICcg
IFtyZWFkYWJpbGl0eS9jb250cm9sX2Zsb3ddIFs0XSddKQorICAgICAgICBzZWxmLmFzc2VydF9t
dWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnaWYgKGdvbmUpXG4nCisgICAgICAgICAgICAn
ICAgIHJldHVybjtcbicKKyAgICAgICAgICAgICdlbHNlIGlmIChoZXJlKVxuJworICAgICAgICAg
ICAgJyAgICBnbygpO1xuJywKKyAgICAgICAgICAgICdBbiBlbHNlIGlmIHN0YXRlbWVudCBzaG91
bGQgYmUgd3JpdHRlbiBhcyBhbiBpZiBzdGF0ZW1lbnQgd2hlbiB0aGUgJworICAgICAgICAgICAg
J3ByaW9yICJpZiIgY29uY2x1ZGVzIHdpdGggYSByZXR1cm4sIGJyZWFrLCBjb250aW51ZSBvciBn
b3RvIHN0YXRlbWVudC4nCisgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY29udHJvbF9mbG93
XSBbNF0nKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAg
ICAnaWYgKGdvbmUpXG4nCisgICAgICAgICAgICAnICAgIHJldHVybjtcbicKKyAgICAgICAgICAg
ICdlbHNlXG4nCisgICAgICAgICAgICAnICAgIGdvKCk7XG4nLAorICAgICAgICAgICAgJ0FuIGVs
c2Ugc3RhdGVtZW50IGNhbiBiZSByZW1vdmVkIHdoZW4gdGhlIHByaW9yICJpZiIgY29uY2x1ZGVz
ICcKKyAgICAgICAgICAgICd3aXRoIGEgcmV0dXJuLCBicmVhaywgY29udGludWUgb3IgZ290byBz
dGF0ZW1lbnQuJworICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2NvbnRyb2xfZmxvd10gWzRd
JykKKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAgJ2lm
IChtb3RpdmF0ZWQpIHtcbicKKyAgICAgICAgICAgICcgICAgcHJlcGFyZSgpO1xuJworICAgICAg
ICAgICAgJyAgICBjb250aW51ZTtcbicKKyAgICAgICAgICAgICd9IGVsc2Uge1xuJworICAgICAg
ICAgICAgJyAgICBjbGVhblVwKCk7XG4nCisgICAgICAgICAgICAnICAgIGJyZWFrO1xuJworICAg
ICAgICAgICAgJ31cbicsCisgICAgICAgICAgICAnQW4gZWxzZSBzdGF0ZW1lbnQgY2FuIGJlIHJl
bW92ZWQgd2hlbiB0aGUgcHJpb3IgImlmIiBjb25jbHVkZXMgJworICAgICAgICAgICAgJ3dpdGgg
YSByZXR1cm4sIGJyZWFrLCBjb250aW51ZSBvciBnb3RvIHN0YXRlbWVudC4nCisgICAgICAgICAg
ICAnICBbcmVhZGFiaWxpdHkvY29udHJvbF9mbG93XSBbNF0nKQorICAgICAgICBzZWxmLmFzc2Vy
dF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnaWYgKHRpcmVkKVxuJworICAgICAgICAg
ICAgJyAgICBicmVhaztcbicKKyAgICAgICAgICAgICdlbHNlIHtcbicKKyAgICAgICAgICAgICcg
ICAgcHJlcGFyZSgpO1xuJworICAgICAgICAgICAgJyAgICBjb250aW51ZTtcbicKKyAgICAgICAg
ICAgICd9XG4nLAorICAgICAgICAgICAgJ0FuIGVsc2Ugc3RhdGVtZW50IGNhbiBiZSByZW1vdmVk
IHdoZW4gdGhlIHByaW9yICJpZiIgY29uY2x1ZGVzICcKKyAgICAgICAgICAgICd3aXRoIGEgcmV0
dXJuLCBicmVhaywgY29udGludWUgb3IgZ290byBzdGF0ZW1lbnQuJworICAgICAgICAgICAgJyAg
W3JlYWRhYmlsaXR5L2NvbnRyb2xfZmxvd10gWzRdJykKKworICAgIGRlZiB0ZXN0X2JyYWNlcyhz
ZWxmKToKKyAgICAgICAgIyAxLiBGdW5jdGlvbiBkZWZpbml0aW9uczogcGxhY2UgZWFjaCBicmFj
ZSBvbiBpdHMgb3duIGxpbmUuCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgK
KyAgICAgICAgICAgICdpbnQgbWFpbigpXG4nCisgICAgICAgICAgICAne1xuJworICAgICAgICAg
ICAgJyAgICBkb1NvbWV0aGluZygpO1xuJworICAgICAgICAgICAgJ31cbicsCisgICAgICAgICAg
ICAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAg
J2ludCBtYWluKCkge1xuJworICAgICAgICAgICAgJyAgICBkb1NvbWV0aGluZygpO1xuJworICAg
ICAgICAgICAgJ31cbicsCisgICAgICAgICAgICAnUGxhY2UgYnJhY2Ugb24gaXRzIG93biBsaW5l
IGZvciBmdW5jdGlvbiBkZWZpbml0aW9ucy4gIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzRdJykKKwor
ICAgICAgICAjIDIuIE90aGVyIGJyYWNlczogcGxhY2UgdGhlIG9wZW4gYnJhY2Ugb24gdGhlIGxp
bmUgcHJlY2VkaW5nIHRoZQorICAgICAgICAjICAgIGNvZGUgYmxvY2s7IHBsYWNlIHRoZSBjbG9z
ZSBicmFjZSBvbiBpdHMgb3duIGxpbmUuCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVf
bGludCgKKyAgICAgICAgICAgICdjbGFzcyBNeUNsYXNzIHtcbicKKyAgICAgICAgICAgICcgICAg
aW50IGZvbztcbicKKyAgICAgICAgICAgICd9O1xuJywKKyAgICAgICAgICAgICcnKQorICAgICAg
ICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnbmFtZXNwYWNlIFdl
YkNvcmUge1xuJworICAgICAgICAgICAgJ2ludCBmb287XG4nCisgICAgICAgICAgICAnfTtcbics
CisgICAgICAgICAgICAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAor
ICAgICAgICAgICAgJ2ZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuJworICAgICAgICAg
ICAgJyAgICBEb1NvbWV0aGluZygpO1xuJworICAgICAgICAgICAgJ307XG4nLAorICAgICAgICAg
ICAgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAg
ICdjbGFzcyBNeUNsYXNzXG4nCisgICAgICAgICAgICAne1xuJworICAgICAgICAgICAgJyAgICBp
bnQgZm9vO1xuJworICAgICAgICAgICAgJ307XG4nLAorICAgICAgICAgICAgJ1RoaXMgeyBzaG91
bGQgYmUgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbGluZSAgW3doaXRlc3BhY2UvYnJhY2Vz
XSBbNF0nKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAg
ICAnaWYgKGNvbmRpdGlvbilcbicKKyAgICAgICAgICAgICd7XG4nCisgICAgICAgICAgICAnICAg
IGludCBmb287XG4nCisgICAgICAgICAgICAnfVxuJywKKyAgICAgICAgICAgICdUaGlzIHsgc2hv
dWxkIGJlIGF0IHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGxpbmUgIFt3aGl0ZXNwYWNlL2JyYWNl
c10gWzRdJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAg
ICAgJ2ZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKylcbicKKyAgICAgICAgICAgICd7XG4nCisg
ICAgICAgICAgICAnICAgIGludCBmb287XG4nCisgICAgICAgICAgICAnfVxuJywKKyAgICAgICAg
ICAgICdUaGlzIHsgc2hvdWxkIGJlIGF0IHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGxpbmUgIFt3
aGl0ZXNwYWNlL2JyYWNlc10gWzRdJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9s
aW50KAorICAgICAgICAgICAgJ3doaWxlICh0cnVlKVxuJworICAgICAgICAgICAgJ3tcbicKKyAg
ICAgICAgICAgICcgICAgaW50IGZvbztcbicKKyAgICAgICAgICAgICd9XG4nLAorICAgICAgICAg
ICAgJ1RoaXMgeyBzaG91bGQgYmUgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbGluZSAgW3do
aXRlc3BhY2UvYnJhY2VzXSBbNF0nKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xp
bnQoCisgICAgICAgICAgICAnZm9yZWFjaCAoRm9vKiBmb28sIGZvb3MpXG4nCisgICAgICAgICAg
ICAne1xuJworICAgICAgICAgICAgJyAgICBpbnQgYmFyO1xuJworICAgICAgICAgICAgJ31cbics
CisgICAgICAgICAgICAnVGhpcyB7IHNob3VsZCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91
cyBsaW5lICBbd2hpdGVzcGFjZS9icmFjZXNdIFs0XScpCisgICAgICAgIHNlbGYuYXNzZXJ0X211
bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICdzd2l0Y2ggKHR5cGUpXG4nCisgICAgICAgICAg
ICAne1xuJworICAgICAgICAgICAgJ2Nhc2UgZm9vOiByZXR1cm47XG4nCisgICAgICAgICAgICAn
fVxuJywKKyAgICAgICAgICAgICdUaGlzIHsgc2hvdWxkIGJlIGF0IHRoZSBlbmQgb2YgdGhlIHBy
ZXZpb3VzIGxpbmUgIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzRdJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAgJ2lmIChjb25kaXRpb24pXG4nCisgICAg
ICAgICAgICAne1xuJworICAgICAgICAgICAgJyAgICBpbnQgZm9vO1xuJworICAgICAgICAgICAg
J31cbicsCisgICAgICAgICAgICAnVGhpcyB7IHNob3VsZCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBw
cmV2aW91cyBsaW5lICBbd2hpdGVzcGFjZS9icmFjZXNdIFs0XScpCisgICAgICAgIHNlbGYuYXNz
ZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICdmb3IgKGludCBpID0gMDsgaSA8IDEw
OyBpKyspXG4nCisgICAgICAgICAgICAne1xuJworICAgICAgICAgICAgJyAgICBpbnQgZm9vO1xu
JworICAgICAgICAgICAgJ31cbicsCisgICAgICAgICAgICAnVGhpcyB7IHNob3VsZCBiZSBhdCB0
aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBsaW5lICBbd2hpdGVzcGFjZS9icmFjZXNdIFs0XScpCisg
ICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICd3aGlsZSAo
dHJ1ZSlcbicKKyAgICAgICAgICAgICd7XG4nCisgICAgICAgICAgICAnICAgIGludCBmb287XG4n
CisgICAgICAgICAgICAnfVxuJywKKyAgICAgICAgICAgICdUaGlzIHsgc2hvdWxkIGJlIGF0IHRo
ZSBlbmQgb2YgdGhlIHByZXZpb3VzIGxpbmUgIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzRdJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAgJ3N3aXRjaCAo
dHlwZSlcbicKKyAgICAgICAgICAgICd7XG4nCisgICAgICAgICAgICAnY2FzZSBmb286IHJldHVy
bjtcbicKKyAgICAgICAgICAgICd9XG4nLAorICAgICAgICAgICAgJ1RoaXMgeyBzaG91bGQgYmUg
YXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbGluZSAgW3doaXRlc3BhY2UvYnJhY2VzXSBbNF0n
KQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnZWxz
ZSBpZiAodHlwZSlcbicKKyAgICAgICAgICAgICd7XG4nCisgICAgICAgICAgICAnY2FzZSBmb286
IHJldHVybjtcbicKKyAgICAgICAgICAgICd9XG4nLAorICAgICAgICAgICAgJ1RoaXMgeyBzaG91
bGQgYmUgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbGluZSAgW3doaXRlc3BhY2UvYnJhY2Vz
XSBbNF0nKQorCisgICAgICAgICMgMy4gT25lLWxpbmUgY29udHJvbCBjbGF1c2VzIHNob3VsZCBu
b3QgdXNlIGJyYWNlcyB1bmxlc3MKKyAgICAgICAgIyAgICBjb21tZW50cyBhcmUgaW5jbHVkZWQg
b3IgYSBzaW5nbGUgc3RhdGVtZW50IHNwYW5zIG11bHRpcGxlCisgICAgICAgICMgICAgbGluZXMu
CisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICdpZiAo
dHJ1ZSkge1xuJworICAgICAgICAgICAgJyAgICBpbnQgZm9vO1xuJworICAgICAgICAgICAgJ31c
bicsCisgICAgICAgICAgICAnT25lIGxpbmUgY29udHJvbCBjbGF1c2VzIHNob3VsZCBub3QgdXNl
IGJyYWNlcy4gIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzRdJykKKworICAgICAgICBzZWxmLmFzc2Vy
dF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnZm9yICg7IGZvbzsgYmFyKSB7XG4nCisg
ICAgICAgICAgICAnICAgIGludCBmb287XG4nCisgICAgICAgICAgICAnfVxuJywKKyAgICAgICAg
ICAgICdPbmUgbGluZSBjb250cm9sIGNsYXVzZXMgc2hvdWxkIG5vdCB1c2UgYnJhY2VzLiAgW3do
aXRlc3BhY2UvYnJhY2VzXSBbNF0nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVf
bGludCgKKyAgICAgICAgICAgICdmb3JlYWNoIChmb28sIGZvb3MpIHtcbicKKyAgICAgICAgICAg
ICcgICAgaW50IGJhcjtcbicKKyAgICAgICAgICAgICd9XG4nLAorICAgICAgICAgICAgJ09uZSBs
aW5lIGNvbnRyb2wgY2xhdXNlcyBzaG91bGQgbm90IHVzZSBicmFjZXMuICBbd2hpdGVzcGFjZS9i
cmFjZXNdIFs0XScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAorICAg
ICAgICAgICAgJ3doaWxlICh0cnVlKSB7XG4nCisgICAgICAgICAgICAnICAgIGludCBmb287XG4n
CisgICAgICAgICAgICAnfVxuJywKKyAgICAgICAgICAgICdPbmUgbGluZSBjb250cm9sIGNsYXVz
ZXMgc2hvdWxkIG5vdCB1c2UgYnJhY2VzLiAgW3doaXRlc3BhY2UvYnJhY2VzXSBbNF0nKQorCisg
ICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICdpZiAodHJ1
ZSlcbicKKyAgICAgICAgICAgICcgICAgaW50IGZvbztcbicKKyAgICAgICAgICAgICdlbHNlIHtc
bicKKyAgICAgICAgICAgICcgICAgaW50IGZvbztcbicKKyAgICAgICAgICAgICd9XG4nLAorICAg
ICAgICAgICAgJ09uZSBsaW5lIGNvbnRyb2wgY2xhdXNlcyBzaG91bGQgbm90IHVzZSBicmFjZXMu
ICBbd2hpdGVzcGFjZS9icmFjZXNdIFs0XScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlf
bGluZV9saW50KAorICAgICAgICAgICAgJ2lmICh0cnVlKSB7XG4nCisgICAgICAgICAgICAnICAg
IGludCBmb287XG4nCisgICAgICAgICAgICAnfSBlbHNlXG4nCisgICAgICAgICAgICAnICAgIGlu
dCBmb287XG4nLAorICAgICAgICAgICAgJ09uZSBsaW5lIGNvbnRyb2wgY2xhdXNlcyBzaG91bGQg
bm90IHVzZSBicmFjZXMuICBbd2hpdGVzcGFjZS9icmFjZXNdIFs0XScpCisKKyAgICAgICAgc2Vs
Zi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAgJ2lmICh0cnVlKSB7XG4nCisg
ICAgICAgICAgICAnICAgIC8vIFNvbWUgY29tbWVudFxuJworICAgICAgICAgICAgJyAgICBpbnQg
Zm9vO1xuJworICAgICAgICAgICAgJ31cbicsCisgICAgICAgICAgICAnJykKKworICAgICAgICBz
ZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnaWYgKHRydWUpIHtcbicK
KyAgICAgICAgICAgICcgICAgbXlGdW5jdGlvbihyZWFsbHlMb25nUGFyYW0xLCByZWFsbHlMb25n
UGFyYW0yLFxuJworICAgICAgICAgICAgJyAgICAgICAgICAgICAgIHJlYWxseUxvbmdQYXJhbTMp
O1xuJworICAgICAgICAgICAgJ31cbicsCisgICAgICAgICAgICAnJykKKworICAgICAgICAjIDQu
IENvbnRyb2wgY2xhdXNlcyB3aXRob3V0IGEgYm9keSBzaG91bGQgdXNlIGVtcHR5IGJyYWNlcy4K
KyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAgICAgICAgJ2ZvciAo
IDsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHQpIHsgfVxuJywKKyAgICAgICAgICAg
ICcnKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAn
Zm9yICggOyBjdXJyZW50O1xuJworICAgICAgICAgICAgJyAgICAgY3VycmVudCA9IGN1cnJlbnQt
Pm5leHQpIHt9XG4nLAorICAgICAgICAgICAgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRp
X2xpbmVfbGludCgKKyAgICAgICAgICAgICdmb3IgKCA7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJy
ZW50LT5uZXh0KTtcbicsCisgICAgICAgICAgICAnU2VtaWNvbG9uIGRlZmluaW5nIGVtcHR5IHN0
YXRlbWVudCBmb3IgdGhpcyBsb29wLiBVc2UgeyB9IGluc3RlYWQuICBbd2hpdGVzcGFjZS9zZW1p
Y29sb25dIFs1XScpCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAg
ICAgICAgICd3aGlsZSAodHJ1ZSk7XG4nLAorICAgICAgICAgICAgJ1NlbWljb2xvbiBkZWZpbmlu
ZyBlbXB0eSBzdGF0ZW1lbnQgZm9yIHRoaXMgbG9vcC4gVXNlIHsgfSBpbnN0ZWFkLiAgW3doaXRl
c3BhY2Uvc2VtaWNvbG9uXSBbNV0nKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xp
bnQoCisgICAgICAgICAgICAnfSB3aGlsZSAodHJ1ZSk7XG4nLAorICAgICAgICAgICAgJycpCisK
KyAgICBkZWYgdGVzdF9udWxsX2ZhbHNlX3plcm8oc2VsZik6CisgICAgICAgICMgMS4gSW4gQysr
LCB0aGUgbnVsbCBwb2ludGVyIHZhbHVlIHNob3VsZCBiZSB3cml0dGVuIGFzIDAuIEluIEMsCisg
ICAgICAgICMgICAgaXQgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgTlVMTC4gSW4gT2JqZWN0aXZlLUMg
YW5kIE9iamVjdGl2ZS1DKyssCisgICAgICAgICMgICAgZm9sbG93IHRoZSBndWlkZWxpbmUgZm9y
IEMgb3IgQysrLCByZXNwZWN0aXZlbHksIGJ1dCB1c2UgbmlsIHRvCisgICAgICAgICMgICAgcmVw
cmVzZW50IGEgbnVsbCBPYmplY3RpdmUtQyBvYmplY3QuCisgICAgICAgIHNlbGYuYXNzZXJ0X2xp
bnQoCisgICAgICAgICAgICAnZnVuY3Rpb25DYWxsKE5VTEwpJywKKyAgICAgICAgICAgICdVc2Ug
MCBpbnN0ZWFkIG9mIE5VTEwuJworICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L251bGxdIFs1
XScsCisgICAgICAgICAgICAnZm9vLmNwcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisg
ICAgICAgICAgICAiLy8gRG9uJ3QgdXNlIE5VTEwgaW4gY29tbWVudHMgc2luY2UgaXQgaXNuJ3Qg
aW4gY29kZS4iLAorICAgICAgICAgICAgJ1VzZSAwIGluc3RlYWQgb2YgTlVMTC4nCisgICAgICAg
ICAgICAnICBbcmVhZGFiaWxpdHkvbnVsbF0gWzRdJywKKyAgICAgICAgICAgICdmb28uY3BwJykK
KyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKKyAgICAgICAgICAgICciQSBzdHJpbmcgd2l0aCBO
VUxMIiAvLyBhbmQgYSBjb21tZW50IHdpdGggTlVMTCBpcyB0cmlja3kgdG8gZmxhZyBjb3JyZWN0
bHkgaW4gY3BwX3N0eWxlLicsCisgICAgICAgICAgICAnVXNlIDAgaW5zdGVhZCBvZiBOVUxMLicK
KyAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9udWxsXSBbNF0nLAorICAgICAgICAgICAgJ2Zv
by5jcHAnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KAorICAgICAgICAgICAgJyJBIHN0cmlu
ZyBjb250YWluaW5nIE5VTEwgaXMgb2siJywKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAg
J2Zvby5jcHAnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KAorICAgICAgICAgICAgJ2lmIChh
Ym91dE5VTEwpJywKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAgJ2Zvby5jcHAnKQorICAg
ICAgICBzZWxmLmFzc2VydF9saW50KAorICAgICAgICAgICAgJ215VmFyaWFibGUgPSBOVUxMaWZ5
JywKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAgJ2Zvby5jcHAnKQorICAgICAgICAjIE1h
a2Ugc3VyZSB0aGF0IHRoZSBOVUxMIGNoZWNrIGRvZXMgbm90IGFwcGx5IHRvIEMgYW5kIE9iamVj
dGl2ZS1DIGZpbGVzLgorICAgICAgICBzZWxmLmFzc2VydF9saW50KAorICAgICAgICAgICAgJ2Z1
bmN0aW9uQ2FsbChOVUxMKScsCisgICAgICAgICAgICAnJywKKyAgICAgICAgICAgICdmb28uYycp
CisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAgICAnZnVuY3Rpb25DYWxsKE5V
TEwpJywKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAgJ2Zvby5tJykKKworICAgICAgICAj
IE1ha2Ugc3VyZSB0aGF0IHRoZSBOVUxMIGNoZWNrIGRvZXMgbm90IGFwcGx5IHRvIGdfb2JqZWN0
X3tzZXQsZ2V0fQorICAgICAgICBzZWxmLmFzc2VydF9saW50KAorICAgICAgICAgICAgJ2dfb2Jq
ZWN0X2dldChmb28sICJwcm9wIiwgJmJhciwgTlVMTCk7JywKKyAgICAgICAgICAgICcnKQorICAg
ICAgICBzZWxmLmFzc2VydF9saW50KAorICAgICAgICAgICAgJ2dfb2JqZWN0X3NldChmb28sICJw
cm9wIiwgYmFyLCBOVUxMKTsnLAorICAgICAgICAgICAgJycpCisKKyAgICAgICAgIyAyLiBDKysg
YW5kIEMgYm9vbCB2YWx1ZXMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgdHJ1ZSBhbmQKKyAgICAgICAg
IyAgICBmYWxzZS4gT2JqZWN0aXZlLUMgQk9PTCB2YWx1ZXMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMg
WUVTIGFuZCBOTy4KKyAgICAgICAgIyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisKKyAgICAgICAg
IyAzLiBUZXN0cyBmb3IgdHJ1ZS9mYWxzZSwgbnVsbC9ub24tbnVsbCwgYW5kIHplcm8vbm9uLXpl
cm8gc2hvdWxkCisgICAgICAgICMgICAgYWxsIGJlIGRvbmUgd2l0aG91dCBlcXVhbGl0eSBjb21w
YXJpc29ucy4KKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKKyAgICAgICAgICAgICdpZiAoY291
bnQgPT0gMCknLAorICAgICAgICAgICAgJ1Rlc3RzIGZvciB0cnVlL2ZhbHNlLCBudWxsL25vbi1u
dWxsLCBhbmQgemVyby9ub24temVybyBzaG91bGQgYWxsIGJlIGRvbmUgd2l0aG91dCBlcXVhbGl0
eSBjb21wYXJpc29ucy4nCisgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY29tcGFyaXNvbl90
b196ZXJvXSBbNV0nKQorICAgICAgICBzZWxmLmFzc2VydF9saW50X29uZV9vZl9tYW55X2Vycm9y
c19yZSgKKyAgICAgICAgICAgICdpZiAoc3RyaW5nICE9IE5VTEwpJywKKyAgICAgICAgICAgIHIn
VGVzdHMgZm9yIHRydWUvZmFsc2UsIG51bGwvbm9uLW51bGwsIGFuZCB6ZXJvL25vbi16ZXJvIHNo
b3VsZCBhbGwgYmUgZG9uZSB3aXRob3V0IGVxdWFsaXR5IGNvbXBhcmlzb25zXC4nKQorICAgICAg
ICBzZWxmLmFzc2VydF9saW50KAorICAgICAgICAgICAgJ2lmIChjb25kaXRpb24gPT0gdHJ1ZSkn
LAorICAgICAgICAgICAgJ1Rlc3RzIGZvciB0cnVlL2ZhbHNlLCBudWxsL25vbi1udWxsLCBhbmQg
emVyby9ub24temVybyBzaG91bGQgYWxsIGJlIGRvbmUgd2l0aG91dCBlcXVhbGl0eSBjb21wYXJp
c29ucy4nCisgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY29tcGFyaXNvbl90b196ZXJvXSBb
NV0nKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KAorICAgICAgICAgICAgJ2lmIChteVZhcmlh
YmxlICE9IC8qIFdoeSB3b3VsZCBhbnlvbmUgcHV0IGEgY29tbWVudCBoZXJlPyAqLyBmYWxzZSkn
LAorICAgICAgICAgICAgJ1Rlc3RzIGZvciB0cnVlL2ZhbHNlLCBudWxsL25vbi1udWxsLCBhbmQg
emVyby9ub24temVybyBzaG91bGQgYWxsIGJlIGRvbmUgd2l0aG91dCBlcXVhbGl0eSBjb21wYXJp
c29ucy4nCisgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvY29tcGFyaXNvbl90b196ZXJvXSBb
NV0nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAgICAnaWYgKDAgLyog
VGhpcyBjb21tZW50IGFsc28gbG9va3Mgb2RkIHRvIG1lLiAqLyAhPSBhTG9uZ2VyVmFyaWFibGVO
YW1lKScsCisgICAgICAgICAgICAnVGVzdHMgZm9yIHRydWUvZmFsc2UsIG51bGwvbm9uLW51bGws
IGFuZCB6ZXJvL25vbi16ZXJvIHNob3VsZCBhbGwgYmUgZG9uZSB3aXRob3V0IGVxdWFsaXR5IGNv
bXBhcmlzb25zLicKKyAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9jb21wYXJpc29uX3RvX3pl
cm9dIFs1XScpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnRfb25lX29mX21hbnlfZXJyb3JzX3Jl
KAorICAgICAgICAgICAgJ2lmIChOVUxMID09IHRoaXNNYXlCZU51bGwpJywKKyAgICAgICAgICAg
IHInVGVzdHMgZm9yIHRydWUvZmFsc2UsIG51bGwvbm9uLW51bGwsIGFuZCB6ZXJvL25vbi16ZXJv
IHNob3VsZCBhbGwgYmUgZG9uZSB3aXRob3V0IGVxdWFsaXR5IGNvbXBhcmlzb25zXC4nKQorICAg
ICAgICBzZWxmLmFzc2VydF9saW50KAorICAgICAgICAgICAgJ2lmICh0cnVlICE9IGFub3RoZXJD
b25kaXRpb24pJywKKyAgICAgICAgICAgICdUZXN0cyBmb3IgdHJ1ZS9mYWxzZSwgbnVsbC9ub24t
bnVsbCwgYW5kIHplcm8vbm9uLXplcm8gc2hvdWxkIGFsbCBiZSBkb25lIHdpdGhvdXQgZXF1YWxp
dHkgY29tcGFyaXNvbnMuJworICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2NvbXBhcmlzb25f
dG9femVyb10gWzVdJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKKyAgICAgICAgICAgICdp
ZiAoZmFsc2UgPT0gbXlCb29sVmFsdWUpJywKKyAgICAgICAgICAgICdUZXN0cyBmb3IgdHJ1ZS9m
YWxzZSwgbnVsbC9ub24tbnVsbCwgYW5kIHplcm8vbm9uLXplcm8gc2hvdWxkIGFsbCBiZSBkb25l
IHdpdGhvdXQgZXF1YWxpdHkgY29tcGFyaXNvbnMuJworICAgICAgICAgICAgJyAgW3JlYWRhYmls
aXR5L2NvbXBhcmlzb25fdG9femVyb10gWzVdJykKKworICAgICAgICBzZWxmLmFzc2VydF9saW50
KAorICAgICAgICAgICAgJ2lmIChmb250VHlwZSA9PSB0cnVlVHlwZSknLAorICAgICAgICAgICAg
JycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAgICAnaWYgKG90aGVydHJ1
ZSA9PSBmb250VHlwZSknLAorICAgICAgICAgICAgJycpCisKKyAgICBkZWYgdGVzdF91c2luZ19z
dGQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAgICAndXNpbmcg
c3RkOjptaW47JywKKyAgICAgICAgICAgICJVc2UgJ3VzaW5nIG5hbWVzcGFjZSBzdGQ7JyBpbnN0
ZWFkIG9mICd1c2luZyBzdGQ6Om1pbjsnLiIKKyAgICAgICAgICAgICIgIFtidWlsZC91c2luZ19z
dGRdIFs0XSIsCisgICAgICAgICAgICAnZm9vLmNwcCcpCisKKyAgICBkZWYgdGVzdF9tYXhfbWFj
cm8oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAgICAnaW50IGkg
PSBNQVgoMCwgMSk7JywKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAgJ2Zvby5jJykKKwor
ICAgICAgICBzZWxmLmFzc2VydF9saW50KAorICAgICAgICAgICAgJ2ludCBpID0gTUFYKDAsIDEp
OycsCisgICAgICAgICAgICAnVXNlIHN0ZDo6bWF4KCkgb3Igc3RkOjptYXg8dHlwZT4oKSBpbnN0
ZWFkIG9mIHRoZSBNQVgoKSBtYWNyby4nCisgICAgICAgICAgICAnICBbcnVudGltZS9tYXhfbWlu
X21hY3Jvc10gWzRdJywKKyAgICAgICAgICAgICdmb28uY3BwJykKKworICAgICAgICBzZWxmLmFz
c2VydF9saW50KAorICAgICAgICAgICAgJ2lubGluZSBpbnQgZm9vKCkgeyByZXR1cm4gTUFYKDAs
IDEpOyB9JywKKyAgICAgICAgICAgICdVc2Ugc3RkOjptYXgoKSBvciBzdGQ6Om1heDx0eXBlPigp
IGluc3RlYWQgb2YgdGhlIE1BWCgpIG1hY3JvLicKKyAgICAgICAgICAgICcgIFtydW50aW1lL21h
eF9taW5fbWFjcm9zXSBbNF0nLAorICAgICAgICAgICAgJ2Zvby5oJykKKworICAgIGRlZiB0ZXN0
X21pbl9tYWNybyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKKyAgICAgICAgICAg
ICdpbnQgaSA9IE1JTigwLCAxKTsnLAorICAgICAgICAgICAgJycsCisgICAgICAgICAgICAnZm9v
LmMnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAgICAnaW50IGkgPSBN
SU4oMCwgMSk7JywKKyAgICAgICAgICAgICdVc2Ugc3RkOjptaW4oKSBvciBzdGQ6Om1pbjx0eXBl
PigpIGluc3RlYWQgb2YgdGhlIE1JTigpIG1hY3JvLicKKyAgICAgICAgICAgICcgIFtydW50aW1l
L21heF9taW5fbWFjcm9zXSBbNF0nLAorICAgICAgICAgICAgJ2Zvby5jcHAnKQorCisgICAgICAg
IHNlbGYuYXNzZXJ0X2xpbnQoCisgICAgICAgICAgICAnaW5saW5lIGludCBmb28oKSB7IHJldHVy
biBNSU4oMCwgMSk7IH0nLAorICAgICAgICAgICAgJ1VzZSBzdGQ6Om1pbigpIG9yIHN0ZDo6bWlu
PHR5cGU+KCkgaW5zdGVhZCBvZiB0aGUgTUlOKCkgbWFjcm8uJworICAgICAgICAgICAgJyAgW3J1
bnRpbWUvbWF4X21pbl9tYWNyb3NdIFs0XScsCisgICAgICAgICAgICAnZm9vLmgnKQorCisgICAg
ZGVmIHRlc3RfbmFtZXMoc2VsZik6CisgICAgICAgIG5hbWVfZXJyb3JfbWVzc2FnZSA9ICIgaXMg
aW5jb3JyZWN0bHkgbmFtZWQuIERvbid0IHVzZSB1bmRlcnNjb3JlcyBpbiB5b3VyIGlkZW50aWZp
ZXIgbmFtZXMuICBbcmVhZGFiaWxpdHkvbmFtaW5nXSBbNF0iCisKKyAgICAgICAgIyBCYXNpYyBj
YXNlcyBmcm9tIFdlYktpdCBzdHlsZSBndWlkZS4KKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgn
c3RydWN0IERhdGE7JywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3NpemVfdCBidWZm
ZXJTaXplOycsICcnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdjbGFzcyBIVE1MRG9jdW1l
bnQ7JywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ1N0cmluZyBtaW1lVHlwZSgpOycs
ICcnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdzaXplX3QgYnVmZmVyX3NpemU7JywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAnYnVmZmVyX3NpemUnICsgbmFtZV9lcnJvcl9tZXNzYWdl
KQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdzaG9ydCBtX2xlbmd0aDsnLCAnJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRfbGludCgnc2hvcnQgX2xlbmd0aDsnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICdfbGVuZ3RoJyArIG5hbWVfZXJyb3JfbWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRfbGludCgnc2hvcnQgbGVuZ3RoXzsnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdsZW5n
dGhfJyArIG5hbWVfZXJyb3JfbWVzc2FnZSkKKworICAgICAgICAjIFBvaW50ZXJzLCByZWZlcmVu
Y2VzLCBmdW5jdGlvbnMsIHRlbXBsYXRlcywgYW5kIGFkamVjdGl2ZXMuCisgICAgICAgIHNlbGYu
YXNzZXJ0X2xpbnQoJ2NoYXIqIHVuZGVyX3Njb3JlOycsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgJ3VuZGVyX3Njb3JlJyArIG5hbWVfZXJyb3JfbWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRfbGludCgnY29uc3QgaW50IFVOREVSX1NDT1JFOycsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgJ1VOREVSX1NDT1JFJyArIG5hbWVfZXJyb3JfbWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRfbGludCgnc3RhdGljIGlubGluZSBjb25zdCBjaGFyIGNvbnN0JiBjb25zdCB1bmRlcl9zY29y
ZTsnLAorICAgICAgICAgICAgICAgICAgICAgICAgICd1bmRlcl9zY29yZScgKyBuYW1lX2Vycm9y
X21lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ1dlYkNvcmU6OlJlbmRlck9iamVj
dCogdW5kZXJfc2NvcmU7JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAndW5kZXJfc2NvcmUn
ICsgbmFtZV9lcnJvcl9tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpbnQgZnVu
Y19uYW1lKCk7JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZnVuY19uYW1lJyArIG5hbWVf
ZXJyb3JfbWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnUmVmUHRyPFJlbmRlck9i
amVjdCo+IHVuZGVyX3Njb3JlOycsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3VuZGVyX3Nj
b3JlJyArIG5hbWVfZXJyb3JfbWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnV1RG
OjpWZWN0b3I8V1RGOjpSZWZQdHI8Y29uc3QgUmVuZGVyT2JqZWN0KiBjb25zdD4gPiB1bmRlcl9z
Y29yZTsnLAorICAgICAgICAgICAgICAgICAgICAgICAgICd1bmRlcl9zY29yZScgKyBuYW1lX2Vy
cm9yX21lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCB1bmRlcl9zY29yZVtd
OycsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3VuZGVyX3Njb3JlJyArIG5hbWVfZXJyb3Jf
bWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnc3RydWN0IGRpcmVudCogdW5kZXJf
c2NvcmU7JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAndW5kZXJfc2NvcmUnICsgbmFtZV9l
cnJvcl9tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdsb25nIHVuZGVyX3Njb3Jl
OycsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3VuZGVyX3Njb3JlJyArIG5hbWVfZXJyb3Jf
bWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnbG9uZyBsb25nIHVuZGVyX3Njb3Jl
OycsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3VuZGVyX3Njb3JlJyArIG5hbWVfZXJyb3Jf
bWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnbG9uZyBkb3VibGUgdW5kZXJfc2Nv
cmU7JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAndW5kZXJfc2NvcmUnICsgbmFtZV9lcnJv
cl9tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdsb25nIGxvbmcgaW50IHVuZGVy
X3Njb3JlOycsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3VuZGVyX3Njb3JlJyArIG5hbWVf
ZXJyb3JfbWVzc2FnZSkKKworICAgICAgICAjIERlY2xhcmF0aW9ucyBpbiBjb250cm9sIHN0YXRl
bWVudC4KKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaWYgKGludCB1bmRlcl9zY29yZSA9IDQy
KSB7JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAndW5kZXJfc2NvcmUnICsgbmFtZV9lcnJv
cl9tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdlbHNlIGlmIChpbnQgdW5kZXJf
c2NvcmUgPSA0MikgeycsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3VuZGVyX3Njb3JlJyAr
IG5hbWVfZXJyb3JfbWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnZm9yIChpbnQg
dW5kZXJfc2NvcmUgPSA0MjsgY29uZDsgaSsrKSB7JywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAndW5kZXJfc2NvcmUnICsgbmFtZV9lcnJvcl9tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2Vy
dF9saW50KCd3aGlsZSAoZm9vICYgdW5kZXJfc2NvcmUgPSBiYXIpIHsnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICd1bmRlcl9zY29yZScgKyBuYW1lX2Vycm9yX21lc3NhZ2UpCisgICAgICAg
IHNlbGYuYXNzZXJ0X2xpbnQoJ2ZvciAoZm9vICogdW5kZXJfc2NvcmUgPSBwOyBjb25kOyBpKysp
IHsnLAorICAgICAgICAgICAgICAgICAgICAgICAgICd1bmRlcl9zY29yZScgKyBuYW1lX2Vycm9y
X21lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ZvciAoZm9vICogdW5kZXJfc2Nv
cmU7IGNvbmQ7IGkrKykgeycsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3VuZGVyX3Njb3Jl
JyArIG5hbWVfZXJyb3JfbWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnd2hpbGUg
KGZvbyAmIHZhbHVlX2luX3RoaXJkcGFydHlfbGlicmFyeSkgeycsICcnKQorICAgICAgICBzZWxm
LmFzc2VydF9saW50KCd3aGlsZSAoZm9vICogdmFsdWVfaW5fdGhpcmRwYXJ0eV9saWJyYXJ5KSB7
JywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2lmIChtbGkgJiYgU19PSyA9PSBtbGkt
PmZvbygpKSB7JywgJycpCisKKyAgICAgICAgIyBNb3JlIG1lbWJlciB2YXJpYWJsZXMgYW5kIGZ1
bmN0aW9ucy4KKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50IFNvbWVDbGFzczo6c192YWxp
ZE5hbWUnLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnaW50IG1fdW5kZXJfc2NvcmU7
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbV91bmRlcl9zY29yZScgKyBuYW1lX2Vycm9y
X21lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBTb21lQ2xhc3M6OnNfdW5k
ZXJfc2NvcmUgPSAwOycsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NvbWVDbGFzczo6c191
bmRlcl9zY29yZScgKyBuYW1lX2Vycm9yX21lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xp
bnQoJ2ludCBTb21lQ2xhc3M6OnVuZGVyX3Njb3JlID0gMDsnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICdTb21lQ2xhc3M6OnVuZGVyX3Njb3JlJyArIG5hbWVfZXJyb3JfbWVzc2FnZSkKKwor
ICAgICAgICAjIE90aGVyIHN0YXRlbWVudHMuCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3Jl
dHVybiBJTlRfTUFYOycsICcnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdyZXR1cm5fdCB1
bmRlcl9zY29yZTsnLAorICAgICAgICAgICAgICAgICAgICAgICAgICd1bmRlcl9zY29yZScgKyBu
YW1lX2Vycm9yX21lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2dvdG8gdW5kZXJf
c2NvcmU7JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAndW5kZXJfc2NvcmUnICsgbmFtZV9l
cnJvcl9tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdkZWxldGUgc3RhdGljX2Nh
c3Q8Rm9vKj4ocCk7JywgJycpCisKKyAgICAgICAgIyBNdWx0aXBsZSB2YXJpYWJsZXMgaW4gb25l
IGxpbmUuCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3ZvaWQgbXlGdW5jdGlvbihpbnQgdmFy
aWFibGUxLCBpbnQgYW5vdGhlcl92YXJpYWJsZSk7JywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAnYW5vdGhlcl92YXJpYWJsZScgKyBuYW1lX2Vycm9yX21lc3NhZ2UpCisgICAgICAgIHNlbGYu
YXNzZXJ0X2xpbnQoJ2ludCB2YXJpYWJsZTEsIGFub3RoZXJfdmFyaWFibGU7JywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAnYW5vdGhlcl92YXJpYWJsZScgKyBuYW1lX2Vycm9yX21lc3NhZ2Up
CisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBmaXJzdF92YXJpYWJsZSwgc2Vjb25kVmFy
aWFibGU7JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZmlyc3RfdmFyaWFibGUnICsgbmFt
ZV9lcnJvcl9tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCd2b2lkIG15X2Z1bmN0
aW9uKGludCB2YXJpYWJsZV8xLCBpbnQgdmFyaWFibGVfMik7JywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBbJ215X2Z1bmN0aW9uJyArIG5hbWVfZXJyb3JfbWVzc2FnZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ3ZhcmlhYmxlXzEnICsgbmFtZV9lcnJvcl9tZXNzYWdlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAndmFyaWFibGVfMicgKyBuYW1lX2Vycm9yX21lc3NhZ2VdKQor
ICAgICAgICBzZWxmLmFzc2VydF9saW50KCdmb3IgKGludCB2YXJpYWJsZV8xLCB2YXJpYWJsZV8y
OzspIHsnLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsndmFyaWFibGVfMScgKyBuYW1lX2Vy
cm9yX21lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICd2YXJpYWJsZV8yJyArIG5h
bWVfZXJyb3JfbWVzc2FnZV0pCisKKyAgICAgICAgIyBUaGVyZSBpcyBhbiBleGNlcHRpb24gZm9y
IG9wIGNvZGUgZnVuY3Rpb25zIGJ1dCBvbmx5IGluIHRoZSBKYXZhU2NyaXB0Q29yZSBkaXJlY3Rv
cnkuCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3ZvaWQgdGhpc19vcF9jb2RlKGludCB2YXIx
LCBpbnQgdmFyMiknLCAnJywgJ0phdmFTY3JpcHRDb3JlL2Zvby5jcHAnKQorICAgICAgICBzZWxm
LmFzc2VydF9saW50KCd2b2lkIHRoaXNfb3BfY29kZShpbnQgdmFyMSwgaW50IHZhcjIpJywgJ3Ro
aXNfb3BfY29kZScgKyBuYW1lX2Vycm9yX21lc3NhZ2UpCisKKyAgICAgICAgIyBUaGVyZSBpcyBh
biBleGNlcHRpb24gZm9yIHNvbWUgdW5pdCB0ZXN0cyB0aGF0IGJlZ2luIHdpdGggInRzdF8iLgor
ICAgICAgICBzZWxmLmFzc2VydF9saW50KCd2b2lkIHRzdF9RV2ViRnJhbWU6OmFycmF5T2JqZWN0
RW51bWVyYWJsZShpbnQgdmFyMSwgaW50IHZhcjIpJywgJycpCisKKyAgICAgICAgIyBjb25zdF9p
dGVyYXRvciBpcyBhbGxvd2VkIGFzIHdlbGwuCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3R5
cGVkZWYgVmVjdG9yVHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7JywgJycpCisK
KworICAgIGRlZiB0ZXN0X2NvbW1lbnRzKHNlbGYpOgorICAgICAgICAjIEEgY29tbWVudCBhdCB0
aGUgYmVnaW5uaW5nIG9mIGEgbGluZSBpcyBvay4KKyAgICAgICAgc2VsZi5hc3NlcnRfbGludCgn
Ly8gY29tbWVudCcsICcnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCcgICAgLy8gY29tbWVu
dCcsICcnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ30gIC8vIG5hbWVzcGFjZSBXZWJD
b3JlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnT25lIHNwYWNlIGJlZm9yZSBlbmQgb2Yg
bGluZSBjb21tZW50cycKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICBbd2hpdGVzcGFjZS9j
b21tZW50c10gWzVdJykKKworICAgIGRlZiB0ZXN0X290aGVyKHNlbGYpOgorICAgICAgICAjIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAgcGFzcworCisKKyAgICBkZWYgdGVzdF9jYW5f
aGFuZGxlKHNlbGYpOgorICAgICAgICAiIiJUZXN0cyBmb3IgY3BwX3N0eWxlLmNhbl9oYW5kbGUo
KS4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjcHBfc3R5bGUuY2FuX2hhbmRsZSgnJykp
CisgICAgICAgIHNlbGYuYXNzZXJ0XyhjcHBfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLmgnKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjcHBfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLmhwcCcpKQor
ICAgICAgICBzZWxmLmFzc2VydF8oY3BwX3N0eWxlLmNhbl9oYW5kbGUoJ2Zvby5jJykpCisgICAg
ICAgIHNlbGYuYXNzZXJ0XyhjcHBfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLmNwcCcpKQorICAgICAg
ICBzZWxmLmFzc2VydF8obm90IGNwcF9zdHlsZS5jYW5faGFuZGxlKCdmb28uY2MnKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRfKG5vdCBjcHBfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLmN4eCcpKQorICAg
ICAgICBzZWxmLmFzc2VydF8obm90IGNwcF9zdHlsZS5jYW5faGFuZGxlKCdmb28uQycpKQorICAg
ICAgICBzZWxmLmFzc2VydF8obm90IGNwcF9zdHlsZS5jYW5faGFuZGxlKCdmb28ubW0nKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjcHBfc3R5bGUuY2FuX2hhbmRsZSgnLScpKQorCisKK2Rl
ZiB0ZWFyRG93bigpOgorICAgICIiIkEgZ2xvYmFsIGNoZWNrIHRvIG1ha2Ugc3VyZSBhbGwgZXJy
b3ItY2F0ZWdvcmllcyBoYXZlIGJlZW4gdGVzdGVkLgorCisgICAgVGhlIG1haW4gdGVhckRvd24o
KSByb3V0aW5lIGlzIHRoZSBvbmx5IGNvZGUgd2UgY2FuIGd1YXJhbnRlZSB3aWxsIGJlCisgICAg
cnVuIGFmdGVyIGFsbCBvdGhlciB0ZXN0cyBoYXZlIGJlZW4gZXhlY3V0ZWQuCisgICAgIiIiCisg
ICAgdHJ5OgorICAgICAgICBpZiBfcnVuX3ZlcmlmeWFsbGNhdGVnb3JpZXNzZWVuOgorICAgICAg
ICAgICAgRXJyb3JDb2xsZWN0b3IoTm9uZSkudmVyaWZ5X2FsbF9jYXRlZ29yaWVzX2FyZV9zZWVu
KCkKKyAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAjIElmIG5vYm9keSBzZXQgdGhlIGds
b2JhbCBfcnVuX3ZlcmlmeWFsbGNhdGVnb3JpZXNzZWVuLCB0aGVuCisgICAgICAgICMgd2UgYXNz
dW1lIHdlIHNob3VsZG4ndCBydW4gdGhlIHRlc3QKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVf
XyA9PSAnX19tYWluX18nOgorICAgIGltcG9ydCBzeXMKKyAgICAjIFdlIGRvbid0IHdhbnQgdG8g
cnVuIHRoZSB2ZXJpZnlfYWxsX2NhdGVnb3JpZXNfYXJlX3NlZW4oKSB0ZXN0IHVubGVzcworICAg
ICMgd2UncmUgcnVubmluZyB0aGUgZnVsbCB0ZXN0IHN1aXRlOiBpZiB3ZSBvbmx5IHJ1biBvbmUg
dGVzdCwKKyAgICAjIG9idmlvdXNseSB3ZSdyZSBub3QgZ29pbmcgdG8gc2VlIGFsbCB0aGUgZXJy
b3IgY2F0ZWdvcmllcy4gIFNvIHdlCisgICAgIyBvbmx5IHJ1biB2ZXJpZnlfYWxsX2NhdGVnb3Jp
ZXNfYXJlX3NlZW4oKSB3aGVuIG5vIGNvbW1hbmRsaW5lIGZsYWdzCisgICAgIyBhcmUgcGFzc2Vk
IGluLgorICAgIGdsb2JhbCBfcnVuX3ZlcmlmeWFsbGNhdGVnb3JpZXNzZWVuCisgICAgX3J1bl92
ZXJpZnlhbGxjYXRlZ29yaWVzc2VlbiA9IChsZW4oc3lzLmFyZ3YpID09IDEpCisKKyAgICB1bml0
dGVzdC5tYWluKCkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY3Bw
X3N0eWxlX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY3BwX3N0eWxlX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA1Mjg0OSkKKysrIFdl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY3BwX3N0eWxlX3VuaXR0ZXN0LnB5CSh3
b3JraW5nIGNvcHkpCkBAIC00MSwxMCArNDEsMTAgQEAgaW1wb3J0IHJhbmRvbQogaW1wb3J0IHJl
CiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBjcHBfc3R5bGUKLSMgRklYTUU6IFJlbW92ZSB0aGUg
bmVlZCB0byBpbXBvcnQgc29tZXRoaW5nIGZyb20gc3R5bGUuIFNlZSB0aGUKKyMgRklYTUU6IFJl
bW92ZSB0aGUgbmVlZCB0byBpbXBvcnQgc29tZXRoaW5nIGZyb20gY2hlY2tlci4gU2VlIHRoZQog
IyAgICAgICAgRklYTUUgbm90ZXMgbmVhciB0aGUgU1RZTEVfQ0FURUdPUklFUyBkZWZpbml0aW9u
IGZvciBhCiAjICAgICAgICBzdWdnZXN0aW9uIG9uIGhvdyB0byBiZXN0IGRvIHRoaXMuCi1mcm9t
IHN0eWxlIGltcG9ydCBTVFlMRV9DQVRFR09SSUVTCitmcm9tIGNoZWNrZXIgaW1wb3J0IFNUWUxF
X0NBVEVHT1JJRVMKIAogIyBUaGlzIGNsYXNzIHdvcmtzIGFzIGFuIGVycm9yIGNvbGxlY3RvciBh
bmQgcmVwbGFjZXMgY3BwX3N0eWxlLkVycm9yCiAjIGZ1bmN0aW9uIGZvciB0aGUgdW5pdCB0ZXN0
cy4gIFdlIGFsc28gdmVyaWZ5IGVhY2ggY2F0ZWdvcnkgd2Ugc2VlCkluZGV4OiBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL3RleHRfc3R5bGUucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS90ZXh0X3N0eWxlLnB5CShyZXZpc2lvbiA1
Mjg0OSkJKGZyb20gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXh0X3N0eWxlLnB5OjUy
ODQ5KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS90ZXh0X3N0eWxlLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJE
b2VzIFdlYktpdC1saW50IG9uIHRleHQgZmlsZXMuCisKK1RoaXMgbW9kdWxlIHNoYXJlcyBlcnJv
ciBjb3VudCwgZmlsdGVyIHNldHRpbmcsIG91dHB1dCBzZXR0aW5nLCBldGMuIHdpdGggY3BwX3N0
eWxlLgorIiIiCisKK2ltcG9ydCBjb2RlY3MKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgc3lzCisK
K2ltcG9ydCBjcHBfc3R5bGUKKworCitkZWYgcHJvY2Vzc19maWxlX2RhdGEoZmlsZW5hbWUsIGxp
bmVzLCBlcnJvcik6CisgICAgIiIiUGVyZm9ybXMgbGludCBjaGVjayBmb3IgdGV4dCBvbiB0aGUg
c3BlY2lmaWVkIGxpbmVzLgorCisgICAgSXQgcmVwb3J0cyBlcnJvcnMgdG8gdGhlIGdpdmVuIGVy
cm9yIGZ1bmN0aW9uLgorICAgICIiIgorICAgIGxpbmVzID0gKFsnLy8gYWRqdXN0IGxpbmUgbnVt
YmVycyB0byBtYWtlIHRoZSBmaXJzdCBsaW5lIDEuJ10gKyBsaW5lcykKKworICAgICMgRklYTUU6
IHNoYXJlIHdpdGggY3BwX3N0eWxlLmNoZWNrX3N0eWxlKCkKKyAgICBmb3IgbGluZV9udW1iZXIs
IGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzKToKKyAgICAgICAgaWYgJ1x0JyBpbiBsaW5lOgorICAg
ICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS90YWInLCA1
LCAnTGluZSBjb250YWlucyB0YWIgY2hhcmFjdGVyLicpCisKKworZGVmIHByb2Nlc3NfZmlsZShm
aWxlbmFtZSwgZXJyb3I9Y3BwX3N0eWxlLmVycm9yKToKKyAgICAiIiJQZXJmb3JtcyBsaW50IGNo
ZWNrIGZvciB0ZXh0IG9uIGEgc2luZ2xlIGZpbGUuIiIiCisgICAgaWYgKG5vdCBjYW5faGFuZGxl
KGZpbGVuYW1lKSk6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0lnbm9yaW5nICVzOyBub3Qg
YSBzdXBwb3J0ZWQgZmlsZVxuJyAlIGZpbGVuYW1lKQorICAgICAgICByZXR1cm4KKworICAgICMg
RklYTUU6IHNoYXJlIGNvZGUgd2l0aCBjcHBfc3R5bGUucHJvY2Vzc19maWxlKCkuCisgICAgdHJ5
OgorICAgICAgICAjIERvIG5vdCBzdXBwb3J0IGZvciBmaWxlbmFtZT0nLScuIGNwcF9zdHlsZSBo
YW5kbGVzIGl0LgorICAgICAgICBsaW5lcyA9IGNvZGVjcy5vcGVuKGZpbGVuYW1lLCAncicsICd1
dGY4JywgJ3JlcGxhY2UnKS5yZWFkKCkuc3BsaXQoJ1xuJykKKyAgICBleGNlcHQgSU9FcnJvcjoK
KyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiU2tpcHBpbmcgaW5wdXQgJyVzJzogQ2FuJ3Qgb3Bl
biBmb3IgcmVhZGluZ1xuIiAlIGZpbGVuYW1lKQorICAgICAgICByZXR1cm4KKyAgICBwcm9jZXNz
X2ZpbGVfZGF0YShmaWxlbmFtZSwgbGluZXMsIGVycm9yKQorCisKK2RlZiBjYW5faGFuZGxlKGZp
bGVuYW1lKToKKyAgICAiIiJDaGVja3MgaWYgdGhpcyBtb2R1bGUgc3VwcG9ydHMgdGhlIHNwZWNp
ZmllZCBmaWxlIHR5cGUuCisKKyAgICBBcmdzOgorICAgICAgZmlsZW5hbWU6IEEgZmlsZW5hbWUu
IEl0IG1heSBjb250YWluIGRpcmVjdG9yeSBuYW1lcy4KKyAgICAiIiIKKyAgICByZXR1cm4gKCJD
aGFuZ2VMb2ciIGluIGZpbGVuYW1lCisgICAgICAgICAgICBvciAiV2ViS2l0VG9vbHMvU2NyaXB0
cy8iIGluIGZpbGVuYW1lCisgICAgICAgICAgICBvciBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1l
KVsxXSBpbiAoJy5jc3MnLCAnLmh0bWwnLCAnLmlkbCcsICcuanMnLCAnLm1tJywgJy5waHAnLCAn
LnBtJywgJy5weScsICcudHh0JykpIGFuZCBub3QgIkxheW91dFRlc3RzLyIgaW4gZmlsZW5hbWUK
SW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvdGV4dF9zdHlsZV91bml0
dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxl
L3RleHRfc3R5bGVfdW5pdHRlc3QucHkJKHJldmlzaW9uIDUyODQ5KQkoZnJvbSBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3RleHRfc3R5bGVfdW5pdHRlc3QucHk6NTI4NDkpCisrKyBXZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL3RleHRfc3R5bGVfdW5pdHRlc3QucHkJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTIgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisjIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisj
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworIiIiVW5pdCB0ZXN0IGZvciB0ZXh0X3N0eWxlLnB5LiIiIgorCitpbXBvcnQg
dW5pdHRlc3QKKworaW1wb3J0IHRleHRfc3R5bGUKKworCitjbGFzcyBUZXh0U3R5bGVUZXN0Q2Fz
ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdENhc2UgZm9yIHRleHRfc3R5bGUucHki
IiIKKworICAgIGRlZiBhc3NlcnROb0Vycm9yKHNlbGYsIGxpbmVzKToKKyAgICAgICAgIiIiQXNz
ZXJ0cyB0aGF0IHRoZSBzcGVjaWZpZWQgbGluZXMgaGFzIG5vIGVycm9ycy4iIiIKKyAgICAgICAg
c2VsZi5oYWRfZXJyb3IgPSBGYWxzZQorCisgICAgICAgIGRlZiBlcnJvcl9mb3JfdGVzdChmaWxl
bmFtZSwgbGluZV9udW1iZXIsIGNhdGVnb3J5LCBjb25maWRlbmNlLCBtZXNzYWdlKToKKyAgICAg
ICAgICAgICIiIlJlY29yZHMgaWYgYW4gZXJyb3Igb2NjdXJzLiIiIgorICAgICAgICAgICAgc2Vs
Zi5oYWRfZXJyb3IgPSBUcnVlCisKKyAgICAgICAgdGV4dF9zdHlsZS5wcm9jZXNzX2ZpbGVfZGF0
YSgnJywgbGluZXMsIGVycm9yX2Zvcl90ZXN0KQorICAgICAgICBzZWxmLmFzc2VydF8obm90IHNl
bGYuaGFkX2Vycm9yLCAnJXMgc2hvdWxkIG5vdCBoYXZlIGFueSBlcnJvcnMuJyAlIGxpbmVzKQor
CisgICAgZGVmIGFzc2VydEVycm9yKHNlbGYsIGxpbmVzLCBleHBlY3RlZF9saW5lX251bWJlcik6
CisgICAgICAgICIiIkFzc2VydHMgdGhhdCB0aGUgc3BlY2lmaWVkIGxpbmVzIGhhcyBhbiBlcnJv
ci4iIiIKKyAgICAgICAgc2VsZi5oYWRfZXJyb3IgPSBGYWxzZQorCisgICAgICAgIGRlZiBlcnJv
cl9mb3JfdGVzdChmaWxlbmFtZSwgbGluZV9udW1iZXIsIGNhdGVnb3J5LCBjb25maWRlbmNlLCBt
ZXNzYWdlKToKKyAgICAgICAgICAgICIiIkNoZWNrcyBpZiB0aGUgZXhwZWN0ZWQgZXJyb3Igb2Nj
dXJzLiIiIgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRfbGluZV9udW1i
ZXIsIGxpbmVfbnVtYmVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ3doaXRlc3Bh
Y2UvdGFiJywgY2F0ZWdvcnkpCisgICAgICAgICAgICBzZWxmLmhhZF9lcnJvciA9IFRydWUKKwor
ICAgICAgICB0ZXh0X3N0eWxlLnByb2Nlc3NfZmlsZV9kYXRhKCcnLCBsaW5lcywgZXJyb3JfZm9y
X3Rlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLmhhZF9lcnJvciwgJyVzIHNob3VsZCBo
YXZlIGFuIGVycm9yIFt3aGl0ZXNwYWNlL3RhYl0uJyAlIGxpbmVzKQorCisKKyAgICBkZWYgdGVz
dF9ub19lcnJvcihzZWxmKToKKyAgICAgICAgIiIiVGVzdHMgZm9yIG5vIGVycm9yIGNhc2VzLiIi
IgorICAgICAgICBzZWxmLmFzc2VydE5vRXJyb3IoWycnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRO
b0Vycm9yKFsnYWJjIGRlZicsICdnZ2cnXSkKKworCisgICAgZGVmIHRlc3RfZXJyb3Ioc2VsZik6
CisgICAgICAgICIiIlRlc3RzIGZvciBlcnJvciBjYXNlcy4iIiIKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcnJvcihbJzIwMDktMTItMTZcdEtlbnQgVGFtdXJhXHQ8dGtlbnRAY2hyb21pdW0ub3JnPidd
LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVycm9yKFsnMjAwOS0xMi0xNiBLZW50IFRhbXVyYSA8
dGtlbnRAY2hyb21pdW0ub3JnPicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICcnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAnXHRSZXZpZXdlZCBieSBOT0JPRFkuJ10sIDMpCisKKwor
ICAgIGRlZiB0ZXN0X2Nhbl9oYW5kbGUoc2VsZik6CisgICAgICAgICIiIlRlc3RzIGZvciB0ZXh0
X3N0eWxlLmNhbl9oYW5kbGUoKS4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB0ZXh0X3N0
eWxlLmNhbl9oYW5kbGUoJycpKQorICAgICAgICBzZWxmLmFzc2VydF8obm90IHRleHRfc3R5bGUu
Y2FuX2hhbmRsZSgnLScpKQorICAgICAgICBzZWxmLmFzc2VydF8odGV4dF9zdHlsZS5jYW5faGFu
ZGxlKCdDaGFuZ2VMb2cnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKHRleHRfc3R5bGUuY2FuX2hh
bmRsZSgnV2ViQ29yZS9DaGFuZ2VMb2cnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKHRleHRfc3R5
bGUuY2FuX2hhbmRsZSgnRm9vQ2hhbmdlTG9nLmJhaycpKQorICAgICAgICBzZWxmLmFzc2VydF8o
dGV4dF9zdHlsZS5jYW5faGFuZGxlKCdXZWJLaXRUb29scy9TY3JpcHRzL2NoZWNrLXdlYmtpdD1z
dHlsZScpKQorICAgICAgICBzZWxmLmFzc2VydF8odGV4dF9zdHlsZS5jYW5faGFuZGxlKCdXZWJL
aXRUb29scy9TY3JpcHRzL21vZHVsZXMvdGV4dF9zdHlsZS5weScpKQorICAgICAgICBzZWxmLmFz
c2VydF8obm90IHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnV2ViS2l0VG9vbHMvU2NyaXB0cycpKQor
CisgICAgICAgIHNlbGYuYXNzZXJ0Xyh0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ2Zvby5jc3MnKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRfKHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLmh0bWwnKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRfKHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLmlkbCcpKQor
ICAgICAgICBzZWxmLmFzc2VydF8odGV4dF9zdHlsZS5jYW5faGFuZGxlKCdmb28uanMnKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRfKHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcycpKQorICAgICAgICBzZWxmLmFzc2VydF8odGV4dF9z
dHlsZS5jYW5faGFuZGxlKCdmb28ubW0nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKHRleHRfc3R5
bGUuY2FuX2hhbmRsZSgnZm9vLnBocCcpKQorICAgICAgICBzZWxmLmFzc2VydF8odGV4dF9zdHls
ZS5jYW5faGFuZGxlKCdmb28ucG0nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKHRleHRfc3R5bGUu
Y2FuX2hhbmRsZSgnZm9vLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0Xyh0ZXh0X3N0eWxlLmNh
bl9oYW5kbGUoJ2Zvby50eHQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB0ZXh0X3N0eWxl
LmNhbl9oYW5kbGUoJ2Zvby5jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgdGV4dF9zdHls
ZS5jYW5faGFuZGxlKCdmb28uYycpKQorICAgICAgICBzZWxmLmFzc2VydF8obm90IHRleHRfc3R5
bGUuY2FuX2hhbmRsZSgnZm9vLmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB0ZXh0X3N0
eWxlLmNhbl9oYW5kbGUoJ2Zvby5wbmcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB0ZXh0
X3N0eWxlLmNhbl9oYW5kbGUoJ2Zvby5jL2Jhci5wbmcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRf
KG5vdCB0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ1dlYktpdC9FbmdsaXNoLmxwcm9qL0xvY2FsaXph
YmxlLnN0cmluZ3MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB0ZXh0X3N0eWxlLmNhbl9o
YW5kbGUoJ01ha2VmaWxlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgdGV4dF9zdHlsZS5j
YW5faGFuZGxlKCdXZWJDb3JlL0FuZHJvaWQubWsnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKG5v
dCB0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ0xheW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xlLXRl
c3RzLmpzJykpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5t
YWluKCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>