<?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>114668</bug_id>
          
          <creation_ts>2013-04-16 01:06:57 -0700</creation_ts>
          <short_desc>Move webkitpy.layout_tests.port to webkitpy.port</short_desc>
          <delta_ts>2013-04-16 02:08:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>benjamin</cc>
    
    <cc>dpranke</cc>
    
    <cc>koivisto</cc>
    
    <cc>mjs</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>876377</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-04-16 01:06:57 -0700</bug_when>
    <thetext>Move webkitpy.layout_tests.port to webkitpy.port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876380</commentid>
    <comment_count>1</comment_count>
      <attachid>198272</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-04-16 01:08:07 -0700</bug_when>
    <thetext>Created attachment 198272
Move webkitpy.layout_tests.port to webkitpy.port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876384</commentid>
    <comment_count>2</comment_count>
      <attachid>198272</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2013-04-16 01:15:16 -0700</bug_when>
    <thetext>Comment on attachment 198272
Move webkitpy.layout_tests.port to webkitpy.port

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876394</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-04-16 01:34:45 -0700</bug_when>
    <thetext>Committed r148502: &lt;http://trac.webkit.org/changeset/148502&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876405</commentid>
    <comment_count>4</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-04-16 02:07:20 -0700</bug_when>
    <thetext>This patch killed the Qt EWS with the following error message and it 
needed manual kick:

ImportError: No module named port.factory
rm: cannot remove `qt-ews.log&apos;: No such file or directory
fatal: ambiguous argument &apos;trunk&apos;: unknown revision or path not in the working tree.
Use &apos;--&apos; to separate paths from revisions
Not removing Tools/Scripts/webkitpy/layout_tests/port/
No rebase in progress?
Tools/ChangeLog: needs update
Tools/Scripts/webkitpy/common/host.py: needs update
Tools/Scripts/webkitpy/common/host_mock.py: needs update
Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py: needs update
Tools/Scripts/webkitpy/layout_tests/controllers/single_test_runner.py: needs update
Tools/Scripts/webkitpy/layout_tests/controllers/test_result_writer_unittest.py: needs update
Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py: needs update
Tools/Scripts/webkitpy/layout_tests/lint_test_expectations.py: needs update
Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py: needs update
Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py: needs update
Tools/Scripts/webkitpy/layout_tests/servers/apache_http_server_unittest.py: needs update
Tools/Scripts/webkitpy/layout_tests/servers/http_server_base_unittest.py: needs update
Tools/Scripts/webkitpy/layout_tests/servers/http_server_unittest.py: needs update
Tools/Scripts/webkitpy/layout_tests/views/printing_unittest.py: needs update
Tools/Scripts/webkitpy/performance_tests/perftest.py: needs update
Tools/Scripts/webkitpy/performance_tests/perftest_unittest.py: needs update
Tools/Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py: needs update
Tools/Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py: needs update
Tools/Scripts/webkitpy/tool/bot/botinfo_unittest.py: needs update
Tools/Scripts/webkitpy/tool/commands/gardenomatic.py: needs update
Tools/Scripts/webkitpy/tool/commands/perfalizer_unittest.py: needs update
Tools/Scripts/webkitpy/tool/commands/queries.py: needs update
Tools/Scripts/webkitpy/tool/commands/queries_unittest.py: needs update
Tools/Scripts/webkitpy/tool/commands/rebaseline.py: needs update
Tools/Scripts/webkitpy/tool/servers/gardeningserver.py: needs update
Tools/Scripts/webkitpy/tool/servers/gardeningserver_unittest.py: needs update
Tools/Scripts/webkitpy/tool/servers/rebaselineserver.py: needs update
Tools/Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py: needs update
update-index --refresh: command returned error: 1

Traceback (most recent call last):
  File &quot;/home/webkit/WebKit/Tools/Scripts/webkitpy/test/main.py&quot;, line 39, in &lt;module&gt;
    from webkitpy.test.runner import Runner, unit_test_name
  File &quot;/home/webkit/WebKit/Tools/Scripts/webkitpy/test/runner.py&quot;, line 29, in &lt;module&gt;
    from webkitpy.common import message_pool
  File &quot;/home/webkit/WebKit/Tools/Scripts/webkitpy/common/message_pool.py&quot;, line 52, in &lt;module&gt;
    from webkitpy.common.host import Host
  File &quot;/home/webkit/WebKit/Tools/Scripts/webkitpy/common/host.py&quot;, line 40, in &lt;module&gt;
    from webkitpy.port.factory import PortFactory
ImportError: No module named port.factory
Traceback (most recent call last):
  File &quot;./Tools/Scripts/webkit-patch&quot;, line 44, in &lt;module&gt;
    from webkitpy.tool.main import WebKitPatch
  File &quot;/home/webkit/WebKit/Tools/Scripts/webkitpy/tool/main.py&quot;, line 37, in &lt;module&gt;
    from webkitpy.common.host import Host
  File &quot;/home/webkit/WebKit/Tools/Scripts/webkitpy/common/host.py&quot;, line 40, in &lt;module&gt;
    from webkitpy.port.factory import PortFactory
ImportError: No module named port.factory
rm: cannot remove `qt-ews.log&apos;: No such file or directory
fatal: ambiguous argument &apos;trunk&apos;: unknown revision or path not in the working tree.
Use &apos;--&apos; to separate paths from revisions

...

It would be great if we can fix https://bugs.webkit.org/show_bug.cgi?id=97647 once ....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876408</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-04-16 02:08:46 -0700</bug_when>
    <thetext>Yeah, the problem appears to be that this patch didn’t apply cleaningly :( So it applied half way through and when EWS tried to unapply, it choked on that module.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198272</attachid>
            <date>2013-04-16 01:08:07 -0700</date>
            <delta_ts>2013-04-16 01:15:16 -0700</delta_ts>
            <desc>Move webkitpy.layout_tests.port to webkitpy.port</desc>
            <filename>bug-114668-20130416010739.patch</filename>
            <type>text/plain</type>
            <size>471255</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE0ODQ5OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDcwIEBACisyMDEzLTA0LTE2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIE1vdmUgd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgdG8gd2Via2l0cHkucG9y
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0NjY4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQu
IFBvcnQgb2JqZWN0cyBrbm93cyBhIGxvdCBtb3JlIHRoYW4ganVzdCBsYXlvdXRfdGVzdHMuIFRo
ZXkgZG9lc24ndCBiZWxvbmcgZG93biBpbiBsYXlvdXRfdGVzdHMuCisKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9ob3N0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL2hvc3RfbW9jay5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXJfdW5pdHRlc3QucHk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvc2luZ2xlX3Rlc3Rf
cnVubmVyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRy
b2xsZXJzL3Rlc3RfcmVzdWx0X3dyaXRlcl91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJh
dG9yX3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xpbnRfdGVzdF9leHBlY3RhdGlvbnMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydDogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvYXBhY2hlX2h0dHBf
c2VydmVyX3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3NlcnZlcnMvaHR0cF9zZXJ2ZXJfYmFzZV91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL2h0dHBfc2VydmVyX3VuaXR0ZXN0LnB5
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3ZpZXdzL3ByaW50aW5n
X3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVz
dHMvcGVyZnRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90
ZXN0cy9wZXJmdGVzdF91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Bl
cmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lcl9pbnRlZ3JhdGlvbnRlc3QucHk6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXJf
dW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0OiBDb3BpZWQgZnJv
bSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0LgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvcG9ydC9hcHBsZS5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvYmFzZS5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZV91bml0
dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvY29uZmlnX3VuaXR0ZXN0
LnB5OgorICAgICAgICAoQ29uZmlnVGVzdC50ZXN0X2RlZmF1bHRfY29uZmlndXJhdGlvbl9fc3Rh
bmRhbG9uZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVz
dC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZWZsLnB5OgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvcG9ydC9lZmxfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9wb3J0L2ZhY3RvcnkucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9w
b3J0L2ZhY3RvcnlfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0
L2d0ay5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrX3VuaXR0ZXN0LnB5
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pbWFnZV9kaWZmLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pbWFnZV9kaWZmX3VuaXR0ZXN0LnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9sZWFrZGV0ZWN0b3JfdW5pdHRlc3QucHk6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L21hYy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3BvcnQvbWFjX3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
cG9ydC9tb2NrX2RydC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvbW9ja19k
cnRfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3BvcnRfdGVz
dGNhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3F0LnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9xdF91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3NfdW5pdHRlc3QucHk6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9wb3J0L3Rlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9wb3J0L3dpbi5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luX3VuaXR0
ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC94dmZiZHJpdmVyLnB5Ogor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC94dmZiZHJpdmVyX3VuaXR0ZXN0LnB5Ogor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9ib3QvYm90aW5mb191bml0dGVzdC5weToK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZ2FyZGVub21hdGljLnB5
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9wZXJmYWxpemVyX3Vu
aXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVy
aWVzLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVz
X3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9y
ZWJhc2VsaW5lLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2dh
cmRlbmluZ3NlcnZlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVy
cy9nYXJkZW5pbmdzZXJ2ZXJfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS90b29sL3NlcnZlcnMvcmViYXNlbGluZXNlcnZlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvc2VydmVycy9yZWJhc2VsaW5lc2VydmVyX3VuaXR0ZXN0LnB5OgorCiAyMDEz
LTA0LTEzICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIElzb2xh
dGUgRWFybHkgV2FybmluZyBTeXN0ZW0gZGVmaW5pdGlvbnMgaW50byBhIEpTT04KSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2hvc3QucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vaG9zdC5weQkocmV2aXNpb24gMTQ4NDk3KQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vaG9zdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzcs
NyArMzcsNyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5tZW1vaXplZCBpbXBvcnQgbWVtCiBmcm9t
IHdlYmtpdHB5LmNvbW1vbi5uZXQgaW1wb3J0IGJ1Z3ppbGxhLCBidWlsZGJvdCwgd2ViCiBmcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9zdAogZnJv
bSB3ZWJraXRweS5jb21tb24ud2F0Y2hsaXN0LndhdGNobGlzdHBhcnNlciBpbXBvcnQgV2F0Y2hM
aXN0UGFyc2VyCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmZhY3RvcnkgaW1wb3J0
IFBvcnRGYWN0b3J5Citmcm9tIHdlYmtpdHB5LnBvcnQuZmFjdG9yeSBpbXBvcnQgUG9ydEZhY3Rv
cnkKIAogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9ob3N0X21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vaG9zdF9tb2NrLnB5CShyZXZpc2lvbiAxNDg0OTcpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9ob3N0X21vY2sucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDggKzM1LDggQEAgZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhv
c3RfbQogZnJvbSB3ZWJraXRweS5jb21tb24ud2F0Y2hsaXN0LndhdGNobGlzdF9tb2NrIGltcG9y
dCBNb2NrV2F0Y2hMaXN0CiAKICMgTmV3LXN0eWxlIHBvcnRzIG5lZWQgdG8gbW92ZSBkb3duIGlu
dG8gd2Via2l0cHkuY29tbW9uLgotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5mYWN0
b3J5IGltcG9ydCBQb3J0RmFjdG9yeQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC50
ZXN0IGltcG9ydCBhZGRfdW5pdF90ZXN0c190b19tb2NrX2ZpbGVzeXN0ZW0KK2Zyb20gd2Via2l0
cHkucG9ydC5mYWN0b3J5IGltcG9ydCBQb3J0RmFjdG9yeQorZnJvbSB3ZWJraXRweS5wb3J0LnRl
c3QgaW1wb3J0IGFkZF91bml0X3Rlc3RzX3RvX21vY2tfZmlsZXN5c3RlbQogCiAKIGNsYXNzIE1v
Y2tIb3N0KE1vY2tTeXN0ZW1Ib3N0KToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xpbnRfdGVzdF9leHBlY3RhdGlvbnMucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGludF90ZXN0X2V4cGVjdGF0aW9ucy5weQko
cmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGludF90ZXN0X2V4cGVjdGF0aW9ucy5weQkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBA
QCBpbXBvcnQgdHJhY2ViYWNrCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLmhvc3QgaW1wb3J0IEhv
c3QKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscyBpbXBvcnQgdGVzdF9leHBlY3Rh
dGlvbnMKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IHBsYXRmb3JtX29w
dGlvbnMKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgcGxhdGZvcm1fb3B0aW9ucwogCiAKICMg
VGhpcyBtaXJyb3JzIHdoYXQgdGhlIHNoZWxsIG5vcm1hbGx5IGRvZXMuCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVz
dHMucHkJKHJldmlzaW9uIDE0ODQ5NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcg
QEAgaW1wb3J0IHRyYWNlYmFjawogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBI
b3N0CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycy5tYW5hZ2VyIGltcG9y
dCBNYW5hZ2VyCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBjb25maWd1
cmF0aW9uX29wdGlvbnMsIHBsYXRmb3JtX29wdGlvbnMKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBv
cnQgY29uZmlndXJhdGlvbl9vcHRpb25zLCBwbGF0Zm9ybV9vcHRpb25zCiBmcm9tIHdlYmtpdHB5
LmxheW91dF90ZXN0cy52aWV3cyBpbXBvcnQgYnVpbGRib3RfcmVzdWx0cwogZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMudmlld3MgaW1wb3J0IHByaW50aW5nCiAKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5CShyZXZpc2lvbiAxNDg0OTcpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVn
cmF0aW9udGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtNDgsMTAgKzQ4LDEwIEBAIGZyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0IGkKIGZyb20gd2Via2l0cHkuY29tbW9uLmhv
c3QgaW1wb3J0IEhvc3QKIGZyb20gd2Via2l0cHkuY29tbW9uLmhvc3RfbW9jayBpbXBvcnQgTW9j
a0hvc3QKIAotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKK2Zyb20gd2Vi
a2l0cHkgaW1wb3J0IHBvcnQKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBydW5f
d2Via2l0X3Rlc3RzCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBQb3J0
Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCB0ZXN0Citmcm9tIHdlYmtp
dHB5LnBvcnQgaW1wb3J0IFBvcnQKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgdGVzdAogZnJv
bSB3ZWJraXRweS50ZXN0LnNraXAgaW1wb3J0IHNraXBfaWYKIGZyb20gd2Via2l0cHkudG9vbC5t
b2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyX3VuaXR0ZXN0LnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRy
b2xsZXJzL2xheW91dF90ZXN0X3J1bm5lcl91bml0dGVzdC5weQkocmV2aXNpb24gMTQ4NDk3KQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0
X3Rlc3RfcnVubmVyX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBA
IGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscyBpbXBvcnQKIGZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X3J1bl9yZXN1bHRzIGltcG9ydCBUZXN0UnVuUmVzdWx0
cwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfaW5wdXQgaW1wb3J0IFRl
c3RJbnB1dAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfcmVzdWx0cyBp
bXBvcnQgVGVzdFJlc3VsdAotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC50ZXN0IGlt
cG9ydCBUZXN0UG9ydAorZnJvbSB3ZWJraXRweS5wb3J0LnRlc3QgaW1wb3J0IFRlc3RQb3J0CiAK
IAogVGVzdEV4cGVjdGF0aW9ucyA9IHRlc3RfZXhwZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvbnMK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3Np
bmdsZV90ZXN0X3J1bm5lci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9zaW5nbGVfdGVzdF9ydW5uZXIucHkJKHJldmlzaW9u
IDE0ODQ5NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xs
ZXJzL3NpbmdsZV90ZXN0X3J1bm5lci5weQkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBA
QCBpbXBvcnQgcmUKIGltcG9ydCB0aW1lCiAKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmNv
bnRyb2xsZXJzIGltcG9ydCB0ZXN0X3Jlc3VsdF93cml0ZXIKLWZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLnBvcnQuZHJpdmVyIGltcG9ydCBEcml2ZXJJbnB1dCwgRHJpdmVyT3V0cHV0Citmcm9t
IHdlYmtpdHB5LnBvcnQuZHJpdmVyIGltcG9ydCBEcml2ZXJJbnB1dCwgRHJpdmVyT3V0cHV0CiBm
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25z
CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMgaW1wb3J0IHRlc3RfZmFpbHVyZXMK
IGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X3Jlc3VsdHMgaW1wb3J0IFRl
c3RSZXN1bHQKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRy
b2xsZXJzL3Rlc3RfcmVzdWx0X3dyaXRlcl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy90ZXN0X3Jlc3VsdF93
cml0ZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDE0ODQ5NykKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3Rlc3RfcmVzdWx0X3dyaXRlcl91bml0dGVz
dC5weQkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQCBpbXBvcnQgdW5pdHRlc3QyIGFz
IHVuaXR0ZXN0CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0X21vY2sgaW1wb3J0IE1vY2tIb3N0
CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycyBpbXBvcnQgdGVzdF9yZXN1
bHRfd3JpdGVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMgaW1wb3J0IHRlc3Rf
ZmFpbHVyZXMKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuZHJpdmVyIGltcG9ydCBE
cml2ZXJPdXRwdXQKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQudGVzdCBpbXBvcnQg
VGVzdFBvcnQKK2Zyb20gd2Via2l0cHkucG9ydC5kcml2ZXIgaW1wb3J0IERyaXZlck91dHB1dAor
ZnJvbSB3ZWJraXRweS5wb3J0LnRlc3QgaW1wb3J0IFRlc3RQb3J0CiAKIAogY2xhc3MgVGVzdFJl
c3VsdFdyaXRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRv
cl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yX3VuaXR0ZXN0LnB5
CShyZXZpc2lvbiAxNDg0OTcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yX3VuaXR0ZXN0LnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIGltcG9ydCByYW5kb20KIGZyb20gd2Via2l0cHku
Y29tbW9uLmhvc3RfbW9jayBpbXBvcnQgTW9ja0hvc3QKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rl
c3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yCiBmcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCi1mcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCB0ZXN0Citmcm9tIHdlYmtpdHB5LnBv
cnQgaW1wb3J0IHRlc3QKIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBNb2Nr
CiAKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9fX2lu
aXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L19faW5pdF9fLnB5CShyZXZpc2lvbiAxNDg0OTcpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0x
LDM1ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBk
aXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0j
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0j
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJQb3J0LXNwZWNpZmljIGVudHJ5cG9p
bnRzIGZvciB0aGUgbGF5b3V0IHRlc3RzIHRlc3QgaW5mcmFzdHJ1Y3R1cmUuIiIiCi0KLWltcG9y
dCBidWlsZGVycyAgIyBXaHkgaXMgdGhpcyBpbiBwb3J0PwotCi1mcm9tIGJhc2UgaW1wb3J0IFBv
cnQgICMgSXQncyBwb3NzaWJsZSB3ZSBkb24ndCBuZWVkIHRvIGV4cG9ydCB0aGlzIHZpcnR1YWwg
YmFzZWNsYXNzIG91dHNpZGUgdGhlIG1vZHVsZS4KLWZyb20gZHJpdmVyIGltcG9ydCBEcml2ZXIs
IERyaXZlcklucHV0LCBEcml2ZXJPdXRwdXQKLWZyb20gZmFjdG9yeSBpbXBvcnQgcGxhdGZvcm1f
b3B0aW9ucywgY29uZmlndXJhdGlvbl9vcHRpb25zCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2FwcGxlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBwbGUucHkJKHJldmlzaW9uIDE0ODQ5NykK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBwbGUucHkJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTA4ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIEdvb2ds
ZSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IGxvZ2dpbmcK
LQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5iYXNlIGltcG9ydCBQb3J0Ci1mcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9jb25maWd1cmF0aW9uIGltcG9ydCBU
ZXN0Q29uZmlndXJhdGlvbgotCi0KLV9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykK
LQotCi1jbGFzcyBBcHBsZVBvcnQoUG9ydCk6Ci0gICAgIiIiU2hhcmVkIGxvZ2ljIGJldHdlZW4g
YWxsIG9mIEFwcGxlJ3MgcG9ydHMuIiIiCi0KLSAgICAjIFRoaXMgaXMgdXNlZCB0byByZXByZXNl
bnQgdGhlIHZlcnNpb24gb2YgYW4gb3BlcmF0aW5nIHN5c3RlbQotICAgICMgY29ycmVzcG9uZGlu
ZyB0byB0aGUgIm1hYyIgb3IgIndpbiIgYmFzZSBMYXlvdXRUZXN0cy9wbGF0Zm9ybQotICAgICMg
ZGlyZWN0b3J5LiAgSSdtIG5vdCBzdXJlIHRoaXMgY29uY2VwdCBpcyB2ZXJ5IHVzZWZ1bCwKLSAg
ICAjIGJ1dCBpdCBnaXZlcyB1cyBhIHdheSB0byByZWZlciB0byBmYWxsYmFjayBwYXRocyAqb25s
eSogaW5jbHVkaW5nCi0gICAgIyB0aGUgYmFzZSBkaXJlY3RvcnkuCi0gICAgIyBUaGlzIGlzIG1v
c3RseSBkb25lIGJlY2F1c2UgVGVzdENvbmZpZ3VyYXRpb24gYXNzdW1lcyB0aGF0IHNlbGYudmVy
c2lvbigpCi0gICAgIyB3aWxsIG5ldmVyIHJldHVybiBOb25lLiAoTm9uZSB3b3VsZCBiZSBhbm90
aGVyIHdheSB0byByZXByZXNlbnQgdGhpcyBjb25jZXB0LikKLSAgICAjIEFwcGxlIHN1cHBvc2Vk
bHkgaGFzIGV4cGxpY2l0ICJmdXR1cmUiIHJlc3VsdHMgd2hpY2ggYXJlIGtlcHQgaW4gYW4gaW50
ZXJuYWwgcmVwb3NpdG9yeS4KLSAgICAjIEl0J3MgcG9zc2libGUgdGhhdCBBcHBsZSB3b3VsZCB3
YW50IHRvIGZpeCB0aGlzIGNvZGUgdG8gd29yayBiZXR0ZXIgd2l0aCB0aG9zZSByZXN1bHRzLgot
ICAgIEZVVFVSRV9WRVJTSU9OID0gJ2Z1dHVyZScgICMgRklYTUU6IFRoaXMgd2hvbGUgJ2Z1dHVy
ZScgdGhpbmcgZmVlbHMgbGlrZSBhIGhhY2suCi0KLSAgICAjIG92ZXJyaWRkZW4gaW4gc3ViY2xh
c3NlcwotICAgIFZFUlNJT05fRkFMTEJBQ0tfT1JERVIgPSBbXQotICAgIEFSQ0hJVEVDVFVSRVMg
PSBbXQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRldGVybWluZV9mdWxsX3BvcnRfbmFt
ZShjbHMsIGhvc3QsIG9wdGlvbnMsIHBvcnRfbmFtZSk6Ci0gICAgICAgIG9wdGlvbnMgPSBvcHRp
b25zIG9yIHt9Ci0gICAgICAgIGlmIHBvcnRfbmFtZSBpbiAoY2xzLnBvcnRfbmFtZSwgY2xzLnBv
cnRfbmFtZSArICctd2syJyk6Ci0gICAgICAgICAgICAjIElmIHRoZSBwb3J0X25hbWUgbWF0Y2hl
cyB0aGUgKGJhZGx5IG5hbWVkKSBjbHMucG9ydF9uYW1lLCB0aGF0Ci0gICAgICAgICAgICAjIG1l
YW5zIHRoYXQgdGhleSBwYXNzZWQgJ21hYycgb3IgJ3dpbicgYW5kIGRpZG4ndCBzcGVjaWZ5IGEg
dmVyc2lvbi4KLSAgICAgICAgICAgICMgVGhhdCBjb252ZW50aW9uIG1lYW5zIHRoYXQgd2UncmUg
c3VwcG9zZWQgdG8gdXNlIHRoZSB2ZXJzaW9uIGN1cnJlbnRseQotICAgICAgICAgICAgIyBiZWlu
ZyBydW4sIHNvIHRoaXMgd29uJ3Qgd29yayBpZiB5b3UncmUgbm90IG9uIG1hYyBvciB3aW4gKHJl
c3BlY3RpdmVseSkuCi0gICAgICAgICAgICAjIElmIHlvdSdyZSBub3Qgb24gdGhlIG8vcyBpbiBx
dWVzdGlvbiwgeW91IG11c3Qgc3BlY2lmeSBhIGZ1bGwgdmVyc2lvbiBvciAtZnV0dXJlIChjZi4g
YWJvdmUpLgotICAgICAgICAgICAgYXNzZXJ0IGhvc3QucGxhdGZvcm0ub3NfbmFtZSBpbiBwb3J0
X25hbWUsICIlcyBpcyBub3QgaW4gJXMhIiAlIChob3N0LnBsYXRmb3JtLm9zX25hbWUsIHBvcnRf
bmFtZSkKLSAgICAgICAgICAgIGlmIHBvcnRfbmFtZSA9PSBjbHMucG9ydF9uYW1lIGFuZCBub3Qg
Z2V0YXR0cihvcHRpb25zLCAnd2Via2l0X3Rlc3RfcnVubmVyJywgRmFsc2UpOgotICAgICAgICAg
ICAgICAgIHBvcnRfbmFtZSA9IGNscy5wb3J0X25hbWUgKyAnLScgKyBob3N0LnBsYXRmb3JtLm9z
X3ZlcnNpb24KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcG9ydF9uYW1lID0g
Y2xzLnBvcnRfbmFtZSArICctJyArIGhvc3QucGxhdGZvcm0ub3NfdmVyc2lvbiArICctd2syJwot
ICAgICAgICBlbGlmIGdldGF0dHIob3B0aW9ucywgJ3dlYmtpdF90ZXN0X3J1bm5lcicsIEZhbHNl
KSBhbmQgICctd2syJyBub3QgaW4gcG9ydF9uYW1lOgotICAgICAgICAgICAgcG9ydF9uYW1lICs9
ICctd2syJwotCi0gICAgICAgIHJldHVybiBwb3J0X25hbWUKLQotICAgIGRlZiBfc3RyaXBfcG9y
dF9uYW1lX3ByZWZpeChzZWxmLCBwb3J0X25hbWUpOgotICAgICAgICAjIENhbGxlcnMgdHJlYXQg
dGhpcyByZXR1cm4gdmFsdWUgYXMgdGhlICJ2ZXJzaW9uIiwgd2hpY2ggb25seSB3b3JrcwotICAg
ICAgICAjIGJlY2F1c2UgQXBwbGUgcG9ydHMgdXNlIGEgc2ltcGxlIG5hbWUtdmVyc2lvbiBwb3J0
X25hbWUgc2NoZW1lLgotICAgICAgICAjIEZJWE1FOiBUaGlzIHBhcnNpbmcgd291bGRuJ3QgYmUg
bmVlZGVkIGlmIHBvcnRfbmFtZSBoYW5kbGluZyB3YXMgbW92ZWQgdG8gZmFjdG9yeS5weQotICAg
ICAgICAjIGluc3RlYWQgb2YgdGhlIGluZGl2aWR1YWwgcG9ydCBjb25zdHJ1Y3RvcnMuCi0gICAg
ICAgIHJldHVybiBwb3J0X25hbWVbbGVuKHNlbGYucG9ydF9uYW1lICsgJy0nKTpdCi0KLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6Ci0gICAgICAgIHN1
cGVyKEFwcGxlUG9ydCwgc2VsZikuX19pbml0X18oaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykK
LQotICAgICAgICBhbGxvd2VkX3BvcnRfbmFtZXMgPSBzZWxmLlZFUlNJT05fRkFMTEJBQ0tfT1JE
RVIgKyBbc2VsZi5vcGVyYXRpbmdfc3lzdGVtKCkgKyAiLWZ1dHVyZSJdCi0gICAgICAgIHBvcnRf
bmFtZSA9IHBvcnRfbmFtZS5yZXBsYWNlKCctd2syJywgJycpCi0gICAgICAgIHNlbGYuX3ZlcnNp
b24gPSBzZWxmLl9zdHJpcF9wb3J0X25hbWVfcHJlZml4KHBvcnRfbmFtZSkKLSAgICAgICAgYXNz
ZXJ0IHBvcnRfbmFtZSBpbiBhbGxvd2VkX3BvcnRfbmFtZXMsICIlcyBpcyBub3QgaW4gJXMiICUg
KHBvcnRfbmFtZSwgYWxsb3dlZF9wb3J0X25hbWVzKQotCi0gICAgZGVmIF9za2lwcGVkX2ZpbGVf
c2VhcmNoX3BhdGhzKHNlbGYpOgotICAgICAgICAjIFdlIGRvbid0IGhhdmUgYSBkZWRpY2F0ZWQg
U2tpcHBlZCBmaWxlIGZvciB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGUgcG9ydDsKLSAg
ICAgICAgIyB3ZSBqdXN0IHVzZSB0aGUgb25lIGluIHBsYXRmb3JtL3ttYWMsd2lufQotICAgICAg
ICBtb3N0X3JlY2VudF9uYW1lID0gc2VsZi5WRVJTSU9OX0ZBTExCQUNLX09SREVSWy0xXQotICAg
ICAgICByZXR1cm4gc2V0KGZpbHRlcihsYW1iZGEgbmFtZTogbmFtZSAhPSBtb3N0X3JlY2VudF9u
YW1lLCBzdXBlcihBcHBsZVBvcnQsIHNlbGYpLl9za2lwcGVkX2ZpbGVfc2VhcmNoX3BhdGhzKCkp
KQotCi0gICAgIyBGSVhNRTogQSBtb3JlIHNvcGhpc3RpY2F0ZWQgdmVyc2lvbiBvZiB0aGlzIGZ1
bmN0aW9uIHNob3VsZCBtb3ZlIHRvIFdlYktpdFBvcnQgYW5kIHJlcGxhY2UgYWxsIGNhbGxzIHRv
IG5hbWUoKS4KLSAgICAjIFRoaXMgaXMgYWxzbyBhIG1pc2xlYWRpbmcgbmFtZSwgc2luY2UgJ21h
Yy1mdXR1cmUnIGdldHMgcmVtYXBwZWQgdG8gJ21hYycuCi0gICAgZGVmIF9wb3J0X25hbWVfd2l0
aF92ZXJzaW9uKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5uYW1lKCkucmVwbGFjZSgnLWZ1
dHVyZScsICcnKS5yZXBsYWNlKCctd2syJywgJycpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2FsbF90
ZXN0X2NvbmZpZ3VyYXRpb25zKHNlbGYpOgotICAgICAgICBjb25maWd1cmF0aW9ucyA9IFtdCi0g
ICAgICAgIGFsbG93ZWRfcG9ydF9uYW1lcyA9IHNlbGYuVkVSU0lPTl9GQUxMQkFDS19PUkRFUiAr
IFtzZWxmLm9wZXJhdGluZ19zeXN0ZW0oKSArICItZnV0dXJlIl0KLSAgICAgICAgZm9yIHBvcnRf
bmFtZSBpbiBhbGxvd2VkX3BvcnRfbmFtZXM6Ci0gICAgICAgICAgICBmb3IgYnVpbGRfdHlwZSBp
biBzZWxmLkFMTF9CVUlMRF9UWVBFUzoKLSAgICAgICAgICAgICAgICBmb3IgYXJjaGl0ZWN0dXJl
IGluIHNlbGYuQVJDSElURUNUVVJFUzoKLSAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlv
bnMuYXBwZW5kKFRlc3RDb25maWd1cmF0aW9uKHZlcnNpb249c2VsZi5fc3RyaXBfcG9ydF9uYW1l
X3ByZWZpeChwb3J0X25hbWUpLCBhcmNoaXRlY3R1cmU9YXJjaGl0ZWN0dXJlLCBidWlsZF90eXBl
PWJ1aWxkX3R5cGUpKQotICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvbnMKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkJKHJldmlz
aW9uIDE0ODQ5NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
YmFzZS5weQkod29ya2luZyBjb3B5KQpAQCAtMSwxNTU5ICswLDAgQEAKLSMgQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRo
ZXIgdGhlIEdvb2dsZSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0j
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIi
QWJzdHJhY3QgYmFzZSBjbGFzcyBvZiBQb3J0LXNwZWNpZmljIGVudHJ5IHBvaW50cyBmb3IgdGhl
IGxheW91dCB0ZXN0cwotdGVzdCBpbmZyYXN0cnVjdHVyZSAodGhlIFBvcnQgYW5kIERyaXZlciBj
bGFzc2VzKS4iIiIKLQotaW1wb3J0IGNnaQotaW1wb3J0IGRpZmZsaWIKLWltcG9ydCBlcnJubwot
aW1wb3J0IGl0ZXJ0b29scwotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IG9wZXJh
dG9yCi1pbXBvcnQgb3B0cGFyc2UKLWltcG9ydCByZQotaW1wb3J0IHN5cwotCi10cnk6Ci0gICAg
ZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKLWV4Y2VwdCBJbXBvcnRFcnJvcjoK
LSAgICAjIE5lZWRlZCBmb3IgUHl0aG9uIDwgMi43Ci0gICAgZnJvbSB3ZWJraXRweS50aGlyZHBh
cnR5Lm9yZGVyZWRfZGljdCBpbXBvcnQgT3JkZXJlZERpY3QKLQotCi1mcm9tIHdlYmtpdHB5LmNv
bW1vbiBpbXBvcnQgZmluZF9maWxlcwotZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IHJlYWRf
Y2hlY2tzdW1fZnJvbV9wbmcKLWZyb20gd2Via2l0cHkuY29tbW9uLm1lbW9pemVkIGltcG9ydCBt
ZW1vaXplZAotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBwYXRoCi1mcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgotZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3QgaW1wb3J0IFN5c3RlbUhvc3QKLWZyb20g
d2Via2l0cHkuY29tbW9uLndlYmtpdF9maW5kZXIgaW1wb3J0IFdlYktpdEZpbmRlcgotZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfY29uZmlndXJhdGlvbiBpbXBvcnQgVGVz
dENvbmZpZ3VyYXRpb24KLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGNv
bmZpZyBhcyBwb3J0X2NvbmZpZwotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBv
cnQgZHJpdmVyCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBodHRwX2xv
Y2sKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGltYWdlX2RpZmYKLWZy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IHNlcnZlcl9wcm9jZXNzCi1mcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmZhY3RvcnkgaW1wb3J0IFBvcnRGYWN0b3J5Ci1m
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCBhcGFjaGVfaHR0cF9zZXJ2
ZXIKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IGh0dHBfc2VydmVy
Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCB3ZWJzb2NrZXRfc2Vy
dmVyCi0KLV9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKLQotCi0jIEZJWE1FOiBU
aGlzIGNsYXNzIHNob3VsZCBtZXJnZSB3aXRoIFdlYktpdFBvcnQgbm93IHRoYXQgQ2hyb21pdW0g
YmVoYXZlcyBtb3N0bHkgbGlrZSBvdGhlciB3ZWJraXQgcG9ydHMuCi1jbGFzcyBQb3J0KG9iamVj
dCk6Ci0gICAgIiIiQWJzdHJhY3QgY2xhc3MgZm9yIFBvcnQtc3BlY2lmaWMgaG9va3MgZm9yIHRo
ZSBsYXlvdXRfdGVzdCBwYWNrYWdlLiIiIgotCi0gICAgIyBTdWJjbGFzc2VzIG92ZXJyaWRlIHRo
aXMuIFRoaXMgc2hvdWxkIGluZGljYXRlIHRoZSBiYXNpYyBpbXBsZW1lbnRhdGlvbgotICAgICMg
cGFydCBvZiB0aGUgcG9ydCBuYW1lLCBlLmcuLCAnd2luJywgJ2d0ayc7IHRoZXJlIGlzIHByb2Jh
Ymx5ICg/KSBvbmUgdW5pcXVlIHZhbHVlIHBlciBjbGFzcy4KLQotICAgICMgRklYTUU6IFdlIHNo
b3VsZCBwcm9iYWJseSByZW5hbWUgdGhpcyB0byBzb21ldGhpbmcgbGlrZSAnaW1wbGVtZW50YXRp
b25fbmFtZScuCi0gICAgcG9ydF9uYW1lID0gTm9uZQotCi0gICAgIyBUZXN0IG5hbWVzIHJlc2Vt
YmxlIHVuaXggcmVsYXRpdmUgcGF0aHMsIGFuZCB1c2UgJy8nIGFzIGEgZGlyZWN0b3J5IHNlcGFy
YXRvci4KLSAgICBURVNUX1BBVEhfU0VQQVJBVE9SID0gJy8nCi0KLSAgICBBTExfQlVJTERfVFlQ
RVMgPSAoJ2RlYnVnJywgJ3JlbGVhc2UnKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRl
dGVybWluZV9mdWxsX3BvcnRfbmFtZShjbHMsIGhvc3QsIG9wdGlvbnMsIHBvcnRfbmFtZSk6Ci0g
ICAgICAgICIiIlJldHVybiBhIGZ1bGx5LXNwZWNpZmllZCBwb3J0IG5hbWUgdGhhdCBjYW4gYmUg
dXNlZCB0byBjb25zdHJ1Y3Qgb2JqZWN0cy4iIiIKLSAgICAgICAgIyBTdWJjbGFzc2VzIHdpbGwg
dXN1YWxseSBvdmVycmlkZSB0aGlzLgotICAgICAgICBvcHRpb25zID0gb3B0aW9ucyBvciB7fQot
ICAgICAgICBhc3NlcnQgcG9ydF9uYW1lLnN0YXJ0c3dpdGgoY2xzLnBvcnRfbmFtZSkKLSAgICAg
ICAgaWYgZ2V0YXR0cihvcHRpb25zLCAnd2Via2l0X3Rlc3RfcnVubmVyJywgRmFsc2UpIGFuZCBu
b3QgJy13azInIGluIHBvcnRfbmFtZToKLSAgICAgICAgICAgIHJldHVybiBwb3J0X25hbWUgKyAn
LXdrMicKLSAgICAgICAgcmV0dXJuIHBvcnRfbmFtZQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYs
IGhvc3QsIHBvcnRfbmFtZSwgb3B0aW9ucz1Ob25lLCAqKmt3YXJncyk6Ci0KLSAgICAgICAgIyBU
aGlzIHZhbHVlIG1heSBiZSBkaWZmZXJlbnQgZnJvbSBjbHMucG9ydF9uYW1lIGJ5IGhhdmluZyB2
ZXJzaW9uIG1vZGlmaWVycwotICAgICAgICAjIGFuZCBvdGhlciBmaWVsZHMgYXBwZW5kZWQgdG8g
aXQgKGZvciBleGFtcGxlLCAncXQtYXJtJyBvciAnbWFjLXdrMicpLgotICAgICAgICBzZWxmLl9u
YW1lID0gcG9ydF9uYW1lCi0KLSAgICAgICAgIyBUaGVzZSBhcmUgZGVmYXVsdCB2YWx1ZXMgdGhh
dCBzaG91bGQgYmUgb3ZlcnJpZGRlbiBpbiBhIHN1YmNsYXNzZXMuCi0gICAgICAgIHNlbGYuX3Zl
cnNpb24gPSAnJwotICAgICAgICBzZWxmLl9hcmNoaXRlY3R1cmUgPSAneDg2JwotCi0gICAgICAg
ICMgRklYTUU6IElkZWFsbHkgd2UnZCBoYXZlIGEgcGFja2FnZS13aWRlIHdheSB0byBnZXQgYQot
ICAgICAgICAjIHdlbGwtZm9ybWVkIG9wdGlvbnMgb2JqZWN0IHRoYXQgaGFkIGFsbCBvZiB0aGUg
bmVjZXNzYXJ5Ci0gICAgICAgICMgb3B0aW9ucyBkZWZpbmVkIG9uIGl0LgotICAgICAgICBzZWxm
Ll9vcHRpb25zID0gb3B0aW9ucyBvciBvcHRwYXJzZS5WYWx1ZXMoKQotCi0gICAgICAgIGlmIHNl
bGYuX25hbWUgYW5kICctd2syJyBpbiBzZWxmLl9uYW1lOgotICAgICAgICAgICAgc2VsZi5fb3B0
aW9ucy53ZWJraXRfdGVzdF9ydW5uZXIgPSBUcnVlCi0KLSAgICAgICAgc2VsZi5ob3N0ID0gaG9z
dAotICAgICAgICBzZWxmLl9leGVjdXRpdmUgPSBob3N0LmV4ZWN1dGl2ZQotICAgICAgICBzZWxm
Ll9maWxlc3lzdGVtID0gaG9zdC5maWxlc3lzdGVtCi0gICAgICAgIHNlbGYuX3dlYmtpdF9maW5k
ZXIgPSBXZWJLaXRGaW5kZXIoaG9zdC5maWxlc3lzdGVtKQotICAgICAgICBzZWxmLl9jb25maWcg
PSBwb3J0X2NvbmZpZy5Db25maWcoc2VsZi5fZXhlY3V0aXZlLCBzZWxmLl9maWxlc3lzdGVtLCBz
ZWxmLnBvcnRfbmFtZSkKLQotICAgICAgICBzZWxmLl9oZWxwZXIgPSBOb25lCi0gICAgICAgIHNl
bGYuX2h0dHBfc2VydmVyID0gTm9uZQotICAgICAgICBzZWxmLl93ZWJzb2NrZXRfc2VydmVyID0g
Tm9uZQotICAgICAgICBzZWxmLl9pbWFnZV9kaWZmZXIgPSBOb25lCi0gICAgICAgIHNlbGYuX3Nl
cnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gc2VydmVyX3Byb2Nlc3MuU2VydmVyUHJvY2VzcyAg
IyBvdmVycmlkYWJsZSBmb3IgdGVzdGluZwotICAgICAgICBzZWxmLl9odHRwX2xvY2sgPSBOb25l
ICAjIEZJWE1FOiBXaHkgZG9lcyB0aGlzIGxpdmUgb24gdGhlIHBvcnQgb2JqZWN0PwotCi0gICAg
ICAgICMgUHl0aG9uJ3MgUG9wZW4gaGFzIGEgYnVnIHRoYXQgY2F1c2VzIGFueSBwaXBlcyBvcGVu
ZWQgdG8gYQotICAgICAgICAjIHByb2Nlc3MgdGhhdCBjYW4ndCBiZSBleGVjdXRlZCB0byBiZSBs
ZWFrZWQuICBTaW5jZSB0aGlzCi0gICAgICAgICMgY29kZSBpcyBzcGVjaWZpY2FsbHkgZGVzaWdu
ZWQgdG8gdG9sZXJhdGUgZXhlYyBmYWlsdXJlcwotICAgICAgICAjIHRvIGdyYWNlZnVsbHkgaGFu
ZGxlIGNhc2VzIHdoZXJlIHdkaWZmIGlzIG5vdCBpbnN0YWxsZWQsCi0gICAgICAgICMgdGhlIGJ1
ZyByZXN1bHRzIGluIGEgbWFzc2l2ZSBmaWxlIGRlc2NyaXB0b3IgbGVhay4gQXMgYQotICAgICAg
ICAjIHdvcmthcm91bmQsIGlmIGFuIGV4ZWMgZmFpbHVyZSBpcyBldmVyIGV4cGVyaWVuY2VkIGZv
cgotICAgICAgICAjIHdkaWZmLCBhc3N1bWUgaXQncyBub3QgYXZhaWxhYmxlLiAgVGhpcyB3aWxs
IGxlYWsgb25lCi0gICAgICAgICMgZmlsZSBkZXNjcmlwdG9yIGJ1dCB0aGF0J3MgYmV0dGVyIHRo
YW4gbGVha2luZyBlYWNoIHRpbWUKLSAgICAgICAgIyB3ZGlmZiB3b3VsZCBiZSBydW4uCi0gICAg
ICAgICMKLSAgICAgICAgIyBodHRwOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24t
bGlzdC8KLSAgICAgICAgIyAgICAyMDA4LUF1Z3VzdC81MDU3NTMuaHRtbAotICAgICAgICAjIGh0
dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUzMjEwCi0gICAgICAgIHNlbGYuX3dkaWZmX2F2YWls
YWJsZSA9IE5vbmUKLQotICAgICAgICAjIEZJWE1FOiBwcmV0dHlwYXRjaC5weSBrbm93cyB0aGlz
IHBhdGgsIHdoeSBpcyBpdCBjb3BpZWQgaGVyZT8KLSAgICAgICAgc2VsZi5fcHJldHR5X3BhdGNo
X3BhdGggPSBzZWxmLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgiV2Vic2l0ZXMiLCAiYnVncy53ZWJr
aXQub3JnIiwgIlByZXR0eVBhdGNoIiwgInByZXR0aWZ5LnJiIikKLSAgICAgICAgc2VsZi5fcHJl
dHR5X3BhdGNoX2F2YWlsYWJsZSA9IE5vbmUKLQotICAgICAgICBpZiBub3QgaGFzYXR0cihvcHRp
b25zLCAnY29uZmlndXJhdGlvbicpIG9yIG5vdCBvcHRpb25zLmNvbmZpZ3VyYXRpb246Ci0gICAg
ICAgICAgICBzZWxmLnNldF9vcHRpb25fZGVmYXVsdCgnY29uZmlndXJhdGlvbicsIHNlbGYuZGVm
YXVsdF9jb25maWd1cmF0aW9uKCkpCi0gICAgICAgIHNlbGYuX3Rlc3RfY29uZmlndXJhdGlvbiA9
IE5vbmUKLSAgICAgICAgc2VsZi5fcmVmdGVzdF9saXN0ID0ge30KLSAgICAgICAgc2VsZi5fcmVz
dWx0c19kaXJlY3RvcnkgPSBOb25lCi0gICAgICAgIHNlbGYuX3Jvb3Rfd2FzX3NldCA9IGhhc2F0
dHIob3B0aW9ucywgJ3Jvb3QnKSBhbmQgb3B0aW9ucy5yb290Ci0KLSAgICBkZWYgYWRkaXRpb25h
bF9kcnRfZmxhZyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFtdCi0KLSAgICBkZWYgc3VwcG9ydHNf
cGVyX3Rlc3RfdGltZW91dChzZWxmKToKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBkZWYg
ZGVmYXVsdF9waXhlbF90ZXN0cyhzZWxmKToKLSAgICAgICAgIyBGSVhNRTogRGlzYWJsZSB1bnRp
bCB0aGV5IGFyZSBydW4gYnkgZGVmYXVsdCBvbiBidWlsZC53ZWJraXQub3JnLgotICAgICAgICBy
ZXR1cm4gRmFsc2UKLQotICAgIGRlZiBkZWZhdWx0X3RpbWVvdXRfbXMoc2VsZik6Ci0gICAgICAg
IGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJyk6Ci0gICAgICAgICAgICAj
IEFkZCBzb21lIG1vcmUgdGltZSB0byBXZWJLaXRUZXN0UnVubmVyIGJlY2F1c2UgaXQgbmVlZHMg
dG8gc3luY3JvbmlzZSB0aGUgc3RhdGUKLSAgICAgICAgICAgICMgd2l0aCB0aGUgd2ViIHByb2Nl
c3MgYW5kIHdlIHdhbnQgdG8gZGV0ZWN0IGlmIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHRoYXQg
aW4gdGhlIGRyaXZlci4KLSAgICAgICAgICAgIHJldHVybiA4MCAqIDEwMDAKLSAgICAgICAgcmV0
dXJuIDM1ICogMTAwMAotCi0gICAgZGVmIGRyaXZlcl9zdG9wX3RpbWVvdXQoc2VsZik6Ci0gICAg
ICAgICIiIiBSZXR1cm5zIHRoZSBhbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIHRvIHdhaXQgYmVm
b3JlIGtpbGxpbmcgdGhlIHByb2Nlc3MgaW4gZHJpdmVyLnN0b3AoKS4iIiIKLSAgICAgICAgIyBX
ZSB3YW50IHRvIHdhaXQgZm9yIGF0IGxlYXN0IDMgc2Vjb25kcywgYnV0IGlmIHdlIGFyZSByZWFs
bHkgc2xvdywgd2Ugd2FudCB0byBiZSBzbG93IG9uIGNsZWFudXAgYXMKLSAgICAgICAgIyB3ZWxs
IChmb3IgdGhpbmdzIGxpa2UgQVNBTiwgVmFsZ3JpbmQsIGV0Yy4pCi0gICAgICAgIHJldHVybiAz
LjAgKiBmbG9hdChzZWxmLmdldF9vcHRpb24oJ3RpbWVfb3V0X21zJywgJzAnKSkgLyBzZWxmLmRl
ZmF1bHRfdGltZW91dF9tcygpCi0KLSAgICBkZWYgd2RpZmZfYXZhaWxhYmxlKHNlbGYpOgotICAg
ICAgICBpZiBzZWxmLl93ZGlmZl9hdmFpbGFibGUgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYu
X3dkaWZmX2F2YWlsYWJsZSA9IHNlbGYuY2hlY2tfd2RpZmYobG9nZ2luZz1GYWxzZSkKLSAgICAg
ICAgcmV0dXJuIHNlbGYuX3dkaWZmX2F2YWlsYWJsZQotCi0gICAgZGVmIHByZXR0eV9wYXRjaF9h
dmFpbGFibGUoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX3ByZXR0eV9wYXRjaF9hdmFpbGFibGUg
aXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX3ByZXR0eV9wYXRjaF9hdmFpbGFibGUgPSBzZWxm
LmNoZWNrX3ByZXR0eV9wYXRjaChsb2dnaW5nPUZhbHNlKQotICAgICAgICByZXR1cm4gc2VsZi5f
cHJldHR5X3BhdGNoX2F2YWlsYWJsZQotCi0gICAgZGVmIHNob3VsZF9yZXRyeV9jcmFzaGVzKHNl
bGYpOgotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBkZWZhdWx0X2NoaWxkX3Byb2Nl
c3NlcyhzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBudW1iZXIgb2YgRHVtcFJlbmRlclRy
ZWUgaW5zdGFuY2VzIHRvIHVzZSBmb3IgdGhpcyBwb3J0LiIiIgotICAgICAgICByZXR1cm4gc2Vs
Zi5fZXhlY3V0aXZlLmNwdV9jb3VudCgpCi0KLSAgICBkZWYgZGVmYXVsdF9tYXhfbG9ja2VkX3No
YXJkcyhzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBudW1iZXIgb2YgImxvY2tlZCIgc2hh
cmRzIHRvIHJ1biBpbiBwYXJhbGxlbCAobGlrZSB0aGUgaHR0cCB0ZXN0cykuIiIiCi0gICAgICAg
IHJldHVybiAxCi0KLSAgICBkZWYgd29ya2VyX3N0YXJ0dXBfZGVsYXlfc2VjcyhzZWxmKToKLSAg
ICAgICAgIyBGSVhNRTogSWYgd2Ugc3RhcnQgd29ya2VycyB1cCB0b28gcXVpY2tseSwgRHVtcFJl
bmRlclRyZWUgYXBwZWFycwotICAgICAgICAjIHRvIHRocmFzaCBvbiBzb21ldGhpbmcgYW5kIHRp
bWUgb3V0IGl0cyBmaXJzdCBmZXcgdGVzdHMuIFVudGlsCi0gICAgICAgICMgd2UgY2FuIGZpZ3Vy
ZSBvdXQgd2hhdCdzIGdvaW5nIG9uLCBzbGVlcCBhIGJpdCBpbiBiZXR3ZWVuCi0gICAgICAgICMg
d29ya2Vycy4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTE0
NyAuCi0gICAgICAgIHJldHVybiAwLjEKLQotICAgIGRlZiBiYXNlbGluZV9wYXRoKHNlbGYpOgot
ICAgICAgICAiIiJSZXR1cm4gdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSB0byBz
dG9yZSBuZXcgYmFzZWxpbmVzIGluIGZvciB0aGlzIHBvcnQuIiIiCi0gICAgICAgICMgRklYTUU6
IHJlbW92ZSBvbmNlIGFsbCBjYWxsZXJzIGFyZSBjYWxsaW5nIGVpdGhlciBiYXNlbGluZV92ZXJz
aW9uX2RpcigpIG9yIGJhc2VsaW5lX3BsYXRmb3JtX2RpcigpCi0gICAgICAgIHJldHVybiBzZWxm
LmJhc2VsaW5lX3ZlcnNpb25fZGlyKCkKLQotICAgIGRlZiBiYXNlbGluZV9wbGF0Zm9ybV9kaXIo
c2VsZik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZGVmYXVs
dCAodmVyc2lvbi1pbmRlcGVuZGVudCkgcGxhdGZvcm0tc3BlY2lmaWMgcmVzdWx0cy4iIiIKLSAg
ICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLmxheW91dF90ZXN0c19kaXIo
KSwgJ3BsYXRmb3JtJywgc2VsZi5wb3J0X25hbWUpCi0KLSAgICBkZWYgYmFzZWxpbmVfdmVyc2lv
bl9kaXIoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUg
cGxhdGZvcm0tYW5kLXZlcnNpb24tc3BlY2lmaWMgcmVzdWx0cy4iIiIKLSAgICAgICAgYmFzZWxp
bmVfc2VhcmNoX3BhdGhzID0gc2VsZi5iYXNlbGluZV9zZWFyY2hfcGF0aCgpCi0gICAgICAgIHJl
dHVybiBiYXNlbGluZV9zZWFyY2hfcGF0aHNbMF0KLQotICAgIGRlZiBiYXNlbGluZV9zZWFyY2hf
cGF0aChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X29wdGlvbignYWRkaXRpb25hbF9w
bGF0Zm9ybV9kaXJlY3RvcnknLCBbXSkgKyBzZWxmLl9jb21wYXJlX2Jhc2VsaW5lKCkgKyBzZWxm
LmRlZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoKQotCi0gICAgZGVmIGRlZmF1bHRfYmFzZWxp
bmVfc2VhcmNoX3BhdGgoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBhIGxpc3Qgb2YgYWJzb2x1
dGUgcGF0aHMgdG8gZGlyZWN0b3JpZXMgdG8gc2VhcmNoIHVuZGVyIGZvcgotICAgICAgICBiYXNl
bGluZXMuIFRoZSBkaXJlY3RvcmllcyBhcmUgc2VhcmNoZWQgaW4gb3JkZXIuIiIiCi0gICAgICAg
IHNlYXJjaF9wYXRocyA9IFtdCi0gICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rl
c3RfcnVubmVyJyk6Ci0gICAgICAgICAgICBzZWFyY2hfcGF0aHMuYXBwZW5kKHNlbGYuX3drMl9w
b3J0X25hbWUoKSkKLSAgICAgICAgc2VhcmNoX3BhdGhzLmFwcGVuZChzZWxmLm5hbWUoKSkKLSAg
ICAgICAgaWYgc2VsZi5uYW1lKCkgIT0gc2VsZi5wb3J0X25hbWU6Ci0gICAgICAgICAgICBzZWFy
Y2hfcGF0aHMuYXBwZW5kKHNlbGYucG9ydF9uYW1lKQotICAgICAgICByZXR1cm4gbWFwKHNlbGYu
X3dlYmtpdF9iYXNlbGluZV9wYXRoLCBzZWFyY2hfcGF0aHMpCi0KLSAgICBAbWVtb2l6ZWQKLSAg
ICBkZWYgX2NvbXBhcmVfYmFzZWxpbmUoc2VsZik6Ci0gICAgICAgIGZhY3RvcnkgPSBQb3J0RmFj
dG9yeShzZWxmLmhvc3QpCi0gICAgICAgIHRhcmdldF9wb3J0ID0gc2VsZi5nZXRfb3B0aW9uKCdj
b21wYXJlX3BvcnQnKQotICAgICAgICBpZiB0YXJnZXRfcG9ydDoKLSAgICAgICAgICAgIHJldHVy
biBmYWN0b3J5LmdldCh0YXJnZXRfcG9ydCkuZGVmYXVsdF9iYXNlbGluZV9zZWFyY2hfcGF0aCgp
Ci0gICAgICAgIHJldHVybiBbXQotCi0gICAgZGVmIGNoZWNrX2J1aWxkKHNlbGYsIG5lZWRzX2h0
dHApOgotICAgICAgICAiIiJUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBlbnN1cmUgdGhhdCB0aGUg
YnVpbGQgaXMgdXAgdG8gZGF0ZQotICAgICAgICBhbmQgYWxsIHRoZSBuZWVkZWQgYmluYXJpZXMg
YXJlIHByZXNlbnQuIiIiCi0gICAgICAgICMgSWYgd2UncmUgdXNpbmcgYSBwcmUtYnVpbHQgY29w
eSBvZiBXZWJLaXQgKC0tcm9vdCksIHdlIGFzc3VtZSBpdCBhbHNvIGluY2x1ZGVzIGEgYnVpbGQg
b2YgRFJULgotICAgICAgICBpZiBub3Qgc2VsZi5fcm9vdF93YXNfc2V0IGFuZCBzZWxmLmdldF9v
cHRpb24oJ2J1aWxkJykgYW5kIG5vdCBzZWxmLl9idWlsZF9kcml2ZXIoKToKLSAgICAgICAgICAg
IHJldHVybiBGYWxzZQotICAgICAgICBpZiBub3Qgc2VsZi5fY2hlY2tfZHJpdmVyKCk6Ci0gICAg
ICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdwaXhlbF90
ZXN0cycpOgotICAgICAgICAgICAgaWYgbm90IHNlbGYuY2hlY2tfaW1hZ2VfZGlmZigpOgotICAg
ICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiBub3Qgc2VsZi5fY2hlY2tfcG9y
dF9idWlsZCgpOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBUcnVl
Ci0KLSAgICBkZWYgX2NoZWNrX2RyaXZlcihzZWxmKToKLSAgICAgICAgZHJpdmVyX3BhdGggPSBz
ZWxmLl9wYXRoX3RvX2RyaXZlcigpCi0gICAgICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmV4
aXN0cyhkcml2ZXJfcGF0aCk6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCIlcyB3YXMgbm90IGZv
dW5kIGF0ICVzIiAlIChzZWxmLmRyaXZlcl9uYW1lKCksIGRyaXZlcl9wYXRoKSkKLSAgICAgICAg
ICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF9jaGVja19w
b3J0X2J1aWxkKHNlbGYpOgotICAgICAgICAjIFBvcnRzIGNhbiBvdmVycmlkZSB0aGlzIG1ldGhv
ZCB0byBkbyBhZGRpdGlvbmFsIGNoZWNrcy4KLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRl
ZiBjaGVja19zeXNfZGVwcyhzZWxmLCBuZWVkc19odHRwKToKLSAgICAgICAgIiIiSWYgdGhlIHBv
cnQgbmVlZHMgdG8gZG8gc29tZSBydW50aW1lIGNoZWNrcyB0byBlbnN1cmUgdGhhdCB0aGUKLSAg
ICAgICAgdGVzdHMgY2FuIGJlIHJ1biBzdWNjZXNzZnVsbHksIGl0IHNob3VsZCBvdmVycmlkZSB0
aGlzIHJvdXRpbmUuCi0gICAgICAgIFRoaXMgc3RlcCBjYW4gYmUgc2tpcHBlZCB3aXRoIC0tbm9j
aGVjay1zeXMtZGVwcy4KLQotICAgICAgICBSZXR1cm5zIHdoZXRoZXIgdGhlIHN5c3RlbSBpcyBw
cm9wZXJseSBjb25maWd1cmVkLiIiIgotICAgICAgICBpZiBuZWVkc19odHRwOgotICAgICAgICAg
ICAgcmV0dXJuIHNlbGYuY2hlY2tfaHR0cGQoKQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAg
ZGVmIGNoZWNrX2ltYWdlX2RpZmYoc2VsZiwgb3ZlcnJpZGVfc3RlcD1Ob25lLCBsb2dnaW5nPVRy
dWUpOgotICAgICAgICAiIiJUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBjaGVjayB3aGV0aGVyIGlt
YWdlX2RpZmYgYmluYXJ5IGV4aXN0cy4iIiIKLSAgICAgICAgaW1hZ2VfZGlmZl9wYXRoID0gc2Vs
Zi5fcGF0aF90b19pbWFnZV9kaWZmKCkKLSAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0u
ZXhpc3RzKGltYWdlX2RpZmZfcGF0aCk6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCJJbWFnZURp
ZmYgd2FzIG5vdCBmb3VuZCBhdCAlcyIgJSBpbWFnZV9kaWZmX3BhdGgpCi0gICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBjaGVja19wcmV0dHlf
cGF0Y2goc2VsZiwgbG9nZ2luZz1UcnVlKToKLSAgICAgICAgIiIiQ2hlY2tzIHdoZXRoZXIgd2Ug
Y2FuIHVzZSB0aGUgUHJldHR5UGF0Y2ggcnVieSBzY3JpcHQuIiIiCi0gICAgICAgIHRyeToKLSAg
ICAgICAgICAgIF8gPSBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWydydWJ5JywgJy0tdmVy
c2lvbiddKQotICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKLSAgICAgICAgICAgIGlmIGUuZXJy
bm8gaW4gW2Vycm5vLkVOT0VOVCwgZXJybm8uRUFDQ0VTLCBlcnJuby5FQ0hJTERdOgotICAgICAg
ICAgICAgICAgIGlmIGxvZ2dpbmc6Ci0gICAgICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygi
UnVieSBpcyBub3QgaW5zdGFsbGVkOyBjYW4ndCBnZW5lcmF0ZSBwcmV0dHkgcGF0Y2hlcy4iKQot
ICAgICAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJycpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCi0KLSAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYu
X3ByZXR0eV9wYXRjaF9wYXRoKToKLSAgICAgICAgICAgIGlmIGxvZ2dpbmc6Ci0gICAgICAgICAg
ICAgICAgX2xvZy53YXJuaW5nKCJVbmFibGUgdG8gZmluZCAlczsgY2FuJ3QgZ2VuZXJhdGUgcHJl
dHR5IHBhdGNoZXMuIiAlIHNlbGYuX3ByZXR0eV9wYXRjaF9wYXRoKQotICAgICAgICAgICAgICAg
IF9sb2cud2FybmluZygnJykKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgIHJl
dHVybiBUcnVlCi0KLSAgICBkZWYgY2hlY2tfd2RpZmYoc2VsZiwgbG9nZ2luZz1UcnVlKToKLSAg
ICAgICAgaWYgbm90IHNlbGYuX3BhdGhfdG9fd2RpZmYoKToKLSAgICAgICAgICAgICMgRG9uJ3Qg
bmVlZCB0byBsb2cgaGVyZSBzaW5jZSB0aGlzIGlzIHRoZSBwb3J0IGNob29zaW5nIG5vdCB0byB1
c2Ugd2RpZmYuCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICB0cnk6Ci0gICAg
ICAgICAgICBfID0gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFtzZWxmLl9wYXRoX3RvX3dk
aWZmKCksICctLWhlbHAnXSkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICBp
ZiBsb2dnaW5nOgotICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBzZWxmLl93ZGlmZl9taXNzaW5n
X21lc3NhZ2UoKQotICAgICAgICAgICAgICAgIGlmIG1lc3NhZ2U6Ci0gICAgICAgICAgICAgICAg
ICAgIGZvciBsaW5lIGluIG1lc3NhZ2Uuc3BsaXRsaW5lcygpOgotICAgICAgICAgICAgICAgICAg
ICAgICAgX2xvZy53YXJuaW5nKCcgICAgJyArIGxpbmUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBfbG9nLndhcm5pbmcoJycpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICBy
ZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF93ZGlmZl9taXNzaW5nX21lc3NhZ2Uoc2VsZik6Ci0gICAg
ICAgIHJldHVybiAnd2RpZmYgaXMgbm90IGluc3RhbGxlZDsgcGxlYXNlIGluc3RhbGwgaXQgdG8g
Z2VuZXJhdGUgd29yZC1ieS13b3JkIGRpZmZzLicKLQotICAgIGRlZiBjaGVja19odHRwZChzZWxm
KToKLSAgICAgICAgaWYgc2VsZi5fdXNlc19hcGFjaGUoKToKLSAgICAgICAgICAgIGh0dHBkX3Bh
dGggPSBzZWxmLl9wYXRoX3RvX2FwYWNoZSgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBo
dHRwZF9wYXRoID0gc2VsZi5fcGF0aF90b19saWdodHRwZCgpCi0KLSAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgc2VydmVyX25hbWUgPSBzZWxmLl9maWxlc3lzdGVtLmJhc2VuYW1lKGh0dHBkX3Bh
dGgpCi0gICAgICAgICAgICBlbnYgPSBzZWxmLnNldHVwX2Vudmlyb25fZm9yX3NlcnZlcihzZXJ2
ZXJfbmFtZSkKLSAgICAgICAgICAgIGlmIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbaHR0
cGRfcGF0aCwgIi12Il0sIGVudj1lbnYsIHJldHVybl9leGl0X2NvZGU9VHJ1ZSkgIT0gMDoKLSAg
ICAgICAgICAgICAgICBfbG9nLmVycm9yKCJodHRwZCBzZWVtcyBicm9rZW4uIENhbm5vdCBydW4g
aHR0cCB0ZXN0cy4iKQotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAgICAg
cmV0dXJuIFRydWUKLSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICBfbG9nLmVy
cm9yKCJObyBodHRwZCBmb3VuZC4gQ2Fubm90IHJ1biBodHRwIHRlc3RzLiIpCi0gICAgICAgICAg
ICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBkb190ZXh0X3Jlc3VsdHNfZGlmZmVyKHNlbGYsIGV4
cGVjdGVkX3RleHQsIGFjdHVhbF90ZXh0KToKLSAgICAgICAgcmV0dXJuIGV4cGVjdGVkX3RleHQg
IT0gYWN0dWFsX3RleHQKLQotICAgIGRlZiBkb19hdWRpb19yZXN1bHRzX2RpZmZlcihzZWxmLCBl
eHBlY3RlZF9hdWRpbywgYWN0dWFsX2F1ZGlvKToKLSAgICAgICAgcmV0dXJuIGV4cGVjdGVkX2F1
ZGlvICE9IGFjdHVhbF9hdWRpbwotCi0gICAgZGVmIGRpZmZfaW1hZ2Uoc2VsZiwgZXhwZWN0ZWRf
Y29udGVudHMsIGFjdHVhbF9jb250ZW50cywgdG9sZXJhbmNlPU5vbmUpOgotICAgICAgICAiIiJD
b21wYXJlIHR3byBpbWFnZXMgYW5kIHJldHVybiBhIHR1cGxlIG9mIGFuIGltYWdlIGRpZmYsIGEg
cGVyY2VudGFnZSBkaWZmZXJlbmNlICgwLTEwMCksIGFuZCBhbiBlcnJvciBzdHJpbmcuCi0KLSAg
ICAgICAgfHRvbGVyYW5jZXwgc2hvdWxkIGJlIGEgcGVyY2VudGFnZSB2YWx1ZSAoMC4wIC0gMTAw
LjApLgotICAgICAgICBJZiBpdCBpcyBvbWl0dGVkLCB0aGUgcG9ydCBkZWZhdWx0IHRvbGVyYW5j
ZSB2YWx1ZSBpcyB1c2VkLgotCi0gICAgICAgIElmIGFuIGVycm9yIG9jY3VycyAobGlrZSBJbWFn
ZURpZmYgaXNuJ3QgZm91bmQsIG9yIGNyYXNoZXMsIHdlIGxvZyBhbiBlcnJvciBhbmQgcmV0dXJu
IFRydWUgKGZvciBhIGRpZmYpLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IGFjdHVhbF9j
b250ZW50cyBhbmQgbm90IGV4cGVjdGVkX2NvbnRlbnRzOgotICAgICAgICAgICAgcmV0dXJuIChO
b25lLCAwLCBOb25lKQotICAgICAgICBpZiBub3QgYWN0dWFsX2NvbnRlbnRzIG9yIG5vdCBleHBl
Y3RlZF9jb250ZW50czoKLSAgICAgICAgICAgIHJldHVybiAoVHJ1ZSwgMCwgTm9uZSkKLSAgICAg
ICAgaWYgbm90IHNlbGYuX2ltYWdlX2RpZmZlcjoKLSAgICAgICAgICAgIHNlbGYuX2ltYWdlX2Rp
ZmZlciA9IGltYWdlX2RpZmYuSW1hZ2VEaWZmZXIoc2VsZikKLSAgICAgICAgc2VsZi5zZXRfb3B0
aW9uX2RlZmF1bHQoJ3RvbGVyYW5jZScsIDAuMSkKLSAgICAgICAgaWYgdG9sZXJhbmNlIGlzIE5v
bmU6Ci0gICAgICAgICAgICB0b2xlcmFuY2UgPSBzZWxmLmdldF9vcHRpb24oJ3RvbGVyYW5jZScp
Ci0gICAgICAgIHJldHVybiBzZWxmLl9pbWFnZV9kaWZmZXIuZGlmZl9pbWFnZShleHBlY3RlZF9j
b250ZW50cywgYWN0dWFsX2NvbnRlbnRzLCB0b2xlcmFuY2UpCi0KLSAgICBkZWYgZGlmZl90ZXh0
KHNlbGYsIGV4cGVjdGVkX3RleHQsIGFjdHVhbF90ZXh0LCBleHBlY3RlZF9maWxlbmFtZSwgYWN0
dWFsX2ZpbGVuYW1lKToKLSAgICAgICAgIiIiUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRo
ZSBkaWZmIG9mIHRoZSB0d28gdGV4dCBzdHJpbmdzCi0gICAgICAgIGluICd1bmlmaWVkIGRpZmYn
IGZvcm1hdC4iIiIKLQotICAgICAgICAjIFRoZSBmaWxlbmFtZXMgc2hvdyB1cCBpbiB0aGUgZGlm
ZiBvdXRwdXQsIG1ha2Ugc3VyZSB0aGV5J3JlCi0gICAgICAgICMgcmF3IGJ5dGVzIGFuZCBub3Qg
dW5pY29kZSwgc28gdGhhdCB0aGV5IGRvbid0IHRyaWdnZXIgam9pbigpCi0gICAgICAgICMgdHJ5
aW5nIHRvIGRlY29kZSB0aGUgaW5wdXQuCi0gICAgICAgIGRlZiB0b19yYXdfYnl0ZXMoc3RyaW5n
X3ZhbHVlKToKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc3RyaW5nX3ZhbHVlLCB1bmljb2Rl
KToKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nX3ZhbHVlLmVuY29kZSgndXRmLTgnKQot
ICAgICAgICAgICAgcmV0dXJuIHN0cmluZ192YWx1ZQotICAgICAgICBleHBlY3RlZF9maWxlbmFt
ZSA9IHRvX3Jhd19ieXRlcyhleHBlY3RlZF9maWxlbmFtZSkKLSAgICAgICAgYWN0dWFsX2ZpbGVu
YW1lID0gdG9fcmF3X2J5dGVzKGFjdHVhbF9maWxlbmFtZSkKLSAgICAgICAgZGlmZiA9IGRpZmZs
aWIudW5pZmllZF9kaWZmKGV4cGVjdGVkX3RleHQuc3BsaXRsaW5lcyhUcnVlKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbF90ZXh0LnNwbGl0bGluZXMoVHJ1ZSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9maWxlbmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbF9maWxlbmFtZSkKLSAg
ICAgICAgcmV0dXJuICcnLmpvaW4oZGlmZikKLQotICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2Vs
ZiwgcHJvY2Vzc19uYW1lLCBwcm9jZXNzX3BpZCk6Ci0gICAgICAgICMgU3ViY2xhc3NlcyBzaG91
bGQgY2hlY2sgZm9yIGxlYWtzIGluIHRoZSBydW5uaW5nIHByb2Nlc3MKLSAgICAgICAgIyBhbmQg
cHJpbnQgYW55IG5lY2Vzc2FyeSB3YXJuaW5ncyBpZiBsZWFrcyBhcmUgZm91bmQuCi0gICAgICAg
ICMgRklYTUU6IFdlIHNob3VsZCBjb25zaWRlciBtb3ZpbmcgbXVjaCBvZiB0aGlzIGxvZ2ljIGlu
dG8KLSAgICAgICAgIyBFeGVjdXRpdmUgYW5kIG1ha2UgaXQgcGxhdGZvcm0tc3BlY2lmaWMgaW5z
dGVhZCBvZiBwb3J0LXNwZWNpZmljLgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgcHJpbnRfbGVh
a3Nfc3VtbWFyeShzZWxmKToKLSAgICAgICAgIyBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB0aGlz
IHRvIHByaW50IGEgc3VtbWFyeSBvZiBsZWFrcyBmb3VuZAotICAgICAgICAjIHdoaWxlIHJ1bm5p
bmcgdGhlIGxheW91dCB0ZXN0cy4KLSAgICAgICAgcGFzcwotCi0gICAgZGVmIGRyaXZlcl9uYW1l
KHNlbGYpOgotICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ2RyaXZlcl9uYW1lJyk6Ci0gICAg
ICAgICAgICByZXR1cm4gc2VsZi5nZXRfb3B0aW9uKCdkcml2ZXJfbmFtZScpCi0gICAgICAgIGlm
IHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJyk6Ci0gICAgICAgICAgICByZXR1
cm4gJ1dlYktpdFRlc3RSdW5uZXInCi0gICAgICAgIHJldHVybiAnRHVtcFJlbmRlclRyZWUnCi0K
LSAgICBkZWYgZXhwZWN0ZWRfYmFzZWxpbmVzX2J5X2V4dGVuc2lvbihzZWxmLCB0ZXN0X25hbWUp
OgotICAgICAgICAiIiJSZXR1cm5zIGEgZGljdCBtYXBwaW5nIGJhc2VsaW5lIHN1ZmZpeCB0byBy
ZWxhdGl2ZSBwYXRoIGZvciBlYWNoIGJhc2VsaW5lIGluCi0gICAgICAgIGEgdGVzdC4gRm9yIHJl
ZnRlc3RzLCBpdCByZXR1cm5zICIuPT0iIG9yICIuIT0iIGluc3RlYWQgb2YgdGhlIHN1ZmZpeC4i
IiIKLSAgICAgICAgIyBGSVhNRTogVGhlIG5hbWUgc2ltaWxhcml0eSBiZXR3ZWVuIHRoaXMgYW5k
IGV4cGVjdGVkX2Jhc2VsaW5lcygpIGJlbG93LCBpcyB1bmZvcnR1bmF0ZS4KLSAgICAgICAgIyBX
ZSBzaG91bGQgcHJvYmFibHkgcmVuYW1lIHRoZW0gYm90aC4KLSAgICAgICAgYmFzZWxpbmVfZGlj
dCA9IHt9Ci0gICAgICAgIHJlZmVyZW5jZV9maWxlcyA9IHNlbGYucmVmZXJlbmNlX2ZpbGVzKHRl
c3RfbmFtZSkKLSAgICAgICAgaWYgcmVmZXJlbmNlX2ZpbGVzOgotICAgICAgICAgICAgIyBGSVhN
RTogSG93IHNob3VsZCB0aGlzIGhhbmRsZSBtb3JlIHRoYW4gb25lIHR5cGUgb2YgcmVmdGVzdD8K
LSAgICAgICAgICAgIGJhc2VsaW5lX2RpY3RbJy4nICsgcmVmZXJlbmNlX2ZpbGVzWzBdWzBdXSA9
IHNlbGYucmVsYXRpdmVfdGVzdF9maWxlbmFtZShyZWZlcmVuY2VfZmlsZXNbMF1bMV0pCi0KLSAg
ICAgICAgZm9yIGV4dGVuc2lvbiBpbiBzZWxmLmJhc2VsaW5lX2V4dGVuc2lvbnMoKToKLSAgICAg
ICAgICAgIHBhdGggPSBzZWxmLmV4cGVjdGVkX2ZpbGVuYW1lKHRlc3RfbmFtZSwgZXh0ZW5zaW9u
LCByZXR1cm5fZGVmYXVsdD1GYWxzZSkKLSAgICAgICAgICAgIGJhc2VsaW5lX2RpY3RbZXh0ZW5z
aW9uXSA9IHNlbGYucmVsYXRpdmVfdGVzdF9maWxlbmFtZShwYXRoKSBpZiBwYXRoIGVsc2UgcGF0
aAotCi0gICAgICAgIHJldHVybiBiYXNlbGluZV9kaWN0Ci0KLSAgICBkZWYgYmFzZWxpbmVfZXh0
ZW5zaW9ucyhzZWxmKToKLSAgICAgICAgIiIiUmV0dXJucyBhIHR1cGxlIG9mIGFsbCBvZiB0aGUg
bm9uLXJlZnRlc3QgYmFzZWxpbmUgZXh0ZW5zaW9ucyB3ZSB1c2UuIFRoZSBleHRlbnNpb25zIGlu
Y2x1ZGUgdGhlIGxlYWRpbmcgJy4nLiIiIgotICAgICAgICByZXR1cm4gKCcud2F2JywgJy53ZWJh
cmNoaXZlJywgJy50eHQnLCAnLnBuZycpCi0KLSAgICBkZWYgZXhwZWN0ZWRfYmFzZWxpbmVzKHNl
bGYsIHRlc3RfbmFtZSwgc3VmZml4LCBhbGxfYmFzZWxpbmVzPUZhbHNlKToKLSAgICAgICAgIiIi
R2l2ZW4gYSB0ZXN0IG5hbWUsIGZpbmRzIHdoZXJlIHRoZSBiYXNlbGluZSByZXN1bHRzIGFyZSBs
b2NhdGVkLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgIHRlc3RfbmFtZTogbmFtZSBvZiB0ZXN0
IGZpbGUgKHVzdWFsbHkgYSByZWxhdGl2ZSBwYXRoIHVuZGVyIExheW91dFRlc3RzLykKLSAgICAg
ICAgc3VmZml4OiBmaWxlIHN1ZmZpeCBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0cywgaW5jbHVkaW5n
IGRvdDsgZS5nLgotICAgICAgICAgICAgJy50eHQnIG9yICcucG5nJy4gIFRoaXMgc2hvdWxkIG5v
dCBiZSBOb25lLCBidXQgbWF5IGJlIGFuIGVtcHR5Ci0gICAgICAgICAgICBzdHJpbmcuCi0gICAg
ICAgIGFsbF9iYXNlbGluZXM6IElmIFRydWUsIHJldHVybiBhbiBvcmRlcmVkIGxpc3Qgb2YgYWxs
IGJhc2VsaW5lIHBhdGhzCi0gICAgICAgICAgICBmb3IgdGhlIGdpdmVuIHBsYXRmb3JtLiBJZiBG
YWxzZSwgcmV0dXJuIG9ubHkgdGhlIGZpcnN0IG9uZS4KLSAgICAgICAgUmV0dXJucwotICAgICAg
ICBhIGxpc3Qgb2YgKCBwbGF0Zm9ybV9kaXIsIHJlc3VsdHNfZmlsZW5hbWUgKSwgd2hlcmUKLSAg
ICAgICAgICAgIHBsYXRmb3JtX2RpciAtIGFicyBwYXRoIHRvIHRoZSB0b3Agb2YgdGhlIHJlc3Vs
dHMgdHJlZSAob3IgdGVzdAotICAgICAgICAgICAgICAgIHRyZWUpCi0gICAgICAgICAgICByZXN1
bHRzX2ZpbGVuYW1lIC0gcmVsYXRpdmUgcGF0aCBmcm9tIHRvcCBvZiB0cmVlIHRvIHRoZSByZXN1
bHRzCi0gICAgICAgICAgICAgICAgZmlsZQotICAgICAgICAgICAgKHBvcnQuam9pbigpIG9mIHRo
ZSB0d28gZ2l2ZXMgeW91IHRoZSBmdWxsIHBhdGggdG8gdGhlIGZpbGUsCi0gICAgICAgICAgICAg
ICAgdW5sZXNzIE5vbmUgd2FzIHJldHVybmVkLikKLSAgICAgICAgUmV0dXJuIHZhbHVlcyB3aWxs
IGJlIGluIHRoZSBmb3JtYXQgYXBwcm9wcmlhdGUgZm9yIHRoZSBjdXJyZW50Ci0gICAgICAgIHBs
YXRmb3JtIChlLmcuLCAiXFwiIGZvciBwYXRoIHNlcGFyYXRvcnMgb24gV2luZG93cykuIElmIHRo
ZSByZXN1bHRzCi0gICAgICAgIGZpbGUgaXMgbm90IGZvdW5kLCB0aGVuIE5vbmUgd2lsbCBiZSBy
ZXR1cm5lZCBmb3IgdGhlIGRpcmVjdG9yeSwKLSAgICAgICAgYnV0IHRoZSBleHBlY3RlZCByZWxh
dGl2ZSBwYXRobmFtZSB3aWxsIHN0aWxsIGJlIHJldHVybmVkLgotCi0gICAgICAgIFRoaXMgcm91
dGluZSBpcyBnZW5lcmljIGJ1dCBsaXZlcyBoZXJlIHNpbmNlIGl0IGlzIHVzZWQgaW4KLSAgICAg
ICAgY29uanVuY3Rpb24gd2l0aCB0aGUgb3RoZXIgYmFzZWxpbmUgYW5kIGZpbGVuYW1lIHJvdXRp
bmVzIHRoYXQgYXJlCi0gICAgICAgIHBsYXRmb3JtIHNwZWNpZmljLgotICAgICAgICAiIiIKLSAg
ICAgICAgYmFzZWxpbmVfZmlsZW5hbWUgPSBzZWxmLl9maWxlc3lzdGVtLnNwbGl0ZXh0KHRlc3Rf
bmFtZSlbMF0gKyAnLWV4cGVjdGVkJyArIHN1ZmZpeAotICAgICAgICBiYXNlbGluZV9zZWFyY2hf
cGF0aCA9IHNlbGYuYmFzZWxpbmVfc2VhcmNoX3BhdGgoKQotCi0gICAgICAgIGJhc2VsaW5lcyA9
IFtdCi0gICAgICAgIGZvciBwbGF0Zm9ybV9kaXIgaW4gYmFzZWxpbmVfc2VhcmNoX3BhdGg6Ci0g
ICAgICAgICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhzZWxmLl9maWxlc3lzdGVtLmpv
aW4ocGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSkpOgotICAgICAgICAgICAgICAgIGJh
c2VsaW5lcy5hcHBlbmQoKHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpKQotCi0gICAg
ICAgICAgICBpZiBub3QgYWxsX2Jhc2VsaW5lcyBhbmQgYmFzZWxpbmVzOgotICAgICAgICAgICAg
ICAgIHJldHVybiBiYXNlbGluZXMKLQotICAgICAgICAjIElmIGl0IHdhc24ndCBmb3VuZCBpbiBh
IHBsYXRmb3JtIGRpcmVjdG9yeSwgcmV0dXJuIHRoZSBleHBlY3RlZAotICAgICAgICAjIHJlc3Vs
dCBpbiB0aGUgdGVzdCBkaXJlY3RvcnksIGV2ZW4gaWYgbm8gc3VjaCBmaWxlIGFjdHVhbGx5IGV4
aXN0cy4KLSAgICAgICAgcGxhdGZvcm1fZGlyID0gc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCkKLSAg
ICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoc2VsZi5fZmlsZXN5c3RlbS5qb2luKHBs
YXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpKToKLSAgICAgICAgICAgIGJhc2VsaW5lcy5h
cHBlbmQoKHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpKQotCi0gICAgICAgIGlmIGJh
c2VsaW5lczoKLSAgICAgICAgICAgIHJldHVybiBiYXNlbGluZXMKLQotICAgICAgICByZXR1cm4g
WyhOb25lLCBiYXNlbGluZV9maWxlbmFtZSldCi0KLSAgICBkZWYgZXhwZWN0ZWRfZmlsZW5hbWUo
c2VsZiwgdGVzdF9uYW1lLCBzdWZmaXgsIHJldHVybl9kZWZhdWx0PVRydWUpOgotICAgICAgICAi
IiJHaXZlbiBhIHRlc3QgbmFtZSwgcmV0dXJucyBhbiBhYnNvbHV0ZSBwYXRoIHRvIGl0cyBleHBl
Y3RlZCByZXN1bHRzLgotCi0gICAgICAgIElmIG5vIGV4cGVjdGVkIHJlc3VsdHMgYXJlIGZvdW5k
IGluIGFueSBvZiB0aGUgc2VhcmNoZWQgZGlyZWN0b3JpZXMsCi0gICAgICAgIHRoZSBkaXJlY3Rv
cnkgaW4gd2hpY2ggdGhlIHRlc3QgaXRzZWxmIGlzIGxvY2F0ZWQgd2lsbCBiZSByZXR1cm5lZC4K
LSAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBpcyBpbiB0aGUgZm9ybWF0IGFwcHJvcHJpYXRlIGZv
ciB0aGUgcGxhdGZvcm0KLSAgICAgICAgKGUuZy4sICJcXCIgZm9yIHBhdGggc2VwYXJhdG9ycyBv
biB3aW5kb3dzKS4KLQotICAgICAgICBBcmdzOgotICAgICAgICB0ZXN0X25hbWU6IG5hbWUgb2Yg
dGVzdCBmaWxlICh1c3VhbGx5IGEgcmVsYXRpdmUgcGF0aCB1bmRlciBMYXlvdXRUZXN0cy8pCi0g
ICAgICAgIHN1ZmZpeDogZmlsZSBzdWZmaXggb2YgdGhlIGV4cGVjdGVkIHJlc3VsdHMsIGluY2x1
ZGluZyBkb3Q7IGUuZy4gJy50eHQnCi0gICAgICAgICAgICBvciAnLnBuZycuICBUaGlzIHNob3Vs
ZCBub3QgYmUgTm9uZSwgYnV0IG1heSBiZSBhbiBlbXB0eSBzdHJpbmcuCi0gICAgICAgIHBsYXRm
b3JtOiB0aGUgbW9zdC1zcGVjaWZpYyBkaXJlY3RvcnkgbmFtZSB0byB1c2UgdG8gYnVpbGQgdGhl
Ci0gICAgICAgICAgICBzZWFyY2ggbGlzdCBvZiBkaXJlY3RvcmllczsgZS5nLiAnbW91bnRhaW5s
aW9uLXdrMicKLSAgICAgICAgcmV0dXJuX2RlZmF1bHQ6IGlmIFRydWUsIHJldHVybnMgdGhlIHBh
dGggdG8gdGhlIGdlbmVyaWMgZXhwZWN0YXRpb24gaWYgbm90aGluZwotICAgICAgICAgICAgZWxz
ZSBpcyBmb3VuZDsgaWYgRmFsc2UsIHJldHVybnMgTm9uZS4KLQotICAgICAgICBUaGlzIHJvdXRp
bmUgaXMgZ2VuZXJpYyBidXQgaXMgaW1wbGVtZW50ZWQgaGVyZSB0byBsaXZlIGFsb25nc2lkZQot
ICAgICAgICB0aGUgb3RoZXIgYmFzZWxpbmUgYW5kIGZpbGVuYW1lIG1hbmlwdWxhdGlvbiByb3V0
aW5lcy4KLSAgICAgICAgIiIiCi0gICAgICAgICMgRklYTUU6IFRoZSBbMF0gaGVyZSBpcyB2ZXJ5
IG15c3RlcmlvdXMsIGFzIGlzIHRoZSBkZXN0cnVjdHVyZWQgcmV0dXJuLgotICAgICAgICBwbGF0
Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lID0gc2VsZi5leHBlY3RlZF9iYXNlbGluZXModGVz
dF9uYW1lLCBzdWZmaXgpWzBdCi0gICAgICAgIGlmIHBsYXRmb3JtX2RpcjoKLSAgICAgICAgICAg
IHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4ocGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxl
bmFtZSkKLQotICAgICAgICBhY3R1YWxfdGVzdF9uYW1lID0gc2VsZi5sb29rdXBfdmlydHVhbF90
ZXN0X2Jhc2UodGVzdF9uYW1lKQotICAgICAgICBpZiBhY3R1YWxfdGVzdF9uYW1lOgotICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuZXhwZWN0ZWRfZmlsZW5hbWUoYWN0dWFsX3Rlc3RfbmFtZSwgc3Vm
Zml4KQotCi0gICAgICAgIGlmIHJldHVybl9kZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIHNl
bGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLmxheW91dF90ZXN0c19kaXIoKSwgYmFzZWxpbmVfZmls
ZW5hbWUpCi0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICBkZWYgZXhwZWN0ZWRfY2hlY2tzdW0o
c2VsZiwgdGVzdF9uYW1lKToKLSAgICAgICAgIiIiUmV0dXJucyB0aGUgY2hlY2tzdW0gb2YgdGhl
IGltYWdlIHdlIGV4cGVjdCB0aGUgdGVzdCB0byBwcm9kdWNlLCBvciBOb25lIGlmIGl0IGlzIGEg
dGV4dC1vbmx5IHRlc3QuIiIiCi0gICAgICAgIHBuZ19wYXRoID0gc2VsZi5leHBlY3RlZF9maWxl
bmFtZSh0ZXN0X25hbWUsICcucG5nJykKLQotICAgICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmV4
aXN0cyhwbmdfcGF0aCk6Ci0gICAgICAgICAgICB3aXRoIHNlbGYuX2ZpbGVzeXN0ZW0ub3Blbl9i
aW5hcnlfZmlsZV9mb3JfcmVhZGluZyhwbmdfcGF0aCkgYXMgZmlsZWhhbmRsZToKLSAgICAgICAg
ICAgICAgICByZXR1cm4gcmVhZF9jaGVja3N1bV9mcm9tX3BuZy5yZWFkX2NoZWNrc3VtKGZpbGVo
YW5kbGUpCi0KLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRlZiBleHBlY3RlZF9pbWFnZShz
ZWxmLCB0ZXN0X25hbWUpOgotICAgICAgICAiIiJSZXR1cm5zIHRoZSBpbWFnZSB3ZSBleHBlY3Qg
dGhlIHRlc3QgdG8gcHJvZHVjZS4iIiIKLSAgICAgICAgYmFzZWxpbmVfcGF0aCA9IHNlbGYuZXhw
ZWN0ZWRfZmlsZW5hbWUodGVzdF9uYW1lLCAnLnBuZycpCi0gICAgICAgIGlmIG5vdCBzZWxmLl9m
aWxlc3lzdGVtLmV4aXN0cyhiYXNlbGluZV9wYXRoKToKLSAgICAgICAgICAgIHJldHVybiBOb25l
Ci0gICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLnJlYWRfYmluYXJ5X2ZpbGUoYmFzZWxp
bmVfcGF0aCkKLQotICAgIGRlZiBleHBlY3RlZF9hdWRpbyhzZWxmLCB0ZXN0X25hbWUpOgotICAg
ICAgICBiYXNlbGluZV9wYXRoID0gc2VsZi5leHBlY3RlZF9maWxlbmFtZSh0ZXN0X25hbWUsICcu
d2F2JykKLSAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKGJhc2VsaW5lX3Bh
dGgpOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVz
eXN0ZW0ucmVhZF9iaW5hcnlfZmlsZShiYXNlbGluZV9wYXRoKQotCi0gICAgZGVmIGV4cGVjdGVk
X3RleHQoc2VsZiwgdGVzdF9uYW1lKToKLSAgICAgICAgIiIiUmV0dXJucyB0aGUgdGV4dCBvdXRw
dXQgd2UgZXhwZWN0IHRoZSB0ZXN0IHRvIHByb2R1Y2UsIG9yIE5vbmUKLSAgICAgICAgaWYgd2Ug
ZG9uJ3QgZXhwZWN0IHRoZXJlIHRvIGJlIGFueSB0ZXh0IG91dHB1dC4KLSAgICAgICAgRW5kLW9m
LWxpbmUgY2hhcmFjdGVycyBhcmUgbm9ybWFsaXplZCB0byAnXG4nLiIiIgotICAgICAgICAjIEZJ
WE1FOiBEUlQgb3V0cHV0IGlzIGFjdHVhbGx5IHV0Zi04LCBidXQgc2luY2Ugd2UgZG9uJ3QgZGVj
b2RlIHRoZQotICAgICAgICAjIG91dHB1dCBmcm9tIERSVCAoaW5zdGVhZCB0cmVhdGluZyBpdCBh
cyBhIGJpbmFyeSBzdHJpbmcpLCB3ZSByZWFkIHRoZQotICAgICAgICAjIGJhc2VsaW5lcyBhcyBh
IGJpbmFyeSBzdHJpbmcsIHRvby4KLSAgICAgICAgYmFzZWxpbmVfcGF0aCA9IHNlbGYuZXhwZWN0
ZWRfZmlsZW5hbWUodGVzdF9uYW1lLCAnLnR4dCcpCi0gICAgICAgIGlmIG5vdCBzZWxmLl9maWxl
c3lzdGVtLmV4aXN0cyhiYXNlbGluZV9wYXRoKToKLSAgICAgICAgICAgIGJhc2VsaW5lX3BhdGgg
PSBzZWxmLmV4cGVjdGVkX2ZpbGVuYW1lKHRlc3RfbmFtZSwgJy53ZWJhcmNoaXZlJykKLSAgICAg
ICAgICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhiYXNlbGluZV9wYXRoKToKLSAg
ICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICB0ZXh0ID0gc2VsZi5fZmlsZXN5c3Rl
bS5yZWFkX2JpbmFyeV9maWxlKGJhc2VsaW5lX3BhdGgpCi0gICAgICAgIHJldHVybiB0ZXh0LnJl
cGxhY2UoIlxyXG4iLCAiXG4iKQotCi0gICAgZGVmIF9nZXRfcmVmdGVzdF9saXN0KHNlbGYsIHRl
c3RfbmFtZSk6Ci0gICAgICAgIGRpcm5hbWUgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5s
YXlvdXRfdGVzdHNfZGlyKCksIHNlbGYuX2ZpbGVzeXN0ZW0uZGlybmFtZSh0ZXN0X25hbWUpKQot
ICAgICAgICBpZiBkaXJuYW1lIG5vdCBpbiBzZWxmLl9yZWZ0ZXN0X2xpc3Q6Ci0gICAgICAgICAg
ICBzZWxmLl9yZWZ0ZXN0X2xpc3RbZGlybmFtZV0gPSBQb3J0Ll9wYXJzZV9yZWZ0ZXN0X2xpc3Qo
c2VsZi5fZmlsZXN5c3RlbSwgZGlybmFtZSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX3JlZnRlc3Rf
bGlzdFtkaXJuYW1lXQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfcGFyc2VfcmVmdGVz
dF9saXN0KGZpbGVzeXN0ZW0sIHRlc3RfZGlycGF0aCk6Ci0gICAgICAgIHJlZnRlc3RfbGlzdF9w
YXRoID0gZmlsZXN5c3RlbS5qb2luKHRlc3RfZGlycGF0aCwgJ3JlZnRlc3QubGlzdCcpCi0gICAg
ICAgIGlmIG5vdCBmaWxlc3lzdGVtLmlzZmlsZShyZWZ0ZXN0X2xpc3RfcGF0aCk6Ci0gICAgICAg
ICAgICByZXR1cm4gTm9uZQotICAgICAgICByZWZ0ZXN0X2xpc3RfZmlsZSA9IGZpbGVzeXN0ZW0u
cmVhZF90ZXh0X2ZpbGUocmVmdGVzdF9saXN0X3BhdGgpCi0KLSAgICAgICAgcGFyc2VkX2xpc3Qg
PSB7fQotICAgICAgICBmb3IgbGluZSBpbiByZWZ0ZXN0X2xpc3RfZmlsZS5zcGxpdCgnXG4nKToK
LSAgICAgICAgICAgIGxpbmUgPSByZS5zdWIoJyMuKyQnLCAnJywgbGluZSkKLSAgICAgICAgICAg
IHNwbGl0X2xpbmUgPSBsaW5lLnNwbGl0KCkKLSAgICAgICAgICAgIGlmIGxlbihzcGxpdF9saW5l
KSA8IDM6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGV4cGVjdGF0aW9u
X3R5cGUsIHRlc3RfZmlsZSwgcmVmX2ZpbGUgPSBzcGxpdF9saW5lCi0gICAgICAgICAgICBwYXJz
ZWRfbGlzdC5zZXRkZWZhdWx0KGZpbGVzeXN0ZW0uam9pbih0ZXN0X2RpcnBhdGgsIHRlc3RfZmls
ZSksIFtdKS5hcHBlbmQoKGV4cGVjdGF0aW9uX3R5cGUsIGZpbGVzeXN0ZW0uam9pbih0ZXN0X2Rp
cnBhdGgsIHJlZl9maWxlKSkpCi0gICAgICAgIHJldHVybiBwYXJzZWRfbGlzdAotCi0gICAgZGVm
IHJlZmVyZW5jZV9maWxlcyhzZWxmLCB0ZXN0X25hbWUpOgotICAgICAgICAiIiJSZXR1cm4gYSBs
aXN0IG9mIGV4cGVjdGF0aW9uICg9PSBvciAhPSkgYW5kIGZpbGVuYW1lIHBhaXJzIiIiCi0KLSAg
ICAgICAgcmVmdGVzdF9saXN0ID0gc2VsZi5fZ2V0X3JlZnRlc3RfbGlzdCh0ZXN0X25hbWUpCi0g
ICAgICAgIGlmIG5vdCByZWZ0ZXN0X2xpc3Q6Ci0gICAgICAgICAgICByZWZ0ZXN0X2xpc3QgPSBb
XQotICAgICAgICAgICAgZm9yIGV4cGVjdGF0aW9uLCBwcmVmaXggaW4gKCgnPT0nLCAnJyksICgn
IT0nLCAnLW1pc21hdGNoJykpOgotICAgICAgICAgICAgICAgIGZvciBleHRlbnRpb24gaW4gUG9y
dC5fc3VwcG9ydGVkX2ZpbGVfZXh0ZW5zaW9uczoKLSAgICAgICAgICAgICAgICAgICAgcGF0aCA9
IHNlbGYuZXhwZWN0ZWRfZmlsZW5hbWUodGVzdF9uYW1lLCBwcmVmaXggKyBleHRlbnRpb24pCi0g
ICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHBhdGgpOgotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVmdGVzdF9saXN0LmFwcGVuZCgoZXhwZWN0YXRpb24sIHBh
dGgpKQotICAgICAgICAgICAgcmV0dXJuIHJlZnRlc3RfbGlzdAotCi0gICAgICAgIHJldHVybiBy
ZWZ0ZXN0X2xpc3QuZ2V0KHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLmxheW91dF90ZXN0c19k
aXIoKSwgdGVzdF9uYW1lKSwgW10pICAjIHB5bGludDogZGlzYWJsZT1FMTEwMwotCi0gICAgZGVm
IHRlc3RzKHNlbGYsIHBhdGhzKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBsaXN0IG9mIHRlc3Rz
IGZvdW5kLiBCb3RoIGdlbmVyaWMgYW5kIHBsYXRmb3JtLXNwZWNpZmljIHRlc3RzIG1hdGNoaW5n
IHBhdGhzIHNob3VsZCBiZSByZXR1cm5lZC4iIiIKLSAgICAgICAgZXhwYW5kZWRfcGF0aHMgPSBz
ZWxmLl9leHBhbmRlZF9wYXRocyhwYXRocykKLSAgICAgICAgdGVzdHMgPSBzZWxmLl9yZWFsX3Rl
c3RzKGV4cGFuZGVkX3BhdGhzKQotICAgICAgICB0ZXN0cy5leHRlbmQoc2VsZi5fdmlydHVhbF90
ZXN0cyhleHBhbmRlZF9wYXRocywgc2VsZi5wb3B1bGF0ZWRfdmlydHVhbF90ZXN0X3N1aXRlcygp
KSkKLSAgICAgICAgcmV0dXJuIHRlc3RzCi0KLSAgICBkZWYgX2V4cGFuZGVkX3BhdGhzKHNlbGYs
IHBhdGhzKToKLSAgICAgICAgZXhwYW5kZWRfcGF0aHMgPSBbXQotICAgICAgICBmcyA9IHNlbGYu
X2ZpbGVzeXN0ZW0KLSAgICAgICAgYWxsX3BsYXRmb3JtX2RpcnMgPSBbcGF0aCBmb3IgcGF0aCBp
biBmcy5nbG9iKGZzLmpvaW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCksICdwbGF0Zm9ybScsICcq
JykpIGlmIGZzLmlzZGlyKHBhdGgpXQotICAgICAgICBmb3IgcGF0aCBpbiBwYXRoczoKLSAgICAg
ICAgICAgIGV4cGFuZGVkX3BhdGhzLmFwcGVuZChwYXRoKQotICAgICAgICAgICAgaWYgc2VsZi50
ZXN0X2lzZGlyKHBhdGgpIGFuZCBub3QgcGF0aC5zdGFydHN3aXRoKCdwbGF0Zm9ybScpOgotICAg
ICAgICAgICAgICAgIGZvciBwbGF0Zm9ybV9kaXIgaW4gYWxsX3BsYXRmb3JtX2RpcnM6Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIGZzLmlzZGlyKGZzLmpvaW4ocGxhdGZvcm1fZGlyLCBwYXRoKSkg
YW5kIHBsYXRmb3JtX2RpciBpbiBzZWxmLmJhc2VsaW5lX3NlYXJjaF9wYXRoKCk6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBleHBhbmRlZF9wYXRocy5hcHBlbmQoc2VsZi5yZWxhdGl2ZV90ZXN0
X2ZpbGVuYW1lKGZzLmpvaW4ocGxhdGZvcm1fZGlyLCBwYXRoKSkpCi0KLSAgICAgICAgcmV0dXJu
IGV4cGFuZGVkX3BhdGhzCi0KLSAgICBkZWYgX3JlYWxfdGVzdHMoc2VsZiwgcGF0aHMpOgotICAg
ICAgICAjIFdoZW4gY29sbGVjdGluZyB0ZXN0IGNhc2VzLCBza2lwIHRoZXNlIGRpcmVjdG9yaWVz
Ci0gICAgICAgIHNraXBwZWRfZGlyZWN0b3JpZXMgPSBzZXQoWycuc3ZuJywgJ19zdm4nLCAncmVz
b3VyY2VzJywgJ3NjcmlwdC10ZXN0cycsICdyZWZlcmVuY2UnLCAncmVmdGVzdCddKQotICAgICAg
ICBmaWxlcyA9IGZpbmRfZmlsZXMuZmluZChzZWxmLl9maWxlc3lzdGVtLCBzZWxmLmxheW91dF90
ZXN0c19kaXIoKSwgcGF0aHMsIHNraXBwZWRfZGlyZWN0b3JpZXMsIFBvcnQuX2lzX3Rlc3RfZmls
ZSwgc2VsZi50ZXN0X2tleSkKLSAgICAgICAgcmV0dXJuIFtzZWxmLnJlbGF0aXZlX3Rlc3RfZmls
ZW5hbWUoZikgZm9yIGYgaW4gZmlsZXNdCi0KLSAgICAjIFdoZW4gY29sbGVjdGluZyB0ZXN0IGNh
c2VzLCB3ZSBpbmNsdWRlIGFueSBmaWxlIHdpdGggdGhlc2UgZXh0ZW5zaW9ucy4KLSAgICBfc3Vw
cG9ydGVkX2ZpbGVfZXh0ZW5zaW9ucyA9IHNldChbJy5odG1sJywgJy5zaHRtbCcsICcueG1sJywg
Jy54aHRtbCcsICcucGwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
Lmh0bScsICcucGhwJywgJy5zdmcnLCAnLm1odCddKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAg
ICMgSWYgYW55IGNoYW5nZXMgYXJlIG1hZGUgaGVyZSBiZSBzdXJlIHRvIHVwZGF0ZSB0aGUgaXNV
c2VkSW5SZWZ0ZXN0IG1ldGhvZCBpbiBvbGQtcnVuLXdlYmtpdC10ZXN0cyBhcyB3ZWxsLgotICAg
IGRlZiBpc19yZWZlcmVuY2VfaHRtbF9maWxlKGZpbGVzeXN0ZW0sIGRpcm5hbWUsIGZpbGVuYW1l
KToKLSAgICAgICAgaWYgZmlsZW5hbWUuc3RhcnRzd2l0aCgncmVmLScpIG9yIGZpbGVuYW1lLnN0
YXJ0c3dpdGgoJ25vdHJlZi0nKToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIGZp
bGVuYW1lX3dpaG91dF9leHQsIHVudXNlZCA9IGZpbGVzeXN0ZW0uc3BsaXRleHQoZmlsZW5hbWUp
Ci0gICAgICAgIGZvciBzdWZmaXggaW4gWyctZXhwZWN0ZWQnLCAnLWV4cGVjdGVkLW1pc21hdGNo
JywgJy1yZWYnLCAnLW5vdHJlZiddOgotICAgICAgICAgICAgaWYgZmlsZW5hbWVfd2lob3V0X2V4
dC5lbmRzd2l0aChzdWZmaXgpOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAg
IHJldHVybiBGYWxzZQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfaGFzX3N1cHBvcnRl
ZF9leHRlbnNpb24oZmlsZXN5c3RlbSwgZmlsZW5hbWUpOgotICAgICAgICAiIiJSZXR1cm4gdHJ1
ZSBpZiBmaWxlbmFtZSBpcyBvbmUgb2YgdGhlIGZpbGUgZXh0ZW5zaW9ucyB3ZSB3YW50IHRvIHJ1
biBhIHRlc3Qgb24uIiIiCi0gICAgICAgIGV4dGVuc2lvbiA9IGZpbGVzeXN0ZW0uc3BsaXRleHQo
ZmlsZW5hbWUpWzFdCi0gICAgICAgIHJldHVybiBleHRlbnNpb24gaW4gUG9ydC5fc3VwcG9ydGVk
X2ZpbGVfZXh0ZW5zaW9ucwotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfaXNfdGVzdF9m
aWxlKGZpbGVzeXN0ZW0sIGRpcm5hbWUsIGZpbGVuYW1lKToKLSAgICAgICAgcmV0dXJuIFBvcnQu
X2hhc19zdXBwb3J0ZWRfZXh0ZW5zaW9uKGZpbGVzeXN0ZW0sIGZpbGVuYW1lKSBhbmQgbm90IFBv
cnQuaXNfcmVmZXJlbmNlX2h0bWxfZmlsZShmaWxlc3lzdGVtLCBkaXJuYW1lLCBmaWxlbmFtZSkK
LQotICAgIGRlZiB0ZXN0X2tleShzZWxmLCB0ZXN0X25hbWUpOgotICAgICAgICAiIiJUdXJucyBh
IHRlc3QgbmFtZSBpbnRvIGEgbGlzdCB3aXRoIHR3byBzdWJsaXN0cywgdGhlIG5hdHVyYWwga2V5
IG9mIHRoZQotICAgICAgICBkaXJuYW1lLCBhbmQgdGhlIG5hdHVyYWwga2V5IG9mIHRoZSBiYXNl
bmFtZS4KLQotICAgICAgICBUaGlzIGNhbiBiZSB1c2VkIHdoZW4gc29ydGluZyBwYXRocyBzbyB0
aGF0IGZpbGVzIGluIGEgZGlyZWN0b3J5LgotICAgICAgICBkaXJlY3RvcnkgYXJlIGtlcHQgdG9n
ZXRoZXIgcmF0aGVyIHRoYW4gYmVpbmcgbWl4ZWQgaW4gd2l0aCBmaWxlcyBpbgotICAgICAgICBz
dWJkaXJlY3Rvcmllcy4iIiIKLSAgICAgICAgZGlybmFtZSwgYmFzZW5hbWUgPSBzZWxmLnNwbGl0
X3Rlc3QodGVzdF9uYW1lKQotICAgICAgICByZXR1cm4gKHNlbGYuX25hdHVyYWxfc29ydF9rZXko
ZGlybmFtZSArIHNlbGYuVEVTVF9QQVRIX1NFUEFSQVRPUiksIHNlbGYuX25hdHVyYWxfc29ydF9r
ZXkoYmFzZW5hbWUpKQotCi0gICAgZGVmIF9uYXR1cmFsX3NvcnRfa2V5KHNlbGYsIHN0cmluZ190
b19zcGxpdCk6Ci0gICAgICAgICIiIiBUdXJucyBhIHN0cmluZyBpbnRvIGEgbGlzdCBvZiBzdHJp
bmcgYW5kIG51bWJlciBjaHVua3MsIGkuZS4gInoyM2EiIC0+IFsieiIsIDIzLCAiYSJdCi0KLSAg
ICAgICAgVGhpcyBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgIm5hdHVyYWwgc29ydCIgb3JkZXIu
IFNlZToKLSAgICAgICAgaHR0cDovL3d3dy5jb2Rpbmdob3Jyb3IuY29tL2Jsb2cvMjAwNy8xMi9z
b3J0aW5nLWZvci1odW1hbnMtbmF0dXJhbC1zb3J0LW9yZGVyLmh0bWwKLSAgICAgICAgaHR0cDov
L25lZGJhdGNoZWxkZXIuY29tL2Jsb2cvMjAwNzEyLmh0bWwjZTIwMDcxMjExVDA1NDk1NgotICAg
ICAgICAiIiIKLSAgICAgICAgZGVmIHRyeWludCh2YWwpOgotICAgICAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgICAgIHJldHVybiBpbnQodmFsKQotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJy
b3I6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbAotCi0gICAgICAgIHJldHVybiBbdHJ5aW50
KGNodW5rKSBmb3IgY2h1bmsgaW4gcmUuc3BsaXQoJyhcZCspJywgc3RyaW5nX3RvX3NwbGl0KV0K
LQotICAgIGRlZiB0ZXN0X2RpcnMoc2VsZik6Ci0gICAgICAgICIiIlJldHVybnMgdGhlIGxpc3Qg
b2YgdG9wLWxldmVsIHRlc3QgZGlyZWN0b3JpZXMuIiIiCi0gICAgICAgIGxheW91dF90ZXN0c19k
aXIgPSBzZWxmLmxheW91dF90ZXN0c19kaXIoKQotICAgICAgICByZXR1cm4gZmlsdGVyKGxhbWJk
YSB4OiBzZWxmLl9maWxlc3lzdGVtLmlzZGlyKHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihsYXlvdXRf
dGVzdHNfZGlyLCB4KSksCi0gICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5s
aXN0ZGlyKGxheW91dF90ZXN0c19kaXIpKQotCi0gICAgQG1lbW9pemVkCi0gICAgZGVmIHRlc3Rf
aXNmaWxlKHNlbGYsIHRlc3RfbmFtZSk6Ci0gICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSB0
ZXN0IG5hbWUgcmVmZXJzIHRvIGEgZGlyZWN0b3J5IG9mIHRlc3RzLiIiIgotICAgICAgICAjIFVz
ZWQgYnkgdGVzdF9leHBlY3RhdGlvbnMucHkgdG8gYXBwbHkgcnVsZXMgdG8gd2hvbGUgZGlyZWN0
b3JpZXMuCi0gICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uaXNmaWxlKHNlbGYuYWJzcGF0aF9m
b3JfdGVzdCh0ZXN0X25hbWUpKToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIGJh
c2UgPSBzZWxmLmxvb2t1cF92aXJ0dWFsX3Rlc3RfYmFzZSh0ZXN0X25hbWUpCi0gICAgICAgIHJl
dHVybiBiYXNlIGFuZCBzZWxmLl9maWxlc3lzdGVtLmlzZmlsZShzZWxmLmFic3BhdGhfZm9yX3Rl
c3QoYmFzZSkpCi0KLSAgICBAbWVtb2l6ZWQKLSAgICBkZWYgdGVzdF9pc2RpcihzZWxmLCB0ZXN0
X25hbWUpOgotICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgdGVzdCBuYW1lIHJlZmVycyB0
byBhIGRpcmVjdG9yeSBvZiB0ZXN0cy4iIiIKLSAgICAgICAgIyBVc2VkIGJ5IHRlc3RfZXhwZWN0
YXRpb25zLnB5IHRvIGFwcGx5IHJ1bGVzIHRvIHdob2xlIGRpcmVjdG9yaWVzLgotICAgICAgICBp
ZiBzZWxmLl9maWxlc3lzdGVtLmlzZGlyKHNlbGYuYWJzcGF0aF9mb3JfdGVzdCh0ZXN0X25hbWUp
KToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIGJhc2UgPSBzZWxmLmxvb2t1cF92
aXJ0dWFsX3Rlc3RfYmFzZSh0ZXN0X25hbWUpCi0gICAgICAgIHJldHVybiBiYXNlIGFuZCBzZWxm
Ll9maWxlc3lzdGVtLmlzZGlyKHNlbGYuYWJzcGF0aF9mb3JfdGVzdChiYXNlKSkKLQotICAgIEBt
ZW1vaXplZAotICAgIGRlZiB0ZXN0X2V4aXN0cyhzZWxmLCB0ZXN0X25hbWUpOgotICAgICAgICAi
IiJSZXR1cm4gVHJ1ZSBpZiB0aGUgdGVzdCBuYW1lIHJlZmVycyB0byBhbiBleGlzdGluZyB0ZXN0
IG9yIGJhc2VsaW5lLiIiIgotICAgICAgICAjIFVzZWQgYnkgdGVzdF9leHBlY3RhdGlvbnMucHkg
dG8gZGV0ZXJtaW5lIGlmIGFuIGVudHJ5IHJlZmVycyB0byBhCi0gICAgICAgICMgdmFsaWQgdGVz
dCBhbmQgYnkgcHJpbnRpbmcucHkgdG8gZGV0ZXJtaW5lIGlmIGJhc2VsaW5lcyBleGlzdC4KLSAg
ICAgICAgcmV0dXJuIHNlbGYudGVzdF9pc2ZpbGUodGVzdF9uYW1lKSBvciBzZWxmLnRlc3RfaXNk
aXIodGVzdF9uYW1lKQotCi0gICAgZGVmIHNwbGl0X3Rlc3Qoc2VsZiwgdGVzdF9uYW1lKToKLSAg
ICAgICAgIiIiU3BsaXRzIGEgdGVzdCBuYW1lIGludG8gdGhlICdkaXJlY3RvcnknIHBhcnQgYW5k
IHRoZSAnYmFzZW5hbWUnIHBhcnQuIiIiCi0gICAgICAgIGluZGV4ID0gdGVzdF9uYW1lLnJmaW5k
KHNlbGYuVEVTVF9QQVRIX1NFUEFSQVRPUikKLSAgICAgICAgaWYgaW5kZXggPCAxOgotICAgICAg
ICAgICAgcmV0dXJuICgnJywgdGVzdF9uYW1lKQotICAgICAgICByZXR1cm4gKHRlc3RfbmFtZVsw
OmluZGV4XSwgdGVzdF9uYW1lW2luZGV4Ol0pCi0KLSAgICBkZWYgbm9ybWFsaXplX3Rlc3RfbmFt
ZShzZWxmLCB0ZXN0X25hbWUpOgotICAgICAgICAiIiJSZXR1cm5zIGEgbm9ybWFsaXplZCB2ZXJz
aW9uIG9mIHRoZSB0ZXN0IG5hbWUgb3IgdGVzdCBkaXJlY3RvcnkuIiIiCi0gICAgICAgIGlmIHRl
c3RfbmFtZS5lbmRzd2l0aCgnLycpOgotICAgICAgICAgICAgcmV0dXJuIHRlc3RfbmFtZQotICAg
ICAgICBpZiBzZWxmLnRlc3RfaXNkaXIodGVzdF9uYW1lKToKLSAgICAgICAgICAgIHJldHVybiB0
ZXN0X25hbWUgKyAnLycKLSAgICAgICAgcmV0dXJuIHRlc3RfbmFtZQotCi0gICAgZGVmIGRyaXZl
cl9jbWRfbGluZShzZWxmKToKLSAgICAgICAgIiIiUHJpbnRzIHRoZSBEUlQgY29tbWFuZCBsaW5l
IHRoYXQgd2lsbCBiZSB1c2VkLiIiIgotICAgICAgICBkcml2ZXIgPSBzZWxmLmNyZWF0ZV9kcml2
ZXIoMCkKLSAgICAgICAgcmV0dXJuIGRyaXZlci5jbWRfbGluZShzZWxmLmdldF9vcHRpb24oJ3Bp
eGVsX3Rlc3RzJyksIFtdKQotCi0gICAgZGVmIHVwZGF0ZV9iYXNlbGluZShzZWxmLCBiYXNlbGlu
ZV9wYXRoLCBkYXRhKToKLSAgICAgICAgIiIiVXBkYXRlcyB0aGUgYmFzZWxpbmUgZm9yIGEgdGVz
dC4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgICAgYmFzZWxpbmVfcGF0aDogdGhlIGFjdHVh
bCBwYXRoIHRvIHVzZSBmb3IgYmFzZWxpbmUsIG5vdCB0aGUgcGF0aCB0bwotICAgICAgICAgICAg
ICB0aGUgdGVzdC4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHVwZGF0ZSBlaXRoZXIgZ2VuZXJp
YyBvcgotICAgICAgICAgICAgICBwbGF0Zm9ybS1zcGVjaWZpYyBiYXNlbGluZXMsIGJ1dCB3ZSBj
YW4ndCBpbmZlciB3aGljaCBoZXJlLgotICAgICAgICAgICAgZGF0YTogY29udGVudHMgb2YgdGhl
IGJhc2VsaW5lLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV9i
aW5hcnlfZmlsZShiYXNlbGluZV9wYXRoLCBkYXRhKQotCi0gICAgIyBGSVhNRTogdXBkYXRlIGNh
bGxlcnMgdG8gY3JlYXRlIGEgZmluZGVyIGFuZCBjYWxsIGl0IGluc3RlYWQgb2YgdGhlc2UgbmV4
dCBmaXZlIHJvdXRpbmVzICh3aGljaCBzaG91bGQgYmUgcHJvdGVjdGVkKS4KLSAgICBkZWYgd2Vi
a2l0X2Jhc2Uoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl93ZWJraXRfZmluZGVyLndlYmtp
dF9iYXNlKCkKLQotICAgIGRlZiBwYXRoX2Zyb21fd2Via2l0X2Jhc2Uoc2VsZiwgKmNvbXBzKToK
LSAgICAgICAgcmV0dXJuIHNlbGYuX3dlYmtpdF9maW5kZXIucGF0aF9mcm9tX3dlYmtpdF9iYXNl
KCpjb21wcykKLQotICAgIGRlZiBwYXRoX3RvX3NjcmlwdChzZWxmLCBzY3JpcHRfbmFtZSk6Ci0g
ICAgICAgIHJldHVybiBzZWxmLl93ZWJraXRfZmluZGVyLnBhdGhfdG9fc2NyaXB0KHNjcmlwdF9u
YW1lKQotCi0gICAgZGVmIGxheW91dF90ZXN0c19kaXIoc2VsZik6Ci0gICAgICAgIHJldHVybiBz
ZWxmLl93ZWJraXRfZmluZGVyLmxheW91dF90ZXN0c19kaXIoKQotCi0gICAgZGVmIHBlcmZfdGVz
dHNfZGlyKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fd2Via2l0X2ZpbmRlci5wZXJmX3Rl
c3RzX2RpcigpCi0KLSAgICBkZWYgc2tpcHBlZF9sYXlvdXRfdGVzdHMoc2VsZiwgdGVzdF9saXN0
KToKLSAgICAgICAgIiIiUmV0dXJucyB0ZXN0cyBza2lwcGVkIG91dHNpZGUgb2YgdGhlIFRlc3RF
eHBlY3RhdGlvbnMgZmlsZXMuIiIiCi0gICAgICAgIHJldHVybiBzZXQoc2VsZi5fdGVzdHNfZm9y
X290aGVyX3BsYXRmb3JtcygpKS51bmlvbihzZWxmLl9za2lwcGVkX3Rlc3RzX2Zvcl91bnN1cHBv
cnRlZF9mZWF0dXJlcyh0ZXN0X2xpc3QpKQotCi0gICAgZGVmIF90ZXN0c19mcm9tX3NraXBwZWRf
ZmlsZV9jb250ZW50cyhzZWxmLCBza2lwcGVkX2ZpbGVfY29udGVudHMpOgotICAgICAgICB0ZXN0
c190b19za2lwID0gW10KLSAgICAgICAgZm9yIGxpbmUgaW4gc2tpcHBlZF9maWxlX2NvbnRlbnRz
LnNwbGl0KCdcbicpOgotICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICAg
ICAgbGluZSA9IGxpbmUucnN0cmlwKCcvJykgICMgQmVzdCB0byBub3JtYWxpemUgZGlyZWN0b3J5
IG5hbWVzIHRvIG5vdCBpbmNsdWRlIHRoZSB0cmFpbGluZyBzbGFzaC4KLSAgICAgICAgICAgIGlm
IGxpbmUuc3RhcnRzd2l0aCgnIycpIG9yIG5vdCBsZW4obGluZSk6Ci0gICAgICAgICAgICAgICAg
Y29udGludWUKLSAgICAgICAgICAgIHRlc3RzX3RvX3NraXAuYXBwZW5kKGxpbmUpCi0gICAgICAg
IHJldHVybiB0ZXN0c190b19za2lwCi0KLSAgICBkZWYgX2V4cGVjdGF0aW9uc19mcm9tX3NraXBw
ZWRfZmlsZXMoc2VsZiwgc2tpcHBlZF9maWxlX3BhdGhzKToKLSAgICAgICAgdGVzdHNfdG9fc2tp
cCA9IFtdCi0gICAgICAgIGZvciBzZWFyY2hfcGF0aCBpbiBza2lwcGVkX2ZpbGVfcGF0aHM6Ci0g
ICAgICAgICAgICBmaWxlbmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl93ZWJraXRf
YmFzZWxpbmVfcGF0aChzZWFyY2hfcGF0aCksICJTa2lwcGVkIikKLSAgICAgICAgICAgIGlmIG5v
dCBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhmaWxlbmFtZSk6Ci0gICAgICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygiU2tpcHBlZCBkb2VzIG5vdCBleGlzdDogJXMiICUgZmlsZW5hbWUpCi0gICAgICAg
ICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIF9sb2cuZGVidWcoIlVzaW5nIFNraXBwZWQg
ZmlsZTogJXMiICUgZmlsZW5hbWUpCi0gICAgICAgICAgICBza2lwcGVkX2ZpbGVfY29udGVudHMg
PSBzZWxmLl9maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKGZpbGVuYW1lKQotICAgICAgICAgICAg
dGVzdHNfdG9fc2tpcC5leHRlbmQoc2VsZi5fdGVzdHNfZnJvbV9za2lwcGVkX2ZpbGVfY29udGVu
dHMoc2tpcHBlZF9maWxlX2NvbnRlbnRzKSkKLSAgICAgICAgcmV0dXJuIHRlc3RzX3RvX3NraXAK
LQotICAgIEBtZW1vaXplZAotICAgIGRlZiBza2lwcGVkX3BlcmZfdGVzdHMoc2VsZik6Ci0gICAg
ICAgIHJldHVybiBzZWxmLl9leHBlY3RhdGlvbnNfZnJvbV9za2lwcGVkX2ZpbGVzKFtzZWxmLnBl
cmZfdGVzdHNfZGlyKCldKQotCi0gICAgZGVmIHNraXBzX3BlcmZfdGVzdChzZWxmLCB0ZXN0X25h
bWUpOgotICAgICAgICBmb3IgdGVzdF9vcl9jYXRlZ29yeSBpbiBzZWxmLnNraXBwZWRfcGVyZl90
ZXN0cygpOgotICAgICAgICAgICAgaWYgdGVzdF9vcl9jYXRlZ29yeSA9PSB0ZXN0X25hbWU6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgICAgIGNhdGVnb3J5ID0gc2VsZi5f
ZmlsZXN5c3RlbS5qb2luKHNlbGYucGVyZl90ZXN0c19kaXIoKSwgdGVzdF9vcl9jYXRlZ29yeSkK
LSAgICAgICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uaXNkaXIoY2F0ZWdvcnkpIGFuZCB0ZXN0
X25hbWUuc3RhcnRzd2l0aCh0ZXN0X29yX2NhdGVnb3J5KToKLSAgICAgICAgICAgICAgICByZXR1
cm4gVHJ1ZQotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBuYW1lKHNlbGYpOgotICAg
ICAgICAiIiJSZXR1cm5zIGEgbmFtZSB0aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBwYXJ0
aWN1bGFyIHR5cGUgb2YgcG9ydAotICAgICAgICAoZS5nLiwgIm1hYy1zbm93bGVvcGFyZCIgb3Ig
ImNocm9taXVtLWxpbnV4LXg4Nl94NjQiIGFuZCBjYW4gYmUgcGFzc2VkCi0gICAgICAgIHRvIGZh
Y3RvcnkuZ2V0KCkgdG8gaW5zdGFudGlhdGUgdGhlIHBvcnQuIiIiCi0gICAgICAgIHJldHVybiBz
ZWxmLl9uYW1lCi0KLSAgICBkZWYgb3BlcmF0aW5nX3N5c3RlbShzZWxmKToKLSAgICAgICAgIyBT
dWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uCi0g
ICAgICAgIHJldHVybiAnbWFjJwotCi0gICAgZGVmIHZlcnNpb24oc2VsZik6Ci0gICAgICAgICIi
IlJldHVybnMgYSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgdmVyc2lvbiBvZiBhIGdpdmVuIHBsYXRm
b3JtLCBlLmcuCi0gICAgICAgICdsZW9wYXJkJyBvciAneHAnLgotCi0gICAgICAgIFRoaXMgaXMg
dXNlZCB0byBoZWxwIGlkZW50aWZ5IHRoZSBleGFjdCBwb3J0IHdoZW4gcGFyc2luZyB0ZXN0Ci0g
ICAgICAgIGV4cGVjdGF0aW9ucywgZGV0ZXJtaW5pbmcgc2VhcmNoIHBhdGhzLCBhbmQgbG9nZ2lu
ZyBpbmZvcm1hdGlvbi4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3ZlcnNpb24KLQotICAgIGRl
ZiBhcmNoaXRlY3R1cmUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9hcmNoaXRlY3R1cmUK
LQotICAgIGRlZiBnZXRfb3B0aW9uKHNlbGYsIG5hbWUsIGRlZmF1bHRfdmFsdWU9Tm9uZSk6Ci0g
ICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuX29wdGlvbnMsIG5hbWUsIGRlZmF1bHRfdmFsdWUp
Ci0KLSAgICBkZWYgc2V0X29wdGlvbl9kZWZhdWx0KHNlbGYsIG5hbWUsIGRlZmF1bHRfdmFsdWUp
OgotICAgICAgICByZXR1cm4gc2VsZi5fb3B0aW9ucy5lbnN1cmVfdmFsdWUobmFtZSwgZGVmYXVs
dF92YWx1ZSkKLQotICAgIEBtZW1vaXplZAotICAgIGRlZiBwYXRoX3RvX2dlbmVyaWNfdGVzdF9l
eHBlY3RhdGlvbnNfZmlsZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0u
am9pbihzZWxmLmxheW91dF90ZXN0c19kaXIoKSwgJ1Rlc3RFeHBlY3RhdGlvbnMnKQotCi0gICAg
QG1lbW9pemVkCi0gICAgZGVmIHBhdGhfdG9fdGVzdF9leHBlY3RhdGlvbnNfZmlsZShzZWxmKToK
LSAgICAgICAgIiIiVXBkYXRlIHRoZSB0ZXN0IGV4cGVjdGF0aW9ucyB0byB0aGUgcGFzc2VkLWlu
IHN0cmluZy4KLQotICAgICAgICBUaGlzIGlzIHVzZWQgYnkgdGhlIHJlYmFzZWxpbmluZyB0b29s
LiBSYWlzZXMgTm90SW1wbGVtZW50ZWRFcnJvcgotICAgICAgICBpZiB0aGUgcG9ydCBkb2VzIG5v
dCB1c2UgZXhwZWN0YXRpb25zIGZpbGVzLiIiIgotCi0gICAgICAgICMgRklYTUU6IFdlIG5lZWQg
dG8gcmVtb3ZlIHRoaXMgd2hlbiB3ZSBtYWtlIHJlYmFzZWxpbmluZyB3b3JrIHdpdGggbXVsdGlw
bGUgZmlsZXMgYW5kIGp1c3QgZ2VuZXJhbGl6ZSBleHBlY3RhdGlvbnNfZmlsZXMoKS4KLQotICAg
ICAgICAjIHRlc3RfZXhwZWN0YXRpb25zIGFyZSBhbHdheXMgaW4gbWFjLyBub3QgbWFjLWxlb3Bh
cmQvIGJ5IGNvbnZlbnRpb24sIGhlbmNlIHdlIHVzZSBwb3J0X25hbWUgaW5zdGVhZCBvZiBuYW1l
KCkuCi0gICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fd2Via2l0X2Jh
c2VsaW5lX3BhdGgoc2VsZi5wb3J0X25hbWUpLCAnVGVzdEV4cGVjdGF0aW9ucycpCi0KLSAgICBk
ZWYgcmVsYXRpdmVfdGVzdF9maWxlbmFtZShzZWxmLCBmaWxlbmFtZSk6Ci0gICAgICAgICIiIlJl
dHVybnMgYSB0ZXN0X25hbWUgYSByZWxhdGl2ZSB1bml4LXN0eWxlIHBhdGggZm9yIGEgZmlsZW5h
bWUgdW5kZXIgdGhlIExheW91dFRlc3RzCi0gICAgICAgIGRpcmVjdG9yeS4gUG9ydHMgbWF5IGxl
Z2l0aW1hdGVseSByZXR1cm4gYWJzcGF0aHMgaGVyZSBpZiBubyByZWxwYXRoIG1ha2VzIHNlbnNl
LiIiIgotICAgICAgICAjIFBvcnRzIHRoYXQgcnVuIG9uIHdpbmRvd3MgbmVlZCB0byBvdmVycmlk
ZSB0aGlzIG1ldGhvZCB0byBkZWFsIHdpdGgKLSAgICAgICAgIyBmaWxlbmFtZXMgd2l0aCBiYWNr
c2xhc2hlcyBpbiB0aGVtLgotICAgICAgICBpZiBmaWxlbmFtZS5zdGFydHN3aXRoKHNlbGYubGF5
b3V0X3Rlc3RzX2RpcigpKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmhvc3QuZmlsZXN5c3Rl
bS5yZWxwYXRoKGZpbGVuYW1lLCBzZWxmLmxheW91dF90ZXN0c19kaXIoKSkKLSAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmhvc3QuZmlsZXN5c3RlbS5hYnNwYXRoKGZpbGVu
YW1lKQotCi0gICAgQG1lbW9pemVkCi0gICAgZGVmIGFic3BhdGhfZm9yX3Rlc3Qoc2VsZiwgdGVz
dF9uYW1lKToKLSAgICAgICAgIiIiUmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBmaWxlIGZv
ciBhIGdpdmVuIHRlc3QgbmFtZS4gVGhpcyBpcyB0aGUKLSAgICAgICAgaW52ZXJzZSBvZiByZWxh
dGl2ZV90ZXN0X2ZpbGVuYW1lKCkuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVt
LmpvaW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCksIHRlc3RfbmFtZSkKLQotICAgIGRlZiByZXN1
bHRzX2RpcmVjdG9yeShzZWxmKToKLSAgICAgICAgIiIiQWJzb2x1dGUgcGF0aCB0byB0aGUgcGxh
Y2UgdG8gc3RvcmUgdGhlIHRlc3QgcmVzdWx0cyAodXNlcyAtLXJlc3VsdHMtZGlyZWN0b3J5KS4i
IiIKLSAgICAgICAgaWYgbm90IHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5OgotICAgICAgICAgICAg
b3B0aW9uX3ZhbCA9IHNlbGYuZ2V0X29wdGlvbigncmVzdWx0c19kaXJlY3RvcnknKSBvciBzZWxm
LmRlZmF1bHRfcmVzdWx0c19kaXJlY3RvcnkoKQotICAgICAgICAgICAgc2VsZi5fcmVzdWx0c19k
aXJlY3RvcnkgPSBzZWxmLl9maWxlc3lzdGVtLmFic3BhdGgob3B0aW9uX3ZhbCkKLSAgICAgICAg
cmV0dXJuIHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5Ci0KLSAgICBkZWYgcGVyZl9yZXN1bHRzX2Rp
cmVjdG9yeShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoKQotCi0gICAg
ZGVmIGRlZmF1bHRfcmVzdWx0c19kaXJlY3Rvcnkoc2VsZik6Ci0gICAgICAgICIiIkFic29sdXRl
IHBhdGggdG8gdGhlIGRlZmF1bHQgcGxhY2UgdG8gc3RvcmUgdGhlIHRlc3QgcmVzdWx0cy4iIiIK
LSAgICAgICAgIyBSZXN1bHRzIGFyZSBzdG9yZSByZWxhdGl2ZSB0byB0aGUgYnVpbHQgcHJvZHVj
dHMgdG8gbWFrZSBpdCBlYXN5Ci0gICAgICAgICMgdG8gaGF2ZSBtdWx0aXBsZSBjb3BpZXMgb2Yg
d2Via2l0IGNoZWNrZWQgb3V0IGFuZCBidWlsdC4KLSAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxk
X3BhdGgoJ2xheW91dC10ZXN0LXJlc3VsdHMnKQotCi0gICAgZGVmIHNldHVwX3Rlc3RfcnVuKHNl
bGYpOgotICAgICAgICAiIiJQZXJmb3JtIHBvcnQtc3BlY2lmaWMgd29yayBhdCB0aGUgYmVnaW5u
aW5nIG9mIGEgdGVzdCBydW4uIiIiCi0gICAgICAgIHBhc3MKLQotICAgIGRlZiBjbGVhbl91cF90
ZXN0X3J1bihzZWxmKToKLSAgICAgICAgIiIiUGVyZm9ybSBwb3J0LXNwZWNpZmljIHdvcmsgYXQg
dGhlIGVuZCBvZiBhIHRlc3QgcnVuLiIiIgotICAgICAgICBpZiBzZWxmLl9pbWFnZV9kaWZmZXI6
Ci0gICAgICAgICAgICBzZWxmLl9pbWFnZV9kaWZmZXIuc3RvcCgpCi0gICAgICAgICAgICBzZWxm
Ll9pbWFnZV9kaWZmZXIgPSBOb25lCi0KLSAgICAjIEZJWE1FOiBvcy5lbnZpcm9uIGFjY2VzcyBz
aG91bGQgYmUgbW92ZWQgdG8gb250byBhIGNvbW1vbi9zeXN0ZW0gY2xhc3MgdG8gYmUgbW9yZSBl
YXNpbHkgbW9ja2FibGUuCi0gICAgZGVmIF92YWx1ZV9vcl9kZWZhdWx0X2Zyb21fZW52aXJvbihz
ZWxmLCBuYW1lLCBkZWZhdWx0PU5vbmUpOgotICAgICAgICBpZiBuYW1lIGluIG9zLmVudmlyb246
Ci0gICAgICAgICAgICByZXR1cm4gb3MuZW52aXJvbltuYW1lXQotICAgICAgICByZXR1cm4gZGVm
YXVsdAotCi0gICAgZGVmIF9jb3B5X3ZhbHVlX2Zyb21fZW52aXJvbl9pZl9zZXQoc2VsZiwgY2xl
YW5fZW52LCBuYW1lKToKLSAgICAgICAgaWYgbmFtZSBpbiBvcy5lbnZpcm9uOgotICAgICAgICAg
ICAgY2xlYW5fZW52W25hbWVdID0gb3MuZW52aXJvbltuYW1lXQotCi0gICAgZGVmIHNldHVwX2Vu
dmlyb25fZm9yX3NlcnZlcihzZWxmLCBzZXJ2ZXJfbmFtZT1Ob25lKToKLSAgICAgICAgIyBXZSBp
bnRlbnRpb25hbGx5IGNvcHkgb25seSBhIHN1YnNldCBvZiBvcy5lbnZpcm9uIHdoZW4KLSAgICAg
ICAgIyBsYXVuY2hpbmcgc3VicHJvY2Vzc2VzIHRvIGVuc3VyZSBjb25zaXN0ZW50IHRlc3QgcmVz
dWx0cy4KLSAgICAgICAgY2xlYW5fZW52ID0ge30KLSAgICAgICAgdmFyaWFibGVzX3RvX2NvcHkg
PSBbCi0gICAgICAgICAgICAjIEZvciBMaW51eDoKLSAgICAgICAgICAgICdYQVVUSE9SSVRZJywK
LSAgICAgICAgICAgICdIT01FJywKLSAgICAgICAgICAgICdMQU5HJywKLSAgICAgICAgICAgICdM
RF9MSUJSQVJZX1BBVEgnLAotICAgICAgICAgICAgJ0RCVVNfU0VTU0lPTl9CVVNfQUREUkVTUycs
Ci0gICAgICAgICAgICAnWERHX0RBVEFfRElSUycsCi0KLSAgICAgICAgICAgICMgRGFyd2luOgot
ICAgICAgICAgICAgJ0RZTERfTElCUkFSWV9QQVRIJywKLSAgICAgICAgICAgICdIT01FJywKLQot
ICAgICAgICAgICAgIyBDWUdXSU46Ci0gICAgICAgICAgICAnSE9NRURSSVZFJywKLSAgICAgICAg
ICAgICdIT01FUEFUSCcsCi0gICAgICAgICAgICAnX05UX1NZTUJPTF9QQVRIJywKLQotICAgICAg
ICAgICAgIyBXaW5kb3dzOgotICAgICAgICAgICAgJ1BBVEgnLAotCi0gICAgICAgICAgICAjIE1v
c3QgcG9ydHMgKD8pOgotICAgICAgICAgICAgJ1dFQktJVF9URVNURk9OVFMnLAotICAgICAgICAg
ICAgJ1dFQktJVE9VVFBVVERJUicsCi0KLSAgICAgICAgICAgICMgQ2hyb21pdW06Ci0gICAgICAg
ICAgICAnQ0hST01FX0RFVkVMX1NBTkRCT1gnLAotICAgICAgICBdCi0gICAgICAgIGZvciB2YXJp
YWJsZSBpbiB2YXJpYWJsZXNfdG9fY29weToKLSAgICAgICAgICAgIHNlbGYuX2NvcHlfdmFsdWVf
ZnJvbV9lbnZpcm9uX2lmX3NldChjbGVhbl9lbnYsIHZhcmlhYmxlKQotCi0gICAgICAgICMgRm9y
IExpbnV4OgotICAgICAgICBjbGVhbl9lbnZbJ0RJU1BMQVknXSA9IHNlbGYuX3ZhbHVlX29yX2Rl
ZmF1bHRfZnJvbV9lbnZpcm9uKCdESVNQTEFZJywgJzoxJykKLQotICAgICAgICBmb3Igc3RyaW5n
X3ZhcmlhYmxlIGluIHNlbGYuZ2V0X29wdGlvbignYWRkaXRpb25hbF9lbnZfdmFyJywgW10pOgot
ICAgICAgICAgICAgW25hbWUsIHZhbHVlXSA9IHN0cmluZ192YXJpYWJsZS5zcGxpdCgnPScsIDEp
Ci0gICAgICAgICAgICBjbGVhbl9lbnZbbmFtZV0gPSB2YWx1ZQotCi0gICAgICAgIHJldHVybiBj
bGVhbl9lbnYKLQotICAgIGRlZiBzaG93X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYsIHJlc3VsdHNf
ZmlsZW5hbWUpOgotICAgICAgICAiIiJUaGlzIHJvdXRpbmUgc2hvdWxkIGRpc3BsYXkgdGhlIEhU
TUwgZmlsZSBwb2ludGVkIGF0IGJ5Ci0gICAgICAgIHJlc3VsdHNfZmlsZW5hbWUgaW4gYSB1c2Vy
cycgYnJvd3Nlci4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuaG9zdC51c2VyLm9wZW5fdXJsKHBh
dGguYWJzcGF0aF90b191cmkoc2VsZi5ob3N0LnBsYXRmb3JtLCByZXN1bHRzX2ZpbGVuYW1lKSkK
LQotICAgIGRlZiBjcmVhdGVfZHJpdmVyKHNlbGYsIHdvcmtlcl9udW1iZXIsIG5vX3RpbWVvdXQ9
RmFsc2UpOgotICAgICAgICAiIiJSZXR1cm4gYSBuZXdseSBjcmVhdGVkIERyaXZlciBzdWJjbGFz
cyBmb3Igc3RhcnRpbmcvc3RvcHBpbmcgdGhlIHRlc3QgZHJpdmVyLiIiIgotICAgICAgICByZXR1
cm4gZHJpdmVyLkRyaXZlclByb3h5KHNlbGYsIHdvcmtlcl9udW1iZXIsIHNlbGYuX2RyaXZlcl9j
bGFzcygpLCBwaXhlbF90ZXN0cz1zZWxmLmdldF9vcHRpb24oJ3BpeGVsX3Rlc3RzJyksIG5vX3Rp
bWVvdXQ9bm9fdGltZW91dCkKLQotICAgIGRlZiBzdGFydF9oZWxwZXIoc2VsZik6Ci0gICAgICAg
ICIiIklmIGEgcG9ydCBuZWVkcyB0byByZWNvbmZpZ3VyZSBncmFwaGljcyBzZXR0aW5ncyBvciBk
byBvdGhlcgotICAgICAgICB0aGluZ3MgdG8gZW5zdXJlIGEga25vd24gdGVzdCBjb25maWd1cmF0
aW9uLCBpdCBzaG91bGQgb3ZlcnJpZGUgdGhpcwotICAgICAgICBtZXRob2QuIiIiCi0gICAgICAg
IHBhc3MKLQotICAgIGRlZiByZXF1aXJlc19odHRwX3NlcnZlcihzZWxmKToKLSAgICAgICAgIiIi
RG9lcyB0aGUgcG9ydCByZXF1aXJlIGFuIEhUVFAgc2VydmVyIGZvciBydW5uaW5nIHRlc3RzPyBU
aGlzIGNvdWxkCi0gICAgICAgIGJlIHRoZSBjYXNlIHdoZW4gdGhlIHRlc3RzIGFyZW4ndCBydW4g
b24gdGhlIGhvc3QgcGxhdGZvcm0uIiIiCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgZGVm
IHN0YXJ0X2h0dHBfc2VydmVyKHNlbGYsIGFkZGl0aW9uYWxfZGlycz1Ob25lLCBudW1iZXJfb2Zf
c2VydmVycz1Ob25lKToKLSAgICAgICAgIiIiU3RhcnQgYSB3ZWIgc2VydmVyLiBSYWlzZSBhbiBl
cnJvciBpZiBpdCBjYW4ndCBzdGFydCBvciBpcyBhbHJlYWR5IHJ1bm5pbmcuCi0KLSAgICAgICAg
UG9ydHMgY2FuIHN0dWIgdGhpcyBvdXQgaWYgdGhleSBkb24ndCBuZWVkIGEgd2ViIHNlcnZlciB0
byBiZSBydW5uaW5nLiIiIgotICAgICAgICBhc3NlcnQgbm90IHNlbGYuX2h0dHBfc2VydmVyLCAn
QWxyZWFkeSBydW5uaW5nIGFuIGh0dHAgc2VydmVyLicKLQotICAgICAgICBpZiBzZWxmLl91c2Vz
X2FwYWNoZSgpOgotICAgICAgICAgICAgc2VydmVyID0gYXBhY2hlX2h0dHBfc2VydmVyLkxheW91
dFRlc3RBcGFjaGVIdHRwZChzZWxmLCBzZWxmLnJlc3VsdHNfZGlyZWN0b3J5KCksIGFkZGl0aW9u
YWxfZGlycz1hZGRpdGlvbmFsX2RpcnMsIG51bWJlcl9vZl9zZXJ2ZXJzPW51bWJlcl9vZl9zZXJ2
ZXJzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VydmVyID0gaHR0cF9zZXJ2ZXIuTGln
aHR0cGQoc2VsZiwgc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSgpLCBhZGRpdGlvbmFsX2RpcnM9YWRk
aXRpb25hbF9kaXJzLCBudW1iZXJfb2Zfc2VydmVycz1udW1iZXJfb2Zfc2VydmVycykKLQotICAg
ICAgICBzZXJ2ZXIuc3RhcnQoKQotICAgICAgICBzZWxmLl9odHRwX3NlcnZlciA9IHNlcnZlcgot
Ci0gICAgZGVmIHN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoc2VsZik6Ci0gICAgICAgICIiIlN0YXJ0
IGEgd2ViIHNlcnZlci4gUmFpc2UgYW4gZXJyb3IgaWYgaXQgY2FuJ3Qgc3RhcnQgb3IgaXMgYWxy
ZWFkeSBydW5uaW5nLgotCi0gICAgICAgIFBvcnRzIGNhbiBzdHViIHRoaXMgb3V0IGlmIHRoZXkg
ZG9uJ3QgbmVlZCBhIHdlYnNvY2tldCBzZXJ2ZXIgdG8gYmUgcnVubmluZy4iIiIKLSAgICAgICAg
YXNzZXJ0IG5vdCBzZWxmLl93ZWJzb2NrZXRfc2VydmVyLCAnQWxyZWFkeSBydW5uaW5nIGEgd2Vi
c29ja2V0IHNlcnZlci4nCi0KLSAgICAgICAgc2VydmVyID0gd2Vic29ja2V0X3NlcnZlci5QeVdl
YlNvY2tldChzZWxmLCBzZWxmLnJlc3VsdHNfZGlyZWN0b3J5KCkpCi0gICAgICAgIHNlcnZlci5z
dGFydCgpCi0gICAgICAgIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIgPSBzZXJ2ZXIKLQotICAgIGRl
ZiBodHRwX3NlcnZlcl9zdXBwb3J0c19pcHY2KHNlbGYpOgotICAgICAgICAjIEN5Z3dpbiBpcyB0
aGUgb25seSBwbGF0Zm9ybSB0byBzdGlsbCB1c2UgQXBhY2hlIDEuMywgd2hpY2ggb25seSBzdXBw
b3J0cyBJUFY0LgotICAgICAgICAjIE9uY2UgaXQgbW92ZXMgdG8gQXBhY2hlIDIsIHdlIGNhbiBk
cm9wIHRoaXMgbWV0aG9kIGFsdG9nZXRoZXIuCi0gICAgICAgIGlmIHNlbGYuaG9zdC5wbGF0Zm9y
bS5pc19jeWd3aW4oKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4g
VHJ1ZQotCi0gICAgZGVmIGFjcXVpcmVfaHR0cF9sb2NrKHNlbGYpOgotICAgICAgICBzZWxmLl9o
dHRwX2xvY2sgPSBodHRwX2xvY2suSHR0cExvY2soTm9uZSwgZmlsZXN5c3RlbT1zZWxmLl9maWxl
c3lzdGVtLCBleGVjdXRpdmU9c2VsZi5fZXhlY3V0aXZlKQotICAgICAgICBzZWxmLl9odHRwX2xv
Y2sud2FpdF9mb3JfaHR0cGRfbG9jaygpCi0KLSAgICBkZWYgc3RvcF9oZWxwZXIoc2VsZik6Ci0g
ICAgICAgICIiIlNodXQgZG93biB0aGUgdGVzdCBoZWxwZXIgaWYgaXQgaXMgcnVubmluZy4gRG8g
bm90aGluZyBpZgotICAgICAgICBpdCBpc24ndCwgb3IgaXQgaXNuJ3QgYXZhaWxhYmxlLiBJZiBh
IHBvcnQgb3ZlcnJpZGVzIHN0YXJ0X2hlbHBlcigpCi0gICAgICAgIGl0IG11c3Qgb3ZlcnJpZGUg
dGhpcyByb3V0aW5lIGFzIHdlbGwuIiIiCi0gICAgICAgIHBhc3MKLQotICAgIGRlZiBzdG9wX2h0
dHBfc2VydmVyKHNlbGYpOgotICAgICAgICAiIiJTaHV0IGRvd24gdGhlIGh0dHAgc2VydmVyIGlm
IGl0IGlzIHJ1bm5pbmcuIERvIG5vdGhpbmcgaWYgaXQgaXNuJ3QuIiIiCi0gICAgICAgIGlmIHNl
bGYuX2h0dHBfc2VydmVyOgotICAgICAgICAgICAgc2VsZi5faHR0cF9zZXJ2ZXIuc3RvcCgpCi0g
ICAgICAgICAgICBzZWxmLl9odHRwX3NlcnZlciA9IE5vbmUKLQotICAgIGRlZiBzdG9wX3dlYnNv
Y2tldF9zZXJ2ZXIoc2VsZik6Ci0gICAgICAgICIiIlNodXQgZG93biB0aGUgd2Vic29ja2V0IHNl
cnZlciBpZiBpdCBpcyBydW5uaW5nLiBEbyBub3RoaW5nIGlmIGl0IGlzbid0LiIiIgotICAgICAg
ICBpZiBzZWxmLl93ZWJzb2NrZXRfc2VydmVyOgotICAgICAgICAgICAgc2VsZi5fd2Vic29ja2V0
X3NlcnZlci5zdG9wKCkKLSAgICAgICAgICAgIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIgPSBOb25l
Ci0KLSAgICBkZWYgcmVsZWFzZV9odHRwX2xvY2soc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX2h0
dHBfbG9jazoKLSAgICAgICAgICAgIHNlbGYuX2h0dHBfbG9jay5jbGVhbnVwX2h0dHBfbG9jaygp
Ci0KLSAgICBkZWYgZXhpdF9jb2RlX2Zyb21fc3VtbWFyaXplZF9yZXN1bHRzKHNlbGYsIHVuZXhw
ZWN0ZWRfcmVzdWx0cyk6Ci0gICAgICAgICIiIkdpdmVuIHN1bW1hcml6ZWQgcmVzdWx0cywgY29t
cHV0ZSB0aGUgZXhpdCBjb2RlIHRvIGJlIHJldHVybmVkIGJ5IG5ldy1ydW4td2Via2l0LXRlc3Rz
LgotICAgICAgICBCb3RzIHR1cm4gcmVkIHdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbm9u
LXplcm8gdmFsdWUuIEJ5IGRlZmF1bHQsIHJldHVybiB0aGUgbnVtYmVyIG9mIHJlZ3Jlc3Npb25z
Ci0gICAgICAgIHRvIGF2b2lkIHR1cm5pbmcgYm90cyByZWQgYnkgZmxha3kgZmFpbHVyZXMsIHVu
ZXhwZWN0ZWQgcGFzc2VzLCBhbmQgbWlzc2luZyByZXN1bHRzIiIiCi0gICAgICAgICMgRG9uJ3Qg
dHVybiBib3RzIHJlZCBmb3IgZmxha3kgZmFpbHVyZXMsIHVuZXhwZWN0ZWQgcGFzc2VzLCBhbmQg
bWlzc2luZyByZXN1bHRzLgotICAgICAgICByZXR1cm4gdW5leHBlY3RlZF9yZXN1bHRzWydudW1f
cmVncmVzc2lvbnMnXQotCi0gICAgIwotICAgICMgVEVTVCBFWFBFQ1RBVElPTi1SRUxBVEVEIE1F
VEhPRFMKLSAgICAjCi0KLSAgICBkZWYgdGVzdF9jb25maWd1cmF0aW9uKHNlbGYpOgotICAgICAg
ICAiIiJSZXR1cm5zIHRoZSBjdXJyZW50IFRlc3RDb25maWd1cmF0aW9uIGZvciB0aGUgcG9ydC4i
IiIKLSAgICAgICAgaWYgbm90IHNlbGYuX3Rlc3RfY29uZmlndXJhdGlvbjoKLSAgICAgICAgICAg
IHNlbGYuX3Rlc3RfY29uZmlndXJhdGlvbiA9IFRlc3RDb25maWd1cmF0aW9uKHNlbGYuX3ZlcnNp
b24sIHNlbGYuX2FyY2hpdGVjdHVyZSwgc2VsZi5fb3B0aW9ucy5jb25maWd1cmF0aW9uLmxvd2Vy
KCkpCi0gICAgICAgIHJldHVybiBzZWxmLl90ZXN0X2NvbmZpZ3VyYXRpb24KLQotICAgICMgRklY
TUU6IEJlbG9uZ3Mgb24gYSBQbGF0Zm9ybSBvYmplY3QuCi0gICAgQG1lbW9pemVkCi0gICAgZGVm
IGFsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm5zIGEgbGlz
dCBvZiBUZXN0Q29uZmlndXJhdGlvbiBpbnN0YW5jZXMsIHJlcHJlc2VudGluZyBhbGwgYXZhaWxh
YmxlCi0gICAgICAgIHRlc3QgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgcG9ydC4iIiIKLSAgICAg
ICAgcmV0dXJuIHNlbGYuX2dlbmVyYXRlX2FsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKCkKLQotICAg
ICMgRklYTUU6IEJlbG9uZ3Mgb24gYSBQbGF0Zm9ybSBvYmplY3QuCi0gICAgZGVmIGNvbmZpZ3Vy
YXRpb25fc3BlY2lmaWVyX21hY3JvcyhzZWxmKToKLSAgICAgICAgIiIiUG9ydHMgbWF5IHByb3Zp
ZGUgYSB3YXkgdG8gYWJicmV2aWF0ZSBjb25maWd1cmF0aW9uIHNwZWNpZmllcnMgdG8gY29udmVu
aWVudGx5Ci0gICAgICAgIHJlZmVyIHRvIHRoZW0gYXMgb25lIHRlcm0gb3IgYWxpYXMgc3BlY2lm
aWMgdmFsdWVzIHRvIG1vcmUgZ2VuZXJpYyBvbmVzLiBGb3IgZXhhbXBsZToKLQotICAgICAgICAo
eHAsIHZpc3RhLCB3aW43KSAtPiB3aW4gIyBBYmJyZXZpYXRlIGFsbCBXaW5kb3dzIHZlcnNpb25z
IGludG8gb25lIG5hbWVzYWtlLgotICAgICAgICAobHVjaWQpIC0+IGxpbnV4ICAjIENoYW5nZSBz
cGVjaWZpYyBuYW1lIG9mIHRoZSBMaW51eCBkaXN0cm8gdG8gYSBtb3JlIGdlbmVyaWMgdGVybS4K
LQotICAgICAgICBSZXR1cm5zIGEgZGljdGlvbmFyeSwgZWFjaCBrZXkgcmVwcmVzZW50aW5nIGEg
bWFjcm8gdGVybSAoJ3dpbicsIGZvciBleGFtcGxlKSwKLSAgICAgICAgYW5kIHZhbHVlIGJlaW5n
IGEgbGlzdCBvZiB2YWxpZCBjb25maWd1cmF0aW9uIHNwZWNpZmllcnMgKHN1Y2ggYXMgWyd4cCcs
ICd2aXN0YScsICd3aW43J10pLiIiIgotICAgICAgICByZXR1cm4ge30KLQotICAgIGRlZiBhbGxf
YmFzZWxpbmVfdmFyaWFudHMoc2VsZik6Ci0gICAgICAgICIiIlJldHVybnMgYSBsaXN0IG9mIHBs
YXRmb3JtIG5hbWVzIHN1ZmZpY2llbnQgdG8gY292ZXIgYWxsIHRoZSBiYXNlbGluZXMuCi0KLSAg
ICAgICAgVGhlIGxpc3Qgc2hvdWxkIGJlIHNvcnRlZCBzbyB0aGF0IGEgbGF0ZXIgcGxhdGZvcm0g
IHdpbGwgcmV1c2UKLSAgICAgICAgYW4gZWFybGllciBwbGF0Zm9ybSdzIGJhc2VsaW5lcyBpZiB0
aGV5IGFyZSB0aGUgc2FtZSAoZS5nLiwKLSAgICAgICAgJ3Nub3dsZW9wYXJkJyBzaG91bGQgcHJl
Y2VkZSAnbGVvcGFyZCcpLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0K
LSAgICBkZWYgdXNlc190ZXN0X2V4cGVjdGF0aW9uc19maWxlKHNlbGYpOgotICAgICAgICAjIFRo
aXMgaXMgZGlmZmVyZW50IGZyb20gY2hlY2tpbmcgdGVzdF9leHBlY3RhdGlvbnMoKSBpcyBOb25l
LCBiZWNhdXNlCi0gICAgICAgICMgc29tZSBwb3J0cyBoYXZlIFNraXBwZWQgZmlsZXMgd2hpY2gg
YXJlIHJldHVybmVkIGFzIHBhcnQgb2YgdGVzdF9leHBlY3RhdGlvbnMoKS4KLSAgICAgICAgcmV0
dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYucGF0aF90b190ZXN0X2V4cGVjdGF0aW9u
c19maWxlKCkpCi0KLSAgICBkZWYgd2Fybl9pZl9idWdfbWlzc2luZ19pbl90ZXN0X2V4cGVjdGF0
aW9ucyhzZWxmKToKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBkZWYgZXhwZWN0YXRpb25z
X2RpY3Qoc2VsZik6Ci0gICAgICAgICIiIlJldHVybnMgYW4gT3JkZXJlZERpY3Qgb2YgbmFtZSAt
PiBleHBlY3RhdGlvbnMgc3RyaW5ncy4KLSAgICAgICAgVGhlIG5hbWVzIGFyZSBleHBlY3RlZCB0
byBiZSAoYnV0IG5vdCByZXF1aXJlZCB0byBiZSkgcGF0aHMgaW4gdGhlIGZpbGVzeXN0ZW0uCi0g
ICAgICAgIElmIHRoZSBuYW1lIGlzIGEgcGF0aCwgdGhlIGZpbGUgY2FuIGJlIGNvbnNpZGVyZWQg
dXBkYXRhYmxlIGZvciB0aGluZ3MgbGlrZSByZWJhc2VsaW5pbmcsCi0gICAgICAgIHNvIGRvbid0
IHVzZSBuYW1lcyB0aGF0IGFyZSBwYXRocyBpZiB0aGV5J3JlIG5vdCBwYXRocy4KLSAgICAgICAg
R2VuZXJhbGx5IHNwZWFraW5nIHRoZSBvcmRlcmluZyBzaG91bGQgYmUgZmlsZXMgaW4gdGhlIGZp
bGVzeXN0ZW0gaW4gY2FzY2FkZSBvcmRlcgotICAgICAgICAoVGVzdEV4cGVjdGF0aW9ucyBmb2xs
b3dlZCBieSBTa2lwcGVkLCBpZiB0aGUgcG9ydCBob25vcnMgYm90aCBmb3JtYXRzKSwKLSAgICAg
ICAgdGhlbiBhbnkgYnVpbHQtaW4gZXhwZWN0YXRpb25zIChlLmcuLCBmcm9tIGNvbXBpbGUtdGlt
ZSBleGNsdXNpb25zKSwgdGhlbiAtLWFkZGl0aW9uYWwtZXhwZWN0YXRpb25zIG9wdGlvbnMuIiIi
Ci0gICAgICAgICMgRklYTUU6IHJlbmFtZSB0aGlzIHRvIHRlc3RfZXhwZWN0YXRpb25zKCkgb25j
ZSBhbGwgdGhlIGNhbGxlcnMgYXJlIHVwZGF0ZWQgdG8ga25vdyBhYm91dCB0aGUgb3JkZXJlZCBk
aWN0LgotICAgICAgICBleHBlY3RhdGlvbnMgPSBPcmRlcmVkRGljdCgpCi0KLSAgICAgICAgZm9y
IHBhdGggaW4gc2VsZi5leHBlY3RhdGlvbnNfZmlsZXMoKToKLSAgICAgICAgICAgIGlmIHNlbGYu
X2ZpbGVzeXN0ZW0uZXhpc3RzKHBhdGgpOgotICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9uc1tw
YXRoXSA9IHNlbGYuX2ZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUocGF0aCkKLQotICAgICAgICBm
b3IgcGF0aCBpbiBzZWxmLmdldF9vcHRpb24oJ2FkZGl0aW9uYWxfZXhwZWN0YXRpb25zJywgW10p
OgotICAgICAgICAgICAgZXhwYW5kZWRfcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uZXhwYW5kdXNl
cihwYXRoKQotICAgICAgICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoZXhwYW5kZWRf
cGF0aCk6Ci0gICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygicmVhZGluZyBhZGRpdGlvbmFsX2V4
cGVjdGF0aW9ucyBmcm9tIHBhdGggJyVzJyIgJSBwYXRoKQotICAgICAgICAgICAgICAgIGV4cGVj
dGF0aW9uc1twYXRoXSA9IHNlbGYuX2ZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUoZXhwYW5kZWRf
cGF0aCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCJh
ZGRpdGlvbmFsX2V4cGVjdGF0aW9ucyBwYXRoICclcycgZG9lcyBub3QgZXhpc3QiICUgcGF0aCkK
LSAgICAgICAgcmV0dXJuIGV4cGVjdGF0aW9ucwotCi0gICAgZGVmIF9wb3J0X3NwZWNpZmljX2V4
cGVjdGF0aW9uc19maWxlcyhzZWxmKToKLSAgICAgICAgIyBVbmxpa2UgYmFzZWxpbmVfc2VhcmNo
X3BhdGgsIHdlIG9ubHkgd2FudCB0byBzZWFyY2ggW1dLMi1QT1JULCBQT1JULVZFUlNJT04sIFBP
UlRdIGFuZCBhbnkgZGlyZWN0b3JpZXMKLSAgICAgICAgIyBpbmNsdWRlZCB2aWEgLS1hZGRpdGlv
bmFsLXBsYXRmb3JtLWRpcmVjdG9yeSwgbm90IHRoZSBmdWxsIGNhc2FkZS4KLSAgICAgICAgc2Vh
cmNoX3BhdGhzID0gW3NlbGYucG9ydF9uYW1lXQotCi0gICAgICAgIG5vbl93azJfbmFtZSA9IHNl
bGYubmFtZSgpLnJlcGxhY2UoJy13azInLCAnJykKLSAgICAgICAgaWYgbm9uX3drMl9uYW1lICE9
IHNlbGYucG9ydF9uYW1lOgotICAgICAgICAgICAgc2VhcmNoX3BhdGhzLmFwcGVuZChub25fd2sy
X25hbWUpCi0KLSAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9ydW5uZXIn
KToKLSAgICAgICAgICAgICMgQmVjYXVzZSBuZWFybHkgYWxsIG9mIHRoZSBza2lwcGVkIHRlc3Rz
IGZvciBXZWJLaXQgMiBhcmUgZHVlIHRvIGNyb3NzLXBsYXRmb3JtCi0gICAgICAgICAgICAjIGlz
c3VlcywgYWxsIHdrMiBwb3J0cyBzaGFyZSBhIHNraXBwZWQgbGlzdCB1bmRlciBwbGF0Zm9ybS93
azIuCi0gICAgICAgICAgICBzZWFyY2hfcGF0aHMuZXh0ZW5kKFsid2syIiwgc2VsZi5fd2syX3Bv
cnRfbmFtZSgpXSkKLQotICAgICAgICBzZWFyY2hfcGF0aHMuZXh0ZW5kKHNlbGYuZ2V0X29wdGlv
bigiYWRkaXRpb25hbF9wbGF0Zm9ybV9kaXJlY3RvcnkiLCBbXSkpCi0KLSAgICAgICAgcmV0dXJu
IFtzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoZCksICdU
ZXN0RXhwZWN0YXRpb25zJykgZm9yIGQgaW4gc2VhcmNoX3BhdGhzXQotCi0gICAgZGVmIGV4cGVj
dGF0aW9uc19maWxlcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFtzZWxmLnBhdGhfdG9fZ2VuZXJp
Y190ZXN0X2V4cGVjdGF0aW9uc19maWxlKCldICsgc2VsZi5fcG9ydF9zcGVjaWZpY19leHBlY3Rh
dGlvbnNfZmlsZXMoKQotCi0gICAgZGVmIHJlcG9zaXRvcnlfcGF0aHMoc2VsZik6Ci0gICAgICAg
ICIiIlJldHVybnMgYSBsaXN0IG9mIChyZXBvc2l0b3J5X25hbWUsIHJlcG9zaXRvcnlfcGF0aCkg
dHVwbGVzIG9mIGl0cyBkZXBlbmRpbmcgY29kZSBiYXNlLgotICAgICAgICBCeSBkZWZhdWx0IGl0
IHJldHVybnMgYSBsaXN0IHRoYXQgb25seSBjb250YWlucyBhICgnV2ViS2l0JywgPHdlYmtpdFJl
cG9zaXRvcnlQYXRoPikgdHVwbGUuIiIiCi0KLSAgICAgICAgIyBXZSB1c2UgTGF5b3V0VGVzdCBk
aXJlY3RvcnkgaGVyZSBiZWNhdXNlIHdlYmtpdF9iYXNlIGlzbid0IGEgcGFydCBvZiBXZWJLaXQg
cmVwb3NpdG9yeSBpbiBDaHJvbWl1bSBwb3J0Ci0gICAgICAgICMgd2hlcmUgdHVybmsgaXNuJ3Qg
Y2hlY2tlZCBvdXQgYXMgYSB3aG9sZS4KLSAgICAgICAgcmV0dXJuIFsoJ1dlYktpdCcsIHNlbGYu
bGF5b3V0X3Rlc3RzX2RpcigpKV0KLQotICAgIF9XRElGRl9ERUwgPSAnIyNXRElGRl9ERUwjIycK
LSAgICBfV0RJRkZfQUREID0gJyMjV0RJRkZfQUREIyMnCi0gICAgX1dESUZGX0VORCA9ICcjI1dE
SUZGX0VORCMjJwotCi0gICAgZGVmIF9mb3JtYXRfd2RpZmZfb3V0cHV0X2FzX2h0bWwoc2VsZiwg
d2RpZmYpOgotICAgICAgICB3ZGlmZiA9IGNnaS5lc2NhcGUod2RpZmYpCi0gICAgICAgIHdkaWZm
ID0gd2RpZmYucmVwbGFjZShzZWxmLl9XRElGRl9ERUwsICI8c3BhbiBjbGFzcz1kZWw+IikKLSAg
ICAgICAgd2RpZmYgPSB3ZGlmZi5yZXBsYWNlKHNlbGYuX1dESUZGX0FERCwgIjxzcGFuIGNsYXNz
PWFkZD4iKQotICAgICAgICB3ZGlmZiA9IHdkaWZmLnJlcGxhY2Uoc2VsZi5fV0RJRkZfRU5ELCAi
PC9zcGFuPiIpCi0gICAgICAgIGh0bWwgPSAiPGhlYWQ+PHN0eWxlPi5kZWwgeyBiYWNrZ3JvdW5k
OiAjZmFhOyB9ICIKLSAgICAgICAgaHRtbCArPSAiLmFkZCB7IGJhY2tncm91bmQ6ICNhZmE7IH08
L3N0eWxlPjwvaGVhZD4iCi0gICAgICAgIGh0bWwgKz0gIjxwcmU+JXM8L3ByZT4iICUgd2RpZmYK
LSAgICAgICAgcmV0dXJuIGh0bWwKLQotICAgIGRlZiBfd2RpZmZfY29tbWFuZChzZWxmLCBhY3R1
YWxfZmlsZW5hbWUsIGV4cGVjdGVkX2ZpbGVuYW1lKToKLSAgICAgICAgZXhlY3V0YWJsZSA9IHNl
bGYuX3BhdGhfdG9fd2RpZmYoKQotICAgICAgICByZXR1cm4gW2V4ZWN1dGFibGUsCi0gICAgICAg
ICAgICAgICAgIi0tc3RhcnQtZGVsZXRlPSVzIiAlIHNlbGYuX1dESUZGX0RFTCwKLSAgICAgICAg
ICAgICAgICAiLS1lbmQtZGVsZXRlPSVzIiAlIHNlbGYuX1dESUZGX0VORCwKLSAgICAgICAgICAg
ICAgICAiLS1zdGFydC1pbnNlcnQ9JXMiICUgc2VsZi5fV0RJRkZfQURELAotICAgICAgICAgICAg
ICAgICItLWVuZC1pbnNlcnQ9JXMiICUgc2VsZi5fV0RJRkZfRU5ELAotICAgICAgICAgICAgICAg
IGFjdHVhbF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICBleHBlY3RlZF9maWxlbmFtZV0KLQot
ICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgX2hhbmRsZV93ZGlmZl9lcnJvcihzY3JpcHRfZXJy
b3IpOgotICAgICAgICAjIEV4aXQgMSBtZWFucyB0aGUgZmlsZXMgZGlmZmVyZWQsIGFueSBvdGhl
ciBleGl0IGNvZGUgaXMgYW4gZXJyb3IuCi0gICAgICAgIGlmIHNjcmlwdF9lcnJvci5leGl0X2Nv
ZGUgIT0gMToKLSAgICAgICAgICAgIHJhaXNlIHNjcmlwdF9lcnJvcgotCi0gICAgZGVmIF9ydW5f
d2RpZmYoc2VsZiwgYWN0dWFsX2ZpbGVuYW1lLCBleHBlY3RlZF9maWxlbmFtZSk6Ci0gICAgICAg
ICIiIlJ1bnMgd2RpZmYgYW5kIG1heSB0aHJvdyBleGNlcHRpb25zLgotICAgICAgICBUaGlzIGlz
IG1vc3RseSBhIGhvb2sgZm9yIHVuaXQgdGVzdGluZy4iIiIKLSAgICAgICAgIyBEaWZmcyBhcmUg
dHJlYXRlZCBhcyBiaW5hcnkgYXMgdGhleSBtYXkgaW5jbHVkZSBtdWx0aXBsZSBmaWxlcwotICAg
ICAgICAjIHdpdGggY29uZmxpY3RpbmcgZW5jb2RpbmdzLiAgVGh1cyB3ZSBkbyBub3QgZGVjb2Rl
IHRoZSBvdXRwdXQuCi0gICAgICAgIGNvbW1hbmQgPSBzZWxmLl93ZGlmZl9jb21tYW5kKGFjdHVh
bF9maWxlbmFtZSwgZXhwZWN0ZWRfZmlsZW5hbWUpCi0gICAgICAgIHdkaWZmID0gc2VsZi5fZXhl
Y3V0aXZlLnJ1bl9jb21tYW5kKGNvbW1hbmQsIGRlY29kZV9vdXRwdXQ9RmFsc2UsCi0gICAgICAg
ICAgICBlcnJvcl9oYW5kbGVyPXNlbGYuX2hhbmRsZV93ZGlmZl9lcnJvcikKLSAgICAgICAgcmV0
dXJuIHNlbGYuX2Zvcm1hdF93ZGlmZl9vdXRwdXRfYXNfaHRtbCh3ZGlmZikKLQotICAgIGRlZiB3
ZGlmZl90ZXh0KHNlbGYsIGFjdHVhbF9maWxlbmFtZSwgZXhwZWN0ZWRfZmlsZW5hbWUpOgotICAg
ICAgICAiIiJSZXR1cm5zIGEgc3RyaW5nIG9mIEhUTUwgaW5kaWNhdGluZyB0aGUgd29yZC1sZXZl
bCBkaWZmIG9mIHRoZQotICAgICAgICBjb250ZW50cyBvZiB0aGUgdHdvIGZpbGVuYW1lcy4gUmV0
dXJucyBhbiBlbXB0eSBzdHJpbmcgaWYgd29yZC1sZXZlbAotICAgICAgICBkaWZmaW5nIGlzbid0
IGF2YWlsYWJsZS4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYud2RpZmZfYXZhaWxhYmxlKCk6Ci0g
ICAgICAgICAgICByZXR1cm4gIiIKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBJdCdzIHBv
c3NpYmxlIHRvIHJhaXNlIGEgU2NyaXB0RXJyb3Igd2UgcGFzcyB3ZGlmZiBpbnZhbGlkIHBhdGhz
LgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl93ZGlmZihhY3R1YWxfZmlsZW5hbWUsIGV4
cGVjdGVkX2ZpbGVuYW1lKQotICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKLSAgICAgICAgICAg
IGlmIGUuZXJybm8gaW4gW2Vycm5vLkVOT0VOVCwgZXJybm8uRUFDQ0VTLCBlcnJuby5FQ0hJTERd
OgotICAgICAgICAgICAgICAgICMgU2lsZW50bHkgaWdub3JlIGNhc2VzIHdoZXJlIHdkaWZmIGlz
IG1pc3NpbmcuCi0gICAgICAgICAgICAgICAgc2VsZi5fd2RpZmZfYXZhaWxhYmxlID0gRmFsc2UK
LSAgICAgICAgICAgICAgICByZXR1cm4gIiIKLSAgICAgICAgICAgIHJhaXNlCi0KLSAgICAjIFRo
aXMgaXMgYSBjbGFzcyB2YXJpYWJsZSBzbyB3ZSBjYW4gdGVzdCBlcnJvciBvdXRwdXQgZWFzaWx5
LgotICAgIF9wcmV0dHlfcGF0Y2hfZXJyb3JfaHRtbCA9ICJGYWlsZWQgdG8gcnVuIFByZXR0eVBh
dGNoLCBzZWUgZXJyb3IgbG9nLiIKLQotICAgIGRlZiBwcmV0dHlfcGF0Y2hfdGV4dChzZWxmLCBk
aWZmX3BhdGgpOgotICAgICAgICBpZiBzZWxmLl9wcmV0dHlfcGF0Y2hfYXZhaWxhYmxlIGlzIE5v
bmU6Ci0gICAgICAgICAgICBzZWxmLl9wcmV0dHlfcGF0Y2hfYXZhaWxhYmxlID0gc2VsZi5jaGVj
a19wcmV0dHlfcGF0Y2gobG9nZ2luZz1GYWxzZSkKLSAgICAgICAgaWYgbm90IHNlbGYuX3ByZXR0
eV9wYXRjaF9hdmFpbGFibGU6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcHJldHR5X3BhdGNo
X2Vycm9yX2h0bWwKLSAgICAgICAgY29tbWFuZCA9ICgicnVieSIsICItSSIsIHNlbGYuX2ZpbGVz
eXN0ZW0uZGlybmFtZShzZWxmLl9wcmV0dHlfcGF0Y2hfcGF0aCksCi0gICAgICAgICAgICAgICAg
ICAgc2VsZi5fcHJldHR5X3BhdGNoX3BhdGgsIGRpZmZfcGF0aCkKLSAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgIyBEaWZmcyBhcmUgdHJlYXRlZCBhcyBiaW5hcnkgKHdlIHBhc3MgZGVjb2RlX291
dHB1dD1GYWxzZSkgYXMgdGhleQotICAgICAgICAgICAgIyBtYXkgY29udGFpbiBtdWx0aXBsZSBm
aWxlcyBvZiBjb25mbGljdGluZyBlbmNvZGluZ3MuCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5f
ZXhlY3V0aXZlLnJ1bl9jb21tYW5kKGNvbW1hbmQsIGRlY29kZV9vdXRwdXQ9RmFsc2UpCi0gICAg
ICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgotICAgICAgICAgICAgIyBJZiB0aGUgc3lzdGVtIGlzIG1p
c3NpbmcgcnVieSBsb2cgdGhlIGVycm9yIGFuZCBzdG9wIHRyeWluZy4KLSAgICAgICAgICAgIHNl
bGYuX3ByZXR0eV9wYXRjaF9hdmFpbGFibGUgPSBGYWxzZQotICAgICAgICAgICAgX2xvZy5lcnJv
cigiRmFpbGVkIHRvIHJ1biBQcmV0dHlQYXRjaCAoJXMpOiAlcyIgJSAoY29tbWFuZCwgZSkpCi0g
ICAgICAgICAgICByZXR1cm4gc2VsZi5fcHJldHR5X3BhdGNoX2Vycm9yX2h0bWwKLSAgICAgICAg
ZXhjZXB0IFNjcmlwdEVycm9yLCBlOgotICAgICAgICAgICAgIyBJZiBydWJ5IGZhaWxlZCB0byBy
dW4gZm9yIHNvbWUgcmVhc29uLCBsb2cgdGhlIGNvbW1hbmQKLSAgICAgICAgICAgICMgb3V0cHV0
IGFuZCBzdG9wIHRyeWluZy4KLSAgICAgICAgICAgIHNlbGYuX3ByZXR0eV9wYXRjaF9hdmFpbGFi
bGUgPSBGYWxzZQotICAgICAgICAgICAgX2xvZy5lcnJvcigiRmFpbGVkIHRvIHJ1biBQcmV0dHlQ
YXRjaCAoJXMpOlxuJXMiICUgKGNvbW1hbmQsIGUubWVzc2FnZV93aXRoX291dHB1dCgpKSkKLSAg
ICAgICAgICAgIHJldHVybiBzZWxmLl9wcmV0dHlfcGF0Y2hfZXJyb3JfaHRtbAotCi0gICAgZGVm
IGRlZmF1bHRfY29uZmlndXJhdGlvbihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2NvbmZp
Zy5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKQotCi0gICAgIwotICAgICMgUFJPVEVDVEVEIFJPVVRJ
TkVTCi0gICAgIwotICAgICMgVGhlIHJvdXRpbmVzIGJlbG93IHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBieSByb3V0aW5lcyBpbiB0aGlzIGNsYXNzCi0gICAgIyBvciBhbnkgb2YgaXRzIHN1YmNsYXNz
ZXMuCi0gICAgIwotCi0gICAgZGVmIF91c2VzX2FwYWNoZShzZWxmKToKLSAgICAgICAgcmV0dXJu
IFRydWUKLQotICAgICMgRklYTUU6IFRoaXMgZG9lcyBub3QgYmVsb25nIG9uIHRoZSBwb3J0IG9i
amVjdC4KLSAgICBAbWVtb2l6ZWQKLSAgICBkZWYgX3BhdGhfdG9fYXBhY2hlKHNlbGYpOgotICAg
ICAgICAiIiJSZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIGFwYWNoZSBiaW5hcnkuCi0KLSAg
ICAgICAgVGhpcyBpcyBuZWVkZWQgb25seSBieSBwb3J0cyB0aGF0IHVzZSB0aGUgYXBhY2hlX2h0
dHBfc2VydmVyIG1vZHVsZS4iIiIKLSAgICAgICAgIyBUaGUgQXBhY2hlIGJpbmFyeSBwYXRoIGNh
biB2YXJ5IGRlcGVuZGluZyBvbiBPUyBhbmQgZGlzdHJpYnV0aW9uCi0gICAgICAgICMgU2VlIGh0
dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRGlzdHJvc0RlZmF1bHRMYXlvdXQKLSAgICAgICAg
Zm9yIHBhdGggaW4gWyIvdXNyL3NiaW4vaHR0cGQiLCAiL3Vzci9zYmluL2FwYWNoZTIiXToKLSAg
ICAgICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHBhdGgpOgotICAgICAgICAgICAg
ICAgIHJldHVybiBwYXRoCi0gICAgICAgIF9sb2cuZXJyb3IoIkNvdWxkIG5vdCBmaW5kIGFwYWNo
ZS4gTm90IGluc3RhbGxlZCBvciB1bmtub3duIHBhdGguIikKLSAgICAgICAgcmV0dXJuIE5vbmUK
LQotICAgICMgRklYTUU6IFRoaXMgYmVsb25ncyBvbiBzb21lIHBsYXRmb3JtIGFic3RyYWN0aW9u
IGluc3RlYWQgb2YgUG9ydC4KLSAgICBkZWYgX2lzX3JlZGhhdF9iYXNlZChzZWxmKToKLSAgICAg
ICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKCcvZXRjL3JlZGhhdC1yZWxlYXNlJykK
LQotICAgIGRlZiBfaXNfZGViaWFuX2Jhc2VkKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5f
ZmlsZXN5c3RlbS5leGlzdHMoJy9ldGMvZGViaWFuX3ZlcnNpb24nKQotCi0gICAgZGVmIF9hcGFj
aGVfdmVyc2lvbihzZWxmKToKLSAgICAgICAgY29uZmlnID0gc2VsZi5fZXhlY3V0aXZlLnJ1bl9j
b21tYW5kKFtzZWxmLl9wYXRoX3RvX2FwYWNoZSgpLCAnLXYnXSkKLSAgICAgICAgcmV0dXJuIHJl
LnN1YihyJyg/Oi58XG4pKlNlcnZlciB2ZXJzaW9uOiBBcGFjaGUvKFxkK1wuXGQrKSg/Oi58XG4p
KicsIHInXDEnLCBjb25maWcpCi0KLSAgICAjIFdlIHBhc3Mgc3lzX3BsYXRmb3JtIGludG8gdGhp
cyBtZXRob2QgdG8gbWFrZSBpdCBlYXN5IHRvIHVuaXQgdGVzdC4KLSAgICBkZWYgX2FwYWNoZV9j
b25maWdfZmlsZV9uYW1lX2Zvcl9wbGF0Zm9ybShzZWxmLCBzeXNfcGxhdGZvcm0pOgotICAgICAg
ICBpZiBzeXNfcGxhdGZvcm0gPT0gJ2N5Z3dpbic6Ci0gICAgICAgICAgICByZXR1cm4gJ2N5Z3dp
bi1odHRwZC5jb25mJyAgIyBDWUdXSU4gaXMgdGhlIG9ubHkgcGxhdGZvcm0gdG8gc3RpbGwgdXNl
IEFwYWNoZSAxLjMuCi0gICAgICAgIGlmIHN5c19wbGF0Zm9ybS5zdGFydHN3aXRoKCdsaW51eCcp
OgotICAgICAgICAgICAgaWYgc2VsZi5faXNfcmVkaGF0X2Jhc2VkKCk6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICdmZWRvcmEtaHR0cGQtJyArIHNlbGYuX2FwYWNoZV92ZXJzaW9uKCkgKyAnLmNv
bmYnCi0gICAgICAgICAgICBpZiBzZWxmLl9pc19kZWJpYW5fYmFzZWQoKToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gJ2FwYWNoZTItZGViaWFuLWh0dHBkLmNvbmYnCi0gICAgICAgICMgQWxsIHBs
YXRmb3JtcyB1c2UgYXBhY2hlMiBleGNlcHQgZm9yIENZR1dJTiAoYW5kIE1hYyBPUyBYIFRpZ2Vy
IGFuZCBwcmlvciwgd2hpY2ggd2Ugbm8gbG9uZ2VyIHN1cHBvcnQpLgotICAgICAgICByZXR1cm4g
ImFwYWNoZTItaHR0cGQuY29uZiIKLQotICAgIGRlZiBfcGF0aF90b19hcGFjaGVfY29uZmlnX2Zp
bGUoc2VsZik6Ci0gICAgICAgICIiIlJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgYXBhY2hl
IGNvbmZpZ3VyYXRpb24gZmlsZS4KLQotICAgICAgICBJZiB0aGUgV0VCS0lUX0hUVFBfU0VSVkVS
X0NPTkZfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIGl0cwotICAgICAgICBjb250
ZW50cyB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KLQotICAgICAgICBUaGlzIGlzIG5lZWRlZCBvbmx5
IGJ5IHBvcnRzIHRoYXQgdXNlIHRoZSBhcGFjaGVfaHR0cF9zZXJ2ZXIgbW9kdWxlLiIiIgotICAg
ICAgICBjb25maWdfZmlsZV9mcm9tX2VudiA9IG9zLmVudmlyb24uZ2V0KCdXRUJLSVRfSFRUUF9T
RVJWRVJfQ09ORl9QQVRIJykKLSAgICAgICAgaWYgY29uZmlnX2ZpbGVfZnJvbV9lbnY6Ci0gICAg
ICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoY29uZmlnX2ZpbGVfZnJvbV9l
bnYpOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJyVzIHdhcyBub3QgZm91bmQgb24g
dGhlIHN5c3RlbScgJSBjb25maWdfZmlsZV9mcm9tX2VudikKLSAgICAgICAgICAgIHJldHVybiBj
b25maWdfZmlsZV9mcm9tX2VudgotCi0gICAgICAgIGNvbmZpZ19maWxlX25hbWUgPSBzZWxmLl9h
cGFjaGVfY29uZmlnX2ZpbGVfbmFtZV9mb3JfcGxhdGZvcm0oc3lzLnBsYXRmb3JtKQotICAgICAg
ICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpLCAn
aHR0cCcsICdjb25mJywgY29uZmlnX2ZpbGVfbmFtZSkKLQotICAgIGRlZiBfYnVpbGRfcGF0aChz
ZWxmLCAqY29tcHMpOgotICAgICAgICByb290X2RpcmVjdG9yeSA9IHNlbGYuZ2V0X29wdGlvbign
cm9vdCcpCi0gICAgICAgIGlmIG5vdCByb290X2RpcmVjdG9yeToKLSAgICAgICAgICAgIGJ1aWxk
X2RpcmVjdG9yeSA9IHNlbGYuZ2V0X29wdGlvbignYnVpbGRfZGlyZWN0b3J5JykKLSAgICAgICAg
ICAgIGlmIGJ1aWxkX2RpcmVjdG9yeToKLSAgICAgICAgICAgICAgICByb290X2RpcmVjdG9yeSA9
IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihidWlsZF9kaXJlY3RvcnksIHNlbGYuZ2V0X29wdGlvbign
Y29uZmlndXJhdGlvbicpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByb290
X2RpcmVjdG9yeSA9IHNlbGYuX2NvbmZpZy5idWlsZF9kaXJlY3Rvcnkoc2VsZi5nZXRfb3B0aW9u
KCdjb25maWd1cmF0aW9uJykpCi0gICAgICAgICAgICAjIFNldCAtLXJvb3Qgc28gdGhhdCB3ZSBj
YW4gcGFzcyB0aGlzIHRvIHN1YnByb2Nlc3NlcyBhbmQgYXZvaWQgbWFraW5nIHRoZQotICAgICAg
ICAgICAgIyBzbG93IGNhbGwgdG8gY29uZmlnLmJ1aWxkX2RpcmVjdG9yeSgpIE4gdGltZXMgaW4g
ZWFjaCB3b3JrZXIuCi0gICAgICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIGxpa2UgQG1lbW9pemVk
LCBidXQgbW9yZSBhbm5veWluZyBhbmQgZnJhZ2lsZTsgdGhlcmUgc2hvdWxkIGJlIGFub3RoZXIK
LSAgICAgICAgICAgICMgd2F5IHRvIHByb3BhZ2F0ZSB2YWx1ZXMgd2l0aG91dCBtdXRhdGluZyB0
aGUgb3B0aW9ucyBsaXN0LgotICAgICAgICAgICAgc2VsZi5zZXRfb3B0aW9uX2RlZmF1bHQoJ3Jv
b3QnLCByb290X2RpcmVjdG9yeSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uam9p
bihzZWxmLl9maWxlc3lzdGVtLmFic3BhdGgocm9vdF9kaXJlY3RvcnkpLCAqY29tcHMpCi0KLSAg
ICBkZWYgX3BhdGhfdG9fZHJpdmVyKHNlbGYsIGNvbmZpZ3VyYXRpb249Tm9uZSk6Ci0gICAgICAg
ICIiIlJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgdGVzdCBkcml2ZXIgKER1bXBSZW5kZXJU
cmVlKS4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoc2VsZi5kcml2ZXJfbmFt
ZSgpKQotCi0gICAgZGVmIF9wYXRoX3RvX3dlYmNvcmVfbGlicmFyeShzZWxmKToKLSAgICAgICAg
IiIiUmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIGEgYnVpbHQgY29weSBvZiBXZWJDb3JlLiIiIgot
ICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIF9wYXRoX3RvX2hlbHBlcihzZWxmKToKLSAg
ICAgICAgIiIiUmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBsYXlvdXRfdGVzdF9oZWxwZXIg
YmluYXJ5LCB3aGljaAotICAgICAgICBpcyB1c2VkIHRvIGhlbHAgY29uZmlndXJlIHRoZSBzeXN0
ZW0gZm9yIHRoZSB0ZXN0IHJ1biwgb3IgTm9uZQotICAgICAgICBpZiBubyBoZWxwZXIgaXMgbmVl
ZGVkLgotCi0gICAgICAgIFRoaXMgaXMgbGlrZWx5IG9ubHkgdXNlZCBieSBzdGFydC9zdG9wX2hl
bHBlcigpLiIiIgotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIF9wYXRoX3RvX2ltYWdl
X2RpZmYoc2VsZik6Ci0gICAgICAgICIiIlJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgaW1h
Z2VfZGlmZiBiaW5hcnksIG9yIE5vbmUgaWYgaXQgaXMgbm90IGF2YWlsYWJsZS4KLQotICAgICAg
ICBUaGlzIGlzIGxpa2VseSB1c2VkIG9ubHkgYnkgZGlmZl9pbWFnZSgpIiIiCi0gICAgICAgIHJl
dHVybiBzZWxmLl9idWlsZF9wYXRoKCdJbWFnZURpZmYnKQotCi0gICAgZGVmIF9wYXRoX3RvX2xp
Z2h0dHBkKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBMaWdIVFRQ
ZCBiaW5hcnkuCi0KLSAgICAgICAgVGhpcyBpcyBuZWVkZWQgb25seSBieSBwb3J0cyB0aGF0IHVz
ZSB0aGUgaHR0cF9zZXJ2ZXIucHkgbW9kdWxlLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1l
bnRlZEVycm9yKCdQb3J0Ll9wYXRoX3RvX2xpZ2h0dHBkJykKLQotICAgIGRlZiBfcGF0aF90b19s
aWdodHRwZF9tb2R1bGVzKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIHRvIHRo
ZSBMaWdIVFRQZCBtb2R1bGVzIGRpcmVjdG9yeS4KLQotICAgICAgICBUaGlzIGlzIG5lZWRlZCBv
bmx5IGJ5IHBvcnRzIHRoYXQgdXNlIHRoZSBodHRwX3NlcnZlci5weSBtb2R1bGUuIiIiCi0gICAg
ICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BvcnQuX3BhdGhfdG9fbGlnaHR0cGRfbW9k
dWxlcycpCi0KLSAgICBkZWYgX3BhdGhfdG9fbGlnaHR0cGRfcGhwKHNlbGYpOgotICAgICAgICAi
IiJSZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBMaWdIVFRQZCBQSFAgZXhlY3V0YWJsZS4KLQotICAg
ICAgICBUaGlzIGlzIG5lZWRlZCBvbmx5IGJ5IHBvcnRzIHRoYXQgdXNlIHRoZSBodHRwX3NlcnZl
ci5weSBtb2R1bGUuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BvcnQu
X3BhdGhfdG9fbGlnaHR0cGRfcGhwJykKLQotICAgIEBtZW1vaXplZAotICAgIGRlZiBfcGF0aF90
b193ZGlmZihzZWxmKToKLSAgICAgICAgIiIiUmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSB3
ZGlmZiBiaW5hcnksIG9yIE5vbmUgaWYgaXQgaXMgbm90IGF2YWlsYWJsZS4KLQotICAgICAgICBU
aGlzIGlzIGxpa2VseSB1c2VkIG9ubHkgYnkgd2RpZmZfdGV4dCgpIiIiCi0gICAgICAgIGZvciBw
YXRoIGluICgiL3Vzci9iaW4vd2RpZmYiLCAiL3Vzci9iaW4vZHdkaWZmIik6Ci0gICAgICAgICAg
ICBpZiBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhwYXRoKToKLSAgICAgICAgICAgICAgICByZXR1
cm4gcGF0aAotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIF93ZWJraXRfYmFzZWxpbmVf
cGF0aChzZWxmLCBwbGF0Zm9ybSk6Ci0gICAgICAgICIiIlJldHVybiB0aGUgIGZ1bGwgcGF0aCB0
byB0aGUgdG9wIG9mIHRoZSBiYXNlbGluZSB0cmVlIGZvciBhCi0gICAgICAgIGdpdmVuIHBsYXRm
b3JtLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYubGF5b3V0
X3Rlc3RzX2RpcigpLCAncGxhdGZvcm0nLCBwbGF0Zm9ybSkKLQotICAgICMgRklYTUU6IEJlbG9u
Z3Mgb24gYSBQbGF0Zm9ybSBvYmplY3QuCi0gICAgZGVmIF9nZW5lcmF0ZV9hbGxfdGVzdF9jb25m
aWd1cmF0aW9ucyhzZWxmKToKLSAgICAgICAgIiIiR2VuZXJhdGVzIGEgbGlzdCBvZiBUZXN0Q29u
ZmlndXJhdGlvbiBpbnN0YW5jZXMsIHJlcHJlc2VudGluZyBjb25maWd1cmF0aW9ucwotICAgICAg
ICBmb3IgYSBwbGF0Zm9ybSBhY3Jvc3MgYWxsIE9TZXMsIGFyY2hpdGVjdHVyZXMsIGJ1aWxkIGFu
ZCBncmFwaGljcyB0eXBlcy4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcign
UG9ydC5fZ2VuZXJhdGVfdGVzdF9jb25maWd1cmF0aW9ucycpCi0KLSAgICBkZWYgX2RyaXZlcl9j
bGFzcyhzZWxmKToKLSAgICAgICAgIiIiUmV0dXJucyB0aGUgcG9ydCdzIGRyaXZlciBpbXBsZW1l
bnRhdGlvbi4iIiIKLSAgICAgICAgcmV0dXJuIGRyaXZlci5Ecml2ZXIKLQotICAgIGRlZiBfZ2V0
X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKToK
LSAgICAgICAgbmFtZV9zdHIgPSBuYW1lIG9yICc8dW5rbm93biBwcm9jZXNzIG5hbWU+JwotICAg
ICAgICBwaWRfc3RyID0gc3RyKHBpZCBvciAnPHVua25vd24+JykKLSAgICAgICAgc3Rkb3V0X2xp
bmVzID0gKHN0ZG91dCBvciAnPGVtcHR5PicpLmRlY29kZSgndXRmOCcsICdyZXBsYWNlJykuc3Bs
aXRsaW5lcygpCi0gICAgICAgIHN0ZGVycl9saW5lcyA9IChzdGRlcnIgb3IgJzxlbXB0eT4nKS5k
ZWNvZGUoJ3V0ZjgnLCAncmVwbGFjZScpLnNwbGl0bGluZXMoKQotICAgICAgICByZXR1cm4gKHN0
ZGVyciwgJ2NyYXNoIGxvZyBmb3IgJXMgKHBpZCAlcyk6XG4lc1xuJXNcbicgJSAobmFtZV9zdHIs
IHBpZF9zdHIsCi0gICAgICAgICAgICAnXG4nLmpvaW4oKCdTVERPVVQ6ICcgKyBsKSBmb3IgbCBp
biBzdGRvdXRfbGluZXMpLAotICAgICAgICAgICAgJ1xuJy5qb2luKCgnU1RERVJSOiAnICsgbCkg
Zm9yIGwgaW4gc3RkZXJyX2xpbmVzKSkpCi0KLSAgICBkZWYgbG9va19mb3JfbmV3X2NyYXNoX2xv
Z3Moc2VsZiwgY3Jhc2hlZF9wcm9jZXNzZXMsIHN0YXJ0X3RpbWUpOgotICAgICAgICBwYXNzCi0K
LSAgICBkZWYgbG9va19mb3JfbmV3X3NhbXBsZXMoc2VsZiwgdW5yZXNwb25zaXZlX3Byb2Nlc3Nl
cywgc3RhcnRfdGltZSk6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBzYW1wbGVfcHJvY2Vzcyhz
ZWxmLCBuYW1lLCBwaWQpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgdmlydHVhbF90ZXN0X3N1
aXRlcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFtdCi0KLSAgICBAbWVtb2l6ZWQKLSAgICBkZWYg
cG9wdWxhdGVkX3ZpcnR1YWxfdGVzdF9zdWl0ZXMoc2VsZik6Ci0gICAgICAgIHN1aXRlcyA9IHNl
bGYudmlydHVhbF90ZXN0X3N1aXRlcygpCi0KLSAgICAgICAgIyBTYW5pdHktY2hlY2sgdGhlIHN1
aXRlcyB0byBtYWtlIHN1cmUgdGhleSBkb24ndCBwb2ludCB0byBvdGhlciBzdWl0ZXMuCi0gICAg
ICAgIHN1aXRlX2RpcnMgPSBbc3VpdGUubmFtZSBmb3Igc3VpdGUgaW4gc3VpdGVzXQotICAgICAg
ICBmb3Igc3VpdGUgaW4gc3VpdGVzOgotICAgICAgICAgICAgYXNzZXJ0IHN1aXRlLmJhc2Ugbm90
IGluIHN1aXRlX2RpcnMKLQotICAgICAgICBmb3Igc3VpdGUgaW4gc3VpdGVzOgotICAgICAgICAg
ICAgYmFzZV90ZXN0cyA9IHNlbGYuX3JlYWxfdGVzdHMoW3N1aXRlLmJhc2VdKQotICAgICAgICAg
ICAgc3VpdGUudGVzdHMgPSB7fQotICAgICAgICAgICAgZm9yIHRlc3QgaW4gYmFzZV90ZXN0czoK
LSAgICAgICAgICAgICAgICBzdWl0ZS50ZXN0c1t0ZXN0LnJlcGxhY2Uoc3VpdGUuYmFzZSwgc3Vp
dGUubmFtZSwgMSldID0gdGVzdAotICAgICAgICByZXR1cm4gc3VpdGVzCi0KLSAgICBkZWYgX3Zp
cnR1YWxfdGVzdHMoc2VsZiwgcGF0aHMsIHN1aXRlcyk6Ci0gICAgICAgIHZpcnR1YWxfdGVzdHMg
PSBsaXN0KCkKLSAgICAgICAgZm9yIHN1aXRlIGluIHN1aXRlczoKLSAgICAgICAgICAgIGlmIHBh
dGhzOgotICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHN1aXRlLnRlc3RzOgotICAgICAgICAg
ICAgICAgICAgICBpZiBhbnkodGVzdC5zdGFydHN3aXRoKHApIGZvciBwIGluIHBhdGhzKToKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxfdGVzdHMuYXBwZW5kKHRlc3QpCi0gICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHZpcnR1YWxfdGVzdHMuZXh0ZW5kKHN1aXRlLnRl
c3RzLmtleXMoKSkKLSAgICAgICAgcmV0dXJuIHZpcnR1YWxfdGVzdHMKLQotICAgIGRlZiBsb29r
dXBfdmlydHVhbF90ZXN0X2Jhc2Uoc2VsZiwgdGVzdF9uYW1lKToKLSAgICAgICAgZm9yIHN1aXRl
IGluIHNlbGYucG9wdWxhdGVkX3ZpcnR1YWxfdGVzdF9zdWl0ZXMoKToKLSAgICAgICAgICAgIGlm
IHRlc3RfbmFtZS5zdGFydHN3aXRoKHN1aXRlLm5hbWUpOgotICAgICAgICAgICAgICAgIHJldHVy
biB0ZXN0X25hbWUucmVwbGFjZShzdWl0ZS5uYW1lLCBzdWl0ZS5iYXNlLCAxKQotICAgICAgICBy
ZXR1cm4gTm9uZQotCi0gICAgZGVmIGxvb2t1cF92aXJ0dWFsX3Rlc3RfYXJncyhzZWxmLCB0ZXN0
X25hbWUpOgotICAgICAgICBmb3Igc3VpdGUgaW4gc2VsZi5wb3B1bGF0ZWRfdmlydHVhbF90ZXN0
X3N1aXRlcygpOgotICAgICAgICAgICAgaWYgdGVzdF9uYW1lLnN0YXJ0c3dpdGgoc3VpdGUubmFt
ZSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN1aXRlLmFyZ3MKLSAgICAgICAgcmV0dXJuIFtd
Ci0KLSAgICBkZWYgc2hvdWxkX3J1bl9hc19waXhlbF90ZXN0KHNlbGYsIHRlc3RfaW5wdXQpOgot
ICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0czoKLSAgICAgICAgICAgIHJl
dHVybiBGYWxzZQotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RfZGlyZWN0b3Jp
ZXM6Ci0gICAgICAgICAgICByZXR1cm4gYW55KHRlc3RfaW5wdXQudGVzdF9uYW1lLnN0YXJ0c3dp
dGgoZGlyZWN0b3J5KSBmb3IgZGlyZWN0b3J5IGluIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdF9k
aXJlY3RvcmllcykKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Nob3VsZF9ydW5fYXNfcGl4ZWxfdGVz
dCh0ZXN0X2lucHV0KQotCi0gICAgZGVmIF9zaG91bGRfcnVuX2FzX3BpeGVsX3Rlc3Qoc2VsZiwg
dGVzdF9pbnB1dCk6Ci0gICAgICAgICMgRGVmYXVsdCBiZWhhdmlvciBpcyB0byBhbGxvdyBhbGwg
dGVzdCB0byBydW4gYXMgcGl4ZWwgdGVzdHMgaWYgLS1waXhlbC10ZXN0cyBpcyBvbiBhbmQKLSAg
ICAgICAgIyAtLXBpeGVsLXRlc3QtZGlyZWN0b3J5IGlzIG5vdCBzcGVjaWZpZWQuCi0gICAgICAg
IHJldHVybiBUcnVlCi0KLSAgICAjIEZJWE1FOiBFdmVudHVhbGx5IHdlIHNob3VsZCBzdGFuZGFy
aXplIHBvcnQgbmFtaW5nLCBhbmQgbWFrZSB0aGlzIG1ldGhvZCBzbWFydCBlbm91Z2gKLSAgICAj
IHRvIHVzZSBmb3IgYWxsIHBvcnQgY29uZmlndXJhdGlvbnMgKGluY2x1ZGluZyBhcmNoaXRlY3R1
cmVzLCBncmFwaGljcyB0eXBlcywgZXRjKS4KLSAgICBkZWYgX3BvcnRfZmxhZ19mb3Jfc2NyaXB0
cyhzZWxmKToKLSAgICAgICAgIyBUaGlzIGlzIG92ZXJycmlkZW4gYnkgcG9ydHMgd2hpY2ggbmVl
ZCBhIGZsYWcgcGFzc2VkIHRvIHNjcmlwdHMgdG8gZGlzdGluZ3Vpc2ggdGhlIHVzZSBvZiB0aGF0
IHBvcnQuCi0gICAgICAgICMgRm9yIGV4YW1wbGUgLS1xdCBvbiBsaW51eCwgc2luY2UgYSB1c2Vy
IG1pZ2h0IGhhdmUgYm90aCBHdGsgYW5kIFF0IGxpYnJhcmllcyBpbnN0YWxsZWQuCi0gICAgICAg
IHJldHVybiBOb25lCi0KLSAgICAjIFRoaXMgaXMgbW9kZWxlZCBhZnRlciB3ZWJraXRkaXJzLnBt
IGFyZ3VtZW50c0ZvckNvbmZpZ3VyYXRpb24oKSBmcm9tIG9sZC1ydW4td2Via2l0LXRlc3RzCi0g
ICAgZGVmIF9hcmd1bWVudHNfZm9yX2NvbmZpZ3VyYXRpb24oc2VsZik6Ci0gICAgICAgIGNvbmZp
Z19hcmdzID0gW10KLSAgICAgICAgY29uZmlnX2FyZ3MuYXBwZW5kKHNlbGYuX2NvbmZpZy5mbGFn
X2Zvcl9jb25maWd1cmF0aW9uKHNlbGYuZ2V0X29wdGlvbignY29uZmlndXJhdGlvbicpKSkKLSAg
ICAgICAgIyBGSVhNRTogV2UgbWF5IG5lZWQgdG8gYWRkIHN1cHBvcnQgZm9yIHBhc3NpbmcgLS0z
Mi1iaXQgbGlrZSBvbGQtcnVuLXdlYmtpdC10ZXN0cyBoYWQuCi0gICAgICAgIHBvcnRfZmxhZyA9
IHNlbGYuX3BvcnRfZmxhZ19mb3Jfc2NyaXB0cygpCi0gICAgICAgIGlmIHBvcnRfZmxhZzoKLSAg
ICAgICAgICAgIGNvbmZpZ19hcmdzLmFwcGVuZChwb3J0X2ZsYWcpCi0gICAgICAgIHJldHVybiBj
b25maWdfYXJncwotCi0gICAgZGVmIF9ydW5fc2NyaXB0KHNlbGYsIHNjcmlwdF9uYW1lLCBhcmdz
PU5vbmUsIGluY2x1ZGVfY29uZmlndXJhdGlvbl9hcmd1bWVudHM9VHJ1ZSwgZGVjb2RlX291dHB1
dD1UcnVlLCBlbnY9Tm9uZSk6Ci0gICAgICAgIHJ1bl9zY3JpcHRfY29tbWFuZCA9IFtzZWxmLnBh
dGhfdG9fc2NyaXB0KHNjcmlwdF9uYW1lKV0KLSAgICAgICAgaWYgaW5jbHVkZV9jb25maWd1cmF0
aW9uX2FyZ3VtZW50czoKLSAgICAgICAgICAgIHJ1bl9zY3JpcHRfY29tbWFuZC5leHRlbmQoc2Vs
Zi5fYXJndW1lbnRzX2Zvcl9jb25maWd1cmF0aW9uKCkpCi0gICAgICAgIGlmIGFyZ3M6Ci0gICAg
ICAgICAgICBydW5fc2NyaXB0X2NvbW1hbmQuZXh0ZW5kKGFyZ3MpCi0gICAgICAgIG91dHB1dCA9
IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChydW5fc2NyaXB0X2NvbW1hbmQsIGN3ZD1zZWxm
LndlYmtpdF9iYXNlKCksIGRlY29kZV9vdXRwdXQ9ZGVjb2RlX291dHB1dCwgZW52PWVudikKLSAg
ICAgICAgX2xvZy5kZWJ1ZygnT3V0cHV0IG9mICVzOlxuJXMnICUgKHJ1bl9zY3JpcHRfY29tbWFu
ZCwgb3V0cHV0KSkKLSAgICAgICAgcmV0dXJuIG91dHB1dAotCi0gICAgZGVmIF9idWlsZF9kcml2
ZXIoc2VsZik6Ci0gICAgICAgIGVudmlyb25tZW50ID0gc2VsZi5ob3N0LmNvcHlfY3VycmVudF9l
bnZpcm9ubWVudCgpCi0gICAgICAgIGVudmlyb25tZW50LmRpc2FibGVfZ2NjX3NtYXJ0cXVvdGVz
KCkKLSAgICAgICAgZW52ID0gZW52aXJvbm1lbnQudG9fZGljdGlvbmFyeSgpCi0KLSAgICAgICAg
IyBGSVhNRTogV2UgYnVpbGQgYm90aCBEdW1wUmVuZGVyVHJlZSBhbmQgV2ViS2l0VGVzdFJ1bm5l
ciBmb3IKLSAgICAgICAgIyBXZWJLaXRUZXN0UnVubmVyIHJ1bnMgYmVjYXVzZSBEdW1wUmVuZGVy
VHJlZSBzdGlsbCBpbmNsdWRlcwotICAgICAgICAjIHRoZSBEdW1wUmVuZGVyVHJlZVN1cHBvcnQg
bW9kdWxlIGFuZCB0aGUgVGVzdE5ldHNjYXBlUGx1Z2luLgotICAgICAgICAjIFRoZXNlIHR3byBw
cm9qZWN0cyBzaG91bGQgYmUgZmFjdG9yZWQgb3V0IGludG8gdGhlaXIgb3duCi0gICAgICAgICMg
cHJvamVjdHMuCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX3J1bl9zY3JpcHQoImJ1
aWxkLWR1bXByZW5kZXJ0cmVlIiwgYXJncz1zZWxmLl9idWlsZF9kcml2ZXJfZmxhZ3MoKSwgZW52
PWVudikKLSAgICAgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVy
Jyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcnVuX3NjcmlwdCgiYnVpbGQtd2Via2l0dGVzdHJ1
bm5lciIsIGFyZ3M9c2VsZi5fYnVpbGRfZHJpdmVyX2ZsYWdzKCksIGVudj1lbnYpCi0gICAgICAg
IGV4Y2VwdCBTY3JpcHRFcnJvciwgZToKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoZS5tZXNzYWdl
X3dpdGhfb3V0cHV0KG91dHB1dF9saW1pdD1Ob25lKSkKLSAgICAgICAgICAgIHJldHVybiBGYWxz
ZQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF9idWlsZF9kcml2ZXJfZmxhZ3Moc2Vs
Zik6Ci0gICAgICAgIHJldHVybiBbXQotCi0gICAgZGVmIF90ZXN0c19mb3Jfb3RoZXJfcGxhdGZv
cm1zKHNlbGYpOgotICAgICAgICAjIEJ5IGRlZmF1bHQgd2Ugd2lsbCBza2lwIGFueSBkaXJlY3Rv
cnkgdW5kZXIgTGF5b3V0VGVzdHMvcGxhdGZvcm0KLSAgICAgICAgIyB0aGF0IGlzbid0IGluIG91
ciBiYXNlbGluZSBzZWFyY2ggcGF0aCAodGhpcyBtaXJyb3JzIHdoYXQKLSAgICAgICAgIyBvbGQt
cnVuLXdlYmtpdC10ZXN0cyBkb2VzIGluIGZpbmRUZXN0c1RvUnVuKCkpLgotICAgICAgICAjIE5v
dGUgdGhpcyByZXR1cm5zIExheW91dFRlc3RzL3BsYXRmb3JtLyosIG5vdCBwbGF0Zm9ybS8qLyou
Ci0gICAgICAgIGVudHJpZXMgPSBzZWxmLl9maWxlc3lzdGVtLmdsb2Ioc2VsZi5fd2Via2l0X2Jh
c2VsaW5lX3BhdGgoJyonKSkKLSAgICAgICAgZGlyc190b19za2lwID0gW10KLSAgICAgICAgZm9y
IGVudHJ5IGluIGVudHJpZXM6Ci0gICAgICAgICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmlzZGly
KGVudHJ5KSBhbmQgZW50cnkgbm90IGluIHNlbGYuYmFzZWxpbmVfc2VhcmNoX3BhdGgoKToKLSAg
ICAgICAgICAgICAgICBiYXNlbmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uYmFzZW5hbWUoZW50cnkp
Ci0gICAgICAgICAgICAgICAgZGlyc190b19za2lwLmFwcGVuZCgncGxhdGZvcm0vJXMnICUgYmFz
ZW5hbWUpCi0gICAgICAgIHJldHVybiBkaXJzX3RvX3NraXAKLQotICAgIGRlZiBfcnVudGltZV9m
ZWF0dXJlX2xpc3Qoc2VsZik6Ci0gICAgICAgICIiIklmIGEgcG9ydCBtYWtlcyBjZXJ0YWluIGZl
YXR1cmVzIGF2YWlsYWJsZSBvbmx5IHRocm91Z2ggcnVudGltZSBmbGFncywgaXQgY2FuIG92ZXJy
aWRlIHRoaXMgcm91dGluZSB0byBpbmRpY2F0ZSB3aGljaCBvbmVzIGFyZSBhdmFpbGFibGUuIiIi
Ci0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICBkZWYgbm1fY29tbWFuZChzZWxmKToKLSAgICAg
ICAgcmV0dXJuICdubScKLQotICAgIGRlZiBfbW9kdWxlc190b19zZWFyY2hfZm9yX3N5bWJvbHMo
c2VsZik6Ci0gICAgICAgIHBhdGggPSBzZWxmLl9wYXRoX3RvX3dlYmNvcmVfbGlicmFyeSgpCi0g
ICAgICAgIGlmIHBhdGg6Ci0gICAgICAgICAgICByZXR1cm4gW3BhdGhdCi0gICAgICAgIHJldHVy
biBbXQotCi0gICAgZGVmIF9zeW1ib2xzX3N0cmluZyhzZWxmKToKLSAgICAgICAgc3ltYm9scyA9
ICcnCi0gICAgICAgIGZvciBwYXRoX3RvX21vZHVsZSBpbiBzZWxmLl9tb2R1bGVzX3RvX3NlYXJj
aF9mb3Jfc3ltYm9scygpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHN5bWJv
bHMgKz0gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFtzZWxmLm5tX2NvbW1hbmQoKSwgcGF0
aF90b19tb2R1bGVdLCBlcnJvcl9oYW5kbGVyPXNlbGYuX2V4ZWN1dGl2ZS5pZ25vcmVfZXJyb3Ip
Ci0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKLSAgICAgICAgICAgICAgICBfbG9nLndh
cm4oIkZhaWxlZCB0byBydW4gbm06ICVzLiAgQ2FuJ3QgZGV0ZXJtaW5lIHN1cHBvcnRlZCBmZWF0
dXJlcyBjb3JyZWN0bHkuIiAlIGUpCi0gICAgICAgIHJldHVybiBzeW1ib2xzCi0KLSAgICAjIFBv
cnRzIHdoaWNoIHVzZSBydW4tdGltZSBmZWF0dXJlIGRldGVjdGlvbiBzaG91bGQgZGVmaW5lIHRo
aXMgbWV0aG9kIGFuZCByZXR1cm4KLSAgICAjIGEgZGljdGlvbmFyeSBtYXBwaW5nIGZyb20gRmVh
dHVyZSBOYW1lcyB0byBza2lwcGVkIGRpcmVjdG9pcmVzLiAgTlJXVCB3aWxsCi0gICAgIyBydW4g
RHVtcFJlbmRlclRyZWUgLS1wcmludC1zdXBwb3J0ZWQtZmVhdHVyZXMgYW5kIHBhcnNlIHRoZSBv
dXRwdXQuCi0gICAgIyBJZiB0aGUgRmVhdHVyZSBOYW1lcyBhcmUgbm90IGZvdW5kIGluIHRoZSBv
dXRwdXQsIHRoZSBjb3JyZXNwb25kaW5nIGRpcmVjdG9yaWVzCi0gICAgIyB3aWxsIGJlIHNraXBw
ZWQuCi0gICAgZGVmIF9taXNzaW5nX2ZlYXR1cmVfdG9fc2tpcHBlZF90ZXN0cyhzZWxmKToKLSAg
ICAgICAgIiIiUmV0dXJuIHRoZSBzdXBwb3J0ZWQgZmVhdHVyZSBkaWN0aW9uYXJ5LiBLZXlzIGFy
ZSBmZWF0dXJlIG5hbWVzIGFuZCB2YWx1ZXMKLSAgICAgICAgYXJlIHRoZSBsaXN0cyBvZiBkaXJl
Y3RvcmllcyB0byBza2lwIGlmIHRoZSBmZWF0dXJlIG5hbWUgaXMgbm90IG1hdGNoZWQuIiIiCi0g
ICAgICAgICMgRklYTUU6IFRoaXMgbGlzdCBtYXRjaGVzIFdlYktpdFdpbiBhbmQgc2hvdWxkIGJl
IG1vdmVkIG9udG8gdGhlIFdpbiBwb3J0LgotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAg
IkFjY2VsZXJhdGVkIENvbXBvc2l0aW5nIjogWyJjb21wb3NpdGluZyJdLAotICAgICAgICAgICAg
IjNEIFJlbmRlcmluZyI6IFsiYW5pbWF0aW9ucy8zZCIsICJ0cmFuc2Zvcm1zLzNkIl0sCi0gICAg
ICAgIH0KLQotICAgICMgUG9ydHMgd2hpY2ggdXNlIGNvbXBpbGUtdGltZSBmZWF0dXJlIGRldGVj
dGlvbiBzaG91bGQgZGVmaW5lIHRoaXMgbWV0aG9kIGFuZCByZXR1cm4KLSAgICAjIGEgZGljdGlv
bmFyeSBtYXBwaW5nIGZyb20gc3ltYm9sIHN1YnN0cmluZ3MgdG8gcG9zc2libHkgZGlzYWJsZWQg
dGVzdCBkaXJlY3Rvcmllcy4KLSAgICAjIFdoZW4gdGhlIHN5bWJvbCBzdWJzdHJpbmdzIGFyZSBu
b3QgbWF0Y2hlZCwgdGhlIGRpcmVjdG9yaWVzIHdpbGwgYmUgc2tpcHBlZC4KLSAgICAjIElmIHBv
cnRzIGRvbid0IGV2ZXIgZW5hYmxlIGNlcnRhaW4gZmVhdHVyZXMsIHRoZW4gdGhvc2UgZGlyZWN0
b3JpZXMgY2FuIGp1c3QgYmUKLSAgICAjIGluIHRoZSBTa2lwcGVkIGxpc3QgaW5zdGVhZCBvZiBj
b21waWxlLXRpbWUtY2hlY2tlZCBoZXJlLgotICAgIGRlZiBfbWlzc2luZ19zeW1ib2xfdG9fc2tp
cHBlZF90ZXN0cyhzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBzdXBwb3J0ZWQgZmVhdHVy
ZSBkaWN0aW9uYXJ5LiBUaGUga2V5cyBhcmUgc3ltYm9sLXN1YnN0cmluZ3MKLSAgICAgICAgYW5k
IHRoZSB2YWx1ZXMgYXJlIHRoZSBsaXN0cyBvZiBkaXJlY3RvcmllcyB0byBza2lwIGlmIHRoYXQg
c3ltYm9sIGlzIG1pc3NpbmcuIiIiCi0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAiTWF0
aE1MRWxlbWVudCI6IFsibWF0aG1sIl0sCi0gICAgICAgICAgICAiR3JhcGhpY3NMYXllciI6IFsi
Y29tcG9zaXRpbmciXSwKLSAgICAgICAgICAgICJXZWJDb3JlSGFzM0RSZW5kZXJpbmciOiBbImFu
aW1hdGlvbnMvM2QiLCAidHJhbnNmb3Jtcy8zZCJdLAotICAgICAgICAgICAgIldlYkdMU2hhZGVy
IjogWyJmYXN0L2NhbnZhcy93ZWJnbCIsICJjb21wb3NpdGluZy93ZWJnbCIsICJodHRwL3Rlc3Rz
L2NhbnZhcy93ZWJnbCIsICJ3ZWJnbCJdLAotICAgICAgICAgICAgIk1IVE1MQXJjaGl2ZSI6IFsi
bWh0bWwiXSwKLSAgICAgICAgICAgICJDU1NWYXJpYWJsZVZhbHVlIjogWyJmYXN0L2Nzcy92YXJp
YWJsZXMiLCAiaW5zcGVjdG9yL3N0eWxlcy92YXJpYWJsZXMiXSwKLSAgICAgICAgfQotCi0gICAg
ZGVmIF9oYXNfdGVzdF9pbl9kaXJlY3RvcmllcyhzZWxmLCBkaXJlY3RvcnlfbGlzdHMsIHRlc3Rf
bGlzdCk6Ci0gICAgICAgIGlmIG5vdCB0ZXN0X2xpc3Q6Ci0gICAgICAgICAgICByZXR1cm4gRmFs
c2UKLQotICAgICAgICBkaXJlY3RvcmllcyA9IGl0ZXJ0b29scy5jaGFpbi5mcm9tX2l0ZXJhYmxl
KGRpcmVjdG9yeV9saXN0cykKLSAgICAgICAgZm9yIGRpcmVjdG9yeSwgdGVzdCBpbiBpdGVydG9v
bHMucHJvZHVjdChkaXJlY3RvcmllcywgdGVzdF9saXN0KToKLSAgICAgICAgICAgIGlmIHRlc3Qu
c3RhcnRzd2l0aChkaXJlY3RvcnkpOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAg
ICAgIHJldHVybiBGYWxzZQotCi0gICAgZGVmIF9za2lwcGVkX3Rlc3RzX2Zvcl91bnN1cHBvcnRl
ZF9mZWF0dXJlcyhzZWxmLCB0ZXN0X2xpc3QpOgotICAgICAgICAjIE9ubHkgY2hlY2sgdGhlIHJ1
bnRpbWUgZmVhdHVyZSBsaXN0IG9mIHRoZXJlIGFyZSB0ZXN0cyBpbiB0aGUgdGVzdF9saXN0IHRo
YXQgbWlnaHQgZ2V0IHNraXBwZWQuCi0gICAgICAgICMgVGhpcyBpcyBhIHBlcmZvcm1hbmNlIG9w
dGltaXphdGlvbiB0byBhdm9pZCB0aGUgc3VicHJvY2VzcyBjYWxsIHRvIERSVC4KLSAgICAgICAg
IyBJZiB0aGUgcG9ydCBzdXBwb3J0cyBydW50aW1lIGZlYXR1cmUgZGV0ZWN0aW9uLCBkaXNhYmxl
IGFueSB0ZXN0cwotICAgICAgICAjIGZvciBmZWF0dXJlcyBtaXNzaW5nIGZyb20gdGhlIHJ1bnRp
bWUgZmVhdHVyZSBsaXN0LgotICAgICAgICAjIElmIF9ydW50aW1lX2ZlYXR1cmVfbGlzdCByZXR1
cm5zIGEgbm9uLU5vbmUgdmFsdWUsIHRoZW4gcHJlZmVyCi0gICAgICAgICMgcnVudGltZSBmZWF0
dXJlIGRldGVjdGlvbiBvdmVyIHN0YXRpYyBmZWF0dXJlIGRldGVjdGlvbi4KLSAgICAgICAgaWYg
c2VsZi5faGFzX3Rlc3RfaW5fZGlyZWN0b3JpZXMoc2VsZi5fbWlzc2luZ19mZWF0dXJlX3RvX3Nr
aXBwZWRfdGVzdHMoKS52YWx1ZXMoKSwgdGVzdF9saXN0KToKLSAgICAgICAgICAgIHN1cHBvcnRl
ZF9mZWF0dXJlX2xpc3QgPSBzZWxmLl9ydW50aW1lX2ZlYXR1cmVfbGlzdCgpCi0gICAgICAgICAg
ICBpZiBzdXBwb3J0ZWRfZmVhdHVyZV9saXN0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAg
IHJldHVybiByZWR1Y2Uob3BlcmF0b3IuYWRkLCBbZGlyZWN0b3JpZXMgZm9yIGZlYXR1cmUsIGRp
cmVjdG9yaWVzIGluIHNlbGYuX21pc3NpbmdfZmVhdHVyZV90b19za2lwcGVkX3Rlc3RzKCkuaXRl
bXMoKSBpZiBmZWF0dXJlIG5vdCBpbiBzdXBwb3J0ZWRfZmVhdHVyZV9saXN0XSkKLQotICAgICAg
ICAjIE9ubHkgY2hlY2sgdGhlIHN5bWJvbHMgb2YgdGhlcmUgYXJlIHRlc3RzIGluIHRoZSB0ZXN0
X2xpc3QgdGhhdCBtaWdodCBnZXQgc2tpcHBlZC4KLSAgICAgICAgIyBUaGlzIGlzIGEgcGVyZm9y
bWFuY2Ugb3B0aW1pemF0aW9uIHRvIGF2b2lkIHRoZSBjYWxsaW5nIG5tLgotICAgICAgICAjIFJ1
bnRpbWUgZmVhdHVyZSBkZXRlY3Rpb24gbm90IHN1cHBvcnRlZCwgZmFsbGJhY2sgdG8gc3RhdGlj
IGRlY3RlY3Rpb246Ci0gICAgICAgICMgRGlzYWJsZSBhbnkgdGVzdHMgZm9yIHN5bWJvbHMgbWlz
c2luZyBmcm9tIHRoZSBleGVjdXRhYmxlIG9yIGxpYnJhcmllcy4KLSAgICAgICAgaWYgc2VsZi5f
aGFzX3Rlc3RfaW5fZGlyZWN0b3JpZXMoc2VsZi5fbWlzc2luZ19zeW1ib2xfdG9fc2tpcHBlZF90
ZXN0cygpLnZhbHVlcygpLCB0ZXN0X2xpc3QpOgotICAgICAgICAgICAgc3ltYm9sc19zdHJpbmcg
PSBzZWxmLl9zeW1ib2xzX3N0cmluZygpCi0gICAgICAgICAgICBpZiBzeW1ib2xzX3N0cmluZyBp
cyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVkdWNlKG9wZXJhdG9yLmFkZCwg
W2RpcmVjdG9yaWVzIGZvciBzeW1ib2xfc3Vic3RyaW5nLCBkaXJlY3RvcmllcyBpbiBzZWxmLl9t
aXNzaW5nX3N5bWJvbF90b19za2lwcGVkX3Rlc3RzKCkuaXRlbXMoKSBpZiBzeW1ib2xfc3Vic3Ry
aW5nIG5vdCBpbiBzeW1ib2xzX3N0cmluZ10sIFtdKQotCi0gICAgICAgIHJldHVybiBbXQotCi0g
ICAgZGVmIF93azJfcG9ydF9uYW1lKHNlbGYpOgotICAgICAgICAjIEJ5IGN1cnJlbnQgY29udmVu
dGlvbiwgdGhlIFdlYktpdDIgbmFtZSBpcyBhbHdheXMgbWFjLXdrMiwgd2luLXdrMiwgbm90IG1h
Yy1sZW9wYXJkLXdrMiwgZXRjLAotICAgICAgICAjIGV4Y2VwdCBmb3IgUXQgYmVjYXVzZSBXZWJL
aXQyIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IFF0IDUuMCAodGhlcmVmb3JlOiBxdC01LjAtd2syKS4K
LSAgICAgICAgcmV0dXJuICIlcy13azIiICUgc2VsZi5wb3J0X25hbWUKLQotCi1jbGFzcyBWaXJ0
dWFsVGVzdFN1aXRlKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGJhc2Us
IGFyZ3MsIHRlc3RzPU5vbmUpOgotICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgICAgIHNl
bGYuYmFzZSA9IGJhc2UKLSAgICAgICAgc2VsZi5hcmdzID0gYXJncwotICAgICAgICBzZWxmLnRl
c3RzID0gdGVzdHMgb3Igc2V0KCkKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAg
cmV0dXJuICJWaXJ0dWFsVGVzdFN1aXRlKCclcycsICclcycsICVzKSIgJSAoc2VsZi5uYW1lLCBz
ZWxmLmJhc2UsIHNlbGYuYXJncykKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvYmFzZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2VfdW5pdHRlc3QucHkJKHJldmlzaW9uIDE0
ODQ5NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZV91
bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMSw0OTkgKzAsMCBAQAotIyBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3B0cGFyc2UKLWltcG9ydCBzeXMKLWltcG9ydCB0
ZW1wZmlsZQotaW1wb3J0IHVuaXR0ZXN0MiBhcyB1bml0dGVzdAotCi1mcm9tIHdlYmtpdHB5LmNv
bW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUsIFNjcmlwdEVycm9yCi1mcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IGV4ZWN1dGl2ZV9tb2NrCi1mcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbV9tb2NrIGltcG9ydCBNb2NrRmlsZVN5c3RlbQot
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENh
cHR1cmUKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5wYXRoIGltcG9ydCBhYnNwYXRoX3Rv
X3VyaQotZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5Lm1vY2sgaW1wb3J0IE1vY2sKLWZyb20gd2Vi
a2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKLWZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5leGVjdXRpdmVfbW9jayBpbXBvcnQgTW9ja0V4ZWN1dGl2ZSwgTW9ja0V4ZWN1
dGl2ZTIKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0
IE1vY2tTeXN0ZW1Ib3N0Ci0KLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0
IFBvcnQsIERyaXZlciwgRHJpdmVyT3V0cHV0Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5w
b3J0LnRlc3QgaW1wb3J0IGFkZF91bml0X3Rlc3RzX3RvX21vY2tfZmlsZXN5c3RlbSwgVGVzdFBv
cnQKLQotY2xhc3MgUG9ydFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBtYWtlX3Bv
cnQoc2VsZiwgZXhlY3V0aXZlPU5vbmUsIHdpdGhfdGVzdHM9RmFsc2UsIHBvcnRfbmFtZT1Ob25l
LCAqKmt3YXJncyk6Ci0gICAgICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9zdCgpCi0gICAgICAgIGlm
IGV4ZWN1dGl2ZToKLSAgICAgICAgICAgIGhvc3QuZXhlY3V0aXZlID0gZXhlY3V0aXZlCi0gICAg
ICAgIGlmIHdpdGhfdGVzdHM6Ci0gICAgICAgICAgICBhZGRfdW5pdF90ZXN0c190b19tb2NrX2Zp
bGVzeXN0ZW0oaG9zdC5maWxlc3lzdGVtKQotICAgICAgICAgICAgcmV0dXJuIFRlc3RQb3J0KGhv
c3QsICoqa3dhcmdzKQotICAgICAgICByZXR1cm4gUG9ydChob3N0LCBwb3J0X25hbWUgb3IgJ2Jh
c2Vwb3J0JywgKiprd2FyZ3MpCi0KLSAgICBkZWYgdGVzdF9kZWZhdWx0X2NoaWxkX3Byb2Nlc3Nl
cyhzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKLSAgICAgICAgc2VsZi5h
c3NlcnRJc05vdE5vbmUocG9ydC5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpKQotCi0gICAgZGVm
IHRlc3RfZm9ybWF0X3dkaWZmX291dHB1dF9hc19odG1sKHNlbGYpOgotICAgICAgICBvdXRwdXQg
PSAiT1VUUFVUICVzICVzICVzIiAlIChQb3J0Ll9XRElGRl9ERUwsIFBvcnQuX1dESUZGX0FERCwg
UG9ydC5fV0RJRkZfRU5EKQotICAgICAgICBodG1sID0gc2VsZi5tYWtlX3BvcnQoKS5fZm9ybWF0
X3dkaWZmX291dHB1dF9hc19odG1sKG91dHB1dCkKLSAgICAgICAgZXhwZWN0ZWRfaHRtbCA9ICI8
aGVhZD48c3R5bGU+LmRlbCB7IGJhY2tncm91bmQ6ICNmYWE7IH0gLmFkZCB7IGJhY2tncm91bmQ6
ICNhZmE7IH08L3N0eWxlPjwvaGVhZD48cHJlPk9VVFBVVCA8c3BhbiBjbGFzcz1kZWw+IDxzcGFu
IGNsYXNzPWFkZD4gPC9zcGFuPjwvcHJlPiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodG1s
LCBleHBlY3RlZF9odG1sKQotCi0gICAgZGVmIHRlc3Rfd2RpZmZfY29tbWFuZChzZWxmKToKLSAg
ICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKLSAgICAgICAgcG9ydC5fcGF0aF90b193ZGlm
ZiA9IGxhbWJkYTogIi9wYXRoL3RvL3dkaWZmIgotICAgICAgICBjb21tYW5kID0gcG9ydC5fd2Rp
ZmZfY29tbWFuZCgiL2FjdHVhbC9wYXRoIiwgIi9leHBlY3RlZC9wYXRoIikKLSAgICAgICAgZXhw
ZWN0ZWRfY29tbWFuZCA9IFsKLSAgICAgICAgICAgICIvcGF0aC90by93ZGlmZiIsCi0gICAgICAg
ICAgICAiLS1zdGFydC1kZWxldGU9IyNXRElGRl9ERUwjIyIsCi0gICAgICAgICAgICAiLS1lbmQt
ZGVsZXRlPSMjV0RJRkZfRU5EIyMiLAotICAgICAgICAgICAgIi0tc3RhcnQtaW5zZXJ0PSMjV0RJ
RkZfQUREIyMiLAotICAgICAgICAgICAgIi0tZW5kLWluc2VydD0jI1dESUZGX0VORCMjIiwKLSAg
ICAgICAgICAgICIvYWN0dWFsL3BhdGgiLAotICAgICAgICAgICAgIi9leHBlY3RlZC9wYXRoIiwK
LSAgICAgICAgXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1hbmQsIGV4cGVjdGVkX2Nv
bW1hbmQpCi0KLSAgICBkZWYgX2ZpbGVfd2l0aF9jb250ZW50cyhzZWxmLCBjb250ZW50cywgZW5j
b2Rpbmc9InV0Zi04Iik6Ci0gICAgICAgIG5ld19maWxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3Jh
cnlGaWxlKCkKLSAgICAgICAgbmV3X2ZpbGUud3JpdGUoY29udGVudHMuZW5jb2RlKGVuY29kaW5n
KSkKLSAgICAgICAgbmV3X2ZpbGUuZmx1c2goKQotICAgICAgICByZXR1cm4gbmV3X2ZpbGUKLQot
ICAgIGRlZiB0ZXN0X3ByZXR0eV9wYXRjaF9vc19lcnJvcihzZWxmKToKLSAgICAgICAgcG9ydCA9
IHNlbGYubWFrZV9wb3J0KGV4ZWN1dGl2ZT1leGVjdXRpdmVfbW9jay5Nb2NrRXhlY3V0aXZlMihl
eGNlcHRpb249T1NFcnJvcikpCi0gICAgICAgIG9jID0gT3V0cHV0Q2FwdHVyZSgpCi0gICAgICAg
IG9jLmNhcHR1cmVfb3V0cHV0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LnByZXR0
eV9wYXRjaF90ZXh0KCJwYXRjaC50eHQiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0
Ll9wcmV0dHlfcGF0Y2hfZXJyb3JfaHRtbCkKLQotICAgICAgICAjIFRoaXMgdGVzdHMgcmVwZWF0
ZWQgY2FsbHMgdG8gbWFrZSBzdXJlIHdlIGNhY2hlIHRoZSByZXN1bHQuCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwocG9ydC5wcmV0dHlfcGF0Y2hfdGV4dCgicGF0Y2gudHh0IiksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgcG9ydC5fcHJldHR5X3BhdGNoX2Vycm9yX2h0bWwpCi0gICAgICAg
IG9jLnJlc3RvcmVfb3V0cHV0KCkKLQotICAgIGRlZiB0ZXN0X3ByZXR0eV9wYXRjaF9zY3JpcHRf
ZXJyb3Ioc2VsZik6Ci0gICAgICAgICMgRklYTUU6IFRoaXMgaXMgc29tZSB1Z2x5IHdoaXRlLWJv
eCB0ZXN0IGhhY2tpbmcgLi4uCi0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChleGVjdXRp
dmU9ZXhlY3V0aXZlX21vY2suTW9ja0V4ZWN1dGl2ZTIoZXhjZXB0aW9uPVNjcmlwdEVycm9yKSkK
LSAgICAgICAgcG9ydC5fcHJldHR5X3BhdGNoX2F2YWlsYWJsZSA9IFRydWUKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChwb3J0LnByZXR0eV9wYXRjaF90ZXh0KCJwYXRjaC50eHQiKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBwb3J0Ll9wcmV0dHlfcGF0Y2hfZXJyb3JfaHRtbCkKLQotICAg
ICAgICAjIFRoaXMgdGVzdHMgcmVwZWF0ZWQgY2FsbHMgdG8gbWFrZSBzdXJlIHdlIGNhY2hlIHRo
ZSByZXN1bHQuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5wcmV0dHlfcGF0Y2hfdGV4
dCgicGF0Y2gudHh0IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgcG9ydC5fcHJldHR5X3Bh
dGNoX2Vycm9yX2h0bWwpCi0KLSAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9ydW5fd2RpZmYoc2Vs
Zik6Ci0gICAgICAgIGV4ZWN1dGl2ZSA9IEV4ZWN1dGl2ZSgpCi0gICAgICAgICMgVGhpcyBtYXkg
ZmFpbCBvbiBzb21lIHN5c3RlbXMuICBXZSBjb3VsZCBhc2sgdGhlIHBvcnQKLSAgICAgICAgIyBv
YmplY3QgZm9yIHRoZSB3ZGlmZiBwYXRoLCBidXQgc2luY2Ugd2UgZG9uJ3Qga25vdyB3aGF0Ci0g
ICAgICAgICMgcG9ydCBvYmplY3QgdG8gdXNlLCB0aGlzIGlzIHN1ZmZpY2llbnQgZm9yIG5vdy4K
LSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2RpZmZfcGF0aCA9IGV4ZWN1dGl2ZS5ydW5fY29t
bWFuZChbIndoaWNoIiwgIndkaWZmIl0pLnJzdHJpcCgpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRp
b24sIGU6Ci0gICAgICAgICAgICB3ZGlmZl9wYXRoID0gTm9uZQotCi0gICAgICAgIHBvcnQgPSBz
ZWxmLm1ha2VfcG9ydChleGVjdXRpdmU9ZXhlY3V0aXZlKQotICAgICAgICBwb3J0Ll9wYXRoX3Rv
X3dkaWZmID0gbGFtYmRhOiB3ZGlmZl9wYXRoCi0KLSAgICAgICAgaWYgd2RpZmZfcGF0aDoKLSAg
ICAgICAgICAgICMgIndpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkgYXMgYWN0dWFs
IiBkb2VzIG5vdCBzZWVtIHRvIHdvcmsgaW4gUHl0aG9uIDIuNQotICAgICAgICAgICAgYWN0dWFs
ID0gc2VsZi5fZmlsZV93aXRoX2NvbnRlbnRzKHUiZm9vIikKLSAgICAgICAgICAgIGV4cGVjdGVk
ID0gc2VsZi5fZmlsZV93aXRoX2NvbnRlbnRzKHUiYmFyIikKLSAgICAgICAgICAgIHdkaWZmID0g
cG9ydC5fcnVuX3dkaWZmKGFjdHVhbC5uYW1lLCBleHBlY3RlZC5uYW1lKQotICAgICAgICAgICAg
ZXhwZWN0ZWRfd2RpZmYgPSAiPGhlYWQ+PHN0eWxlPi5kZWwgeyBiYWNrZ3JvdW5kOiAjZmFhOyB9
IC5hZGQgeyBiYWNrZ3JvdW5kOiAjYWZhOyB9PC9zdHlsZT48L2hlYWQ+PHByZT48c3BhbiBjbGFz
cz1kZWw+Zm9vPC9zcGFuPjxzcGFuIGNsYXNzPWFkZD5iYXI8L3NwYW4+PC9wcmU+IgotICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3ZGlmZiwgZXhwZWN0ZWRfd2RpZmYpCi0gICAgICAgICAg
ICAjIFJ1bm5pbmcgdGhlIGZ1bGwgd2RpZmZfdGV4dCBtZXRob2Qgc2hvdWxkIGdpdmUgdGhlIHNh
bWUgcmVzdWx0LgotICAgICAgICAgICAgcG9ydC5fd2RpZmZfYXZhaWxhYmxlID0gVHJ1ZSAgIyBJ
biBjYXNlIGl0J3Mgc29tZWhvdyBhbHJlYWR5IGRpc2FibGVkLgotICAgICAgICAgICAgd2RpZmYg
PSBwb3J0LndkaWZmX3RleHQoYWN0dWFsLm5hbWUsIGV4cGVjdGVkLm5hbWUpCi0gICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHdkaWZmLCBleHBlY3RlZF93ZGlmZikKLSAgICAgICAgICAgICMg
d2RpZmYgc2hvdWxkIHN0aWxsIGJlIGF2YWlsYWJsZSBhZnRlciBydW5uaW5nIHdkaWZmX3RleHQg
d2l0aCBhIHZhbGlkIGRpZmYuCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5fd2Rp
ZmZfYXZhaWxhYmxlKQotICAgICAgICAgICAgYWN0dWFsLmNsb3NlKCkKLSAgICAgICAgICAgIGV4
cGVjdGVkLmNsb3NlKCkKLQotICAgICAgICAgICAgIyBCb2d1cyBwYXRocyBzaG91bGQgcmFpc2Ug
YSBzY3JpcHQgZXJyb3IuCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTY3JpcHRFcnJv
ciwgcG9ydC5fcnVuX3dkaWZmLCAiL2RvZXMvbm90L2V4aXN0IiwgIi9kb2VzL25vdC9leGlzdDIi
KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU2NyaXB0RXJyb3IsIHBvcnQud2RpZmZf
dGV4dCwgIi9kb2VzL25vdC9leGlzdCIsICIvZG9lcy9ub3QvZXhpc3QyIikKLSAgICAgICAgICAg
ICMgd2RpZmYgd2lsbCBzdGlsbCBiZSBhdmFpbGFibGUgYWZ0ZXIgcnVubmluZyB3ZGlmZl90ZXh0
IHdpdGggaW52YWxpZCBwYXRocy4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0Ll93
ZGlmZl9hdmFpbGFibGUpCi0KLSAgICAgICAgIyBJZiB3ZGlmZiBkb2VzIG5vdCBleGlzdCBfcnVu
X3dkaWZmIHNob3VsZCB0aHJvdyBhbiBPU0Vycm9yLgotICAgICAgICBwb3J0Ll9wYXRoX3RvX3dk
aWZmID0gbGFtYmRhOiAiL2ludmFsaWQvcGF0aC90by93ZGlmZiIKLSAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoT1NFcnJvciwgcG9ydC5fcnVuX3dkaWZmLCAiZm9vIiwgImJhciIpCi0KLSAgICAg
ICAgIyB3ZGlmZl90ZXh0IHNob3VsZCBub3QgdGhyb3cgYW4gZXJyb3IgaWYgd2RpZmYgZG9lcyBu
b3QgZXhpc3QuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC53ZGlmZl90ZXh0KCJmb28i
LCAiYmFyIiksICIiKQotICAgICAgICAjIEhvd2V2ZXIgd2RpZmYgc2hvdWxkIG5vdCBiZSBhdmFp
bGFibGUgYWZ0ZXIgcnVubmluZyB3ZGlmZl90ZXh0IGlmIHdkaWZmIGlzIG1pc3NpbmcuCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5fd2RpZmZfYXZhaWxhYmxlKQotCi0gICAgZGVmIHRl
c3Rfd2RpZmZfdGV4dChzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKLSAg
ICAgICAgcG9ydC53ZGlmZl9hdmFpbGFibGUgPSBsYW1iZGE6IFRydWUKLSAgICAgICAgcG9ydC5f
cnVuX3dkaWZmID0gbGFtYmRhIGEsIGI6ICdQQVNTJwotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCdQQVNTJywgcG9ydC53ZGlmZl90ZXh0KE5vbmUsIE5vbmUpKQotCi0gICAgZGVmIHRlc3RfZGlm
Zl90ZXh0KHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQotICAgICAgICAj
IE1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0IHJ1biBpbnRvIGRlY29kaW5nIGV4Y2VwdGlvbnMgd2hl
biB0aGUKLSAgICAgICAgIyBmaWxlbmFtZXMgYXJlIHVuaWNvZGUsIHdpdGggcmVndWxhciBvciBt
YWxmb3JtZWQgaW5wdXQgKGV4cGVjdGVkIG9yCi0gICAgICAgICMgYWN0dWFsIGlucHV0IGlzIGFs
d2F5cyByYXcgYnl0ZXMsIG5vdCB1bmljb2RlKS4KLSAgICAgICAgcG9ydC5kaWZmX3RleHQoJ2V4
cCcsICdhY3QnLCAnZXhwLnR4dCcsICdhY3QudHh0JykKLSAgICAgICAgcG9ydC5kaWZmX3RleHQo
J2V4cCcsICdhY3QnLCB1J2V4cC50eHQnLCAnYWN0LnR4dCcpCi0gICAgICAgIHBvcnQuZGlmZl90
ZXh0KCdleHAnLCAnYWN0JywgdSdhXHhhY1x1MTIzNFx1MjBhY1xVMDAwMDgwMDAnLCAnYWN0LnR4
dCcpCi0KLSAgICAgICAgcG9ydC5kaWZmX3RleHQoJ2V4cCcgKyBjaHIoMjU1KSwgJ2FjdCcsICdl
eHAudHh0JywgJ2FjdC50eHQnKQotICAgICAgICBwb3J0LmRpZmZfdGV4dCgnZXhwJyArIGNocigy
NTUpLCAnYWN0JywgdSdleHAudHh0JywgJ2FjdC50eHQnKQotCi0gICAgICAgICMgVGhvdWdoIGV4
cGVjdGVkIGFuZCBhY3R1YWwgZmlsZXMgc2hvdWxkIGFsd2F5cyBiZSByZWFkIGluIHdpdGggbm8K
LSAgICAgICAgIyBlbmNvZGluZyAoYW5kIGJlIHN0b3JlZCBhcyBzdHIgb2JqZWN0cyksIHRlc3Qg
dW5pY29kZSBpbnB1dHMganVzdCB0bwotICAgICAgICAjIGJlIHNhZmUuCi0gICAgICAgIHBvcnQu
ZGlmZl90ZXh0KHUnZXhwJywgJ2FjdCcsICdleHAudHh0JywgJ2FjdC50eHQnKQotICAgICAgICBw
b3J0LmRpZmZfdGV4dCgKLSAgICAgICAgICAgIHUnYVx4YWNcdTEyMzRcdTIwYWNcVTAwMDA4MDAw
JywgJ2FjdCcsICdleHAudHh0JywgJ2FjdC50eHQnKQotCi0gICAgICAgICMgQW5kIG1ha2Ugc3Vy
ZSB3ZSBhY3R1YWxseSBnZXQgZGlmZiBvdXRwdXQuCi0gICAgICAgIGRpZmYgPSBwb3J0LmRpZmZf
dGV4dCgnZm9vJywgJ2JhcicsICdleHAudHh0JywgJ2FjdC50eHQnKQotICAgICAgICBzZWxmLmFz
c2VydEluKCdmb28nLCBkaWZmKQotICAgICAgICBzZWxmLmFzc2VydEluKCdiYXInLCBkaWZmKQot
ICAgICAgICBzZWxmLmFzc2VydEluKCdleHAudHh0JywgZGlmZikKLSAgICAgICAgc2VsZi5hc3Nl
cnRJbignYWN0LnR4dCcsIGRpZmYpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ25vc3VjaHRo
aW5nJywgZGlmZikKLQotICAgIGRlZiB0ZXN0X3NldHVwX3Rlc3RfcnVuKHNlbGYpOgotICAgICAg
ICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQotICAgICAgICAjIFRoaXMgcm91dGluZSBpcyBhIG5v
LW9wLiBXZSBqdXN0IHRlc3QgaXQgZm9yIGNvdmVyYWdlLgotICAgICAgICBwb3J0LnNldHVwX3Rl
c3RfcnVuKCkKLQotICAgIGRlZiB0ZXN0X3Rlc3RfZGlycyhzZWxmKToKLSAgICAgICAgcG9ydCA9
IHNlbGYubWFrZV9wb3J0KCkKLSAgICAgICAgcG9ydC5ob3N0LmZpbGVzeXN0ZW0ud3JpdGVfdGV4
dF9maWxlKHBvcnQubGF5b3V0X3Rlc3RzX2RpcigpICsgJy9jYW52YXMvdGVzdCcsICcnKQotICAg
ICAgICBwb3J0Lmhvc3QuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUocG9ydC5sYXlvdXRfdGVz
dHNfZGlyKCkgKyAnL2NzczIuMS90ZXN0JywgJycpCi0gICAgICAgIGRpcnMgPSBwb3J0LnRlc3Rf
ZGlycygpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2NhbnZhcycsIGRpcnMpCi0gICAgICAgIHNl
bGYuYXNzZXJ0SW4oJ2NzczIuMScsIGRpcnMpCi0KLSAgICBkZWYgdGVzdF9za2lwcGVkX3BlcmZf
dGVzdHMoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCi0KLSAgICAgICAg
ZGVmIGFkZF90ZXh0X2ZpbGUoZGlybmFtZSwgZmlsZW5hbWUsIGNvbnRlbnQ9J3NvbWUgY29udGVu
dCcpOgotICAgICAgICAgICAgZGlybmFtZSA9IHBvcnQuaG9zdC5maWxlc3lzdGVtLmpvaW4ocG9y
dC5wZXJmX3Rlc3RzX2RpcigpLCBkaXJuYW1lKQotICAgICAgICAgICAgcG9ydC5ob3N0LmZpbGVz
eXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3RvcnkoZGlybmFtZSkKLSAgICAgICAgICAgIHBvcnQuaG9z
dC5maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShwb3J0Lmhvc3QuZmlsZXN5c3RlbS5qb2luKGRp
cm5hbWUsIGZpbGVuYW1lKSwgY29udGVudCkKLQotICAgICAgICBhZGRfdGV4dF9maWxlKCdpbnNw
ZWN0b3InLCAndGVzdDEuaHRtbCcpCi0gICAgICAgIGFkZF90ZXh0X2ZpbGUoJ2luc3BlY3Rvcics
ICd1bnN1cHBvcnRlZF90ZXN0MS5odG1sJykKLSAgICAgICAgYWRkX3RleHRfZmlsZSgnaW5zcGVj
dG9yJywgJ3Rlc3QyLmh0bWwnKQotICAgICAgICBhZGRfdGV4dF9maWxlKCdpbnNwZWN0b3IvcmVz
b3VyY2VzJywgJ3Jlc291cmNlX2ZpbGUuaHRtbCcpCi0gICAgICAgIGFkZF90ZXh0X2ZpbGUoJ3Vu
c3VwcG9ydGVkJywgJ3Vuc3VwcG9ydGVkX3Rlc3QyLmh0bWwnKQotICAgICAgICBhZGRfdGV4dF9m
aWxlKCcnLCAnU2tpcHBlZCcsICdcbicuam9pbihbJ0xheW91dCcsICcnLCAnU3VuU3BpZGVyJywg
J1N1cHBvcnRlZC9zb21lLXRlc3QuaHRtbCddKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChw
b3J0LnNraXBwZWRfcGVyZl90ZXN0cygpLCBbJ0xheW91dCcsICdTdW5TcGlkZXInLCAnU3VwcG9y
dGVkL3NvbWUtdGVzdC5odG1sJ10pCi0KLSAgICBkZWYgdGVzdF9nZXRfb3B0aW9uX19zZXQoc2Vs
Zik6Ci0gICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKS5wYXJz
ZV9hcmdzKFtdKQotICAgICAgICBvcHRpb25zLmZvbyA9ICdiYXInCi0gICAgICAgIHBvcnQgPSBz
ZWxmLm1ha2VfcG9ydChvcHRpb25zPW9wdGlvbnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
cG9ydC5nZXRfb3B0aW9uKCdmb28nKSwgJ2JhcicpCi0KLSAgICBkZWYgdGVzdF9nZXRfb3B0aW9u
X191bnNldChzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKLSAgICAgICAg
c2VsZi5hc3NlcnRJc05vbmUocG9ydC5nZXRfb3B0aW9uKCdmb28nKSkKLQotICAgIGRlZiB0ZXN0
X2dldF9vcHRpb25fX2RlZmF1bHQoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9y
dCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5nZXRfb3B0aW9uKCdmb28nLCAnYmFy
JyksICdiYXInKQotCi0gICAgZGVmIHRlc3RfYWRkaXRpb25hbF9wbGF0Zm9ybV9kaXJlY3Rvcnko
c2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChwb3J0X25hbWU9J2ZvbycpCi0g
ICAgICAgIHBvcnQuZGVmYXVsdF9iYXNlbGluZV9zZWFyY2hfcGF0aCA9IGxhbWJkYTogWydMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9mb28nXQotICAgICAgICBsYXlvdXRfdGVzdF9kaXIgPSBwb3J0Lmxh
eW91dF90ZXN0c19kaXIoKQotICAgICAgICB0ZXN0X2ZpbGUgPSAnZmFzdC90ZXN0Lmh0bWwnCi0K
LSAgICAgICAgIyBObyBhZGRpdGlvbmFsIHBsYXRmb3JtIGRpcmVjdG9yeQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKAotICAgICAgICAgICAgcG9ydC5leHBlY3RlZF9iYXNlbGluZXModGVzdF9m
aWxlLCAnLnR4dCcpLAotICAgICAgICAgICAgWyhOb25lLCAnZmFzdC90ZXN0LWV4cGVjdGVkLnR4
dCcpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LmJhc2VsaW5lX3BhdGgoKSwgJ0xh
eW91dFRlc3RzL3BsYXRmb3JtL2ZvbycpCi0KLSAgICAgICAgIyBTaW1wbGUgYWRkaXRpb25hbCBw
bGF0Zm9ybSBkaXJlY3RvcnkKLSAgICAgICAgcG9ydC5fb3B0aW9ucy5hZGRpdGlvbmFsX3BsYXRm
b3JtX2RpcmVjdG9yeSA9IFsnL3RtcC9sb2NhbC1iYXNlbGluZXMnXQotICAgICAgICBwb3J0Ll9m
aWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZSgnL3RtcC9sb2NhbC1iYXNlbGluZXMvZmFzdC90ZXN0
LWV4cGVjdGVkLnR4dCcsICdmb28nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAg
ICAgICAgcG9ydC5leHBlY3RlZF9iYXNlbGluZXModGVzdF9maWxlLCAnLnR4dCcpLAotICAgICAg
ICAgICAgWygnL3RtcC9sb2NhbC1iYXNlbGluZXMnLCAnZmFzdC90ZXN0LWV4cGVjdGVkLnR4dCcp
XSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LmJhc2VsaW5lX3BhdGgoKSwgJy90bXAv
bG9jYWwtYmFzZWxpbmVzJykKLQotICAgICAgICAjIE11bHRpcGxlIGFkZGl0aW9uYWwgcGxhdGZv
cm0gZGlyZWN0b3JpZXMKLSAgICAgICAgcG9ydC5fb3B0aW9ucy5hZGRpdGlvbmFsX3BsYXRmb3Jt
X2RpcmVjdG9yeSA9IFsnL2ZvbycsICcvdG1wL2xvY2FsLWJhc2VsaW5lcyddCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBwb3J0LmV4cGVjdGVkX2Jhc2VsaW5lcyh0ZXN0
X2ZpbGUsICcudHh0JyksCi0gICAgICAgICAgICBbKCcvdG1wL2xvY2FsLWJhc2VsaW5lcycsICdm
YXN0L3Rlc3QtZXhwZWN0ZWQudHh0JyldKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQu
YmFzZWxpbmVfcGF0aCgpLCAnL2ZvbycpCi0KLSAgICBkZWYgdGVzdF9ub25leGlzdGFudF9leHBl
Y3RhdGlvbnMoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChwb3J0X25hbWU9
J2ZvbycpCi0gICAgICAgIHBvcnQuZXhwZWN0YXRpb25zX2ZpbGVzID0gbGFtYmRhOiBbJy9tb2Nr
LWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2V4aXN0cy9UZXN0RXhwZWN0YXRpb25zJywg
Jy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL25vbmV4aXN0YW50L1Rlc3RFeHBl
Y3RhdGlvbnMnXQotICAgICAgICBwb3J0Ll9maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZSgnL21v
Y2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZXhpc3RzL1Rlc3RFeHBlY3RhdGlvbnMn
LCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXG4nLmpvaW4ocG9ydC5leHBlY3RhdGlv
bnNfZGljdCgpLmtleXMoKSksICcvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9l
eGlzdHMvVGVzdEV4cGVjdGF0aW9ucycpCi0KLSAgICBkZWYgdGVzdF9hZGRpdGlvbmFsX2V4cGVj
dGF0aW9ucyhzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHBvcnRfbmFtZT0n
Zm9vJykKLSAgICAgICAgcG9ydC5wb3J0X25hbWUgPSAnZm9vJwotICAgICAgICBwb3J0Ll9maWxl
c3lzdGVtLndyaXRlX3RleHRfZmlsZSgnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZm9vL1Rlc3RFeHBlY3RhdGlvbnMnLCAnJykKLSAgICAgICAgcG9ydC5fZmlsZXN5c3RlbS53
cml0ZV90ZXh0X2ZpbGUoCi0gICAgICAgICAgICAnL3RtcC9hZGRpdGlvbmFsLWV4cGVjdGF0aW9u
cy0xLnR4dCcsICdjb250ZW50MVxuJykKLSAgICAgICAgcG9ydC5fZmlsZXN5c3RlbS53cml0ZV90
ZXh0X2ZpbGUoCi0gICAgICAgICAgICAnL3RtcC9hZGRpdGlvbmFsLWV4cGVjdGF0aW9ucy0yLnR4
dCcsICdjb250ZW50MlxuJykKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdcbicuam9pbihw
b3J0LmV4cGVjdGF0aW9uc19kaWN0KCkudmFsdWVzKCkpLCAnJykKLQotICAgICAgICBwb3J0Ll9v
cHRpb25zLmFkZGl0aW9uYWxfZXhwZWN0YXRpb25zID0gWwotICAgICAgICAgICAgJy90bXAvYWRk
aXRpb25hbC1leHBlY3RhdGlvbnMtMS50eHQnXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdc
bicuam9pbihwb3J0LmV4cGVjdGF0aW9uc19kaWN0KCkudmFsdWVzKCkpLCAnXG5jb250ZW50MVxu
JykKLQotICAgICAgICBwb3J0Ll9vcHRpb25zLmFkZGl0aW9uYWxfZXhwZWN0YXRpb25zID0gWwot
ICAgICAgICAgICAgJy90bXAvbm9uZXhpc3RlbnQtZmlsZScsICcvdG1wL2FkZGl0aW9uYWwtZXhw
ZWN0YXRpb25zLTEudHh0J10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXG4nLmpvaW4ocG9y
dC5leHBlY3RhdGlvbnNfZGljdCgpLnZhbHVlcygpKSwgJ1xuY29udGVudDFcbicpCi0KLSAgICAg
ICAgcG9ydC5fb3B0aW9ucy5hZGRpdGlvbmFsX2V4cGVjdGF0aW9ucyA9IFsKLSAgICAgICAgICAg
ICcvdG1wL2FkZGl0aW9uYWwtZXhwZWN0YXRpb25zLTEudHh0JywgJy90bXAvYWRkaXRpb25hbC1l
eHBlY3RhdGlvbnMtMi50eHQnXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdcbicuam9pbihw
b3J0LmV4cGVjdGF0aW9uc19kaWN0KCkudmFsdWVzKCkpLCAnXG5jb250ZW50MVxuXG5jb250ZW50
MlxuJykKLQotICAgIGRlZiB0ZXN0X2FkZGl0aW9uYWxfZW52X3ZhcihzZWxmKToKLSAgICAgICAg
cG9ydCA9IHNlbGYubWFrZV9wb3J0KG9wdGlvbnM9b3B0cGFyc2UuVmFsdWVzKHsnYWRkaXRpb25h
bF9lbnZfdmFyJzogWydGT089QkFSJywgJ0JBUj1GT08nXX0pKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHBvcnQuZ2V0X29wdGlvbignYWRkaXRpb25hbF9lbnZfdmFyJyksIFsnRk9PPUJBUics
ICdCQVI9Rk9PJ10pCi0gICAgICAgIGVudmlyb25tZW50ID0gcG9ydC5zZXR1cF9lbnZpcm9uX2Zv
cl9zZXJ2ZXIoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoKCdGT08nIGluIGVudmlyb25tZW50
KSAmICgnQkFSJyBpbiBlbnZpcm9ubWVudCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW52
aXJvbm1lbnRbJ0ZPTyddLCAnQkFSJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnZpcm9u
bWVudFsnQkFSJ10sICdGT08nKQotCi0gICAgZGVmIHRlc3RfdXNlc190ZXN0X2V4cGVjdGF0aW9u
c19maWxlKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQocG9ydF9uYW1lPSdm
b28nKQotICAgICAgICBwb3J0LnBvcnRfbmFtZSA9ICdmb28nCi0gICAgICAgIHBvcnQucGF0aF90
b190ZXN0X2V4cGVjdGF0aW9uc19maWxlID0gbGFtYmRhOiAnL21vY2stcmVzdWx0cy9UZXN0RXhw
ZWN0YXRpb25zJwotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQudXNlc190ZXN0X2V4cGVj
dGF0aW9uc19maWxlKCkpCi0gICAgICAgIHBvcnQuX2ZpbGVzeXN0ZW0gPSBNb2NrRmlsZVN5c3Rl
bSh7Jy9tb2NrLXJlc3VsdHMvVGVzdEV4cGVjdGF0aW9ucyc6ICcnfSkKLSAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKHBvcnQudXNlc190ZXN0X2V4cGVjdGF0aW9uc19maWxlKCkpCi0KLSAgICBkZWYg
dGVzdF9maW5kX25vX3BhdGhzX3NwZWNpZmllZChzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYu
bWFrZV9wb3J0KHdpdGhfdGVzdHM9VHJ1ZSkKLSAgICAgICAgbGF5b3V0X3Rlc3RzX2RpciA9IHBv
cnQubGF5b3V0X3Rlc3RzX2RpcigpCi0gICAgICAgIHRlc3RzID0gcG9ydC50ZXN0cyhbXSkKLSAg
ICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChsZW4odGVzdHMpLCAwKQotCi0gICAgZGVmIHRlc3Rf
ZmluZF9vbmVfdGVzdChzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHdpdGhf
dGVzdHM9VHJ1ZSkKLSAgICAgICAgdGVzdHMgPSBwb3J0LnRlc3RzKFsnZmFpbHVyZXMvZXhwZWN0
ZWQvaW1hZ2UuaHRtbCddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZXN0cyksIDEp
Ci0KLSAgICBkZWYgdGVzdF9maW5kX2dsb2Ioc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1h
a2VfcG9ydCh3aXRoX3Rlc3RzPVRydWUpCi0gICAgICAgIHRlc3RzID0gcG9ydC50ZXN0cyhbJ2Zh
aWx1cmVzL2V4cGVjdGVkL2ltKiddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZXN0
cyksIDIpCi0KLSAgICBkZWYgdGVzdF9maW5kX3dpdGhfc2tpcHBlZF9kaXJlY3RvcmllcyhzZWxm
KToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHdpdGhfdGVzdHM9VHJ1ZSkKLSAgICAg
ICAgdGVzdHMgPSBwb3J0LnRlc3RzKFsndXNlcnNjcmlwdHMnXSkKLSAgICAgICAgc2VsZi5hc3Nl
cnROb3RJbigndXNlcnNjcmlwdHMvcmVzb3VyY2VzL2lmcmFtZS5odG1sJywgdGVzdHMpCi0KLSAg
ICBkZWYgdGVzdF9maW5kX3dpdGhfc2tpcHBlZF9kaXJlY3Rvcmllc18yKHNlbGYpOgotICAgICAg
ICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQod2l0aF90ZXN0cz1UcnVlKQotICAgICAgICB0ZXN0cyA9
IHBvcnQudGVzdHMoWyd1c2Vyc2NyaXB0cy9yZXNvdXJjZXMnXSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCh0ZXN0cywgW10pCi0KLSAgICBkZWYgdGVzdF9pc190ZXN0X2ZpbGUoc2VsZik6Ci0g
ICAgICAgIGZpbGVzeXN0ZW0gPSBNb2NrRmlsZVN5c3RlbSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShQb3J0Ll9pc190ZXN0X2ZpbGUoZmlsZXN5c3RlbSwgJycsICdmb28uaHRtbCcpKQotICAg
ICAgICBzZWxmLmFzc2VydFRydWUoUG9ydC5faXNfdGVzdF9maWxlKGZpbGVzeXN0ZW0sICcnLCAn
Zm9vLnNodG1sJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQb3J0Ll9pc190ZXN0X2ZpbGUo
ZmlsZXN5c3RlbSwgJycsICdmb28uc3ZnJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQb3J0
Ll9pc190ZXN0X2ZpbGUoZmlsZXN5c3RlbSwgJycsICd0ZXN0LXJlZi10ZXN0Lmh0bWwnKSkKLSAg
ICAgICAgc2VsZi5hc3NlcnRGYWxzZShQb3J0Ll9pc190ZXN0X2ZpbGUoZmlsZXN5c3RlbSwgJycs
ICdmb28ucG5nJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUG9ydC5faXNfdGVzdF9maWxl
KGZpbGVzeXN0ZW0sICcnLCAnZm9vLWV4cGVjdGVkLmh0bWwnKSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRGYWxzZShQb3J0Ll9pc190ZXN0X2ZpbGUoZmlsZXN5c3RlbSwgJycsICdmb28tZXhwZWN0ZWQu
c3ZnJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUG9ydC5faXNfdGVzdF9maWxlKGZpbGVz
eXN0ZW0sICcnLCAnZm9vLWV4cGVjdGVkLnhodCcpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNl
KFBvcnQuX2lzX3Rlc3RfZmlsZShmaWxlc3lzdGVtLCAnJywgJ2Zvby1leHBlY3RlZC1taXNtYXRj
aC5odG1sJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUG9ydC5faXNfdGVzdF9maWxlKGZp
bGVzeXN0ZW0sICcnLCAnZm9vLWV4cGVjdGVkLW1pc21hdGNoLnN2ZycpKQotICAgICAgICBzZWxm
LmFzc2VydEZhbHNlKFBvcnQuX2lzX3Rlc3RfZmlsZShmaWxlc3lzdGVtLCAnJywgJ2Zvby1leHBl
Y3RlZC1taXNtYXRjaC54aHRtbCcpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFBvcnQuX2lz
X3Rlc3RfZmlsZShmaWxlc3lzdGVtLCAnJywgJ2Zvby1yZWYuaHRtbCcpKQotICAgICAgICBzZWxm
LmFzc2VydEZhbHNlKFBvcnQuX2lzX3Rlc3RfZmlsZShmaWxlc3lzdGVtLCAnJywgJ2Zvby1ub3Ry
ZWYuaHRtbCcpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFBvcnQuX2lzX3Rlc3RfZmlsZShm
aWxlc3lzdGVtLCAnJywgJ2Zvby1ub3RyZWYueGh0JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFs
c2UoUG9ydC5faXNfdGVzdF9maWxlKGZpbGVzeXN0ZW0sICcnLCAnZm9vLXJlZi54aHRtbCcpKQot
ICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFBvcnQuX2lzX3Rlc3RfZmlsZShmaWxlc3lzdGVtLCAn
JywgJ3JlZi1mb28uaHRtbCcpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFBvcnQuX2lzX3Rl
c3RfZmlsZShmaWxlc3lzdGVtLCAnJywgJ25vdHJlZi1mb28ueGhyJykpCi0KLSAgICBkZWYgdGVz
dF9wYXJzZV9yZWZ0ZXN0X2xpc3Qoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9y
dCh3aXRoX3Rlc3RzPVRydWUpCi0gICAgICAgIHBvcnQuaG9zdC5maWxlc3lzdGVtLmZpbGVzWydi
YXIvcmVmdGVzdC5saXN0J10gPSAiXG4iLmpvaW4oWyI9PSB0ZXN0Lmh0bWwgdGVzdC1yZWYuaHRt
bCIsCi0gICAgICAgICIiLAotICAgICAgICAiIyBzb21lIGNvbW1lbnQiLAotICAgICAgICAiIT0g
dGVzdC0yLmh0bWwgdGVzdC1ub3RyZWYuaHRtbCAjIG1vcmUgY29tbWVudHMiLAotICAgICAgICAi
PT0gdGVzdC0zLmh0bWwgdGVzdC1yZWYuaHRtbCIsCi0gICAgICAgICI9PSB0ZXN0LTMuaHRtbCB0
ZXN0LXJlZjIuaHRtbCIsCi0gICAgICAgICIhPSB0ZXN0LTMuaHRtbCB0ZXN0LW5vdHJlZi5odG1s
Il0pCi0KLSAgICAgICAgcmVmdGVzdF9saXN0ID0gUG9ydC5fcGFyc2VfcmVmdGVzdF9saXN0KHBv
cnQuaG9zdC5maWxlc3lzdGVtLCAnYmFyJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWZ0
ZXN0X2xpc3QsIHsnYmFyL3Rlc3QuaHRtbCc6IFsoJz09JywgJ2Jhci90ZXN0LXJlZi5odG1sJyld
LAotICAgICAgICAgICAgJ2Jhci90ZXN0LTIuaHRtbCc6IFsoJyE9JywgJ2Jhci90ZXN0LW5vdHJl
Zi5odG1sJyldLAotICAgICAgICAgICAgJ2Jhci90ZXN0LTMuaHRtbCc6IFsoJz09JywgJ2Jhci90
ZXN0LXJlZi5odG1sJyksICgnPT0nLCAnYmFyL3Rlc3QtcmVmMi5odG1sJyksICgnIT0nLCAnYmFy
L3Rlc3Qtbm90cmVmLmh0bWwnKV19KQotCi0gICAgZGVmIHRlc3RfcmVmZXJlbmNlX2ZpbGVzKHNl
bGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQod2l0aF90ZXN0cz1UcnVlKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQucmVmZXJlbmNlX2ZpbGVzKCdwYXNzZXMvc3ZncmVm
dGVzdC5zdmcnKSwgWygnPT0nLCBwb3J0LmxheW91dF90ZXN0c19kaXIoKSArICcvcGFzc2VzL3N2
Z3JlZnRlc3QtZXhwZWN0ZWQuc3ZnJyldKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQu
cmVmZXJlbmNlX2ZpbGVzKCdwYXNzZXMveGh0cmVmdGVzdC5zdmcnKSwgWygnPT0nLCBwb3J0Lmxh
eW91dF90ZXN0c19kaXIoKSArICcvcGFzc2VzL3hodHJlZnRlc3QtZXhwZWN0ZWQuaHRtbCcpXSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LnJlZmVyZW5jZV9maWxlcygncGFzc2VzL3Bo
cHJlZnRlc3QucGhwJyksIFsoJyE9JywgcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkgKyAnL3Bhc3Nl
cy9waHByZWZ0ZXN0LWV4cGVjdGVkLW1pc21hdGNoLnN2ZycpXSkKLQotICAgIGRlZiB0ZXN0X29w
ZXJhdGluZ19zeXN0ZW0oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ21hYycsIHNl
bGYubWFrZV9wb3J0KCkub3BlcmF0aW5nX3N5c3RlbSgpKQotCi0gICAgZGVmIHRlc3RfaHR0cF9z
ZXJ2ZXJfc3VwcG9ydHNfaXB2NihzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0
KCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQuaHR0cF9zZXJ2ZXJfc3VwcG9ydHNfaXB2
NigpKQotICAgICAgICBwb3J0Lmhvc3QucGxhdGZvcm0ub3NfbmFtZSA9ICdjeWd3aW4nCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5odHRwX3NlcnZlcl9zdXBwb3J0c19pcHY2KCkpCi0g
ICAgICAgIHBvcnQuaG9zdC5wbGF0Zm9ybS5vc19uYW1lID0gJ3dpbicKLSAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKHBvcnQuaHR0cF9zZXJ2ZXJfc3VwcG9ydHNfaXB2NigpKQotCi0gICAgZGVmIHRl
c3RfY2hlY2tfaHR0cGRfc3VjY2VzcyhzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9w
b3J0KGV4ZWN1dGl2ZT1Nb2NrRXhlY3V0aXZlMigpKQotICAgICAgICBwb3J0Ll9wYXRoX3RvX2Fw
YWNoZSA9IGxhbWJkYTogJy91c3Ivc2Jpbi9odHRwZCcKLSAgICAgICAgY2FwdHVyZSA9IE91dHB1
dENhcHR1cmUoKQotICAgICAgICBjYXB0dXJlLmNhcHR1cmVfb3V0cHV0KCkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKHBvcnQuY2hlY2tfaHR0cGQoKSkKLSAgICAgICAgXywgXywgbG9ncyA9IGNh
cHR1cmUucmVzdG9yZV9vdXRwdXQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBsb2dz
KQotCi0gICAgZGVmIHRlc3RfaHR0cGRfcmV0dXJuc19lcnJvcl9jb2RlKHNlbGYpOgotICAgICAg
ICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoZXhlY3V0aXZlPU1vY2tFeGVjdXRpdmUyKGV4aXRfY29k
ZT0xKSkKLSAgICAgICAgcG9ydC5fcGF0aF90b19hcGFjaGUgPSBsYW1iZGE6ICcvdXNyL3NiaW4v
aHR0cGQnCi0gICAgICAgIGNhcHR1cmUgPSBPdXRwdXRDYXB0dXJlKCkKLSAgICAgICAgY2FwdHVy
ZS5jYXB0dXJlX291dHB1dCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5jaGVja19o
dHRwZCgpKQotICAgICAgICBfLCBfLCBsb2dzID0gY2FwdHVyZS5yZXN0b3JlX291dHB1dCgpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2h0dHBkIHNlZW1zIGJyb2tlbi4gQ2Fubm90IHJ1biBo
dHRwIHRlc3RzLlxuJywgbG9ncykKLQotICAgIGRlZiB0ZXN0X3Rlc3RfZXhpc3RzKHNlbGYpOgot
ICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQod2l0aF90ZXN0cz1UcnVlKQotICAgICAgICBz
ZWxmLmFzc2VydFRydWUocG9ydC50ZXN0X2V4aXN0cygncGFzc2VzJykpCi0gICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShwb3J0LnRlc3RfZXhpc3RzKCdwYXNzZXMvdGV4dC5odG1sJykpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RmFsc2UocG9ydC50ZXN0X2V4aXN0cygncGFzc2VzL2RvZXNfbm90X2V4aXN0
Lmh0bWwnKSkKLQotICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC50ZXN0X2V4aXN0cygndmly
dHVhbCcpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQudGVzdF9leGlzdHMoJ3ZpcnR1
YWwvZG9lc19ub3RfZXhpc3QuaHRtbCcpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC50
ZXN0X2V4aXN0cygndmlydHVhbC9wYXNzZXMvdGV4dC5odG1sJykpCi0KLSAgICBkZWYgdGVzdF90
ZXN0X2lzZmlsZShzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHdpdGhfdGVz
dHM9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0LnRlc3RfaXNmaWxlKCdwYXNz
ZXMnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQudGVzdF9pc2ZpbGUoJ3Bhc3Nlcy90
ZXh0Lmh0bWwnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0LnRlc3RfaXNmaWxlKCdw
YXNzZXMvZG9lc19ub3RfZXhpc3QuaHRtbCcpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
cG9ydC50ZXN0X2lzZmlsZSgndmlydHVhbCcpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocG9y
dC50ZXN0X2lzZmlsZSgndmlydHVhbC9wYXNzZXMvdGV4dC5odG1sJykpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RmFsc2UocG9ydC50ZXN0X2lzZmlsZSgndmlydHVhbC9kb2VzX25vdF9leGlzdC5odG1s
JykpCi0KLSAgICBkZWYgdGVzdF90ZXN0X2lzZGlyKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2Vs
Zi5tYWtlX3BvcnQod2l0aF90ZXN0cz1UcnVlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocG9y
dC50ZXN0X2lzZGlyKCdwYXNzZXMnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0LnRl
c3RfaXNkaXIoJ3Bhc3Nlcy90ZXh0Lmh0bWwnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShw
b3J0LnRlc3RfaXNkaXIoJ3Bhc3Nlcy9kb2VzX25vdF9leGlzdC5odG1sJykpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2UocG9ydC50ZXN0X2lzZGlyKCdwYXNzZXMvZG9lc19ub3RfZXhpc3QvJykp
Ci0KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQudGVzdF9pc2RpcigndmlydHVhbCcpKQot
ICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQudGVzdF9pc2RpcigndmlydHVhbC9kb2VzX25v
dF9leGlzdC5odG1sJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC50ZXN0X2lzZGly
KCd2aXJ0dWFsL2RvZXNfbm90X2V4aXN0LycpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBv
cnQudGVzdF9pc2RpcigndmlydHVhbC9wYXNzZXMvdGV4dC5odG1sJykpCi0KLSAgICBkZWYgdGVz
dF90ZXN0cyhzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHdpdGhfdGVzdHM9
VHJ1ZSkKLSAgICAgICAgdGVzdHMgPSBwb3J0LnRlc3RzKFtdKQotICAgICAgICBzZWxmLmFzc2Vy
dEluKCdwYXNzZXMvdGV4dC5odG1sJywgdGVzdHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3Zp
cnR1YWwvcGFzc2VzL3RleHQuaHRtbCcsIHRlc3RzKQotCi0gICAgICAgIHRlc3RzID0gcG9ydC50
ZXN0cyhbJ3Bhc3NlcyddKQotICAgICAgICBzZWxmLmFzc2VydEluKCdwYXNzZXMvdGV4dC5odG1s
JywgdGVzdHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3Bhc3Nlcy9wYXNzZXMvdGVzdC12aXJ0
dWFsLXBhc3Nlcy5odG1sJywgdGVzdHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3ZpcnR1
YWwvcGFzc2VzL3RleHQuaHRtbCcsIHRlc3RzKQotCi0gICAgICAgIHRlc3RzID0gcG9ydC50ZXN0
cyhbJ3ZpcnR1YWwvcGFzc2VzJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3Bhc3Nlcy90
ZXh0Lmh0bWwnLCB0ZXN0cykKLSAgICAgICAgc2VsZi5hc3NlcnRJbigndmlydHVhbC9wYXNzZXMv
dGVzdC12aXJ0dWFsLXBhc3Nlcy5odG1sJywgdGVzdHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4o
J3ZpcnR1YWwvcGFzc2VzL3Bhc3Nlcy90ZXN0LXZpcnR1YWwtcGFzc2VzLmh0bWwnLCB0ZXN0cykK
LSAgICAgICAgc2VsZi5hc3NlcnROb3RJbigndmlydHVhbC9wYXNzZXMvdGVzdC12aXJ0dWFsLXZp
cnR1YWwvcGFzc2VzLmh0bWwnLCB0ZXN0cykKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbigndmly
dHVhbC9wYXNzZXMvdmlydHVhbC9wYXNzZXMvdGVzdC12aXJ0dWFsLXBhc3Nlcy5odG1sJywgdGVz
dHMpCi0KLSAgICBkZWYgdGVzdF9idWlsZF9wYXRoKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2Vs
Zi5tYWtlX3BvcnQob3B0aW9ucz1vcHRwYXJzZS5WYWx1ZXMoeydidWlsZF9kaXJlY3RvcnknOiAn
L215LWJ1aWxkLWRpcmVjdG9yeS8nfSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5f
YnVpbGRfcGF0aCgpLCAnL215LWJ1aWxkLWRpcmVjdG9yeS9SZWxlYXNlJykKLQotICAgIGRlZiB0
ZXN0X2RvbnRfcmVxdWlyZV9odHRwX3NlcnZlcihzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYu
bWFrZV9wb3J0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LnJlcXVpcmVzX2h0dHBf
c2VydmVyKCksIEZhbHNlKQotCi0KLWNsYXNzIE5hdHVyYWxDb21wYXJlVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6Ci0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxmLl9wb3J0ID0gVGVz
dFBvcnQoTW9ja1N5c3RlbUhvc3QoKSkKLQotICAgIGRlZiBhc3NlcnRfY21wKHNlbGYsIHgsIHks
IHJlc3VsdCk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHNlbGYuX3BvcnQuX25hdHVy
YWxfc29ydF9rZXkoeCksIHNlbGYuX3BvcnQuX25hdHVyYWxfc29ydF9rZXkoeSkpLCByZXN1bHQp
Ci0KLSAgICBkZWYgdGVzdF9uYXR1cmFsX2NvbXBhcmUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNz
ZXJ0X2NtcCgnYScsICdhJywgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfY21wKCdhYicsICdhJywg
MSkKLSAgICAgICAgc2VsZi5hc3NlcnRfY21wKCdhJywgJ2FiJywgLTEpCi0gICAgICAgIHNlbGYu
YXNzZXJ0X2NtcCgnJywgJycsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnJywgJ2FiJywg
LTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnMScsICcyJywgLTEpCi0gICAgICAgIHNlbGYu
YXNzZXJ0X2NtcCgnMicsICcxJywgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfY21wKCcxJywgJzEw
JywgLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnMicsICcxMCcsIC0xKQotICAgICAgICBz
ZWxmLmFzc2VydF9jbXAoJ2Zvb18xLmh0bWwnLCAnZm9vXzIuaHRtbCcsIC0xKQotICAgICAgICBz
ZWxmLmFzc2VydF9jbXAoJ2Zvb18xLjEuaHRtbCcsICdmb29fMi5odG1sJywgLTEpCi0gICAgICAg
IHNlbGYuYXNzZXJ0X2NtcCgnZm9vXzEuaHRtbCcsICdmb29fMTAuaHRtbCcsIC0xKQotICAgICAg
ICBzZWxmLmFzc2VydF9jbXAoJ2Zvb18yLmh0bWwnLCAnZm9vXzEwLmh0bWwnLCAtMSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRfY21wKCdmb29fMjMuaHRtbCcsICdmb29fMTAuaHRtbCcsIDEpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X2NtcCgnZm9vXzIzLmh0bWwnLCAnZm9vXzEwMC5odG1sJywgLTEpCi0K
LQotY2xhc3MgS2V5Q29tcGFyZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBzZXRV
cChzZWxmKToKLSAgICAgICAgc2VsZi5fcG9ydCA9IFRlc3RQb3J0KE1vY2tTeXN0ZW1Ib3N0KCkp
Ci0KLSAgICBkZWYgYXNzZXJ0X2NtcChzZWxmLCB4LCB5LCByZXN1bHQpOgotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGNtcChzZWxmLl9wb3J0LnRlc3Rfa2V5KHgpLCBzZWxmLl9wb3J0LnRlc3Rf
a2V5KHkpKSwgcmVzdWx0KQotCi0gICAgZGVmIHRlc3RfdGVzdF9rZXkoc2VsZik6Ci0gICAgICAg
IHNlbGYuYXNzZXJ0X2NtcCgnL2EnLCAnL2EnLCAwKQotICAgICAgICBzZWxmLmFzc2VydF9jbXAo
Jy9hJywgJy9iJywgLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnL2EyJywgJy9hMTAnLCAt
MSkKLSAgICAgICAgc2VsZi5hc3NlcnRfY21wKCcvYTIvZm9vJywgJy9hMTAvZm9vJywgLTEpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnL2EvZm9vMTEnLCAnL2EvZm9vMicsIDEpCi0gICAgICAg
IHNlbGYuYXNzZXJ0X2NtcCgnL2FiJywgJy9hL2EvYicsIC0xKQotICAgICAgICBzZWxmLmFzc2Vy
dF9jbXAoJy9hL2EvYicsICcvYWInLCAxKQotICAgICAgICBzZWxmLmFzc2VydF9jbXAoJy9mb28t
YmFyL2JheicsICcvZm9vL2JheicsIC0xKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9idWlsZGVycy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2J1aWxkZXJzLnB5CShyZXZpc2lvbiAxNDg0OTcp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2J1aWxkZXJzLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzNCArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0j
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1w
b3J0IHJlCi0KLWZyb20gd2Via2l0cHkuY29tbW9uLm1lbW9pemVkIGltcG9ydCBtZW1vaXplZAot
Ci0KLSMgSW4gdGhpcyBkaWN0aW9uYXJ5LCBlYWNoIGl0ZW0gc3RvcmVzOgotIyAqIHBvcnRfbmFt
ZSAtLSBhIGZ1bGx5IHF1YWxpZmllZCBwb3J0IG5hbWUKLSMgKiBpc19kZWJ1ZyAtLSB3aGV0aGVy
IHdlIGFyZSB1c2luZyBhIGRlYnVnIGJ1aWxkCi0jICogbW92ZV9vdmVyd3JpdHRlbl9iYXNlbGlu
ZXNfdG8gLS0gKG9wdGlvbmFsKSBsaXN0IG9mIHBsYXRmb3JtIGRpcmVjdG9yaWVzIHRoYXQgd2Ug
d2lsbCBjb3B5IGFuIGV4aXN0aW5nCi0jICAgICAgYmFzZWxpbmUgdG8gYmVmb3JlIHB1bGxpbmcg
ZG93biBhIG5ldyBiYXNlbGluZSBkdXJpbmcgcmViYXNlbGluaW5nLiBUaGlzIGlzIHVzZWZ1bAot
IyAgICAgIGZvciBicmluZ2luZyB1cCBhIG5ldyBwb3J0LCBmb3IgZXhhbXBsZSB3aGVuIGFkZGlu
ZyBhIExpb24gd2FzIHRoZSBtb3N0IHJlY2VudCBNYWMgdmVyc2lvbiBhbmQKLSMgICAgICB3ZSB3
YW50ZWQgdG8gYnJpbmcgdXAgTW91bnRhaW4gTGlvbiwgd2Ugd291bGQgd2FudCB0byBjb3B5IGFu
IGV4aXN0aW5nIGJhc2VsaW5lIGluIHBsYXRmb3JtL21hYwotIyAgICAgIHRvIHBsYXRmb3JtL21h
Yy1tb3VudGFpbmxpb24gYmVmb3JlIHVwZGF0aW5nIHRoZSBwbGF0Zm9ybS9tYWMgZW50cnkuCi0j
ICogcmViYXNlbGluZV9vdmVycmlkZV9kaXIgLS0gKG9wdGlvbmFsKSBkaXJlY3RvcnkgdG8gcHV0
IGJhc2VsaW5lcyBpbiBpbnN0ZWFkIG9mIHdoZXJlIHlvdSB3b3VsZCBub3JtYWxseSBwdXQgdGhl
bS4KLSMgICAgICBUaGlzIGlzIHVzZWZ1bCB3aGVuIHdlIGRvbid0IGhhdmUgYm90cyB0aGF0IGNv
dmVyIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbnM7IHNvLCBlLmcuLCB5b3UgbWlnaHQKLSMgICAg
ICBzdXBwb3J0IG1hYy1tb3VudGFpbmxpb24gYnV0IG5vdCBoYXZlIGEgbWFjLW1vdW50YWlubGlv
biBib3QgeWV0LCBzbyB5b3UnZCB3YW50IHRvIHB1dCB0aGUgbWFjLWxpb24KLSMgICAgICByZXN1
bHRzIGludG8gcGxhdGZvcm0vbWFjIHRlbXBvcmFyaWx5LgotCi1fZXhhY3RfbWF0Y2hlcyA9IHsK
LSAgICAjIFRoZXNlIGJ1aWxkZXJzIGFyZSBvbiBidWlsZC53ZWJraXQub3JnLgotICAgICJBcHBs
ZSBNb3VudGFpbkxpb24gUmVsZWFzZSBXSzEgKFRlc3RzKSI6IHsicG9ydF9uYW1lIjogIm1hYy1t
b3VudGFpbmxpb24iLCAiaXNfZGVidWciOiBGYWxzZSwgInJlYmFzZWxpbmVfb3ZlcnJpZGVfZGly
IjogIm1hYyJ9LAotICAgICJBcHBsZSBNb3VudGFpbkxpb24gRGVidWcgV0sxIChUZXN0cykiOiB7
InBvcnRfbmFtZSI6ICJtYWMtbW91bnRhaW5saW9uIiwgImlzX2RlYnVnIjogVHJ1ZSwgInJlYmFz
ZWxpbmVfb3ZlcnJpZGVfZGlyIjogIm1hYyJ9LAotICAgICJBcHBsZSBNb3VudGFpbkxpb24gUmVs
ZWFzZSBXSzIgKFRlc3RzKSI6IHsicG9ydF9uYW1lIjogIm1hYy1tb3VudGFpbmxpb24td2syIiwg
ImlzX2RlYnVnIjogRmFsc2UsICJyZWJhc2VsaW5lX292ZXJyaWRlX2RpciI6ICJtYWMifSwKLSAg
ICAiQXBwbGUgTW91bnRhaW5MaW9uIERlYnVnIFdLMiAoVGVzdHMpIjogeyJwb3J0X25hbWUiOiAi
bWFjLW1vdW50YWlubGlvbi13azIiLCAiaXNfZGVidWciOiBUcnVlLCAicmViYXNlbGluZV9vdmVy
cmlkZV9kaXIiOiAibWFjIn0sCi0gICAgIkFwcGxlIExpb24gUmVsZWFzZSBXSzEgKFRlc3RzKSI6
IHsicG9ydF9uYW1lIjogIm1hYy1saW9uIiwgImlzX2RlYnVnIjogRmFsc2V9LAotICAgICJBcHBs
ZSBMaW9uIERlYnVnIFdLMSAoVGVzdHMpIjogeyJwb3J0X25hbWUiOiAibWFjLWxpb24iLCAiaXNf
ZGVidWciOiBUcnVlfSwKLSAgICAiQXBwbGUgTGlvbiBSZWxlYXNlIFdLMiAoVGVzdHMpIjogeyJw
b3J0X25hbWUiOiAibWFjLWxpb24td2syIiwgImlzX2RlYnVnIjogRmFsc2V9LAotICAgICJBcHBs
ZSBMaW9uIERlYnVnIFdLMiAoVGVzdHMpIjogeyJwb3J0X25hbWUiOiAibWFjLWxpb24td2syIiwg
ImlzX2RlYnVnIjogVHJ1ZX0sCi0KLSAgICAiQXBwbGUgV2luIFhQIERlYnVnIChUZXN0cykiOiB7
InBvcnRfbmFtZSI6ICJ3aW4teHAiLCAiaXNfZGVidWciOiBUcnVlfSwKLSAgICAjIEZJWE1FOiBS
ZW1vdmUgcmViYXNlbGluZV9vdmVycmlkZV9kaXIgb25jZSB0aGVyZSBpcyBhbiBBcHBsZSBidWls
ZGJvdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHBsYXRmb3JtL3dpbi4KLSAgICAiQXBwbGUgV2luIDcg
UmVsZWFzZSAoVGVzdHMpIjogeyJwb3J0X25hbWUiOiAid2luLTdzcDAiLCAiaXNfZGVidWciOiBG
YWxzZSwgInJlYmFzZWxpbmVfb3ZlcnJpZGVfZGlyIjogIndpbiJ9LAotCi0gICAgIkdUSyBMaW51
eCAzMi1iaXQgUmVsZWFzZSI6IHsicG9ydF9uYW1lIjogImd0ayIsICJpc19kZWJ1ZyI6IEZhbHNl
fSwKLSAgICAiR1RLIExpbnV4IDY0LWJpdCBEZWJ1ZyI6IHsicG9ydF9uYW1lIjogImd0ayIsICJp
c19kZWJ1ZyI6IFRydWV9LAotICAgICJHVEsgTGludXggNjQtYml0IFJlbGVhc2UiOiB7InBvcnRf
bmFtZSI6ICJndGsiLCAiaXNfZGVidWciOiBGYWxzZX0sCi0gICAgIkdUSyBMaW51eCA2NC1iaXQg
UmVsZWFzZSBXSzIgKFRlc3RzKSI6IHsicG9ydF9uYW1lIjogImd0ay13azIiLCAiaXNfZGVidWci
OiBGYWxzZX0sCi0KLSAgICAjIEZJWE1FOiBSZW1vdmUgcmViYXNlbGluZV9vdmVycmlkZV9kaXIg
b25jZSB0aGVyZSBhcmUgUXQgYm90cyBmb3IgYWxsIHRoZSBwbGF0Zm9ybS9xdC0qIGRpcmVjdG9y
aWVzLgotICAgICJRdCBMaW51eCBSZWxlYXNlIjogeyJwb3J0X25hbWUiOiAicXQtbGludXgiLCAi
aXNfZGVidWciOiBGYWxzZSwgInJlYmFzZWxpbmVfb3ZlcnJpZGVfZGlyIjogInF0In0sCi0KLSAg
ICAiRUZMIExpbnV4IDY0LWJpdCBSZWxlYXNlIjogeyJwb3J0X25hbWUiOiAiZWZsIiwgImlzX2Rl
YnVnIjogRmFsc2V9LAotICAgICJFRkwgTGludXggNjQtYml0IFJlbGVhc2UgV0syIjogeyJwb3J0
X25hbWUiOiAiZWZsLXdrMiIsICJpc19kZWJ1ZyI6IEZhbHNlfSwKLSAgICAiRUZMIExpbnV4IDY0
LWJpdCBEZWJ1ZyBXSzIiOiB7InBvcnRfbmFtZSI6ICJlZmwtd2syIiwgImlzX2RlYnVnIjogVHJ1
ZX0sCi19Ci0KLQotX2Z1enp5X21hdGNoZXMgPSB7Ci0gICAgIyBUaGVzZSBidWlsZGVycyBhcmUg
b24gYnVpbGQud2Via2l0Lm9yZy4KLSAgICByIlNub3dMZW9wYXJkIjogIm1hYy1zbm93bGVvcGFy
ZCIsCi0gICAgciJBcHBsZSBMaW9uIjogIm1hYy1saW9uIiwKLSAgICByIldpbmRvd3MiOiAid2lu
IiwKLSAgICByIkdUSyI6ICJndGsiLAotICAgIHIiUXQiOiAicXQiLAotfQotCi0KLV9wb3J0c193
aXRob3V0X2J1aWxkZXJzID0gWwotICAgICJxdC1tYWMiLAotICAgICJxdC13aW4iLAotICAgICJx
dC13azIiLAotXQotCi0KLWRlZiBidWlsZGVyX3BhdGhfZnJvbV9uYW1lKGJ1aWxkZXJfbmFtZSk6
Ci0gICAgcmV0dXJuIHJlLnN1YihyJ1tccygpLl0nLCAnXycsIGJ1aWxkZXJfbmFtZSkKLQotCi1k
ZWYgYWxsX2J1aWxkZXJfbmFtZXMoKToKLSAgICByZXR1cm4gc29ydGVkKHNldChfZXhhY3RfbWF0
Y2hlcy5rZXlzKCkpKQotCi0KLWRlZiBhbGxfcG9ydF9uYW1lcygpOgotICAgIHJldHVybiBzb3J0
ZWQoc2V0KG1hcChsYW1iZGEgeDogeFsicG9ydF9uYW1lIl0sIF9leGFjdF9tYXRjaGVzLnZhbHVl
cygpKSArIF9wb3J0c193aXRob3V0X2J1aWxkZXJzKSkKLQotCi1kZWYgcmViYXNlbGluZV9vdmVy
cmlkZV9kaXIoYnVpbGRlcl9uYW1lKToKLSAgICByZXR1cm4gX2V4YWN0X21hdGNoZXNbYnVpbGRl
cl9uYW1lXS5nZXQoInJlYmFzZWxpbmVfb3ZlcnJpZGVfZGlyIiwgTm9uZSkKLQotCi1kZWYgbW92
ZV9vdmVyd3JpdHRlbl9iYXNlbGluZXNfdG8oYnVpbGRlcl9uYW1lKToKLSAgICByZXR1cm4gX2V4
YWN0X21hdGNoZXNbYnVpbGRlcl9uYW1lXS5nZXQoIm1vdmVfb3ZlcndyaXR0ZW5fYmFzZWxpbmVz
X3RvIiwgW10pCi0KLQotZGVmIHBvcnRfbmFtZV9mb3JfYnVpbGRlcl9uYW1lKGJ1aWxkZXJfbmFt
ZSk6Ci0gICAgaWYgYnVpbGRlcl9uYW1lIGluIF9leGFjdF9tYXRjaGVzOgotICAgICAgICByZXR1
cm4gX2V4YWN0X21hdGNoZXNbYnVpbGRlcl9uYW1lXVsicG9ydF9uYW1lIl0KLQotICAgIGZvciBy
ZWdleHAsIHBvcnRfbmFtZSBpbiBfZnV6enlfbWF0Y2hlcy5pdGVtcygpOgotICAgICAgICBpZiBy
ZS5tYXRjaChyZWdleHAsIGJ1aWxkZXJfbmFtZSk6Ci0gICAgICAgICAgICByZXR1cm4gcG9ydF9u
YW1lCi0KLQotZGVmIGJ1aWxkZXJfbmFtZV9mb3JfcG9ydF9uYW1lKHRhcmdldF9wb3J0X25hbWUp
OgotICAgIGRlYnVnX2J1aWxkZXJfbmFtZSA9IE5vbmUKLSAgICBmb3IgYnVpbGRlcl9uYW1lLCBi
dWlsZGVyX2luZm8gaW4gX2V4YWN0X21hdGNoZXMuaXRlbXMoKToKLSAgICAgICAgaWYgYnVpbGRl
cl9pbmZvWydwb3J0X25hbWUnXSA9PSB0YXJnZXRfcG9ydF9uYW1lOgotICAgICAgICAgICAgaWYg
YnVpbGRlcl9pbmZvWydpc19kZWJ1ZyddOgotICAgICAgICAgICAgICAgIGRlYnVnX2J1aWxkZXJf
bmFtZSA9IGJ1aWxkZXJfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gYnVpbGRlcl9uYW1lCi0gICAgcmV0dXJuIGRlYnVnX2J1aWxkZXJfbmFtZQotCi0KLWRl
ZiBidWlsZGVyX3BhdGhfZm9yX3BvcnRfbmFtZShwb3J0X25hbWUpOgotICAgIGJ1aWxkZXJfcGF0
aF9mcm9tX25hbWUoYnVpbGRlcl9uYW1lX2Zvcl9wb3J0X25hbWUocG9ydF9uYW1lKSkKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYnVpbGRlcnNfdW5pdHRl
c3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9idWlsZGVyc191bml0dGVzdC5weQkocmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9idWlsZGVyc191bml0dGVzdC5weQkod29y
a2luZyBjb3B5KQpAQCAtMSw0MSArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotIyBtZXQ6Ci0jCi0jICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IGJ1aWxk
ZXJzCi1pbXBvcnQgdW5pdHRlc3QyIGFzIHVuaXR0ZXN0Ci0KLQotY2xhc3MgQnVpbGRlcnNUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9wYXRoX2Zyb21fbmFtZShzZWxmKToK
LSAgICAgICAgdGVzdHMgPSB7Ci0gICAgICAgICAgICAndGVzdCc6ICd0ZXN0JywKLSAgICAgICAg
ICAgICdNYWMgMTAuNiAoZGJnKSgxKSc6ICdNYWNfMTBfNl9fZGJnX18xXycsCi0gICAgICAgICAg
ICAnKC4pICc6ICdfX19fJywKLSAgICAgICAgfQotICAgICAgICBmb3IgbmFtZSwgZXhwZWN0ZWQg
aW4gdGVzdHMuaXRlbXMoKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQs
IGJ1aWxkZXJzLmJ1aWxkZXJfcGF0aF9mcm9tX25hbWUobmFtZSkpCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2NvbmZpZy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2NvbmZpZy5weQkocmV2aXNp
b24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9j
b25maWcucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQxICswLDAgQEAKLSMgQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMg
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0j
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0iIiJXcmFwcGVyIG9iamVjdHMgZm9yIFdlYktpdC1zcGVjaWZpYyB1dGlsaXR5IHJvdXRp
bmVzLiIiIgotCi0jIEZJWE1FOiBUaGlzIGZpbGUgbmVlZHMgdG8gYmUgdW5pZmllZCB3aXRoIGNv
bW1vbi9jb25maWcvcG9ydHMucHkgLgotCi1pbXBvcnQgbG9nZ2luZwotCi1mcm9tIHdlYmtpdHB5
LmNvbW1vbiBpbXBvcnQgd2Via2l0X2ZpbmRlcgotCi0KLV9sb2cgPSBsb2dnaW5nLmdldExvZ2dl
cihfX25hbWVfXykKLQotIwotIyBGSVhNRTogVGhpcyBpcyB1c2VkIHRvIHJlY29yZCBpZiB3ZSd2
ZSBhbHJlYWR5IGhpdCB0aGUgZmlsZXN5c3RlbSB0byBsb29rCi0jIGZvciBhIGRlZmF1bHQgY29u
ZmlndXJhdGlvbi4gV2UgY2FjaGUgdGhpcyB0byBzcGVlZCB1cCB0aGUgdW5pdCB0ZXN0cywKLSMg
YnV0IHRoaXMgY2FuIGJlIHJlc2V0IHdpdGggY2xlYXJfY2FjaGVkX2NvbmZpZ3VyYXRpb24oKS4g
VGhpcyBzaG91bGQgYmUKLSMgcmVwbGFjZWQgd2l0aCB1cyBjb25zaXN0ZW50bHkgdXNpbmcgTW9j
a0NvbmZpZ3MoKSBmb3IgdGVzdHMgdGhhdCBkb24ndAotIyBoaXQgdGhlIGZpbGVzeXN0ZW0gYXQg
YWxsIGFuZCBwcm92aWRlIGEgcmVsaWFibGUgdmFsdWUuCi0jCi1faGF2ZV9kZXRlcm1pbmVkX2Nv
bmZpZ3VyYXRpb24gPSBGYWxzZQotX2NvbmZpZ3VyYXRpb24gPSAiUmVsZWFzZSIKLQotCi1kZWYg
Y2xlYXJfY2FjaGVkX2NvbmZpZ3VyYXRpb24oKToKLSAgICBnbG9iYWwgX2hhdmVfZGV0ZXJtaW5l
ZF9jb25maWd1cmF0aW9uLCBfY29uZmlndXJhdGlvbgotICAgIF9oYXZlX2RldGVybWluZWRfY29u
ZmlndXJhdGlvbiA9IEZhbHNlCi0gICAgX2NvbmZpZ3VyYXRpb24gPSAiUmVsZWFzZSIKLQotCi1j
bGFzcyBDb25maWcob2JqZWN0KToKLSAgICBfRkxBR1NfRlJPTV9DT05GSUdVUkFUSU9OUyA9IHsK
LSAgICAgICAgIkRlYnVnIjogIi0tZGVidWciLAotICAgICAgICAiUmVsZWFzZSI6ICItLXJlbGVh
c2UiLAotICAgIH0KLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGVjdXRpdmUsIGZpbGVzeXN0
ZW0sIHBvcnRfaW1wbGVtZW50YXRpb249Tm9uZSk6Ci0gICAgICAgIHNlbGYuX2V4ZWN1dGl2ZSA9
IGV4ZWN1dGl2ZQotICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gZmlsZXN5c3RlbQotICAgICAg
ICBzZWxmLl93ZWJraXRfZmluZGVyID0gd2Via2l0X2ZpbmRlci5XZWJLaXRGaW5kZXIoc2VsZi5f
ZmlsZXN5c3RlbSkKLSAgICAgICAgc2VsZi5fZGVmYXVsdF9jb25maWd1cmF0aW9uID0gTm9uZQot
ICAgICAgICBzZWxmLl9idWlsZF9kaXJlY3RvcmllcyA9IHt9Ci0gICAgICAgIHNlbGYuX3BvcnRf
aW1wbGVtZW50YXRpb24gPSBwb3J0X2ltcGxlbWVudGF0aW9uCi0KLSAgICBkZWYgYnVpbGRfZGly
ZWN0b3J5KHNlbGYsIGNvbmZpZ3VyYXRpb24pOgotICAgICAgICAiIiJSZXR1cm5zIHRoZSBwYXRo
IHRvIHRoZSBidWlsZCBkaXJlY3RvcnkgZm9yIHRoZSBjb25maWd1cmF0aW9uLiIiIgotICAgICAg
ICBpZiBjb25maWd1cmF0aW9uOgotICAgICAgICAgICAgZmxhZ3MgPSBbIi0tY29uZmlndXJhdGlv
biIsIHNlbGYuZmxhZ19mb3JfY29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKV0KLSAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gPSAiIgotICAgICAgICAgICAgZmxhZ3Mg
PSBbXQotCi0gICAgICAgIGlmIHNlbGYuX3BvcnRfaW1wbGVtZW50YXRpb246Ci0gICAgICAgICAg
ICBmbGFncy5hcHBlbmQoJy0tJyArIHNlbGYuX3BvcnRfaW1wbGVtZW50YXRpb24pCi0KLSAgICAg
ICAgaWYgbm90IHNlbGYuX2J1aWxkX2RpcmVjdG9yaWVzLmdldChjb25maWd1cmF0aW9uKToKLSAg
ICAgICAgICAgIGFyZ3MgPSBbInBlcmwiLCBzZWxmLl93ZWJraXRfZmluZGVyLnBhdGhfdG9fc2Ny
aXB0KCJ3ZWJraXQtYnVpbGQtZGlyZWN0b3J5IildICsgZmxhZ3MKLSAgICAgICAgICAgIG91dHB1
dCA9IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChhcmdzLCBjd2Q9c2VsZi5fd2Via2l0X2Zp
bmRlci53ZWJraXRfYmFzZSgpLCByZXR1cm5fc3RkZXJyPUZhbHNlKS5yc3RyaXAoKQotICAgICAg
ICAgICAgcGFydHMgPSBvdXRwdXQuc3BsaXQoIlxuIikKLSAgICAgICAgICAgIHNlbGYuX2J1aWxk
X2RpcmVjdG9yaWVzW2NvbmZpZ3VyYXRpb25dID0gcGFydHNbMF0KLQotICAgICAgICAgICAgaWYg
bGVuKHBhcnRzKSA9PSAyOgotICAgICAgICAgICAgICAgIGRlZmF1bHRfY29uZmlndXJhdGlvbiA9
IHBhcnRzWzFdW2xlbihwYXJ0c1swXSk6XQotICAgICAgICAgICAgICAgIGlmIGRlZmF1bHRfY29u
ZmlndXJhdGlvbi5zdGFydHN3aXRoKCIvIik6Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRf
Y29uZmlndXJhdGlvbiA9IGRlZmF1bHRfY29uZmlndXJhdGlvblsxOl0KLSAgICAgICAgICAgICAg
ICBzZWxmLl9idWlsZF9kaXJlY3Rvcmllc1tkZWZhdWx0X2NvbmZpZ3VyYXRpb25dID0gcGFydHNb
MV0KLQotICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfZGlyZWN0b3JpZXNbY29uZmlndXJhdGlv
bl0KLQotICAgIGRlZiBmbGFnX2Zvcl9jb25maWd1cmF0aW9uKHNlbGYsIGNvbmZpZ3VyYXRpb24p
OgotICAgICAgICByZXR1cm4gc2VsZi5fRkxBR1NfRlJPTV9DT05GSUdVUkFUSU9OU1tjb25maWd1
cmF0aW9uXQotCi0gICAgZGVmIGRlZmF1bHRfY29uZmlndXJhdGlvbihzZWxmKToKLSAgICAgICAg
IiIiUmV0dXJucyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciB0aGUgdXNlci4KLQotICAg
ICAgICBSZXR1cm5zIHRoZSB2YWx1ZSBzZXQgYnkgJ3NldC13ZWJraXQtY29uZmlndXJhdGlvbics
IG9yICJSZWxlYXNlIgotICAgICAgICBpZiB0aGF0IGhhcyBub3QgYmVlbiBzZXQuIFRoaXMgbWly
cm9ycyB0aGUgbG9naWMgaW4gd2Via2l0ZGlycy5wbS4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYu
X2RlZmF1bHRfY29uZmlndXJhdGlvbjoKLSAgICAgICAgICAgIHNlbGYuX2RlZmF1bHRfY29uZmln
dXJhdGlvbiA9IHNlbGYuX2RldGVybWluZV9jb25maWd1cmF0aW9uKCkKLSAgICAgICAgaWYgbm90
IHNlbGYuX2RlZmF1bHRfY29uZmlndXJhdGlvbjoKLSAgICAgICAgICAgIHNlbGYuX2RlZmF1bHRf
Y29uZmlndXJhdGlvbiA9ICdSZWxlYXNlJwotICAgICAgICBpZiBzZWxmLl9kZWZhdWx0X2NvbmZp
Z3VyYXRpb24gbm90IGluIHNlbGYuX0ZMQUdTX0ZST01fQ09ORklHVVJBVElPTlM6Ci0gICAgICAg
ICAgICBfbG9nLndhcm4oIkNvbmZpZ3VyYXRpb24gXCIlc1wiIGlzIG5vdCBhIHJlY29nbml6ZWQg
dmFsdWUuXG4iICUgc2VsZi5fZGVmYXVsdF9jb25maWd1cmF0aW9uKQotICAgICAgICAgICAgX2xv
Zy53YXJuKCJTY3JpcHRzIG1heSBmYWlsLiAgU2VlICdzZXQtd2Via2l0LWNvbmZpZ3VyYXRpb24g
LS1oZWxwJy4iKQotICAgICAgICByZXR1cm4gc2VsZi5fZGVmYXVsdF9jb25maWd1cmF0aW9uCi0K
LSAgICBkZWYgX2RldGVybWluZV9jb25maWd1cmF0aW9uKHNlbGYpOgotICAgICAgICAjIFRoaXMg
bWlycm9ycyB0aGUgbG9naWMgaW4gd2Via2l0ZGlycy5wbTpkZXRlcm1pbmVDb25maWd1cmF0aW9u
KCkuCi0gICAgICAgICMKLSAgICAgICAgIyBGSVhNRTogU2VlIHRoZSBjb21tZW50IGF0IHRoZSB0
b3Agb2YgdGhlIGZpbGUgcmVnYXJkaW5nIHVuaXQgdGVzdHMKLSAgICAgICAgIyBhbmQgb3VyIHVz
ZSBvZiBnbG9iYWwgbXV0YWJsZSBzdGF0aWMgdmFyaWFibGVzLgotICAgICAgICAjIEZJWE1FOiBX
ZSBzaG91bGQganVzdCBAbWVtb2l6ZSB0aGlzIG1ldGhvZCBhbmQgdGhlbiB0aGlzIHdpbGwgb25s
eQotICAgICAgICAjIGJlIHJlYWQgb25jZSBwZXIgb2JqZWN0IGxpZmV0aW1lICh3aGljaCBzaG91
bGQgYmUgc3VmZmljaWVudGx5IGZhc3QpLgotICAgICAgICBnbG9iYWwgX2hhdmVfZGV0ZXJtaW5l
ZF9jb25maWd1cmF0aW9uLCBfY29uZmlndXJhdGlvbgotICAgICAgICBpZiBub3QgX2hhdmVfZGV0
ZXJtaW5lZF9jb25maWd1cmF0aW9uOgotICAgICAgICAgICAgY29udGVudHMgPSBzZWxmLl9yZWFk
X2NvbmZpZ3VyYXRpb24oKQotICAgICAgICAgICAgaWYgbm90IGNvbnRlbnRzOgotICAgICAgICAg
ICAgICAgIGNvbnRlbnRzID0gIlJlbGVhc2UiCi0gICAgICAgICAgICBpZiBjb250ZW50cyA9PSAi
RGVwbG95bWVudCI6Ci0gICAgICAgICAgICAgICAgY29udGVudHMgPSAiUmVsZWFzZSIKLSAgICAg
ICAgICAgIGlmIGNvbnRlbnRzID09ICJEZXZlbG9wbWVudCI6Ci0gICAgICAgICAgICAgICAgY29u
dGVudHMgPSAiRGVidWciCi0gICAgICAgICAgICBfY29uZmlndXJhdGlvbiA9IGNvbnRlbnRzCi0g
ICAgICAgICAgICBfaGF2ZV9kZXRlcm1pbmVkX2NvbmZpZ3VyYXRpb24gPSBUcnVlCi0gICAgICAg
IHJldHVybiBfY29uZmlndXJhdGlvbgotCi0gICAgZGVmIF9yZWFkX2NvbmZpZ3VyYXRpb24oc2Vs
Zik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25fcGF0aCA9IHNlbGYu
X2ZpbGVzeXN0ZW0uam9pbihzZWxmLmJ1aWxkX2RpcmVjdG9yeShOb25lKSwgIkNvbmZpZ3VyYXRp
b24iKQotICAgICAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKGNvbmZpZ3Vy
YXRpb25fcGF0aCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgZXhjZXB0
OgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5
c3RlbS5yZWFkX3RleHRfZmlsZShjb25maWd1cmF0aW9uX3BhdGgpLnJzdHJpcCgpCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2NvbmZpZ19zdGFuZGFsb25l
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvY29uZmlnX3N0YW5kYWxvbmUucHkJKHJldmlzaW9uIDE0ODQ5NykKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY29uZmlnX3N0YW5kYWxvbmUucHkJKHdvcmtp
bmcgY29weSkKQEAgLTEsNjkgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSMgbWV0OgotIwotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIkZJWE1FOiBUaGlz
IHNjcmlwdCBpcyB1c2VkIGJ5Ci1jb25maWdfdW5pdHRlc3QudGVzdF9kZWZhdWx0X2NvbmZpZ3Vy
YXRpb25fX3N0YW5kYWxvbmUoKSB0byByZWFkIHRoZQotZGVmYXVsdCBjb25maWd1cmF0aW9uIHRv
IHdvcmsgYXJvdW5kIGFueSBwb3NzaWJsZSBjYWNoaW5nIC8gcmVzZXQgYnVncy4gU2VlCi1odHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zz9pZD00OTM2MCBmb3IgdGhlIG1vdGl2YXRpb24u
IFdlIGNhbiByZW1vdmUKLXRoaXMgdGVzdCB3aGVuIHdlIHJlbW92ZSB0aGUgZ2xvYmFsIGNvbmZp
Z3VyYXRpb24gY2FjaGUgaW4gY29uZmlnLnB5LiIiIgotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMK
LQotCi0jIEVuc3VyZSB0aGF0IHdlYmtpdHB5IGlzIGluIFBZVEhPTlBBVEguCi10aGlzX2RpciA9
IG9zLnBhdGguYWJzcGF0aChzeXMucGF0aFswXSkKLXVwID0gb3MucGF0aC5kaXJuYW1lCi1zY3Jp
cHRfZGlyID0gdXAodXAodXAodGhpc19kaXIpKSkKLWlmIHNjcmlwdF9kaXIgbm90IGluIHN5cy5w
YXRoOgotICAgIHN5cy5wYXRoLmFwcGVuZChzY3JpcHRfZGlyKQotCi1mcm9tIHdlYmtpdHB5LmNv
bW1vbi5zeXN0ZW0gaW1wb3J0IGV4ZWN1dGl2ZQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
IGltcG9ydCBleGVjdXRpdmVfbW9jawotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9y
dCBmaWxlc3lzdGVtCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IGZpbGVzeXN0
ZW1fbW9jawotCi1pbXBvcnQgY29uZmlnCi0KLQotZGVmIG1haW4oYXJndj1Ob25lKToKLSAgICBp
ZiBub3QgYXJndjoKLSAgICAgICAgYXJndiA9IHN5cy5hcmd2Ci0KLSAgICBpZiBsZW4oYXJndikg
PT0gMyBhbmQgYXJndlsxXSA9PSAnLS1tb2NrJzoKLSAgICAgICAgZSA9IGV4ZWN1dGl2ZV9tb2Nr
Lk1vY2tFeGVjdXRpdmUyKG91dHB1dD0nZm9vXG5mb28vJXMnICUgYXJndlsyXSkKLSAgICAgICAg
ZnMgPSBmaWxlc3lzdGVtX21vY2suTW9ja0ZpbGVTeXN0ZW0oeydmb28vQ29uZmlndXJhdGlvbic6
IGFyZ3ZbMl19KQotICAgIGVsc2U6Ci0gICAgICAgIGUgPSBleGVjdXRpdmUuRXhlY3V0aXZlKCkK
LSAgICAgICAgZnMgPSBmaWxlc3lzdGVtLkZpbGVTeXN0ZW0oKQotCi0gICAgYyA9IGNvbmZpZy5D
b25maWcoZSwgZnMpCi0gICAgcHJpbnQgYy5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKQotCi1pZiBf
X25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jb25maWdfdW5pdHRlc3QucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jb25maWdfdW5pdHRl
c3QucHkJKHJldmlzaW9uIDE0ODQ5NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvY29uZmlnX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1OCAr
MCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1
dGlvbi4KLSMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgdW5p
dHRlc3QyIGFzIHVuaXR0ZXN0Ci0KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRp
dmUgaW1wb3J0IEV4ZWN1dGl2ZSwgU2NyaXB0RXJyb3IKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5leGVjdXRpdmVfbW9jayBpbXBvcnQgTW9ja0V4ZWN1dGl2ZTIKLWZyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbS5maWxlc3lzdGVtIGltcG9ydCBGaWxlU3lzdGVtCi1mcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbV9tb2NrIGltcG9ydCBNb2NrRmlsZVN5c3RlbQotZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1
cmUKLWZyb20gd2Via2l0cHkuY29tbW9uLndlYmtpdF9maW5kZXIgaW1wb3J0IFdlYktpdEZpbmRl
cgotCi1pbXBvcnQgY29uZmlnCi0KLQotY2xhc3MgQ29uZmlnVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6Ci0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBjb25maWcuY2xlYXJfY2FjaGVkX2Nv
bmZpZ3VyYXRpb24oKQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBjb25maWcu
Y2xlYXJfY2FjaGVkX2NvbmZpZ3VyYXRpb24oKQotCi0gICAgZGVmIG1ha2VfY29uZmlnKHNlbGYs
IG91dHB1dD0nJywgZmlsZXM9Tm9uZSwgZXhpdF9jb2RlPTAsIGV4Y2VwdGlvbj1Ob25lLCBydW5f
Y29tbWFuZF9mbj1Ob25lLCBzdGRlcnI9JycsIHBvcnRfaW1wbGVtZW50YXRpb249Tm9uZSk6Ci0g
ICAgICAgIGUgPSBNb2NrRXhlY3V0aXZlMihvdXRwdXQ9b3V0cHV0LCBleGl0X2NvZGU9ZXhpdF9j
b2RlLCBleGNlcHRpb249ZXhjZXB0aW9uLCBydW5fY29tbWFuZF9mbj1ydW5fY29tbWFuZF9mbiwg
c3RkZXJyPXN0ZGVycikKLSAgICAgICAgZnMgPSBNb2NrRmlsZVN5c3RlbShmaWxlcykKLSAgICAg
ICAgcmV0dXJuIGNvbmZpZy5Db25maWcoZSwgZnMsIHBvcnRfaW1wbGVtZW50YXRpb249cG9ydF9p
bXBsZW1lbnRhdGlvbikKLQotICAgIGRlZiBhc3NlcnRfY29uZmlndXJhdGlvbihzZWxmLCBjb250
ZW50cywgZXhwZWN0ZWQpOgotICAgICAgICAjIFRoaXMgdGVzdHMgdGhhdCBhIGNvbmZpZ3VyYXRp
b24gZmlsZSBjb250YWluaW5nCi0gICAgICAgICMgX2NvbnRlbnRzXyBlbmRzIHVwIGJlaW5nIGlu
dGVycHJldGVkIGFzIF9leHBlY3RlZF8uCi0gICAgICAgIG91dHB1dCA9ICdmb29cbmZvby8lcycg
JSBjb250ZW50cwotICAgICAgICBjID0gc2VsZi5tYWtlX2NvbmZpZyhvdXRwdXQsIHsnZm9vL0Nv
bmZpZ3VyYXRpb24nOiBjb250ZW50c30pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5kZWZh
dWx0X2NvbmZpZ3VyYXRpb24oKSwgZXhwZWN0ZWQpCi0KLSAgICBkZWYgdGVzdF9idWlsZF9kaXJl
Y3Rvcnkoc2VsZik6Ci0gICAgICAgICMgLS10b3AtbGV2ZWwKLSAgICAgICAgZGVmIG1vY2tfd2Vi
a2l0X2J1aWxkX2RpcmVjdG9yeShhcmdfbGlzdCk6Ci0gICAgICAgICAgICBpZiBhcmdfbGlzdCA9
PSBbJy0tdG9wLWxldmVsJ106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICcvV2ViS2l0QnVpbGQv
JwotICAgICAgICAgICAgZWxpZiBhcmdfbGlzdCA9PSBbJy0tY29uZmlndXJhdGlvbicsICctLWRl
YnVnJ106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICcvV2ViS2l0QnVpbGQvRGVidWcnCi0gICAg
ICAgICAgICBlbGlmIGFyZ19saXN0ID09IFsnLS1jb25maWd1cmF0aW9uJywgJy0tcmVsZWFzZSdd
OgotICAgICAgICAgICAgICAgIHJldHVybiAnL1dlYktpdEJ1aWxkL1JlbGVhc2UnCi0gICAgICAg
ICAgICBlbGlmIGFyZ19saXN0ID09IFtdOgotICAgICAgICAgICAgICAgIHJldHVybiAnL1dlYktp
dEJ1aWxkL1xuL1dlYktpdEJ1aWxkLy9EZWJ1Z1xuJwotICAgICAgICAgICAgcmV0dXJuICdFcnJv
cicKLQotICAgICAgICBkZWYgbW9ja19ydW5fY29tbWFuZChhcmdfbGlzdCk6Ci0gICAgICAgICAg
ICBpZiAnd2Via2l0LWJ1aWxkLWRpcmVjdG9yeScgaW4gYXJnX2xpc3RbMV06Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIG1vY2tfd2Via2l0X2J1aWxkX2RpcmVjdG9yeShhcmdfbGlzdFsyOl0pCi0g
ICAgICAgICAgICByZXR1cm4gJ0Vycm9yJwotCi0gICAgICAgIGMgPSBzZWxmLm1ha2VfY29uZmln
KHJ1bl9jb21tYW5kX2ZuPW1vY2tfcnVuX2NvbW1hbmQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoYy5idWlsZF9kaXJlY3RvcnkoTm9uZSksICcvV2ViS2l0QnVpbGQvJykKLQotICAgICAgICAj
IFRlc3QgYWdhaW4gdG8gY2hlY2sgY2FjaGluZwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMu
YnVpbGRfZGlyZWN0b3J5KE5vbmUpLCAnL1dlYktpdEJ1aWxkLycpCi0KLSAgICAgICAgIyBUZXN0
IG90aGVyIHZhbHVlcwotICAgICAgICBzZWxmLmFzc2VydFRydWUoYy5idWlsZF9kaXJlY3Rvcnko
J1JlbGVhc2UnKS5lbmRzd2l0aCgnL1JlbGVhc2UnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KGMuYnVpbGRfZGlyZWN0b3J5KCdEZWJ1ZycpLmVuZHN3aXRoKCcvRGVidWcnKSkKLSAgICAgICAg
c2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGMuYnVpbGRfZGlyZWN0b3J5LCAnVW5rbm93bicp
Ci0KLSAgICAgICAgIyBUZXN0IHRoYXQgc3RkZXJyIG91dHB1dCBmcm9tIHdlYmtpdC1idWlsZC1k
aXJlY3Rvcnkgd29uJ3QgbWFuZ2xlIHRoZSBidWlsZCBkaXIKLSAgICAgICAgYyA9IHNlbGYubWFr
ZV9jb25maWcob3V0cHV0PScvV2ViS2l0QnVpbGQvJywgc3RkZXJyPSJtb2NrIHN0ZGVyciBvdXRw
dXQgZnJvbSB3ZWJraXQtYnVpbGQtZGlyZWN0b3J5IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChjLmJ1aWxkX2RpcmVjdG9yeShOb25lKSwgJy9XZWJLaXRCdWlsZC8nKQotCi0gICAgZGVmIHRl
c3RfYnVpbGRfZGlyZWN0b3J5X3Bhc3Nlc19wb3J0X2ltcGxlbWVudGF0aW9uKHNlbGYpOgotICAg
ICAgICBkZWYgbW9ja19ydW5fY29tbWFuZChhcmdfbGlzdCk6Ci0gICAgICAgICAgICBzZWxmLmFz
c2V0RXF1YWxzKCctLWd0aycgaW4gYXJnX2xpc3QpCi0gICAgICAgICAgICByZXR1cm4gJy90bXAn
Ci0KLSAgICAgICAgYyA9IHNlbGYubWFrZV9jb25maWcocnVuX2NvbW1hbmRfZm49bW9ja19ydW5f
Y29tbWFuZCwgcG9ydF9pbXBsZW1lbnRhdGlvbj0nZ3RrJykKLQotICAgIGRlZiB0ZXN0X2RlZmF1
bHRfY29uZmlndXJhdGlvbl9fcmVsZWFzZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfY29u
ZmlndXJhdGlvbignUmVsZWFzZScsICdSZWxlYXNlJykKLQotICAgIGRlZiB0ZXN0X2RlZmF1bHRf
Y29uZmlndXJhdGlvbl9fZGVidWcoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2NvbmZpZ3Vy
YXRpb24oJ0RlYnVnJywgJ0RlYnVnJykKLQotICAgIGRlZiB0ZXN0X2RlZmF1bHRfY29uZmlndXJh
dGlvbl9fZGVwbG95bWVudChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfY29uZmlndXJhdGlv
bignRGVwbG95bWVudCcsICdSZWxlYXNlJykKLQotICAgIGRlZiB0ZXN0X2RlZmF1bHRfY29uZmln
dXJhdGlvbl9fZGV2ZWxvcG1lbnQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2NvbmZpZ3Vy
YXRpb24oJ0RldmVsb3BtZW50JywgJ0RlYnVnJykKLQotICAgIGRlZiB0ZXN0X2RlZmF1bHRfY29u
ZmlndXJhdGlvbl9fbm90Zm91bmQoc2VsZik6Ci0gICAgICAgICMgVGhpcyB0ZXN0cyB3aGF0IGhh
cHBlbnMgaWYgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlIGRvZXNuJ3QgZXhpc3QuCi0g
ICAgICAgIGMgPSBzZWxmLm1ha2VfY29uZmlnKG91dHB1dD0nZm9vXG5mb28vUmVsZWFzZScsIGZp
bGVzPXsnZm9vL0NvbmZpZ3VyYXRpb24nOiBOb25lfSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChjLmRlZmF1bHRfY29uZmlndXJhdGlvbigpLCAiUmVsZWFzZSIpCi0KLSAgICBkZWYgdGVzdF9k
ZWZhdWx0X2NvbmZpZ3VyYXRpb25fX3Vua25vd24oc2VsZik6Ci0gICAgICAgICMgSWdub3JlIHRo
ZSB3YXJuaW5nIGFib3V0IGFuIHVua25vd24gY29uZmlndXJhdGlvbiB2YWx1ZS4KLSAgICAgICAg
b2MgPSBPdXRwdXRDYXB0dXJlKCkKLSAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQotICAgICAg
ICBzZWxmLmFzc2VydF9jb25maWd1cmF0aW9uKCdVbmtub3duJywgJ1Vua25vd24nKQotICAgICAg
ICBvYy5yZXN0b3JlX291dHB1dCgpCi0KLSAgICBkZWYgdGVzdF9kZWZhdWx0X2NvbmZpZ3VyYXRp
b25fX3N0YW5kYWxvbmUoc2VsZik6Ci0gICAgICAgICMgRklYTUU6IFRoaXMgdGVzdCBydW5zIGEg
c3RhbmRhbG9uZSBweXRob24gc2NyaXB0IHRvIHRlc3QKLSAgICAgICAgIyByZWFkaW5nIHRoZSBk
ZWZhdWx0IGNvbmZpZ3VyYXRpb24gdG8gd29yayBhcm91bmQgYW55IHBvc3NpYmxlCi0gICAgICAg
ICMgY2FjaGluZyAvIHJlc2V0IGJ1Z3MuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDkzNjAKLSAgICAgICAgIyBmb3IgdGhlIG1vdGl2YXRpb24uIFdlIGNhbiBy
ZW1vdmUgdGhpcyB0ZXN0IHdoZW4gd2UgcmVtb3ZlIHRoZQotICAgICAgICAjIGdsb2JhbCBjb25m
aWd1cmF0aW9uIGNhY2hlIGluIGNvbmZpZy5weS4KLSAgICAgICAgZSA9IEV4ZWN1dGl2ZSgpCi0g
ICAgICAgIGZzID0gRmlsZVN5c3RlbSgpCi0gICAgICAgIGMgPSBjb25maWcuQ29uZmlnKGUsIGZz
KQotICAgICAgICBzY3JpcHQgPSBXZWJLaXRGaW5kZXIoZnMpLnBhdGhfZnJvbV93ZWJraXRfYmFz
ZSgnVG9vbHMnLCAnU2NyaXB0cycsICd3ZWJraXRweScsICdsYXlvdXRfdGVzdHMnLCAncG9ydCcs
ICdjb25maWdfc3RhbmRhbG9uZS5weScpCi0KLSAgICAgICAgIyBOb3RlOiBkb24ndCB1c2UgJ1Jl
bGVhc2UnIGhlcmUsIHNpbmNlIHRoYXQncyB0aGUgbm9ybWFsIGRlZmF1bHQuCi0gICAgICAgIGV4
cGVjdGVkID0gJ0RlYnVnJwotCi0gICAgICAgIGFyZ3MgPSBbc3lzLmV4ZWN1dGFibGUsIHNjcmlw
dCwgJy0tbW9jaycsIGV4cGVjdGVkXQotICAgICAgICBhY3R1YWwgPSBlLnJ1bl9jb21tYW5kKGFy
Z3MpLnJzdHJpcCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkK
LQotICAgIGRlZiB0ZXN0X2RlZmF1bHRfY29uZmlndXJhdGlvbl9fbm9fcGVybChzZWxmKToKLSAg
ICAgICAgIyBXZSBuZWVkIHBlcmwgdG8gcnVuIHdlYmtpdC1idWlsZC1kaXJlY3RvcnkgdG8gZmlu
ZCBvdXQgd2hlcmUgdGhlCi0gICAgICAgICMgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGUgaXMu
IFNlZSB3aGF0IGhhcHBlbnMgaWYgcGVybCBpc24ndAotICAgICAgICAjIGluc3RhbGxlZC4gKFdl
IHNob3VsZCBnZXQgdGhlIGRlZmF1bHQgdmFsdWUsICdSZWxlYXNlJykuCi0gICAgICAgIGMgPSBz
ZWxmLm1ha2VfY29uZmlnKGV4Y2VwdGlvbj1PU0Vycm9yKQotICAgICAgICBhY3R1YWwgPSBjLmRl
ZmF1bHRfY29uZmlndXJhdGlvbigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCAn
UmVsZWFzZScpCi0KLSAgICBkZWYgdGVzdF9kZWZhdWx0X2NvbmZpZ3VyYXRpb25fX3NjcmlwdGVy
cm9yKHNlbGYpOgotICAgICAgICAjIFdlIHJ1biB3ZWJraXQtYnVpbGQtZGlyZWN0b3J5IHRvIGZp
bmQgb3V0IHdoZXJlIHRoZSBkZWZhdWx0Ci0gICAgICAgICMgY29uZmlndXJhdGlvbiBmaWxlIGlz
LiBTZWUgd2hhdCBoYXBwZW5zIGlmIHRoYXQgc2NyaXB0IGZhaWxzLgotICAgICAgICAjIChXZSBz
aG91bGQgZ2V0IHRoZSBkZWZhdWx0IHZhbHVlLCAnUmVsZWFzZScpLgotICAgICAgICBjID0gc2Vs
Zi5tYWtlX2NvbmZpZyhleGNlcHRpb249U2NyaXB0RXJyb3IoKSkKLSAgICAgICAgYWN0dWFsID0g
Yy5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVh
bCwgJ1JlbGVhc2UnKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9kcml2ZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9kcml2ZXIucHkJKHJldmlzaW9uIDE0ODQ5NykKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0xLDU1OSArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0j
Ci0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBHb29nbGUgbmFtZSBub3IgdGhl
IG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBiYXNlNjQKLWltcG9ydCBjb3B5Ci1p
bXBvcnQgbG9nZ2luZwotaW1wb3J0IHJlCi1pbXBvcnQgc2hsZXgKLWltcG9ydCBzeXMKLWltcG9y
dCB0aW1lCi1pbXBvcnQgb3MKLQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBw
YXRoCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ucHJvZmlsZXIgaW1wb3J0IFByb2ZpbGVy
RmFjdG9yeQotCi0KLV9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKLQotCi1jbGFz
cyBEcml2ZXJJbnB1dChvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X25hbWUs
IHRpbWVvdXQsIGltYWdlX2hhc2gsIHNob3VsZF9ydW5fcGl4ZWxfdGVzdCwgYXJncz1Ob25lKToK
LSAgICAgICAgc2VsZi50ZXN0X25hbWUgPSB0ZXN0X25hbWUKLSAgICAgICAgc2VsZi50aW1lb3V0
ID0gdGltZW91dCAgIyBpbiBtcwotICAgICAgICBzZWxmLmltYWdlX2hhc2ggPSBpbWFnZV9oYXNo
Ci0gICAgICAgIHNlbGYuc2hvdWxkX3J1bl9waXhlbF90ZXN0ID0gc2hvdWxkX3J1bl9waXhlbF90
ZXN0Ci0gICAgICAgIHNlbGYuYXJncyA9IGFyZ3Mgb3IgW10KLQotCi1jbGFzcyBEcml2ZXJPdXRw
dXQob2JqZWN0KToKLSAgICAiIiJHcm91cHMgaW5mb3JtYXRpb24gYWJvdXQgYSBvdXRwdXQgZnJv
bSBkcml2ZXIgZm9yIGVhc3kgcGFzc2luZwotICAgIGFuZCBwb3N0LXByb2Nlc3Npbmcgb2YgZGF0
YS4iIiIKLQotICAgIHN0cmlwX3BhdHRlcm5zID0gW10KLSAgICBzdHJpcF9wYXR0ZXJucy5hcHBl
bmQoKHJlLmNvbXBpbGUoJ2F0IFwoLT9bMC05XSssLT9bMC05XStcKSAqJyksICcnKSkKLSAgICBz
dHJpcF9wYXR0ZXJucy5hcHBlbmQoKHJlLmNvbXBpbGUoJ3NpemUgLT9bMC05XSt4LT9bMC05XSsg
KicpLCAnJykpCi0gICAgc3RyaXBfcGF0dGVybnMuYXBwZW5kKChyZS5jb21waWxlKCd0ZXh0IHJ1
biB3aWR0aCAtP1swLTldKzogJyksICcnKSkKLSAgICBzdHJpcF9wYXR0ZXJucy5hcHBlbmQoKHJl
LmNvbXBpbGUoJ3RleHQgcnVuIHdpZHRoIC0/WzAtOV0rIFthLXpBLVogXSs6ICcpLCAnJykpCi0g
ICAgc3RyaXBfcGF0dGVybnMuYXBwZW5kKChyZS5jb21waWxlKCdSZW5kZXJCdXR0b24ge0JVVFRP
Tn0gLionKSwgJ1JlbmRlckJ1dHRvbiB7QlVUVE9OfScpKQotICAgIHN0cmlwX3BhdHRlcm5zLmFw
cGVuZCgocmUuY29tcGlsZSgnUmVuZGVySW1hZ2Uge0lOUFVUfSAuKicpLCAnUmVuZGVySW1hZ2Ug
e0lOUFVUfScpKQotICAgIHN0cmlwX3BhdHRlcm5zLmFwcGVuZCgocmUuY29tcGlsZSgnUmVuZGVy
QmxvY2sge0lOUFVUfSAuKicpLCAnUmVuZGVyQmxvY2sge0lOUFVUfScpKQotICAgIHN0cmlwX3Bh
dHRlcm5zLmFwcGVuZCgocmUuY29tcGlsZSgnUmVuZGVyVGV4dENvbnRyb2wge0lOUFVUfSAuKicp
LCAnUmVuZGVyVGV4dENvbnRyb2wge0lOUFVUfScpKQotICAgIHN0cmlwX3BhdHRlcm5zLmFwcGVu
ZCgocmUuY29tcGlsZSgnXChbMC05XStweCcpLCAncHgnKSkKLSAgICBzdHJpcF9wYXR0ZXJucy5h
cHBlbmQoKHJlLmNvbXBpbGUoJyAqIiAqXG4gKyIgKicpLCAnICcpKQotICAgIHN0cmlwX3BhdHRl
cm5zLmFwcGVuZCgocmUuY29tcGlsZSgnIiArJCcpLCAnIicpKQotICAgIHN0cmlwX3BhdHRlcm5z
LmFwcGVuZCgocmUuY29tcGlsZSgnLSAnKSwgJy0nKSkKLSAgICBzdHJpcF9wYXR0ZXJucy5hcHBl
bmQoKHJlLmNvbXBpbGUoJ1xuKCAqKSJccysnKSwgJ1xuXGc8MT4iJykpCi0gICAgc3RyaXBfcGF0
dGVybnMuYXBwZW5kKChyZS5jb21waWxlKCdccysiXG4nKSwgJyJcbicpKQotICAgIHN0cmlwX3Bh
dHRlcm5zLmFwcGVuZCgocmUuY29tcGlsZSgnc2Nyb2xsV2lkdGggWzAtOV0rJyksICdzY3JvbGxX
aWR0aCcpKQotICAgIHN0cmlwX3BhdHRlcm5zLmFwcGVuZCgocmUuY29tcGlsZSgnc2Nyb2xsSGVp
Z2h0IFswLTldKycpLCAnc2Nyb2xsSGVpZ2h0JykpCi0gICAgc3RyaXBfcGF0dGVybnMuYXBwZW5k
KChyZS5jb21waWxlKCdzY3JvbGxYIFswLTldKycpLCAnc2Nyb2xsWCcpKQotICAgIHN0cmlwX3Bh
dHRlcm5zLmFwcGVuZCgocmUuY29tcGlsZSgnc2Nyb2xsWSBbMC05XSsnKSwgJ3Njcm9sbFknKSkK
LSAgICBzdHJpcF9wYXR0ZXJucy5hcHBlbmQoKHJlLmNvbXBpbGUoJ3Njcm9sbGVkIHRvIFswLTld
KyxbMC05XSsnKSwgJ3Njcm9sbGVkJykpCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgdGV4dCwg
aW1hZ2UsIGltYWdlX2hhc2gsIGF1ZGlvLCBjcmFzaD1GYWxzZSwKLSAgICAgICAgICAgIHRlc3Rf
dGltZT0wLCBtZWFzdXJlbWVudHM9Tm9uZSwgdGltZW91dD1GYWxzZSwgZXJyb3I9JycsIGNyYXNo
ZWRfcHJvY2Vzc19uYW1lPSc/PycsCi0gICAgICAgICAgICBjcmFzaGVkX3BpZD1Ob25lLCBjcmFz
aF9sb2c9Tm9uZSwgcGlkPU5vbmUpOgotICAgICAgICAjIEZJWE1FOiBBcmdzIGNvdWxkIGJlIHJl
bmFtZWQgdG8gYmV0dGVyIGNsYXJpZnkgd2hhdCB0aGV5IGRvLgotICAgICAgICBzZWxmLnRleHQg
PSB0ZXh0Ci0gICAgICAgIHNlbGYuaW1hZ2UgPSBpbWFnZSAgIyBNYXkgYmUgZW1wdHktc3RyaW5n
IGlmIHRoZSB0ZXN0IGNyYXNoZXMuCi0gICAgICAgIHNlbGYuaW1hZ2VfaGFzaCA9IGltYWdlX2hh
c2gKLSAgICAgICAgc2VsZi5pbWFnZV9kaWZmID0gTm9uZSAgIyBpbWFnZV9kaWZmIGdldHMgZmls
bGVkIGluIGFmdGVyIGNvbnN0cnVjdGlvbi4KLSAgICAgICAgc2VsZi5hdWRpbyA9IGF1ZGlvICAj
IEJpbmFyeSBmb3JtYXQgaXMgcG9ydC1kZXBlbmRlbnQuCi0gICAgICAgIHNlbGYuY3Jhc2ggPSBj
cmFzaAotICAgICAgICBzZWxmLmNyYXNoZWRfcHJvY2Vzc19uYW1lID0gY3Jhc2hlZF9wcm9jZXNz
X25hbWUKLSAgICAgICAgc2VsZi5jcmFzaGVkX3BpZCA9IGNyYXNoZWRfcGlkCi0gICAgICAgIHNl
bGYuY3Jhc2hfbG9nID0gY3Jhc2hfbG9nCi0gICAgICAgIHNlbGYudGVzdF90aW1lID0gdGVzdF90
aW1lCi0gICAgICAgIHNlbGYubWVhc3VyZW1lbnRzID0gbWVhc3VyZW1lbnRzCi0gICAgICAgIHNl
bGYudGltZW91dCA9IHRpbWVvdXQKLSAgICAgICAgc2VsZi5lcnJvciA9IGVycm9yICAjIHN0ZGVy
ciBvdXRwdXQKLSAgICAgICAgc2VsZi5waWQgPSBwaWQKLQotICAgIGRlZiBoYXNfc3RkZXJyKHNl
bGYpOgotICAgICAgICByZXR1cm4gYm9vbChzZWxmLmVycm9yKQotCi0gICAgZGVmIHN0cmlwX21l
dHJpY3Moc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLnRleHQ6Ci0gICAgICAgICAgICByZXR1
cm4KLSAgICAgICAgZm9yIHBhdHRlcm4gaW4gc2VsZi5zdHJpcF9wYXR0ZXJuczoKLSAgICAgICAg
ICAgIHNlbGYudGV4dCA9IHJlLnN1YihwYXR0ZXJuWzBdLCBwYXR0ZXJuWzFdLCBzZWxmLnRleHQp
Ci0KLQotY2xhc3MgRHJpdmVyKG9iamVjdCk6Ci0gICAgIiIib2JqZWN0IGZvciBydW5uaW5nIHRl
c3QocykgdXNpbmcgRHVtcFJlbmRlclRyZWUvV2ViS2l0VGVzdFJ1bm5lci4iIiIKLQotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBwb3J0LCB3b3JrZXJfbnVtYmVyLCBwaXhlbF90ZXN0cywgbm9fdGlt
ZW91dD1GYWxzZSk6Ci0gICAgICAgICIiIkluaXRpYWxpemUgYSBEcml2ZXIgdG8gc3Vic2VxdWVu
dGx5IHJ1biB0ZXN0cy4KLQotICAgICAgICBUeXBpY2FsbHkgdGhpcyByb3V0aW5lIHdpbGwgc3Bh
d24gRHVtcFJlbmRlclRyZWUgaW4gYSBjb25maWcKLSAgICAgICAgcmVhZHkgZm9yIHN1YnNlcXVl
bnQgaW5wdXQuCi0KLSAgICAgICAgcG9ydCAtIHJlZmVyZW5jZSBiYWNrIHRvIHRoZSBwb3J0IG9i
amVjdC4KLSAgICAgICAgd29ya2VyX251bWJlciAtIGlkZW50aWZpZXIgZm9yIGEgcGFydGljdWxh
ciB3b3JrZXIvZHJpdmVyIGluc3RhbmNlCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLl9wb3J0
ID0gcG9ydAotICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgotICAg
ICAgICBzZWxmLl9ub190aW1lb3V0ID0gbm9fdGltZW91dAotCi0gICAgICAgIHNlbGYuX2RyaXZl
cl90ZW1wZGlyID0gTm9uZQotICAgICAgICAjIFdlYktpdFRlc3RSdW5uZXIgY2FuIHJlcG9ydCBi
YWNrIHN1YnByb2Nlc3MgY3Jhc2hlcyBieSBwcmludGluZwotICAgICAgICAjICIjQ1JBU0hFRCAt
IFBST0NFU1NOQU1FIi4gIFNpbmNlIHRob3NlIGNhbiBoYXBwZW4gYXQgYW55IHRpbWUKLSAgICAg
ICAgIyBhbmQgU2VydmVyUHJvY2VzcyB3b24ndCBiZSBhd2FyZSBvZiB0aGVtIChzaW5jZSB0aGUg
YWN0dWFsIHRvb2wKLSAgICAgICAgIyBkaWRuJ3QgY3Jhc2gsIGp1c3QgYSBzdWJwcm9jZXNzKSB3
ZSByZWNvcmQgdGhlIGNyYXNoZWQgc3VicHJvY2VzcyBuYW1lIGhlcmUuCi0gICAgICAgIHNlbGYu
X2NyYXNoZWRfcHJvY2Vzc19uYW1lID0gTm9uZQotICAgICAgICBzZWxmLl9jcmFzaGVkX3BpZCA9
IE5vbmUKLQotICAgICAgICAjIFdlYktpdFRlc3RSdW5uZXIgY2FuIHJlcG9ydCBiYWNrIHN1YnBy
b2Nlc3NlcyB0aGF0IGJlY2FtZSB1bnJlc3BvbnNpdmUKLSAgICAgICAgIyBUaGlzIGNvdWxkIG1l
YW4gdGhleSBjcmFzaGVkLgotICAgICAgICBzZWxmLl9zdWJwcm9jZXNzX3dhc191bnJlc3BvbnNp
dmUgPSBGYWxzZQotCi0gICAgICAgICMgc3RkZXJyIHJlYWRpbmcgaXMgc2NvcGVkIG9uIGEgcGVy
LXRlc3QgKG5vdCBwZXItYmxvY2spIGJhc2lzLCBzbyB3ZSBzdG9yZSB0aGUgYWNjdW11bGF0ZWQK
LSAgICAgICAgIyBzdGRlcnIgb3V0cHV0LCBhcyB3ZWxsIGFzIGlmIHdlJ3ZlIHNlZW4gI0VPRiBv
biB0aGlzIGRyaXZlciBpbnN0YW5jZS4KLSAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIHByb2Jh
Ymx5IHJlbW92ZSBfcmVhZF9maXJzdF9ibG9jayBhbmQgX3JlYWRfb3B0aW9uYWxfaW1hZ2VfYmxv
Y2sgYW5kCi0gICAgICAgICMgaW5zdGVhZCBzY29wZSB0aGVzZSBsb2NhbGx5IGluIHJ1bl90ZXN0
LgotICAgICAgICBzZWxmLmVycm9yX2Zyb21fdGVzdCA9IHN0cigpCi0gICAgICAgIHNlbGYuZXJy
X3NlZW5fZW9mID0gRmFsc2UKLSAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MgPSBOb25lCi0K
LSAgICAgICAgc2VsZi5fbWVhc3VyZW1lbnRzID0ge30KLSAgICAgICAgaWYgc2VsZi5fcG9ydC5n
ZXRfb3B0aW9uKCJwcm9maWxlIik6Ci0gICAgICAgICAgICBwcm9maWxlcl9uYW1lID0gc2VsZi5f
cG9ydC5nZXRfb3B0aW9uKCJwcm9maWxlciIpCi0gICAgICAgICAgICBzZWxmLl9wcm9maWxlciA9
IFByb2ZpbGVyRmFjdG9yeS5jcmVhdGVfcHJvZmlsZXIoc2VsZi5fcG9ydC5ob3N0LAotICAgICAg
ICAgICAgICAgIHNlbGYuX3BvcnQuX3BhdGhfdG9fZHJpdmVyKCksIHNlbGYuX3BvcnQucmVzdWx0
c19kaXJlY3RvcnkoKSwgcHJvZmlsZXJfbmFtZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IHNlbGYuX3Byb2ZpbGVyID0gTm9uZQotCi0gICAgZGVmIF9fZGVsX18oc2VsZik6Ci0gICAgICAg
IHNlbGYuc3RvcCgpCi0KLSAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgZHJpdmVyX2lucHV0LCBzdG9w
X3doZW5fZG9uZSk6Ci0gICAgICAgICIiIlJ1biBhIHNpbmdsZSB0ZXN0IGFuZCByZXR1cm4gdGhl
IHJlc3VsdHMuCi0KLSAgICAgICAgTm90ZSB0aGF0IGl0IGlzIG9rYXkgaWYgYSB0ZXN0IHRpbWVz
IG91dCBvciBjcmFzaGVzIGFuZCBsZWF2ZXMKLSAgICAgICAgdGhlIGRyaXZlciBpbiBhbiBpbmRl
dGVybWluYXRlIHN0YXRlLiBUaGUgdXBwZXIgbGF5ZXJzIG9mIHRoZSBwcm9ncmFtCi0gICAgICAg
IGFyZSByZXNwb25zaWJsZSBmb3IgY2xlYW5pbmcgdXAgYW5kIGVuc3VyaW5nIHRoaW5ncyBhcmUg
b2theS4KLQotICAgICAgICBSZXR1cm5zIGEgRHJpdmVyT3V0cHV0IG9iamVjdC4KLSAgICAgICAg
IiIiCi0gICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICBzZWxmLnN0YXJ0
KGRyaXZlcl9pbnB1dC5zaG91bGRfcnVuX3BpeGVsX3Rlc3QsIGRyaXZlcl9pbnB1dC5hcmdzKQot
ICAgICAgICB0ZXN0X2JlZ2luX3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICBzZWxmLmVycm9y
X2Zyb21fdGVzdCA9IHN0cigpCi0gICAgICAgIHNlbGYuZXJyX3NlZW5fZW9mID0gRmFsc2UKLQot
ICAgICAgICBjb21tYW5kID0gc2VsZi5fY29tbWFuZF9mcm9tX2RyaXZlcl9pbnB1dChkcml2ZXJf
aW5wdXQpCi0gICAgICAgIGRlYWRsaW5lID0gdGVzdF9iZWdpbl90aW1lICsgaW50KGRyaXZlcl9p
bnB1dC50aW1lb3V0KSAvIDEwMDAuMAotCi0gICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLndy
aXRlKGNvbW1hbmQpCi0gICAgICAgIHRleHQsIGF1ZGlvID0gc2VsZi5fcmVhZF9maXJzdF9ibG9j
ayhkZWFkbGluZSkgICMgRmlyc3QgYmxvY2sgaXMgZWl0aGVyIHRleHQgb3IgYXVkaW8KLSAgICAg
ICAgaW1hZ2UsIGFjdHVhbF9pbWFnZV9oYXNoID0gc2VsZi5fcmVhZF9vcHRpb25hbF9pbWFnZV9i
bG9jayhkZWFkbGluZSkgICMgVGhlIHNlY29uZCAob3B0aW9uYWwpIGJsb2NrIGlzIGltYWdlIGRh
dGEuCi0KLSAgICAgICAgY3Jhc2hlZCA9IHNlbGYuaGFzX2NyYXNoZWQoKQotICAgICAgICB0aW1l
ZF9vdXQgPSBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy50aW1lZF9vdXQKLSAgICAgICAgcGlkID0gc2Vs
Zi5fc2VydmVyX3Byb2Nlc3MucGlkKCkKLQotICAgICAgICBpZiBzdG9wX3doZW5fZG9uZSBvciBj
cmFzaGVkIG9yIHRpbWVkX291dDoKLSAgICAgICAgICAgICMgV2UgY2FsbCBzdG9wKCkgZXZlbiBp
ZiB3ZSBjcmFzaGVkIG9yIHRpbWVkIG91dCBpbiBvcmRlciB0byBnZXQgYW55IHJlbWFpbmluZyBz
dGRvdXQvc3RkZXJyIG91dHB1dC4KLSAgICAgICAgICAgICMgSW4gdGhlIHRpbWVvdXQgY2FzZSwg
d2Uga2lsbCB0aGUgaHVuZyBwcm9jZXNzIGFzIHdlbGwuCi0gICAgICAgICAgICBvdXQsIGVyciA9
IHNlbGYuX3NlcnZlcl9wcm9jZXNzLnN0b3Aoc2VsZi5fcG9ydC5kcml2ZXJfc3RvcF90aW1lb3V0
KCkgaWYgc3RvcF93aGVuX2RvbmUgZWxzZSAwLjApCi0gICAgICAgICAgICBpZiBvdXQ6Ci0gICAg
ICAgICAgICAgICAgdGV4dCArPSBvdXQKLSAgICAgICAgICAgIGlmIGVycjoKLSAgICAgICAgICAg
ICAgICBzZWxmLmVycm9yX2Zyb21fdGVzdCArPSBlcnIKLSAgICAgICAgICAgIHNlbGYuX3NlcnZl
cl9wcm9jZXNzID0gTm9uZQotCi0gICAgICAgIGNyYXNoX2xvZyA9IE5vbmUKLSAgICAgICAgaWYg
Y3Jhc2hlZDoKLSAgICAgICAgICAgIHNlbGYuZXJyb3JfZnJvbV90ZXN0LCBjcmFzaF9sb2cgPSBz
ZWxmLl9nZXRfY3Jhc2hfbG9nKHRleHQsIHNlbGYuZXJyb3JfZnJvbV90ZXN0LCBuZXdlcl90aGFu
PXN0YXJ0X3RpbWUpCi0KLSAgICAgICAgICAgICMgSWYgd2UgZG9uJ3QgZmluZCBhIGNyYXNoIGxv
ZyB1c2UgYSBwbGFjZWhvbGRlciBlcnJvciBtZXNzYWdlIGluc3RlYWQuCi0gICAgICAgICAgICBp
ZiBub3QgY3Jhc2hfbG9nOgotICAgICAgICAgICAgICAgIHBpZF9zdHIgPSBzdHIoc2VsZi5fY3Jh
c2hlZF9waWQpIGlmIHNlbGYuX2NyYXNoZWRfcGlkIGVsc2UgInVua25vd24gcGlkIgotICAgICAg
ICAgICAgICAgIGNyYXNoX2xvZyA9ICdObyBjcmFzaCBsb2cgZm91bmQgZm9yICVzOiVzLlxuJyAl
IChzZWxmLl9jcmFzaGVkX3Byb2Nlc3NfbmFtZSwgcGlkX3N0cikKLSAgICAgICAgICAgICAgICAj
IElmIHdlIHdlcmUgdW5yZXNwb25zaXZlIGFwcGVuZCBhIG1lc3NhZ2UgaW5mb3JtaW5nIHRoZXJl
IG1heSBub3QgaGF2ZSBiZWVuIGEgY3Jhc2guCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5fc3Vi
cHJvY2Vzc193YXNfdW5yZXNwb25zaXZlOgotICAgICAgICAgICAgICAgICAgICBjcmFzaF9sb2cg
Kz0gJ1Byb2Nlc3MgZmFpbGVkIHRvIGJlY29tZSByZXNwb25zaXZlIGJlZm9yZSB0aW1pbmcgb3V0
LlxuJwotCi0gICAgICAgICAgICAgICAgIyBQcmludCBzdGRvdXQgYW5kIHN0ZGVyciB0byB0aGUg
cGxhY2Vob2xkZXIgY3Jhc2ggbG9nOyB3ZSB3YW50IGFzIG11Y2ggY29udGV4dCBhcyBwb3NzaWJs
ZS4KLSAgICAgICAgICAgICAgICBpZiBzZWxmLmVycm9yX2Zyb21fdGVzdDoKLSAgICAgICAgICAg
ICAgICAgICAgY3Jhc2hfbG9nICs9ICdcbnN0ZG91dDpcbiVzXG5zdGRlcnI6XG4lc1xuJyAlICh0
ZXh0LCBzZWxmLmVycm9yX2Zyb21fdGVzdCkKLQotICAgICAgICByZXR1cm4gRHJpdmVyT3V0cHV0
KHRleHQsIGltYWdlLCBhY3R1YWxfaW1hZ2VfaGFzaCwgYXVkaW8sCi0gICAgICAgICAgICBjcmFz
aD1jcmFzaGVkLCB0ZXN0X3RpbWU9dGltZS50aW1lKCkgLSB0ZXN0X2JlZ2luX3RpbWUsIG1lYXN1
cmVtZW50cz1zZWxmLl9tZWFzdXJlbWVudHMsCi0gICAgICAgICAgICB0aW1lb3V0PXRpbWVkX291
dCwgZXJyb3I9c2VsZi5lcnJvcl9mcm9tX3Rlc3QsCi0gICAgICAgICAgICBjcmFzaGVkX3Byb2Nl
c3NfbmFtZT1zZWxmLl9jcmFzaGVkX3Byb2Nlc3NfbmFtZSwKLSAgICAgICAgICAgIGNyYXNoZWRf
cGlkPXNlbGYuX2NyYXNoZWRfcGlkLCBjcmFzaF9sb2c9Y3Jhc2hfbG9nLCBwaWQ9cGlkKQotCi0g
ICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKToK
LSAgICAgICAgcmV0dXJuIHNlbGYuX3BvcnQuX2dldF9jcmFzaF9sb2coc2VsZi5fY3Jhc2hlZF9w
cm9jZXNzX25hbWUsIHNlbGYuX2NyYXNoZWRfcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhh
bikKLQotICAgICMgRklYTUU6IFNlZW1zIHRoaXMgY291bGQganVzdCBiZSBpbmxpbmVkIGludG8g
Y2FsbGVycy4KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2NvbW1hbmRfd3JhcHBlcihjbHMs
IHdyYXBwZXJfb3B0aW9uKToKLSAgICAgICAgIyBIb29rIGZvciBpbmplY3RpbmcgdmFsZ3JpbmQg
b3Igb3RoZXIgcnVudGltZSBpbnN0cnVtZW50YXRpb24sCi0gICAgICAgICMgdXNlZCBieSBlLmcu
IHRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kX3Rlc3RzLnB5LgotICAgICAgICByZXR1cm4gc2hsZXgu
c3BsaXQod3JhcHBlcl9vcHRpb24pIGlmIHdyYXBwZXJfb3B0aW9uIGVsc2UgW10KLQotICAgIEhU
VFBfRElSID0gImh0dHAvdGVzdHMvIgotICAgIEhUVFBfTE9DQUxfRElSID0gImh0dHAvdGVzdHMv
bG9jYWwvIgotCi0gICAgZGVmIGlzX2h0dHBfdGVzdChzZWxmLCB0ZXN0X25hbWUpOgotICAgICAg
ICByZXR1cm4gdGVzdF9uYW1lLnN0YXJ0c3dpdGgoc2VsZi5IVFRQX0RJUikgYW5kIG5vdCB0ZXN0
X25hbWUuc3RhcnRzd2l0aChzZWxmLkhUVFBfTE9DQUxfRElSKQotCi0gICAgZGVmIHRlc3RfdG9f
dXJpKHNlbGYsIHRlc3RfbmFtZSk6Ci0gICAgICAgICIiIkNvbnZlcnQgYSB0ZXN0IG5hbWUgdG8g
YSBVUkkuIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLmlzX2h0dHBfdGVzdCh0ZXN0X25hbWUpOgot
ICAgICAgICAgICAgcmV0dXJuIHBhdGguYWJzcGF0aF90b191cmkoc2VsZi5fcG9ydC5ob3N0LnBs
YXRmb3JtLCBzZWxmLl9wb3J0LmFic3BhdGhfZm9yX3Rlc3QodGVzdF9uYW1lKSkKLQotICAgICAg
ICByZWxhdGl2ZV9wYXRoID0gdGVzdF9uYW1lW2xlbihzZWxmLkhUVFBfRElSKTpdCi0KLSAgICAg
ICAgIyBUT0RPKGRwcmFua2UpOiByZW1vdmUgdGhlIFNTTCByZWZlcmVuY2U/Ci0gICAgICAgIGlm
IHJlbGF0aXZlX3BhdGguc3RhcnRzd2l0aCgic3NsLyIpOgotICAgICAgICAgICAgcmV0dXJuICJo
dHRwczovLzEyNy4wLjAuMTo4NDQzLyIgKyByZWxhdGl2ZV9wYXRoCi0gICAgICAgIHJldHVybiAi
aHR0cDovLzEyNy4wLjAuMTo4MDAwLyIgKyByZWxhdGl2ZV9wYXRoCi0KLSAgICBkZWYgdXJpX3Rv
X3Rlc3Qoc2VsZiwgdXJpKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBiYXNlIGxheW91dCB0ZXN0
IG5hbWUgZm9yIGEgZ2l2ZW4gVVJJLgotCi0gICAgICAgIFRoaXMgcmV0dXJucyB0aGUgdGVzdCBu
YW1lIGZvciBhIGdpdmVuIFVSSSwgZS5nLiwgaWYgeW91IHBhc3NlZCBpbgotICAgICAgICAiZmls
ZTovLy9zcmMvTGF5b3V0VGVzdHMvZmFzdC9odG1sL2tleWdlbi5odG1sIiBpdCB3b3VsZCByZXR1
cm4KLSAgICAgICAgImZhc3QvaHRtbC9rZXlnZW4uaHRtbCIuCi0KLSAgICAgICAgIiIiCi0gICAg
ICAgIGlmIHVyaS5zdGFydHN3aXRoKCJmaWxlOi8vLyIpOgotICAgICAgICAgICAgcHJlZml4ID0g
cGF0aC5hYnNwYXRoX3RvX3VyaShzZWxmLl9wb3J0Lmhvc3QucGxhdGZvcm0sIHNlbGYuX3BvcnQu
bGF5b3V0X3Rlc3RzX2RpcigpKQotICAgICAgICAgICAgaWYgbm90IHByZWZpeC5lbmRzd2l0aCgn
LycpOgotICAgICAgICAgICAgICAgIHByZWZpeCArPSAnLycKLSAgICAgICAgICAgIHJldHVybiB1
cmlbbGVuKHByZWZpeCk6XQotICAgICAgICBpZiB1cmkuc3RhcnRzd2l0aCgiaHR0cDovLyIpOgot
ICAgICAgICAgICAgcmV0dXJuIHVyaS5yZXBsYWNlKCdodHRwOi8vMTI3LjAuMC4xOjgwMDAvJywg
c2VsZi5IVFRQX0RJUikKLSAgICAgICAgaWYgdXJpLnN0YXJ0c3dpdGgoImh0dHBzOi8vIik6Ci0g
ICAgICAgICAgICByZXR1cm4gdXJpLnJlcGxhY2UoJ2h0dHBzOi8vMTI3LjAuMC4xOjg0NDMvJywg
c2VsZi5IVFRQX0RJUikKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigndW5rbm93
biB1cmwgdHlwZTogJXMnICUgdXJpKQotCi0gICAgZGVmIGhhc19jcmFzaGVkKHNlbGYpOgotICAg
ICAgICBpZiBzZWxmLl9zZXJ2ZXJfcHJvY2VzcyBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCi0gICAgICAgIGlmIHNlbGYuX2NyYXNoZWRfcHJvY2Vzc19uYW1lOgotICAgICAgICAg
ICAgcmV0dXJuIFRydWUKLSAgICAgICAgaWYgc2VsZi5fc2VydmVyX3Byb2Nlc3MuaGFzX2NyYXNo
ZWQoKToKLSAgICAgICAgICAgIHNlbGYuX2NyYXNoZWRfcHJvY2Vzc19uYW1lID0gc2VsZi5fc2Vy
dmVyX3Byb2Nlc3MubmFtZSgpCi0gICAgICAgICAgICBzZWxmLl9jcmFzaGVkX3BpZCA9IHNlbGYu
X3NlcnZlcl9wcm9jZXNzLnBpZCgpCi0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBy
ZXR1cm4gRmFsc2UKLQotICAgIGRlZiBzdGFydChzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3Rf
YXJncyk6Ci0gICAgICAgICMgRklYTUU6IENhbGxlcnMgc2hvdWxkbid0IG5vcm1hbGx5IGNhbGwg
dGhpcywgc2luY2UgdGhpcyByb3V0aW5lCi0gICAgICAgICMgbWF5IG5vdCBiZSBzcGVjaWZ5aW5n
IHRoZSBjb3JyZWN0IGNvbWJpbmF0aW9uIG9mIHBpeGVsIHRlc3QgYW5kCi0gICAgICAgICMgcGVy
X3Rlc3QgYXJncy4KLSAgICAgICAgIwotICAgICAgICAjIFRoZSBvbmx5IHJlYXNvbiB3ZSBoYXZl
IHRoaXMgcm91dGluZSBhdCBhbGwgaXMgc28gdGhlIHBlcmZ0ZXN0cnVubmVyCi0gICAgICAgICMg
Y2FuIHBhdXNlIGJlZm9yZSBydW5uaW5nIGEgdGVzdDsgaXQgbWlnaHQgYmUgYmV0dGVyIHRvIHB1
c2ggdGhhdAotICAgICAgICAjIGludG8gcnVuX3Rlc3QoKSBkaXJlY3RseS4KLSAgICAgICAgaWYg
bm90IHNlbGYuX3NlcnZlcl9wcm9jZXNzOgotICAgICAgICAgICAgc2VsZi5fc3RhcnQocGl4ZWxf
dGVzdHMsIHBlcl90ZXN0X2FyZ3MpCi0gICAgICAgICAgICBzZWxmLl9ydW5fcG9zdF9zdGFydF90
YXNrcygpCi0KLSAgICBkZWYgX3NldHVwX2Vudmlyb25fZm9yX2RyaXZlcihzZWxmLCBlbnZpcm9u
bWVudCk6Ci0gICAgICAgIGVudmlyb25tZW50WydEWUxEX0xJQlJBUllfUEFUSCddID0gc2VsZi5f
cG9ydC5fYnVpbGRfcGF0aCgpCi0gICAgICAgIGVudmlyb25tZW50WydEWUxEX0ZSQU1FV09SS19Q
QVRIJ10gPSBzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCkKLSAgICAgICAgIyBGSVhNRTogV2UncmUg
YXNzdW1pbmcgdGhhdCBXZWJLaXRUZXN0UnVubmVyIGNoZWNrcyB0aGlzIER1bXBSZW5kZXJUcmVl
LW5hbWVkIGVudmlyb25tZW50IHZhcmlhYmxlLgotICAgICAgICBlbnZpcm9ubWVudFsnRFVNUFJF
TkRFUlRSRUVfVEVNUCddID0gc3RyKHNlbGYuX2RyaXZlcl90ZW1wZGlyKQotICAgICAgICBlbnZp
cm9ubWVudFsnTE9DQUxfUkVTT1VSQ0VfUk9PVCddID0gc2VsZi5fcG9ydC5sYXlvdXRfdGVzdHNf
ZGlyKCkKLSAgICAgICAgaWYgJ1dFQktJVE9VVFBVVERJUicgaW4gb3MuZW52aXJvbjoKLSAgICAg
ICAgICAgIGVudmlyb25tZW50WydXRUJLSVRPVVRQVVRESVInXSA9IG9zLmVudmlyb25bJ1dFQktJ
VE9VVFBVVERJUiddCi0gICAgICAgIGlmIHNlbGYuX3Byb2ZpbGVyOgotICAgICAgICAgICAgZW52
aXJvbm1lbnQgPSBzZWxmLl9wcm9maWxlci5hZGp1c3RlZF9lbnZpcm9ubWVudChlbnZpcm9ubWVu
dCkKLSAgICAgICAgcmV0dXJuIGVudmlyb25tZW50Ci0KLSAgICBkZWYgX3N0YXJ0KHNlbGYsIHBp
eGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKToKLSAgICAgICAgc2VsZi5zdG9wKCkKLSAgICAgICAg
c2VsZi5fZHJpdmVyX3RlbXBkaXIgPSBzZWxmLl9wb3J0Ll9maWxlc3lzdGVtLm1rZHRlbXAocHJl
Zml4PSclcy0nICUgc2VsZi5fcG9ydC5kcml2ZXJfbmFtZSgpKQotICAgICAgICBzZXJ2ZXJfbmFt
ZSA9IHNlbGYuX3BvcnQuZHJpdmVyX25hbWUoKQotICAgICAgICBlbnZpcm9ubWVudCA9IHNlbGYu
X3BvcnQuc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKHNlcnZlcl9uYW1lKQotICAgICAgICBlbnZp
cm9ubWVudCA9IHNlbGYuX3NldHVwX2Vudmlyb25fZm9yX2RyaXZlcihlbnZpcm9ubWVudCkKLSAg
ICAgICAgc2VsZi5fY3Jhc2hlZF9wcm9jZXNzX25hbWUgPSBOb25lCi0gICAgICAgIHNlbGYuX2Ny
YXNoZWRfcGlkID0gTm9uZQotICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2VzcyA9IHNlbGYuX3Bv
cnQuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yKHNlbGYuX3BvcnQsIHNlcnZlcl9uYW1lLCBz
ZWxmLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKSwgZW52aXJvbm1lbnQpCi0g
ICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLnN0YXJ0KCkKLQotICAgIGRlZiBfcnVuX3Bvc3Rf
c3RhcnRfdGFza3Moc2VsZik6Ci0gICAgICAgICMgUmVtb3RlIGRyaXZlcnMgbWF5IG92ZXJyaWRl
IHRoaXMgdG8gZGVsYXkgcG9zdC1zdGFydCB0YXNrcyB1bnRpbCB0aGUgc2VydmVyIGhhcyBhY2sn
ZC4KLSAgICAgICAgaWYgc2VsZi5fcHJvZmlsZXI6Ci0gICAgICAgICAgICBzZWxmLl9wcm9maWxl
ci5hdHRhY2hfdG9fcGlkKHNlbGYuX3BpZF9vbl90YXJnZXQoKSkKLQotICAgIGRlZiBfcGlkX29u
X3RhcmdldChzZWxmKToKLSAgICAgICAgIyBSZW1vdGUgZHJpdmVycyB3aWxsIG92ZXJyaWRlIHRo
aXMgbWV0aG9kIHRvIHJldHVybiB0aGUgcGlkIG9uIHRoZSBkZXZpY2UuCi0gICAgICAgIHJldHVy
biBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5waWQoKQotCi0gICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAg
ICAgIGlmIHNlbGYuX3NlcnZlcl9wcm9jZXNzOgotICAgICAgICAgICAgc2VsZi5fc2VydmVyX3By
b2Nlc3Muc3RvcChzZWxmLl9wb3J0LmRyaXZlcl9zdG9wX3RpbWVvdXQoKSkKLSAgICAgICAgICAg
IHNlbGYuX3NlcnZlcl9wcm9jZXNzID0gTm9uZQotICAgICAgICAgICAgaWYgc2VsZi5fcHJvZmls
ZXI6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcHJvZmlsZXIucHJvZmlsZV9hZnRlcl9leGl0KCkK
LQotICAgICAgICBpZiBzZWxmLl9kcml2ZXJfdGVtcGRpcjoKLSAgICAgICAgICAgIHNlbGYuX3Bv
cnQuX2ZpbGVzeXN0ZW0ucm10cmVlKHN0cihzZWxmLl9kcml2ZXJfdGVtcGRpcikpCi0gICAgICAg
ICAgICBzZWxmLl9kcml2ZXJfdGVtcGRpciA9IE5vbmUKLQotICAgIGRlZiBjbWRfbGluZShzZWxm
LCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6Ci0gICAgICAgIGNtZCA9IHNlbGYuX2NvbW1h
bmRfd3JhcHBlcihzZWxmLl9wb3J0LmdldF9vcHRpb24oJ3dyYXBwZXInKSkKLSAgICAgICAgY21k
LmFwcGVuZChzZWxmLl9wb3J0Ll9wYXRoX3RvX2RyaXZlcigpKQotICAgICAgICBpZiBzZWxmLl9w
b3J0LmdldF9vcHRpb24oJ2djX2JldHdlZW5fdGVzdHMnKToKLSAgICAgICAgICAgIGNtZC5hcHBl
bmQoJy0tZ2MtYmV0d2Vlbi10ZXN0cycpCi0gICAgICAgIGlmIHNlbGYuX3BvcnQuZ2V0X29wdGlv
bignY29tcGxleF90ZXh0Jyk6Ci0gICAgICAgICAgICBjbWQuYXBwZW5kKCctLWNvbXBsZXgtdGV4
dCcpCi0gICAgICAgIGlmIHNlbGYuX3BvcnQuZ2V0X29wdGlvbigndGhyZWFkZWQnKToKLSAgICAg
ICAgICAgIGNtZC5hcHBlbmQoJy0tdGhyZWFkZWQnKQotICAgICAgICBpZiBzZWxmLl9ub190aW1l
b3V0OgotICAgICAgICAgICAgY21kLmFwcGVuZCgnLS1uby10aW1lb3V0JykKLSAgICAgICAgIyBG
SVhNRTogV2UgbmVlZCB0byBwYXNzIC0tdGltZW91dD1TRUNPTkRTIHRvIFdlYktpdFRlc3RSdW5u
ZXIgZm9yIFdlYktpdDIuCi0KLSAgICAgICAgY21kLmV4dGVuZChzZWxmLl9wb3J0LmdldF9vcHRp
b24oJ2FkZGl0aW9uYWxfZHJ0X2ZsYWcnLCBbXSkpCi0gICAgICAgIGNtZC5leHRlbmQoc2VsZi5f
cG9ydC5hZGRpdGlvbmFsX2RydF9mbGFnKCkpCi0KLSAgICAgICAgY21kLmV4dGVuZChwZXJfdGVz
dF9hcmdzKQotCi0gICAgICAgIGNtZC5hcHBlbmQoJy0nKQotICAgICAgICByZXR1cm4gY21kCi0K
LSAgICBkZWYgX2NoZWNrX2Zvcl9kcml2ZXJfY3Jhc2goc2VsZiwgZXJyb3JfbGluZSk6Ci0gICAg
ICAgIGlmIGVycm9yX2xpbmUgPT0gIiNDUkFTSEVEXG4iOgotICAgICAgICAgICAgIyBUaGlzIGlz
IHVzZWQgb24gV2luZG93cyB0byByZXBvcnQgdGhhdCB0aGUgcHJvY2VzcyBoYXMgY3Jhc2hlZAot
ICAgICAgICAgICAgIyBTZWUgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvNjU1Mzcu
Ci0gICAgICAgICAgICBzZWxmLl9jcmFzaGVkX3Byb2Nlc3NfbmFtZSA9IHNlbGYuX3NlcnZlcl9w
cm9jZXNzLm5hbWUoKQotICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZF9waWQgPSBzZWxmLl9zZXJ2
ZXJfcHJvY2Vzcy5waWQoKQotICAgICAgICBlbGlmIChlcnJvcl9saW5lLnN0YXJ0c3dpdGgoIiND
UkFTSEVEIC0gIikKLSAgICAgICAgICAgIG9yIGVycm9yX2xpbmUuc3RhcnRzd2l0aCgiI1BST0NF
U1MgVU5SRVNQT05TSVZFIC0gIikpOgotICAgICAgICAgICAgIyBXZWJLaXRUZXN0UnVubmVyIHVz
ZXMgdGhpcyB0byByZXBvcnQgdGhhdCB0aGUgV2ViUHJvY2VzcyBzdWJwcm9jZXNzIGNyYXNoZWQu
Ci0gICAgICAgICAgICBtYXRjaCA9IHJlLm1hdGNoKCcjKD86Q1JBU0hFRHxQUk9DRVNTIFVOUkVT
UE9OU0lWRSkgLSAoXFMrKScsIGVycm9yX2xpbmUpCi0gICAgICAgICAgICBzZWxmLl9jcmFzaGVk
X3Byb2Nlc3NfbmFtZSA9IG1hdGNoLmdyb3VwKDEpIGlmIG1hdGNoIGVsc2UgJ1dlYlByb2Nlc3Mn
Ci0gICAgICAgICAgICBtYXRjaCA9IHJlLnNlYXJjaCgncGlkIChcZCspJywgZXJyb3JfbGluZSkK
LSAgICAgICAgICAgIHBpZCA9IGludChtYXRjaC5ncm91cCgxKSkgaWYgbWF0Y2ggZWxzZSBOb25l
Ci0gICAgICAgICAgICBzZWxmLl9jcmFzaGVkX3BpZCA9IHBpZAotICAgICAgICAgICAgIyBGSVhN
RTogZGVsZXRlIHRoaXMgYWZ0ZXIgd2UncmUgc3VyZSB0aGlzIGNvZGUgaXMgd29ya2luZyA6KQot
ICAgICAgICAgICAgX2xvZy5kZWJ1ZygnJXMgY3Jhc2gsIHBpZCA9ICVzLCBlcnJvcl9saW5lID0g
JXMnICUgKHNlbGYuX2NyYXNoZWRfcHJvY2Vzc19uYW1lLCBzdHIocGlkKSwgZXJyb3JfbGluZSkp
Ci0gICAgICAgICAgICBpZiBlcnJvcl9saW5lLnN0YXJ0c3dpdGgoIiNQUk9DRVNTIFVOUkVTUE9O
U0lWRSAtICIpOgotICAgICAgICAgICAgICAgIHNlbGYuX3N1YnByb2Nlc3Nfd2FzX3VucmVzcG9u
c2l2ZSA9IFRydWUKLSAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnNhbXBsZV9wcm9jZXNzKHNl
bGYuX2NyYXNoZWRfcHJvY2Vzc19uYW1lLCBzZWxmLl9jcmFzaGVkX3BpZCkKLSAgICAgICAgICAg
ICAgICAjIFdlIHdhbnQgdG8gc2hvdyB0aGlzIHNpbmNlIGl0J3Mgbm90IGEgcmVndWxhciBjcmFz
aCBhbmQgcHJvYmFibHkgd2UgZG9uJ3QgaGF2ZSBhIGNyYXNoIGxvZy4KLSAgICAgICAgICAgICAg
ICBzZWxmLmVycm9yX2Zyb21fdGVzdCArPSBlcnJvcl9saW5lCi0gICAgICAgICAgICByZXR1cm4g
VHJ1ZQotICAgICAgICByZXR1cm4gc2VsZi5oYXNfY3Jhc2hlZCgpCi0KLSAgICBkZWYgX2NvbW1h
bmRfZnJvbV9kcml2ZXJfaW5wdXQoc2VsZiwgZHJpdmVyX2lucHV0KToKLSAgICAgICAgIyBGSVhN
RTogcGVyZm9ybWFuY2UgdGVzdHMgcGFzcyBpbiBmdWxsIFVSTHMgaW5zdGVhZCBvZiB0ZXN0IG5h
bWVzLgotICAgICAgICBpZiBkcml2ZXJfaW5wdXQudGVzdF9uYW1lLnN0YXJ0c3dpdGgoJ2h0dHA6
Ly8nKSBvciBkcml2ZXJfaW5wdXQudGVzdF9uYW1lLnN0YXJ0c3dpdGgoJ2h0dHBzOi8vJykgIG9y
IGRyaXZlcl9pbnB1dC50ZXN0X25hbWUgPT0gKCdhYm91dDpibGFuaycpOgotICAgICAgICAgICAg
Y29tbWFuZCA9IGRyaXZlcl9pbnB1dC50ZXN0X25hbWUKLSAgICAgICAgZWxpZiBzZWxmLmlzX2h0
dHBfdGVzdChkcml2ZXJfaW5wdXQudGVzdF9uYW1lKToKLSAgICAgICAgICAgIGNvbW1hbmQgPSBz
ZWxmLnRlc3RfdG9fdXJpKGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpCi0gICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICBjb21tYW5kID0gc2VsZi5fcG9ydC5hYnNwYXRoX2Zvcl90ZXN0KGRyaXZlcl9p
bnB1dC50ZXN0X25hbWUpCi0gICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbic6
Ci0gICAgICAgICAgICAgICAgY29tbWFuZCA9IHBhdGguY3lncGF0aChjb21tYW5kKQotCi0gICAg
ICAgIGFzc2VydCBub3QgZHJpdmVyX2lucHV0LmltYWdlX2hhc2ggb3IgZHJpdmVyX2lucHV0LnNo
b3VsZF9ydW5fcGl4ZWxfdGVzdAotCi0gICAgICAgICMgJyBpcyB0aGUgc2VwYXJhdG9yIGJldHdl
ZW4gYXJndW1lbnRzLgotICAgICAgICBpZiBzZWxmLl9wb3J0LnN1cHBvcnRzX3Blcl90ZXN0X3Rp
bWVvdXQoKToKLSAgICAgICAgICAgIGNvbW1hbmQgKz0gIictLXRpbWVvdXQnJXMiICUgZHJpdmVy
X2lucHV0LnRpbWVvdXQKLSAgICAgICAgaWYgZHJpdmVyX2lucHV0LnNob3VsZF9ydW5fcGl4ZWxf
dGVzdDoKLSAgICAgICAgICAgIGNvbW1hbmQgKz0gIictLXBpeGVsLXRlc3QiCi0gICAgICAgIGlm
IGRyaXZlcl9pbnB1dC5pbWFnZV9oYXNoOgotICAgICAgICAgICAgY29tbWFuZCArPSAiJyIgKyBk
cml2ZXJfaW5wdXQuaW1hZ2VfaGFzaAotICAgICAgICByZXR1cm4gY29tbWFuZCArICJcbiIKLQot
ICAgIGRlZiBfcmVhZF9maXJzdF9ibG9jayhzZWxmLCBkZWFkbGluZSk6Ci0gICAgICAgICMgcmV0
dXJucyAodGV4dF9jb250ZW50LCBhdWRpb19jb250ZW50KQotICAgICAgICBibG9jayA9IHNlbGYu
X3JlYWRfYmxvY2soZGVhZGxpbmUpCi0gICAgICAgIGlmIGJsb2NrLm1hbGxvYzoKLSAgICAgICAg
ICAgIHNlbGYuX21lYXN1cmVtZW50c1snTWFsbG9jJ10gPSBmbG9hdChibG9jay5tYWxsb2MpCi0g
ICAgICAgIGlmIGJsb2NrLmpzX2hlYXA6Ci0gICAgICAgICAgICBzZWxmLl9tZWFzdXJlbWVudHNb
J0pTSGVhcCddID0gZmxvYXQoYmxvY2suanNfaGVhcCkKLSAgICAgICAgaWYgYmxvY2suY29udGVu
dF90eXBlID09ICdhdWRpby93YXYnOgotICAgICAgICAgICAgcmV0dXJuIChOb25lLCBibG9jay5k
ZWNvZGVkX2NvbnRlbnQpCi0gICAgICAgIHJldHVybiAoYmxvY2suZGVjb2RlZF9jb250ZW50LCBO
b25lKQotCi0gICAgZGVmIF9yZWFkX29wdGlvbmFsX2ltYWdlX2Jsb2NrKHNlbGYsIGRlYWRsaW5l
KToKLSAgICAgICAgIyByZXR1cm5zIChpbWFnZSwgYWN0dWFsX2ltYWdlX2hhc2gpCi0gICAgICAg
IGJsb2NrID0gc2VsZi5fcmVhZF9ibG9jayhkZWFkbGluZSwgd2FpdF9mb3Jfc3RkZXJyX2VvZj1U
cnVlKQotICAgICAgICBpZiBibG9jay5jb250ZW50IGFuZCBibG9jay5jb250ZW50X3R5cGUgPT0g
J2ltYWdlL3BuZyc6Ci0gICAgICAgICAgICByZXR1cm4gKGJsb2NrLmRlY29kZWRfY29udGVudCwg
YmxvY2suY29udGVudF9oYXNoKQotICAgICAgICByZXR1cm4gKE5vbmUsIGJsb2NrLmNvbnRlbnRf
aGFzaCkKLQotICAgIGRlZiBfcmVhZF9oZWFkZXIoc2VsZiwgYmxvY2ssIGxpbmUsIGhlYWRlcl90
ZXh0LCBoZWFkZXJfYXR0ciwgaGVhZGVyX2ZpbHRlcj1Ob25lKToKLSAgICAgICAgaWYgbGluZS5z
dGFydHN3aXRoKGhlYWRlcl90ZXh0KSBhbmQgZ2V0YXR0cihibG9jaywgaGVhZGVyX2F0dHIpIGlz
IE5vbmU6Ci0gICAgICAgICAgICB2YWx1ZSA9IGxpbmUuc3BsaXQoKVsxXQotICAgICAgICAgICAg
aWYgaGVhZGVyX2ZpbHRlcjoKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGhlYWRlcl9maWx0ZXIo
dmFsdWUpCi0gICAgICAgICAgICBzZXRhdHRyKGJsb2NrLCBoZWFkZXJfYXR0ciwgdmFsdWUpCi0g
ICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBf
cHJvY2Vzc19zdGRvdXRfbGluZShzZWxmLCBibG9jaywgbGluZSk6Ci0gICAgICAgIGlmIChzZWxm
Ll9yZWFkX2hlYWRlcihibG9jaywgbGluZSwgJ0NvbnRlbnQtVHlwZTogJywgJ2NvbnRlbnRfdHlw
ZScpCi0gICAgICAgICAgICBvciBzZWxmLl9yZWFkX2hlYWRlcihibG9jaywgbGluZSwgJ0NvbnRl
bnQtVHJhbnNmZXItRW5jb2Rpbmc6ICcsICdlbmNvZGluZycpCi0gICAgICAgICAgICBvciBzZWxm
Ll9yZWFkX2hlYWRlcihibG9jaywgbGluZSwgJ0NvbnRlbnQtTGVuZ3RoOiAnLCAnX2NvbnRlbnRf
bGVuZ3RoJywgaW50KQotICAgICAgICAgICAgb3Igc2VsZi5fcmVhZF9oZWFkZXIoYmxvY2ssIGxp
bmUsICdBY3R1YWxIYXNoOiAnLCAnY29udGVudF9oYXNoJykKLSAgICAgICAgICAgIG9yIHNlbGYu
X3JlYWRfaGVhZGVyKGJsb2NrLCBsaW5lLCAnRHVtcE1hbGxvYzogJywgJ21hbGxvYycpCi0gICAg
ICAgICAgICBvciBzZWxmLl9yZWFkX2hlYWRlcihibG9jaywgbGluZSwgJ0R1bXBKU0hlYXA6ICcs
ICdqc19oZWFwJykpOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICMgTm90ZSwgd2UncmUg
bm90IHJlYWRpbmcgRXhwZWN0ZWRIYXNoOiBoZXJlLCBidXQgd2UgY291bGQuCi0gICAgICAgICMg
SWYgdGhlIGxpbmUgd2Fzbid0IGEgaGVhZGVyLCB3ZSBqdXN0IGFwcGVuZCBpdCB0byB0aGUgY29u
dGVudC4KLSAgICAgICAgYmxvY2suY29udGVudCArPSBsaW5lCi0KLSAgICBkZWYgX3N0cmlwX2Vv
ZihzZWxmLCBsaW5lKToKLSAgICAgICAgaWYgbGluZSBhbmQgbGluZS5lbmRzd2l0aCgiI0VPRlxu
Iik6Ci0gICAgICAgICAgICByZXR1cm4gbGluZVs6LTVdLCBUcnVlCi0gICAgICAgIHJldHVybiBs
aW5lLCBGYWxzZQotCi0gICAgZGVmIF9yZWFkX2Jsb2NrKHNlbGYsIGRlYWRsaW5lLCB3YWl0X2Zv
cl9zdGRlcnJfZW9mPUZhbHNlKToKLSAgICAgICAgYmxvY2sgPSBDb250ZW50QmxvY2soKQotICAg
ICAgICBvdXRfc2Vlbl9lb2YgPSBGYWxzZQotCi0gICAgICAgIHdoaWxlIG5vdCBzZWxmLmhhc19j
cmFzaGVkKCk6Ci0gICAgICAgICAgICBpZiBvdXRfc2Vlbl9lb2YgYW5kIChzZWxmLmVycl9zZWVu
X2VvZiBvciBub3Qgd2FpdF9mb3Jfc3RkZXJyX2VvZik6Ci0gICAgICAgICAgICAgICAgYnJlYWsK
LQotICAgICAgICAgICAgaWYgc2VsZi5lcnJfc2Vlbl9lb2Y6Ci0gICAgICAgICAgICAgICAgb3V0
X2xpbmUgPSBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5yZWFkX3N0ZG91dF9saW5lKGRlYWRsaW5lKQot
ICAgICAgICAgICAgICAgIGVycl9saW5lID0gTm9uZQotICAgICAgICAgICAgZWxpZiBvdXRfc2Vl
bl9lb2Y6Ci0gICAgICAgICAgICAgICAgb3V0X2xpbmUgPSBOb25lCi0gICAgICAgICAgICAgICAg
ZXJyX2xpbmUgPSBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5yZWFkX3N0ZGVycl9saW5lKGRlYWRsaW5l
KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBvdXRfbGluZSwgZXJyX2xpbmUg
PSBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5yZWFkX2VpdGhlcl9zdGRvdXRfb3Jfc3RkZXJyX2xpbmUo
ZGVhZGxpbmUpCi0KLSAgICAgICAgICAgIGlmIHNlbGYuX3NlcnZlcl9wcm9jZXNzLnRpbWVkX291
dCBvciBzZWxmLmhhc19jcmFzaGVkKCk6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLQotICAgICAg
ICAgICAgaWYgb3V0X2xpbmU6Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IG5vdCBvdXRfc2Vlbl9l
b2YKLSAgICAgICAgICAgICAgICBvdXRfbGluZSwgb3V0X3NlZW5fZW9mID0gc2VsZi5fc3RyaXBf
ZW9mKG91dF9saW5lKQotICAgICAgICAgICAgaWYgZXJyX2xpbmU6Ci0gICAgICAgICAgICAgICAg
YXNzZXJ0IG5vdCBzZWxmLmVycl9zZWVuX2VvZgotICAgICAgICAgICAgICAgIGVycl9saW5lLCBz
ZWxmLmVycl9zZWVuX2VvZiA9IHNlbGYuX3N0cmlwX2VvZihlcnJfbGluZSkKLQotICAgICAgICAg
ICAgaWYgb3V0X2xpbmU6Ci0gICAgICAgICAgICAgICAgaWYgb3V0X2xpbmVbLTFdICE9ICJcbiI6
Ci0gICAgICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoIkxhc3QgY2hhcmFjdGVyIHJlYWQgZnJv
bSBEUlQgc3Rkb3V0IGxpbmUgd2FzIG5vdCBhIG5ld2xpbmUhICBUaGlzIGluZGljYXRlcyBlaXRo
ZXIgYSBOUldUIG9yIERSVCBidWcuIikKLSAgICAgICAgICAgICAgICBjb250ZW50X2xlbmd0aF9i
ZWZvcmVfaGVhZGVyX2NoZWNrID0gYmxvY2suX2NvbnRlbnRfbGVuZ3RoCi0gICAgICAgICAgICAg
ICAgc2VsZi5fcHJvY2Vzc19zdGRvdXRfbGluZShibG9jaywgb3V0X2xpbmUpCi0gICAgICAgICAg
ICAgICAgIyBGSVhNRTogVW5saWtlIEhUVFAsIERSVCBkdW1wcyB0aGUgY29udGVudCByaWdodCBh
ZnRlciBwcmludGluZyBhIENvbnRlbnQtTGVuZ3RoIGhlYWRlci4KLSAgICAgICAgICAgICAgICAj
IERvbid0IHdhaXQgdW50aWwgd2UncmUgZG9uZSB3aXRoIGhlYWRlcnMsIGp1c3QgcmVhZCB0aGUg
YmluYXJ5IGJsb2IgcmlnaHQgbm93LgotICAgICAgICAgICAgICAgIGlmIGNvbnRlbnRfbGVuZ3Ro
X2JlZm9yZV9oZWFkZXJfY2hlY2sgIT0gYmxvY2suX2NvbnRlbnRfbGVuZ3RoOgotICAgICAgICAg
ICAgICAgICAgICBibG9jay5jb250ZW50ID0gc2VsZi5fc2VydmVyX3Byb2Nlc3MucmVhZF9zdGRv
dXQoZGVhZGxpbmUsIGJsb2NrLl9jb250ZW50X2xlbmd0aCkKLQotICAgICAgICAgICAgaWYgZXJy
X2xpbmU6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5fY2hlY2tfZm9yX2RyaXZlcl9jcmFzaChl
cnJfbGluZSk6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgc2Vs
Zi5lcnJvcl9mcm9tX3Rlc3QgKz0gZXJyX2xpbmUKLQotICAgICAgICBibG9jay5kZWNvZGVfY29u
dGVudCgpCi0gICAgICAgIHJldHVybiBibG9jawotCi0KLWNsYXNzIENvbnRlbnRCbG9jayhvYmpl
Y3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5jb250ZW50X3R5cGUg
PSBOb25lCi0gICAgICAgIHNlbGYuZW5jb2RpbmcgPSBOb25lCi0gICAgICAgIHNlbGYuY29udGVu
dF9oYXNoID0gTm9uZQotICAgICAgICBzZWxmLl9jb250ZW50X2xlbmd0aCA9IE5vbmUKLSAgICAg
ICAgIyBDb250ZW50IGlzIHRyZWF0ZWQgYXMgYmluYXJ5IGRhdGEgZXZlbiB0aG91Z2ggdGhlIHRl
eHQgb3V0cHV0IGlzIHVzdWFsbHkgVVRGLTguCi0gICAgICAgIHNlbGYuY29udGVudCA9IHN0cigp
ICAjIEZJWE1FOiBTaG91bGQgYmUgYnl0ZWFycmF5KCkgb25jZSB3ZSByZXF1aXJlIFB5dGhvbiAy
LjYuCi0gICAgICAgIHNlbGYuZGVjb2RlZF9jb250ZW50ID0gTm9uZQotICAgICAgICBzZWxmLm1h
bGxvYyA9IE5vbmUKLSAgICAgICAgc2VsZi5qc19oZWFwID0gTm9uZQotCi0gICAgZGVmIGRlY29k
ZV9jb250ZW50KHNlbGYpOgotICAgICAgICBpZiBzZWxmLmVuY29kaW5nID09ICdiYXNlNjQnIGFu
ZCBzZWxmLmNvbnRlbnQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmRlY29kZWRfY29u
dGVudCA9IGJhc2U2NC5iNjRkZWNvZGUoc2VsZi5jb250ZW50KQotICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgc2VsZi5kZWNvZGVkX2NvbnRlbnQgPSBzZWxmLmNvbnRlbnQKLQotY2xhc3MgRHJp
dmVyUHJveHkob2JqZWN0KToKLSAgICAiIiJBIHdyYXBwZXIgZm9yIG1hbmFnaW5nIHR3byBEcml2
ZXIgaW5zdGFuY2VzLCBvbmUgd2l0aCBwaXhlbCB0ZXN0cyBhbmQKLSAgICBvbmUgd2l0aG91dC4g
VGhpcyBhbGxvd3MgdXMgdG8gaGFuZGxlIHBsYWluIHRleHQgdGVzdHMgYW5kIHJlZiB0ZXN0cyB3
aXRoIGEKLSAgICBzaW5nbGUgZHJpdmVyLiIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBv
cnQsIHdvcmtlcl9udW1iZXIsIGRyaXZlcl9pbnN0YW5jZV9jb25zdHJ1Y3RvciwgcGl4ZWxfdGVz
dHMsIG5vX3RpbWVvdXQpOgotICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAotICAgICAgICBzZWxm
Ll93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgotICAgICAgICBzZWxmLl9kcml2ZXJfaW5z
dGFuY2VfY29uc3RydWN0b3IgPSBkcml2ZXJfaW5zdGFuY2VfY29uc3RydWN0b3IKLSAgICAgICAg
c2VsZi5fbm9fdGltZW91dCA9IG5vX3RpbWVvdXQKLQotICAgICAgICAjIEZJWE1FOiBXZSBzaG91
bGRuJ3QgbmVlZCB0byBjcmVhdGUgYSBkcml2ZXIgdW50aWwgd2UgYWN0dWFsbHkgcnVuIGEgdGVz
dC4KLSAgICAgICAgc2VsZi5fZHJpdmVyID0gc2VsZi5fbWFrZV9kcml2ZXIocGl4ZWxfdGVzdHMp
Ci0gICAgICAgIHNlbGYuX3J1bm5pbmdfZHJpdmVycyA9IHt9Ci0gICAgICAgIHNlbGYuX3J1bm5p
bmdfZHJpdmVyc1tzZWxmLl9jbWRfbGluZV9hc19rZXkocGl4ZWxfdGVzdHMsIFtdKV0gPSBzZWxm
Ll9kcml2ZXIKLQotICAgIGRlZiBfbWFrZV9kcml2ZXIoc2VsZiwgcGl4ZWxfdGVzdHMpOgotICAg
ICAgICByZXR1cm4gc2VsZi5fZHJpdmVyX2luc3RhbmNlX2NvbnN0cnVjdG9yKHNlbGYuX3BvcnQs
IHNlbGYuX3dvcmtlcl9udW1iZXIsIHBpeGVsX3Rlc3RzLCBzZWxmLl9ub190aW1lb3V0KQotCi0g
ICAgIyBGSVhNRTogdGhpcyBzaG91bGQgYmUgYSBAY2xhc3NtZXRob2QgKG9yIGltcGxlbWVudGVk
IG9uIFBvcnQgaW5zdGVhZCkuCi0gICAgZGVmIGlzX2h0dHBfdGVzdChzZWxmLCB0ZXN0X25hbWUp
OgotICAgICAgICByZXR1cm4gc2VsZi5fZHJpdmVyLmlzX2h0dHBfdGVzdCh0ZXN0X25hbWUpCi0K
LSAgICAjIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBhIEBjbGFzc21ldGhvZCAob3IgaW1wbGVtZW50
ZWQgb24gUG9ydCBpbnN0ZWFkKS4KLSAgICBkZWYgdGVzdF90b191cmkoc2VsZiwgdGVzdF9uYW1l
KToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2RyaXZlci50ZXN0X3RvX3VyaSh0ZXN0X25hbWUpCi0K
LSAgICAjIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBhIEBjbGFzc21ldGhvZCAob3IgaW1wbGVtZW50
ZWQgb24gUG9ydCBpbnN0ZWFkKS4KLSAgICBkZWYgdXJpX3RvX3Rlc3Qoc2VsZiwgdXJpKToKLSAg
ICAgICAgcmV0dXJuIHNlbGYuX2RyaXZlci51cmlfdG9fdGVzdCh1cmkpCi0KLSAgICBkZWYgcnVu
X3Rlc3Qoc2VsZiwgZHJpdmVyX2lucHV0LCBzdG9wX3doZW5fZG9uZSk6Ci0gICAgICAgIGJhc2Ug
PSBzZWxmLl9wb3J0Lmxvb2t1cF92aXJ0dWFsX3Rlc3RfYmFzZShkcml2ZXJfaW5wdXQudGVzdF9u
YW1lKQotICAgICAgICBpZiBiYXNlOgotICAgICAgICAgICAgdmlydHVhbF9kcml2ZXJfaW5wdXQg
PSBjb3B5LmNvcHkoZHJpdmVyX2lucHV0KQotICAgICAgICAgICAgdmlydHVhbF9kcml2ZXJfaW5w
dXQudGVzdF9uYW1lID0gYmFzZQotICAgICAgICAgICAgdmlydHVhbF9kcml2ZXJfaW5wdXQuYXJn
cyA9IHNlbGYuX3BvcnQubG9va3VwX3ZpcnR1YWxfdGVzdF9hcmdzKGRyaXZlcl9pbnB1dC50ZXN0
X25hbWUpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5ydW5fdGVzdCh2aXJ0dWFsX2RyaXZlcl9p
bnB1dCwgc3RvcF93aGVuX2RvbmUpCi0KLSAgICAgICAgcGl4ZWxfdGVzdHNfbmVlZGVkID0gZHJp
dmVyX2lucHV0LnNob3VsZF9ydW5fcGl4ZWxfdGVzdAotICAgICAgICBjbWRfbGluZV9rZXkgPSBz
ZWxmLl9jbWRfbGluZV9hc19rZXkocGl4ZWxfdGVzdHNfbmVlZGVkLCBkcml2ZXJfaW5wdXQuYXJn
cykKLSAgICAgICAgaWYgbm90IGNtZF9saW5lX2tleSBpbiBzZWxmLl9ydW5uaW5nX2RyaXZlcnM6
Ci0gICAgICAgICAgICBzZWxmLl9ydW5uaW5nX2RyaXZlcnNbY21kX2xpbmVfa2V5XSA9IHNlbGYu
X21ha2VfZHJpdmVyKHBpeGVsX3Rlc3RzX25lZWRlZCkKLQotICAgICAgICByZXR1cm4gc2VsZi5f
cnVubmluZ19kcml2ZXJzW2NtZF9saW5lX2tleV0ucnVuX3Rlc3QoZHJpdmVyX2lucHV0LCBzdG9w
X3doZW5fZG9uZSkKLQotICAgIGRlZiBoYXNfY3Jhc2hlZChzZWxmKToKLSAgICAgICAgcmV0dXJu
IGFueShkcml2ZXIuaGFzX2NyYXNoZWQoKSBmb3IgZHJpdmVyIGluIHNlbGYuX3J1bm5pbmdfZHJp
dmVycy52YWx1ZXMoKSkKLQotICAgIGRlZiBzdG9wKHNlbGYpOgotICAgICAgICBmb3IgZHJpdmVy
IGluIHNlbGYuX3J1bm5pbmdfZHJpdmVycy52YWx1ZXMoKToKLSAgICAgICAgICAgIGRyaXZlci5z
dG9wKCkKLQotICAgICMgRklYTUU6IHRoaXMgc2hvdWxkIGJlIGEgQGNsYXNzbWV0aG9kIChvciBp
bXBsZW1lbnRlZCBvbiBQb3J0IGluc3RlYWQpLgotICAgIGRlZiBjbWRfbGluZShzZWxmLCBwaXhl
bF90ZXN0cz1Ob25lLCBwZXJfdGVzdF9hcmdzPU5vbmUpOgotICAgICAgICByZXR1cm4gc2VsZi5f
ZHJpdmVyLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzIG9yIFtdKQotCi0gICAg
ZGVmIF9jbWRfbGluZV9hc19rZXkoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgot
ICAgICAgICByZXR1cm4gJyAnLmpvaW4oc2VsZi5jbWRfbGluZShwaXhlbF90ZXN0cywgcGVyX3Rl
c3RfYXJncykpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2RyaXZlcl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlcl91bml0dGVzdC5weQkocmV2aXNpb24gMTQ4NDk3KQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXJfdW5pdHRl
c3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMjY5ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1p
bXBvcnQgdW5pdHRlc3QyIGFzIHVuaXR0ZXN0Ci0KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0Ci0KLWZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IFBvcnQsIERyaXZlciwgRHJpdmVyT3V0cHV0Ci1mcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LnNlcnZlcl9wcm9jZXNzX21vY2sgaW1wb3J0IE1v
Y2tTZXJ2ZXJQcm9jZXNzCi0KLSMgRklYTUU6IHJlbW92ZSB0aGUgZGVwZW5kZW5jeSBvbiBUZXN0
V2ViS2l0UG9ydAotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5wb3J0X3Rlc3RjYXNl
IGltcG9ydCBUZXN0V2ViS2l0UG9ydAotCi1mcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1w
b3J0IE1vY2tPcHRpb25zCi0KLQotY2xhc3MgRHJpdmVyT3V0cHV0VGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6Ci0gICAgZGVmIHRlc3Rfc3RyaXBfbWV0cmljcyhzZWxmKToKLSAgICAgICAgcGF0dGVy
bnMgPSBbCi0gICAgICAgICAgICAoJ1JlbmRlclZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwJywg
J1JlbmRlclZpZXcgJyksCi0gICAgICAgICAgICAoJ3RleHQgcnVuIGF0ICgwLDApIHdpZHRoIDEw
MDogInNvbWUgdGV4dCInLCAnInNvbWUgdGV4dCInKSwKLSAgICAgICAgICAgICgnUmVuZGVyQmxv
Y2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAweDYwMCcsICdSZW5kZXJCbG9jayB7SFRNTH0gJyks
Ci0gICAgICAgICAgICAoJ1JlbmRlckJsb2NrIHtJTlBVVH0gYXQgKDI5LDMpIHNpemUgMTJ4MTIg
W2NvbG9yPSMwMDAwMDBdJywgJ1JlbmRlckJsb2NrIHtJTlBVVH0nKSwKLQotICAgICAgICAgICAg
KCdSZW5kZXJCbG9jayAoZmxvYXRpbmcpIHtEVH0gYXQgKDUsNSkgc2l6ZSA3OXgzMTAgW2JvcmRl
cjogKDVweCBzb2xpZCAjMDAwMDAwKV0nLAotICAgICAgICAgICAgJ1JlbmRlckJsb2NrIChmbG9h
dGluZykge0RUfSBbYm9yZGVyOiBweCBzb2xpZCAjMDAwMDAwKV0nKSwKLQotICAgICAgICAgICAg
KCdcbiAgICAidHJ1bmNhdGUgdGV4dCAgICAiXG4nLCAnXG4gICAgInRydW5jYXRlIHRleHQiXG4n
KSwKLQotICAgICAgICAgICAgKCdSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMykgc2l6ZSA0MXgx
MlxuICAgIHRleHQgcnVuIGF0ICgwLDMpIHdpZHRoIDQxOiAid2hpbXBlciAiXG4nLAotICAgICAg
ICAgICAgJ1JlbmRlclRleHQgeyN0ZXh0fSBcbiAgICAid2hpbXBlciJcbicpLAotCi0gICAgICAg
ICAgICAoIiIidGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMTA5OiAiLm9uZSB7Y29sb3I6IGdyZWVu
O30iCi0gICAgICAgICAgdGV4dCBydW4gYXQgKDEwOSwwKSB3aWR0aCAwOiAiICIKLSAgICAgICAg
ICB0ZXh0IHJ1biBhdCAoMCwxNykgd2lkdGggODE6ICIuMSB7Y29sb3I6IHJlZDt9IgotICAgICAg
ICAgIHRleHQgcnVuIGF0ICg4MSwxNykgd2lkdGggMDogIiAiCi0gICAgICAgICAgdGV4dCBydW4g
YXQgKDAsMzQpIHdpZHRoIDEwMjogIi5hMSB7Y29sb3I6IGdyZWVuO30iCi0gICAgICAgICAgdGV4
dCBydW4gYXQgKDEwMiwzNCkgd2lkdGggMDogIiAiCi0gICAgICAgICAgdGV4dCBydW4gYXQgKDAs
NTEpIHdpZHRoIDEyMDogIlAudHdvIHtjb2xvcjogcHVycGxlO30iCi0gICAgICAgICAgdGV4dCBy
dW4gYXQgKDEyMCw1MSkgd2lkdGggMDogIiAiXG4iIiIsCi0gICAgICAgICAgICAnIi5vbmUge2Nv
bG9yOiBncmVlbjt9ICAuMSB7Y29sb3I6IHJlZDt9ICAuYTEge2NvbG9yOiBncmVlbjt9ICBQLnR3
byB7Y29sb3I6IHB1cnBsZTt9IlxuJyksCi0KLSAgICAgICAgICAgICgndGV4dC0tIG90aGVyIHRl
eHQnLCAndGV4dC0tb3RoZXIgdGV4dCcpLAotCi0gICAgICAgICAgICAoJyBzb21lIG91dHB1dCAg
ICJ0cnVuY2F0ZSB0cmFpbGluZyBzcGFjZXMgYXQgZW5kIG9mIGxpbmUgYWZ0ZXIgdGV4dCIgICBc
bicsCi0gICAgICAgICAgICAnIHNvbWUgb3V0cHV0ICAgInRydW5jYXRlIHRyYWlsaW5nIHNwYWNl
cyBhdCBlbmQgb2YgbGluZSBhZnRlciB0ZXh0IlxuJyksCi0KLSAgICAgICAgICAgIChyJ3Njcm9s
bFdpZHRoIDEyMCcsIHInc2Nyb2xsV2lkdGgnKSwKLSAgICAgICAgICAgIChyJ3Njcm9sbEhlaWdo
dCAxMjAnLCByJ3Njcm9sbEhlaWdodCcpLAotICAgICAgICBdCi0KLSAgICAgICAgZm9yIHBhdHRl
cm4gaW4gcGF0dGVybnM6Ci0gICAgICAgICAgICBkcml2ZXJfb3V0cHV0ID0gRHJpdmVyT3V0cHV0
KHBhdHRlcm5bMF0sIE5vbmUsIE5vbmUsIE5vbmUpCi0gICAgICAgICAgICBkcml2ZXJfb3V0cHV0
LnN0cmlwX21ldHJpY3MoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkcml2ZXJfb3V0
cHV0LnRleHQsIHBhdHRlcm5bMV0pCi0KLQotY2xhc3MgRHJpdmVyVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6Ci0gICAgZGVmIG1ha2VfcG9ydChzZWxmKToKLSAgICAgICAgcG9ydCA9IFBvcnQoTW9j
a1N5c3RlbUhvc3QoKSwgJ3Rlc3QnLCBNb2NrT3B0aW9ucyhjb25maWd1cmF0aW9uPSdSZWxlYXNl
JykpCi0gICAgICAgIHBvcnQuX2NvbmZpZy5idWlsZF9kaXJlY3RvcnkgPSBsYW1iZGEgY29uZmln
dXJhdGlvbjogJy9tb2NrLWJ1aWxkJwotICAgICAgICByZXR1cm4gcG9ydAotCi0gICAgZGVmIF9h
c3NlcnRfd3JhcHBlcihzZWxmLCB3cmFwcGVyX3N0cmluZywgZXhwZWN0ZWRfd3JhcHBlcik6Ci0g
ICAgICAgIHdyYXBwZXIgPSBEcml2ZXIoc2VsZi5tYWtlX3BvcnQoKSwgTm9uZSwgcGl4ZWxfdGVz
dHM9RmFsc2UpLl9jb21tYW5kX3dyYXBwZXIod3JhcHBlcl9zdHJpbmcpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwod3JhcHBlciwgZXhwZWN0ZWRfd3JhcHBlcikKLQotICAgIGRlZiB0ZXN0X2Nv
bW1hbmRfd3JhcHBlcihzZWxmKToKLSAgICAgICAgc2VsZi5fYXNzZXJ0X3dyYXBwZXIoTm9uZSwg
W10pCi0gICAgICAgIHNlbGYuX2Fzc2VydF93cmFwcGVyKCJ2YWxncmluZCIsIFsidmFsZ3JpbmQi
XSkKLQotICAgICAgICAjIFZhbGlkYXRlIHRoYXQgc2hsZXggd29ya3MgYXMgZXhwZWN0ZWQuCi0g
ICAgICAgIGNvbW1hbmRfd2l0aF9zcGFjZXMgPSAidmFsZ3JpbmQgLS1zbWMtY2hlY2s9XCJjaGVj
ayB3aXRoIHNwYWNlcyFcIiAtLWZvbyIKLSAgICAgICAgZXhwZWN0ZWRfcGFyc2UgPSBbInZhbGdy
aW5kIiwgIi0tc21jLWNoZWNrPWNoZWNrIHdpdGggc3BhY2VzISIsICItLWZvbyJdCi0gICAgICAg
IHNlbGYuX2Fzc2VydF93cmFwcGVyKGNvbW1hbmRfd2l0aF9zcGFjZXMsIGV4cGVjdGVkX3BhcnNl
KQotCi0gICAgZGVmIHRlc3RfdGVzdF90b191cmkoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxm
Lm1ha2VfcG9ydCgpCi0gICAgICAgIGRyaXZlciA9IERyaXZlcihwb3J0LCBOb25lLCBwaXhlbF90
ZXN0cz1GYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkcml2ZXIudGVzdF90b191cmko
J2Zvby9iYXIuaHRtbCcpLCAnZmlsZTovLyVzL2Zvby9iYXIuaHRtbCcgJSBwb3J0LmxheW91dF90
ZXN0c19kaXIoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkcml2ZXIudGVzdF90b191cmko
J2h0dHAvdGVzdHMvZm9vLmh0bWwnKSwgJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9mb28uaHRtbCcp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHJpdmVyLnRlc3RfdG9fdXJpKCdodHRwL3Rlc3Rz
L3NzbC9iYXIuaHRtbCcpLCAnaHR0cHM6Ly8xMjcuMC4wLjE6ODQ0My9zc2wvYmFyLmh0bWwnKQot
Ci0gICAgZGVmIHRlc3RfdXJpX3RvX3Rlc3Qoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1h
a2VfcG9ydCgpCi0gICAgICAgIGRyaXZlciA9IERyaXZlcihwb3J0LCBOb25lLCBwaXhlbF90ZXN0
cz1GYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkcml2ZXIudXJpX3RvX3Rlc3QoJ2Zp
bGU6Ly8lcy9mb28vYmFyLmh0bWwnICUgcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkpLCAnZm9vL2Jh
ci5odG1sJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkcml2ZXIudXJpX3RvX3Rlc3QoJ2h0
dHA6Ly8xMjcuMC4wLjE6ODAwMC9mb28uaHRtbCcpLCAnaHR0cC90ZXN0cy9mb28uaHRtbCcpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHJpdmVyLnVyaV90b190ZXN0KCdodHRwczovLzEyNy4w
LjAuMTo4NDQzL3NzbC9iYXIuaHRtbCcpLCAnaHR0cC90ZXN0cy9zc2wvYmFyLmh0bWwnKQotCi0g
ICAgZGVmIHRlc3RfcmVhZF9ibG9jayhzZWxmKToKLSAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQ
b3J0KCkKLSAgICAgICAgZHJpdmVyID0gRHJpdmVyKHBvcnQsIDAsIHBpeGVsX3Rlc3RzPUZhbHNl
KQotICAgICAgICBkcml2ZXIuX3NlcnZlcl9wcm9jZXNzID0gTW9ja1NlcnZlclByb2Nlc3MobGlu
ZXM9WwotICAgICAgICAgICAgJ0FjdHVhbEhhc2g6IGZvb2JhcicsCi0gICAgICAgICAgICAnQ29u
dGVudC1UeXBlOiBteV90eXBlJywKLSAgICAgICAgICAgICdDb250ZW50LVRyYW5zZmVyLUVuY29k
aW5nOiBub25lJywKLSAgICAgICAgICAgICIjRU9GIiwKLSAgICAgICAgXSkKLSAgICAgICAgY29u
dGVudF9ibG9jayA9IGRyaXZlci5fcmVhZF9ibG9jaygwKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGNvbnRlbnRfYmxvY2suY29udGVudF90eXBlLCAnbXlfdHlwZScpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoY29udGVudF9ibG9jay5lbmNvZGluZywgJ25vbmUnKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGNvbnRlbnRfYmxvY2suY29udGVudF9oYXNoLCAnZm9vYmFyJykKLSAgICAg
ICAgZHJpdmVyLl9zZXJ2ZXJfcHJvY2VzcyA9IE5vbmUKLQotICAgIGRlZiB0ZXN0X3JlYWRfYmlu
YXJ5X2Jsb2NrKHNlbGYpOgotICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAg
ICBkcml2ZXIgPSBEcml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKLSAgICAgICAgZHJp
dmVyLl9zZXJ2ZXJfcHJvY2VzcyA9IE1vY2tTZXJ2ZXJQcm9jZXNzKGxpbmVzPVsKLSAgICAgICAg
ICAgICdBY3R1YWxIYXNoOiBhY3R1YWwnLAotICAgICAgICAgICAgJ0V4cGVjdGVkSGFzaDogZXhw
ZWN0ZWQnLAotICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZTogaW1hZ2UvcG5nJywKLSAgICAgICAg
ICAgICdDb250ZW50LUxlbmd0aDogOScsCi0gICAgICAgICAgICAiMTIzNDU2NzgiLAotICAgICAg
ICAgICAgIiNFT0YiLAotICAgICAgICBdKQotICAgICAgICBjb250ZW50X2Jsb2NrID0gZHJpdmVy
Ll9yZWFkX2Jsb2NrKDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudF9ibG9jay5j
b250ZW50X3R5cGUsICdpbWFnZS9wbmcnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRl
bnRfYmxvY2suY29udGVudF9oYXNoLCAnYWN0dWFsJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChjb250ZW50X2Jsb2NrLmNvbnRlbnQsICcxMjM0NTY3OFxuJykKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChjb250ZW50X2Jsb2NrLmRlY29kZWRfY29udGVudCwgJzEyMzQ1Njc4XG4nKQotICAg
ICAgICBkcml2ZXIuX3NlcnZlcl9wcm9jZXNzID0gTm9uZQotCi0gICAgZGVmIHRlc3RfcmVhZF9i
YXNlNjRfYmxvY2soc2VsZik6Ci0gICAgICAgIHBvcnQgPSBUZXN0V2ViS2l0UG9ydCgpCi0gICAg
ICAgIGRyaXZlciA9IERyaXZlcihwb3J0LCAwLCBwaXhlbF90ZXN0cz1UcnVlKQotICAgICAgICBk
cml2ZXIuX3NlcnZlcl9wcm9jZXNzID0gTW9ja1NlcnZlclByb2Nlc3MobGluZXM9WwotICAgICAg
ICAgICAgJ0FjdHVhbEhhc2g6IGFjdHVhbCcsCi0gICAgICAgICAgICAnRXhwZWN0ZWRIYXNoOiBl
eHBlY3RlZCcsCi0gICAgICAgICAgICAnQ29udGVudC1UeXBlOiBpbWFnZS9wbmcnLAotICAgICAg
ICAgICAgJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NCcsCi0gICAgICAgICAgICAn
Q29udGVudC1MZW5ndGg6IDEyJywKLSAgICAgICAgICAgICdNVEl6TkRVMk56Z0sjRU9GJywKLSAg
ICAgICAgXSkKLSAgICAgICAgY29udGVudF9ibG9jayA9IGRyaXZlci5fcmVhZF9ibG9jaygwKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRfYmxvY2suY29udGVudF90eXBlLCAnaW1h
Z2UvcG5nJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50X2Jsb2NrLmNvbnRlbnRf
aGFzaCwgJ2FjdHVhbCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudF9ibG9jay5l
bmNvZGluZywgJ2Jhc2U2NCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudF9ibG9j
ay5jb250ZW50LCAnTVRJek5EVTJOemdLJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250
ZW50X2Jsb2NrLmRlY29kZWRfY29udGVudCwgJzEyMzQ1Njc4XG4nKQotCi0gICAgZGVmIHRlc3Rf
bm9fdGltZW91dChzZWxmKToKLSAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkKLSAgICAg
ICAgcG9ydC5fY29uZmlnLmJ1aWxkX2RpcmVjdG9yeSA9IGxhbWJkYSBjb25maWd1cmF0aW9uOiAn
L21vY2stYnVpbGQnCi0gICAgICAgIGRyaXZlciA9IERyaXZlcihwb3J0LCAwLCBwaXhlbF90ZXN0
cz1UcnVlLCBub190aW1lb3V0PVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHJpdmVy
LmNtZF9saW5lKFRydWUsIFtdKSwgWycvbW9jay1idWlsZC9EdW1wUmVuZGVyVHJlZScsICctLW5v
LXRpbWVvdXQnLCAnLSddKQotCi0gICAgZGVmIHRlc3RfY2hlY2tfZm9yX2RyaXZlcl9jcmFzaChz
ZWxmKToKLSAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkKLSAgICAgICAgZHJpdmVyID0g
RHJpdmVyKHBvcnQsIDAsIHBpeGVsX3Rlc3RzPVRydWUpCi0KLSAgICAgICAgY2xhc3MgRmFrZVNl
cnZlclByb2Nlc3Mob2JqZWN0KToKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjcmFz
aGVkKToKLSAgICAgICAgICAgICAgICBzZWxmLmNyYXNoZWQgPSBjcmFzaGVkCi0KLSAgICAgICAg
ICAgIGRlZiBwaWQoc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDEyMzQKLQotICAgICAg
ICAgICAgZGVmIG5hbWUoc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdGYWtlU2VydmVy
UHJvY2VzcycKLQotICAgICAgICAgICAgZGVmIGhhc19jcmFzaGVkKHNlbGYpOgotICAgICAgICAg
ICAgICAgIHJldHVybiBzZWxmLmNyYXNoZWQKLQotICAgICAgICAgICAgZGVmIHN0b3Aoc2VsZiwg
dGltZW91dCk6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGRlZiBhc3NlcnRfY3Jh
c2goZHJpdmVyLCBlcnJvcl9saW5lLCBjcmFzaGVkLCBuYW1lLCBwaWQsIHVucmVzcG9uc2l2ZT1G
YWxzZSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRyaXZlci5fY2hlY2tfZm9yX2Ry
aXZlcl9jcmFzaChlcnJvcl9saW5lKSwgY3Jhc2hlZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoZHJpdmVyLl9jcmFzaGVkX3Byb2Nlc3NfbmFtZSwgbmFtZSkKLSAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoZHJpdmVyLl9jcmFzaGVkX3BpZCwgcGlkKQotICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChkcml2ZXIuX3N1YnByb2Nlc3Nfd2FzX3VucmVzcG9uc2l2ZSwgdW5yZXNw
b25zaXZlKQotICAgICAgICAgICAgZHJpdmVyLnN0b3AoKQotCi0gICAgICAgIGRyaXZlci5fc2Vy
dmVyX3Byb2Nlc3MgPSBGYWtlU2VydmVyUHJvY2VzcyhGYWxzZSkKLSAgICAgICAgYXNzZXJ0X2Ny
YXNoKGRyaXZlciwgJycsIEZhbHNlLCBOb25lLCBOb25lKQotCi0gICAgICAgIGRyaXZlci5fY3Jh
c2hlZF9wcm9jZXNzX25hbWUgPSBOb25lCi0gICAgICAgIGRyaXZlci5fY3Jhc2hlZF9waWQgPSBO
b25lCi0gICAgICAgIGRyaXZlci5fc2VydmVyX3Byb2Nlc3MgPSBGYWtlU2VydmVyUHJvY2VzcyhG
YWxzZSkKLSAgICAgICAgZHJpdmVyLl9zdWJwcm9jZXNzX3dhc191bnJlc3BvbnNpdmUgPSBGYWxz
ZQotICAgICAgICBhc3NlcnRfY3Jhc2goZHJpdmVyLCAnI0NSQVNIRURcbicsIFRydWUsICdGYWtl
U2VydmVyUHJvY2VzcycsIDEyMzQpCi0KLSAgICAgICAgZHJpdmVyLl9jcmFzaGVkX3Byb2Nlc3Nf
bmFtZSA9IE5vbmUKLSAgICAgICAgZHJpdmVyLl9jcmFzaGVkX3BpZCA9IE5vbmUKLSAgICAgICAg
ZHJpdmVyLl9zZXJ2ZXJfcHJvY2VzcyA9IEZha2VTZXJ2ZXJQcm9jZXNzKEZhbHNlKQotICAgICAg
ICBkcml2ZXIuX3N1YnByb2Nlc3Nfd2FzX3VucmVzcG9uc2l2ZSA9IEZhbHNlCi0gICAgICAgIGFz
c2VydF9jcmFzaChkcml2ZXIsICcjQ1JBU0hFRCAtIFdlYlByb2Nlc3NcbicsIFRydWUsICdXZWJQ
cm9jZXNzJywgTm9uZSkKLQotICAgICAgICBkcml2ZXIuX2NyYXNoZWRfcHJvY2Vzc19uYW1lID0g
Tm9uZQotICAgICAgICBkcml2ZXIuX2NyYXNoZWRfcGlkID0gTm9uZQotICAgICAgICBkcml2ZXIu
X3NlcnZlcl9wcm9jZXNzID0gRmFrZVNlcnZlclByb2Nlc3MoRmFsc2UpCi0gICAgICAgIGRyaXZl
ci5fc3VicHJvY2Vzc193YXNfdW5yZXNwb25zaXZlID0gRmFsc2UKLSAgICAgICAgYXNzZXJ0X2Ny
YXNoKGRyaXZlciwgJyNDUkFTSEVEIC0gV2ViUHJvY2VzcyAocGlkIDg2NzUpXG4nLCBUcnVlLCAn
V2ViUHJvY2VzcycsIDg2NzUpCi0KLSAgICAgICAgZHJpdmVyLl9jcmFzaGVkX3Byb2Nlc3NfbmFt
ZSA9IE5vbmUKLSAgICAgICAgZHJpdmVyLl9jcmFzaGVkX3BpZCA9IE5vbmUKLSAgICAgICAgZHJp
dmVyLl9zZXJ2ZXJfcHJvY2VzcyA9IEZha2VTZXJ2ZXJQcm9jZXNzKEZhbHNlKQotICAgICAgICBk
cml2ZXIuX3N1YnByb2Nlc3Nfd2FzX3VucmVzcG9uc2l2ZSA9IEZhbHNlCi0gICAgICAgIGFzc2Vy
dF9jcmFzaChkcml2ZXIsICcjUFJPQ0VTUyBVTlJFU1BPTlNJVkUgLSBXZWJQcm9jZXNzIChwaWQg
ODY3NSlcbicsIFRydWUsICdXZWJQcm9jZXNzJywgODY3NSwgVHJ1ZSkKLQotICAgICAgICBkcml2
ZXIuX2NyYXNoZWRfcHJvY2Vzc19uYW1lID0gTm9uZQotICAgICAgICBkcml2ZXIuX2NyYXNoZWRf
cGlkID0gTm9uZQotICAgICAgICBkcml2ZXIuX3NlcnZlcl9wcm9jZXNzID0gRmFrZVNlcnZlclBy
b2Nlc3MoRmFsc2UpCi0gICAgICAgIGRyaXZlci5fc3VicHJvY2Vzc193YXNfdW5yZXNwb25zaXZl
ID0gRmFsc2UKLSAgICAgICAgYXNzZXJ0X2NyYXNoKGRyaXZlciwgJyNDUkFTSEVEIC0gcmVuZGVy
ZXIgKHBpZCA4Njc1KVxuJywgVHJ1ZSwgJ3JlbmRlcmVyJywgODY3NSkKLQotICAgICAgICBkcml2
ZXIuX2NyYXNoZWRfcHJvY2Vzc19uYW1lID0gTm9uZQotICAgICAgICBkcml2ZXIuX2NyYXNoZWRf
cGlkID0gTm9uZQotICAgICAgICBkcml2ZXIuX3NlcnZlcl9wcm9jZXNzID0gRmFrZVNlcnZlclBy
b2Nlc3MoVHJ1ZSkKLSAgICAgICAgZHJpdmVyLl9zdWJwcm9jZXNzX3dhc191bnJlc3BvbnNpdmUg
PSBGYWxzZQotICAgICAgICBhc3NlcnRfY3Jhc2goZHJpdmVyLCAnJywgVHJ1ZSwgJ0Zha2VTZXJ2
ZXJQcm9jZXNzJywgMTIzNCkKLQotICAgIGRlZiB0ZXN0X2NyZWF0aW5nX2FfcG9ydF9kb2VzX25v
dF93cml0ZV90b190aGVfZmlsZXN5c3RlbShzZWxmKToKLSAgICAgICAgcG9ydCA9IFRlc3RXZWJL
aXRQb3J0KCkKLSAgICAgICAgZHJpdmVyID0gRHJpdmVyKHBvcnQsIDAsIHBpeGVsX3Rlc3RzPVRy
dWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5fZmlsZXN5c3RlbS53cml0dGVuX2Zp
bGVzLCB7fSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0Ll9maWxlc3lzdGVtLmxhc3Rf
dG1wZGlyLCBOb25lKQotCi0gICAgZGVmIHRlc3Rfc3RvcF9jbGVhbnNfdXBfcHJvcGVybHkoc2Vs
Zik6Ci0gICAgICAgIHBvcnQgPSBUZXN0V2ViS2l0UG9ydCgpCi0gICAgICAgIHBvcnQuX3NlcnZl
cl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZlclByb2Nlc3MKLSAgICAgICAgZHJpdmVy
ID0gRHJpdmVyKHBvcnQsIDAsIHBpeGVsX3Rlc3RzPVRydWUpCi0gICAgICAgIGRyaXZlci5zdGFy
dChUcnVlLCBbXSkKLSAgICAgICAgbGFzdF90bXBkaXIgPSBwb3J0Ll9maWxlc3lzdGVtLmxhc3Rf
dG1wZGlyCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGxhc3RfdG1wZGlyLCBOb25lKQot
ICAgICAgICBkcml2ZXIuc3RvcCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5fZmls
ZXN5c3RlbS5pc2RpcihsYXN0X3RtcGRpcikpCi0KLSAgICBkZWYgdGVzdF90d29fc3RhcnRzX2Ns
ZWFuc191cF9wcm9wZXJseShzZWxmKToKLSAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkK
LSAgICAgICAgcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJv
Y2VzcwotICAgICAgICBkcml2ZXIgPSBEcml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1ZSkK
LSAgICAgICAgZHJpdmVyLnN0YXJ0KFRydWUsIFtdKQotICAgICAgICBsYXN0X3RtcGRpciA9IHBv
cnQuX2ZpbGVzeXN0ZW0ubGFzdF90bXBkaXIKLSAgICAgICAgZHJpdmVyLl9zdGFydChUcnVlLCBb
XSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0Ll9maWxlc3lzdGVtLmlzZGlyKGxhc3Rf
dG1wZGlyKSkKLQotICAgIGRlZiB0ZXN0X3N0YXJ0X2FjdHVhbGx5X3N0YXJ0cyhzZWxmKToKLSAg
ICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkKLSAgICAgICAgcG9ydC5fc2VydmVyX3Byb2Nl
c3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcwotICAgICAgICBkcml2ZXIgPSBEcml2
ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKLSAgICAgICAgZHJpdmVyLnN0YXJ0KFRydWUs
IFtdKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZHJpdmVyLl9zZXJ2ZXJfcHJvY2Vzcy5zdGFy
dGVkKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9lZmwu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9lZmwucHkJKHJldmlzaW9uIDE0ODQ5NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvZWZsLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzNiArMCwwIEBACi0j
IENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04gRW1iZWRkZWQgU3lzdGVtcy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlv
bgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0
aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LSIiIldlYktpdCBFZmwgaW1wbGVtZW50YXRpb24gb2YgdGhlIFBvcnQgaW50ZXJmYWNlLiIiIgot
Ci1pbXBvcnQgb3MKLQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfY29u
ZmlndXJhdGlvbiBpbXBvcnQgVGVzdENvbmZpZ3VyYXRpb24KLWZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLnBvcnQuYmFzZSBpbXBvcnQgUG9ydAotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
cG9ydC5wdWxzZWF1ZGlvX3Nhbml0aXplciBpbXBvcnQgUHVsc2VBdWRpb1Nhbml0aXplcgotZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC54dmZiZHJpdmVyIGltcG9ydCBYdmZiRHJpdmVy
Ci0KLQotY2xhc3MgRWZsUG9ydChQb3J0KToKLSAgICBwb3J0X25hbWUgPSAnZWZsJwotCi0gICAg
ZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIHN1cGVyKEVmbFBv
cnQsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKLQotICAgICAgICBzZWxmLl9qaGJ1
aWxkX3dyYXBwZXJfcGF0aCA9IFtzZWxmLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnVG9vbHMnLCAn
amhidWlsZCcsICdqaGJ1aWxkLXdyYXBwZXInKSwgJy0tZWZsJywgJ3J1biddCi0KLSAgICAgICAg
c2VsZi5zZXRfb3B0aW9uX2RlZmF1bHQoJ3dyYXBwZXInLCAnICcuam9pbihzZWxmLl9qaGJ1aWxk
X3dyYXBwZXJfcGF0aCkpCi0gICAgICAgIHNlbGYud2VicHJvY2Vzc19jbWRfcHJlZml4ID0gc2Vs
Zi5nZXRfb3B0aW9uKCd3ZWJwcm9jZXNzX2NtZF9wcmVmaXgnKQotCi0gICAgICAgIHNlbGYuX3B1
bHNlYXVkaW9fc2FuaXRpemVyID0gUHVsc2VBdWRpb1Nhbml0aXplcigpCi0KLSAgICBkZWYgX3Bv
cnRfZmxhZ19mb3Jfc2NyaXB0cyhzZWxmKToKLSAgICAgICAgcmV0dXJuICItLWVmbCIKLQotICAg
IGRlZiBzZXR1cF90ZXN0X3J1bihzZWxmKToKLSAgICAgICAgc3VwZXIoRWZsUG9ydCwgc2VsZiku
c2V0dXBfdGVzdF9ydW4oKQotICAgICAgICBzZWxmLl9wdWxzZWF1ZGlvX3Nhbml0aXplci51bmxv
YWRfcHVsc2VhdWRpb19tb2R1bGUoKQotCi0gICAgZGVmIHNldHVwX2Vudmlyb25fZm9yX3NlcnZl
cihzZWxmLCBzZXJ2ZXJfbmFtZT1Ob25lKToKLSAgICAgICAgZW52ID0gc3VwZXIoRWZsUG9ydCwg
c2VsZikuc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKHNlcnZlcl9uYW1lKQotCi0gICAgICAgICMg
SWYgRElTUExBWSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyB1bnNldCBpbiB0aGUgc3lzdGVtCi0g
ICAgICAgICMgZS5nLiBvbiBidWlsZCBib3QsIHJlbW92ZSBESVNQTEFZIHZhcmlhYmxlIGZyb20g
dGhlIGRpY3Rpb25hcnkKLSAgICAgICAgaWYgbm90ICdESVNQTEFZJyBpbiBvcy5lbnZpcm9uOgot
ICAgICAgICAgICAgZGVsIGVudlsnRElTUExBWSddCi0KLSAgICAgICAgZW52WydURVNUX1JVTk5F
Ul9JTkpFQ1RFRF9CVU5ETEVfRklMRU5BTUUnXSA9IHNlbGYuX2J1aWxkX3BhdGgoJ2xpYicsICds
aWJUZXN0UnVubmVySW5qZWN0ZWRCdW5kbGUuc28nKQotICAgICAgICBlbnZbJ1RFU1RfUlVOTkVS
X1BMVUdJTl9QQVRIJ10gPSBzZWxmLl9idWlsZF9wYXRoKCdsaWInKQotCi0gICAgICAgICMgU2ls
ZW5jZSBHSU8gd2FybmluZ3MgYWJvdXQgdXNpbmcgdGhlICJtZW1vcnkiIEdTZXR0aW5ncyBiYWNr
ZW5kLgotICAgICAgICBlbnZbJ0dTRVRUSU5HU19CQUNLRU5EJ10gPSAnbWVtb3J5JwotCi0gICAg
ICAgIGlmIHNlbGYud2VicHJvY2Vzc19jbWRfcHJlZml4OgotICAgICAgICAgICAgZW52WydXRUJf
UFJPQ0VTU19DTURfUFJFRklYJ10gPSBzZWxmLndlYnByb2Nlc3NfY21kX3ByZWZpeAotCi0gICAg
ICAgIHJldHVybiBlbnYKLQotICAgIGRlZiBkZWZhdWx0X3RpbWVvdXRfbXMoc2VsZik6Ci0gICAg
ICAgICMgVGVzdHMgcnVuIGNvbnNpZGVyYWJseSBzbG93ZXIgdW5kZXIgZ2RiCi0gICAgICAgICMg
b3IgdmFsZ3JpbmQuCi0gICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2VicHJvY2Vzc19jbWRf
cHJlZml4Jyk6Ci0gICAgICAgICAgICByZXR1cm4gMzUwICogMTAwMAotICAgICAgICByZXR1cm4g
c3VwZXIoRWZsUG9ydCwgc2VsZikuZGVmYXVsdF90aW1lb3V0X21zKCkKLQotICAgIGRlZiBjbGVh
bl91cF90ZXN0X3J1bihzZWxmKToKLSAgICAgICAgc3VwZXIoRWZsUG9ydCwgc2VsZikuY2xlYW5f
dXBfdGVzdF9ydW4oKQotICAgICAgICBzZWxmLl9wdWxzZWF1ZGlvX3Nhbml0aXplci5yZXN0b3Jl
X3B1bHNlYXVkaW9fbW9kdWxlKCkKLQotICAgIGRlZiBfZ2VuZXJhdGVfYWxsX3Rlc3RfY29uZmln
dXJhdGlvbnMoc2VsZik6Ci0gICAgICAgIHJldHVybiBbVGVzdENvbmZpZ3VyYXRpb24odmVyc2lv
bj1zZWxmLl92ZXJzaW9uLCBhcmNoaXRlY3R1cmU9J3g4NicsIGJ1aWxkX3R5cGU9YnVpbGRfdHlw
ZSkgZm9yIGJ1aWxkX3R5cGUgaW4gc2VsZi5BTExfQlVJTERfVFlQRVNdCi0KLSAgICBkZWYgX2Ry
aXZlcl9jbGFzcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFh2ZmJEcml2ZXIKLQotICAgIGRlZiBf
cGF0aF90b19kcml2ZXIoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCdi
aW4nLCBzZWxmLmRyaXZlcl9uYW1lKCkpCi0KLSAgICBkZWYgX3BhdGhfdG9faW1hZ2VfZGlmZihz
ZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ2JpbicsICdJbWFnZURpZmYn
KQotCi0gICAgZGVmIF9pbWFnZV9kaWZmX2NvbW1hbmQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToK
LSAgICAgICAgcmV0dXJuIHNlbGYuX2poYnVpbGRfd3JhcHBlcl9wYXRoICsgc3VwZXIoRWZsUG9y
dCwgc2VsZikuX2ltYWdlX2RpZmZfY29tbWFuZCgqYXJncywgKiprd2FyZ3MpCi0KLSAgICBkZWYg
X3BhdGhfdG9fd2ViY29yZV9saWJyYXJ5KHNlbGYpOgotICAgICAgICBzdGF0aWNfcGF0aCA9IHNl
bGYuX2J1aWxkX3BhdGgoJ2xpYicsICdsaWJ3ZWJjb3JlX2VmbC5hJykKLSAgICAgICAgZHluX3Bh
dGggPSBzZWxmLl9idWlsZF9wYXRoKCdsaWInLCAnbGlid2ViY29yZV9lZmwuc28nKQotICAgICAg
ICByZXR1cm4gc3RhdGljX3BhdGggaWYgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoc3RhdGljX3Bh
dGgpIGVsc2UgZHluX3BhdGgKLQotICAgIGRlZiBfc2VhcmNoX3BhdGhzKHNlbGYpOgotICAgICAg
ICBzZWFyY2hfcGF0aHMgPSBbXQotICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3dlYmtpdF90
ZXN0X3J1bm5lcicpOgotICAgICAgICAgICAgc2VhcmNoX3BhdGhzLmFwcGVuZChzZWxmLnBvcnRf
bmFtZSArICctd2syJykKLSAgICAgICAgICAgIHNlYXJjaF9wYXRocy5hcHBlbmQoJ3drMicpCi0g
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWFyY2hfcGF0aHMuYXBwZW5kKHNlbGYucG9ydF9u
YW1lICsgJy13azEnKQotICAgICAgICBzZWFyY2hfcGF0aHMuYXBwZW5kKHNlbGYucG9ydF9uYW1l
KQotICAgICAgICByZXR1cm4gc2VhcmNoX3BhdGhzCi0KLSAgICBkZWYgZGVmYXVsdF9iYXNlbGlu
ZV9zZWFyY2hfcGF0aChzZWxmKToKLSAgICAgICAgcmV0dXJuIG1hcChzZWxmLl93ZWJraXRfYmFz
ZWxpbmVfcGF0aCwgc2VsZi5fc2VhcmNoX3BhdGhzKCkpCi0KLSAgICBkZWYgX3BvcnRfc3BlY2lm
aWNfZXhwZWN0YXRpb25zX2ZpbGVzKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQg
YmUgYWJsZSB0byB1c2UgdGhlIGRlZmF1bHQgYWxnb3JpdGhtIGhlcmUuCi0gICAgICAgIHJldHVy
biBsaXN0KHJldmVyc2VkKFtzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fd2Via2l0X2Jhc2Vs
aW5lX3BhdGgocCksICdUZXN0RXhwZWN0YXRpb25zJykgZm9yIHAgaW4gc2VsZi5fc2VhcmNoX3Bh
dGhzKCldKSkKLQotICAgIGRlZiBzaG93X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYsIHJlc3VsdHNf
ZmlsZW5hbWUpOgotICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgZmluZCBhIHdheSB0byBzaGFy
ZSB0aGlzIGltcGxtZW50YXRpb24gd2l0aCBHdGssCi0gICAgICAgICMgb3IgdGVhY2ggcnVuLWxh
dW5jaGVyIGhvdyB0byBjYWxsIHJ1bi1zYWZhcmkgYW5kIG1vdmUgdGhpcyBkb3duIHRvIFdlYktp
dFBvcnQuCi0gICAgICAgIHJ1bl9sYXVuY2hlcl9hcmdzID0gWyJmaWxlOi8vJXMiICUgcmVzdWx0
c19maWxlbmFtZV0KLSAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9ydW5u
ZXInKToKLSAgICAgICAgICAgIHJ1bl9sYXVuY2hlcl9hcmdzLmFwcGVuZCgnLTInKQotICAgICAg
ICAjIEZJWE1FOiBvbGQtcnVuLXdlYmtpdC10ZXN0cyBhbHNvIGFkZGVkIFsiLWdyYXBoaWNzc3lz
dGVtIiwgInJhc3RlciIsICItc3R5bGUiLCAid2luZG93cyJdCi0gICAgICAgICMgRklYTUU6IG9s
ZC1ydW4td2Via2l0LXRlc3RzIGNvbnZlcnRlZCByZXN1bHRzX2ZpbGVuYW1lIHBhdGggZm9yIGN5
Z3dpbi4KLSAgICAgICAgc2VsZi5fcnVuX3NjcmlwdCgicnVuLWxhdW5jaGVyIiwgcnVuX2xhdW5j
aGVyX2FyZ3MpCi0KLSAgICBkZWYgY2hlY2tfc3lzX2RlcHMoc2VsZiwgbmVlZHNfaHR0cCk6Ci0g
ICAgICAgIHJldHVybiBzdXBlcihFZmxQb3J0LCBzZWxmKS5jaGVja19zeXNfZGVwcyhuZWVkc19o
dHRwKSBhbmQgWHZmYkRyaXZlci5jaGVja194dmZiKHNlbGYpCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2VmbF91bml0dGVzdC5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2VmbF91bml0dGVzdC5w
eQkocmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9lZmxfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNTAgKzAsMCBAQAot
IyBDb3B5cmlnaHQgKEMpIDIwMTEgUHJvRlVTSU9OIEVtYmVkZGVkIFN5c3RlbXMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBt
ZXQ6Ci0jCi0jICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgdW5pdHRlc3QyIGFzIHVuaXR0ZXN0Ci0KLWZyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmVfbW9jayBpbXBvcnQgTW9ja0V4ZWN1dGl2ZQot
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENh
cHR1cmUKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuZWZsIGltcG9ydCBFZmxQb3J0
Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LnB1bHNlYXVkaW9fc2FuaXRpemVyX21v
Y2sgaW1wb3J0IFB1bHNlQXVkaW9TYW5pdGl6ZXJNb2NrCi1mcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5wb3J0IGltcG9ydCBwb3J0X3Rlc3RjYXNlCi0KLQotY2xhc3MgRWZsUG9ydFRlc3QocG9y
dF90ZXN0Y2FzZS5Qb3J0VGVzdENhc2UpOgotICAgIHBvcnRfbmFtZSA9ICdlZmwnCi0gICAgcG9y
dF9tYWtlciA9IEVmbFBvcnQKLQotICAgICMgQWRkaXRpb25hbGx5IG1vY2tzIG91dCB0aGUgUHVs
c2VBdWRpb1Nhbml0aXplciBtZXRob2RzLgotICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwgaG9zdD1O
b25lLCBwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lLCBvc19uYW1lPU5vbmUsIG9zX3ZlcnNp
b249Tm9uZSwgKiprd2FyZ3MpOgotICAgICAgICBwb3J0ID0gc3VwZXIoRWZsUG9ydFRlc3QsIHNl
bGYpLm1ha2VfcG9ydChob3N0LCBwb3J0X25hbWUsIG9wdGlvbnMsIG9zX25hbWUsIG9zX3ZlcnNp
b24sICoqa3dhcmdzKQotICAgICAgICBwb3J0Ll9wdWxzZWF1ZGlvX3Nhbml0aXplciA9IFB1bHNl
QXVkaW9TYW5pdGl6ZXJNb2NrKCkKLSAgICAgICAgcmV0dXJuIHBvcnQKLQotICAgIGRlZiB0ZXN0
X3Nob3dfcmVzdWx0c19odG1sX2ZpbGUoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2Vf
cG9ydCgpCi0gICAgICAgIHBvcnQuX2V4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUoc2hvdWxkX2xv
Zz1UcnVlKQotICAgICAgICBleHBlY3RlZF9sb2dzID0gIk1PQ0sgcnVuX2NvbW1hbmQ6IFsnVG9v
bHMvU2NyaXB0cy9ydW4tbGF1bmNoZXInLCAnLS1yZWxlYXNlJywgJy0tZWZsJywgJ2ZpbGU6Ly90
ZXN0Lmh0bWwnXSwgY3dkPS9tb2NrLWNoZWNrb3V0XG4iCi0gICAgICAgIE91dHB1dENhcHR1cmUo
KS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBwb3J0LnNob3dfcmVzdWx0c19odG1sX2ZpbGUsIFsidGVz
dC5odG1sIl0sIGV4cGVjdGVkX2xvZ3M9ZXhwZWN0ZWRfbG9ncykKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHkJKHJldmlz
aW9uIDE0ODQ5NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
ZmFjdG9yeS5weQkod29ya2luZyBjb3B5KQpAQCAtMSwxMjggKzAsMCBAQAotIyBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLSIiIkZhY3RvcnkgbWV0aG9kIHRvIHJldHJpZXZlIHRoZSBhcHByb3ByaWF0ZSBwb3J0
IGltcGxlbWVudGF0aW9uLiIiIgotCi1pbXBvcnQgZm5tYXRjaAotaW1wb3J0IG9wdHBhcnNlCi1p
bXBvcnQgcmUKLQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgYnVpbGRl
cnMKLQotCi1kZWYgcGxhdGZvcm1fb3B0aW9ucyh1c2VfZ2xvYnM9RmFsc2UpOgotICAgIHJldHVy
biBbCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXBsYXRmb3JtJywgYWN0aW9uPSdz
dG9yZScsCi0gICAgICAgICAgICBoZWxwPSgnR2xvYi1zdHlsZSBsaXN0IG9mIHBsYXRmb3JtL3Bv
cnRzIHRvIHVzZSAoZS5nLiwgIm1hYyoiKScgaWYgdXNlX2dsb2JzIGVsc2UgJ1BsYXRmb3JtIHRv
IHVzZSAoZS5nLiwgIm1hYy1saW9uIiknKSksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9u
KCctLWVmbCcsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBkZXN0PSdwbGF0Zm9ybScsCi0gICAgICAg
ICAgICBjb25zdD0oJ2VmbConIGlmIHVzZV9nbG9icyBlbHNlICdlZmwnKSwKLSAgICAgICAgICAg
IGhlbHA9KCdBbGlhcyBmb3IgLS1wbGF0Zm9ybT1lZmwqJyBpZiB1c2VfZ2xvYnMgZWxzZSAnQWxp
YXMgZm9yIC0tcGxhdGZvcm09ZWZsJykpLAotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbign
LS1ndGsnLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgZGVzdD0ncGxhdGZvcm0nLAotICAgICAgICAg
ICAgY29uc3Q9KCdndGsqJyBpZiB1c2VfZ2xvYnMgZWxzZSAnZ3RrJyksCi0gICAgICAgICAgICBo
ZWxwPSgnQWxpYXMgZm9yIC0tcGxhdGZvcm09Z3RrKicgaWYgdXNlX2dsb2JzIGVsc2UgJ0FsaWFz
IGZvciAtLXBsYXRmb3JtPWd0aycpKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0t
cXQnLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgZGVzdD0icGxhdGZvcm0iLAotICAgICAgICAgICAg
Y29uc3Q9KCdxdConIGlmIHVzZV9nbG9icyBlbHNlICdxdCcpLAotICAgICAgICAgICAgaGVscD0o
J0FsaWFzIGZvciAtLXBsYXRmb3JtPXF0JyBpZiB1c2VfZ2xvYnMgZWxzZSAnQWxpYXMgZm9yIC0t
cGxhdGZvcm09cXQnKSksCi0gICAgICAgIF0KLQotCi1kZWYgY29uZmlndXJhdGlvbl9vcHRpb25z
KCk6Ci0gICAgcmV0dXJuIFsKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi10IiwgIi0t
dGFyZ2V0IiwgZGVzdD0iY29uZmlndXJhdGlvbiIsIGhlbHA9IihERVBSRUNBVEVEKSIpLAotICAg
ICAgICAjIEZJWE1FOiAtLWhlbHAgc2hvdWxkIGRpc3BsYXkgd2hpY2ggY29uZmlndXJhdGlvbiBp
cyBkZWZhdWx0LgotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1kZWJ1ZycsIGFjdGlv
bj0nc3RvcmVfY29uc3QnLCBjb25zdD0nRGVidWcnLCBkZXN0PSJjb25maWd1cmF0aW9uIiwKLSAg
ICAgICAgICAgIGhlbHA9J1NldCB0aGUgY29uZmlndXJhdGlvbiB0byBEZWJ1ZycpLAotICAgICAg
ICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1yZWxlYXNlJywgYWN0aW9uPSdzdG9yZV9jb25zdCcs
IGNvbnN0PSdSZWxlYXNlJywgZGVzdD0iY29uZmlndXJhdGlvbiIsCi0gICAgICAgICAgICBoZWxw
PSdTZXQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gUmVsZWFzZScpLAotICAgICAgICBvcHRwYXJzZS5t
YWtlX29wdGlvbignLS0zMi1iaXQnLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J3g4Nics
IGRlZmF1bHQ9Tm9uZSwgZGVzdD0iYXJjaGl0ZWN0dXJlIiwKLSAgICAgICAgICAgIGhlbHA9J3Vz
ZSAzMi1iaXQgYmluYXJpZXMgYnkgZGVmYXVsdCAoeDg2IGluc3RlYWQgb2YgeDg2XzY0KScpLAot
ICAgICAgICBdCi0KLQotCi1kZWYgX2J1aWxkZXJfb3B0aW9ucyhidWlsZGVyX25hbWUpOgotICAg
IGNvbmZpZ3VyYXRpb24gPSAiRGVidWciIGlmIHJlLnNlYXJjaChyIltkfERdKGVidXxiKWciLCBi
dWlsZGVyX25hbWUpIGVsc2UgIlJlbGVhc2UiCi0gICAgaXNfd2Via2l0MiA9IGJ1aWxkZXJfbmFt
ZS5maW5kKCJXSzIiKSAhPSAtMQotICAgIGJ1aWxkZXJfbmFtZSA9IGJ1aWxkZXJfbmFtZQotICAg
IHJldHVybiBvcHRwYXJzZS5WYWx1ZXMoeydidWlsZGVyX25hbWUnOiBidWlsZGVyX25hbWUsICdj
b25maWd1cmF0aW9uJzogY29uZmlndXJhdGlvbiwgJ3dlYmtpdF90ZXN0X3J1bm5lcic6IGlzX3dl
YmtpdDJ9KQotCi0KLWNsYXNzIFBvcnRGYWN0b3J5KG9iamVjdCk6Ci0gICAgUE9SVF9DTEFTU0VT
ID0gKAotICAgICAgICAnZWZsLkVmbFBvcnQnLAotICAgICAgICAnZ3RrLkd0a1BvcnQnLAotICAg
ICAgICAnbWFjLk1hY1BvcnQnLAotICAgICAgICAnbW9ja19kcnQuTW9ja0RSVFBvcnQnLAotICAg
ICAgICAncXQuUXRQb3J0JywKLSAgICAgICAgJ3Rlc3QuVGVzdFBvcnQnLAotICAgICAgICAnd2lu
LldpblBvcnQnLAotICAgICkKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0KToKLSAgICAg
ICAgc2VsZi5faG9zdCA9IGhvc3QKLQotICAgIGRlZiBfZGVmYXVsdF9wb3J0KHNlbGYsIG9wdGlv
bnMpOgotICAgICAgICBwbGF0Zm9ybSA9IHNlbGYuX2hvc3QucGxhdGZvcm0KLSAgICAgICAgaWYg
cGxhdGZvcm0uaXNfbGludXgoKSBvciBwbGF0Zm9ybS5pc19mcmVlYnNkKCk6Ci0gICAgICAgICAg
ICByZXR1cm4gJ3F0LWxpbnV4JwotICAgICAgICBlbGlmIHBsYXRmb3JtLmlzX21hYygpOgotICAg
ICAgICAgICAgcmV0dXJuICdtYWMnCi0gICAgICAgIGVsaWYgcGxhdGZvcm0uaXNfd2luKCk6Ci0g
ICAgICAgICAgICByZXR1cm4gJ3dpbicKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJv
cigndW5rbm93biBwbGF0Zm9ybTogJXMnICUgcGxhdGZvcm0pCi0KLSAgICBkZWYgZ2V0KHNlbGYs
IHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUsICoqa3dhcmdzKToKLSAgICAgICAgIiIiUmV0
dXJucyBhbiBvYmplY3QgaW1wbGVtZW50aW5nIHRoZSBQb3J0IGludGVyZmFjZS4gSWYKLSAgICAg
ICAgcG9ydF9uYW1lIGlzIE5vbmUsIHRoaXMgcm91dGluZSBhdHRlbXB0cyB0byBndWVzcyBhdCB0
aGUgbW9zdAotICAgICAgICBhcHByb3ByaWF0ZSBwb3J0IG9uIHRoaXMgcGxhdGZvcm0uIiIiCi0g
ICAgICAgIHBvcnRfbmFtZSA9IHBvcnRfbmFtZSBvciBzZWxmLl9kZWZhdWx0X3BvcnQob3B0aW9u
cykKLQotICAgICAgICBmb3IgcG9ydF9jbGFzcyBpbiBzZWxmLlBPUlRfQ0xBU1NFUzoKLSAgICAg
ICAgICAgIG1vZHVsZV9uYW1lLCBjbGFzc19uYW1lID0gcG9ydF9jbGFzcy5yc3BsaXQoJy4nLCAx
KQotICAgICAgICAgICAgbW9kdWxlID0gX19pbXBvcnRfXyhtb2R1bGVfbmFtZSwgZ2xvYmFscygp
LCBsb2NhbHMoKSwgW10sIC0xKQotICAgICAgICAgICAgY2xzID0gbW9kdWxlLl9fZGljdF9fW2Ns
YXNzX25hbWVdCi0gICAgICAgICAgICBpZiBwb3J0X25hbWUuc3RhcnRzd2l0aChjbHMucG9ydF9u
YW1lKToKLSAgICAgICAgICAgICAgICBwb3J0X25hbWUgPSBjbHMuZGV0ZXJtaW5lX2Z1bGxfcG9y
dF9uYW1lKHNlbGYuX2hvc3QsIG9wdGlvbnMsIHBvcnRfbmFtZSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gY2xzKHNlbGYuX2hvc3QsIHBvcnRfbmFtZSwgb3B0aW9ucz1vcHRpb25zLCAqKmt3YXJn
cykKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigndW5zdXBwb3J0ZWQgcGxhdGZv
cm06ICIlcyInICUgcG9ydF9uYW1lKQotCi0gICAgZGVmIGFsbF9wb3J0X25hbWVzKHNlbGYsIHBs
YXRmb3JtPU5vbmUpOgotICAgICAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIGFsbCB2YWxpZCwgZnVs
bHktc3BlY2lmaWVkLCAicmVhbCIgcG9ydCBuYW1lcy4KLQotICAgICAgICBUaGlzIGlzIHRoZSBs
aXN0IG9mIGRpcmVjdG9yaWVzIHRoYXQgYXJlIHVzZWQgYXMgYWN0dWFsIGJhc2VsaW5lX3BhdGhz
KCkKLSAgICAgICAgYnkgcmVhbCBwb3J0cy4gVGhpcyBkb2VzIG5vdCBpbmNsdWRlIGFueSAiZmFr
ZSIgbmFtZXMgbGlrZSAidGVzdCIKLSAgICAgICAgb3IgIm1vY2stbWFjIiwgYW5kIGl0IGRvZXMg
bm90IGluY2x1ZGUgYW55IGRpcmVjdG9yaWVzIHRoYXQgYXJlIG5vdC4KLQotICAgICAgICBJZiBw
bGF0Zm9ybSBpcyBub3Qgc3BlY2lmaWVkLCB3ZSB3aWxsIGdsb2ItbWF0Y2ggYWxsIHBvcnRzIiIi
Ci0gICAgICAgIHBsYXRmb3JtID0gcGxhdGZvcm0gb3IgJyonCi0gICAgICAgIHJldHVybiBmbm1h
dGNoLmZpbHRlcihidWlsZGVycy5hbGxfcG9ydF9uYW1lcygpLCBwbGF0Zm9ybSkKLQotICAgIGRl
ZiBnZXRfZnJvbV9idWlsZGVyX25hbWUoc2VsZiwgYnVpbGRlcl9uYW1lKToKLSAgICAgICAgcG9y
dF9uYW1lID0gYnVpbGRlcnMucG9ydF9uYW1lX2Zvcl9idWlsZGVyX25hbWUoYnVpbGRlcl9uYW1l
KQotICAgICAgICBhc3NlcnQgcG9ydF9uYW1lLCAidW5yZWNvZ25pemVkIGJ1aWxkZXIgbmFtZSAn
JXMnIiAlIGJ1aWxkZXJfbmFtZQotICAgICAgICByZXR1cm4gc2VsZi5nZXQocG9ydF9uYW1lLCBf
YnVpbGRlcl9vcHRpb25zKGJ1aWxkZXJfbmFtZSkpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnlfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5X3VuaXR0ZXN0
LnB5CShyZXZpc2lvbiAxNDg0OTcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2ZhY3RvcnlfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsODIgKzAs
MCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRp
b24uCi0jICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0j
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCB1bml0dGVzdDIgYXMgdW5pdHRlc3QKLQotZnJv
bSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucwotZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9ja1N5c3RlbUhvc3QKLQot
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZmFjdG9yeQotZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZ3RrCi1mcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5wb3J0IGltcG9ydCBtYWMKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1w
b3J0IHF0Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCB0ZXN0Ci1mcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCB3aW4KLQotCi1jbGFzcyBGYWN0b3J5
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgIiIiVGVzdCB0aGF0IHRoZSBmYWN0b3J5IGNy
ZWF0ZXMgdGhlIHByb3BlciBwb3J0IG9iamVjdCBmb3IgZ2l2ZW4gY29tYmluYXRpb24gb2YgcG9y
dF9uYW1lLCBob3N0LnBsYXRmb3JtLCBhbmQgb3B0aW9ucy4iIiIKLSAgICAjIEZJWE1FOiBUaGUg
cG9ydHMgdGhlbXNlbHZlcyBzaG91bGQgZXhwb3NlIHdoYXQgb3B0aW9ucyB0aGV5IHJlcXVpcmUs
Ci0gICAgIyBpbnN0ZWFkIG9mIHBhc3NpbmcgZ2VuZXJpYyAib3B0aW9ucyIuCi0KLSAgICBkZWYg
c2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYud2Via2l0X29wdGlvbnMgPSBNb2NrT3B0aW9ucyhw
aXhlbF90ZXN0cz1GYWxzZSkKLQotICAgIGRlZiBhc3NlcnRfcG9ydChzZWxmLCBwb3J0X25hbWU9
Tm9uZSwgb3NfbmFtZT1Ob25lLCBvc192ZXJzaW9uPU5vbmUsIG9wdGlvbnM9Tm9uZSwgY2xzPU5v
bmUpOgotICAgICAgICBob3N0ID0gTW9ja1N5c3RlbUhvc3Qob3NfbmFtZT1vc19uYW1lLCBvc192
ZXJzaW9uPW9zX3ZlcnNpb24pCi0gICAgICAgIHBvcnQgPSBmYWN0b3J5LlBvcnRGYWN0b3J5KGhv
c3QpLmdldChwb3J0X25hbWUsIG9wdGlvbnM9b3B0aW9ucykKLSAgICAgICAgc2VsZi5hc3NlcnRJ
c0luc3RhbmNlKHBvcnQsIGNscykKLQotICAgIGRlZiB0ZXN0X21hYyhzZWxmKToKLSAgICAgICAg
c2VsZi5hc3NlcnRfcG9ydChwb3J0X25hbWU9J21hYy1saW9uJywgY2xzPW1hYy5NYWNQb3J0KQot
ICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBvcnRfbmFtZT0nbWFjLWxpb24td2syJywgY2xzPW1h
Yy5NYWNQb3J0KQotICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBvcnRfbmFtZT0nbWFjJywgb3Nf
bmFtZT0nbWFjJywgb3NfdmVyc2lvbj0nbGlvbicsIGNscz1tYWMuTWFjUG9ydCkKLSAgICAgICAg
c2VsZi5hc3NlcnRfcG9ydChwb3J0X25hbWU9Tm9uZSwgIG9zX25hbWU9J21hYycsIG9zX3ZlcnNp
b249J2xpb24nLCBjbHM9bWFjLk1hY1BvcnQpCi0KLSAgICBkZWYgdGVzdF93aW4oc2VsZik6Ci0g
ICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1lPSd3aW4teHAnLCBjbHM9d2luLldpblBv
cnQpCi0gICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1lPSd3aW4teHAtd2syJywgY2xz
PXdpbi5XaW5Qb3J0KQotICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBvcnRfbmFtZT0nd2luJywg
b3NfbmFtZT0nd2luJywgb3NfdmVyc2lvbj0neHAnLCBjbHM9d2luLldpblBvcnQpCi0gICAgICAg
IHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1lPU5vbmUsIG9zX25hbWU9J3dpbicsIG9zX3ZlcnNp
b249J3hwJywgY2xzPXdpbi5XaW5Qb3J0KQotICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBvcnRf
bmFtZT1Ob25lLCBvc19uYW1lPSd3aW4nLCBvc192ZXJzaW9uPSd4cCcsIG9wdGlvbnM9c2VsZi53
ZWJraXRfb3B0aW9ucywgY2xzPXdpbi5XaW5Qb3J0KQotCi0gICAgZGVmIHRlc3RfZ3RrKHNlbGYp
OgotICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBvcnRfbmFtZT0nZ3RrJywgY2xzPWd0ay5HdGtQ
b3J0KQotCi0gICAgZGVmIHRlc3RfcXQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQo
cG9ydF9uYW1lPSdxdCcsIGNscz1xdC5RdFBvcnQpCi0KLSAgICBkZWYgdGVzdF91bmtub3duX3Nw
ZWNpZmllZChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRF
cnJvciwgZmFjdG9yeS5Qb3J0RmFjdG9yeShNb2NrU3lzdGVtSG9zdCgpKS5nZXQsIHBvcnRfbmFt
ZT0ndW5rbm93bicpCi0KLSAgICBkZWYgdGVzdF91bmtub3duX2RlZmF1bHQoc2VsZik6Ci0gICAg
ICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGZhY3RvcnkuUG9ydEZh
Y3RvcnkoTW9ja1N5c3RlbUhvc3Qob3NfbmFtZT0ndm1zJykpLmdldCkKLQotICAgIGRlZiB0ZXN0
X2dldF9mcm9tX2J1aWxkZXJfbmFtZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChm
YWN0b3J5LlBvcnRGYWN0b3J5KE1vY2tTeXN0ZW1Ib3N0KCkpLmdldF9mcm9tX2J1aWxkZXJfbmFt
ZSgnQXBwbGUgTGlvbiBSZWxlYXNlIFdLMSAoVGVzdHMpJykubmFtZSgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAnbWFjLWxpb24nKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9ndGsucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9ndGsucHkJKHJldmlzaW9uIDE0ODQ5NykKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZ3RrLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0xLDE3OSArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6
Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBHb29nbGUgbmFtZSBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBvcwotaW1wb3J0IHN1YnByb2Nl
c3MKLQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfY29uZmlndXJhdGlv
biBpbXBvcnQgVGVzdENvbmZpZ3VyYXRpb24KLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBv
cnQuYmFzZSBpbXBvcnQgUG9ydAotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5wdWxz
ZWF1ZGlvX3Nhbml0aXplciBpbXBvcnQgUHVsc2VBdWRpb1Nhbml0aXplcgotZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMucG9ydC54dmZiZHJpdmVyIGltcG9ydCBYdmZiRHJpdmVyCi0KLQotY2xh
c3MgR3RrUG9ydChQb3J0KToKLSAgICBwb3J0X25hbWUgPSAiZ3RrIgotCi0gICAgZGVmIF9faW5p
dF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIHN1cGVyKEd0a1BvcnQsIHNlbGYp
Ll9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgc2VsZi5fcHVsc2VhdWRpb19zYW5p
dGl6ZXIgPSBQdWxzZUF1ZGlvU2FuaXRpemVyKCkKLQotICAgIGRlZiB3YXJuX2lmX2J1Z19taXNz
aW5nX2luX3Rlc3RfZXhwZWN0YXRpb25zKHNlbGYpOgotICAgICAgICByZXR1cm4gbm90IHNlbGYu
Z2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJykKLQotICAgIGRlZiBfcG9ydF9mbGFnX2Zv
cl9zY3JpcHRzKHNlbGYpOgotICAgICAgICByZXR1cm4gIi0tZ3RrIgotCi0gICAgZGVmIF9kcml2
ZXJfY2xhc3Moc2VsZik6Ci0gICAgICAgIHJldHVybiBYdmZiRHJpdmVyCi0KLSAgICBkZWYgZGVm
YXVsdF90aW1lb3V0X21zKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ2NvbmZp
Z3VyYXRpb24nKSA9PSAnRGVidWcnOgotICAgICAgICAgICAgcmV0dXJuIDEyICogMTAwMAotICAg
ICAgICByZXR1cm4gNiAqIDEwMDAKLQotICAgIGRlZiBzZXR1cF90ZXN0X3J1bihzZWxmKToKLSAg
ICAgICAgc3VwZXIoR3RrUG9ydCwgc2VsZikuc2V0dXBfdGVzdF9ydW4oKQotICAgICAgICBzZWxm
Ll9wdWxzZWF1ZGlvX3Nhbml0aXplci51bmxvYWRfcHVsc2VhdWRpb19tb2R1bGUoKQotCi0gICAg
ZGVmIGNsZWFuX3VwX3Rlc3RfcnVuKHNlbGYpOgotICAgICAgICBzdXBlcihHdGtQb3J0LCBzZWxm
KS5jbGVhbl91cF90ZXN0X3J1bigpCi0gICAgICAgIHNlbGYuX3B1bHNlYXVkaW9fc2FuaXRpemVy
LnJlc3RvcmVfcHVsc2VhdWRpb19tb2R1bGUoKQotCi0gICAgZGVmIHNldHVwX2Vudmlyb25fZm9y
X3NlcnZlcihzZWxmLCBzZXJ2ZXJfbmFtZT1Ob25lKToKLSAgICAgICAgZW52aXJvbm1lbnQgPSBz
dXBlcihHdGtQb3J0LCBzZWxmKS5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VydmVyX25hbWUp
Ci0gICAgICAgIGVudmlyb25tZW50WydHVEtfTU9EVUxFUyddID0gJ2dhaWwnCi0gICAgICAgIGVu
dmlyb25tZW50WydHU0VUVElOR1NfQkFDS0VORCddID0gJ21lbW9yeScKLSAgICAgICAgZW52aXJv
bm1lbnRbJ0xJQk9WRVJMQVlfU0NST0xMQkFSJ10gPSAnMCcKLSAgICAgICAgZW52aXJvbm1lbnRb
J1RFU1RfUlVOTkVSX0lOSkVDVEVEX0JVTkRMRV9GSUxFTkFNRSddID0gc2VsZi5fYnVpbGRfcGF0
aCgnTGlicmFyaWVzJywgJ2xpYlRlc3RSdW5uZXJJbmplY3RlZEJ1bmRsZS5sYScpCi0gICAgICAg
IGVudmlyb25tZW50WydURVNUX1JVTk5FUl9URVNUX1BMVUdJTl9QQVRIJ10gPSBzZWxmLl9idWls
ZF9wYXRoKCdUZXN0TmV0c2NhcGVQbHVnaW4nLCAnLmxpYnMnKQotICAgICAgICBlbnZpcm9ubWVu
dFsnV0VCS0lUX0lOU1BFQ1RPUl9QQVRIJ10gPSBzZWxmLl9idWlsZF9wYXRoKCdQcm9ncmFtcycs
ICdyZXNvdXJjZXMnLCAnaW5zcGVjdG9yJykKLSAgICAgICAgZW52aXJvbm1lbnRbJ0FVRElPX1JF
U09VUkNFU19QQVRIJ10gPSBzZWxmLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnU291cmNlJywgJ1dl
YkNvcmUnLCAncGxhdGZvcm0nLCAnYXVkaW8nLCAncmVzb3VyY2VzJykKLSAgICAgICAgc2VsZi5f
Y29weV92YWx1ZV9mcm9tX2Vudmlyb25faWZfc2V0KGVudmlyb25tZW50LCAnV0VCS0lUT1VUUFVU
RElSJykKLSAgICAgICAgcmV0dXJuIGVudmlyb25tZW50Ci0KLSAgICBkZWYgX2dlbmVyYXRlX2Fs
bF90ZXN0X2NvbmZpZ3VyYXRpb25zKHNlbGYpOgotICAgICAgICBjb25maWd1cmF0aW9ucyA9IFtd
Ci0gICAgICAgIGZvciBidWlsZF90eXBlIGluIHNlbGYuQUxMX0JVSUxEX1RZUEVTOgotICAgICAg
ICAgICAgY29uZmlndXJhdGlvbnMuYXBwZW5kKFRlc3RDb25maWd1cmF0aW9uKHZlcnNpb249c2Vs
Zi5fdmVyc2lvbiwgYXJjaGl0ZWN0dXJlPSd4ODYnLCBidWlsZF90eXBlPWJ1aWxkX3R5cGUpKQot
ICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvbnMKLQotICAgIGRlZiBfcGF0aF90b19kcml2ZXIo
c2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCdQcm9ncmFtcycsIHNlbGYu
ZHJpdmVyX25hbWUoKSkKLQotICAgIGRlZiBfcGF0aF90b19pbWFnZV9kaWZmKHNlbGYpOgotICAg
ICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnUHJvZ3JhbXMnLCAnSW1hZ2VEaWZmJykKLQot
ICAgIGRlZiBfcGF0aF90b193ZWJjb3JlX2xpYnJhcnkoc2VsZik6Ci0gICAgICAgIGd0a19saWJy
YXJ5X25hbWVzID0gWwotICAgICAgICAgICAgImxpYndlYmtpdGd0ay0xLjAuc28iLAotICAgICAg
ICAgICAgImxpYndlYmtpdGd0ay0zLjAuc28iLAotICAgICAgICAgICAgImxpYndlYmtpdDJndGst
MS4wLnNvIiwKLSAgICAgICAgXQotCi0gICAgICAgIGZvciBsaWJyYXJ5IGluIGd0a19saWJyYXJ5
X25hbWVzOgotICAgICAgICAgICAgZnVsbF9saWJyYXJ5ID0gc2VsZi5fYnVpbGRfcGF0aCgiLmxp
YnMiLCBsaWJyYXJ5KQotICAgICAgICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5pc2ZpbGUoZnVs
bF9saWJyYXJ5KToKLSAgICAgICAgICAgICAgICByZXR1cm4gZnVsbF9saWJyYXJ5Ci0gICAgICAg
IHJldHVybiBOb25lCi0KLSAgICBkZWYgX3NlYXJjaF9wYXRocyhzZWxmKToKLSAgICAgICAgc2Vh
cmNoX3BhdGhzID0gW10KLSAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9y
dW5uZXInKToKLSAgICAgICAgICAgIHNlYXJjaF9wYXRocy5leHRlbmQoW3NlbGYucG9ydF9uYW1l
ICsgJy13azInLCAnd2syJ10pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWFyY2hfcGF0
aHMuYXBwZW5kKHNlbGYucG9ydF9uYW1lICsgJy13azEnKQotICAgICAgICBzZWFyY2hfcGF0aHMu
YXBwZW5kKHNlbGYucG9ydF9uYW1lKQotICAgICAgICBzZWFyY2hfcGF0aHMuZXh0ZW5kKHNlbGYu
Z2V0X29wdGlvbigiYWRkaXRpb25hbF9wbGF0Zm9ybV9kaXJlY3RvcnkiLCBbXSkpCi0gICAgICAg
IHJldHVybiBzZWFyY2hfcGF0aHMKLQotICAgIGRlZiBkZWZhdWx0X2Jhc2VsaW5lX3NlYXJjaF9w
YXRoKHNlbGYpOgotICAgICAgICByZXR1cm4gbWFwKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRo
LCBzZWxmLl9zZWFyY2hfcGF0aHMoKSkKLQotICAgIGRlZiBfcG9ydF9zcGVjaWZpY19leHBlY3Rh
dGlvbnNfZmlsZXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBbc2VsZi5fZmlsZXN5c3RlbS5qb2lu
KHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKHApLCAnVGVzdEV4cGVjdGF0aW9ucycpIGZvciBw
IGluIHJldmVyc2VkKHNlbGYuX3NlYXJjaF9wYXRocygpKV0KLQotICAgICMgRklYTUU6IFdlIHNo
b3VsZCBmaW5kIGEgd2F5IHRvIHNoYXJlIHRoaXMgaW1wbG1lbnRhdGlvbiB3aXRoIEd0aywKLSAg
ICAjIG9yIHRlYWNoIHJ1bi1sYXVuY2hlciBob3cgdG8gY2FsbCBydW4tc2FmYXJpIGFuZCBtb3Zl
IHRoaXMgZG93biB0byBQb3J0LgotICAgIGRlZiBzaG93X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYs
IHJlc3VsdHNfZmlsZW5hbWUpOgotICAgICAgICBydW5fbGF1bmNoZXJfYXJncyA9IFsiZmlsZTov
LyVzIiAlIHJlc3VsdHNfZmlsZW5hbWVdCi0gICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Vi
a2l0X3Rlc3RfcnVubmVyJyk6Ci0gICAgICAgICAgICBydW5fbGF1bmNoZXJfYXJncy5hcHBlbmQo
Jy0yJykKLSAgICAgICAgIyBGSVhNRTogb2xkLXJ1bi13ZWJraXQtdGVzdHMgYWxzbyBhZGRlZCBb
Ii1ncmFwaGljc3N5c3RlbSIsICJyYXN0ZXIiLCAiLXN0eWxlIiwgIndpbmRvd3MiXQotICAgICAg
ICAjIEZJWE1FOiBvbGQtcnVuLXdlYmtpdC10ZXN0cyBjb252ZXJ0ZWQgcmVzdWx0c19maWxlbmFt
ZSBwYXRoIGZvciBjeWd3aW4uCi0gICAgICAgIHNlbGYuX3J1bl9zY3JpcHQoInJ1bi1sYXVuY2hl
ciIsIHJ1bl9sYXVuY2hlcl9hcmdzKQotCi0gICAgZGVmIGNoZWNrX3N5c19kZXBzKHNlbGYsIG5l
ZWRzX2h0dHApOgotICAgICAgICByZXR1cm4gc3VwZXIoR3RrUG9ydCwgc2VsZikuY2hlY2tfc3lz
X2RlcHMobmVlZHNfaHR0cCkgYW5kIFh2ZmJEcml2ZXIuY2hlY2tfeHZmYihzZWxmKQotCi0gICAg
ZGVmIF9nZXRfZ2RiX291dHB1dChzZWxmLCBjb3JlZHVtcF9wYXRoKToKLSAgICAgICAgY21kID0g
WydnZGInLCAnLWV4JywgJ3RocmVhZCBhcHBseSBhbGwgYnQgMTAyNCcsICctLWJhdGNoJywgc3Ry
KHNlbGYuX3BhdGhfdG9fZHJpdmVyKCkpLCBjb3JlZHVtcF9wYXRoXQotICAgICAgICBwcm9jID0g
c3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZGluPU5vbmUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUs
IHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCi0gICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcHJvYy5j
b21tdW5pY2F0ZSgpCi0gICAgICAgIGVycm9ycyA9IFtsLnN0cmlwKCkuZGVjb2RlKCd1dGY4Jywg
J2lnbm9yZScpIGZvciBsIGluIHN0ZGVyci5zcGxpdGxpbmVzKCldCi0gICAgICAgIHJldHVybiAo
c3Rkb3V0LmRlY29kZSgndXRmOCcsICdpZ25vcmUnKSwgZXJyb3JzKQotCi0gICAgZGVmIF9nZXRf
Y3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pOgot
ICAgICAgICBwaWRfcmVwcmVzZW50YXRpb24gPSBzdHIocGlkIG9yICc8dW5rbm93bj4nKQotICAg
ICAgICBsb2dfZGlyZWN0b3J5ID0gb3MuZW52aXJvbi5nZXQoIldFQktJVF9DT1JFX0RVTVBTX0RJ
UkVDVE9SWSIpCi0gICAgICAgIGVycm9ycyA9IFtdCi0gICAgICAgIGNyYXNoX2xvZyA9ICcnCi0g
ICAgICAgIGV4cGVjdGVkX2NyYXNoX2R1bXBfZmlsZW5hbWUgPSAiY29yZS1waWRfJXMtXy1wcm9j
ZXNzXyVzIiAlIChwaWRfcmVwcmVzZW50YXRpb24sIG5hbWUpCi0KLSAgICAgICAgZGVmIG1hdGNo
X2ZpbGVuYW1lKGZpbGVzeXN0ZW0sIGRpcmVjdG9yeSwgZmlsZW5hbWUpOgotICAgICAgICAgICAg
aWYgcGlkOgotICAgICAgICAgICAgICAgIHJldHVybiBmaWxlbmFtZSA9PSBleHBlY3RlZF9jcmFz
aF9kdW1wX2ZpbGVuYW1lCi0gICAgICAgICAgICByZXR1cm4gZmlsZW5hbWUuZmluZChuYW1lKSA+
IC0xCi0KLSAgICAgICAgaWYgbG9nX2RpcmVjdG9yeToKLSAgICAgICAgICAgIGR1bXBzID0gc2Vs
Zi5fZmlsZXN5c3RlbS5maWxlc191bmRlcihsb2dfZGlyZWN0b3J5LCBmaWxlX2ZpbHRlcj1tYXRj
aF9maWxlbmFtZSkKLSAgICAgICAgICAgIGlmIGR1bXBzOgotICAgICAgICAgICAgICAgICMgR2V0
IHRoZSBtb3N0IHJlY2VudCBjb3JlZHVtcCBtYXRjaGluZyB0aGUgcGlkIGFuZC9vciBwcm9jZXNz
IG5hbWUuCi0gICAgICAgICAgICAgICAgY29yZWR1bXBfcGF0aCA9IGxpc3QocmV2ZXJzZWQoc29y
dGVkKGR1bXBzKSkpWzBdCi0gICAgICAgICAgICAgICAgaWYgbm90IG5ld2VyX3RoYW4gb3Igc2Vs
Zi5fZmlsZXN5c3RlbS5tdGltZShjb3JlZHVtcF9wYXRoKSA+IG5ld2VyX3RoYW46Ci0gICAgICAg
ICAgICAgICAgICAgIGNyYXNoX2xvZywgZXJyb3JzID0gc2VsZi5fZ2V0X2dkYl9vdXRwdXQoY29y
ZWR1bXBfcGF0aCkKLQotICAgICAgICBzdGRlcnJfbGluZXMgPSBlcnJvcnMgKyAoc3RkZXJyIG9y
ICc8ZW1wdHk+JykuZGVjb2RlKCd1dGY4JywgJ2lnbm9yZScpLnNwbGl0bGluZXMoKQotICAgICAg
ICBlcnJvcnNfc3RyID0gJ1xuJy5qb2luKCgnU1RERVJSOiAnICsgbCkgZm9yIGwgaW4gc3RkZXJy
X2xpbmVzKQotICAgICAgICBpZiBub3QgY3Jhc2hfbG9nOgotICAgICAgICAgICAgaWYgbm90IGxv
Z19kaXJlY3Rvcnk6Ci0gICAgICAgICAgICAgICAgbG9nX2RpcmVjdG9yeSA9ICIvcGF0aC90by9j
b3JlZHVtcHMiCi0gICAgICAgICAgICBjb3JlX3BhdHRlcm4gPSBvcy5wYXRoLmpvaW4obG9nX2Rp
cmVjdG9yeSwgImNvcmUtcGlkXyVwLV8tcHJvY2Vzc18lZSIpCi0gICAgICAgICAgICBjcmFzaF9s
b2cgPSAiIiJcCi1Db3JlZHVtcCAlKGV4cGVjdGVkX2NyYXNoX2R1bXBfZmlsZW5hbWUpcyBub3Qg
Zm91bmQuIFRvIGVuYWJsZSBjcmFzaCBsb2dzOgotCi0tIHJ1biB0aGlzIGNvbW1hbmQgYXMgc3Vw
ZXItdXNlcjogZWNobyAiJShjb3JlX3BhdHRlcm4pcyIgPiAvcHJvYy9zeXMva2VybmVsL2NvcmVf
cGF0dGVybgotLSBlbmFibGUgY29yZSBkdW1wczogdWxpbWl0IC1jIHVubGltaXRlZAotLSBzZXQg
dGhlIFdFQktJVF9DT1JFX0RVTVBTX0RJUkVDVE9SWSBlbnZpcm9ubWVudCB2YXJpYWJsZTogZXhw
b3J0IFdFQktJVF9DT1JFX0RVTVBTX0RJUkVDVE9SWT0lKGxvZ19kaXJlY3RvcnkpcwotCi0iIiIg
JSBsb2NhbHMoKQotCi0gICAgICAgIHJldHVybiAoc3RkZXJyLCAiIiJcCi1DcmFzaCBsb2cgZm9y
ICUobmFtZSlzIChwaWQgJShwaWRfcmVwcmVzZW50YXRpb24pcyk6Ci0KLSUoY3Jhc2hfbG9nKXMK
LSUoZXJyb3JzX3N0cilzIiIiICUgbG9jYWxzKCkpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2d0a191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2d0a191bml0dGVzdC5weQkocmV2
aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9ndGtfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEwICswLDAgQEAKLSMgQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0jICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi1pbXBvcnQgdW5pdHRlc3QyIGFzIHVuaXR0ZXN0Ci1pbXBvcnQgc3lzCi1pbXBv
cnQgb3MKLQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZV9tb2NrIGltcG9y
dCBNb2NrRXhlY3V0aXZlCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbV9t
b2NrIGltcG9ydCBNb2NrRmlsZVN5c3RlbQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91
dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rl
c3RzLnBvcnQuZ3RrIGltcG9ydCBHdGtQb3J0Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5w
b3J0LnB1bHNlYXVkaW9fc2FuaXRpemVyX21vY2sgaW1wb3J0IFB1bHNlQXVkaW9TYW5pdGl6ZXJN
b2NrCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBwb3J0X3Rlc3RjYXNl
Ci1mcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkubW9jayBpbXBvcnQgTW9jawotZnJvbSB3ZWJraXRw
eS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucwotCi0KLWNsYXNzIEd0a1BvcnRUZXN0
KHBvcnRfdGVzdGNhc2UuUG9ydFRlc3RDYXNlKToKLSAgICBwb3J0X25hbWUgPSAnZ3RrJwotICAg
IHBvcnRfbWFrZXIgPSBHdGtQb3J0Ci0KLSAgICAjIEFkZGl0aW9uYWxseSBtb2NrcyBvdXQgdGhl
IFB1bHNlQXVkaW9TYW5pdGl6ZXIgbWV0aG9kcy4KLSAgICBkZWYgbWFrZV9wb3J0KHNlbGYsIGhv
c3Q9Tm9uZSwgcG9ydF9uYW1lPU5vbmUsIG9wdGlvbnM9Tm9uZSwgb3NfbmFtZT1Ob25lLCBvc192
ZXJzaW9uPU5vbmUsICoqa3dhcmdzKToKLSAgICAgICAgcG9ydCA9IHN1cGVyKEd0a1BvcnRUZXN0
LCBzZWxmKS5tYWtlX3BvcnQoaG9zdCwgcG9ydF9uYW1lLCBvcHRpb25zLCBvc19uYW1lLCBvc192
ZXJzaW9uLCAqKmt3YXJncykKLSAgICAgICAgcG9ydC5fcHVsc2VhdWRpb19zYW5pdGl6ZXIgPSBQ
dWxzZUF1ZGlvU2FuaXRpemVyTW9jaygpCi0gICAgICAgIHJldHVybiBwb3J0Ci0KLSAgICBkZWYg
dGVzdF9kZWZhdWx0X2Jhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgotICAgICAgICBwb3J0ID0g
c2VsZi5tYWtlX3BvcnQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuZGVmYXVsdF9i
YXNlbGluZV9zZWFyY2hfcGF0aCgpLCBbJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRm
b3JtL2d0ay13azEnLAotICAgICAgICAgICAgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3Bs
YXRmb3JtL2d0ayddKQotCi0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChvcHRpb25zPU1v
Y2tPcHRpb25zKHdlYmtpdF90ZXN0X3J1bm5lcj1UcnVlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChwb3J0LmRlZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoKSwgWycvbW9jay1jaGVja291
dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGstd2syJywKLSAgICAgICAgICAgICcvbW9jay1jaGVj
a291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93azInLCAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ3RrJ10pCi0KLSAgICBkZWYgdGVzdF9wb3J0X3NwZWNpZmljX2V4cGVjdGF0
aW9uc19maWxlcyhzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LmV4cGVjdGF0aW9uc19maWxlcygpLCBbJy9tb2NrLWNo
ZWNrb3V0L0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMnLAotICAgICAgICAgICAgJy9tb2Nr
LWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zJywKLSAg
ICAgICAgICAgICcvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGstd2sxL1Rl
c3RFeHBlY3RhdGlvbnMnXSkKLQotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQob3B0aW9u
cz1Nb2NrT3B0aW9ucyh3ZWJraXRfdGVzdF9ydW5uZXI9VHJ1ZSkpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwocG9ydC5leHBlY3RhdGlvbnNfZmlsZXMoKSwgWycvbW9jay1jaGVja291dC9MYXlv
dXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zJywKLSAgICAgICAgICAgICcvbW9jay1jaGVja291dC9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucycsCi0gICAgICAgICAgICAn
L21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMn
LAotICAgICAgICAgICAgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay13
azIvVGVzdEV4cGVjdGF0aW9ucyddKQotCi0gICAgZGVmIHRlc3Rfc2hvd19yZXN1bHRzX2h0bWxf
ZmlsZShzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKLSAgICAgICAgcG9y
dC5fZXhlY3V0aXZlID0gTW9ja0V4ZWN1dGl2ZShzaG91bGRfbG9nPVRydWUpCi0gICAgICAgIGV4
cGVjdGVkX2xvZ3MgPSAiTU9DSyBydW5fY29tbWFuZDogWydUb29scy9TY3JpcHRzL3J1bi1sYXVu
Y2hlcicsICctLXJlbGVhc2UnLCAnLS1ndGsnLCAnZmlsZTovL3Rlc3QuaHRtbCddLCBjd2Q9L21v
Y2stY2hlY2tvdXRcbiIKLSAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNl
bGYsIHBvcnQuc2hvd19yZXN1bHRzX2h0bWxfZmlsZSwgWyJ0ZXN0Lmh0bWwiXSwgZXhwZWN0ZWRf
bG9ncz1leHBlY3RlZF9sb2dzKQotCi0gICAgZGVmIHRlc3RfZGVmYXVsdF90aW1lb3V0X21zKHNl
bGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9wb3J0KG9wdGlvbnM9TW9j
a09wdGlvbnMoY29uZmlndXJhdGlvbj0nUmVsZWFzZScpKS5kZWZhdWx0X3RpbWVvdXRfbXMoKSwg
NjAwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfcG9ydChvcHRpb25zPU1v
Y2tPcHRpb25zKGNvbmZpZ3VyYXRpb249J0RlYnVnJykpLmRlZmF1bHRfdGltZW91dF9tcygpLCAx
MjAwMCkKLQotICAgIGRlZiB0ZXN0X2dldF9jcmFzaF9sb2coc2VsZik6Ci0gICAgICAgIGNvcmVf
ZGlyZWN0b3J5ID0gb3MuZW52aXJvbi5nZXQoJ1dFQktJVF9DT1JFX0RVTVBTX0RJUkVDVE9SWScs
ICcvcGF0aC90by9jb3JlZHVtcHMnKQotICAgICAgICBjb3JlX3BhdHRlcm4gPSBvcy5wYXRoLmpv
aW4oY29yZV9kaXJlY3RvcnksICJjb3JlLXBpZF8lcC1fLXByb2Nlc3NfJWUiKQotICAgICAgICBt
b2NrX2VtcHR5X2NyYXNoX2xvZyA9ICIiIlwKLUNyYXNoIGxvZyBmb3IgRHVtcFJlbmRlclRyZWUg
KHBpZCAyODUyOSk6Ci0KLUNvcmVkdW1wIGNvcmUtcGlkXzI4NTI5LV8tcHJvY2Vzc19EdW1wUmVu
ZGVyVHJlZSBub3QgZm91bmQuIFRvIGVuYWJsZSBjcmFzaCBsb2dzOgotCi0tIHJ1biB0aGlzIGNv
bW1hbmQgYXMgc3VwZXItdXNlcjogZWNobyAiJShjb3JlX3BhdHRlcm4pcyIgPiAvcHJvYy9zeXMv
a2VybmVsL2NvcmVfcGF0dGVybgotLSBlbmFibGUgY29yZSBkdW1wczogdWxpbWl0IC1jIHVubGlt
aXRlZAotLSBzZXQgdGhlIFdFQktJVF9DT1JFX0RVTVBTX0RJUkVDVE9SWSBlbnZpcm9ubWVudCB2
YXJpYWJsZTogZXhwb3J0IFdFQktJVF9DT1JFX0RVTVBTX0RJUkVDVE9SWT0lKGNvcmVfZGlyZWN0
b3J5KXMKLQotCi1TVERFUlI6IDxlbXB0eT4iIiIgJSBsb2NhbHMoKQotCi0gICAgICAgIGRlZiBf
bW9ja19nZGJfb3V0cHV0KGNvcmVkdW1wX3BhdGgpOgotICAgICAgICAgICAgcmV0dXJuIChtb2Nr
X2VtcHR5X2NyYXNoX2xvZywgW10pCi0KLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkK
LSAgICAgICAgcG9ydC5fZ2V0X2dkYl9vdXRwdXQgPSBtb2NrX2VtcHR5X2NyYXNoX2xvZwotICAg
ICAgICBzdGRlcnIsIGxvZyA9IHBvcnQuX2dldF9jcmFzaF9sb2coIkR1bXBSZW5kZXJUcmVlIiwg
Mjg1MjksICIiLCAiIiwgbmV3ZXJfdGhhbj1Ob25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHN0ZGVyciwgIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlMaW5lRXF1YWwobG9nLCBtb2Nr
X2VtcHR5X2NyYXNoX2xvZykKLQotICAgICAgICBzdGRlcnIsIGxvZyA9IHBvcnQuX2dldF9jcmFz
aF9sb2coIkR1bXBSZW5kZXJUcmVlIiwgMjg1MjksICIiLCAiIiwgbmV3ZXJfdGhhbj0wLjApCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RkZXJyLCAiIikKLSAgICAgICAgc2VsZi5hc3NlcnRN
dWx0aUxpbmVFcXVhbChsb2csIG1vY2tfZW1wdHlfY3Jhc2hfbG9nKQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX2xvY2sucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX2xvY2sucHkJ
KHJldmlzaW9uIDE0ODQ5NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvaHR0cF9sb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzNyArMCwwIEBACi0jIENv
cHlyaWdodCAoQykgMjAxMCBHYWJvciBSYXBjc2FueWkgKHJnYWJvckBpbmYudS1zemVnZWQuaHUp
LCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgQW5kcmFzIEJlY3Np
IChhYmVjc2lAaW5mLnUtc3plZ2VkLmh1KSwgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSMKLSMgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0
OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklW
RVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQotIyBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotIyBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJ
VFkgT0YgU1pFR0VEIE9SCi0jIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotIyBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0jIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotIyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0jIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
IyBGSVhNRTogcmVuYW1lIHRoaXMgZmlsZSwgYW5kIGFkZCBtb3JlIHRleHQgYWJvdXQgaG93IHRo
aXMgaXMKLSMgZGlmZmVyZW50IGZyb20gdGhlIGJhc2UgZmlsZV9sb2NrIGNsYXNzLgotCi0iIiJU
aGlzIGNsYXNzIGhlbHBzIHRvIGJsb2NrIE5SV1QgdGhyZWFkcyB3aGVuIG1vcmUgTlJXVHMgcnVu
Ci1wZXJmLCBodHRwIGFuZCB3ZWJzb2NrZXQgdGVzdHMgaW4gYSBzYW1lIHRpbWUuIiIiCi0KLWlt
cG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCB0ZW1wZmlsZQotaW1w
b3J0IHRpbWUKLQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQg
RXhlY3V0aXZlCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZV9sb2NrIGltcG9ydCBG
aWxlTG9jawotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW0gaW1wb3J0IEZp
bGVTeXN0ZW0KLQotCi1fbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLQotY2xh
c3MgSHR0cExvY2sob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbG9ja19wYXRoLCBs
b2NrX2ZpbGVfcHJlZml4PSJXZWJLaXRIdHRwZC5sb2NrLiIsIGd1YXJkX2xvY2s9IldlYktpdC5s
b2NrIiwgZmlsZXN5c3RlbT1Ob25lLCBleGVjdXRpdmU9Tm9uZSwgbmFtZT0nSFRUUCcpOgotICAg
ICAgICBzZWxmLl9leGVjdXRpdmUgPSBleGVjdXRpdmUgb3IgRXhlY3V0aXZlKCkKLSAgICAgICAg
c2VsZi5fZmlsZXN5c3RlbSA9IGZpbGVzeXN0ZW0gb3IgRmlsZVN5c3RlbSgpCi0gICAgICAgIHNl
bGYuX2xvY2tfcGF0aCA9IGxvY2tfcGF0aAotICAgICAgICBpZiBub3Qgc2VsZi5fbG9ja19wYXRo
OgotICAgICAgICAgICAgIyBGSVhNRTogRmlsZVN5c3RlbSBzaG91bGQgaGF2ZSBhbiBhY2Nlc3Nv
ciBmb3IgdGVtcGRpcigpCi0gICAgICAgICAgICBzZWxmLl9sb2NrX3BhdGggPSB0ZW1wZmlsZS5n
ZXR0ZW1wZGlyKCkKLSAgICAgICAgc2VsZi5fbG9ja19maWxlX3ByZWZpeCA9IGxvY2tfZmlsZV9w
cmVmaXgKLSAgICAgICAgc2VsZi5fbG9ja19maWxlX3BhdGhfcHJlZml4ID0gc2VsZi5fZmlsZXN5
c3RlbS5qb2luKHNlbGYuX2xvY2tfcGF0aCwgc2VsZi5fbG9ja19maWxlX3ByZWZpeCkKLSAgICAg
ICAgc2VsZi5fZ3VhcmRfbG9ja19maWxlID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX2xv
Y2tfcGF0aCwgZ3VhcmRfbG9jaykKLSAgICAgICAgc2VsZi5fZ3VhcmRfbG9jayA9IEZpbGVMb2Nr
KHNlbGYuX2d1YXJkX2xvY2tfZmlsZSkKLSAgICAgICAgc2VsZi5fcHJvY2Vzc19sb2NrX2ZpbGVf
bmFtZSA9ICIiCi0gICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCi0KLSAgICBkZWYgY2xlYW51cF9o
dHRwX2xvY2soc2VsZik6Ci0gICAgICAgICIiIkRlbGV0ZSB0aGUgbG9jayBmaWxlIGlmIGV4aXN0
cy4iIiIKLSAgICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoc2VsZi5fcHJvY2Vzc19s
b2NrX2ZpbGVfbmFtZSk6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCJSZW1vdmluZyBsb2NrIGZp
bGU6ICVzIiAlIHNlbGYuX3Byb2Nlc3NfbG9ja19maWxlX25hbWUpCi0gICAgICAgICAgICBzZWxm
Ll9maWxlc3lzdGVtLnJlbW92ZShzZWxmLl9wcm9jZXNzX2xvY2tfZmlsZV9uYW1lKQotCi0gICAg
ZGVmIF9leHRyYWN0X2xvY2tfbnVtYmVyKHNlbGYsIGxvY2tfZmlsZV9uYW1lKToKLSAgICAgICAg
IiIiUmV0dXJuIHRoZSBsb2NrIG51bWJlciBmcm9tIGxvY2sgZmlsZS4iIiIKLSAgICAgICAgcHJl
Zml4X2xlbmd0aCA9IGxlbihzZWxmLl9sb2NrX2ZpbGVfcGF0aF9wcmVmaXgpCi0gICAgICAgIHJl
dHVybiBpbnQobG9ja19maWxlX25hbWVbcHJlZml4X2xlbmd0aDpdKQotCi0gICAgZGVmIF9sb2Nr
X2ZpbGVfbGlzdChzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBsaXN0IG9mIGxvY2sgZmls
ZXMgc2VxdWVudGlhbGx5LiIiIgotICAgICAgICBsb2NrX2xpc3QgPSBzZWxmLl9maWxlc3lzdGVt
Lmdsb2Ioc2VsZi5fbG9ja19maWxlX3BhdGhfcHJlZml4ICsgJyonKQotICAgICAgICBsb2NrX2xp
c3Quc29ydChrZXk9c2VsZi5fZXh0cmFjdF9sb2NrX251bWJlcikKLSAgICAgICAgcmV0dXJuIGxv
Y2tfbGlzdAotCi0gICAgZGVmIF9uZXh0X2xvY2tfbnVtYmVyKHNlbGYpOgotICAgICAgICAiIiJS
ZXR1cm4gdGhlIG5leHQgYXZhaWxhYmxlIGxvY2sgbnVtYmVyLiIiIgotICAgICAgICBsb2NrX2xp
c3QgPSBzZWxmLl9sb2NrX2ZpbGVfbGlzdCgpCi0gICAgICAgIGlmIG5vdCBsb2NrX2xpc3Q6Ci0g
ICAgICAgICAgICByZXR1cm4gMAotICAgICAgICByZXR1cm4gc2VsZi5fZXh0cmFjdF9sb2NrX251
bWJlcihsb2NrX2xpc3RbLTFdKSArIDEKLQotICAgIGRlZiBfY3VycmVudF9sb2NrX3BpZChzZWxm
KToKLSAgICAgICAgIiIiUmV0dXJuIHdpdGggdGhlIGN1cnJlbnQgbG9jayBwaWQuIElmIHRoZSBs
b2NrIGlzIG5vdCB2YWxpZAotICAgICAgICBpdCBkZWxldGVzIHRoZSBsb2NrIGZpbGUuIiIiCi0g
ICAgICAgIGxvY2tfbGlzdCA9IHNlbGYuX2xvY2tfZmlsZV9saXN0KCkKLSAgICAgICAgaWYgbm90
IGxvY2tfbGlzdDoKLSAgICAgICAgICAgIF9sb2cuZGVidWcoIk5vIGxvY2sgZmlsZSBsaXN0IikK
LSAgICAgICAgICAgIHJldHVybgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjdXJyZW50X3Bp
ZCA9IHNlbGYuX2ZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUobG9ja19saXN0WzBdKQotICAgICAg
ICAgICAgaWYgbm90IChjdXJyZW50X3BpZCBhbmQgc2VsZi5fZXhlY3V0aXZlLmNoZWNrX3J1bm5p
bmdfcGlkKGludChjdXJyZW50X3BpZCkpKToKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCJS
ZW1vdmluZyBzdHVjayBsb2NrIGZpbGU6ICVzIiAlIGxvY2tfbGlzdFswXSkKLSAgICAgICAgICAg
ICAgICBzZWxmLl9maWxlc3lzdGVtLnJlbW92ZShsb2NrX2xpc3RbMF0pCi0gICAgICAgICAgICAg
ICAgcmV0dXJuCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgotICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygiSU9FcnJvcjogJXMiICUgZSkKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBleGNl
cHQgT1NFcnJvciwgZToKLSAgICAgICAgICAgIF9sb2cuZGVidWcoIk9TRXJyb3I6ICVzIiAlIGUp
Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgcmV0dXJuIGludChjdXJyZW50X3BpZCkKLQot
ICAgIGRlZiBfY3JlYXRlX2xvY2tfZmlsZShzZWxmKToKLSAgICAgICAgIiIiVGhlIGxvY2sgZmls
ZXMgYXJlIHVzZWQgdG8gc2NoZWR1bGUgdGhlIHJ1bm5pbmcgdGVzdCBzZXNzaW9ucyBpbiBmaXJz
dAotICAgICAgICBjb21lIGZpcnN0IHNlcnZlZCBvcmRlci4gVGhlIGd1YXJkIGxvY2sgZW5zdXJl
cyB0aGF0IHRoZSBsb2NrIG51bWJlcnMgYXJlCi0gICAgICAgIHNlcXVlbnRpYWwuIiIiCi0gICAg
ICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhzZWxmLl9sb2NrX3BhdGgpOgotICAg
ICAgICAgICAgX2xvZy5kZWJ1ZygiTG9jayBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3Q6ICVzIiAl
IHNlbGYuX2xvY2tfcGF0aCkKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgIGlm
IG5vdCBzZWxmLl9ndWFyZF9sb2NrLmFjcXVpcmVfbG9jaygpOgotICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygiR3VhcmQgbG9jayB0aW1lZCBvdXQhIikKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQot
Ci0gICAgICAgIHNlbGYuX3Byb2Nlc3NfbG9ja19maWxlX25hbWUgPSAoc2VsZi5fbG9ja19maWxl
X3BhdGhfcHJlZml4ICsgc3RyKHNlbGYuX25leHRfbG9ja19udW1iZXIoKSkpCi0gICAgICAgIF9s
b2cuZGVidWcoIkNyZWF0aW5nIGxvY2sgZmlsZTogJXMiICUgc2VsZi5fcHJvY2Vzc19sb2NrX2Zp
bGVfbmFtZSkKLSAgICAgICAgIyBGSVhNRTogRXhlY3V0aXZlLnB5IHNob3VsZCBoYXZlIGFuIGFj
Y2Vzc29yIGZvciBnZXRwaWQoKQotICAgICAgICBzZWxmLl9maWxlc3lzdGVtLndyaXRlX3RleHRf
ZmlsZShzZWxmLl9wcm9jZXNzX2xvY2tfZmlsZV9uYW1lLCBzdHIob3MuZ2V0cGlkKCkpKQotICAg
ICAgICBzZWxmLl9ndWFyZF9sb2NrLnJlbGVhc2VfbG9jaygpCi0gICAgICAgIHJldHVybiBUcnVl
Ci0KLSAgICBkZWYgd2FpdF9mb3JfaHR0cGRfbG9jayhzZWxmKToKLSAgICAgICAgIiIiQ3JlYXRl
IGEgbG9jayBmaWxlIGFuZCB3YWl0IHVudGlsIGl0J3MgdHVybiBjb21lcy4gSWYgc29tZXRoaW5n
IGdvZXMgd3JvbmcKLSAgICAgICAgaXQgd29udCBkbyBhbnkgbG9ja2luZy4iIiIKLSAgICAgICAg
aWYgbm90IHNlbGYuX2NyZWF0ZV9sb2NrX2ZpbGUoKToKLSAgICAgICAgICAgIF9sb2cuZGVidWco
Ildhcm5pbmcsICVzIGxvY2tpbmcgZmFpbGVkISIgJSBzZWxmLl9uYW1lKQotICAgICAgICAgICAg
cmV0dXJuCi0KLSAgICAgICAgIyBGSVhNRTogVGhpcyBjYW4gaGFuZyBmb3JldmVyIQotICAgICAg
ICB3aGlsZSBzZWxmLl9jdXJyZW50X2xvY2tfcGlkKCkgIT0gb3MuZ2V0cGlkKCk6Ci0gICAgICAg
ICAgICB0aW1lLnNsZWVwKDEpCi0KLSAgICAgICAgX2xvZy5kZWJ1ZygiJXMgbG9jayBhY3F1aXJl
ZCIgJSBzZWxmLl9uYW1lKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9odHRwX2xvY2tfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX2xvY2tfdW5pdHRlc3QucHkJKHJldmlz
aW9uIDE0ODQ5NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
aHR0cF9sb2NrX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyMCArMCwwIEBACi0j
IENvcHlyaWdodCAoQykgMjAxMCBHYWJvciBSYXBjc2FueWkgKHJnYWJvckBpbmYudS1zemVnZWQu
aHUpLCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotIwotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwot
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwot
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMg
SVMnJyBBTkQgQU5ZCi0jIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0jIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKLSMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0jIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0jIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSMgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1mcm9tIGh0dHBfbG9jayBpbXBvcnQg
SHR0cExvY2sKLWltcG9ydCBvcyAgIyBVc2VkIGZvciBvcy5nZXRwaWQoKQotaW1wb3J0IHVuaXR0
ZXN0MiBhcyB1bml0dGVzdAotCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3Rl
bV9tb2NrIGltcG9ydCBNb2NrRmlsZVN5c3RlbQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LmV4ZWN1dGl2ZV9tb2NrIGltcG9ydCBNb2NrRXhlY3V0aXZlCi0KLQotIyBGSVhNRTogVGhlc2Ug
dGVzdHMgYWxsIHRvdWNoIHRoZSByZWFsIGRpc2ssIGJ1dCBjb3VsZCBiZSB3cml0dGVuIHRvIGEg
TW9ja0ZpbGVTeXN0ZW0gaW5zdGVhZC4KLWNsYXNzIEh0dHBMb2NrVGVzdFdpdGhSZWFsRmlsZVN5
c3RlbSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgIyBGSVhNRTogVW5pdCB0ZXN0cyBkbyBub3Qg
dXNlIGFuIF9faW5pdF9fIG1ldGhvZCwgYnV0IHJhdGhlciBzZXRVcCBhbmQgdGVhckRvd24gbWV0
aG9kcy4KLSAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdEZ1bmMpOgotICAgICAgICBzZWxmLmh0
dHBfbG9jayA9IEh0dHBMb2NrKE5vbmUsICJXZWJLaXRUZXN0SHR0cGQubG9jay4iLCAiV2ViS2l0
VGVzdC5sb2NrIikKLSAgICAgICAgc2VsZi5maWxlc3lzdGVtID0gc2VsZi5odHRwX2xvY2suX2Zp
bGVzeXN0ZW0gICMgRklYTUU6IFdlIHNob3VsZCBiZSBwYXNzaW5nIGluIGEgTW9ja0ZpbGVTeXN0
ZW0gaW5zdGVhZC4KLSAgICAgICAgc2VsZi5sb2NrX2ZpbGVfcGF0aF9wcmVmaXggPSBzZWxmLmZp
bGVzeXN0ZW0uam9pbihzZWxmLmh0dHBfbG9jay5fbG9ja19wYXRoLCBzZWxmLmh0dHBfbG9jay5f
bG9ja19maWxlX3ByZWZpeCkKLSAgICAgICAgc2VsZi5sb2NrX2ZpbGVfbmFtZSA9IHNlbGYubG9j
a19maWxlX3BhdGhfcHJlZml4ICsgIjAiCi0gICAgICAgIHNlbGYuZ3VhcmRfbG9ja19maWxlID0g
c2VsZi5odHRwX2xvY2suX2d1YXJkX2xvY2tfZmlsZQotICAgICAgICBzZWxmLmNsZWFuX2FsbF9s
b2NrZmlsZSgpCi0gICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLl9faW5pdF9fKHNlbGYsIHRlc3RG
dW5jKQotCi0gICAgZGVmIGNsZWFuX2FsbF9sb2NrZmlsZShzZWxmKToKLSAgICAgICAgaWYgc2Vs
Zi5maWxlc3lzdGVtLmV4aXN0cyhzZWxmLmd1YXJkX2xvY2tfZmlsZSk6Ci0gICAgICAgICAgICBz
ZWxmLmZpbGVzeXN0ZW0ucmVtb3ZlKHNlbGYuZ3VhcmRfbG9ja19maWxlKQotICAgICAgICBsb2Nr
X2xpc3QgPSBzZWxmLmZpbGVzeXN0ZW0uZ2xvYihzZWxmLmxvY2tfZmlsZV9wYXRoX3ByZWZpeCAr
ICcqJykKLSAgICAgICAgZm9yIGZpbGVfbmFtZSBpbiBsb2NrX2xpc3Q6Ci0gICAgICAgICAgICBz
ZWxmLmZpbGVzeXN0ZW0ucmVtb3ZlKGZpbGVfbmFtZSkKLQotICAgIGRlZiBhc3NlcnRFcXVhbChz
ZWxmLCBmaXJzdCwgc2Vjb25kKToKLSAgICAgICAgaWYgZmlyc3QgIT0gc2Vjb25kOgotICAgICAg
ICAgICAgc2VsZi5jbGVhbl9hbGxfbG9ja2ZpbGUoKQotICAgICAgICB1bml0dGVzdC5UZXN0Q2Fz
ZS5hc3NlcnRFcXVhbChzZWxmLCBmaXJzdCwgc2Vjb25kKQotCi0gICAgZGVmIF9jaGVja19sb2Nr
X2ZpbGUoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuZmlsZXN5c3RlbS5leGlzdHMoc2VsZi5sb2Nr
X2ZpbGVfbmFtZSk6Ci0gICAgICAgICAgICBwaWQgPSBvcy5nZXRwaWQoKQotICAgICAgICAgICAg
bG9ja19maWxlX3BpZCA9IHNlbGYuZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShzZWxmLmxvY2tf
ZmlsZV9uYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaWQsIGludChsb2NrX2Zp
bGVfcGlkKSkKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBGYWxzZQot
Ci0gICAgZGVmIHRlc3RfbG9ja19saWZlY3ljbGUoc2VsZik6Ci0gICAgICAgIHNlbGYuaHR0cF9s
b2NrLl9jcmVhdGVfbG9ja19maWxlKCkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUs
IHNlbGYuX2NoZWNrX2xvY2tfZmlsZSgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNl
bGYuaHR0cF9sb2NrLl9uZXh0X2xvY2tfbnVtYmVyKCkpCi0KLSAgICAgICAgc2VsZi5odHRwX2xv
Y2suY2xlYW51cF9odHRwX2xvY2soKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2Us
IHNlbGYuX2NoZWNrX2xvY2tfZmlsZSgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHNl
bGYuaHR0cF9sb2NrLl9uZXh0X2xvY2tfbnVtYmVyKCkpCi0KLQotY2xhc3MgSHR0cExvY2tUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYu
ZmlsZXN5c3RlbSA9IE1vY2tGaWxlU3lzdGVtKCkKLSAgICAgICAgc2VsZi5odHRwX2xvY2sgPSBI
dHRwTG9jayhOb25lLCAiV2ViS2l0VGVzdEh0dHBkLmxvY2suIiwgIldlYktpdFRlc3QubG9jayIs
IGZpbGVzeXN0ZW09c2VsZi5maWxlc3lzdGVtLCBleGVjdXRpdmU9TW9ja0V4ZWN1dGl2ZSgpKQot
ICAgICAgICAjIEZJWE1FOiBTaG91bGRuJ3Qgd2UgYmUgYWJsZSB0byBnZXQgdGhlc2UgdmFsdWVz
IGZyb20gdGhlIGh0dHBfbG9jayBvYmplY3QgZGlyZWN0bHk/Ci0gICAgICAgIHNlbGYubG9ja19m
aWxlX3BhdGhfcHJlZml4ID0gc2VsZi5maWxlc3lzdGVtLmpvaW4oc2VsZi5odHRwX2xvY2suX2xv
Y2tfcGF0aCwgc2VsZi5odHRwX2xvY2suX2xvY2tfZmlsZV9wcmVmaXgpCi0gICAgICAgIHNlbGYu
bG9ja19maWxlX25hbWUgPSBzZWxmLmxvY2tfZmlsZV9wYXRoX3ByZWZpeCArICIwIgotCi0gICAg
ZGVmIHRlc3RfY3VycmVudF9sb2NrX3BpZChzZWxmKToKLSAgICAgICAgIyBGSVhNRTogT25jZSBF
eGVjdXRpdmUgd3JhcHMgZ2V0cGlkLCB3ZSBjYW4gbW9jayB0aGlzIGFuZCBub3QgdXNlIGEgcmVh
bCBwaWQuCi0gICAgICAgIGN1cnJlbnRfcGlkID0gb3MuZ2V0cGlkKCkKLSAgICAgICAgc2VsZi5o
dHRwX2xvY2suX2ZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKHNlbGYubG9ja19maWxlX25hbWUs
IHN0cihjdXJyZW50X3BpZCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX2xv
Y2suX2N1cnJlbnRfbG9ja19waWQoKSwgY3VycmVudF9waWQpCi0KLSAgICBkZWYgdGVzdF9leHRy
YWN0X2xvY2tfbnVtYmVyKHNlbGYpOgotICAgICAgICBsb2NrX2ZpbGVfbGlzdCA9ICgKLSAgICAg
ICAgICAgIHNlbGYubG9ja19maWxlX3BhdGhfcHJlZml4ICsgIjAwIiwKLSAgICAgICAgICAgIHNl
bGYubG9ja19maWxlX3BhdGhfcHJlZml4ICsgIjkiLAotICAgICAgICAgICAgc2VsZi5sb2NrX2Zp
bGVfcGF0aF9wcmVmaXggKyAiMDAxIiwKLSAgICAgICAgICAgIHNlbGYubG9ja19maWxlX3BhdGhf
cHJlZml4ICsgIjAyMSIsCi0gICAgICAgICkKLQotICAgICAgICBleHBlY3RlZF9udW1iZXJfbGlz
dCA9ICgwLCA5LCAxLCAyMSkKLQotICAgICAgICBmb3IgbG9ja19maWxlLCBleHBlY3RlZCBpbiB6
aXAobG9ja19maWxlX2xpc3QsIGV4cGVjdGVkX251bWJlcl9saXN0KToKLSAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX2xvY2suX2V4dHJhY3RfbG9ja19udW1iZXIobG9ja19m
aWxlKSwgZXhwZWN0ZWQpCi0KLSAgICBkZWYgdGVzdF9sb2NrX2ZpbGVfbGlzdChzZWxmKToKLSAg
ICAgICAgc2VsZi5odHRwX2xvY2suX2ZpbGVzeXN0ZW0gPSBNb2NrRmlsZVN5c3RlbSh7Ci0gICAg
ICAgICAgICBzZWxmLmxvY2tfZmlsZV9wYXRoX3ByZWZpeCArICI2IjogIiIsCi0gICAgICAgICAg
ICBzZWxmLmxvY2tfZmlsZV9wYXRoX3ByZWZpeCArICIxIjogIiIsCi0gICAgICAgICAgICBzZWxm
LmxvY2tfZmlsZV9wYXRoX3ByZWZpeCArICI0IjogIiIsCi0gICAgICAgICAgICBzZWxmLmxvY2tf
ZmlsZV9wYXRoX3ByZWZpeCArICIzIjogIiIsCi0gICAgICAgIH0pCi0KLSAgICAgICAgZXhwZWN0
ZWRfZmlsZV9saXN0ID0gWwotICAgICAgICAgICAgc2VsZi5sb2NrX2ZpbGVfcGF0aF9wcmVmaXgg
KyAiMSIsCi0gICAgICAgICAgICBzZWxmLmxvY2tfZmlsZV9wYXRoX3ByZWZpeCArICIzIiwKLSAg
ICAgICAgICAgIHNlbGYubG9ja19maWxlX3BhdGhfcHJlZml4ICsgIjQiLAotICAgICAgICAgICAg
c2VsZi5sb2NrX2ZpbGVfcGF0aF9wcmVmaXggKyAiNiIsCi0gICAgICAgIF0KLQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlbGYuaHR0cF9sb2NrLl9sb2NrX2ZpbGVfbGlzdCgpLCBleHBlY3Rl
ZF9maWxlX2xpc3QpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2ltYWdlX2RpZmYucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9pbWFnZV9kaWZmLnB5CShyZXZpc2lvbiAxNDg0OTcpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ltYWdlX2RpZmYucHkJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTE4ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoQykgMjAxMCBHYWJvciBSYXBj
c2FueWkgPHJnYWJvckBpbmYudS1zemVnZWQuaHU+LCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotIyBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
IwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9u
LgotIyAgICAgKiBOZWl0aGVyIHRoZSBHb29nbGUgbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cwot
IyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLSIiIldlYktpdCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIFBvcnQgaW50ZXJm
YWNlLiIiIgotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHJlCi1pbXBvcnQgdGltZQotCi1mcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBzZXJ2ZXJfcHJvY2VzcwotCi0KLV9s
b2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKLQotCi1jbGFzcyBJbWFnZURpZmZlcihv
YmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0KToKLSAgICAgICAgc2VsZi5fcG9y
dCA9IHBvcnQKLSAgICAgICAgc2VsZi5fdG9sZXJhbmNlID0gTm9uZQotICAgICAgICBzZWxmLl9w
cm9jZXNzID0gTm9uZQotCi0gICAgZGVmIGRpZmZfaW1hZ2Uoc2VsZiwgZXhwZWN0ZWRfY29udGVu
dHMsIGFjdHVhbF9jb250ZW50cywgdG9sZXJhbmNlKToKLSAgICAgICAgaWYgdG9sZXJhbmNlICE9
IHNlbGYuX3RvbGVyYW5jZToKLSAgICAgICAgICAgIHNlbGYuc3RvcCgpCi0gICAgICAgIHRyeToK
LSAgICAgICAgICAgIGFzc2VydChleHBlY3RlZF9jb250ZW50cykKLSAgICAgICAgICAgIGFzc2Vy
dChhY3R1YWxfY29udGVudHMpCi0gICAgICAgICAgICBhc3NlcnQodG9sZXJhbmNlIGlzIG5vdCBO
b25lKQotCi0gICAgICAgICAgICBpZiBub3Qgc2VsZi5fcHJvY2VzczoKLSAgICAgICAgICAgICAg
ICBzZWxmLl9zdGFydCh0b2xlcmFuY2UpCi0gICAgICAgICAgICAjIE5vdGUgdGhhdCBhbHRob3Vn
aCB3ZSBhcmUgaGFuZGVkICdvbGQnLCAnbmV3JywgSW1hZ2VEaWZmIHdhbnRzICduZXcnLCAnb2xk
Jy4KLSAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3Mud3JpdGUoJ0NvbnRlbnQtTGVuZ3RoOiAlZFxu
JXNDb250ZW50LUxlbmd0aDogJWRcbiVzJyAlICgKLSAgICAgICAgICAgICAgICBsZW4oYWN0dWFs
X2NvbnRlbnRzKSwgYWN0dWFsX2NvbnRlbnRzLAotICAgICAgICAgICAgICAgIGxlbihleHBlY3Rl
ZF9jb250ZW50cyksIGV4cGVjdGVkX2NvbnRlbnRzKSkKLSAgICAgICAgICAgIHJldHVybiBzZWxm
Ll9yZWFkKCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXhjZXB0aW9uOgotICAgICAgICAg
ICAgcmV0dXJuIChOb25lLCAwLCAiRmFpbGVkIHRvIGNvbXB1dGUgYW4gaW1hZ2UgZGlmZjogJXMi
ICUgc3RyKGV4Y2VwdGlvbikpCi0KLSAgICBkZWYgX3N0YXJ0KHNlbGYsIHRvbGVyYW5jZSk6Ci0g
ICAgICAgIGNvbW1hbmQgPSBbc2VsZi5fcG9ydC5fcGF0aF90b19pbWFnZV9kaWZmKCksICctLXRv
bGVyYW5jZScsIHN0cih0b2xlcmFuY2UpXQotICAgICAgICBlbnZpcm9ubWVudCA9IHNlbGYuX3Bv
cnQuc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKCdJbWFnZURpZmYnKQotICAgICAgICBzZWxmLl9w
cm9jZXNzID0gc2VsZi5fcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3Ioc2VsZi5fcG9y
dCwgJ0ltYWdlRGlmZicsIGNvbW1hbmQsIGVudmlyb25tZW50KQotICAgICAgICBzZWxmLl9wcm9j
ZXNzLnN0YXJ0KCkKLSAgICAgICAgc2VsZi5fdG9sZXJhbmNlID0gdG9sZXJhbmNlCi0KLSAgICBk
ZWYgX3JlYWQoc2VsZik6Ci0gICAgICAgIGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyAyLjAKLSAg
ICAgICAgb3V0cHV0ID0gTm9uZQotICAgICAgICBvdXRwdXRfaW1hZ2UgPSAiIgotCi0gICAgICAg
IHdoaWxlIG5vdCBzZWxmLl9wcm9jZXNzLnRpbWVkX291dCBhbmQgbm90IHNlbGYuX3Byb2Nlc3Mu
aGFzX2NyYXNoZWQoKToKLSAgICAgICAgICAgIG91dHB1dCA9IHNlbGYuX3Byb2Nlc3MucmVhZF9z
dGRvdXRfbGluZShkZWFkbGluZSkKLSAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3MudGltZWRf
b3V0IG9yIHNlbGYuX3Byb2Nlc3MuaGFzX2NyYXNoZWQoKSBvciBub3Qgb3V0cHV0OgotICAgICAg
ICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgICAgIGlmIG91dHB1dC5zdGFydHN3aXRoKCdkaWZm
Jyk6ICAjIFRoaXMgaXMgdGhlIGxhc3QgbGluZSBJbWFnZURpZmYgcHJpbnRzLgotICAgICAgICAg
ICAgICAgIGJyZWFrCi0KLSAgICAgICAgICAgIGlmIG91dHB1dC5zdGFydHN3aXRoKCdDb250ZW50
LUxlbmd0aCcpOgotICAgICAgICAgICAgICAgIG0gPSByZS5tYXRjaCgnQ29udGVudC1MZW5ndGg6
IChcZCspJywgb3V0cHV0KQotICAgICAgICAgICAgICAgIGNvbnRlbnRfbGVuZ3RoID0gaW50KG0u
Z3JvdXAoMSkpCi0gICAgICAgICAgICAgICAgb3V0cHV0X2ltYWdlID0gc2VsZi5fcHJvY2Vzcy5y
ZWFkX3N0ZG91dChkZWFkbGluZSwgY29udGVudF9sZW5ndGgpCi0gICAgICAgICAgICAgICAgb3V0
cHV0ID0gc2VsZi5fcHJvY2Vzcy5yZWFkX3N0ZG91dF9saW5lKGRlYWRsaW5lKQotICAgICAgICAg
ICAgICAgIGJyZWFrCi0KLSAgICAgICAgc3RkZXJyID0gc2VsZi5fcHJvY2Vzcy5wb3BfYWxsX2J1
ZmZlcmVkX3N0ZGVycigpCi0gICAgICAgIGVycl9zdHIgPSAnJwotICAgICAgICBpZiBzdGRlcnI6
Ci0gICAgICAgICAgICBlcnJfc3RyICs9ICJJbWFnZURpZmYgcHJvZHVjZWQgc3RkZXJyIG91dHB1
dDpcbiIgKyBzdGRlcnIKLSAgICAgICAgaWYgc2VsZi5fcHJvY2Vzcy50aW1lZF9vdXQ6Ci0gICAg
ICAgICAgICBlcnJfc3RyICs9ICJJbWFnZURpZmYgdGltZWQgb3V0XG4iCi0gICAgICAgIGlmIHNl
bGYuX3Byb2Nlc3MuaGFzX2NyYXNoZWQoKToKLSAgICAgICAgICAgIGVycl9zdHIgKz0gIkltYWdl
RGlmZiBjcmFzaGVkXG4iCi0KLSAgICAgICAgIyBGSVhNRTogVGhlcmUgaXMgbm8gbmVlZCB0byBz
aHV0IGRvd24gdGhlIEltYWdlRGlmZiBzZXJ2ZXIgYWZ0ZXIgZXZlcnkgZGlmZi4KLSAgICAgICAg
c2VsZi5fcHJvY2Vzcy5zdG9wKCkKLQotICAgICAgICBkaWZmX3BlcmNlbnQgPSAwCi0gICAgICAg
IGlmIG91dHB1dCBhbmQgb3V0cHV0LnN0YXJ0c3dpdGgoJ2RpZmYnKToKLSAgICAgICAgICAgIG0g
PSByZS5tYXRjaCgnZGlmZjogKC4rKSUgKHBhc3NlZHxmYWlsZWQpJywgb3V0cHV0KQotICAgICAg
ICAgICAgaWYgbS5ncm91cCgyKSA9PSAncGFzc2VkJzoKLSAgICAgICAgICAgICAgICByZXR1cm4g
KE5vbmUsIDAsIE5vbmUpCi0gICAgICAgICAgICBkaWZmX3BlcmNlbnQgPSBmbG9hdChtLmdyb3Vw
KDEpKQotCi0gICAgICAgIHJldHVybiAob3V0cHV0X2ltYWdlLCBkaWZmX3BlcmNlbnQsIGVycl9z
dHIgb3IgTm9uZSkKLQotICAgIGRlZiBzdG9wKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9wcm9j
ZXNzOgotICAgICAgICAgICAgc2VsZi5fcHJvY2Vzcy5zdG9wKCkKLSAgICAgICAgICAgIHNlbGYu
X3Byb2Nlc3MgPSBOb25lCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2ltYWdlX2RpZmZfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9pbWFnZV9kaWZmX3VuaXR0ZXN0LnB5CShyZXZp
c2lvbiAxNDg0OTcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2ltYWdlX2RpZmZfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNTcgKzAsMCBAQAot
IyBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMK
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
U1VDSCBEQU1BR0UuCi0KLSIiIlVuaXQgdGVzdGluZyBiYXNlIGNsYXNzIGZvciBQb3J0IGltcGxl
bWVudGF0aW9ucy4iIiIKLQotaW1wb3J0IHVuaXR0ZXN0MiBhcyB1bml0dGVzdAotCi1mcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LnNlcnZlcl9wcm9jZXNzX21vY2sgaW1wb3J0IE1vY2tT
ZXJ2ZXJQcm9jZXNzCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmltYWdlX2RpZmYg
aW1wb3J0IEltYWdlRGlmZmVyCi0KLQotY2xhc3MgRmFrZVBvcnQob2JqZWN0KToKLSAgICBkZWYg
X19pbml0X18oc2VsZiwgc2VydmVyX3Byb2Nlc3Nfb3V0cHV0KToKLSAgICAgICAgc2VsZi5fc2Vy
dmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBsYW1iZGEgcG9ydCwgbm0sIGNtZCwgZW52OiBNb2Nr
U2VydmVyUHJvY2VzcyhsaW5lcz1zZXJ2ZXJfcHJvY2Vzc19vdXRwdXQpCi0KLSAgICBkZWYgX3Bh
dGhfdG9faW1hZ2VfZGlmZihzZWxmKToKLSAgICAgICAgcmV0dXJuICcnCi0KLSAgICBkZWYgc2V0
dXBfZW52aXJvbl9mb3Jfc2VydmVyKHNlbGYsIG5tKToKLSAgICAgICAgcmV0dXJuIE5vbmUKLQot
Ci1jbGFzcyBUZXN0SW1hZ2VEaWZmZXIodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0
X2RpZmZfaW1hZ2VfZmFpbGVkKHNlbGYpOgotICAgICAgICBwb3J0ID0gRmFrZVBvcnQoWydkaWZm
OiAxMDAlIGZhaWxlZFxuJ10pCi0gICAgICAgIGltYWdlX2RpZmZlciA9IEltYWdlRGlmZmVyKHBv
cnQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VfZGlmZmVyLmRpZmZfaW1hZ2UoJ2Zv
bycsICdiYXInLCAwLjEpLCAoJycsIDEwMC4wLCBOb25lKSkKLQotICAgIGRlZiB0ZXN0X2RpZmZf
aW1hZ2VfcGFzc2VkKHNlbGYpOgotICAgICAgICBwb3J0ID0gRmFrZVBvcnQoWydkaWZmOiAwJSBw
YXNzZWRcbiddKQotICAgICAgICBpbWFnZV9kaWZmZXIgPSBJbWFnZURpZmZlcihwb3J0KQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlX2RpZmZlci5kaWZmX2ltYWdlKCdmb28nLCAnYmFy
JywgMC4xKSwgKE5vbmUsIDAsIE5vbmUpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9sZWFrZGV0ZWN0b3IucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9sZWFrZGV0ZWN0b3IucHkJKHJldmlzaW9u
IDE0ODQ5NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbGVh
a2RldGVjdG9yLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1MyArMCwwIEBACi0jIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMg
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBO
ZWl0aGVyIHRoZSBHb29nbGUgbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgcmUKLQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKLQotX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KF9fbmFtZV9fKQotCi0KLSMgSWYgb3RoZXIgcG9ydHMvcGxhdGZvcm1zIGRlY2lkZSB0byBzdXBw
b3J0IC0tbGVha3MsIHdlIHNob3VsZCBzZWUgYWJvdXQgc2hhcmluZyBhcyBtdWNoIG9mIHRoaXMg
Y29kZSBhcyBwb3NzaWJsZS4KLSMgUmlnaHQgbm93IHRoaXMgY29kZSBpcyBvbmx5IHVzZWQgYnkg
QXBwbGUncyBNYWNQb3J0LgotCi1jbGFzcyBMZWFrRGV0ZWN0b3Iob2JqZWN0KToKLSAgICBkZWYg
X19pbml0X18oc2VsZiwgcG9ydCk6Ci0gICAgICAgICMgV2Ugc2hvdWxkIG9wZXJhdGUgb24gYSAi
cGxhdGZvcm0iIG5vdCBhIHBvcnQgaGVyZS4KLSAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKLSAg
ICAgICAgc2VsZi5fZXhlY3V0aXZlID0gcG9ydC5fZXhlY3V0aXZlCi0gICAgICAgIHNlbGYuX2Zp
bGVzeXN0ZW0gPSBwb3J0Ll9maWxlc3lzdGVtCi0KLSAgICAjIFdlIGV4Y2x1ZGUgdGhlIGZvbGxv
d2luZyByZXBvcnRlZCBsZWFrcyBzbyB0aGV5IGRvIG5vdCBnZXQgaW4gb3VyIHdheSB3aGVuIGxv
b2tpbmcgZm9yIFdlYktpdCBsZWFrczoKLSAgICAjIFRoaXMgYWxsb3dzIHVzIGlnbm9yZSBrbm93
biBsZWFrcyBhbmQgb25seSBiZSBhbGVydGVkIHdoZW4gbmV3IGxlYWtzIG9jY3VyLiBTb21lIGxl
YWtzIGFyZSBpbiB0aGUgb2xkCi0gICAgIyB2ZXJzaW9ucyBvZiB0aGUgc3lzdGVtIGZyYW1ld29y
a3MgdGhhdCBhcmUgYmVpbmcgdXNlZCBieSB0aGUgbGVha3MgYm90cy4gRXZlbiB0aG91Z2ggYSBs
ZWFrIGhhcyBiZWVuCi0gICAgIyBmaXhlZCwgaXQgd2lsbCBiZSBsaXN0ZWQgaGVyZSB1bnRpbCB0
aGUgYm90IGhhcyBiZWVuIHVwZGF0ZWQgd2l0aCB0aGUgbmV3ZXIgZnJhbWV3b3Jrcy4KLSAgICBk
ZWYgX3R5cGVzX3RvX2V4bHVkZV9mcm9tX2xlYWtzKHNlbGYpOgotICAgICAgICAjIEN1cnJlbnRs
eSB3ZSBkb24ndCBoYXZlIGFueSB0eXBlIGV4Y2x1ZGVzIGZyb20gT1MgbGVha3MsIGJ1dCB3ZSB3
aWxsIGxpa2VseSBhZ2FpbiBpbiB0aGUgZnV0dXJlLgotICAgICAgICByZXR1cm4gW10KLQotICAg
IGRlZiBfY2FsbHN0YWNrc190b19leGNsdWRlX2Zyb21fbGVha3Moc2VsZik6Ci0gICAgICAgIGNh
bGxzdGFja3MgPSBbCi0gICAgICAgICAgICAiRmxhc2hfRW5mb3JjZUxvY2FsU2VjdXJpdHkiLCAg
IyBsZWFrcyBpbiBGbGFzaCBwbHVnLWluIGNvZGUsIHJkYXI6Ly9wcm9ibGVtLzQ0NDk3NDcKLSAg
ICAgICAgICAgICJTY2FuRnJvbVN0cmluZyIsICMgPGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9h
bmdsZXByb2plY3QvaXNzdWVzL2RldGFpbD9pZD0yNDk+IGxlYWsgaW4gQU5HTEUKLSAgICAgICAg
XQotICAgICAgICBpZiBzZWxmLl9wb3J0LmlzX3Nub3dsZW9wYXJkKCk6Ci0gICAgICAgICAgICBj
YWxsc3RhY2tzICs9IFsKLSAgICAgICAgICAgICAgICAicmVhZE1ha2VyTm90ZVByb3BzIiwgICMg
PHJkYXI6Ly9wcm9ibGVtLzcxNTY0MzI+IGxlYWsgaW4gSW1hZ2VJTwotICAgICAgICAgICAgICAg
ICJRVEtpdE1vdmllQ29udHJvbGxlclZpZXcgY29tcGxldGVVSVNldHVwIiwgICMgPHJkYXI6Ly9w
cm9ibGVtLzcxNTUxNTY+IGxlYWsgaW4gUVRLaXQKLSAgICAgICAgICAgICAgICAiZ2V0Vk1Jbml0
QXJncyIsICAjIDxyZGFyOi8vcHJvYmxlbS83NzE0NDQ0PiBsZWFrIGluIEphdmEKLSAgICAgICAg
ICAgICAgICAiSmF2YV9qYXZhX2xhbmdfU3lzdGVtX2luaXRQcm9wZXJ0aWVzIiwgICMgPHJkYXI6
Ly9wcm9ibGVtLzc3MTQ0NjU+IGxlYWsgaW4gSmF2YQotICAgICAgICAgICAgICAgICJnbHJDb21w
RXhlY3V0ZUtlcm5lbCIsICAjIDxyZGFyOi8vcHJvYmxlbS83ODE1MzkxPiBsZWFrIGluIGdyYXBo
aWNzIGRyaXZlciB3aGlsZSB1c2luZyBPcGVuR0wKLSAgICAgICAgICAgICAgICAiTlNOdW1iZXJG
b3JtYXR0ZXIgZ2V0T2JqZWN0VmFsdWU6Zm9yU3RyaW5nOmVycm9yRGVzY3JpcHRpb246IiwgICMg
PHJkYXI6Ly9wcm9ibGVtLzcxNDkzNTA+IExlYWsgaW4gTlNOdW1iZXJGb3JtYXR0ZXIKLSAgICAg
ICAgICAgIF0KLSAgICAgICAgZWxpZiBzZWxmLl9wb3J0LmlzX2xpb24oKToKLSAgICAgICAgICAg
IGNhbGxzdGFja3MgKz0gWwotICAgICAgICAgICAgICAgICJGaWdCeXRlRmx1bWVDdXN0b21VUkxD
cmVhdGVXaXRoVVJMIiwgIyA8cmRhcjovL3Byb2JsZW0vMTA0NjE5MjY+IGxlYWsgaW4gQ29yZU1l
ZGlhCi0gICAgICAgICAgICAgICAgIlBERlBhZ2VcKFBERlBhZ2VJbnRlcm5hbFwpIHBhZ2VMYXlv
dXRJZkF2YWlsIiwgIyA8cmRhcjovL3Byb2JsZW0vMTA0NjIwNTU+IGxlYWsgaW4gUERGS2l0Ci0g
ICAgICAgICAgICAgICAgIlNlY1RyYW5zZm9ybUV4ZWN1dGUiLCAjIDxyZGFyOi8vcHJvYmxlbS8x
MDQ3MDY2Nz4gbGVhayBpbiBTZWN1cml0eS5mcmFtZXdvcmsKLSAgICAgICAgICAgICAgICAiX05T
Q29weVN0eWxlUmVmRm9yRm9jdXNSaW5nU3R5bGVDbGlwIiwgIyA8cmRhcjovL3Byb2JsZW0vMTA0
NjIwMzE+IGxlYWsgaW4gQXBwS2l0Ci0gICAgICAgICAgICBdCi0gICAgICAgIHJldHVybiBjYWxs
c3RhY2tzCi0KLSAgICBkZWYgX2xlYWtzX2FyZ3Moc2VsZiwgcGlkKToKLSAgICAgICAgbGVha3Nf
YXJncyA9IFtdCi0gICAgICAgIGZvciBjYWxsc3RhY2sgaW4gc2VsZi5fY2FsbHN0YWNrc190b19l
eGNsdWRlX2Zyb21fbGVha3MoKToKLSAgICAgICAgICAgIGxlYWtzX2FyZ3MgKz0gWyctLWV4Y2x1
ZGUtY2FsbHN0YWNrPSVzJyAlIGNhbGxzdGFja10KLSAgICAgICAgZm9yIGV4Y2x1ZGVkX3R5cGUg
aW4gc2VsZi5fdHlwZXNfdG9fZXhsdWRlX2Zyb21fbGVha3MoKToKLSAgICAgICAgICAgIGxlYWtz
X2FyZ3MgKz0gWyctLWV4Y2x1ZGUtdHlwZT0lcycgJSBleGNsdWRlZF90eXBlXQotICAgICAgICBs
ZWFrc19hcmdzLmFwcGVuZChwaWQpCi0gICAgICAgIHJldHVybiBsZWFrc19hcmdzCi0KLSAgICBk
ZWYgX3BhcnNlX2xlYWtzX291dHB1dChzZWxmLCBsZWFrc19vdXRwdXQpOgotICAgICAgICBfLCBj
b3VudCwgYnl0ZXMgPSByZS5zZWFyY2gocidQcm9jZXNzICg/UDxwaWQ+XGQrKTogKD9QPGNvdW50
PlxkKykgbGVha3M/IGZvciAoP1A8Ynl0ZXM+XGQrKSB0b3RhbCcsIGxlYWtzX291dHB1dCkuZ3Jv
dXBzKCkKLSAgICAgICAgZXhjbHVkZWRfbWF0Y2ggPSByZS5zZWFyY2gocicoP1A8ZXhjbHVkZWQ+
XGQrKSBsZWFrcz8gZXhjbHVkZWQnLCBsZWFrc19vdXRwdXQpCi0gICAgICAgIGV4Y2x1ZGVkID0g
ZXhjbHVkZWRfbWF0Y2guZ3JvdXAoJ2V4Y2x1ZGVkJykgaWYgZXhjbHVkZWRfbWF0Y2ggZWxzZSAw
Ci0gICAgICAgIHJldHVybiBpbnQoY291bnQpLCBpbnQoZXhjbHVkZWQpLCBpbnQoYnl0ZXMpCi0K
LSAgICBkZWYgbGVha3NfZmlsZXNfaW5fZGlyZWN0b3J5KHNlbGYsIGRpcmVjdG9yeSk6Ci0gICAg
ICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmdsb2Ioc2VsZi5fZmlsZXN5c3RlbS5qb2luKGRp
cmVjdG9yeSwgIiotbGVha3MudHh0IikpCi0KLSAgICBkZWYgbGVha3NfZmlsZV9uYW1lKHNlbGYs
IHByb2Nlc3NfbmFtZSwgcHJvY2Vzc19waWQpOgotICAgICAgICAjIFdlIGluY2x1ZGUgdGhlIG51
bWJlciBvZiBmaWxlcyB0aGlzIHdvcmtlciBoYXMgYWxyZWFkeSB3cml0dGVuIGluIHRoZSBuYW1l
IHRvIHByZXZlbnQgb3ZlcndyaXR0aW5nIHByZXZpb3VzIGxlYWsgcmVzdWx0cy4uCi0gICAgICAg
IHJldHVybiAiJXMtJXMtbGVha3MudHh0IiAlIChwcm9jZXNzX25hbWUsIHByb2Nlc3NfcGlkKQot
Ci0gICAgZGVmIGNvdW50X3RvdGFsX2J5dGVzX2FuZF91bmlxdWVfbGVha3Moc2VsZiwgbGVha19m
aWxlcyk6Ci0gICAgICAgIG1lcmdlX2RlcHRoID0gNSAgIyBPUldUIGhhZCBhIC0tbWVyZ2UtbGVh
ay1kZXB0aCBhcmd1bWVudCwgYnV0IHRoYXQgc2VlbXMgb3V0IG9mIHNjb3BlIGZvciB0aGUgcnVu
LXdlYmtpdC10ZXN0cyB0b29sLgotICAgICAgICBhcmdzID0gWwotICAgICAgICAgICAgJy0tbWVy
Z2UtZGVwdGgnLAotICAgICAgICAgICAgbWVyZ2VfZGVwdGgsCi0gICAgICAgIF0gKyBsZWFrX2Zp
bGVzCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHBhcnNlX21hbGxvY19oaXN0b3J5X291dHB1
dCA9IHNlbGYuX3BvcnQuX3J1bl9zY3JpcHQoInBhcnNlLW1hbGxvYy1oaXN0b3J5IiwgYXJncywg
aW5jbHVkZV9jb25maWd1cmF0aW9uX2FyZ3VtZW50cz1GYWxzZSkKLSAgICAgICAgZXhjZXB0IFNj
cmlwdEVycm9yLCBlOgotICAgICAgICAgICAgX2xvZy53YXJuKCJGYWlsZWQgdG8gcGFyc2UgbGVh
a3Mgb3V0cHV0OiAlcyIgJSBlLm1lc3NhZ2Vfd2l0aF9vdXRwdXQoKSkKLSAgICAgICAgICAgIHJl
dHVybgotCi0gICAgICAgICMgdG90YWw6IDUsODg4IGJ5dGVzICgwIGJ5dGVzIGV4Y2x1ZGVkKS4K
LSAgICAgICAgdW5pcXVlX2xlYWtfY291bnQgPSBsZW4ocmUuZmluZGFsbChyJ14oXGQqKVxzY2Fs
bHMnLCBwYXJzZV9tYWxsb2NfaGlzdG9yeV9vdXRwdXQsIHJlLk1VTFRJTElORSkpCi0gICAgICAg
IHRvdGFsX2J5dGVzX3N0cmluZyA9IHJlLnNlYXJjaChyJ150b3RhbFw6XHMoLispXHNcKCcsIHBh
cnNlX21hbGxvY19oaXN0b3J5X291dHB1dCwgcmUuTVVMVElMSU5FKS5ncm91cCgxKQotICAgICAg
ICByZXR1cm4gKHRvdGFsX2J5dGVzX3N0cmluZywgdW5pcXVlX2xlYWtfY291bnQpCi0KLSAgICBk
ZWYgY291bnRfdG90YWxfbGVha3Moc2VsZiwgbGVha19maWxlX3BhdGhzKToKLSAgICAgICAgdG90
YWxfbGVha3MgPSAwCi0gICAgICAgIGZvciBsZWFrX2ZpbGVfcGF0aCBpbiBsZWFrX2ZpbGVfcGF0
aHM6Ci0gICAgICAgICAgICAjIExlYWtzIGhhdmUgYmVlbiBzZWVuIHRvIGluY2x1ZGUgbm9uLXV0
ZjggZGF0YSwgc28gd2UgdXNlIHJlYWRfYmluYXJ5X2ZpbGUuCi0gICAgICAgICAgICAjIFNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMTIuCi0gICAgICAgICAg
ICBsZWFrc19vdXRwdXQgPSBzZWxmLl9maWxlc3lzdGVtLnJlYWRfYmluYXJ5X2ZpbGUobGVha19m
aWxlX3BhdGgpCi0gICAgICAgICAgICBjb3VudCwgXywgXyA9IHNlbGYuX3BhcnNlX2xlYWtzX291
dHB1dChsZWFrc19vdXRwdXQpCi0gICAgICAgICAgICB0b3RhbF9sZWFrcyArPSBjb3VudAotICAg
ICAgICByZXR1cm4gdG90YWxfbGVha3MKLQotICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwg
cHJvY2Vzc19uYW1lLCBwcm9jZXNzX3BpZCk6Ci0gICAgICAgIF9sb2cuZGVidWcoIkNoZWNraW5n
IGZvciBsZWFrcyBpbiAlcyIgJSBwcm9jZXNzX25hbWUpCi0gICAgICAgIHRyeToKLSAgICAgICAg
ICAgICMgT2RkbHkgZW5vdWdoLCBydW4tbGVha3MgKG9yIHRoZSB1bmRlcmx5aW5nIGxlYWtzIHRv
b2wpIGRvZXMgbm90IHNlZW0gdG8gYWx3YXlzIG91dHB1dCB1dGYtOCwKLSAgICAgICAgICAgICMg
dGh1cyB3ZSBwYXNzIGRlY29kZV9vdXRwdXQ9RmFsc2UuICBXaXRob3V0IHRoaXMgY29kZSB3ZSd2
ZSBzZWVuIGVycm9ycyBsaWtlOgotICAgICAgICAgICAgIyAiVW5pY29kZURlY29kZUVycm9yOiAn
dXRmOCcgY29kZWMgY2FuJ3QgZGVjb2RlIGJ5dGUgMHg4OCBpbiBwb3NpdGlvbiA3Nzk4NzQ6IHVu
ZXhwZWN0ZWQgY29kZSBieXRlIgotICAgICAgICAgICAgbGVha3Nfb3V0cHV0ID0gc2VsZi5fcG9y
dC5fcnVuX3NjcmlwdCgicnVuLWxlYWtzIiwgc2VsZi5fbGVha3NfYXJncyhwcm9jZXNzX3BpZCks
IGluY2x1ZGVfY29uZmlndXJhdGlvbl9hcmd1bWVudHM9RmFsc2UsIGRlY29kZV9vdXRwdXQ9RmFs
c2UpCi0gICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciwgZToKLSAgICAgICAgICAgIF9sb2cud2Fy
bigiRmFpbGVkIHRvIHJ1biBsZWFrcyB0b29sOiAlcyIgJSBlLm1lc3NhZ2Vfd2l0aF9vdXRwdXQo
KSkKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgICMgRklYTUU6IFdlIGVuZCB1cCBwYXJz
aW5nIHRoaXMgb3V0cHV0IDMgdGltZXMuICBPbmNlIGhlcmUgYW5kIHR3aWNlIGZvciBzdW1tYXJp
emluZy4KLSAgICAgICAgY291bnQsIGV4Y2x1ZGVkLCBieXRlcyA9IHNlbGYuX3BhcnNlX2xlYWtz
X291dHB1dChsZWFrc19vdXRwdXQpCi0gICAgICAgIGFkanVzdGVkX2NvdW50ID0gY291bnQgLSBl
eGNsdWRlZAotICAgICAgICBpZiBub3QgYWRqdXN0ZWRfY291bnQ6Ci0gICAgICAgICAgICByZXR1
cm4KLQotICAgICAgICBsZWFrc19maWxlbmFtZSA9IHNlbGYubGVha3NfZmlsZV9uYW1lKHByb2Nl
c3NfbmFtZSwgcHJvY2Vzc19waWQpCi0gICAgICAgIGxlYWtzX291dHB1dF9wYXRoID0gc2VsZi5f
ZmlsZXN5c3RlbS5qb2luKHNlbGYuX3BvcnQucmVzdWx0c19kaXJlY3RvcnkoKSwgbGVha3NfZmls
ZW5hbWUpCi0gICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVfYmluYXJ5X2ZpbGUobGVha3Nf
b3V0cHV0X3BhdGgsIGxlYWtzX291dHB1dCkKLQotICAgICAgICAjIEZJWE1FOiBJZGVhbGx5IHdl
IHdvdWxkIG5vdCBiZSBsb2dnaW5nIGZyb20gdGhlIHdvcmtlciBwcm9jZXNzLCBidXQgcmF0aGVy
IHBhc3MgdGhlIGxlYWsKLSAgICAgICAgIyBpbmZvcm1hdGlvbiBiYWNrIHRvIHRoZSBtYW5hZ2Vy
IGFuZCBoYXZlIGl0IGxvZy4KLSAgICAgICAgaWYgZXhjbHVkZWQ6Ci0gICAgICAgICAgICBfbG9n
LmluZm8oIiVzIGxlYWtzICglcyBieXRlcyBpbmNsdWRpbmcgJXMgZXhjbHVkZWQgbGVha3MpIHdl
cmUgZm91bmQsIGRldGFpbHMgaW4gJXMiICUgKGFkanVzdGVkX2NvdW50LCBieXRlcywgZXhjbHVk
ZWQsIGxlYWtzX291dHB1dF9wYXRoKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIF9sb2cu
aW5mbygiJXMgbGVha3MgKCVzIGJ5dGVzKSB3ZXJlIGZvdW5kLCBkZXRhaWxzIGluICVzIiAlIChj
b3VudCwgYnl0ZXMsIGxlYWtzX291dHB1dF9wYXRoKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbGVha2RldGVjdG9yX3VuaXR0ZXN0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbGVha2RldGVj
dG9yX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAxNDg0OTcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2xlYWtkZXRlY3Rvcl91bml0dGVzdC5weQkod29ya2luZyBj
b3B5KQpAQCAtMSwxNTIgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMg
bWV0OgotIwotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCB1bml0dGVzdDIg
YXMgdW5pdHRlc3QKLQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5sZWFrZGV0ZWN0
b3IgaW1wb3J0IExlYWtEZXRlY3RvcgotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVz
eXN0ZW1fbW9jayBpbXBvcnQgTW9ja0ZpbGVTeXN0ZW0KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJlCi1mcm9tIHdlYmtpdHB5LmNv
bW1vbi5zeXN0ZW0uZXhlY3V0aXZlX21vY2sgaW1wb3J0IE1vY2tFeGVjdXRpdmUKLQotCi1jbGFz
cyBMZWFrRGV0ZWN0b3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgX21vY2tfcG9y
dChzZWxmKToKLSAgICAgICAgY2xhc3MgTW9ja1BvcnQob2JqZWN0KToKLSAgICAgICAgICAgIGRl
ZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gTW9j
a0ZpbGVTeXN0ZW0oKQotICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZSA9IE1vY2tFeGVj
dXRpdmUoKQotCi0gICAgICAgIHJldHVybiBNb2NrUG9ydCgpCi0KLSAgICBkZWYgX21ha2VfZGV0
ZWN0b3Ioc2VsZik6Ci0gICAgICAgIHJldHVybiBMZWFrRGV0ZWN0b3Ioc2VsZi5fbW9ja19wb3J0
KCkpCi0KLSAgICBkZWYgdGVzdF9sZWFrc19hcmdzKHNlbGYpOgotICAgICAgICBkZXRlY3RvciA9
IHNlbGYuX21ha2VfZGV0ZWN0b3IoKQotICAgICAgICBkZXRlY3Rvci5fY2FsbHN0YWNrc190b19l
eGNsdWRlX2Zyb21fbGVha3MgPSBsYW1iZGE6IFsnZm9vIGJhcicsICdCQVonXQotICAgICAgICBk
ZXRlY3Rvci5fdHlwZXNfdG9fZXhsdWRlX2Zyb21fbGVha3MgPSBsYW1iZGE6IFsnYWJjZGVmZycs
ICdoaSBqa2xtbm8nXQotICAgICAgICBleHBlY3RlZF9hcmdzID0gWyctLWV4Y2x1ZGUtY2FsbHN0
YWNrPWZvbyBiYXInLCAnLS1leGNsdWRlLWNhbGxzdGFjaz1CQVonLCAnLS1leGNsdWRlLXR5cGU9
YWJjZGVmZycsICctLWV4Y2x1ZGUtdHlwZT1oaSBqa2xtbm8nLCAxMjM0XQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGRldGVjdG9yLl9sZWFrc19hcmdzKDEyMzQpLCBleHBlY3RlZF9hcmdzKQot
Ci0gICAgZXhhbXBsZV9sZWFrc19vdXRwdXQgPSAiIiJQcm9jZXNzIDUxMjI6IDY2Mzc0NCBub2Rl
cyBtYWxsb2NlZCBmb3IgNzg2ODMgS0IKLVByb2Nlc3MgNTEyMjogMzM3MzAxIGxlYWtzIGZvciA2
NTI1MjE2IHRvdGFsIGxlYWtlZCBieXRlcy4KLUxlYWs6IDB4MzhjYjYwMCAgc2l6ZT0zMDcyICB6
b25lOiBEZWZhdWx0TWFsbG9jWm9uZV8weDFkOTQwMDAgICBpbnN0YW5jZSBvZiAnTlNDRkRhdGEn
LCB0eXBlIE9iakMsIGltcGxlbWVudGVkIGluIEZvdW5kYXRpb24KLSAgICAgICAgMHhhMDMzZjBi
OCAweDAxMDAxMzg0IDB4MDAwMDBiM2EgMHgwMDAwMGIzYSAgICAgLi4zLi4uLi46Li4uOi4uLgot
ICAgICAgICAweDAwMDAwMDAwIDB4MDM4Y2I2MjAgMHgwMDAwMDAwMCAweDAwMDAwMDAwICAgICAu
Li4uIC4uLi4uLi4uLi4uCi0gICAgICAgIDB4MDAwMDAwMDAgMHgyMTAwMDAwMCAweDcyNmM2NDY4
IDB4MDAwMDAwMDAgICAgIC4uLi4uLi4haGRsci4uLi4KLSAgICAgICAgMHgwMDAwMDAwMCAweDcy
Njk2NDZkIDB4NmM3MDcwNjEgMHgwMDAwMDAwMCAgICAgLi4uLm1kaXJhcHBsLi4uLgotICAgICAg
ICAweDAwMDAwMDAwIDB4MDQwMDAwMDAgMHg3MzZjNjljMSAweDAwMDAwMDc0ICAgICAuLi4uLi4u
Li5pbHN0Li4uCi0gICAgICAgIDB4NmY3NGE5MjMgMHgwMDAwMDA2ZiAweDc0NjE2NDFiIDB4MDAw
MDAwNjEgICAgICMudG9vLi4uLmRhdGEuLi4KLSAgICAgICAgMHgwMDAwMDAwMSAweDc2NjE0YzAw
IDB4MmUzMjM1NjYgMHgzMDJlMzIzNiAgICAgLi4uLi5MYXZmNTIuNjIuMAotICAgICAgICAweDM3
MDAwMDAwIDB4NmQ2MTZlYTkgMHgyZjAwMDAwMCAweDYxNzQ2MTY0ICAgICAuLi43Lm5hbS4uLi9k
YXRhCi0gICAgICAgIC4uLgotTGVhazogMHgyYTljOTYwICBzaXplPTI4OCAgem9uZTogRGVmYXVs
dE1hbGxvY1pvbmVfMHgxZDk0MDAwCi0gICAgICAgIDB4MDlhMWNjNDcgMHgxYmRhODU2MCAweDNk
NDcyY2QxIDB4ZmJlOWJjY2QgICAgIEcuLi5gLi4uLixHPS4uLi4KLSAgICAgICAgMHg4YmNkYTAw
OCAweDllOTcyYTkxIDB4YTg5MmNmNjMgMHgyNDQ4YmRiMCAgICAgLi4uLi4qLi5jLi4uLi5IJAot
ICAgICAgICAweDQ3MzZmYzM0IDB4ZGJlMmQ5NGUgMHgyNWY1NjY4OCAweDgzOTQwMmE0ICAgICA0
LjZHTi4uLi5mLiUuLi4uCi0gICAgICAgIDB4ZDEyNDk2YjMgMHg1OWM0MGMxMiAweDhjZmNhYjJh
IDB4ZDIwZWY5YzQgICAgIC4uJC4uLi5ZKi4uLi4uLi4KLSAgICAgICAgMHhlN2M1NmIxYiAweDU4
MzVhZjQ1IDB4YzY5MTE1ZGUgMHg2OTIzZTRiYiAgICAgLmsuLkUuNVguLi4uLi4jaQotICAgICAg
ICAweDg2ZjE1NTUzIDB4MTVkNDBmYTkgMHg2ODEyODhhNCAweGMzMzI5OGE5ICAgICBTVS4uLi4u
Li4uLmguLjIuCi0gICAgICAgIDB4NDM5YmI1MzUgMHhjNGZjNzQzZCAweDdkZmFhZmY4IDB4MmNj
NDlhNGEgICAgIDUuLkM9dC4uLi4ufUouLiwKLSAgICAgICAgMHhkZDExOWRmOCAweDdlMDg2ODIx
IDB4M2Q3ZDEyOWUgMHgyZTFiMTU0NyAgICAgLi4uLiFoLn4uLn09Ry4uLgotICAgICAgICAuLi4K
LUxlYWs6IDB4MjUxMDJmZTAgIHNpemU9MTc2ICB6b25lOiBEZWZhdWx0TWFsbG9jWm9uZV8weDFk
OTQwMDAgICBzdHJpbmcgJ05TRXhjZXB0aW9uIERhdGEnCi0iIiIKLQotICAgIGV4YW1wbGVfbGVh
a3Nfb3V0cHV0X3dpdGhfZXhjbHVzaW9ucyA9ICIiIgotUHJvY2VzcyA1NzA2NDogODY1ODA4IG5v
ZGVzIG1hbGxvY2VkIGZvciA4MTAzMiBLQgotUHJvY2VzcyA1NzA2NDogMjgyIGxlYWtzIGZvciAy
MTkyMCB0b3RhbCBsZWFrZWQgYnl0ZXMuCi1MZWFrOiAweDdmYzUwNjAyMzk2MCAgc2l6ZT01NzYg
IHpvbmU6IERlZmF1bHRNYWxsb2Nab25lXzB4MTA3YzI5MDAwICAgVVJMQ29ubmVjdGlvbkxvYWRl
cjo6TG9hZGVyQ29ubmVjdGlvbkV2ZW50UXVldWUgIEMrKyAgQ0ZOZXR3b3JrCi0gICAgICAgIDB4
NzMzOTU0NjAgMHgwMDAwN2ZmZiAweDc0ODhhZjQwIDB4MDAwMDdmZmYgICAgIGBUOXMuLi4uQC4u
dC4uLi4KLSAgICAgICAgMHg3MzM5NTQ4OCAweDAwMDA3ZmZmIDB4NDZlZWNkNzQgMHgwMDAxZWQ4
MyAgICAgLlQ5cy4uLi50Li5GLi4uLgotICAgICAgICAweDAxMDAwMDBhIDB4MDAwMDAwMDAgMHg3
NDg4YmZjMCAweDAwMDA3ZmZmICAgICAuLi4uLi4uLi4uLnQuLi4uCi0gICAgICAgIDB4MDAwMDAw
MDAgMHgwMDAwMDAwMCAweDQ2ZWVjZDhiIDB4MDAwMWVkODMgICAgIC4uLi4uLi4uLi4uRi4uLi4K
LSAgICAgICAgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAgICAg
Li4uLi4uLi4uLi4uLi4uLgotICAgICAgICAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHg0NmVlY2Rh
MyAweDAwMDFlZDgzICAgICAuLi4uLi4uLi4uLkYuLi4uCi0gICAgICAgIDB4MDAwMDAwMDAgMHgw
MDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDAgICAgIC4uLi4uLi4uLi4uLi4uLi4KLSAgICAg
ICAgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4NDZlZWNkYmMgMHgwMDAxZWQ4MyAgICAgLi4uLi4u
Li4uLi5GLi4uLgotICAgICAgICAuLi4KLUxlYWs6IDB4N2ZjNTA2MDI1OTgwICBzaXplPTQzMiAg
em9uZTogRGVmYXVsdE1hbGxvY1pvbmVfMHgxMDdjMjkwMDAgICBVUkxDb25uZWN0aW9uSW5zdGFu
Y2VEYXRhICBDRlR5cGUgIENGTmV0d29yawotICAgICAgICAweDc0ODYyYjI4IDB4MDAwMDdmZmYg
MHgwMDAxMmI4MCAweDAwMDAwMDAxICAgICAoKy50Li4uLi4rLi4uLi4uCi0gICAgICAgIDB4NzMz
OTUzMTAgMHgwMDAwN2ZmZiAweDczMzk1M2Y4IDB4MDAwMDdmZmYgICAgIC5TOXMuLi4uLlM5cy4u
Li4KLSAgICAgICAgMHg0ZDU1NTQ1OCAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMjA2OCAg
ICAgWFRVTS4uLi4uLi4uaCAuLgotICAgICAgICAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAw
MGIwMCAweDAwMDAwYjAwICAgICAuLi4uLi4uLi4uLi4uLi4uCi0gICAgICAgIDB4MDAwMDAwMDAg
MHgwMDAwMDAwMCAweDA2MDI1OWI4IDB4MDAwMDdmYzUgICAgIC4uLi4uLi4uLlkuLi4uLi4KLSAg
ICAgICAgMHgwNjAyNTliYyAweDAwMDA3ZmM1IDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAgICAgLlku
Li4uLi4uLi4uLi4uLgotICAgICAgICAweDczMzk1NDE4IDB4MDAwMDdmZmYgMHgwNjAyNTk1MCAw
eDAwMDA3ZmM1ICAgICAuVDlzLi4uLlBZLi4uLi4uCi0gICAgICAgIDB4NzMzOTU0NDAgMHgwMDAw
N2ZmZiAweDAwMDA1MDEzIDB4MDAwMDAwMDEgICAgIEBUOXMuLi4uLlAuLi4uLi4KLSAgICAgICAg
Li4uCi0KLQotQmluYXJ5IEltYWdlczoKLSAgICAgICAweDEwN2FjMjAwMCAtICAgICAgICAweDEw
N2I0YWZmNyArRHVtcFJlbmRlclRyZWUgKD8/PyAtID8/PykgPDU2OTRCRTAzLUE2MEEtMzBCMi05
RDQwLTI3Q0ZGQ0ZCODhFRT4gL1ZvbHVtZXMvRGF0YS9XZWJLaXQtQnVpbGRTbGF2ZS9saW9uLWlu
dGVsLWxlYWtzL2J1aWxkL1dlYktpdEJ1aWxkL0RlYnVnL0R1bXBSZW5kZXJUcmVlCi0gICAgICAg
MHgxMDdjMmYwMDAgLSAgICAgICAgMHgxMDdjNThmZmYgK2xpYldlYkNvcmVUZXN0U3VwcG9ydC5k
eWxpYiAoNTM1LjguMCAtIGNvbXBhdGliaWxpdHkgMS4wLjApIDxFNEY3QTEzRS01ODA3LTMwRjct
QTM5OS02MkY4Mzk1RjkxMDY+IC9Wb2x1bWVzL0RhdGEvV2ViS2l0LUJ1aWxkU2xhdmUvbGlvbi1p
bnRlbC1sZWFrcy9idWlsZC9XZWJLaXRCdWlsZC9EZWJ1Zy9saWJXZWJDb3JlVGVzdFN1cHBvcnQu
ZHlsaWIKLTE3IGxlYWtzIGV4Y2x1ZGVkIChub3QgcHJpbnRlZCkKLSIiIgotCi0gICAgZGVmIHRl
c3RfcGFyc2VfbGVha3Nfb3V0cHV0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNl
bGYuX21ha2VfZGV0ZWN0b3IoKS5fcGFyc2VfbGVha3Nfb3V0cHV0KHNlbGYuZXhhbXBsZV9sZWFr
c19vdXRwdXQpLCAoMzM3MzAxLCAwLCA2NTI1MjE2KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzZWxmLl9tYWtlX2RldGVjdG9yKCkuX3BhcnNlX2xlYWtzX291dHB1dChzZWxmLmV4YW1wbGVf
bGVha3Nfb3V0cHV0X3dpdGhfZXhjbHVzaW9ucyksICgyODIsIDE3LCAyMTkyMCkpCi0KLSAgICBk
ZWYgdGVzdF9sZWFrc19maWxlc19pbl9kaXJlY3Rvcnkoc2VsZik6Ci0gICAgICAgIGRldGVjdG9y
ID0gc2VsZi5fbWFrZV9kZXRlY3RvcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGV0ZWN0
b3IubGVha3NfZmlsZXNfaW5fZGlyZWN0b3J5KCcvYm9ndXMtZGlyZWN0b3J5JyksIFtdKQotICAg
ICAgICBkZXRlY3Rvci5fZmlsZXN5c3RlbSA9IE1vY2tGaWxlU3lzdGVtKHsKLSAgICAgICAgICAg
ICcvbW9jay1yZXN1bHRzL0R1bXBSZW5kZXJUcmVlLTEyMzQtbGVha3MudHh0JzogJycsCi0gICAg
ICAgICAgICAnL21vY2stcmVzdWx0cy9EdW1wUmVuZGVyVHJlZS0yMzQyMy1sZWFrcy50eHQnOiAn
JywKLSAgICAgICAgICAgICcvbW9jay1yZXN1bHRzL0R1bXBSZW5kZXJUcmVlLTgyMy1sZWFrcy50
eHQnOiAnJywKLSAgICAgICAgfSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGV0ZWN0
b3IubGVha3NfZmlsZXNfaW5fZGlyZWN0b3J5KCcvbW9jay1yZXN1bHRzJykpLCAzKQotCi0gICAg
ZGVmIHRlc3RfY291bnRfdG90YWxfYnl0ZXNfYW5kX3VuaXF1ZV9sZWFrcyhzZWxmKToKLSAgICAg
ICAgZGV0ZWN0b3IgPSBzZWxmLl9tYWtlX2RldGVjdG9yKCkKLQotICAgICAgICBkZWYgbW9ja19y
dW5fc2NyaXB0KG5hbWUsIGFyZ3MsIGluY2x1ZGVfY29uZmlndXJhdGlvbl9hcmd1bWVudHM9RmFs
c2UpOgotICAgICAgICAgICAgcHJpbnQgIk1PQ0sgX3J1bl9zY3JpcHQ6ICVzICVzIiAlIChuYW1l
LCBhcmdzKQotICAgICAgICAgICAgcmV0dXJuICIiIjEgY2FsbHMgZm9yIDE2IGJ5dGVzOiAtW05T
VVJMUmVxdWVzdCBtdXRhYmxlQ29weVdpdGhab25lOl0gfCArW05TT2JqZWN0KE5TT2JqZWN0KSBh
bGxvY1dpdGhab25lOl0gfCBfaW50ZXJuYWxfY2xhc3NfY3JlYXRlSW5zdGFuY2VGcm9tWm9uZSB8
IGNhbGxvYyB8IG1hbGxvY196b25lX2NhbGxvYwotCi0xNDcgY2FsbHMgZm9yIDksNDA4IGJ5dGVz
OiBfQ0ZSdW50aW1lQ3JlYXRlSW5zdGFuY2UgfCBfWk4zV1RGMjRTdHJpbmdXcmFwcGVyQ0ZBbGxv
Y2F0b3JMOGFsbG9jYXRlRWxtUHYgU3RyaW5nSW1wbENGLmNwcDo2NyB8IFdURjo6ZmFzdE1hbGxv
Yyh1bnNpZ25lZCBsb25nKSBGYXN0TWFsbG9jLmNwcDoyNjggfCBtYWxsb2MgfCBtYWxsb2Nfem9u
ZV9tYWxsb2MgCi0KLXRvdGFsOiA1LDg4OCBieXRlcyAoMCBieXRlcyBleGNsdWRlZCkuIiIiCi0g
ICAgICAgIGRldGVjdG9yLl9wb3J0Ll9ydW5fc2NyaXB0ID0gbW9ja19ydW5fc2NyaXB0Ci0KLSAg
ICAgICAgbGVha19maWxlcyA9IFsnL21vY2stcmVzdWx0cy9EdW1wUmVuZGVyVHJlZS0xMjM0LWxl
YWtzLnR4dCcsICcvbW9jay1yZXN1bHRzL0R1bXBSZW5kZXJUcmVlLTEyMzUtbGVha3MudHh0J10K
LSAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0ID0gIk1PQ0sgX3J1bl9zY3JpcHQ6IHBhcnNlLW1hbGxv
Yy1oaXN0b3J5IFsnLS1tZXJnZS1kZXB0aCcsIDUsICcvbW9jay1yZXN1bHRzL0R1bXBSZW5kZXJU
cmVlLTEyMzQtbGVha3MudHh0JywgJy9tb2NrLXJlc3VsdHMvRHVtcFJlbmRlclRyZWUtMTIzNS1s
ZWFrcy50eHQnXVxuIgotICAgICAgICByZXN1bHRzX3R1cGxlID0gT3V0cHV0Q2FwdHVyZSgpLmFz
c2VydF9vdXRwdXRzKHNlbGYsIGRldGVjdG9yLmNvdW50X3RvdGFsX2J5dGVzX2FuZF91bmlxdWVf
bGVha3MsIFtsZWFrX2ZpbGVzXSwgZXhwZWN0ZWRfc3Rkb3V0PWV4cGVjdGVkX3N0ZG91dCkKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzX3R1cGxlLCAoIjUsODg4IGJ5dGVzIiwgMikp
Ci0KLSAgICBkZWYgdGVzdF9jb3VudF90b3RhbF9sZWFrcyhzZWxmKToKLSAgICAgICAgZGV0ZWN0
b3IgPSBzZWxmLl9tYWtlX2RldGVjdG9yKCkKLSAgICAgICAgZGV0ZWN0b3IuX2ZpbGVzeXN0ZW0g
PSBNb2NrRmlsZVN5c3RlbSh7Ci0gICAgICAgICAgICAjIFRoZSBceGZmIGlzIHNvbWUgbm9uLXV0
ZjggY2hhcmFjdGVycyB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgYmxvdyB1cCB0cnlpbmcgdG8gcGFy
c2UgdGhlIGZpbGUuCi0gICAgICAgICAgICAnL21vY2stcmVzdWx0cy9EdW1wUmVuZGVyVHJlZS0x
MjM0LWxlYWtzLnR4dCc6ICdceGZmXG5Qcm9jZXNzIDEyMzQ6IDEyIGxlYWtzIGZvciA0MCB0b3Rh
bCBsZWFrZWQgYnl0ZXMuXG5ceGZmXG4nLAotICAgICAgICAgICAgJy9tb2NrLXJlc3VsdHMvRHVt
cFJlbmRlclRyZWUtMjM0MjMtbGVha3MudHh0JzogJ1Byb2Nlc3MgMTIzNTogMTIzNDEgbGVha3Mg
Zm9yIDI3OTM0IHRvdGFsIGxlYWtlZCBieXRlcy5cbicsCi0gICAgICAgICAgICAnL21vY2stcmVz
dWx0cy9EdW1wUmVuZGVyVHJlZS04MjMtbGVha3MudHh0JzogJ1Byb2Nlc3MgMTIzNTY6IDIzNDEy
IGxlYWtzIGZvciAxOCB0b3RhbCBsZWFrZWQgYnl0ZXMuXG4nLAotICAgICAgICB9KQotICAgICAg
ICBsZWFrX2ZpbGVfcGF0aHMgPSBbJy9tb2NrLXJlc3VsdHMvRHVtcFJlbmRlclRyZWUtMTIzNC1s
ZWFrcy50eHQnLCAnL21vY2stcmVzdWx0cy9EdW1wUmVuZGVyVHJlZS0yMzQyMy1sZWFrcy50eHQn
LCAnL21vY2stcmVzdWx0cy9EdW1wUmVuZGVyVHJlZS04MjMtbGVha3MudHh0J10KLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChkZXRlY3Rvci5jb3VudF90b3RhbF9sZWFrcyhsZWFrX2ZpbGVfcGF0
aHMpLCAzNTc2NSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvbWFjLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvbWFjLnB5CShyZXZpc2lvbiAxNDg0OTcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5weQkod29ya2luZyBjb3B5KQpAQCAtMSwzMDEgKzAs
MCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSMgQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3Ry
aWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgR29vZ2xlIG5hbWUgbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCi1pbXBvcnQgdGlt
ZQotCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hsb2dzIGltcG9ydCBDcmFzaExv
Z3MKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVy
cm9yCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmFwcGxlIGltcG9ydCBBcHBsZVBv
cnQKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQubGVha2RldGVjdG9yIGltcG9ydCBM
ZWFrRGV0ZWN0b3IKLQotCi1fbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLQot
Y2xhc3MgTWFjUG9ydChBcHBsZVBvcnQpOgotICAgIHBvcnRfbmFtZSA9ICJtYWMiCi0KLSAgICBW
RVJTSU9OX0ZBTExCQUNLX09SREVSID0gWydtYWMtc25vd2xlb3BhcmQnLCAnbWFjLWxpb24nLCAn
bWFjLW1vdW50YWlubGlvbiddCi0KLSAgICBBUkNISVRFQ1RVUkVTID0gWyd4ODZfNjQnLCAneDg2
J10KLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKToK
LSAgICAgICAgQXBwbGVQb3J0Ll9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2Fy
Z3MpCi0gICAgICAgIHNlbGYuX2FyY2hpdGVjdHVyZSA9IHNlbGYuZ2V0X29wdGlvbignYXJjaGl0
ZWN0dXJlJykKLQotICAgICAgICBpZiBub3Qgc2VsZi5fYXJjaGl0ZWN0dXJlOgotICAgICAgICAg
ICAgc2VsZi5fYXJjaGl0ZWN0dXJlID0gJ3g4Nl82NCcKLQotICAgICAgICBzZWxmLl9sZWFrX2Rl
dGVjdG9yID0gTGVha0RldGVjdG9yKHNlbGYpCi0gICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbigi
bGVha3MiKToKLSAgICAgICAgICAgICMgRHVtcFJlbmRlclRyZWUgc2xvd3MgZG93biBub3RpY2Fi
bHkgaWYgd2UgcnVuIG1vcmUgdGhhbiBhYm91dCAxMDAwIHRlc3RzIGluIGEgYmF0Y2gKLSAgICAg
ICAgICAgICMgd2l0aCBNYWxsb2NTdGFja0xvZ2dpbmcgZW5hYmxlZC4KLSAgICAgICAgICAgIHNl
bGYuc2V0X29wdGlvbl9kZWZhdWx0KCJiYXRjaF9zaXplIiwgMTAwMCkKLQotICAgIGRlZiBkZWZh
dWx0X3RpbWVvdXRfbXMoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignZ3VhcmRf
bWFsbG9jJyk6Ci0gICAgICAgICAgICByZXR1cm4gMzUwICogMTAwMAotICAgICAgICByZXR1cm4g
c3VwZXIoTWFjUG9ydCwgc2VsZikuZGVmYXVsdF90aW1lb3V0X21zKCkKLQotICAgIGRlZiBzdXBw
b3J0c19wZXJfdGVzdF90aW1lb3V0KHNlbGYpOgotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAg
ZGVmIF9idWlsZF9kcml2ZXJfZmxhZ3Moc2VsZik6Ci0gICAgICAgIHJldHVybiBbJ0FSQ0hTPWkz
ODYnXSBpZiBzZWxmLmFyY2hpdGVjdHVyZSgpID09ICd4ODYnIGVsc2UgW10KLQotICAgIGRlZiBz
aG91bGRfcmV0cnlfY3Jhc2hlcyhzZWxmKToKLSAgICAgICAgIyBPbiBBcHBsZSBNYWMsIHdlIHJl
dHJ5IGNyYXNoZXMgZHVlIHRvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD04MjIzMwotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIGRlZmF1bHRfYmFzZWxpbmVf
c2VhcmNoX3BhdGgoc2VsZik6Ci0gICAgICAgIG5hbWUgPSBzZWxmLl9uYW1lLnJlcGxhY2UoJy13
azInLCAnJykKLSAgICAgICAgaWYgbmFtZS5lbmRzd2l0aChzZWxmLkZVVFVSRV9WRVJTSU9OKToK
LSAgICAgICAgICAgIGZhbGxiYWNrX25hbWVzID0gW3NlbGYucG9ydF9uYW1lXQotICAgICAgICBl
bHNlOgotICAgICAgICAgICAgZmFsbGJhY2tfbmFtZXMgPSBzZWxmLlZFUlNJT05fRkFMTEJBQ0tf
T1JERVJbc2VsZi5WRVJTSU9OX0ZBTExCQUNLX09SREVSLmluZGV4KG5hbWUpOi0xXSArIFtzZWxm
LnBvcnRfbmFtZV0KLSAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9ydW5u
ZXInKToKLSAgICAgICAgICAgIGZhbGxiYWNrX25hbWVzID0gW3NlbGYuX3drMl9wb3J0X25hbWUo
KSwgJ3drMiddICsgZmFsbGJhY2tfbmFtZXMKLSAgICAgICAgcmV0dXJuIG1hcChzZWxmLl93ZWJr
aXRfYmFzZWxpbmVfcGF0aCwgZmFsbGJhY2tfbmFtZXMpCi0KLSAgICBkZWYgX3BvcnRfc3BlY2lm
aWNfZXhwZWN0YXRpb25zX2ZpbGVzKHNlbGYpOgotICAgICAgICByZXR1cm4gbGlzdChyZXZlcnNl
ZChbc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKHApLCAn
VGVzdEV4cGVjdGF0aW9ucycpIGZvciBwIGluIHNlbGYuYmFzZWxpbmVfc2VhcmNoX3BhdGgoKV0p
KQotCi0gICAgZGVmIHNldHVwX2Vudmlyb25fZm9yX3NlcnZlcihzZWxmLCBzZXJ2ZXJfbmFtZT1O
b25lKToKLSAgICAgICAgZW52ID0gc3VwZXIoTWFjUG9ydCwgc2VsZikuc2V0dXBfZW52aXJvbl9m
b3Jfc2VydmVyKHNlcnZlcl9uYW1lKQotICAgICAgICBpZiBzZXJ2ZXJfbmFtZSA9PSBzZWxmLmRy
aXZlcl9uYW1lKCk6Ci0gICAgICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ2xlYWtzJyk6Ci0g
ICAgICAgICAgICAgICAgZW52WydNYWxsb2NTdGFja0xvZ2dpbmcnXSA9ICcxJwotICAgICAgICAg
ICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdndWFyZF9tYWxsb2MnKToKLSAgICAgICAgICAgICAgICBl
bnZbJ0RZTERfSU5TRVJUX0xJQlJBUklFUyddID0gJy91c3IvbGliL2xpYmdtYWxsb2MuZHlsaWIn
Ci0gICAgICAgIGVudlsnWE1MX0NBVEFMT0dfRklMRVMnXSA9ICcnICAjIHdvcmsgYXJvdW5kIG1p
c3NpbmcgL2V0Yy9jYXRhbG9nIDxyZGFyOi8vcHJvYmxlbS80MjkyOTk1PgotICAgICAgICByZXR1
cm4gZW52Ci0KLSAgICBkZWYgb3BlcmF0aW5nX3N5c3RlbShzZWxmKToKLSAgICAgICAgcmV0dXJu
ICdtYWMnCi0KLSAgICAjIEJlbG9uZ3Mgb24gYSBQbGF0Zm9ybSBvYmplY3QuCi0gICAgZGVmIGlz
X3Nub3dsZW9wYXJkKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fdmVyc2lvbiA9PSAic25v
d2xlb3BhcmQiCi0KLSAgICAjIEJlbG9uZ3Mgb24gYSBQbGF0Zm9ybSBvYmplY3QuCi0gICAgZGVm
IGlzX2xpb24oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl92ZXJzaW9uID09ICJsaW9uIgot
Ci0gICAgZGVmIGRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgotICAgICAgICBpZiBzZWxm
Ll92ZXJzaW9uID09ICJzbm93bGVvcGFyZCI6Ci0gICAgICAgICAgICBfbG9nLndhcm5pbmcoIkNh
bm5vdCBydW4gdGVzdHMgaW4gcGFyYWxsZWwgb24gU25vdyBMZW9wYXJkIGR1ZSB0byByZGFyOi8v
cHJvYmxlbS8xMDYyMTUyNS4iKQotICAgICAgICAgICAgcmV0dXJuIDEKLQotICAgICAgICBkZWZh
dWx0X2NvdW50ID0gc3VwZXIoTWFjUG9ydCwgc2VsZikuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMo
KQotCi0gICAgICAgICMgRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05NTkwNiAgV2l0aCB0b28gbWFueSBXZWJQcm9jZXNzIFdLMiB0ZXN0cyBnZXQgc3R1Y2sg
aW4gcmVzb3VyY2UgY29udGVudGlvbi4KLSAgICAgICAgIyBUbyBhbGxldmlhdGUgdGhlIGlzc3Vl
IHJlZHVjZSB0aGUgbnVtYmVyIG9mIHJ1bm5pbmcgcHJvY2Vzc2VzCi0gICAgICAgICMgQW5lY2Rv
dGFsIGV2aWRlbmNlIHN1Z2dlc3RzIHRoYXQgYSA0IGNvcmUvOCBjb3JlIGxvZ2ljYWwgbWFjaGlu
ZSBtYXkgcnVuIGludG8gdGhpcywgYnV0IHRoYXQgYSAyIGNvcmUvNCBjb3JlIGxvZ2ljYWwgbWFj
aGluZSBkb2VzIG5vdC4KLSAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9y
dW5uZXInKSBhbmQgZGVmYXVsdF9jb3VudCA+IDQ6Ci0gICAgICAgICAgICBkZWZhdWx0X2NvdW50
ID0gaW50KC43NSAqIGRlZmF1bHRfY291bnQpCi0KLSAgICAgICAgIyBNYWtlIHN1cmUgd2UgaGF2
ZSBlbm91Z2ggcmFtIHRvIHN1cHBvcnQgdGhhdCBtYW55IGluc3RhbmNlczoKLSAgICAgICAgdG90
YWxfbWVtb3J5ID0gc2VsZi5ob3N0LnBsYXRmb3JtLnRvdGFsX2J5dGVzX21lbW9yeSgpCi0gICAg
ICAgIGlmIHRvdGFsX21lbW9yeToKLSAgICAgICAgICAgIGJ5dGVzX3Blcl9kcnQgPSAyNTYgKiAx
MDI0ICogMTAyNCAgIyBBc3N1bWUgZWFjaCBEUlQgbmVlZHMgMjU2TUIgdG8gcnVuLgotICAgICAg
ICAgICAgb3ZlcmhlYWQgPSAyMDQ4ICogMTAyNCAqIDEwMjQgICMgQXNzdW1lIHdlIG5lZWQgMkdC
IGZyZWUgZm9yIHRoZSBPL1MKLSAgICAgICAgICAgIHN1cHBvcnRhYmxlX2luc3RhbmNlcyA9IG1h
eCgodG90YWxfbWVtb3J5IC0gb3ZlcmhlYWQpIC8gYnl0ZXNfcGVyX2RydCwgMSkgICMgQWx3YXlz
IHVzZSBvbmUgcHJvY2VzcywgZXZlbiBpZiB3ZSBkb24ndCBoYXZlIHNwYWNlIGZvciBpdC4KLSAg
ICAgICAgICAgIGlmIHN1cHBvcnRhYmxlX2luc3RhbmNlcyA8IGRlZmF1bHRfY291bnQ6Ci0gICAg
ICAgICAgICAgICAgX2xvZy53YXJuaW5nKCJUaGlzIG1hY2hpbmUgY291bGQgc3VwcG9ydCAlcyBj
aGlsZCBwcm9jZXNzZXMsIGJ1dCBvbmx5IGhhcyBlbm91Z2ggbWVtb3J5IGZvciAlcy4iICUgKGRl
ZmF1bHRfY291bnQsIHN1cHBvcnRhYmxlX2luc3RhbmNlcykpCi0gICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICBfbG9nLndhcm5pbmcoIkNhbm5vdCBkZXRlcm1pbmUgYXZhaWxhYmxlIG1lbW9yeSBm
b3IgY2hpbGQgcHJvY2Vzc2VzLCB1c2luZyBkZWZhdWx0IGNoaWxkIHByb2Nlc3MgY291bnQgb2Yg
JXMuIiAlIGRlZmF1bHRfY291bnQpCi0gICAgICAgICAgICBzdXBwb3J0YWJsZV9pbnN0YW5jZXMg
PSBkZWZhdWx0X2NvdW50Ci0gICAgICAgIHJldHVybiBtaW4oc3VwcG9ydGFibGVfaW5zdGFuY2Vz
LCBkZWZhdWx0X2NvdW50KQotCi0gICAgZGVmIF9idWlsZF9qYXZhX3Rlc3Rfc3VwcG9ydChzZWxm
KToKLSAgICAgICAgamF2YV90ZXN0c19wYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYu
bGF5b3V0X3Rlc3RzX2RpcigpLCAiamF2YSIpCi0gICAgICAgIGJ1aWxkX2phdmEgPSBbc2VsZi5t
YWtlX2NvbW1hbmQoKSwgIi1DIiwgamF2YV90ZXN0c19wYXRoXQotICAgICAgICBpZiBzZWxmLl9l
eGVjdXRpdmUucnVuX2NvbW1hbmQoYnVpbGRfamF2YSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKTog
ICMgUGF0aHMgYXJlIGFic29sdXRlLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHNldCBhIGN3ZC4KLSAg
ICAgICAgICAgIF9sb2cuZXJyb3IoIkZhaWxlZCB0byBidWlsZCBKYXZhIHN1cHBvcnQgZmlsZXM6
ICVzIiAlIGJ1aWxkX2phdmEpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0
dXJuIFRydWUKLQotICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwgcHJvY2Vzc19uYW1lLCBw
cm9jZXNzX3BpZCk6Ci0gICAgICAgIGlmIG5vdCBzZWxmLmdldF9vcHRpb24oJ2xlYWtzJyk6Ci0g
ICAgICAgICAgICByZXR1cm4KLSAgICAgICAgIyBXZSBjb3VsZCB1c2UgaHR0cDovL2NvZGUuZ29v
Z2xlLmNvbS9wL3BzdXRpbC8gdG8gZ2V0IHRoZSBwcm9jZXNzX25hbWUgZnJvbSB0aGUgcGlkLgot
ICAgICAgICBzZWxmLl9sZWFrX2RldGVjdG9yLmNoZWNrX2Zvcl9sZWFrcyhwcm9jZXNzX25hbWUs
IHByb2Nlc3NfcGlkKQotCi0gICAgZGVmIHByaW50X2xlYWtzX3N1bW1hcnkoc2VsZik6Ci0gICAg
ICAgIGlmIG5vdCBzZWxmLmdldF9vcHRpb24oJ2xlYWtzJyk6Ci0gICAgICAgICAgICByZXR1cm4K
LSAgICAgICAgIyBXZSdyZSBpbiB0aGUgbWFuYWdlciBwcm9jZXNzLCBzbyB0aGUgbGVhayBkZXRl
Y3RvciB3aWxsIG5vdCBoYXZlIGEgdmFsaWQgbGlzdCBvZiBsZWFrIGZpbGVzLgotICAgICAgICAj
IEZJWE1FOiBUaGlzIGlzIGEgaGFjaywgYnV0IHdlIGRvbid0IGhhdmUgYSBiZXR0ZXIgd2F5IHRv
IGdldCB0aGlzIGluZm9ybWF0aW9uIGZyb20gdGhlIHdvcmtlcnMgeWV0LgotICAgICAgICAjIEZJ
WE1FOiBUaGlzIHdpbGwgaW5jbHVkZSB0b28gbWFueSBsZWFrcyBpbiBzdWJzZXF1ZW50IHJ1bnMg
dW50aWwgdGhlIHJlc3VsdHMgZGlyZWN0b3J5IGlzIGNsZWFyZWQhCi0gICAgICAgIGxlYWtzX2Zp
bGVzID0gc2VsZi5fbGVha19kZXRlY3Rvci5sZWFrc19maWxlc19pbl9kaXJlY3Rvcnkoc2VsZi5y
ZXN1bHRzX2RpcmVjdG9yeSgpKQotICAgICAgICBpZiBub3QgbGVha3NfZmlsZXM6Ci0gICAgICAg
ICAgICByZXR1cm4KLSAgICAgICAgdG90YWxfYnl0ZXNfc3RyaW5nLCB1bmlxdWVfbGVha3MgPSBz
ZWxmLl9sZWFrX2RldGVjdG9yLmNvdW50X3RvdGFsX2J5dGVzX2FuZF91bmlxdWVfbGVha3MobGVh
a3NfZmlsZXMpCi0gICAgICAgIHRvdGFsX2xlYWtzID0gc2VsZi5fbGVha19kZXRlY3Rvci5jb3Vu
dF90b3RhbF9sZWFrcyhsZWFrc19maWxlcykKLSAgICAgICAgX2xvZy5pbmZvKCIlcyB0b3RhbCBs
ZWFrcyBmb3VuZCBmb3IgYSB0b3RhbCBvZiAlcyEiICUgKHRvdGFsX2xlYWtzLCB0b3RhbF9ieXRl
c19zdHJpbmcpKQotICAgICAgICBfbG9nLmluZm8oIiVzIHVuaXF1ZSBsZWFrcyBmb3VuZCEiICUg
dW5pcXVlX2xlYWtzKQotCi0gICAgZGVmIF9jaGVja19wb3J0X2J1aWxkKHNlbGYpOgotICAgICAg
ICByZXR1cm4gc2VsZi5fYnVpbGRfamF2YV90ZXN0X3N1cHBvcnQoKQotCi0gICAgZGVmIF9wYXRo
X3RvX3dlYmNvcmVfbGlicmFyeShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3Bh
dGgoJ1dlYkNvcmUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvV2ViQ29yZScpCi0KLSAgICBkZWYgc2hv
d19yZXN1bHRzX2h0bWxfZmlsZShzZWxmLCByZXN1bHRzX2ZpbGVuYW1lKToKLSAgICAgICAgIyBX
ZSBkb24ndCB1c2Ugc2VsZi5fcnVuX3NjcmlwdCgpIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byB3
YWl0IGZvciB0aGUgc2NyaXB0Ci0gICAgICAgICMgdG8gZXhpdCBhbmQgd2Ugd2FudCB0aGUgb3V0
cHV0IHRvIHNob3cgdXAgb24gc3Rkb3V0IGluIGNhc2UgdGhlcmUgYXJlIGVycm9ycwotICAgICAg
ICAjIGxhdW5jaGluZyB0aGUgYnJvd3Nlci4KLSAgICAgICAgc2VsZi5fZXhlY3V0aXZlLnBvcGVu
KFtzZWxmLnBhdGhfdG9fc2NyaXB0KCdydW4tc2FmYXJpJyldICsgc2VsZi5fYXJndW1lbnRzX2Zv
cl9jb25maWd1cmF0aW9uKCkgKyBbJy0tbm8tc2F2ZWQtc3RhdGUnLCAnLU5TT3BlbicsIHJlc3Vs
dHNfZmlsZW5hbWVdLAotICAgICAgICAgICAgY3dkPXNlbGYud2Via2l0X2Jhc2UoKSwgc3Rkb3V0
PWZpbGUob3MuZGV2bnVsbCksIHN0ZGVycj1maWxlKG9zLmRldm51bGwpKQotCi0gICAgIyBGSVhN
RTogVGhlIG5leHQgdHdvIHJvdXRpbmVzIHR1cm4gb2ZmIHRoZSBodHRwIGxvY2tpbmcgaW4gb3Jk
ZXIKLSAgICAjIHRvIHdvcmsgYXJvdW5kIGZhaWx1cmVzIG9uIHRoZSBib3RzIGNhdXNlZCB3aGVu
IHRoZSBzbGF2ZSByZXN0YXJ0cy4KLSAgICAjIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjQ4ODYgZm9yIG1vcmUgaW5mby4KLSAgICAjIFRoZSBwcm9wZXIgZml4
IGlzIHRvIG1ha2Ugc3VyZSB0aGUgc2xhdmUgaXMgYWN0dWFsbHkgc3RvcHBpbmcgTlJXVAotICAg
ICMgcHJvcGVybHkgb24gcmVzdGFydC4gTm90ZSB0aGF0IGJ5IHJlbW92aW5nIHRoZSBsb2NrIGZp
bGUgYW5kIG5vdCB3YWl0aW5nLAotICAgICMgdGhlIHJlc3VsdCBzaG91bGQgYmUgdGhhdCBpZiB0
aGVyZSBpcyBhIHdlYiBzZXJ2ZXIgYWxyZWFkeSBydW5uaW5nLAotICAgICMgaXQnbGwgYmUga2ls
bGVkIGFuZCB0aGlzIG9uZSB3aWxsIGJlIHN0YXJ0ZWQgaW4gaXRzIHBsYWNlOyB0aGlzCi0gICAg
IyBtYXkgbGVhZCB0byB3ZWlyZCB0aGluZ3MgaGFwcGVuaW5nIGluIHRoZSBvdGhlciBydW4uIEhv
d2V2ZXIsIEkgZG9uJ3QKLSAgICAjIHRoaW5rIHdlJ3JlIChpbnRlbnRpb25hbGx5KSBhY3R1YWxs
eSBydW5uaW5nIG11bHRpcGxlIHJ1bnMgY29uY3VycmVudGx5Ci0gICAgIyBvbiBhbnkgTWFjIGJv
dHMuCi0KLSAgICBkZWYgYWNxdWlyZV9odHRwX2xvY2soc2VsZik6Ci0gICAgICAgIHBhc3MKLQot
ICAgIGRlZiByZWxlYXNlX2h0dHBfbG9jayhzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVm
IHNhbXBsZV9maWxlX3BhdGgoc2VsZiwgbmFtZSwgcGlkKToKLSAgICAgICAgcmV0dXJuIHNlbGYu
X2ZpbGVzeXN0ZW0uam9pbihzZWxmLnJlc3VsdHNfZGlyZWN0b3J5KCksICJ7MH0tezF9LXNhbXBs
ZS50eHQiLmZvcm1hdChuYW1lLCBwaWQpKQotCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYs
IG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xl
ZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRydWUpOgotICAgICAgICAjIE5vdGUgdGhhdCB3ZSBk
byBzbG93LXNwaW4gaGVyZSBhbmQgd2FpdCwgc2luY2UgaXQgYXBwZWFycyB0aGUgdGltZQotICAg
ICAgICAjIFJlcG9ydENyYXNoIHRha2VzIHRvIGFjdHVhbGx5IHdyaXRlIGFuZCBmbHVzaCB0aGUg
ZmlsZSB2YXJpZXMgd2hlbiB0aGVyZSBhcmUKLSAgICAgICAgIyBsb3RzIG9mIHNpbXVsdGFuZW91
cyBjcmFzaGVzIGdvaW5nIG9uLgotICAgICAgICAjIEZJWE1FOiBTaG91bGQgbW9zdCBvZiB0aGlz
IGJlIG1vdmVkIGludG8gQ3Jhc2hMb2dzKCk/Ci0gICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9y
IHRpbWUudGltZQotICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKLSAg
ICAgICAgY3Jhc2hfbG9nID0gJycKLSAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhzZWxm
Lmhvc3QpCi0gICAgICAgIG5vdyA9IHRpbWVfZm4oKQotICAgICAgICAjIEZJWE1FOiBkZWxldGUg
dGhpcyBhZnRlciB3ZSdyZSBzdXJlIHRoaXMgY29kZSBpcyB3b3JraW5nIC4uLgotICAgICAgICBf
bG9nLmRlYnVnKCdsb29raW5nIGZvciBjcmFzaCBsb2cgZm9yICVzOiVzJyAlIChuYW1lLCBzdHIo
cGlkKSkpCi0gICAgICAgIGRlYWRsaW5lID0gbm93ICsgNSAqIGludChzZWxmLmdldF9vcHRpb24o
J2NoaWxkX3Byb2Nlc3NlcycsIDEpKQotICAgICAgICB3aGlsZSBub3QgY3Jhc2hfbG9nIGFuZCBu
b3cgPD0gZGVhZGxpbmU6Ci0gICAgICAgICAgICBjcmFzaF9sb2cgPSBjcmFzaF9sb2dzLmZpbmRf
bmV3ZXN0X2xvZyhuYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzPVRydWUsIG5ld2VyX3RoYW49bmV3
ZXJfdGhhbikKLSAgICAgICAgICAgIGlmIG5vdCB3YWl0X2Zvcl9sb2c6Ci0gICAgICAgICAgICAg
ICAgYnJlYWsKLSAgICAgICAgICAgIGlmIG5vdCBjcmFzaF9sb2cgb3Igbm90IFtsaW5lIGZvciBs
aW5lIGluIGNyYXNoX2xvZy5zcGxpdGxpbmVzKCkgaWYgbm90IGxpbmUuc3RhcnRzd2l0aCgnRVJS
T1InKV06Ci0gICAgICAgICAgICAgICAgc2xlZXBfZm4oMC4xKQotICAgICAgICAgICAgICAgIG5v
dyA9IHRpbWVfZm4oKQotCi0gICAgICAgIGlmIG5vdCBjcmFzaF9sb2c6Ci0gICAgICAgICAgICBy
ZXR1cm4gKHN0ZGVyciwgTm9uZSkKLSAgICAgICAgcmV0dXJuIChzdGRlcnIsIGNyYXNoX2xvZykK
LQotICAgIGRlZiBsb29rX2Zvcl9uZXdfY3Jhc2hfbG9ncyhzZWxmLCBjcmFzaGVkX3Byb2Nlc3Nl
cywgc3RhcnRfdGltZSk6Ci0gICAgICAgICIiIlNpbmNlIGNyYXNoIGxvZ3MgY2FuIHRha2UgYSBs
b25nIHRpbWUgdG8gYmUgd3JpdHRlbiBvdXQgaWYgdGhlIHN5c3RlbSBpcwotICAgICAgICAgICB1
bmRlciBzdHJlc3MgZG8gYSBzZWNvbmQgcGFzcyBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0IHJ1bi4K
LQotICAgICAgICAgICBjcmFzaGVzOiB0ZXN0X25hbWUgLT4gcGlkLCBwcm9jZXNzX25hbWUgdHVw
bGUgb2YgY3Jhc2hlZCBwcm9jZXNzCi0gICAgICAgICAgIHN0YXJ0X3RpbWU6IHRpbWUgdGhlIHRl
c3RzIHN0YXJ0ZWQgYXQuICBXZSdyZSBsb29raW5nIGZvciBjcmFzaAotICAgICAgICAgICAgICAg
bG9ncyBhZnRlciB0aGF0IHRpbWUuCi0gICAgICAgICIiIgotICAgICAgICBjcmFzaF9sb2dzID0g
e30KLSAgICAgICAgZm9yICh0ZXN0X25hbWUsIHByb2Nlc3NfbmFtZSwgcGlkKSBpbiBjcmFzaGVk
X3Byb2Nlc3NlczoKLSAgICAgICAgICAgICMgUGFzc2luZyBOb25lIGZvciBvdXRwdXQuICBUaGlz
IGlzIGEgc2Vjb25kIHBhc3MgYWZ0ZXIgdGhlIHRlc3QgZmluaXNoZWQgc28KLSAgICAgICAgICAg
ICMgaWYgdGhlIG91dHB1dCBoYWQgYW55IGxvZ2dpbmcgd2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNv
bGxlY3RlZCBpdC4KLSAgICAgICAgICAgIGNyYXNoX2xvZyA9IHNlbGYuX2dldF9jcmFzaF9sb2co
cHJvY2Vzc19uYW1lLCBwaWQsIE5vbmUsIE5vbmUsIHN0YXJ0X3RpbWUsIHdhaXRfZm9yX2xvZz1G
YWxzZSlbMV0KLSAgICAgICAgICAgIGlmIG5vdCBjcmFzaF9sb2c6Ci0gICAgICAgICAgICAgICAg
Y29udGludWUKLSAgICAgICAgICAgIGNyYXNoX2xvZ3NbdGVzdF9uYW1lXSA9IGNyYXNoX2xvZwot
ICAgICAgICByZXR1cm4gY3Jhc2hfbG9ncwotCi0gICAgZGVmIGxvb2tfZm9yX25ld19zYW1wbGVz
KHNlbGYsIHVucmVzcG9uc2l2ZV9wcm9jZXNzZXMsIHN0YXJ0X3RpbWUpOgotICAgICAgICBzYW1w
bGVfZmlsZXMgPSB7fQotICAgICAgICBmb3IgKHRlc3RfbmFtZSwgcHJvY2Vzc19uYW1lLCBwaWQp
IGluIHVucmVzcG9uc2l2ZV9wcm9jZXNzZXM6Ci0gICAgICAgICAgICBzYW1wbGVfZmlsZSA9IHNl
bGYuc2FtcGxlX2ZpbGVfcGF0aChwcm9jZXNzX25hbWUsIHBpZCkKLSAgICAgICAgICAgIGlmIG5v
dCBzZWxmLl9maWxlc3lzdGVtLmlzZmlsZShzYW1wbGVfZmlsZSk6Ci0gICAgICAgICAgICAgICAg
Y29udGludWUKLSAgICAgICAgICAgIHNhbXBsZV9maWxlc1t0ZXN0X25hbWVdID0gc2FtcGxlX2Zp
bGUKLSAgICAgICAgcmV0dXJuIHNhbXBsZV9maWxlcwotCi0gICAgZGVmIHNhbXBsZV9wcm9jZXNz
KHNlbGYsIG5hbWUsIHBpZCk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGhhbmdfcmVwb3J0
ID0gc2VsZi5zYW1wbGVfZmlsZV9wYXRoKG5hbWUsIHBpZCkKLSAgICAgICAgICAgIHNlbGYuX2V4
ZWN1dGl2ZS5ydW5fY29tbWFuZChbCi0gICAgICAgICAgICAgICAgIi91c3IvYmluL3NhbXBsZSIs
Ci0gICAgICAgICAgICAgICAgcGlkLAotICAgICAgICAgICAgICAgIDEwLAotICAgICAgICAgICAg
ICAgIDEwLAotICAgICAgICAgICAgICAgICItZmlsZSIsCi0gICAgICAgICAgICAgICAgaGFuZ19y
ZXBvcnQsCi0gICAgICAgICAgICBdKQotICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3IgYXMgZToK
LSAgICAgICAgICAgIF9sb2cud2FybmluZygnVW5hYmxlIHRvIHNhbXBsZSBwcm9jZXNzOicgKyBz
dHIoZSkpCi0KLSAgICBkZWYgX3BhdGhfdG9faGVscGVyKHNlbGYpOgotICAgICAgICBiaW5hcnlf
bmFtZSA9ICdMYXlvdXRUZXN0SGVscGVyJwotICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0
aChiaW5hcnlfbmFtZSkKLQotICAgIGRlZiBzdGFydF9oZWxwZXIoc2VsZik6Ci0gICAgICAgIGhl
bHBlcl9wYXRoID0gc2VsZi5fcGF0aF90b19oZWxwZXIoKQotICAgICAgICBpZiBoZWxwZXJfcGF0
aDoKLSAgICAgICAgICAgIF9sb2cuZGVidWcoIlN0YXJ0aW5nIGxheW91dCBoZWxwZXIgJXMiICUg
aGVscGVyX3BhdGgpCi0gICAgICAgICAgICBzZWxmLl9oZWxwZXIgPSBzZWxmLl9leGVjdXRpdmUu
cG9wZW4oW2hlbHBlcl9wYXRoXSwKLSAgICAgICAgICAgICAgICBzdGRpbj1zZWxmLl9leGVjdXRp
dmUuUElQRSwgc3Rkb3V0PXNlbGYuX2V4ZWN1dGl2ZS5QSVBFLCBzdGRlcnI9Tm9uZSkKLSAgICAg
ICAgICAgIGlzX3JlYWR5ID0gc2VsZi5faGVscGVyLnN0ZG91dC5yZWFkbGluZSgpCi0gICAgICAg
ICAgICBpZiBub3QgaXNfcmVhZHkuc3RhcnRzd2l0aCgncmVhZHknKToKLSAgICAgICAgICAgICAg
ICBfbG9nLmVycm9yKCJMYXlvdXRUZXN0SGVscGVyIGZhaWxlZCB0byBiZSByZWFkeSIpCi0KLSAg
ICBkZWYgc3RvcF9oZWxwZXIoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX2hlbHBlcjoKLSAgICAg
ICAgICAgIF9sb2cuZGVidWcoIlN0b3BwaW5nIExheW91dFRlc3RIZWxwZXIiKQotICAgICAgICAg
ICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuX2hlbHBlci5zdGRpbi53cml0ZSgieFxuIikK
LSAgICAgICAgICAgICAgICBzZWxmLl9oZWxwZXIuc3RkaW4uY2xvc2UoKQotICAgICAgICAgICAg
ICAgIHNlbGYuX2hlbHBlci53YWl0KCkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgot
ICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIklPRXJyb3IgcmFpc2VkIHdoaWxlIHN0b3BwaW5n
IGhlbHBlcjogJXMiICUgc3RyKGUpKQotICAgICAgICAgICAgc2VsZi5faGVscGVyID0gTm9uZQot
Ci0gICAgZGVmIG1ha2VfY29tbWFuZChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYueGNydW5f
ZmluZCgnbWFrZScsICcvdXNyL2Jpbi9tYWtlJykKLQotICAgIGRlZiBubV9jb21tYW5kKHNlbGYp
OgotICAgICAgICByZXR1cm4gc2VsZi54Y3J1bl9maW5kKCdubScsICdubScpCi0KLSAgICBkZWYg
eGNydW5fZmluZChzZWxmLCBjb21tYW5kLCBmYWxsYmFjayk6Ci0gICAgICAgIHRyeToKLSAgICAg
ICAgICAgIHJldHVybiBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWyd4Y3J1bicsICctZmlu
ZCcsIGNvbW1hbmRdKS5yc3RyaXAoKQotICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3I6Ci0gICAg
ICAgICAgICBfbG9nLndhcm4oInhjcnVuIGZhaWxlZDsgZmFsbGluZyBiYWNrIHRvICclcycuIiAl
IGZhbGxiYWNrKQotICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hY191bml0dGVzdC5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hY191bml0dGVz
dC5weQkocmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9tYWNfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMjU3ICswLDAg
QEAKLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0jICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9u
LgotIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0Lm1hYyBp
bXBvcnQgTWFjUG9ydAotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgcG9y
dF90ZXN0Y2FzZQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBp
bXBvcnQgTW9ja0ZpbGVTeXN0ZW0KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRj
YXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJlCi1mcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wg
aW1wb3J0IE1vY2tPcHRpb25zCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZl
X21vY2sgaW1wb3J0IE1vY2tFeGVjdXRpdmUsIE1vY2tFeGVjdXRpdmUyLCBNb2NrUHJvY2Vzcywg
U2NyaXB0RXJyb3IKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0X21vY2sg
aW1wb3J0IE1vY2tTeXN0ZW1Ib3N0Ci0KLQotY2xhc3MgTWFjVGVzdChwb3J0X3Rlc3RjYXNlLlBv
cnRUZXN0Q2FzZSk6Ci0gICAgb3NfbmFtZSA9ICdtYWMnCi0gICAgb3NfdmVyc2lvbiA9ICdsaW9u
JwotICAgIHBvcnRfbmFtZSA9ICdtYWMtbGlvbicKLSAgICBwb3J0X21ha2VyID0gTWFjUG9ydAot
Ci0gICAgZGVmIGFzc2VydF9za2lwcGVkX2ZpbGVfc2VhcmNoX3BhdGhzKHNlbGYsIHBvcnRfbmFt
ZSwgZXhwZWN0ZWRfcGF0aHMsIHVzZV93ZWJraXQyPUZhbHNlKToKLSAgICAgICAgcG9ydCA9IHNl
bGYubWFrZV9wb3J0KHBvcnRfbmFtZT1wb3J0X25hbWUsIG9wdGlvbnM9TW9ja09wdGlvbnMod2Vi
a2l0X3Rlc3RfcnVubmVyPXVzZV93ZWJraXQyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChw
b3J0Ll9za2lwcGVkX2ZpbGVfc2VhcmNoX3BhdGhzKCksIGV4cGVjdGVkX3BhdGhzKQotCi0gICAg
ZGVmIHRlc3RfZGVmYXVsdF90aW1lb3V0X21zKHNlbGYpOgotICAgICAgICBzdXBlcihNYWNUZXN0
LCBzZWxmKS50ZXN0X2RlZmF1bHRfdGltZW91dF9tcygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5tYWtlX3BvcnQob3B0aW9ucz1Nb2NrT3B0aW9ucyhndWFyZF9tYWxsb2M9VHJ1ZSkp
LmRlZmF1bHRfdGltZW91dF9tcygpLCAzNTAwMDApCi0KLQotICAgIGV4YW1wbGVfc2tpcHBlZF9m
aWxlID0gdSIiIgotIyA8cmRhcjovL3Byb2JsZW0vNTY0Nzk1Mj4gZmFzdC9ldmVudHMvbW91c2Vv
dXQtb24td2luZG93Lmh0bWwgbmVlZHMgbWFjIERSVCB0byBpc3N1ZSBtb3VzZSBvdXQgZXZlbnRz
Ci1mYXN0L2V2ZW50cy9tb3VzZW91dC1vbi13aW5kb3cuaHRtbAotCi0jIDxyZGFyOi8vcHJvYmxl
bS81NjQzNjc1PiB3aW5kb3cuc2Nyb2xsVG8gc2Nyb2xscyBhIHdpbmRvdyB3aXRoIG5vIHNjcm9s
bGJhcnMKLWZhc3QvZXZlbnRzL2F0dGVtcHQtc2Nyb2xsLXdpdGgtbm8tc2Nyb2xsYmFycy5odG1s
Ci0KLSMgc2VlIGJ1ZyA8cmRhcjovL3Byb2JsZW0vNTY0NjQzNz4gUkVHUkVTU0lPTiAocjI4MDE1
KTogc3ZnL2JhdGlrL3RleHQvc21hbGxGb250cyBmYWlscwotc3ZnL2JhdGlrL3RleHQvc21hbGxG
b250cy5zdmcKLQotIyBKYXZhIHRlc3RzIGRvbid0IHdvcmsgb24gV0syCi1qYXZhLwotIiIiCi0g
ICAgZXhhbXBsZV9za2lwcGVkX3Rlc3RzID0gWwotICAgICAgICAiZmFzdC9ldmVudHMvbW91c2Vv
dXQtb24td2luZG93Lmh0bWwiLAotICAgICAgICAiZmFzdC9ldmVudHMvYXR0ZW1wdC1zY3JvbGwt
d2l0aC1uby1zY3JvbGxiYXJzLmh0bWwiLAotICAgICAgICAic3ZnL2JhdGlrL3RleHQvc21hbGxG
b250cy5zdmciLAotICAgICAgICAiamF2YSIsCi0gICAgXQotCi0gICAgZGVmIHRlc3RfdGVzdHNf
ZnJvbV9za2lwcGVkX2ZpbGVfY29udGVudHMoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1h
a2VfcG9ydCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5fdGVzdHNfZnJvbV9za2lw
cGVkX2ZpbGVfY29udGVudHMoc2VsZi5leGFtcGxlX3NraXBwZWRfZmlsZSksIHNlbGYuZXhhbXBs
ZV9za2lwcGVkX3Rlc3RzKQotCi0gICAgZGVmIGFzc2VydF9uYW1lKHNlbGYsIHBvcnRfbmFtZSwg
b3NfdmVyc2lvbl9zdHJpbmcsIGV4cGVjdGVkKToKLSAgICAgICAgaG9zdCA9IE1vY2tTeXN0ZW1I
b3N0KG9zX25hbWU9J21hYycsIG9zX3ZlcnNpb249b3NfdmVyc2lvbl9zdHJpbmcpCi0gICAgICAg
IHBvcnQgPSBzZWxmLm1ha2VfcG9ydChob3N0PWhvc3QsIHBvcnRfbmFtZT1wb3J0X25hbWUpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHBvcnQubmFtZSgpKQotCi0gICAgZGVm
IHRlc3RfdGVzdHNfZm9yX290aGVyX3BsYXRmb3JtcyhzZWxmKToKLSAgICAgICAgcGxhdGZvcm1z
ID0gWydtYWMnLCAnY2hyb21pdW0tbGludXgnLCAnbWFjLXNub3dsZW9wYXJkJ10KLSAgICAgICAg
cG9ydCA9IHNlbGYubWFrZV9wb3J0KHBvcnRfbmFtZT0nbWFjLXNub3dsZW9wYXJkJykKLSAgICAg
ICAgcGxhdGZvcm1fZGlyX3BhdGhzID0gbWFwKHBvcnQuX3dlYmtpdF9iYXNlbGluZV9wYXRoLCBw
bGF0Zm9ybXMpCi0gICAgICAgICMgUmVwbGFjZSBvdXIgZW1wdHkgbW9jayBmaWxlIHN5c3RlbSB3
aXRoIG9uZSB3aGljaCBoYXMgb3VyIGV4cGVjdGVkIHBsYXRmb3JtIGRpcmVjdG9yaWVzLgotICAg
ICAgICBwb3J0Ll9maWxlc3lzdGVtID0gTW9ja0ZpbGVTeXN0ZW0oZGlycz1wbGF0Zm9ybV9kaXJf
cGF0aHMpCi0KLSAgICAgICAgZGlyc190b19za2lwID0gcG9ydC5fdGVzdHNfZm9yX290aGVyX3Bs
YXRmb3JtcygpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3BsYXRmb3JtL2Nocm9taXVtLWxpbnV4
JywgZGlyc190b19za2lwKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdwbGF0Zm9ybS9tYWMn
LCBkaXJzX3RvX3NraXApCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3BsYXRmb3JtL21hYy1z
bm93bGVvcGFyZCcsIGRpcnNfdG9fc2tpcCkKLQotICAgIGRlZiB0ZXN0X3ZlcnNpb24oc2VsZik6
Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShwb3J0LnZlcnNpb24oKSkKLQotICAgIGRlZiB0ZXN0X3ZlcnNpb25zKHNlbGYpOgotICAgICAg
ICAjIE5vdGU6IHRoZXNlIHRlc3RzIGRvbid0IG5lZWQgdG8gYmUgZXhoYXVzdGl2ZSBhcyBsb25n
IGFzIHdlIGdldCBwYXRoIGNvdmVyYWdlLgotICAgICAgICBzZWxmLmFzc2VydF9uYW1lKCdtYWMn
LCAnc25vd2xlb3BhcmQnLCAnbWFjLXNub3dsZW9wYXJkJykKLSAgICAgICAgc2VsZi5hc3NlcnRf
bmFtZSgnbWFjLXNub3dsZW9wYXJkJywgJ2xlb3BhcmQnLCAnbWFjLXNub3dsZW9wYXJkJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRfbmFtZSgnbWFjLXNub3dsZW9wYXJkJywgJ2xpb24nLCAnbWFjLXNu
b3dsZW9wYXJkJykKLQotICAgICAgICBzZWxmLmFzc2VydF9uYW1lKCdtYWMnLCAnbGlvbicsICdt
YWMtbGlvbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0X25hbWUoJ21hYy1saW9uJywgJ2xpb24nLCAn
bWFjLWxpb24nKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X25hbWUoJ21hYycsICdtb3VudGFpbmxp
b24nLCAnbWFjLW1vdW50YWlubGlvbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0X25hbWUoJ21hYy1t
b3VudGFpbmxpb24nLCAnbGlvbicsICdtYWMtbW91bnRhaW5saW9uJykKLQotICAgICAgICBzZWxm
LmFzc2VydF9uYW1lKCdtYWMnLCAnZnV0dXJlJywgJ21hYy1mdXR1cmUnKQotICAgICAgICBzZWxm
LmFzc2VydF9uYW1lKCdtYWMtZnV0dXJlJywgJ2Z1dHVyZScsICdtYWMtZnV0dXJlJykKLQotICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgc2VsZi5hc3NlcnRfbmFtZSwg
J21hYy10aWdlcicsICdsZW9wYXJkJywgJ21hYy1sZW9wYXJkJykKLQotICAgIGRlZiB0ZXN0X3Nl
dHVwX2Vudmlyb25fZm9yX3NlcnZlcihzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9w
b3J0KG9wdGlvbnM9TW9ja09wdGlvbnMobGVha3M9VHJ1ZSwgZ3VhcmRfbWFsbG9jPVRydWUpKQot
ICAgICAgICBlbnYgPSBwb3J0LnNldHVwX2Vudmlyb25fZm9yX3NlcnZlcihwb3J0LmRyaXZlcl9u
YW1lKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW52WydNYWxsb2NTdGFja0xvZ2dpbmcn
XSwgJzEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudlsnRFlMRF9JTlNFUlRfTElCUkFS
SUVTJ10sICcvdXNyL2xpYi9saWJnbWFsbG9jLmR5bGliJykKLQotICAgIGRlZiBfYXNzZXJ0X3Nl
YXJjaF9wYXRoKHNlbGYsIHBvcnRfbmFtZSwgYmFzZWxpbmVfcGF0aCwgc2VhcmNoX3BhdGhzLCB1
c2Vfd2Via2l0Mj1GYWxzZSk6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChwb3J0X25h
bWU9cG9ydF9uYW1lLCBvcHRpb25zPU1vY2tPcHRpb25zKHdlYmtpdF90ZXN0X3J1bm5lcj11c2Vf
d2Via2l0MikpCi0gICAgICAgIGFic29sdXRlX3NlYXJjaF9wYXRocyA9IG1hcChwb3J0Ll93ZWJr
aXRfYmFzZWxpbmVfcGF0aCwgc2VhcmNoX3BhdGhzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHBvcnQuYmFzZWxpbmVfcGF0aCgpLCBwb3J0Ll93ZWJraXRfYmFzZWxpbmVfcGF0aChiYXNlbGlu
ZV9wYXRoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LmJhc2VsaW5lX3NlYXJjaF9w
YXRoKCksIGFic29sdXRlX3NlYXJjaF9wYXRocykKLQotICAgIGRlZiB0ZXN0X2Jhc2VsaW5lX3Nl
YXJjaF9wYXRoKHNlbGYpOgotICAgICAgICAjIE5vdGUgdGhhdCB3ZSBkb24ndCBuZWVkIHRvdGFs
IGNvdmVyYWdlIGhlcmUsIGp1c3QgcGF0aCBjb3ZlcmFnZSwgc2luY2UgdGhpcyBpcyBhbGwgZGF0
YSBkcml2ZW4uCi0gICAgICAgIHNlbGYuX2Fzc2VydF9zZWFyY2hfcGF0aCgnbWFjLXNub3dsZW9w
YXJkJywgJ21hYy1zbm93bGVvcGFyZCcsIFsnbWFjLXNub3dsZW9wYXJkJywgJ21hYy1saW9uJywg
J21hYyddKQotICAgICAgICBzZWxmLl9hc3NlcnRfc2VhcmNoX3BhdGgoJ21hYy1saW9uJywgJ21h
Yy1saW9uJywgWydtYWMtbGlvbicsICdtYWMnXSkKLSAgICAgICAgc2VsZi5fYXNzZXJ0X3NlYXJj
aF9wYXRoKCdtYWMtbW91bnRhaW5saW9uJywgJ21hYycsIFsnbWFjJ10pCi0gICAgICAgIHNlbGYu
X2Fzc2VydF9zZWFyY2hfcGF0aCgnbWFjLWZ1dHVyZScsICdtYWMnLCBbJ21hYyddKQotICAgICAg
ICBzZWxmLl9hc3NlcnRfc2VhcmNoX3BhdGgoJ21hYy1zbm93bGVvcGFyZCcsICdtYWMtd2syJywg
WydtYWMtd2syJywgJ3drMicsICdtYWMtc25vd2xlb3BhcmQnLCAnbWFjLWxpb24nLCAnbWFjJ10s
IHVzZV93ZWJraXQyPVRydWUpCi0gICAgICAgIHNlbGYuX2Fzc2VydF9zZWFyY2hfcGF0aCgnbWFj
LWxpb24nLCAnbWFjLXdrMicsIFsnbWFjLXdrMicsICd3azInLCAnbWFjLWxpb24nLCAnbWFjJ10s
IHVzZV93ZWJraXQyPVRydWUpCi0gICAgICAgIHNlbGYuX2Fzc2VydF9zZWFyY2hfcGF0aCgnbWFj
LW1vdW50YWlubGlvbicsICdtYWMtd2syJywgWydtYWMtd2syJywgJ3drMicsICdtYWMnXSwgdXNl
X3dlYmtpdDI9VHJ1ZSkKLSAgICAgICAgc2VsZi5fYXNzZXJ0X3NlYXJjaF9wYXRoKCdtYWMtZnV0
dXJlJywgJ21hYy13azInLCBbJ21hYy13azInLCAnd2syJywgJ21hYyddLCB1c2Vfd2Via2l0Mj1U
cnVlKQotCi0gICAgZGVmIHRlc3Rfc2hvd19yZXN1bHRzX2h0bWxfZmlsZShzZWxmKToKLSAgICAg
ICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKLSAgICAgICAgIyBEZWxheSBzZXR0aW5nIGEgc2hv
dWxkX2xvZyBleGVjdXRpdmUgdG8gYXZvaWQgbG9nZ2luZyBmcm9tIE1hY1BvcnQuX19pbml0X18u
Ci0gICAgICAgIHBvcnQuX2V4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUoc2hvdWxkX2xvZz1UcnVl
KQotICAgICAgICBleHBlY3RlZF9sb2dzID0gIk1PQ0sgcG9wZW46IFsnVG9vbHMvU2NyaXB0cy9y
dW4tc2FmYXJpJywgJy0tcmVsZWFzZScsICctLW5vLXNhdmVkLXN0YXRlJywgJy1OU09wZW4nLCAn
dGVzdC5odG1sJ10sIGN3ZD0vbW9jay1jaGVja291dFxuIgotICAgICAgICBPdXRwdXRDYXB0dXJl
KCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgcG9ydC5zaG93X3Jlc3VsdHNfaHRtbF9maWxlLCBbInRl
c3QuaHRtbCJdLCBleHBlY3RlZF9sb2dzPWV4cGVjdGVkX2xvZ3MpCi0KLSAgICBkZWYgdGVzdF9v
cGVyYXRpbmdfc3lzdGVtKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdtYWMnLCBz
ZWxmLm1ha2VfcG9ydCgpLm9wZXJhdGluZ19zeXN0ZW0oKSkKLQotICAgIGRlZiB0ZXN0X2RlZmF1
bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQo
cG9ydF9uYW1lPSdtYWMtbGlvbicpCi0gICAgICAgICMgTW9ja1BsYXRmb3JtSW5mbyBvbmx5IGhh
cyAyIG1vY2sgY29yZXMuICBUaGUgaW1wb3J0YW50IHBhcnQgaXMgdGhhdCAyID4gMS4KLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCksIDIpCi0K
LSAgICAgICAgYnl0ZXNfZm9yX2RydCA9IDIwMCAqIDEwMjQgKiAxMDI0Ci0gICAgICAgIHBvcnQu
aG9zdC5wbGF0Zm9ybS50b3RhbF9ieXRlc19tZW1vcnkgPSBsYW1iZGE6IGJ5dGVzX2Zvcl9kcnQK
LSAgICAgICAgZXhwZWN0ZWRfbG9ncyA9ICJUaGlzIG1hY2hpbmUgY291bGQgc3VwcG9ydCAyIGNo
aWxkIHByb2Nlc3NlcywgYnV0IG9ubHkgaGFzIGVub3VnaCBtZW1vcnkgZm9yIDEuXG4iCi0gICAg
ICAgIGNoaWxkX3Byb2Nlc3NlcyA9IE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxm
LCBwb3J0LmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzLCAoKSwgZXhwZWN0ZWRfbG9ncz1leHBlY3Rl
ZF9sb2dzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoaWxkX3Byb2Nlc3NlcywgMSkKLQot
ICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIGFsd2F5cyB1c2Ugb25lIHByb2Nlc3MsIGV2ZW4g
aWYgd2UgZG9uJ3QgaGF2ZSB0aGUgbWVtb3J5IGZvciBpdC4KLSAgICAgICAgcG9ydC5ob3N0LnBs
YXRmb3JtLnRvdGFsX2J5dGVzX21lbW9yeSA9IGxhbWJkYTogYnl0ZXNfZm9yX2RydCAtIDEKLSAg
ICAgICAgZXhwZWN0ZWRfbG9ncyA9ICJUaGlzIG1hY2hpbmUgY291bGQgc3VwcG9ydCAyIGNoaWxk
IHByb2Nlc3NlcywgYnV0IG9ubHkgaGFzIGVub3VnaCBtZW1vcnkgZm9yIDEuXG4iCi0gICAgICAg
IGNoaWxkX3Byb2Nlc3NlcyA9IE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBw
b3J0LmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzLCAoKSwgZXhwZWN0ZWRfbG9ncz1leHBlY3RlZF9s
b2dzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoaWxkX3Byb2Nlc3NlcywgMSkKLQotICAg
ICAgICAjIFNub3dMZW9wYXJkIGhhcyBhIENGTmV0d29yayBidWcgd2hpY2ggY2F1c2VzIGNyYXNo
ZXMgaWYgd2UgZXhlY3V0ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgRFJUIGF0IG9uY2UuCi0gICAg
ICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChwb3J0X25hbWU9J21hYy1zbm93bGVvcGFyZCcpCi0g
ICAgICAgIGV4cGVjdGVkX2xvZ3MgPSAiQ2Fubm90IHJ1biB0ZXN0cyBpbiBwYXJhbGxlbCBvbiBT
bm93IExlb3BhcmQgZHVlIHRvIHJkYXI6Ly9wcm9ibGVtLzEwNjIxNTI1LlxuIgotICAgICAgICBj
aGlsZF9wcm9jZXNzZXMgPSBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgcG9y
dC5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcywgKCksIGV4cGVjdGVkX2xvZ3M9ZXhwZWN0ZWRfbG9n
cykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGlsZF9wcm9jZXNzZXMsIDEpCi0KLSAgICBk
ZWYgdGVzdF9nZXRfY3Jhc2hfbG9nKHNlbGYpOgotICAgICAgICAjIE1hYyBjcmFzaCBsb2dzIGFy
ZSB0ZXN0ZWQgZWxzZXdoZXJlLCBzbyBoZXJlIHdlIGp1c3QgbWFrZSBzdXJlIHdlIGRvbid0IGNy
YXNoLgotICAgICAgICBkZWYgZmFrZV90aW1lX2NiKCk6Ci0gICAgICAgICAgICB0aW1lcyA9IFsw
LCAyMCwgNDBdCi0gICAgICAgICAgICByZXR1cm4gbGFtYmRhOiB0aW1lcy5wb3AoMCkKLSAgICAg
ICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHBvcnRfbmFtZT0nbWFjLXNub3dsZW9wYXJkJykKLSAg
ICAgICAgcG9ydC5fZ2V0X2NyYXNoX2xvZygnRHVtcFJlbmRlclRyZWUnLCAxMjM0LCAnJywgJycs
IDAsCi0gICAgICAgICAgICB0aW1lX2ZuPWZha2VfdGltZV9jYigpLCBzbGVlcF9mbj1sYW1iZGEg
ZGVsYXk6IE5vbmUpCi0KLSAgICBkZWYgdGVzdF9oZWxwZXJfc3RhcnRzKHNlbGYpOgotICAgICAg
ICBob3N0ID0gTW9ja1N5c3RlbUhvc3QoTW9ja0V4ZWN1dGl2ZSgpKQotICAgICAgICBwb3J0ID0g
c2VsZi5tYWtlX3BvcnQoaG9zdCkKLSAgICAgICAgb2MgPSBPdXRwdXRDYXB0dXJlKCkKLSAgICAg
ICAgb2MuY2FwdHVyZV9vdXRwdXQoKQotICAgICAgICBob3N0LmV4ZWN1dGl2ZS5fcHJvYyA9IE1v
Y2tQcm9jZXNzKCdyZWFkeVxuJykKLSAgICAgICAgcG9ydC5zdGFydF9oZWxwZXIoKQotICAgICAg
ICBwb3J0LnN0b3BfaGVscGVyKCkKLSAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQotCi0gICAg
ICAgICMgbWFrZSBzdXJlIHRyeWluZyB0byBzdG9wIHRoZSBoZWxwZXIgdHdpY2UgaXMgc2FmZS4K
LSAgICAgICAgcG9ydC5zdG9wX2hlbHBlcigpCi0KLSAgICBkZWYgdGVzdF9oZWxwZXJfZmFpbHNf
dG9fc3RhcnQoc2VsZik6Ci0gICAgICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9zdChNb2NrRXhlY3V0
aXZlKCkpCi0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChob3N0KQotICAgICAgICBvYyA9
IE91dHB1dENhcHR1cmUoKQotICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCi0gICAgICAgIHBv
cnQuc3RhcnRfaGVscGVyKCkKLSAgICAgICAgcG9ydC5zdG9wX2hlbHBlcigpCi0gICAgICAgIG9j
LnJlc3RvcmVfb3V0cHV0KCkKLQotICAgIGRlZiB0ZXN0X2hlbHBlcl9mYWlsc190b19zdG9wKHNl
bGYpOgotICAgICAgICBob3N0ID0gTW9ja1N5c3RlbUhvc3QoTW9ja0V4ZWN1dGl2ZSgpKQotICAg
ICAgICBob3N0LmV4ZWN1dGl2ZS5fcHJvYyA9IE1vY2tQcm9jZXNzKCkKLQotICAgICAgICBkZWYg
YmFkX3dhaXRlcigpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignZmFpbGVkIHRvIHdhaXQn
KQotICAgICAgICBob3N0LmV4ZWN1dGl2ZS5fcHJvYy53YWl0ID0gYmFkX3dhaXRlcgotCi0gICAg
ICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChob3N0KQotICAgICAgICBvYyA9IE91dHB1dENhcHR1
cmUoKQotICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCi0gICAgICAgIHBvcnQuc3RhcnRfaGVs
cGVyKCkKLSAgICAgICAgcG9ydC5zdG9wX2hlbHBlcigpCi0gICAgICAgIG9jLnJlc3RvcmVfb3V0
cHV0KCkKLQotICAgIGRlZiB0ZXN0X3NhbXBsZV9wcm9jZXNzKHNlbGYpOgotCi0gICAgICAgIGRl
ZiBsb2dnaW5nX3J1bl9jb21tYW5kKGFyZ3MpOgotICAgICAgICAgICAgcHJpbnQgYXJncwotCi0g
ICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCi0gICAgICAgIHBvcnQuX2V4ZWN1dGl2ZSA9
IE1vY2tFeGVjdXRpdmUyKHJ1bl9jb21tYW5kX2ZuPWxvZ2dpbmdfcnVuX2NvbW1hbmQpCi0gICAg
ICAgIGV4cGVjdGVkX3N0ZG91dCA9ICJbJy91c3IvYmluL3NhbXBsZScsIDQyLCAxMCwgMTAsICct
ZmlsZScsICcvbW9jay1idWlsZC9sYXlvdXQtdGVzdC1yZXN1bHRzL3Rlc3QtNDItc2FtcGxlLnR4
dCddXG4iCi0gICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBwb3J0
LnNhbXBsZV9wcm9jZXNzLCBhcmdzPVsndGVzdCcsIDQyXSwgZXhwZWN0ZWRfc3Rkb3V0PWV4cGVj
dGVkX3N0ZG91dCkKLQotICAgIGRlZiB0ZXN0X3NhbXBsZV9wcm9jZXNzX3Rocm93c19leGNlcHRp
b24oc2VsZik6Ci0KLSAgICAgICAgZGVmIHRocm93aW5nX3J1bl9jb21tYW5kKGFyZ3MpOgotICAg
ICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3IoIk1PQ0sgc2NyaXB0IGVycm9yIikKLQotICAgICAg
ICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQotICAgICAgICBwb3J0Ll9leGVjdXRpdmUgPSBNb2Nr
RXhlY3V0aXZlMihydW5fY29tbWFuZF9mbj10aHJvd2luZ19ydW5fY29tbWFuZCkKLSAgICAgICAg
T3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIHBvcnQuc2FtcGxlX3Byb2Nlc3Ms
IGFyZ3M9Wyd0ZXN0JywgNDJdKQotCi0gICAgZGVmIHRlc3RfMzJiaXQoc2VsZik6Ci0gICAgICAg
IHBvcnQgPSBzZWxmLm1ha2VfcG9ydChvcHRpb25zPU1vY2tPcHRpb25zKGFyY2hpdGVjdHVyZT0n
eDg2JykpCi0KLSAgICAgICAgZGVmIHJ1bl9zY3JpcHQoc2NyaXB0LCBhcmdzPU5vbmUsIGVudj1O
b25lKToKLSAgICAgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKLQotICAgICAgICBwb3J0Ll9ydW5f
c2NyaXB0ID0gcnVuX3NjcmlwdAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuYXJjaGl0
ZWN0dXJlKCksICd4ODYnKQotICAgICAgICBwb3J0Ll9idWlsZF9kcml2ZXIoKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywgWydBUkNIUz1pMzg2J10pCi0KLSAgICBkZWYgdGVz
dF82NGJpdChzZWxmKToKLSAgICAgICAgIyBBcHBsZSBNYWMgcG9ydCBpcyA2NC1iaXQgYnkgZGVm
YXVsdAotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHBvcnQuYXJjaGl0ZWN0dXJlKCksICd4ODZfNjQnKQotCi0gICAgICAgIGRlZiBydW5f
c2NyaXB0KHNjcmlwdCwgYXJncz1Ob25lLCBlbnY9Tm9uZSk6Ci0gICAgICAgICAgICBzZWxmLmFy
Z3MgPSBhcmdzCi0KLSAgICAgICAgcG9ydC5fcnVuX3NjcmlwdCA9IHJ1bl9zY3JpcHQKLSAgICAg
ICAgcG9ydC5fYnVpbGRfZHJpdmVyKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFy
Z3MsIFtdKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9t
b2NrX2RydC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L21vY2tfZHJ0LnB5CShyZXZpc2lvbiAxNDg0OTcpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0LnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0xLDI5OSArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0j
Ci0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBHb29nbGUgbmFtZSBub3IgdGhl
IG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIgotVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlv
biBvZiB0aGUgUG9ydCBpbnRlcmZhY2UgdGhhdCBvdmVycmlkZXMgb3RoZXIKLXBvcnRzIGFuZCBj
aGFuZ2VzIHRoZSBEcml2ZXIgYmluYXJ5IHRvICJNb2NrRFJUIi4KLQotVGhlIE1vY2tEUlQgb2Jq
ZWN0cyBlbXVsYXRlIHdoYXQgYSByZWFsIERSVCB3b3VsZCBkby4gSW4gcGFydGljdWxhciwgdGhl
eQotcmV0dXJuIHRoZSBvdXRwdXQgYSByZWFsIERSVCB3b3VsZCByZXR1cm4gZm9yIGEgZ2l2ZW4g
dGVzdCwgYXNzdW1pbmcgdGhhdAotdGVzdCBhY3R1YWxseSBwYXNzZXMgKGV4Y2VwdCBmb3IgcmVm
dGVzdHMsIHdoaWNoIGN1cnJlbnRseSBjYXVzZSB0aGUKLU1vY2tEUlQgdG8gY3Jhc2gpLgotIiIi
Ci0KLWltcG9ydCBiYXNlNjQKLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3B0cGFyc2UKLWltcG9y
dCBvcwotaW1wb3J0IHN5cwotCi0jIFNpbmNlIHdlIGV4ZWN1dGUgdGhpcyBzY3JpcHQgZGlyZWN0
bHkgYXMgcGFydCBvZiB0aGUgdW5pdCB0ZXN0cywgd2UgbmVlZCB0byBlbnN1cmUKLSMgdGhhdCBU
b29scy9TY3JpcHRzIGlzIGluIHN5cy5wYXRoIGZvciB0aGUgbmV4dCBpbXBvcnRzIHRvIHdvcmsg
Y29ycmVjdGx5Lgotc2NyaXB0X2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUo
b3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18p
KSkpKQotaWYgc2NyaXB0X2RpciBub3QgaW4gc3lzLnBhdGg6Ci0gICAgc3lzLnBhdGguYXBwZW5k
KHNjcmlwdF9kaXIpCi0KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0IGlt
cG9ydCBTeXN0ZW1Ib3N0Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmRyaXZlciBp
bXBvcnQgRHJpdmVySW5wdXQsIERyaXZlck91dHB1dCwgRHJpdmVyUHJveHkKLWZyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzLnBvcnQuZmFjdG9yeSBpbXBvcnQgUG9ydEZhY3RvcnkKLQotX2xvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQotCi0KLWNsYXNzIE1vY2tEUlRQb3J0KG9iamVj
dCk6Ci0gICAgcG9ydF9uYW1lID0gJ21vY2snCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYg
ZGV0ZXJtaW5lX2Z1bGxfcG9ydF9uYW1lKGNscywgaG9zdCwgb3B0aW9ucywgcG9ydF9uYW1lKToK
LSAgICAgICAgcmV0dXJuIHBvcnRfbmFtZQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3Qs
IHBvcnRfbmFtZSwgKiprd2FyZ3MpOgotICAgICAgICBzZWxmLl9fZGVsZWdhdGUgPSBQb3J0RmFj
dG9yeShob3N0KS5nZXQocG9ydF9uYW1lLnJlcGxhY2UoJ21vY2stJywgJycpLCAqKmt3YXJncykK
LQotICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKLSAgICAgICAgcmV0dXJuIGdldGF0
dHIoc2VsZi5fX2RlbGVnYXRlLCBuYW1lKQotCi0gICAgZGVmIGNoZWNrX2J1aWxkKHNlbGYsIG5l
ZWRzX2h0dHApOgotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIGNoZWNrX3N5c19kZXBz
KHNlbGYsIG5lZWRzX2h0dHApOgotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIGNyZWF0
ZV9kcml2ZXIoc2VsZiwgd29ya2VyX251bWJlciwgbm9fdGltZW91dD1GYWxzZSk6Ci0gICAgICAg
ICMgVGhlIG1hZ2ljIG9mIHRoZSBNb2NrRFJUUG9ydCBpcyB0aGF0IHdlIGNyZWF0ZSBhIGRyaXZl
ciB0aGF0IGhhcyBhCi0gICAgICAgICMgY21kX2xpbmUoKSBtZXRob2QgbW9ua2V5LXBhdGNoZWQg
dG8gaW52b2tlIHRoaXMgc2NyaXB0IGluc3RlYWQgb2YgRFJULgotICAgICAgICByZXR1cm4gRHJp
dmVyUHJveHkoc2VsZiwgd29ya2VyX251bWJlciwgc2VsZi5fbW9ja2VkX2RyaXZlcl9tYWtlciwg
cGl4ZWxfdGVzdHM9c2VsZi5nZXRfb3B0aW9uKCdwaXhlbF90ZXN0cycpLCBub190aW1lb3V0PW5v
X3RpbWVvdXQpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9tb2NrZWRfZHJpdmVyX21h
a2VyKHBvcnQsIHdvcmtlcl9udW1iZXIsIHBpeGVsX3Rlc3RzLCBub190aW1lb3V0PUZhbHNlKToK
LSAgICAgICAgcGF0aF90b190aGlzX2ZpbGUgPSBwb3J0Lmhvc3QuZmlsZXN5c3RlbS5hYnNwYXRo
KF9fZmlsZV9fLnJlcGxhY2UoJy5weWMnLCAnLnB5JykpCi0gICAgICAgIGRyaXZlciA9IHBvcnQu
X19kZWxlZ2F0ZS5fZHJpdmVyX2NsYXNzKCkocG9ydCwgd29ya2VyX251bWJlciwgcGl4ZWxfdGVz
dHMsIG5vX3RpbWVvdXQpCi0gICAgICAgIGRyaXZlci5jbWRfbGluZSA9IHBvcnQuX292ZXJyaWRp
bmdfY21kX2xpbmUoZHJpdmVyLmNtZF9saW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQuX19kZWxlZ2F0ZS5fcGF0aF90b19kcml2ZXIo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
eXMuZXhlY3V0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXRoX3RvX3RoaXNfZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0Ll9fZGVsZWdhdGUubmFtZSgpKQotICAgICAg
ICByZXR1cm4gZHJpdmVyCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9vdmVycmlkaW5n
X2NtZF9saW5lKG9yaWdpbmFsX2NtZF9saW5lLCBkcml2ZXJfcGF0aCwgcHl0aG9uX2V4ZSwgdGhp
c19maWxlLCBwb3J0X25hbWUpOgotICAgICAgICBkZWYgbmV3X2NtZF9saW5lKHBpeGVsX3Rlc3Rz
LCBwZXJfdGVzdF9hcmdzKToKLSAgICAgICAgICAgIGNtZF9saW5lID0gb3JpZ2luYWxfY21kX2xp
bmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpCi0gICAgICAgICAgICBpbmRleCA9IGNtZF9s
aW5lLmluZGV4KGRyaXZlcl9wYXRoKQotICAgICAgICAgICAgY21kX2xpbmVbaW5kZXg6aW5kZXgg
KyAxXSA9IFtweXRob25fZXhlLCB0aGlzX2ZpbGUsICctLXBsYXRmb3JtJywgcG9ydF9uYW1lXQot
ICAgICAgICAgICAgcmV0dXJuIGNtZF9saW5lCi0KLSAgICAgICAgcmV0dXJuIG5ld19jbWRfbGlu
ZQotCi0gICAgZGVmIHN0YXJ0X2hlbHBlcihzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVm
IHN0YXJ0X2h0dHBfc2VydmVyKHNlbGYsIG51bWJlcl9vZl9zZXJ2ZXJzKToKLSAgICAgICAgcGFz
cwotCi0gICAgZGVmIHN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoc2VsZik6Ci0gICAgICAgIHBhc3MK
LQotICAgIGRlZiBhY3F1aXJlX2h0dHBfbG9jayhzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAg
ZGVmIHN0b3BfaGVscGVyKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgc3RvcF9odHRw
X3NlcnZlcihzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHN0b3Bfd2Vic29ja2V0X3Nl
cnZlcihzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHJlbGVhc2VfaHR0cF9sb2NrKHNl
bGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgc2hvd19yZXN1bHRzX2h0bWxfZmlsZShzZWxm
LCByZXN1bHRzX2ZpbGVuYW1lKToKLSAgICAgICAgcGFzcwotCi0KLWRlZiBtYWluKGFyZ3YsIGhv
c3QsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycik6Ci0gICAgIiIiUnVuIHRoZSB0ZXN0cy4iIiIKLQot
ICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZV9vcHRpb25zKGFyZ3YpCi0gICAgaWYgb3B0aW9ucy50
ZXN0X3NoZWxsOgotICAgICAgICBkcnQgPSBNb2NrVGVzdFNoZWxsKG9wdGlvbnMsIGFyZ3MsIGhv
c3QsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycikKLSAgICBlbHNlOgotICAgICAgICBkcnQgPSBNb2Nr
RFJUKG9wdGlvbnMsIGFyZ3MsIGhvc3QsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycikKLSAgICByZXR1
cm4gZHJ0LnJ1bigpCi0KLQotZGVmIHBhcnNlX29wdGlvbnMoYXJndik6Ci0gICAgIyBGSVhNRTog
V2UgaGF2ZSB0byBkbyBjdXN0b20gYXJnIHBhcnNpbmcgaW5zdGVhZCBvZiB1c2luZyB0aGUgb3B0
cGFyc2UKLSAgICAjIG1vZHVsZS4gIEZpcnN0LCBDaHJvbWl1bSBhbmQgbm9uLUNocm9taXVtIERS
VHMgaGF2ZSBhIGRpZmZlcmVudCBhcmd1bWVudAotICAgICMgc3ludGF4LiAgQ2hyb21pdW0gdXNl
cyAtLXBpeGVsLXRlc3RzPTxwYXRoPiwgYW5kIG5vbi1DaHJvbWl1bSB1c2VzCi0gICAgIyAtLXBp
eGVsLXRlc3RzIGFzIGEgYm9vbGVhbiBmbGFnLiBTZWNvbmQsIHdlIGRvbid0IHdhbnQgdG8gaGF2
ZSB0byBsaXN0Ci0gICAgIyBldmVyeSBjb21tYW5kIGxpbmUgZmxhZyBEUlQgYWNjZXB0cywgYnV0
IG9wdHBhcnNlIGNvbXBsYWlucyBhYm91dAotICAgICMgdW5yZWNvZ25pemVkIGZsYWdzLiBBdCBz
b21lIHBvaW50IGl0IG1pZ2h0IGJlIGdvb2QgdG8gc2hhcmUgYSBjb21tb24KLSAgICAjIERSVCBv
cHRpb25zIGNsYXNzIGJldHdlZW4gdGhpcyBmaWxlIGFuZCB3ZWJraXQucHkgYW5kIGNocm9taXVt
LnB5Ci0gICAgIyBqdXN0IHRvIGdldCBiZXR0ZXIgdHlwZSBjaGVja2luZy4KLSAgICBwbGF0Zm9y
bV9pbmRleCA9IGFyZ3YuaW5kZXgoJy0tcGxhdGZvcm0nKQotICAgIHBsYXRmb3JtID0gYXJndltw
bGF0Zm9ybV9pbmRleCArIDFdCi0KLSAgICBwaXhlbF90ZXN0cyA9IEZhbHNlCi0gICAgcGl4ZWxf
cGF0aCA9IE5vbmUKLSAgICB0ZXN0X3NoZWxsID0gJy0tdGVzdC1zaGVsbCcgaW4gYXJndgotICAg
IGlmIHRlc3Rfc2hlbGw6Ci0gICAgICAgIGZvciBhcmcgaW4gYXJndjoKLSAgICAgICAgICAgIGlm
IGFyZy5zdGFydHN3aXRoKCctLXBpeGVsLXRlc3RzJyk6Ci0gICAgICAgICAgICAgICAgcGl4ZWxf
dGVzdHMgPSBUcnVlCi0gICAgICAgICAgICAgICAgcGl4ZWxfcGF0aCA9IGFyZ1tsZW4oJy0tcGl4
ZWwtdGVzdHM9Jyk6XQotICAgIGVsc2U6Ci0gICAgICAgIHBpeGVsX3Rlc3RzID0gJy0tcGl4ZWwt
dGVzdHMnIGluIGFyZ3YKLSAgICBvcHRpb25zID0gb3B0cGFyc2UuVmFsdWVzKHsndGVzdF9zaGVs
bCc6IHRlc3Rfc2hlbGwsICdwbGF0Zm9ybSc6IHBsYXRmb3JtLCAncGl4ZWxfdGVzdHMnOiBwaXhl
bF90ZXN0cywgJ3BpeGVsX3BhdGgnOiBwaXhlbF9wYXRofSkKLSAgICByZXR1cm4gKG9wdGlvbnMs
IGFyZ3YpCi0KLQotY2xhc3MgTW9ja0RSVChvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBvcHRpb25zLCBhcmdzLCBob3N0LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpOgotICAgICAgICBz
ZWxmLl9vcHRpb25zID0gb3B0aW9ucwotICAgICAgICBzZWxmLl9hcmdzID0gYXJncwotICAgICAg
ICBzZWxmLl9ob3N0ID0gaG9zdAotICAgICAgICBzZWxmLl9zdGRvdXQgPSBzdGRvdXQKLSAgICAg
ICAgc2VsZi5fc3RkaW4gPSBzdGRpbgotICAgICAgICBzZWxmLl9zdGRlcnIgPSBzdGRlcnIKLQot
ICAgICAgICBwb3J0X25hbWUgPSBOb25lCi0gICAgICAgIGlmIG9wdGlvbnMucGxhdGZvcm06Ci0g
ICAgICAgICAgICBwb3J0X25hbWUgPSBvcHRpb25zLnBsYXRmb3JtCi0gICAgICAgIHNlbGYuX3Bv
cnQgPSBQb3J0RmFjdG9yeShob3N0KS5nZXQocG9ydF9uYW1lPXBvcnRfbmFtZSwgb3B0aW9ucz1v
cHRpb25zKQotICAgICAgICBzZWxmLl9kcml2ZXIgPSBzZWxmLl9wb3J0LmNyZWF0ZV9kcml2ZXIo
MCkKLQotICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAg
ICBsaW5lID0gc2VsZi5fc3RkaW4ucmVhZGxpbmUoKQotICAgICAgICAgICAgaWYgbm90IGxpbmU6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgICAgIGRyaXZlcl9pbnB1dCA9IHNl
bGYuaW5wdXRfZnJvbV9saW5lKGxpbmUpCi0gICAgICAgICAgICBkaXJuYW1lLCBiYXNlbmFtZSA9
IHNlbGYuX3BvcnQuc3BsaXRfdGVzdChkcml2ZXJfaW5wdXQudGVzdF9uYW1lKQotICAgICAgICAg
ICAgaXNfcmVmdGVzdCA9IChzZWxmLl9wb3J0LnJlZmVyZW5jZV9maWxlcyhkcml2ZXJfaW5wdXQu
dGVzdF9uYW1lKSBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LmlzX3Jl
ZmVyZW5jZV9odG1sX2ZpbGUoc2VsZi5fcG9ydC5fZmlsZXN5c3RlbSwgZGlybmFtZSwgYmFzZW5h
bWUpKQotICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5vdXRwdXRfZm9yX3Rlc3QoZHJpdmVyX2lu
cHV0LCBpc19yZWZ0ZXN0KQotICAgICAgICAgICAgc2VsZi53cml0ZV90ZXN0X291dHB1dChkcml2
ZXJfaW5wdXQsIG91dHB1dCwgaXNfcmVmdGVzdCkKLQotICAgIGRlZiBpbnB1dF9mcm9tX2xpbmUo
c2VsZiwgbGluZSk6Ci0gICAgICAgIHZhbHMgPSBsaW5lLnN0cmlwKCkuc3BsaXQoIiciKQotICAg
ICAgICBpZiBsZW4odmFscykgPT0gMToKLSAgICAgICAgICAgIHVyaSA9IHZhbHNbMF0KLSAgICAg
ICAgICAgIGNoZWNrc3VtID0gTm9uZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdXJpID0g
dmFsc1swXQotICAgICAgICAgICAgY2hlY2tzdW0gPSB2YWxzWzFdCi0gICAgICAgIGlmIHVyaS5z
dGFydHN3aXRoKCdodHRwOi8vJykgb3IgdXJpLnN0YXJ0c3dpdGgoJ2h0dHBzOi8vJyk6Ci0gICAg
ICAgICAgICB0ZXN0X25hbWUgPSBzZWxmLl9kcml2ZXIudXJpX3RvX3Rlc3QodXJpKQotICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgdGVzdF9uYW1lID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0
X2ZpbGVuYW1lKHVyaSkKLQotICAgICAgICByZXR1cm4gRHJpdmVySW5wdXQodGVzdF9uYW1lLCAw
LCBjaGVja3N1bSwgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cykKLQotICAgIGRlZiBvdXRwdXRf
Zm9yX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCwgaXNfcmVmdGVzdCk6Ci0gICAgICAgIHBvcnQgPSBz
ZWxmLl9wb3J0Ci0gICAgICAgIGFjdHVhbF90ZXh0ID0gcG9ydC5leHBlY3RlZF90ZXh0KHRlc3Rf
aW5wdXQudGVzdF9uYW1lKQotICAgICAgICBhY3R1YWxfYXVkaW8gPSBwb3J0LmV4cGVjdGVkX2F1
ZGlvKHRlc3RfaW5wdXQudGVzdF9uYW1lKQotICAgICAgICBhY3R1YWxfaW1hZ2UgPSBOb25lCi0g
ICAgICAgIGFjdHVhbF9jaGVja3N1bSA9IE5vbmUKLSAgICAgICAgaWYgaXNfcmVmdGVzdDoKLSAg
ICAgICAgICAgICMgTWFrZSB1cCBzb21lIG91dHB1dCBmb3IgcmVmdGVzdHMuCi0gICAgICAgICAg
ICBhY3R1YWxfdGV4dCA9ICdyZWZlcmVuY2UgdGV4dFxuJwotICAgICAgICAgICAgYWN0dWFsX2No
ZWNrc3VtID0gJ21vY2stY2hlY2tzdW0nCi0gICAgICAgICAgICBhY3R1YWxfaW1hZ2UgPSAnYmxh
bmsnCi0gICAgICAgICAgICBpZiB0ZXN0X2lucHV0LnRlc3RfbmFtZS5lbmRzd2l0aCgnLW1pc21h
dGNoLmh0bWwnKToKLSAgICAgICAgICAgICAgICBhY3R1YWxfdGV4dCA9ICdub3QgcmVmZXJlbmNl
IHRleHRcbicKLSAgICAgICAgICAgICAgICBhY3R1YWxfY2hlY2tzdW0gPSAnbm90LW1vY2stY2hl
Y2tzdW0nCi0gICAgICAgICAgICAgICAgYWN0dWFsX2ltYWdlID0gJ25vdCBibGFuaycKLSAgICAg
ICAgZWxpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzIGFuZCB0ZXN0X2lucHV0LmltYWdlX2hh
c2g6Ci0gICAgICAgICAgICBhY3R1YWxfY2hlY2tzdW0gPSBwb3J0LmV4cGVjdGVkX2NoZWNrc3Vt
KHRlc3RfaW5wdXQudGVzdF9uYW1lKQotICAgICAgICAgICAgYWN0dWFsX2ltYWdlID0gcG9ydC5l
eHBlY3RlZF9pbWFnZSh0ZXN0X2lucHV0LnRlc3RfbmFtZSkKLQotICAgICAgICByZXR1cm4gRHJp
dmVyT3V0cHV0KGFjdHVhbF90ZXh0LCBhY3R1YWxfaW1hZ2UsIGFjdHVhbF9jaGVja3N1bSwgYWN0
dWFsX2F1ZGlvKQotCi0gICAgZGVmIHdyaXRlX3Rlc3Rfb3V0cHV0KHNlbGYsIHRlc3RfaW5wdXQs
IG91dHB1dCwgaXNfcmVmdGVzdCk6Ci0gICAgICAgIGlmIG91dHB1dC5hdWRpbzoKLSAgICAgICAg
ICAgIHNlbGYuX3N0ZG91dC53cml0ZSgnQ29udGVudC1UeXBlOiBhdWRpby93YXZcbicpCi0gICAg
ICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJh
c2U2NFxuJykKLSAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZShiYXNlNjQuYjY0ZW5jb2Rl
KG91dHB1dC5hdWRpbykpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9zdGRvdXQu
d3JpdGUoJ0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpblxuJykKLSAgICAgICAgICAgICMgRklYTUU6
IE5vdGUgdGhhdCB3ZSBkb24ndCBlbnN1cmUgdGhlcmUgaXMgYSB0cmFpbGluZyBuZXdsaW5lIQot
ICAgICAgICAgICAgIyBUaGlzIG1pcnJvcnMgYWN0dWFsIChNYWMpIERSVCBiZWhhdmlvciBidXQg
aXMgYSBidWcuCi0gICAgICAgICAgICBpZiBvdXRwdXQudGV4dDoKLSAgICAgICAgICAgICAgICBz
ZWxmLl9zdGRvdXQud3JpdGUob3V0cHV0LnRleHQpCi0KLSAgICAgICAgc2VsZi5fc3Rkb3V0Lndy
aXRlKCcjRU9GXG4nKQotCi0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMgYW5k
IG91dHB1dC5pbWFnZV9oYXNoOgotICAgICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCdcbicp
Ci0gICAgICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoJ0FjdHVhbEhhc2g6ICVzXG4nICUgb3V0
cHV0LmltYWdlX2hhc2gpCi0gICAgICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoJ0V4cGVjdGVk
SGFzaDogJXNcbicgJSB0ZXN0X2lucHV0LmltYWdlX2hhc2gpCi0gICAgICAgICAgICBpZiBvdXRw
dXQuaW1hZ2VfaGFzaCAhPSB0ZXN0X2lucHV0LmltYWdlX2hhc2g6Ci0gICAgICAgICAgICAgICAg
c2VsZi5fc3Rkb3V0LndyaXRlKCdDb250ZW50LVR5cGU6IGltYWdlL3BuZ1xuJykKLSAgICAgICAg
ICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoJ0NvbnRlbnQtTGVuZ3RoOiAlc1xuJyAlIGxlbihv
dXRwdXQuaW1hZ2UpKQotICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZShvdXRwdXQu
aW1hZ2UpCi0gICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgnI0VPRlxuJykKLSAgICAgICAgc2Vs
Zi5fc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgc2VsZi5fc3RkZXJyLndyaXRlKCcjRU9GXG4nKQot
ICAgICAgICBzZWxmLl9zdGRlcnIuZmx1c2goKQotCi0KLWNsYXNzIE1vY2tUZXN0U2hlbGwoTW9j
a0RSVCk6Ci0gICAgZGVmIGlucHV0X2Zyb21fbGluZShzZWxmLCBsaW5lKToKLSAgICAgICAgdmFs
cyA9IGxpbmUuc3RyaXAoKS5zcGxpdCgpCi0gICAgICAgIGlmIGxlbih2YWxzKSA9PSAzOgotICAg
ICAgICAgICAgdXJpLCB0aW1lb3V0LCBjaGVja3N1bSA9IHZhbHMKLSAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgIHVyaSwgdGltZW91dCA9IHZhbHMKLSAgICAgICAgICAgIGNoZWNrc3VtID0gTm9u
ZQotCi0gICAgICAgIHRlc3RfbmFtZSA9IHNlbGYuX2RyaXZlci51cmlfdG9fdGVzdCh1cmkpCi0g
ICAgICAgIHJldHVybiBEcml2ZXJJbnB1dCh0ZXN0X25hbWUsIHRpbWVvdXQsIGNoZWNrc3VtLCBz
ZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzKQotCi0gICAgZGVmIG91dHB1dF9mb3JfdGVzdChzZWxm
LCB0ZXN0X2lucHV0LCBpc19yZWZ0ZXN0KToKLSAgICAgICAgIyBGSVhNRTogVGhpcyBpcyBhIGhh
Y2sgdG8gbWFrZSB2aXJ0dWFsIHRlc3RzIHdvcmsuIE5lZWQgc29tZXRoaW5nIG1vcmUgZ2VuZXJh
bC4KLSAgICAgICAgb3JpZ2luYWxfdGVzdF9uYW1lID0gdGVzdF9pbnB1dC50ZXN0X25hbWUKLSAg
ICAgICAgaWYgJy0tZW5hYmxlLWFjY2VsZXJhdGVkLTJkLWNhbnZhcycgaW4gc2VsZi5fYXJncyBh
bmQgJ2NhbnZhcycgaW4gdGVzdF9pbnB1dC50ZXN0X25hbWU6Ci0gICAgICAgICAgICB0ZXN0X2lu
cHV0LnRlc3RfbmFtZSA9ICdwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2dwdS8nICsgdGVzdF9p
bnB1dC50ZXN0X25hbWUKLSAgICAgICAgb3V0cHV0ID0gc3VwZXIoTW9ja1Rlc3RTaGVsbCwgc2Vs
Zikub3V0cHV0X2Zvcl90ZXN0KHRlc3RfaW5wdXQsIGlzX3JlZnRlc3QpCi0gICAgICAgIHRlc3Rf
aW5wdXQudGVzdF9uYW1lID0gb3JpZ2luYWxfdGVzdF9uYW1lCi0gICAgICAgIHJldHVybiBvdXRw
dXQKLQotICAgIGRlZiB3cml0ZV90ZXN0X291dHB1dChzZWxmLCB0ZXN0X2lucHV0LCBvdXRwdXQs
IGlzX3JlZnRlc3QpOgotICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoIiNVUkw6JXNcbiIgJSBz
ZWxmLl9kcml2ZXIudGVzdF90b191cmkodGVzdF9pbnB1dC50ZXN0X25hbWUpKQotICAgICAgICBp
ZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzIGFuZCBvdXRwdXQuaW1hZ2VfaGFzaDoKLSAgICAg
ICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgiI01ENTolc1xuIiAlIG91dHB1dC5pbWFnZV9oYXNo
KQotICAgICAgICAgICAgaWYgb3V0cHV0LmltYWdlOgotICAgICAgICAgICAgICAgIHNlbGYuX2hv
c3QuZmlsZXN5c3RlbS5tYXliZV9tYWtlX2RpcmVjdG9yeShzZWxmLl9ob3N0LmZpbGVzeXN0ZW0u
ZGlybmFtZShzZWxmLl9vcHRpb25zLnBpeGVsX3BhdGgpKQotICAgICAgICAgICAgICAgIHNlbGYu
X2hvc3QuZmlsZXN5c3RlbS53cml0ZV9iaW5hcnlfZmlsZShzZWxmLl9vcHRpb25zLnBpeGVsX3Bh
dGgsIG91dHB1dC5pbWFnZSkKLSAgICAgICAgaWYgb3V0cHV0LnRleHQ6Ci0gICAgICAgICAgICBz
ZWxmLl9zdGRvdXQud3JpdGUob3V0cHV0LnRleHQpCi0KLSAgICAgICAgaWYgb3V0cHV0LnRleHQg
YW5kIG5vdCBvdXRwdXQudGV4dC5lbmRzd2l0aCgnXG4nKToKLSAgICAgICAgICAgIHNlbGYuX3N0
ZG91dC53cml0ZSgnXG4nKQotICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoJyNFT0ZcbicpCi0g
ICAgICAgIHNlbGYuX3N0ZG91dC5mbHVzaCgpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9f
JzoKLSAgICAjIE5vdGUgdGhhdCB0aGUgTW9jayBpbiBNb2NrRFJUIHJlZmVycyB0byB0aGUgZmFj
dCB0aGF0IGl0IGlzIGVtdWxhdGluZyBhCi0gICAgIyByZWFsIERSVCwgYW5kIGFzIHN1Y2gsIGl0
IG5lZWRzIGFjY2VzcyB0byBhIHJlYWwgU3lzdGVtSG9zdCwgbm90IGEgTW9ja1N5c3RlbUhvc3Qu
Ci0gICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0sIFN5c3RlbUhvc3QoKSwgc3lzLnN0ZGlu
LCBzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19kcnRfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydF91bml0dGVzdC5w
eQkocmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9tb2NrX2RydF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMSwyNjcgKzAs
MCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1
dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIlVuaXQgdGVzdHMgZm9yIE1vY2tEUlQuIiIiCi0K
LWltcG9ydCBzeXMKLWltcG9ydCB1bml0dGVzdDIgYXMgdW5pdHRlc3QKLQotZnJvbSB3ZWJraXRw
eS5jb21tb24gaW1wb3J0IG5ld3N0cmluZ2lvCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0u
c3lzdGVtaG9zdF9tb2NrIGltcG9ydCBNb2NrU3lzdGVtSG9zdAotZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMucG9ydCBpbXBvcnQgbW9ja19kcnQKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LnBvcnQgaW1wb3J0IHBvcnRfdGVzdGNhc2UKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBv
cnQgaW1wb3J0IHRlc3QKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuZmFjdG9yeSBp
bXBvcnQgUG9ydEZhY3RvcnkKLWZyb20gd2Via2l0cHkudG9vbCBpbXBvcnQgbW9ja3Rvb2wKLQot
Ci1tb2NrX29wdGlvbnMgPSBtb2NrdG9vbC5Nb2NrT3B0aW9ucyhjb25maWd1cmF0aW9uPSdSZWxl
YXNlJykKLQotCi1jbGFzcyBNb2NrRFJUUG9ydFRlc3QocG9ydF90ZXN0Y2FzZS5Qb3J0VGVzdENh
c2UpOgotCi0gICAgZGVmIG1ha2VfcG9ydChzZWxmLCBvcHRpb25zPW1vY2tfb3B0aW9ucyk6Ci0g
ICAgICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9zdCgpCi0gICAgICAgIHRlc3QuYWRkX3VuaXRfdGVz
dHNfdG9fbW9ja19maWxlc3lzdGVtKGhvc3QuZmlsZXN5c3RlbSkKLSAgICAgICAgcmV0dXJuIG1v
Y2tfZHJ0Lk1vY2tEUlRQb3J0KGhvc3QsIHBvcnRfbmFtZT0nbW9jay1tYWMtbGlvbicsIG9wdGlv
bnM9b3B0aW9ucykKLQotICAgIGRlZiB0ZXN0X3BvcnRfbmFtZV9pbl9jb25zdHJ1Y3RvcihzZWxm
KToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vY2tfZHJ0Lk1vY2tEUlRQb3J0KE1vY2tTeXN0
ZW1Ib3N0KCksIHBvcnRfbmFtZT0nbW9jay10ZXN0JykpCi0KLSAgICBkZWYgdGVzdF9jaGVja19z
eXNfZGVwcyhzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHRlc3RfZGlmZl9pbWFnZShz
ZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHRlc3RfZGlmZl9pbWFnZV9jcmFzaGVkKHNl
bGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgdGVzdF91c2VzX2FwYWNoZShzZWxmKToKLSAg
ICAgICAgcGFzcwotCi0gICAgZGVmIGludGVncmF0aW9uX3Rlc3RfaHR0cF9sb2NrKHNlbGYpOgot
ICAgICAgICBwYXNzCi0KLSAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9zdGFydF9oZWxwZXIoc2Vs
Zik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X2h0dHBfc2VydmVy
X19ub3JtYWwoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0
X2h0dHBfc2VydmVyX19mYWlscyhzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIGludGVn
cmF0aW9uX3Rlc3Rfd2Vic29ja2V0X3NlcnZlcl9fbm9ybWFsKHNlbGYpOgotICAgICAgICBwYXNz
Ci0KLSAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF93ZWJzb2NrZXRfc2VydmVyX19mYWlscyhzZWxm
KToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIGludGVncmF0aW9uX3Rlc3RfaGVscGVyKHNlbGYp
OgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgdGVzdF9nZXRfY3Jhc2hfbG9nKHNlbGYpOgotICAg
ICAgICBwYXNzCi0KLSAgICBkZWYgdGVzdF9jaGVja19idWlsZChzZWxmKToKLSAgICAgICAgcGFz
cwotCi0KLWNsYXNzIE1vY2tEUlRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgaW5w
dXRfbGluZShzZWxmLCBwb3J0LCB0ZXN0X25hbWUsIGNoZWNrc3VtPU5vbmUpOgotICAgICAgICB1
cmwgPSBwb3J0LmNyZWF0ZV9kcml2ZXIoMCkudGVzdF90b191cmkodGVzdF9uYW1lKQotICAgICAg
ICBpZiB1cmwuc3RhcnRzd2l0aCgnZmlsZTovLycpOgotICAgICAgICAgICAgdXJsID0gdXJsW2xl
bignZmlsZTovLycpOl0KLQotICAgICAgICBpZiBjaGVja3N1bToKLSAgICAgICAgICAgIHJldHVy
biB1cmwgKyAiJyIgKyBjaGVja3N1bSArICdcbicKLSAgICAgICAgcmV0dXJuIHVybCArICdcbicK
LQotICAgIGRlZiBleHRyYV9hcmdzKHNlbGYsIHBpeGVsX3Rlc3RzKToKLSAgICAgICAgaWYgcGl4
ZWxfdGVzdHM6Ci0gICAgICAgICAgICByZXR1cm4gWyctLXBpeGVsLXRlc3RzJywgJy0nXQotICAg
ICAgICByZXR1cm4gWyctJ10KLQotICAgIGRlZiBtYWtlX2RydChzZWxmLCBvcHRpb25zLCBhcmdz
LCBob3N0LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpOgotICAgICAgICByZXR1cm4gbW9ja19kcnQu
TW9ja0RSVChvcHRpb25zLCBhcmdzLCBob3N0LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpCi0KLSAg
ICBkZWYgbWFrZV9pbnB1dF9vdXRwdXQoc2VsZiwgcG9ydCwgdGVzdF9uYW1lLCBwaXhlbF90ZXN0
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfY2hlY2tzdW0sIGRydF9vdXRw
dXQsIGRydF9pbnB1dD1Ob25lLCBleHBlY3RlZF90ZXh0PU5vbmUpOgotICAgICAgICBpZiBwaXhl
bF90ZXN0czoKLSAgICAgICAgICAgIGlmIG5vdCBleHBlY3RlZF9jaGVja3N1bToKLSAgICAgICAg
ICAgICAgICBleHBlY3RlZF9jaGVja3N1bSA9IHBvcnQuZXhwZWN0ZWRfY2hlY2tzdW0odGVzdF9u
YW1lKQotICAgICAgICBpZiBub3QgZHJ0X2lucHV0OgotICAgICAgICAgICAgZHJ0X2lucHV0ID0g
c2VsZi5pbnB1dF9saW5lKHBvcnQsIHRlc3RfbmFtZSwgZXhwZWN0ZWRfY2hlY2tzdW0pCi0gICAg
ICAgIHRleHRfb3V0cHV0ID0gZXhwZWN0ZWRfdGV4dCBvciBwb3J0LmV4cGVjdGVkX3RleHQodGVz
dF9uYW1lKSBvciAnJwotCi0gICAgICAgIGlmIG5vdCBkcnRfb3V0cHV0OgotICAgICAgICAgICAg
ZHJ0X291dHB1dCA9IHNlbGYuZXhwZWN0ZWRfb3V0cHV0KHBvcnQsIHRlc3RfbmFtZSwgcGl4ZWxf
dGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dF9vdXRwdXQsIGV4cGVjdGVkX2NoZWNrc3VtKQotICAgICAgICByZXR1cm4gKGRydF9pbnB1dCwg
ZHJ0X291dHB1dCkKLQotICAgIGRlZiBleHBlY3RlZF9vdXRwdXQoc2VsZiwgcG9ydCwgdGVzdF9u
YW1lLCBwaXhlbF90ZXN0cywgdGV4dF9vdXRwdXQsIGV4cGVjdGVkX2NoZWNrc3VtKToKLSAgICAg
ICAgb3V0cHV0ID0gWydDb250ZW50LVR5cGU6IHRleHQvcGxhaW5cbiddCi0gICAgICAgIGlmIHRl
eHRfb3V0cHV0OgotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCh0ZXh0X291dHB1dCkKLSAgICAg
ICAgb3V0cHV0LmFwcGVuZCgnI0VPRlxuJykKLSAgICAgICAgaWYgcGl4ZWxfdGVzdHMgYW5kIGV4
cGVjdGVkX2NoZWNrc3VtOgotICAgICAgICAgICAgb3V0cHV0LmV4dGVuZChbJ1xuJywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdBY3R1YWxIYXNoOiAlc1xuJyAlIGV4cGVjdGVkX2NoZWNr
c3VtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkSGFzaDogJXNcbicgJSBl
eHBlY3RlZF9jaGVja3N1bV0pCi0gICAgICAgIG91dHB1dC5hcHBlbmQoJyNFT0ZcbicpCi0gICAg
ICAgIHJldHVybiBvdXRwdXQKLQotICAgIGRlZiBhc3NlcnRUZXN0KHNlbGYsIHRlc3RfbmFtZSwg
cGl4ZWxfdGVzdHMsIGV4cGVjdGVkX2NoZWNrc3VtPU5vbmUsIGRydF9vdXRwdXQ9Tm9uZSwgaG9z
dD1Ob25lLCBleHBlY3RlZF90ZXh0PU5vbmUpOgotICAgICAgICBwb3J0X25hbWUgPSAndGVzdCcK
LSAgICAgICAgaG9zdCA9IGhvc3Qgb3IgTW9ja1N5c3RlbUhvc3QoKQotICAgICAgICB0ZXN0LmFk
ZF91bml0X3Rlc3RzX3RvX21vY2tfZmlsZXN5c3RlbShob3N0LmZpbGVzeXN0ZW0pCi0gICAgICAg
IHBvcnQgPSBQb3J0RmFjdG9yeShob3N0KS5nZXQocG9ydF9uYW1lKQotICAgICAgICBkcnRfaW5w
dXQsIGRydF9vdXRwdXQgPSBzZWxmLm1ha2VfaW5wdXRfb3V0cHV0KHBvcnQsIHRlc3RfbmFtZSwK
LSAgICAgICAgICAgIHBpeGVsX3Rlc3RzLCBleHBlY3RlZF9jaGVja3N1bSwgZHJ0X291dHB1dCwg
ZHJ0X2lucHV0PU5vbmUsIGV4cGVjdGVkX3RleHQ9ZXhwZWN0ZWRfdGV4dCkKLQotICAgICAgICBh
cmdzID0gWyctLXBsYXRmb3JtJywgcG9ydF9uYW1lXSArIHNlbGYuZXh0cmFfYXJncyhwaXhlbF90
ZXN0cykKLSAgICAgICAgc3RkaW4gPSBuZXdzdHJpbmdpby5TdHJpbmdJTyhkcnRfaW5wdXQpCi0g
ICAgICAgIHN0ZG91dCA9IG5ld3N0cmluZ2lvLlN0cmluZ0lPKCkKLSAgICAgICAgc3RkZXJyID0g
bmV3c3RyaW5naW8uU3RyaW5nSU8oKQotICAgICAgICBvcHRpb25zLCBhcmdzID0gbW9ja19kcnQu
cGFyc2Vfb3B0aW9ucyhhcmdzKQotCi0gICAgICAgIGRydCA9IHNlbGYubWFrZV9kcnQob3B0aW9u
cywgYXJncywgaG9zdCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQotICAgICAgICByZXMgPSBkcnQu
cnVuKCkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgMCkKLQotICAgICAgICAjIFdl
IHVzZSB0aGUgU3RyaW5nSU8uYnVmbGlzdCBoZXJlIGluc3RlYWQgb2YgZ2V0dmFsdWUoKSBiZWNh
dXNlCi0gICAgICAgICMgdGhlIFN0cmluZ0lPIG1pZ2h0IGJlIGEgbWl4IG9mIHVuaWNvZGUvYXNj
aWkgYW5kIDgtYml0IHN0cmluZ3MuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmJ1
Zmxpc3QsIGRydF9vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RkZXJyLmdldHZh
bHVlKCksICcnIGlmIG9wdGlvbnMudGVzdF9zaGVsbCBlbHNlICcjRU9GXG4nKQotCi0gICAgZGVm
IHRlc3RfbWFpbihzZWxmKToKLSAgICAgICAgaG9zdCA9IE1vY2tTeXN0ZW1Ib3N0KCkKLSAgICAg
ICAgdGVzdC5hZGRfdW5pdF90ZXN0c190b19tb2NrX2ZpbGVzeXN0ZW0oaG9zdC5maWxlc3lzdGVt
KQotICAgICAgICBzdGRpbiA9IG5ld3N0cmluZ2lvLlN0cmluZ0lPKCkKLSAgICAgICAgc3Rkb3V0
ID0gbmV3c3RyaW5naW8uU3RyaW5nSU8oKQotICAgICAgICBzdGRlcnIgPSBuZXdzdHJpbmdpby5T
dHJpbmdJTygpCi0gICAgICAgIHJlcyA9IG1vY2tfZHJ0Lm1haW4oWyctLXBsYXRmb3JtJywgJ3Rl
c3QnXSArIHNlbGYuZXh0cmFfYXJncyhGYWxzZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaG9zdCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHJlcywgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwgJycp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RkZXJyLmdldHZhbHVlKCksICcnKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGhvc3QuZmlsZXN5c3RlbS53cml0dGVuX2ZpbGVzLCB7fSkKLQot
ICAgIGRlZiB0ZXN0X3BpeGVsdGVzdF9wYXNzZXMoc2VsZik6Ci0gICAgICAgICMgVGhpcyBhbHNv
IHRlc3RzIHRoYXQgd2UgaGFuZGxlIEhUVFA6IHRlc3QgVVJMcyBwcm9wZXJseS4KLSAgICAgICAg
c2VsZi5hc3NlcnRUZXN0KCdodHRwL3Rlc3RzL3Bhc3Nlcy90ZXh0Lmh0bWwnLCBUcnVlKQotCi0g
ICAgZGVmIHRlc3RfcGl4ZWx0ZXN0X19mYWlscyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRU
ZXN0KCdmYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS5odG1sJywgcGl4ZWxfdGVzdHM9
VHJ1ZSwKLSAgICAgICAgICAgIGV4cGVjdGVkX2NoZWNrc3VtPSdpbWFnZV9jaGVja3N1bS1jaGVj
a3N1bScsCi0gICAgICAgICAgICBkcnRfb3V0cHV0PVsnQ29udGVudC1UeXBlOiB0ZXh0L3BsYWlu
XG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgJ2ltYWdlX2NoZWNrc3VtLXR4dCcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAnI0VPRlxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICdc
bicsCi0gICAgICAgICAgICAgICAgICAgICAgICAnQWN0dWFsSGFzaDogaW1hZ2VfY2hlY2tzdW0t
Y2hlY2tzdW1cbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAnRXhwZWN0ZWRIYXNoOiBpbWFn
ZV9jaGVja3N1bS1jaGVja3N1bVxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICcjRU9GXG4n
XSkKLQotICAgIGRlZiB0ZXN0X3RleHRvbmx5KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRl
c3QoJ3Bhc3Nlcy9pbWFnZS5odG1sJywgRmFsc2UpCi0KLSAgICBkZWYgdGVzdF9jaGVja3N1bV9p
bl9wbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VGVzdCgncGFzc2VzL2NoZWNrc3VtX2lu
X2ltYWdlLmh0bWwnLCBUcnVlKQotCi0gICAgZGVmIHRlc3RfbWlzc2luZ19pbWFnZShzZWxmKToK
LSAgICAgICAgc2VsZi5hc3NlcnRUZXN0KCdmYWlsdXJlcy9leHBlY3RlZC9taXNzaW5nX2ltYWdl
Lmh0bWwnLCBUcnVlKQotCi0gICAgZGVmIHRlc3RfbWlzc2luZ190ZXh0KHNlbGYpOgotICAgICAg
ICBzZWxmLmFzc2VydFRlc3QoJ2ZhaWx1cmVzL2V4cGVjdGVkL21pc3NpbmdfdGV4dC5odG1sJywg
VHJ1ZSkKLQotICAgIGRlZiB0ZXN0X3JlZnRlc3RfbWF0Y2goc2VsZik6Ci0gICAgICAgIHNlbGYu
YXNzZXJ0VGVzdCgncGFzc2VzL3JlZnRlc3QuaHRtbCcsIEZhbHNlLCBleHBlY3RlZF9jaGVja3N1
bT0nbW9jay1jaGVja3N1bScsIGV4cGVjdGVkX3RleHQ9J3JlZmVyZW5jZSB0ZXh0XG4nKQotICAg
ICAgICBzZWxmLmFzc2VydFRlc3QoJ3Bhc3Nlcy9yZWZ0ZXN0Lmh0bWwnLCBUcnVlLCBleHBlY3Rl
ZF9jaGVja3N1bT0nbW9jay1jaGVja3N1bScsIGV4cGVjdGVkX3RleHQ9J3JlZmVyZW5jZSB0ZXh0
XG4nKQotCi0gICAgZGVmIHRlc3RfcmVmdGVzdF9taXNtYXRjaChzZWxmKToKLSAgICAgICAgc2Vs
Zi5hc3NlcnRUZXN0KCdwYXNzZXMvbWlzbWF0Y2guaHRtbCcsIEZhbHNlLCBleHBlY3RlZF9jaGVj
a3N1bT0nbW9jay1jaGVja3N1bScsIGV4cGVjdGVkX3RleHQ9J3JlZmVyZW5jZSB0ZXh0XG4nKQot
ICAgICAgICBzZWxmLmFzc2VydFRlc3QoJ3Bhc3Nlcy9taXNtYXRjaC5odG1sJywgVHJ1ZSwgZXhw
ZWN0ZWRfY2hlY2tzdW09J21vY2stY2hlY2tzdW0nLCBleHBlY3RlZF90ZXh0PSdyZWZlcmVuY2Ug
dGV4dFxuJykKLQotCi1jbGFzcyBNb2NrVGVzdFNoZWxsVGVzdChNb2NrRFJUVGVzdCk6Ci0gICAg
ZGVmIGV4dHJhX2FyZ3Moc2VsZiwgcGl4ZWxfdGVzdHMpOgotICAgICAgICBpZiBwaXhlbF90ZXN0
czoKLSAgICAgICAgICAgIHJldHVybiBbJy0tcGl4ZWwtdGVzdHM9L3RtcC9wbmdfcmVzdWx0MC5w
bmcnXQotICAgICAgICByZXR1cm4gW10KLQotICAgIGRlZiBtYWtlX2RydChzZWxmLCBvcHRpb25z
LCBhcmdzLCBob3N0LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpOgotICAgICAgICBvcHRpb25zLnRl
c3Rfc2hlbGwgPSBUcnVlCi0KLSAgICAgICAgIyBXZSBoYXZlIHRvIHNldCB0aGVzZSBieSBoYW5k
IGJlY2F1c2UgLS1wbGF0Zm9ybSB0ZXN0IHdvbid0IHRyaWdnZXIKLSAgICAgICAgIyB0aGUgQ2hy
b21pdW0gY29kZSBwYXRocy4KLSAgICAgICAgb3B0aW9ucy5waXhlbF9wYXRoID0gJy90bXAvcG5n
X3Jlc3VsdDAucG5nJwotICAgICAgICBvcHRpb25zLnBpeGVsX3Rlc3RzID0gVHJ1ZQotCi0gICAg
ICAgIHJldHVybiBtb2NrX2RydC5Nb2NrVGVzdFNoZWxsKG9wdGlvbnMsIGFyZ3MsIGhvc3QsIHN0
ZGluLCBzdGRvdXQsIHN0ZGVycikKLQotICAgIGRlZiBpbnB1dF9saW5lKHNlbGYsIHBvcnQsIHRl
c3RfbmFtZSwgY2hlY2tzdW09Tm9uZSk6Ci0gICAgICAgIHVybCA9IHBvcnQuY3JlYXRlX2RyaXZl
cigwKS50ZXN0X3RvX3VyaSh0ZXN0X25hbWUpCi0gICAgICAgIGlmIGNoZWNrc3VtOgotICAgICAg
ICAgICAgcmV0dXJuIHVybCArICcgNjAwMCAnICsgY2hlY2tzdW0gKyAnXG4nCi0gICAgICAgIHJl
dHVybiB1cmwgKyAnIDYwMDBcbicKLQotICAgIGRlZiBleHBlY3RlZF9vdXRwdXQoc2VsZiwgcG9y
dCwgdGVzdF9uYW1lLCBwaXhlbF90ZXN0cywgdGV4dF9vdXRwdXQsIGV4cGVjdGVkX2NoZWNrc3Vt
KToKLSAgICAgICAgdXJsID0gcG9ydC5jcmVhdGVfZHJpdmVyKDApLnRlc3RfdG9fdXJpKHRlc3Rf
bmFtZSkKLSAgICAgICAgb3V0cHV0ID0gWycjVVJMOiVzXG4nICUgdXJsXQotICAgICAgICBpZiBl
eHBlY3RlZF9jaGVja3N1bToKLSAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJyNNRDU6JXNcbicg
JSBleHBlY3RlZF9jaGVja3N1bSkKLSAgICAgICAgaWYgdGV4dF9vdXRwdXQ6Ci0gICAgICAgICAg
ICBvdXRwdXQuYXBwZW5kKHRleHRfb3V0cHV0KQotICAgICAgICAgICAgaWYgbm90IHRleHRfb3V0
cHV0LmVuZHN3aXRoKCdcbicpOgotICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJ1xuJykK
LSAgICAgICAgb3V0cHV0LmFwcGVuZCgnI0VPRlxuJykKLSAgICAgICAgcmV0dXJuIG91dHB1dAot
Ci0gICAgZGVmIHRlc3RfcGl4ZWx0ZXN0X19mYWlscyhzZWxmKToKLSAgICAgICAgaG9zdCA9IE1v
Y2tTeXN0ZW1Ib3N0KCkKLSAgICAgICAgdXJsID0gJyNVUkw6ZmlsZTovLycKLSAgICAgICAgdXJs
ID0gdXJsICsgJyVzL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLmh0bWwnICUgUG9y
dEZhY3RvcnkoaG9zdCkuZ2V0KCd0ZXN0JykubGF5b3V0X3Rlc3RzX2RpcigpCi0gICAgICAgIHNl
bGYuYXNzZXJ0VGVzdCgnZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2VfY2hlY2tzdW0uaHRtbCcsIHBp
eGVsX3Rlc3RzPVRydWUsCi0gICAgICAgICAgICBleHBlY3RlZF9jaGVja3N1bT0naW1hZ2VfY2hl
Y2tzdW0nLAotICAgICAgICAgICAgZHJ0X291dHB1dD1bdXJsICsgJ1xuJywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICcjTUQ1OmltYWdlX2NoZWNrc3VtLWNoZWNrc3VtXG4nLAotICAgICAgICAg
ICAgICAgICAgICAgICAgJ2ltYWdlX2NoZWNrc3VtLXR4dCcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAnXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgJyNFT0ZcbiddLAotICAgICAgICAg
ICAgaG9zdD1ob3N0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvc3QuZmlsZXN5c3RlbS53
cml0dGVuX2ZpbGVzLAotICAgICAgICAgICAgeycvdG1wL3BuZ19yZXN1bHQwLnBuZyc6ICdpbWFn
ZV9jaGVja3N1bVx4OGEtcG5ndEVYdGNoZWNrc3VtXHgwMGltYWdlX2NoZWNrc3VtLWNoZWNrc3Vt
J30pCi0KLSAgICBkZWYgdGVzdF90ZXN0X3NoZWxsX3BhcnNlX29wdGlvbnMoc2VsZik6Ci0gICAg
ICAgIG9wdGlvbnMsIGFyZ3MgPSBtb2NrX2RydC5wYXJzZV9vcHRpb25zKFsnLS1wbGF0Zm9ybScs
ICdjaHJvbWl1bS1tYWMnLCAnLS10ZXN0LXNoZWxsJywKLSAgICAgICAgICAgICctLXBpeGVsLXRl
c3RzPS90bXAvcG5nX3Jlc3VsdDAucG5nJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcHRp
b25zLnRlc3Rfc2hlbGwpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcHRpb25zLnBpeGVsX3Rl
c3RzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdGlvbnMucGl4ZWxfcGF0aCwgJy90bXAv
cG5nX3Jlc3VsdDAucG5nJykKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvcG9ydF90ZXN0Y2FzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3BvcnRfdGVzdGNhc2UucHkJKHJldmlzaW9uIDE0ODQ5
NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcG9ydF90ZXN0
Y2FzZS5weQkod29ya2luZyBjb3B5KQpAQCAtMSw2NTYgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0j
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0j
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LSIiIlVuaXQgdGVzdGluZyBiYXNlIGNsYXNzIGZvciBQb3J0IGltcGxlbWVudGF0aW9ucy4iIiIK
LQotaW1wb3J0IGVycm5vCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCi1pbXBvcnQgc29ja2V0
Ci1pbXBvcnQgc3lzCi1pbXBvcnQgdGltZQotaW1wb3J0IHVuaXR0ZXN0MiBhcyB1bml0dGVzdAot
Ci1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlX21vY2sgaW1wb3J0IE1vY2tF
eGVjdXRpdmUKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtX21vY2sgaW1w
b3J0IE1vY2tGaWxlU3lzdGVtCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2Fw
dHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5
c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9ja1N5c3RlbUhvc3QKLWZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLnBvcnQuYmFzZSBpbXBvcnQgUG9ydAotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
cG9ydC5zZXJ2ZXJfcHJvY2Vzc19tb2NrIGltcG9ydCBNb2NrU2VydmVyUHJvY2VzcwotZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMuc2VydmVycyBpbXBvcnQgaHR0cF9zZXJ2ZXJfYmFzZQotZnJv
bSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucwotCi0KLSMgRklYTUU6
IGdldCByaWQgb2YgdGhpcyBmaXh0dXJlCi1jbGFzcyBUZXN0V2ViS2l0UG9ydChQb3J0KToKLSAg
ICBwb3J0X25hbWUgPSAidGVzdHdlYmtpdHBvcnQiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwg
cG9ydF9uYW1lPU5vbmUsIHN5bWJvbHNfc3RyaW5nPU5vbmUsCi0gICAgICAgICAgICAgICAgIGV4
cGVjdGF0aW9uc19maWxlPU5vbmUsIHNraXBzX2ZpbGU9Tm9uZSwgaG9zdD1Ob25lLCBjb25maWc9
Tm9uZSwKLSAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgotICAgICAgICBwb3J0X25hbWUgPSBw
b3J0X25hbWUgb3IgVGVzdFdlYktpdFBvcnQucG9ydF9uYW1lCi0gICAgICAgIHNlbGYuc3ltYm9s
c19zdHJpbmcgPSBzeW1ib2xzX3N0cmluZyAgIyBQYXNzaW5nICIiIGRpc2FibGVzIGFsbCBzdGF0
aWNseS1kZXRlY3RhYmxlIGZlYXR1cmVzLgotICAgICAgICBob3N0ID0gaG9zdCBvciBNb2NrU3lz
dGVtSG9zdCgpCi0gICAgICAgIHN1cGVyKFRlc3RXZWJLaXRQb3J0LCBzZWxmKS5fX2luaXRfXyho
b3N0LCBwb3J0X25hbWU9cG9ydF9uYW1lLCAqKmt3YXJncykKLQotICAgIGRlZiBhbGxfdGVzdF9j
b25maWd1cmF0aW9ucyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFtzZWxmLnRlc3RfY29uZmlndXJh
dGlvbigpXQotCi0gICAgZGVmIF9zeW1ib2xzX3N0cmluZyhzZWxmKToKLSAgICAgICAgcmV0dXJu
IHNlbGYuc3ltYm9sc19zdHJpbmcKLQotICAgIGRlZiBfdGVzdHNfZm9yX290aGVyX3BsYXRmb3Jt
cyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFsibWVkaWEiLCBdCi0KLSAgICBkZWYgX3Rlc3RzX2Zv
cl9kaXNhYmxlZF9mZWF0dXJlcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFsiYWNjZXNzaWJpbGl0
eSIsIF0KLQotCi1jbGFzcyBQb3J0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICIi
IlRlc3RzIHRoYXQgYWxsIFBvcnQgaW1wbGVtZW50YXRpb25zIG11c3QgcGFzcy4iIiIKLSAgICBI
VFRQX1BPUlRTID0gKDgwMDAsIDgwODAsIDg0NDMpCi0gICAgV0VCU09DS0VUX1BPUlRTID0gKDg4
ODAsKQotCi0gICAgIyBTdWJjbGFzc2VzIG92ZXJyaWRlIHRoaXMgdG8gcG9pbnQgdG8gdGhlaXIg
UG9ydCBzdWJjbGFzcy4KLSAgICBvc19uYW1lID0gTm9uZQotICAgIG9zX3ZlcnNpb24gPSBOb25l
Ci0gICAgcG9ydF9tYWtlciA9IFRlc3RXZWJLaXRQb3J0Ci0gICAgcG9ydF9uYW1lID0gTm9uZQot
Ci0gICAgZGVmIG1ha2VfcG9ydChzZWxmLCBob3N0PU5vbmUsIHBvcnRfbmFtZT1Ob25lLCBvcHRp
b25zPU5vbmUsIG9zX25hbWU9Tm9uZSwgb3NfdmVyc2lvbj1Ob25lLCAqKmt3YXJncyk6Ci0gICAg
ICAgIGhvc3QgPSBob3N0IG9yIE1vY2tTeXN0ZW1Ib3N0KG9zX25hbWU9KG9zX25hbWUgb3Igc2Vs
Zi5vc19uYW1lKSwgb3NfdmVyc2lvbj0ob3NfdmVyc2lvbiBvciBzZWxmLm9zX3ZlcnNpb24pKQot
ICAgICAgICBvcHRpb25zID0gb3B0aW9ucyBvciBNb2NrT3B0aW9ucyhjb25maWd1cmF0aW9uPSdS
ZWxlYXNlJykKLSAgICAgICAgcG9ydF9uYW1lID0gcG9ydF9uYW1lIG9yIHNlbGYucG9ydF9uYW1l
Ci0gICAgICAgIHBvcnRfbmFtZSA9IHNlbGYucG9ydF9tYWtlci5kZXRlcm1pbmVfZnVsbF9wb3J0
X25hbWUoaG9zdCwgb3B0aW9ucywgcG9ydF9uYW1lKQotICAgICAgICBwb3J0ID0gc2VsZi5wb3J0
X21ha2VyKGhvc3QsIHBvcnRfbmFtZSwgb3B0aW9ucz1vcHRpb25zLCAqKmt3YXJncykKLSAgICAg
ICAgcG9ydC5fY29uZmlnLmJ1aWxkX2RpcmVjdG9yeSA9IGxhbWJkYSBjb25maWd1cmF0aW9uOiAn
L21vY2stYnVpbGQnCi0gICAgICAgIHJldHVybiBwb3J0Ci0KLSAgICBkZWYgdGVzdF9kZWZhdWx0
X21heF9sb2NrZWRfc2hhcmRzKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQo
KQotICAgICAgICBwb3J0LmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzID0gbGFtYmRhOiAxNgotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuZGVmYXVsdF9tYXhfbG9ja2VkX3NoYXJkcygpLCAx
KQotICAgICAgICBwb3J0LmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzID0gbGFtYmRhOiAyCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5kZWZhdWx0X21heF9sb2NrZWRfc2hhcmRzKCksIDEp
Ci0KLSAgICBkZWYgdGVzdF9kZWZhdWx0X3RpbWVvdXRfbXMoc2VsZik6Ci0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc2VsZi5tYWtlX3BvcnQob3B0aW9ucz1Nb2NrT3B0aW9ucyhjb25maWd1cmF0
aW9uPSdSZWxlYXNlJykpLmRlZmF1bHRfdGltZW91dF9tcygpLCAzNTAwMCkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfcG9ydChvcHRpb25zPU1vY2tPcHRpb25zKGNvbmZpZ3Vy
YXRpb249J0RlYnVnJykpLmRlZmF1bHRfdGltZW91dF9tcygpLCAzNTAwMCkKLQotICAgIGRlZiB0
ZXN0X2RlZmF1bHRfcGl4ZWxfdGVzdHMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2VsZi5tYWtlX3BvcnQoKS5kZWZhdWx0X3BpeGVsX3Rlc3RzKCksIEZhbHNlKQotCi0gICAgZGVm
IHRlc3RfZHJpdmVyX2NtZF9saW5lKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3Bv
cnQoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHBvcnQuZHJpdmVyX2NtZF9saW5lKCkp
KQotCi0gICAgICAgIG9wdGlvbnMgPSBNb2NrT3B0aW9ucyhhZGRpdGlvbmFsX2RydF9mbGFnPVsn
LS1mb289YmFyJywgJy0tZm9vPWJheiddKQotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQo
b3B0aW9ucz1vcHRpb25zKQotICAgICAgICBjbWRfbGluZSA9IHBvcnQuZHJpdmVyX2NtZF9saW5l
KCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCctLWZvbz1iYXInIGluIGNtZF9saW5lKQotICAg
ICAgICBzZWxmLmFzc2VydFRydWUoJy0tZm9vPWJheicgaW4gY21kX2xpbmUpCi0KLSAgICBkZWYg
dGVzdF91c2VzX2FwYWNoZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFr
ZV9wb3J0KCkuX3VzZXNfYXBhY2hlKCkpCi0KLSAgICBkZWYgYXNzZXJ0X3NlcnZlcnNfYXJlX2Rv
d24oc2VsZiwgaG9zdCwgcG9ydHMpOgotICAgICAgICBmb3IgcG9ydCBpbiBwb3J0czoKLSAgICAg
ICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB0ZXN0X3NvY2tldCA9IHNvY2tldC5zb2NrZXQo
KQotICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0LmNvbm5lY3QoKGhvc3QsIHBvcnQpKQotICAg
ICAgICAgICAgICAgIHNlbGYuZmFpbCgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToK
LSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5lcnJubyBpbiAoZXJybm8uRUNPTk5S
RUZVU0VELCBlcnJuby5FQ09OTlJFU0VUKSkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAg
ICAgICAgICAgdGVzdF9zb2NrZXQuY2xvc2UoKQotCi0gICAgZGVmIGFzc2VydF9zZXJ2ZXJzX2Fy
ZV91cChzZWxmLCBob3N0LCBwb3J0cyk6Ci0gICAgICAgIGZvciBwb3J0IGluIHBvcnRzOgotICAg
ICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0ID0gc29ja2V0LnNvY2tl
dCgpCi0gICAgICAgICAgICAgICAgdGVzdF9zb2NrZXQuY29ubmVjdCgoaG9zdCwgcG9ydCkpCi0g
ICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwo
J2ZhaWxlZCB0byBjb25uZWN0IHRvICVzOiVkJyAlIChob3N0LCBwb3J0KSkKLSAgICAgICAgICAg
IGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgdGVzdF9zb2NrZXQuY2xvc2UoKQotCi0gICAgZGVm
IGludGVncmF0aW9uX3Rlc3RfaHR0cF9sb2NrKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5t
YWtlX3BvcnQoKQotICAgICAgICAjIE9ubHkgY2hlY2tpbmcgdGhhdCBubyBleGNlcHRpb24gaXMg
cmFpc2VkLgotICAgICAgICBwb3J0LmFjcXVpcmVfaHR0cF9sb2NrKCkKLSAgICAgICAgcG9ydC5y
ZWxlYXNlX2h0dHBfbG9jaygpCi0KLSAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9jaGVja19zeXNf
ZGVwcyhzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKLSAgICAgICAgIyBP
bmx5IGNoZWNraW5nIHRoYXQgbm8gZXhjZXB0aW9uIGlzIHJhaXNlZC4KLSAgICAgICAgcG9ydC5j
aGVja19zeXNfZGVwcyhUcnVlKQotCi0gICAgZGVmIGludGVncmF0aW9uX3Rlc3RfaGVscGVyKHNl
bGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQotICAgICAgICAjIE9ubHkgY2hl
Y2tpbmcgdGhhdCBubyBleGNlcHRpb24gaXMgcmFpc2VkLgotICAgICAgICBwb3J0LnN0YXJ0X2hl
bHBlcigpCi0gICAgICAgIHBvcnQuc3RvcF9oZWxwZXIoKQotCi0gICAgZGVmIGludGVncmF0aW9u
X3Rlc3RfaHR0cF9zZXJ2ZXJfX25vcm1hbChzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFr
ZV9wb3J0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRfc2VydmVyc19hcmVfZG93bignbG9jYWxob3N0
Jywgc2VsZi5IVFRQX1BPUlRTKQotICAgICAgICBwb3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKLSAg
ICAgICAgc2VsZi5hc3NlcnRfc2VydmVyc19hcmVfdXAoJ2xvY2FsaG9zdCcsIHNlbGYuSFRUUF9Q
T1JUUykKLSAgICAgICAgcG9ydC5zdG9wX2h0dHBfc2VydmVyKCkKLSAgICAgICAgc2VsZi5hc3Nl
cnRfc2VydmVyc19hcmVfZG93bignbG9jYWxob3N0Jywgc2VsZi5IVFRQX1BPUlRTKQotCi0gICAg
ZGVmIGludGVncmF0aW9uX3Rlc3RfaHR0cF9zZXJ2ZXJfX2ZhaWxzKHNlbGYpOgotICAgICAgICBw
b3J0ID0gc2VsZi5tYWtlX3BvcnQoKQotICAgICAgICAjIFRlc3QgdGhhdCBpZiBhIHBvcnQgaXNu
J3QgYXZhaWxhYmxlLCB0aGUgY2FsbCBmYWlscy4KLSAgICAgICAgZm9yIHBvcnRfbnVtYmVyIGlu
IHNlbGYuSFRUUF9QT1JUUzoKLSAgICAgICAgICAgIHRlc3Rfc29ja2V0ID0gc29ja2V0LnNvY2tl
dCgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAg
ICAgICAgICB0ZXN0X3NvY2tldC5iaW5kKCgnbG9jYWxob3N0JywgcG9ydF9udW1iZXIpKQotICAg
ICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgICAg
IGlmIGUuZXJybm8gaW4gKGVycm5vLkVBRERSSU5VU0UsIGVycm5vLkVBTFJFQURZKToKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnY291bGQgbm90IGJpbmQgdG8gcG9ydCAlZCcg
JSBwb3J0X251bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAg
ICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHBvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIoKQotICAg
ICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ3Nob3VsZCBub3QgaGF2ZSBiZWVuIGFibGUgdG8g
c3RhcnQgdGhlIHNlcnZlciB3aGlsZSBib3VuZCB0byAlZCcgJSBwb3J0X251bWJlcikKLSAgICAg
ICAgICAgICAgICBleGNlcHQgaHR0cF9zZXJ2ZXJfYmFzZS5TZXJ2ZXJFcnJvciwgZToKLSAgICAg
ICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAg
ICBwb3J0LnN0b3BfaHR0cF9zZXJ2ZXIoKQotICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0LmNs
b3NlKCkKLQotICAgICAgICAjIFRlc3QgdGhhdCBjYWxsaW5nIHN0YXJ0KCkgdHdpY2UgZmFpbHMu
Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHBvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIoKQotICAg
ICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHBvcnQuc3RhcnRfaHR0
cF9zZXJ2ZXIpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBwb3J0LnN0b3BfaHR0cF9z
ZXJ2ZXIoKQotCi0gICAgZGVmIGludGVncmF0aW9uX3Rlc3RfaHR0cF9zZXJ2ZXJfX3R3b19zZXJ2
ZXJzKHNlbGYpOgotICAgICAgICAjIFRlc3QgdGhhdCBjYWxsaW5nIHN0YXJ0KCkgb24gdHdvIGRp
ZmZlcmVudCBwb3J0cyBjYXVzZXMgdGhlCi0gICAgICAgICMgZmlyc3QgcG9ydCB0byBiZSB0cmVh
dGVkIGFzIHN0YWxlIGFuZCBraWxsZWQuCi0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgp
Ci0gICAgICAgICMgVGVzdCB0aGF0IGlmIGEgcG9ydCBpc24ndCBhdmFpbGFibGUsIHRoZSBjYWxs
IGZhaWxzLgotICAgICAgICBwb3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKLSAgICAgICAgbmV3X3Bv
cnQgPSBzZWxmLm1ha2VfcG9ydCgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG5ld19wb3J0
LnN0YXJ0X2h0dHBfc2VydmVyKCkKLQotICAgICAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBmaXJz
dCBzZXJ2ZXIgd2FzIGtpbGxlZC4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5f
ZXhlY3V0aXZlLmNoZWNrX3J1bm5pbmdfcGlkKHBvcnQuX2h0dHBfc2VydmVyLl9waWQpKQotCi0g
ICAgICAgICAgICAjIENoZWNrIHRoYXQgdGhlcmUgaXMgc29tZXRoaW5nIHJ1bm5pbmcuCi0gICAg
ICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV91cCgnbG9jYWxob3N0Jywgc2VsZi5IVFRQ
X1BPUlRTKQotCi0gICAgICAgICAgICAjIFRlc3QgdGhhdCBjYWxsaW5nIHN0b3AoKSBvbiBhIGtp
bGxlZCBzZXJ2ZXIgaXMgaGFybWxlc3MuCi0gICAgICAgICAgICBwb3J0LnN0b3BfaHR0cF9zZXJ2
ZXIoKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgcG9ydC5zdG9wX2h0dHBfc2VydmVy
KCkKLSAgICAgICAgICAgIG5ld19wb3J0LnN0b3BfaHR0cF9zZXJ2ZXIoKQotCi0gICAgICAgICAg
ICAjIFRlc3QgdGhhdCBjYWxsaW5nIHN0b3AoKSB0d2ljZSBpcyBoYXJtbGVzcy4KLSAgICAgICAg
ICAgIG5ld19wb3J0LnN0b3BfaHR0cF9zZXJ2ZXIoKQotCi0gICAgZGVmIGludGVncmF0aW9uX3Rl
c3RfaW1hZ2VfZGlmZihzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKLSAg
ICAgICAgIyBGSVhNRTogVGhpcyB0ZXN0IHdpbGwgbmV2ZXIgcnVuIHNpbmNlIHdlIGFyZSB1c2lu
ZyBhIE1vY2tGaWxlc3lzdGVtIGZvciB0aGVzZSB0ZXN0cyE/IT8KLSAgICAgICAgaWYgbm90IHBv
cnQuY2hlY2tfaW1hZ2VfZGlmZigpOgotICAgICAgICAgICAgIyBUaGUgcG9ydCBoYXNuJ3QgYmVl
biBidWlsdCAtIGRvbid0IHJ1biB0aGUgdGVzdHMuCi0gICAgICAgICAgICByZXR1cm4KLQotICAg
ICAgICBkaXIgPSBwb3J0LmxheW91dF90ZXN0c19kaXIoKQotICAgICAgICBmaWxlMSA9IHBvcnQu
X2ZpbGVzeXN0ZW0uam9pbihkaXIsICdmYXN0JywgJ2NzcycsICdidXR0b25fY2VudGVyLnBuZycp
Ci0gICAgICAgIGNvbnRlbnRzMSA9IHBvcnQuX2ZpbGVzeXN0ZW0ucmVhZF9iaW5hcnlfZmlsZShm
aWxlMSkKLSAgICAgICAgZmlsZTIgPSBwb3J0Ll9maWxlc3lzdGVtLmpvaW4oZGlyLCAnZmFzdCcs
ICdjc3MnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVtb3ZlLXNo
b3J0aGFuZC1leHBlY3RlZC5wbmcnKQotICAgICAgICBjb250ZW50czIgPSBwb3J0Ll9maWxlc3lz
dGVtLnJlYWRfYmluYXJ5X2ZpbGUoZmlsZTIpCi0gICAgICAgIHRtcGZkLCB0bXBmaWxlID0gcG9y
dC5fZmlsZXN5c3RlbS5vcGVuX2JpbmFyeV90ZW1wZmlsZSgnJykKLSAgICAgICAgdG1wZmQuY2xv
c2UoKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5kaWZmX2ltYWdlKGNvbnRlbnRz
MSwgY29udGVudHMxKVswXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQuZGlmZl9pbWFn
ZShjb250ZW50czEsIGNvbnRlbnRzMilbMF0pCi0KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBv
cnQuZGlmZl9pbWFnZShjb250ZW50czEsIGNvbnRlbnRzMiwgdG1wZmlsZSlbMF0pCi0KLSAgICAg
ICAgcG9ydC5fZmlsZXN5c3RlbS5yZW1vdmUodG1wZmlsZSkKLQotICAgIGRlZiB0ZXN0X2RpZmZf
aW1hZ2VfX21pc3NpbmdfYm90aChzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0
KCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0LmRpZmZfaW1hZ2UoTm9uZSwgTm9uZSlb
MF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5kaWZmX2ltYWdlKE5vbmUsICcnKVsw
XSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0LmRpZmZfaW1hZ2UoJycsIE5vbmUpWzBd
KQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5kaWZmX2ltYWdlKCcnLCAnJylbMF0p
Ci0KLSAgICBkZWYgdGVzdF9kaWZmX2ltYWdlX19taXNzaW5nX2FjdHVhbChzZWxmKToKLSAgICAg
ICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQu
ZGlmZl9pbWFnZShOb25lLCAnZm9vJylbMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0
LmRpZmZfaW1hZ2UoJycsICdmb28nKVswXSkKLQotICAgIGRlZiB0ZXN0X2RpZmZfaW1hZ2VfX21p
c3NpbmdfZXhwZWN0ZWQoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0LmRpZmZfaW1hZ2UoJ2ZvbycsIE5vbmUpWzBdKQot
ICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5kaWZmX2ltYWdlKCdmb28nLCAnJylbMF0pCi0K
LSAgICBkZWYgdGVzdF9kaWZmX2ltYWdlKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtl
X3BvcnQoKQotICAgICAgICBzZWxmLnByb2MgPSBOb25lCi0KLSAgICAgICAgZGVmIG1ha2VfcHJv
Yyhwb3J0LCBubSwgY21kLCBlbnYpOgotICAgICAgICAgICAgc2VsZi5wcm9jID0gTW9ja1NlcnZl
clByb2Nlc3MocG9ydCwgbm0sIGNtZCwgZW52LCBsaW5lcz1bJ2RpZmY6IDEwMCUgZmFpbGVkXG4n
LCAnZGlmZjogMTAwJSBmYWlsZWRcbiddKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYucHJvYwot
Ci0gICAgICAgIHBvcnQuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gbWFrZV9wcm9jCi0g
ICAgICAgIHBvcnQuc2V0dXBfdGVzdF9ydW4oKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBv
cnQuZGlmZl9pbWFnZSgnZm9vJywgJ2JhcicpLCAoJycsIDEwMC4wLCBOb25lKSkKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2MuY21kWzE6M10sIFsiLS10b2xlcmFuY2UiLCAiMC4x
Il0pCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LmRpZmZfaW1hZ2UoJ2ZvbycsICdi
YXInLCBOb25lKSwgKCcnLCAxMDAuMCwgTm9uZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2VsZi5wcm9jLmNtZFsxOjNdLCBbIi0tdG9sZXJhbmNlIiwgIjAuMSJdKQotCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwocG9ydC5kaWZmX2ltYWdlKCdmb28nLCAnYmFyJywgMCksICgnJywgMTAw
LjAsIE5vbmUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvYy5jbWRbMTozXSwg
WyItLXRvbGVyYW5jZSIsICIwIl0pCi0KLSAgICAgICAgcG9ydC5jbGVhbl91cF90ZXN0X3J1bigp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnByb2Muc3RvcHBlZCkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChwb3J0Ll9pbWFnZV9kaWZmZXIsIE5vbmUpCi0KLSAgICBkZWYgdGVzdF9k
aWZmX2ltYWdlX2NyYXNoZWQoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgp
Ci0gICAgICAgIHNlbGYucHJvYyA9IE5vbmUKLQotICAgICAgICBkZWYgbWFrZV9wcm9jKHBvcnQs
IG5tLCBjbWQsIGVudik6Ci0gICAgICAgICAgICBzZWxmLnByb2MgPSBNb2NrU2VydmVyUHJvY2Vz
cyhwb3J0LCBubSwgY21kLCBlbnYsIGNyYXNoZWQ9VHJ1ZSkKLSAgICAgICAgICAgIHJldHVybiBz
ZWxmLnByb2MKLQotICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IG1h
a2VfcHJvYwotICAgICAgICBwb3J0LnNldHVwX3Rlc3RfcnVuKCkKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChwb3J0LmRpZmZfaW1hZ2UoJ2ZvbycsICdiYXInKSwgKCcnLCAwLCAnSW1hZ2VEaWZm
IGNyYXNoZWRcbicpKQotICAgICAgICBwb3J0LmNsZWFuX3VwX3Rlc3RfcnVuKCkKLQotICAgIGRl
ZiB0ZXN0X2NoZWNrX3dkaWZmKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQo
KQotICAgICAgICBwb3J0LmNoZWNrX3dkaWZmKCkKLQotICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0
X3dlYnNvY2tldF9zZXJ2ZXJfX25vcm1hbChzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFr
ZV9wb3J0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRfc2VydmVyc19hcmVfZG93bignbG9jYWxob3N0
Jywgc2VsZi5XRUJTT0NLRVRfUE9SVFMpCi0gICAgICAgIHBvcnQuc3RhcnRfd2Vic29ja2V0X3Nl
cnZlcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0X3NlcnZlcnNfYXJlX3VwKCdsb2NhbGhvc3QnLCBz
ZWxmLldFQlNPQ0tFVF9QT1JUUykKLSAgICAgICAgcG9ydC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIo
KQotICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV9kb3duKCdsb2NhbGhvc3QnLCBzZWxm
LldFQlNPQ0tFVF9QT1JUUykKLQotICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X3dlYnNvY2tldF9z
ZXJ2ZXJfX2ZhaWxzKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQotCi0g
ICAgICAgICMgVGVzdCB0aGF0IHN0YXJ0KCkgZmFpbHMgaWYgYSBwb3J0IGlzbid0IGF2YWlsYWJs
ZS4KLSAgICAgICAgZm9yIHBvcnRfbnVtYmVyIGluIHNlbGYuV0VCU09DS0VUX1BPUlRTOgotICAg
ICAgICAgICAgdGVzdF9zb2NrZXQgPSBzb2NrZXQuc29ja2V0KCkKLSAgICAgICAgICAgIHRyeToK
LSAgICAgICAgICAgICAgICB0ZXN0X3NvY2tldC5iaW5kKCgnbG9jYWxob3N0JywgcG9ydF9udW1i
ZXIpKQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcG9ydC5zdGFy
dF93ZWJzb2NrZXRfc2VydmVyKCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdzaG91
bGQgbm90IGhhdmUgYmVlbiBhYmxlIHRvIHN0YXJ0IHRoZSBzZXJ2ZXIgd2hpbGUgYm91bmQgdG8g
JWQnICUgcG9ydF9udW1iZXIpCi0gICAgICAgICAgICAgICAgZXhjZXB0IGh0dHBfc2VydmVyX2Jh
c2UuU2VydmVyRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAg
IGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgcG9ydC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIoKQot
ICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0LmNsb3NlKCkKLQotICAgICAgICAjIFRlc3QgdGhh
dCBjYWxsaW5nIHN0YXJ0KCkgdHdpY2UgZmFpbHMuCi0gICAgICAgIHRyeToKLSAgICAgICAgICAg
IHBvcnQuc3RhcnRfd2Vic29ja2V0X3NlcnZlcigpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJh
aXNlcyhBc3NlcnRpb25FcnJvciwgcG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVyKQotICAgICAg
ICBmaW5hbGx5OgotICAgICAgICAgICAgcG9ydC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIoKQotCi0g
ICAgZGVmIGludGVncmF0aW9uX3Rlc3Rfd2Vic29ja2V0X3NlcnZlcl9fdHdvX3NlcnZlcnMoc2Vs
Zik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCi0KLSAgICAgICAgIyBUZXN0IHRo
YXQgY2FsbGluZyBzdGFydCgpIG9uIHR3byBkaWZmZXJlbnQgcG9ydHMgY2F1c2VzIHRoZQotICAg
ICAgICAjIGZpcnN0IHBvcnQgdG8gYmUgdHJlYXRlZCBhcyBzdGFsZSBhbmQga2lsbGVkLgotICAg
ICAgICBwb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQotICAgICAgICBuZXdfcG9ydCA9IHNl
bGYubWFrZV9wb3J0KCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbmV3X3BvcnQuc3RhcnRf
d2Vic29ja2V0X3NlcnZlcigpCi0KLSAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgZmlyc3Qg
c2VydmVyIHdhcyBraWxsZWQuCi0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQuX2V4
ZWN1dGl2ZS5jaGVja19ydW5uaW5nX3BpZChwb3J0Ll93ZWJzb2NrZXRfc2VydmVyLl9waWQpKQot
Ci0gICAgICAgICAgICAjIENoZWNrIHRoYXQgdGhlcmUgaXMgc29tZXRoaW5nIHJ1bm5pbmcuCi0g
ICAgICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV91cCgnbG9jYWxob3N0Jywgc2VsZi5X
RUJTT0NLRVRfUE9SVFMpCi0KLSAgICAgICAgICAgICMgVGVzdCB0aGF0IGNhbGxpbmcgc3RvcCgp
IG9uIGEga2lsbGVkIHNlcnZlciBpcyBoYXJtbGVzcy4KLSAgICAgICAgICAgIHBvcnQuc3RvcF93
ZWJzb2NrZXRfc2VydmVyKCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHBvcnQuc3Rv
cF93ZWJzb2NrZXRfc2VydmVyKCkKLSAgICAgICAgICAgIG5ld19wb3J0LnN0b3Bfd2Vic29ja2V0
X3NlcnZlcigpCi0KLSAgICAgICAgICAgICMgVGVzdCB0aGF0IGNhbGxpbmcgc3RvcCgpIHR3aWNl
IGlzIGhhcm1sZXNzLgotICAgICAgICAgICAgbmV3X3BvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVy
KCkKLQotICAgIGRlZiB0ZXN0X3Rlc3RfY29uZmlndXJhdGlvbihzZWxmKToKLSAgICAgICAgcG9y
dCA9IHNlbGYubWFrZV9wb3J0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQudGVzdF9j
b25maWd1cmF0aW9uKCkpCi0KLSAgICBkZWYgdGVzdF9hbGxfdGVzdF9jb25maWd1cmF0aW9ucyhz
ZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKLSAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKGxlbihwb3J0LmFsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKCkpID4gMCkKLSAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKHBvcnQudGVzdF9jb25maWd1cmF0aW9uKCkgaW4gcG9ydC5hbGxfdGVz
dF9jb25maWd1cmF0aW9ucygpLCAiJXMgbm90IGluICVzIiAlIChwb3J0LnRlc3RfY29uZmlndXJh
dGlvbigpLCBwb3J0LmFsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKCkpKQotCi0gICAgZGVmIGludGVn
cmF0aW9uX3Rlc3RfaHR0cF9zZXJ2ZXJfX2xvb3Aoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxm
Lm1ha2VfcG9ydCgpCi0KLSAgICAgICAgaSA9IDAKLSAgICAgICAgd2hpbGUgaSA8IDEwOgotICAg
ICAgICAgICAgc2VsZi5hc3NlcnRfc2VydmVyc19hcmVfZG93bignbG9jYWxob3N0Jywgc2VsZi5I
VFRQX1BPUlRTKQotICAgICAgICAgICAgcG9ydC5zdGFydF9odHRwX3NlcnZlcigpCi0KLSAgICAg
ICAgICAgICMgV2Ugc2xlZXAgaW4gYmV0d2VlbiBhbHRlcm5hdGluZyBydW5zIHRvIGVuc3VyZSB0
aGF0IHRoaXMKLSAgICAgICAgICAgICMgdGVzdCBoYW5kbGVzIGJvdGggYmFjay10by1iYWNrIHN0
YXJ0cyBhbmQgc3RvcHMgYW5kCi0gICAgICAgICAgICAjIHN0YXJ0cyBhbmQgc3RvcHMgc2VwYXJh
dGVkIGJ5IGEgZGVsYXkuCi0gICAgICAgICAgICBpZiBpICUgMjoKLSAgICAgICAgICAgICAgICB0
aW1lLnNsZWVwKDAuMSkKLQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfc2VydmVyc19hcmVfdXAo
J2xvY2FsaG9zdCcsIHNlbGYuSFRUUF9QT1JUUykKLSAgICAgICAgICAgIHBvcnQuc3RvcF9odHRw
X3NlcnZlcigpCi0gICAgICAgICAgICBpZiBpICUgMjoKLSAgICAgICAgICAgICAgICB0aW1lLnNs
ZWVwKDAuMSkKLQotICAgICAgICAgICAgaSArPSAxCi0KLSAgICBkZWYgdGVzdF9nZXRfY3Jhc2hf
bG9nKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHBvcnQuX2dldF9jcmFzaF9sb2coTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwg
bmV3ZXJfdGhhbj1Ob25lKSwKLSAgICAgICAgICAgKE5vbmUsCi0gICAgICAgICAgICAnY3Jhc2gg
bG9nIGZvciA8dW5rbm93biBwcm9jZXNzIG5hbWU+IChwaWQgPHVua25vd24+KTpcbicKLSAgICAg
ICAgICAgICdTVERPVVQ6IDxlbXB0eT5cbicKLSAgICAgICAgICAgICdTVERFUlI6IDxlbXB0eT5c
bicpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5fZ2V0X2NyYXNoX2xvZygnZm9v
JywgMTIzNCwgJ291dCBiYXJcbm91dCBiYXonLCAnZXJyIGJhclxuZXJyIGJhelxuJywgbmV3ZXJf
dGhhbj1Ob25lKSwKLSAgICAgICAgICAgICgnZXJyIGJhclxuZXJyIGJhelxuJywKLSAgICAgICAg
ICAgICAnY3Jhc2ggbG9nIGZvciBmb28gKHBpZCAxMjM0KTpcbicKLSAgICAgICAgICAgICAnU1RE
T1VUOiBvdXQgYmFyXG4nCi0gICAgICAgICAgICAgJ1NURE9VVDogb3V0IGJhelxuJwotICAgICAg
ICAgICAgICdTVERFUlI6IGVyciBiYXJcbicKLSAgICAgICAgICAgICAnU1RERVJSOiBlcnIgYmF6
XG4nKSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuX2dldF9jcmFzaF9sb2coJ2Zv
bycsIDEyMzQsICdmb29ceGE2YmFyJywgJ2Zvb1x4YTZiYXInLCBuZXdlcl90aGFuPU5vbmUpLAot
ICAgICAgICAgICAgKCdmb29ceGE2YmFyJywKLSAgICAgICAgICAgICB1J2NyYXNoIGxvZyBmb3Ig
Zm9vIChwaWQgMTIzNCk6XG4nCi0gICAgICAgICAgICAgdSdTVERPVVQ6IGZvb1x1ZmZmZGJhclxu
JwotICAgICAgICAgICAgIHUnU1RERVJSOiBmb29cdWZmZmRiYXJcbicpKQotCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwocG9ydC5fZ2V0X2NyYXNoX2xvZygnZm9vJywgMTIzNCwgJ2Zvb1x4YTZi
YXInLCAnZm9vXHhhNmJhcicsIG5ld2VyX3RoYW49MS4wKSwKLSAgICAgICAgICAgICgnZm9vXHhh
NmJhcicsCi0gICAgICAgICAgICAgdSdjcmFzaCBsb2cgZm9yIGZvbyAocGlkIDEyMzQpOlxuJwot
ICAgICAgICAgICAgIHUnU1RET1VUOiBmb29cdWZmZmRiYXJcbicKLSAgICAgICAgICAgICB1J1NU
REVSUjogZm9vXHVmZmZkYmFyXG4nKSkKLQotICAgIGRlZiBhc3NlcnRfYnVpbGRfcGF0aChzZWxm
LCBvcHRpb25zLCBkaXJzLCBleHBlY3RlZF9wYXRoKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFr
ZV9wb3J0KG9wdGlvbnM9b3B0aW9ucykKLSAgICAgICAgZm9yIGRpcmVjdG9yeSBpbiBkaXJzOgot
ICAgICAgICAgICAgcG9ydC5ob3N0LmZpbGVzeXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3RvcnkoZGly
ZWN0b3J5KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuX2J1aWxkX3BhdGgoKSwgZXhw
ZWN0ZWRfcGF0aCkKLQotICAgIGRlZiB0ZXN0X2V4cGVjdGF0aW9uc19vcmRlcmluZyhzZWxmKToK
LSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKLSAgICAgICAgZm9yIHBhdGggaW4gcG9y
dC5leHBlY3RhdGlvbnNfZmlsZXMoKToKLSAgICAgICAgICAgIHBvcnQuX2ZpbGVzeXN0ZW0ud3Jp
dGVfdGV4dF9maWxlKHBhdGgsICcnKQotICAgICAgICBvcmRlcmVkX2RpY3QgPSBwb3J0LmV4cGVj
dGF0aW9uc19kaWN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LnBhdGhfdG9fZ2Vu
ZXJpY190ZXN0X2V4cGVjdGF0aW9uc19maWxlKCksIG9yZGVyZWRfZGljdC5rZXlzKClbMF0pCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5wYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25zX2Zp
bGUoKSwgb3JkZXJlZF9kaWN0LmtleXMoKVsxXSkKLQotICAgICAgICBvcHRpb25zID0gTW9ja09w
dGlvbnMoYWRkaXRpb25hbF9leHBlY3RhdGlvbnM9WycvdG1wL2ZvbycsICcvdG1wL2JhciddKQot
ICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQob3B0aW9ucz1vcHRpb25zKQotICAgICAgICBm
b3IgcGF0aCBpbiBwb3J0LmV4cGVjdGF0aW9uc19maWxlcygpOgotICAgICAgICAgICAgcG9ydC5f
ZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUocGF0aCwgJycpCi0gICAgICAgIHBvcnQuX2ZpbGVz
eXN0ZW0ud3JpdGVfdGV4dF9maWxlKCcvdG1wL2ZvbycsICdmb28nKQotICAgICAgICBwb3J0Ll9m
aWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZSgnL3RtcC9iYXInLCAnYmFyJykKLSAgICAgICAgb3Jk
ZXJlZF9kaWN0ID0gcG9ydC5leHBlY3RhdGlvbnNfZGljdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwob3JkZXJlZF9kaWN0LmtleXMoKVstMjpdLCBvcHRpb25zLmFkZGl0aW9uYWxfZXhwZWN0
YXRpb25zKSAgIyBweWxpbnQ6IGRpc2FibGU9RTExMDEKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChvcmRlcmVkX2RpY3QudmFsdWVzKClbLTI6XSwgWydmb28nLCAnYmFyJ10pCi0KLSAgICBkZWYg
dGVzdF9wYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoc2VsZik6Ci0gICAgICAgIHBvcnQg
PSBUZXN0V2ViS2l0UG9ydCgpCi0gICAgICAgIHBvcnQuX29wdGlvbnMgPSBNb2NrT3B0aW9ucyh3
ZWJraXRfdGVzdF9ydW5uZXI9RmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5w
YXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoKSwgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRl
c3RzL3BsYXRmb3JtL3Rlc3R3ZWJraXRwb3J0L1Rlc3RFeHBlY3RhdGlvbnMnKQotCi0gICAgICAg
IHBvcnQgPSBUZXN0V2ViS2l0UG9ydCgpCi0gICAgICAgIHBvcnQuX29wdGlvbnMgPSBNb2NrT3B0
aW9ucyh3ZWJraXRfdGVzdF9ydW5uZXI9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChw
b3J0LnBhdGhfdG9fdGVzdF9leHBlY3RhdGlvbnNfZmlsZSgpLCAnL21vY2stY2hlY2tvdXQvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vdGVzdHdlYmtpdHBvcnQvVGVzdEV4cGVjdGF0aW9ucycpCi0KLSAg
ICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkKLSAgICAgICAgcG9ydC5ob3N0LmZpbGVzeXN0
ZW0uZmlsZXNbJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3R3ZWJraXRw
b3J0L1Rlc3RFeHBlY3RhdGlvbnMnXSA9ICdzb21lIGNvbnRlbnQnCi0gICAgICAgIHBvcnQuX29w
dGlvbnMgPSBNb2NrT3B0aW9ucyh3ZWJraXRfdGVzdF9ydW5uZXI9RmFsc2UpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwocG9ydC5wYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoKSwgJy9t
b2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3R3ZWJraXRwb3J0L1Rlc3RFeHBl
Y3RhdGlvbnMnKQotCi0gICAgZGVmIHRlc3Rfc2tpcHBlZF9kaXJlY3Rvcmllc19mb3Jfc3ltYm9s
cyhzZWxmKToKLSAgICAgICAgIyBUaGlzIGZpcnN0IHRlc3QgY29uZmlybXMgdGhhdCB0aGUgY29t
bW9ubHkgZm91bmQgc3ltYm9scyByZXN1bHQgaW4gdGhlIGV4cGVjdGVkIHNraXBwZWQgZGlyZWN0
b3JpZXMuCi0gICAgICAgIHN5bWJvbHNfc3RyaW5nID0gIiAiLmpvaW4oWyJHcmFwaGljc0xheWVy
IiwgIldlYkNvcmVIYXMzRFJlbmRlcmluZyIsICJpc1hIVE1MTVBEb2N1bWVudCIsICJmb29TeW1i
b2wiXSkKLSAgICAgICAgZXhwZWN0ZWRfZGlyZWN0b3JpZXMgPSBzZXQoWwotICAgICAgICAgICAg
Im1hdGhtbCIsICAjIFJlcXVpcmVzIE1hdGhNTEVsZW1lbnQKLSAgICAgICAgICAgICJmYXN0L2Nh
bnZhcy93ZWJnbCIsICAjIFJlcXVpcmVzIFdlYkdMU2hhZGVyCi0gICAgICAgICAgICAiY29tcG9z
aXRpbmcvd2ViZ2wiLCAgIyBSZXF1aXJlcyBXZWJHTFNoYWRlcgotICAgICAgICAgICAgImh0dHAv
dGVzdHMvY2FudmFzL3dlYmdsIiwgICMgUmVxdWlyZXMgV2ViR0xTaGFkZXIKLSAgICAgICAgICAg
ICJ3ZWJnbCIsICAjIFJlcXVpcmVzIFdlYkdMU2hhZGVyCi0gICAgICAgICAgICAibWh0bWwiLCAg
IyBSZXF1aXJlcyBNSFRNTEFyY2hpdmUKLSAgICAgICAgICAgICJmYXN0L2Nzcy92YXJpYWJsZXMi
LCAgIyBSZXF1aXJlcyBDU1MgVmFyaWFibGVzCi0gICAgICAgICAgICAiaW5zcGVjdG9yL3N0eWxl
cy92YXJpYWJsZXMiLCAgIyBSZXF1aXJlcyBDU1MgVmFyaWFibGVzCi0gICAgICAgIF0pCi0KLSAg
ICAgICAgcmVzdWx0X2RpcmVjdG9yaWVzID0gc2V0KFRlc3RXZWJLaXRQb3J0KHN5bWJvbHNfc3Ry
aW5nPXN5bWJvbHNfc3RyaW5nKS5fc2tpcHBlZF90ZXN0c19mb3JfdW5zdXBwb3J0ZWRfZmVhdHVy
ZXModGVzdF9saXN0PVsnbWF0aG1sL2Zvby5odG1sJ10pKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHJlc3VsdF9kaXJlY3RvcmllcywgZXhwZWN0ZWRfZGlyZWN0b3JpZXMpCi0KLSAgICAgICAg
IyBUZXN0IHRoYXQgdGhlIG5tIHN0cmluZyBwYXJzaW5nIGFjdHVhbGx5IHdvcmtzOgotICAgICAg
ICBzeW1ib2xzX3N0cmluZyA9ICIiIgotMDAwMDAwMDAwMTI0ZjQ5OCBzIF9fWlpON1dlYkNvcmUx
M0dyYXBoaWNzTGF5ZXIxMnJlcGxhY2VDaGlsZEVQUzBfUzFfRTE5X19QUkVUVFlfRlVOQ1RJT05f
XwotMDAwMDAwMDAwMTI0ZjUwMCBzIF9fWlpON1dlYkNvcmUxM0dyYXBoaWNzTGF5ZXIxM2FkZENo
aWxkQWJvdmVFUFMwX1MxX0UxOV9fUFJFVFRZX0ZVTkNUSU9OX18KLTAwMDAwMDAwMDEyNGY2NzAg
cyBfX1paTjdXZWJDb3JlMTNHcmFwaGljc0xheWVyMTNhZGRDaGlsZEJlbG93RVBTMF9TMV9FMTlf
X1BSRVRUWV9GVU5DVElPTl9fCi0iIiIKLSAgICAgICAgIyBOb3RlICdjb21wb3NpdGluZycgaXMg
bm90IGluIHRoZSBsaXN0IG9mIHNraXBwZWQgZGlyZWN0b3JpZXMgKGhlbmNlIHRoZSBwYXJzaW5n
IG9mIEdyYXBoaWNzTGF5ZXIgd29ya2VkKToKLSAgICAgICAgZXhwZWN0ZWRfZGlyZWN0b3JpZXMg
PSBzZXQoWydtYXRobWwnLCAndHJhbnNmb3Jtcy8zZCcsICdjb21wb3NpdGluZy93ZWJnbCcsICdm
YXN0L2NhbnZhcy93ZWJnbCcsICdhbmltYXRpb25zLzNkJywgJ3dlYmdsJywgJ21odG1sJywgJ2h0
dHAvdGVzdHMvY2FudmFzL3dlYmdsJywgJ2Zhc3QvY3NzL3ZhcmlhYmxlcycsICdpbnNwZWN0b3Iv
c3R5bGVzL3ZhcmlhYmxlcyddKQotICAgICAgICByZXN1bHRfZGlyZWN0b3JpZXMgPSBzZXQoVGVz
dFdlYktpdFBvcnQoc3ltYm9sc19zdHJpbmc9c3ltYm9sc19zdHJpbmcpLl9za2lwcGVkX3Rlc3Rz
X2Zvcl91bnN1cHBvcnRlZF9mZWF0dXJlcyh0ZXN0X2xpc3Q9WydtYXRobWwvZm9vLmh0bWwnXSkp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0X2RpcmVjdG9yaWVzLCBleHBlY3RlZF9k
aXJlY3RvcmllcykKLQotICAgIGRlZiB0ZXN0X3NraXBwZWRfZGlyZWN0b3JpZXNfZm9yX2ZlYXR1
cmVzKHNlbGYpOgotICAgICAgICBzdXBwb3J0ZWRfZmVhdHVyZXMgPSBbIkFjY2VsZXJhdGVkIENv
bXBvc2l0aW5nIiwgIkZvbyBGZWF0dXJlIl0KLSAgICAgICAgZXhwZWN0ZWRfZGlyZWN0b3JpZXMg
PSBzZXQoWyJhbmltYXRpb25zLzNkIiwgInRyYW5zZm9ybXMvM2QiXSkKLSAgICAgICAgcG9ydCA9
IFRlc3RXZWJLaXRQb3J0KHN1cHBvcnRlZF9mZWF0dXJlcz1zdXBwb3J0ZWRfZmVhdHVyZXMpCi0g
ICAgICAgIHBvcnQuX3J1bnRpbWVfZmVhdHVyZV9saXN0ID0gbGFtYmRhOiBzdXBwb3J0ZWRfZmVh
dHVyZXMKLSAgICAgICAgcmVzdWx0X2RpcmVjdG9yaWVzID0gc2V0KHBvcnQuX3NraXBwZWRfdGVz
dHNfZm9yX3Vuc3VwcG9ydGVkX2ZlYXR1cmVzKHRlc3RfbGlzdD1bImFuaW1hdGlvbnMvM2QvZm9v
Lmh0bWwiXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0X2RpcmVjdG9yaWVzLCBl
eHBlY3RlZF9kaXJlY3RvcmllcykKLQotICAgIGRlZiB0ZXN0X3NraXBwZWRfZGlyZWN0b3JpZXNf
Zm9yX2ZlYXR1cmVzX25vX21hdGNoaW5nX3Rlc3RzX2luX3Rlc3RfbGlzdChzZWxmKToKLSAgICAg
ICAgc3VwcG9ydGVkX2ZlYXR1cmVzID0gWyJBY2NlbGVyYXRlZCBDb21wb3NpdGluZyIsICJGb28g
RmVhdHVyZSJdCi0gICAgICAgIGV4cGVjdGVkX2RpcmVjdG9yaWVzID0gc2V0KFtdKQotICAgICAg
ICByZXN1bHRfZGlyZWN0b3JpZXMgPSBzZXQoVGVzdFdlYktpdFBvcnQoc3VwcG9ydGVkX2ZlYXR1
cmVzPXN1cHBvcnRlZF9mZWF0dXJlcykuX3NraXBwZWRfdGVzdHNfZm9yX3Vuc3VwcG9ydGVkX2Zl
YXR1cmVzKHRlc3RfbGlzdD1bJ2Zvby5odG1sJ10pKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHJlc3VsdF9kaXJlY3RvcmllcywgZXhwZWN0ZWRfZGlyZWN0b3JpZXMpCi0KLSAgICBkZWYgdGVz
dF9za2lwcGVkX3Rlc3RzX2Zvcl91bnN1cHBvcnRlZF9mZWF0dXJlc19lbXB0eV90ZXN0X2xpc3Qo
c2VsZik6Ci0gICAgICAgIHN1cHBvcnRlZF9mZWF0dXJlcyA9IFsiQWNjZWxlcmF0ZWQgQ29tcG9z
aXRpbmciLCAiRm9vIEZlYXR1cmUiXQotICAgICAgICBleHBlY3RlZF9kaXJlY3RvcmllcyA9IHNl
dChbXSkKLSAgICAgICAgcmVzdWx0X2RpcmVjdG9yaWVzID0gc2V0KFRlc3RXZWJLaXRQb3J0KHN1
cHBvcnRlZF9mZWF0dXJlcz1zdXBwb3J0ZWRfZmVhdHVyZXMpLl9za2lwcGVkX3Rlc3RzX2Zvcl91
bnN1cHBvcnRlZF9mZWF0dXJlcyh0ZXN0X2xpc3Q9Tm9uZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwocmVzdWx0X2RpcmVjdG9yaWVzLCBleHBlY3RlZF9kaXJlY3RvcmllcykKLQotICAgIGRl
ZiB0ZXN0X3NraXBwZWRfbGF5b3V0X3Rlc3RzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKFRlc3RXZWJLaXRQb3J0KCkuc2tpcHBlZF9sYXlvdXRfdGVzdHModGVzdF9saXN0PVtdKSwg
c2V0KFsnbWVkaWEnXSkpCi0KLSAgICBkZWYgdGVzdF9leHBlY3RhdGlvbnNfZmlsZXMoc2VsZik6
Ci0gICAgICAgIHBvcnQgPSBUZXN0V2ViS2l0UG9ydCgpCi0KLSAgICAgICAgZGVmIHBsYXRmb3Jt
X2RpcnMocG9ydCk6Ci0gICAgICAgICAgICByZXR1cm4gW3BvcnQuaG9zdC5maWxlc3lzdGVtLmJh
c2VuYW1lKHBvcnQuaG9zdC5maWxlc3lzdGVtLmRpcm5hbWUoZikpIGZvciBmIGluIHBvcnQuZXhw
ZWN0YXRpb25zX2ZpbGVzKCldCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGF0Zm9ybV9k
aXJzKHBvcnQpLCBbJ0xheW91dFRlc3RzJywgJ3Rlc3R3ZWJraXRwb3J0J10pCi0KLSAgICAgICAg
cG9ydCA9IFRlc3RXZWJLaXRQb3J0KHBvcnRfbmFtZT0idGVzdHdlYmtpdHBvcnQtdmVyc2lvbiIp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxhdGZvcm1fZGlycyhwb3J0KSwgWydMYXlvdXRU
ZXN0cycsICd0ZXN0d2Via2l0cG9ydCcsICd0ZXN0d2Via2l0cG9ydC12ZXJzaW9uJ10pCi0KLSAg
ICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KHBvcnRfbmFtZT0idGVzdHdlYmtpdHBvcnQtdmVy
c2lvbi13azIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsYXRmb3JtX2RpcnMocG9ydCks
IFsnTGF5b3V0VGVzdHMnLCAndGVzdHdlYmtpdHBvcnQnLCAndGVzdHdlYmtpdHBvcnQtdmVyc2lv
bicsICd3azInLCAndGVzdHdlYmtpdHBvcnQtd2syJ10pCi0KLSAgICAgICAgcG9ydCA9IFRlc3RX
ZWJLaXRQb3J0KHBvcnRfbmFtZT0idGVzdHdlYmtpdHBvcnQtdmVyc2lvbiIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcHRpb25zPU1vY2tPcHRpb25zKGFkZGl0aW9uYWxfcGxhdGZv
cm1fZGlyZWN0b3J5PVsiaW50ZXJuYWwtdGVzdHdlYmtpdHBvcnQiXSkpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwocGxhdGZvcm1fZGlycyhwb3J0KSwgWydMYXlvdXRUZXN0cycsICd0ZXN0d2Vi
a2l0cG9ydCcsICd0ZXN0d2Via2l0cG9ydC12ZXJzaW9uJywgJ2ludGVybmFsLXRlc3R3ZWJraXRw
b3J0J10pCi0KLSAgICBkZWYgdGVzdF9yb290X29wdGlvbihzZWxmKToKLSAgICAgICAgcG9ydCA9
IFRlc3RXZWJLaXRQb3J0KCkKLSAgICAgICAgcG9ydC5fb3B0aW9ucyA9IE1vY2tPcHRpb25zKHJv
b3Q9Jy9mb28nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuX3BhdGhfdG9fZHJpdmVy
KCksICIvZm9vL0R1bXBSZW5kZXJUcmVlIikKLQotICAgIGRlZiB0ZXN0X3Rlc3RfZXhwZWN0YXRp
b25zKHNlbGYpOgotICAgICAgICAjIENoZWNrIHRoYXQgd2UgcmVhZCB0aGUgZXhwZWN0YXRpb25z
IGZpbGUKLSAgICAgICAgaG9zdCA9IE1vY2tTeXN0ZW1Ib3N0KCkKLSAgICAgICAgaG9zdC5maWxl
c3lzdGVtLndyaXRlX3RleHRfZmlsZSgnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vdGVzdHdlYmtpdHBvcnQvVGVzdEV4cGVjdGF0aW9ucycsCi0gICAgICAgICAgICAnQlVHX1RF
U1RFWFBFQ1RBVElPTlMgU0tJUCA6IGZhc3QvaHRtbC9hcnRpY2xlLWVsZW1lbnQuaHRtbCA9IEZB
SUxcbicpCi0gICAgICAgIHBvcnQgPSBUZXN0V2ViS2l0UG9ydChob3N0PWhvc3QpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJycuam9pbihwb3J0LmV4cGVjdGF0aW9uc19kaWN0KCkudmFsdWVz
KCkpLCAnQlVHX1RFU1RFWFBFQ1RBVElPTlMgU0tJUCA6IGZhc3QvaHRtbC9hcnRpY2xlLWVsZW1l
bnQuaHRtbCA9IEZBSUxcbicpCi0KLSAgICBkZWYgdGVzdF9idWlsZF9kcml2ZXIoc2VsZik6Ci0g
ICAgICAgIG91dHB1dCA9IE91dHB1dENhcHR1cmUoKQotICAgICAgICBwb3J0ID0gVGVzdFdlYktp
dFBvcnQoKQotICAgICAgICAjIERlbGF5IHNldHRpbmcgX2V4ZWN1dGl2ZSB0byBhdm9pZCBsb2dn
aW5nIGR1cmluZyBjb25zdHJ1Y3Rpb24KLSAgICAgICAgcG9ydC5fZXhlY3V0aXZlID0gTW9ja0V4
ZWN1dGl2ZShzaG91bGRfbG9nPVRydWUpCi0gICAgICAgIHBvcnQuX29wdGlvbnMgPSBNb2NrT3B0
aW9ucyhjb25maWd1cmF0aW9uPSJSZWxlYXNlIikgICMgVGhpcyBzaG91bGQgbm90IGJlIG5lY2Vz
c2FyeSwgYnV0IEkgdGhpbmsgVGVzdFdlYktpdFBvcnQgaXMgYWN0dWFsbHkgcmVhZGluZyBmcm9t
IGRpc2sgKGFuZCB0aHVzIGRldGVjdHMgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbikuCi0gICAg
ICAgIGV4cGVjdGVkX2xvZ3MgPSAiTU9DSyBydW5fY29tbWFuZDogWydUb29scy9TY3JpcHRzL2J1
aWxkLWR1bXByZW5kZXJ0cmVlJywgJy0tcmVsZWFzZSddLCBjd2Q9L21vY2stY2hlY2tvdXQsIGVu
dj17J0xDX0FMTCc6ICdDJywgJ01PQ0tfRU5WSVJPTl9DT1BZJzogJzEnfVxuIgotICAgICAgICBz
ZWxmLmFzc2VydFRydWUob3V0cHV0LmFzc2VydF9vdXRwdXRzKHNlbGYsIHBvcnQuX2J1aWxkX2Ry
aXZlciwgZXhwZWN0ZWRfbG9ncz1leHBlY3RlZF9sb2dzKSkKLQotICAgICAgICAjIE1ha2Ugc3Vy
ZSB3aGVuIHBhc3NlZCAtLXdlYmtpdC10ZXN0LXJ1bm5lciB3ZSBidWlsZCB0aGUgcmlnaHQgdG9v
bC4KLSAgICAgICAgcG9ydC5fb3B0aW9ucyA9IE1vY2tPcHRpb25zKHdlYmtpdF90ZXN0X3J1bm5l
cj1UcnVlLCBjb25maWd1cmF0aW9uPSJSZWxlYXNlIikKLSAgICAgICAgZXhwZWN0ZWRfbG9ncyA9
ICJNT0NLIHJ1bl9jb21tYW5kOiBbJ1Rvb2xzL1NjcmlwdHMvYnVpbGQtZHVtcHJlbmRlcnRyZWUn
LCAnLS1yZWxlYXNlJ10sIGN3ZD0vbW9jay1jaGVja291dCwgZW52PXsnTENfQUxMJzogJ0MnLCAn
TU9DS19FTlZJUk9OX0NPUFknOiAnMSd9XG5NT0NLIHJ1bl9jb21tYW5kOiBbJ1Rvb2xzL1Njcmlw
dHMvYnVpbGQtd2Via2l0dGVzdHJ1bm5lcicsICctLXJlbGVhc2UnXSwgY3dkPS9tb2NrLWNoZWNr
b3V0LCBlbnY9eydMQ19BTEwnOiAnQycsICdNT0NLX0VOVklST05fQ09QWSc6ICcxJ31cbiIKLSAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dHB1dC5hc3NlcnRfb3V0cHV0cyhzZWxmLCBwb3J0Ll9i
dWlsZF9kcml2ZXIsIGV4cGVjdGVkX2xvZ3M9ZXhwZWN0ZWRfbG9ncykpCi0KLSAgICAgICAgIyBN
YWtlIHN1cmUgd2Ugc2hvdyB0aGUgYnVpbGQgbG9nIHdoZW4gLS12ZXJib3NlIGlzIHBhc3NlZCwg
d2hpY2ggd2Ugc2ltdWxhdGUgYnkgc2V0dGluZyB0aGUgbG9nZ2luZyBsZXZlbCB0byBERUJVRy4K
LSAgICAgICAgb3V0cHV0LnNldF9sb2dfbGV2ZWwobG9nZ2luZy5ERUJVRykKLSAgICAgICAgcG9y
dC5fb3B0aW9ucyA9IE1vY2tPcHRpb25zKGNvbmZpZ3VyYXRpb249IlJlbGVhc2UiKQotICAgICAg
ICBleHBlY3RlZF9sb2dzID0gIiIiTU9DSyBydW5fY29tbWFuZDogWydUb29scy9TY3JpcHRzL2J1
aWxkLWR1bXByZW5kZXJ0cmVlJywgJy0tcmVsZWFzZSddLCBjd2Q9L21vY2stY2hlY2tvdXQsIGVu
dj17J0xDX0FMTCc6ICdDJywgJ01PQ0tfRU5WSVJPTl9DT1BZJzogJzEnfQotT3V0cHV0IG9mIFsn
VG9vbHMvU2NyaXB0cy9idWlsZC1kdW1wcmVuZGVydHJlZScsICctLXJlbGVhc2UnXToKLU1PQ0sg
b3V0cHV0IG9mIGNoaWxkIHByb2Nlc3MKLSIiIgotICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0
cHV0LmFzc2VydF9vdXRwdXRzKHNlbGYsIHBvcnQuX2J1aWxkX2RyaXZlciwgZXhwZWN0ZWRfbG9n
cz1leHBlY3RlZF9sb2dzKSkKLSAgICAgICAgb3V0cHV0LnNldF9sb2dfbGV2ZWwobG9nZ2luZy5J
TkZPKQotCi0gICAgICAgICMgTWFrZSBzdXJlIHRoYXQgZmFpbHVyZSB0byBidWlsZCByZXR1cm5z
IEZhbHNlLgotICAgICAgICBwb3J0Ll9leGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlKHNob3VsZF9s
b2c9VHJ1ZSwgc2hvdWxkX3Rocm93PVRydWUpCi0gICAgICAgICMgQmVjYXVzZSBXSzIgY3VycmVu
dGx5IGhhcyB0byBidWlsZCBib3RoIHdlYmtpdHRlc3RydW5uZXIgYW5kIERSVCwgaWYgRFJUIGZh
aWxzLCB0aGF0J3MgdGhlIG9ubHkgb25lIGl0IHRyaWVzLgotICAgICAgICBleHBlY3RlZF9sb2dz
ID0gIiIiTU9DSyBydW5fY29tbWFuZDogWydUb29scy9TY3JpcHRzL2J1aWxkLWR1bXByZW5kZXJ0
cmVlJywgJy0tcmVsZWFzZSddLCBjd2Q9L21vY2stY2hlY2tvdXQsIGVudj17J0xDX0FMTCc6ICdD
JywgJ01PQ0tfRU5WSVJPTl9DT1BZJzogJzEnfQotTU9DSyBTY3JpcHRFcnJvcgotCi1NT0NLIG91
dHB1dCBvZiBjaGlsZCBwcm9jZXNzCi0iIiIKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdXRw
dXQuYXNzZXJ0X291dHB1dHMoc2VsZiwgcG9ydC5fYnVpbGRfZHJpdmVyLCBleHBlY3RlZF9sb2dz
PWV4cGVjdGVkX2xvZ3MpKQotCi0gICAgZGVmIF9hc3NlcnRfY29uZmlnX2ZpbGVfZm9yX3BsYXRm
b3JtKHNlbGYsIHBvcnQsIHBsYXRmb3JtLCBjb25maWdfZmlsZSk6Ci0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwocG9ydC5fYXBhY2hlX2NvbmZpZ19maWxlX25hbWVfZm9yX3BsYXRmb3JtKHBsYXRm
b3JtKSwgY29uZmlnX2ZpbGUpCi0KLSAgICBkZWYgdGVzdF9saW51eF9kaXN0cm9fZGV0ZWN0aW9u
KHNlbGYpOgotICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKHBvcnQuX2lzX3JlZGhhdF9iYXNlZCgpKQotICAgICAgICBzZWxmLmFzc2VydEZh
bHNlKHBvcnQuX2lzX2RlYmlhbl9iYXNlZCgpKQotCi0gICAgICAgIHBvcnQuX2ZpbGVzeXN0ZW0g
PSBNb2NrRmlsZVN5c3RlbSh7Jy9ldGMvcmVkaGF0LXJlbGVhc2UnOiAnJ30pCi0gICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShwb3J0Ll9pc19yZWRoYXRfYmFzZWQoKSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRGYWxzZShwb3J0Ll9pc19kZWJpYW5fYmFzZWQoKSkKLQotICAgICAgICBwb3J0Ll9maWxlc3lz
dGVtID0gTW9ja0ZpbGVTeXN0ZW0oeycvZXRjL2RlYmlhbl92ZXJzaW9uJzogJyd9KQotICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKHBvcnQuX2lzX3JlZGhhdF9iYXNlZCgpKQotICAgICAgICBzZWxm
LmFzc2VydFRydWUocG9ydC5faXNfZGViaWFuX2Jhc2VkKCkpCi0KLSAgICBkZWYgdGVzdF9hcGFj
aGVfY29uZmlnX2ZpbGVfbmFtZV9mb3JfcGxhdGZvcm0oc2VsZik6Ci0gICAgICAgIHBvcnQgPSBU
ZXN0V2ViS2l0UG9ydCgpCi0gICAgICAgIHNlbGYuX2Fzc2VydF9jb25maWdfZmlsZV9mb3JfcGxh
dGZvcm0ocG9ydCwgJ2N5Z3dpbicsICdjeWd3aW4taHR0cGQuY29uZicpCi0KLSAgICAgICAgc2Vs
Zi5fYXNzZXJ0X2NvbmZpZ19maWxlX2Zvcl9wbGF0Zm9ybShwb3J0LCAnbGludXgyJywgJ2FwYWNo
ZTItaHR0cGQuY29uZicpCi0gICAgICAgIHNlbGYuX2Fzc2VydF9jb25maWdfZmlsZV9mb3JfcGxh
dGZvcm0ocG9ydCwgJ2xpbnV4MycsICdhcGFjaGUyLWh0dHBkLmNvbmYnKQotCi0gICAgICAgIHBv
cnQuX2lzX3JlZGhhdF9iYXNlZCA9IGxhbWJkYTogVHJ1ZQotICAgICAgICBwb3J0Ll9hcGFjaGVf
dmVyc2lvbiA9IGxhbWJkYTogJzIuMicKLSAgICAgICAgc2VsZi5fYXNzZXJ0X2NvbmZpZ19maWxl
X2Zvcl9wbGF0Zm9ybShwb3J0LCAnbGludXgyJywgJ2ZlZG9yYS1odHRwZC0yLjIuY29uZicpCi0K
LSAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkKLSAgICAgICAgcG9ydC5faXNfZGViaWFu
X2Jhc2VkID0gbGFtYmRhOiBUcnVlCi0gICAgICAgIHNlbGYuX2Fzc2VydF9jb25maWdfZmlsZV9m
b3JfcGxhdGZvcm0ocG9ydCwgJ2xpbnV4MicsICdhcGFjaGUyLWRlYmlhbi1odHRwZC5jb25mJykK
LQotICAgICAgICBzZWxmLl9hc3NlcnRfY29uZmlnX2ZpbGVfZm9yX3BsYXRmb3JtKHBvcnQsICdt
YWMnLCAnYXBhY2hlMi1odHRwZC5jb25mJykKLSAgICAgICAgc2VsZi5fYXNzZXJ0X2NvbmZpZ19m
aWxlX2Zvcl9wbGF0Zm9ybShwb3J0LCAnd2luMzInLCAnYXBhY2hlMi1odHRwZC5jb25mJykgICMg
d2luMzIgaXNuJ3QgYSBzdXBwb3J0ZWQgc3lzLnBsYXRmb3JtLiAgQXBwbGVXaW4vV2luQ2Fpcm8v
V2luQ0UgcG9ydHMgYWxsIHVzZSBjeWd3aW4uCi0gICAgICAgIHNlbGYuX2Fzc2VydF9jb25maWdf
ZmlsZV9mb3JfcGxhdGZvcm0ocG9ydCwgJ2JhcmYnLCAnYXBhY2hlMi1odHRwZC5jb25mJykKLQot
ICAgIGRlZiB0ZXN0X3BhdGhfdG9fYXBhY2hlX2NvbmZpZ19maWxlKHNlbGYpOgotICAgICAgICBw
b3J0ID0gVGVzdFdlYktpdFBvcnQoKQotCi0gICAgICAgIHNhdmVkX2Vudmlyb24gPSBvcy5lbnZp
cm9uLmNvcHkoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy5lbnZpcm9uWydXRUJLSVRf
SFRUUF9TRVJWRVJfQ09ORl9QQVRIJ10gPSAnL3BhdGgvdG8vaHR0cGQuY29uZicKLSAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHBvcnQuX3BhdGhfdG9fYXBhY2hlX2NvbmZp
Z19maWxlKQotICAgICAgICAgICAgcG9ydC5fZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoJy9l
eGlzdGluZy9odHRwZC5jb25mJywgJ0hlbGxvLCB3b3JsZCEnKQotICAgICAgICAgICAgb3MuZW52
aXJvblsnV0VCS0lUX0hUVFBfU0VSVkVSX0NPTkZfUEFUSCddID0gJy9leGlzdGluZy9odHRwZC5j
b25mJwotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0Ll9wYXRoX3RvX2FwYWNoZV9j
b25maWdfZmlsZSgpLCAnL2V4aXN0aW5nL2h0dHBkLmNvbmYnKQotICAgICAgICBmaW5hbGx5Ogot
ICAgICAgICAgICAgb3MuZW52aXJvbiA9IHNhdmVkX2Vudmlyb24uY29weSgpCi0KLSAgICAgICAg
IyBNb2NrIG91dCBfYXBhY2hlX2NvbmZpZ19maWxlX25hbWVfZm9yX3BsYXRmb3JtIHRvIGlnbm9y
ZSB0aGUgcGFzc2VkIHN5cy5wbGF0Zm9ybSB2YWx1ZS4KLSAgICAgICAgcG9ydC5fYXBhY2hlX2Nv
bmZpZ19maWxlX25hbWVfZm9yX3BsYXRmb3JtID0gbGFtYmRhIHBsYXRmb3JtOiAnaHR0cGQuY29u
ZicKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0Ll9wYXRoX3RvX2FwYWNoZV9jb25maWdf
ZmlsZSgpLCAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvaHR0cC9jb25mL2h0dHBkLmNvbmYn
KQotCi0gICAgICAgICMgQ2hlY2sgdGhhdCBldmVuIGlmIHdlIG1vY2sgb3V0IF9hcGFjaGVfY29u
ZmlnX2ZpbGVfbmFtZSwgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHRha2VzIHByZWNlZGVuY2Uu
Ci0gICAgICAgIHNhdmVkX2Vudmlyb24gPSBvcy5lbnZpcm9uLmNvcHkoKQotICAgICAgICB0cnk6
Ci0gICAgICAgICAgICBvcy5lbnZpcm9uWydXRUJLSVRfSFRUUF9TRVJWRVJfQ09ORl9QQVRIJ10g
PSAnL2V4aXN0aW5nL2h0dHBkLmNvbmYnCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBv
cnQuX3BhdGhfdG9fYXBhY2hlX2NvbmZpZ19maWxlKCksICcvZXhpc3RpbmcvaHR0cGQuY29uZicp
Ci0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5lbnZpcm9uID0gc2F2ZWRfZW52aXJv
bi5jb3B5KCkKLQotICAgIGRlZiB0ZXN0X2NoZWNrX2J1aWxkKHNlbGYpOgotICAgICAgICBwb3J0
ID0gc2VsZi5tYWtlX3BvcnQob3B0aW9ucz1Nb2NrT3B0aW9ucyhidWlsZD1UcnVlKSkKLSAgICAg
ICAgc2VsZi5idWlsZF9jYWxsZWQgPSBGYWxzZQotCi0gICAgICAgIGRlZiBidWlsZF9kcml2ZXJf
Y2FsbGVkKCk6Ci0gICAgICAgICAgICBzZWxmLmJ1aWxkX2NhbGxlZCA9IFRydWUKLSAgICAgICAg
ICAgIHJldHVybiBUcnVlCi0KLSAgICAgICAgcG9ydC5fYnVpbGRfZHJpdmVyID0gYnVpbGRfZHJp
dmVyX2NhbGxlZAotICAgICAgICBwb3J0LmNoZWNrX2J1aWxkKEZhbHNlKQotICAgICAgICBzZWxm
LmFzc2VydFRydWUoc2VsZi5idWlsZF9jYWxsZWQpCi0KLSAgICAgICAgcG9ydCA9IHNlbGYubWFr
ZV9wb3J0KG9wdGlvbnM9TW9ja09wdGlvbnMocm9vdD0nL3RtcCcsIGJ1aWxkPVRydWUpKQotICAg
ICAgICBzZWxmLmJ1aWxkX2NhbGxlZCA9IEZhbHNlCi0gICAgICAgIHBvcnQuX2J1aWxkX2RyaXZl
ciA9IGJ1aWxkX2RyaXZlcl9jYWxsZWQKLSAgICAgICAgcG9ydC5jaGVja19idWlsZChGYWxzZSkK
LSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmJ1aWxkX2NhbGxlZCwgTm9uZSkKLQotICAg
ICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQob3B0aW9ucz1Nb2NrT3B0aW9ucyhidWlsZD1GYWxz
ZSkpCi0gICAgICAgIHNlbGYuYnVpbGRfY2FsbGVkID0gRmFsc2UKLSAgICAgICAgcG9ydC5fYnVp
bGRfZHJpdmVyID0gYnVpbGRfZHJpdmVyX2NhbGxlZAotICAgICAgICBwb3J0LmNoZWNrX2J1aWxk
KEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuYnVpbGRfY2FsbGVkLCBOb25l
KQotCi0gICAgZGVmIHRlc3RfYWRkaXRpb25hbF9wbGF0Zm9ybV9kaXJlY3Rvcnkoc2VsZik6Ci0g
ICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChvcHRpb25zPU1vY2tPcHRpb25zKGFkZGl0aW9u
YWxfcGxhdGZvcm1fZGlyZWN0b3J5PVsnL3RtcC9mb28nXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwocG9ydC5iYXNlbGluZV9zZWFyY2hfcGF0aCgpWzBdLCAnL3RtcC9mb28nKQpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9wdWxzZWF1ZGlvX3Nhbml0
aXplci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L3B1bHNlYXVkaW9fc2FuaXRpemVyLnB5CShyZXZpc2lvbiAxNDg0OTcpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3B1bHNlYXVkaW9fc2FuaXRpemVy
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDg1ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWd0aCAoQykgMjAxMiBJ
bnRlbCBDb3Jwb3JhdGlvbgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6
Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBHb29nbGUgbmFtZSBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MK
LWltcG9ydCBzdWJwcm9jZXNzCi0KLQotX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9f
KQotCi0KLSMgU2hhcmVkIGJ5IEdUSyBhbmQgRUZMIGZvciBwdWxzZWF1ZGlvIHNhbml0aXppbmcg
YmVmb3JlIHJ1bm5pbmcgdGVzdHMuCi1jbGFzcyBQdWxzZUF1ZGlvU2FuaXRpemVyOgotICAgIGRl
ZiB1bmxvYWRfcHVsc2VhdWRpb19tb2R1bGUoc2VsZik6Ci0gICAgICAgICMgVW5sb2FkIHB1bHNl
YXVkaW8ncyBtb2R1bGUtc3RyZWFtLXJlc3RvcmUsIHNpbmNlIGl0IHJlbWVtYmVycwotICAgICAg
ICAjIHZvbHVtZSBzZXR0aW5ncyBmcm9tIGRpZmZlcmVudCBydW5zLCBhbmQgY291bGQgYWZmZWN0
Ci0gICAgICAgICMgbXVsdGltZWRpYSB0ZXN0cyByZXN1bHRzCi0gICAgICAgIHNlbGYuX3BhX21v
ZHVsZV9pbmRleCA9IC0xCi0gICAgICAgIHdpdGggb3Blbihvcy5kZXZudWxsLCAndycpIGFzIGRl
dm51bGw6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcGFjdGxfcHJvY2VzcyA9
IHN1YnByb2Nlc3MuUG9wZW4oWyJwYWN0bCIsICJsaXN0IiwgInNob3J0IiwgIm1vZHVsZXMiXSwg
c3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPWRldm51bGwpCi0gICAgICAgICAgICAgICAg
cGFjdGxfcHJvY2Vzcy53YWl0KCkKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAg
ICAgICAgICAgICMgcGFjdGwgbWlnaHQgbm90IGJlIGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAg
ICBfbG9nLmRlYnVnKCdwYWN0bCBub3QgZm91bmQuIFBsZWFzZSBpbnN0YWxsIHB1bHNlYXVkaW8t
dXRpbHMgdG8gYXZvaWQgc29tZSBwb3RlbnRpYWwgbWVkaWEgdGVzdCBmYWlsdXJlcy4nKQotICAg
ICAgICAgICAgICAgIHJldHVybgotICAgICAgICBtb2R1bGVzX2xpc3QgPSBwYWN0bF9wcm9jZXNz
LmNvbW11bmljYXRlKClbMF0KLSAgICAgICAgZm9yIG1vZHVsZSBpbiBtb2R1bGVzX2xpc3Quc3Bs
aXRsaW5lcygpOgotICAgICAgICAgICAgaWYgbW9kdWxlLmZpbmQoIm1vZHVsZS1zdHJlYW0tcmVz
dG9yZSIpID49IDA6Ci0gICAgICAgICAgICAgICAgIyBTb21lIHB1bHNlYXVkaW8tdXRpbHMgdmVy
c2lvbnMgZG9uJ3QgcHJvdmlkZQotICAgICAgICAgICAgICAgICMgdGhlIGluZGV4LCBqdXN0IGFu
IGVtcHR5IHN0cmluZwotICAgICAgICAgICAgICAgIHNlbGYuX3BhX21vZHVsZV9pbmRleCA9IG1v
ZHVsZS5zcGxpdCgnXHQnKVswXSBvciAtMQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAg
ICAgICAgICAgICAgIyBTaW5jZSB0aGV5IGNvdWxkIHByb3ZpZGUgb3RoZXIgc3R1ZmYgKG5vdCBh
biBpbmRleAotICAgICAgICAgICAgICAgICAgICAjIG5vciBhbiBlbXB0eSBzdHJpbmcsIGxldCdz
IG1ha2Ugc3VyZSB0aGlzIGlzIGFuIGludC4KLSAgICAgICAgICAgICAgICAgICAgaWYgaW50KHNl
bGYuX3BhX21vZHVsZV9pbmRleCkgIT0gLTE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYWN0
bF9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihbInBhY3RsIiwgInVubG9hZC1tb2R1bGUiLCBz
ZWxmLl9wYV9tb2R1bGVfaW5kZXhdKQotICAgICAgICAgICAgICAgICAgICAgICAgcGFjdGxfcHJv
Y2Vzcy53YWl0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBhY3RsX3Byb2Nlc3MucmV0
dXJuY29kZSA9PSAwOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ1Vu
bG9hZGVkIG1vZHVsZS1zdHJlYW0tcmVzdG9yZSBzdWNjZXNzZnVsbHknKQotICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbG9nLmRlYnVn
KCdVbmxvYWRpbmcgbW9kdWxlLXN0cmVhbS1yZXN0b3JlIGZhaWxlZCcpCi0gICAgICAgICAgICAg
ICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIHBhY3RsIHNo
b3VsZCBoYXZlIHJldHVybmVkIGFuIGluZGV4IGlmIHRoZSBtb2R1bGUgaXMgZm91bmQKLSAgICAg
ICAgICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ1VuYWJsZSB0byBwYXJzZSBtb2R1bGUgaW5k
ZXguIFBsZWFzZSBjaGVjayBpZiB5b3VyIHB1bHNlYXVkaW8tdXRpbHMgdmVyc2lvbiBpcyB0b28g
b2xkLicpCi0gICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAgICBkZWYgcmVzdG9yZV9wdWxzZWF1
ZGlvX21vZHVsZShzZWxmKToKLSAgICAgICAgIyBJZiBwdWxzZWF1ZGlvJ3MgbW9kdWxlLXN0cmVh
bS1yZXN0b3JlIHdhcyBwcmV2aW91c2x5IHVubG9hZGVkLAotICAgICAgICAjIHJlc3RvcmUgaXQg
YmFjay4gV2Ugc2hvdWxkbid0IG5lZWQgZXh0cmEgY2hlY2tzIGhlcmUsIHNpbmNlIGFuCi0gICAg
ICAgICMgaW5kZXggIT0gLTEgaGVyZSBtZWFucyB3ZSBzdWNjZXNzZnVsbHkgdW5sb2FkZWQgaXQg
cHJldmlvdXNseS4KLSAgICAgICAgaWYgc2VsZi5fcGFfbW9kdWxlX2luZGV4ICE9IC0xOgotICAg
ICAgICAgICAgd2l0aCBvcGVuKG9zLmRldm51bGwsICd3JykgYXMgZGV2bnVsbDoKLSAgICAgICAg
ICAgICAgICBwYWN0bF9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihbInBhY3RsIiwgImxvYWQt
bW9kdWxlIiwgIm1vZHVsZS1zdHJlYW0tcmVzdG9yZSJdLCBzdGRvdXQ9ZGV2bnVsbCwgc3RkZXJy
PWRldm51bGwpCi0gICAgICAgICAgICAgICAgcGFjdGxfcHJvY2Vzcy53YWl0KCkKLSAgICAgICAg
ICAgICAgICBpZiBwYWN0bF9wcm9jZXNzLnJldHVybmNvZGUgPT0gMDoKLSAgICAgICAgICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygnUmVzdG9yZWQgbW9kdWxlLXN0cmVhbS1yZXN0b3JlIHN1Y2Nlc3Nm
dWxseScpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygnUmVzdG9yaW5nIG1vZHVsZS1zdHJlYW0tcmVzdG9yZSBmYWlsZWQnKQpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9wdWxzZWF1ZGlvX3Nhbml0aXpl
cl9tb2NrLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvcHVsc2VhdWRpb19zYW5pdGl6ZXJfbW9jay5weQkocmV2aXNpb24gMTQ4NDk3KQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9wdWxzZWF1ZGlvX3Nh
bml0aXplcl9tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDM1ICswLDAgQEAKLSMgQ29weXJp
Z3RoIChDKSAyMDEzIFphbiBEb2JlcnNlayA8emFuZG9iZXJzZWtAZ21haWwuY29tPgotIwotIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAg
ICAgKiBOZWl0aGVyIHRoZSBHb29nbGUgbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLQotY2xhc3MgUHVsc2VBdWRpb1Nhbml0aXplck1vY2s6Ci0gICAgZGVmIHVubG9hZF9w
dWxzZWF1ZGlvX21vZHVsZShzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHJlc3RvcmVf
cHVsc2VhdWRpb19tb2R1bGUoc2VsZik6Ci0gICAgICAgIHBhc3MKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcXQucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9xdC5weQkocmV2aXNpb24gMTQ4NDk3
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9xdC5weQkod29y
a2luZyBjb3B5KQpAQCAtMSwxOTIgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgR29vZ2xl
IG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJRdFdlYktpdCBpbXBs
ZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBpbnRlcmZhY2UuIiIiCi0KLWltcG9ydCBnbG9iCi1pbXBv
cnQgbG9nZ2luZwotaW1wb3J0IHJlCi1pbXBvcnQgc3lzCi1pbXBvcnQgb3MKLQotZnJvbSB3ZWJr
aXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCi1mcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5tb2RlbHMudGVzdF9jb25maWd1cmF0aW9uIGltcG9ydCBUZXN0Q29uZmlndXJhdGlv
bgotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5iYXNlIGltcG9ydCBQb3J0Ci1mcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0Lnh2ZmJkcml2ZXIgaW1wb3J0IFh2ZmJEcml2ZXIK
LQotX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQotCi0KLWNsYXNzIFF0UG9ydChQ
b3J0KToKLSAgICBBTExfVkVSU0lPTlMgPSBbJ2xpbnV4JywgJ3dpbicsICdtYWMnXQotICAgIHBv
cnRfbmFtZSA9ICJxdCIKLQotICAgIGRlZiBfd2syX3BvcnRfbmFtZShzZWxmKToKLSAgICAgICAg
cmV0dXJuICJxdC01LjAtd2syIgotCi0gICAgZGVmIF9wb3J0X2ZsYWdfZm9yX3NjcmlwdHMoc2Vs
Zik6Ci0gICAgICAgIHJldHVybiAiLS1xdCIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBk
ZXRlcm1pbmVfZnVsbF9wb3J0X25hbWUoY2xzLCBob3N0LCBvcHRpb25zLCBwb3J0X25hbWUpOgot
ICAgICAgICBpZiBwb3J0X25hbWUgYW5kIHBvcnRfbmFtZSAhPSBjbHMucG9ydF9uYW1lOgotICAg
ICAgICAgICAgcmV0dXJuIHBvcnRfbmFtZQotICAgICAgICByZXR1cm4gcG9ydF9uYW1lICsgJy0n
ICsgaG9zdC5wbGF0Zm9ybS5vc19uYW1lCi0KLSAgICAjIHN5c19wbGF0Zm9ybSBleGlzdHMgb25s
eSBmb3IgdW5pdCB0ZXN0aW5nLgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25h
bWUsICoqa3dhcmdzKToKLSAgICAgICAgc3VwZXIoUXRQb3J0LCBzZWxmKS5fX2luaXRfXyhob3N0
LCBwb3J0X25hbWUsICoqa3dhcmdzKQotCi0gICAgICAgICMgRklYTUU6IFRoaXMgd2lsbCBhbGxv
dyBQb3J0LmJhc2VsaW5lX3NlYXJjaF9wYXRoCi0gICAgICAgICMgdG8gZG8gdGhlIHJpZ2h0IHRo
aW5nLCBidXQgZG9lc24ndCBpbmNsdWRlIHN1cHBvcnQgZm9yIHF0LTQuOCBvciBxdC1hcm0gKHNl
ZW4gaW4gTGF5b3V0VGVzdHMvcGxhdGZvcm0pIHlldC4KLSAgICAgICAgc2VsZi5fb3BlcmF0aW5n
X3N5c3RlbSA9IHBvcnRfbmFtZS5yZXBsYWNlKCdxdC0nLCAnJykKLQotICAgICAgICAjIEZJWE1F
OiBXaHkgaXMgdGhpcyBiZWluZyBzZXQgYXQgYWxsPwotICAgICAgICBzZWxmLl92ZXJzaW9uID0g
c2VsZi5vcGVyYXRpbmdfc3lzdGVtKCkKLQotICAgIGRlZiBfZ2VuZXJhdGVfYWxsX3Rlc3RfY29u
ZmlndXJhdGlvbnMoc2VsZik6Ci0gICAgICAgIGNvbmZpZ3VyYXRpb25zID0gW10KLSAgICAgICAg
Zm9yIHZlcnNpb24gaW4gc2VsZi5BTExfVkVSU0lPTlM6Ci0gICAgICAgICAgICBmb3IgYnVpbGRf
dHlwZSBpbiBzZWxmLkFMTF9CVUlMRF9UWVBFUzoKLSAgICAgICAgICAgICAgICBjb25maWd1cmF0
aW9ucy5hcHBlbmQoVGVzdENvbmZpZ3VyYXRpb24odmVyc2lvbj12ZXJzaW9uLCBhcmNoaXRlY3R1
cmU9J3g4NicsIGJ1aWxkX3R5cGU9YnVpbGRfdHlwZSkpCi0gICAgICAgIHJldHVybiBjb25maWd1
cmF0aW9ucwotCi0gICAgZGVmIF9idWlsZF9kcml2ZXIoc2VsZik6Ci0gICAgICAgICMgVGhlIFF0
IHBvcnQgYnVpbGRzIERSVCBhcyBwYXJ0IG9mIHRoZSBtYWluIGJ1aWxkIHN0ZXAKLSAgICAgICAg
cmV0dXJuIFRydWUKLQotICAgIGRlZiBzdXBwb3J0c19wZXJfdGVzdF90aW1lb3V0KHNlbGYpOgot
ICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF9wYXRoX3RvX2RyaXZlcihzZWxmKToKLSAg
ICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ2Jpbi8lcycgJSBzZWxmLmRyaXZlcl9uYW1l
KCkpCi0KLSAgICBkZWYgX3BhdGhfdG9faW1hZ2VfZGlmZihzZWxmKToKLSAgICAgICAgcmV0dXJu
IHNlbGYuX2J1aWxkX3BhdGgoJ2Jpbi9JbWFnZURpZmYnKQotCi0gICAgZGVmIF9wYXRoX3RvX3dl
YmNvcmVfbGlicmFyeShzZWxmKToKLSAgICAgICAgaWYgc2VsZi5vcGVyYXRpbmdfc3lzdGVtKCkg
PT0gJ21hYyc6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnbGliL1F0V2Vi
S2l0V2lkZ2V0cy5mcmFtZXdvcmsvUXRXZWJLaXRXaWRnZXRzJykKLSAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCdsaWIvbGliUXQ1V2ViS2l0V2lkZ2V0
cy5zbycpCi0KLSAgICBkZWYgX21vZHVsZXNfdG9fc2VhcmNoX2Zvcl9zeW1ib2xzKHNlbGYpOgot
ICAgICAgICAjIFdlIHNlYXJjaCBpbiBldmVyeSBsaWJyYXJ5IHRvIGJlIHJlbGlhYmxlIGluIHRo
ZSBjYXNlIG9mIGJ1aWxkaW5nIHdpdGggQ09ORklHKz1mb3JjZV9zdGF0aWNfbGlic19hc19zaGFy
ZWQuCi0gICAgICAgIGlmIHNlbGYub3BlcmF0aW5nX3N5c3RlbSgpID09ICdtYWMnOgotICAgICAg
ICAgICAgZnJhbWV3b3JrcyA9IGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oc2VsZi5fYnVpbGRfcGF0
aCgnbGliJyksICcqLmZyYW1ld29yaycpKQotICAgICAgICAgICAgcmV0dXJuIFtvcy5wYXRoLmpv
aW4oZnJhbWV3b3JrLCBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoZnJhbWV3b3Jr
KSlbMF0pIGZvciBmcmFtZXdvcmsgaW4gZnJhbWV3b3Jrc10KLSAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgIHN1ZmZpeCA9ICdkbGwnIGlmIHNlbGYub3BlcmF0aW5nX3N5c3RlbSgpID09ICd3aW4n
IGVsc2UgJ3NvJwotICAgICAgICAgICAgcmV0dXJuIGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oc2Vs
Zi5fYnVpbGRfcGF0aCgnbGliJyksICdsaWIqLicgKyBzdWZmaXgpKQotCi0gICAgQG1lbW9pemVk
Ci0gICAgZGVmIHF0X3ZlcnNpb24oc2VsZik6Ci0gICAgICAgIHZlcnNpb24gPSAnJwotICAgICAg
ICB0cnk6Ci0gICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1h
bmQoWydxbWFrZScsICctdiddKS5zcGxpdCgnXG4nKToKLSAgICAgICAgICAgICAgICBtYXRjaCA9
IHJlLnNlYXJjaCgnUXRcc3ZlcnNpb25ccyg/UDx2ZXJzaW9uPlxkXC5cZCknLCBsaW5lKQotICAg
ICAgICAgICAgICAgIGlmIG1hdGNoOgotICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gbWF0
Y2guZ3JvdXAoJ3ZlcnNpb24nKQotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBl
eGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgIHZlcnNpb24gPSAnNC44JwotICAgICAgICByZXR1
cm4gdmVyc2lvbgotCi0gICAgZGVmIF9zZWFyY2hfcGF0aHMoc2VsZik6Ci0gICAgICAgICMgICAg
ICAgICAgICAgICAgIHF0LTUuMC1tYWMtd2syCi0gICAgICAgICMgICAgICAgICAgICAgICAgLwot
ICAgICAgICAjIHF0LTUuMC13azEgICAgcXQtNS4wLXdrMgotICAgICAgICAjICAgICAgICAgICAg
XC8KLSAgICAgICAgIyAgICAgICAgIHF0LTUuMAotICAgICAgICAjICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgIyAgICAocXQtbGludXh8cXQtbWFjfHF0LXdpbikKLSAgICAgICAgIyAgICAgICAg
ICAgICAgICB8Ci0gICAgICAgICMgICAgICAgICAgICAgICBxdAotICAgICAgICBzZWFyY2hfcGF0
aHMgPSBbXQotICAgICAgICB2ZXJzaW9uID0gc2VsZi5xdF92ZXJzaW9uKCkKLSAgICAgICAgaWYg
JzUuMCcgaW4gdmVyc2lvbjoKLSAgICAgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0
X3Rlc3RfcnVubmVyJyk6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5vcGVyYXRpbmdfc3lzdGVt
KCkgPT0gJ21hYyc6Ci0gICAgICAgICAgICAgICAgICAgIHNlYXJjaF9wYXRocy5hcHBlbmQoJ3F0
LTUuMC1tYWMtd2syJykKLSAgICAgICAgICAgICAgICBzZWFyY2hfcGF0aHMuYXBwZW5kKCdxdC01
LjAtd2syJykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VhcmNoX3BhdGhz
LmFwcGVuZCgncXQtNS4wLXdrMScpCi0gICAgICAgIHNlYXJjaF9wYXRocy5hcHBlbmQoJ3F0LTUu
MCcpCi0KLSAgICAgICAgc2VhcmNoX3BhdGhzLmFwcGVuZChzZWxmLnBvcnRfbmFtZSArICctJyAr
IHNlbGYub3BlcmF0aW5nX3N5c3RlbSgpKQotICAgICAgICBzZWFyY2hfcGF0aHMuYXBwZW5kKHNl
bGYucG9ydF9uYW1lKQotICAgICAgICByZXR1cm4gc2VhcmNoX3BhdGhzCi0KLSAgICBkZWYgZGVm
YXVsdF9iYXNlbGluZV9zZWFyY2hfcGF0aChzZWxmKToKLSAgICAgICAgcmV0dXJuIG1hcChzZWxm
Ll93ZWJraXRfYmFzZWxpbmVfcGF0aCwgc2VsZi5fc2VhcmNoX3BhdGhzKCkpCi0KLSAgICBkZWYg
X3BvcnRfc3BlY2lmaWNfZXhwZWN0YXRpb25zX2ZpbGVzKHNlbGYpOgotICAgICAgICBwYXRocyA9
IHNlbGYuX3NlYXJjaF9wYXRocygpCi0gICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0
X3Rlc3RfcnVubmVyJyk6Ci0gICAgICAgICAgICBwYXRocy5hcHBlbmQoJ3drMicpCi0KLSAgICAg
ICAgIyBleHBlY3RhdGlvbnNfZmlsZXMoKSB1c2VzIHRoZSBkaXJlY3RvcmllcyBsaXN0ZWQgaW4g
X3NlYXJjaF9wYXRocyByZXZlcnNlZC4KLSAgICAgICAgIyBlLmcuIHF0IC0+IHF0LWxpbnV4IC0+
IHF0LTUuMCAtPiBxdC01LjAtd2sxCi0gICAgICAgIHJldHVybiBsaXN0KHJldmVyc2VkKFtzZWxm
Ll9maWxlc3lzdGVtLmpvaW4oc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgocCksICdUZXN0RXhw
ZWN0YXRpb25zJykgZm9yIHAgaW4gcGF0aHNdKSkKLQotICAgIGRlZiBzZXR1cF9lbnZpcm9uX2Zv
cl9zZXJ2ZXIoc2VsZiwgc2VydmVyX25hbWU9Tm9uZSk6Ci0gICAgICAgIGNsZWFuX2VudiA9IHN1
cGVyKFF0UG9ydCwgc2VsZikuc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKHNlcnZlcl9uYW1lKQot
ICAgICAgICBjbGVhbl9lbnZbJ1FUV0VCS0lUX1BMVUdJTl9QQVRIJ10gPSBzZWxmLl9idWlsZF9w
YXRoKCdsaWIvcGx1Z2lucycpCi0gICAgICAgIHNlbGYuX2NvcHlfdmFsdWVfZnJvbV9lbnZpcm9u
X2lmX3NldChjbGVhbl9lbnYsICdRVF9EUlRfV0VCVklFV19NT0RFJykKLSAgICAgICAgc2VsZi5f
Y29weV92YWx1ZV9mcm9tX2Vudmlyb25faWZfc2V0KGNsZWFuX2VudiwgJ0RZTERfSU1BR0VfU1VG
RklYJykKLSAgICAgICAgc2VsZi5fY29weV92YWx1ZV9mcm9tX2Vudmlyb25faWZfc2V0KGNsZWFu
X2VudiwgJ1FUX1dFQktJVF9MT0cnKQotICAgICAgICBzZWxmLl9jb3B5X3ZhbHVlX2Zyb21fZW52
aXJvbl9pZl9zZXQoY2xlYW5fZW52LCAnRElTQUJMRV9OSV9XQVJOSU5HJykKLSAgICAgICAgc2Vs
Zi5fY29weV92YWx1ZV9mcm9tX2Vudmlyb25faWZfc2V0KGNsZWFuX2VudiwgJ1FUX1dFQktJVF9Q
QVVTRV9VSV9QUk9DRVNTJykKLSAgICAgICAgc2VsZi5fY29weV92YWx1ZV9mcm9tX2Vudmlyb25f
aWZfc2V0KGNsZWFuX2VudiwgJ1FUX1FQQV9QTEFURk9STV9QTFVHSU5fUEFUSCcpCi0gICAgICAg
IHNlbGYuX2NvcHlfdmFsdWVfZnJvbV9lbnZpcm9uX2lmX3NldChjbGVhbl9lbnYsICdRVF9XRUJL
SVRfRElTQUJMRV9VSVBST0NFU1NfRFVNUFBJWEVMUycpCi0gICAgICAgIHJldHVybiBjbGVhbl9l
bnYKLQotICAgICMgRklYTUU6IFdlIHNob3VsZCBmaW5kIGEgd2F5IHRvIHNoYXJlIHRoaXMgaW1w
bG1lbnRhdGlvbiB3aXRoIEd0aywKLSAgICAjIG9yIHRlYWNoIHJ1bi1sYXVuY2hlciBob3cgdG8g
Y2FsbCBydW4tc2FmYXJpIGFuZCBtb3ZlIHRoaXMgZG93biB0byBQb3J0LgotICAgIGRlZiBzaG93
X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYsIHJlc3VsdHNfZmlsZW5hbWUpOgotICAgICAgICBydW5f
bGF1bmNoZXJfYXJncyA9IFtdCi0gICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rl
c3RfcnVubmVyJyk6Ci0gICAgICAgICAgICBydW5fbGF1bmNoZXJfYXJncy5hcHBlbmQoJy0yJykK
LSAgICAgICAgcnVuX2xhdW5jaGVyX2FyZ3MuYXBwZW5kKCJmaWxlOi8vJXMiICUgcmVzdWx0c19m
aWxlbmFtZSkKLSAgICAgICAgc2VsZi5fcnVuX3NjcmlwdCgicnVuLWxhdW5jaGVyIiwgcnVuX2xh
dW5jaGVyX2FyZ3MpCi0KLSAgICBkZWYgb3BlcmF0aW5nX3N5c3RlbShzZWxmKToKLSAgICAgICAg
cmV0dXJuIHNlbGYuX29wZXJhdGluZ19zeXN0ZW0KLQotICAgIGRlZiBjaGVja19zeXNfZGVwcyhz
ZWxmLCBuZWVkc19odHRwKToKLSAgICAgICAgcmVzdWx0ID0gc3VwZXIoUXRQb3J0LCBzZWxmKS5j
aGVja19zeXNfZGVwcyhuZWVkc19odHRwKQotICAgICAgICBpZiBub3QgJ1dFQktJVF9URVNURk9O
VFMnIGluIG9zLmVudmlyb246Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCdcblRoZSBXRUJLSVRf
VEVTVEZPTlRTIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBkZWZpbmVkIG9yIG5vdCBzZXQg
cHJvcGVybHkuJykKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1lvdSBtdXN0IHNldCBpdCBiZWZv
cmUgcnVubmluZyB0aGUgdGVzdHMuJykKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1VzZSBnaXQg
dG8gZ3JhYiB0aGUgYWN0dWFsIGZvbnRzIGZyb20gaHR0cDovL2dpdG9yaW91cy5vcmcvcXR3ZWJr
aXQvdGVzdGZvbnRzJykKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4g
cmVzdWx0Ci0KLSAgICAjIFF0IHBvcnQgaXMgbm90IHJlYWR5IGZvciBwYXJhbGxlbCB0ZXN0aW5n
LCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NzMwIGZvciBk
ZXRhaWxzLgotICAgIGRlZiBkZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcyhzZWxmKToKLSAgICAgICAg
cmV0dXJuIDEKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
cXRfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9xdF91bml0dGVzdC5weQkocmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9xdF91bml0dGVzdC5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMjMgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSMgbWV0OgotIwotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCB1bml0dGVz
dDIgYXMgdW5pdHRlc3QKLWltcG9ydCBvcwotZnJvbSBjb3B5IGltcG9ydCBkZWVwY29weQotCi1m
cm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlX21vY2sgaW1wb3J0IE1vY2tFeGVj
dXRpdmUsIE1vY2tFeGVjdXRpdmUyCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0
Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LnN5c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9ja1N5c3RlbUhvc3QKLWZyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IHBvcnRfdGVzdGNhc2UKLWZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLnBvcnQucXQgaW1wb3J0IFF0UG9ydAotZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29s
IGltcG9ydCBNb2NrT3B0aW9ucwotCi0KLWNsYXNzIFF0UG9ydFRlc3QocG9ydF90ZXN0Y2FzZS5Q
b3J0VGVzdENhc2UpOgotICAgIHBvcnRfbmFtZSA9ICdxdC1tYWMnCi0gICAgcG9ydF9tYWtlciA9
IFF0UG9ydAotICAgIHNlYXJjaF9wYXRoc19jYXNlcyA9IFsKLSAgICAgICAgeydzZWFyY2hfcGF0
aHMnOlsncXQtNS4wLW1hYy13azInLCAncXQtNS4wLXdrMicsICdxdC01LjAnLCAncXQtbWFjJywg
J3F0J10sICdvc19uYW1lJzonbWFjJywgJ3VzZV93ZWJraXQyJzpUcnVlLCAncXRfdmVyc2lvbic6
JzUuMCd9LAotICAgICAgICB7J3NlYXJjaF9wYXRocyc6WydxdC01LjAtd2syJywgJ3F0LTUuMCcs
ICdxdC13aW4nLCAncXQnXSwgJ29zX25hbWUnOid3aW4nLCAndXNlX3dlYmtpdDInOlRydWUsICdx
dF92ZXJzaW9uJzonNS4wJ30sCi0gICAgICAgIHsnc2VhcmNoX3BhdGhzJzpbJ3F0LTUuMC13azIn
LCAncXQtNS4wJywgJ3F0LWxpbnV4JywgJ3F0J10sICdvc19uYW1lJzonbGludXgnLCAndXNlX3dl
YmtpdDInOlRydWUsICdxdF92ZXJzaW9uJzonNS4wJ30sCi0KLSAgICAgICAgeydzZWFyY2hfcGF0
aHMnOlsncXQtNS4wLXdrMScsICdxdC01LjAnLCAncXQtbWFjJywgJ3F0J10sICdvc19uYW1lJzon
bWFjJywgJ3VzZV93ZWJraXQyJzpGYWxzZSwgJ3F0X3ZlcnNpb24nOic1LjAnfSwKLSAgICAgICAg
eydzZWFyY2hfcGF0aHMnOlsncXQtNS4wLXdrMScsICdxdC01LjAnLCAncXQtd2luJywgJ3F0J10s
ICdvc19uYW1lJzond2luJywgJ3VzZV93ZWJraXQyJzpGYWxzZSwgJ3F0X3ZlcnNpb24nOic1LjAn
fSwKLSAgICAgICAgeydzZWFyY2hfcGF0aHMnOlsncXQtNS4wLXdrMScsICdxdC01LjAnLCAncXQt
bGludXgnLCAncXQnXSwgJ29zX25hbWUnOidsaW51eCcsICd1c2Vfd2Via2l0Mic6RmFsc2UsICdx
dF92ZXJzaW9uJzonNS4wJ30sCi0gICAgXQotCi0gICAgZGVmIF9hc3NlcnRfc2VhcmNoX3BhdGgo
c2VsZiwgc2VhcmNoX3BhdGhzLCBvc19uYW1lLCB1c2Vfd2Via2l0Mj1GYWxzZSwgcXRfdmVyc2lv
bj0nNS4wJyk6Ci0gICAgICAgICMgRklYTUU6IFBvcnQgY29uc3RydWN0b3JzIHNob3VsZCBub3Qg
InBhcnNlIiB0aGUgcG9ydCBuYW1lLCBidXQKLSAgICAgICAgIyByYXRoZXIgYmUgcGFzc2VkIGNv
bXBvbmVudHMgKGRpcmVjdGx5IG9yIHZpYSBzZXR0ZXJzKS4gIE9uY2UKLSAgICAgICAgIyB3ZSBm
aXggdGhhdCwgdGhpcyBtZXRob2Qgd2lsbCBuZWVkIGEgcmUtd3JpdGUuCi0gICAgICAgIGhvc3Qg
PSBNb2NrU3lzdGVtSG9zdChvc19uYW1lPW9zX25hbWUpCi0gICAgICAgIGhvc3QuZXhlY3V0aXZl
ID0gTW9ja0V4ZWN1dGl2ZTIoc2VsZi5fcXRfdmVyc2lvbihxdF92ZXJzaW9uKSkKLSAgICAgICAg
cG9ydF9uYW1lID0gJ3F0LScgKyBvc19uYW1lCi0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9y
dChob3N0PWhvc3QsIHF0X3ZlcnNpb249cXRfdmVyc2lvbiwgcG9ydF9uYW1lPXBvcnRfbmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9TW9ja09wdGlvbnMod2Via2l0
X3Rlc3RfcnVubmVyPXVzZV93ZWJraXQyLCBwbGF0Zm9ybT0ncXQnKSkKLSAgICAgICAgYWJzb2x1
dGVfc2VhcmNoX3BhdGhzID0gbWFwKHBvcnQuX3dlYmtpdF9iYXNlbGluZV9wYXRoLCBzZWFyY2hf
cGF0aHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5iYXNlbGluZV9zZWFyY2hfcGF0
aCgpLCBhYnNvbHV0ZV9zZWFyY2hfcGF0aHMpCi0KLSAgICBkZWYgX2Fzc2VydF9leHBlY3RhdGlv
bnNfZmlsZXMoc2VsZiwgc2VhcmNoX3BhdGhzLCBvc19uYW1lLCB1c2Vfd2Via2l0Mj1GYWxzZSwg
cXRfdmVyc2lvbj0nNS4wJyk6Ci0gICAgICAgICMgRklYTUU6IFBvcnQgY29uc3RydWN0b3JzIHNo
b3VsZCBub3QgInBhcnNlIiB0aGUgcG9ydCBuYW1lLCBidXQKLSAgICAgICAgIyByYXRoZXIgYmUg
cGFzc2VkIGNvbXBvbmVudHMgKGRpcmVjdGx5IG9yIHZpYSBzZXR0ZXJzKS4gIE9uY2UKLSAgICAg
ICAgIyB3ZSBmaXggdGhhdCwgdGhpcyBtZXRob2Qgd2lsbCBuZWVkIGEgcmUtd3JpdGUuCi0gICAg
ICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9zdChvc19uYW1lPW9zX25hbWUpCi0gICAgICAgIGhvc3Qu
ZXhlY3V0aXZlID0gTW9ja0V4ZWN1dGl2ZTIoc2VsZi5fcXRfdmVyc2lvbihxdF92ZXJzaW9uKSkK
LSAgICAgICAgcG9ydF9uYW1lID0gJ3F0LScgKyBvc19uYW1lCi0gICAgICAgIHBvcnQgPSBzZWxm
Lm1ha2VfcG9ydChob3N0PWhvc3QsIHF0X3ZlcnNpb249cXRfdmVyc2lvbiwgcG9ydF9uYW1lPXBv
cnRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9TW9ja09wdGlv
bnMod2Via2l0X3Rlc3RfcnVubmVyPXVzZV93ZWJraXQyLCBwbGF0Zm9ybT0ncXQnKSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LmV4cGVjdGF0aW9uc19maWxlcygpLCBzZWFyY2hfcGF0
aHMpCi0KLSAgICBkZWYgX3F0X3ZlcnNpb24oc2VsZiwgcXRfdmVyc2lvbik6Ci0gICAgICAgIGlm
IHF0X3ZlcnNpb24gaW4gJzUuMCc6Ci0gICAgICAgICAgICByZXR1cm4gJ1FNYWtlIHZlcnNpb24g
Mi4wMWFcblVzaW5nIFF0IHZlcnNpb24gNS4wLjAgaW4gL3Vzci9sb2NhbC9Ucm9sbHRlY2gvUXQt
NS4wLjAvbGliJwotCi0gICAgZGVmIHRlc3RfYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6Ci0g
ICAgICAgIGZvciBjYXNlIGluIHNlbGYuc2VhcmNoX3BhdGhzX2Nhc2VzOgotICAgICAgICAgICAg
c2VsZi5fYXNzZXJ0X3NlYXJjaF9wYXRoKCoqY2FzZSkKLQotICAgIGRlZiB0ZXN0X2V4cGVjdGF0
aW9uc19maWxlcyhzZWxmKToKLSAgICAgICAgZm9yIGNhc2UgaW4gc2VsZi5zZWFyY2hfcGF0aHNf
Y2FzZXM6Ci0gICAgICAgICAgICBleHBlY3RhdGlvbnNfY2FzZSA9IGRlZXBjb3B5KGNhc2UpCi0g
ICAgICAgICAgICBpZiBleHBlY3RhdGlvbnNfY2FzZVsndXNlX3dlYmtpdDInXToKLSAgICAgICAg
ICAgICAgICBleHBlY3RhdGlvbnNfY2FzZVsnc2VhcmNoX3BhdGhzJ10uYXBwZW5kKCJ3azIiKQot
ICAgICAgICAgICAgZXhwZWN0YXRpb25zX2Nhc2VbJ3NlYXJjaF9wYXRocyddLmFwcGVuZCgnJykK
LSAgICAgICAgICAgIGV4cGVjdGF0aW9uc19jYXNlWydzZWFyY2hfcGF0aHMnXS5yZXZlcnNlKCkK
LSAgICAgICAgICAgIGV4cGVjdGF0aW9uc19jYXNlWydzZWFyY2hfcGF0aHMnXSA9IG1hcChsYW1i
ZGEgcGF0aDogJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMnIGlm
IG5vdCBwYXRoIGVsc2UgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtLyVzL1Rl
c3RFeHBlY3RhdGlvbnMnICUgKHBhdGgpLCBleHBlY3RhdGlvbnNfY2FzZVsnc2VhcmNoX3BhdGhz
J10pCi0gICAgICAgICAgICBzZWxmLl9hc3NlcnRfZXhwZWN0YXRpb25zX2ZpbGVzKCoqZXhwZWN0
YXRpb25zX2Nhc2UpCi0KLSAgICBkZWYgdGVzdF9zaG93X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYp
OgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQotICAgICAgICBwb3J0Ll9leGVjdXRp
dmUgPSBNb2NrRXhlY3V0aXZlKHNob3VsZF9sb2c9VHJ1ZSkKLSAgICAgICAgZXhwZWN0ZWRfbG9n
cyA9ICJNT0NLIHJ1bl9jb21tYW5kOiBbJ1Rvb2xzL1NjcmlwdHMvcnVuLWxhdW5jaGVyJywgJy0t
cmVsZWFzZScsICctLXF0JywgJ2ZpbGU6Ly90ZXN0Lmh0bWwnXSwgY3dkPS9tb2NrLWNoZWNrb3V0
XG4iCi0gICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBwb3J0LnNo
b3dfcmVzdWx0c19odG1sX2ZpbGUsIFsidGVzdC5odG1sIl0sIGV4cGVjdGVkX2xvZ3M9ZXhwZWN0
ZWRfbG9ncykKLQotICAgIGRlZiB0ZXN0X3NldHVwX2Vudmlyb25fZm9yX3NlcnZlcihzZWxmKToK
LSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKLSAgICAgICAgZW52ID0gcG9ydC5zZXR1
cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIocG9ydC5kcml2ZXJfbmFtZSgpKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGVudlsnUVRXRUJLSVRfUExVR0lOX1BBVEgnXSwgJy9tb2NrLWJ1aWxkL2xpYi9w
bHVnaW5zJykKLQotICAgIGRlZiB0ZXN0X29wZXJhdGluZ19zeXN0ZW0oc2VsZik6Ci0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJ2xpbnV4Jywgc2VsZi5tYWtlX3BvcnQocG9ydF9uYW1lPSdxdC1s
aW51eCcsIG9zX25hbWU9J2xpbnV4Jykub3BlcmF0aW5nX3N5c3RlbSgpKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCdtYWMnLCBzZWxmLm1ha2VfcG9ydChvc19uYW1lPSdtYWMnKS5vcGVyYXRp
bmdfc3lzdGVtKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3dpbicsIHNlbGYubWFrZV9w
b3J0KHBvcnRfbmFtZT0ncXQtd2luJywgb3NfbmFtZT0nd2luJykub3BlcmF0aW5nX3N5c3RlbSgp
KQotCi0gICAgZGVmIHRlc3RfY2hlY2tfc3lzX2RlcHMoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBz
ZWxmLm1ha2VfcG9ydCgpCi0KLSAgICAgICAgIyBTdWNjZXNzCi0gICAgICAgIG9zLmVudmlyb25b
J1dFQktJVF9URVNURk9OVFMnXSA9ICcvdG1wL2ZvbycKLSAgICAgICAgcG9ydC5fZXhlY3V0aXZl
ID0gTW9ja0V4ZWN1dGl2ZTIoZXhpdF9jb2RlPTApCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShw
b3J0LmNoZWNrX3N5c19kZXBzKG5lZWRzX2h0dHA9RmFsc2UpKQotCi0gICAgICAgICMgRmFpbHVy
ZQotICAgICAgICBkZWwgb3MuZW52aXJvblsnV0VCS0lUX1RFU1RGT05UUyddCi0gICAgICAgIHBv
cnQuX2V4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUyKGV4aXRfY29kZT0xLAotICAgICAgICAgICAg
b3V0cHV0PSd0ZXN0aW5nIG91dHB1dCBmYWlsdXJlJykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZShwb3J0LmNoZWNrX3N5c19kZXBzKG5lZWRzX2h0dHA9RmFsc2UpKQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3NlcnZlcl9w
cm9jZXNzLnB5CShyZXZpc2lvbiAxNDg0OTcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDM3
OSArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlz
dHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBHb29nbGUgbmFtZSBub3IgdGhlIG5hbWVz
IG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0j
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIlBhY2thZ2UgdGhhdCBpbXBsZW1lbnRzIHRoZSBTZXJ2
ZXJQcm9jZXNzIHdyYXBwZXIgY2xhc3MiIiIKLQotaW1wb3J0IGVycm5vCi1pbXBvcnQgbG9nZ2lu
ZwotaW1wb3J0IHNpZ25hbAotaW1wb3J0IHN5cwotaW1wb3J0IHRpbWUKLQotIyBOb3RlIHRoYXQg
YWx0aG91Z2ggd2luMzIgcHl0aG9uIGRvZXMgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZgot
IyB0aGUgd2luMzIgc2VsZWN0IEFQSSwgaXQgb25seSB3b3JrcyBvbiBzb2NrZXRzLCBhbmQgbm90
IG9uIHRoZSBuYW1lZCBwaXBlcwotIyB1c2VkIGJ5IHN1YnByb2Nlc3MsIHNvIHdlIGhhdmUgdG8g
dXNlIHRoZSBuYXRpdmUgQVBJcyBkaXJlY3RseS4KLWlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzIn
OgotICAgIGltcG9ydCBtc3ZjcnQKLSAgICBpbXBvcnQgd2luMzJwaXBlCi0gICAgaW1wb3J0IHdp
bjMyZmlsZQotZWxzZToKLSAgICBpbXBvcnQgZmNudGwKLSAgICBpbXBvcnQgb3MKLSAgICBpbXBv
cnQgc2VsZWN0Ci0KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0
IFNjcmlwdEVycm9yCi0KLQotX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQotCi0K
LWNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKLSAgICAiIiJUaGlzIGNsYXNzIHByb3ZpZGVz
IGEgd3JhcHBlciBhcm91bmQgYSBzdWJwcm9jZXNzIHRoYXQKLSAgICBpbXBsZW1lbnRzIGEgc2lt
cGxlIHJlcXVlc3QvcmVzcG9uc2UgdXNhZ2UgbW9kZWwuIFRoZSBwcmltYXJ5IGJlbmVmaXQKLSAg
ICBpcyB0aGF0IHJlYWRpbmcgcmVzcG9uc2VzIHRha2VzIGEgZGVhZGxpbmUsIHNvIHRoYXQgd2Ug
ZG9uJ3QgZXZlciBibG9jawotICAgIGluZGVmaW5pdGVseS4gVGhlIGNsYXNzIGFsc28gaGFuZGxl
cyB0cmFuc3BhcmVudGx5IHJlc3RhcnRpbmcgcHJvY2Vzc2VzCi0gICAgYXMgbmVjZXNzYXJ5IHRv
IGtlZXAgaXNzdWluZyBjb21tYW5kcy4iIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0
X29iaiwgbmFtZSwgY21kLCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCB0cmVh
dF9ub19kYXRhX2FzX2NyYXNoPUZhbHNlKToKLSAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnRfb2Jq
Ci0gICAgICAgIHNlbGYuX25hbWUgPSBuYW1lICAjIFNob3VsZCBiZSB0aGUgY29tbWFuZCBuYW1l
IChlLmcuIER1bXBSZW5kZXJUcmVlLCBJbWFnZURpZmYpCi0gICAgICAgIHNlbGYuX2NtZCA9IGNt
ZAotICAgICAgICBzZWxmLl9lbnYgPSBlbnYKLSAgICAgICAgIyBTZXQgaWYgdGhlIHByb2Nlc3Mg
b3V0cHV0cyBub24tc3RhbmRhcmQgbmV3bGluZXMgbGlrZSAnXHJcbicgb3IgJ1xyJy4KLSAgICAg
ICAgIyBEb24ndCBzZXQgaWYgdGhlcmUgd2lsbCBiZSBiaW5hcnkgZGF0YSBvciB0aGUgZGF0YSBt
dXN0IGJlIEFTQ0lJIGVuY29kZWQuCi0gICAgICAgIHNlbGYuX3VuaXZlcnNhbF9uZXdsaW5lcyA9
IHVuaXZlcnNhbF9uZXdsaW5lcwotICAgICAgICBzZWxmLl90cmVhdF9ub19kYXRhX2FzX2NyYXNo
ID0gdHJlYXRfbm9fZGF0YV9hc19jcmFzaAotICAgICAgICBzZWxmLl9ob3N0ID0gc2VsZi5fcG9y
dC5ob3N0Ci0gICAgICAgIHNlbGYuX3BpZCA9IE5vbmUKLSAgICAgICAgc2VsZi5fcmVzZXQoKQot
Ci0gICAgICAgICMgU2VlIGNvbW1lbnQgaW4gaW1wb3J0cyBmb3Igd2h5IHdlIG5lZWQgdGhlIHdp
bjMyIEFQSXMgYW5kIGNhbid0IGp1c3QgdXNlIHNlbGVjdC4KLSAgICAgICAgIyBGSVhNRTogdGhl
cmUgc2hvdWxkIGJlIGEgd2F5IHRvIGdldCB3aW4zMiB2cy4gY3lnd2luIGZyb20gcGxhdGZvcm1p
bmZvLgotICAgICAgICBzZWxmLl91c2Vfd2luMzJfYXBpcyA9IHN5cy5wbGF0Zm9ybSA9PSAnd2lu
MzInCi0KLSAgICBkZWYgbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKLQot
ICAgIGRlZiBwaWQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9waWQKLQotICAgIGRlZiBf
cmVzZXQoc2VsZik6Ci0gICAgICAgIGlmIGdldGF0dHIoc2VsZiwgJ19wcm9jJywgTm9uZSk6Ci0g
ICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZGluOgotICAgICAgICAgICAgICAgIHNlbGYuX3By
b2Muc3RkaW4uY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4gPSBOb25l
Ci0gICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZG91dDoKLSAgICAgICAgICAgICAgICBzZWxm
Ll9wcm9jLnN0ZG91dC5jbG9zZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQg
PSBOb25lCi0gICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZGVycjoKLSAgICAgICAgICAgICAg
ICBzZWxmLl9wcm9jLnN0ZGVyci5jbG9zZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5z
dGRlcnIgPSBOb25lCi0KLSAgICAgICAgc2VsZi5fcHJvYyA9IE5vbmUKLSAgICAgICAgc2VsZi5f
b3V0cHV0ID0gc3RyKCkgICMgYnl0ZXNhcnJheSgpIG9uY2Ugd2UgcmVxdWlyZSBQeXRob24gMi42
Ci0gICAgICAgIHNlbGYuX2Vycm9yID0gc3RyKCkgICMgYnl0ZXNhcnJheSgpIG9uY2Ugd2UgcmVx
dWlyZSBQeXRob24gMi42Ci0gICAgICAgIHNlbGYuX2NyYXNoZWQgPSBGYWxzZQotICAgICAgICBz
ZWxmLnRpbWVkX291dCA9IEZhbHNlCi0KLSAgICBkZWYgcHJvY2Vzc19uYW1lKHNlbGYpOgotICAg
ICAgICByZXR1cm4gc2VsZi5fbmFtZQotCi0gICAgZGVmIF9zdGFydChzZWxmKToKLSAgICAgICAg
aWYgc2VsZi5fcHJvYzoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIiVzIGFscmVhZHkg
cnVubmluZyIgJSBzZWxmLl9uYW1lKQotICAgICAgICBzZWxmLl9yZXNldCgpCi0gICAgICAgICMg
Y2xvc2VfZmRzIGlzIGEgd29ya2Fyb3VuZCBmb3IgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1
ZTIzMjAKLSAgICAgICAgY2xvc2VfZmRzID0gbm90IHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfd2lu
KCkKLSAgICAgICAgc2VsZi5fcHJvYyA9IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnBvcGVuKHNlbGYu
X2NtZCwgc3RkaW49c2VsZi5faG9zdC5leGVjdXRpdmUuUElQRSwKLSAgICAgICAgICAgIHN0ZG91
dD1zZWxmLl9ob3N0LmV4ZWN1dGl2ZS5QSVBFLAotICAgICAgICAgICAgc3RkZXJyPXNlbGYuX2hv
c3QuZXhlY3V0aXZlLlBJUEUsCi0gICAgICAgICAgICBjbG9zZV9mZHM9Y2xvc2VfZmRzLAotICAg
ICAgICAgICAgZW52PXNlbGYuX2VudiwKLSAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1z
ZWxmLl91bml2ZXJzYWxfbmV3bGluZXMpCi0gICAgICAgIHNlbGYuX3BpZCA9IHNlbGYuX3Byb2Mu
cGlkCi0gICAgICAgIGZkID0gc2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkKLSAgICAgICAgaWYg
bm90IHNlbGYuX3VzZV93aW4zMl9hcGlzOgotICAgICAgICAgICAgZmwgPSBmY250bC5mY250bChm
ZCwgZmNudGwuRl9HRVRGTCkKLSAgICAgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NF
VEZMLCBmbCB8IG9zLk9fTk9OQkxPQ0spCi0gICAgICAgICAgICBmZCA9IHNlbGYuX3Byb2Muc3Rk
ZXJyLmZpbGVubygpCi0gICAgICAgICAgICBmbCA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dF
VEZMKQotICAgICAgICAgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkwsIGZsIHwgb3Mu
T19OT05CTE9DSykKLQotICAgIGRlZiBfaGFuZGxlX3Bvc3NpYmxlX2ludGVycnVwdChzZWxmKToK
LSAgICAgICAgIiIiVGhpcyByb3V0aW5lIGNoZWNrcyB0byBzZWUgaWYgdGhlIHByb2Nlc3MgY3Jh
c2hlZCBvciBleGl0ZWQKLSAgICAgICAgYmVjYXVzZSBvZiBhIGtleWJvYXJkIGludGVycnVwdCBh
bmQgcmFpc2VzIEtleWJvYXJkSW50ZXJydXB0Ci0gICAgICAgIGFjY29yZGluZ2x5LiIiIgotICAg
ICAgICAjIEZJWE1FOiBMaW51eCBhbmQgTWFjIHNldCB0aGUgcmV0dXJuY29kZSB0byAtc2lnbmFs
LlNJR0lOVCBpZiBhCi0gICAgICAgICMgc3VicHJvY2VzcyBpcyBraWxsZWQgd2l0aCBhIGN0cmxe
Qy4gIFByZXZpb3VzIGNvbW1lbnRzIGluIHRoaXMKLSAgICAgICAgIyByb3V0aW5lIHNhaWQgdGhh
dCBzdXBwb3NlZGx5IFdpbmRvd3MgcmV0dXJucyAweGMwMDAwMDFkLCBidXQgdGhhdCdzIG5vdCB3
aGF0Ci0gICAgICAgICMgLTEwNzM3NDE1MTAgZXZhbHVhdGVzIHRvLiBGaWd1cmUgb3V0IHdoYXQg
dGhlIHJpZ2h0IHZhbHVlIGlzCi0gICAgICAgICMgZm9yIHdpbjMyIGFuZCBjeWd3aW4gaGVyZSAu
Li4KLSAgICAgICAgaWYgc2VsZi5fcHJvYy5yZXR1cm5jb2RlIGluICgtMTA3Mzc0MTUxMCwgLXNp
Z25hbC5TSUdJTlQpOgotICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKLQotICAg
IGRlZiBwb2xsKHNlbGYpOgotICAgICAgICAiIiJDaGVjayB0byBzZWUgaWYgdGhlIHVuZGVybHlp
bmcgcHJvY2VzcyBpcyBydW5uaW5nOyByZXR1cm5zIE5vbmUKLSAgICAgICAgaWYgaXQgc3RpbGwg
aXMgKHdyYXBwZXIgYXJvdW5kIHN1YnByb2Nlc3MucG9sbCkuIiIiCi0gICAgICAgIGlmIHNlbGYu
X3Byb2M6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcHJvYy5wb2xsKCkKLSAgICAgICAgcmV0
dXJuIE5vbmUKLQotICAgIGRlZiB3cml0ZShzZWxmLCBieXRlcyk6Ci0gICAgICAgICIiIldyaXRl
IGEgcmVxdWVzdCB0byB0aGUgc3VicHJvY2Vzcy4gVGhlIHN1YnByb2Nlc3MgaXMgKHJlLSlzdGFy
dCgpJ2VkCi0gICAgICAgIGlmIGlzIG5vdCBhbHJlYWR5IHJ1bm5pbmcuIiIiCi0gICAgICAgIGlm
IG5vdCBzZWxmLl9wcm9jOgotICAgICAgICAgICAgc2VsZi5fc3RhcnQoKQotICAgICAgICB0cnk6
Ci0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLndyaXRlKGJ5dGVzKQotICAgICAgICBleGNl
cHQgSU9FcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuc3RvcCgwLjApCi0gICAgICAgICAgICAj
IHN0b3AoKSBjYWxscyBfcmVzZXQoKSwgc28gd2UgaGF2ZSB0byBzZXQgY3Jhc2hlZCB0byBUcnVl
IGFmdGVyIGNhbGxpbmcgc3RvcCgpLgotICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUK
LQotICAgIGRlZiBfcG9wX3N0ZG91dF9saW5lX2lmX3JlYWR5KHNlbGYpOgotICAgICAgICBpbmRl
eF9hZnRlcl9uZXdsaW5lID0gc2VsZi5fb3V0cHV0LmZpbmQoJ1xuJykgKyAxCi0gICAgICAgIGlm
IGluZGV4X2FmdGVyX25ld2xpbmUgPiAwOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BvcF9v
dXRwdXRfYnl0ZXMoaW5kZXhfYWZ0ZXJfbmV3bGluZSkKLSAgICAgICAgcmV0dXJuIE5vbmUKLQot
ICAgIGRlZiBfcG9wX3N0ZGVycl9saW5lX2lmX3JlYWR5KHNlbGYpOgotICAgICAgICBpbmRleF9h
ZnRlcl9uZXdsaW5lID0gc2VsZi5fZXJyb3IuZmluZCgnXG4nKSArIDEKLSAgICAgICAgaWYgaW5k
ZXhfYWZ0ZXJfbmV3bGluZSA+IDA6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9wX2Vycm9y
X2J5dGVzKGluZGV4X2FmdGVyX25ld2xpbmUpCi0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICBk
ZWYgcG9wX2FsbF9idWZmZXJlZF9zdGRlcnIoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9w
b3BfZXJyb3JfYnl0ZXMobGVuKHNlbGYuX2Vycm9yKSkKLQotICAgIGRlZiByZWFkX3N0ZG91dF9s
aW5lKHNlbGYsIGRlYWRsaW5lKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWQoZGVhZGxpbmUs
IHNlbGYuX3BvcF9zdGRvdXRfbGluZV9pZl9yZWFkeSkKLQotICAgIGRlZiByZWFkX3N0ZGVycl9s
aW5lKHNlbGYsIGRlYWRsaW5lKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWQoZGVhZGxpbmUs
IHNlbGYuX3BvcF9zdGRlcnJfbGluZV9pZl9yZWFkeSkKLQotICAgIGRlZiByZWFkX2VpdGhlcl9z
dGRvdXRfb3Jfc3RkZXJyX2xpbmUoc2VsZiwgZGVhZGxpbmUpOgotICAgICAgICBkZWYgcmV0cmll
dmVfYnl0ZXNfZnJvbV9idWZmZXJzKCk6Ci0gICAgICAgICAgICBzdGRvdXRfbGluZSA9IHNlbGYu
X3BvcF9zdGRvdXRfbGluZV9pZl9yZWFkeSgpCi0gICAgICAgICAgICBpZiBzdGRvdXRfbGluZToK
LSAgICAgICAgICAgICAgICByZXR1cm4gc3Rkb3V0X2xpbmUsIE5vbmUKLSAgICAgICAgICAgIHN0
ZGVycl9saW5lID0gc2VsZi5fcG9wX3N0ZGVycl9saW5lX2lmX3JlYWR5KCkKLSAgICAgICAgICAg
IGlmIHN0ZGVycl9saW5lOgotICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCBzdGRlcnJfbGlu
ZQotICAgICAgICAgICAgcmV0dXJuIE5vbmUgICMgSW5zdHJ1Y3RzIHRoZSBjYWxsZXIgdG8ga2Vl
cCB3YWl0aW5nLgotCi0gICAgICAgIHJldHVybl92YWx1ZSA9IHNlbGYuX3JlYWQoZGVhZGxpbmUs
IHJldHJpZXZlX2J5dGVzX2Zyb21fYnVmZmVycykKLSAgICAgICAgIyBGSVhNRTogVGhpcyBpcyBh
IGJpdCBvZiBhIGhhY2sgYXJvdW5kIHRoZSBmYWN0IHRoYXQgX3JlYWQgbm9ybWFsbHkgb25seSBy
ZXR1cm5zIG9uZSB2YWx1ZSwgYnV0IHRoaXMgY2FsbGVyIHdhbnRzIGl0IHRvIHJldHVybiB0d28u
Ci0gICAgICAgIGlmIHJldHVybl92YWx1ZSBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIE5v
bmUsIE5vbmUKLSAgICAgICAgcmV0dXJuIHJldHVybl92YWx1ZQotCi0gICAgZGVmIHJlYWRfc3Rk
b3V0KHNlbGYsIGRlYWRsaW5lLCBzaXplKToKLSAgICAgICAgaWYgc2l6ZSA8PSAwOgotICAgICAg
ICAgICAgcmFpc2UgVmFsdWVFcnJvcignU2VydmVyUHJvY2Vzcy5yZWFkKCkgY2FsbGVkIHdpdGgg
YSBub24tcG9zaXRpdmUgc2l6ZTogJWQgJyAlIHNpemUpCi0KLSAgICAgICAgZGVmIHJldHJpZXZl
X2J5dGVzX2Zyb21fc3Rkb3V0X2J1ZmZlcigpOgotICAgICAgICAgICAgaWYgbGVuKHNlbGYuX291
dHB1dCkgPj0gc2l6ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9wX291dHB1dF9i
eXRlcyhzaXplKQotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICByZXR1cm4gc2Vs
Zi5fcmVhZChkZWFkbGluZSwgcmV0cmlldmVfYnl0ZXNfZnJvbV9zdGRvdXRfYnVmZmVyKQotCi0g
ICAgZGVmIF9sb2coc2VsZiwgbWVzc2FnZSk6Ci0gICAgICAgICMgVGhpcyBpcyBhIGJpdCBvZiBh
IGhhY2ssIGJ1dCB3ZSBmaXJzdCBsb2cgYSBibGFuayBsaW5lIHRvIGF2b2lkCi0gICAgICAgICMg
bWVzc2luZyB1cCB0aGUgbWFzdGVyIHByb2Nlc3MncyBvdXRwdXQuCi0gICAgICAgIF9sb2cuaW5m
bygnJykKLSAgICAgICAgX2xvZy5pbmZvKG1lc3NhZ2UpCi0KLSAgICBkZWYgX2hhbmRsZV90aW1l
b3V0KHNlbGYpOgotICAgICAgICBzZWxmLnRpbWVkX291dCA9IFRydWUKLSAgICAgICAgc2VsZi5f
cG9ydC5zYW1wbGVfcHJvY2VzcyhzZWxmLl9uYW1lLCBzZWxmLl9wcm9jLnBpZCkKLQotICAgIGRl
ZiBfc3BsaXRfc3RyaW5nX2FmdGVyX2luZGV4KHNlbGYsIHN0cmluZywgaW5kZXgpOgotICAgICAg
ICByZXR1cm4gc3RyaW5nWzppbmRleF0sIHN0cmluZ1tpbmRleDpdCi0KLSAgICBkZWYgX3BvcF9v
dXRwdXRfYnl0ZXMoc2VsZiwgYnl0ZXNfY291bnQpOgotICAgICAgICBvdXRwdXQsIHNlbGYuX291
dHB1dCA9IHNlbGYuX3NwbGl0X3N0cmluZ19hZnRlcl9pbmRleChzZWxmLl9vdXRwdXQsIGJ5dGVz
X2NvdW50KQotICAgICAgICByZXR1cm4gb3V0cHV0Ci0KLSAgICBkZWYgX3BvcF9lcnJvcl9ieXRl
cyhzZWxmLCBieXRlc19jb3VudCk6Ci0gICAgICAgIG91dHB1dCwgc2VsZi5fZXJyb3IgPSBzZWxm
Ll9zcGxpdF9zdHJpbmdfYWZ0ZXJfaW5kZXgoc2VsZi5fZXJyb3IsIGJ5dGVzX2NvdW50KQotICAg
ICAgICByZXR1cm4gb3V0cHV0Ci0KLSAgICBkZWYgX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9i
dWZmZXJzX3VzaW5nX3NlbGVjdChzZWxmLCBkZWFkbGluZSwgc3RvcHBpbmc9RmFsc2UpOgotICAg
ICAgICBpZiBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZWQgb3Igc2VsZi5fcHJvYy5zdGRlcnIuY2xv
c2VkOgotICAgICAgICAgICAgIyBJZiB0aGUgcHJvY2VzcyBjcmFzaGVkIGFuZCBpcyB1c2luZyBG
SUZPcywgbGlrZSBDaHJvbWl1bSBBbmRyb2lkLCB0aGUKLSAgICAgICAgICAgICMgc3Rkb3V0IGFu
ZCBzdGRlcnIgcGlwZXMgd2lsbCBiZSBjbG9zZWQuCi0gICAgICAgICAgICByZXR1cm4KLQotICAg
ICAgICBvdXRfZmQgPSBzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8oKQotICAgICAgICBlcnJfZmQg
PSBzZWxmLl9wcm9jLnN0ZGVyci5maWxlbm8oKQotICAgICAgICBzZWxlY3RfZmRzID0gKG91dF9m
ZCwgZXJyX2ZkKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZWFkX2ZkcywgXywgXyA9IHNl
bGVjdC5zZWxlY3Qoc2VsZWN0X2ZkcywgW10sIHNlbGVjdF9mZHMsIG1heChkZWFkbGluZSAtIHRp
bWUudGltZSgpLCAwKSkKLSAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvciwgZToKLSAgICAgICAg
ICAgICMgV2UgY2FuIGlnbm9yZSBFSU5WQUwgc2luY2UgaXQncyBsaWtlbHkgdGhlIHByb2Nlc3Mg
anVzdCBjcmFzaGVkIGFuZCB3ZSdsbAotICAgICAgICAgICAgIyBmaWd1cmUgdGhhdCBvdXQgdGhl
IG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wIGluIF9yZWFkKCkuCi0gICAgICAgICAgICBpZiBl
LmFyZ3NbMF0gPT0gZXJybm8uRUlOVkFMOgotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAg
ICAgICAgcmFpc2UKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIE5vdGUgdGhhdCB3ZSBt
YXkgZ2V0IG5vIGRhdGEgZHVyaW5nIHJlYWQoKSBldmVuIHRob3VnaAotICAgICAgICAgICAgIyBz
ZWxlY3Qgc2F5cyB3ZSBnb3Qgc29tZXRoaW5nOyBzZWUgdGhlIHNlbGVjdCgpIG1hbiBwYWdlCi0g
ICAgICAgICAgICAjIG9uIGxpbnV4LiBJIGRvbid0IGtub3cgaWYgdGhpcyBoYXBwZW5zIG9uIE1h
YyBPUyBhbmQKLSAgICAgICAgICAgICMgb3RoZXIgVW5peGVuIGFzIHdlbGwsIGJ1dCB3ZSBkb24n
dCBib3RoZXIgc3BlY2lhbC1jYXNpbmcKLSAgICAgICAgICAgICMgTGludXggYmVjYXVzZSBpdCdz
IHJlbGF0aXZlbHkgaGFybWxlc3MgZWl0aGVyIHdheS4KLSAgICAgICAgICAgIGlmIG91dF9mZCBp
biByZWFkX2ZkczoKLSAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fcHJvYy5zdGRvdXQucmVh
ZCgpCi0gICAgICAgICAgICAgICAgaWYgbm90IGRhdGEgYW5kIG5vdCBzdG9wcGluZyBhbmQgKHNl
bGYuX3RyZWF0X25vX2RhdGFfYXNfY3Jhc2ggb3Igc2VsZi5fcHJvYy5wb2xsKCkpOgotICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQotICAgICAgICAgICAgICAgIHNlbGYu
X291dHB1dCArPSBkYXRhCi0KLSAgICAgICAgICAgIGlmIGVycl9mZCBpbiByZWFkX2ZkczoKLSAg
ICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fcHJvYy5zdGRlcnIucmVhZCgpCi0gICAgICAgICAg
ICAgICAgaWYgbm90IGRhdGEgYW5kIG5vdCBzdG9wcGluZyBhbmQgKHNlbGYuX3RyZWF0X25vX2Rh
dGFfYXNfY3Jhc2ggb3Igc2VsZi5fcHJvYy5wb2xsKCkpOgotICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9jcmFzaGVkID0gVHJ1ZQotICAgICAgICAgICAgICAgIHNlbGYuX2Vycm9yICs9IGRhdGEK
LSAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6Ci0gICAgICAgICAgICAjIFdlIGNhbiBpZ25vcmUg
dGhlIElPRXJyb3JzIGJlY2F1c2Ugd2Ugd2lsbCBkZXRlY3QgaWYgdGhlIHN1YnBvcmNlc3MgY3Jh
c2hlZAotICAgICAgICAgICAgIyB0aGUgbmV4dCB0aW1lIHRocm91Z2ggdGhlIGxvb3AgaW4gX3Jl
YWQoKQotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIF93YWl0X2Zvcl9kYXRhX2FuZF91cGRh
dGVfYnVmZmVyc191c2luZ193aW4zMl9hcGlzKHNlbGYsIGRlYWRsaW5lKToKLSAgICAgICAgIyBT
ZWUgaHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNDQwNTU0LW1vZHVsZS10by1h
bGxvdy1hc3luY2hyb25vdXMtc3VicHJvY2Vzcy11c2Utb24td2luLwotICAgICAgICAjIGFuZCBo
dHRwOi8vZG9jcy5hY3RpdmVzdGF0ZS5jb20vYWN0aXZlcHl0aG9uLzIuNi9weXdpbjMyL21vZHVs
ZXMuaHRtbAotICAgICAgICAjIGZvciBkb2N1bWVudGF0aW9uIG9uIGFsbCBvZiB0aGVzZSB3aW4z
Mi1zcGVjaWZpYyBtb2R1bGVzLgotICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQotICAgICAgICBv
dXRfZmggPSBtc3ZjcnQuZ2V0X29zZmhhbmRsZShzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8oKSkK
LSAgICAgICAgZXJyX2ZoID0gbXN2Y3J0LmdldF9vc2ZoYW5kbGUoc2VsZi5fcHJvYy5zdGRlcnIu
ZmlsZW5vKCkpCi0gICAgICAgIHdoaWxlIChzZWxmLl9wcm9jLnBvbGwoKSBpcyBOb25lKSBhbmQg
KG5vdyA8IGRlYWRsaW5lKToKLSAgICAgICAgICAgIG91dHB1dCA9IHNlbGYuX25vbl9ibG9ja2lu
Z19yZWFkX3dpbjMyKG91dF9maCkKLSAgICAgICAgICAgIGVycm9yID0gc2VsZi5fbm9uX2Jsb2Nr
aW5nX3JlYWRfd2luMzIoZXJyX2ZoKQotICAgICAgICAgICAgaWYgb3V0cHV0IG9yIGVycm9yOgot
ICAgICAgICAgICAgICAgIGlmIG91dHB1dDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3V0
cHV0ICs9IG91dHB1dAotICAgICAgICAgICAgICAgIGlmIGVycm9yOgotICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9lcnJvciArPSBlcnJvcgotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAg
ICAgICAgdGltZS5zbGVlcCgwLjAxKQotICAgICAgICAgICAgbm93ID0gdGltZS50aW1lKCkKLSAg
ICAgICAgcmV0dXJuCi0KLSAgICBkZWYgX25vbl9ibG9ja2luZ19yZWFkX3dpbjMyKHNlbGYsIGhh
bmRsZSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIF8sIGF2YWlsLCBfID0gd2luMzJwaXBl
LlBlZWtOYW1lZFBpcGUoaGFuZGxlLCAwKQotICAgICAgICAgICAgaWYgYXZhaWwgPiAwOgotICAg
ICAgICAgICAgICAgIF8sIGJ1ZiA9IHdpbjMyZmlsZS5SZWFkRmlsZShoYW5kbGUsIGF2YWlsLCBO
b25lKQotICAgICAgICAgICAgICAgIHJldHVybiBidWYKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlv
biwgZToKLSAgICAgICAgICAgIGlmIGVbMF0gbm90IGluICgxMDksIGVycm5vLkVTSFVURE9XTik6
ICAjIDEwOSA9PSB3aW4zMiBFUlJPUl9CUk9LRU5fUElQRQotICAgICAgICAgICAgICAgIHJhaXNl
Ci0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICBkZWYgaGFzX2NyYXNoZWQoc2VsZik6Ci0gICAg
ICAgIGlmIG5vdCBzZWxmLl9jcmFzaGVkIGFuZCBzZWxmLnBvbGwoKToKLSAgICAgICAgICAgIHNl
bGYuX2NyYXNoZWQgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLl9oYW5kbGVfcG9zc2libGVfaW50
ZXJydXB0KCkKLSAgICAgICAgcmV0dXJuIHNlbGYuX2NyYXNoZWQKLQotICAgICMgVGhpcyByZWFk
IGZ1bmN0aW9uIGlzIGEgYml0IG9kZGx5LWRlc2lnbmVkLCBhcyBpdCBwb2xscyBib3RoIHN0ZG91
dCBhbmQgc3RkZXJyLCB5ZXQKLSAgICAjIG9ubHkgcmVhZHMvcmV0dXJucyBmcm9tIG9uZSBvZiB0
aGVtIChidWZmZXJpbmcgYm90aCBpbiBsb2NhbCBzZWxmLl9vdXRwdXQvc2VsZi5fZXJyb3IpLgot
ICAgICMgSXQgbWlnaHQgYmUgY2xlYW5lciB0byBwYXNzIGluIHRoZSBmaWxlIGRlc2NyaXB0b3Ig
dG8gcG9sbCBpbnN0ZWFkLgotICAgIGRlZiBfcmVhZChzZWxmLCBkZWFkbGluZSwgZmV0Y2hfYnl0
ZXNfZnJvbV9idWZmZXJzX2NhbGxiYWNrKToKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAg
ICAgIGlmIHNlbGYuaGFzX2NyYXNoZWQoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQot
Ci0gICAgICAgICAgICBpZiB0aW1lLnRpbWUoKSA+IGRlYWRsaW5lOgotICAgICAgICAgICAgICAg
IHNlbGYuX2hhbmRsZV90aW1lb3V0KCkKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotCi0g
ICAgICAgICAgICBieXRlcyA9IGZldGNoX2J5dGVzX2Zyb21fYnVmZmVyc19jYWxsYmFjaygpCi0g
ICAgICAgICAgICBpZiBieXRlcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICByZXR1cm4g
Ynl0ZXMKLQotICAgICAgICAgICAgaWYgc2VsZi5fdXNlX3dpbjMyX2FwaXM6Ci0gICAgICAgICAg
ICAgICAgc2VsZi5fd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfd2luMzJf
YXBpcyhkZWFkbGluZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5f
d2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfc2VsZWN0KGRlYWRsaW5lKQot
Ci0gICAgZGVmIHN0YXJ0KHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5fcHJvYzoKLSAgICAg
ICAgICAgIHNlbGYuX3N0YXJ0KCkKLQotICAgIGRlZiBzdG9wKHNlbGYsIHRpbWVvdXRfc2Vjcz0z
LjApOgotICAgICAgICBpZiBub3Qgc2VsZi5fcHJvYzoKLSAgICAgICAgICAgIHJldHVybiAoTm9u
ZSwgTm9uZSkKLQotICAgICAgICAjIE9ubHkgYm90aGVyIHRvIGNoZWNrIGZvciBsZWFrcyBvciBz
dGRlcnIgaWYgdGhlIHByb2Nlc3MgaXMgc3RpbGwgcnVubmluZy4KLSAgICAgICAgaWYgc2VsZi5w
b2xsKCkgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX3BvcnQuY2hlY2tfZm9yX2xlYWtzKHNl
bGYubmFtZSgpLCBzZWxmLnBpZCgpKQotCi0gICAgICAgIG5vdyA9IHRpbWUudGltZSgpCi0gICAg
ICAgIGlmIHNlbGYuX3Byb2Muc3RkaW46Ci0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLmNs
b3NlKCkKLSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4gPSBOb25lCi0gICAgICAgIGtpbGxl
ZCA9IEZhbHNlCi0gICAgICAgIGlmIHRpbWVvdXRfc2VjczoKLSAgICAgICAgICAgIGRlYWRsaW5l
ID0gbm93ICsgdGltZW91dF9zZWNzCi0gICAgICAgICAgICB3aGlsZSBzZWxmLl9wcm9jLnBvbGwo
KSBpcyBOb25lIGFuZCB0aW1lLnRpbWUoKSA8IGRlYWRsaW5lOgotICAgICAgICAgICAgICAgIHRp
bWUuc2xlZXAoMC4wMSkKLSAgICAgICAgICAgIGlmIHNlbGYuX3Byb2MucG9sbCgpIGlzIE5vbmU6
Ci0gICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdzdG9wcGluZyAlcyhwaWQgJWQpIHRpbWVk
IG91dCwga2lsbGluZyBpdCcgJSAoc2VsZi5fbmFtZSwgc2VsZi5fcHJvYy5waWQpKQotCi0gICAg
ICAgIGlmIHNlbGYuX3Byb2MucG9sbCgpIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9raWxs
KCkKLSAgICAgICAgICAgIGtpbGxlZCA9IFRydWUKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJ2tp
bGxlZCBwaWQgJWQnICUgc2VsZi5fcHJvYy5waWQpCi0KLSAgICAgICAgIyByZWFkIGFueSByZW1h
aW5pbmcgZGF0YSBvbiB0aGUgcGlwZXMgYW5kIHJldHVybiBpdC4KLSAgICAgICAgaWYgbm90IGtp
bGxlZDoKLSAgICAgICAgICAgIGlmIHNlbGYuX3VzZV93aW4zMl9hcGlzOgotICAgICAgICAgICAg
ICAgIHNlbGYuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzX3VzaW5nX3dpbjMyX2Fw
aXMobm93KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl93YWl0X2Zv
cl9kYXRhX2FuZF91cGRhdGVfYnVmZmVyc191c2luZ19zZWxlY3Qobm93LCBzdG9wcGluZz1UcnVl
KQotICAgICAgICBvdXQsIGVyciA9IHNlbGYuX291dHB1dCwgc2VsZi5fZXJyb3IKLSAgICAgICAg
c2VsZi5fcmVzZXQoKQotICAgICAgICByZXR1cm4gKG91dCwgZXJyKQotCi0gICAgZGVmIGtpbGwo
c2VsZik6Ci0gICAgICAgIHNlbGYuc3RvcCgwLjApCi0KLSAgICBkZWYgX2tpbGwoc2VsZik6Ci0g
ICAgICAgIHNlbGYuX2hvc3QuZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyhzZWxmLl9wcm9jLnBpZCkK
LSAgICAgICAgaWYgc2VsZi5fcHJvYy5wb2xsKCkgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBz
ZWxmLl9wcm9jLndhaXQoKQotCi0gICAgZGVmIHJlcGxhY2Vfb3V0cHV0cyhzZWxmLCBzdGRvdXQs
IHN0ZGVycik6Ci0gICAgICAgIGFzc2VydCBzZWxmLl9wcm9jCi0gICAgICAgIGlmIHN0ZG91dDoK
LSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYu
X3Byb2Muc3Rkb3V0ID0gc3Rkb3V0Ci0gICAgICAgIGlmIHN0ZGVycjoKLSAgICAgICAgICAgIHNl
bGYuX3Byb2Muc3RkZXJyLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkZXJyID0g
c3RkZXJyCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Nl
cnZlcl9wcm9jZXNzX21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9zZXJ2ZXJfcHJvY2Vzc19tb2NrLnB5CShyZXZpc2lvbiAxNDg0
OTcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3NlcnZlcl9w
cm9jZXNzX21vY2sucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNzcgKzAsMCBAQAotIyBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLQotY2xhc3MgTW9ja1NlcnZlclByb2Nlc3Mob2JqZWN0KToKLSAgICBkZWYgX19pbml0
X18oc2VsZiwgcG9ydF9vYmo9Tm9uZSwgbmFtZT1Ob25lLCBjbWQ9Tm9uZSwgZW52PU5vbmUsIHVu
aXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgbGluZXM9Tm9uZSwgY3Jhc2hlZD1GYWxzZSk6Ci0gICAg
ICAgIHNlbGYudGltZWRfb3V0ID0gRmFsc2UKLSAgICAgICAgc2VsZi5saW5lcyA9IGxpbmVzIG9y
IFtdCi0gICAgICAgIHNlbGYuY3Jhc2hlZCA9IGNyYXNoZWQKLSAgICAgICAgc2VsZi53cml0ZXMg
PSBbXQotICAgICAgICBzZWxmLmNtZCA9IGNtZAotICAgICAgICBzZWxmLmVudiA9IGVudgotICAg
ICAgICBzZWxmLnN0YXJ0ZWQgPSBGYWxzZQotICAgICAgICBzZWxmLnN0b3BwZWQgPSBGYWxzZQot
Ci0gICAgZGVmIHdyaXRlKHNlbGYsIGJ5dGVzKToKLSAgICAgICAgc2VsZi53cml0ZXMuYXBwZW5k
KGJ5dGVzKQotCi0gICAgZGVmIGhhc19jcmFzaGVkKHNlbGYpOgotICAgICAgICByZXR1cm4gc2Vs
Zi5jcmFzaGVkCi0KLSAgICBkZWYgcmVhZF9zdGRvdXRfbGluZShzZWxmLCBkZWFkbGluZSk6Ci0g
ICAgICAgIHJldHVybiBzZWxmLmxpbmVzLnBvcCgwKSArICJcbiIKLQotICAgIGRlZiByZWFkX3N0
ZG91dChzZWxmLCBkZWFkbGluZSwgc2l6ZSk6Ci0gICAgICAgIGZpcnN0X2xpbmUgPSBzZWxmLmxp
bmVzWzBdCi0gICAgICAgIGlmIHNpemUgPiBsZW4oZmlyc3RfbGluZSk6Ci0gICAgICAgICAgICBz
ZWxmLmxpbmVzLnBvcCgwKQotICAgICAgICAgICAgcmVtYWluaW5nX3NpemUgPSBzaXplIC0gbGVu
KGZpcnN0X2xpbmUpIC0gMQotICAgICAgICAgICAgaWYgbm90IHJlbWFpbmluZ19zaXplOgotICAg
ICAgICAgICAgICAgIHJldHVybiBmaXJzdF9saW5lICsgIlxuIgotICAgICAgICAgICAgcmV0dXJu
IGZpcnN0X2xpbmUgKyAiXG4iICsgc2VsZi5yZWFkX3N0ZG91dChkZWFkbGluZSwgcmVtYWluaW5n
X3NpemUpCi0gICAgICAgIHJlc3VsdCA9IHNlbGYubGluZXNbMF1bOnNpemVdCi0gICAgICAgIHNl
bGYubGluZXNbMF0gPSBzZWxmLmxpbmVzWzBdW3NpemU6XQotICAgICAgICByZXR1cm4gcmVzdWx0
Ci0KLSAgICBkZWYgcG9wX2FsbF9idWZmZXJlZF9zdGRlcnIoc2VsZik6Ci0gICAgICAgIHJldHVy
biAnJwotCi0gICAgZGVmIHJlYWRfZWl0aGVyX3N0ZG91dF9vcl9zdGRlcnJfbGluZShzZWxmLCBk
ZWFkbGluZSk6Ci0gICAgICAgICMgRklYTUU6IFdlIHNob3VsZCBoYXZlIHRlc3RzIHdoaWNoIGlu
dGVybWl4IHN0ZGVyciBhbmQgc3Rkb3V0IGxpbmVzLgotICAgICAgICByZXR1cm4gc2VsZi5yZWFk
X3N0ZG91dF9saW5lKGRlYWRsaW5lKSwgTm9uZQotCi0gICAgZGVmIHN0YXJ0KHNlbGYpOgotICAg
ICAgICBzZWxmLnN0YXJ0ZWQgPSBUcnVlCi0KLSAgICBkZWYgc3RvcChzZWxmLCBraWxsX2RpcmVj
dGx5PUZhbHNlKToKLSAgICAgICAgc2VsZi5zdG9wcGVkID0gVHJ1ZQotICAgICAgICByZXR1cm4K
LQotICAgIGRlZiBraWxsKHNlbGYpOgotICAgICAgICByZXR1cm4KSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvc2VydmVyX3Byb2Nlc3NfdW5pdHRlc3QucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9z
ZXJ2ZXJfcHJvY2Vzc191bml0dGVzdC5weQkocmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9zZXJ2ZXJfcHJvY2Vzc191bml0dGVzdC5w
eQkod29ya2luZyBjb3B5KQpAQCAtMSwxNTIgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
IwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9y
dCBzeXMKLWltcG9ydCB0aW1lCi1pbXBvcnQgdW5pdHRlc3QyIGFzIHVuaXR0ZXN0Ci0KLWZyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuZmFjdG9yeSBpbXBvcnQgUG9ydEZhY3RvcnkKLWZy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IHNlcnZlcl9wcm9jZXNzCi1mcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9zdAotZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9ja1N5c3Rl
bUhvc3QKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9ydCBP
dXRwdXRDYXB0dXJlCi0KLQotCi1jbGFzcyBUcml2aWFsTW9ja1BvcnQob2JqZWN0KToKLSAgICBk
ZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuaG9zdCA9IE1vY2tTeXN0ZW1Ib3N0KCkK
LSAgICAgICAgc2VsZi5ob3N0LmV4ZWN1dGl2ZS5raWxsX3Byb2Nlc3MgPSBsYW1iZGEgeDogTm9u
ZQotICAgICAgICBzZWxmLmhvc3QuZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyA9IGxhbWJkYSB4OiBO
b25lCi0KLSAgICBkZWYgcmVzdWx0c19kaXJlY3Rvcnkoc2VsZik6Ci0gICAgICAgIHJldHVybiAi
L21vY2stcmVzdWx0cyIKLQotICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwgcHJvY2Vzc19u
YW1lLCBwcm9jZXNzX3BpZCk6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBwcm9jZXNzX2tpbGxf
dGltZShzZWxmKToKLSAgICAgICAgcmV0dXJuIDEKLQotCi1jbGFzcyBNb2NrRmlsZShvYmplY3Qp
OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXJfcHJvY2Vzcyk6Ci0gICAgICAgIHNlbGYu
X3NlcnZlcl9wcm9jZXNzID0gc2VydmVyX3Byb2Nlc3MKLSAgICAgICAgc2VsZi5jbG9zZWQgPSBG
YWxzZQotCi0gICAgZGVmIGZpbGVubyhzZWxmKToKLSAgICAgICAgcmV0dXJuIDEKLQotICAgIGRl
ZiB3cml0ZShzZWxmLCBsaW5lKToKLSAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MuYnJva2Vu
X3BpcGVzLmFwcGVuZChzZWxmKQotICAgICAgICByYWlzZSBJT0Vycm9yCi0KLSAgICBkZWYgY2xv
c2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuY2xvc2VkID0gVHJ1ZQotCi0KLWNsYXNzIE1vY2tQcm9j
KG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlcl9wcm9jZXNzKToKLSAgICAg
ICAgc2VsZi5zdGRpbiA9IE1vY2tGaWxlKHNlcnZlcl9wcm9jZXNzKQotICAgICAgICBzZWxmLnN0
ZG91dCA9IE1vY2tGaWxlKHNlcnZlcl9wcm9jZXNzKQotICAgICAgICBzZWxmLnN0ZGVyciA9IE1v
Y2tGaWxlKHNlcnZlcl9wcm9jZXNzKQotICAgICAgICBzZWxmLnBpZCA9IDEKLQotICAgIGRlZiBw
b2xsKHNlbGYpOgotICAgICAgICByZXR1cm4gMQotCi0gICAgZGVmIHdhaXQoc2VsZik6Ci0gICAg
ICAgIHJldHVybiAwCi0KLQotY2xhc3MgRmFrZVNlcnZlclByb2Nlc3Moc2VydmVyX3Byb2Nlc3Mu
U2VydmVyUHJvY2Vzcyk6Ci0gICAgZGVmIF9zdGFydChzZWxmKToKLSAgICAgICAgc2VsZi5fcHJv
YyA9IE1vY2tQcm9jKHNlbGYpCi0gICAgICAgIHNlbGYuc3RkaW4gPSBzZWxmLl9wcm9jLnN0ZGlu
Ci0gICAgICAgIHNlbGYuc3Rkb3V0ID0gc2VsZi5fcHJvYy5zdGRvdXQKLSAgICAgICAgc2VsZi5z
dGRlcnIgPSBzZWxmLl9wcm9jLnN0ZGVycgotICAgICAgICBzZWxmLl9waWQgPSBzZWxmLl9wcm9j
LnBpZAotICAgICAgICBzZWxmLmJyb2tlbl9waXBlcyA9IFtdCi0KLQotY2xhc3MgVGVzdFNlcnZl
clByb2Nlc3ModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgot
ICAgICAgICBjbWQgPSBbc3lzLmV4ZWN1dGFibGUsICctYycsICdpbXBvcnQgc3lzOyBpbXBvcnQg
dGltZTsgdGltZS5zbGVlcCgwLjAyKTsgcHJpbnQgInN0ZG91dCI7IHN5cy5zdGRvdXQuZmx1c2go
KTsgcHJpbnQgPj5zeXMuc3RkZXJyLCAic3RkZXJyIiddCi0gICAgICAgIGhvc3QgPSBTeXN0ZW1I
b3N0KCkKLSAgICAgICAgZmFjdG9yeSA9IFBvcnRGYWN0b3J5KGhvc3QpCi0gICAgICAgIHBvcnQg
PSBmYWN0b3J5LmdldCgpCi0gICAgICAgIG5vdyA9IHRpbWUudGltZSgpCi0gICAgICAgIHByb2Mg
PSBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNzKHBvcnQsICdweXRob24nLCBjbWQpCi0gICAg
ICAgIHByb2Mud3JpdGUoJycpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9jLnBvbGwo
KSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwcm9jLmhhc19jcmFzaGVkKCkpCi0K
LSAgICAgICAgIyBjaGVjayB0aGF0IGRvaW5nIGEgcmVhZCBhZnRlciBhbiBleHBpcmVkIGRlYWRs
aW5lIHJldHVybnMKLSAgICAgICAgIyBub3RoaW5nIGltbWVkaWF0ZWx5LgotICAgICAgICBsaW5l
ID0gcHJvYy5yZWFkX3N0ZG91dF9saW5lKG5vdyAtIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwobGluZSwgTm9uZSkKLQotICAgICAgICAjIEZJWE1FOiBUaGlzIHBhcnQgYXBwZWFycyB0byBi
ZSBmbGFreS4gbGluZSBzaG91bGQgYWx3YXlzIGJlIG5vbi1Ob25lLgotICAgICAgICAjIEZJWE1F
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODgyODAKLSAgICAgICAg
bGluZSA9IHByb2MucmVhZF9zdGRvdXRfbGluZShub3cgKyAxLjApCi0gICAgICAgIGlmIGxpbmU6
Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUuc3RyaXAoKSwgInN0ZG91dCIpCi0K
LSAgICAgICAgbGluZSA9IHByb2MucmVhZF9zdGRlcnJfbGluZShub3cgKyAxLjApCi0gICAgICAg
IGlmIGxpbmU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUuc3RyaXAoKSwgInN0
ZGVyciIpCi0KLSAgICAgICAgcHJvYy5zdG9wKDApCi0KLSAgICBkZWYgdGVzdF9jbGVhbnVwKHNl
bGYpOgotICAgICAgICBwb3J0X29iaiA9IFRyaXZpYWxNb2NrUG9ydCgpCi0gICAgICAgIHNlcnZl
cl9wcm9jZXNzID0gRmFrZVNlcnZlclByb2Nlc3MocG9ydF9vYmo9cG9ydF9vYmosIG5hbWU9InRl
c3QiLCBjbWQ9WyJ0ZXN0Il0pCi0gICAgICAgIHNlcnZlcl9wcm9jZXNzLl9zdGFydCgpCi0gICAg
ICAgIHNlcnZlcl9wcm9jZXNzLnN0b3AoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VydmVy
X3Byb2Nlc3Muc3RkaW4uY2xvc2VkKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VydmVyX3By
b2Nlc3Muc3Rkb3V0LmNsb3NlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlcnZlcl9wcm9j
ZXNzLnN0ZGVyci5jbG9zZWQpCi0KLSAgICBkZWYgdGVzdF9icm9rZW5fcGlwZShzZWxmKToKLSAg
ICAgICAgcG9ydF9vYmogPSBUcml2aWFsTW9ja1BvcnQoKQotCi0gICAgICAgIHBvcnRfb2JqLmhv
c3QucGxhdGZvcm0ub3NfbmFtZSA9ICd3aW4nCi0gICAgICAgIHNlcnZlcl9wcm9jZXNzID0gRmFr
ZVNlcnZlclByb2Nlc3MocG9ydF9vYmo9cG9ydF9vYmosIG5hbWU9InRlc3QiLCBjbWQ9WyJ0ZXN0
Il0pCi0gICAgICAgIHNlcnZlcl9wcm9jZXNzLndyaXRlKCJzaG91bGQgYnJlYWsiKQotICAgICAg
ICBzZWxmLmFzc2VydFRydWUoc2VydmVyX3Byb2Nlc3MuaGFzX2NyYXNoZWQoKSkKLSAgICAgICAg
c2VsZi5hc3NlcnRJc05vdE5vbmUoc2VydmVyX3Byb2Nlc3MucGlkKCkpCi0gICAgICAgIHNlbGYu
YXNzZXJ0SXNOb25lKHNlcnZlcl9wcm9jZXNzLl9wcm9jKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHNlcnZlcl9wcm9jZXNzLmJyb2tlbl9waXBlcywgW3NlcnZlcl9wcm9jZXNzLnN0ZGluXSkK
LQotICAgICAgICBwb3J0X29iai5ob3N0LnBsYXRmb3JtLm9zX25hbWUgPSAnbWFjJwotICAgICAg
ICBzZXJ2ZXJfcHJvY2VzcyA9IEZha2VTZXJ2ZXJQcm9jZXNzKHBvcnRfb2JqPXBvcnRfb2JqLCBu
YW1lPSJ0ZXN0IiwgY21kPVsidGVzdCJdKQotICAgICAgICBzZXJ2ZXJfcHJvY2Vzcy53cml0ZSgi
c2hvdWxkIGJyZWFrIikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlcnZlcl9wcm9jZXNzLmhh
c19jcmFzaGVkKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlcnZlcl9wcm9jZXNzLl9w
cm9jKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZlcl9wcm9jZXNzLmJyb2tlbl9waXBl
cywgW3NlcnZlcl9wcm9jZXNzLnN0ZGluXSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkJKHJldmlzaW9uIDE0ODQ5NykKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQkod29ya2luZyBj
b3B5KQpAQCAtMSw2MTAgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMg
bWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgR29vZ2xlIG5hbWUg
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
IyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgYmFzZTY0Ci1pbXBvcnQg
c3lzCi1pbXBvcnQgdGltZQotCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9y
dCBQb3J0LCBEcml2ZXIsIERyaXZlck91dHB1dAotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
cG9ydC5iYXNlIGltcG9ydCBWaXJ0dWFsVGVzdFN1aXRlCi1mcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5tb2RlbHMudGVzdF9jb25maWd1cmF0aW9uIGltcG9ydCBUZXN0Q29uZmlndXJhdGlvbgot
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0Zp
bGVTeXN0ZW0KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW1wb3J0IENy
YXNoTG9ncwotCi0KLSMgVGhpcyBzZXRzIGJhc2ljIGV4cGVjdGF0aW9ucyBmb3IgYSB0ZXN0LiBF
YWNoIGluZGl2aWR1YWwgZXhwZWN0YXRpb24KLSMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBrZXl3
b3JkIGFyZ3VtZW50IGluIFRlc3RMaXN0LmFkZCgpLgotY2xhc3MgVGVzdEluc3RhbmNlKG9iamVj
dCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgotICAgICAgICBzZWxmLm5hbWUgPSBu
YW1lCi0gICAgICAgIHNlbGYuYmFzZSA9IG5hbWVbKG5hbWUucmZpbmQoIi8iKSArIDEpOm5hbWUu
cmZpbmQoIi4iKV0KLSAgICAgICAgc2VsZi5jcmFzaCA9IEZhbHNlCi0gICAgICAgIHNlbGYud2Vi
X3Byb2Nlc3NfY3Jhc2ggPSBGYWxzZQotICAgICAgICBzZWxmLmV4Y2VwdGlvbiA9IEZhbHNlCi0g
ICAgICAgIHNlbGYuaGFuZyA9IEZhbHNlCi0gICAgICAgIHNlbGYua2V5Ym9hcmQgPSBGYWxzZQot
ICAgICAgICBzZWxmLmVycm9yID0gJycKLSAgICAgICAgc2VsZi50aW1lb3V0ID0gRmFsc2UKLSAg
ICAgICAgc2VsZi5pc19yZWZ0ZXN0ID0gRmFsc2UKLQotICAgICAgICAjIFRoZSB2YWx1ZXMgb2Yg
ZWFjaCBmaWVsZCBhcmUgdHJlYXRlZCBhcyByYXcgYnl0ZSBzdHJpbmdzLiBUaGV5Ci0gICAgICAg
ICMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdW5pY29kZSBzdHJpbmdzIHdoZXJlIGFwcHJvcHJpYXRl
IHVzaW5nCi0gICAgICAgICMgRmlsZVN5c3RlbS5yZWFkX3RleHRfZmlsZSgpLgotICAgICAgICBz
ZWxmLmFjdHVhbF90ZXh0ID0gc2VsZi5iYXNlICsgJy10eHQnCi0gICAgICAgIHNlbGYuYWN0dWFs
X2NoZWNrc3VtID0gc2VsZi5iYXNlICsgJy1jaGVja3N1bScKLQotICAgICAgICAjIFdlIGFkZCB0
aGUgJ1x4OGEnIGZvciB0aGUgaW1hZ2UgZmlsZSB0byBwcmV2ZW50IHRoZSB2YWx1ZSBmcm9tCi0g
ICAgICAgICMgYmVpbmcgdHJlYXRlZCBhcyBVVEYtOCAodGhlIGNoYXJhY3RlciBpcyBpbnZhbGlk
KQotICAgICAgICBzZWxmLmFjdHVhbF9pbWFnZSA9IHNlbGYuYmFzZSArICdceDhhJyArICctcG5n
JyArICd0RVh0Y2hlY2tzdW1ceDAwJyArIHNlbGYuYWN0dWFsX2NoZWNrc3VtCi0KLSAgICAgICAg
c2VsZi5leHBlY3RlZF90ZXh0ID0gc2VsZi5hY3R1YWxfdGV4dAotICAgICAgICBzZWxmLmV4cGVj
dGVkX2ltYWdlID0gc2VsZi5hY3R1YWxfaW1hZ2UKLQotICAgICAgICBzZWxmLmFjdHVhbF9hdWRp
byA9IE5vbmUKLSAgICAgICAgc2VsZi5leHBlY3RlZF9hdWRpbyA9IE5vbmUKLQotCi0jIFRoaXMg
aXMgYW4gaW4tbWVtb3J5IGxpc3Qgb2YgdGVzdHMsIHdoYXQgd2Ugd2FudCB0aGVtIHRvIHByb2R1
Y2UsIGFuZAotIyB3aGF0IHdlIHdhbnQgdG8gY2xhaW0gYXJlIHRoZSBleHBlY3RlZCByZXN1bHRz
LgotY2xhc3MgVGVzdExpc3Qob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAg
ICAgIHNlbGYudGVzdHMgPSB7fQotCi0gICAgZGVmIGFkZChzZWxmLCBuYW1lLCAqKmt3YXJncyk6
Ci0gICAgICAgIHRlc3QgPSBUZXN0SW5zdGFuY2UobmFtZSkKLSAgICAgICAgZm9yIGtleSwgdmFs
dWUgaW4ga3dhcmdzLml0ZW1zKCk6Ci0gICAgICAgICAgICB0ZXN0Ll9fZGljdF9fW2tleV0gPSB2
YWx1ZQotICAgICAgICBzZWxmLnRlc3RzW25hbWVdID0gdGVzdAotCi0gICAgZGVmIGFkZF9yZWZ0
ZXN0KHNlbGYsIG5hbWUsIHJlZmVyZW5jZV9uYW1lLCBzYW1lX2ltYWdlKToKLSAgICAgICAgc2Vs
Zi5hZGQobmFtZSwgYWN0dWFsX2NoZWNrc3VtPSd4eHgnLCBhY3R1YWxfaW1hZ2U9J1hYWCcsIGlz
X3JlZnRlc3Q9VHJ1ZSkKLSAgICAgICAgaWYgc2FtZV9pbWFnZToKLSAgICAgICAgICAgIHNlbGYu
YWRkKHJlZmVyZW5jZV9uYW1lLCBhY3R1YWxfY2hlY2tzdW09J3h4eCcsIGFjdHVhbF9pbWFnZT0n
WFhYJywgaXNfcmVmdGVzdD1UcnVlKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5h
ZGQocmVmZXJlbmNlX25hbWUsIGFjdHVhbF9jaGVja3N1bT0neXl5JywgYWN0dWFsX2ltYWdlPSdZ
WVknLCBpc19yZWZ0ZXN0PVRydWUpCi0KLSAgICBkZWYga2V5cyhzZWxmKToKLSAgICAgICAgcmV0
dXJuIHNlbGYudGVzdHMua2V5cygpCi0KLSAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGl0ZW0p
OgotICAgICAgICByZXR1cm4gaXRlbSBpbiBzZWxmLnRlc3RzCi0KLSAgICBkZWYgX19nZXRpdGVt
X18oc2VsZiwgaXRlbSk6Ci0gICAgICAgIHJldHVybiBzZWxmLnRlc3RzW2l0ZW1dCi0KLSMKLSMg
VGhlc2UgbnVtYmVycyBtYXkgbmVlZCB0byBiZSB1cGRhdGVkIHdoZW5ldmVyIHdlIGFkZCBvciBk
ZWxldGUgdGVzdHMuCi0jCi1UT1RBTF9URVNUUyA9IDEwNAotVE9UQUxfU0tJUFMgPSAyOAotVE9U
QUxfUkVUUklFUyA9IDE0Ci0KLVVORVhQRUNURURfUEFTU0VTID0gNgotVU5FWFBFQ1RFRF9GQUlM
VVJFUyA9IDE3Ci0KLWRlZiB1bml0X3Rlc3RfbGlzdCgpOgotICAgIHRlc3RzID0gVGVzdExpc3Qo
KQotICAgIHRlc3RzLmFkZCgnZmFpbHVyZXMvZXhwZWN0ZWQvY3Jhc2guaHRtbCcsIGNyYXNoPVRy
dWUpCi0gICAgdGVzdHMuYWRkKCdmYWlsdXJlcy9leHBlY3RlZC9leGNlcHRpb24uaHRtbCcsIGV4
Y2VwdGlvbj1UcnVlKQotICAgIHRlc3RzLmFkZCgnZmFpbHVyZXMvZXhwZWN0ZWQvdGltZW91dC5o
dG1sJywgdGltZW91dD1UcnVlKQotICAgIHRlc3RzLmFkZCgnZmFpbHVyZXMvZXhwZWN0ZWQvaGFu
Zy5odG1sJywgaGFuZz1UcnVlKQotICAgIHRlc3RzLmFkZCgnZmFpbHVyZXMvZXhwZWN0ZWQvbWlz
c2luZ190ZXh0Lmh0bWwnLCBleHBlY3RlZF90ZXh0PU5vbmUpCi0gICAgdGVzdHMuYWRkKCdmYWls
dXJlcy9leHBlY3RlZC9pbWFnZS5odG1sJywKLSAgICAgICAgICAgICAgYWN0dWFsX2ltYWdlPSdp
bWFnZV9mYWlsLXBuZ3RFWHRjaGVja3N1bVx4MDBjaGVja3N1bV9mYWlsJywKLSAgICAgICAgICAg
ICAgZXhwZWN0ZWRfaW1hZ2U9J2ltYWdlLXBuZ3RFWHRjaGVja3N1bVx4MDBjaGVja3N1bS1wbmcn
KQotICAgIHRlc3RzLmFkZCgnZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2VfY2hlY2tzdW0uaHRtbCcs
Ci0gICAgICAgICAgICAgIGFjdHVhbF9jaGVja3N1bT0naW1hZ2VfY2hlY2tzdW1fZmFpbC1jaGVj
a3N1bScsCi0gICAgICAgICAgICAgIGFjdHVhbF9pbWFnZT0naW1hZ2VfY2hlY2tzdW1fZmFpbC1w
bmcnKQotICAgIHRlc3RzLmFkZCgnZmFpbHVyZXMvZXhwZWN0ZWQvYXVkaW8uaHRtbCcsCi0gICAg
ICAgICAgICAgIGFjdHVhbF9hdWRpbz1iYXNlNjQuYjY0ZW5jb2RlKCdhdWRpb19mYWlsLXdhdicp
LCBleHBlY3RlZF9hdWRpbz0nYXVkaW8td2F2JywKLSAgICAgICAgICAgICAgYWN0dWFsX3RleHQ9
Tm9uZSwgZXhwZWN0ZWRfdGV4dD1Ob25lLAotICAgICAgICAgICAgICBhY3R1YWxfaW1hZ2U9Tm9u
ZSwgZXhwZWN0ZWRfaW1hZ2U9Tm9uZSwKLSAgICAgICAgICAgICAgYWN0dWFsX2NoZWNrc3VtPU5v
bmUpCi0gICAgdGVzdHMuYWRkKCdmYWlsdXJlcy9leHBlY3RlZC9rZXlib2FyZC5odG1sJywga2V5
Ym9hcmQ9VHJ1ZSkKLSAgICB0ZXN0cy5hZGQoJ2ZhaWx1cmVzL2V4cGVjdGVkL21pc3NpbmdfY2hl
Y2suaHRtbCcsCi0gICAgICAgICAgICAgIGV4cGVjdGVkX2ltYWdlPSdtaXNzaW5nX2NoZWNrLXBu
ZycpCi0gICAgdGVzdHMuYWRkKCdmYWlsdXJlcy9leHBlY3RlZC9taXNzaW5nX2ltYWdlLmh0bWwn
LCBleHBlY3RlZF9pbWFnZT1Ob25lKQotICAgIHRlc3RzLmFkZCgnZmFpbHVyZXMvZXhwZWN0ZWQv
bWlzc2luZ19hdWRpby5odG1sJywgZXhwZWN0ZWRfYXVkaW89Tm9uZSwKLSAgICAgICAgICAgICAg
YWN0dWFsX3RleHQ9Tm9uZSwgZXhwZWN0ZWRfdGV4dD1Ob25lLAotICAgICAgICAgICAgICBhY3R1
YWxfaW1hZ2U9Tm9uZSwgZXhwZWN0ZWRfaW1hZ2U9Tm9uZSwKLSAgICAgICAgICAgICAgYWN0dWFs
X2NoZWNrc3VtPU5vbmUpCi0gICAgdGVzdHMuYWRkKCdmYWlsdXJlcy9leHBlY3RlZC9taXNzaW5n
X3RleHQuaHRtbCcsIGV4cGVjdGVkX3RleHQ9Tm9uZSkKLSAgICB0ZXN0cy5hZGQoJ2ZhaWx1cmVz
L2V4cGVjdGVkL25ld2xpbmVzX2xlYWRpbmcuaHRtbCcsCi0gICAgICAgICAgICAgIGV4cGVjdGVk
X3RleHQ9IlxuZm9vXG4iLCBhY3R1YWxfdGV4dD0iZm9vXG4iKQotICAgIHRlc3RzLmFkZCgnZmFp
bHVyZXMvZXhwZWN0ZWQvbmV3bGluZXNfdHJhaWxpbmcuaHRtbCcsCi0gICAgICAgICAgICAgIGV4
cGVjdGVkX3RleHQ9ImZvb1xuXG4iLCBhY3R1YWxfdGV4dD0iZm9vXG4iKQotICAgIHRlc3RzLmFk
ZCgnZmFpbHVyZXMvZXhwZWN0ZWQvbmV3bGluZXNfd2l0aF9leGNlc3NfQ1IuaHRtbCcsCi0gICAg
ICAgICAgICAgIGV4cGVjdGVkX3RleHQ9ImZvb1xyXHJcclxuIiwgYWN0dWFsX3RleHQ9ImZvb1xu
IikKLSAgICB0ZXN0cy5hZGQoJ2ZhaWx1cmVzL2V4cGVjdGVkL3RleHQuaHRtbCcsIGFjdHVhbF90
ZXh0PSd0ZXh0X2ZhaWwtcG5nJykKLSAgICB0ZXN0cy5hZGQoJ2ZhaWx1cmVzL2V4cGVjdGVkL3Nr
aXBfdGV4dC5odG1sJywgYWN0dWFsX3RleHQ9J3RleHQgZGlmZicpCi0gICAgdGVzdHMuYWRkKCdm
YWlsdXJlcy9mbGFreS90ZXh0Lmh0bWwnKQotICAgIHRlc3RzLmFkZCgnZmFpbHVyZXMvdW5leHBl
Y3RlZC9taXNzaW5nX3RleHQuaHRtbCcsIGV4cGVjdGVkX3RleHQ9Tm9uZSkKLSAgICB0ZXN0cy5h
ZGQoJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvbWlzc2luZ19jaGVjay5odG1sJywgZXhwZWN0ZWRfaW1h
Z2U9J21pc3NpbmctY2hlY2stcG5nJykKLSAgICB0ZXN0cy5hZGQoJ2ZhaWx1cmVzL3VuZXhwZWN0
ZWQvbWlzc2luZ19pbWFnZS5odG1sJywgZXhwZWN0ZWRfaW1hZ2U9Tm9uZSkKLSAgICB0ZXN0cy5h
ZGQoJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvbWlzc2luZ19yZW5kZXJfdHJlZV9kdW1wLmh0bWwnLCBh
Y3R1YWxfdGV4dD0iIiJsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKLSAgUmVuZGVyVmlldyBh
dCAoMCwwKSBzaXplIDgwMHg2MDAKLWxheWVyIGF0ICgwLDApIHNpemUgODAweDM0Ci0gIFJlbmRl
ckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDgwMHgzNAotICAgIFJlbmRlckJvZHkge0JPRFl9
IGF0ICg4LDgpIHNpemUgNzg0eDE4Ci0gICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkg
c2l6ZSAxMzN4MTgKLSAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMTMzOiAiVGhpcyBp
cyBhbiBpbWFnZSB0ZXN0ISIKLSIiIiwgZXhwZWN0ZWRfdGV4dD1Ob25lKQotICAgIHRlc3RzLmFk
ZCgnZmFpbHVyZXMvdW5leHBlY3RlZC9jcmFzaC5odG1sJywgY3Jhc2g9VHJ1ZSkKLSAgICB0ZXN0
cy5hZGQoJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvY3Jhc2gtd2l0aC1zdGRlcnIuaHRtbCcsIGNyYXNo
PVRydWUsCi0gICAgICAgICAgICAgIGVycm9yPSJtb2NrLXN0ZC1lcnJvci1vdXRwdXQiKQotICAg
IHRlc3RzLmFkZCgnZmFpbHVyZXMvdW5leHBlY3RlZC93ZWItcHJvY2Vzcy1jcmFzaC13aXRoLXN0
ZGVyci5odG1sJywgd2ViX3Byb2Nlc3NfY3Jhc2g9VHJ1ZSwKLSAgICAgICAgICAgICAgZXJyb3I9
Im1vY2stc3RkLWVycm9yLW91dHB1dCIpCi0gICAgdGVzdHMuYWRkKCdmYWlsdXJlcy91bmV4cGVj
dGVkL3Bhc3MuaHRtbCcpCi0gICAgdGVzdHMuYWRkKCdmYWlsdXJlcy91bmV4cGVjdGVkL3RleHQt
Y2hlY2tzdW0uaHRtbCcsCi0gICAgICAgICAgICAgIGFjdHVhbF90ZXh0PSd0ZXh0LWNoZWNrc3Vt
X2ZhaWwtdHh0JywKLSAgICAgICAgICAgICAgYWN0dWFsX2NoZWNrc3VtPSd0ZXh0LWNoZWNrc3Vt
X2ZhaWwtY2hlY2tzdW0nKQotICAgIHRlc3RzLmFkZCgnZmFpbHVyZXMvdW5leHBlY3RlZC90ZXh0
LWltYWdlLWNoZWNrc3VtLmh0bWwnLAotICAgICAgICAgICAgICBhY3R1YWxfdGV4dD0ndGV4dC1p
bWFnZS1jaGVja3N1bV9mYWlsLXR4dCcsCi0gICAgICAgICAgICAgIGFjdHVhbF9pbWFnZT0ndGV4
dC1pbWFnZS1jaGVja3N1bV9mYWlsLXBuZ3RFWHRjaGVja3N1bVx4MDBjaGVja3N1bV9mYWlsJywK
LSAgICAgICAgICAgICAgYWN0dWFsX2NoZWNrc3VtPSd0ZXh0LWltYWdlLWNoZWNrc3VtX2ZhaWwt
Y2hlY2tzdW0nKQotICAgIHRlc3RzLmFkZCgnZmFpbHVyZXMvdW5leHBlY3RlZC9jaGVja3N1bS13
aXRoLW1hdGNoaW5nLWltYWdlLmh0bWwnLAotICAgICAgICAgICAgICBhY3R1YWxfY2hlY2tzdW09
J3RleHQtaW1hZ2UtY2hlY2tzdW1fZmFpbC1jaGVja3N1bScpCi0gICAgdGVzdHMuYWRkKCdmYWls
dXJlcy91bmV4cGVjdGVkL3NraXBfcGFzcy5odG1sJykKLSAgICB0ZXN0cy5hZGQoJ2ZhaWx1cmVz
L3VuZXhwZWN0ZWQvdGV4dC5odG1sJywgYWN0dWFsX3RleHQ9J3RleHRfZmFpbC10eHQnKQotICAg
IHRlc3RzLmFkZCgnZmFpbHVyZXMvdW5leHBlY3RlZC90aW1lb3V0Lmh0bWwnLCB0aW1lb3V0PVRy
dWUpCi0gICAgdGVzdHMuYWRkKCdodHRwL3Rlc3RzL3Bhc3Nlcy90ZXh0Lmh0bWwnKQotICAgIHRl
c3RzLmFkZCgnaHR0cC90ZXN0cy9wYXNzZXMvaW1hZ2UuaHRtbCcpCi0gICAgdGVzdHMuYWRkKCdo
dHRwL3Rlc3RzL3NzbC90ZXh0Lmh0bWwnKQotICAgIHRlc3RzLmFkZCgncGFzc2VzL2FyZ3MuaHRt
bCcpCi0gICAgdGVzdHMuYWRkKCdwYXNzZXMvZXJyb3IuaHRtbCcsIGVycm9yPSdzdHVmZiBnb2lu
ZyB0byBzdGRlcnInKQotICAgIHRlc3RzLmFkZCgncGFzc2VzL2ltYWdlLmh0bWwnKQotICAgIHRl
c3RzLmFkZCgncGFzc2VzL2F1ZGlvLmh0bWwnLAotICAgICAgICAgICAgICBhY3R1YWxfYXVkaW89
YmFzZTY0LmI2NGVuY29kZSgnYXVkaW8td2F2JyksIGV4cGVjdGVkX2F1ZGlvPSdhdWRpby13YXYn
LAotICAgICAgICAgICAgICBhY3R1YWxfdGV4dD1Ob25lLCBleHBlY3RlZF90ZXh0PU5vbmUsCi0g
ICAgICAgICAgICAgIGFjdHVhbF9pbWFnZT1Ob25lLCBleHBlY3RlZF9pbWFnZT1Ob25lLAotICAg
ICAgICAgICAgICBhY3R1YWxfY2hlY2tzdW09Tm9uZSkKLSAgICB0ZXN0cy5hZGQoJ3Bhc3Nlcy9w
bGF0Zm9ybV9pbWFnZS5odG1sJykKLSAgICB0ZXN0cy5hZGQoJ3Bhc3Nlcy9jaGVja3N1bV9pbl9p
bWFnZS5odG1sJywKLSAgICAgICAgICAgICAgZXhwZWN0ZWRfaW1hZ2U9J3RFWHRjaGVja3N1bVx4
MDBjaGVja3N1bV9pbl9pbWFnZS1jaGVja3N1bScpCi0gICAgdGVzdHMuYWRkKCdwYXNzZXMvc2tp
cHBlZC9za2lwLmh0bWwnKQotCi0gICAgIyBOb3RlIHRoYXQgaGVyZSB0aGUgY2hlY2tzdW1zIGRv
bid0IG1hdGNoIGJ1dCB0aGUgaW1hZ2VzIGRvLCBzbyB0aGlzIHRlc3QgcGFzc2VzICJ1bmV4cGVj
dGVkbHkiLgotICAgICMgU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02OTQ0NCAuCi0gICAgdGVzdHMuYWRkKCdmYWlsdXJlcy91bmV4cGVjdGVkL2NoZWNrc3VtLmh0
bWwnLCBhY3R1YWxfY2hlY2tzdW09J2NoZWNrc3VtX2ZhaWwtY2hlY2tzdW0nKQotCi0gICAgIyBU
ZXh0IG91dHB1dCBmaWxlcyBjb250YWluICJcclxuIiBvbiBXaW5kb3dzLiAgVGhpcyBtYXkgYmUK
LSAgICAjIGhlbHBmdWxseSBmaWx0ZXJlZCB0byAiXHJcclxuIiBieSBvdXIgUHl0aG9uL0N5Z3dp
biB0b29saW5nLgotICAgIHRlc3RzLmFkZCgncGFzc2VzL3RleHQuaHRtbCcsCi0gICAgICAgICAg
ICAgIGV4cGVjdGVkX3RleHQ9J1xuZm9vXG5cbicsIGFjdHVhbF90ZXh0PSdcbmZvb1xyXG5cclxy
XG4nKQotCi0gICAgIyBGb3IgcmVmdGVzdHMuCi0gICAgdGVzdHMuYWRkX3JlZnRlc3QoJ3Bhc3Nl
cy9yZWZ0ZXN0Lmh0bWwnLCAncGFzc2VzL3JlZnRlc3QtZXhwZWN0ZWQuaHRtbCcsIHNhbWVfaW1h
Z2U9VHJ1ZSkKLSAgICB0ZXN0cy5hZGRfcmVmdGVzdCgncGFzc2VzL21pc21hdGNoLmh0bWwnLCAn
cGFzc2VzL21pc21hdGNoLWV4cGVjdGVkLW1pc21hdGNoLmh0bWwnLCBzYW1lX2ltYWdlPUZhbHNl
KQotICAgIHRlc3RzLmFkZF9yZWZ0ZXN0KCdwYXNzZXMvc3ZncmVmdGVzdC5zdmcnLCAncGFzc2Vz
L3N2Z3JlZnRlc3QtZXhwZWN0ZWQuc3ZnJywgc2FtZV9pbWFnZT1UcnVlKQotICAgIHRlc3RzLmFk
ZF9yZWZ0ZXN0KCdwYXNzZXMveGh0cmVmdGVzdC54aHQnLCAncGFzc2VzL3hodHJlZnRlc3QtZXhw
ZWN0ZWQuaHRtbCcsIHNhbWVfaW1hZ2U9VHJ1ZSkKLSAgICB0ZXN0cy5hZGRfcmVmdGVzdCgncGFz
c2VzL3BocHJlZnRlc3QucGhwJywgJ3Bhc3Nlcy9waHByZWZ0ZXN0LWV4cGVjdGVkLW1pc21hdGNo
LnN2ZycsIHNhbWVfaW1hZ2U9RmFsc2UpCi0gICAgdGVzdHMuYWRkX3JlZnRlc3QoJ2ZhaWx1cmVz
L2V4cGVjdGVkL3JlZnRlc3QuaHRtbCcsICdmYWlsdXJlcy9leHBlY3RlZC9yZWZ0ZXN0LWV4cGVj
dGVkLmh0bWwnLCBzYW1lX2ltYWdlPUZhbHNlKQotICAgIHRlc3RzLmFkZF9yZWZ0ZXN0KCdmYWls
dXJlcy9leHBlY3RlZC9taXNtYXRjaC5odG1sJywgJ2ZhaWx1cmVzL2V4cGVjdGVkL21pc21hdGNo
LWV4cGVjdGVkLW1pc21hdGNoLmh0bWwnLCBzYW1lX2ltYWdlPVRydWUpCi0gICAgdGVzdHMuYWRk
X3JlZnRlc3QoJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvcmVmdGVzdC5odG1sJywgJ2ZhaWx1cmVzL3Vu
ZXhwZWN0ZWQvcmVmdGVzdC1leHBlY3RlZC5odG1sJywgc2FtZV9pbWFnZT1GYWxzZSkKLSAgICB0
ZXN0cy5hZGRfcmVmdGVzdCgnZmFpbHVyZXMvdW5leHBlY3RlZC9taXNtYXRjaC5odG1sJywgJ2Zh
aWx1cmVzL3VuZXhwZWN0ZWQvbWlzbWF0Y2gtZXhwZWN0ZWQtbWlzbWF0Y2guaHRtbCcsIHNhbWVf
aW1hZ2U9VHJ1ZSkKLSAgICB0ZXN0cy5hZGQoJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvcmVmdGVzdC1u
b3BpeGVsLmh0bWwnLCBhY3R1YWxfY2hlY2tzdW09Tm9uZSwgYWN0dWFsX2ltYWdlPU5vbmUsIGlz
X3JlZnRlc3Q9VHJ1ZSkKLSAgICB0ZXN0cy5hZGQoJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvcmVmdGVz
dC1ub3BpeGVsLWV4cGVjdGVkLmh0bWwnLCBhY3R1YWxfY2hlY2tzdW09Tm9uZSwgYWN0dWFsX2lt
YWdlPU5vbmUsIGlzX3JlZnRlc3Q9VHJ1ZSkKLSAgICAjIEZJWE1FOiBBZGQgYSByZWZ0ZXN0IHdo
aWNoIGNyYXNoZXMuCi0gICAgdGVzdHMuYWRkKCdyZWZ0ZXN0cy9mb28vdGVzdC5odG1sJykKLSAg
ICB0ZXN0cy5hZGQoJ3JlZnRlc3RzL2Zvby90ZXN0LXJlZi5odG1sJykKLQotICAgIHRlc3RzLmFk
ZCgncmVmdGVzdHMvZm9vL211bHRpcGxlLW1hdGNoLXN1Y2Nlc3MuaHRtbCcsIGFjdHVhbF9jaGVj
a3N1bT0nYWJjJywgYWN0dWFsX2ltYWdlPSdhYmMnKQotICAgIHRlc3RzLmFkZCgncmVmdGVzdHMv
Zm9vL211bHRpcGxlLW1hdGNoLWZhaWx1cmUuaHRtbCcsIGFjdHVhbF9jaGVja3N1bT0nYWJjJywg
YWN0dWFsX2ltYWdlPSdhYmMnKQotICAgIHRlc3RzLmFkZCgncmVmdGVzdHMvZm9vL211bHRpcGxl
LW1pc21hdGNoLXN1Y2Nlc3MuaHRtbCcsIGFjdHVhbF9jaGVja3N1bT0nYWJjJywgYWN0dWFsX2lt
YWdlPSdhYmMnKQotICAgIHRlc3RzLmFkZCgncmVmdGVzdHMvZm9vL211bHRpcGxlLW1pc21hdGNo
LWZhaWx1cmUuaHRtbCcsIGFjdHVhbF9jaGVja3N1bT0nYWJjJywgYWN0dWFsX2ltYWdlPSdhYmMn
KQotICAgIHRlc3RzLmFkZCgncmVmdGVzdHMvZm9vL211bHRpcGxlLWJvdGgtc3VjY2Vzcy5odG1s
JywgYWN0dWFsX2NoZWNrc3VtPSdhYmMnLCBhY3R1YWxfaW1hZ2U9J2FiYycpCi0gICAgdGVzdHMu
YWRkKCdyZWZ0ZXN0cy9mb28vbXVsdGlwbGUtYm90aC1mYWlsdXJlLmh0bWwnLCBhY3R1YWxfY2hl
Y2tzdW09J2FiYycsIGFjdHVhbF9pbWFnZT0nYWJjJykKLQotICAgIHRlc3RzLmFkZCgncmVmdGVz
dHMvZm9vL21hdGNoaW5nLXJlZi5odG1sJywgYWN0dWFsX2NoZWNrc3VtPSdhYmMnLCBhY3R1YWxf
aW1hZ2U9J2FiYycpCi0gICAgdGVzdHMuYWRkKCdyZWZ0ZXN0cy9mb28vbWlzbWF0Y2hpbmctcmVm
Lmh0bWwnLCBhY3R1YWxfY2hlY2tzdW09J2RlZicsIGFjdHVhbF9pbWFnZT0nZGVmJykKLSAgICB0
ZXN0cy5hZGQoJ3JlZnRlc3RzL2Zvby9zZWNvbmQtbWlzbWF0Y2hpbmctcmVmLmh0bWwnLCBhY3R1
YWxfY2hlY2tzdW09J2doaScsIGFjdHVhbF9pbWFnZT0nZ2hpJykKLQotICAgICMgVGhlIGZvbGxv
d2luZyBmaWxlcyBzaG91bGRuJ3QgYmUgdHJlYXRlZCBhcyByZWZ0ZXN0cwotICAgIHRlc3RzLmFk
ZF9yZWZ0ZXN0KCdyZWZ0ZXN0cy9mb28vdW5saXN0ZWR0ZXN0Lmh0bWwnLCAncmVmdGVzdHMvZm9v
L3VubGlzdGVkdGVzdC1leHBlY3RlZC5odG1sJywgc2FtZV9pbWFnZT1UcnVlKQotICAgIHRlc3Rz
LmFkZCgncmVmdGVzdHMvZm9vL3JlZmVyZW5jZS9iYXIvY29tbW9uLmh0bWwnKQotICAgIHRlc3Rz
LmFkZCgncmVmdGVzdHMvZm9vL3JlZnRlc3QvYmFyL3NoYXJlZC5odG1sJykKLQotICAgIHRlc3Rz
LmFkZCgnd2Vic29ja2V0L3Rlc3RzL3Bhc3Nlcy90ZXh0Lmh0bWwnKQotCi0gICAgIyBGb3IgdGVz
dGluZyB0ZXN0IGFyZSBwcm9wZXJseSBpbmNsdWRlZCBmcm9tIHBsYXRmb3JtIGRpcmVjdG9yaWVz
LgotICAgIHRlc3RzLmFkZCgncGxhdGZvcm0vdGVzdC1tYWMtbGVvcGFyZC9odHRwL3Rlc3QuaHRt
bCcpCi0gICAgdGVzdHMuYWRkKCdwbGF0Zm9ybS90ZXN0LXdpbi13aW43L2h0dHAvdGVzdC5odG1s
JykKLQotICAgICMgRm9yIC0tbm8taHR0cCB0ZXN0cywgdGVzdCB0aGF0IHBsYXRmb3JtIHNwZWNp
ZmljIEhUVFAgdGVzdHMgYXJlIHByb3Blcmx5IHNraXBwZWQuCi0gICAgdGVzdHMuYWRkKCdwbGF0
Zm9ybS90ZXN0LXNub3ctbGVvcGFyZC9odHRwL3Rlc3QuaHRtbCcpCi0gICAgdGVzdHMuYWRkKCdw
bGF0Zm9ybS90ZXN0LXNub3ctbGVvcGFyZC93ZWJzb2NrZXQvdGVzdC5odG1sJykKLQotICAgICMg
Rm9yIHRlc3RpbmcgaWYgcGVyZiB0ZXN0cyBhcmUgcnVubmluZyBpbiBhIGxvY2tlZCBzaGFyZC4K
LSAgICB0ZXN0cy5hZGQoJ3BlcmYvZm9vL3Rlc3QuaHRtbCcpCi0gICAgdGVzdHMuYWRkKCdwZXJm
L2Zvby90ZXN0LXJlZi5odG1sJykKLQotICAgICMgRm9yIHRlc3RpbmcgLS1waXhlbC10ZXN0LWRp
cmVjdG9yaWVzLgotICAgIHRlc3RzLmFkZCgnZmFpbHVyZXMvdW5leHBlY3RlZC9waXhlbGRpci9p
bWFnZV9pbl9waXhlbGRpci5odG1sJywKLSAgICAgICAgYWN0dWFsX2ltYWdlPSdpbWFnZV9pbl9w
aXhlbGRpci1wbmd0RVh0Y2hlY2tzdW1ceDAwY2hlY2tzdW1fZmFpbCcsCi0gICAgICAgIGV4cGVj
dGVkX2ltYWdlPSdpbWFnZV9pbl9waXhlbGRpci1wbmd0RVh0Y2hlY2tzdW1ceDAwY2hlY2tzdW0t
cG5nJykKLSAgICB0ZXN0cy5hZGQoJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvaW1hZ2Vfbm90X2luX3Bp
eGVsZGlyLmh0bWwnLAotICAgICAgICBhY3R1YWxfaW1hZ2U9J2ltYWdlX25vdF9pbl9waXhlbGRp
ci1wbmd0RVh0Y2hlY2tzdW1ceDAwY2hlY2tzdW1fZmFpbCcsCi0gICAgICAgIGV4cGVjdGVkX2lt
YWdlPSdpbWFnZV9ub3RfaW5fcGl4ZWxkaXItcG5ndEVYdGNoZWNrc3VtXHgwMGNoZWNrc3VtLXBu
ZycpCi0KLSAgICAjIEZvciB0ZXN0aW5nIHRoYXQgdmlydHVhbCB0ZXN0IHN1aXRlcyBkb24ndCBl
eHBhbmQgbmFtZXMgY29udGFpbmluZyB0aGVtc2VsdmVzCi0gICAgIyBTZWUgd2Via2l0Lm9yZy9i
Lzk3OTI1IGFuZCBiYXNlX3VuaXR0ZXN0LlBvcnRUZXN0LnRlc3RfdGVzdHMoKS4KLSAgICB0ZXN0
cy5hZGQoJ3Bhc3Nlcy90ZXN0LXZpcnR1YWwtcGFzc2VzLmh0bWwnKQotICAgIHRlc3RzLmFkZCgn
cGFzc2VzL3Bhc3Nlcy90ZXN0LXZpcnR1YWwtcGFzc2VzLmh0bWwnKQotCi0gICAgcmV0dXJuIHRl
c3RzCi0KLQotIyBIZXJlIHdlIHVzZSBhIG5vbi1zdGFuZGFyZCBsb2NhdGlvbiBmb3IgdGhlIGxh
eW91dCB0ZXN0cywgdG8gZW5zdXJlIHRoYXQKLSMgdGhpcyB3b3Jrcy4gVGhlIHBhdGggY29udGFp
bnMgYSAnLicgaW4gdGhlIG5hbWUgYmVjYXVzZSB3ZSd2ZSBzZWVuIGJ1Z3MKLSMgcmVsYXRlZCB0
byB0aGlzIGJlZm9yZS4KLQotTEFZT1VUX1RFU1RfRElSID0gJy90ZXN0LmNoZWNrb3V0L0xheW91
dFRlc3RzJwotUEVSRl9URVNUX0RJUiA9ICcvdGVzdC5jaGVja291dC9QZXJmb3JtYW5jZVRlc3Rz
JwotCi0KLSMgSGVyZSB3ZSBzeW50aGVzaXplIGFuIGluLW1lbW9yeSBmaWxlc3lzdGVtIGZyb20g
dGhlIHRlc3QgbGlzdAotIyBpbiBvcmRlciB0byBmdWxseSBjb250cm9sIHRoZSB0ZXN0IG91dHB1
dCBhbmQgdG8gZGVtb25zdHJhdGUgdGhhdAotIyB3ZSBkb24ndCBuZWVkIGEgcmVhbCBmaWxlc3lz
dGVtIHRvIHJ1biB0aGUgdGVzdHMuCi1kZWYgYWRkX3VuaXRfdGVzdHNfdG9fbW9ja19maWxlc3lz
dGVtKGZpbGVzeXN0ZW0pOgotICAgICMgQWRkIHRoZSB0ZXN0X2V4cGVjdGF0aW9ucyBmaWxlLgot
ICAgIGZpbGVzeXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3RvcnkoTEFZT1VUX1RFU1RfRElSICsgJy9w
bGF0Zm9ybS90ZXN0JykKLSAgICBpZiBub3QgZmlsZXN5c3RlbS5leGlzdHMoTEFZT1VUX1RFU1Rf
RElSICsgJy9wbGF0Zm9ybS90ZXN0L1Rlc3RFeHBlY3RhdGlvbnMnKToKLSAgICAgICAgZmlsZXN5
c3RlbS53cml0ZV90ZXh0X2ZpbGUoTEFZT1VUX1RFU1RfRElSICsgJy9wbGF0Zm9ybS90ZXN0L1Rl
c3RFeHBlY3RhdGlvbnMnLCAiIiIKLUJ1Zyh0ZXN0KSBmYWlsdXJlcy9leHBlY3RlZC9jcmFzaC5o
dG1sIFsgQ3Jhc2ggXQotQnVnKHRlc3QpIGZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLmh0bWwgWyBJ
bWFnZU9ubHlGYWlsdXJlIF0KLUJ1Zyh0ZXN0KSBmYWlsdXJlcy9leHBlY3RlZC9hdWRpby5odG1s
IFsgRmFpbHVyZSBdCi1CdWcodGVzdCkgZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2VfY2hlY2tzdW0u
aHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQotQnVnKHRlc3QpIGZhaWx1cmVzL2V4cGVjdGVkL21p
c21hdGNoLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KLUJ1Zyh0ZXN0KSBmYWlsdXJlcy9leHBl
Y3RlZC9taXNzaW5nX2NoZWNrLmh0bWwgWyBNaXNzaW5nIFBhc3MgXQotQnVnKHRlc3QpIGZhaWx1
cmVzL2V4cGVjdGVkL21pc3NpbmdfaW1hZ2UuaHRtbCBbIE1pc3NpbmcgUGFzcyBdCi1CdWcodGVz
dCkgZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2luZ19hdWRpby5odG1sIFsgTWlzc2luZyBQYXNzIF0K
LUJ1Zyh0ZXN0KSBmYWlsdXJlcy9leHBlY3RlZC9taXNzaW5nX3RleHQuaHRtbCBbIE1pc3Npbmcg
UGFzcyBdCi1CdWcodGVzdCkgZmFpbHVyZXMvZXhwZWN0ZWQvbmV3bGluZXNfbGVhZGluZy5odG1s
IFsgRmFpbHVyZSBdCi1CdWcodGVzdCkgZmFpbHVyZXMvZXhwZWN0ZWQvbmV3bGluZXNfdHJhaWxp
bmcuaHRtbCBbIEZhaWx1cmUgXQotQnVnKHRlc3QpIGZhaWx1cmVzL2V4cGVjdGVkL25ld2xpbmVz
X3dpdGhfZXhjZXNzX0NSLmh0bWwgWyBGYWlsdXJlIF0KLUJ1Zyh0ZXN0KSBmYWlsdXJlcy9leHBl
Y3RlZC9yZWZ0ZXN0Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KLUJ1Zyh0ZXN0KSBmYWlsdXJl
cy9leHBlY3RlZC90ZXh0Lmh0bWwgWyBGYWlsdXJlIF0KLUJ1Zyh0ZXN0KSBmYWlsdXJlcy9leHBl
Y3RlZC90aW1lb3V0Lmh0bWwgWyBUaW1lb3V0IF0KLUJ1Zyh0ZXN0KSBmYWlsdXJlcy9leHBlY3Rl
ZC9oYW5nLmh0bWwgWyBXb250Rml4IF0KLUJ1Zyh0ZXN0KSBmYWlsdXJlcy9leHBlY3RlZC9rZXli
b2FyZC5odG1sIFsgV29udEZpeCBdCi1CdWcodGVzdCkgZmFpbHVyZXMvZXhwZWN0ZWQvZXhjZXB0
aW9uLmh0bWwgWyBXb250Rml4IF0KLUJ1Zyh0ZXN0KSBmYWlsdXJlcy91bmV4cGVjdGVkL3Bhc3Mu
aHRtbCBbIEZhaWx1cmUgXQotQnVnKHRlc3QpIHBhc3Nlcy9za2lwcGVkL3NraXAuaHRtbCBbIFNr
aXAgXQotIiIiKQotCi0gICAgZmlsZXN5c3RlbS5tYXliZV9tYWtlX2RpcmVjdG9yeShMQVlPVVRf
VEVTVF9ESVIgKyAnL3JlZnRlc3RzL2ZvbycpCi0gICAgZmlsZXN5c3RlbS53cml0ZV90ZXh0X2Zp
bGUoTEFZT1VUX1RFU1RfRElSICsgJy9yZWZ0ZXN0cy9mb28vcmVmdGVzdC5saXN0JywgIiIiCi09
PSB0ZXN0Lmh0bWwgdGVzdC1yZWYuaHRtbAotCi09PSBtdWx0aXBsZS1tYXRjaC1zdWNjZXNzLmh0
bWwgbWlzbWF0Y2hpbmctcmVmLmh0bWwKLT09IG11bHRpcGxlLW1hdGNoLXN1Y2Nlc3MuaHRtbCBt
YXRjaGluZy1yZWYuaHRtbAotPT0gbXVsdGlwbGUtbWF0Y2gtZmFpbHVyZS5odG1sIG1pc21hdGNo
aW5nLXJlZi5odG1sCi09PSBtdWx0aXBsZS1tYXRjaC1mYWlsdXJlLmh0bWwgc2Vjb25kLW1pc21h
dGNoaW5nLXJlZi5odG1sCi0hPSBtdWx0aXBsZS1taXNtYXRjaC1zdWNjZXNzLmh0bWwgbWlzbWF0
Y2hpbmctcmVmLmh0bWwKLSE9IG11bHRpcGxlLW1pc21hdGNoLXN1Y2Nlc3MuaHRtbCBzZWNvbmQt
bWlzbWF0Y2hpbmctcmVmLmh0bWwKLSE9IG11bHRpcGxlLW1pc21hdGNoLWZhaWx1cmUuaHRtbCBt
aXNtYXRjaGluZy1yZWYuaHRtbAotIT0gbXVsdGlwbGUtbWlzbWF0Y2gtZmFpbHVyZS5odG1sIG1h
dGNoaW5nLXJlZi5odG1sCi09PSBtdWx0aXBsZS1ib3RoLXN1Y2Nlc3MuaHRtbCBtYXRjaGluZy1y
ZWYuaHRtbAotPT0gbXVsdGlwbGUtYm90aC1zdWNjZXNzLmh0bWwgbWlzbWF0Y2hpbmctcmVmLmh0
bWwKLSE9IG11bHRpcGxlLWJvdGgtc3VjY2Vzcy5odG1sIHNlY29uZC1taXNtYXRjaGluZy1yZWYu
aHRtbAotPT0gbXVsdGlwbGUtYm90aC1mYWlsdXJlLmh0bWwgbWF0Y2hpbmctcmVmLmh0bWwKLSE9
IG11bHRpcGxlLWJvdGgtZmFpbHVyZS5odG1sIHNlY29uZC1taXNtYXRjaGluZy1yZWYuaHRtbAot
IT0gbXVsdGlwbGUtYm90aC1mYWlsdXJlLmh0bWwgbWF0Y2hpbmctcmVmLmh0bWwKLSIiIikKLQot
ICAgICMgRklYTUU6IFRoaXMgdGVzdCB3YXMgb25seSBiZWluZyBpZ25vcmVkIGJlY2F1c2Ugb2Yg
bWlzc2luZyBhIGxlYWRpbmcgJy8nLgotICAgICMgRml4aW5nIHRoZSB0eXBvIGNhdXNlcyBzZXZl
cmFsIHRlc3RzIHRvIGFzc2VydCwgc28gZGlzYWJsaW5nIHRoZSB0ZXN0IGVudGlyZWx5LgotICAg
ICMgQWRkIGluIGEgZmlsZSBzaG91bGQgYmUgaWdub3JlZCBieSBwb3J0LmZpbmRfdGVzdF9maWxl
cygpLgotICAgICNmaWxlc1tMQVlPVVRfVEVTVF9ESVIgKyAnL3VzZXJzY3JpcHRzL3Jlc291cmNl
cy9pZnJhbWUuaHRtbCddID0gJ2lmcmFtZScKLQotICAgIGRlZiBhZGRfZmlsZSh0ZXN0LCBzdWZm
aXgsIGNvbnRlbnRzKToKLSAgICAgICAgZGlybmFtZSA9IGZpbGVzeXN0ZW0uam9pbihMQVlPVVRf
VEVTVF9ESVIsIHRlc3QubmFtZVswOnRlc3QubmFtZS5yZmluZCgnLycpXSkKLSAgICAgICAgYmFz
ZSA9IHRlc3QuYmFzZQotICAgICAgICBmaWxlc3lzdGVtLm1heWJlX21ha2VfZGlyZWN0b3J5KGRp
cm5hbWUpCi0gICAgICAgIGZpbGVzeXN0ZW0ud3JpdGVfYmluYXJ5X2ZpbGUoZmlsZXN5c3RlbS5q
b2luKGRpcm5hbWUsIGJhc2UgKyBzdWZmaXgpLCBjb250ZW50cykKLQotICAgICMgQWRkIGVhY2gg
dGVzdCBhbmQgdGhlIGV4cGVjdGVkIG91dHB1dCwgaWYgYW55LgotICAgIHRlc3RfbGlzdCA9IHVu
aXRfdGVzdF9saXN0KCkKLSAgICBmb3IgdGVzdCBpbiB0ZXN0X2xpc3QudGVzdHMudmFsdWVzKCk6
Ci0gICAgICAgIGFkZF9maWxlKHRlc3QsIHRlc3QubmFtZVt0ZXN0Lm5hbWUucmZpbmQoJy4nKTpd
LCAnJykKLSAgICAgICAgaWYgdGVzdC5pc19yZWZ0ZXN0OgotICAgICAgICAgICAgY29udGludWUK
LSAgICAgICAgaWYgdGVzdC5hY3R1YWxfYXVkaW86Ci0gICAgICAgICAgICBhZGRfZmlsZSh0ZXN0
LCAnLWV4cGVjdGVkLndhdicsIHRlc3QuZXhwZWN0ZWRfYXVkaW8pCi0gICAgICAgICAgICBjb250
aW51ZQotICAgICAgICBhZGRfZmlsZSh0ZXN0LCAnLWV4cGVjdGVkLnR4dCcsIHRlc3QuZXhwZWN0
ZWRfdGV4dCkKLSAgICAgICAgYWRkX2ZpbGUodGVzdCwgJy1leHBlY3RlZC5wbmcnLCB0ZXN0LmV4
cGVjdGVkX2ltYWdlKQotCi0gICAgZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoZmlsZXN5c3Rl
bS5qb2luKExBWU9VVF9URVNUX0RJUiwgJ3ZpcnR1YWwnLCAncGFzc2VzJywgJ2FyZ3MtZXhwZWN0
ZWQudHh0JyksICdhcmdzLXR4dCAtLXZpcnR1YWwtYXJnJykKLSAgICAjIENsZWFyIHRoZSBsaXN0
IG9mIHdyaXR0ZW4gZmlsZXMgc28gdGhhdCB3ZSBjYW4gd2F0Y2ggd2hhdCBoYXBwZW5zIGR1cmlu
ZyB0ZXN0aW5nLgotICAgIGZpbGVzeXN0ZW0uY2xlYXJfd3JpdHRlbl9maWxlcygpCi0KLQotY2xh
c3MgVGVzdFBvcnQoUG9ydCk6Ci0gICAgcG9ydF9uYW1lID0gJ3Rlc3QnCi0gICAgZGVmYXVsdF9w
b3J0X25hbWUgPSAndGVzdC1tYWMtbGVvcGFyZCcKLQotICAgICIiIlRlc3QgaW1wbGVtZW50YXRp
b24gb2YgdGhlIFBvcnQgaW50ZXJmYWNlLiIiIgotICAgIEFMTF9CQVNFTElORV9WQVJJQU5UUyA9
ICgKLSAgICAgICAgJ3Rlc3QtbGludXgteDg2XzY0JywKLSAgICAgICAgJ3Rlc3QtbWFjLXNub3ds
ZW9wYXJkJywgJ3Rlc3QtbWFjLWxlb3BhcmQnLAotICAgICAgICAndGVzdC13aW4tdmlzdGEnLCAn
dGVzdC13aW4td2luNycsICd0ZXN0LXdpbi14cCcsCi0gICAgKQotCi0gICAgQGNsYXNzbWV0aG9k
Ci0gICAgZGVmIGRldGVybWluZV9mdWxsX3BvcnRfbmFtZShjbHMsIGhvc3QsIG9wdGlvbnMsIHBv
cnRfbmFtZSk6Ci0gICAgICAgIGlmIHBvcnRfbmFtZSA9PSAndGVzdCc6Ci0gICAgICAgICAgICBy
ZXR1cm4gVGVzdFBvcnQuZGVmYXVsdF9wb3J0X25hbWUKLSAgICAgICAgcmV0dXJuIHBvcnRfbmFt
ZQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZT1Ob25lLCAqKmt3YXJn
cyk6Ci0gICAgICAgIFBvcnQuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lIG9yIFRlc3RQ
b3J0LmRlZmF1bHRfcG9ydF9uYW1lLCAqKmt3YXJncykKLSAgICAgICAgc2VsZi5fdGVzdHMgPSB1
bml0X3Rlc3RfbGlzdCgpCi0gICAgICAgIHNlbGYuX2ZsYWtlcyA9IHNldCgpCi0gICAgICAgIHNl
bGYuX2V4cGVjdGF0aW9uc19wYXRoID0gTEFZT1VUX1RFU1RfRElSICsgJy9wbGF0Zm9ybS90ZXN0
L1Rlc3RFeHBlY3RhdGlvbnMnCi0gICAgICAgIHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5ID0gTm9u
ZQotCi0gICAgICAgIHNlbGYuX29wZXJhdGluZ19zeXN0ZW0gPSAnbWFjJwotICAgICAgICBpZiBz
ZWxmLl9uYW1lLnN0YXJ0c3dpdGgoJ3Rlc3Qtd2luJyk6Ci0gICAgICAgICAgICBzZWxmLl9vcGVy
YXRpbmdfc3lzdGVtID0gJ3dpbicKLSAgICAgICAgZWxpZiBzZWxmLl9uYW1lLnN0YXJ0c3dpdGgo
J3Rlc3QtbGludXgnKToKLSAgICAgICAgICAgIHNlbGYuX29wZXJhdGluZ19zeXN0ZW0gPSAnbGlu
dXgnCi0KLSAgICAgICAgdmVyc2lvbl9tYXAgPSB7Ci0gICAgICAgICAgICAndGVzdC13aW4teHAn
OiAneHAnLAotICAgICAgICAgICAgJ3Rlc3Qtd2luLXdpbjcnOiAnd2luNycsCi0gICAgICAgICAg
ICAndGVzdC13aW4tdmlzdGEnOiAndmlzdGEnLAotICAgICAgICAgICAgJ3Rlc3QtbWFjLWxlb3Bh
cmQnOiAnbGVvcGFyZCcsCi0gICAgICAgICAgICAndGVzdC1tYWMtc25vd2xlb3BhcmQnOiAnc25v
d2xlb3BhcmQnLAotICAgICAgICAgICAgJ3Rlc3QtbGludXgteDg2XzY0JzogJ2x1Y2lkJywKLSAg
ICAgICAgfQotICAgICAgICBzZWxmLl92ZXJzaW9uID0gdmVyc2lvbl9tYXBbc2VsZi5fbmFtZV0K
LQotICAgIGRlZiBkZWZhdWx0X3BpeGVsX3Rlc3RzKHNlbGYpOgotICAgICAgICByZXR1cm4gVHJ1
ZQotCi0gICAgZGVmIF9wYXRoX3RvX2RyaXZlcihzZWxmKToKLSAgICAgICAgIyBUaGlzIHJvdXRp
bmUgc2hvdWxkbid0IG5vcm1hbGx5IGJlIGNhbGxlZCwgYnV0IGl0IGlzIGNhbGxlZCBieQotICAg
ICAgICAjIHRoZSBtb2NrX2RydCBEcml2ZXIuIFdlIHJldHVybiBzb21ldGhpbmcsIGJ1dCBtYWtl
IHN1cmUgaXQncyB1c2VsZXNzLgotICAgICAgICByZXR1cm4gJ01PQ0sgX3BhdGhfdG9fZHJpdmVy
JwotCi0gICAgZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgotICAgICAgICBzZWFyY2hf
cGF0aHMgPSB7Ci0gICAgICAgICAgICAndGVzdC1tYWMtc25vd2xlb3BhcmQnOiBbJ3Rlc3QtbWFj
LXNub3dsZW9wYXJkJ10sCi0gICAgICAgICAgICAndGVzdC1tYWMtbGVvcGFyZCc6IFsndGVzdC1t
YWMtbGVvcGFyZCcsICd0ZXN0LW1hYy1zbm93bGVvcGFyZCddLAotICAgICAgICAgICAgJ3Rlc3Qt
d2luLXdpbjcnOiBbJ3Rlc3Qtd2luLXdpbjcnXSwKLSAgICAgICAgICAgICd0ZXN0LXdpbi12aXN0
YSc6IFsndGVzdC13aW4tdmlzdGEnLCAndGVzdC13aW4td2luNyddLAotICAgICAgICAgICAgJ3Rl
c3Qtd2luLXhwJzogWyd0ZXN0LXdpbi14cCcsICd0ZXN0LXdpbi12aXN0YScsICd0ZXN0LXdpbi13
aW43J10sCi0gICAgICAgICAgICAndGVzdC1saW51eC14ODZfNjQnOiBbJ3Rlc3QtbGludXgnLCAn
dGVzdC13aW4td2luNyddLAotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBbc2VsZi5fd2Via2l0
X2Jhc2VsaW5lX3BhdGgoZCkgZm9yIGQgaW4gc2VhcmNoX3BhdGhzW3NlbGYubmFtZSgpXV0KLQot
ICAgIGRlZiBkZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIDEK
LQotICAgIGRlZiB3b3JrZXJfc3RhcnR1cF9kZWxheV9zZWNzKHNlbGYpOgotICAgICAgICByZXR1
cm4gMAotCi0gICAgZGVmIGNoZWNrX2J1aWxkKHNlbGYsIG5lZWRzX2h0dHApOgotICAgICAgICBy
ZXR1cm4gVHJ1ZQotCi0gICAgZGVmIGNoZWNrX3N5c19kZXBzKHNlbGYsIG5lZWRzX2h0dHApOgot
ICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIGRlZmF1bHRfY29uZmlndXJhdGlvbihzZWxm
KToKLSAgICAgICAgcmV0dXJuICdSZWxlYXNlJwotCi0gICAgZGVmIGRpZmZfaW1hZ2Uoc2VsZiwg
ZXhwZWN0ZWRfY29udGVudHMsIGFjdHVhbF9jb250ZW50cywgdG9sZXJhbmNlPU5vbmUpOgotICAg
ICAgICBkaWZmZWQgPSBhY3R1YWxfY29udGVudHMgIT0gZXhwZWN0ZWRfY29udGVudHMKLSAgICAg
ICAgaWYgbm90IGFjdHVhbF9jb250ZW50cyBhbmQgbm90IGV4cGVjdGVkX2NvbnRlbnRzOgotICAg
ICAgICAgICAgcmV0dXJuIChOb25lLCAwLCBOb25lKQotICAgICAgICBpZiBub3QgYWN0dWFsX2Nv
bnRlbnRzIG9yIG5vdCBleHBlY3RlZF9jb250ZW50czoKLSAgICAgICAgICAgIHJldHVybiAoVHJ1
ZSwgMCwgTm9uZSkKLSAgICAgICAgaWYgJ3JlZicgaW4gZXhwZWN0ZWRfY29udGVudHM6Ci0gICAg
ICAgICAgICBhc3NlcnQgdG9sZXJhbmNlID09IDAKLSAgICAgICAgaWYgZGlmZmVkOgotICAgICAg
ICAgICAgcmV0dXJuICgiPCAlc1xuLS0tXG4+ICVzXG4iICUgKGV4cGVjdGVkX2NvbnRlbnRzLCBh
Y3R1YWxfY29udGVudHMpLCAxLCBOb25lKQotICAgICAgICByZXR1cm4gKE5vbmUsIDAsIE5vbmUp
Ci0KLSAgICBkZWYgbGF5b3V0X3Rlc3RzX2RpcihzZWxmKToKLSAgICAgICAgcmV0dXJuIExBWU9V
VF9URVNUX0RJUgotCi0gICAgZGVmIHBlcmZfdGVzdHNfZGlyKHNlbGYpOgotICAgICAgICByZXR1
cm4gUEVSRl9URVNUX0RJUgotCi0gICAgZGVmIHdlYmtpdF9iYXNlKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gJy90ZXN0LmNoZWNrb3V0JwotCi0gICAgZGVmIF9za2lwcGVkX3Rlc3RzX2Zvcl91bnN1
cHBvcnRlZF9mZWF0dXJlcyhzZWxmLCB0ZXN0X2xpc3QpOgotICAgICAgICByZXR1cm4gc2V0KFsn
ZmFpbHVyZXMvZXhwZWN0ZWQvc2tpcF90ZXh0Lmh0bWwnLAotICAgICAgICAgICAgICAgICAgICAn
ZmFpbHVyZXMvdW5leHBlY3RlZC9za2lwX3Bhc3MuaHRtbCcsCi0gICAgICAgICAgICAgICAgICAg
ICd2aXJ0dWFsL3NraXBwZWQnXSkKLQotICAgIGRlZiBuYW1lKHNlbGYpOgotICAgICAgICByZXR1
cm4gc2VsZi5fbmFtZQotCi0gICAgZGVmIG9wZXJhdGluZ19zeXN0ZW0oc2VsZik6Ci0gICAgICAg
IHJldHVybiBzZWxmLl9vcGVyYXRpbmdfc3lzdGVtCi0KLSAgICBkZWYgX3BhdGhfdG9fd2RpZmYo
c2VsZik6Ci0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICBkZWYgZGVmYXVsdF9yZXN1bHRzX2Rp
cmVjdG9yeShzZWxmKToKLSAgICAgICAgcmV0dXJuICcvdG1wL2xheW91dC10ZXN0LXJlc3VsdHMn
Ci0KLSAgICBkZWYgc2V0dXBfdGVzdF9ydW4oc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRl
ZiBfZHJpdmVyX2NsYXNzKHNlbGYpOgotICAgICAgICByZXR1cm4gVGVzdERyaXZlcgotCi0gICAg
ZGVmIHN0YXJ0X2h0dHBfc2VydmVyKHNlbGYsIGFkZGl0aW9uYWxfZGlycz1Ob25lLCBudW1iZXJf
b2Zfc2VydmVycz1Ob25lKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHN0YXJ0X3dlYnNvY2tl
dF9zZXJ2ZXIoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBhY3F1aXJlX2h0dHBfbG9j
ayhzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHN0b3BfaHR0cF9zZXJ2ZXIoc2VsZik6
Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBzdG9wX3dlYnNvY2tldF9zZXJ2ZXIoc2VsZik6Ci0g
ICAgICAgIHBhc3MKLQotICAgIGRlZiByZWxlYXNlX2h0dHBfbG9jayhzZWxmKToKLSAgICAgICAg
cGFzcwotCi0gICAgZGVmIF9wYXRoX3RvX2xpZ2h0dHBkKHNlbGYpOgotICAgICAgICByZXR1cm4g
Ii91c3Ivc2Jpbi9saWdodHRwZCIKLQotICAgIGRlZiBfcGF0aF90b19saWdodHRwZF9tb2R1bGVz
KHNlbGYpOgotICAgICAgICByZXR1cm4gIi91c3IvbGliL2xpZ2h0dHBkIgotCi0gICAgZGVmIF9w
YXRoX3RvX2xpZ2h0dHBkX3BocChzZWxmKToKLSAgICAgICAgcmV0dXJuICIvdXNyL2Jpbi9waHAt
Y2dpIgotCi0gICAgZGVmIF9wYXRoX3RvX2FwYWNoZShzZWxmKToKLSAgICAgICAgcmV0dXJuICIv
dXNyL3NiaW4vaHR0cGQiCi0KLSAgICBkZWYgX3BhdGhfdG9fYXBhY2hlX2NvbmZpZ19maWxlKHNl
bGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYubGF5b3V0X3Rl
c3RzX2RpcigpLCAnaHR0cCcsICdjb25mJywgJ2h0dHBkLmNvbmYnKQotCi0gICAgZGVmIHBhdGhf
dG9fdGVzdF9leHBlY3RhdGlvbnNfZmlsZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2V4
cGVjdGF0aW9uc19wYXRoCi0KLSAgICBkZWYgYWxsX3Rlc3RfY29uZmlndXJhdGlvbnMoc2VsZik6
Ci0gICAgICAgICIiIlJldHVybnMgYSBzZXF1ZW5jZSBvZiB0aGUgVGVzdENvbmZpZ3VyYXRpb25z
IHRoZSBwb3J0IHN1cHBvcnRzLiIiIgotICAgICAgICAjIEJ5IGRlZmF1bHQsIHdlIGFzc3VtZSB3
ZSB3YW50IHRvIHRlc3QgZXZlcnkgZ3JhcGhpY3MgdHlwZSBpbgotICAgICAgICAjIGV2ZXJ5IGNv
bmZpZ3VyYXRpb24gb24gZXZlcnkgc3lzdGVtLgotICAgICAgICB0ZXN0X2NvbmZpZ3VyYXRpb25z
ID0gW10KLSAgICAgICAgZm9yIHZlcnNpb24sIGFyY2hpdGVjdHVyZSBpbiBzZWxmLl9hbGxfc3lz
dGVtcygpOgotICAgICAgICAgICAgZm9yIGJ1aWxkX3R5cGUgaW4gc2VsZi5fYWxsX2J1aWxkX3R5
cGVzKCk6Ci0gICAgICAgICAgICAgICAgdGVzdF9jb25maWd1cmF0aW9ucy5hcHBlbmQoVGVzdENv
bmZpZ3VyYXRpb24oCi0gICAgICAgICAgICAgICAgICAgIHZlcnNpb249dmVyc2lvbiwKLSAgICAg
ICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlPWFyY2hpdGVjdHVyZSwKLSAgICAgICAgICAgICAg
ICAgICAgYnVpbGRfdHlwZT1idWlsZF90eXBlKSkKLSAgICAgICAgcmV0dXJuIHRlc3RfY29uZmln
dXJhdGlvbnMKLQotICAgIGRlZiBfYWxsX3N5c3RlbXMoc2VsZik6Ci0gICAgICAgIHJldHVybiAo
KCdsZW9wYXJkJywgJ3g4NicpLAotICAgICAgICAgICAgICAgICgnc25vd2xlb3BhcmQnLCAneDg2
JyksCi0gICAgICAgICAgICAgICAgKCd4cCcsICd4ODYnKSwKLSAgICAgICAgICAgICAgICAoJ3Zp
c3RhJywgJ3g4NicpLAotICAgICAgICAgICAgICAgICgnd2luNycsICd4ODYnKSwKLSAgICAgICAg
ICAgICAgICAoJ2x1Y2lkJywgJ3g4NicpLAotICAgICAgICAgICAgICAgICgnbHVjaWQnLCAneDg2
XzY0JykpCi0KLSAgICBkZWYgX2FsbF9idWlsZF90eXBlcyhzZWxmKToKLSAgICAgICAgcmV0dXJu
ICgnZGVidWcnLCAncmVsZWFzZScpCi0KLSAgICBkZWYgY29uZmlndXJhdGlvbl9zcGVjaWZpZXJf
bWFjcm9zKHNlbGYpOgotICAgICAgICAiIiJUbyBhdm9pZCBzdXJwcmlzZXMgd2hlbiBpbnRyb2R1
Y2luZyBuZXcgbWFjcm9zLCB0aGVzZSBhcmUgaW50ZW50aW9uYWxseSBmaXhlZCBpbiB0aW1lLiIi
IgotICAgICAgICByZXR1cm4geydtYWMnOiBbJ2xlb3BhcmQnLCAnc25vd2xlb3BhcmQnXSwgJ3dp
bic6IFsneHAnLCAndmlzdGEnLCAnd2luNyddLCAnbGludXgnOiBbJ2x1Y2lkJ119Ci0KLSAgICBk
ZWYgYWxsX2Jhc2VsaW5lX3ZhcmlhbnRzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5BTExf
QkFTRUxJTkVfVkFSSUFOVFMKLQotICAgIGRlZiB2aXJ0dWFsX3Rlc3Rfc3VpdGVzKHNlbGYpOgot
ICAgICAgICByZXR1cm4gWwotICAgICAgICAgICAgVmlydHVhbFRlc3RTdWl0ZSgndmlydHVhbC9w
YXNzZXMnLCAncGFzc2VzJywgWyctLXZpcnR1YWwtYXJnJ10pLAotICAgICAgICAgICAgVmlydHVh
bFRlc3RTdWl0ZSgndmlydHVhbC9za2lwcGVkJywgJ2ZhaWx1cmVzL2V4cGVjdGVkJywgWyctLXZp
cnR1YWwtYXJnMiddKSwKLSAgICAgICAgXQotCi0KLWNsYXNzIFRlc3REcml2ZXIoRHJpdmVyKToK
LSAgICAiIiJUZXN0L0R1bW15IGltcGxlbWVudGF0aW9uIG9mIHRoZSBEdW1wUmVuZGVyVHJlZSBp
bnRlcmZhY2UuIiIiCi0gICAgbmV4dF9waWQgPSAxCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwg
KmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgc3VwZXIoVGVzdERyaXZlciwgc2VsZikuX19pbml0
X18oKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICBzZWxmLnN0YXJ0ZWQgPSBGYWxzZQotICAgICAg
ICBzZWxmLnBpZCA9IDAKLQotICAgIGRlZiBjbWRfbGluZShzZWxmLCBwaXhlbF90ZXN0cywgcGVy
X3Rlc3RfYXJncyk6Ci0gICAgICAgIHBpeGVsX3Rlc3RzX2ZsYWcgPSAnLXAnIGlmIHBpeGVsX3Rl
c3RzIGVsc2UgJycKLSAgICAgICAgcmV0dXJuIFtzZWxmLl9wb3J0Ll9wYXRoX3RvX2RyaXZlcigp
XSArIFtwaXhlbF90ZXN0c19mbGFnXSArIHNlbGYuX3BvcnQuZ2V0X29wdGlvbignYWRkaXRpb25h
bF9kcnRfZmxhZycsIFtdKSArIHBlcl90ZXN0X2FyZ3MKLQotICAgIGRlZiBydW5fdGVzdChzZWxm
LCB0ZXN0X2lucHV0LCBzdG9wX3doZW5fZG9uZSk6Ci0gICAgICAgIGlmIG5vdCBzZWxmLnN0YXJ0
ZWQ6Ci0gICAgICAgICAgICBzZWxmLnN0YXJ0ZWQgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLnBp
ZCA9IFRlc3REcml2ZXIubmV4dF9waWQKLSAgICAgICAgICAgIFRlc3REcml2ZXIubmV4dF9waWQg
Kz0gMQotCi0gICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICB0ZXN0X25h
bWUgPSB0ZXN0X2lucHV0LnRlc3RfbmFtZQotICAgICAgICB0ZXN0X2FyZ3MgPSB0ZXN0X2lucHV0
LmFyZ3Mgb3IgW10KLSAgICAgICAgdGVzdCA9IHNlbGYuX3BvcnQuX3Rlc3RzW3Rlc3RfbmFtZV0K
LSAgICAgICAgaWYgdGVzdC5rZXlib2FyZDoKLSAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50
ZXJydXB0Ci0gICAgICAgIGlmIHRlc3QuZXhjZXB0aW9uOgotICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcignZXhjZXB0aW9uIGZyb20gJyArIHRlc3RfbmFtZSkKLSAgICAgICAgaWYgdGVzdC5o
YW5nOgotICAgICAgICAgICAgdGltZS5zbGVlcCgoZmxvYXQodGVzdF9pbnB1dC50aW1lb3V0KSAq
IDQpIC8gMTAwMC4wICsgMS4wKSAgIyBUaGUgMS4wIGNvbWVzIGZyb20gdGhyZWFkX3BhZGRpbmdf
c2VjIGluIGxheW91dF90ZXN0X3J1bm5lcnkuCi0KLSAgICAgICAgYXVkaW8gPSBOb25lCi0gICAg
ICAgIGFjdHVhbF90ZXh0ID0gdGVzdC5hY3R1YWxfdGV4dAotCi0gICAgICAgIGlmICdmbGFreScg
aW4gdGVzdF9uYW1lIGFuZCBub3QgdGVzdF9uYW1lIGluIHNlbGYuX3BvcnQuX2ZsYWtlczoKLSAg
ICAgICAgICAgIHNlbGYuX3BvcnQuX2ZsYWtlcy5hZGQodGVzdF9uYW1lKQotICAgICAgICAgICAg
YWN0dWFsX3RleHQgPSAnZmxha3kgdGV4dCBmYWlsdXJlJwotCi0gICAgICAgIGlmIGFjdHVhbF90
ZXh0IGFuZCB0ZXN0X2FyZ3MgYW5kIHRlc3RfbmFtZSA9PSAncGFzc2VzL2FyZ3MuaHRtbCc6Ci0g
ICAgICAgICAgICBhY3R1YWxfdGV4dCA9IGFjdHVhbF90ZXh0ICsgJyAnICsgJyAnLmpvaW4odGVz
dF9hcmdzKQotCi0gICAgICAgIGlmIHRlc3QuYWN0dWFsX2F1ZGlvOgotICAgICAgICAgICAgYXVk
aW8gPSBiYXNlNjQuYjY0ZGVjb2RlKHRlc3QuYWN0dWFsX2F1ZGlvKQotICAgICAgICBjcmFzaGVk
X3Byb2Nlc3NfbmFtZSA9IE5vbmUKLSAgICAgICAgY3Jhc2hlZF9waWQgPSBOb25lCi0gICAgICAg
IGlmIHRlc3QuY3Jhc2g6Ci0gICAgICAgICAgICBjcmFzaGVkX3Byb2Nlc3NfbmFtZSA9IHNlbGYu
X3BvcnQuZHJpdmVyX25hbWUoKQotICAgICAgICAgICAgY3Jhc2hlZF9waWQgPSAxCi0gICAgICAg
IGVsaWYgdGVzdC53ZWJfcHJvY2Vzc19jcmFzaDoKLSAgICAgICAgICAgIGNyYXNoZWRfcHJvY2Vz
c19uYW1lID0gJ1dlYlByb2Nlc3MnCi0gICAgICAgICAgICBjcmFzaGVkX3BpZCA9IDIKLQotICAg
ICAgICBjcmFzaF9sb2cgPSAnJwotICAgICAgICBpZiBjcmFzaGVkX3Byb2Nlc3NfbmFtZToKLSAg
ICAgICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3Moc2VsZi5fcG9ydC5ob3N0KQotICAgICAg
ICAgICAgY3Jhc2hfbG9nID0gY3Jhc2hfbG9ncy5maW5kX25ld2VzdF9sb2coY3Jhc2hlZF9wcm9j
ZXNzX25hbWUsIE5vbmUpIG9yICcnCi0KLSAgICAgICAgaWYgc3RvcF93aGVuX2RvbmU6Ci0gICAg
ICAgICAgICBzZWxmLnN0b3AoKQotCi0gICAgICAgIGlmIHRlc3QuYWN0dWFsX2NoZWNrc3VtID09
IHRlc3RfaW5wdXQuaW1hZ2VfaGFzaDoKLSAgICAgICAgICAgIGltYWdlID0gTm9uZQotICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgaW1hZ2UgPSB0ZXN0LmFjdHVhbF9pbWFnZQotICAgICAgICBy
ZXR1cm4gRHJpdmVyT3V0cHV0KGFjdHVhbF90ZXh0LCBpbWFnZSwgdGVzdC5hY3R1YWxfY2hlY2tz
dW0sIGF1ZGlvLAotICAgICAgICAgICAgY3Jhc2g9dGVzdC5jcmFzaCBvciB0ZXN0LndlYl9wcm9j
ZXNzX2NyYXNoLCBjcmFzaGVkX3Byb2Nlc3NfbmFtZT1jcmFzaGVkX3Byb2Nlc3NfbmFtZSwKLSAg
ICAgICAgICAgIGNyYXNoZWRfcGlkPWNyYXNoZWRfcGlkLCBjcmFzaF9sb2c9Y3Jhc2hfbG9nLAot
ICAgICAgICAgICAgdGVzdF90aW1lPXRpbWUudGltZSgpIC0gc3RhcnRfdGltZSwgdGltZW91dD10
ZXN0LnRpbWVvdXQsIGVycm9yPXRlc3QuZXJyb3IsIHBpZD1zZWxmLnBpZCkKLQotICAgIGRlZiBz
dG9wKHNlbGYpOgotICAgICAgICBzZWxmLnN0YXJ0ZWQgPSBGYWxzZQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93aW4ucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93aW4ucHkJKHJldmlzaW9uIDE0
ODQ5NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2luLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMCArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBH
b29nbGUgbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0j
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBsb2dn
aW5nCi1pbXBvcnQgcmUKLWltcG9ydCBzeXMKLQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LnN5c3RlbWhvc3QgaW1wb3J0IFN5c3RlbUhvc3QKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yLCBFeGVjdXRpdmUKLWZyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbS5wYXRoIGltcG9ydCBhYnNwYXRoX3RvX3VyaQotZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMucG9ydC5hcHBsZSBpbXBvcnQgQXBwbGVQb3J0Ci0KLQotX2xvZyA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQotCi0KLWNsYXNzIFdpblBvcnQoQXBwbGVQb3J0KToKLSAg
ICBwb3J0X25hbWUgPSAid2luIgotCi0gICAgVkVSU0lPTl9GQUxMQkFDS19PUkRFUiA9IFsid2lu
LXhwIiwgIndpbi12aXN0YSIsICJ3aW4tN3NwMCIsICJ3aW4td2luNyJdCi0KLSAgICBBUkNISVRF
Q1RVUkVTID0gWyd4ODYnXQotCi0gICAgZGVmIGRvX3RleHRfcmVzdWx0c19kaWZmZXIoc2VsZiwg
ZXhwZWN0ZWRfdGV4dCwgYWN0dWFsX3RleHQpOgotICAgICAgICAjIFNhbml0eSB3YXMgcmVzdG9y
ZWQgaW4gV0syLCBzbyB3ZSBkb24ndCBuZWVkIHRoaXMgaGFjayB0aGVyZS4KLSAgICAgICAgaWYg
c2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9ydW5uZXInKToKLSAgICAgICAgICAgIHJldHVy
biBBcHBsZVBvcnQuZG9fdGV4dF9yZXN1bHRzX2RpZmZlcihzZWxmLCBleHBlY3RlZF90ZXh0LCBh
Y3R1YWxfdGV4dCkKLQotICAgICAgICAjIFRoaXMgaXMgYSBoYWNrICh3aGljaCBkYXRlcyBiYWNr
IHRvIE9SV1QpLgotICAgICAgICAjIFdpbmRvd3MgZG9lcyBub3QgaGF2ZSBhbiBFRElUSU5HIERF
TEVHQVRFLCBzbyB3ZSBzdHJpcCBhbnkgRURJVElORyBERUxFR0FURQotICAgICAgICAjIG1lc3Nh
Z2VzIHRvIG1ha2UgbW9yZSBvZiB0aGUgdGVzdHMgcGFzcy4KLSAgICAgICAgIyBJdCdzIHBvc3Np
YmxlIG1vcmUgb2YgdGhlIHBvcnRzIG1pZ2h0IHdhbnQgdGhpcyBhbmQgdGhpcyBjb3VsZCBtb3Zl
IGRvd24gaW50byBXZWJLaXRQb3J0LgotICAgICAgICBkZWxlZ2F0ZV9yZWdleHAgPSByZS5jb21w
aWxlKCJeRURJVElORyBERUxFR0FURTogLio/XG4iLCByZS5NVUxUSUxJTkUpCi0gICAgICAgIGV4
cGVjdGVkX3RleHQgPSBkZWxlZ2F0ZV9yZWdleHAuc3ViKCIiLCBleHBlY3RlZF90ZXh0KQotICAg
ICAgICBhY3R1YWxfdGV4dCA9IGRlbGVnYXRlX3JlZ2V4cC5zdWIoIiIsIGFjdHVhbF90ZXh0KQot
ICAgICAgICByZXR1cm4gZXhwZWN0ZWRfdGV4dCAhPSBhY3R1YWxfdGV4dAotCi0gICAgZGVmIGRl
ZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6Ci0gICAgICAgIG5hbWUgPSBzZWxmLl9u
YW1lLnJlcGxhY2UoJy13azInLCAnJykKLSAgICAgICAgaWYgbmFtZS5lbmRzd2l0aChzZWxmLkZV
VFVSRV9WRVJTSU9OKToKLSAgICAgICAgICAgIGZhbGxiYWNrX25hbWVzID0gW3NlbGYucG9ydF9u
YW1lXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZmFsbGJhY2tfbmFtZXMgPSBzZWxmLlZF
UlNJT05fRkFMTEJBQ0tfT1JERVJbc2VsZi5WRVJTSU9OX0ZBTExCQUNLX09SREVSLmluZGV4KG5h
bWUpOi0xXSArIFtzZWxmLnBvcnRfbmFtZV0KLSAgICAgICAgIyBGSVhNRTogVGhlIEFwcGxlV2lu
IHBvcnQgZmFsbHMgYmFjayB0byBBcHBsZU1hYyBmb3Igc29tZSByZXN1bHRzLiAgRXZlbnR1YWxs
eSB3ZSdsbCBoYXZlIGEgc2hhcmVkICdhcHBsZScgcG9ydC4KLSAgICAgICAgaWYgc2VsZi5nZXRf
b3B0aW9uKCd3ZWJraXRfdGVzdF9ydW5uZXInKToKLSAgICAgICAgICAgIGZhbGxiYWNrX25hbWVz
Lmluc2VydCgwLCAnd2luLXdrMicpCi0gICAgICAgICAgICBmYWxsYmFja19uYW1lcy5hcHBlbmQo
J21hYy13azInKQotICAgICAgICAgICAgIyBOb3RlIHdlIGRvIG5vdCBhZGQgJ3drMicgaGVyZSwg
ZXZlbiB0aG91Z2ggaXQncyBpbmNsdWRlZCBpbiBfc2tpcHBlZF9zZWFyY2hfcGF0aHMoKS4KLSAg
ICAgICAgIyBGSVhNRTogUGVyaGFwcyB3ZSBzaG91bGQgZ2V0IHRoaXMgbGlzdCBmcm9tIE1hY1Bv
cnQ/Ci0gICAgICAgIGZhbGxiYWNrX25hbWVzLmV4dGVuZChbJ21hYy1saW9uJywgJ21hYyddKQot
ICAgICAgICByZXR1cm4gbWFwKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoLCBmYWxsYmFja19u
YW1lcykKLQotICAgIGRlZiBvcGVyYXRpbmdfc3lzdGVtKHNlbGYpOgotICAgICAgICByZXR1cm4g
J3dpbicKLQotICAgIGRlZiBzaG93X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYsIHJlc3VsdHNfZmls
ZW5hbWUpOgotICAgICAgICBzZWxmLl9ydW5fc2NyaXB0KCdydW4tc2FmYXJpJywgW2Fic3BhdGhf
dG9fdXJpKFN5c3RlbUhvc3QoKS5wbGF0Zm9ybSwgcmVzdWx0c19maWxlbmFtZSldKQotCi0gICAg
IyBGSVhNRTogd2Via2l0cGVybC9odHRwZC5wbSBpbnN0YWxscyAvdXNyL2xpYi9hcGFjaGUvbGli
cGhwNC5kbGwgb24gY3ljd2luIGF1dG9tYXRpY2FsbHkKLSAgICAjIGFzIHBhcnQgb2YgcnVubmlu
ZyBvbGQtcnVuLXdlYmtpdC10ZXN0cy4gIFRoYXQncyBiYWQgZGVzaWduLCBidXQgd2UgbWF5IG5l
ZWQgc29tZSBzaW1pbGFyIGhhY2suCi0gICAgIyBXZSBtaWdodCB1c2Ugc2V0dXBfZW52aXJvbl9m
b3Jfc2VydmVyIGZvciBzdWNoIGEgaGFjayAob3IgbW9kaWZ5IGFwYWNoZV9odHRwX3NlcnZlci5w
eSkuCi0KLSAgICBkZWYgX3J1bnRpbWVfZmVhdHVyZV9saXN0KHNlbGYpOgotICAgICAgICBzdXBw
b3J0ZWRfZmVhdHVyZXNfY29tbWFuZCA9IFtzZWxmLl9wYXRoX3RvX2RyaXZlcigpLCAnLS1wcmlu
dC1zdXBwb3J0ZWQtZmVhdHVyZXMnXQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvdXRwdXQg
PSBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoc3VwcG9ydGVkX2ZlYXR1cmVzX2NvbW1hbmQs
IGVycm9yX2hhbmRsZXI9RXhlY3V0aXZlLmlnbm9yZV9lcnJvcikKLSAgICAgICAgZXhjZXB0IE9T
RXJyb3IsIGU6Ci0gICAgICAgICAgICBfbG9nLndhcm4oIkV4Y2VwdGlvbiBydW5uaW5nIGRyaXZl
cjogJXMsICVzLiAgRHJpdmVyIG11c3QgYmUgYnVpbHQgYmVmb3JlIGNhbGxpbmcgV2ViS2l0UG9y
dC50ZXN0X2V4cGVjdGF0aW9ucygpLiIgJSAoc3VwcG9ydGVkX2ZlYXR1cmVzX2NvbW1hbmQsIGUp
KQotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICAjIE5vdGU6IHdpbi9EdW1wUmVu
ZGVyVHJlZS5jcHAgZG9lcyBub3QgcHJpbnQgYSBsZWFkaW5nIHNwYWNlIGJlZm9yZSB0aGUgZmVh
dHVyZXNfc3RyaW5nLgotICAgICAgICBtYXRjaF9vYmplY3QgPSByZS5tYXRjaCgiU3VwcG9ydGVk
RmVhdHVyZXM6XHMqKD9QPGZlYXR1cmVzX3N0cmluZz4uKilccyoiLCBvdXRwdXQpCi0gICAgICAg
IGlmIG5vdCBtYXRjaF9vYmplY3Q6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBy
ZXR1cm4gbWF0Y2hfb2JqZWN0Lmdyb3VwKCdmZWF0dXJlc19zdHJpbmcnKS5zcGxpdCgnICcpCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dpbl91bml0dGVz
dC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L3dpbl91bml0dGVzdC5weQkocmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93aW5fdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTA5ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoK
LSMKLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSMgZGlzdHJpYnV0aW9uLgotIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
IyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgU3RyaW5nSU8KLWltcG9y
dCB1bml0dGVzdDIgYXMgdW5pdHRlc3QKLQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4
ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5l
eGVjdXRpdmVfbW9jayBpbXBvcnQgTW9ja0V4ZWN1dGl2ZSwgTW9ja0V4ZWN1dGl2ZTIKLWZyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtX21vY2sgaW1wb3J0IE1vY2tGaWxlU3lz
dGVtCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0
cHV0Q2FwdHVyZQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3RfbW9jayBp
bXBvcnQgTW9ja1N5c3RlbUhvc3QKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1w
b3J0IHBvcnRfdGVzdGNhc2UKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQud2luIGlt
cG9ydCBXaW5Qb3J0Ci1mcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tPcHRp
b25zCi0KLQotY2xhc3MgV2luUG9ydFRlc3QocG9ydF90ZXN0Y2FzZS5Qb3J0VGVzdENhc2UpOgot
ICAgIG9zX25hbWUgPSAnd2luJwotICAgIG9zX3ZlcnNpb24gPSAneHAnCi0gICAgcG9ydF9uYW1l
ID0gJ3dpbi14cCcKLSAgICBwb3J0X21ha2VyID0gV2luUG9ydAotCi0gICAgZGVmIHRlc3Rfc2hv
d19yZXN1bHRzX2h0bWxfZmlsZShzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0
KCkKLSAgICAgICAgcG9ydC5fZXhlY3V0aXZlID0gTW9ja0V4ZWN1dGl2ZShzaG91bGRfbG9nPVRy
dWUpCi0gICAgICAgIGNhcHR1cmUgPSBPdXRwdXRDYXB0dXJlKCkKLSAgICAgICAgY2FwdHVyZS5j
YXB0dXJlX291dHB1dCgpCi0gICAgICAgIHBvcnQuc2hvd19yZXN1bHRzX2h0bWxfZmlsZSgndGVz
dC5odG1sJykKLSAgICAgICAgXywgXywgbG9ncyA9IGNhcHR1cmUucmVzdG9yZV9vdXRwdXQoKQot
ICAgICAgICAjIFdlIGNhbid0IGtub3cgZm9yIHN1cmUgd2hhdCBwYXRoIHdpbGwgYmUgcHJvZHVj
ZWQgYnkgY3lncGF0aCwgYnV0IHdlIGNhbiBhc3NlcnQgYWJvdXQKLSAgICAgICAgIyBldmVyeXRo
aW5nIGVsc2UuCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2dzLnN0YXJ0c3dpdGgoIk1PQ0sg
cnVuX2NvbW1hbmQ6IFsnVG9vbHMvU2NyaXB0cy9ydW4tc2FmYXJpJywgJy0tcmVsZWFzZScsICci
KSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvZ3MuZW5kc3dpdGgoInRlc3QuaHRtbCddLCBj
d2Q9L21vY2stY2hlY2tvdXRcbiIpKQotCi0gICAgZGVmIF9hc3NlcnRfc2VhcmNoX3BhdGgoc2Vs
ZiwgZXhwZWN0ZWRfc2VhcmNoX3BhdGhzLCB2ZXJzaW9uLCB1c2Vfd2Via2l0Mj1GYWxzZSk6Ci0g
ICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChwb3J0X25hbWU9J3dpbicsIG9zX3ZlcnNpb249
dmVyc2lvbiwgb3B0aW9ucz1Nb2NrT3B0aW9ucyh3ZWJraXRfdGVzdF9ydW5uZXI9dXNlX3dlYmtp
dDIpKQotICAgICAgICBhYnNvbHV0ZV9zZWFyY2hfcGF0aHMgPSBtYXAocG9ydC5fd2Via2l0X2Jh
c2VsaW5lX3BhdGgsIGV4cGVjdGVkX3NlYXJjaF9wYXRocykKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChwb3J0LmJhc2VsaW5lX3NlYXJjaF9wYXRoKCksIGFic29sdXRlX3NlYXJjaF9wYXRocykK
LQotICAgIGRlZiB0ZXN0X2Jhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgotICAgICAgICBzZWxm
Ll9hc3NlcnRfc2VhcmNoX3BhdGgoWyd3aW4teHAnLCAnd2luLXZpc3RhJywgJ3dpbi03c3AwJywg
J3dpbicsICdtYWMtbGlvbicsICdtYWMnXSwgJ3hwJykKLSAgICAgICAgc2VsZi5fYXNzZXJ0X3Nl
YXJjaF9wYXRoKFsnd2luLXZpc3RhJywgJ3dpbi03c3AwJywgJ3dpbicsICdtYWMtbGlvbicsICdt
YWMnXSwgJ3Zpc3RhJykKLSAgICAgICAgc2VsZi5fYXNzZXJ0X3NlYXJjaF9wYXRoKFsnd2luLTdz
cDAnLCAnd2luJywgJ21hYy1saW9uJywgJ21hYyddLCAnN3NwMCcpCi0KLSAgICAgICAgc2VsZi5f
YXNzZXJ0X3NlYXJjaF9wYXRoKFsnd2luLXdrMicsICd3aW4teHAnLCAnd2luLXZpc3RhJywgJ3dp
bi03c3AwJywgJ3dpbicsICdtYWMtd2syJywgJ21hYy1saW9uJywgJ21hYyddLCAneHAnLCB1c2Vf
d2Via2l0Mj1UcnVlKQotICAgICAgICBzZWxmLl9hc3NlcnRfc2VhcmNoX3BhdGgoWyd3aW4td2sy
JywgJ3dpbi12aXN0YScsICd3aW4tN3NwMCcsICd3aW4nLCAnbWFjLXdrMicsICdtYWMtbGlvbics
ICdtYWMnXSwgJ3Zpc3RhJywgdXNlX3dlYmtpdDI9VHJ1ZSkKLSAgICAgICAgc2VsZi5fYXNzZXJ0
X3NlYXJjaF9wYXRoKFsnd2luLXdrMicsICd3aW4tN3NwMCcsICd3aW4nLCAnbWFjLXdrMicsICdt
YWMtbGlvbicsICdtYWMnXSwgJzdzcDAnLCB1c2Vfd2Via2l0Mj1UcnVlKQotCi0gICAgZGVmIF9h
c3NlcnRfdmVyc2lvbihzZWxmLCBwb3J0X25hbWUsIGV4cGVjdGVkX3ZlcnNpb24pOgotICAgICAg
ICBob3N0ID0gTW9ja1N5c3RlbUhvc3Qob3NfbmFtZT0nd2luJywgb3NfdmVyc2lvbj1leHBlY3Rl
ZF92ZXJzaW9uKQotICAgICAgICBwb3J0ID0gV2luUG9ydChob3N0LCBwb3J0X25hbWU9cG9ydF9u
YW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQudmVyc2lvbigpLCBleHBlY3RlZF92
ZXJzaW9uKQotCi0gICAgZGVmIHRlc3RfdmVyc2lvbnMoc2VsZik6Ci0gICAgICAgIHNlbGYuX2Fz
c2VydF92ZXJzaW9uKCd3aW4teHAnLCAneHAnKQotICAgICAgICBzZWxmLl9hc3NlcnRfdmVyc2lv
bignd2luLXZpc3RhJywgJ3Zpc3RhJykKLSAgICAgICAgc2VsZi5fYXNzZXJ0X3ZlcnNpb24oJ3dp
bi03c3AwJywgJzdzcDAnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJv
ciwgc2VsZi5fYXNzZXJ0X3ZlcnNpb24sICd3aW4tbWUnLCAneHAnKQotCi0gICAgZGVmIHRlc3Rf
Y29tcGFyZV90ZXh0KHNlbGYpOgotICAgICAgICBleHBlY3RlZCA9ICJFRElUSU5HIERFTEVHQVRF
OiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3Rp
ZmljYXRpb25cbmZvb1xuRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlv
bjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uXG4iCi0gICAgICAgIHBvcnQg
PSBzZWxmLm1ha2VfcG9ydCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5kb190ZXh0
X3Jlc3VsdHNfZGlmZmVyKGV4cGVjdGVkLCAiZm9vXG4iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKHBvcnQuZG9fdGV4dF9yZXN1bHRzX2RpZmZlcihleHBlY3RlZCwgImZvbyIpKQotICAgICAg
ICBzZWxmLmFzc2VydFRydWUocG9ydC5kb190ZXh0X3Jlc3VsdHNfZGlmZmVyKGV4cGVjdGVkLCAi
YmFyIikpCi0KLSAgICAgICAgIyBUaGlzIGhhY2sgZG9lc24ndCBleGlzdCBpbiBXSzIuCi0gICAg
ICAgIHBvcnQuX29wdGlvbnMgPSBNb2NrT3B0aW9ucyh3ZWJraXRfdGVzdF9ydW5uZXI9VHJ1ZSkK
LSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQuZG9fdGV4dF9yZXN1bHRzX2RpZmZlcihleHBl
Y3RlZCwgImZvb1xuIikpCi0KLSAgICBkZWYgdGVzdF9vcGVyYXRpbmdfc3lzdGVtKHNlbGYpOgot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd3aW4nLCBzZWxmLm1ha2VfcG9ydCgpLm9wZXJhdGlu
Z19zeXN0ZW0oKSkKLQotICAgIGRlZiB0ZXN0X3J1bnRpbWVfZmVhdHVyZV9saXN0KHNlbGYpOgot
ICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQotICAgICAgICBwb3J0Ll9leGVjdXRpdmUu
cnVuX2NvbW1hbmQgPSBsYW1iZGEgY29tbWFuZCwgY3dkPU5vbmUsIGVycm9yX2hhbmRsZXI9Tm9u
ZTogIk5vbnNlbnNlIgotICAgICAgICAjIHJ1bnRpbWVfZmVhdHVyZXNfbGlzdCByZXR1cm5zIE5v
bmUgd2hlbiBpdHMgcmVzdWx0cyBhcmUgbWVhbmluZ2xlc3MgKGl0IGNvdWxkbid0IHJ1biBEUlQg
b3IgcGFyc2UgdGhlIG91dHB1dCwgZXRjLikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0
Ll9ydW50aW1lX2ZlYXR1cmVfbGlzdCgpLCBOb25lKQotICAgICAgICBwb3J0Ll9leGVjdXRpdmUu
cnVuX2NvbW1hbmQgPSBsYW1iZGEgY29tbWFuZCwgY3dkPU5vbmUsIGVycm9yX2hhbmRsZXI9Tm9u
ZTogIlN1cHBvcnRlZEZlYXR1cmVzOmZvbyBiYXIiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
cG9ydC5fcnVudGltZV9mZWF0dXJlX2xpc3QoKSwgWydmb28nLCAnYmFyJ10pCi0KLSAgICBkZWYg
dGVzdF9leHBlY3RhdGlvbnNfZmlsZXMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
bGVuKHNlbGYubWFrZV9wb3J0KCkuZXhwZWN0YXRpb25zX2ZpbGVzKCkpLCAzKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLm1ha2VfcG9ydChvcHRpb25zPU1vY2tPcHRpb25zKHdl
YmtpdF90ZXN0X3J1bm5lcj1UcnVlLCBjb25maWd1cmF0aW9uPSdSZWxlYXNlJykpLmV4cGVjdGF0
aW9uc19maWxlcygpKSwgNSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQveHZmYmRyaXZlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L3h2ZmJkcml2ZXIucHkJKHJldmlzaW9uIDE0ODQ5NykKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQveHZmYmRyaXZlci5weQko
d29ya2luZyBjb3B5KQpAQCAtMSwxMTMgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgR29v
Z2xlIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgbG9nZ2lu
ZwotaW1wb3J0IG9zCi1pbXBvcnQgcmUKLWltcG9ydCB0aW1lCi0KLWZyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLnBvcnQuc2VydmVyX3Byb2Nlc3MgaW1wb3J0IFNlcnZlclByb2Nlc3MKLWZyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuZHJpdmVyIGltcG9ydCBEcml2ZXIKLWZyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbS5maWxlX2xvY2sgaW1wb3J0IEZpbGVMb2NrCi0KLV9sb2cgPSBs
b2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKLQotCi1jbGFzcyBYdmZiRHJpdmVyKERyaXZlcik6
Ci0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjaGVja194dmZiKHBvcnQpOgotICAgICAgICB4
dmZiX2ZvdW5kID0gcG9ydC5ob3N0LmV4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3doaWNoJywgJ1h2
ZmInXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKSBpcyAwCi0gICAgICAgIGlmIG5vdCB4dmZiX2Zv
dW5kOgotICAgICAgICAgICAgX2xvZy5lcnJvcigiTm8gWHZmYiBmb3VuZC4gQ2Fubm90IHJ1biBs
YXlvdXQgdGVzdHMuIikKLSAgICAgICAgcmV0dXJuIHh2ZmJfZm91bmQKLQotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICBEcml2ZXIuX19pbml0X18oc2Vs
ZiwgKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICBzZWxmLl9ndWFyZF9sb2NrID0gTm9uZQotICAg
ICAgICBzZWxmLl9zdGFydHVwX2RlbGF5X3NlY3MgPSAxLjAKLQotICAgIGRlZiBfbmV4dF9mcmVl
X2Rpc3BsYXkoc2VsZik6Ci0gICAgICAgIHJ1bm5pbmdfcGlkcyA9IHNlbGYuX3BvcnQuaG9zdC5l
eGVjdXRpdmUucnVuX2NvbW1hbmQoWydwcycsICctZW8nLCAnY29tbSxjb21tYW5kJ10pCi0gICAg
ICAgIHJlc2VydmVkX3NjcmVlbnMgPSBzZXQoKQotICAgICAgICBmb3IgcGlkIGluIHJ1bm5pbmdf
cGlkcy5zcGxpdCgnXG4nKToKLSAgICAgICAgICAgIG1hdGNoID0gcmUubWF0Y2goJyhYfFh2ZmJ8
WG9yZylccysuKlxzOig/UDxzY3JlZW5fbnVtYmVyPlxkKyknLCBwaWQpCi0gICAgICAgICAgICBp
ZiBtYXRjaDoKLSAgICAgICAgICAgICAgICByZXNlcnZlZF9zY3JlZW5zLmFkZChpbnQobWF0Y2gu
Z3JvdXAoJ3NjcmVlbl9udW1iZXInKSkpCi0gICAgICAgIGZvciBpIGluIHJhbmdlKDk5KToKLSAg
ICAgICAgICAgIGlmIGkgbm90IGluIHJlc2VydmVkX3NjcmVlbnM6Ci0gICAgICAgICAgICAgICAg
X2d1YXJkX2xvY2tfZmlsZSA9IHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVtLmpvaW4oJy90bXAn
LCAnV2ViS2l0WHZmYi5sb2NrLiVpJyAlIGkpCi0gICAgICAgICAgICAgICAgc2VsZi5fZ3VhcmRf
bG9jayA9IHNlbGYuX3BvcnQuaG9zdC5tYWtlX2ZpbGVfbG9jayhfZ3VhcmRfbG9ja19maWxlKQot
ICAgICAgICAgICAgICAgIGlmIHNlbGYuX2d1YXJkX2xvY2suYWNxdWlyZV9sb2NrKCk6Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBpCi0KLSAgICBkZWYgX3N0YXJ0KHNlbGYsIHBpeGVsX3Rl
c3RzLCBwZXJfdGVzdF9hcmdzKToKLSAgICAgICAgc2VsZi5zdG9wKCkKLQotICAgICAgICAjIFVz
ZSBldmVuIGRpc3BsYXlzIGZvciBwaXhlbCB0ZXN0cyBhbmQgb2RkIG9uZXMgb3RoZXJ3aXNlLiBX
aGVuIHBpeGVsIHRlc3RzIGFyZSBkaXNhYmxlZCwKLSAgICAgICAgIyBEcml2ZXJQcm94eSBjcmVh
dGVzIHR3byBkcml2ZXJzLCBvbmUgZm9yIG5vcm1hbCBhbmQgdGhlIG90aGVyIGZvciByZWYgdGVz
dHMuIEJvdGggaGF2ZQotICAgICAgICAjIHRoZSBzYW1lIHdvcmtlciBudW1iZXIsIHNvIHRoaXMg
cHJldmVudHMgdGhlbSBmcm9tIHVzaW5nIHRoZSBzYW1lIFh2ZmIgaW5zdGFuY2UuCi0gICAgICAg
IGRpc3BsYXlfaWQgPSBzZWxmLl9uZXh0X2ZyZWVfZGlzcGxheSgpCi0gICAgICAgIHNlbGYuX2xv
Y2tfZmlsZSA9ICIvdG1wLy5YJWQtbG9jayIgJSBkaXNwbGF5X2lkCi0KLSAgICAgICAgcnVuX3h2
ZmIgPSBbIlh2ZmIiLCAiOiVkIiAlIGRpc3BsYXlfaWQsICItc2NyZWVuIiwgICIwIiwgIjgwMHg2
MDB4MjQiLCAiLW5vbGlzdGVuIiwgInRjcCJdCi0gICAgICAgIHdpdGggb3Blbihvcy5kZXZudWxs
LCAndycpIGFzIGRldm51bGw6Ci0gICAgICAgICAgICBzZWxmLl94dmZiX3Byb2Nlc3MgPSBzZWxm
Ll9wb3J0Lmhvc3QuZXhlY3V0aXZlLnBvcGVuKHJ1bl94dmZiLCBzdGRlcnI9ZGV2bnVsbCkKLQot
ICAgICAgICAjIENyYXNoZXMgaW50ZW5kIHRvIG9jY3VyIG9jY2FzaW9uYWxseSBpbiB0aGUgZmly
c3QgZmV3IHRlc3RzIHRoYXQgYXJlIHJ1biB0aHJvdWdoIGVhY2gKLSAgICAgICAgIyB3b3JrZXIg
YmVjYXVzZSB0aGUgWHZmYiBkaXNwbGF5IGlzbid0IHJlYWR5IHlldC4gSGFsdGluZyBleGVjdXRp
b24gYSBiaXQgc2hvdWxkIGF2b2lkIHRoYXQuCi0gICAgICAgIHRpbWUuc2xlZXAoc2VsZi5fc3Rh
cnR1cF9kZWxheV9zZWNzKQotCi0gICAgICAgIHNlcnZlcl9uYW1lID0gc2VsZi5fcG9ydC5kcml2
ZXJfbmFtZSgpCi0gICAgICAgIGVudmlyb25tZW50ID0gc2VsZi5fcG9ydC5zZXR1cF9lbnZpcm9u
X2Zvcl9zZXJ2ZXIoc2VydmVyX25hbWUpCi0gICAgICAgICMgV2UgbXVzdCBkbyB0aGlzIGhlcmUg
YmVjYXVzZSB0aGUgRElTUExBWSBudW1iZXIgZGVwZW5kcyBvbiBfd29ya2VyX251bWJlcgotICAg
ICAgICBlbnZpcm9ubWVudFsnRElTUExBWSddID0gIjolZCIgJSBkaXNwbGF5X2lkCi0gICAgICAg
IHNlbGYuX2RyaXZlcl90ZW1wZGlyID0gc2VsZi5fcG9ydC5fZmlsZXN5c3RlbS5ta2R0ZW1wKHBy
ZWZpeD0nJXMtJyAlIHNlbGYuX3BvcnQuZHJpdmVyX25hbWUoKSkKLSAgICAgICAgZW52aXJvbm1l
bnRbJ0RVTVBSRU5ERVJUUkVFX1RFTVAnXSA9IHN0cihzZWxmLl9kcml2ZXJfdGVtcGRpcikKLSAg
ICAgICAgZW52aXJvbm1lbnRbJ0xPQ0FMX1JFU09VUkNFX1JPT1QnXSA9IHNlbGYuX3BvcnQubGF5
b3V0X3Rlc3RzX2RpcigpCi0KLSAgICAgICAgIyBDdXJyZW50bHkgb24gV2ViS2l0MiwgdGhlcmUg
aXMgbm8gQVBJIGZvciBzZXR0aW5nIHRoZSBhcHBsaWNhdGlvbgotICAgICAgICAjIGNhY2hlIGRp
cmVjdG9yeS4gRWFjaCB3b3JrZXIgc2hvdWxkIGhhdmUgaXQncyBvd24gYW5kIGl0IHNob3VsZCBi
ZQotICAgICAgICAjIGNsZWFuZWQgYWZ0ZXJ3YXJkcywgc28gd2Ugc2V0IGl0IHRvIGluc2lkZSB0
aGUgdGVtcG9yYXJ5IGZvbGRlciBieQotICAgICAgICAjIHByZXBlbmRpbmcgWERHX0NBQ0hFX0hP
TUUgd2l0aCBEVU1QUkVOREVSVFJFRV9URU1QLgotICAgICAgICBlbnZpcm9ubWVudFsnWERHX0NB
Q0hFX0hPTUUnXSA9IHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVtLmpvaW4oc3RyKHNlbGYuX2Ry
aXZlcl90ZW1wZGlyKSwgJ2FwcGNhY2hlJykKLQotICAgICAgICBzZWxmLl9jcmFzaGVkX3Byb2Nl
c3NfbmFtZSA9IE5vbmUKLSAgICAgICAgc2VsZi5fY3Jhc2hlZF9waWQgPSBOb25lCi0gICAgICAg
IHNlbGYuX3NlcnZlcl9wcm9jZXNzID0gc2VsZi5fcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3Ry
dWN0b3Ioc2VsZi5fcG9ydCwgc2VydmVyX25hbWUsIHNlbGYuY21kX2xpbmUocGl4ZWxfdGVzdHMs
IHBlcl90ZXN0X2FyZ3MpLCBlbnZpcm9ubWVudCkKLSAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nl
c3Muc3RhcnQoKQotCi0gICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAgICAgIHN1cGVyKFh2ZmJEcml2
ZXIsIHNlbGYpLnN0b3AoKQotICAgICAgICBpZiBzZWxmLl9ndWFyZF9sb2NrOgotICAgICAgICAg
ICAgc2VsZi5fZ3VhcmRfbG9jay5yZWxlYXNlX2xvY2soKQotICAgICAgICAgICAgc2VsZi5fZ3Vh
cmRfbG9jayA9IE5vbmUKLSAgICAgICAgaWYgZ2V0YXR0cihzZWxmLCAnX3h2ZmJfcHJvY2Vzcycs
IE5vbmUpOgotICAgICAgICAgICAgc2VsZi5fcG9ydC5ob3N0LmV4ZWN1dGl2ZS5raWxsX3Byb2Nl
c3Moc2VsZi5feHZmYl9wcm9jZXNzLnBpZCkKLSAgICAgICAgICAgIHNlbGYuX3h2ZmJfcHJvY2Vz
cyA9IE5vbmUKLSAgICAgICAgICAgIGlmIHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVtLmV4aXN0
cyhzZWxmLl9sb2NrX2ZpbGUpOgotICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuaG9zdC5maWxl
c3lzdGVtLnJlbW92ZShzZWxmLl9sb2NrX2ZpbGUpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L3h2ZmJkcml2ZXJfdW5pdHRlc3QucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC94dmZiZHJpdmVyX3Vu
aXR0ZXN0LnB5CShyZXZpc2lvbiAxNDg0OTcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L3h2ZmJkcml2ZXJfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAg
LTEsMTM1ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEyIFphbiBEb2JlcnNlayA8emFuZG9i
ZXJzZWtAZ21haWwuY29tPgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6
Ci0jCi0jICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9y
dCB1bml0dGVzdDIgYXMgdW5pdHRlc3QKLQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZp
bGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0ZpbGVTeXN0ZW0KLWZyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbS5leGVjdXRpdmVfbW9jayBpbXBvcnQgTW9ja0V4ZWN1dGl2ZTIKLWZyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJlCi1mcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdF9tb2NrIGltcG9ydCBNb2NrU3lzdGVt
SG9zdAotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgUG9ydAotZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5zZXJ2ZXJfcHJvY2Vzc19tb2NrIGltcG9ydCBNb2Nr
U2VydmVyUHJvY2VzcwotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC54dmZiZHJpdmVy
IGltcG9ydCBYdmZiRHJpdmVyCi1mcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1v
Y2tPcHRpb25zCi0KLV9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKLQotCi1jbGFz
cyBYdmZiRHJpdmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIG1ha2VfZHJpdmVy
KHNlbGYsIHdvcmtlcl9udW1iZXI9MCwgeG9yZ19ydW5uaW5nPUZhbHNlLCBleGVjdXRpdmU9Tm9u
ZSk6Ci0gICAgICAgIHBvcnQgPSBQb3J0KE1vY2tTeXN0ZW1Ib3N0KGxvZ19leGVjdXRpdmU9VHJ1
ZSwgZXhlY3V0aXZlPWV4ZWN1dGl2ZSksICd4dmZiZHJpdmVydGVzdHBvcnQnLCBvcHRpb25zPU1v
Y2tPcHRpb25zKGNvbmZpZ3VyYXRpb249J1JlbGVhc2UnKSkKLSAgICAgICAgcG9ydC5fY29uZmln
LmJ1aWxkX2RpcmVjdG9yeSA9IGxhbWJkYSBjb25maWd1cmF0aW9uOiAiL21vY2stYnVpbGQiCi0g
ICAgICAgIHBvcnQuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZlclByb2Nl
c3MKLSAgICAgICAgaWYgeG9yZ19ydW5uaW5nOgotICAgICAgICAgICAgcG9ydC5fZXhlY3V0aXZl
Ll9ydW5uaW5nX3BpZHNbJ1hvcmcnXSA9IDEwOAotCi0gICAgICAgIGRyaXZlciA9IFh2ZmJEcml2
ZXIocG9ydCwgd29ya2VyX251bWJlcj13b3JrZXJfbnVtYmVyLCBwaXhlbF90ZXN0cz1UcnVlKQot
ICAgICAgICBkcml2ZXIuX3N0YXJ0dXBfZGVsYXlfc2VjcyA9IDAKLSAgICAgICAgcmV0dXJuIGRy
aXZlcgotCi0gICAgZGVmIGNsZWFudXBfZHJpdmVyKHNlbGYsIGRyaXZlcik6Ci0gICAgICAgICMg
U2V0dGluZyBfeHZmYl9wcm9jZXNzIG1lbWJlciB0byBOb25lIGlzIG5lY2Vzc2FyeSBhcyB0aGUg
RHJpdmVyIG9iamVjdCBpcyBzdG9wcGVkIG9uIGRlbGV0aW9uLAotICAgICAgICAjIGtpbGxpbmcg
dGhlIFh2ZmIgcHJvY2VzcyBpZiBwcmVzZW50LiBUaHVzLCB0aGlzIG1ldGhvZCBzaG91bGQgb25s
eSBiZSBjYWxsZWQgZnJvbSB0ZXN0cyB0aGF0IGRvIG5vdAotICAgICAgICAjIGludGVuZCB0byB0
ZXN0IHRoZSBiZWhhdmlvciBvZiBYdmZiRHJpdmVyLnN0b3AuCi0gICAgICAgIGRyaXZlci5feHZm
Yl9wcm9jZXNzID0gTm9uZQotCi0gICAgZGVmIGFzc2VydERyaXZlclN0YXJ0U3VjY2Vzc2Z1bChz
ZWxmLCBkcml2ZXIsIGV4cGVjdGVkX2xvZ3MsIGV4cGVjdGVkX2Rpc3BsYXksIHBpeGVsX3Rlc3Rz
PUZhbHNlKToKLSAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIGRy
aXZlci5zdGFydCwgW3BpeGVsX3Rlc3RzLCBbXV0sIGV4cGVjdGVkX2xvZ3M9ZXhwZWN0ZWRfbG9n
cykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRyaXZlci5fc2VydmVyX3Byb2Nlc3Muc3RhcnRl
ZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkcml2ZXIuX3NlcnZlcl9wcm9jZXNzLmVudlsi
RElTUExBWSJdLCBleHBlY3RlZF9kaXNwbGF5KQotCi0gICAgZGVmIHRlc3Rfc3RhcnRfbm9fcGl4
ZWxfdGVzdHMoc2VsZik6Ci0gICAgICAgIGRyaXZlciA9IHNlbGYubWFrZV9kcml2ZXIoKQotICAg
ICAgICBleHBlY3RlZF9sb2dzID0gIk1PQ0sgcnVuX2NvbW1hbmQ6IFsncHMnLCAnLWVvJywgJ2Nv
bW0sY29tbWFuZCddLCBjd2Q9Tm9uZVxuTU9DSyBwb3BlbjogWydYdmZiJywgJzowJywgJy1zY3Jl
ZW4nLCAnMCcsICc4MDB4NjAweDI0JywgJy1ub2xpc3RlbicsICd0Y3AnXVxuIgotICAgICAgICBz
ZWxmLmFzc2VydERyaXZlclN0YXJ0U3VjY2Vzc2Z1bChkcml2ZXIsIGV4cGVjdGVkX2xvZ3M9ZXhw
ZWN0ZWRfbG9ncywgZXhwZWN0ZWRfZGlzcGxheT0iOjAiKQotICAgICAgICBzZWxmLmNsZWFudXBf
ZHJpdmVyKGRyaXZlcikKLQotICAgIGRlZiB0ZXN0X3N0YXJ0X3BpeGVsX3Rlc3RzKHNlbGYpOgot
ICAgICAgICBkcml2ZXIgPSBzZWxmLm1ha2VfZHJpdmVyKCkKLSAgICAgICAgZXhwZWN0ZWRfbG9n
cyA9ICJNT0NLIHJ1bl9jb21tYW5kOiBbJ3BzJywgJy1lbycsICdjb21tLGNvbW1hbmQnXSwgY3dk
PU5vbmVcbk1PQ0sgcG9wZW46IFsnWHZmYicsICc6MCcsICctc2NyZWVuJywgJzAnLCAnODAweDYw
MHgyNCcsICctbm9saXN0ZW4nLCAndGNwJ11cbiIKLSAgICAgICAgc2VsZi5hc3NlcnREcml2ZXJT
dGFydFN1Y2Nlc3NmdWwoZHJpdmVyLCBleHBlY3RlZF9sb2dzPWV4cGVjdGVkX2xvZ3MsIGV4cGVj
dGVkX2Rpc3BsYXk9IjowIiwgcGl4ZWxfdGVzdHM9VHJ1ZSkKLSAgICAgICAgc2VsZi5jbGVhbnVw
X2RyaXZlcihkcml2ZXIpCi0KLSAgICBkZWYgdGVzdF9zdGFydF9hcmJpdHJhcnlfd29ya2VyX251
bWJlcihzZWxmKToKLSAgICAgICAgZHJpdmVyID0gc2VsZi5tYWtlX2RyaXZlcih3b3JrZXJfbnVt
YmVyPTE3KQotICAgICAgICBleHBlY3RlZF9sb2dzID0gIk1PQ0sgcnVuX2NvbW1hbmQ6IFsncHMn
LCAnLWVvJywgJ2NvbW0sY29tbWFuZCddLCBjd2Q9Tm9uZVxuTU9DSyBwb3BlbjogWydYdmZiJywg
JzowJywgJy1zY3JlZW4nLCAnMCcsICc4MDB4NjAweDI0JywgJy1ub2xpc3RlbicsICd0Y3AnXVxu
IgotICAgICAgICBzZWxmLmFzc2VydERyaXZlclN0YXJ0U3VjY2Vzc2Z1bChkcml2ZXIsIGV4cGVj
dGVkX2xvZ3M9ZXhwZWN0ZWRfbG9ncywgZXhwZWN0ZWRfZGlzcGxheT0iOjAiLCBwaXhlbF90ZXN0
cz1UcnVlKQotICAgICAgICBzZWxmLmNsZWFudXBfZHJpdmVyKGRyaXZlcikKLQotICAgIGRlZiB0
ZXN0X25leHRfZnJlZV9kaXNwbGF5KHNlbGYpOgotICAgICAgICBvdXRwdXQgPSAiWG9yZyAgICAg
ICAgICAgIC91c3IvYmluL1ggOjAgLWF1dGggL3Zhci9ydW4vbGlnaHRkbS9yb290LzowIC1ub2xp
c3RlbiB0Y3AgdnQ3IC1ub3Z0c3dpdGNoIC1iYWNrZ3JvdW5kIG5vbmVcblh2ZmIgICAgICAgICAg
ICBYdmZiIDoxIC1zY3JlZW4gMCA4MDB4NjAweDI0IC1ub2xpc3RlbiB0Y3AiCi0gICAgICAgIGV4
ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUyKG91dHB1dCkKLSAgICAgICAgZHJpdmVyID0gc2VsZi5t
YWtlX2RyaXZlcihleGVjdXRpdmU9ZXhlY3V0aXZlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGRyaXZlci5fbmV4dF9mcmVlX2Rpc3BsYXkoKSwgMikKLSAgICAgICAgc2VsZi5jbGVhbnVwX2Ry
aXZlcihkcml2ZXIpCi0gICAgICAgIG91dHB1dCA9ICJYICAgICAgICAgICAgICAgL3Vzci9iaW4v
WCA6MCB2dDcgLW5vbGlzdGVuIHRjcCAtYXV0aCAvdmFyL3J1bi94YXV0aC9BOjAtOHA3WWJiIgot
ICAgICAgICBleGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlMihvdXRwdXQpCi0gICAgICAgIGRyaXZl
ciA9IHNlbGYubWFrZV9kcml2ZXIoZXhlY3V0aXZlPWV4ZWN1dGl2ZSkKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChkcml2ZXIuX25leHRfZnJlZV9kaXNwbGF5KCksIDEpCi0gICAgICAgIHNlbGYu
Y2xlYW51cF9kcml2ZXIoZHJpdmVyKQotICAgICAgICBvdXRwdXQgPSAiWHZmYiAgICAgICAgICAg
IFh2ZmIgOjAgLXNjcmVlbiAwIDgwMHg2MDB4MjQgLW5vbGlzdGVuIHRjcCIKLSAgICAgICAgZXhl
Y3V0aXZlID0gTW9ja0V4ZWN1dGl2ZTIob3V0cHV0KQotICAgICAgICBkcml2ZXIgPSBzZWxmLm1h
a2VfZHJpdmVyKGV4ZWN1dGl2ZT1leGVjdXRpdmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
ZHJpdmVyLl9uZXh0X2ZyZWVfZGlzcGxheSgpLCAxKQotICAgICAgICBzZWxmLmNsZWFudXBfZHJp
dmVyKGRyaXZlcikKLSAgICAgICAgb3V0cHV0ID0gIlh2ZmIgICAgICAgICAgICBYdmZiIDoxIC1z
Y3JlZW4gMCA4MDB4NjAweDI0IC1ub2xpc3RlbiB0Y3Bcblh2ZmIgICAgICAgICAgICBYdmZiIDow
IC1zY3JlZW4gMCA4MDB4NjAweDI0IC1ub2xpc3RlbiB0Y3Bcblh2ZmIgICAgICAgICAgICBYdmZi
IDozIC1zY3JlZW4gMCA4MDB4NjAweDI0IC1ub2xpc3RlbiB0Y3AiCi0gICAgICAgIGV4ZWN1dGl2
ZSA9IE1vY2tFeGVjdXRpdmUyKG91dHB1dCkKLSAgICAgICAgZHJpdmVyID0gc2VsZi5tYWtlX2Ry
aXZlcihleGVjdXRpdmU9ZXhlY3V0aXZlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRyaXZl
ci5fbmV4dF9mcmVlX2Rpc3BsYXkoKSwgMikKLSAgICAgICAgc2VsZi5jbGVhbnVwX2RyaXZlcihk
cml2ZXIpCi0KLSAgICBkZWYgdGVzdF9zdGFydF9uZXh0X3dvcmtlcihzZWxmKToKLSAgICAgICAg
ZHJpdmVyID0gc2VsZi5tYWtlX2RyaXZlcigpCi0gICAgICAgIGRyaXZlci5fbmV4dF9mcmVlX2Rp
c3BsYXkgPSBsYW1iZGE6IDAKLSAgICAgICAgZXhwZWN0ZWRfbG9ncyA9ICJNT0NLIHBvcGVuOiBb
J1h2ZmInLCAnOjAnLCAnLXNjcmVlbicsICcwJywgJzgwMHg2MDB4MjQnLCAnLW5vbGlzdGVuJywg
J3RjcCddXG4iCi0gICAgICAgIHNlbGYuYXNzZXJ0RHJpdmVyU3RhcnRTdWNjZXNzZnVsKGRyaXZl
ciwgZXhwZWN0ZWRfbG9ncz1leHBlY3RlZF9sb2dzLCBleHBlY3RlZF9kaXNwbGF5PSI6MCIsIHBp
eGVsX3Rlc3RzPVRydWUpCi0gICAgICAgIHNlbGYuY2xlYW51cF9kcml2ZXIoZHJpdmVyKQotICAg
ICAgICBkcml2ZXIgPSBzZWxmLm1ha2VfZHJpdmVyKCkKLSAgICAgICAgZHJpdmVyLl9uZXh0X2Zy
ZWVfZGlzcGxheSA9IGxhbWJkYTogMwotICAgICAgICBleHBlY3RlZF9sb2dzID0gIk1PQ0sgcG9w
ZW46IFsnWHZmYicsICc6MycsICctc2NyZWVuJywgJzAnLCAnODAweDYwMHgyNCcsICctbm9saXN0
ZW4nLCAndGNwJ11cbiIKLSAgICAgICAgc2VsZi5hc3NlcnREcml2ZXJTdGFydFN1Y2Nlc3NmdWwo
ZHJpdmVyLCBleHBlY3RlZF9sb2dzPWV4cGVjdGVkX2xvZ3MsIGV4cGVjdGVkX2Rpc3BsYXk9Ijoz
IiwgcGl4ZWxfdGVzdHM9VHJ1ZSkKLSAgICAgICAgc2VsZi5jbGVhbnVwX2RyaXZlcihkcml2ZXIp
Ci0KLSAgICBkZWYgdGVzdF9zdG9wKHNlbGYpOgotICAgICAgICBmaWxlc3lzdGVtID0gTW9ja0Zp
bGVTeXN0ZW0oZmlsZXM9eycvdG1wLy5YNDItbG9jayc6ICcxMjM0XG4nfSkKLSAgICAgICAgcG9y
dCA9IFBvcnQoTW9ja1N5c3RlbUhvc3QobG9nX2V4ZWN1dGl2ZT1UcnVlLCBmaWxlc3lzdGVtPWZp
bGVzeXN0ZW0pLCAneHZmYmRyaXZlcnRlc3Rwb3J0Jywgb3B0aW9ucz1Nb2NrT3B0aW9ucyhjb25m
aWd1cmF0aW9uPSdSZWxlYXNlJykpCi0gICAgICAgIHBvcnQuX2V4ZWN1dGl2ZS5raWxsX3Byb2Nl
c3MgPSBsYW1iZGEgeDogX2xvZy5pbmZvKCJNT0NLIGtpbGxfcHJvY2VzcyBwaWQ6ICIgKyBzdHIo
eCkpCi0gICAgICAgIGRyaXZlciA9IFh2ZmJEcml2ZXIocG9ydCwgd29ya2VyX251bWJlcj0wLCBw
aXhlbF90ZXN0cz1UcnVlKQotCi0gICAgICAgIGNsYXNzIEZha2VYdmZiUHJvY2VzcyhvYmplY3Qp
OgotICAgICAgICAgICAgcGlkID0gMTIzNAotCi0gICAgICAgIGRyaXZlci5feHZmYl9wcm9jZXNz
ID0gRmFrZVh2ZmJQcm9jZXNzKCkKLSAgICAgICAgZHJpdmVyLl9sb2NrX2ZpbGUgPSAnL3RtcC8u
WDQyLWxvY2snCi0KLSAgICAgICAgZXhwZWN0ZWRfbG9ncyA9ICJNT0NLIGtpbGxfcHJvY2VzcyBw
aWQ6IDEyMzRcbiIKLSAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYs
IGRyaXZlci5zdG9wLCBbXSwgZXhwZWN0ZWRfbG9ncz1leHBlY3RlZF9sb2dzKQotCi0gICAgICAg
IHNlbGYuYXNzZXJ0SXNOb25lKGRyaXZlci5feHZmYl9wcm9jZXNzKQotICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKHBvcnQuX2ZpbGVzeXN0ZW0uZXhpc3RzKGRyaXZlci5fbG9ja19maWxlKSkKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvYXBhY2hlX2h0
dHBfc2VydmVyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvYXBhY2hlX2h0dHBfc2VydmVyX3VuaXR0ZXN0LnB5CShy
ZXZpc2lvbiAxNDg0OTcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9z
ZXJ2ZXJzL2FwYWNoZV9odHRwX3NlcnZlcl91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAt
MzMsNyArMzMsNyBAQCBpbXBvcnQgdW5pdHRlc3QyIGFzIHVuaXR0ZXN0CiBmcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlX21vY2sgaW1wb3J0IE1vY2tFeGVjdXRpdmUKIGZyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJl
CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0X21vY2sgaW1wb3J0IE1vY2tIb3N0Ci1mcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCB0ZXN0Citmcm9tIHdlYmtpdHB5LnBvcnQg
aW1wb3J0IHRlc3QKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMuYXBhY2hlX2h0
dHBfc2VydmVyIGltcG9ydCBMYXlvdXRUZXN0QXBhY2hlSHR0cGQKIGZyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLnNlcnZlcnMuaHR0cF9zZXJ2ZXJfYmFzZSBpbXBvcnQgU2VydmVyRXJyb3IKIApJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy9odHRwX3Nl
cnZlcl9iYXNlX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvaHR0cF9zZXJ2ZXJfYmFzZV91bml0dGVzdC5weQkocmV2
aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2Vy
dmVycy9odHRwX3NlcnZlcl9iYXNlX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3
ICsyOSw3IEBACiBpbXBvcnQgdW5pdHRlc3QyIGFzIHVuaXR0ZXN0CiAKIGZyb20gd2Via2l0cHku
Y29tbW9uLmhvc3RfbW9jayBpbXBvcnQgTW9ja0hvc3QKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rl
c3RzLnBvcnQgaW1wb3J0IHRlc3QKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgdGVzdAogZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuc2VydmVycy5odHRwX3NlcnZlcl9iYXNlIGltcG9ydCBI
dHRwU2VydmVyQmFzZQogCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3NlcnZlcnMvaHR0cF9zZXJ2ZXJfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy9odHRwX3NlcnZlcl91bml0dGVz
dC5weQkocmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvc2VydmVycy9odHRwX3NlcnZlcl91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAt
MzEsNyArMzEsNyBAQCBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QyIGFzIHVuaXR0ZXN0CiAK
IGZyb20gd2Via2l0cHkuY29tbW9uLmhvc3RfbW9jayBpbXBvcnQgTW9ja0hvc3QKLWZyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IHRlc3QKK2Zyb20gd2Via2l0cHkucG9ydCBp
bXBvcnQgdGVzdAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuc2VydmVycy5odHRwX3NlcnZl
ciBpbXBvcnQgTGlnaHR0cGQKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMuaHR0
cF9zZXJ2ZXJfYmFzZSBpbXBvcnQgU2VydmVyRXJyb3IKIApJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvdmlld3MvcHJpbnRpbmdfdW5pdHRlc3QucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdmlld3MvcHJpbnRpbmdf
dW5pdHRlc3QucHkJKHJldmlzaW9uIDE0ODQ5NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3ZpZXdzL3ByaW50aW5nX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw3ICszNyw3IEBAIGltcG9ydCB1bml0dGVzdDIgYXMgdW5pdHRlc3QKIGZyb20gd2Via2l0
cHkuY29tbW9uLmhvc3RfbW9jayBpbXBvcnQgTW9ja0hvc3QKIAogZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtIGltcG9ydCBsb2d0ZXN0aW5nCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBp
bXBvcnQgcG9ydAorZnJvbSB3ZWJraXRweSBpbXBvcnQgcG9ydAogZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMuY29udHJvbGxlcnMgaW1wb3J0IG1hbmFnZXIKIGZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLm1vZGVscyBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKIGZyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLm1vZGVscyBpbXBvcnQgdGVzdF9mYWlsdXJlcwpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0LnB5CShyZXZp
c2lvbiAxNDg0OTcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3Rz
L3BlcmZ0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0NSw4IEBAIGlmIHN5cy5wbGF0
Zm9ybSBub3QgaW4gKCdjeWd3aW4nLCAnd2luMzIKICAgICBpbXBvcnQgd2Via2l0cHkudGhpcmRw
YXJ0eS5hdXRvaW5zdGFsbGVkLndlYnBhZ2VyZXBsYXkucmVwbGF5CiAKIGZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLmNvbnRyb2xsZXJzLnRlc3RfcmVzdWx0X3dyaXRlciBpbXBvcnQgVGVzdFJl
c3VsdFdyaXRlcgotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5kcml2ZXIgaW1wb3J0
IERyaXZlcklucHV0Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmRyaXZlciBpbXBv
cnQgRHJpdmVyT3V0cHV0Citmcm9tIHdlYmtpdHB5LnBvcnQuZHJpdmVyIGltcG9ydCBEcml2ZXJJ
bnB1dAorZnJvbSB3ZWJraXRweS5wb3J0LmRyaXZlciBpbXBvcnQgRHJpdmVyT3V0cHV0CiAKIERF
RkFVTFRfVEVTVF9SVU5ORVJfQ09VTlQgPSA0CiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdF91bml0dGVz
dC5weQkocmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3Jt
YW5jZV90ZXN0cy9wZXJmdGVzdF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzMsOSAr
MzMsOSBAQCBpbXBvcnQgdW5pdHRlc3QyIGFzIHVuaXR0ZXN0CiAKIGZyb20gd2Via2l0cHkuY29t
bW9uLmhvc3RfbW9jayBpbXBvcnQgTW9ja0hvc3QKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJlCi1mcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5wb3J0LmRyaXZlciBpbXBvcnQgRHJpdmVyT3V0cHV0Ci1mcm9tIHdlYmtpdHB5Lmxh
eW91dF90ZXN0cy5wb3J0LnRlc3QgaW1wb3J0IFRlc3REcml2ZXIKLWZyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLnBvcnQudGVzdCBpbXBvcnQgVGVzdFBvcnQKK2Zyb20gd2Via2l0cHkucG9ydC5k
cml2ZXIgaW1wb3J0IERyaXZlck91dHB1dAorZnJvbSB3ZWJraXRweS5wb3J0LnRlc3QgaW1wb3J0
IFRlc3REcml2ZXIKK2Zyb20gd2Via2l0cHkucG9ydC50ZXN0IGltcG9ydCBUZXN0UG9ydAogZnJv
bSB3ZWJraXRweS5wZXJmb3JtYW5jZV90ZXN0cy5wZXJmdGVzdCBpbXBvcnQgQ2hyb21pdW1TdHls
ZVBlcmZUZXN0CiBmcm9tIHdlYmtpdHB5LnBlcmZvcm1hbmNlX3Rlc3RzLnBlcmZ0ZXN0IGltcG9y
dCBQZXJmVGVzdAogZnJvbSB3ZWJraXRweS5wZXJmb3JtYW5jZV90ZXN0cy5wZXJmdGVzdCBpbXBv
cnQgUGVyZlRlc3RNZXRyaWMKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFu
Y2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyX2ludGVncmF0aW9udGVzdC5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5l
cl9pbnRlZ3JhdGlvbnRlc3QucHkJKHJldmlzaW9uIDE0ODQ5NykKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyX2ludGVncmF0aW9udGVz
dC5weQkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsOCBAQCBpbXBvcnQgdW5pdHRlc3QyIGFz
IHVuaXR0ZXN0CiAKIGZyb20gd2Via2l0cHkuY29tbW9uLmhvc3RfbW9jayBpbXBvcnQgTW9ja0hv
c3QKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRw
dXRDYXB0dXJlCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmRyaXZlciBpbXBvcnQg
RHJpdmVyT3V0cHV0Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LnRlc3QgaW1wb3J0
IFRlc3RQb3J0Citmcm9tIHdlYmtpdHB5LnBvcnQuZHJpdmVyIGltcG9ydCBEcml2ZXJPdXRwdXQK
K2Zyb20gd2Via2l0cHkucG9ydC50ZXN0IGltcG9ydCBUZXN0UG9ydAogZnJvbSB3ZWJraXRweS5w
ZXJmb3JtYW5jZV90ZXN0cy5wZXJmdGVzdCBpbXBvcnQgQ2hyb21pdW1TdHlsZVBlcmZUZXN0CiBm
cm9tIHdlYmtpdHB5LnBlcmZvcm1hbmNlX3Rlc3RzLnBlcmZ0ZXN0IGltcG9ydCBQZXJmVGVzdAog
ZnJvbSB3ZWJraXRweS5wZXJmb3JtYW5jZV90ZXN0cy5wZXJmdGVzdHNydW5uZXIgaW1wb3J0IFBl
cmZUZXN0c1J1bm5lcgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90
ZXN0cy9wZXJmdGVzdHNydW5uZXJfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXJfdW5pdHRlc3Qu
cHkJKHJldmlzaW9uIDE0ODQ5NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFu
Y2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw3ICszNSw3IEBAIGltcG9ydCB1bml0dGVzdDIgYXMgdW5pdHRlc3QKIAogZnJvbSB3ZWJraXRw
eS5jb21tb24uaG9zdF9tb2NrIGltcG9ydCBNb2NrSG9zdAogZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKLWZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLnBvcnQudGVzdCBpbXBvcnQgVGVzdFBvcnQKK2Zyb20gd2Via2l0cHkucG9y
dC50ZXN0IGltcG9ydCBUZXN0UG9ydAogZnJvbSB3ZWJraXRweS5wZXJmb3JtYW5jZV90ZXN0cy5w
ZXJmdGVzdCBpbXBvcnQgREVGQVVMVF9URVNUX1JVTk5FUl9DT1VOVAogZnJvbSB3ZWJraXRweS5w
ZXJmb3JtYW5jZV90ZXN0cy5wZXJmdGVzdHNydW5uZXIgaW1wb3J0IFBlcmZUZXN0c1J1bm5lcgog
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYXBwbGUucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2FwcGxlLnB5CShyZXZpc2lvbiAxNDg0OTcp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYXBwbGUucHkJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDcgKzI4LDcgQEAKIAogaW1wb3J0IGxvZ2dpbmcKIAotZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMucG9ydC5iYXNlIGltcG9ydCBQb3J0Citmcm9tIHdlYmtpdHB5LnBvcnQuYmFzZSBp
bXBvcnQgUG9ydAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfY29uZmln
dXJhdGlvbiBpbXBvcnQgVGVzdENvbmZpZ3VyYXRpb24KIAogCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvYmFzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvYmFzZS5weQkocmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2Jhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEyICs1NSwxMiBAQCBmcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltCiBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9zdAogZnJvbSB3ZWJraXRweS5jb21t
b24ud2Via2l0X2ZpbmRlciBpbXBvcnQgV2ViS2l0RmluZGVyCiBmcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5tb2RlbHMudGVzdF9jb25maWd1cmF0aW9uIGltcG9ydCBUZXN0Q29uZmlndXJhdGlv
bgotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgY29uZmlnIGFzIHBvcnRf
Y29uZmlnCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBkcml2ZXIKLWZy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGh0dHBfbG9jawotZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgaW1hZ2VfZGlmZgotZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgc2VydmVyX3Byb2Nlc3MKLWZyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLnBvcnQuZmFjdG9yeSBpbXBvcnQgUG9ydEZhY3RvcnkKK2Zyb20gd2Via2l0cHku
cG9ydCBpbXBvcnQgY29uZmlnIGFzIHBvcnRfY29uZmlnCitmcm9tIHdlYmtpdHB5LnBvcnQgaW1w
b3J0IGRyaXZlcgorZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBodHRwX2xvY2sKK2Zyb20gd2Vi
a2l0cHkucG9ydCBpbXBvcnQgaW1hZ2VfZGlmZgorZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBz
ZXJ2ZXJfcHJvY2VzcworZnJvbSB3ZWJraXRweS5wb3J0LmZhY3RvcnkgaW1wb3J0IFBvcnRGYWN0
b3J5CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCBhcGFjaGVfaHR0
cF9zZXJ2ZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IGh0dHBf
c2VydmVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCB3ZWJzb2Nr
ZXRfc2VydmVyCkBAIC02OCw3ICs2OCw2IEBAIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNl
cnZlcnMgaW1wb3IKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAogCi0jIEZJ
WE1FOiBUaGlzIGNsYXNzIHNob3VsZCBtZXJnZSB3aXRoIFdlYktpdFBvcnQgbm93IHRoYXQgQ2hy
b21pdW0gYmVoYXZlcyBtb3N0bHkgbGlrZSBvdGhlciB3ZWJraXQgcG9ydHMuCiBjbGFzcyBQb3J0
KG9iamVjdCk6CiAgICAgIiIiQWJzdHJhY3QgY2xhc3MgZm9yIFBvcnQtc3BlY2lmaWMgaG9va3Mg
Zm9yIHRoZSBsYXlvdXRfdGVzdCBwYWNrYWdlLiIiIgogCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvYmFzZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvYmFzZV91bml0dGVzdC5weQkocmV2aXNpb24gMTQ4NDk3KQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2VfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDggKzQyLDggQEAgZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2Nr
TwogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZV9tb2NrIGltcG9ydCBNb2Nr
RXhlY3V0aXZlLCBNb2NrRXhlY3V0aXZlMgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5
c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9ja1N5c3RlbUhvc3QKIAotZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMucG9ydCBpbXBvcnQgUG9ydCwgRHJpdmVyLCBEcml2ZXJPdXRwdXQKLWZyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQudGVzdCBpbXBvcnQgYWRkX3VuaXRfdGVzdHNfdG9fbW9j
a19maWxlc3lzdGVtLCBUZXN0UG9ydAorZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBQb3J0LCBE
cml2ZXIsIERyaXZlck91dHB1dAorZnJvbSB3ZWJraXRweS5wb3J0LnRlc3QgaW1wb3J0IGFkZF91
bml0X3Rlc3RzX3RvX21vY2tfZmlsZXN5c3RlbSwgVGVzdFBvcnQKIAogY2xhc3MgUG9ydFRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwgZXhlY3V0aXZlPU5v
bmUsIHdpdGhfdGVzdHM9RmFsc2UsIHBvcnRfbmFtZT1Ob25lLCAqKmt3YXJncyk6CkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvY29uZmlnX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9jb25maWdfdW5pdHRlc3QucHkJKHJldmlz
aW9uIDE0ODQ5NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9jb25maWdfdW5pdHRl
c3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBAQCBjbGFzcyBDb25maWdUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgZSA9IEV4ZWN1dGl2ZSgpCiAgICAgICAgIGZz
ID0gRmlsZVN5c3RlbSgpCiAgICAgICAgIGMgPSBjb25maWcuQ29uZmlnKGUsIGZzKQotICAgICAg
ICBzY3JpcHQgPSBXZWJLaXRGaW5kZXIoZnMpLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnVG9vbHMn
LCAnU2NyaXB0cycsICd3ZWJraXRweScsICdsYXlvdXRfdGVzdHMnLCAncG9ydCcsICdjb25maWdf
c3RhbmRhbG9uZS5weScpCisgICAgICAgIHNjcmlwdCA9IFdlYktpdEZpbmRlcihmcykucGF0aF9m
cm9tX3dlYmtpdF9iYXNlKCdUb29scycsICdTY3JpcHRzJywgJ3dlYmtpdHB5JywgJ3BvcnQnLCAn
Y29uZmlnX3N0YW5kYWxvbmUucHknKQogCiAgICAgICAgICMgTm90ZTogZG9uJ3QgdXNlICdSZWxl
YXNlJyBoZXJlLCBzaW5jZSB0aGF0J3MgdGhlIG5vcm1hbCBkZWZhdWx0LgogICAgICAgICBleHBl
Y3RlZCA9ICdEZWJ1ZycKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJf
dW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Ry
aXZlcl91bml0dGVzdC5weQkocmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMw
LDExIEBAIGltcG9ydCB1bml0dGVzdDIgYXMgdW5pdHRlc3QKIAogZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtLnN5c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9ja1N5c3RlbUhvc3QKIAotZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgUG9ydCwgRHJpdmVyLCBEcml2ZXJPdXRw
dXQKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuc2VydmVyX3Byb2Nlc3NfbW9jayBp
bXBvcnQgTW9ja1NlcnZlclByb2Nlc3MKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgUG9ydCwg
RHJpdmVyLCBEcml2ZXJPdXRwdXQKK2Zyb20gd2Via2l0cHkucG9ydC5zZXJ2ZXJfcHJvY2Vzc19t
b2NrIGltcG9ydCBNb2NrU2VydmVyUHJvY2VzcwogCiAjIEZJWE1FOiByZW1vdmUgdGhlIGRlcGVu
ZGVuY3kgb24gVGVzdFdlYktpdFBvcnQKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQu
cG9ydF90ZXN0Y2FzZSBpbXBvcnQgVGVzdFdlYktpdFBvcnQKK2Zyb20gd2Via2l0cHkucG9ydC5w
b3J0X3Rlc3RjYXNlIGltcG9ydCBUZXN0V2ViS2l0UG9ydAogCiBmcm9tIHdlYmtpdHB5LnRvb2wu
bW9ja3Rvb2wgaW1wb3J0IE1vY2tPcHRpb25zCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9lZmwucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2VmbC5weQkocmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2VmbC5weQkod29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsOSBAQAogaW1wb3J0IG9zCiAKIGZy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2NvbmZpZ3VyYXRpb24gaW1wb3J0
IFRlc3RDb25maWd1cmF0aW9uCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmJhc2Ug
aW1wb3J0IFBvcnQKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQucHVsc2VhdWRpb19z
YW5pdGl6ZXIgaW1wb3J0IFB1bHNlQXVkaW9TYW5pdGl6ZXIKLWZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLnBvcnQueHZmYmRyaXZlciBpbXBvcnQgWHZmYkRyaXZlcgorZnJvbSB3ZWJraXRweS5w
b3J0LmJhc2UgaW1wb3J0IFBvcnQKK2Zyb20gd2Via2l0cHkucG9ydC5wdWxzZWF1ZGlvX3Nhbml0
aXplciBpbXBvcnQgUHVsc2VBdWRpb1Nhbml0aXplcgorZnJvbSB3ZWJraXRweS5wb3J0Lnh2ZmJk
cml2ZXIgaW1wb3J0IFh2ZmJEcml2ZXIKIAogCiBjbGFzcyBFZmxQb3J0KFBvcnQpOgpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2VmbF91bml0dGVzdC5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZWZsX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAx
NDg0OTcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZWZsX3VuaXR0ZXN0LnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw5IEBAIGltcG9ydCB1bml0dGVzdDIgYXMgdW5pdHRl
c3QKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZV9tb2NrIGltcG9ydCBN
b2NrRXhlY3V0aXZlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBp
bXBvcnQgT3V0cHV0Q2FwdHVyZQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5lZmwg
aW1wb3J0IEVmbFBvcnQKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQucHVsc2VhdWRp
b19zYW5pdGl6ZXJfbW9jayBpbXBvcnQgUHVsc2VBdWRpb1Nhbml0aXplck1vY2sKLWZyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IHBvcnRfdGVzdGNhc2UKK2Zyb20gd2Via2l0
cHkucG9ydC5lZmwgaW1wb3J0IEVmbFBvcnQKK2Zyb20gd2Via2l0cHkucG9ydC5wdWxzZWF1ZGlv
X3Nhbml0aXplcl9tb2NrIGltcG9ydCBQdWxzZUF1ZGlvU2FuaXRpemVyTW9jaworZnJvbSB3ZWJr
aXRweS5wb3J0IGltcG9ydCBwb3J0X3Rlc3RjYXNlCiAKIAogY2xhc3MgRWZsUG9ydFRlc3QocG9y
dF90ZXN0Y2FzZS5Qb3J0VGVzdENhc2UpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2ZhY3RvcnkucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2ZhY3RvcnkucHkJKHJldmlzaW9uIDE0ODQ5NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9mYWN0b3J5LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIGltcG9ydCBm
bm1hdGNoCiBpbXBvcnQgb3B0cGFyc2UKIGltcG9ydCByZQogCi1mcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5wb3J0IGltcG9ydCBidWlsZGVycworZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBi
dWlsZGVycwogCiAKIGRlZiBwbGF0Zm9ybV9vcHRpb25zKHVzZV9nbG9icz1GYWxzZSk6CkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9yeV91bml0dGVzdC5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9yeV91bml0dGVzdC5weQko
cmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2ZhY3Rvcnlf
dW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEyICszMSwxMiBAQCBpbXBvcnQgdW5p
dHRlc3QyIGFzIHVuaXR0ZXN0CiBmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1v
Y2tPcHRpb25zCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdF9tb2NrIGlt
cG9ydCBNb2NrU3lzdGVtSG9zdAogCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGlt
cG9ydCBmYWN0b3J5Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBndGsK
LWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IG1hYwotZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgcXQKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LnBvcnQgaW1wb3J0IHRlc3QKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0
IHdpbgorZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBmYWN0b3J5Citmcm9tIHdlYmtpdHB5LnBv
cnQgaW1wb3J0IGd0aworZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBtYWMKK2Zyb20gd2Via2l0
cHkucG9ydCBpbXBvcnQgcXQKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgdGVzdAorZnJvbSB3
ZWJraXRweS5wb3J0IGltcG9ydCB3aW4KIAogCiBjbGFzcyBGYWN0b3J5VGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkJKHJldmlzaW9uIDE0
ODQ5NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDkgKzMwLDkgQEAgaW1wb3J0IG9zCiBpbXBvcnQgc3VicHJvY2VzcwogCiBmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9jb25maWd1cmF0aW9uIGltcG9ydCBU
ZXN0Q29uZmlndXJhdGlvbgotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5iYXNlIGlt
cG9ydCBQb3J0Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LnB1bHNlYXVkaW9fc2Fu
aXRpemVyIGltcG9ydCBQdWxzZUF1ZGlvU2FuaXRpemVyCi1mcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5wb3J0Lnh2ZmJkcml2ZXIgaW1wb3J0IFh2ZmJEcml2ZXIKK2Zyb20gd2Via2l0cHkucG9y
dC5iYXNlIGltcG9ydCBQb3J0Citmcm9tIHdlYmtpdHB5LnBvcnQucHVsc2VhdWRpb19zYW5pdGl6
ZXIgaW1wb3J0IFB1bHNlQXVkaW9TYW5pdGl6ZXIKK2Zyb20gd2Via2l0cHkucG9ydC54dmZiZHJp
dmVyIGltcG9ydCBYdmZiRHJpdmVyCiAKIAogY2xhc3MgR3RrUG9ydChQb3J0KToKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGtfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0a191bml0dGVzdC5weQkocmV2aXNpb24gMTQ4
NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0a191bml0dGVzdC5weQkod29y
a2luZyBjb3B5KQpAQCAtMzMsOSArMzMsOSBAQCBpbXBvcnQgb3MKIGZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5leGVjdXRpdmVfbW9jayBpbXBvcnQgTW9ja0V4ZWN1dGl2ZQogZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0ZpbGVTeXN0ZW0K
IGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRD
YXB0dXJlCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0Lmd0ayBpbXBvcnQgR3RrUG9y
dAotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5wdWxzZWF1ZGlvX3Nhbml0aXplcl9t
b2NrIGltcG9ydCBQdWxzZUF1ZGlvU2FuaXRpemVyTW9jawotZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMucG9ydCBpbXBvcnQgcG9ydF90ZXN0Y2FzZQorZnJvbSB3ZWJraXRweS5wb3J0Lmd0ayBp
bXBvcnQgR3RrUG9ydAorZnJvbSB3ZWJraXRweS5wb3J0LnB1bHNlYXVkaW9fc2FuaXRpemVyX21v
Y2sgaW1wb3J0IFB1bHNlQXVkaW9TYW5pdGl6ZXJNb2NrCitmcm9tIHdlYmtpdHB5LnBvcnQgaW1w
b3J0IHBvcnRfdGVzdGNhc2UKIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBN
b2NrCiBmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tPcHRpb25zCiAKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pbWFnZV9kaWZmLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pbWFnZV9kaWZmLnB5CShyZXZpc2lvbiAx
NDg0OTcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW1hZ2VfZGlmZi5weQkod29y
a2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHJlCiBp
bXBvcnQgdGltZQogCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBzZXJ2
ZXJfcHJvY2VzcworZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBzZXJ2ZXJfcHJvY2VzcwogCiAK
IF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9pbWFnZV9kaWZmX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pbWFnZV9kaWZmX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAx
NDg0OTcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW1hZ2VfZGlmZl91bml0dGVz
dC5weQkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsOCBAQAogCiBpbXBvcnQgdW5pdHRlc3Qy
IGFzIHVuaXR0ZXN0CiAKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuc2VydmVyX3By
b2Nlc3NfbW9jayBpbXBvcnQgTW9ja1NlcnZlclByb2Nlc3MKLWZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLnBvcnQuaW1hZ2VfZGlmZiBpbXBvcnQgSW1hZ2VEaWZmZXIKK2Zyb20gd2Via2l0cHku
cG9ydC5zZXJ2ZXJfcHJvY2Vzc19tb2NrIGltcG9ydCBNb2NrU2VydmVyUHJvY2VzcworZnJvbSB3
ZWJraXRweS5wb3J0LmltYWdlX2RpZmYgaW1wb3J0IEltYWdlRGlmZmVyCiAKIAogY2xhc3MgRmFr
ZVBvcnQob2JqZWN0KToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9sZWFrZGV0
ZWN0b3JfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2xlYWtkZXRlY3Rvcl91bml0dGVzdC5weQkocmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2xlYWtkZXRlY3Rvcl91bml0dGVzdC5weQkod29ya2luZyBj
b3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiBpbXBvcnQgdW5pdHRlc3QyIGFzIHVuaXR0ZXN0CiAK
LWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQubGVha2RldGVjdG9yIGltcG9ydCBMZWFr
RGV0ZWN0b3IKK2Zyb20gd2Via2l0cHkucG9ydC5sZWFrZGV0ZWN0b3IgaW1wb3J0IExlYWtEZXRl
Y3RvcgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQg
TW9ja0ZpbGVTeXN0ZW0KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJl
IGltcG9ydCBPdXRwdXRDYXB0dXJlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0
aXZlX21vY2sgaW1wb3J0IE1vY2tFeGVjdXRpdmUKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9tYWMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L21hYy5weQkocmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L21hYy5weQkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsOCBAQCBpbXBvcnQgdGltZQogCiBm
cm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hsb2dzIGltcG9ydCBDcmFzaExvZ3MKIGZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCi1m
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmFwcGxlIGltcG9ydCBBcHBsZVBvcnQKLWZy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQubGVha2RldGVjdG9yIGltcG9ydCBMZWFrRGV0
ZWN0b3IKK2Zyb20gd2Via2l0cHkucG9ydC5hcHBsZSBpbXBvcnQgQXBwbGVQb3J0Citmcm9tIHdl
YmtpdHB5LnBvcnQubGVha2RldGVjdG9yIGltcG9ydCBMZWFrRGV0ZWN0b3IKIAogCiBfbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvbWFjX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9tYWNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDE0ODQ5NykKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9tYWNfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTI2LDgg
KzI2LDggQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLnBvcnQubWFjIGltcG9ydCBNYWNQb3J0Ci1mcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5wb3J0IGltcG9ydCBwb3J0X3Rlc3RjYXNlCitmcm9tIHdlYmtpdHB5LnBvcnQubWFj
IGltcG9ydCBNYWNQb3J0Citmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IHBvcnRfdGVzdGNhc2UK
IGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtX21vY2sgaW1wb3J0IE1vY2tG
aWxlU3lzdGVtCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBv
cnQgT3V0cHV0Q2FwdHVyZQogZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2Nr
T3B0aW9ucwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L21vY2tfZHJ0LnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tb2NrX2RydC5weQkocmV2
aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L21vY2tfZHJ0LnB5
CSh3b3JraW5nIGNvcHkpCkBAIC00OSw4ICs0OSw4IEBAIGlmIHNjcmlwdF9kaXIgbm90IGluIHN5
cy5wYXRoOgogICAgIHN5cy5wYXRoLmFwcGVuZChzY3JpcHRfZGlyKQogCiBmcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9zdAotZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMucG9ydC5kcml2ZXIgaW1wb3J0IERyaXZlcklucHV0LCBEcml2ZXJPdXRw
dXQsIERyaXZlclByb3h5Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmZhY3Rvcnkg
aW1wb3J0IFBvcnRGYWN0b3J5Citmcm9tIHdlYmtpdHB5LnBvcnQuZHJpdmVyIGltcG9ydCBEcml2
ZXJJbnB1dCwgRHJpdmVyT3V0cHV0LCBEcml2ZXJQcm94eQorZnJvbSB3ZWJraXRweS5wb3J0LmZh
Y3RvcnkgaW1wb3J0IFBvcnRGYWN0b3J5CiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25h
bWVfXykKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L21vY2tfZHJ0X3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tb2NrX2Ry
dF91bml0dGVzdC5weQkocmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L21vY2tfZHJ0X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMCArMzMs
MTAgQEAgaW1wb3J0IHVuaXR0ZXN0MiBhcyB1bml0dGVzdAogCiBmcm9tIHdlYmtpdHB5LmNvbW1v
biBpbXBvcnQgbmV3c3RyaW5naW8KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1o
b3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy5wb3J0IGltcG9ydCBtb2NrX2RydAotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBp
bXBvcnQgcG9ydF90ZXN0Y2FzZQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBv
cnQgdGVzdAotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5mYWN0b3J5IGltcG9ydCBQ
b3J0RmFjdG9yeQorZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBtb2NrX2RydAorZnJvbSB3ZWJr
aXRweS5wb3J0IGltcG9ydCBwb3J0X3Rlc3RjYXNlCitmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0
IHRlc3QKK2Zyb20gd2Via2l0cHkucG9ydC5mYWN0b3J5IGltcG9ydCBQb3J0RmFjdG9yeQogZnJv
bSB3ZWJraXRweS50b29sIGltcG9ydCBtb2NrdG9vbAogCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5CShyZXZpc2lvbiAxNDg0OTcpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvcG9ydF90ZXN0Y2FzZS5weQkod29ya2luZyBjb3B5
KQpAQCAtNDAsOCArNDAsOCBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZl
X21vCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbV9tb2NrIGltcG9ydCBN
b2NrRmlsZVN5c3RlbQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUg
aW1wb3J0IE91dHB1dENhcHR1cmUKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1o
b3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy5wb3J0LmJhc2UgaW1wb3J0IFBvcnQKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQu
c2VydmVyX3Byb2Nlc3NfbW9jayBpbXBvcnQgTW9ja1NlcnZlclByb2Nlc3MKK2Zyb20gd2Via2l0
cHkucG9ydC5iYXNlIGltcG9ydCBQb3J0Citmcm9tIHdlYmtpdHB5LnBvcnQuc2VydmVyX3Byb2Nl
c3NfbW9jayBpbXBvcnQgTW9ja1NlcnZlclByb2Nlc3MKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rl
c3RzLnNlcnZlcnMgaW1wb3J0IGh0dHBfc2VydmVyX2Jhc2UKIGZyb20gd2Via2l0cHkudG9vbC5t
b2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L3F0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9x
dC5weQkocmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3F0
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw4IEBAIGltcG9ydCBvcwogCiBmcm9tIHdl
YmtpdHB5LmNvbW1vbi5tZW1vaXplZCBpbXBvcnQgbWVtb2l6ZWQKIGZyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2NvbmZpZ3VyYXRpb24gaW1wb3J0IFRlc3RDb25maWd1cmF0
aW9uCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmJhc2UgaW1wb3J0IFBvcnQKLWZy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQueHZmYmRyaXZlciBpbXBvcnQgWHZmYkRyaXZl
cgorZnJvbSB3ZWJraXRweS5wb3J0LmJhc2UgaW1wb3J0IFBvcnQKK2Zyb20gd2Via2l0cHkucG9y
dC54dmZiZHJpdmVyIGltcG9ydCBYdmZiRHJpdmVyCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dl
cihfX25hbWVfXykKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3F0X3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9xdF91bml0
dGVzdC5weQkocmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L3F0X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw4IEBAIGZyb20gY29w
eSBpbXBvcnQgZGVlcGNvcHkKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmVf
bW9jayBpbXBvcnQgTW9ja0V4ZWN1dGl2ZSwgTW9ja0V4ZWN1dGl2ZTIKIGZyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJlCiBmcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdF9tb2NrIGltcG9ydCBNb2NrU3lzdGVtSG9z
dAotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgcG9ydF90ZXN0Y2FzZQot
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5xdCBpbXBvcnQgUXRQb3J0Citmcm9tIHdl
YmtpdHB5LnBvcnQgaW1wb3J0IHBvcnRfdGVzdGNhc2UKK2Zyb20gd2Via2l0cHkucG9ydC5xdCBp
bXBvcnQgUXRQb3J0CiBmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tPcHRp
b25zCiAKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNz
X3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9z
ZXJ2ZXJfcHJvY2Vzc191bml0dGVzdC5weQkocmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw4ICszMCw4IEBAIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5p
dHRlc3QyIGFzIHVuaXR0ZXN0CiAKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuZmFj
dG9yeSBpbXBvcnQgUG9ydEZhY3RvcnkKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQg
aW1wb3J0IHNlcnZlcl9wcm9jZXNzCitmcm9tIHdlYmtpdHB5LnBvcnQuZmFjdG9yeSBpbXBvcnQg
UG9ydEZhY3RvcnkKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgc2VydmVyX3Byb2Nlc3MKIGZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0IGltcG9ydCBTeXN0ZW1Ib3N0CiBm
cm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdF9tb2NrIGltcG9ydCBNb2NrU3lz
dGVtSG9zdAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0
IE91dHB1dENhcHR1cmUKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC90ZXN0LnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC90ZXN0LnB5CShyZXZp
c2lvbiAxNDg0OTcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvdGVzdC5weQkod29y
a2luZyBjb3B5KQpAQCAtMzAsOCArMzAsOCBAQCBpbXBvcnQgYmFzZTY0CiBpbXBvcnQgc3lzCiBp
bXBvcnQgdGltZQogCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBQb3J0
LCBEcml2ZXIsIERyaXZlck91dHB1dAotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5i
YXNlIGltcG9ydCBWaXJ0dWFsVGVzdFN1aXRlCitmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IFBv
cnQsIERyaXZlciwgRHJpdmVyT3V0cHV0Citmcm9tIHdlYmtpdHB5LnBvcnQuYmFzZSBpbXBvcnQg
VmlydHVhbFRlc3RTdWl0ZQogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3Rf
Y29uZmlndXJhdGlvbiBpbXBvcnQgVGVzdENvbmZpZ3VyYXRpb24KIGZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5maWxlc3lzdGVtX21vY2sgaW1wb3J0IE1vY2tGaWxlU3lzdGVtCiBmcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hsb2dzIGltcG9ydCBDcmFzaExvZ3MKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQkocmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBA
QCBpbXBvcnQgc3lzCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdCBpbXBv
cnQgU3lzdGVtSG9zdAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBv
cnQgU2NyaXB0RXJyb3IsIEV4ZWN1dGl2ZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnBh
dGggaW1wb3J0IGFic3BhdGhfdG9fdXJpCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0
LmFwcGxlIGltcG9ydCBBcHBsZVBvcnQKK2Zyb20gd2Via2l0cHkucG9ydC5hcHBsZSBpbXBvcnQg
QXBwbGVQb3J0CiAKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbl91bml0dGVzdC5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAx
NDg0OTcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luX3VuaXR0ZXN0LnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw4IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5leGVjdXRpdmVfbW8KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtX21v
Y2sgaW1wb3J0IE1vY2tGaWxlU3lzdGVtCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0
cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLnN5c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9ja1N5c3RlbUhvc3QKLWZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IHBvcnRfdGVzdGNhc2UKLWZyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLnBvcnQud2luIGltcG9ydCBXaW5Qb3J0Citmcm9tIHdlYmtpdHB5LnBvcnQgaW1w
b3J0IHBvcnRfdGVzdGNhc2UKK2Zyb20gd2Via2l0cHkucG9ydC53aW4gaW1wb3J0IFdpblBvcnQK
IGZyb20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKIAogCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQveHZmYmRyaXZlci5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQveHZmYmRyaXZlci5weQkocmV2aXNpb24gMTQ4
NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3h2ZmJkcml2ZXIucHkJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAgaW1wb3J0IG9zCiBpbXBvcnQgcmUKIGltcG9ydCB0
aW1lCiAKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuc2VydmVyX3Byb2Nlc3MgaW1w
b3J0IFNlcnZlclByb2Nlc3MKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuZHJpdmVy
IGltcG9ydCBEcml2ZXIKK2Zyb20gd2Via2l0cHkucG9ydC5zZXJ2ZXJfcHJvY2VzcyBpbXBvcnQg
U2VydmVyUHJvY2VzcworZnJvbSB3ZWJraXRweS5wb3J0LmRyaXZlciBpbXBvcnQgRHJpdmVyCiBm
cm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZV9sb2NrIGltcG9ydCBGaWxlTG9jawogCiBf
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQveHZmYmRyaXZlcl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQveHZmYmRyaXZlcl91bml0dGVzdC5weQkocmV2aXNpb24gMTQ4
NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3h2ZmJkcml2ZXJfdW5pdHRlc3Qu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTMzLDkgKzMzLDkgQEAgZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtLmZpbGVzeXN0ZW1fbQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2
ZV9tb2NrIGltcG9ydCBNb2NrRXhlY3V0aXZlMgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
Lm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKIGZyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0Ci1mcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBQb3J0Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5wb3J0LnNlcnZlcl9wcm9jZXNzX21vY2sgaW1wb3J0IE1vY2tTZXJ2ZXJQcm9jZXNzCi1m
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0Lnh2ZmJkcml2ZXIgaW1wb3J0IFh2ZmJEcml2
ZXIKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgUG9ydAorZnJvbSB3ZWJraXRweS5wb3J0LnNl
cnZlcl9wcm9jZXNzX21vY2sgaW1wb3J0IE1vY2tTZXJ2ZXJQcm9jZXNzCitmcm9tIHdlYmtpdHB5
LnBvcnQueHZmYmRyaXZlciBpbXBvcnQgWHZmYkRyaXZlcgogZnJvbSB3ZWJraXRweS50b29sLm1v
Y2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucwogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19u
YW1lX18pCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvYm90L2JvdGluZm9fdW5p
dHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2JvdC9i
b3RpbmZvX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAxNDg0OTcpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvYm90L2JvdGluZm9fdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDcgKzMxLDcgQEAgaW1wb3J0IHVuaXR0ZXN0MiBhcyB1bml0dGVzdAogZnJvbSB3ZWJraXRweS50
b29sLmJvdC5ib3RpbmZvIGltcG9ydCBCb3RJbmZvCiBmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rv
b2wgaW1wb3J0IE1vY2tUb29sCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuc3RhdHVzc2VydmVy
X21vY2sgaW1wb3J0IE1vY2tTdGF0dXNTZXJ2ZXIKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LnBvcnQudGVzdCBpbXBvcnQgVGVzdFBvcnQKK2Zyb20gd2Via2l0cHkucG9ydC50ZXN0IGltcG9y
dCBUZXN0UG9ydAogCiAKIGNsYXNzIEJvdEluZm9UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9nYXJkZW5vbWF0aWMucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2dhcmRl
bm9tYXRpYy5weQkocmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
b29sL2NvbW1hbmRzL2dhcmRlbm9tYXRpYy5weQkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIs
NyBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMucG9ydCBpbXBvcnQgYnVpbGRlcnMKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQg
YnVpbGRlcnMKIGZyb20gd2Via2l0cHkudG9vbC5jb21tYW5kcy5yZWJhc2VsaW5lIGltcG9ydCBB
YnN0cmFjdFJlYmFzZWxpbmluZ0NvbW1hbmQKIGZyb20gd2Via2l0cHkudG9vbC5zZXJ2ZXJzLmdh
cmRlbmluZ3NlcnZlciBpbXBvcnQgR2FyZGVuaW5nSFRUUFNlcnZlcgogCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcGVyZmFsaXplcl91bml0dGVzdC5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcGVyZmFsaXpl
cl91bml0dGVzdC5weQkocmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90b29sL2NvbW1hbmRzL3BlcmZhbGl6ZXJfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDcgQEAgaW1wb3J0IHVuaXR0ZXN0MiBhcyB1bml0dGVzdAogZnJvbSB3ZWJraXRw
eS5jb21tb24ubmV0LmJ1aWxkYm90IGltcG9ydCBCdWlsZGVyCiBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgogZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKLWZyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzLnBvcnQudGVzdCBpbXBvcnQgVGVzdFBvcnQKK2Zyb20gd2Via2l0cHku
cG9ydC50ZXN0IGltcG9ydCBUZXN0UG9ydAogZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLnBl
cmZhbGl6ZXIgaW1wb3J0IFBlcmZhbGl6ZXJUYXNrCiBmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rv
b2wgaW1wb3J0IE1vY2tUb29sCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9j
b21tYW5kcy9xdWVyaWVzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dG9vbC9jb21tYW5kcy9xdWVyaWVzLnB5CShyZXZpc2lvbiAxNDg0OTcpCisrKyBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQkod29ya2luZyBjb3B5KQpAQCAt
NDgsNyArNDgsNyBAQCBmcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMuYWJzdHJhY3RzZXF1CiBm
cm9tIHdlYmtpdHB5LnRvb2wuZ3JhbW1hciBpbXBvcnQgcGx1cmFsaXplCiBmcm9tIHdlYmtpdHB5
LnRvb2wubXVsdGljb21tYW5kdG9vbCBpbXBvcnQgQ29tbWFuZAogZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMubW9kZWxzLnRlc3RfZXhwZWN0YXRpb25zIGltcG9ydCBUZXN0RXhwZWN0YXRpb25z
Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBwbGF0Zm9ybV9vcHRpb25z
LCBjb25maWd1cmF0aW9uX29wdGlvbnMKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgcGxhdGZv
cm1fb3B0aW9ucywgY29uZmlndXJhdGlvbl9vcHRpb25zCiAKIF9sb2cgPSBsb2dnaW5nLmdldExv
Z2dlcihfX25hbWVfXykKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1h
bmRzL3F1ZXJpZXNfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDE0ODQ5NykK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzX3VuaXR0ZXN0
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIGZyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbS5vdXRwdXRjYXB0dXIKIGZyb20gd2Via2l0cHkuY29tbW9uLm5ldC5idWd6aWxsYSBp
bXBvcnQgQnVnemlsbGEKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJl
IGltcG9ydCBPdXRwdXRDYXB0dXJlCiBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkubW9jayBpbXBv
cnQgTW9jawotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC50ZXN0IGltcG9ydCBUZXN0
UG9ydAorZnJvbSB3ZWJraXRweS5wb3J0LnRlc3QgaW1wb3J0IFRlc3RQb3J0CiBmcm9tIHdlYmtp
dHB5LnRvb2wuY29tbWFuZHMuY29tbWFuZHRlc3QgaW1wb3J0IENvbW1hbmRzVGVzdAogZnJvbSB3
ZWJraXRweS50b29sLmNvbW1hbmRzLnF1ZXJpZXMgaW1wb3J0ICoKIGZyb20gd2Via2l0cHkudG9v
bC5tb2NrdG9vbCBpbXBvcnQgTW9ja1Rvb2wsIE1vY2tPcHRpb25zCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZS5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZS5weQkocmV2aXNp
b24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFz
ZWxpbmUucHkJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDggQEAgZnJvbSB3ZWJraXRweS5j
b21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbQogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29u
dHJvbGxlcnMudGVzdF9yZXN1bHRfd3JpdGVyIGltcG9ydCBUZXN0UmVzdWx0V3JpdGVyCiBmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMgaW1wb3J0IHRlc3RfZmFpbHVyZXMKIGZyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2V4cGVjdGF0aW9ucyBpbXBvcnQgVGVz
dEV4cGVjdGF0aW9ucywgQkFTRUxJTkVfU1VGRklYX0xJU1QKLWZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLnBvcnQgaW1wb3J0IGJ1aWxkZXJzCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5w
b3J0IGltcG9ydCBmYWN0b3J5Citmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGJ1aWxkZXJzCitm
cm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGZhY3RvcnkKIGZyb20gd2Via2l0cHkudG9vbC5tdWx0
aWNvbW1hbmR0b29sIGltcG9ydCBDb21tYW5kCiAKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90b29sL3NlcnZlcnMvZ2FyZGVuaW5nc2VydmVyLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2dhcmRlbmluZ3NlcnZlci5weQkocmV2aXNp
b24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZ2FyZGVu
aW5nc2VydmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIGltcG9ydCB1cmxs
aWIKIAogZnJvbSB3ZWJraXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCiBmcm9t
IHdlYmtpdHB5LnRvb2wuc2VydmVycy5yZWZsZWN0aW9uaGFuZGxlciBpbXBvcnQgUmVmbGVjdGlv
bkhhbmRsZXIKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGJ1aWxkZXJz
Citmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGJ1aWxkZXJzCiAKIAogX2xvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKF9fbmFtZV9fKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3Nl
cnZlcnMvZ2FyZGVuaW5nc2VydmVyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2dhcmRlbmluZ3NlcnZlcl91bml0dGVzdC5weQko
cmV2aXNpb24gMTQ4NDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMv
Z2FyZGVuaW5nc2VydmVyX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3
IEBAIGltcG9ydCB1bml0dGVzdDIgYXMgdW5pdHRlc3QKIAogZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKIGZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2NvbmZpZ3VyYXRpb24gaW1wb3J0ICoKLWZyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGJ1aWxkZXJzCitmcm9tIHdlYmtpdHB5LnBv
cnQgaW1wb3J0IGJ1aWxkZXJzCiBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkubW9jayBpbXBvcnQg
TW9jawogZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrVG9vbAogZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZV9tb2NrIGltcG9ydCBNb2NrRXhlY3V0aXZl
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9yZWJhc2VsaW5lc2Vy
dmVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJz
L3JlYmFzZWxpbmVzZXJ2ZXIucHkJKHJldmlzaW9uIDE0ODQ5NykKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdG9vbC9zZXJ2ZXJzL3JlYmFzZWxpbmVzZXJ2ZXIucHkJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDcgKzMzLDcgQEAgaW1wb3J0IEJhc2VIVFRQU2VydmVyCiAKIGZyb20gd2Via2l0cHku
Y29tbW9uLmhvc3QgaW1wb3J0IEhvc3QgICMgRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBiZSBuZWVk
ZWQhCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRF
cnJvcgotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5iYXNlIGltcG9ydCBQb3J0Citm
cm9tIHdlYmtpdHB5LnBvcnQuYmFzZSBpbXBvcnQgUG9ydAogZnJvbSB3ZWJraXRweS50b29sLnNl
cnZlcnMucmVmbGVjdGlvbmhhbmRsZXIgaW1wb3J0IFJlZmxlY3Rpb25IYW5kbGVyCiAKIApJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvcmViYXNlbGluZXNlcnZlcl91
bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2Vy
dmVycy9yZWJhc2VsaW5lc2VydmVyX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAxNDg0OTcpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9yZWJhc2VsaW5lc2VydmVyX3VuaXR0
ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIGltcG9ydCB1bml0dGVzdDIg
YXMgdW5pdHRlc3QKIGZyb20gd2Via2l0cHkuY29tbW9uLm5ldCBpbXBvcnQgcmVzdWx0c2pzb25w
YXJzZXJfdW5pdHRlc3QKIGZyb20gd2Via2l0cHkuY29tbW9uLmhvc3RfbW9jayBpbXBvcnQgTW9j
a0hvc3QKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlLmpzb25fcmVz
dWx0c19nZW5lcmF0b3IgaW1wb3J0IHN0cmlwX2pzb25fd3JhcHBlcgotZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMucG9ydC5iYXNlIGltcG9ydCBQb3J0Citmcm9tIHdlYmtpdHB5LnBvcnQuYmFz
ZSBpbXBvcnQgUG9ydAogZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLnJlYmFzZWxpbmVzZXJ2
ZXIgaW1wb3J0IFRlc3RDb25maWcsIFJlYmFzZWxpbmVTZXJ2ZXIKIGZyb20gd2Via2l0cHkudG9v
bC5zZXJ2ZXJzIGltcG9ydCByZWJhc2VsaW5lc2VydmVyCiAK
</data>
<flag name="review"
          id="220057"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>