<?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>225221</bug_id>
          
          <creation_ts>2021-04-29 17:29:30 -0700</creation_ts>
          <short_desc>[run-api-tests] Use webkitcorepy&apos;s TaskPool</short_desc>
          <delta_ts>2021-05-05 17:46:20 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=225220</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=225230</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=225311</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=225361</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=217680</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=225427</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>dewei_zhu</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1755597</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-04-29 17:29:30 -0700</bug_when>
    <thetext>In order for run-api-tests to support Python 3.8 on Apple&apos;s platforms, we need run-api-tests to use webkitcorepy&apos;s TaskPool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755598</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-29 17:30:02 -0700</bug_when>
    <thetext>&lt;rdar://problem/77352465&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756383</commentid>
    <comment_count>2</comment_count>
      <attachid>427625</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-05-03 17:12:40 -0700</bug_when>
    <thetext>Created attachment 427625
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756690</commentid>
    <comment_count>3</comment_count>
      <attachid>427703</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-05-04 15:37:25 -0700</bug_when>
    <thetext>Created attachment 427703
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756947</commentid>
    <comment_count>4</comment_count>
      <attachid>427768</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-05-05 08:46:45 -0700</bug_when>
    <thetext>Created attachment 427768
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756991</commentid>
    <comment_count>5</comment_count>
      <attachid>427780</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-05-05 10:53:16 -0700</bug_when>
    <thetext>Created attachment 427780
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757119</commentid>
    <comment_count>6</comment_count>
      <attachid>427780</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2021-05-05 15:06:06 -0700</bug_when>
    <thetext>Comment on attachment 427780
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=427780&amp;action=review

&gt; Tools/Scripts/webkitpy/api_tests/runner.py:225
&gt; +    if status == Runner.STATUS_PASSED and not output and Runner.instance.port.get_option(&apos;quiet&apos;):
&gt; +        Runner.instance.printer.write_update(&apos;{} {} {}&apos;.format(worker, test, Runner.NAME_FOR_STATUS[status]))
&gt; +    else:
&gt; +        Runner.instance.printer.write_update(&apos;{} {} {}&apos;.format(worker, test, Runner.NAME_FOR_STATUS[status]))

Are those expected to be identical?

&gt; Tools/Scripts/webkitpy/api_tests/runner.py:233
&gt; +class Runner(object):

Moving Runner to the bottom of this file make it more difficult to compare if we made any change to this class. Maybe move it back?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757141</commentid>
    <comment_count>7</comment_count>
      <attachid>427816</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-05-05 15:46:50 -0700</bug_when>
    <thetext>Created attachment 427816
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757164</commentid>
    <comment_count>8</comment_count>
      <attachid>427816</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2021-05-05 16:39:42 -0700</bug_when>
    <thetext>Comment on attachment 427816
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=427816&amp;action=review

r=me

&gt; Tools/ChangeLog:18
&gt; +        (_Worker.setup): Pass port object to worker process.
&gt; +        (_Worker.setup): Pass port object to worker process.

Nit: those two lines are identical, we only need one, right?

&gt; Tools/Scripts/webkitpy/api_tests/runner.py:118
&gt; +            Runner.instance = self

Discussed in person, let&apos;s add an assertion that `Runner.instance is None` before this assignment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757177</commentid>
    <comment_count>9</comment_count>
      <attachid>427822</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-05-05 16:55:57 -0700</bug_when>
    <thetext>Created attachment 427822
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757191</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-05 17:22:22 -0700</bug_when>
    <thetext>Committed r277061 (237367@main): &lt;https://commits.webkit.org/237367@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 427822.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427625</attachid>
            <date>2021-05-03 17:12:40 -0700</date>
            <delta_ts>2021-05-05 08:46:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225221-20210503171239.patch</filename>
            <type>text/plain</type>
            <size>36019</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3NjkzNSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM0IEBACisyMDIxLTA1LTAzICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbcnVuLWFwaS10ZXN0c10gVXNlIHdlYmtpdGNvcmVweSdzIFRhc2tQb29s
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUyMjEK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc3MzUyNDY1PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tYXBpLXRlc3RzOiBNb3Zl
ZCBmcm9tIHdlYmtpdHB5L2FwaV90ZXN0cy9ydW5fYXBpX3Rlc3RzLnB5LgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvYXBpX3Rlc3RzL3J1bl9hcGlfdGVzdHMucHk6IE1vdmVkIHRvIHJ1bi1h
cGktdGVzdHMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9hcGlfdGVzdHMvcnVubmVyLnB5
OgorICAgICAgICAoX1dvcmtlcik6IFJlcHJlc2VudGF0aW9uIG9mIFdvcmtlciBwcm9jZXNzLgor
ICAgICAgICAoX1dvcmtlci5zZXR1cCk6IFBhc3MgcG9ydCBvYmplY3QgdG8gd29ya2VyIHByb2Nl
c3MuCisgICAgICAgIChfV29ya2VyLnRlYXJkb3duKTogVW4tc2V0IHBvcnQgb2JqZWN0IG9uIHdv
cmtlciBwcm9jZXNzLgorICAgICAgICAoX1dvcmtlci5fX2luaXRfXyk6IENvbnN0cnVjdCBvYmpl
Y3QgdG8gaG9sZCBhIFdvcmtlciBwcm9jZXNzJ3MgdmFyaWFibGVzLgorICAgICAgICAoX1dvcmtl
ci5fcnVuX3NpbmdsZV90ZXN0KTogTG9nIHRlc3QgcmVzdWx0cywgcmV0dXJuIHJlc3VsdHMgdG8g
Y2FsbGVyLgorICAgICAgICAoX1dvcmtlci5ydW4pOiBSdW4gc2hhcmQgd2l0aCBhbmQgcmV0dXJu
IHJlc3VsdHMgdG8gcGFyZW50IHByb2Nlc3MuCisgICAgICAgIChzZXR1cF9zaGFyZCk6IFJ1biBz
ZXR1cCBpbiBXb3JrZXIgcHJvY2Vzcy4KKyAgICAgICAgKHJ1bl9zaGFyZCk6IFJ1biB0ZXN0IHNo
YXJkIGluIFdvcmtlciBwcm9jZXNzLgorICAgICAgICAodGVhcmRvd25fc2hhcmQpOiBUZWFyIGRv
d24gV29ya2VyIHByb2Nlc3MuCisgICAgICAgIChSdW5uZXIuX19pbml0X18pOgorICAgICAgICAo
UnVubmVyLmNvbW1hbmRfZm9yX3BvcnQpOgorICAgICAgICAoUnVubmVyLl9zaGFyZF90ZXN0cyk6
IFNwbGl0IHRlc3RzIGludG8gc2hhcmRzIHRvIGJlIGVmZmljaWVudGx5IHJ1bi4KKyAgICAgICAg
KFJ1bm5lci5ydW4pOiBVc2UgVGFza1Bvb2wgdG8gcnVuIHRlc3RzIGluIHN1YiBwcm9jZXNzZXMu
CisgICAgICAgIChSdW5uZXIuY2FsbGJhY2spOiBTYXZlIHJlc3VsdHMgaW4gcGFyZW50IHByb2Nl
c3MuCisgICAgICAgIChSdW5uZXIucmVzdWx0X21hcF9ieV9zdGF0dXMpOgorICAgICAgICAoUnVu
bmVyLmhhbmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChfV29ya2VyLl9ydW5fc2hhcmRfd2l0aF9i
aW5hcnkpOiBEZWxldGVkLgorICAgICAgICAoX1dvcmtlci5wb3N0KTogRGVsZXRlZC4KKyAgICAg
ICAgKF9Xb3JrZXIuaGFuZGxlKTogRGVsZXRlZC4KKwogMjAyMS0wNS0wMyAgSm9uYXRoYW4gQmVk
YXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW3dlYmtpdHB5XSBTdXBwb3J0IHBp
Y2tsaW5nIHBsYXRmb3JtaW5mbwpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4tYXBpLXRlc3RzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvcnVuLWFwaS10ZXN0cwkocmV2aXNpb24gMjc2OTM1
KQorKysgVG9vbHMvU2NyaXB0cy9ydW4tYXBpLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAKLSMgQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yMiw3ICsyMiwxNDUgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKICMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAK
LSIiIldyYXBwZXIgYXJvdW5kIHdlYmtpdHB5L2FwaV90ZXN0cy9ydW5fYXBpX3Rlc3RzLnB5IiIi
Ci1mcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nX2Jvb3RzdHJhcAor
ZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoraW1wb3J0IGxvZ2dpbmcKK2lt
cG9ydCBvcHRwYXJzZQoraW1wb3J0IHN5cworaW1wb3J0IHRyYWNlYmFjawogCi1tdWx0aXByb2Nl
c3NpbmdfYm9vdHN0cmFwLnJ1bignd2Via2l0cHknLCAnYXBpX3Rlc3RzJywgJ3J1bl9hcGlfdGVz
dHMucHknKQorZnJvbSB3ZWJraXRweS5hcGlfdGVzdHMubWFuYWdlciBpbXBvcnQgTWFuYWdlcgor
ZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdCBpbXBvcnQgSG9zdAorZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMudmlld3MubWV0ZXJlZF9zdHJlYW0gaW1wb3J0IE1ldGVyZWRTdHJlYW0KK2Zyb20g
d2Via2l0cHkucG9ydCBpbXBvcnQgY29uZmlndXJhdGlvbl9vcHRpb25zLCBwbGF0Zm9ybV9vcHRp
b25zLCBiYXNlLCB3aW4KK2Zyb20gd2Via2l0cHkucmVzdWx0cy5vcHRpb25zIGltcG9ydCB1cGxv
YWRfb3B0aW9ucworCitFWENFUFRJT05BTF9FWElUX1NUQVRVUyA9IC0xCitJTlRFUlJVUFRfRVhJ
VF9TVEFUVVMgPSAtMgorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKwor
ZGVmIG1haW4oYXJndiwgc3Rkb3V0LCBzdGRlcnIpOgorICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJz
ZV9hcmdzKGFyZ3YpCisgICAgaG9zdCA9IEhvc3QoKQorCisgICAgdHJ5OgorICAgICAgICBvcHRp
b25zLndlYmtpdF90ZXN0X3J1bm5lciA9IFRydWUKKyAgICAgICAgcG9ydCA9IGhvc3QucG9ydF9m
YWN0b3J5LmdldChvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zKQorICAgIGV4Y2VwdCBOb3RJbXBs
ZW1lbnRlZEVycm9yIGFzIGU6CisgICAgICAgIHByaW50KHN0cihlKSwgZmlsZT1zdGRlcnIpCisg
ICAgICAgIHJldHVybiBFWENFUFRJT05BTF9FWElUX1NUQVRVUworCisgICAgIyBTb21lIHBsYXRm
b3JtcyBkbyBub3Qgc3VwcG9ydCBBUEkgdGVzdHMKKyAgICBkb2VzX25vdF9zdXBwb3J0X2FwaV90
ZXN0cyA9IFsnaW9zLWRldmljZSddCisgICAgaWYgcG9ydC5vcGVyYXRpbmdfc3lzdGVtKCkgaW4g
ZG9lc19ub3Rfc3VwcG9ydF9hcGlfdGVzdHM6CisgICAgICAgIHByaW50KCd7fSBjYW5ub3QgcnVu
IEFQSSB0ZXN0cycuZm9ybWF0KHBvcnQub3BlcmF0aW5nX3N5c3RlbSgpKSwgZmlsZT1zdGRlcnIp
CisgICAgICAgIHJldHVybiBFWENFUFRJT05BTF9FWElUX1NUQVRVUworCisgICAgdHJ5OgorICAg
ICAgICByZXR1cm4gcnVuKHBvcnQsIG9wdGlvbnMsIGFyZ3MsIHN0ZGVycikKKyAgICBleGNlcHQg
S2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgIHJldHVybiBJTlRFUlJVUFRfRVhJVF9TVEFUVVMK
KyAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBpZiBpc2luc3RhbmNlKGUs
IEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwcmludCgnXG4lcyByYWlzZWQ6ICVzJyAlIChlLl9f
Y2xhc3NfXy5fX25hbWVfXywgc3RyKGUpKSwgZmlsZT1zdGRlcnIpCisgICAgICAgICAgICB0cmFj
ZWJhY2sucHJpbnRfZXhjKGZpbGU9c3RkZXJyKQorICAgICAgICByZXR1cm4gRVhDRVBUSU9OQUxf
RVhJVF9TVEFUVVMKKworCitkZWYgcnVuKHBvcnQsIG9wdGlvbnMsIGFyZ3MsIGxvZ2dpbmdfc3Ry
ZWFtKToKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgbG9nZ2VyLnNldExl
dmVsKGxvZ2dpbmcuREVCVUcgaWYgb3B0aW9ucy52ZXJib3NlIGVsc2UgbG9nZ2luZy5FUlJPUiBp
ZiBvcHRpb25zLnF1aWV0IGVsc2UgbG9nZ2luZy5JTkZPKQorCisgICAgdHJ5OgorICAgICAgICBz
dHJlYW0gPSBNZXRlcmVkU3RyZWFtKGxvZ2dpbmdfc3RyZWFtLCBvcHRpb25zLnZlcmJvc2UsIGxv
Z2dlcj1sb2dnZXIsIG51bWJlcl9vZl9jb2x1bW5zPXBvcnQuaG9zdC5wbGF0Zm9ybS50ZXJtaW5h
bF93aWR0aCgpLCBwcmludF90aW1lc3RhbXBzPW9wdGlvbnMudGltZXN0YW1wcykKKyAgICAgICAg
bWFuYWdlciA9IE1hbmFnZXIocG9ydCwgb3B0aW9ucywgc3RyZWFtKQorCisgICAgICAgIHJlc3Vs
dCA9IG1hbmFnZXIucnVuKGFyZ3MsIGpzb25fb3V0cHV0PW9wdGlvbnMuanNvbl9vdXRwdXQpCisg
ICAgICAgIF9sb2cuZGVidWcoIlRlc3RpbmcgY29tcGxldGVkLCBFeGl0IHN0YXR1czogJWQiICUg
cmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgZmluYWxseToKKyAgICAgICAgc3Ry
ZWFtLmNsZWFudXAoKQorCisKK2RlZiBwYXJzZV9hcmdzKGFyZ3MpOgorICAgIG9wdGlvbl9ncm91
cF9kZWZpbml0aW9ucyA9IFtdCisKKyAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnMuYXBwZW5k
KCgnUGxhdGZvcm0gb3B0aW9ucycsIHBsYXRmb3JtX29wdGlvbnMoKSkpCisgICAgb3B0aW9uX2dy
b3VwX2RlZmluaXRpb25zLmFwcGVuZCgoJ0NvbmZpZ3VyYXRpb24gb3B0aW9ucycsIGNvbmZpZ3Vy
YXRpb25fb3B0aW9ucygpKSkKKyAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnMuYXBwZW5kKCgn
UHJpbnRpbmcgT3B0aW9ucycsIFsKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy1xJywg
Jy0tcXVpZXQnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWxwPSdSdW4gcXVpZXRseSAoZXJyb3JzLCB3YXJuaW5ncywg
YW5kIHByb2dyZXNzIG9ubHkpJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctdics
ICctLXZlcmJvc2UnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdFbmFibGUgdmVyYm9zZSBwcmludGluZycpLAor
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS10aW1lc3RhbXBzJywgYWN0aW9uPSdzdG9y
ZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0nUHJpbnQgdGltZXN0YW1wcyBmb3IgZWFjaCBsb2dnZWQgbGluZScpLAorICAgICAgICBvcHRw
YXJzZS5tYWtlX29wdGlvbignLS1qc29uLW91dHB1dCcsIGFjdGlvbj0nc3RvcmUnLCBkZWZhdWx0
PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NhdmUgdGVzdCByZXN1
bHRzIGFzIEpTT04gdG8gZmlsZScpLAorICAgIF0pKQorCisgICAgb3B0aW9uX2dyb3VwX2RlZmlu
aXRpb25zLmFwcGVuZCgoJ1dlYktpdCBPcHRpb25zJywgWworICAgICAgICBvcHRwYXJzZS5tYWtl
X29wdGlvbignLWcnLCAnLS1ndWFyZC1tYWxsb2MnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZh
dWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdFbmFibGUgR3Vh
cmQgTWFsbG9jIChPUyBYIG9ubHkpJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCct
LXJvb3QnLCBhY3Rpb249J3N0b3JlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0nUGF0aCB0byBhIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBleGVjdXRhYmxlcyBuZWVkZWQg
dG8gcnVuIHRlc3RzLicpLAorICAgIF0pKQorCisgICAgb3B0aW9uX2dyb3VwX2RlZmluaXRpb25z
LmFwcGVuZCgoJ1Rlc3RpbmcgT3B0aW9ucycsIFsKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRp
b24oJy0td3RmLW9ubHknLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J1Rlc3RXVEYnLCBk
ZXN0PSdhcGlfYmluYXJ5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nT25s
eSBidWlsZCwgY2hlY2sgYW5kIHJ1biBUZXN0V1RGJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vf
b3B0aW9uKCctLXdlYmtpdC1vbmx5JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PSdUZXN0
V2ViS2l0QVBJJywgZGVzdD0nYXBpX2JpbmFyeScsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlbHA9J09ubHkgY2hlY2sgYW5kIHJ1biBUZXN0V2ViS2l0QVBJJyksCisgICAgICAgIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKCctLXdlYi1jb3JlLW9ubHknLCBhY3Rpb249J3N0b3JlX2NvbnN0
JywgY29uc3Q9J1Rlc3RXZWJDb3JlJywgZGVzdD0nYXBpX2JpbmFyeScsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9J09ubHkgY2hlY2sgYW5kIHJ1biBUZXN0V2ViQ29yZS5leGUg
KFdpbmRvd3Mgb25seSknKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0td2Via2l0
LWxlZ2FjeS1vbmx5JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PSdUZXN0V2ViS2l0TGVn
YWN5JywgZGVzdD0nYXBpX2JpbmFyeScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl
bHA9J09ubHkgY2hlY2sgYW5kIHJ1biBUZXN0V2ViS2l0TGVnYWN5LmV4ZSAoV2luZG93cyBvbmx5
KScpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLWQnLCAnLS1kdW1wJywgYWN0aW9u
PSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVscD0nRHVtcCBhbGwgdGVzdCBuYW1lcyB3aXRob3V0IHJ1bm5pbmcgdGhlbScpLAorICAg
ICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1idWlsZCcsIGRlc3Q9J2J1aWxkJywgYWN0aW9u
PSdzdG9yZV90cnVlJywgZGVmYXVsdD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoZWxwPSdDaGVjayB0byBlbnN1cmUgdGhlIGJ1aWxkIGlzIHVwLXRvLWRhdGUgKGRlZmF1bHQp
LicpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1uby1idWlsZCcsIGRlc3Q9J2J1
aWxkJywgYWN0aW9uPSdzdG9yZV9mYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlbHA9IkRvbid0IGNoZWNrIHRvIHNlZSBpZiB0aGUgYnVpbGQgaXMgdXAtdG8tZGF0ZS4iKSwK
KyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tdGltZW91dCcsIGRlZmF1bHQ9MzAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J051bWJlciBvZiBzZWNvbmRzIHRvIHdh
aXQgYmVmb3JlIGEgdGVzdCB0aW1lcyBvdXQnKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRp
b24oJy0tbm8tdGltZW91dCcsIGRlc3Q9J3RpbWVvdXQnLCBhY3Rpb249J3N0b3JlX2ZhbHNlJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRGlzYWJsZSB0aW1lb3V0cyBmb3Ig
YWxsIHRlc3RzJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWl0ZXJhdGlvbnMn
LCB0eXBlPSdpbnQnLCBkZWZhdWx0PTEsIGhlbHA9J051bWJlciBvZiB0aW1lcyB0byBydW4gdGhl
IHNldCBvZiB0ZXN0cyAoZS5nLiBBQkNBQkNBQkMpJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vf
b3B0aW9uKCctLXJlcGVhdC1lYWNoJywgdHlwZT0naW50JywgZGVmYXVsdD0xLCBoZWxwPSdOdW1i
ZXIgb2YgdGltZXMgdG8gcnVuIGVhY2ggdGVzdCAoZS5nLiBBQUFCQkJDQ0MpJyksCisKKyAgICAg
ICAgIyBGSVhNRTogUmVtb3ZlIHRoZSBkZWZhdWx0LCBBUEkgdGVzdHMgc2hvdWxkIGJlIG11bHRp
cHJvY2VzcworICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1jaGlsZC1wcm9jZXNzZXMn
LCBkZWZhdWx0PTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J051bWJlciBv
ZiBwcm9jZXNzZXMgdG8gcnVuIGluIHBhcmFsbGVsLicpLAorCisgICAgICAgICMgRklYTUU6IERl
ZmF1bHQgc2hvdWxkIGJlIGZhbHNlLCBBUEkgdGVzdHMgc2hvdWxkIG5vdCBiZSBmb3JjZWQgdG8g
cnVuIHNpbmdseQorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1ydW4tc2luZ2x5Jywg
YWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSdSdW4gYSBzZXBhcmF0ZSBwcm9jZXNzIGZvciBlYWNoIHRlc3QnKSwKKwor
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1mb3JjZScsIGFjdGlvbj0nc3RvcmVfdHJ1
ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1J1
biBhbGwgdGVzdHMsIGV2ZW4gRElTQUJMRUQgdGVzdHMnKSwKKyAgICAgICAgb3B0cGFyc2UubWFr
ZV9vcHRpb24oJy0tYWRkaXRpb25hbC1lbnYtdmFyJywgdHlwZT0nc3RyaW5nJywgYWN0aW9uPSdh
cHBlbmQnLCBkZWZhdWx0PVtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdQ
YXNzZXMgdGhhdCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgdGVzdHMgKC0tYWRkaXRpb25h
bC1lbnYtdmFyPU5BTUU9VkFMVUUpJyksCisgICAgXSkpCisgICAgb3B0aW9uX2dyb3VwX2RlZmlu
aXRpb25zLmFwcGVuZCgoJ1VwbG9hZCBPcHRpb25zJywgdXBsb2FkX29wdGlvbnMoKSkpCisKKyAg
ICBvcHRpb25fcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgICAgICB1c2FnZT0n
cnVuLWFwaS10ZXN0cyBbb3B0aW9uc10gWzx0ZXN0IG5hbWVzPi4uLl0nLAorICAgICAgICBkZXNj
cmlwdGlvbj0iIiJCeSBkZWZhdWx0LCBydW4tYXBpLXRlc3RzIHdpbGwgcnVuIGFsbCBBUEkgdGVz
dHMuIEl0IGFsc28gYWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnkgdGVzdHMgb2YgdGhlIFwKK2Zv
cm1hdCA8c3VpdGU+Ljx0ZXN0PiBvciA8Y2Fub25pY2FsaXplZCBiaW5hcnkgbmFtZT4uPHN1aXRl
Pi48dGVzdD4uIE5vdGUgdGhhdCBpbiB0aGUgY2FzZSB3aGVyZSBhIGJpbmFyeSBpcyBub3QgXAor
c3BlY2lmaWVkLCBvbmUgd2lsbCBiZSBpbmZlcnJlZCBieSBsaXN0aW5nIGFsbCBhdmFpbGFibGUg
dGVzdHMuIFNwZWNpZnlpbmcganVzdCBhIGJpbmFyeSBvciBqdXN0IGEgc3VpdGUgd2lsbCBjYXVz
ZSBldmVyeSBcCit0ZXN0IGNvbnRhaW5lZCB3aXRoaW4gdG8gYmUgcnVuLiBUaGUgY2Fub25pY2Fs
aXplZCBiaW5hcnkgbmFtZSBpcyB0aGUgYmluYXJ5IG5hbWUgd2l0aCBhbnkgZmlsZW5hbWUgZXh0
ZW5zaW9uIFwKK3N0cmlwcGVkLiBGb3IgVW5peCBwb3J0cywgdGhlc2UgYmluYXJpZXMgYXJlIHt9
IGFuZCB7fS4gRm9yIFdpbmRvd3MgcG9ydHMsIHRoZXkgYXJlIHt9IGFuZCB7fS4iIiIuZm9ybWF0
KAorICAgICAgICAgICAgJywgJy5qb2luKGJhc2UuUG9ydC5BUElfVEVTVF9CSU5BUllfTkFNRVNb
Oi0xXSksIGJhc2UuUG9ydC5BUElfVEVTVF9CSU5BUllfTkFNRVNbLTFdLAorICAgICAgICAgICAg
JywgJy5qb2luKHdpbi5XaW5Qb3J0LkFQSV9URVNUX0JJTkFSWV9OQU1FU1s6LTFdKSwgd2luLldp
blBvcnQuQVBJX1RFU1RfQklOQVJZX05BTUVTWy0xXSwKKyAgICApKQorCisgICAgZm9yIGdyb3Vw
X25hbWUsIGdyb3VwX29wdGlvbnMgaW4gb3B0aW9uX2dyb3VwX2RlZmluaXRpb25zOgorICAgICAg
ICBvcHRpb25fZ3JvdXAgPSBvcHRwYXJzZS5PcHRpb25Hcm91cChvcHRpb25fcGFyc2VyLCBncm91
cF9uYW1lKQorICAgICAgICBvcHRpb25fZ3JvdXAuYWRkX29wdGlvbnMoZ3JvdXBfb3B0aW9ucykK
KyAgICAgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uX2dyb3VwKG9wdGlvbl9ncm91cCkKKwor
ICAgIHJldHVybiBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworCitpZiBfX25hbWVf
XyA9PSAnX19tYWluX18nOgorICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3ZbMTpdLCBzeXMuc3Rk
b3V0LCBzeXMuc3RkZXJyKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvYXBpX3Rlc3Rz
L3J1bl9hcGlfdGVzdHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9h
cGlfdGVzdHMvcnVuX2FwaV90ZXN0cy5weQkocmV2aXNpb24gMjc2OTM1KQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9hcGlfdGVzdHMvcnVuX2FwaV90ZXN0cy5weQkobm9uZXhpc3RlbnQpCkBA
IC0xLDE2NCArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMg
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0jIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSMgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotIyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KLSMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWZy
b20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KLWltcG9ydCBsb2dnaW5nCi1pbXBv
cnQgb3B0cGFyc2UKLWltcG9ydCBzeXMKLWltcG9ydCB0cmFjZWJhY2sKLQotZnJvbSB3ZWJraXRw
eS5hcGlfdGVzdHMubWFuYWdlciBpbXBvcnQgTWFuYWdlcgotZnJvbSB3ZWJraXRweS5jb21tb24u
aG9zdCBpbXBvcnQgSG9zdAotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudmlld3MubWV0ZXJl
ZF9zdHJlYW0gaW1wb3J0IE1ldGVyZWRTdHJlYW0KLWZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQg
Y29uZmlndXJhdGlvbl9vcHRpb25zLCBwbGF0Zm9ybV9vcHRpb25zLCBiYXNlLCB3aW4KLWZyb20g
d2Via2l0cHkucmVzdWx0cy5vcHRpb25zIGltcG9ydCB1cGxvYWRfb3B0aW9ucwotCi1FWENFUFRJ
T05BTF9FWElUX1NUQVRVUyA9IC0xCi1JTlRFUlJVUFRfRVhJVF9TVEFUVVMgPSAtMgotCi1fbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLQotZGVmIG1haW4oYXJndiwgc3Rkb3V0
LCBzdGRlcnIpOgotICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZV9hcmdzKGFyZ3YpCi0gICAgaG9z
dCA9IEhvc3QoKQotCi0gICAgdHJ5OgotICAgICAgICBvcHRpb25zLndlYmtpdF90ZXN0X3J1bm5l
ciA9IFRydWUKLSAgICAgICAgcG9ydCA9IGhvc3QucG9ydF9mYWN0b3J5LmdldChvcHRpb25zLnBs
YXRmb3JtLCBvcHRpb25zKQotICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yIGFzIGU6Ci0g
ICAgICAgIHByaW50KHN0cihlKSwgZmlsZT1zdGRlcnIpCi0gICAgICAgIHJldHVybiBFWENFUFRJ
T05BTF9FWElUX1NUQVRVUwotCi0gICAgIyBTb21lIHBsYXRmb3JtcyBkbyBub3Qgc3VwcG9ydCBB
UEkgdGVzdHMKLSAgICBkb2VzX25vdF9zdXBwb3J0X2FwaV90ZXN0cyA9IFsnaW9zLWRldmljZSdd
Ci0gICAgaWYgcG9ydC5vcGVyYXRpbmdfc3lzdGVtKCkgaW4gZG9lc19ub3Rfc3VwcG9ydF9hcGlf
dGVzdHM6Ci0gICAgICAgIHByaW50KCd7fSBjYW5ub3QgcnVuIEFQSSB0ZXN0cycuZm9ybWF0KHBv
cnQub3BlcmF0aW5nX3N5c3RlbSgpKSwgZmlsZT1zdGRlcnIpCi0gICAgICAgIHJldHVybiBFWENF
UFRJT05BTF9FWElUX1NUQVRVUwotCi0gICAgdHJ5OgotICAgICAgICByZXR1cm4gcnVuKHBvcnQs
IG9wdGlvbnMsIGFyZ3MsIHN0ZGVycikKLSAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0g
ICAgICAgIHJldHVybiBJTlRFUlJVUFRfRVhJVF9TVEFUVVMKLSAgICBleGNlcHQgQmFzZUV4Y2Vw
dGlvbiBhcyBlOgotICAgICAgICBpZiBpc2luc3RhbmNlKGUsIEV4Y2VwdGlvbik6Ci0gICAgICAg
ICAgICBwcmludCgnXG4lcyByYWlzZWQ6ICVzJyAlIChlLl9fY2xhc3NfXy5fX25hbWVfXywgc3Ry
KGUpKSwgZmlsZT1zdGRlcnIpCi0gICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGZpbGU9
c3RkZXJyKQotICAgICAgICByZXR1cm4gRVhDRVBUSU9OQUxfRVhJVF9TVEFUVVMKLQotCi1kZWYg
cnVuKHBvcnQsIG9wdGlvbnMsIGFyZ3MsIGxvZ2dpbmdfc3RyZWFtKToKLSAgICBsb2dnZXIgPSBs
b2dnaW5nLmdldExvZ2dlcigpCi0gICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcgaWYg
b3B0aW9ucy52ZXJib3NlIGVsc2UgbG9nZ2luZy5FUlJPUiBpZiBvcHRpb25zLnF1aWV0IGVsc2Ug
bG9nZ2luZy5JTkZPKQotCi0gICAgdHJ5OgotICAgICAgICBzdHJlYW0gPSBNZXRlcmVkU3RyZWFt
KGxvZ2dpbmdfc3RyZWFtLCBvcHRpb25zLnZlcmJvc2UsIGxvZ2dlcj1sb2dnZXIsIG51bWJlcl9v
Zl9jb2x1bW5zPXBvcnQuaG9zdC5wbGF0Zm9ybS50ZXJtaW5hbF93aWR0aCgpLCBwcmludF90aW1l
c3RhbXBzPW9wdGlvbnMudGltZXN0YW1wcykKLSAgICAgICAgbWFuYWdlciA9IE1hbmFnZXIocG9y
dCwgb3B0aW9ucywgc3RyZWFtKQotCi0gICAgICAgIHJlc3VsdCA9IG1hbmFnZXIucnVuKGFyZ3Ms
IGpzb25fb3V0cHV0PW9wdGlvbnMuanNvbl9vdXRwdXQpCi0gICAgICAgIF9sb2cuZGVidWcoIlRl
c3RpbmcgY29tcGxldGVkLCBFeGl0IHN0YXR1czogJWQiICUgcmVzdWx0KQotICAgICAgICByZXR1
cm4gcmVzdWx0Ci0gICAgZmluYWxseToKLSAgICAgICAgc3RyZWFtLmNsZWFudXAoKQotCi0KLWRl
ZiBwYXJzZV9hcmdzKGFyZ3MpOgotICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9ucyA9IFtdCi0K
LSAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnMuYXBwZW5kKCgnUGxhdGZvcm0gb3B0aW9ucycs
IHBsYXRmb3JtX29wdGlvbnMoKSkpCi0gICAgb3B0aW9uX2dyb3VwX2RlZmluaXRpb25zLmFwcGVu
ZCgoJ0NvbmZpZ3VyYXRpb24gb3B0aW9ucycsIGNvbmZpZ3VyYXRpb25fb3B0aW9ucygpKSkKLSAg
ICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnMuYXBwZW5kKCgnUHJpbnRpbmcgT3B0aW9ucycsIFsK
LSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy1xJywgJy0tcXVpZXQnLCBhY3Rpb249J3N0
b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSdSdW4gcXVpZXRseSAoZXJyb3JzLCB3YXJuaW5ncywgYW5kIHByb2dyZXNzIG9ubHkpJyks
Ci0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctdicsICctLXZlcmJvc2UnLCBhY3Rpb249
J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoZWxwPSdFbmFibGUgdmVyYm9zZSBwcmludGluZycpLAotICAgICAgICBvcHRwYXJzZS5tYWtl
X29wdGlvbignLS10aW1lc3RhbXBzJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxz
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUHJpbnQgdGltZXN0YW1wcyBm
b3IgZWFjaCBsb2dnZWQgbGluZScpLAotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1q
c29uLW91dHB1dCcsIGFjdGlvbj0nc3RvcmUnLCBkZWZhdWx0PU5vbmUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9J1NhdmUgdGVzdCByZXN1bHRzIGFzIEpTT04gdG8gZmlsZScp
LAotICAgIF0pKQotCi0gICAgb3B0aW9uX2dyb3VwX2RlZmluaXRpb25zLmFwcGVuZCgoJ1dlYktp
dCBPcHRpb25zJywgWwotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLWcnLCAnLS1ndWFy
ZC1tYWxsb2MnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWxwPSdFbmFibGUgR3VhcmQgTWFsbG9jIChPUyBYIG9ubHkp
JyksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXJvb3QnLCBhY3Rpb249J3N0b3Jl
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUGF0aCB0byBhIGRpcmVjdG9y
eSBjb250YWluaW5nIHRoZSBleGVjdXRhYmxlcyBuZWVkZWQgdG8gcnVuIHRlc3RzLicpLAotICAg
IF0pKQotCi0gICAgb3B0aW9uX2dyb3VwX2RlZmluaXRpb25zLmFwcGVuZCgoJ1Rlc3RpbmcgT3B0
aW9ucycsIFsKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0td3RmLW9ubHknLCBhY3Rp
b249J3N0b3JlX2NvbnN0JywgY29uc3Q9J1Rlc3RXVEYnLCBkZXN0PSdhcGlfYmluYXJ5JywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nT25seSBidWlsZCwgY2hlY2sgYW5kIHJ1
biBUZXN0V1RGJyksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXdlYmtpdC1vbmx5
JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PSdUZXN0V2ViS2l0QVBJJywgZGVzdD0nYXBp
X2JpbmFyeScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J09ubHkgY2hlY2sg
YW5kIHJ1biBUZXN0V2ViS2l0QVBJJyksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCct
LXdlYi1jb3JlLW9ubHknLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J1Rlc3RXZWJDb3Jl
JywgZGVzdD0nYXBpX2JpbmFyeScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
J09ubHkgY2hlY2sgYW5kIHJ1biBUZXN0V2ViQ29yZS5leGUgKFdpbmRvd3Mgb25seSknKSwKLSAg
ICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0td2Via2l0LWxlZ2FjeS1vbmx5JywgYWN0aW9u
PSdzdG9yZV9jb25zdCcsIGNvbnN0PSdUZXN0V2ViS2l0TGVnYWN5JywgZGVzdD0nYXBpX2JpbmFy
eScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J09ubHkgY2hlY2sgYW5kIHJ1
biBUZXN0V2ViS2l0TGVnYWN5LmV4ZSAoV2luZG93cyBvbmx5KScpLAotICAgICAgICBvcHRwYXJz
ZS5tYWtlX29wdGlvbignLWQnLCAnLS1kdW1wJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVs
dD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRHVtcCBhbGwgdGVz
dCBuYW1lcyB3aXRob3V0IHJ1bm5pbmcgdGhlbScpLAotICAgICAgICBvcHRwYXJzZS5tYWtlX29w
dGlvbignLS1idWlsZCcsIGRlc3Q9J2J1aWxkJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVs
dD1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdDaGVjayB0byBlbnN1
cmUgdGhlIGJ1aWxkIGlzIHVwLXRvLWRhdGUgKGRlZmF1bHQpLicpLAotICAgICAgICBvcHRwYXJz
ZS5tYWtlX29wdGlvbignLS1uby1idWlsZCcsIGRlc3Q9J2J1aWxkJywgYWN0aW9uPSdzdG9yZV9m
YWxzZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkRvbid0IGNoZWNrIHRv
IHNlZSBpZiB0aGUgYnVpbGQgaXMgdXAtdG8tZGF0ZS4iKSwKLSAgICAgICAgb3B0cGFyc2UubWFr
ZV9vcHRpb24oJy0tdGltZW91dCcsIGRlZmF1bHQ9MzAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9J051bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGEgdGVzdCB0aW1l
cyBvdXQnKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tbm8tdGltZW91dCcsIGRl
c3Q9J3RpbWVvdXQnLCBhY3Rpb249J3N0b3JlX2ZhbHNlJywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVscD0nRGlzYWJsZSB0aW1lb3V0cyBmb3IgYWxsIHRlc3RzJyksCi0gICAgICAg
IG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWl0ZXJhdGlvbnMnLCB0eXBlPSdpbnQnLCBkZWZhdWx0
PTEsIGhlbHA9J051bWJlciBvZiB0aW1lcyB0byBydW4gdGhlIHNldCBvZiB0ZXN0cyAoZS5nLiBB
QkNBQkNBQkMpJyksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXJlcGVhdC1lYWNo
JywgdHlwZT0naW50JywgZGVmYXVsdD0xLCBoZWxwPSdOdW1iZXIgb2YgdGltZXMgdG8gcnVuIGVh
Y2ggdGVzdCAoZS5nLiBBQUFCQkJDQ0MpJyksCi0KLSAgICAgICAgIyBGSVhNRTogUmVtb3ZlIHRo
ZSBkZWZhdWx0LCBBUEkgdGVzdHMgc2hvdWxkIGJlIG11bHRpcHJvY2VzcwotICAgICAgICBvcHRw
YXJzZS5tYWtlX29wdGlvbignLS1jaGlsZC1wcm9jZXNzZXMnLCBkZWZhdWx0PTEsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J051bWJlciBvZiBwcm9jZXNzZXMgdG8gcnVuIGlu
IHBhcmFsbGVsLicpLAotCi0gICAgICAgICMgRklYTUU6IERlZmF1bHQgc2hvdWxkIGJlIGZhbHNl
LCBBUEkgdGVzdHMgc2hvdWxkIG5vdCBiZSBmb3JjZWQgdG8gcnVuIHNpbmdseQotICAgICAgICBv
cHRwYXJzZS5tYWtlX29wdGlvbignLS1ydW4tc2luZ2x5JywgYWN0aW9uPSdzdG9yZV90cnVlJywg
ZGVmYXVsdD1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdSdW4gYSBz
ZXBhcmF0ZSBwcm9jZXNzIGZvciBlYWNoIHRlc3QnKSwKLQotICAgICAgICBvcHRwYXJzZS5tYWtl
X29wdGlvbignLS1mb3JjZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1J1biBhbGwgdGVzdHMsIGV2ZW4gRElT
QUJMRUQgdGVzdHMnKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tYWRkaXRpb25h
bC1lbnYtdmFyJywgdHlwZT0nc3RyaW5nJywgYWN0aW9uPSdhcHBlbmQnLCBkZWZhdWx0PVtdLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdQYXNzZXMgdGhhdCBlbnZpcm9ubWVu
dCB2YXJpYWJsZSB0byB0aGUgdGVzdHMgKC0tYWRkaXRpb25hbC1lbnYtdmFyPU5BTUU9VkFMVUUp
JyksCi0gICAgXSkpCi0gICAgb3B0aW9uX2dyb3VwX2RlZmluaXRpb25zLmFwcGVuZCgoJ1VwbG9h
ZCBPcHRpb25zJywgdXBsb2FkX29wdGlvbnMoKSkpCi0KLSAgICBvcHRpb25fcGFyc2VyID0gb3B0
cGFyc2UuT3B0aW9uUGFyc2VyKAotICAgICAgICB1c2FnZT0ncnVuLWFwaS10ZXN0cyBbb3B0aW9u
c10gWzx0ZXN0IG5hbWVzPi4uLl0nLAotICAgICAgICBkZXNjcmlwdGlvbj0iIiJCeSBkZWZhdWx0
LCBydW4tYXBpLXRlc3RzIHdpbGwgcnVuIGFsbCBBUEkgdGVzdHMuIEl0IGFsc28gYWxsb3dzIHRo
ZSB1c2VyIHRvIHNwZWNpZnkgdGVzdHMgb2YgdGhlIFwKLWZvcm1hdCA8c3VpdGU+Ljx0ZXN0PiBv
ciA8Y2Fub25pY2FsaXplZCBiaW5hcnkgbmFtZT4uPHN1aXRlPi48dGVzdD4uIE5vdGUgdGhhdCBp
biB0aGUgY2FzZSB3aGVyZSBhIGJpbmFyeSBpcyBub3QgXAotc3BlY2lmaWVkLCBvbmUgd2lsbCBi
ZSBpbmZlcnJlZCBieSBsaXN0aW5nIGFsbCBhdmFpbGFibGUgdGVzdHMuIFNwZWNpZnlpbmcganVz
dCBhIGJpbmFyeSBvciBqdXN0IGEgc3VpdGUgd2lsbCBjYXVzZSBldmVyeSBcCi10ZXN0IGNvbnRh
aW5lZCB3aXRoaW4gdG8gYmUgcnVuLiBUaGUgY2Fub25pY2FsaXplZCBiaW5hcnkgbmFtZSBpcyB0
aGUgYmluYXJ5IG5hbWUgd2l0aCBhbnkgZmlsZW5hbWUgZXh0ZW5zaW9uIFwKLXN0cmlwcGVkLiBG
b3IgVW5peCBwb3J0cywgdGhlc2UgYmluYXJpZXMgYXJlIHt9IGFuZCB7fS4gRm9yIFdpbmRvd3Mg
cG9ydHMsIHRoZXkgYXJlIHt9IGFuZCB7fS4iIiIuZm9ybWF0KAotICAgICAgICAgICAgJywgJy5q
b2luKGJhc2UuUG9ydC5BUElfVEVTVF9CSU5BUllfTkFNRVNbOi0xXSksIGJhc2UuUG9ydC5BUElf
VEVTVF9CSU5BUllfTkFNRVNbLTFdLAotICAgICAgICAgICAgJywgJy5qb2luKHdpbi5XaW5Qb3J0
LkFQSV9URVNUX0JJTkFSWV9OQU1FU1s6LTFdKSwgd2luLldpblBvcnQuQVBJX1RFU1RfQklOQVJZ
X05BTUVTWy0xXSwKLSAgICApKQotCi0gICAgZm9yIGdyb3VwX25hbWUsIGdyb3VwX29wdGlvbnMg
aW4gb3B0aW9uX2dyb3VwX2RlZmluaXRpb25zOgotICAgICAgICBvcHRpb25fZ3JvdXAgPSBvcHRw
YXJzZS5PcHRpb25Hcm91cChvcHRpb25fcGFyc2VyLCBncm91cF9uYW1lKQotICAgICAgICBvcHRp
b25fZ3JvdXAuYWRkX29wdGlvbnMoZ3JvdXBfb3B0aW9ucykKLSAgICAgICAgb3B0aW9uX3BhcnNl
ci5hZGRfb3B0aW9uX2dyb3VwKG9wdGlvbl9ncm91cCkKLQotICAgIHJldHVybiBvcHRpb25fcGFy
c2VyLnBhcnNlX2FyZ3MoYXJncykKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAg
IHN5cy5leGl0KG1haW4oc3lzLmFyZ3ZbMTpdLCBzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyKSkKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvYXBpX3Rlc3RzL3J1bm5lci5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2FwaV90ZXN0cy9ydW5uZXIucHkJKHJldmlzaW9u
IDI3NjkzNSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvYXBpX3Rlc3RzL3J1bm5lci5weQko
d29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNSwxMzEgKzI1LDM2IEBAIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgdGltZQogCiBmcm9t
IHdlYmtpdGNvcmVweSBpbXBvcnQgc3RyaW5nX3V0aWxzCitmcm9tIHdlYmtpdGNvcmVweSBpbXBv
cnQgVGFza1Bvb2wKIAotZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IG1lc3NhZ2VfcG9vbAog
ZnJvbSB3ZWJraXRweS5jb21tb24uaXRlcmF0aW9uX2NvbXBhdGliaWxpdHkgaW1wb3J0IGl0ZXJp
dGVtcwogZnJvbSB3ZWJraXRweS5wb3J0LnNlcnZlcl9wcm9jZXNzIGltcG9ydCBTZXJ2ZXJQcm9j
ZXNzLCBfbG9nIGFzIHNlcnZlcl9wcm9jZXNzX2xvZ2dlcgorZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtLnN5c3RlbWhvc3QgaW1wb3J0IFN5c3RlbUhvc3QKIGZyb20gd2Via2l0cHkueGNvZGUu
c2ltdWxhdGVkX2RldmljZSBpbXBvcnQgU2ltdWxhdGVkRGV2aWNlTWFuYWdlcgogCitfbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKLWNsYXNzIFJ1bm5lcihvYmplY3QpOgotICAg
IFNUQVRVU19QQVNTRUQgPSAwCi0gICAgU1RBVFVTX0ZBSUxFRCA9IDEKLSAgICBTVEFUVVNfQ1JB
U0hFRCA9IDIKLSAgICBTVEFUVVNfVElNRU9VVCA9IDMKLSAgICBTVEFUVVNfRElTQUJMRUQgPSA0
Ci0gICAgU1RBVFVTX1JVTk5JTkcgPSA1Ci0KLSAgICBOQU1FX0ZPUl9TVEFUVVMgPSBbCi0gICAg
ICAgICdQYXNzZWQnLAotICAgICAgICAnRmFpbGVkJywKLSAgICAgICAgJ0NyYXNoZWQnLAotICAg
ICAgICAnVGltZW91dCcsCi0gICAgICAgICdEaXNhYmxlZCcsCi0gICAgXQotCi0gICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnQsIHByaW50ZXIpOgotICAgICAgICBzZWxmLnBvcnQgPSBwb3J0Ci0g
ICAgICAgIHNlbGYucHJpbnRlciA9IHByaW50ZXIKLSAgICAgICAgc2VsZi50ZXN0c19ydW4gPSAw
Ci0gICAgICAgIHNlbGYuX251bV93b3JrZXJzID0gMQotICAgICAgICBzZWxmLl9oYXNfbG9nZ2Vk
X2Zvcl90ZXN0ID0gVHJ1ZSAgIyBTdXBwcmVzcyBhbiBlbXB0eSBsaW5lIGJldHdlZW4gIlJ1bm5p
bmcgdGVzdHMiIGFuZCB0aGUgZmlyc3QgdGVzdCdzIG91dHB1dC4KLSAgICAgICAgc2VsZi5yZXN1
bHRzID0ge30KLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgX3NoYXJkX3Rlc3RzKHRlc3Rz
KToKLSAgICAgICAgc2hhcmRzID0ge30KLSAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6Ci0gICAg
ICAgICAgICBzaGFyZF9wcmVmaXggPSAnLicuam9pbih0ZXN0LnNwbGl0KCcuJylbOi0xXSkKLSAg
ICAgICAgICAgIGlmIHNoYXJkX3ByZWZpeCBub3QgaW4gc2hhcmRzOgotICAgICAgICAgICAgICAg
IHNoYXJkc1tzaGFyZF9wcmVmaXhdID0gW10KLSAgICAgICAgICAgIHNoYXJkc1tzaGFyZF9wcmVm
aXhdLmFwcGVuZCh0ZXN0KQotICAgICAgICByZXR1cm4gc2hhcmRzCiAKLSAgICAjIEZJWE1FIEFQ
SSB0ZXN0cyBzaG91bGQgcnVuIGFzIGFuIGFwcCwgd2Ugd29uJ3QgbmVlZCB0aGlzIGZ1bmN0aW9u
IDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MjA0PgotICAgIEBz
dGF0aWNtZXRob2QKLSAgICBkZWYgY29tbWFuZF9mb3JfcG9ydChwb3J0LCBhcmdzKToKLSAgICAg
ICAgaWYgKHBvcnQuZ2V0X29wdGlvbignZm9yY2UnKSk6Ci0gICAgICAgICAgICBhcmdzLmFwcGVu
ZCgnLS1ndGVzdF9hbHNvX3J1bl9kaXNhYmxlZF90ZXN0cz0xJykKLSAgICAgICAgaWYgJ3NpbXVs
YXRvcicgaW4gcG9ydC5wb3J0X25hbWU6Ci0gICAgICAgICAgICBhc3NlcnQgU2ltdWxhdGVkRGV2
aWNlTWFuYWdlci5JTklUSUFMSVpFRF9ERVZJQ0VTCi0gICAgICAgICAgICByZXR1cm4gWycvdXNy
L2Jpbi94Y3J1bicsICdzaW1jdGwnLCAnc3Bhd24nLCBTaW11bGF0ZWREZXZpY2VNYW5hZ2VyLklO
SVRJQUxJWkVEX0RFVklDRVNbMF0udWRpZF0gKyBhcmdzCi0gICAgICAgIGVsaWYgJ2RldmljZScg
aW4gcG9ydC5wb3J0X25hbWU6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1J1bm5p
bmcgYXBpIHRlc3RzIG9uIHt9IGlzIG5vdCBzdXBwb3J0ZWQnLmZvcm1hdChwb3J0LnBvcnRfbmFt
ZSkpCi0gICAgICAgIGVsaWYgcG9ydC5ob3N0LnBsYXRmb3JtLmlzX3dpbigpOgotICAgICAgICAg
ICAgYXJnc1swXSA9IG9zLnBhdGguc3BsaXRleHQoYXJnc1swXSlbMF0gKyAnLmV4ZScKLSAgICAg
ICAgcmV0dXJuIGFyZ3MKLQotICAgIGRlZiBydW4oc2VsZiwgdGVzdHMsIG51bV93b3JrZXJzKToK
LSAgICAgICAgaWYgbm90IHRlc3RzOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgc2Vs
Zi5wcmludGVyLndyaXRlX3VwZGF0ZSgnU2hhcmRpbmcgdGVzdHMgLi4uJykKLSAgICAgICAgc2hh
cmRzID0gUnVubmVyLl9zaGFyZF90ZXN0cyh0ZXN0cykKLQotICAgICAgICBvcmlnaW5hbF9sZXZl
bCA9IHNlcnZlcl9wcm9jZXNzX2xvZ2dlci5sZXZlbAotICAgICAgICBzZXJ2ZXJfcHJvY2Vzc19s
b2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5DUklUSUNBTCkKLQotICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICBzZWxmLl9udW1fd29ya2VycyA9IG1pbihudW1fd29ya2VycywgbGVuKHNoYXJkcykpCi0g
ICAgICAgICAgICB3aXRoIG1lc3NhZ2VfcG9vbC5nZXQoc2VsZiwgbGFtYmRhIGNhbGxlcjogX1dv
cmtlcihjYWxsZXIsIHNlbGYucG9ydCwgc2hhcmRzKSwgc2VsZi5fbnVtX3dvcmtlcnMpIGFzIHBv
b2w6Ci0gICAgICAgICAgICAgICAgcG9vbC5ydW4oKCd0ZXN0Jywgc2hhcmQpIGZvciBzaGFyZCwg
XyBpbiBpdGVyaXRlbXMoc2hhcmRzKSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNl
cnZlcl9wcm9jZXNzX2xvZ2dlci5zZXRMZXZlbChvcmlnaW5hbF9sZXZlbCkKLQotCi0gICAgZGVm
IGhhbmRsZShzZWxmLCBtZXNzYWdlX25hbWUsIHNvdXJjZSwgdGVzdF9uYW1lPU5vbmUsIHN0YXR1
cz0wLCBvdXRwdXQ9JycpOgotICAgICAgICBpZiBtZXNzYWdlX25hbWUgPT0gJ2RpZF9zcGF3bl93
b3JrZXInOgotICAgICAgICAgICAgcmV0dXJuCitjbGFzcyBfV29ya2VyKG9iamVjdCk6CisgICAg
aW5zdGFuY2UgPSBOb25lCiAKLSAgICAgICAgc291cmNlID0gJycgaWYgc2VsZi5fbnVtX3dvcmtl
cnMgPT0gMSBlbHNlIHNvdXJjZSArICcgJwotICAgICAgICB3aWxsX3N0cmVhbV9sb2dzID0gc2Vs
Zi5fbnVtX3dvcmtlcnMgPT0gMSBhbmQgc2VsZi5wb3J0LmdldF9vcHRpb24oJ3ZlcmJvc2UnKQot
ICAgICAgICBpZiBtZXNzYWdlX25hbWUgPT0gJ2VuZGVkX3Rlc3QnOgotICAgICAgICAgICAgdXBk
YXRlID0gJ3t9e30ge30nLmZvcm1hdChzb3VyY2UsIHRlc3RfbmFtZSwgUnVubmVyLk5BTUVfRk9S
X1NUQVRVU1tzdGF0dXNdKQotCi0gICAgICAgICAgICAjIERvbid0IHByaW50IHRlc3Qgb3V0cHV0
IGlmIC0tcXVpZXQuCi0gICAgICAgICAgICBpZiBzdGF0dXMgIT0gUnVubmVyLlNUQVRVU19QQVNT
RUQgb3IgKG91dHB1dCBhbmQgbm90IHNlbGYucG9ydC5nZXRfb3B0aW9uKCdxdWlldCcpKToKLSAg
ICAgICAgICAgICAgICBpZiBub3Qgd2lsbF9zdHJlYW1fbG9nczoKLSAgICAgICAgICAgICAgICAg
ICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIG5vdCBzZWxmLl9oYXNfbG9nZ2VkX2Zvcl90ZXN0OgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX2hhc19sb2dnZWRfZm9yX3Rlc3QgPSBUcnVlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5wcmludGVyLndyaXRlbG4oc291cmNlKQotICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5wcmludGVyLndyaXRlbG4oJ3t9ICAgIHt9Jy5mb3JtYXQoc291cmNl
LCBsaW5lKSkKLSAgICAgICAgICAgICAgICBzZWxmLnByaW50ZXIud3JpdGVsbih1cGRhdGUpCi0g
ICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYucHJpbnRlci53cml0ZV91cGRh
dGUodXBkYXRlKQotICAgICAgICAgICAgc2VsZi50ZXN0c19ydW4gKz0gMQotICAgICAgICAgICAg
c2VsZi5yZXN1bHRzW3Rlc3RfbmFtZV0gPSAoc3RhdHVzLCBvdXRwdXQpCi0gICAgICAgICAgICBz
ZWxmLl9oYXNfbG9nZ2VkX2Zvcl90ZXN0ID0gRmFsc2UKLQotICAgICAgICBpZiBtZXNzYWdlX25h
bWUgPT0gJ2xvZycgYW5kIHdpbGxfc3RyZWFtX2xvZ3M6Ci0gICAgICAgICAgICBmb3IgbGluZSBp
biBvdXRwdXQuc3BsaXRsaW5lcygpOgotICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9oYXNf
bG9nZ2VkX2Zvcl90ZXN0OgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYXNfbG9nZ2VkX2Zv
cl90ZXN0ID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICBzZWxmLnByaW50ZXIud3JpdGVsbihz
b3VyY2UpCi0gICAgICAgICAgICAgICAgc2VsZi5wcmludGVyLndyaXRlbG4oJ3t9ICAgIHt9Jy5m
b3JtYXQoc291cmNlLCBsaW5lKSkKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0dXAoY2xz
LCBwb3J0PU5vbmUpOgorICAgICAgICBjbHMuaW5zdGFuY2UgPSBjbHMocG9ydCkKIAorICAgIEBj
bGFzc21ldGhvZAorICAgIGRlZiB0ZWFyZG93bihjbHMpOgorICAgICAgICBjbHMuaW5zdGFuY2Ug
PSBOb25lCiAKLSAgICBkZWYgcmVzdWx0X21hcF9ieV9zdGF0dXMoc2VsZiwgc3RhdHVzPU5vbmUp
OgotICAgICAgICBtYXAgPSB7fQotICAgICAgICBmb3IgdGVzdF9uYW1lLCByZXN1bHQgaW4gaXRl
cml0ZW1zKHNlbGYucmVzdWx0cyk6Ci0gICAgICAgICAgICBpZiByZXN1bHRbMF0gPT0gc3RhdHVz
OgotICAgICAgICAgICAgICAgIG1hcFt0ZXN0X25hbWVdID0gcmVzdWx0WzFdCi0gICAgICAgIHJl
dHVybiBtYXAKLQotCi1jbGFzcyBfV29ya2VyKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIGNhbGxlciwgcG9ydCwgc2hhcmRfbWFwKToKLSAgICAgICAgc2VsZi5fY2FsbGVyID0gY2Fs
bGVyCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQpOgogICAgICAgICBzZWxmLl9wb3J0ID0g
cG9ydAogICAgICAgICBzZWxmLmhvc3QgPSBwb3J0Lmhvc3QKLSAgICAgICAgc2VsZi5fc2hhcmRf
bWFwID0gc2hhcmRfbWFwCiAKICAgICAgICAgIyBTZXJ2ZXJQcm9jZXNzIGRvZXNuJ3QgYWxsb3cg
Zm9yIGEgdGltZW91dCBvZiAnTm9uZSwnIHRoaXMgdXNlcyBhIHdlZWsgaW5zdGVhZCBvZiBOb25l
LgogICAgICAgICBzZWxmLl90aW1lb3V0ID0gaW50KHNlbGYuX3BvcnQuZ2V0X29wdGlvbigndGlt
ZW91dCcpKSBpZiBzZWxmLl9wb3J0LmdldF9vcHRpb24oJ3RpbWVvdXQnKSBlbHNlIDYwICogMjQg
KiA3CiAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9maWx0ZXJfbm9pc3lfb3V0cHV0KG91
dHB1dCk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9maWx0ZXJfbm9pc3lfb3V0cHV0KGNs
cywgb3V0cHV0KToKICAgICAgICAgcmVzdWx0ID0gJycKICAgICAgICAgZm9yIGxpbmUgaW4gb3V0
cHV0LnNwbGl0bGluZXMoKToKICAgICAgICAgICAgIGlmIGxpbmUubHN0cmlwKCkuc3RhcnRzd2l0
aCgnb2JqY1snKToKQEAgLTE2NywxMyArNzIsMTQgQEAgY2xhc3MgX1dvcmtlcihvYmplY3QpOgog
ICAgICAgICBpZiB0ZXN0LnNwbGl0KCcuJylbMV0uc3RhcnRzd2l0aCgnRElTQUJMRURfJykgYW5k
IG5vdCBzZWxmLl9wb3J0LmdldF9vcHRpb24oJ2ZvcmNlJyk6CiAgICAgICAgICAgICBzdGF0dXMg
PSBSdW5uZXIuU1RBVFVTX0RJU0FCTEVECiAKKyAgICAgICAgc3Rkb3V0X2J1ZmZlciA9ICcnCisg
ICAgICAgIHN0ZGVycl9idWZmZXIgPSAnJworCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGRl
YWRsaW5lID0gdGltZS50aW1lKCkgKyBzZWxmLl90aW1lb3V0CiAgICAgICAgICAgICBpZiBzdGF0
dXMgIT0gUnVubmVyLlNUQVRVU19ESVNBQkxFRDoKICAgICAgICAgICAgICAgICBzZXJ2ZXJfcHJv
Y2Vzcy5zdGFydCgpCiAKLSAgICAgICAgICAgIHN0ZG91dF9idWZmZXIgPSAnJwotICAgICAgICAg
ICAgc3RkZXJyX2J1ZmZlciA9ICcnCiAgICAgICAgICAgICB3aGlsZSBzdGF0dXMgPT0gUnVubmVy
LlNUQVRVU19SVU5OSU5HOgogICAgICAgICAgICAgICAgIHN0ZG91dF9saW5lLCBzdGRlcnJfbGlu
ZSA9IHNlcnZlcl9wcm9jZXNzLnJlYWRfZWl0aGVyX3N0ZG91dF9vcl9zdGRlcnJfbGluZShkZWFk
bGluZSkKICAgICAgICAgICAgICAgICBpZiBub3Qgc3RkZXJyX2xpbmUgYW5kIG5vdCBzdGRvdXRf
bGluZToKQEAgLTE4Miw3ICs4OCw3IEBAIGNsYXNzIF9Xb3JrZXIob2JqZWN0KToKICAgICAgICAg
ICAgICAgICBpZiBzdGRlcnJfbGluZToKICAgICAgICAgICAgICAgICAgICAgc3RkZXJyX2xpbmUg
PSBzdHJpbmdfdXRpbHMuZGVjb2RlKHN0ZGVycl9saW5lLCB0YXJnZXRfdHlwZT1zdHIpCiAgICAg
ICAgICAgICAgICAgICAgIHN0ZGVycl9idWZmZXIgKz0gc3RkZXJyX2xpbmUKLSAgICAgICAgICAg
ICAgICAgICAgc2VsZi5wb3N0KCdsb2cnLCBvdXRwdXQ9c3RkZXJyX2xpbmVbOi0xXSkKKyAgICAg
ICAgICAgICAgICAgICAgX2xvZy5lcnJvcihzdGRlcnJfbGluZVs6LTFdKQogICAgICAgICAgICAg
ICAgIGlmIHN0ZG91dF9saW5lOgogICAgICAgICAgICAgICAgICAgICBzdGRvdXRfbGluZSA9IHN0
cmluZ191dGlscy5kZWNvZGUoc3Rkb3V0X2xpbmUsIHRhcmdldF90eXBlPXN0cikKICAgICAgICAg
ICAgICAgICAgICAgaWYgJyoqUEFTUyoqJyBpbiBzdGRvdXRfbGluZToKQEAgLTE5MSw3ICs5Nyw3
IEBAIGNsYXNzIF9Xb3JrZXIob2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1
cyA9IFJ1bm5lci5TVEFUVVNfRkFJTEVECiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGRvdXRfYnVmZmVyICs9IHN0ZG91dF9saW5lCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLnBvc3QoJ2xvZycsIG91dHB1dD1zdGRvdXRfbGluZVs6LTFd
KQorICAgICAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcihzdGRvdXRfbGluZVs6LTFdKQog
CiAgICAgICAgICAgICBpZiBzdGF0dXMgPT0gUnVubmVyLlNUQVRVU19ESVNBQkxFRDoKICAgICAg
ICAgICAgICAgICBwYXNzCkBAIC0yMDUsMjIgKzExMSwzMSBAQCBjbGFzcyBfV29ya2VyKG9iamVj
dCk6CiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICByZW1haW5pbmdfc3RkZXJyID0gc3Ry
aW5nX3V0aWxzLmRlY29kZShzZXJ2ZXJfcHJvY2Vzcy5wb3BfYWxsX2J1ZmZlcmVkX3N0ZGVycigp
LCB0YXJnZXRfdHlwZT1zdHIpCiAgICAgICAgICAgICByZW1haW5pbmdfc3Rkb3V0ID0gc3RyaW5n
X3V0aWxzLmRlY29kZShzZXJ2ZXJfcHJvY2Vzcy5wb3BfYWxsX2J1ZmZlcmVkX3N0ZG91dCgpLCB0
YXJnZXRfdHlwZT1zdHIpCi0gICAgICAgICAgICBzZWxmLnBvc3QoJ2xvZycsIG91dHB1dD1yZW1h
aW5pbmdfc3RkZXJyICsgcmVtYWluaW5nX3N0ZG91dCkKKyAgICAgICAgICAgIGZvciBsaW5lIGlu
IChyZW1haW5pbmdfc3Rkb3V0ICsgcmVtYWluaW5nX3N0ZGVycikuc3BsaXRsaW5lcyhGYWxzZSk6
CisgICAgICAgICAgICAgICAgX2xvZy5lcnJvcihsaW5lKQogICAgICAgICAgICAgb3V0cHV0X2J1
ZmZlciA9IHN0ZGVycl9idWZmZXIgKyBzdGRvdXRfYnVmZmVyICsgcmVtYWluaW5nX3N0ZGVyciAr
IHJlbWFpbmluZ19zdGRvdXQKICAgICAgICAgICAgIHNlcnZlcl9wcm9jZXNzLnN0b3AoKQogCi0g
ICAgICAgIHNlbGYucG9zdCgnZW5kZWRfdGVzdCcsICd7fS57fScuZm9ybWF0KGJpbmFyeV9uYW1l
LCB0ZXN0KSwgc3RhdHVzLCBzZWxmLl9maWx0ZXJfbm9pc3lfb3V0cHV0KG91dHB1dF9idWZmZXIp
KQorICAgICAgICBvdXRwdXQgPSBzZWxmLl9maWx0ZXJfbm9pc3lfb3V0cHV0KG91dHB1dF9idWZm
ZXIpCisgICAgICAgIGxvZyA9IF9sb2cuaW5mbyBpZiBzdGF0dXMgPT0gUnVubmVyLlNUQVRVU19Q
QVNTRUQgYW5kIG5vdCBvdXRwdXQgZWxzZSBfbG9nLmVycm9yCisgICAgICAgIGxvZygne30ue30g
e30nLmZvcm1hdChiaW5hcnlfbmFtZSwgdGVzdCwgUnVubmVyLk5BTUVfRk9SX1NUQVRVU1tzdGF0
dXNdKSkKKworICAgICAgICByZXR1cm4gJ3t9Lnt9Jy5mb3JtYXQoYmluYXJ5X25hbWUsIHRlc3Qp
LCBzdGF0dXMsIG91dHB1dAogCi0gICAgZGVmIF9ydW5fc2hhcmRfd2l0aF9iaW5hcnkoc2VsZiwg
YmluYXJ5X25hbWUsIHRlc3RzKToKLSAgICAgICAgcmVtYWluaW5nX3Rlc3RzID0gbGlzdCh0ZXN0
cykKKyAgICBkZWYgcnVuKHNlbGYsIG5hbWUsICp0ZXN0cyk6CisgICAgICAgIHJlc3VsdCA9IHt9
CisKKyAgICAgICAgYmluYXJ5X25hbWUgPSBuYW1lLnNwbGl0KCcuJylbMF0KKyAgICAgICAgcmVt
YWluaW5nX3Rlc3RzID0gWycuJy5qb2luKHRlc3Quc3BsaXQoJy4nKVsxOl0pIGZvciB0ZXN0IGlu
IHRlc3RzXQogCiAgICAgICAgICMgVHJ5IHRvIHJ1biB0aGUgc2hhcmQgaW4gYSBzaW5nbGUgcHJv
Y2Vzcy4KICAgICAgICAgd2hpbGUgcmVtYWluaW5nX3Rlc3RzIGFuZCBub3Qgc2VsZi5fcG9ydC5n
ZXRfb3B0aW9uKCdydW5fc2luZ2x5Jyk6CiAgICAgICAgICAgICBzdGFydGluZ19sZW5ndGggPSBs
ZW4ocmVtYWluaW5nX3Rlc3RzKQogICAgICAgICAgICAgc2VydmVyX3Byb2Nlc3MgPSBTZXJ2ZXJQ
cm9jZXNzKAogICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQsIGJpbmFyeV9uYW1lLAotICAgICAg
ICAgICAgICAgIFJ1bm5lci5jb21tYW5kX2Zvcl9wb3J0KHNlbGYuX3BvcnQsIFtzZWxmLl9wb3J0
Ll9idWlsZF9wYXRoKGJpbmFyeV9uYW1lKSwgJy0tZ3Rlc3RfZmlsdGVyPXt9Jy5mb3JtYXQoJzon
LmpvaW4ocmVtYWluaW5nX3Rlc3RzKSldKSwKLSAgICAgICAgICAgICAgICBlbnY9c2VsZi5fcG9y
dC5lbnZpcm9ubWVudF9mb3JfYXBpX3Rlc3RzKCkpCisgICAgICAgICAgICAgICAgUnVubmVyLmNv
bW1hbmRfZm9yX3BvcnQoc2VsZi5fcG9ydCwgWworICAgICAgICAgICAgICAgICAgICBzZWxmLl9w
b3J0Ll9idWlsZF9wYXRoKGJpbmFyeV9uYW1lKSwgJy0tZ3Rlc3RfZmlsdGVyPXt9Jy5mb3JtYXQo
JzonLmpvaW4ocmVtYWluaW5nX3Rlc3RzKSkKKyAgICAgICAgICAgICAgICBdKSwgZW52PXNlbGYu
X3BvcnQuZW52aXJvbm1lbnRfZm9yX2FwaV90ZXN0cygpKQogCiAgICAgICAgICAgICB0cnk6CiAg
ICAgICAgICAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIHNlbGYuX3RpbWVvdXQKQEAg
LTIzMCw3ICsxNDUsNyBAQCBjbGFzcyBfV29ya2VyKG9iamVjdCk6CiAKICAgICAgICAgICAgICAg
ICBzZXJ2ZXJfcHJvY2Vzcy5zdGFydCgpCiAgICAgICAgICAgICAgICAgd2hpbGUgcmVtYWluaW5n
X3Rlc3RzOgotICAgICAgICAgICAgICAgICAgICBzdGRvdXQgPSBzZXJ2ZXJfcHJvY2Vzcy5yZWFk
X3N0ZG91dF9saW5lKGRlYWRsaW5lKQorICAgICAgICAgICAgICAgICAgICBzdGRvdXQgPSBzdHJp
bmdfdXRpbHMuZGVjb2RlKHNlcnZlcl9wcm9jZXNzLnJlYWRfc3Rkb3V0X2xpbmUoZGVhZGxpbmUp
LCB0YXJnZXRfdHlwZT1zdHIpCiAKICAgICAgICAgICAgICAgICAgICAgIyBJZiB3ZSd2ZSB0cmln
Z2VyZWQgYSB0aW1lb3V0LCB3ZSBkb24ndCBrbm93IHdoaWNoIHRlc3QgY2F1c2VkIGl0LiBCcmVh
ayBvdXQgYW5kIHJ1biBzaW5nbHkuCiAgICAgICAgICAgICAgICAgICAgIGlmIHN0ZG91dCBpcyBO
b25lIGFuZCBzZXJ2ZXJfcHJvY2Vzcy50aW1lZF9vdXQ6CkBAIC0yNTEsNyArMTY2LDEyIEBAIGNs
YXNzIF9Xb3JrZXIob2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAg
ICAgICAgICAgICAgICAgICAgIGlmIGxhc3RfdGVzdCBpcyBub3QgTm9uZToKICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlbWFpbmluZ190ZXN0cy5yZW1vdmUobGFzdF90ZXN0KQotICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5wb3N0KCdlbmRlZF90ZXN0JywgJ3t9Lnt9Jy5mb3JtYXQoYmlu
YXJ5X25hbWUsIGxhc3RfdGVzdCksIGxhc3Rfc3RhdHVzLCBzdGRvdXRfYnVmZmVyKQorCisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzdGRvdXRfYnVmZmVyLnNwbGl0bGluZXMo
RmFsc2UpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IobGluZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxvZyA9IF9sb2cuaW5mbyBpZiBsYXN0X3N0YXR1cyA9PSBS
dW5uZXIuU1RBVFVTX1BBU1NFRCBhbmQgbm90IHN0ZG91dF9idWZmZXIgZWxzZSBfbG9nLmVycm9y
CisgICAgICAgICAgICAgICAgICAgICAgICBsb2coJ3t9Lnt9IHt9Jy5mb3JtYXQoYmluYXJ5X25h
bWUsIGxhc3RfdGVzdCwgUnVubmVyLk5BTUVfRk9SX1NUQVRVU1tsYXN0X3N0YXR1c10pKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wyd7fS57fScuZm9ybWF0KGJpbmFyeV9uYW1lLCBs
YXN0X3Rlc3QpXSA9IChsYXN0X3N0YXR1cywgc3Rkb3V0X2J1ZmZlcikKICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyBzZWxmLl90aW1lb3V0CiAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGRvdXRfYnVmZmVyID0gJycKIApAQCAtMjY0LDEwICsxODQsMTQg
QEAgY2xhc3MgX1dvcmtlcihvYmplY3QpOgogICAgICAgICAgICAgICAgICMgV2UgYXNzdW1lIHRo
YXQgc3RkZXJyIGlzIG9ubHkgcmVsZXZhbnQgaWYgdGhlcmUgaXMgYSBjcmFzaCAobWVhbmluZyB3
ZSB0cmlnZ2VyZWQgYW4gYXNzZXJ0KQogICAgICAgICAgICAgICAgIGlmIGxhc3RfdGVzdDoKICAg
ICAgICAgICAgICAgICAgICAgcmVtYWluaW5nX3Rlc3RzLnJlbW92ZShsYXN0X3Rlc3QpCi0gICAg
ICAgICAgICAgICAgICAgIHN0ZG91dF9idWZmZXIgKz0gc2VydmVyX3Byb2Nlc3MucG9wX2FsbF9i
dWZmZXJlZF9zdGRvdXQoKQotICAgICAgICAgICAgICAgICAgICBzdGRlcnJfYnVmZmVyID0gc2Vy
dmVyX3Byb2Nlc3MucG9wX2FsbF9idWZmZXJlZF9zdGRlcnIoKSBpZiBsYXN0X3N0YXR1cyA9PSBS
dW5uZXIuU1RBVFVTX0NSQVNIRUQgZWxzZSAnJwotICAgICAgICAgICAgICAgICAgICBzZWxmLnBv
c3QoJ2xvZycsIG91dHB1dD1zdGRvdXRfYnVmZmVyICsgc3RkZXJyX2J1ZmZlcikKLSAgICAgICAg
ICAgICAgICAgICAgc2VsZi5wb3N0KCdlbmRlZF90ZXN0JywgJ3t9Lnt9Jy5mb3JtYXQoYmluYXJ5
X25hbWUsIGxhc3RfdGVzdCksIGxhc3Rfc3RhdHVzLCBzZWxmLl9maWx0ZXJfbm9pc3lfb3V0cHV0
KHN0ZG91dF9idWZmZXIgKyBzdGRlcnJfYnVmZmVyKSkKKyAgICAgICAgICAgICAgICAgICAgc3Rk
b3V0X2J1ZmZlciArPSBzdHJpbmdfdXRpbHMuZGVjb2RlKHNlcnZlcl9wcm9jZXNzLnBvcF9hbGxf
YnVmZmVyZWRfc3Rkb3V0KCksIHRhcmdldF90eXBlPXN0cikKKyAgICAgICAgICAgICAgICAgICAg
c3RkZXJyX2J1ZmZlciA9IHN0cmluZ191dGlscy5kZWNvZGUoc2VydmVyX3Byb2Nlc3MucG9wX2Fs
bF9idWZmZXJlZF9zdGRlcnIoKSwgdGFyZ2V0X3R5cGU9c3RyKSBpZiBsYXN0X3N0YXR1cyA9PSBS
dW5uZXIuU1RBVFVTX0NSQVNIRUQgZWxzZSAnJworICAgICAgICAgICAgICAgICAgICBmb3IgbGlu
ZSBpbiAoc3Rkb3V0X2J1ZmZlciArIHN0ZGVycl9idWZmZXIpLnNwbGl0bGluZXMoa2VlcGVuZHM9
RmFsc2UpOgorICAgICAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcihsaW5lKQorCisgICAg
ICAgICAgICAgICAgICAgIGxvZyA9IChfbG9nLmluZm8gaWYgbGFzdF9zdGF0dXMgPT0gUnVubmVy
LlNUQVRVU19QQVNTRUQgYW5kIG5vdCBzdGRvdXRfYnVmZmVyIGFuZCBub3Qgc3RkZXJyX2J1ZmZl
ciBlbHNlIF9sb2cuZXJyb3IpCisgICAgICAgICAgICAgICAgICAgIGxvZygne30ue30ge30nLmZv
cm1hdChiaW5hcnlfbmFtZSwgbGFzdF90ZXN0LCBSdW5uZXIuTkFNRV9GT1JfU1RBVFVTW2xhc3Rf
c3RhdHVzXSkpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFsne30ue30nLmZvcm1hdChiaW5h
cnlfbmFtZSwgbGFzdF90ZXN0KV0gPSAobGFzdF9zdGF0dXMsIHNlbGYuX2ZpbHRlcl9ub2lzeV9v
dXRwdXQoc3Rkb3V0X2J1ZmZlciArIHN0ZGVycl9idWZmZXIpKQogCiAgICAgICAgICAgICAgICAg
aWYgc2VydmVyX3Byb2Nlc3MudGltZWRfb3V0OgogICAgICAgICAgICAgICAgICAgICBicmVhawpA
QCAtMjgwLDIwICsyMDQsMTAzIEBAIGNsYXNzIF9Xb3JrZXIob2JqZWN0KToKIAogICAgICAgICAj
IE5vdywganVzdCB0cnkgYW5kIHJ1biB0aGUgcmVzdCBvZiB0aGUgdGVzdHMgc2luZ2x5LgogICAg
ICAgICBmb3IgdGVzdCBpbiByZW1haW5pbmdfdGVzdHM6Ci0gICAgICAgICAgICBzZWxmLl9ydW5f
c2luZ2xlX3Rlc3QoYmluYXJ5X25hbWUsIHRlc3QpCisgICAgICAgICAgICBuYW1lLCBzdGF0dXMs
IG91dHB1dCA9IHNlbGYuX3J1bl9zaW5nbGVfdGVzdChiaW5hcnlfbmFtZSwgdGVzdCkKKyAgICAg
ICAgICAgIHJlc3VsdFtuYW1lXSA9IHN0YXR1cywgb3V0cHV0CiAKLSAgICBkZWYgcG9zdChzZWxm
LCBtZXNzYWdlX25hbWUsIHRlc3RfbmFtZT1Ob25lLCBzdGF0dXM9MCwgb3V0cHV0PScnKToKLSAg
ICAgICAgc2VsZi5fY2FsbGVyLnBvc3QobWVzc2FnZV9uYW1lLCB0ZXN0X25hbWUsIHN0YXR1cywg
b3V0cHV0KQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKworZGVmIHNldHVwX3NoYXJkKHBvcnQ9
Tm9uZSk6CisgICAgcmV0dXJuIF9Xb3JrZXIuc2V0dXAocG9ydD1wb3J0KQorCisKK2RlZiBydW5f
c2hhcmQobmFtZSwgKnRlc3RzKToKKyAgICByZXR1cm4gX1dvcmtlci5pbnN0YW5jZS5ydW4obmFt
ZSwgKnRlc3RzKQorCisKK2RlZiB0ZWFyZG93bl9zaGFyZCgpOgorICAgIHJldHVybiBfV29ya2Vy
LnRlYXJkb3duKCkKKworCitjbGFzcyBSdW5uZXIob2JqZWN0KToKKyAgICBTVEFUVVNfUEFTU0VE
ID0gMAorICAgIFNUQVRVU19GQUlMRUQgPSAxCisgICAgU1RBVFVTX0NSQVNIRUQgPSAyCisgICAg
U1RBVFVTX1RJTUVPVVQgPSAzCisgICAgU1RBVFVTX0RJU0FCTEVEID0gNAorICAgIFNUQVRVU19S
VU5OSU5HID0gNQorCisgICAgTkFNRV9GT1JfU1RBVFVTID0gWworICAgICAgICAnUGFzc2VkJywK
KyAgICAgICAgJ0ZhaWxlZCcsCisgICAgICAgICdDcmFzaGVkJywKKyAgICAgICAgJ1RpbWVvdXQn
LAorICAgICAgICAnRGlzYWJsZWQnLAorICAgIF0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBw
b3J0LCBwcmludGVyKToKKyAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLnBy
aW50ZXIgPSBwcmludGVyCisgICAgICAgIHNlbGYudGVzdHNfcnVuID0gMAorICAgICAgICBzZWxm
Ll9udW1fd29ya2VycyA9IDEKKyAgICAgICAgc2VsZi5faGFzX2xvZ2dlZF9mb3JfdGVzdCA9IFRy
dWUgICMgU3VwcHJlc3MgYW4gZW1wdHkgbGluZSBiZXR3ZWVuICJSdW5uaW5nIHRlc3RzIiBhbmQg
dGhlIGZpcnN0IHRlc3QncyBvdXRwdXQuCisgICAgICAgIHNlbGYucmVzdWx0cyA9IHt9CiAKLSAg
ICBkZWYgaGFuZGxlKHNlbGYsIG1lc3NhZ2VfbmFtZSwgc291cmNlLCBzaGFyZF9uYW1lKToKLSAg
ICAgICAgYXNzZXJ0IG1lc3NhZ2VfbmFtZSA9PSAndGVzdCcKLSAgICAgICAgc2VsZi5wb3N0KCdz
dGFydGVkX3NoYXJkJywgc2hhcmRfbmFtZSkKLQotICAgICAgICBiaW5hcnlfbWFwID0ge30KLSAg
ICAgICAgZm9yIHRlc3QgaW4gc2VsZi5fc2hhcmRfbWFwW3NoYXJkX25hbWVdOgotICAgICAgICAg
ICAgc3BsaXRfdGVzdF9uYW1lID0gdGVzdC5zcGxpdCgnLicpCi0gICAgICAgICAgICBpZiBzcGxp
dF90ZXN0X25hbWVbMF0gbm90IGluIGJpbmFyeV9tYXA6Ci0gICAgICAgICAgICAgICAgYmluYXJ5
X21hcFtzcGxpdF90ZXN0X25hbWVbMF1dID0gW10KLSAgICAgICAgICAgIGJpbmFyeV9tYXBbc3Bs
aXRfdGVzdF9uYW1lWzBdXS5hcHBlbmQoJy4nLmpvaW4oc3BsaXRfdGVzdF9uYW1lWzE6XSkpCi0g
ICAgICAgIGZvciBiaW5hcnlfbmFtZSwgdGVzdF9saXN0IGluIGJpbmFyeV9tYXAuaXRlbXMoKToK
LSAgICAgICAgICAgIHNlbGYuX3J1bl9zaGFyZF93aXRoX2JpbmFyeShiaW5hcnlfbmFtZSwgdGVz
dF9saXN0KQorICAgICMgRklYTUUgQVBJIHRlc3RzIHNob3VsZCBydW4gYXMgYW4gYXBwLCB3ZSB3
b24ndCBuZWVkIHRoaXMgZnVuY3Rpb24gPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzUyMDQ+CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjb21tYW5kX2Zvcl9w
b3J0KHBvcnQsIGFyZ3MpOgorICAgICAgICBpZiAocG9ydC5nZXRfb3B0aW9uKCdmb3JjZScpKToK
KyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCctLWd0ZXN0X2Fsc29fcnVuX2Rpc2FibGVkX3Rlc3Rz
PTEnKQorICAgICAgICBpZiAnc2ltdWxhdG9yJyBpbiBwb3J0LnBvcnRfbmFtZToKKyAgICAgICAg
ICAgIGFzc2VydCBTaW11bGF0ZWREZXZpY2VNYW5hZ2VyLklOSVRJQUxJWkVEX0RFVklDRVMKKyAg
ICAgICAgICAgIHJldHVybiBbJy91c3IvYmluL3hjcnVuJywgJ3NpbWN0bCcsICdzcGF3bicsIFNp
bXVsYXRlZERldmljZU1hbmFnZXIuSU5JVElBTElaRURfREVWSUNFU1swXS51ZGlkXSArIGFyZ3MK
KyAgICAgICAgZWxpZiAnZGV2aWNlJyBpbiBwb3J0LnBvcnRfbmFtZToKKyAgICAgICAgICAgIHJh
aXNlIFJ1bnRpbWVFcnJvcignUnVubmluZyBhcGkgdGVzdHMgb24ge30gaXMgbm90IHN1cHBvcnRl
ZCcuZm9ybWF0KHBvcnQucG9ydF9uYW1lKSkKKyAgICAgICAgZWxpZiBwb3J0Lmhvc3QucGxhdGZv
cm0uaXNfd2luKCk6CisgICAgICAgICAgICBhcmdzWzBdID0gb3MucGF0aC5zcGxpdGV4dChhcmdz
WzBdKVswXSArICcuZXhlJworICAgICAgICByZXR1cm4gYXJncworCisgICAgQHN0YXRpY21ldGhv
ZAorICAgIGRlZiBfc2hhcmRfdGVzdHModGVzdHMpOgorICAgICAgICBzaGFyZHMgPSB7fQorICAg
ICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgIHNoYXJkX3ByZWZpeCA9ICcuJy5q
b2luKHRlc3Quc3BsaXQoJy4nKVs6LTFdKQorICAgICAgICAgICAgaWYgc2hhcmRfcHJlZml4IG5v
dCBpbiBzaGFyZHM6CisgICAgICAgICAgICAgICAgc2hhcmRzW3NoYXJkX3ByZWZpeF0gPSBbXQor
ICAgICAgICAgICAgc2hhcmRzW3NoYXJkX3ByZWZpeF0uYXBwZW5kKHRlc3QpCisgICAgICAgIHJl
dHVybiBzaGFyZHMKKworICAgIGRlZiBydW4oc2VsZiwgdGVzdHMsIG51bV93b3JrZXJzKToKKyAg
ICAgICAgaWYgbm90IHRlc3RzOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5w
cmludGVyLndyaXRlX3VwZGF0ZSgnU2hhcmRpbmcgdGVzdHMgLi4uJykKKyAgICAgICAgc2hhcmRz
ID0gUnVubmVyLl9zaGFyZF90ZXN0cyh0ZXN0cykKKworICAgICAgICBvcmlnaW5hbF9sZXZlbCA9
IHNlcnZlcl9wcm9jZXNzX2xvZ2dlci5sZXZlbAorICAgICAgICBzZXJ2ZXJfcHJvY2Vzc19sb2dn
ZXIuc2V0TGV2ZWwobG9nZ2luZy5DUklUSUNBTCkKKworICAgICAgICB0cnk6CisgICAgICAgICAg
ICBzZWxmLl9udW1fd29ya2VycyA9IG1pbihudW1fd29ya2VycywgbGVuKHNoYXJkcykpCisgICAg
ICAgICAgICB3aXRoIFRhc2tQb29sKAorICAgICAgICAgICAgICAgIHdvcmtlcnM9c2VsZi5fbnVt
X3dvcmtlcnMsCisgICAgICAgICAgICAgICAgc2V0dXA9c2V0dXBfc2hhcmQsIHNldHVwa3dhcmdz
PWRpY3QocG9ydD1zZWxmLnBvcnQpLAorICAgICAgICAgICAgICAgIHRlYXJkb3duPXRlYXJkb3du
X3NoYXJkLAorICAgICAgICAgICAgKSBhcyBwb29sOgorICAgICAgICAgICAgICAgIGZvciBuYW1l
LCB0ZXN0cyBpbiBpdGVyaXRlbXMoc2hhcmRzKToKKyAgICAgICAgICAgICAgICAgICAgcG9vbC5k
byhydW5fc2hhcmQsIG5hbWUsICp0ZXN0cywgY2FsbGJhY2s9c2VsZi5jYWxsYmFjaykKKyAgICAg
ICAgICAgICAgICBwb29sLndhaXQoKQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBz
ZXJ2ZXJfcHJvY2Vzc19sb2dnZXIuc2V0TGV2ZWwob3JpZ2luYWxfbGV2ZWwpCisKKyAgICBkZWYg
Y2FsbGJhY2soc2VsZiwgZGF0YSk6CisgICAgICAgIGZvciBuYW1lLCBkYXR1bSBpbiBpdGVyaXRl
bXMoZGF0YSk6CisgICAgICAgICAgICBzZWxmLnJlc3VsdHNbbmFtZV0gPSBkYXR1bQorCisgICAg
ZGVmIHJlc3VsdF9tYXBfYnlfc3RhdHVzKHNlbGYsIHN0YXR1cz1Ob25lKToKKyAgICAgICAgbWFw
ID0ge30KKyAgICAgICAgZm9yIHRlc3RfbmFtZSwgcmVzdWx0IGluIGl0ZXJpdGVtcyhzZWxmLnJl
c3VsdHMpOgorICAgICAgICAgICAgaWYgcmVzdWx0WzBdID09IHN0YXR1czoKKyAgICAgICAgICAg
ICAgICBtYXBbdGVzdF9uYW1lXSA9IHJlc3VsdFsxXQorICAgICAgICByZXR1cm4gbWFwCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427703</attachid>
            <date>2021-05-04 15:37:25 -0700</date>
            <delta_ts>2021-05-05 08:46:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225221-20210504153723.patch</filename>
            <type>text/plain</type>
            <size>44271</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3Njk1NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM0IEBACisyMDIxLTA1LTAzICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbcnVuLWFwaS10ZXN0c10gVXNlIHdlYmtpdGNvcmVweSdzIFRhc2tQb29s
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUyMjEK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc3MzUyNDY1PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tYXBpLXRlc3RzOiBNb3Zl
ZCBmcm9tIHdlYmtpdHB5L2FwaV90ZXN0cy9ydW5fYXBpX3Rlc3RzLnB5LgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvYXBpX3Rlc3RzL3J1bl9hcGlfdGVzdHMucHk6IE1vdmVkIHRvIHJ1bi1h
cGktdGVzdHMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9hcGlfdGVzdHMvcnVubmVyLnB5
OgorICAgICAgICAoX1dvcmtlcik6IFJlcHJlc2VudGF0aW9uIG9mIFdvcmtlciBwcm9jZXNzLgor
ICAgICAgICAoX1dvcmtlci5zZXR1cCk6IFBhc3MgcG9ydCBvYmplY3QgdG8gd29ya2VyIHByb2Nl
c3MuCisgICAgICAgIChfV29ya2VyLnRlYXJkb3duKTogVW4tc2V0IHBvcnQgb2JqZWN0IG9uIHdv
cmtlciBwcm9jZXNzLgorICAgICAgICAoX1dvcmtlci5fX2luaXRfXyk6IENvbnN0cnVjdCBvYmpl
Y3QgdG8gaG9sZCBhIFdvcmtlciBwcm9jZXNzJ3MgdmFyaWFibGVzLgorICAgICAgICAoX1dvcmtl
ci5fcnVuX3NpbmdsZV90ZXN0KTogTG9nIHRlc3QgcmVzdWx0cywgcmV0dXJuIHJlc3VsdHMgdG8g
Y2FsbGVyLgorICAgICAgICAoX1dvcmtlci5ydW4pOiBSdW4gc2hhcmQgd2l0aCBhbmQgcmV0dXJu
IHJlc3VsdHMgdG8gcGFyZW50IHByb2Nlc3MuCisgICAgICAgIChzZXR1cF9zaGFyZCk6IFJ1biBz
ZXR1cCBpbiBXb3JrZXIgcHJvY2Vzcy4KKyAgICAgICAgKHJ1bl9zaGFyZCk6IFJ1biB0ZXN0IHNo
YXJkIGluIFdvcmtlciBwcm9jZXNzLgorICAgICAgICAodGVhcmRvd25fc2hhcmQpOiBUZWFyIGRv
d24gV29ya2VyIHByb2Nlc3MuCisgICAgICAgIChSdW5uZXIuX19pbml0X18pOgorICAgICAgICAo
UnVubmVyLmNvbW1hbmRfZm9yX3BvcnQpOgorICAgICAgICAoUnVubmVyLl9zaGFyZF90ZXN0cyk6
IFNwbGl0IHRlc3RzIGludG8gc2hhcmRzIHRvIGJlIGVmZmljaWVudGx5IHJ1bi4KKyAgICAgICAg
KFJ1bm5lci5ydW4pOiBVc2UgVGFza1Bvb2wgdG8gcnVuIHRlc3RzIGluIHN1YiBwcm9jZXNzZXMu
CisgICAgICAgIChSdW5uZXIuY2FsbGJhY2spOiBTYXZlIHJlc3VsdHMgaW4gcGFyZW50IHByb2Nl
c3MuCisgICAgICAgIChSdW5uZXIucmVzdWx0X21hcF9ieV9zdGF0dXMpOgorICAgICAgICAoUnVu
bmVyLmhhbmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChfV29ya2VyLl9ydW5fc2hhcmRfd2l0aF9i
aW5hcnkpOiBEZWxldGVkLgorICAgICAgICAoX1dvcmtlci5wb3N0KTogRGVsZXRlZC4KKyAgICAg
ICAgKF9Xb3JrZXIuaGFuZGxlKTogRGVsZXRlZC4KKwogMjAyMS0wNS0wMyAgS2ltbW8gS2lubnVu
ZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtHUFVQXSBNb3ZlIEdQVVByb2Nl
c3MgV2ViR0wgdG8gRXhwZXJpbWVudGFsIEZlYXR1cmUKSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVu
LWFwaS10ZXN0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1hcGktdGVzdHMJKHJl
dmlzaW9uIDI3Njk1NykKKysrIFRvb2xzL1NjcmlwdHMvcnVuLWFwaS10ZXN0cwkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbgogCi0jIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAo
QykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjIsNyArMjIsMTQ1IEBACiAjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCiAjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogCi0iIiJXcmFwcGVyIGFyb3VuZCB3ZWJraXRweS9hcGlfdGVzdHMvcnVuX2Fw
aV90ZXN0cy5weSIiIgotZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IG11bHRpcHJvY2Vzc2lu
Z19ib290c3RyYXAKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KK2ltcG9y
dCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBzeXMKK2ltcG9ydCB0cmFjZWJhY2sK
IAotbXVsdGlwcm9jZXNzaW5nX2Jvb3RzdHJhcC5ydW4oJ3dlYmtpdHB5JywgJ2FwaV90ZXN0cycs
ICdydW5fYXBpX3Rlc3RzLnB5JykKK2Zyb20gd2Via2l0cHkuYXBpX3Rlc3RzLm1hbmFnZXIgaW1w
b3J0IE1hbmFnZXIKK2Zyb20gd2Via2l0cHkuY29tbW9uLmhvc3QgaW1wb3J0IEhvc3QKK2Zyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLnZpZXdzLm1ldGVyZWRfc3RyZWFtIGltcG9ydCBNZXRlcmVk
U3RyZWFtCitmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGNvbmZpZ3VyYXRpb25fb3B0aW9ucywg
cGxhdGZvcm1fb3B0aW9ucywgYmFzZSwgd2luCitmcm9tIHdlYmtpdHB5LnJlc3VsdHMub3B0aW9u
cyBpbXBvcnQgdXBsb2FkX29wdGlvbnMKKworRVhDRVBUSU9OQUxfRVhJVF9TVEFUVVMgPSAtMQor
SU5URVJSVVBUX0VYSVRfU1RBVFVTID0gLTIKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9f
bmFtZV9fKQorCisKK2RlZiBtYWluKGFyZ3YsIHN0ZG91dCwgc3RkZXJyKToKKyAgICBvcHRpb25z
LCBhcmdzID0gcGFyc2VfYXJncyhhcmd2KQorICAgIGhvc3QgPSBIb3N0KCkKKworICAgIHRyeToK
KyAgICAgICAgb3B0aW9ucy53ZWJraXRfdGVzdF9ydW5uZXIgPSBUcnVlCisgICAgICAgIHBvcnQg
PSBob3N0LnBvcnRfZmFjdG9yeS5nZXQob3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucykKKyAgICBl
eGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvciBhcyBlOgorICAgICAgICBwcmludChzdHIoZSksIGZp
bGU9c3RkZXJyKQorICAgICAgICByZXR1cm4gRVhDRVBUSU9OQUxfRVhJVF9TVEFUVVMKKworICAg
ICMgU29tZSBwbGF0Zm9ybXMgZG8gbm90IHN1cHBvcnQgQVBJIHRlc3RzCisgICAgZG9lc19ub3Rf
c3VwcG9ydF9hcGlfdGVzdHMgPSBbJ2lvcy1kZXZpY2UnXQorICAgIGlmIHBvcnQub3BlcmF0aW5n
X3N5c3RlbSgpIGluIGRvZXNfbm90X3N1cHBvcnRfYXBpX3Rlc3RzOgorICAgICAgICBwcmludCgn
e30gY2Fubm90IHJ1biBBUEkgdGVzdHMnLmZvcm1hdChwb3J0Lm9wZXJhdGluZ19zeXN0ZW0oKSks
IGZpbGU9c3RkZXJyKQorICAgICAgICByZXR1cm4gRVhDRVBUSU9OQUxfRVhJVF9TVEFUVVMKKwor
ICAgIHRyeToKKyAgICAgICAgcmV0dXJuIHJ1bihwb3J0LCBvcHRpb25zLCBhcmdzLCBzdGRlcnIp
CisgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICByZXR1cm4gSU5URVJSVVBU
X0VYSVRfU1RBVFVTCisgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZToKKyAgICAgICAgaWYg
aXNpbnN0YW5jZShlLCBFeGNlcHRpb24pOgorICAgICAgICAgICAgcHJpbnQoJ1xuJXMgcmFpc2Vk
OiAlcycgJSAoZS5fX2NsYXNzX18uX19uYW1lX18sIHN0cihlKSksIGZpbGU9c3RkZXJyKQorICAg
ICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhmaWxlPXN0ZGVycikKKyAgICAgICAgcmV0dXJu
IEVYQ0VQVElPTkFMX0VYSVRfU1RBVFVTCisKKworZGVmIHJ1bihwb3J0LCBvcHRpb25zLCBhcmdz
LCBsb2dnaW5nX3N0cmVhbSk6CisgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAg
IGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHIGlmIG9wdGlvbnMudmVyYm9zZSBlbHNlIGxv
Z2dpbmcuRVJST1IgaWYgb3B0aW9ucy5xdWlldCBlbHNlIGxvZ2dpbmcuSU5GTykKKworICAgIHRy
eToKKyAgICAgICAgc3RyZWFtID0gTWV0ZXJlZFN0cmVhbShsb2dnaW5nX3N0cmVhbSwgb3B0aW9u
cy52ZXJib3NlLCBsb2dnZXI9bG9nZ2VyLCBudW1iZXJfb2ZfY29sdW1ucz1wb3J0Lmhvc3QucGxh
dGZvcm0udGVybWluYWxfd2lkdGgoKSwgcHJpbnRfdGltZXN0YW1wcz1vcHRpb25zLnRpbWVzdGFt
cHMpCisgICAgICAgIG1hbmFnZXIgPSBNYW5hZ2VyKHBvcnQsIG9wdGlvbnMsIHN0cmVhbSkKKwor
ICAgICAgICByZXN1bHQgPSBtYW5hZ2VyLnJ1bihhcmdzLCBqc29uX291dHB1dD1vcHRpb25zLmpz
b25fb3V0cHV0KQorICAgICAgICBfbG9nLmRlYnVnKCJUZXN0aW5nIGNvbXBsZXRlZCwgRXhpdCBz
dGF0dXM6ICVkIiAlIHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgIGZpbmFsbHk6
CisgICAgICAgIHN0cmVhbS5jbGVhbnVwKCkKKworCitkZWYgcGFyc2VfYXJncyhhcmdzKToKKyAg
ICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnMgPSBbXQorCisgICAgb3B0aW9uX2dyb3VwX2RlZmlu
aXRpb25zLmFwcGVuZCgoJ1BsYXRmb3JtIG9wdGlvbnMnLCBwbGF0Zm9ybV9vcHRpb25zKCkpKQor
ICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9ucy5hcHBlbmQoKCdDb25maWd1cmF0aW9uIG9wdGlv
bnMnLCBjb25maWd1cmF0aW9uX29wdGlvbnMoKSkpCisgICAgb3B0aW9uX2dyb3VwX2RlZmluaXRp
b25zLmFwcGVuZCgoJ1ByaW50aW5nIE9wdGlvbnMnLCBbCisgICAgICAgIG9wdHBhcnNlLm1ha2Vf
b3B0aW9uKCctcScsICctLXF1aWV0JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxz
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUnVuIHF1aWV0bHkgKGVycm9y
cywgd2FybmluZ3MsIGFuZCBwcm9ncmVzcyBvbmx5KScpLAorICAgICAgICBvcHRwYXJzZS5tYWtl
X29wdGlvbignLXYnLCAnLS12ZXJib3NlJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1G
YWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRW5hYmxlIHZlcmJvc2Ug
cHJpbnRpbmcnKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tdGltZXN0YW1wcycs
IGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9J1ByaW50IHRpbWVzdGFtcHMgZm9yIGVhY2ggbG9nZ2VkIGxpbmUnKSwK
KyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tanNvbi1vdXRwdXQnLCBhY3Rpb249J3N0
b3JlJywgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdT
YXZlIHRlc3QgcmVzdWx0cyBhcyBKU09OIHRvIGZpbGUnKSwKKyAgICBdKSkKKworICAgIG9wdGlv
bl9ncm91cF9kZWZpbml0aW9ucy5hcHBlbmQoKCdXZWJLaXQgT3B0aW9ucycsIFsKKyAgICAgICAg
b3B0cGFyc2UubWFrZV9vcHRpb24oJy1nJywgJy0tZ3VhcmQtbWFsbG9jJywgYWN0aW9uPSdzdG9y
ZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0nRW5hYmxlIEd1YXJkIE1hbGxvYyAoT1MgWCBvbmx5KScpLAorICAgICAgICBvcHRwYXJzZS5t
YWtlX29wdGlvbignLS1yb290JywgYWN0aW9uPSdzdG9yZScsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9J1BhdGggdG8gYSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZXhlY3V0
YWJsZXMgbmVlZGVkIHRvIHJ1biB0ZXN0cy4nKSwKKyAgICBdKSkKKworICAgIG9wdGlvbl9ncm91
cF9kZWZpbml0aW9ucy5hcHBlbmQoKCdUZXN0aW5nIE9wdGlvbnMnLCBbCisgICAgICAgIG9wdHBh
cnNlLm1ha2Vfb3B0aW9uKCctLXd0Zi1vbmx5JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0
PSdUZXN0V1RGJywgZGVzdD0nYXBpX2JpbmFyeScsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlbHA9J09ubHkgYnVpbGQsIGNoZWNrIGFuZCBydW4gVGVzdFdURicpLAorICAgICAgICBv
cHRwYXJzZS5tYWtlX29wdGlvbignLS13ZWJraXQtb25seScsIGFjdGlvbj0nc3RvcmVfY29uc3Qn
LCBjb25zdD0nVGVzdFdlYktpdEFQSScsIGRlc3Q9J2FwaV9iaW5hcnknLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWxwPSdPbmx5IGNoZWNrIGFuZCBydW4gVGVzdFdlYktpdEFQSScp
LAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS13ZWItY29yZS1vbmx5JywgYWN0aW9u
PSdzdG9yZV9jb25zdCcsIGNvbnN0PSdUZXN0V2ViQ29yZScsIGRlc3Q9J2FwaV9iaW5hcnknLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdPbmx5IGNoZWNrIGFuZCBydW4gVGVz
dFdlYkNvcmUuZXhlIChXaW5kb3dzIG9ubHkpJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0
aW9uKCctLXdlYmtpdC1sZWdhY3ktb25seScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0n
VGVzdFdlYktpdExlZ2FjeScsIGRlc3Q9J2FwaV9iaW5hcnknLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoZWxwPSdPbmx5IGNoZWNrIGFuZCBydW4gVGVzdFdlYktpdExlZ2FjeS5leGUg
KFdpbmRvd3Mgb25seSknKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy1kJywgJy0t
ZHVtcCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9J0R1bXAgYWxsIHRlc3QgbmFtZXMgd2l0aG91dCBydW5uaW5n
IHRoZW0nKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tYnVpbGQnLCBkZXN0PSdi
dWlsZCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9VHJ1ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGVscD0nQ2hlY2sgdG8gZW5zdXJlIHRoZSBidWlsZCBpcyB1cC10by1k
YXRlIChkZWZhdWx0KS4nKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tbm8tYnVp
bGQnLCBkZXN0PSdidWlsZCcsIGFjdGlvbj0nc3RvcmVfZmFsc2UnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWxwPSJEb24ndCBjaGVjayB0byBzZWUgaWYgdGhlIGJ1aWxkIGlzIHVw
LXRvLWRhdGUuIiksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXRpbWVvdXQnLCBk
ZWZhdWx0PTMwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdOdW1iZXIgb2Yg
c2Vjb25kcyB0byB3YWl0IGJlZm9yZSBhIHRlc3QgdGltZXMgb3V0JyksCisgICAgICAgIG9wdHBh
cnNlLm1ha2Vfb3B0aW9uKCctLW5vLXRpbWVvdXQnLCBkZXN0PSd0aW1lb3V0JywgYWN0aW9uPSdz
dG9yZV9mYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0Rpc2FibGUg
dGltZW91dHMgZm9yIGFsbCB0ZXN0cycpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbign
LS1pdGVyYXRpb25zJywgdHlwZT0naW50JywgZGVmYXVsdD0xLCBoZWxwPSdOdW1iZXIgb2YgdGlt
ZXMgdG8gcnVuIHRoZSBzZXQgb2YgdGVzdHMgKGUuZy4gQUJDQUJDQUJDKScpLAorICAgICAgICBv
cHRwYXJzZS5tYWtlX29wdGlvbignLS1yZXBlYXQtZWFjaCcsIHR5cGU9J2ludCcsIGRlZmF1bHQ9
MSwgaGVscD0nTnVtYmVyIG9mIHRpbWVzIHRvIHJ1biBlYWNoIHRlc3QgKGUuZy4gQUFBQkJCQ0ND
KScpLAorCisgICAgICAgICMgRklYTUU6IFJlbW92ZSB0aGUgZGVmYXVsdCwgQVBJIHRlc3RzIHNo
b3VsZCBiZSBtdWx0aXByb2Nlc3MKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tY2hp
bGQtcHJvY2Vzc2VzJywgZGVmYXVsdD0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSdOdW1iZXIgb2YgcHJvY2Vzc2VzIHRvIHJ1biBpbiBwYXJhbGxlbC4nKSwKKworICAgICAg
ICAjIEZJWE1FOiBEZWZhdWx0IHNob3VsZCBiZSBmYWxzZSwgQVBJIHRlc3RzIHNob3VsZCBub3Qg
YmUgZm9yY2VkIHRvIHJ1biBzaW5nbHkKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0t
cnVuLXNpbmdseScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9VHJ1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGVscD0nUnVuIGEgc2VwYXJhdGUgcHJvY2VzcyBmb3IgZWFj
aCB0ZXN0JyksCisKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tZm9yY2UnLCBhY3Rp
b249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWxwPSdSdW4gYWxsIHRlc3RzLCBldmVuIERJU0FCTEVEIHRlc3RzJyksCisgICAgICAg
IG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWFkZGl0aW9uYWwtZW52LXZhcicsIHR5cGU9J3N0cmlu
ZycsIGFjdGlvbj0nYXBwZW5kJywgZGVmYXVsdD1bXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVscD0nUGFzc2VzIHRoYXQgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIHRlc3Rz
ICgtLWFkZGl0aW9uYWwtZW52LXZhcj1OQU1FPVZBTFVFKScpLAorICAgIF0pKQorICAgIG9wdGlv
bl9ncm91cF9kZWZpbml0aW9ucy5hcHBlbmQoKCdVcGxvYWQgT3B0aW9ucycsIHVwbG9hZF9vcHRp
b25zKCkpKQorCisgICAgb3B0aW9uX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigKKyAg
ICAgICAgdXNhZ2U9J3J1bi1hcGktdGVzdHMgW29wdGlvbnNdIFs8dGVzdCBuYW1lcz4uLi5dJywK
KyAgICAgICAgZGVzY3JpcHRpb249IiIiQnkgZGVmYXVsdCwgcnVuLWFwaS10ZXN0cyB3aWxsIHJ1
biBhbGwgQVBJIHRlc3RzLiBJdCBhbHNvIGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IHRlc3Rz
IG9mIHRoZSBcCitmb3JtYXQgPHN1aXRlPi48dGVzdD4gb3IgPGNhbm9uaWNhbGl6ZWQgYmluYXJ5
IG5hbWU+LjxzdWl0ZT4uPHRlc3Q+LiBOb3RlIHRoYXQgaW4gdGhlIGNhc2Ugd2hlcmUgYSBiaW5h
cnkgaXMgbm90IFwKK3NwZWNpZmllZCwgb25lIHdpbGwgYmUgaW5mZXJyZWQgYnkgbGlzdGluZyBh
bGwgYXZhaWxhYmxlIHRlc3RzLiBTcGVjaWZ5aW5nIGp1c3QgYSBiaW5hcnkgb3IganVzdCBhIHN1
aXRlIHdpbGwgY2F1c2UgZXZlcnkgXAordGVzdCBjb250YWluZWQgd2l0aGluIHRvIGJlIHJ1bi4g
VGhlIGNhbm9uaWNhbGl6ZWQgYmluYXJ5IG5hbWUgaXMgdGhlIGJpbmFyeSBuYW1lIHdpdGggYW55
IGZpbGVuYW1lIGV4dGVuc2lvbiBcCitzdHJpcHBlZC4gRm9yIFVuaXggcG9ydHMsIHRoZXNlIGJp
bmFyaWVzIGFyZSB7fSBhbmQge30uIEZvciBXaW5kb3dzIHBvcnRzLCB0aGV5IGFyZSB7fSBhbmQg
e30uIiIiLmZvcm1hdCgKKyAgICAgICAgICAgICcsICcuam9pbihiYXNlLlBvcnQuQVBJX1RFU1Rf
QklOQVJZX05BTUVTWzotMV0pLCBiYXNlLlBvcnQuQVBJX1RFU1RfQklOQVJZX05BTUVTWy0xXSwK
KyAgICAgICAgICAgICcsICcuam9pbih3aW4uV2luUG9ydC5BUElfVEVTVF9CSU5BUllfTkFNRVNb
Oi0xXSksIHdpbi5XaW5Qb3J0LkFQSV9URVNUX0JJTkFSWV9OQU1FU1stMV0sCisgICAgKSkKKwor
ICAgIGZvciBncm91cF9uYW1lLCBncm91cF9vcHRpb25zIGluIG9wdGlvbl9ncm91cF9kZWZpbml0
aW9uczoKKyAgICAgICAgb3B0aW9uX2dyb3VwID0gb3B0cGFyc2UuT3B0aW9uR3JvdXAob3B0aW9u
X3BhcnNlciwgZ3JvdXBfbmFtZSkKKyAgICAgICAgb3B0aW9uX2dyb3VwLmFkZF9vcHRpb25zKGdy
b3VwX29wdGlvbnMpCisgICAgICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbl9ncm91cChvcHRp
b25fZ3JvdXApCisKKyAgICByZXR1cm4gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisK
KworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2
WzE6XSwgc3lzLnN0ZG91dCwgc3lzLnN0ZGVycikpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rhc2tfcG9vbC5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rhc2tf
cG9vbC5weQkocmV2aXNpb24gMjc2OTU3KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0Y29yZXB5L3dlYmtpdGNvcmVweS90YXNrX3Bvb2wucHkJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDE3ICszMCwxNyBAQCBpbXBvcnQgc3lzCiBmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgT3V0cHV0
Q2FwdHVyZSwgVGltZW91dCwgbG9nCiAKIAotY2xhc3MgTWVzc2FnZShvYmplY3QpOgorY2xhc3Mg
X01lc3NhZ2Uob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgd2hvPU5vbmUpOgotICAg
ICAgICBzZWxmLndobyA9IHdobyBvciBQcm9jZXNzLm5hbWUKKyAgICAgICAgc2VsZi53aG8gPSB3
aG8gb3IgX1Byb2Nlc3MubmFtZQogCiAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGNhbGxlcik6CiAg
ICAgICAgIE5vdEltcGxlbWVudGVkKCkKIAogCi1jbGFzcyBUYXNrKE1lc3NhZ2UpOgorY2xhc3Mg
X1Rhc2soX01lc3NhZ2UpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jdGlvbiwgaWQsICph
cmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIHN1cGVyKFRhc2ssIHNlbGYpLl9faW5pdF9fKCkKKyAg
ICAgICAgc3VwZXIoX1Rhc2ssIHNlbGYpLl9faW5pdF9fKCkKIAogICAgICAgICBzZWxmLmZ1bmN0
aW9uID0gZnVuY3Rpb24KICAgICAgICAgc2VsZi5pZCA9IGlkCkBAIC01MSw5ICs1MSw5IEBAIGNs
YXNzIFRhc2soTWVzc2FnZSk6CiAgICAgICAgIHJldHVybiBzZWxmLmZ1bmN0aW9uKCpzZWxmLmFy
Z3MsICoqc2VsZi5rd2FyZ3MpCiAKIAotY2xhc3MgUmVzdWx0KE1lc3NhZ2UpOgorY2xhc3MgX1Jl
c3VsdChfTWVzc2FnZSk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlLCBpZCk6Ci0gICAg
ICAgIHN1cGVyKFJlc3VsdCwgc2VsZikuX19pbml0X18oKQorICAgICAgICBzdXBlcihfUmVzdWx0
LCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQogICAgICAgICBz
ZWxmLmlkID0gaWQKIApAQCAtNjMsMjEgKzYzLDIxIEBAIGNsYXNzIFJlc3VsdChNZXNzYWdlKToK
ICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKIAogCi1jbGFzcyBMb2coTWVzc2FnZSk6CitjbGFz
cyBfTG9nKF9NZXNzYWdlKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjb3JkKToKLSAgICAg
ICAgc3VwZXIoTG9nLCBzZWxmKS5fX2luaXRfXygpCisgICAgICAgIHN1cGVyKF9Mb2csIHNlbGYp
Ll9faW5pdF9fKCkKICAgICAgICAgc2VsZi5yZWNvcmQgPSByZWNvcmQKIAogICAgIGRlZiBfX2Nh
bGxfXyhzZWxmLCBjYWxsZXIpOgogICAgICAgICBsb2dnaW5nLmdldExvZ2dlcihzZWxmLnJlY29y
ZC5uYW1lKS5sb2coc2VsZi5yZWNvcmQubGV2ZWxubywgJ3t9IHt9Jy5mb3JtYXQoc2VsZi53aG8s
IHNlbGYucmVjb3JkLmdldE1lc3NhZ2UoKSkpCiAKIAotY2xhc3MgUHJpbnQoTWVzc2FnZSk6Citj
bGFzcyBfUHJpbnQoX01lc3NhZ2UpOgogICAgIHN0ZG91dCA9IDEKICAgICBzdGRlcnIgPSAyCiAK
ICAgICBkZWYgX19pbml0X18oc2VsZiwgbGluZXMsIHN0cmVhbT1zdGRvdXQpOgotICAgICAgICBz
dXBlcihQcmludCwgc2VsZikuX19pbml0X18oKQorICAgICAgICBzdXBlcihfUHJpbnQsIHNlbGYp
Ll9faW5pdF9fKCkKICAgICAgICAgc2VsZi5saW5lcyA9IGxpbmVzCiAgICAgICAgIHNlbGYuc3Ry
ZWFtID0gc3RyZWFtCiAKQEAgLTkwLDMyICs5MCwzMiBAQCBjbGFzcyBQcmludChNZXNzYWdlKToK
ICAgICAgICAgICAgIHN0cmVhbS53cml0ZSgne31cbicuZm9ybWF0KGxpbmUpKQogCiAKLWNsYXNz
IFN0YXRlKE1lc3NhZ2UpOgorY2xhc3MgX1N0YXRlKF9NZXNzYWdlKToKICAgICBTVEFSVElORywg
U1RPUFBJTkcgPSAxLCAwCiAgICAgU1RBVEVTID0gW1NUQVJUSU5HLCBTVE9QUElOR10KIAogICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBzdGF0ZSk6Ci0gICAgICAgIHN1cGVyKFN0YXRlLCBzZWxmKS5f
X2luaXRfXygpCisgICAgICAgIHN1cGVyKF9TdGF0ZSwgc2VsZikuX19pbml0X18oKQogICAgICAg
ICBzZWxmLnN0YXRlID0gc3RhdGUKIAogICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBjYWxsZXIpOgog
ICAgICAgICBsb2cuaW5mbygne30ge30nLmZvcm1hdCgKICAgICAgICAgICAgIHNlbGYud2hvLCB7
Ci0gICAgICAgICAgICAgICAgU3RhdGUuU1RBUlRJTkc6ICdzdGFydGluZycsCi0gICAgICAgICAg
ICAgICAgU3RhdGUuU1RPUFBJTkc6ICdzdG9wcGluZycsCisgICAgICAgICAgICAgICAgc2VsZi5T
VEFSVElORzogJ3N0YXJ0aW5nJywKKyAgICAgICAgICAgICAgICBzZWxmLlNUT1BQSU5HOiAnc3Rv
cHBpbmcnLAogICAgICAgICAgICAgfS5nZXQoc2VsZi5zdGF0ZSwgc2VsZi5zdGF0ZSksCiAgICAg
ICAgICkpCiAgICAgICAgIGlmIGNhbGxlcjoKICAgICAgICAgICAgIGNhbGxlci5fc3RhcnRlZCAr
PSB7Ci0gICAgICAgICAgICAgICAgU3RhdGUuU1RBUlRJTkc6IDEsCi0gICAgICAgICAgICAgICAg
U3RhdGUuU1RPUFBJTkc6IC0xLAorICAgICAgICAgICAgICAgIHNlbGYuU1RBUlRJTkc6IDEsCisg
ICAgICAgICAgICAgICAgc2VsZi5TVE9QUElORzogLTEsCiAgICAgICAgICAgICB9LmdldChzZWxm
LnN0YXRlLCAwKQogICAgICAgICByZXR1cm4gc2VsZi5zdGF0ZQogCiAKLWNsYXNzIENoaWxkRXhj
ZXB0aW9uKE1lc3NhZ2UpOgorY2xhc3MgX0NoaWxkRXhjZXB0aW9uKF9NZXNzYWdlKToKICAgICBk
ZWYgX19pbml0X18oc2VsZiwgZXhjX2luZm89Tm9uZSk6Ci0gICAgICAgIHN1cGVyKENoaWxkRXhj
ZXB0aW9uLCBzZWxmKS5fX2luaXRfXygpCisgICAgICAgIHN1cGVyKF9DaGlsZEV4Y2VwdGlvbiwg
c2VsZikuX19pbml0X18oKQogICAgICAgICBzZWxmLmV4Y19pbmZvID0gZXhjX2luZm8gb3Igc3lz
LmV4Y19pbmZvKCkKIAogICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBjYWxsZXIpOgpAQCAtMTI4LDcg
KzEyOCw3IEBAIGNsYXNzIENoaWxkRXhjZXB0aW9uKE1lc3NhZ2UpOgogICAgICAgICByZXJhaXNl
KCpzZWxmLmV4Y19pbmZvKQogCiAKLWNsYXNzIEJpRGlyZWN0aW9uYWxRdWV1ZShvYmplY3QpOgor
Y2xhc3MgX0JpRGlyZWN0aW9uYWxRdWV1ZShvYmplY3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBvdXRnb2luZz1Ob25lLCBpbmNvbWluZz1Ob25lKToKICAgICAgICAgc2VsZi5vdXRnb2luZyA9
IG91dGdvaW5nIG9yIG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCiAgICAgICAgIHNlbGYuaW5jb21p
bmcgPSBpbmNvbWluZyBvciBtdWx0aXByb2Nlc3NpbmcuUXVldWUoKQpAQCAtMTQ3LDE3ICsxNDcs
MTggQEAgY2xhc3MgQmlEaXJlY3Rpb25hbFF1ZXVlKG9iamVjdCk6CiAgICAgICAgICAgICByZXR1
cm4gc2VsZi5pbmNvbWluZy5nZXQoKQogCiAKLWNsYXNzIFByb2Nlc3Mob2JqZWN0KToKK2NsYXNz
IF9Qcm9jZXNzKG9iamVjdCk6CiAgICAgbmFtZSA9IE5vbmUKICAgICB3b3JraW5nID0gRmFsc2UK
KyAgICBxdWV1ZSA9IE5vbmUKIAogICAgIGNsYXNzIExvZ0hhbmRsZXIobG9nZ2luZy5IYW5kbGVy
KToKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHF1ZXVlLCAqKmt3YXJncyk6CiAgICAgICAg
ICAgICBzZWxmLl9xdWV1ZSA9IHF1ZXVlCi0gICAgICAgICAgICBzdXBlcihQcm9jZXNzLkxvZ0hh
bmRsZXIsIHNlbGYpLl9faW5pdF9fKCoqa3dhcmdzKQorICAgICAgICAgICAgc3VwZXIoX1Byb2Nl
c3MuTG9nSGFuZGxlciwgc2VsZikuX19pbml0X18oKiprd2FyZ3MpCiAKICAgICAgICAgZGVmIGVt
aXQoc2VsZiwgcmVjb3JkKToKLSAgICAgICAgICAgIHNlbGYuX3F1ZXVlLnNlbmQoTG9nKHJlY29y
ZCkpCisgICAgICAgICAgICBzZWxmLl9xdWV1ZS5zZW5kKF9Mb2cocmVjb3JkKSkKIAogICAgIGNs
YXNzIFN0cmVhbShpby5JT0Jhc2UpOgogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaGFuZGxl
LCBxdWV1ZSk6CkBAIC0xNjksNyArMTcwLDcgQEAgY2xhc3MgUHJvY2VzcyhvYmplY3QpOgogCiAg
ICAgICAgIGRlZiBmbHVzaChzZWxmKToKICAgICAgICAgICAgIGlmIHNlbGYuY2FjaGUgaXMgbm90
IE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcXVldWUuc2VuZChQcmludChsaW5lcz1bc2Vs
Zi5jYWNoZV0sIHN0cmVhbT1zZWxmLmhhbmRsZSkpCisgICAgICAgICAgICAgICAgc2VsZi5fcXVl
dWUuc2VuZChfUHJpbnQobGluZXM9W3NlbGYuY2FjaGVdLCBzdHJlYW09c2VsZi5oYW5kbGUpKQog
ICAgICAgICAgICAgICAgIHNlbGYuY2FjaGUgPSBOb25lCiAKICAgICAgICAgZGVmIHdyaXRlbGlu
ZXMoc2VsZiwgbGluZXMpOgpAQCAtMTg1LDcgKzE4Niw3IEBAIGNsYXNzIFByb2Nlc3Mob2JqZWN0
KToKICAgICAgICAgICAgICAgICBlbGlmIGMgbm90IGluIFsnXHInLCAnXDAnXToKICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5jYWNoZSA9IGMgaWYgc2VsZi5jYWNoZSBpcyBOb25lIGVsc2UgKHNl
bGYuY2FjaGUgKyBjKQogICAgICAgICAgICAgaWYgdG9fYmVfcHJpbnRlZDoKLSAgICAgICAgICAg
ICAgICBzZWxmLl9xdWV1ZS5zZW5kKFByaW50KGxpbmVzPXRvX2JlX3ByaW50ZWQsIHN0cmVhbT1z
ZWxmLmhhbmRsZSkpCisgICAgICAgICAgICAgICAgc2VsZi5fcXVldWUuc2VuZChfUHJpbnQobGlu
ZXM9dG9fYmVfcHJpbnRlZCwgc3RyZWFtPXNlbGYuaGFuZGxlKSkKICAgICAgICAgICAgIHJldHVy
biBsZW4oZGF0YSkKIAogICAgICAgICBAcHJvcGVydHkKQEAgLTI1Miw5ICsyNTMsMTAgQEAgY2xh
c3MgUHJvY2VzcyhvYmplY3QpOgogICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihjbHMuTG9nSGFu
ZGxlcihxdWV1ZSkpCiAgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dsZXZlbCkKIAotICAgICAg
ICBxdWV1ZS5zZW5kKFN0YXRlKFN0YXRlLlNUQVJUSU5HKSkKKyAgICAgICAgY2xzLnF1ZXVlID0g
cXVldWUKKyAgICAgICAgcXVldWUuc2VuZChfU3RhdGUoX1N0YXRlLlNUQVJUSU5HKSkKIAotICAg
ICAgICB3aXRoIE91dHB1dENhcHR1cmUuUmVwbGFjZVN5c1N0cmVhbSgnc3RkZXJyJywgY2xzLlN0
cmVhbShQcmludC5zdGRlcnIsIHF1ZXVlKSksIE91dHB1dENhcHR1cmUuUmVwbGFjZVN5c1N0cmVh
bSgnc3Rkb3V0JywgY2xzLlN0cmVhbShQcmludC5zdGRvdXQsIHF1ZXVlKSk6CisgICAgICAgIHdp
dGggT3V0cHV0Q2FwdHVyZS5SZXBsYWNlU3lzU3RyZWFtKCdzdGRlcnInLCBjbHMuU3RyZWFtKF9Q
cmludC5zdGRlcnIsIHF1ZXVlKSksIE91dHB1dENhcHR1cmUuUmVwbGFjZVN5c1N0cmVhbSgnc3Rk
b3V0JywgY2xzLlN0cmVhbShfUHJpbnQuc3Rkb3V0LCBxdWV1ZSkpOgogICAgICAgICAgICAgdHJ5
OgogICAgICAgICAgICAgICAgIHBpY2tsaW5nX3N1cHBvcnQuaW5zdGFsbCgpCiAgICAgICAgICAg
ICAgICAgaWYgc2V0dXA6CkBAIC0yNjQsMTEgKzI2NiwxMSBAQCBjbGFzcyBQcm9jZXNzKG9iamVj
dCk6CiAgICAgICAgICAgICAgICAgICAgIHRhc2sgPSBxdWV1ZS5yZWNlaXZlKCkKICAgICAgICAg
ICAgICAgICAgICAgaWYgbm90IHRhc2s6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawot
ICAgICAgICAgICAgICAgICAgICBxdWV1ZS5zZW5kKFJlc3VsdCh2YWx1ZT10YXNrKE5vbmUpLCBp
ZD10YXNrLmlkKSkKKyAgICAgICAgICAgICAgICAgICAgcXVldWUuc2VuZChfUmVzdWx0KHZhbHVl
PXRhc2soTm9uZSksIGlkPXRhc2suaWQpKQogCiAgICAgICAgICAgICBleGNlcHQgQmFzZUV4Y2Vw
dGlvbjoKICAgICAgICAgICAgICAgICB0eXAsIGV4Y2VwdGlvbiwgdHJhY2ViYWNrID0gc3lzLmV4
Y19pbmZvKCkKLSAgICAgICAgICAgICAgICBxdWV1ZS5zZW5kKENoaWxkRXhjZXB0aW9uKGV4Y19p
bmZvPSgKKyAgICAgICAgICAgICAgICBxdWV1ZS5zZW5kKF9DaGlsZEV4Y2VwdGlvbihleGNfaW5m
bz0oCiAgICAgICAgICAgICAgICAgICAgIHR5cCwgdHlwKCd7fSAoZnJvbSB7fSknLmZvcm1hdChz
dHIoZXhjZXB0aW9uKSwgbmFtZSkpLCB0cmFjZWJhY2ssCiAgICAgICAgICAgICAgICAgKSkpCiAK
QEAgLTI3NywxMCArMjc5LDIxIEBAIGNsYXNzIFByb2Nlc3Mob2JqZWN0KToKICAgICAgICAgICAg
ICAgICAgICAgdGVhcmRvd24oKnRlYXJkb3duYXJncywgKip0ZWFyZG93bmt3YXJncykKICAgICAg
ICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJy
LmZsdXNoKCkKLSAgICAgICAgICAgICAgICBxdWV1ZS5zZW5kKFN0YXRlKFN0YXRlLlNUT1BQSU5H
KSkKKyAgICAgICAgICAgICAgICBxdWV1ZS5zZW5kKF9TdGF0ZShfU3RhdGUuU1RPUFBJTkcpKQor
ICAgICAgICAgICAgICAgIGNscy5xdWV1ZSA9IE5vbmUKIAogCiBjbGFzcyBUYXNrUG9vbChvYmpl
Y3QpOgorICAgIE1lc3NhZ2UgPSBfTWVzc2FnZQorICAgIFRhc2sgPSBfVGFzaworICAgIFJlc3Vs
dCA9IF9SZXN1bHQKKyAgICBMb2cgPSBfTG9nCisgICAgUHJpbnQgPSBfUHJpbnQKKyAgICBTdGF0
ZSA9IF9TdGF0ZQorICAgIENoaWxkRXhjZXB0aW9uID0gX0NoaWxkRXhjZXB0aW9uCisgICAgQmlE
aXJlY3Rpb25hbFF1ZXVlID0gX0JpRGlyZWN0aW9uYWxRdWV1ZQorICAgIFByb2Nlc3MgPSBfUHJv
Y2VzcworCiAKICAgICBjbGFzcyBFeGNlcHRpb24oUnVudGltZUVycm9yKToKICAgICAgICAgcGFz
cwpAQCAtMjk0LDIwICszMDcsMjAgQEAgY2xhc3MgVGFza1Bvb2wob2JqZWN0KToKICAgICAgICAg
aW1wb3J0IHRibGliCiAKICAgICAgICAgbmFtZSA9IG5hbWUgb3IgJ3dvcmtlcicKLSAgICAgICAg
aWYgbmFtZSA9PSBQcm9jZXNzLm5hbWU6CisgICAgICAgIGlmIG5hbWUgPT0gc2VsZi5Qcm9jZXNz
Lm5hbWU6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJQYXJlbnQgcHJvY2VzcyBpcyBh
bHJlYWR5IG5hbWVkIHt9Ii5mb3JtYXQobmFtZSkpCiAKICAgICAgICAgaWYgd29ya2VycyA8IDE6
CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdUYXNrUG9vbCByZXF1aXJlcyBwb3NpdGl2
ZSBudW1iZXIgb2Ygd29ya2VycycpCiAKLSAgICAgICAgc2VsZi5xdWV1ZSA9IEJpRGlyZWN0aW9u
YWxRdWV1ZSgpCisgICAgICAgIHNlbGYucXVldWUgPSBzZWxmLkJpRGlyZWN0aW9uYWxRdWV1ZSgp
CiAKICAgICAgICAgc2VsZi53b3JrZXJzID0gW211bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKAotICAg
ICAgICAgICAgdGFyZ2V0PVByb2Nlc3MubWFpbiwKKyAgICAgICAgICAgIHRhcmdldD1zZWxmLlBy
b2Nlc3MubWFpbiwKICAgICAgICAgICAgIGFyZ3M9KAogICAgICAgICAgICAgICAgICd7fS97fScu
Zm9ybWF0KG5hbWUsIGNvdW50KSwgbG9nZ2luZy5nZXRMb2dnZXIoKS5nZXRFZmZlY3RpdmVMZXZl
bCgpLAogICAgICAgICAgICAgICAgIHNldHVwLCBzZXR1cGFyZ3MsIHNldHVwa3dhcmdzLAotICAg
ICAgICAgICAgICAgIEJpRGlyZWN0aW9uYWxRdWV1ZShvdXRnb2luZz1zZWxmLnF1ZXVlLmluY29t
aW5nLCBpbmNvbWluZz1zZWxmLnF1ZXVlLm91dGdvaW5nKSwKKyAgICAgICAgICAgICAgICBzZWxm
LkJpRGlyZWN0aW9uYWxRdWV1ZShvdXRnb2luZz1zZWxmLnF1ZXVlLmluY29taW5nLCBpbmNvbWlu
Zz1zZWxmLnF1ZXVlLm91dGdvaW5nKSwKICAgICAgICAgICAgICAgICB0ZWFyZG93biwgdGVhcmRv
d25hcmdzLCB0ZWFyZG93bmt3YXJncywKICAgICAgICAgICAgICksCiAgICAgICAgICkgZm9yIGNv
dW50IGluIHJhbmdlKHdvcmtlcnMpXQpAQCAtMzMwLDcgKzM0Myw3IEBAIGNsYXNzIFRhc2tQb29s
KG9iamVjdCk6CiAgICAgICAgIGNhbGxiYWNrID0ga3dhcmdzLnBvcCgnY2FsbGJhY2snLCBOb25l
KQogICAgICAgICBpZiBjYWxsYmFjazoKICAgICAgICAgICAgIHNlbGYuY2FsbGJhY2tzW3NlbGYu
X2lkX2NvdW50XSA9IGNhbGxiYWNrCi0gICAgICAgIHNlbGYucXVldWUuc2VuZChUYXNrKGZ1bmN0
aW9uLCBzZWxmLl9pZF9jb3VudCwgKmFyZ3MsICoqa3dhcmdzKSkKKyAgICAgICAgc2VsZi5xdWV1
ZS5zZW5kKHNlbGYuVGFzayhmdW5jdGlvbiwgc2VsZi5faWRfY291bnQsICphcmdzLCAqKmt3YXJn
cykpCiAgICAgICAgIHNlbGYuX2lkX2NvdW50ICs9IDEKIAogICAgICAgICAjIEZvciBldmVyeSBi
bG9jayBvZiB0YXNrcyBwYXNzZWQgdG8gb3VyIHdvcmtlcnMsIHdlIG5lZWQgY29uc3VtZSBtZXNz
YWdlcyBzbyB3ZSBkb24ndCBnZXQgZGVhZGxvY2tlZApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9hcGlfdGVzdHMvcnVuX2FwaV90ZXN0cy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2FwaV90ZXN0cy9ydW5fYXBpX3Rlc3RzLnB5CShyZXZpc2lvbiAyNzY5NTcp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2FwaV90ZXN0cy9ydW5fYXBpX3Rlc3RzLnB5CShu
b25leGlzdGVudCkKQEAgLTEsMTY0ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
IyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
LSMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0jIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgotIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UwotIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLQotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgotaW1wb3J0
IGxvZ2dpbmcKLWltcG9ydCBvcHRwYXJzZQotaW1wb3J0IHN5cwotaW1wb3J0IHRyYWNlYmFjawot
Ci1mcm9tIHdlYmtpdHB5LmFwaV90ZXN0cy5tYW5hZ2VyIGltcG9ydCBNYW5hZ2VyCi1mcm9tIHdl
YmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy52aWV3cy5tZXRlcmVkX3N0cmVhbSBpbXBvcnQgTWV0ZXJlZFN0cmVhbQotZnJvbSB3ZWJraXRw
eS5wb3J0IGltcG9ydCBjb25maWd1cmF0aW9uX29wdGlvbnMsIHBsYXRmb3JtX29wdGlvbnMsIGJh
c2UsIHdpbgotZnJvbSB3ZWJraXRweS5yZXN1bHRzLm9wdGlvbnMgaW1wb3J0IHVwbG9hZF9vcHRp
b25zCi0KLUVYQ0VQVElPTkFMX0VYSVRfU1RBVFVTID0gLTEKLUlOVEVSUlVQVF9FWElUX1NUQVRV
UyA9IC0yCi0KLV9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKLQotCi1kZWYgbWFp
bihhcmd2LCBzdGRvdXQsIHN0ZGVycik6Ci0gICAgb3B0aW9ucywgYXJncyA9IHBhcnNlX2FyZ3Mo
YXJndikKLSAgICBob3N0ID0gSG9zdCgpCi0KLSAgICB0cnk6Ci0gICAgICAgIG9wdGlvbnMud2Vi
a2l0X3Rlc3RfcnVubmVyID0gVHJ1ZQotICAgICAgICBwb3J0ID0gaG9zdC5wb3J0X2ZhY3Rvcnku
Z2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMpCi0gICAgZXhjZXB0IE5vdEltcGxlbWVudGVk
RXJyb3IgYXMgZToKLSAgICAgICAgcHJpbnQoc3RyKGUpLCBmaWxlPXN0ZGVycikKLSAgICAgICAg
cmV0dXJuIEVYQ0VQVElPTkFMX0VYSVRfU1RBVFVTCi0KLSAgICAjIFNvbWUgcGxhdGZvcm1zIGRv
IG5vdCBzdXBwb3J0IEFQSSB0ZXN0cwotICAgIGRvZXNfbm90X3N1cHBvcnRfYXBpX3Rlc3RzID0g
Wydpb3MtZGV2aWNlJ10KLSAgICBpZiBwb3J0Lm9wZXJhdGluZ19zeXN0ZW0oKSBpbiBkb2VzX25v
dF9zdXBwb3J0X2FwaV90ZXN0czoKLSAgICAgICAgcHJpbnQoJ3t9IGNhbm5vdCBydW4gQVBJIHRl
c3RzJy5mb3JtYXQocG9ydC5vcGVyYXRpbmdfc3lzdGVtKCkpLCBmaWxlPXN0ZGVycikKLSAgICAg
ICAgcmV0dXJuIEVYQ0VQVElPTkFMX0VYSVRfU1RBVFVTCi0KLSAgICB0cnk6Ci0gICAgICAgIHJl
dHVybiBydW4ocG9ydCwgb3B0aW9ucywgYXJncywgc3RkZXJyKQotICAgIGV4Y2VwdCBLZXlib2Fy
ZEludGVycnVwdDoKLSAgICAgICAgcmV0dXJuIElOVEVSUlVQVF9FWElUX1NUQVRVUwotICAgIGV4
Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoZSwgRXhjZXB0
aW9uKToKLSAgICAgICAgICAgIHByaW50KCdcbiVzIHJhaXNlZDogJXMnICUgKGUuX19jbGFzc19f
Ll9fbmFtZV9fLCBzdHIoZSkpLCBmaWxlPXN0ZGVycikKLSAgICAgICAgICAgIHRyYWNlYmFjay5w
cmludF9leGMoZmlsZT1zdGRlcnIpCi0gICAgICAgIHJldHVybiBFWENFUFRJT05BTF9FWElUX1NU
QVRVUwotCi0KLWRlZiBydW4ocG9ydCwgb3B0aW9ucywgYXJncywgbG9nZ2luZ19zdHJlYW0pOgot
ICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKLSAgICBsb2dnZXIuc2V0TGV2ZWwobG9n
Z2luZy5ERUJVRyBpZiBvcHRpb25zLnZlcmJvc2UgZWxzZSBsb2dnaW5nLkVSUk9SIGlmIG9wdGlv
bnMucXVpZXQgZWxzZSBsb2dnaW5nLklORk8pCi0KLSAgICB0cnk6Ci0gICAgICAgIHN0cmVhbSA9
IE1ldGVyZWRTdHJlYW0obG9nZ2luZ19zdHJlYW0sIG9wdGlvbnMudmVyYm9zZSwgbG9nZ2VyPWxv
Z2dlciwgbnVtYmVyX29mX2NvbHVtbnM9cG9ydC5ob3N0LnBsYXRmb3JtLnRlcm1pbmFsX3dpZHRo
KCksIHByaW50X3RpbWVzdGFtcHM9b3B0aW9ucy50aW1lc3RhbXBzKQotICAgICAgICBtYW5hZ2Vy
ID0gTWFuYWdlcihwb3J0LCBvcHRpb25zLCBzdHJlYW0pCi0KLSAgICAgICAgcmVzdWx0ID0gbWFu
YWdlci5ydW4oYXJncywganNvbl9vdXRwdXQ9b3B0aW9ucy5qc29uX291dHB1dCkKLSAgICAgICAg
X2xvZy5kZWJ1ZygiVGVzdGluZyBjb21wbGV0ZWQsIEV4aXQgc3RhdHVzOiAlZCIgJSByZXN1bHQp
Ci0gICAgICAgIHJldHVybiByZXN1bHQKLSAgICBmaW5hbGx5OgotICAgICAgICBzdHJlYW0uY2xl
YW51cCgpCi0KLQotZGVmIHBhcnNlX2FyZ3MoYXJncyk6Ci0gICAgb3B0aW9uX2dyb3VwX2RlZmlu
aXRpb25zID0gW10KLQotICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9ucy5hcHBlbmQoKCdQbGF0
Zm9ybSBvcHRpb25zJywgcGxhdGZvcm1fb3B0aW9ucygpKSkKLSAgICBvcHRpb25fZ3JvdXBfZGVm
aW5pdGlvbnMuYXBwZW5kKCgnQ29uZmlndXJhdGlvbiBvcHRpb25zJywgY29uZmlndXJhdGlvbl9v
cHRpb25zKCkpKQotICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9ucy5hcHBlbmQoKCdQcmludGlu
ZyBPcHRpb25zJywgWwotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLXEnLCAnLS1xdWll
dCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhlbHA9J1J1biBxdWlldGx5IChlcnJvcnMsIHdhcm5pbmdzLCBhbmQgcHJv
Z3Jlc3Mgb25seSknKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy12JywgJy0tdmVy
Ym9zZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9J0VuYWJsZSB2ZXJib3NlIHByaW50aW5nJyksCi0gICAgICAg
IG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXRpbWVzdGFtcHMnLCBhY3Rpb249J3N0b3JlX3RydWUn
LCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdQcmlu
dCB0aW1lc3RhbXBzIGZvciBlYWNoIGxvZ2dlZCBsaW5lJyksCi0gICAgICAgIG9wdHBhcnNlLm1h
a2Vfb3B0aW9uKCctLWpzb24tb3V0cHV0JywgYWN0aW9uPSdzdG9yZScsIGRlZmF1bHQ9Tm9uZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2F2ZSB0ZXN0IHJlc3VsdHMgYXMg
SlNPTiB0byBmaWxlJyksCi0gICAgXSkpCi0KLSAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnMu
YXBwZW5kKCgnV2ViS2l0IE9wdGlvbnMnLCBbCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9u
KCctZycsICctLWd1YXJkLW1hbGxvYycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFs
c2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0VuYWJsZSBHdWFyZCBNYWxs
b2MgKE9TIFggb25seSknKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tcm9vdCcs
IGFjdGlvbj0nc3RvcmUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdQYXRo
IHRvIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGV4ZWN1dGFibGVzIG5lZWRlZCB0byBydW4g
dGVzdHMuJyksCi0gICAgXSkpCi0KLSAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnMuYXBwZW5k
KCgnVGVzdGluZyBPcHRpb25zJywgWwotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS13
dGYtb25seScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0nVGVzdFdURicsIGRlc3Q9J2Fw
aV9iaW5hcnknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdPbmx5IGJ1aWxk
LCBjaGVjayBhbmQgcnVuIFRlc3RXVEYnKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24o
Jy0td2Via2l0LW9ubHknLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J1Rlc3RXZWJLaXRB
UEknLCBkZXN0PSdhcGlfYmluYXJ5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0nT25seSBjaGVjayBhbmQgcnVuIFRlc3RXZWJLaXRBUEknKSwKLSAgICAgICAgb3B0cGFyc2Uu
bWFrZV9vcHRpb24oJy0td2ViLWNvcmUtb25seScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25z
dD0nVGVzdFdlYkNvcmUnLCBkZXN0PSdhcGlfYmluYXJ5JywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVscD0nT25seSBjaGVjayBhbmQgcnVuIFRlc3RXZWJDb3JlLmV4ZSAoV2luZG93
cyBvbmx5KScpLAotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS13ZWJraXQtbGVnYWN5
LW9ubHknLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J1Rlc3RXZWJLaXRMZWdhY3knLCBk
ZXN0PSdhcGlfYmluYXJ5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nT25s
eSBjaGVjayBhbmQgcnVuIFRlc3RXZWJLaXRMZWdhY3kuZXhlIChXaW5kb3dzIG9ubHkpJyksCi0g
ICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctZCcsICctLWR1bXAnLCBhY3Rpb249J3N0b3Jl
X3RydWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSdEdW1wIGFsbCB0ZXN0IG5hbWVzIHdpdGhvdXQgcnVubmluZyB0aGVtJyksCi0gICAgICAgIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkJywgZGVzdD0nYnVpbGQnLCBhY3Rpb249J3N0b3Jl
X3RydWUnLCBkZWZhdWx0PVRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
J0NoZWNrIHRvIGVuc3VyZSB0aGUgYnVpbGQgaXMgdXAtdG8tZGF0ZSAoZGVmYXVsdCkuJyksCi0g
ICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLW5vLWJ1aWxkJywgZGVzdD0nYnVpbGQnLCBh
Y3Rpb249J3N0b3JlX2ZhbHNlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0i
RG9uJ3QgY2hlY2sgdG8gc2VlIGlmIHRoZSBidWlsZCBpcyB1cC10by1kYXRlLiIpLAotICAgICAg
ICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS10aW1lb3V0JywgZGVmYXVsdD0zMCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGVscD0nTnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCBiZWZv
cmUgYSB0ZXN0IHRpbWVzIG91dCcpLAotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1u
by10aW1lb3V0JywgZGVzdD0ndGltZW91dCcsIGFjdGlvbj0nc3RvcmVfZmFsc2UnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdEaXNhYmxlIHRpbWVvdXRzIGZvciBhbGwgdGVz
dHMnKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0taXRlcmF0aW9ucycsIHR5cGU9
J2ludCcsIGRlZmF1bHQ9MSwgaGVscD0nTnVtYmVyIG9mIHRpbWVzIHRvIHJ1biB0aGUgc2V0IG9m
IHRlc3RzIChlLmcuIEFCQ0FCQ0FCQyknKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24o
Jy0tcmVwZWF0LWVhY2gnLCB0eXBlPSdpbnQnLCBkZWZhdWx0PTEsIGhlbHA9J051bWJlciBvZiB0
aW1lcyB0byBydW4gZWFjaCB0ZXN0IChlLmcuIEFBQUJCQkNDQyknKSwKLQotICAgICAgICAjIEZJ
WE1FOiBSZW1vdmUgdGhlIGRlZmF1bHQsIEFQSSB0ZXN0cyBzaG91bGQgYmUgbXVsdGlwcm9jZXNz
Ci0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWNoaWxkLXByb2Nlc3NlcycsIGRlZmF1
bHQ9MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nTnVtYmVyIG9mIHByb2Nl
c3NlcyB0byBydW4gaW4gcGFyYWxsZWwuJyksCi0KLSAgICAgICAgIyBGSVhNRTogRGVmYXVsdCBz
aG91bGQgYmUgZmFsc2UsIEFQSSB0ZXN0cyBzaG91bGQgbm90IGJlIGZvcmNlZCB0byBydW4gc2lu
Z2x5Ci0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXJ1bi1zaW5nbHknLCBhY3Rpb249
J3N0b3JlX3RydWUnLCBkZWZhdWx0PVRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlbHA9J1J1biBhIHNlcGFyYXRlIHByb2Nlc3MgZm9yIGVhY2ggdGVzdCcpLAotCi0gICAgICAg
IG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWZvcmNlJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVm
YXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUnVuIGFsbCB0
ZXN0cywgZXZlbiBESVNBQkxFRCB0ZXN0cycpLAotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlv
bignLS1hZGRpdGlvbmFsLWVudi12YXInLCB0eXBlPSdzdHJpbmcnLCBhY3Rpb249J2FwcGVuZCcs
IGRlZmF1bHQ9W10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1Bhc3NlcyB0
aGF0IGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSB0ZXN0cyAoLS1hZGRpdGlvbmFsLWVudi12
YXI9TkFNRT1WQUxVRSknKSwKLSAgICBdKSkKLSAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnMu
YXBwZW5kKCgnVXBsb2FkIE9wdGlvbnMnLCB1cGxvYWRfb3B0aW9ucygpKSkKLQotICAgIG9wdGlv
bl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoCi0gICAgICAgIHVzYWdlPSdydW4tYXBp
LXRlc3RzIFtvcHRpb25zXSBbPHRlc3QgbmFtZXM+Li4uXScsCi0gICAgICAgIGRlc2NyaXB0aW9u
PSIiIkJ5IGRlZmF1bHQsIHJ1bi1hcGktdGVzdHMgd2lsbCBydW4gYWxsIEFQSSB0ZXN0cy4gSXQg
YWxzbyBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB0ZXN0cyBvZiB0aGUgXAotZm9ybWF0IDxz
dWl0ZT4uPHRlc3Q+IG9yIDxjYW5vbmljYWxpemVkIGJpbmFyeSBuYW1lPi48c3VpdGU+Ljx0ZXN0
Pi4gTm90ZSB0aGF0IGluIHRoZSBjYXNlIHdoZXJlIGEgYmluYXJ5IGlzIG5vdCBcCi1zcGVjaWZp
ZWQsIG9uZSB3aWxsIGJlIGluZmVycmVkIGJ5IGxpc3RpbmcgYWxsIGF2YWlsYWJsZSB0ZXN0cy4g
U3BlY2lmeWluZyBqdXN0IGEgYmluYXJ5IG9yIGp1c3QgYSBzdWl0ZSB3aWxsIGNhdXNlIGV2ZXJ5
IFwKLXRlc3QgY29udGFpbmVkIHdpdGhpbiB0byBiZSBydW4uIFRoZSBjYW5vbmljYWxpemVkIGJp
bmFyeSBuYW1lIGlzIHRoZSBiaW5hcnkgbmFtZSB3aXRoIGFueSBmaWxlbmFtZSBleHRlbnNpb24g
XAotc3RyaXBwZWQuIEZvciBVbml4IHBvcnRzLCB0aGVzZSBiaW5hcmllcyBhcmUge30gYW5kIHt9
LiBGb3IgV2luZG93cyBwb3J0cywgdGhleSBhcmUge30gYW5kIHt9LiIiIi5mb3JtYXQoCi0gICAg
ICAgICAgICAnLCAnLmpvaW4oYmFzZS5Qb3J0LkFQSV9URVNUX0JJTkFSWV9OQU1FU1s6LTFdKSwg
YmFzZS5Qb3J0LkFQSV9URVNUX0JJTkFSWV9OQU1FU1stMV0sCi0gICAgICAgICAgICAnLCAnLmpv
aW4od2luLldpblBvcnQuQVBJX1RFU1RfQklOQVJZX05BTUVTWzotMV0pLCB3aW4uV2luUG9ydC5B
UElfVEVTVF9CSU5BUllfTkFNRVNbLTFdLAotICAgICkpCi0KLSAgICBmb3IgZ3JvdXBfbmFtZSwg
Z3JvdXBfb3B0aW9ucyBpbiBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnM6Ci0gICAgICAgIG9wdGlv
bl9ncm91cCA9IG9wdHBhcnNlLk9wdGlvbkdyb3VwKG9wdGlvbl9wYXJzZXIsIGdyb3VwX25hbWUp
Ci0gICAgICAgIG9wdGlvbl9ncm91cC5hZGRfb3B0aW9ucyhncm91cF9vcHRpb25zKQotICAgICAg
ICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAob3B0aW9uX2dyb3VwKQotCi0gICAgcmV0
dXJuIG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncyhhcmdzKQotCi0KLWlmIF9fbmFtZV9fID09ICdf
X21haW5fXyc6Ci0gICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0sIHN5cy5zdGRvdXQsIHN5
cy5zdGRlcnIpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9hcGlfdGVzdHMvcnVubmVy
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvYXBpX3Rlc3RzL3J1bm5l
ci5weQkocmV2aXNpb24gMjc2OTU3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9hcGlfdGVz
dHMvcnVubmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMp
IDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDEzMSArMjUsMzUgQEAgaW1wb3J0IGxvZ2dpbmcKIGltcG9y
dCB0aW1lCiAKIGZyb20gd2Via2l0Y29yZXB5IGltcG9ydCBzdHJpbmdfdXRpbHMKK2Zyb20gd2Vi
a2l0Y29yZXB5IGltcG9ydCBUYXNrUG9vbAogCi1mcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQg
bWVzc2FnZV9wb29sCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5pdGVyYXRpb25fY29tcGF0aWJpbGl0
eSBpbXBvcnQgaXRlcml0ZW1zCiBmcm9tIHdlYmtpdHB5LnBvcnQuc2VydmVyX3Byb2Nlc3MgaW1w
b3J0IFNlcnZlclByb2Nlc3MsIF9sb2cgYXMgc2VydmVyX3Byb2Nlc3NfbG9nZ2VyCiBmcm9tIHdl
YmtpdHB5Lnhjb2RlLnNpbXVsYXRlZF9kZXZpY2UgaW1wb3J0IFNpbXVsYXRlZERldmljZU1hbmFn
ZXIKIAorX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCi1jbGFzcyBSdW5uZXIo
b2JqZWN0KToKLSAgICBTVEFUVVNfUEFTU0VEID0gMAotICAgIFNUQVRVU19GQUlMRUQgPSAxCi0g
ICAgU1RBVFVTX0NSQVNIRUQgPSAyCi0gICAgU1RBVFVTX1RJTUVPVVQgPSAzCi0gICAgU1RBVFVT
X0RJU0FCTEVEID0gNAotICAgIFNUQVRVU19SVU5OSU5HID0gNQotCi0gICAgTkFNRV9GT1JfU1RB
VFVTID0gWwotICAgICAgICAnUGFzc2VkJywKLSAgICAgICAgJ0ZhaWxlZCcsCi0gICAgICAgICdD
cmFzaGVkJywKLSAgICAgICAgJ1RpbWVvdXQnLAotICAgICAgICAnRGlzYWJsZWQnLAotICAgIF0K
LQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBwcmludGVyKToKLSAgICAgICAgc2VsZi5w
b3J0ID0gcG9ydAotICAgICAgICBzZWxmLnByaW50ZXIgPSBwcmludGVyCi0gICAgICAgIHNlbGYu
dGVzdHNfcnVuID0gMAotICAgICAgICBzZWxmLl9udW1fd29ya2VycyA9IDEKLSAgICAgICAgc2Vs
Zi5faGFzX2xvZ2dlZF9mb3JfdGVzdCA9IFRydWUgICMgU3VwcHJlc3MgYW4gZW1wdHkgbGluZSBi
ZXR3ZWVuICJSdW5uaW5nIHRlc3RzIiBhbmQgdGhlIGZpcnN0IHRlc3QncyBvdXRwdXQuCi0gICAg
ICAgIHNlbGYucmVzdWx0cyA9IHt9Ci0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9zaGFy
ZF90ZXN0cyh0ZXN0cyk6Ci0gICAgICAgIHNoYXJkcyA9IHt9Ci0gICAgICAgIGZvciB0ZXN0IGlu
IHRlc3RzOgotICAgICAgICAgICAgc2hhcmRfcHJlZml4ID0gJy4nLmpvaW4odGVzdC5zcGxpdCgn
LicpWzotMV0pCi0gICAgICAgICAgICBpZiBzaGFyZF9wcmVmaXggbm90IGluIHNoYXJkczoKLSAg
ICAgICAgICAgICAgICBzaGFyZHNbc2hhcmRfcHJlZml4XSA9IFtdCi0gICAgICAgICAgICBzaGFy
ZHNbc2hhcmRfcHJlZml4XS5hcHBlbmQodGVzdCkKLSAgICAgICAgcmV0dXJuIHNoYXJkcwogCi0g
ICAgIyBGSVhNRSBBUEkgdGVzdHMgc2hvdWxkIHJ1biBhcyBhbiBhcHAsIHdlIHdvbid0IG5lZWQg
dGhpcyBmdW5jdGlvbiA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NTIwND4KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNvbW1hbmRfZm9yX3BvcnQocG9ydCwg
YXJncyk6Ci0gICAgICAgIGlmIChwb3J0LmdldF9vcHRpb24oJ2ZvcmNlJykpOgotICAgICAgICAg
ICAgYXJncy5hcHBlbmQoJy0tZ3Rlc3RfYWxzb19ydW5fZGlzYWJsZWRfdGVzdHM9MScpCi0gICAg
ICAgIGlmICdzaW11bGF0b3InIGluIHBvcnQucG9ydF9uYW1lOgotICAgICAgICAgICAgYXNzZXJ0
IFNpbXVsYXRlZERldmljZU1hbmFnZXIuSU5JVElBTElaRURfREVWSUNFUwotICAgICAgICAgICAg
cmV0dXJuIFsnL3Vzci9iaW4veGNydW4nLCAnc2ltY3RsJywgJ3NwYXduJywgU2ltdWxhdGVkRGV2
aWNlTWFuYWdlci5JTklUSUFMSVpFRF9ERVZJQ0VTWzBdLnVkaWRdICsgYXJncwotICAgICAgICBl
bGlmICdkZXZpY2UnIGluIHBvcnQucG9ydF9uYW1lOgotICAgICAgICAgICAgcmFpc2UgUnVudGlt
ZUVycm9yKCdSdW5uaW5nIGFwaSB0ZXN0cyBvbiB7fSBpcyBub3Qgc3VwcG9ydGVkJy5mb3JtYXQo
cG9ydC5wb3J0X25hbWUpKQotICAgICAgICBlbGlmIHBvcnQuaG9zdC5wbGF0Zm9ybS5pc193aW4o
KToKLSAgICAgICAgICAgIGFyZ3NbMF0gPSBvcy5wYXRoLnNwbGl0ZXh0KGFyZ3NbMF0pWzBdICsg
Jy5leGUnCi0gICAgICAgIHJldHVybiBhcmdzCi0KLSAgICBkZWYgcnVuKHNlbGYsIHRlc3RzLCBu
dW1fd29ya2Vycyk6Ci0gICAgICAgIGlmIG5vdCB0ZXN0czoKLSAgICAgICAgICAgIHJldHVybgot
Ci0gICAgICAgIHNlbGYucHJpbnRlci53cml0ZV91cGRhdGUoJ1NoYXJkaW5nIHRlc3RzIC4uLicp
Ci0gICAgICAgIHNoYXJkcyA9IFJ1bm5lci5fc2hhcmRfdGVzdHModGVzdHMpCi0KLSAgICAgICAg
b3JpZ2luYWxfbGV2ZWwgPSBzZXJ2ZXJfcHJvY2Vzc19sb2dnZXIubGV2ZWwKLSAgICAgICAgc2Vy
dmVyX3Byb2Nlc3NfbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuQ1JJVElDQUwpCi0KLSAgICAgICAg
dHJ5OgotICAgICAgICAgICAgc2VsZi5fbnVtX3dvcmtlcnMgPSBtaW4obnVtX3dvcmtlcnMsIGxl
bihzaGFyZHMpKQotICAgICAgICAgICAgd2l0aCBtZXNzYWdlX3Bvb2wuZ2V0KHNlbGYsIGxhbWJk
YSBjYWxsZXI6IF9Xb3JrZXIoY2FsbGVyLCBzZWxmLnBvcnQsIHNoYXJkcyksIHNlbGYuX251bV93
b3JrZXJzKSBhcyBwb29sOgotICAgICAgICAgICAgICAgIHBvb2wucnVuKCgndGVzdCcsIHNoYXJk
KSBmb3Igc2hhcmQsIF8gaW4gaXRlcml0ZW1zKHNoYXJkcykpCi0gICAgICAgIGZpbmFsbHk6Ci0g
ICAgICAgICAgICBzZXJ2ZXJfcHJvY2Vzc19sb2dnZXIuc2V0TGV2ZWwob3JpZ2luYWxfbGV2ZWwp
Ci0KLQotICAgIGRlZiBoYW5kbGUoc2VsZiwgbWVzc2FnZV9uYW1lLCBzb3VyY2UsIHRlc3RfbmFt
ZT1Ob25lLCBzdGF0dXM9MCwgb3V0cHV0PScnKToKLSAgICAgICAgaWYgbWVzc2FnZV9uYW1lID09
ICdkaWRfc3Bhd25fd29ya2VyJzoKLSAgICAgICAgICAgIHJldHVybgorY2xhc3MgX1dvcmtlcihv
YmplY3QpOgorICAgIGluc3RhbmNlID0gTm9uZQogCi0gICAgICAgIHNvdXJjZSA9ICcnIGlmIHNl
bGYuX251bV93b3JrZXJzID09IDEgZWxzZSBzb3VyY2UgKyAnICcKLSAgICAgICAgd2lsbF9zdHJl
YW1fbG9ncyA9IHNlbGYuX251bV93b3JrZXJzID09IDEgYW5kIHNlbGYucG9ydC5nZXRfb3B0aW9u
KCd2ZXJib3NlJykKLSAgICAgICAgaWYgbWVzc2FnZV9uYW1lID09ICdlbmRlZF90ZXN0JzoKLSAg
ICAgICAgICAgIHVwZGF0ZSA9ICd7fXt9IHt9Jy5mb3JtYXQoc291cmNlLCB0ZXN0X25hbWUsIFJ1
bm5lci5OQU1FX0ZPUl9TVEFUVVNbc3RhdHVzXSkKLQotICAgICAgICAgICAgIyBEb24ndCBwcmlu
dCB0ZXN0IG91dHB1dCBpZiAtLXF1aWV0LgotICAgICAgICAgICAgaWYgc3RhdHVzICE9IFJ1bm5l
ci5TVEFUVVNfUEFTU0VEIG9yIChvdXRwdXQgYW5kIG5vdCBzZWxmLnBvcnQuZ2V0X29wdGlvbign
cXVpZXQnKSk6Ci0gICAgICAgICAgICAgICAgaWYgbm90IHdpbGxfc3RyZWFtX2xvZ3M6Ci0gICAg
ICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIG91dHB1dC5zcGxpdGxpbmVzKCk6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5faGFzX2xvZ2dlZF9mb3JfdGVzdDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYXNfbG9nZ2VkX2Zvcl90ZXN0ID0gVHJ1ZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJpbnRlci53cml0ZWxuKHNvdXJjZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJpbnRlci53cml0ZWxuKCd7fSAgICB7fScu
Zm9ybWF0KHNvdXJjZSwgbGluZSkpCi0gICAgICAgICAgICAgICAgc2VsZi5wcmludGVyLndyaXRl
bG4odXBkYXRlKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLnByaW50
ZXIud3JpdGVfdXBkYXRlKHVwZGF0ZSkKLSAgICAgICAgICAgIHNlbGYudGVzdHNfcnVuICs9IDEK
LSAgICAgICAgICAgIHNlbGYucmVzdWx0c1t0ZXN0X25hbWVdID0gKHN0YXR1cywgb3V0cHV0KQot
ICAgICAgICAgICAgc2VsZi5faGFzX2xvZ2dlZF9mb3JfdGVzdCA9IEZhbHNlCi0KLSAgICAgICAg
aWYgbWVzc2FnZV9uYW1lID09ICdsb2cnIGFuZCB3aWxsX3N0cmVhbV9sb2dzOgotICAgICAgICAg
ICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKToKLSAgICAgICAgICAgICAgICBpZiBu
b3Qgc2VsZi5faGFzX2xvZ2dlZF9mb3JfdGVzdDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5f
aGFzX2xvZ2dlZF9mb3JfdGVzdCA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmlu
dGVyLndyaXRlbG4oc291cmNlKQotICAgICAgICAgICAgICAgIHNlbGYucHJpbnRlci53cml0ZWxu
KCd7fSAgICB7fScuZm9ybWF0KHNvdXJjZSwgbGluZSkpCisgICAgQGNsYXNzbWV0aG9kCisgICAg
ZGVmIHNldHVwKGNscywgcG9ydD1Ob25lKToKKyAgICAgICAgY2xzLmluc3RhbmNlID0gY2xzKHBv
cnQpCiAKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhcmRvd24oY2xzKToKKyAgICAgICAg
Y2xzLmluc3RhbmNlID0gTm9uZQogCi0gICAgZGVmIHJlc3VsdF9tYXBfYnlfc3RhdHVzKHNlbGYs
IHN0YXR1cz1Ob25lKToKLSAgICAgICAgbWFwID0ge30KLSAgICAgICAgZm9yIHRlc3RfbmFtZSwg
cmVzdWx0IGluIGl0ZXJpdGVtcyhzZWxmLnJlc3VsdHMpOgotICAgICAgICAgICAgaWYgcmVzdWx0
WzBdID09IHN0YXR1czoKLSAgICAgICAgICAgICAgICBtYXBbdGVzdF9uYW1lXSA9IHJlc3VsdFsx
XQotICAgICAgICByZXR1cm4gbWFwCi0KLQotY2xhc3MgX1dvcmtlcihvYmplY3QpOgotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBjYWxsZXIsIHBvcnQsIHNoYXJkX21hcCk6Ci0gICAgICAgIHNlbGYu
X2NhbGxlciA9IGNhbGxlcgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0KToKICAgICAgICAg
c2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2VsZi5ob3N0ID0gcG9ydC5ob3N0Ci0gICAgICAg
IHNlbGYuX3NoYXJkX21hcCA9IHNoYXJkX21hcAogCiAgICAgICAgICMgU2VydmVyUHJvY2VzcyBk
b2Vzbid0IGFsbG93IGZvciBhIHRpbWVvdXQgb2YgJ05vbmUsJyB0aGlzIHVzZXMgYSB3ZWVrIGlu
c3RlYWQgb2YgTm9uZS4KICAgICAgICAgc2VsZi5fdGltZW91dCA9IGludChzZWxmLl9wb3J0Lmdl
dF9vcHRpb24oJ3RpbWVvdXQnKSkgaWYgc2VsZi5fcG9ydC5nZXRfb3B0aW9uKCd0aW1lb3V0Jykg
ZWxzZSA2MCAqIDI0ICogNwogCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfZmlsdGVyX25v
aXN5X291dHB1dChvdXRwdXQpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZmlsdGVyX25v
aXN5X291dHB1dChjbHMsIG91dHB1dCk6CiAgICAgICAgIHJlc3VsdCA9ICcnCiAgICAgICAgIGZv
ciBsaW5lIGluIG91dHB1dC5zcGxpdGxpbmVzKCk6CiAgICAgICAgICAgICBpZiBsaW5lLmxzdHJp
cCgpLnN0YXJ0c3dpdGgoJ29iamNbJyk6CkBAIC0xNjcsMTMgKzcxLDE0IEBAIGNsYXNzIF9Xb3Jr
ZXIob2JqZWN0KToKICAgICAgICAgaWYgdGVzdC5zcGxpdCgnLicpWzFdLnN0YXJ0c3dpdGgoJ0RJ
U0FCTEVEXycpIGFuZCBub3Qgc2VsZi5fcG9ydC5nZXRfb3B0aW9uKCdmb3JjZScpOgogICAgICAg
ICAgICAgc3RhdHVzID0gUnVubmVyLlNUQVRVU19ESVNBQkxFRAogCisgICAgICAgIHN0ZG91dF9i
dWZmZXIgPSAnJworICAgICAgICBzdGRlcnJfYnVmZmVyID0gJycKKwogICAgICAgICB0cnk6CiAg
ICAgICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgc2VsZi5fdGltZW91dAogICAgICAg
ICAgICAgaWYgc3RhdHVzICE9IFJ1bm5lci5TVEFUVVNfRElTQUJMRUQ6CiAgICAgICAgICAgICAg
ICAgc2VydmVyX3Byb2Nlc3Muc3RhcnQoKQogCi0gICAgICAgICAgICBzdGRvdXRfYnVmZmVyID0g
JycKLSAgICAgICAgICAgIHN0ZGVycl9idWZmZXIgPSAnJwogICAgICAgICAgICAgd2hpbGUgc3Rh
dHVzID09IFJ1bm5lci5TVEFUVVNfUlVOTklORzoKICAgICAgICAgICAgICAgICBzdGRvdXRfbGlu
ZSwgc3RkZXJyX2xpbmUgPSBzZXJ2ZXJfcHJvY2Vzcy5yZWFkX2VpdGhlcl9zdGRvdXRfb3Jfc3Rk
ZXJyX2xpbmUoZGVhZGxpbmUpCiAgICAgICAgICAgICAgICAgaWYgbm90IHN0ZGVycl9saW5lIGFu
ZCBub3Qgc3Rkb3V0X2xpbmU6CkBAIC0xODIsNyArODcsNyBAQCBjbGFzcyBfV29ya2VyKG9iamVj
dCk6CiAgICAgICAgICAgICAgICAgaWYgc3RkZXJyX2xpbmU6CiAgICAgICAgICAgICAgICAgICAg
IHN0ZGVycl9saW5lID0gc3RyaW5nX3V0aWxzLmRlY29kZShzdGRlcnJfbGluZSwgdGFyZ2V0X3R5
cGU9c3RyKQogICAgICAgICAgICAgICAgICAgICBzdGRlcnJfYnVmZmVyICs9IHN0ZGVycl9saW5l
Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYucG9zdCgnbG9nJywgb3V0cHV0PXN0ZGVycl9saW5l
WzotMV0pCisgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJyb3Ioc3RkZXJyX2xpbmVbOi0xXSkK
ICAgICAgICAgICAgICAgICBpZiBzdGRvdXRfbGluZToKICAgICAgICAgICAgICAgICAgICAgc3Rk
b3V0X2xpbmUgPSBzdHJpbmdfdXRpbHMuZGVjb2RlKHN0ZG91dF9saW5lLCB0YXJnZXRfdHlwZT1z
dHIpCiAgICAgICAgICAgICAgICAgICAgIGlmICcqKlBBU1MqKicgaW4gc3Rkb3V0X2xpbmU6CkBA
IC0xOTEsNyArOTYsNyBAQCBjbGFzcyBfV29ya2VyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0dXMgPSBSdW5uZXIuU1RBVFVTX0ZBSUxFRAogICAgICAgICAgICAgICAgICAg
ICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0X2J1ZmZlciArPSBzdGRvdXRf
bGluZQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wb3N0KCdsb2cnLCBvdXRwdXQ9c3Rk
b3V0X2xpbmVbOi0xXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJyb3Ioc3Rkb3V0
X2xpbmVbOi0xXSkKIAogICAgICAgICAgICAgaWYgc3RhdHVzID09IFJ1bm5lci5TVEFUVVNfRElT
QUJMRUQ6CiAgICAgICAgICAgICAgICAgcGFzcwpAQCAtMjA1LDIyICsxMTAsMzAgQEAgY2xhc3Mg
X1dvcmtlcihvYmplY3QpOgogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgcmVtYWluaW5n
X3N0ZGVyciA9IHN0cmluZ191dGlscy5kZWNvZGUoc2VydmVyX3Byb2Nlc3MucG9wX2FsbF9idWZm
ZXJlZF9zdGRlcnIoKSwgdGFyZ2V0X3R5cGU9c3RyKQogICAgICAgICAgICAgcmVtYWluaW5nX3N0
ZG91dCA9IHN0cmluZ191dGlscy5kZWNvZGUoc2VydmVyX3Byb2Nlc3MucG9wX2FsbF9idWZmZXJl
ZF9zdGRvdXQoKSwgdGFyZ2V0X3R5cGU9c3RyKQotICAgICAgICAgICAgc2VsZi5wb3N0KCdsb2cn
LCBvdXRwdXQ9cmVtYWluaW5nX3N0ZGVyciArIHJlbWFpbmluZ19zdGRvdXQpCisgICAgICAgICAg
ICBmb3IgbGluZSBpbiAocmVtYWluaW5nX3N0ZG91dCArIHJlbWFpbmluZ19zdGRlcnIpLnNwbGl0
bGluZXMoRmFsc2UpOgorICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IobGluZSkKICAgICAgICAg
ICAgIG91dHB1dF9idWZmZXIgPSBzdGRlcnJfYnVmZmVyICsgc3Rkb3V0X2J1ZmZlciArIHJlbWFp
bmluZ19zdGRlcnIgKyByZW1haW5pbmdfc3Rkb3V0CiAgICAgICAgICAgICBzZXJ2ZXJfcHJvY2Vz
cy5zdG9wKCkKIAotICAgICAgICBzZWxmLnBvc3QoJ2VuZGVkX3Rlc3QnLCAne30ue30nLmZvcm1h
dChiaW5hcnlfbmFtZSwgdGVzdCksIHN0YXR1cywgc2VsZi5fZmlsdGVyX25vaXN5X291dHB1dChv
dXRwdXRfYnVmZmVyKSkKLQotICAgIGRlZiBfcnVuX3NoYXJkX3dpdGhfYmluYXJ5KHNlbGYsIGJp
bmFyeV9uYW1lLCB0ZXN0cyk6Ci0gICAgICAgIHJlbWFpbmluZ190ZXN0cyA9IGxpc3QodGVzdHMp
CisgICAgICAgIFRhc2tQb29sLlByb2Nlc3MucXVldWUuc2VuZChUYXNrUG9vbC5UYXNrKAorICAg
ICAgICAgICAgcmVwb3J0X3Jlc3VsdCwgTm9uZSwgVGFza1Bvb2wuUHJvY2Vzcy5uYW1lLAorICAg
ICAgICAgICAgJ3t9Lnt9Jy5mb3JtYXQoYmluYXJ5X25hbWUsIHRlc3QpLAorICAgICAgICAgICAg
c3RhdHVzLAorICAgICAgICAgICAgc2VsZi5fZmlsdGVyX25vaXN5X291dHB1dChvdXRwdXRfYnVm
ZmVyKSwKKyAgICAgICAgKSkKKworICAgIGRlZiBydW4oc2VsZiwgbmFtZSwgKnRlc3RzKToKKyAg
ICAgICAgYmluYXJ5X25hbWUgPSBuYW1lLnNwbGl0KCcuJylbMF0KKyAgICAgICAgcmVtYWluaW5n
X3Rlc3RzID0gWycuJy5qb2luKHRlc3Quc3BsaXQoJy4nKVsxOl0pIGZvciB0ZXN0IGluIHRlc3Rz
XQogCiAgICAgICAgICMgVHJ5IHRvIHJ1biB0aGUgc2hhcmQgaW4gYSBzaW5nbGUgcHJvY2Vzcy4K
ICAgICAgICAgd2hpbGUgcmVtYWluaW5nX3Rlc3RzIGFuZCBub3Qgc2VsZi5fcG9ydC5nZXRfb3B0
aW9uKCdydW5fc2luZ2x5Jyk6CiAgICAgICAgICAgICBzdGFydGluZ19sZW5ndGggPSBsZW4ocmVt
YWluaW5nX3Rlc3RzKQogICAgICAgICAgICAgc2VydmVyX3Byb2Nlc3MgPSBTZXJ2ZXJQcm9jZXNz
KAogICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQsIGJpbmFyeV9uYW1lLAotICAgICAgICAgICAg
ICAgIFJ1bm5lci5jb21tYW5kX2Zvcl9wb3J0KHNlbGYuX3BvcnQsIFtzZWxmLl9wb3J0Ll9idWls
ZF9wYXRoKGJpbmFyeV9uYW1lKSwgJy0tZ3Rlc3RfZmlsdGVyPXt9Jy5mb3JtYXQoJzonLmpvaW4o
cmVtYWluaW5nX3Rlc3RzKSldKSwKLSAgICAgICAgICAgICAgICBlbnY9c2VsZi5fcG9ydC5lbnZp
cm9ubWVudF9mb3JfYXBpX3Rlc3RzKCkpCisgICAgICAgICAgICAgICAgUnVubmVyLmNvbW1hbmRf
Zm9yX3BvcnQoc2VsZi5fcG9ydCwgWworICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0Ll9i
dWlsZF9wYXRoKGJpbmFyeV9uYW1lKSwgJy0tZ3Rlc3RfZmlsdGVyPXt9Jy5mb3JtYXQoJzonLmpv
aW4ocmVtYWluaW5nX3Rlc3RzKSkKKyAgICAgICAgICAgICAgICBdKSwgZW52PXNlbGYuX3BvcnQu
ZW52aXJvbm1lbnRfZm9yX2FwaV90ZXN0cygpKQogCiAgICAgICAgICAgICB0cnk6CiAgICAgICAg
ICAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIHNlbGYuX3RpbWVvdXQKQEAgLTIzMCw3
ICsxNDMsNyBAQCBjbGFzcyBfV29ya2VyKG9iamVjdCk6CiAKICAgICAgICAgICAgICAgICBzZXJ2
ZXJfcHJvY2Vzcy5zdGFydCgpCiAgICAgICAgICAgICAgICAgd2hpbGUgcmVtYWluaW5nX3Rlc3Rz
OgotICAgICAgICAgICAgICAgICAgICBzdGRvdXQgPSBzZXJ2ZXJfcHJvY2Vzcy5yZWFkX3N0ZG91
dF9saW5lKGRlYWRsaW5lKQorICAgICAgICAgICAgICAgICAgICBzdGRvdXQgPSBzdHJpbmdfdXRp
bHMuZGVjb2RlKHNlcnZlcl9wcm9jZXNzLnJlYWRfc3Rkb3V0X2xpbmUoZGVhZGxpbmUpLCB0YXJn
ZXRfdHlwZT1zdHIpCiAKICAgICAgICAgICAgICAgICAgICAgIyBJZiB3ZSd2ZSB0cmlnZ2VyZWQg
YSB0aW1lb3V0LCB3ZSBkb24ndCBrbm93IHdoaWNoIHRlc3QgY2F1c2VkIGl0LiBCcmVhayBvdXQg
YW5kIHJ1biBzaW5nbHkuCiAgICAgICAgICAgICAgICAgICAgIGlmIHN0ZG91dCBpcyBOb25lIGFu
ZCBzZXJ2ZXJfcHJvY2Vzcy50aW1lZF9vdXQ6CkBAIC0yNTEsNyArMTY0LDE0IEBAIGNsYXNzIF9X
b3JrZXIob2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAg
ICAgICAgICAgICAgIGlmIGxhc3RfdGVzdCBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlbWFpbmluZ190ZXN0cy5yZW1vdmUobGFzdF90ZXN0KQotICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5wb3N0KCdlbmRlZF90ZXN0JywgJ3t9Lnt9Jy5mb3JtYXQoYmluYXJ5X25h
bWUsIGxhc3RfdGVzdCksIGxhc3Rfc3RhdHVzLCBzdGRvdXRfYnVmZmVyKQorCisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzdGRvdXRfYnVmZmVyLnNwbGl0bGluZXMoRmFsc2Up
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IobGluZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFRhc2tQb29sLlByb2Nlc3MucXVldWUuc2VuZChUYXNrUG9vbC5UYXNr
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydF9yZXN1bHQsIE5vbmUsIFRhc2tQ
b29sLlByb2Nlc3MubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAne30ue30nLmZv
cm1hdChiaW5hcnlfbmFtZSwgbGFzdF90ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsYXN0X3N0YXR1cywgc3Rkb3V0X2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICkp
CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgc2VsZi5f
dGltZW91dAogICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0X2J1ZmZlciA9ICcnCiAKQEAg
LTI2NCwxMCArMTg0LDE3IEBAIGNsYXNzIF9Xb3JrZXIob2JqZWN0KToKICAgICAgICAgICAgICAg
ICAjIFdlIGFzc3VtZSB0aGF0IHN0ZGVyciBpcyBvbmx5IHJlbGV2YW50IGlmIHRoZXJlIGlzIGEg
Y3Jhc2ggKG1lYW5pbmcgd2UgdHJpZ2dlcmVkIGFuIGFzc2VydCkKICAgICAgICAgICAgICAgICBp
ZiBsYXN0X3Rlc3Q6CiAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ190ZXN0cy5yZW1vdmUo
bGFzdF90ZXN0KQotICAgICAgICAgICAgICAgICAgICBzdGRvdXRfYnVmZmVyICs9IHNlcnZlcl9w
cm9jZXNzLnBvcF9hbGxfYnVmZmVyZWRfc3Rkb3V0KCkKLSAgICAgICAgICAgICAgICAgICAgc3Rk
ZXJyX2J1ZmZlciA9IHNlcnZlcl9wcm9jZXNzLnBvcF9hbGxfYnVmZmVyZWRfc3RkZXJyKCkgaWYg
bGFzdF9zdGF0dXMgPT0gUnVubmVyLlNUQVRVU19DUkFTSEVEIGVsc2UgJycKLSAgICAgICAgICAg
ICAgICAgICAgc2VsZi5wb3N0KCdsb2cnLCBvdXRwdXQ9c3Rkb3V0X2J1ZmZlciArIHN0ZGVycl9i
dWZmZXIpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYucG9zdCgnZW5kZWRfdGVzdCcsICd7fS57
fScuZm9ybWF0KGJpbmFyeV9uYW1lLCBsYXN0X3Rlc3QpLCBsYXN0X3N0YXR1cywgc2VsZi5fZmls
dGVyX25vaXN5X291dHB1dChzdGRvdXRfYnVmZmVyICsgc3RkZXJyX2J1ZmZlcikpCisgICAgICAg
ICAgICAgICAgICAgIHN0ZG91dF9idWZmZXIgKz0gc3RyaW5nX3V0aWxzLmRlY29kZShzZXJ2ZXJf
cHJvY2Vzcy5wb3BfYWxsX2J1ZmZlcmVkX3N0ZG91dCgpLCB0YXJnZXRfdHlwZT1zdHIpCisgICAg
ICAgICAgICAgICAgICAgIHN0ZGVycl9idWZmZXIgPSBzdHJpbmdfdXRpbHMuZGVjb2RlKHNlcnZl
cl9wcm9jZXNzLnBvcF9hbGxfYnVmZmVyZWRfc3RkZXJyKCksIHRhcmdldF90eXBlPXN0cikgaWYg
bGFzdF9zdGF0dXMgPT0gUnVubmVyLlNUQVRVU19DUkFTSEVEIGVsc2UgJycKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIGxpbmUgaW4gKHN0ZG91dF9idWZmZXIgKyBzdGRlcnJfYnVmZmVyKS5zcGxp
dGxpbmVzKGtlZXBlbmRzPUZhbHNlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJy
b3IobGluZSkKKworICAgICAgICAgICAgICAgICAgICBUYXNrUG9vbC5Qcm9jZXNzLnF1ZXVlLnNl
bmQoVGFza1Bvb2wuVGFzaygKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydF9yZXN1bHQs
IE5vbmUsIFRhc2tQb29sLlByb2Nlc3MubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICd7
fS57fScuZm9ybWF0KGJpbmFyeV9uYW1lLCBsYXN0X3Rlc3QpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgbGFzdF9zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWx0ZXJf
bm9pc3lfb3V0cHV0KHN0ZG91dF9idWZmZXIgKyBzdGRlcnJfYnVmZmVyKSwKKyAgICAgICAgICAg
ICAgICAgICAgKSkKIAogICAgICAgICAgICAgICAgIGlmIHNlcnZlcl9wcm9jZXNzLnRpbWVkX291
dDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKQEAgLTI4MiwxOCArMjA5LDEwNyBAQCBjbGFz
cyBfV29ya2VyKG9iamVjdCk6CiAgICAgICAgIGZvciB0ZXN0IGluIHJlbWFpbmluZ190ZXN0czoK
ICAgICAgICAgICAgIHNlbGYuX3J1bl9zaW5nbGVfdGVzdChiaW5hcnlfbmFtZSwgdGVzdCkKIAot
ICAgIGRlZiBwb3N0KHNlbGYsIG1lc3NhZ2VfbmFtZSwgdGVzdF9uYW1lPU5vbmUsIHN0YXR1cz0w
LCBvdXRwdXQ9JycpOgotICAgICAgICBzZWxmLl9jYWxsZXIucG9zdChtZXNzYWdlX25hbWUsIHRl
c3RfbmFtZSwgc3RhdHVzLCBvdXRwdXQpCiAKLSAgICBkZWYgaGFuZGxlKHNlbGYsIG1lc3NhZ2Vf
bmFtZSwgc291cmNlLCBzaGFyZF9uYW1lKToKLSAgICAgICAgYXNzZXJ0IG1lc3NhZ2VfbmFtZSA9
PSAndGVzdCcKLSAgICAgICAgc2VsZi5wb3N0KCdzdGFydGVkX3NoYXJkJywgc2hhcmRfbmFtZSkK
LQotICAgICAgICBiaW5hcnlfbWFwID0ge30KLSAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi5fc2hh
cmRfbWFwW3NoYXJkX25hbWVdOgotICAgICAgICAgICAgc3BsaXRfdGVzdF9uYW1lID0gdGVzdC5z
cGxpdCgnLicpCi0gICAgICAgICAgICBpZiBzcGxpdF90ZXN0X25hbWVbMF0gbm90IGluIGJpbmFy
eV9tYXA6Ci0gICAgICAgICAgICAgICAgYmluYXJ5X21hcFtzcGxpdF90ZXN0X25hbWVbMF1dID0g
W10KLSAgICAgICAgICAgIGJpbmFyeV9tYXBbc3BsaXRfdGVzdF9uYW1lWzBdXS5hcHBlbmQoJy4n
LmpvaW4oc3BsaXRfdGVzdF9uYW1lWzE6XSkpCi0gICAgICAgIGZvciBiaW5hcnlfbmFtZSwgdGVz
dF9saXN0IGluIGJpbmFyeV9tYXAuaXRlbXMoKToKLSAgICAgICAgICAgIHNlbGYuX3J1bl9zaGFy
ZF93aXRoX2JpbmFyeShiaW5hcnlfbmFtZSwgdGVzdF9saXN0KQorZGVmIHNldHVwX3NoYXJkKHBv
cnQ9Tm9uZSk6CisgICAgcmV0dXJuIF9Xb3JrZXIuc2V0dXAocG9ydD1wb3J0KQorCisKK2RlZiBy
dW5fc2hhcmQobmFtZSwgKnRlc3RzKToKKyAgICByZXR1cm4gX1dvcmtlci5pbnN0YW5jZS5ydW4o
bmFtZSwgKnRlc3RzKQorCisKK2RlZiByZXBvcnRfcmVzdWx0KHdvcmtlciwgdGVzdCwgc3RhdHVz
LCBvdXRwdXQpOgorICAgIGlmIHN0YXR1cyA9PSBSdW5uZXIuU1RBVFVTX1BBU1NFRCBhbmQgbm90
IG91dHB1dCBhbmQgUnVubmVyLmluc3RhbmNlLnBvcnQuZ2V0X29wdGlvbigncXVpZXQnKToKKyAg
ICAgICAgUnVubmVyLmluc3RhbmNlLnByaW50ZXIud3JpdGVfdXBkYXRlKCd7fSB7fSB7fScuZm9y
bWF0KHdvcmtlciwgdGVzdCwgUnVubmVyLk5BTUVfRk9SX1NUQVRVU1tzdGF0dXNdKSkKKyAgICBl
bHNlOgorICAgICAgICBSdW5uZXIuaW5zdGFuY2UucHJpbnRlci53cml0ZV91cGRhdGUoJ3t9IHt9
IHt9Jy5mb3JtYXQod29ya2VyLCB0ZXN0LCBSdW5uZXIuTkFNRV9GT1JfU1RBVFVTW3N0YXR1c10p
KQorICAgIFJ1bm5lci5pbnN0YW5jZS5yZXN1bHRzW3Rlc3RdID0gc3RhdHVzLCBvdXRwdXQKKwor
CitkZWYgdGVhcmRvd25fc2hhcmQoKToKKyAgICByZXR1cm4gX1dvcmtlci50ZWFyZG93bigpCisK
KworY2xhc3MgUnVubmVyKG9iamVjdCk6CisgICAgU1RBVFVTX1BBU1NFRCA9IDAKKyAgICBTVEFU
VVNfRkFJTEVEID0gMQorICAgIFNUQVRVU19DUkFTSEVEID0gMgorICAgIFNUQVRVU19USU1FT1VU
ID0gMworICAgIFNUQVRVU19ESVNBQkxFRCA9IDQKKyAgICBTVEFUVVNfUlVOTklORyA9IDUKKwor
ICAgIE5BTUVfRk9SX1NUQVRVUyA9IFsKKyAgICAgICAgJ1Bhc3NlZCcsCisgICAgICAgICdGYWls
ZWQnLAorICAgICAgICAnQ3Jhc2hlZCcsCisgICAgICAgICdUaW1lb3V0JywKKyAgICAgICAgJ0Rp
c2FibGVkJywKKyAgICBdCisKKyAgICBpbnN0YW5jZSA9IE5vbmUKKworICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBwb3J0LCBwcmludGVyKToKKyAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorICAgICAg
ICBzZWxmLnByaW50ZXIgPSBwcmludGVyCisgICAgICAgIHNlbGYudGVzdHNfcnVuID0gMAorICAg
ICAgICBzZWxmLl9udW1fd29ya2VycyA9IDEKKyAgICAgICAgc2VsZi5faGFzX2xvZ2dlZF9mb3Jf
dGVzdCA9IFRydWUgICMgU3VwcHJlc3MgYW4gZW1wdHkgbGluZSBiZXR3ZWVuICJSdW5uaW5nIHRl
c3RzIiBhbmQgdGhlIGZpcnN0IHRlc3QncyBvdXRwdXQuCisgICAgICAgIHNlbGYucmVzdWx0cyA9
IHt9CisKKyAgICAjIEZJWE1FIEFQSSB0ZXN0cyBzaG91bGQgcnVuIGFzIGFuIGFwcCwgd2Ugd29u
J3QgbmVlZCB0aGlzIGZ1bmN0aW9uIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc1MjA0PgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY29tbWFuZF9mb3JfcG9y
dChwb3J0LCBhcmdzKToKKyAgICAgICAgaWYgKHBvcnQuZ2V0X29wdGlvbignZm9yY2UnKSk6Cisg
ICAgICAgICAgICBhcmdzLmFwcGVuZCgnLS1ndGVzdF9hbHNvX3J1bl9kaXNhYmxlZF90ZXN0cz0x
JykKKyAgICAgICAgaWYgJ3NpbXVsYXRvcicgaW4gcG9ydC5wb3J0X25hbWU6CisgICAgICAgICAg
ICBhc3NlcnQgU2ltdWxhdGVkRGV2aWNlTWFuYWdlci5JTklUSUFMSVpFRF9ERVZJQ0VTCisgICAg
ICAgICAgICByZXR1cm4gWycvdXNyL2Jpbi94Y3J1bicsICdzaW1jdGwnLCAnc3Bhd24nLCBTaW11
bGF0ZWREZXZpY2VNYW5hZ2VyLklOSVRJQUxJWkVEX0RFVklDRVNbMF0udWRpZF0gKyBhcmdzCisg
ICAgICAgIGVsaWYgJ2RldmljZScgaW4gcG9ydC5wb3J0X25hbWU6CisgICAgICAgICAgICByYWlz
ZSBSdW50aW1lRXJyb3IoJ1J1bm5pbmcgYXBpIHRlc3RzIG9uIHt9IGlzIG5vdCBzdXBwb3J0ZWQn
LmZvcm1hdChwb3J0LnBvcnRfbmFtZSkpCisgICAgICAgIGVsaWYgcG9ydC5ob3N0LnBsYXRmb3Jt
LmlzX3dpbigpOgorICAgICAgICAgICAgYXJnc1swXSA9IG9zLnBhdGguc3BsaXRleHQoYXJnc1sw
XSlbMF0gKyAnLmV4ZScKKyAgICAgICAgcmV0dXJuIGFyZ3MKKworICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgX3NoYXJkX3Rlc3RzKHRlc3RzKToKKyAgICAgICAgc2hhcmRzID0ge30KKyAgICAg
ICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICBzaGFyZF9wcmVmaXggPSAnLicuam9p
bih0ZXN0LnNwbGl0KCcuJylbOi0xXSkKKyAgICAgICAgICAgIGlmIHNoYXJkX3ByZWZpeCBub3Qg
aW4gc2hhcmRzOgorICAgICAgICAgICAgICAgIHNoYXJkc1tzaGFyZF9wcmVmaXhdID0gW10KKyAg
ICAgICAgICAgIHNoYXJkc1tzaGFyZF9wcmVmaXhdLmFwcGVuZCh0ZXN0KQorICAgICAgICByZXR1
cm4gc2hhcmRzCisKKyAgICBkZWYgcnVuKHNlbGYsIHRlc3RzLCBudW1fd29ya2Vycyk6CisgICAg
ICAgIGlmIG5vdCB0ZXN0czoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYucHJp
bnRlci53cml0ZV91cGRhdGUoJ1NoYXJkaW5nIHRlc3RzIC4uLicpCisgICAgICAgIHNoYXJkcyA9
IFJ1bm5lci5fc2hhcmRfdGVzdHModGVzdHMpCisKKyAgICAgICAgb3JpZ2luYWxfbGV2ZWwgPSBz
ZXJ2ZXJfcHJvY2Vzc19sb2dnZXIubGV2ZWwKKyAgICAgICAgc2VydmVyX3Byb2Nlc3NfbG9nZ2Vy
LnNldExldmVsKGxvZ2dpbmcuQ1JJVElDQUwpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
UnVubmVyLmluc3RhbmNlID0gc2VsZgorICAgICAgICAgICAgc2VsZi5fbnVtX3dvcmtlcnMgPSBt
aW4obnVtX3dvcmtlcnMsIGxlbihzaGFyZHMpKQorCisgICAgICAgICAgICB3aXRoIFRhc2tQb29s
KAorICAgICAgICAgICAgICAgIHdvcmtlcnM9c2VsZi5fbnVtX3dvcmtlcnMsCisgICAgICAgICAg
ICAgICAgc2V0dXA9c2V0dXBfc2hhcmQsIHNldHVwa3dhcmdzPWRpY3QocG9ydD1zZWxmLnBvcnQp
LAorICAgICAgICAgICAgICAgIHRlYXJkb3duPXRlYXJkb3duX3NoYXJkLAorICAgICAgICAgICAg
KSBhcyBwb29sOgorICAgICAgICAgICAgICAgIGZvciBuYW1lLCB0ZXN0cyBpbiBpdGVyaXRlbXMo
c2hhcmRzKToKKyAgICAgICAgICAgICAgICAgICAgcG9vbC5kbyhydW5fc2hhcmQsIG5hbWUsICp0
ZXN0cykKKyAgICAgICAgICAgICAgICBwb29sLndhaXQoKQorCisgICAgICAgIGZpbmFsbHk6Cisg
ICAgICAgICAgICBzZXJ2ZXJfcHJvY2Vzc19sb2dnZXIuc2V0TGV2ZWwob3JpZ2luYWxfbGV2ZWwp
CisgICAgICAgICAgICBSdW5uZXIuaW5zdGFuY2UgPSBOb25lCisKKyAgICBkZWYgcmVzdWx0X21h
cF9ieV9zdGF0dXMoc2VsZiwgc3RhdHVzPU5vbmUpOgorICAgICAgICBtYXAgPSB7fQorICAgICAg
ICBmb3IgdGVzdF9uYW1lLCByZXN1bHQgaW4gaXRlcml0ZW1zKHNlbGYucmVzdWx0cyk6CisgICAg
ICAgICAgICBpZiByZXN1bHRbMF0gPT0gc3RhdHVzOgorICAgICAgICAgICAgICAgIG1hcFt0ZXN0
X25hbWVdID0gcmVzdWx0WzFdCisgICAgICAgIHJldHVybiBtYXAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427768</attachid>
            <date>2021-05-05 08:46:45 -0700</date>
            <delta_ts>2021-05-05 10:53:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225221-20210505084644.patch</filename>
            <type>text/plain</type>
            <size>36100</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3NzAyMCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM2IEBACisyMDIxLTA1LTA1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbcnVuLWFwaS10ZXN0c10gVXNlIHdlYmtpdGNvcmVweSdzIFRhc2tQb29s
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUyMjEK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc3MzUyNDY1PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tYXBpLXRlc3RzOiBNb3Zl
ZCBmcm9tIHdlYmtpdHB5L2FwaV90ZXN0cy9ydW5fYXBpX3Rlc3RzLnB5LgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvYXBpX3Rlc3RzL3J1bl9hcGlfdGVzdHMucHk6IE1vdmVkIHRvIHJ1bi1h
cGktdGVzdHMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9hcGlfdGVzdHMvcnVubmVyLnB5
OgorICAgICAgICAoX1dvcmtlcik6IFJlcHJlc2VudGF0aW9uIG9mIFdvcmtlciBwcm9jZXNzLgor
ICAgICAgICAoX1dvcmtlci5zZXR1cCk6IFBhc3MgcG9ydCBvYmplY3QgdG8gd29ya2VyIHByb2Nl
c3MuCisgICAgICAgIChfV29ya2VyLnNldHVwKTogUGFzcyBwb3J0IG9iamVjdCB0byB3b3JrZXIg
cHJvY2Vzcy4KKyAgICAgICAgKF9Xb3JrZXIudGVhcmRvd24pOiBVbi1zZXQgcG9ydCBvYmplY3Qg
b24gd29ya2VyIHByb2Nlc3MuCisgICAgICAgIChfV29ya2VyLl9faW5pdF9fKTogQ29uc3RydWN0
IG9iamVjdCB0byBob2xkIGEgV29ya2VyIHByb2Nlc3MncyB2YXJpYWJsZXMuCisgICAgICAgIChf
V29ya2VyLl9ydW5fc2luZ2xlX3Rlc3QpOiBMb2cgdGVzdCByZXN1bHRzLCBwb3N0IHJlc3VsdHMg
dG8gcGFyZW50LgorICAgICAgICAoX1dvcmtlci5ydW4pOiBSdW4gc2hhcmQgd2l0aCBhbmQgcG9z
dCByZXN1bHRzIHRvIHBhcmVudCBwcm9jZXNzLgorICAgICAgICAoc2V0dXBfc2hhcmQpOiBSdW4g
c2V0dXAgaW4gV29ya2VyIHByb2Nlc3MuCisgICAgICAgIChydW5fc2hhcmQpOiBSdW4gdGVzdCBz
aGFyZCBpbiBXb3JrZXIgcHJvY2Vzcy4KKyAgICAgICAgKHJlcG9ydF9yZXN1bHQpOiBSZWNlaXZl
IHJlc3VsdCBpbiB0aGUgcGFyZW50IHByb2Nlc3MuCisgICAgICAgICgodGVhcmRvd25fc2hhcmQp
OiBUZWFyIGRvd24gV29ya2VyIHByb2Nlc3MuCisgICAgICAgIChSdW5uZXIuX19pbml0X18pOgor
ICAgICAgICAoUnVubmVyLmNvbW1hbmRfZm9yX3BvcnQpOgorICAgICAgICAoUnVubmVyLl9zaGFy
ZF90ZXN0cyk6IFNwbGl0IHRlc3RzIGludG8gc2hhcmRzIHRvIGJlIGVmZmljaWVudGx5IHJ1bi4K
KyAgICAgICAgKFJ1bm5lci5ydW4pOiBVc2UgVGFza1Bvb2wgdG8gcnVuIHRlc3RzIGluIHN1YiBw
cm9jZXNzZXMuCisgICAgICAgIChSdW5uZXIuY2FsbGJhY2spOiBTYXZlIHJlc3VsdHMgaW4gcGFy
ZW50IHByb2Nlc3MuCisgICAgICAgIChSdW5uZXIucmVzdWx0X21hcF9ieV9zdGF0dXMpOgorICAg
ICAgICAoUnVubmVyLmhhbmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChfV29ya2VyLl9ydW5fc2hh
cmRfd2l0aF9iaW5hcnkpOiBEZWxldGVkLgorICAgICAgICAoX1dvcmtlci5wb3N0KTogRGVsZXRl
ZC4KKyAgICAgICAgKF9Xb3JrZXIuaGFuZGxlKTogRGVsZXRlZC4KKwogMjAyMS0wNS0wNSAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVy
dGluZyByMjc2OTg1LgpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4tYXBpLXRlc3RzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvcnVuLWFwaS10ZXN0cwkocmV2aXNpb24gMjc3MDIwKQorKysg
VG9vbHMvU2NyaXB0cy9ydW4tYXBpLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAKLSMgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yMiw3ICsyMiwxNDUgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKICMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLSIiIldy
YXBwZXIgYXJvdW5kIHdlYmtpdHB5L2FwaV90ZXN0cy9ydW5fYXBpX3Rlc3RzLnB5IiIiCi1mcm9t
IHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nX2Jvb3RzdHJhcAorZnJvbSBf
X2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBv
cHRwYXJzZQoraW1wb3J0IHN5cworaW1wb3J0IHRyYWNlYmFjawogCi1tdWx0aXByb2Nlc3Npbmdf
Ym9vdHN0cmFwLnJ1bignd2Via2l0cHknLCAnYXBpX3Rlc3RzJywgJ3J1bl9hcGlfdGVzdHMucHkn
KQorZnJvbSB3ZWJraXRweS5hcGlfdGVzdHMubWFuYWdlciBpbXBvcnQgTWFuYWdlcgorZnJvbSB3
ZWJraXRweS5jb21tb24uaG9zdCBpbXBvcnQgSG9zdAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMudmlld3MubWV0ZXJlZF9zdHJlYW0gaW1wb3J0IE1ldGVyZWRTdHJlYW0KK2Zyb20gd2Via2l0
cHkucG9ydCBpbXBvcnQgY29uZmlndXJhdGlvbl9vcHRpb25zLCBwbGF0Zm9ybV9vcHRpb25zLCBi
YXNlLCB3aW4KK2Zyb20gd2Via2l0cHkucmVzdWx0cy5vcHRpb25zIGltcG9ydCB1cGxvYWRfb3B0
aW9ucworCitFWENFUFRJT05BTF9FWElUX1NUQVRVUyA9IC0xCitJTlRFUlJVUFRfRVhJVF9TVEFU
VVMgPSAtMgorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworZGVmIG1h
aW4oYXJndiwgc3Rkb3V0LCBzdGRlcnIpOgorICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZV9hcmdz
KGFyZ3YpCisgICAgaG9zdCA9IEhvc3QoKQorCisgICAgdHJ5OgorICAgICAgICBvcHRpb25zLndl
YmtpdF90ZXN0X3J1bm5lciA9IFRydWUKKyAgICAgICAgcG9ydCA9IGhvc3QucG9ydF9mYWN0b3J5
LmdldChvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zKQorICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRl
ZEVycm9yIGFzIGU6CisgICAgICAgIHByaW50KHN0cihlKSwgZmlsZT1zdGRlcnIpCisgICAgICAg
IHJldHVybiBFWENFUFRJT05BTF9FWElUX1NUQVRVUworCisgICAgIyBTb21lIHBsYXRmb3JtcyBk
byBub3Qgc3VwcG9ydCBBUEkgdGVzdHMKKyAgICBkb2VzX25vdF9zdXBwb3J0X2FwaV90ZXN0cyA9
IFsnaW9zLWRldmljZSddCisgICAgaWYgcG9ydC5vcGVyYXRpbmdfc3lzdGVtKCkgaW4gZG9lc19u
b3Rfc3VwcG9ydF9hcGlfdGVzdHM6CisgICAgICAgIHByaW50KCd7fSBjYW5ub3QgcnVuIEFQSSB0
ZXN0cycuZm9ybWF0KHBvcnQub3BlcmF0aW5nX3N5c3RlbSgpKSwgZmlsZT1zdGRlcnIpCisgICAg
ICAgIHJldHVybiBFWENFUFRJT05BTF9FWElUX1NUQVRVUworCisgICAgdHJ5OgorICAgICAgICBy
ZXR1cm4gcnVuKHBvcnQsIG9wdGlvbnMsIGFyZ3MsIHN0ZGVycikKKyAgICBleGNlcHQgS2V5Ym9h
cmRJbnRlcnJ1cHQ6CisgICAgICAgIHJldHVybiBJTlRFUlJVUFRfRVhJVF9TVEFUVVMKKyAgICBl
eGNlcHQgQmFzZUV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBpZiBpc2luc3RhbmNlKGUsIEV4Y2Vw
dGlvbik6CisgICAgICAgICAgICBwcmludCgnXG4lcyByYWlzZWQ6ICVzJyAlIChlLl9fY2xhc3Nf
Xy5fX25hbWVfXywgc3RyKGUpKSwgZmlsZT1zdGRlcnIpCisgICAgICAgICAgICB0cmFjZWJhY2su
cHJpbnRfZXhjKGZpbGU9c3RkZXJyKQorICAgICAgICByZXR1cm4gRVhDRVBUSU9OQUxfRVhJVF9T
VEFUVVMKKworCitkZWYgcnVuKHBvcnQsIG9wdGlvbnMsIGFyZ3MsIGxvZ2dpbmdfc3RyZWFtKToK
KyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgbG9nZ2VyLnNldExldmVsKGxv
Z2dpbmcuREVCVUcgaWYgb3B0aW9ucy52ZXJib3NlIGVsc2UgbG9nZ2luZy5FUlJPUiBpZiBvcHRp
b25zLnF1aWV0IGVsc2UgbG9nZ2luZy5JTkZPKQorCisgICAgdHJ5OgorICAgICAgICBzdHJlYW0g
PSBNZXRlcmVkU3RyZWFtKGxvZ2dpbmdfc3RyZWFtLCBvcHRpb25zLnZlcmJvc2UsIGxvZ2dlcj1s
b2dnZXIsIG51bWJlcl9vZl9jb2x1bW5zPXBvcnQuaG9zdC5wbGF0Zm9ybS50ZXJtaW5hbF93aWR0
aCgpLCBwcmludF90aW1lc3RhbXBzPW9wdGlvbnMudGltZXN0YW1wcykKKyAgICAgICAgbWFuYWdl
ciA9IE1hbmFnZXIocG9ydCwgb3B0aW9ucywgc3RyZWFtKQorCisgICAgICAgIHJlc3VsdCA9IG1h
bmFnZXIucnVuKGFyZ3MsIGpzb25fb3V0cHV0PW9wdGlvbnMuanNvbl9vdXRwdXQpCisgICAgICAg
IF9sb2cuZGVidWcoIlRlc3RpbmcgY29tcGxldGVkLCBFeGl0IHN0YXR1czogJWQiICUgcmVzdWx0
KQorICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgZmluYWxseToKKyAgICAgICAgc3RyZWFtLmNs
ZWFudXAoKQorCisKK2RlZiBwYXJzZV9hcmdzKGFyZ3MpOgorICAgIG9wdGlvbl9ncm91cF9kZWZp
bml0aW9ucyA9IFtdCisKKyAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnMuYXBwZW5kKCgnUGxh
dGZvcm0gb3B0aW9ucycsIHBsYXRmb3JtX29wdGlvbnMoKSkpCisgICAgb3B0aW9uX2dyb3VwX2Rl
ZmluaXRpb25zLmFwcGVuZCgoJ0NvbmZpZ3VyYXRpb24gb3B0aW9ucycsIGNvbmZpZ3VyYXRpb25f
b3B0aW9ucygpKSkKKyAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnMuYXBwZW5kKCgnUHJpbnRp
bmcgT3B0aW9ucycsIFsKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy1xJywgJy0tcXVp
ZXQnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWxwPSdSdW4gcXVpZXRseSAoZXJyb3JzLCB3YXJuaW5ncywgYW5kIHBy
b2dyZXNzIG9ubHkpJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctdicsICctLXZl
cmJvc2UnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWxwPSdFbmFibGUgdmVyYm9zZSBwcmludGluZycpLAorICAgICAg
ICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS10aW1lc3RhbXBzJywgYWN0aW9uPSdzdG9yZV90cnVl
JywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUHJp
bnQgdGltZXN0YW1wcyBmb3IgZWFjaCBsb2dnZWQgbGluZScpLAorICAgICAgICBvcHRwYXJzZS5t
YWtlX29wdGlvbignLS1qc29uLW91dHB1dCcsIGFjdGlvbj0nc3RvcmUnLCBkZWZhdWx0PU5vbmUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NhdmUgdGVzdCByZXN1bHRzIGFz
IEpTT04gdG8gZmlsZScpLAorICAgIF0pKQorCisgICAgb3B0aW9uX2dyb3VwX2RlZmluaXRpb25z
LmFwcGVuZCgoJ1dlYktpdCBPcHRpb25zJywgWworICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlv
bignLWcnLCAnLS1ndWFyZC1tYWxsb2MnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZh
bHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdFbmFibGUgR3VhcmQgTWFs
bG9jIChPUyBYIG9ubHkpJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXJvb3Qn
LCBhY3Rpb249J3N0b3JlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUGF0
aCB0byBhIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBleGVjdXRhYmxlcyBuZWVkZWQgdG8gcnVu
IHRlc3RzLicpLAorICAgIF0pKQorCisgICAgb3B0aW9uX2dyb3VwX2RlZmluaXRpb25zLmFwcGVu
ZCgoJ1Rlc3RpbmcgT3B0aW9ucycsIFsKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0t
d3RmLW9ubHknLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J1Rlc3RXVEYnLCBkZXN0PSdh
cGlfYmluYXJ5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nT25seSBidWls
ZCwgY2hlY2sgYW5kIHJ1biBUZXN0V1RGJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9u
KCctLXdlYmtpdC1vbmx5JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PSdUZXN0V2ViS2l0
QVBJJywgZGVzdD0nYXBpX2JpbmFyeScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl
bHA9J09ubHkgY2hlY2sgYW5kIHJ1biBUZXN0V2ViS2l0QVBJJyksCisgICAgICAgIG9wdHBhcnNl
Lm1ha2Vfb3B0aW9uKCctLXdlYi1jb3JlLW9ubHknLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29u
c3Q9J1Rlc3RXZWJDb3JlJywgZGVzdD0nYXBpX2JpbmFyeScsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9J09ubHkgY2hlY2sgYW5kIHJ1biBUZXN0V2ViQ29yZS5leGUgKFdpbmRv
d3Mgb25seSknKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0td2Via2l0LWxlZ2Fj
eS1vbmx5JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PSdUZXN0V2ViS2l0TGVnYWN5Jywg
ZGVzdD0nYXBpX2JpbmFyeScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J09u
bHkgY2hlY2sgYW5kIHJ1biBUZXN0V2ViS2l0TGVnYWN5LmV4ZSAoV2luZG93cyBvbmx5KScpLAor
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLWQnLCAnLS1kdW1wJywgYWN0aW9uPSdzdG9y
ZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0nRHVtcCBhbGwgdGVzdCBuYW1lcyB3aXRob3V0IHJ1bm5pbmcgdGhlbScpLAorICAgICAgICBv
cHRwYXJzZS5tYWtlX29wdGlvbignLS1idWlsZCcsIGRlc3Q9J2J1aWxkJywgYWN0aW9uPSdzdG9y
ZV90cnVlJywgZGVmYXVsdD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSdDaGVjayB0byBlbnN1cmUgdGhlIGJ1aWxkIGlzIHVwLXRvLWRhdGUgKGRlZmF1bHQpLicpLAor
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1uby1idWlsZCcsIGRlc3Q9J2J1aWxkJywg
YWN0aW9uPSdzdG9yZV9mYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
IkRvbid0IGNoZWNrIHRvIHNlZSBpZiB0aGUgYnVpbGQgaXMgdXAtdG8tZGF0ZS4iKSwKKyAgICAg
ICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tdGltZW91dCcsIGRlZmF1bHQ9MzAsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J051bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgYmVm
b3JlIGEgdGVzdCB0aW1lcyBvdXQnKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0t
bm8tdGltZW91dCcsIGRlc3Q9J3RpbWVvdXQnLCBhY3Rpb249J3N0b3JlX2ZhbHNlJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRGlzYWJsZSB0aW1lb3V0cyBmb3IgYWxsIHRl
c3RzJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWl0ZXJhdGlvbnMnLCB0eXBl
PSdpbnQnLCBkZWZhdWx0PTEsIGhlbHA9J051bWJlciBvZiB0aW1lcyB0byBydW4gdGhlIHNldCBv
ZiB0ZXN0cyAoZS5nLiBBQkNBQkNBQkMpJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9u
KCctLXJlcGVhdC1lYWNoJywgdHlwZT0naW50JywgZGVmYXVsdD0xLCBoZWxwPSdOdW1iZXIgb2Yg
dGltZXMgdG8gcnVuIGVhY2ggdGVzdCAoZS5nLiBBQUFCQkJDQ0MpJyksCisKKyAgICAgICAgIyBG
SVhNRTogUmVtb3ZlIHRoZSBkZWZhdWx0LCBBUEkgdGVzdHMgc2hvdWxkIGJlIG11bHRpcHJvY2Vz
cworICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1jaGlsZC1wcm9jZXNzZXMnLCBkZWZh
dWx0PTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J051bWJlciBvZiBwcm9j
ZXNzZXMgdG8gcnVuIGluIHBhcmFsbGVsLicpLAorCisgICAgICAgICMgRklYTUU6IERlZmF1bHQg
c2hvdWxkIGJlIGZhbHNlLCBBUEkgdGVzdHMgc2hvdWxkIG5vdCBiZSBmb3JjZWQgdG8gcnVuIHNp
bmdseQorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1ydW4tc2luZ2x5JywgYWN0aW9u
PSdzdG9yZV90cnVlJywgZGVmYXVsdD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoZWxwPSdSdW4gYSBzZXBhcmF0ZSBwcm9jZXNzIGZvciBlYWNoIHRlc3QnKSwKKworICAgICAg
ICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1mb3JjZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRl
ZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1J1biBhbGwg
dGVzdHMsIGV2ZW4gRElTQUJMRUQgdGVzdHMnKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRp
b24oJy0tYWRkaXRpb25hbC1lbnYtdmFyJywgdHlwZT0nc3RyaW5nJywgYWN0aW9uPSdhcHBlbmQn
LCBkZWZhdWx0PVtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdQYXNzZXMg
dGhhdCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgdGVzdHMgKC0tYWRkaXRpb25hbC1lbnYt
dmFyPU5BTUU9VkFMVUUpJyksCisgICAgXSkpCisgICAgb3B0aW9uX2dyb3VwX2RlZmluaXRpb25z
LmFwcGVuZCgoJ1VwbG9hZCBPcHRpb25zJywgdXBsb2FkX29wdGlvbnMoKSkpCisKKyAgICBvcHRp
b25fcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgICAgICB1c2FnZT0ncnVuLWFw
aS10ZXN0cyBbb3B0aW9uc10gWzx0ZXN0IG5hbWVzPi4uLl0nLAorICAgICAgICBkZXNjcmlwdGlv
bj0iIiJCeSBkZWZhdWx0LCBydW4tYXBpLXRlc3RzIHdpbGwgcnVuIGFsbCBBUEkgdGVzdHMuIEl0
IGFsc28gYWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnkgdGVzdHMgb2YgdGhlIFwKK2Zvcm1hdCA8
c3VpdGU+Ljx0ZXN0PiBvciA8Y2Fub25pY2FsaXplZCBiaW5hcnkgbmFtZT4uPHN1aXRlPi48dGVz
dD4uIE5vdGUgdGhhdCBpbiB0aGUgY2FzZSB3aGVyZSBhIGJpbmFyeSBpcyBub3QgXAorc3BlY2lm
aWVkLCBvbmUgd2lsbCBiZSBpbmZlcnJlZCBieSBsaXN0aW5nIGFsbCBhdmFpbGFibGUgdGVzdHMu
IFNwZWNpZnlpbmcganVzdCBhIGJpbmFyeSBvciBqdXN0IGEgc3VpdGUgd2lsbCBjYXVzZSBldmVy
eSBcCit0ZXN0IGNvbnRhaW5lZCB3aXRoaW4gdG8gYmUgcnVuLiBUaGUgY2Fub25pY2FsaXplZCBi
aW5hcnkgbmFtZSBpcyB0aGUgYmluYXJ5IG5hbWUgd2l0aCBhbnkgZmlsZW5hbWUgZXh0ZW5zaW9u
IFwKK3N0cmlwcGVkLiBGb3IgVW5peCBwb3J0cywgdGhlc2UgYmluYXJpZXMgYXJlIHt9IGFuZCB7
fS4gRm9yIFdpbmRvd3MgcG9ydHMsIHRoZXkgYXJlIHt9IGFuZCB7fS4iIiIuZm9ybWF0KAorICAg
ICAgICAgICAgJywgJy5qb2luKGJhc2UuUG9ydC5BUElfVEVTVF9CSU5BUllfTkFNRVNbOi0xXSks
IGJhc2UuUG9ydC5BUElfVEVTVF9CSU5BUllfTkFNRVNbLTFdLAorICAgICAgICAgICAgJywgJy5q
b2luKHdpbi5XaW5Qb3J0LkFQSV9URVNUX0JJTkFSWV9OQU1FU1s6LTFdKSwgd2luLldpblBvcnQu
QVBJX1RFU1RfQklOQVJZX05BTUVTWy0xXSwKKyAgICApKQorCisgICAgZm9yIGdyb3VwX25hbWUs
IGdyb3VwX29wdGlvbnMgaW4gb3B0aW9uX2dyb3VwX2RlZmluaXRpb25zOgorICAgICAgICBvcHRp
b25fZ3JvdXAgPSBvcHRwYXJzZS5PcHRpb25Hcm91cChvcHRpb25fcGFyc2VyLCBncm91cF9uYW1l
KQorICAgICAgICBvcHRpb25fZ3JvdXAuYWRkX29wdGlvbnMoZ3JvdXBfb3B0aW9ucykKKyAgICAg
ICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uX2dyb3VwKG9wdGlvbl9ncm91cCkKKworICAgIHJl
dHVybiBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworCitpZiBfX25hbWVfXyA9PSAn
X19tYWluX18nOgorICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3ZbMTpdLCBzeXMuc3Rkb3V0LCBz
eXMuc3RkZXJyKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvYXBpX3Rlc3RzL3J1bl9h
cGlfdGVzdHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9hcGlfdGVz
dHMvcnVuX2FwaV90ZXN0cy5weQkocmV2aXNpb24gMjc3MDIwKQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9hcGlfdGVzdHMvcnVuX2FwaV90ZXN0cy5weQkobm9uZXhpc3RlbnQpCkBAIC0xLDE2
NCArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0jIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSMgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSMg
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWZyb20gX19m
dXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3B0
cGFyc2UKLWltcG9ydCBzeXMKLWltcG9ydCB0cmFjZWJhY2sKLQotZnJvbSB3ZWJraXRweS5hcGlf
dGVzdHMubWFuYWdlciBpbXBvcnQgTWFuYWdlcgotZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdCBp
bXBvcnQgSG9zdAotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudmlld3MubWV0ZXJlZF9zdHJl
YW0gaW1wb3J0IE1ldGVyZWRTdHJlYW0KLWZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgY29uZmln
dXJhdGlvbl9vcHRpb25zLCBwbGF0Zm9ybV9vcHRpb25zLCBiYXNlLCB3aW4KLWZyb20gd2Via2l0
cHkucmVzdWx0cy5vcHRpb25zIGltcG9ydCB1cGxvYWRfb3B0aW9ucwotCi1FWENFUFRJT05BTF9F
WElUX1NUQVRVUyA9IC0xCi1JTlRFUlJVUFRfRVhJVF9TVEFUVVMgPSAtMgotCi1fbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLQotZGVmIG1haW4oYXJndiwgc3Rkb3V0LCBzdGRl
cnIpOgotICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZV9hcmdzKGFyZ3YpCi0gICAgaG9zdCA9IEhv
c3QoKQotCi0gICAgdHJ5OgotICAgICAgICBvcHRpb25zLndlYmtpdF90ZXN0X3J1bm5lciA9IFRy
dWUKLSAgICAgICAgcG9ydCA9IGhvc3QucG9ydF9mYWN0b3J5LmdldChvcHRpb25zLnBsYXRmb3Jt
LCBvcHRpb25zKQotICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yIGFzIGU6Ci0gICAgICAg
IHByaW50KHN0cihlKSwgZmlsZT1zdGRlcnIpCi0gICAgICAgIHJldHVybiBFWENFUFRJT05BTF9F
WElUX1NUQVRVUwotCi0gICAgIyBTb21lIHBsYXRmb3JtcyBkbyBub3Qgc3VwcG9ydCBBUEkgdGVz
dHMKLSAgICBkb2VzX25vdF9zdXBwb3J0X2FwaV90ZXN0cyA9IFsnaW9zLWRldmljZSddCi0gICAg
aWYgcG9ydC5vcGVyYXRpbmdfc3lzdGVtKCkgaW4gZG9lc19ub3Rfc3VwcG9ydF9hcGlfdGVzdHM6
Ci0gICAgICAgIHByaW50KCd7fSBjYW5ub3QgcnVuIEFQSSB0ZXN0cycuZm9ybWF0KHBvcnQub3Bl
cmF0aW5nX3N5c3RlbSgpKSwgZmlsZT1zdGRlcnIpCi0gICAgICAgIHJldHVybiBFWENFUFRJT05B
TF9FWElUX1NUQVRVUwotCi0gICAgdHJ5OgotICAgICAgICByZXR1cm4gcnVuKHBvcnQsIG9wdGlv
bnMsIGFyZ3MsIHN0ZGVycikKLSAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAg
IHJldHVybiBJTlRFUlJVUFRfRVhJVF9TVEFUVVMKLSAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiBh
cyBlOgotICAgICAgICBpZiBpc2luc3RhbmNlKGUsIEV4Y2VwdGlvbik6Ci0gICAgICAgICAgICBw
cmludCgnXG4lcyByYWlzZWQ6ICVzJyAlIChlLl9fY2xhc3NfXy5fX25hbWVfXywgc3RyKGUpKSwg
ZmlsZT1zdGRlcnIpCi0gICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGZpbGU9c3RkZXJy
KQotICAgICAgICByZXR1cm4gRVhDRVBUSU9OQUxfRVhJVF9TVEFUVVMKLQotCi1kZWYgcnVuKHBv
cnQsIG9wdGlvbnMsIGFyZ3MsIGxvZ2dpbmdfc3RyZWFtKToKLSAgICBsb2dnZXIgPSBsb2dnaW5n
LmdldExvZ2dlcigpCi0gICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcgaWYgb3B0aW9u
cy52ZXJib3NlIGVsc2UgbG9nZ2luZy5FUlJPUiBpZiBvcHRpb25zLnF1aWV0IGVsc2UgbG9nZ2lu
Zy5JTkZPKQotCi0gICAgdHJ5OgotICAgICAgICBzdHJlYW0gPSBNZXRlcmVkU3RyZWFtKGxvZ2dp
bmdfc3RyZWFtLCBvcHRpb25zLnZlcmJvc2UsIGxvZ2dlcj1sb2dnZXIsIG51bWJlcl9vZl9jb2x1
bW5zPXBvcnQuaG9zdC5wbGF0Zm9ybS50ZXJtaW5hbF93aWR0aCgpLCBwcmludF90aW1lc3RhbXBz
PW9wdGlvbnMudGltZXN0YW1wcykKLSAgICAgICAgbWFuYWdlciA9IE1hbmFnZXIocG9ydCwgb3B0
aW9ucywgc3RyZWFtKQotCi0gICAgICAgIHJlc3VsdCA9IG1hbmFnZXIucnVuKGFyZ3MsIGpzb25f
b3V0cHV0PW9wdGlvbnMuanNvbl9vdXRwdXQpCi0gICAgICAgIF9sb2cuZGVidWcoIlRlc3Rpbmcg
Y29tcGxldGVkLCBFeGl0IHN0YXR1czogJWQiICUgcmVzdWx0KQotICAgICAgICByZXR1cm4gcmVz
dWx0Ci0gICAgZmluYWxseToKLSAgICAgICAgc3RyZWFtLmNsZWFudXAoKQotCi0KLWRlZiBwYXJz
ZV9hcmdzKGFyZ3MpOgotICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9ucyA9IFtdCi0KLSAgICBv
cHRpb25fZ3JvdXBfZGVmaW5pdGlvbnMuYXBwZW5kKCgnUGxhdGZvcm0gb3B0aW9ucycsIHBsYXRm
b3JtX29wdGlvbnMoKSkpCi0gICAgb3B0aW9uX2dyb3VwX2RlZmluaXRpb25zLmFwcGVuZCgoJ0Nv
bmZpZ3VyYXRpb24gb3B0aW9ucycsIGNvbmZpZ3VyYXRpb25fb3B0aW9ucygpKSkKLSAgICBvcHRp
b25fZ3JvdXBfZGVmaW5pdGlvbnMuYXBwZW5kKCgnUHJpbnRpbmcgT3B0aW9ucycsIFsKLSAgICAg
ICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy1xJywgJy0tcXVpZXQnLCBhY3Rpb249J3N0b3JlX3Ry
dWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdS
dW4gcXVpZXRseSAoZXJyb3JzLCB3YXJuaW5ncywgYW5kIHByb2dyZXNzIG9ubHkpJyksCi0gICAg
ICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctdicsICctLXZlcmJvc2UnLCBhY3Rpb249J3N0b3Jl
X3RydWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSdFbmFibGUgdmVyYm9zZSBwcmludGluZycpLAotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlv
bignLS10aW1lc3RhbXBzJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUHJpbnQgdGltZXN0YW1wcyBmb3IgZWFj
aCBsb2dnZWQgbGluZScpLAotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1qc29uLW91
dHB1dCcsIGFjdGlvbj0nc3RvcmUnLCBkZWZhdWx0PU5vbmUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9J1NhdmUgdGVzdCByZXN1bHRzIGFzIEpTT04gdG8gZmlsZScpLAotICAg
IF0pKQotCi0gICAgb3B0aW9uX2dyb3VwX2RlZmluaXRpb25zLmFwcGVuZCgoJ1dlYktpdCBPcHRp
b25zJywgWwotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLWcnLCAnLS1ndWFyZC1tYWxs
b2MnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWxwPSdFbmFibGUgR3VhcmQgTWFsbG9jIChPUyBYIG9ubHkpJyksCi0g
ICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXJvb3QnLCBhY3Rpb249J3N0b3JlJywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUGF0aCB0byBhIGRpcmVjdG9yeSBjb250
YWluaW5nIHRoZSBleGVjdXRhYmxlcyBuZWVkZWQgdG8gcnVuIHRlc3RzLicpLAotICAgIF0pKQot
Ci0gICAgb3B0aW9uX2dyb3VwX2RlZmluaXRpb25zLmFwcGVuZCgoJ1Rlc3RpbmcgT3B0aW9ucycs
IFsKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0td3RmLW9ubHknLCBhY3Rpb249J3N0
b3JlX2NvbnN0JywgY29uc3Q9J1Rlc3RXVEYnLCBkZXN0PSdhcGlfYmluYXJ5JywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGVscD0nT25seSBidWlsZCwgY2hlY2sgYW5kIHJ1biBUZXN0
V1RGJyksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXdlYmtpdC1vbmx5JywgYWN0
aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PSdUZXN0V2ViS2l0QVBJJywgZGVzdD0nYXBpX2JpbmFy
eScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J09ubHkgY2hlY2sgYW5kIHJ1
biBUZXN0V2ViS2l0QVBJJyksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXdlYi1j
b3JlLW9ubHknLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J1Rlc3RXZWJDb3JlJywgZGVz
dD0nYXBpX2JpbmFyeScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J09ubHkg
Y2hlY2sgYW5kIHJ1biBUZXN0V2ViQ29yZS5leGUgKFdpbmRvd3Mgb25seSknKSwKLSAgICAgICAg
b3B0cGFyc2UubWFrZV9vcHRpb24oJy0td2Via2l0LWxlZ2FjeS1vbmx5JywgYWN0aW9uPSdzdG9y
ZV9jb25zdCcsIGNvbnN0PSdUZXN0V2ViS2l0TGVnYWN5JywgZGVzdD0nYXBpX2JpbmFyeScsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J09ubHkgY2hlY2sgYW5kIHJ1biBUZXN0
V2ViS2l0TGVnYWN5LmV4ZSAoV2luZG93cyBvbmx5KScpLAotICAgICAgICBvcHRwYXJzZS5tYWtl
X29wdGlvbignLWQnLCAnLS1kdW1wJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxz
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRHVtcCBhbGwgdGVzdCBuYW1l
cyB3aXRob3V0IHJ1bm5pbmcgdGhlbScpLAotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbign
LS1idWlsZCcsIGRlc3Q9J2J1aWxkJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1UcnVl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdDaGVjayB0byBlbnN1cmUgdGhl
IGJ1aWxkIGlzIHVwLXRvLWRhdGUgKGRlZmF1bHQpLicpLAotICAgICAgICBvcHRwYXJzZS5tYWtl
X29wdGlvbignLS1uby1idWlsZCcsIGRlc3Q9J2J1aWxkJywgYWN0aW9uPSdzdG9yZV9mYWxzZScs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkRvbid0IGNoZWNrIHRvIHNlZSBp
ZiB0aGUgYnVpbGQgaXMgdXAtdG8tZGF0ZS4iKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRp
b24oJy0tdGltZW91dCcsIGRlZmF1bHQ9MzAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlbHA9J051bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGEgdGVzdCB0aW1lcyBvdXQn
KSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tbm8tdGltZW91dCcsIGRlc3Q9J3Rp
bWVvdXQnLCBhY3Rpb249J3N0b3JlX2ZhbHNlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVscD0nRGlzYWJsZSB0aW1lb3V0cyBmb3IgYWxsIHRlc3RzJyksCi0gICAgICAgIG9wdHBh
cnNlLm1ha2Vfb3B0aW9uKCctLWl0ZXJhdGlvbnMnLCB0eXBlPSdpbnQnLCBkZWZhdWx0PTEsIGhl
bHA9J051bWJlciBvZiB0aW1lcyB0byBydW4gdGhlIHNldCBvZiB0ZXN0cyAoZS5nLiBBQkNBQkNB
QkMpJyksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXJlcGVhdC1lYWNoJywgdHlw
ZT0naW50JywgZGVmYXVsdD0xLCBoZWxwPSdOdW1iZXIgb2YgdGltZXMgdG8gcnVuIGVhY2ggdGVz
dCAoZS5nLiBBQUFCQkJDQ0MpJyksCi0KLSAgICAgICAgIyBGSVhNRTogUmVtb3ZlIHRoZSBkZWZh
dWx0LCBBUEkgdGVzdHMgc2hvdWxkIGJlIG11bHRpcHJvY2VzcwotICAgICAgICBvcHRwYXJzZS5t
YWtlX29wdGlvbignLS1jaGlsZC1wcm9jZXNzZXMnLCBkZWZhdWx0PTEsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9J051bWJlciBvZiBwcm9jZXNzZXMgdG8gcnVuIGluIHBhcmFs
bGVsLicpLAotCi0gICAgICAgICMgRklYTUU6IERlZmF1bHQgc2hvdWxkIGJlIGZhbHNlLCBBUEkg
dGVzdHMgc2hvdWxkIG5vdCBiZSBmb3JjZWQgdG8gcnVuIHNpbmdseQotICAgICAgICBvcHRwYXJz
ZS5tYWtlX29wdGlvbignLS1ydW4tc2luZ2x5JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVs
dD1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdSdW4gYSBzZXBhcmF0
ZSBwcm9jZXNzIGZvciBlYWNoIHRlc3QnKSwKLQotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlv
bignLS1mb3JjZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1J1biBhbGwgdGVzdHMsIGV2ZW4gRElTQUJMRUQg
dGVzdHMnKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tYWRkaXRpb25hbC1lbnYt
dmFyJywgdHlwZT0nc3RyaW5nJywgYWN0aW9uPSdhcHBlbmQnLCBkZWZhdWx0PVtdLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdQYXNzZXMgdGhhdCBlbnZpcm9ubWVudCB2YXJp
YWJsZSB0byB0aGUgdGVzdHMgKC0tYWRkaXRpb25hbC1lbnYtdmFyPU5BTUU9VkFMVUUpJyksCi0g
ICAgXSkpCi0gICAgb3B0aW9uX2dyb3VwX2RlZmluaXRpb25zLmFwcGVuZCgoJ1VwbG9hZCBPcHRp
b25zJywgdXBsb2FkX29wdGlvbnMoKSkpCi0KLSAgICBvcHRpb25fcGFyc2VyID0gb3B0cGFyc2Uu
T3B0aW9uUGFyc2VyKAotICAgICAgICB1c2FnZT0ncnVuLWFwaS10ZXN0cyBbb3B0aW9uc10gWzx0
ZXN0IG5hbWVzPi4uLl0nLAotICAgICAgICBkZXNjcmlwdGlvbj0iIiJCeSBkZWZhdWx0LCBydW4t
YXBpLXRlc3RzIHdpbGwgcnVuIGFsbCBBUEkgdGVzdHMuIEl0IGFsc28gYWxsb3dzIHRoZSB1c2Vy
IHRvIHNwZWNpZnkgdGVzdHMgb2YgdGhlIFwKLWZvcm1hdCA8c3VpdGU+Ljx0ZXN0PiBvciA8Y2Fu
b25pY2FsaXplZCBiaW5hcnkgbmFtZT4uPHN1aXRlPi48dGVzdD4uIE5vdGUgdGhhdCBpbiB0aGUg
Y2FzZSB3aGVyZSBhIGJpbmFyeSBpcyBub3QgXAotc3BlY2lmaWVkLCBvbmUgd2lsbCBiZSBpbmZl
cnJlZCBieSBsaXN0aW5nIGFsbCBhdmFpbGFibGUgdGVzdHMuIFNwZWNpZnlpbmcganVzdCBhIGJp
bmFyeSBvciBqdXN0IGEgc3VpdGUgd2lsbCBjYXVzZSBldmVyeSBcCi10ZXN0IGNvbnRhaW5lZCB3
aXRoaW4gdG8gYmUgcnVuLiBUaGUgY2Fub25pY2FsaXplZCBiaW5hcnkgbmFtZSBpcyB0aGUgYmlu
YXJ5IG5hbWUgd2l0aCBhbnkgZmlsZW5hbWUgZXh0ZW5zaW9uIFwKLXN0cmlwcGVkLiBGb3IgVW5p
eCBwb3J0cywgdGhlc2UgYmluYXJpZXMgYXJlIHt9IGFuZCB7fS4gRm9yIFdpbmRvd3MgcG9ydHMs
IHRoZXkgYXJlIHt9IGFuZCB7fS4iIiIuZm9ybWF0KAotICAgICAgICAgICAgJywgJy5qb2luKGJh
c2UuUG9ydC5BUElfVEVTVF9CSU5BUllfTkFNRVNbOi0xXSksIGJhc2UuUG9ydC5BUElfVEVTVF9C
SU5BUllfTkFNRVNbLTFdLAotICAgICAgICAgICAgJywgJy5qb2luKHdpbi5XaW5Qb3J0LkFQSV9U
RVNUX0JJTkFSWV9OQU1FU1s6LTFdKSwgd2luLldpblBvcnQuQVBJX1RFU1RfQklOQVJZX05BTUVT
Wy0xXSwKLSAgICApKQotCi0gICAgZm9yIGdyb3VwX25hbWUsIGdyb3VwX29wdGlvbnMgaW4gb3B0
aW9uX2dyb3VwX2RlZmluaXRpb25zOgotICAgICAgICBvcHRpb25fZ3JvdXAgPSBvcHRwYXJzZS5P
cHRpb25Hcm91cChvcHRpb25fcGFyc2VyLCBncm91cF9uYW1lKQotICAgICAgICBvcHRpb25fZ3Jv
dXAuYWRkX29wdGlvbnMoZ3JvdXBfb3B0aW9ucykKLSAgICAgICAgb3B0aW9uX3BhcnNlci5hZGRf
b3B0aW9uX2dyb3VwKG9wdGlvbl9ncm91cCkKLQotICAgIHJldHVybiBvcHRpb25fcGFyc2VyLnBh
cnNlX2FyZ3MoYXJncykKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHN5cy5l
eGl0KG1haW4oc3lzLmFyZ3ZbMTpdLCBzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyKSkKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvYXBpX3Rlc3RzL3J1bm5lci5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2FwaV90ZXN0cy9ydW5uZXIucHkJKHJldmlzaW9uIDI3NzAy
MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvYXBpX3Rlc3RzL3J1bm5lci5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
NSwxMzEgKzI1LDM1IEBAIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgdGltZQogCiBmcm9tIHdlYmtp
dGNvcmVweSBpbXBvcnQgc3RyaW5nX3V0aWxzCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgVGFz
a1Bvb2wKIAotZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IG1lc3NhZ2VfcG9vbAogZnJvbSB3
ZWJraXRweS5jb21tb24uaXRlcmF0aW9uX2NvbXBhdGliaWxpdHkgaW1wb3J0IGl0ZXJpdGVtcwog
ZnJvbSB3ZWJraXRweS5wb3J0LnNlcnZlcl9wcm9jZXNzIGltcG9ydCBTZXJ2ZXJQcm9jZXNzLCBf
bG9nIGFzIHNlcnZlcl9wcm9jZXNzX2xvZ2dlcgogZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0
ZWRfZGV2aWNlIGltcG9ydCBTaW11bGF0ZWREZXZpY2VNYW5hZ2VyCiAKK19sb2cgPSBsb2dnaW5n
LmdldExvZ2dlcihfX25hbWVfXykKIAotY2xhc3MgUnVubmVyKG9iamVjdCk6Ci0gICAgU1RBVFVT
X1BBU1NFRCA9IDAKLSAgICBTVEFUVVNfRkFJTEVEID0gMQotICAgIFNUQVRVU19DUkFTSEVEID0g
MgotICAgIFNUQVRVU19USU1FT1VUID0gMwotICAgIFNUQVRVU19ESVNBQkxFRCA9IDQKLSAgICBT
VEFUVVNfUlVOTklORyA9IDUKLQotICAgIE5BTUVfRk9SX1NUQVRVUyA9IFsKLSAgICAgICAgJ1Bh
c3NlZCcsCi0gICAgICAgICdGYWlsZWQnLAotICAgICAgICAnQ3Jhc2hlZCcsCi0gICAgICAgICdU
aW1lb3V0JywKLSAgICAgICAgJ0Rpc2FibGVkJywKLSAgICBdCi0KLSAgICBkZWYgX19pbml0X18o
c2VsZiwgcG9ydCwgcHJpbnRlcik6Ci0gICAgICAgIHNlbGYucG9ydCA9IHBvcnQKLSAgICAgICAg
c2VsZi5wcmludGVyID0gcHJpbnRlcgotICAgICAgICBzZWxmLnRlc3RzX3J1biA9IDAKLSAgICAg
ICAgc2VsZi5fbnVtX3dvcmtlcnMgPSAxCi0gICAgICAgIHNlbGYuX2hhc19sb2dnZWRfZm9yX3Rl
c3QgPSBUcnVlICAjIFN1cHByZXNzIGFuIGVtcHR5IGxpbmUgYmV0d2VlbiAiUnVubmluZyB0ZXN0
cyIgYW5kIHRoZSBmaXJzdCB0ZXN0J3Mgb3V0cHV0LgotICAgICAgICBzZWxmLnJlc3VsdHMgPSB7
fQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfc2hhcmRfdGVzdHModGVzdHMpOgotICAg
ICAgICBzaGFyZHMgPSB7fQotICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKLSAgICAgICAgICAg
IHNoYXJkX3ByZWZpeCA9ICcuJy5qb2luKHRlc3Quc3BsaXQoJy4nKVs6LTFdKQotICAgICAgICAg
ICAgaWYgc2hhcmRfcHJlZml4IG5vdCBpbiBzaGFyZHM6Ci0gICAgICAgICAgICAgICAgc2hhcmRz
W3NoYXJkX3ByZWZpeF0gPSBbXQotICAgICAgICAgICAgc2hhcmRzW3NoYXJkX3ByZWZpeF0uYXBw
ZW5kKHRlc3QpCi0gICAgICAgIHJldHVybiBzaGFyZHMKIAotICAgICMgRklYTUUgQVBJIHRlc3Rz
IHNob3VsZCBydW4gYXMgYW4gYXBwLCB3ZSB3b24ndCBuZWVkIHRoaXMgZnVuY3Rpb24gPGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUyMDQ+Ci0gICAgQHN0YXRpY21l
dGhvZAotICAgIGRlZiBjb21tYW5kX2Zvcl9wb3J0KHBvcnQsIGFyZ3MpOgotICAgICAgICBpZiAo
cG9ydC5nZXRfb3B0aW9uKCdmb3JjZScpKToKLSAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCctLWd0
ZXN0X2Fsc29fcnVuX2Rpc2FibGVkX3Rlc3RzPTEnKQotICAgICAgICBpZiAnc2ltdWxhdG9yJyBp
biBwb3J0LnBvcnRfbmFtZToKLSAgICAgICAgICAgIGFzc2VydCBTaW11bGF0ZWREZXZpY2VNYW5h
Z2VyLklOSVRJQUxJWkVEX0RFVklDRVMKLSAgICAgICAgICAgIHJldHVybiBbJy91c3IvYmluL3hj
cnVuJywgJ3NpbWN0bCcsICdzcGF3bicsIFNpbXVsYXRlZERldmljZU1hbmFnZXIuSU5JVElBTEla
RURfREVWSUNFU1swXS51ZGlkXSArIGFyZ3MKLSAgICAgICAgZWxpZiAnZGV2aWNlJyBpbiBwb3J0
LnBvcnRfbmFtZToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignUnVubmluZyBhcGkg
dGVzdHMgb24ge30gaXMgbm90IHN1cHBvcnRlZCcuZm9ybWF0KHBvcnQucG9ydF9uYW1lKSkKLSAg
ICAgICAgZWxpZiBwb3J0Lmhvc3QucGxhdGZvcm0uaXNfd2luKCk6Ci0gICAgICAgICAgICBhcmdz
WzBdID0gb3MucGF0aC5zcGxpdGV4dChhcmdzWzBdKVswXSArICcuZXhlJwotICAgICAgICByZXR1
cm4gYXJncwotCi0gICAgZGVmIHJ1bihzZWxmLCB0ZXN0cywgbnVtX3dvcmtlcnMpOgotICAgICAg
ICBpZiBub3QgdGVzdHM6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBzZWxmLnByaW50
ZXIud3JpdGVfdXBkYXRlKCdTaGFyZGluZyB0ZXN0cyAuLi4nKQotICAgICAgICBzaGFyZHMgPSBS
dW5uZXIuX3NoYXJkX3Rlc3RzKHRlc3RzKQotCi0gICAgICAgIG9yaWdpbmFsX2xldmVsID0gc2Vy
dmVyX3Byb2Nlc3NfbG9nZ2VyLmxldmVsCi0gICAgICAgIHNlcnZlcl9wcm9jZXNzX2xvZ2dlci5z
ZXRMZXZlbChsb2dnaW5nLkNSSVRJQ0FMKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNl
bGYuX251bV93b3JrZXJzID0gbWluKG51bV93b3JrZXJzLCBsZW4oc2hhcmRzKSkKLSAgICAgICAg
ICAgIHdpdGggbWVzc2FnZV9wb29sLmdldChzZWxmLCBsYW1iZGEgY2FsbGVyOiBfV29ya2VyKGNh
bGxlciwgc2VsZi5wb3J0LCBzaGFyZHMpLCBzZWxmLl9udW1fd29ya2VycykgYXMgcG9vbDoKLSAg
ICAgICAgICAgICAgICBwb29sLnJ1bigoJ3Rlc3QnLCBzaGFyZCkgZm9yIHNoYXJkLCBfIGluIGl0
ZXJpdGVtcyhzaGFyZHMpKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VydmVyX3By
b2Nlc3NfbG9nZ2VyLnNldExldmVsKG9yaWdpbmFsX2xldmVsKQotCi0KLSAgICBkZWYgaGFuZGxl
KHNlbGYsIG1lc3NhZ2VfbmFtZSwgc291cmNlLCB0ZXN0X25hbWU9Tm9uZSwgc3RhdHVzPTAsIG91
dHB1dD0nJyk6Ci0gICAgICAgIGlmIG1lc3NhZ2VfbmFtZSA9PSAnZGlkX3NwYXduX3dvcmtlcic6
Ci0gICAgICAgICAgICByZXR1cm4KK2NsYXNzIF9Xb3JrZXIob2JqZWN0KToKKyAgICBpbnN0YW5j
ZSA9IE5vbmUKIAotICAgICAgICBzb3VyY2UgPSAnJyBpZiBzZWxmLl9udW1fd29ya2VycyA9PSAx
IGVsc2Ugc291cmNlICsgJyAnCi0gICAgICAgIHdpbGxfc3RyZWFtX2xvZ3MgPSBzZWxmLl9udW1f
d29ya2VycyA9PSAxIGFuZCBzZWxmLnBvcnQuZ2V0X29wdGlvbigndmVyYm9zZScpCi0gICAgICAg
IGlmIG1lc3NhZ2VfbmFtZSA9PSAnZW5kZWRfdGVzdCc6Ci0gICAgICAgICAgICB1cGRhdGUgPSAn
e317fSB7fScuZm9ybWF0KHNvdXJjZSwgdGVzdF9uYW1lLCBSdW5uZXIuTkFNRV9GT1JfU1RBVFVT
W3N0YXR1c10pCi0KLSAgICAgICAgICAgICMgRG9uJ3QgcHJpbnQgdGVzdCBvdXRwdXQgaWYgLS1x
dWlldC4KLSAgICAgICAgICAgIGlmIHN0YXR1cyAhPSBSdW5uZXIuU1RBVFVTX1BBU1NFRCBvciAo
b3V0cHV0IGFuZCBub3Qgc2VsZi5wb3J0LmdldF9vcHRpb24oJ3F1aWV0JykpOgotICAgICAgICAg
ICAgICAgIGlmIG5vdCB3aWxsX3N0cmVhbV9sb2dzOgotICAgICAgICAgICAgICAgICAgICBmb3Ig
bGluZSBpbiBvdXRwdXQuc3BsaXRsaW5lcygpOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
bm90IHNlbGYuX2hhc19sb2dnZWRfZm9yX3Rlc3Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5faGFzX2xvZ2dlZF9mb3JfdGVzdCA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLnByaW50ZXIud3JpdGVsbihzb3VyY2UpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLnByaW50ZXIud3JpdGVsbigne30gICAge30nLmZvcm1hdChzb3VyY2UsIGxpbmUp
KQotICAgICAgICAgICAgICAgIHNlbGYucHJpbnRlci53cml0ZWxuKHVwZGF0ZSkKLSAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5wcmludGVyLndyaXRlX3VwZGF0ZSh1cGRh
dGUpCi0gICAgICAgICAgICBzZWxmLnRlc3RzX3J1biArPSAxCi0gICAgICAgICAgICBzZWxmLnJl
c3VsdHNbdGVzdF9uYW1lXSA9IChzdGF0dXMsIG91dHB1dCkKLSAgICAgICAgICAgIHNlbGYuX2hh
c19sb2dnZWRfZm9yX3Rlc3QgPSBGYWxzZQotCi0gICAgICAgIGlmIG1lc3NhZ2VfbmFtZSA9PSAn
bG9nJyBhbmQgd2lsbF9zdHJlYW1fbG9nczoKLSAgICAgICAgICAgIGZvciBsaW5lIGluIG91dHB1
dC5zcGxpdGxpbmVzKCk6Ci0gICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2hhc19sb2dnZWRf
Zm9yX3Rlc3Q6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhc19sb2dnZWRfZm9yX3Rlc3Qg
PSBUcnVlCi0gICAgICAgICAgICAgICAgICAgIHNlbGYucHJpbnRlci53cml0ZWxuKHNvdXJjZSkK
LSAgICAgICAgICAgICAgICBzZWxmLnByaW50ZXIud3JpdGVsbigne30gICAge30nLmZvcm1hdChz
b3VyY2UsIGxpbmUpKQorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXR1cChjbHMsIHBvcnQ9
Tm9uZSk6CisgICAgICAgIGNscy5pbnN0YW5jZSA9IGNscyhwb3J0KQogCisgICAgQGNsYXNzbWV0
aG9kCisgICAgZGVmIHRlYXJkb3duKGNscyk6CisgICAgICAgIGNscy5pbnN0YW5jZSA9IE5vbmUK
IAotICAgIGRlZiByZXN1bHRfbWFwX2J5X3N0YXR1cyhzZWxmLCBzdGF0dXM9Tm9uZSk6Ci0gICAg
ICAgIG1hcCA9IHt9Ci0gICAgICAgIGZvciB0ZXN0X25hbWUsIHJlc3VsdCBpbiBpdGVyaXRlbXMo
c2VsZi5yZXN1bHRzKToKLSAgICAgICAgICAgIGlmIHJlc3VsdFswXSA9PSBzdGF0dXM6Ci0gICAg
ICAgICAgICAgICAgbWFwW3Rlc3RfbmFtZV0gPSByZXN1bHRbMV0KLSAgICAgICAgcmV0dXJuIG1h
cAotCi0KLWNsYXNzIF9Xb3JrZXIob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgY2Fs
bGVyLCBwb3J0LCBzaGFyZF9tYXApOgotICAgICAgICBzZWxmLl9jYWxsZXIgPSBjYWxsZXIKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCk6CiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAg
ICAgICAgIHNlbGYuaG9zdCA9IHBvcnQuaG9zdAotICAgICAgICBzZWxmLl9zaGFyZF9tYXAgPSBz
aGFyZF9tYXAKIAogICAgICAgICAjIFNlcnZlclByb2Nlc3MgZG9lc24ndCBhbGxvdyBmb3IgYSB0
aW1lb3V0IG9mICdOb25lLCcgdGhpcyB1c2VzIGEgd2VlayBpbnN0ZWFkIG9mIE5vbmUuCiAgICAg
ICAgIHNlbGYuX3RpbWVvdXQgPSBpbnQoc2VsZi5fcG9ydC5nZXRfb3B0aW9uKCd0aW1lb3V0Jykp
IGlmIHNlbGYuX3BvcnQuZ2V0X29wdGlvbigndGltZW91dCcpIGVsc2UgNjAgKiAyNCAqIDcKIAot
ICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgX2ZpbHRlcl9ub2lzeV9vdXRwdXQob3V0cHV0KToK
KyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2ZpbHRlcl9ub2lzeV9vdXRwdXQoY2xzLCBvdXRw
dXQpOgogICAgICAgICByZXN1bHQgPSAnJwogICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3Bs
aXRsaW5lcygpOgogICAgICAgICAgICAgaWYgbGluZS5sc3RyaXAoKS5zdGFydHN3aXRoKCdvYmpj
WycpOgpAQCAtMTY3LDEzICs3MSwxNCBAQCBjbGFzcyBfV29ya2VyKG9iamVjdCk6CiAgICAgICAg
IGlmIHRlc3Quc3BsaXQoJy4nKVsxXS5zdGFydHN3aXRoKCdESVNBQkxFRF8nKSBhbmQgbm90IHNl
bGYuX3BvcnQuZ2V0X29wdGlvbignZm9yY2UnKToKICAgICAgICAgICAgIHN0YXR1cyA9IFJ1bm5l
ci5TVEFUVVNfRElTQUJMRUQKIAorICAgICAgICBzdGRvdXRfYnVmZmVyID0gJycKKyAgICAgICAg
c3RkZXJyX2J1ZmZlciA9ICcnCisKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZGVhZGxpbmUg
PSB0aW1lLnRpbWUoKSArIHNlbGYuX3RpbWVvdXQKICAgICAgICAgICAgIGlmIHN0YXR1cyAhPSBS
dW5uZXIuU1RBVFVTX0RJU0FCTEVEOgogICAgICAgICAgICAgICAgIHNlcnZlcl9wcm9jZXNzLnN0
YXJ0KCkKIAotICAgICAgICAgICAgc3Rkb3V0X2J1ZmZlciA9ICcnCi0gICAgICAgICAgICBzdGRl
cnJfYnVmZmVyID0gJycKICAgICAgICAgICAgIHdoaWxlIHN0YXR1cyA9PSBSdW5uZXIuU1RBVFVT
X1JVTk5JTkc6CiAgICAgICAgICAgICAgICAgc3Rkb3V0X2xpbmUsIHN0ZGVycl9saW5lID0gc2Vy
dmVyX3Byb2Nlc3MucmVhZF9laXRoZXJfc3Rkb3V0X29yX3N0ZGVycl9saW5lKGRlYWRsaW5lKQog
ICAgICAgICAgICAgICAgIGlmIG5vdCBzdGRlcnJfbGluZSBhbmQgbm90IHN0ZG91dF9saW5lOgpA
QCAtMTgyLDcgKzg3LDcgQEAgY2xhc3MgX1dvcmtlcihvYmplY3QpOgogICAgICAgICAgICAgICAg
IGlmIHN0ZGVycl9saW5lOgogICAgICAgICAgICAgICAgICAgICBzdGRlcnJfbGluZSA9IHN0cmlu
Z191dGlscy5kZWNvZGUoc3RkZXJyX2xpbmUsIHRhcmdldF90eXBlPXN0cikKICAgICAgICAgICAg
ICAgICAgICAgc3RkZXJyX2J1ZmZlciArPSBzdGRlcnJfbGluZQotICAgICAgICAgICAgICAgICAg
ICBzZWxmLnBvc3QoJ2xvZycsIG91dHB1dD1zdGRlcnJfbGluZVs6LTFdKQorICAgICAgICAgICAg
ICAgICAgICBfbG9nLmVycm9yKHN0ZGVycl9saW5lWzotMV0pCiAgICAgICAgICAgICAgICAgaWYg
c3Rkb3V0X2xpbmU6CiAgICAgICAgICAgICAgICAgICAgIHN0ZG91dF9saW5lID0gc3RyaW5nX3V0
aWxzLmRlY29kZShzdGRvdXRfbGluZSwgdGFyZ2V0X3R5cGU9c3RyKQogICAgICAgICAgICAgICAg
ICAgICBpZiAnKipQQVNTKionIGluIHN0ZG91dF9saW5lOgpAQCAtMTkxLDcgKzk2LDcgQEAgY2xh
c3MgX1dvcmtlcihvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUnVu
bmVyLlNUQVRVU19GQUlMRUQKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZG91dF9idWZmZXIgKz0gc3Rkb3V0X2xpbmUKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYucG9zdCgnbG9nJywgb3V0cHV0PXN0ZG91dF9saW5lWzotMV0pCisgICAg
ICAgICAgICAgICAgICAgICAgICBfbG9nLmVycm9yKHN0ZG91dF9saW5lWzotMV0pCiAKICAgICAg
ICAgICAgIGlmIHN0YXR1cyA9PSBSdW5uZXIuU1RBVFVTX0RJU0FCTEVEOgogICAgICAgICAgICAg
ICAgIHBhc3MKQEAgLTIwNSwyMiArMTEwLDMwIEBAIGNsYXNzIF9Xb3JrZXIob2JqZWN0KToKICAg
ICAgICAgZmluYWxseToKICAgICAgICAgICAgIHJlbWFpbmluZ19zdGRlcnIgPSBzdHJpbmdfdXRp
bHMuZGVjb2RlKHNlcnZlcl9wcm9jZXNzLnBvcF9hbGxfYnVmZmVyZWRfc3RkZXJyKCksIHRhcmdl
dF90eXBlPXN0cikKICAgICAgICAgICAgIHJlbWFpbmluZ19zdGRvdXQgPSBzdHJpbmdfdXRpbHMu
ZGVjb2RlKHNlcnZlcl9wcm9jZXNzLnBvcF9hbGxfYnVmZmVyZWRfc3Rkb3V0KCksIHRhcmdldF90
eXBlPXN0cikKLSAgICAgICAgICAgIHNlbGYucG9zdCgnbG9nJywgb3V0cHV0PXJlbWFpbmluZ19z
dGRlcnIgKyByZW1haW5pbmdfc3Rkb3V0KQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gKHJlbWFp
bmluZ19zdGRvdXQgKyByZW1haW5pbmdfc3RkZXJyKS5zcGxpdGxpbmVzKEZhbHNlKToKKyAgICAg
ICAgICAgICAgICBfbG9nLmVycm9yKGxpbmUpCiAgICAgICAgICAgICBvdXRwdXRfYnVmZmVyID0g
c3RkZXJyX2J1ZmZlciArIHN0ZG91dF9idWZmZXIgKyByZW1haW5pbmdfc3RkZXJyICsgcmVtYWlu
aW5nX3N0ZG91dAogICAgICAgICAgICAgc2VydmVyX3Byb2Nlc3Muc3RvcCgpCiAKLSAgICAgICAg
c2VsZi5wb3N0KCdlbmRlZF90ZXN0JywgJ3t9Lnt9Jy5mb3JtYXQoYmluYXJ5X25hbWUsIHRlc3Qp
LCBzdGF0dXMsIHNlbGYuX2ZpbHRlcl9ub2lzeV9vdXRwdXQob3V0cHV0X2J1ZmZlcikpCi0KLSAg
ICBkZWYgX3J1bl9zaGFyZF93aXRoX2JpbmFyeShzZWxmLCBiaW5hcnlfbmFtZSwgdGVzdHMpOgot
ICAgICAgICByZW1haW5pbmdfdGVzdHMgPSBsaXN0KHRlc3RzKQorICAgICAgICBUYXNrUG9vbC5Q
cm9jZXNzLnF1ZXVlLnNlbmQoVGFza1Bvb2wuVGFzaygKKyAgICAgICAgICAgIHJlcG9ydF9yZXN1
bHQsIE5vbmUsIFRhc2tQb29sLlByb2Nlc3MubmFtZSwKKyAgICAgICAgICAgICd7fS57fScuZm9y
bWF0KGJpbmFyeV9uYW1lLCB0ZXN0KSwKKyAgICAgICAgICAgIHN0YXR1cywKKyAgICAgICAgICAg
IHNlbGYuX2ZpbHRlcl9ub2lzeV9vdXRwdXQob3V0cHV0X2J1ZmZlciksCisgICAgICAgICkpCisK
KyAgICBkZWYgcnVuKHNlbGYsIG5hbWUsICp0ZXN0cyk6CisgICAgICAgIGJpbmFyeV9uYW1lID0g
bmFtZS5zcGxpdCgnLicpWzBdCisgICAgICAgIHJlbWFpbmluZ190ZXN0cyA9IFsnLicuam9pbih0
ZXN0LnNwbGl0KCcuJylbMTpdKSBmb3IgdGVzdCBpbiB0ZXN0c10KIAogICAgICAgICAjIFRyeSB0
byBydW4gdGhlIHNoYXJkIGluIGEgc2luZ2xlIHByb2Nlc3MuCiAgICAgICAgIHdoaWxlIHJlbWFp
bmluZ190ZXN0cyBhbmQgbm90IHNlbGYuX3BvcnQuZ2V0X29wdGlvbigncnVuX3NpbmdseScpOgog
ICAgICAgICAgICAgc3RhcnRpbmdfbGVuZ3RoID0gbGVuKHJlbWFpbmluZ190ZXN0cykKICAgICAg
ICAgICAgIHNlcnZlcl9wcm9jZXNzID0gU2VydmVyUHJvY2VzcygKICAgICAgICAgICAgICAgICBz
ZWxmLl9wb3J0LCBiaW5hcnlfbmFtZSwKLSAgICAgICAgICAgICAgICBSdW5uZXIuY29tbWFuZF9m
b3JfcG9ydChzZWxmLl9wb3J0LCBbc2VsZi5fcG9ydC5fYnVpbGRfcGF0aChiaW5hcnlfbmFtZSks
ICctLWd0ZXN0X2ZpbHRlcj17fScuZm9ybWF0KCc6Jy5qb2luKHJlbWFpbmluZ190ZXN0cykpXSks
Ci0gICAgICAgICAgICAgICAgZW52PXNlbGYuX3BvcnQuZW52aXJvbm1lbnRfZm9yX2FwaV90ZXN0
cygpKQorICAgICAgICAgICAgICAgIFJ1bm5lci5jb21tYW5kX2Zvcl9wb3J0KHNlbGYuX3BvcnQs
IFsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5fYnVpbGRfcGF0aChiaW5hcnlfbmFt
ZSksICctLWd0ZXN0X2ZpbHRlcj17fScuZm9ybWF0KCc6Jy5qb2luKHJlbWFpbmluZ190ZXN0cykp
CisgICAgICAgICAgICAgICAgXSksIGVudj1zZWxmLl9wb3J0LmVudmlyb25tZW50X2Zvcl9hcGlf
dGVzdHMoKSkKIAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGRlYWRsaW5lID0g
dGltZS50aW1lKCkgKyBzZWxmLl90aW1lb3V0CkBAIC0yMzAsNyArMTQzLDcgQEAgY2xhc3MgX1dv
cmtlcihvYmplY3QpOgogCiAgICAgICAgICAgICAgICAgc2VydmVyX3Byb2Nlc3Muc3RhcnQoKQog
ICAgICAgICAgICAgICAgIHdoaWxlIHJlbWFpbmluZ190ZXN0czoKLSAgICAgICAgICAgICAgICAg
ICAgc3Rkb3V0ID0gc2VydmVyX3Byb2Nlc3MucmVhZF9zdGRvdXRfbGluZShkZWFkbGluZSkKKyAg
ICAgICAgICAgICAgICAgICAgc3Rkb3V0ID0gc3RyaW5nX3V0aWxzLmRlY29kZShzZXJ2ZXJfcHJv
Y2Vzcy5yZWFkX3N0ZG91dF9saW5lKGRlYWRsaW5lKSwgdGFyZ2V0X3R5cGU9c3RyKQogCiAgICAg
ICAgICAgICAgICAgICAgICMgSWYgd2UndmUgdHJpZ2dlcmVkIGEgdGltZW91dCwgd2UgZG9uJ3Qg
a25vdyB3aGljaCB0ZXN0IGNhdXNlZCBpdC4gQnJlYWsgb3V0IGFuZCBydW4gc2luZ2x5LgogICAg
ICAgICAgICAgICAgICAgICBpZiBzdGRvdXQgaXMgTm9uZSBhbmQgc2VydmVyX3Byb2Nlc3MudGlt
ZWRfb3V0OgpAQCAtMjUxLDcgKzE2NCwxNCBAQCBjbGFzcyBfV29ya2VyKG9iamVjdCk6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgICBpZiBsYXN0
X3Rlc3QgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdfdGVz
dHMucmVtb3ZlKGxhc3RfdGVzdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucG9zdCgn
ZW5kZWRfdGVzdCcsICd7fS57fScuZm9ybWF0KGJpbmFyeV9uYW1lLCBsYXN0X3Rlc3QpLCBsYXN0
X3N0YXR1cywgc3Rkb3V0X2J1ZmZlcikKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxp
bmUgaW4gc3Rkb3V0X2J1ZmZlci5zcGxpdGxpbmVzKEZhbHNlKToKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfbG9nLmVycm9yKGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBUYXNr
UG9vbC5Qcm9jZXNzLnF1ZXVlLnNlbmQoVGFza1Bvb2wuVGFzaygKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXBvcnRfcmVzdWx0LCBOb25lLCBUYXNrUG9vbC5Qcm9jZXNzLm5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3t9Lnt9Jy5mb3JtYXQoYmluYXJ5X25hbWUsIGxh
c3RfdGVzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9zdGF0dXMsIHN0ZG91
dF9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICApKQogICAgICAgICAgICAgICAgICAg
ICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIHNlbGYuX3RpbWVvdXQKICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZG91dF9idWZmZXIgPSAnJwogCkBAIC0yNjQsMTAgKzE4NCwxNyBAQCBj
bGFzcyBfV29ya2VyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgIyBXZSBhc3N1bWUgdGhhdCBz
dGRlcnIgaXMgb25seSByZWxldmFudCBpZiB0aGVyZSBpcyBhIGNyYXNoIChtZWFuaW5nIHdlIHRy
aWdnZXJlZCBhbiBhc3NlcnQpCiAgICAgICAgICAgICAgICAgaWYgbGFzdF90ZXN0OgogICAgICAg
ICAgICAgICAgICAgICByZW1haW5pbmdfdGVzdHMucmVtb3ZlKGxhc3RfdGVzdCkKLSAgICAgICAg
ICAgICAgICAgICAgc3Rkb3V0X2J1ZmZlciArPSBzZXJ2ZXJfcHJvY2Vzcy5wb3BfYWxsX2J1ZmZl
cmVkX3N0ZG91dCgpCi0gICAgICAgICAgICAgICAgICAgIHN0ZGVycl9idWZmZXIgPSBzZXJ2ZXJf
cHJvY2Vzcy5wb3BfYWxsX2J1ZmZlcmVkX3N0ZGVycigpIGlmIGxhc3Rfc3RhdHVzID09IFJ1bm5l
ci5TVEFUVVNfQ1JBU0hFRCBlbHNlICcnCi0gICAgICAgICAgICAgICAgICAgIHNlbGYucG9zdCgn
bG9nJywgb3V0cHV0PXN0ZG91dF9idWZmZXIgKyBzdGRlcnJfYnVmZmVyKQotICAgICAgICAgICAg
ICAgICAgICBzZWxmLnBvc3QoJ2VuZGVkX3Rlc3QnLCAne30ue30nLmZvcm1hdChiaW5hcnlfbmFt
ZSwgbGFzdF90ZXN0KSwgbGFzdF9zdGF0dXMsIHNlbGYuX2ZpbHRlcl9ub2lzeV9vdXRwdXQoc3Rk
b3V0X2J1ZmZlciArIHN0ZGVycl9idWZmZXIpKQorICAgICAgICAgICAgICAgICAgICBzdGRvdXRf
YnVmZmVyICs9IHN0cmluZ191dGlscy5kZWNvZGUoc2VydmVyX3Byb2Nlc3MucG9wX2FsbF9idWZm
ZXJlZF9zdGRvdXQoKSwgdGFyZ2V0X3R5cGU9c3RyKQorICAgICAgICAgICAgICAgICAgICBzdGRl
cnJfYnVmZmVyID0gc3RyaW5nX3V0aWxzLmRlY29kZShzZXJ2ZXJfcHJvY2Vzcy5wb3BfYWxsX2J1
ZmZlcmVkX3N0ZGVycigpLCB0YXJnZXRfdHlwZT1zdHIpIGlmIGxhc3Rfc3RhdHVzID09IFJ1bm5l
ci5TVEFUVVNfQ1JBU0hFRCBlbHNlICcnCisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGlu
IChzdGRvdXRfYnVmZmVyICsgc3RkZXJyX2J1ZmZlcikuc3BsaXRsaW5lcyhrZWVwZW5kcz1GYWxz
ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBfbG9nLmVycm9yKGxpbmUpCisKKyAgICAgICAg
ICAgICAgICAgICAgVGFza1Bvb2wuUHJvY2Vzcy5xdWV1ZS5zZW5kKFRhc2tQb29sLlRhc2soCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRfcmVzdWx0LCBOb25lLCBUYXNrUG9vbC5Qcm9j
ZXNzLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAne30ue30nLmZvcm1hdChiaW5hcnlf
bmFtZSwgbGFzdF90ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Rfc3RhdHVzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsdGVyX25vaXN5X291dHB1dChzdGRvdXRf
YnVmZmVyICsgc3RkZXJyX2J1ZmZlciksCisgICAgICAgICAgICAgICAgICAgICkpCiAKICAgICAg
ICAgICAgICAgICBpZiBzZXJ2ZXJfcHJvY2Vzcy50aW1lZF9vdXQ6CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrCkBAIC0yODIsMTggKzIwOSwxMDcgQEAgY2xhc3MgX1dvcmtlcihvYmplY3QpOgog
ICAgICAgICBmb3IgdGVzdCBpbiByZW1haW5pbmdfdGVzdHM6CiAgICAgICAgICAgICBzZWxmLl9y
dW5fc2luZ2xlX3Rlc3QoYmluYXJ5X25hbWUsIHRlc3QpCiAKLSAgICBkZWYgcG9zdChzZWxmLCBt
ZXNzYWdlX25hbWUsIHRlc3RfbmFtZT1Ob25lLCBzdGF0dXM9MCwgb3V0cHV0PScnKToKLSAgICAg
ICAgc2VsZi5fY2FsbGVyLnBvc3QobWVzc2FnZV9uYW1lLCB0ZXN0X25hbWUsIHN0YXR1cywgb3V0
cHV0KQogCi0gICAgZGVmIGhhbmRsZShzZWxmLCBtZXNzYWdlX25hbWUsIHNvdXJjZSwgc2hhcmRf
bmFtZSk6Ci0gICAgICAgIGFzc2VydCBtZXNzYWdlX25hbWUgPT0gJ3Rlc3QnCi0gICAgICAgIHNl
bGYucG9zdCgnc3RhcnRlZF9zaGFyZCcsIHNoYXJkX25hbWUpCi0KLSAgICAgICAgYmluYXJ5X21h
cCA9IHt9Ci0gICAgICAgIGZvciB0ZXN0IGluIHNlbGYuX3NoYXJkX21hcFtzaGFyZF9uYW1lXToK
LSAgICAgICAgICAgIHNwbGl0X3Rlc3RfbmFtZSA9IHRlc3Quc3BsaXQoJy4nKQotICAgICAgICAg
ICAgaWYgc3BsaXRfdGVzdF9uYW1lWzBdIG5vdCBpbiBiaW5hcnlfbWFwOgotICAgICAgICAgICAg
ICAgIGJpbmFyeV9tYXBbc3BsaXRfdGVzdF9uYW1lWzBdXSA9IFtdCi0gICAgICAgICAgICBiaW5h
cnlfbWFwW3NwbGl0X3Rlc3RfbmFtZVswXV0uYXBwZW5kKCcuJy5qb2luKHNwbGl0X3Rlc3RfbmFt
ZVsxOl0pKQotICAgICAgICBmb3IgYmluYXJ5X25hbWUsIHRlc3RfbGlzdCBpbiBiaW5hcnlfbWFw
Lml0ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmLl9ydW5fc2hhcmRfd2l0aF9iaW5hcnkoYmluYXJ5
X25hbWUsIHRlc3RfbGlzdCkKK2RlZiBzZXR1cF9zaGFyZChwb3J0PU5vbmUpOgorICAgIHJldHVy
biBfV29ya2VyLnNldHVwKHBvcnQ9cG9ydCkKKworCitkZWYgcnVuX3NoYXJkKG5hbWUsICp0ZXN0
cyk6CisgICAgcmV0dXJuIF9Xb3JrZXIuaW5zdGFuY2UucnVuKG5hbWUsICp0ZXN0cykKKworCitk
ZWYgcmVwb3J0X3Jlc3VsdCh3b3JrZXIsIHRlc3QsIHN0YXR1cywgb3V0cHV0KToKKyAgICBpZiBz
dGF0dXMgPT0gUnVubmVyLlNUQVRVU19QQVNTRUQgYW5kIG5vdCBvdXRwdXQgYW5kIFJ1bm5lci5p
bnN0YW5jZS5wb3J0LmdldF9vcHRpb24oJ3F1aWV0Jyk6CisgICAgICAgIFJ1bm5lci5pbnN0YW5j
ZS5wcmludGVyLndyaXRlX3VwZGF0ZSgne30ge30ge30nLmZvcm1hdCh3b3JrZXIsIHRlc3QsIFJ1
bm5lci5OQU1FX0ZPUl9TVEFUVVNbc3RhdHVzXSkpCisgICAgZWxzZToKKyAgICAgICAgUnVubmVy
Lmluc3RhbmNlLnByaW50ZXIud3JpdGVfdXBkYXRlKCd7fSB7fSB7fScuZm9ybWF0KHdvcmtlciwg
dGVzdCwgUnVubmVyLk5BTUVfRk9SX1NUQVRVU1tzdGF0dXNdKSkKKyAgICBSdW5uZXIuaW5zdGFu
Y2UucmVzdWx0c1t0ZXN0XSA9IHN0YXR1cywgb3V0cHV0CisKKworZGVmIHRlYXJkb3duX3NoYXJk
KCk6CisgICAgcmV0dXJuIF9Xb3JrZXIudGVhcmRvd24oKQorCisKK2NsYXNzIFJ1bm5lcihvYmpl
Y3QpOgorICAgIFNUQVRVU19QQVNTRUQgPSAwCisgICAgU1RBVFVTX0ZBSUxFRCA9IDEKKyAgICBT
VEFUVVNfQ1JBU0hFRCA9IDIKKyAgICBTVEFUVVNfVElNRU9VVCA9IDMKKyAgICBTVEFUVVNfRElT
QUJMRUQgPSA0CisgICAgU1RBVFVTX1JVTk5JTkcgPSA1CisKKyAgICBOQU1FX0ZPUl9TVEFUVVMg
PSBbCisgICAgICAgICdQYXNzZWQnLAorICAgICAgICAnRmFpbGVkJywKKyAgICAgICAgJ0NyYXNo
ZWQnLAorICAgICAgICAnVGltZW91dCcsCisgICAgICAgICdEaXNhYmxlZCcsCisgICAgXQorCisg
ICAgaW5zdGFuY2UgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgcHJpbnRl
cik6CisgICAgICAgIHNlbGYucG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5wcmludGVyID0gcHJp
bnRlcgorICAgICAgICBzZWxmLnRlc3RzX3J1biA9IDAKKyAgICAgICAgc2VsZi5fbnVtX3dvcmtl
cnMgPSAxCisgICAgICAgIHNlbGYuX2hhc19sb2dnZWRfZm9yX3Rlc3QgPSBUcnVlICAjIFN1cHBy
ZXNzIGFuIGVtcHR5IGxpbmUgYmV0d2VlbiAiUnVubmluZyB0ZXN0cyIgYW5kIHRoZSBmaXJzdCB0
ZXN0J3Mgb3V0cHV0LgorICAgICAgICBzZWxmLnJlc3VsdHMgPSB7fQorCisgICAgIyBGSVhNRSBB
UEkgdGVzdHMgc2hvdWxkIHJ1biBhcyBhbiBhcHAsIHdlIHdvbid0IG5lZWQgdGhpcyBmdW5jdGlv
biA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTIwND4KKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIGNvbW1hbmRfZm9yX3BvcnQocG9ydCwgYXJncyk6CisgICAg
ICAgIGlmIChwb3J0LmdldF9vcHRpb24oJ2ZvcmNlJykpOgorICAgICAgICAgICAgYXJncy5hcHBl
bmQoJy0tZ3Rlc3RfYWxzb19ydW5fZGlzYWJsZWRfdGVzdHM9MScpCisgICAgICAgIGlmICdzaW11
bGF0b3InIGluIHBvcnQucG9ydF9uYW1lOgorICAgICAgICAgICAgYXNzZXJ0IFNpbXVsYXRlZERl
dmljZU1hbmFnZXIuSU5JVElBTElaRURfREVWSUNFUworICAgICAgICAgICAgcmV0dXJuIFsnL3Vz
ci9iaW4veGNydW4nLCAnc2ltY3RsJywgJ3NwYXduJywgU2ltdWxhdGVkRGV2aWNlTWFuYWdlci5J
TklUSUFMSVpFRF9ERVZJQ0VTWzBdLnVkaWRdICsgYXJncworICAgICAgICBlbGlmICdkZXZpY2Un
IGluIHBvcnQucG9ydF9uYW1lOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdSdW5u
aW5nIGFwaSB0ZXN0cyBvbiB7fSBpcyBub3Qgc3VwcG9ydGVkJy5mb3JtYXQocG9ydC5wb3J0X25h
bWUpKQorICAgICAgICBlbGlmIHBvcnQuaG9zdC5wbGF0Zm9ybS5pc193aW4oKToKKyAgICAgICAg
ICAgIGFyZ3NbMF0gPSBvcy5wYXRoLnNwbGl0ZXh0KGFyZ3NbMF0pWzBdICsgJy5leGUnCisgICAg
ICAgIHJldHVybiBhcmdzCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9zaGFyZF90ZXN0
cyh0ZXN0cyk6CisgICAgICAgIHNoYXJkcyA9IHt9CisgICAgICAgIGZvciB0ZXN0IGluIHRlc3Rz
OgorICAgICAgICAgICAgc2hhcmRfcHJlZml4ID0gJy4nLmpvaW4odGVzdC5zcGxpdCgnLicpWzot
MV0pCisgICAgICAgICAgICBpZiBzaGFyZF9wcmVmaXggbm90IGluIHNoYXJkczoKKyAgICAgICAg
ICAgICAgICBzaGFyZHNbc2hhcmRfcHJlZml4XSA9IFtdCisgICAgICAgICAgICBzaGFyZHNbc2hh
cmRfcHJlZml4XS5hcHBlbmQodGVzdCkKKyAgICAgICAgcmV0dXJuIHNoYXJkcworCisgICAgZGVm
IHJ1bihzZWxmLCB0ZXN0cywgbnVtX3dvcmtlcnMpOgorICAgICAgICBpZiBub3QgdGVzdHM6Cisg
ICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLnByaW50ZXIud3JpdGVfdXBkYXRlKCdT
aGFyZGluZyB0ZXN0cyAuLi4nKQorICAgICAgICBzaGFyZHMgPSBSdW5uZXIuX3NoYXJkX3Rlc3Rz
KHRlc3RzKQorCisgICAgICAgIG9yaWdpbmFsX2xldmVsID0gc2VydmVyX3Byb2Nlc3NfbG9nZ2Vy
LmxldmVsCisgICAgICAgIHNlcnZlcl9wcm9jZXNzX2xvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkNS
SVRJQ0FMKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIFJ1bm5lci5pbnN0YW5jZSA9IHNl
bGYKKyAgICAgICAgICAgIHNlbGYuX251bV93b3JrZXJzID0gbWluKG51bV93b3JrZXJzLCBsZW4o
c2hhcmRzKSkKKworICAgICAgICAgICAgd2l0aCBUYXNrUG9vbCgKKyAgICAgICAgICAgICAgICB3
b3JrZXJzPXNlbGYuX251bV93b3JrZXJzLAorICAgICAgICAgICAgICAgIHNldHVwPXNldHVwX3No
YXJkLCBzZXR1cGt3YXJncz1kaWN0KHBvcnQ9c2VsZi5wb3J0KSwKKyAgICAgICAgICAgICAgICB0
ZWFyZG93bj10ZWFyZG93bl9zaGFyZCwKKyAgICAgICAgICAgICkgYXMgcG9vbDoKKyAgICAgICAg
ICAgICAgICBmb3IgbmFtZSwgdGVzdHMgaW4gaXRlcml0ZW1zKHNoYXJkcyk6CisgICAgICAgICAg
ICAgICAgICAgIHBvb2wuZG8ocnVuX3NoYXJkLCBuYW1lLCAqdGVzdHMpCisgICAgICAgICAgICAg
ICAgcG9vbC53YWl0KCkKKworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VydmVyX3By
b2Nlc3NfbG9nZ2VyLnNldExldmVsKG9yaWdpbmFsX2xldmVsKQorICAgICAgICAgICAgUnVubmVy
Lmluc3RhbmNlID0gTm9uZQorCisgICAgZGVmIHJlc3VsdF9tYXBfYnlfc3RhdHVzKHNlbGYsIHN0
YXR1cz1Ob25lKToKKyAgICAgICAgbWFwID0ge30KKyAgICAgICAgZm9yIHRlc3RfbmFtZSwgcmVz
dWx0IGluIGl0ZXJpdGVtcyhzZWxmLnJlc3VsdHMpOgorICAgICAgICAgICAgaWYgcmVzdWx0WzBd
ID09IHN0YXR1czoKKyAgICAgICAgICAgICAgICBtYXBbdGVzdF9uYW1lXSA9IHJlc3VsdFsxXQor
ICAgICAgICByZXR1cm4gbWFwCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427780</attachid>
            <date>2021-05-05 10:53:16 -0700</date>
            <delta_ts>2021-05-05 15:46:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225221-20210505105315.patch</filename>
            <type>text/plain</type>
            <size>38181</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3NzAyNykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQwIEBACisyMDIxLTA1LTA1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbcnVuLWFwaS10ZXN0c10gVXNlIHdlYmtpdGNvcmVweSdzIFRhc2tQb29s
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUyMjEK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc3MzUyNDY1PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29y
ZXB5L3NldHVwLnB5OiBCdW1wIHZlcnNpb24uCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weTogRGl0dG8uCisgICAgICAgICog
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90YXNrX3Bvb2wucHk6
CisgICAgICAgIChUYXNrUG9vbC5fX2VudGVyX18pOiBFbnN1cmUgdGhhdCBtb2NrIGhhcyBiZWVu
IGltcG9ydGVkIGJlZm9yZSBzcGF3bmluZyBjaGlsZCBwcm9jZXNzZXMuCisgICAgICAgICogU2Ny
aXB0cy9ydW4tYXBpLXRlc3RzOiBNb3ZlZCBmcm9tIHdlYmtpdHB5L2FwaV90ZXN0cy9ydW5fYXBp
X3Rlc3RzLnB5LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYXBpX3Rlc3RzL3J1bl9hcGlf
dGVzdHMucHk6IE1vdmVkIHRvIHJ1bi1hcGktdGVzdHMuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9hcGlfdGVzdHMvcnVubmVyLnB5OgorICAgICAgICAoX1dvcmtlcik6IFJlcHJlc2VudGF0
aW9uIG9mIFdvcmtlciBwcm9jZXNzLgorICAgICAgICAoX1dvcmtlci5zZXR1cCk6IFBhc3MgcG9y
dCBvYmplY3QgdG8gd29ya2VyIHByb2Nlc3MuCisgICAgICAgIChfV29ya2VyLnNldHVwKTogUGFz
cyBwb3J0IG9iamVjdCB0byB3b3JrZXIgcHJvY2Vzcy4KKyAgICAgICAgKF9Xb3JrZXIudGVhcmRv
d24pOiBVbi1zZXQgcG9ydCBvYmplY3Qgb24gd29ya2VyIHByb2Nlc3MuCisgICAgICAgIChfV29y
a2VyLl9faW5pdF9fKTogQ29uc3RydWN0IG9iamVjdCB0byBob2xkIGEgV29ya2VyIHByb2Nlc3Mn
cyB2YXJpYWJsZXMuCisgICAgICAgIChfV29ya2VyLl9ydW5fc2luZ2xlX3Rlc3QpOiBMb2cgdGVz
dCByZXN1bHRzLCBwb3N0IHJlc3VsdHMgdG8gcGFyZW50LgorICAgICAgICAoX1dvcmtlci5ydW4p
OiBSdW4gc2hhcmQgd2l0aCBhbmQgcG9zdCByZXN1bHRzIHRvIHBhcmVudCBwcm9jZXNzLgorICAg
ICAgICAoc2V0dXBfc2hhcmQpOiBSdW4gc2V0dXAgaW4gV29ya2VyIHByb2Nlc3MuCisgICAgICAg
IChydW5fc2hhcmQpOiBSdW4gdGVzdCBzaGFyZCBpbiBXb3JrZXIgcHJvY2Vzcy4KKyAgICAgICAg
KHJlcG9ydF9yZXN1bHQpOiBSZWNlaXZlIHJlc3VsdCBpbiB0aGUgcGFyZW50IHByb2Nlc3MuCisg
ICAgICAgICgodGVhcmRvd25fc2hhcmQpOiBUZWFyIGRvd24gV29ya2VyIHByb2Nlc3MuCisgICAg
ICAgIChSdW5uZXIuX19pbml0X18pOgorICAgICAgICAoUnVubmVyLmNvbW1hbmRfZm9yX3BvcnQp
OgorICAgICAgICAoUnVubmVyLl9zaGFyZF90ZXN0cyk6IFNwbGl0IHRlc3RzIGludG8gc2hhcmRz
IHRvIGJlIGVmZmljaWVudGx5IHJ1bi4KKyAgICAgICAgKFJ1bm5lci5ydW4pOiBVc2UgVGFza1Bv
b2wgdG8gcnVuIHRlc3RzIGluIHN1YiBwcm9jZXNzZXMuCisgICAgICAgIChSdW5uZXIuY2FsbGJh
Y2spOiBTYXZlIHJlc3VsdHMgaW4gcGFyZW50IHByb2Nlc3MuCisgICAgICAgIChSdW5uZXIucmVz
dWx0X21hcF9ieV9zdGF0dXMpOgorICAgICAgICAoUnVubmVyLmhhbmRsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChfV29ya2VyLl9ydW5fc2hhcmRfd2l0aF9iaW5hcnkpOiBEZWxldGVkLgorICAgICAg
ICAoX1dvcmtlci5wb3N0KTogRGVsZXRlZC4KKyAgICAgICAgKF9Xb3JrZXIuaGFuZGxlKTogRGVs
ZXRlZC4KKwogMjAyMS0wNS0wNSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAg
ICAgICAgQWRkIHByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIHNwZWNpZnlpbmcgYSBjb2xvciBzcGFj
ZSBmb3IgMkQgY2FudmFzCkluZGV4OiBUb29scy9TY3JpcHRzL3J1bi1hcGktdGVzdHMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tYXBpLXRlc3RzCShyZXZpc2lvbiAyNzcwMjApCisr
KyBUb29scy9TY3JpcHRzL3J1bi1hcGktdGVzdHMJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAjIS91c3IvYmluL2VudiBweXRob24KIAotIyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTIyLDcgKzIyLDE0NSBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwogIyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotIiIi
V3JhcHBlciBhcm91bmQgd2Via2l0cHkvYXBpX3Rlc3RzL3J1bl9hcGlfdGVzdHMucHkiIiIKLWZy
b20gd2Via2l0cHkuY29tbW9uIGltcG9ydCBtdWx0aXByb2Nlc3NpbmdfYm9vdHN0cmFwCitmcm9t
IF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCitpbXBvcnQgbG9nZ2luZworaW1wb3J0
IG9wdHBhcnNlCitpbXBvcnQgc3lzCitpbXBvcnQgdHJhY2ViYWNrCiAKLW11bHRpcHJvY2Vzc2lu
Z19ib290c3RyYXAucnVuKCd3ZWJraXRweScsICdhcGlfdGVzdHMnLCAncnVuX2FwaV90ZXN0cy5w
eScpCitmcm9tIHdlYmtpdHB5LmFwaV90ZXN0cy5tYW5hZ2VyIGltcG9ydCBNYW5hZ2VyCitmcm9t
IHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0Citmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy52aWV3cy5tZXRlcmVkX3N0cmVhbSBpbXBvcnQgTWV0ZXJlZFN0cmVhbQorZnJvbSB3ZWJr
aXRweS5wb3J0IGltcG9ydCBjb25maWd1cmF0aW9uX29wdGlvbnMsIHBsYXRmb3JtX29wdGlvbnMs
IGJhc2UsIHdpbgorZnJvbSB3ZWJraXRweS5yZXN1bHRzLm9wdGlvbnMgaW1wb3J0IHVwbG9hZF9v
cHRpb25zCisKK0VYQ0VQVElPTkFMX0VYSVRfU1RBVFVTID0gLTEKK0lOVEVSUlVQVF9FWElUX1NU
QVRVUyA9IC0yCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitkZWYg
bWFpbihhcmd2LCBzdGRvdXQsIHN0ZGVycik6CisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlX2Fy
Z3MoYXJndikKKyAgICBob3N0ID0gSG9zdCgpCisKKyAgICB0cnk6CisgICAgICAgIG9wdGlvbnMu
d2Via2l0X3Rlc3RfcnVubmVyID0gVHJ1ZQorICAgICAgICBwb3J0ID0gaG9zdC5wb3J0X2ZhY3Rv
cnkuZ2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMpCisgICAgZXhjZXB0IE5vdEltcGxlbWVu
dGVkRXJyb3IgYXMgZToKKyAgICAgICAgcHJpbnQoc3RyKGUpLCBmaWxlPXN0ZGVycikKKyAgICAg
ICAgcmV0dXJuIEVYQ0VQVElPTkFMX0VYSVRfU1RBVFVTCisKKyAgICAjIFNvbWUgcGxhdGZvcm1z
IGRvIG5vdCBzdXBwb3J0IEFQSSB0ZXN0cworICAgIGRvZXNfbm90X3N1cHBvcnRfYXBpX3Rlc3Rz
ID0gWydpb3MtZGV2aWNlJ10KKyAgICBpZiBwb3J0Lm9wZXJhdGluZ19zeXN0ZW0oKSBpbiBkb2Vz
X25vdF9zdXBwb3J0X2FwaV90ZXN0czoKKyAgICAgICAgcHJpbnQoJ3t9IGNhbm5vdCBydW4gQVBJ
IHRlc3RzJy5mb3JtYXQocG9ydC5vcGVyYXRpbmdfc3lzdGVtKCkpLCBmaWxlPXN0ZGVycikKKyAg
ICAgICAgcmV0dXJuIEVYQ0VQVElPTkFMX0VYSVRfU1RBVFVTCisKKyAgICB0cnk6CisgICAgICAg
IHJldHVybiBydW4ocG9ydCwgb3B0aW9ucywgYXJncywgc3RkZXJyKQorICAgIGV4Y2VwdCBLZXli
b2FyZEludGVycnVwdDoKKyAgICAgICAgcmV0dXJuIElOVEVSUlVQVF9FWElUX1NUQVRVUworICAg
IGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZSwgRXhj
ZXB0aW9uKToKKyAgICAgICAgICAgIHByaW50KCdcbiVzIHJhaXNlZDogJXMnICUgKGUuX19jbGFz
c19fLl9fbmFtZV9fLCBzdHIoZSkpLCBmaWxlPXN0ZGVycikKKyAgICAgICAgICAgIHRyYWNlYmFj
ay5wcmludF9leGMoZmlsZT1zdGRlcnIpCisgICAgICAgIHJldHVybiBFWENFUFRJT05BTF9FWElU
X1NUQVRVUworCisKK2RlZiBydW4ocG9ydCwgb3B0aW9ucywgYXJncywgbG9nZ2luZ19zdHJlYW0p
OgorICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICBsb2dnZXIuc2V0TGV2ZWwo
bG9nZ2luZy5ERUJVRyBpZiBvcHRpb25zLnZlcmJvc2UgZWxzZSBsb2dnaW5nLkVSUk9SIGlmIG9w
dGlvbnMucXVpZXQgZWxzZSBsb2dnaW5nLklORk8pCisKKyAgICB0cnk6CisgICAgICAgIHN0cmVh
bSA9IE1ldGVyZWRTdHJlYW0obG9nZ2luZ19zdHJlYW0sIG9wdGlvbnMudmVyYm9zZSwgbG9nZ2Vy
PWxvZ2dlciwgbnVtYmVyX29mX2NvbHVtbnM9cG9ydC5ob3N0LnBsYXRmb3JtLnRlcm1pbmFsX3dp
ZHRoKCksIHByaW50X3RpbWVzdGFtcHM9b3B0aW9ucy50aW1lc3RhbXBzKQorICAgICAgICBtYW5h
Z2VyID0gTWFuYWdlcihwb3J0LCBvcHRpb25zLCBzdHJlYW0pCisKKyAgICAgICAgcmVzdWx0ID0g
bWFuYWdlci5ydW4oYXJncywganNvbl9vdXRwdXQ9b3B0aW9ucy5qc29uX291dHB1dCkKKyAgICAg
ICAgX2xvZy5kZWJ1ZygiVGVzdGluZyBjb21wbGV0ZWQsIEV4aXQgc3RhdHVzOiAlZCIgJSByZXN1
bHQpCisgICAgICAgIHJldHVybiByZXN1bHQKKyAgICBmaW5hbGx5OgorICAgICAgICBzdHJlYW0u
Y2xlYW51cCgpCisKKworZGVmIHBhcnNlX2FyZ3MoYXJncyk6CisgICAgb3B0aW9uX2dyb3VwX2Rl
ZmluaXRpb25zID0gW10KKworICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9ucy5hcHBlbmQoKCdQ
bGF0Zm9ybSBvcHRpb25zJywgcGxhdGZvcm1fb3B0aW9ucygpKSkKKyAgICBvcHRpb25fZ3JvdXBf
ZGVmaW5pdGlvbnMuYXBwZW5kKCgnQ29uZmlndXJhdGlvbiBvcHRpb25zJywgY29uZmlndXJhdGlv
bl9vcHRpb25zKCkpKQorICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9ucy5hcHBlbmQoKCdQcmlu
dGluZyBPcHRpb25zJywgWworICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLXEnLCAnLS1x
dWlldCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9J1J1biBxdWlldGx5IChlcnJvcnMsIHdhcm5pbmdzLCBhbmQg
cHJvZ3Jlc3Mgb25seSknKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy12JywgJy0t
dmVyYm9zZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHA9J0VuYWJsZSB2ZXJib3NlIHByaW50aW5nJyksCisgICAg
ICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXRpbWVzdGFtcHMnLCBhY3Rpb249J3N0b3JlX3Ry
dWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdQ
cmludCB0aW1lc3RhbXBzIGZvciBlYWNoIGxvZ2dlZCBsaW5lJyksCisgICAgICAgIG9wdHBhcnNl
Lm1ha2Vfb3B0aW9uKCctLWpzb24tb3V0cHV0JywgYWN0aW9uPSdzdG9yZScsIGRlZmF1bHQ9Tm9u
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2F2ZSB0ZXN0IHJlc3VsdHMg
YXMgSlNPTiB0byBmaWxlJyksCisgICAgXSkpCisKKyAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlv
bnMuYXBwZW5kKCgnV2ViS2l0IE9wdGlvbnMnLCBbCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0
aW9uKCctZycsICctLWd1YXJkLW1hbGxvYycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9
RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0VuYWJsZSBHdWFyZCBN
YWxsb2MgKE9TIFggb25seSknKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tcm9v
dCcsIGFjdGlvbj0nc3RvcmUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdQ
YXRoIHRvIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGV4ZWN1dGFibGVzIG5lZWRlZCB0byBy
dW4gdGVzdHMuJyksCisgICAgXSkpCisKKyAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnMuYXBw
ZW5kKCgnVGVzdGluZyBPcHRpb25zJywgWworICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbign
LS13dGYtb25seScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0nVGVzdFdURicsIGRlc3Q9
J2FwaV9iaW5hcnknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdPbmx5IGJ1
aWxkLCBjaGVjayBhbmQgcnVuIFRlc3RXVEYnKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRp
b24oJy0td2Via2l0LW9ubHknLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J1Rlc3RXZWJL
aXRBUEknLCBkZXN0PSdhcGlfYmluYXJ5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGVscD0nT25seSBjaGVjayBhbmQgcnVuIFRlc3RXZWJLaXRBUEknKSwKKyAgICAgICAgb3B0cGFy
c2UubWFrZV9vcHRpb24oJy0td2ViLWNvcmUtb25seScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBj
b25zdD0nVGVzdFdlYkNvcmUnLCBkZXN0PSdhcGlfYmluYXJ5JywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVscD0nT25seSBjaGVjayBhbmQgcnVuIFRlc3RXZWJDb3JlLmV4ZSAoV2lu
ZG93cyBvbmx5KScpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS13ZWJraXQtbGVn
YWN5LW9ubHknLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J1Rlc3RXZWJLaXRMZWdhY3kn
LCBkZXN0PSdhcGlfYmluYXJ5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0n
T25seSBjaGVjayBhbmQgcnVuIFRlc3RXZWJLaXRMZWdhY3kuZXhlIChXaW5kb3dzIG9ubHkpJyks
CisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctZCcsICctLWR1bXAnLCBhY3Rpb249J3N0
b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSdEdW1wIGFsbCB0ZXN0IG5hbWVzIHdpdGhvdXQgcnVubmluZyB0aGVtJyksCisgICAgICAg
IG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkJywgZGVzdD0nYnVpbGQnLCBhY3Rpb249J3N0
b3JlX3RydWUnLCBkZWZhdWx0PVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl
bHA9J0NoZWNrIHRvIGVuc3VyZSB0aGUgYnVpbGQgaXMgdXAtdG8tZGF0ZSAoZGVmYXVsdCkuJyks
CisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLW5vLWJ1aWxkJywgZGVzdD0nYnVpbGQn
LCBhY3Rpb249J3N0b3JlX2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0iRG9uJ3QgY2hlY2sgdG8gc2VlIGlmIHRoZSBidWlsZCBpcyB1cC10by1kYXRlLiIpLAorICAg
ICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS10aW1lb3V0JywgZGVmYXVsdD0zMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nTnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCBi
ZWZvcmUgYSB0ZXN0IHRpbWVzIG91dCcpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbign
LS1uby10aW1lb3V0JywgZGVzdD0ndGltZW91dCcsIGFjdGlvbj0nc3RvcmVfZmFsc2UnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdEaXNhYmxlIHRpbWVvdXRzIGZvciBhbGwg
dGVzdHMnKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0taXRlcmF0aW9ucycsIHR5
cGU9J2ludCcsIGRlZmF1bHQ9MSwgaGVscD0nTnVtYmVyIG9mIHRpbWVzIHRvIHJ1biB0aGUgc2V0
IG9mIHRlc3RzIChlLmcuIEFCQ0FCQ0FCQyknKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRp
b24oJy0tcmVwZWF0LWVhY2gnLCB0eXBlPSdpbnQnLCBkZWZhdWx0PTEsIGhlbHA9J051bWJlciBv
ZiB0aW1lcyB0byBydW4gZWFjaCB0ZXN0IChlLmcuIEFBQUJCQkNDQyknKSwKKworICAgICAgICAj
IEZJWE1FOiBSZW1vdmUgdGhlIGRlZmF1bHQsIEFQSSB0ZXN0cyBzaG91bGQgYmUgbXVsdGlwcm9j
ZXNzCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWNoaWxkLXByb2Nlc3NlcycsIGRl
ZmF1bHQ9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nTnVtYmVyIG9mIHBy
b2Nlc3NlcyB0byBydW4gaW4gcGFyYWxsZWwuJyksCisKKyAgICAgICAgIyBGSVhNRTogRGVmYXVs
dCBzaG91bGQgYmUgZmFsc2UsIEFQSSB0ZXN0cyBzaG91bGQgbm90IGJlIGZvcmNlZCB0byBydW4g
c2luZ2x5CisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXJ1bi1zaW5nbHknLCBhY3Rp
b249J3N0b3JlX3RydWUnLCBkZWZhdWx0PVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlbHA9J1J1biBhIHNlcGFyYXRlIHByb2Nlc3MgZm9yIGVhY2ggdGVzdCcpLAorCisgICAg
ICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWZvcmNlJywgYWN0aW9uPSdzdG9yZV90cnVlJywg
ZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUnVuIGFs
bCB0ZXN0cywgZXZlbiBESVNBQkxFRCB0ZXN0cycpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29w
dGlvbignLS1hZGRpdGlvbmFsLWVudi12YXInLCB0eXBlPSdzdHJpbmcnLCBhY3Rpb249J2FwcGVu
ZCcsIGRlZmF1bHQ9W10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1Bhc3Nl
cyB0aGF0IGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSB0ZXN0cyAoLS1hZGRpdGlvbmFsLWVu
di12YXI9TkFNRT1WQUxVRSknKSwKKyAgICBdKSkKKyAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlv
bnMuYXBwZW5kKCgnVXBsb2FkIE9wdGlvbnMnLCB1cGxvYWRfb3B0aW9ucygpKSkKKworICAgIG9w
dGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoCisgICAgICAgIHVzYWdlPSdydW4t
YXBpLXRlc3RzIFtvcHRpb25zXSBbPHRlc3QgbmFtZXM+Li4uXScsCisgICAgICAgIGRlc2NyaXB0
aW9uPSIiIkJ5IGRlZmF1bHQsIHJ1bi1hcGktdGVzdHMgd2lsbCBydW4gYWxsIEFQSSB0ZXN0cy4g
SXQgYWxzbyBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB0ZXN0cyBvZiB0aGUgXAorZm9ybWF0
IDxzdWl0ZT4uPHRlc3Q+IG9yIDxjYW5vbmljYWxpemVkIGJpbmFyeSBuYW1lPi48c3VpdGU+Ljx0
ZXN0Pi4gTm90ZSB0aGF0IGluIHRoZSBjYXNlIHdoZXJlIGEgYmluYXJ5IGlzIG5vdCBcCitzcGVj
aWZpZWQsIG9uZSB3aWxsIGJlIGluZmVycmVkIGJ5IGxpc3RpbmcgYWxsIGF2YWlsYWJsZSB0ZXN0
cy4gU3BlY2lmeWluZyBqdXN0IGEgYmluYXJ5IG9yIGp1c3QgYSBzdWl0ZSB3aWxsIGNhdXNlIGV2
ZXJ5IFwKK3Rlc3QgY29udGFpbmVkIHdpdGhpbiB0byBiZSBydW4uIFRoZSBjYW5vbmljYWxpemVk
IGJpbmFyeSBuYW1lIGlzIHRoZSBiaW5hcnkgbmFtZSB3aXRoIGFueSBmaWxlbmFtZSBleHRlbnNp
b24gXAorc3RyaXBwZWQuIEZvciBVbml4IHBvcnRzLCB0aGVzZSBiaW5hcmllcyBhcmUge30gYW5k
IHt9LiBGb3IgV2luZG93cyBwb3J0cywgdGhleSBhcmUge30gYW5kIHt9LiIiIi5mb3JtYXQoCisg
ICAgICAgICAgICAnLCAnLmpvaW4oYmFzZS5Qb3J0LkFQSV9URVNUX0JJTkFSWV9OQU1FU1s6LTFd
KSwgYmFzZS5Qb3J0LkFQSV9URVNUX0JJTkFSWV9OQU1FU1stMV0sCisgICAgICAgICAgICAnLCAn
LmpvaW4od2luLldpblBvcnQuQVBJX1RFU1RfQklOQVJZX05BTUVTWzotMV0pLCB3aW4uV2luUG9y
dC5BUElfVEVTVF9CSU5BUllfTkFNRVNbLTFdLAorICAgICkpCisKKyAgICBmb3IgZ3JvdXBfbmFt
ZSwgZ3JvdXBfb3B0aW9ucyBpbiBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnM6CisgICAgICAgIG9w
dGlvbl9ncm91cCA9IG9wdHBhcnNlLk9wdGlvbkdyb3VwKG9wdGlvbl9wYXJzZXIsIGdyb3VwX25h
bWUpCisgICAgICAgIG9wdGlvbl9ncm91cC5hZGRfb3B0aW9ucyhncm91cF9vcHRpb25zKQorICAg
ICAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAob3B0aW9uX2dyb3VwKQorCisgICAg
cmV0dXJuIG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisKK2lmIF9fbmFtZV9fID09
ICdfX21haW5fXyc6CisgICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0sIHN5cy5zdGRvdXQs
IHN5cy5zdGRlcnIpKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5
L3NldHVwLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNv
cmVweS9zZXR1cC5weQkocmV2aXNpb24gMjc3MDIwKQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0Y29yZXB5L3NldHVwLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBA
IGRlZiByZWFkbWUoKToKIAogc2V0dXAoCiAgICAgbmFtZT0nd2Via2l0Y29yZXB5JywKLSAgICB2
ZXJzaW9uPScwLjUuMTMnLAorICAgIHZlcnNpb249JzAuNS4xNCcsCiAgICAgZGVzY3JpcHRpb249
J0xpYnJhcnkgY29udGFpbmluZyB2YXJpb3VzIFB5dGhvbiBzdXBwb3J0IGNsYXNzZXMgYW5kIGZ1
bmN0aW9ucy4nLAogICAgIGxvbmdfZGVzY3JpcHRpb249cmVhZG1lKCksCiAgICAgY2xhc3NpZmll
cnM9WwpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNv
cmVweS9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5CShyZXZpc2lvbiAyNzcwMjApCisr
KyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5p
dF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIGZyb20gd2Via2l0Y29yZXB5
Lm91dHB1dF9jYXB0dXJlIGltcG9ydCAKIGZyb20gd2Via2l0Y29yZXB5LnRhc2tfcG9vbCBpbXBv
cnQgVGFza1Bvb2wKIGZyb20gd2Via2l0Y29yZXB5LmNyZWRlbnRpYWxzIGltcG9ydCBjcmVkZW50
aWFscwogCi12ZXJzaW9uID0gVmVyc2lvbigwLCA1LCAxMykKK3ZlcnNpb24gPSBWZXJzaW9uKDAs
IDUsIDE0KQogCiBmcm9tIHdlYmtpdGNvcmVweS5hdXRvaW5zdGFsbCBpbXBvcnQgUGFja2FnZSwg
QXV0b0luc3RhbGwKIGlmIHN5cy52ZXJzaW9uX2luZm8gPiAoMywgMCk6CkluZGV4OiBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rhc2tfcG9vbC5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0
Y29yZXB5L3Rhc2tfcG9vbC5weQkocmV2aXNpb24gMjc3MDIwKQorKysgVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90YXNrX3Bvb2wucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTMzMiw2ICszMzIsOCBAQCBjbGFzcyBUYXNrUG9vbChvYmplY3QpOgogICAgICAg
ICBzZWxmLmJsb2NrX3NpemUgPSBibG9ja19zaXplCiAKICAgICBkZWYgX19lbnRlcl9fKHNlbGYp
OgorICAgICAgICBmcm9tIG1vY2sgaW1wb3J0IHBhdGNoCisKICAgICAgICAgd2l0aCBUaW1lb3V0
KHNlY29uZHM9MTAsIHBhdGNoPUZhbHNlLCBoYW5kbGVyPXNlbGYuRXhjZXB0aW9uKCdGYWlsZWQg
dG8gc3RhcnQgYWxsIHdvcmtlcnMnKSk6CiAgICAgICAgICAgICBmb3Igd29ya2VyIGluIHNlbGYu
d29ya2VyczoKICAgICAgICAgICAgICAgICB3b3JrZXIuc3RhcnQoKQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9hcGlfdGVzdHMvcnVuX2FwaV90ZXN0cy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2FwaV90ZXN0cy9ydW5fYXBpX3Rlc3RzLnB5CShyZXZpc2lv
biAyNzcwMjApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2FwaV90ZXN0cy9ydW5fYXBpX3Rl
c3RzLnB5CShub25leGlzdGVudCkKQEAgLTEsMTY0ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKLSMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotIyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0jIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUwotIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlv
bgotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcHRwYXJzZQotaW1wb3J0IHN5cwotaW1wb3J0IHRy
YWNlYmFjawotCi1mcm9tIHdlYmtpdHB5LmFwaV90ZXN0cy5tYW5hZ2VyIGltcG9ydCBNYW5hZ2Vy
Ci1mcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0Ci1mcm9tIHdlYmtpdHB5Lmxh
eW91dF90ZXN0cy52aWV3cy5tZXRlcmVkX3N0cmVhbSBpbXBvcnQgTWV0ZXJlZFN0cmVhbQotZnJv
bSB3ZWJraXRweS5wb3J0IGltcG9ydCBjb25maWd1cmF0aW9uX29wdGlvbnMsIHBsYXRmb3JtX29w
dGlvbnMsIGJhc2UsIHdpbgotZnJvbSB3ZWJraXRweS5yZXN1bHRzLm9wdGlvbnMgaW1wb3J0IHVw
bG9hZF9vcHRpb25zCi0KLUVYQ0VQVElPTkFMX0VYSVRfU1RBVFVTID0gLTEKLUlOVEVSUlVQVF9F
WElUX1NUQVRVUyA9IC0yCi0KLV9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKLQot
Ci1kZWYgbWFpbihhcmd2LCBzdGRvdXQsIHN0ZGVycik6Ci0gICAgb3B0aW9ucywgYXJncyA9IHBh
cnNlX2FyZ3MoYXJndikKLSAgICBob3N0ID0gSG9zdCgpCi0KLSAgICB0cnk6Ci0gICAgICAgIG9w
dGlvbnMud2Via2l0X3Rlc3RfcnVubmVyID0gVHJ1ZQotICAgICAgICBwb3J0ID0gaG9zdC5wb3J0
X2ZhY3RvcnkuZ2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMpCi0gICAgZXhjZXB0IE5vdElt
cGxlbWVudGVkRXJyb3IgYXMgZToKLSAgICAgICAgcHJpbnQoc3RyKGUpLCBmaWxlPXN0ZGVycikK
LSAgICAgICAgcmV0dXJuIEVYQ0VQVElPTkFMX0VYSVRfU1RBVFVTCi0KLSAgICAjIFNvbWUgcGxh
dGZvcm1zIGRvIG5vdCBzdXBwb3J0IEFQSSB0ZXN0cwotICAgIGRvZXNfbm90X3N1cHBvcnRfYXBp
X3Rlc3RzID0gWydpb3MtZGV2aWNlJ10KLSAgICBpZiBwb3J0Lm9wZXJhdGluZ19zeXN0ZW0oKSBp
biBkb2VzX25vdF9zdXBwb3J0X2FwaV90ZXN0czoKLSAgICAgICAgcHJpbnQoJ3t9IGNhbm5vdCBy
dW4gQVBJIHRlc3RzJy5mb3JtYXQocG9ydC5vcGVyYXRpbmdfc3lzdGVtKCkpLCBmaWxlPXN0ZGVy
cikKLSAgICAgICAgcmV0dXJuIEVYQ0VQVElPTkFMX0VYSVRfU1RBVFVTCi0KLSAgICB0cnk6Ci0g
ICAgICAgIHJldHVybiBydW4ocG9ydCwgb3B0aW9ucywgYXJncywgc3RkZXJyKQotICAgIGV4Y2Vw
dCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgcmV0dXJuIElOVEVSUlVQVF9FWElUX1NUQVRV
UwotICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2Uo
ZSwgRXhjZXB0aW9uKToKLSAgICAgICAgICAgIHByaW50KCdcbiVzIHJhaXNlZDogJXMnICUgKGUu
X19jbGFzc19fLl9fbmFtZV9fLCBzdHIoZSkpLCBmaWxlPXN0ZGVycikKLSAgICAgICAgICAgIHRy
YWNlYmFjay5wcmludF9leGMoZmlsZT1zdGRlcnIpCi0gICAgICAgIHJldHVybiBFWENFUFRJT05B
TF9FWElUX1NUQVRVUwotCi0KLWRlZiBydW4ocG9ydCwgb3B0aW9ucywgYXJncywgbG9nZ2luZ19z
dHJlYW0pOgotICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKLSAgICBsb2dnZXIuc2V0
TGV2ZWwobG9nZ2luZy5ERUJVRyBpZiBvcHRpb25zLnZlcmJvc2UgZWxzZSBsb2dnaW5nLkVSUk9S
IGlmIG9wdGlvbnMucXVpZXQgZWxzZSBsb2dnaW5nLklORk8pCi0KLSAgICB0cnk6Ci0gICAgICAg
IHN0cmVhbSA9IE1ldGVyZWRTdHJlYW0obG9nZ2luZ19zdHJlYW0sIG9wdGlvbnMudmVyYm9zZSwg
bG9nZ2VyPWxvZ2dlciwgbnVtYmVyX29mX2NvbHVtbnM9cG9ydC5ob3N0LnBsYXRmb3JtLnRlcm1p
bmFsX3dpZHRoKCksIHByaW50X3RpbWVzdGFtcHM9b3B0aW9ucy50aW1lc3RhbXBzKQotICAgICAg
ICBtYW5hZ2VyID0gTWFuYWdlcihwb3J0LCBvcHRpb25zLCBzdHJlYW0pCi0KLSAgICAgICAgcmVz
dWx0ID0gbWFuYWdlci5ydW4oYXJncywganNvbl9vdXRwdXQ9b3B0aW9ucy5qc29uX291dHB1dCkK
LSAgICAgICAgX2xvZy5kZWJ1ZygiVGVzdGluZyBjb21wbGV0ZWQsIEV4aXQgc3RhdHVzOiAlZCIg
JSByZXN1bHQpCi0gICAgICAgIHJldHVybiByZXN1bHQKLSAgICBmaW5hbGx5OgotICAgICAgICBz
dHJlYW0uY2xlYW51cCgpCi0KLQotZGVmIHBhcnNlX2FyZ3MoYXJncyk6Ci0gICAgb3B0aW9uX2dy
b3VwX2RlZmluaXRpb25zID0gW10KLQotICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9ucy5hcHBl
bmQoKCdQbGF0Zm9ybSBvcHRpb25zJywgcGxhdGZvcm1fb3B0aW9ucygpKSkKLSAgICBvcHRpb25f
Z3JvdXBfZGVmaW5pdGlvbnMuYXBwZW5kKCgnQ29uZmlndXJhdGlvbiBvcHRpb25zJywgY29uZmln
dXJhdGlvbl9vcHRpb25zKCkpKQotICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9ucy5hcHBlbmQo
KCdQcmludGluZyBPcHRpb25zJywgWwotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLXEn
LCAnLS1xdWlldCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1J1biBxdWlldGx5IChlcnJvcnMsIHdhcm5pbmdz
LCBhbmQgcHJvZ3Jlc3Mgb25seSknKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy12
JywgJy0tdmVyYm9zZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0VuYWJsZSB2ZXJib3NlIHByaW50aW5nJyks
Ci0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXRpbWVzdGFtcHMnLCBhY3Rpb249J3N0
b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSdQcmludCB0aW1lc3RhbXBzIGZvciBlYWNoIGxvZ2dlZCBsaW5lJyksCi0gICAgICAgIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKCctLWpzb24tb3V0cHV0JywgYWN0aW9uPSdzdG9yZScsIGRlZmF1
bHQ9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2F2ZSB0ZXN0IHJl
c3VsdHMgYXMgSlNPTiB0byBmaWxlJyksCi0gICAgXSkpCi0KLSAgICBvcHRpb25fZ3JvdXBfZGVm
aW5pdGlvbnMuYXBwZW5kKCgnV2ViS2l0IE9wdGlvbnMnLCBbCi0gICAgICAgIG9wdHBhcnNlLm1h
a2Vfb3B0aW9uKCctZycsICctLWd1YXJkLW1hbGxvYycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRl
ZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0VuYWJsZSBH
dWFyZCBNYWxsb2MgKE9TIFggb25seSknKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24o
Jy0tcm9vdCcsIGFjdGlvbj0nc3RvcmUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSdQYXRoIHRvIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGV4ZWN1dGFibGVzIG5lZWRl
ZCB0byBydW4gdGVzdHMuJyksCi0gICAgXSkpCi0KLSAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlv
bnMuYXBwZW5kKCgnVGVzdGluZyBPcHRpb25zJywgWwotICAgICAgICBvcHRwYXJzZS5tYWtlX29w
dGlvbignLS13dGYtb25seScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0nVGVzdFdURics
IGRlc3Q9J2FwaV9iaW5hcnknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdP
bmx5IGJ1aWxkLCBjaGVjayBhbmQgcnVuIFRlc3RXVEYnKSwKLSAgICAgICAgb3B0cGFyc2UubWFr
ZV9vcHRpb24oJy0td2Via2l0LW9ubHknLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J1Rl
c3RXZWJLaXRBUEknLCBkZXN0PSdhcGlfYmluYXJ5JywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVscD0nT25seSBjaGVjayBhbmQgcnVuIFRlc3RXZWJLaXRBUEknKSwKLSAgICAgICAg
b3B0cGFyc2UubWFrZV9vcHRpb24oJy0td2ViLWNvcmUtb25seScsIGFjdGlvbj0nc3RvcmVfY29u
c3QnLCBjb25zdD0nVGVzdFdlYkNvcmUnLCBkZXN0PSdhcGlfYmluYXJ5JywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVscD0nT25seSBjaGVjayBhbmQgcnVuIFRlc3RXZWJDb3JlLmV4
ZSAoV2luZG93cyBvbmx5KScpLAotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS13ZWJr
aXQtbGVnYWN5LW9ubHknLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J1Rlc3RXZWJLaXRM
ZWdhY3knLCBkZXN0PSdhcGlfYmluYXJ5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGVscD0nT25seSBjaGVjayBhbmQgcnVuIFRlc3RXZWJLaXRMZWdhY3kuZXhlIChXaW5kb3dzIG9u
bHkpJyksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctZCcsICctLWR1bXAnLCBhY3Rp
b249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWxwPSdEdW1wIGFsbCB0ZXN0IG5hbWVzIHdpdGhvdXQgcnVubmluZyB0aGVtJyksCi0g
ICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkJywgZGVzdD0nYnVpbGQnLCBhY3Rp
b249J3N0b3JlX3RydWUnLCBkZWZhdWx0PVRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlbHA9J0NoZWNrIHRvIGVuc3VyZSB0aGUgYnVpbGQgaXMgdXAtdG8tZGF0ZSAoZGVmYXVs
dCkuJyksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLW5vLWJ1aWxkJywgZGVzdD0n
YnVpbGQnLCBhY3Rpb249J3N0b3JlX2ZhbHNlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVscD0iRG9uJ3QgY2hlY2sgdG8gc2VlIGlmIHRoZSBidWlsZCBpcyB1cC10by1kYXRlLiIp
LAotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS10aW1lb3V0JywgZGVmYXVsdD0zMCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nTnVtYmVyIG9mIHNlY29uZHMgdG8g
d2FpdCBiZWZvcmUgYSB0ZXN0IHRpbWVzIG91dCcpLAotICAgICAgICBvcHRwYXJzZS5tYWtlX29w
dGlvbignLS1uby10aW1lb3V0JywgZGVzdD0ndGltZW91dCcsIGFjdGlvbj0nc3RvcmVfZmFsc2Un
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdEaXNhYmxlIHRpbWVvdXRzIGZv
ciBhbGwgdGVzdHMnKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0taXRlcmF0aW9u
cycsIHR5cGU9J2ludCcsIGRlZmF1bHQ9MSwgaGVscD0nTnVtYmVyIG9mIHRpbWVzIHRvIHJ1biB0
aGUgc2V0IG9mIHRlc3RzIChlLmcuIEFCQ0FCQ0FCQyknKSwKLSAgICAgICAgb3B0cGFyc2UubWFr
ZV9vcHRpb24oJy0tcmVwZWF0LWVhY2gnLCB0eXBlPSdpbnQnLCBkZWZhdWx0PTEsIGhlbHA9J051
bWJlciBvZiB0aW1lcyB0byBydW4gZWFjaCB0ZXN0IChlLmcuIEFBQUJCQkNDQyknKSwKLQotICAg
ICAgICAjIEZJWE1FOiBSZW1vdmUgdGhlIGRlZmF1bHQsIEFQSSB0ZXN0cyBzaG91bGQgYmUgbXVs
dGlwcm9jZXNzCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWNoaWxkLXByb2Nlc3Nl
cycsIGRlZmF1bHQ9MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nTnVtYmVy
IG9mIHByb2Nlc3NlcyB0byBydW4gaW4gcGFyYWxsZWwuJyksCi0KLSAgICAgICAgIyBGSVhNRTog
RGVmYXVsdCBzaG91bGQgYmUgZmFsc2UsIEFQSSB0ZXN0cyBzaG91bGQgbm90IGJlIGZvcmNlZCB0
byBydW4gc2luZ2x5Ci0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXJ1bi1zaW5nbHkn
LCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PVRydWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9J1J1biBhIHNlcGFyYXRlIHByb2Nlc3MgZm9yIGVhY2ggdGVzdCcpLAot
Ci0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWZvcmNlJywgYWN0aW9uPSdzdG9yZV90
cnVlJywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0n
UnVuIGFsbCB0ZXN0cywgZXZlbiBESVNBQkxFRCB0ZXN0cycpLAotICAgICAgICBvcHRwYXJzZS5t
YWtlX29wdGlvbignLS1hZGRpdGlvbmFsLWVudi12YXInLCB0eXBlPSdzdHJpbmcnLCBhY3Rpb249
J2FwcGVuZCcsIGRlZmF1bHQ9W10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
J1Bhc3NlcyB0aGF0IGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSB0ZXN0cyAoLS1hZGRpdGlv
bmFsLWVudi12YXI9TkFNRT1WQUxVRSknKSwKLSAgICBdKSkKLSAgICBvcHRpb25fZ3JvdXBfZGVm
aW5pdGlvbnMuYXBwZW5kKCgnVXBsb2FkIE9wdGlvbnMnLCB1cGxvYWRfb3B0aW9ucygpKSkKLQot
ICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoCi0gICAgICAgIHVzYWdl
PSdydW4tYXBpLXRlc3RzIFtvcHRpb25zXSBbPHRlc3QgbmFtZXM+Li4uXScsCi0gICAgICAgIGRl
c2NyaXB0aW9uPSIiIkJ5IGRlZmF1bHQsIHJ1bi1hcGktdGVzdHMgd2lsbCBydW4gYWxsIEFQSSB0
ZXN0cy4gSXQgYWxzbyBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB0ZXN0cyBvZiB0aGUgXAot
Zm9ybWF0IDxzdWl0ZT4uPHRlc3Q+IG9yIDxjYW5vbmljYWxpemVkIGJpbmFyeSBuYW1lPi48c3Vp
dGU+Ljx0ZXN0Pi4gTm90ZSB0aGF0IGluIHRoZSBjYXNlIHdoZXJlIGEgYmluYXJ5IGlzIG5vdCBc
Ci1zcGVjaWZpZWQsIG9uZSB3aWxsIGJlIGluZmVycmVkIGJ5IGxpc3RpbmcgYWxsIGF2YWlsYWJs
ZSB0ZXN0cy4gU3BlY2lmeWluZyBqdXN0IGEgYmluYXJ5IG9yIGp1c3QgYSBzdWl0ZSB3aWxsIGNh
dXNlIGV2ZXJ5IFwKLXRlc3QgY29udGFpbmVkIHdpdGhpbiB0byBiZSBydW4uIFRoZSBjYW5vbmlj
YWxpemVkIGJpbmFyeSBuYW1lIGlzIHRoZSBiaW5hcnkgbmFtZSB3aXRoIGFueSBmaWxlbmFtZSBl
eHRlbnNpb24gXAotc3RyaXBwZWQuIEZvciBVbml4IHBvcnRzLCB0aGVzZSBiaW5hcmllcyBhcmUg
e30gYW5kIHt9LiBGb3IgV2luZG93cyBwb3J0cywgdGhleSBhcmUge30gYW5kIHt9LiIiIi5mb3Jt
YXQoCi0gICAgICAgICAgICAnLCAnLmpvaW4oYmFzZS5Qb3J0LkFQSV9URVNUX0JJTkFSWV9OQU1F
U1s6LTFdKSwgYmFzZS5Qb3J0LkFQSV9URVNUX0JJTkFSWV9OQU1FU1stMV0sCi0gICAgICAgICAg
ICAnLCAnLmpvaW4od2luLldpblBvcnQuQVBJX1RFU1RfQklOQVJZX05BTUVTWzotMV0pLCB3aW4u
V2luUG9ydC5BUElfVEVTVF9CSU5BUllfTkFNRVNbLTFdLAotICAgICkpCi0KLSAgICBmb3IgZ3Jv
dXBfbmFtZSwgZ3JvdXBfb3B0aW9ucyBpbiBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnM6Ci0gICAg
ICAgIG9wdGlvbl9ncm91cCA9IG9wdHBhcnNlLk9wdGlvbkdyb3VwKG9wdGlvbl9wYXJzZXIsIGdy
b3VwX25hbWUpCi0gICAgICAgIG9wdGlvbl9ncm91cC5hZGRfb3B0aW9ucyhncm91cF9vcHRpb25z
KQotICAgICAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAob3B0aW9uX2dyb3VwKQot
Ci0gICAgcmV0dXJuIG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncyhhcmdzKQotCi0KLWlmIF9fbmFt
ZV9fID09ICdfX21haW5fXyc6Ci0gICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0sIHN5cy5z
dGRvdXQsIHN5cy5zdGRlcnIpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9hcGlfdGVz
dHMvcnVubmVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvYXBpX3Rl
c3RzL3J1bm5lci5weQkocmV2aXNpb24gMjc3MDIwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9hcGlfdGVzdHMvcnVubmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5
cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDEzMSArMjUsMzUgQEAgaW1wb3J0IGxvZ2dp
bmcKIGltcG9ydCB0aW1lCiAKIGZyb20gd2Via2l0Y29yZXB5IGltcG9ydCBzdHJpbmdfdXRpbHMK
K2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBUYXNrUG9vbAogCi1mcm9tIHdlYmtpdHB5LmNvbW1v
biBpbXBvcnQgbWVzc2FnZV9wb29sCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5pdGVyYXRpb25fY29t
cGF0aWJpbGl0eSBpbXBvcnQgaXRlcml0ZW1zCiBmcm9tIHdlYmtpdHB5LnBvcnQuc2VydmVyX3By
b2Nlc3MgaW1wb3J0IFNlcnZlclByb2Nlc3MsIF9sb2cgYXMgc2VydmVyX3Byb2Nlc3NfbG9nZ2Vy
CiBmcm9tIHdlYmtpdHB5Lnhjb2RlLnNpbXVsYXRlZF9kZXZpY2UgaW1wb3J0IFNpbXVsYXRlZERl
dmljZU1hbmFnZXIKIAorX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCi1jbGFz
cyBSdW5uZXIob2JqZWN0KToKLSAgICBTVEFUVVNfUEFTU0VEID0gMAotICAgIFNUQVRVU19GQUlM
RUQgPSAxCi0gICAgU1RBVFVTX0NSQVNIRUQgPSAyCi0gICAgU1RBVFVTX1RJTUVPVVQgPSAzCi0g
ICAgU1RBVFVTX0RJU0FCTEVEID0gNAotICAgIFNUQVRVU19SVU5OSU5HID0gNQotCi0gICAgTkFN
RV9GT1JfU1RBVFVTID0gWwotICAgICAgICAnUGFzc2VkJywKLSAgICAgICAgJ0ZhaWxlZCcsCi0g
ICAgICAgICdDcmFzaGVkJywKLSAgICAgICAgJ1RpbWVvdXQnLAotICAgICAgICAnRGlzYWJsZWQn
LAotICAgIF0KLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBwcmludGVyKToKLSAgICAg
ICAgc2VsZi5wb3J0ID0gcG9ydAotICAgICAgICBzZWxmLnByaW50ZXIgPSBwcmludGVyCi0gICAg
ICAgIHNlbGYudGVzdHNfcnVuID0gMAotICAgICAgICBzZWxmLl9udW1fd29ya2VycyA9IDEKLSAg
ICAgICAgc2VsZi5faGFzX2xvZ2dlZF9mb3JfdGVzdCA9IFRydWUgICMgU3VwcHJlc3MgYW4gZW1w
dHkgbGluZSBiZXR3ZWVuICJSdW5uaW5nIHRlc3RzIiBhbmQgdGhlIGZpcnN0IHRlc3QncyBvdXRw
dXQuCi0gICAgICAgIHNlbGYucmVzdWx0cyA9IHt9Ci0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAg
ZGVmIF9zaGFyZF90ZXN0cyh0ZXN0cyk6Ci0gICAgICAgIHNoYXJkcyA9IHt9Ci0gICAgICAgIGZv
ciB0ZXN0IGluIHRlc3RzOgotICAgICAgICAgICAgc2hhcmRfcHJlZml4ID0gJy4nLmpvaW4odGVz
dC5zcGxpdCgnLicpWzotMV0pCi0gICAgICAgICAgICBpZiBzaGFyZF9wcmVmaXggbm90IGluIHNo
YXJkczoKLSAgICAgICAgICAgICAgICBzaGFyZHNbc2hhcmRfcHJlZml4XSA9IFtdCi0gICAgICAg
ICAgICBzaGFyZHNbc2hhcmRfcHJlZml4XS5hcHBlbmQodGVzdCkKLSAgICAgICAgcmV0dXJuIHNo
YXJkcwogCi0gICAgIyBGSVhNRSBBUEkgdGVzdHMgc2hvdWxkIHJ1biBhcyBhbiBhcHAsIHdlIHdv
bid0IG5lZWQgdGhpcyBmdW5jdGlvbiA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NTIwND4KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNvbW1hbmRfZm9yX3Bv
cnQocG9ydCwgYXJncyk6Ci0gICAgICAgIGlmIChwb3J0LmdldF9vcHRpb24oJ2ZvcmNlJykpOgot
ICAgICAgICAgICAgYXJncy5hcHBlbmQoJy0tZ3Rlc3RfYWxzb19ydW5fZGlzYWJsZWRfdGVzdHM9
MScpCi0gICAgICAgIGlmICdzaW11bGF0b3InIGluIHBvcnQucG9ydF9uYW1lOgotICAgICAgICAg
ICAgYXNzZXJ0IFNpbXVsYXRlZERldmljZU1hbmFnZXIuSU5JVElBTElaRURfREVWSUNFUwotICAg
ICAgICAgICAgcmV0dXJuIFsnL3Vzci9iaW4veGNydW4nLCAnc2ltY3RsJywgJ3NwYXduJywgU2lt
dWxhdGVkRGV2aWNlTWFuYWdlci5JTklUSUFMSVpFRF9ERVZJQ0VTWzBdLnVkaWRdICsgYXJncwot
ICAgICAgICBlbGlmICdkZXZpY2UnIGluIHBvcnQucG9ydF9uYW1lOgotICAgICAgICAgICAgcmFp
c2UgUnVudGltZUVycm9yKCdSdW5uaW5nIGFwaSB0ZXN0cyBvbiB7fSBpcyBub3Qgc3VwcG9ydGVk
Jy5mb3JtYXQocG9ydC5wb3J0X25hbWUpKQotICAgICAgICBlbGlmIHBvcnQuaG9zdC5wbGF0Zm9y
bS5pc193aW4oKToKLSAgICAgICAgICAgIGFyZ3NbMF0gPSBvcy5wYXRoLnNwbGl0ZXh0KGFyZ3Nb
MF0pWzBdICsgJy5leGUnCi0gICAgICAgIHJldHVybiBhcmdzCi0KLSAgICBkZWYgcnVuKHNlbGYs
IHRlc3RzLCBudW1fd29ya2Vycyk6Ci0gICAgICAgIGlmIG5vdCB0ZXN0czoKLSAgICAgICAgICAg
IHJldHVybgotCi0gICAgICAgIHNlbGYucHJpbnRlci53cml0ZV91cGRhdGUoJ1NoYXJkaW5nIHRl
c3RzIC4uLicpCi0gICAgICAgIHNoYXJkcyA9IFJ1bm5lci5fc2hhcmRfdGVzdHModGVzdHMpCi0K
LSAgICAgICAgb3JpZ2luYWxfbGV2ZWwgPSBzZXJ2ZXJfcHJvY2Vzc19sb2dnZXIubGV2ZWwKLSAg
ICAgICAgc2VydmVyX3Byb2Nlc3NfbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuQ1JJVElDQUwpCi0K
LSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5fbnVtX3dvcmtlcnMgPSBtaW4obnVtX3dv
cmtlcnMsIGxlbihzaGFyZHMpKQotICAgICAgICAgICAgd2l0aCBtZXNzYWdlX3Bvb2wuZ2V0KHNl
bGYsIGxhbWJkYSBjYWxsZXI6IF9Xb3JrZXIoY2FsbGVyLCBzZWxmLnBvcnQsIHNoYXJkcyksIHNl
bGYuX251bV93b3JrZXJzKSBhcyBwb29sOgotICAgICAgICAgICAgICAgIHBvb2wucnVuKCgndGVz
dCcsIHNoYXJkKSBmb3Igc2hhcmQsIF8gaW4gaXRlcml0ZW1zKHNoYXJkcykpCi0gICAgICAgIGZp
bmFsbHk6Ci0gICAgICAgICAgICBzZXJ2ZXJfcHJvY2Vzc19sb2dnZXIuc2V0TGV2ZWwob3JpZ2lu
YWxfbGV2ZWwpCi0KLQotICAgIGRlZiBoYW5kbGUoc2VsZiwgbWVzc2FnZV9uYW1lLCBzb3VyY2Us
IHRlc3RfbmFtZT1Ob25lLCBzdGF0dXM9MCwgb3V0cHV0PScnKToKLSAgICAgICAgaWYgbWVzc2Fn
ZV9uYW1lID09ICdkaWRfc3Bhd25fd29ya2VyJzoKLSAgICAgICAgICAgIHJldHVybgorY2xhc3Mg
X1dvcmtlcihvYmplY3QpOgorICAgIGluc3RhbmNlID0gTm9uZQogCi0gICAgICAgIHNvdXJjZSA9
ICcnIGlmIHNlbGYuX251bV93b3JrZXJzID09IDEgZWxzZSBzb3VyY2UgKyAnICcKLSAgICAgICAg
d2lsbF9zdHJlYW1fbG9ncyA9IHNlbGYuX251bV93b3JrZXJzID09IDEgYW5kIHNlbGYucG9ydC5n
ZXRfb3B0aW9uKCd2ZXJib3NlJykKLSAgICAgICAgaWYgbWVzc2FnZV9uYW1lID09ICdlbmRlZF90
ZXN0JzoKLSAgICAgICAgICAgIHVwZGF0ZSA9ICd7fXt9IHt9Jy5mb3JtYXQoc291cmNlLCB0ZXN0
X25hbWUsIFJ1bm5lci5OQU1FX0ZPUl9TVEFUVVNbc3RhdHVzXSkKLQotICAgICAgICAgICAgIyBE
b24ndCBwcmludCB0ZXN0IG91dHB1dCBpZiAtLXF1aWV0LgotICAgICAgICAgICAgaWYgc3RhdHVz
ICE9IFJ1bm5lci5TVEFUVVNfUEFTU0VEIG9yIChvdXRwdXQgYW5kIG5vdCBzZWxmLnBvcnQuZ2V0
X29wdGlvbigncXVpZXQnKSk6Ci0gICAgICAgICAgICAgICAgaWYgbm90IHdpbGxfc3RyZWFtX2xv
Z3M6Ci0gICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIG91dHB1dC5zcGxpdGxpbmVzKCk6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5faGFzX2xvZ2dlZF9mb3JfdGVz
dDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYXNfbG9nZ2VkX2Zvcl90ZXN0
ID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJpbnRlci53cml0ZWxu
KHNvdXJjZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJpbnRlci53cml0ZWxuKCd7
fSAgICB7fScuZm9ybWF0KHNvdXJjZSwgbGluZSkpCi0gICAgICAgICAgICAgICAgc2VsZi5wcmlu
dGVyLndyaXRlbG4odXBkYXRlKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBz
ZWxmLnByaW50ZXIud3JpdGVfdXBkYXRlKHVwZGF0ZSkKLSAgICAgICAgICAgIHNlbGYudGVzdHNf
cnVuICs9IDEKLSAgICAgICAgICAgIHNlbGYucmVzdWx0c1t0ZXN0X25hbWVdID0gKHN0YXR1cywg
b3V0cHV0KQotICAgICAgICAgICAgc2VsZi5faGFzX2xvZ2dlZF9mb3JfdGVzdCA9IEZhbHNlCi0K
LSAgICAgICAgaWYgbWVzc2FnZV9uYW1lID09ICdsb2cnIGFuZCB3aWxsX3N0cmVhbV9sb2dzOgot
ICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKToKLSAgICAgICAgICAg
ICAgICBpZiBub3Qgc2VsZi5faGFzX2xvZ2dlZF9mb3JfdGVzdDoKLSAgICAgICAgICAgICAgICAg
ICAgc2VsZi5faGFzX2xvZ2dlZF9mb3JfdGVzdCA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAg
c2VsZi5wcmludGVyLndyaXRlbG4oc291cmNlKQotICAgICAgICAgICAgICAgIHNlbGYucHJpbnRl
ci53cml0ZWxuKCd7fSAgICB7fScuZm9ybWF0KHNvdXJjZSwgbGluZSkpCisgICAgQGNsYXNzbWV0
aG9kCisgICAgZGVmIHNldHVwKGNscywgcG9ydD1Ob25lKToKKyAgICAgICAgY2xzLmluc3RhbmNl
ID0gY2xzKHBvcnQpCiAKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhcmRvd24oY2xzKToK
KyAgICAgICAgY2xzLmluc3RhbmNlID0gTm9uZQogCi0gICAgZGVmIHJlc3VsdF9tYXBfYnlfc3Rh
dHVzKHNlbGYsIHN0YXR1cz1Ob25lKToKLSAgICAgICAgbWFwID0ge30KLSAgICAgICAgZm9yIHRl
c3RfbmFtZSwgcmVzdWx0IGluIGl0ZXJpdGVtcyhzZWxmLnJlc3VsdHMpOgotICAgICAgICAgICAg
aWYgcmVzdWx0WzBdID09IHN0YXR1czoKLSAgICAgICAgICAgICAgICBtYXBbdGVzdF9uYW1lXSA9
IHJlc3VsdFsxXQotICAgICAgICByZXR1cm4gbWFwCi0KLQotY2xhc3MgX1dvcmtlcihvYmplY3Qp
OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjYWxsZXIsIHBvcnQsIHNoYXJkX21hcCk6Ci0gICAg
ICAgIHNlbGYuX2NhbGxlciA9IGNhbGxlcgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0KToK
ICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2VsZi5ob3N0ID0gcG9ydC5ob3N0
Ci0gICAgICAgIHNlbGYuX3NoYXJkX21hcCA9IHNoYXJkX21hcAogCiAgICAgICAgICMgU2VydmVy
UHJvY2VzcyBkb2Vzbid0IGFsbG93IGZvciBhIHRpbWVvdXQgb2YgJ05vbmUsJyB0aGlzIHVzZXMg
YSB3ZWVrIGluc3RlYWQgb2YgTm9uZS4KICAgICAgICAgc2VsZi5fdGltZW91dCA9IGludChzZWxm
Ll9wb3J0LmdldF9vcHRpb24oJ3RpbWVvdXQnKSkgaWYgc2VsZi5fcG9ydC5nZXRfb3B0aW9uKCd0
aW1lb3V0JykgZWxzZSA2MCAqIDI0ICogNwogCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBf
ZmlsdGVyX25vaXN5X291dHB1dChvdXRwdXQpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBf
ZmlsdGVyX25vaXN5X291dHB1dChjbHMsIG91dHB1dCk6CiAgICAgICAgIHJlc3VsdCA9ICcnCiAg
ICAgICAgIGZvciBsaW5lIGluIG91dHB1dC5zcGxpdGxpbmVzKCk6CiAgICAgICAgICAgICBpZiBs
aW5lLmxzdHJpcCgpLnN0YXJ0c3dpdGgoJ29iamNbJyk6CkBAIC0xNjcsMTMgKzcxLDE0IEBAIGNs
YXNzIF9Xb3JrZXIob2JqZWN0KToKICAgICAgICAgaWYgdGVzdC5zcGxpdCgnLicpWzFdLnN0YXJ0
c3dpdGgoJ0RJU0FCTEVEXycpIGFuZCBub3Qgc2VsZi5fcG9ydC5nZXRfb3B0aW9uKCdmb3JjZScp
OgogICAgICAgICAgICAgc3RhdHVzID0gUnVubmVyLlNUQVRVU19ESVNBQkxFRAogCisgICAgICAg
IHN0ZG91dF9idWZmZXIgPSAnJworICAgICAgICBzdGRlcnJfYnVmZmVyID0gJycKKwogICAgICAg
ICB0cnk6CiAgICAgICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgc2VsZi5fdGltZW91
dAogICAgICAgICAgICAgaWYgc3RhdHVzICE9IFJ1bm5lci5TVEFUVVNfRElTQUJMRUQ6CiAgICAg
ICAgICAgICAgICAgc2VydmVyX3Byb2Nlc3Muc3RhcnQoKQogCi0gICAgICAgICAgICBzdGRvdXRf
YnVmZmVyID0gJycKLSAgICAgICAgICAgIHN0ZGVycl9idWZmZXIgPSAnJwogICAgICAgICAgICAg
d2hpbGUgc3RhdHVzID09IFJ1bm5lci5TVEFUVVNfUlVOTklORzoKICAgICAgICAgICAgICAgICBz
dGRvdXRfbGluZSwgc3RkZXJyX2xpbmUgPSBzZXJ2ZXJfcHJvY2Vzcy5yZWFkX2VpdGhlcl9zdGRv
dXRfb3Jfc3RkZXJyX2xpbmUoZGVhZGxpbmUpCiAgICAgICAgICAgICAgICAgaWYgbm90IHN0ZGVy
cl9saW5lIGFuZCBub3Qgc3Rkb3V0X2xpbmU6CkBAIC0xODIsNyArODcsNyBAQCBjbGFzcyBfV29y
a2VyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgaWYgc3RkZXJyX2xpbmU6CiAgICAgICAgICAg
ICAgICAgICAgIHN0ZGVycl9saW5lID0gc3RyaW5nX3V0aWxzLmRlY29kZShzdGRlcnJfbGluZSwg
dGFyZ2V0X3R5cGU9c3RyKQogICAgICAgICAgICAgICAgICAgICBzdGRlcnJfYnVmZmVyICs9IHN0
ZGVycl9saW5lCi0gICAgICAgICAgICAgICAgICAgIHNlbGYucG9zdCgnbG9nJywgb3V0cHV0PXN0
ZGVycl9saW5lWzotMV0pCisgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJyb3Ioc3RkZXJyX2xp
bmVbOi0xXSkKICAgICAgICAgICAgICAgICBpZiBzdGRvdXRfbGluZToKICAgICAgICAgICAgICAg
ICAgICAgc3Rkb3V0X2xpbmUgPSBzdHJpbmdfdXRpbHMuZGVjb2RlKHN0ZG91dF9saW5lLCB0YXJn
ZXRfdHlwZT1zdHIpCiAgICAgICAgICAgICAgICAgICAgIGlmICcqKlBBU1MqKicgaW4gc3Rkb3V0
X2xpbmU6CkBAIC0xOTEsNyArOTYsNyBAQCBjbGFzcyBfV29ya2VyKG9iamVjdCk6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0dXMgPSBSdW5uZXIuU1RBVFVTX0ZBSUxFRAogICAgICAgICAg
ICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0X2J1ZmZlciAr
PSBzdGRvdXRfbGluZQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wb3N0KCdsb2cnLCBv
dXRwdXQ9c3Rkb3V0X2xpbmVbOi0xXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJy
b3Ioc3Rkb3V0X2xpbmVbOi0xXSkKIAogICAgICAgICAgICAgaWYgc3RhdHVzID09IFJ1bm5lci5T
VEFUVVNfRElTQUJMRUQ6CiAgICAgICAgICAgICAgICAgcGFzcwpAQCAtMjA1LDIyICsxMTAsMzAg
QEAgY2xhc3MgX1dvcmtlcihvYmplY3QpOgogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAg
cmVtYWluaW5nX3N0ZGVyciA9IHN0cmluZ191dGlscy5kZWNvZGUoc2VydmVyX3Byb2Nlc3MucG9w
X2FsbF9idWZmZXJlZF9zdGRlcnIoKSwgdGFyZ2V0X3R5cGU9c3RyKQogICAgICAgICAgICAgcmVt
YWluaW5nX3N0ZG91dCA9IHN0cmluZ191dGlscy5kZWNvZGUoc2VydmVyX3Byb2Nlc3MucG9wX2Fs
bF9idWZmZXJlZF9zdGRvdXQoKSwgdGFyZ2V0X3R5cGU9c3RyKQotICAgICAgICAgICAgc2VsZi5w
b3N0KCdsb2cnLCBvdXRwdXQ9cmVtYWluaW5nX3N0ZGVyciArIHJlbWFpbmluZ19zdGRvdXQpCisg
ICAgICAgICAgICBmb3IgbGluZSBpbiAocmVtYWluaW5nX3N0ZG91dCArIHJlbWFpbmluZ19zdGRl
cnIpLnNwbGl0bGluZXMoRmFsc2UpOgorICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IobGluZSkK
ICAgICAgICAgICAgIG91dHB1dF9idWZmZXIgPSBzdGRlcnJfYnVmZmVyICsgc3Rkb3V0X2J1ZmZl
ciArIHJlbWFpbmluZ19zdGRlcnIgKyByZW1haW5pbmdfc3Rkb3V0CiAgICAgICAgICAgICBzZXJ2
ZXJfcHJvY2Vzcy5zdG9wKCkKIAotICAgICAgICBzZWxmLnBvc3QoJ2VuZGVkX3Rlc3QnLCAne30u
e30nLmZvcm1hdChiaW5hcnlfbmFtZSwgdGVzdCksIHN0YXR1cywgc2VsZi5fZmlsdGVyX25vaXN5
X291dHB1dChvdXRwdXRfYnVmZmVyKSkKLQotICAgIGRlZiBfcnVuX3NoYXJkX3dpdGhfYmluYXJ5
KHNlbGYsIGJpbmFyeV9uYW1lLCB0ZXN0cyk6Ci0gICAgICAgIHJlbWFpbmluZ190ZXN0cyA9IGxp
c3QodGVzdHMpCisgICAgICAgIFRhc2tQb29sLlByb2Nlc3MucXVldWUuc2VuZChUYXNrUG9vbC5U
YXNrKAorICAgICAgICAgICAgcmVwb3J0X3Jlc3VsdCwgTm9uZSwgVGFza1Bvb2wuUHJvY2Vzcy5u
YW1lLAorICAgICAgICAgICAgJ3t9Lnt9Jy5mb3JtYXQoYmluYXJ5X25hbWUsIHRlc3QpLAorICAg
ICAgICAgICAgc3RhdHVzLAorICAgICAgICAgICAgc2VsZi5fZmlsdGVyX25vaXN5X291dHB1dChv
dXRwdXRfYnVmZmVyKSwKKyAgICAgICAgKSkKKworICAgIGRlZiBydW4oc2VsZiwgbmFtZSwgKnRl
c3RzKToKKyAgICAgICAgYmluYXJ5X25hbWUgPSBuYW1lLnNwbGl0KCcuJylbMF0KKyAgICAgICAg
cmVtYWluaW5nX3Rlc3RzID0gWycuJy5qb2luKHRlc3Quc3BsaXQoJy4nKVsxOl0pIGZvciB0ZXN0
IGluIHRlc3RzXQogCiAgICAgICAgICMgVHJ5IHRvIHJ1biB0aGUgc2hhcmQgaW4gYSBzaW5nbGUg
cHJvY2Vzcy4KICAgICAgICAgd2hpbGUgcmVtYWluaW5nX3Rlc3RzIGFuZCBub3Qgc2VsZi5fcG9y
dC5nZXRfb3B0aW9uKCdydW5fc2luZ2x5Jyk6CiAgICAgICAgICAgICBzdGFydGluZ19sZW5ndGgg
PSBsZW4ocmVtYWluaW5nX3Rlc3RzKQogICAgICAgICAgICAgc2VydmVyX3Byb2Nlc3MgPSBTZXJ2
ZXJQcm9jZXNzKAogICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQsIGJpbmFyeV9uYW1lLAotICAg
ICAgICAgICAgICAgIFJ1bm5lci5jb21tYW5kX2Zvcl9wb3J0KHNlbGYuX3BvcnQsIFtzZWxmLl9w
b3J0Ll9idWlsZF9wYXRoKGJpbmFyeV9uYW1lKSwgJy0tZ3Rlc3RfZmlsdGVyPXt9Jy5mb3JtYXQo
JzonLmpvaW4ocmVtYWluaW5nX3Rlc3RzKSldKSwKLSAgICAgICAgICAgICAgICBlbnY9c2VsZi5f
cG9ydC5lbnZpcm9ubWVudF9mb3JfYXBpX3Rlc3RzKCkpCisgICAgICAgICAgICAgICAgUnVubmVy
LmNvbW1hbmRfZm9yX3BvcnQoc2VsZi5fcG9ydCwgWworICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9wb3J0Ll9idWlsZF9wYXRoKGJpbmFyeV9uYW1lKSwgJy0tZ3Rlc3RfZmlsdGVyPXt9Jy5mb3Jt
YXQoJzonLmpvaW4ocmVtYWluaW5nX3Rlc3RzKSkKKyAgICAgICAgICAgICAgICBdKSwgZW52PXNl
bGYuX3BvcnQuZW52aXJvbm1lbnRfZm9yX2FwaV90ZXN0cygpKQogCiAgICAgICAgICAgICB0cnk6
CiAgICAgICAgICAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIHNlbGYuX3RpbWVvdXQK
QEAgLTIzMCw3ICsxNDMsNyBAQCBjbGFzcyBfV29ya2VyKG9iamVjdCk6CiAKICAgICAgICAgICAg
ICAgICBzZXJ2ZXJfcHJvY2Vzcy5zdGFydCgpCiAgICAgICAgICAgICAgICAgd2hpbGUgcmVtYWlu
aW5nX3Rlc3RzOgotICAgICAgICAgICAgICAgICAgICBzdGRvdXQgPSBzZXJ2ZXJfcHJvY2Vzcy5y
ZWFkX3N0ZG91dF9saW5lKGRlYWRsaW5lKQorICAgICAgICAgICAgICAgICAgICBzdGRvdXQgPSBz
dHJpbmdfdXRpbHMuZGVjb2RlKHNlcnZlcl9wcm9jZXNzLnJlYWRfc3Rkb3V0X2xpbmUoZGVhZGxp
bmUpLCB0YXJnZXRfdHlwZT1zdHIpCiAKICAgICAgICAgICAgICAgICAgICAgIyBJZiB3ZSd2ZSB0
cmlnZ2VyZWQgYSB0aW1lb3V0LCB3ZSBkb24ndCBrbm93IHdoaWNoIHRlc3QgY2F1c2VkIGl0LiBC
cmVhayBvdXQgYW5kIHJ1biBzaW5nbHkuCiAgICAgICAgICAgICAgICAgICAgIGlmIHN0ZG91dCBp
cyBOb25lIGFuZCBzZXJ2ZXJfcHJvY2Vzcy50aW1lZF9vdXQ6CkBAIC0yNTEsNyArMTY0LDE0IEBA
IGNsYXNzIF9Xb3JrZXIob2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
CiAgICAgICAgICAgICAgICAgICAgIGlmIGxhc3RfdGVzdCBpcyBub3QgTm9uZToKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlbWFpbmluZ190ZXN0cy5yZW1vdmUobGFzdF90ZXN0KQotICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5wb3N0KCdlbmRlZF90ZXN0JywgJ3t9Lnt9Jy5mb3JtYXQo
YmluYXJ5X25hbWUsIGxhc3RfdGVzdCksIGxhc3Rfc3RhdHVzLCBzdGRvdXRfYnVmZmVyKQorCisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzdGRvdXRfYnVmZmVyLnNwbGl0bGlu
ZXMoRmFsc2UpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IobGluZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tQb29sLlByb2Nlc3MucXVldWUuc2VuZChUYXNr
UG9vbC5UYXNrKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydF9yZXN1bHQsIE5v
bmUsIFRhc2tQb29sLlByb2Nlc3MubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
e30ue30nLmZvcm1hdChiaW5hcnlfbmFtZSwgbGFzdF90ZXN0KSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsYXN0X3N0YXR1cywgc3Rkb3V0X2J1ZmZlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICkpCiAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgp
ICsgc2VsZi5fdGltZW91dAogICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0X2J1ZmZlciA9
ICcnCiAKQEAgLTI2NCwxMCArMTg0LDE3IEBAIGNsYXNzIF9Xb3JrZXIob2JqZWN0KToKICAgICAg
ICAgICAgICAgICAjIFdlIGFzc3VtZSB0aGF0IHN0ZGVyciBpcyBvbmx5IHJlbGV2YW50IGlmIHRo
ZXJlIGlzIGEgY3Jhc2ggKG1lYW5pbmcgd2UgdHJpZ2dlcmVkIGFuIGFzc2VydCkKICAgICAgICAg
ICAgICAgICBpZiBsYXN0X3Rlc3Q6CiAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ190ZXN0
cy5yZW1vdmUobGFzdF90ZXN0KQotICAgICAgICAgICAgICAgICAgICBzdGRvdXRfYnVmZmVyICs9
IHNlcnZlcl9wcm9jZXNzLnBvcF9hbGxfYnVmZmVyZWRfc3Rkb3V0KCkKLSAgICAgICAgICAgICAg
ICAgICAgc3RkZXJyX2J1ZmZlciA9IHNlcnZlcl9wcm9jZXNzLnBvcF9hbGxfYnVmZmVyZWRfc3Rk
ZXJyKCkgaWYgbGFzdF9zdGF0dXMgPT0gUnVubmVyLlNUQVRVU19DUkFTSEVEIGVsc2UgJycKLSAg
ICAgICAgICAgICAgICAgICAgc2VsZi5wb3N0KCdsb2cnLCBvdXRwdXQ9c3Rkb3V0X2J1ZmZlciAr
IHN0ZGVycl9idWZmZXIpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYucG9zdCgnZW5kZWRfdGVz
dCcsICd7fS57fScuZm9ybWF0KGJpbmFyeV9uYW1lLCBsYXN0X3Rlc3QpLCBsYXN0X3N0YXR1cywg
c2VsZi5fZmlsdGVyX25vaXN5X291dHB1dChzdGRvdXRfYnVmZmVyICsgc3RkZXJyX2J1ZmZlcikp
CisgICAgICAgICAgICAgICAgICAgIHN0ZG91dF9idWZmZXIgKz0gc3RyaW5nX3V0aWxzLmRlY29k
ZShzZXJ2ZXJfcHJvY2Vzcy5wb3BfYWxsX2J1ZmZlcmVkX3N0ZG91dCgpLCB0YXJnZXRfdHlwZT1z
dHIpCisgICAgICAgICAgICAgICAgICAgIHN0ZGVycl9idWZmZXIgPSBzdHJpbmdfdXRpbHMuZGVj
b2RlKHNlcnZlcl9wcm9jZXNzLnBvcF9hbGxfYnVmZmVyZWRfc3RkZXJyKCksIHRhcmdldF90eXBl
PXN0cikgaWYgbGFzdF9zdGF0dXMgPT0gUnVubmVyLlNUQVRVU19DUkFTSEVEIGVsc2UgJycKKyAg
ICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gKHN0ZG91dF9idWZmZXIgKyBzdGRlcnJfYnVm
ZmVyKS5zcGxpdGxpbmVzKGtlZXBlbmRzPUZhbHNlKToKKyAgICAgICAgICAgICAgICAgICAgICAg
IF9sb2cuZXJyb3IobGluZSkKKworICAgICAgICAgICAgICAgICAgICBUYXNrUG9vbC5Qcm9jZXNz
LnF1ZXVlLnNlbmQoVGFza1Bvb2wuVGFzaygKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9y
dF9yZXN1bHQsIE5vbmUsIFRhc2tQb29sLlByb2Nlc3MubmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICd7fS57fScuZm9ybWF0KGJpbmFyeV9uYW1lLCBsYXN0X3Rlc3QpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgbGFzdF9zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9maWx0ZXJfbm9pc3lfb3V0cHV0KHN0ZG91dF9idWZmZXIgKyBzdGRlcnJfYnVmZmVyKSwKKyAg
ICAgICAgICAgICAgICAgICAgKSkKIAogICAgICAgICAgICAgICAgIGlmIHNlcnZlcl9wcm9jZXNz
LnRpbWVkX291dDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKQEAgLTI4MiwxOCArMjA5LDEw
NyBAQCBjbGFzcyBfV29ya2VyKG9iamVjdCk6CiAgICAgICAgIGZvciB0ZXN0IGluIHJlbWFpbmlu
Z190ZXN0czoKICAgICAgICAgICAgIHNlbGYuX3J1bl9zaW5nbGVfdGVzdChiaW5hcnlfbmFtZSwg
dGVzdCkKIAotICAgIGRlZiBwb3N0KHNlbGYsIG1lc3NhZ2VfbmFtZSwgdGVzdF9uYW1lPU5vbmUs
IHN0YXR1cz0wLCBvdXRwdXQ9JycpOgotICAgICAgICBzZWxmLl9jYWxsZXIucG9zdChtZXNzYWdl
X25hbWUsIHRlc3RfbmFtZSwgc3RhdHVzLCBvdXRwdXQpCiAKLSAgICBkZWYgaGFuZGxlKHNlbGYs
IG1lc3NhZ2VfbmFtZSwgc291cmNlLCBzaGFyZF9uYW1lKToKLSAgICAgICAgYXNzZXJ0IG1lc3Nh
Z2VfbmFtZSA9PSAndGVzdCcKLSAgICAgICAgc2VsZi5wb3N0KCdzdGFydGVkX3NoYXJkJywgc2hh
cmRfbmFtZSkKLQotICAgICAgICBiaW5hcnlfbWFwID0ge30KLSAgICAgICAgZm9yIHRlc3QgaW4g
c2VsZi5fc2hhcmRfbWFwW3NoYXJkX25hbWVdOgotICAgICAgICAgICAgc3BsaXRfdGVzdF9uYW1l
ID0gdGVzdC5zcGxpdCgnLicpCi0gICAgICAgICAgICBpZiBzcGxpdF90ZXN0X25hbWVbMF0gbm90
IGluIGJpbmFyeV9tYXA6Ci0gICAgICAgICAgICAgICAgYmluYXJ5X21hcFtzcGxpdF90ZXN0X25h
bWVbMF1dID0gW10KLSAgICAgICAgICAgIGJpbmFyeV9tYXBbc3BsaXRfdGVzdF9uYW1lWzBdXS5h
cHBlbmQoJy4nLmpvaW4oc3BsaXRfdGVzdF9uYW1lWzE6XSkpCi0gICAgICAgIGZvciBiaW5hcnlf
bmFtZSwgdGVzdF9saXN0IGluIGJpbmFyeV9tYXAuaXRlbXMoKToKLSAgICAgICAgICAgIHNlbGYu
X3J1bl9zaGFyZF93aXRoX2JpbmFyeShiaW5hcnlfbmFtZSwgdGVzdF9saXN0KQorZGVmIHNldHVw
X3NoYXJkKHBvcnQ9Tm9uZSk6CisgICAgcmV0dXJuIF9Xb3JrZXIuc2V0dXAocG9ydD1wb3J0KQor
CisKK2RlZiBydW5fc2hhcmQobmFtZSwgKnRlc3RzKToKKyAgICByZXR1cm4gX1dvcmtlci5pbnN0
YW5jZS5ydW4obmFtZSwgKnRlc3RzKQorCisKK2RlZiByZXBvcnRfcmVzdWx0KHdvcmtlciwgdGVz
dCwgc3RhdHVzLCBvdXRwdXQpOgorICAgIGlmIHN0YXR1cyA9PSBSdW5uZXIuU1RBVFVTX1BBU1NF
RCBhbmQgbm90IG91dHB1dCBhbmQgUnVubmVyLmluc3RhbmNlLnBvcnQuZ2V0X29wdGlvbigncXVp
ZXQnKToKKyAgICAgICAgUnVubmVyLmluc3RhbmNlLnByaW50ZXIud3JpdGVfdXBkYXRlKCd7fSB7
fSB7fScuZm9ybWF0KHdvcmtlciwgdGVzdCwgUnVubmVyLk5BTUVfRk9SX1NUQVRVU1tzdGF0dXNd
KSkKKyAgICBlbHNlOgorICAgICAgICBSdW5uZXIuaW5zdGFuY2UucHJpbnRlci53cml0ZV91cGRh
dGUoJ3t9IHt9IHt9Jy5mb3JtYXQod29ya2VyLCB0ZXN0LCBSdW5uZXIuTkFNRV9GT1JfU1RBVFVT
W3N0YXR1c10pKQorICAgIFJ1bm5lci5pbnN0YW5jZS5yZXN1bHRzW3Rlc3RdID0gc3RhdHVzLCBv
dXRwdXQKKworCitkZWYgdGVhcmRvd25fc2hhcmQoKToKKyAgICByZXR1cm4gX1dvcmtlci50ZWFy
ZG93bigpCisKKworY2xhc3MgUnVubmVyKG9iamVjdCk6CisgICAgU1RBVFVTX1BBU1NFRCA9IDAK
KyAgICBTVEFUVVNfRkFJTEVEID0gMQorICAgIFNUQVRVU19DUkFTSEVEID0gMgorICAgIFNUQVRV
U19USU1FT1VUID0gMworICAgIFNUQVRVU19ESVNBQkxFRCA9IDQKKyAgICBTVEFUVVNfUlVOTklO
RyA9IDUKKworICAgIE5BTUVfRk9SX1NUQVRVUyA9IFsKKyAgICAgICAgJ1Bhc3NlZCcsCisgICAg
ICAgICdGYWlsZWQnLAorICAgICAgICAnQ3Jhc2hlZCcsCisgICAgICAgICdUaW1lb3V0JywKKyAg
ICAgICAgJ0Rpc2FibGVkJywKKyAgICBdCisKKyAgICBpbnN0YW5jZSA9IE5vbmUKKworICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBwcmludGVyKToKKyAgICAgICAgc2VsZi5wb3J0ID0gcG9y
dAorICAgICAgICBzZWxmLnByaW50ZXIgPSBwcmludGVyCisgICAgICAgIHNlbGYudGVzdHNfcnVu
ID0gMAorICAgICAgICBzZWxmLl9udW1fd29ya2VycyA9IDEKKyAgICAgICAgc2VsZi5faGFzX2xv
Z2dlZF9mb3JfdGVzdCA9IFRydWUgICMgU3VwcHJlc3MgYW4gZW1wdHkgbGluZSBiZXR3ZWVuICJS
dW5uaW5nIHRlc3RzIiBhbmQgdGhlIGZpcnN0IHRlc3QncyBvdXRwdXQuCisgICAgICAgIHNlbGYu
cmVzdWx0cyA9IHt9CisKKyAgICAjIEZJWE1FIEFQSSB0ZXN0cyBzaG91bGQgcnVuIGFzIGFuIGFw
cCwgd2Ugd29uJ3QgbmVlZCB0aGlzIGZ1bmN0aW9uIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc1MjA0PgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY29tbWFu
ZF9mb3JfcG9ydChwb3J0LCBhcmdzKToKKyAgICAgICAgaWYgKHBvcnQuZ2V0X29wdGlvbignZm9y
Y2UnKSk6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgnLS1ndGVzdF9hbHNvX3J1bl9kaXNhYmxl
ZF90ZXN0cz0xJykKKyAgICAgICAgaWYgJ3NpbXVsYXRvcicgaW4gcG9ydC5wb3J0X25hbWU6Cisg
ICAgICAgICAgICBhc3NlcnQgU2ltdWxhdGVkRGV2aWNlTWFuYWdlci5JTklUSUFMSVpFRF9ERVZJ
Q0VTCisgICAgICAgICAgICByZXR1cm4gWycvdXNyL2Jpbi94Y3J1bicsICdzaW1jdGwnLCAnc3Bh
d24nLCBTaW11bGF0ZWREZXZpY2VNYW5hZ2VyLklOSVRJQUxJWkVEX0RFVklDRVNbMF0udWRpZF0g
KyBhcmdzCisgICAgICAgIGVsaWYgJ2RldmljZScgaW4gcG9ydC5wb3J0X25hbWU6CisgICAgICAg
ICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1J1bm5pbmcgYXBpIHRlc3RzIG9uIHt9IGlzIG5vdCBz
dXBwb3J0ZWQnLmZvcm1hdChwb3J0LnBvcnRfbmFtZSkpCisgICAgICAgIGVsaWYgcG9ydC5ob3N0
LnBsYXRmb3JtLmlzX3dpbigpOgorICAgICAgICAgICAgYXJnc1swXSA9IG9zLnBhdGguc3BsaXRl
eHQoYXJnc1swXSlbMF0gKyAnLmV4ZScKKyAgICAgICAgcmV0dXJuIGFyZ3MKKworICAgIEBzdGF0
aWNtZXRob2QKKyAgICBkZWYgX3NoYXJkX3Rlc3RzKHRlc3RzKToKKyAgICAgICAgc2hhcmRzID0g
e30KKyAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICBzaGFyZF9wcmVmaXgg
PSAnLicuam9pbih0ZXN0LnNwbGl0KCcuJylbOi0xXSkKKyAgICAgICAgICAgIGlmIHNoYXJkX3By
ZWZpeCBub3QgaW4gc2hhcmRzOgorICAgICAgICAgICAgICAgIHNoYXJkc1tzaGFyZF9wcmVmaXhd
ID0gW10KKyAgICAgICAgICAgIHNoYXJkc1tzaGFyZF9wcmVmaXhdLmFwcGVuZCh0ZXN0KQorICAg
ICAgICByZXR1cm4gc2hhcmRzCisKKyAgICBkZWYgcnVuKHNlbGYsIHRlc3RzLCBudW1fd29ya2Vy
cyk6CisgICAgICAgIGlmIG5vdCB0ZXN0czoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAg
IHNlbGYucHJpbnRlci53cml0ZV91cGRhdGUoJ1NoYXJkaW5nIHRlc3RzIC4uLicpCisgICAgICAg
IHNoYXJkcyA9IFJ1bm5lci5fc2hhcmRfdGVzdHModGVzdHMpCisKKyAgICAgICAgb3JpZ2luYWxf
bGV2ZWwgPSBzZXJ2ZXJfcHJvY2Vzc19sb2dnZXIubGV2ZWwKKyAgICAgICAgc2VydmVyX3Byb2Nl
c3NfbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuQ1JJVElDQUwpCisKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgUnVubmVyLmluc3RhbmNlID0gc2VsZgorICAgICAgICAgICAgc2VsZi5fbnVtX3dv
cmtlcnMgPSBtaW4obnVtX3dvcmtlcnMsIGxlbihzaGFyZHMpKQorCisgICAgICAgICAgICB3aXRo
IFRhc2tQb29sKAorICAgICAgICAgICAgICAgIHdvcmtlcnM9c2VsZi5fbnVtX3dvcmtlcnMsCisg
ICAgICAgICAgICAgICAgc2V0dXA9c2V0dXBfc2hhcmQsIHNldHVwa3dhcmdzPWRpY3QocG9ydD1z
ZWxmLnBvcnQpLAorICAgICAgICAgICAgICAgIHRlYXJkb3duPXRlYXJkb3duX3NoYXJkLAorICAg
ICAgICAgICAgKSBhcyBwb29sOgorICAgICAgICAgICAgICAgIGZvciBuYW1lLCB0ZXN0cyBpbiBp
dGVyaXRlbXMoc2hhcmRzKToKKyAgICAgICAgICAgICAgICAgICAgcG9vbC5kbyhydW5fc2hhcmQs
IG5hbWUsICp0ZXN0cykKKyAgICAgICAgICAgICAgICBwb29sLndhaXQoKQorCisgICAgICAgIGZp
bmFsbHk6CisgICAgICAgICAgICBzZXJ2ZXJfcHJvY2Vzc19sb2dnZXIuc2V0TGV2ZWwob3JpZ2lu
YWxfbGV2ZWwpCisgICAgICAgICAgICBSdW5uZXIuaW5zdGFuY2UgPSBOb25lCisKKyAgICBkZWYg
cmVzdWx0X21hcF9ieV9zdGF0dXMoc2VsZiwgc3RhdHVzPU5vbmUpOgorICAgICAgICBtYXAgPSB7
fQorICAgICAgICBmb3IgdGVzdF9uYW1lLCByZXN1bHQgaW4gaXRlcml0ZW1zKHNlbGYucmVzdWx0
cyk6CisgICAgICAgICAgICBpZiByZXN1bHRbMF0gPT0gc3RhdHVzOgorICAgICAgICAgICAgICAg
IG1hcFt0ZXN0X25hbWVdID0gcmVzdWx0WzFdCisgICAgICAgIHJldHVybiBtYXAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427816</attachid>
            <date>2021-05-05 15:46:50 -0700</date>
            <delta_ts>2021-05-05 17:03:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225221-20210505154650.patch</filename>
            <type>text/plain</type>
            <size>35325</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3NzAyNykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQwIEBACisyMDIxLTA1LTA1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbcnVuLWFwaS10ZXN0c10gVXNlIHdlYmtpdGNvcmVweSdzIFRhc2tQb29s
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUyMjEK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc3MzUyNDY1PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29y
ZXB5L3NldHVwLnB5OiBCdW1wIHZlcnNpb24uCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weTogRGl0dG8uCisgICAgICAgICog
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90YXNrX3Bvb2wucHk6
CisgICAgICAgIChUYXNrUG9vbC5fX2VudGVyX18pOiBFbnN1cmUgdGhhdCBtb2NrIGhhcyBiZWVu
IGltcG9ydGVkIGJlZm9yZSBzcGF3bmluZyBjaGlsZCBwcm9jZXNzZXMuCisgICAgICAgICogU2Ny
aXB0cy9ydW4tYXBpLXRlc3RzOiBNb3ZlZCBmcm9tIHdlYmtpdHB5L2FwaV90ZXN0cy9ydW5fYXBp
X3Rlc3RzLnB5LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYXBpX3Rlc3RzL3J1bl9hcGlf
dGVzdHMucHk6IE1vdmVkIHRvIHJ1bi1hcGktdGVzdHMuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9hcGlfdGVzdHMvcnVubmVyLnB5OgorICAgICAgICAoX1dvcmtlcik6IFJlcHJlc2VudGF0
aW9uIG9mIFdvcmtlciBwcm9jZXNzLgorICAgICAgICAoX1dvcmtlci5zZXR1cCk6IFBhc3MgcG9y
dCBvYmplY3QgdG8gd29ya2VyIHByb2Nlc3MuCisgICAgICAgIChfV29ya2VyLnNldHVwKTogUGFz
cyBwb3J0IG9iamVjdCB0byB3b3JrZXIgcHJvY2Vzcy4KKyAgICAgICAgKF9Xb3JrZXIudGVhcmRv
d24pOiBVbi1zZXQgcG9ydCBvYmplY3Qgb24gd29ya2VyIHByb2Nlc3MuCisgICAgICAgIChfV29y
a2VyLl9faW5pdF9fKTogQ29uc3RydWN0IG9iamVjdCB0byBob2xkIGEgV29ya2VyIHByb2Nlc3Mn
cyB2YXJpYWJsZXMuCisgICAgICAgIChfV29ya2VyLl9ydW5fc2luZ2xlX3Rlc3QpOiBMb2cgdGVz
dCByZXN1bHRzLCBwb3N0IHJlc3VsdHMgdG8gcGFyZW50LgorICAgICAgICAoX1dvcmtlci5ydW4p
OiBSdW4gc2hhcmQgd2l0aCBhbmQgcG9zdCByZXN1bHRzIHRvIHBhcmVudCBwcm9jZXNzLgorICAg
ICAgICAoc2V0dXBfc2hhcmQpOiBSdW4gc2V0dXAgaW4gV29ya2VyIHByb2Nlc3MuCisgICAgICAg
IChydW5fc2hhcmQpOiBSdW4gdGVzdCBzaGFyZCBpbiBXb3JrZXIgcHJvY2Vzcy4KKyAgICAgICAg
KHJlcG9ydF9yZXN1bHQpOiBSZWNlaXZlIHJlc3VsdCBpbiB0aGUgcGFyZW50IHByb2Nlc3MuCisg
ICAgICAgICgodGVhcmRvd25fc2hhcmQpOiBUZWFyIGRvd24gV29ya2VyIHByb2Nlc3MuCisgICAg
ICAgIChSdW5uZXIuX19pbml0X18pOgorICAgICAgICAoUnVubmVyLmNvbW1hbmRfZm9yX3BvcnQp
OgorICAgICAgICAoUnVubmVyLl9zaGFyZF90ZXN0cyk6IFNwbGl0IHRlc3RzIGludG8gc2hhcmRz
IHRvIGJlIGVmZmljaWVudGx5IHJ1bi4KKyAgICAgICAgKFJ1bm5lci5ydW4pOiBVc2UgVGFza1Bv
b2wgdG8gcnVuIHRlc3RzIGluIHN1YiBwcm9jZXNzZXMuCisgICAgICAgIChSdW5uZXIuY2FsbGJh
Y2spOiBTYXZlIHJlc3VsdHMgaW4gcGFyZW50IHByb2Nlc3MuCisgICAgICAgIChSdW5uZXIucmVz
dWx0X21hcF9ieV9zdGF0dXMpOgorICAgICAgICAoUnVubmVyLmhhbmRsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChfV29ya2VyLl9ydW5fc2hhcmRfd2l0aF9iaW5hcnkpOiBEZWxldGVkLgorICAgICAg
ICAoX1dvcmtlci5wb3N0KTogRGVsZXRlZC4KKyAgICAgICAgKF9Xb3JrZXIuaGFuZGxlKTogRGVs
ZXRlZC4KKwogMjAyMS0wNS0wNSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAg
ICAgICAgQWRkIHByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIHNwZWNpZnlpbmcgYSBjb2xvciBzcGFj
ZSBmb3IgMkQgY2FudmFzCkluZGV4OiBUb29scy9TY3JpcHRzL3J1bi1hcGktdGVzdHMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tYXBpLXRlc3RzCShyZXZpc2lvbiAyNzcwMjApCisr
KyBUb29scy9TY3JpcHRzL3J1bi1hcGktdGVzdHMJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAjIS91c3IvYmluL2VudiBweXRob24KIAotIyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTIyLDcgKzIyLDE0NSBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwogIyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotIiIi
V3JhcHBlciBhcm91bmQgd2Via2l0cHkvYXBpX3Rlc3RzL3J1bl9hcGlfdGVzdHMucHkiIiIKLWZy
b20gd2Via2l0cHkuY29tbW9uIGltcG9ydCBtdWx0aXByb2Nlc3NpbmdfYm9vdHN0cmFwCitmcm9t
IF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCitpbXBvcnQgbG9nZ2luZworaW1wb3J0
IG9wdHBhcnNlCitpbXBvcnQgc3lzCitpbXBvcnQgdHJhY2ViYWNrCiAKLW11bHRpcHJvY2Vzc2lu
Z19ib290c3RyYXAucnVuKCd3ZWJraXRweScsICdhcGlfdGVzdHMnLCAncnVuX2FwaV90ZXN0cy5w
eScpCitmcm9tIHdlYmtpdHB5LmFwaV90ZXN0cy5tYW5hZ2VyIGltcG9ydCBNYW5hZ2VyCitmcm9t
IHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0Citmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy52aWV3cy5tZXRlcmVkX3N0cmVhbSBpbXBvcnQgTWV0ZXJlZFN0cmVhbQorZnJvbSB3ZWJr
aXRweS5wb3J0IGltcG9ydCBjb25maWd1cmF0aW9uX29wdGlvbnMsIHBsYXRmb3JtX29wdGlvbnMs
IGJhc2UsIHdpbgorZnJvbSB3ZWJraXRweS5yZXN1bHRzLm9wdGlvbnMgaW1wb3J0IHVwbG9hZF9v
cHRpb25zCisKK0VYQ0VQVElPTkFMX0VYSVRfU1RBVFVTID0gLTEKK0lOVEVSUlVQVF9FWElUX1NU
QVRVUyA9IC0yCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitkZWYg
bWFpbihhcmd2LCBzdGRvdXQsIHN0ZGVycik6CisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlX2Fy
Z3MoYXJndikKKyAgICBob3N0ID0gSG9zdCgpCisKKyAgICB0cnk6CisgICAgICAgIG9wdGlvbnMu
d2Via2l0X3Rlc3RfcnVubmVyID0gVHJ1ZQorICAgICAgICBwb3J0ID0gaG9zdC5wb3J0X2ZhY3Rv
cnkuZ2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMpCisgICAgZXhjZXB0IE5vdEltcGxlbWVu
dGVkRXJyb3IgYXMgZToKKyAgICAgICAgcHJpbnQoc3RyKGUpLCBmaWxlPXN0ZGVycikKKyAgICAg
ICAgcmV0dXJuIEVYQ0VQVElPTkFMX0VYSVRfU1RBVFVTCisKKyAgICAjIFNvbWUgcGxhdGZvcm1z
IGRvIG5vdCBzdXBwb3J0IEFQSSB0ZXN0cworICAgIGRvZXNfbm90X3N1cHBvcnRfYXBpX3Rlc3Rz
ID0gWydpb3MtZGV2aWNlJ10KKyAgICBpZiBwb3J0Lm9wZXJhdGluZ19zeXN0ZW0oKSBpbiBkb2Vz
X25vdF9zdXBwb3J0X2FwaV90ZXN0czoKKyAgICAgICAgcHJpbnQoJ3t9IGNhbm5vdCBydW4gQVBJ
IHRlc3RzJy5mb3JtYXQocG9ydC5vcGVyYXRpbmdfc3lzdGVtKCkpLCBmaWxlPXN0ZGVycikKKyAg
ICAgICAgcmV0dXJuIEVYQ0VQVElPTkFMX0VYSVRfU1RBVFVTCisKKyAgICB0cnk6CisgICAgICAg
IHJldHVybiBydW4ocG9ydCwgb3B0aW9ucywgYXJncywgc3RkZXJyKQorICAgIGV4Y2VwdCBLZXli
b2FyZEludGVycnVwdDoKKyAgICAgICAgcmV0dXJuIElOVEVSUlVQVF9FWElUX1NUQVRVUworICAg
IGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZSwgRXhj
ZXB0aW9uKToKKyAgICAgICAgICAgIHByaW50KCdcbiVzIHJhaXNlZDogJXMnICUgKGUuX19jbGFz
c19fLl9fbmFtZV9fLCBzdHIoZSkpLCBmaWxlPXN0ZGVycikKKyAgICAgICAgICAgIHRyYWNlYmFj
ay5wcmludF9leGMoZmlsZT1zdGRlcnIpCisgICAgICAgIHJldHVybiBFWENFUFRJT05BTF9FWElU
X1NUQVRVUworCisKK2RlZiBydW4ocG9ydCwgb3B0aW9ucywgYXJncywgbG9nZ2luZ19zdHJlYW0p
OgorICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICBsb2dnZXIuc2V0TGV2ZWwo
bG9nZ2luZy5ERUJVRyBpZiBvcHRpb25zLnZlcmJvc2UgZWxzZSBsb2dnaW5nLkVSUk9SIGlmIG9w
dGlvbnMucXVpZXQgZWxzZSBsb2dnaW5nLklORk8pCisKKyAgICB0cnk6CisgICAgICAgIHN0cmVh
bSA9IE1ldGVyZWRTdHJlYW0obG9nZ2luZ19zdHJlYW0sIG9wdGlvbnMudmVyYm9zZSwgbG9nZ2Vy
PWxvZ2dlciwgbnVtYmVyX29mX2NvbHVtbnM9cG9ydC5ob3N0LnBsYXRmb3JtLnRlcm1pbmFsX3dp
ZHRoKCksIHByaW50X3RpbWVzdGFtcHM9b3B0aW9ucy50aW1lc3RhbXBzKQorICAgICAgICBtYW5h
Z2VyID0gTWFuYWdlcihwb3J0LCBvcHRpb25zLCBzdHJlYW0pCisKKyAgICAgICAgcmVzdWx0ID0g
bWFuYWdlci5ydW4oYXJncywganNvbl9vdXRwdXQ9b3B0aW9ucy5qc29uX291dHB1dCkKKyAgICAg
ICAgX2xvZy5kZWJ1ZygiVGVzdGluZyBjb21wbGV0ZWQsIEV4aXQgc3RhdHVzOiAlZCIgJSByZXN1
bHQpCisgICAgICAgIHJldHVybiByZXN1bHQKKyAgICBmaW5hbGx5OgorICAgICAgICBzdHJlYW0u
Y2xlYW51cCgpCisKKworZGVmIHBhcnNlX2FyZ3MoYXJncyk6CisgICAgb3B0aW9uX2dyb3VwX2Rl
ZmluaXRpb25zID0gW10KKworICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9ucy5hcHBlbmQoKCdQ
bGF0Zm9ybSBvcHRpb25zJywgcGxhdGZvcm1fb3B0aW9ucygpKSkKKyAgICBvcHRpb25fZ3JvdXBf
ZGVmaW5pdGlvbnMuYXBwZW5kKCgnQ29uZmlndXJhdGlvbiBvcHRpb25zJywgY29uZmlndXJhdGlv
bl9vcHRpb25zKCkpKQorICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9ucy5hcHBlbmQoKCdQcmlu
dGluZyBPcHRpb25zJywgWworICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLXEnLCAnLS1x
dWlldCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9J1J1biBxdWlldGx5IChlcnJvcnMsIHdhcm5pbmdzLCBhbmQg
cHJvZ3Jlc3Mgb25seSknKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy12JywgJy0t
dmVyYm9zZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHA9J0VuYWJsZSB2ZXJib3NlIHByaW50aW5nJyksCisgICAg
ICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXRpbWVzdGFtcHMnLCBhY3Rpb249J3N0b3JlX3Ry
dWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdQ
cmludCB0aW1lc3RhbXBzIGZvciBlYWNoIGxvZ2dlZCBsaW5lJyksCisgICAgICAgIG9wdHBhcnNl
Lm1ha2Vfb3B0aW9uKCctLWpzb24tb3V0cHV0JywgYWN0aW9uPSdzdG9yZScsIGRlZmF1bHQ9Tm9u
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2F2ZSB0ZXN0IHJlc3VsdHMg
YXMgSlNPTiB0byBmaWxlJyksCisgICAgXSkpCisKKyAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlv
bnMuYXBwZW5kKCgnV2ViS2l0IE9wdGlvbnMnLCBbCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0
aW9uKCctZycsICctLWd1YXJkLW1hbGxvYycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9
RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0VuYWJsZSBHdWFyZCBN
YWxsb2MgKE9TIFggb25seSknKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tcm9v
dCcsIGFjdGlvbj0nc3RvcmUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdQ
YXRoIHRvIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGV4ZWN1dGFibGVzIG5lZWRlZCB0byBy
dW4gdGVzdHMuJyksCisgICAgXSkpCisKKyAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnMuYXBw
ZW5kKCgnVGVzdGluZyBPcHRpb25zJywgWworICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbign
LS13dGYtb25seScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0nVGVzdFdURicsIGRlc3Q9
J2FwaV9iaW5hcnknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdPbmx5IGJ1
aWxkLCBjaGVjayBhbmQgcnVuIFRlc3RXVEYnKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRp
b24oJy0td2Via2l0LW9ubHknLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J1Rlc3RXZWJL
aXRBUEknLCBkZXN0PSdhcGlfYmluYXJ5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGVscD0nT25seSBjaGVjayBhbmQgcnVuIFRlc3RXZWJLaXRBUEknKSwKKyAgICAgICAgb3B0cGFy
c2UubWFrZV9vcHRpb24oJy0td2ViLWNvcmUtb25seScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBj
b25zdD0nVGVzdFdlYkNvcmUnLCBkZXN0PSdhcGlfYmluYXJ5JywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVscD0nT25seSBjaGVjayBhbmQgcnVuIFRlc3RXZWJDb3JlLmV4ZSAoV2lu
ZG93cyBvbmx5KScpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS13ZWJraXQtbGVn
YWN5LW9ubHknLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J1Rlc3RXZWJLaXRMZWdhY3kn
LCBkZXN0PSdhcGlfYmluYXJ5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0n
T25seSBjaGVjayBhbmQgcnVuIFRlc3RXZWJLaXRMZWdhY3kuZXhlIChXaW5kb3dzIG9ubHkpJyks
CisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctZCcsICctLWR1bXAnLCBhY3Rpb249J3N0
b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSdEdW1wIGFsbCB0ZXN0IG5hbWVzIHdpdGhvdXQgcnVubmluZyB0aGVtJyksCisgICAgICAg
IG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkJywgZGVzdD0nYnVpbGQnLCBhY3Rpb249J3N0
b3JlX3RydWUnLCBkZWZhdWx0PVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl
bHA9J0NoZWNrIHRvIGVuc3VyZSB0aGUgYnVpbGQgaXMgdXAtdG8tZGF0ZSAoZGVmYXVsdCkuJyks
CisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLW5vLWJ1aWxkJywgZGVzdD0nYnVpbGQn
LCBhY3Rpb249J3N0b3JlX2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0iRG9uJ3QgY2hlY2sgdG8gc2VlIGlmIHRoZSBidWlsZCBpcyB1cC10by1kYXRlLiIpLAorICAg
ICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS10aW1lb3V0JywgZGVmYXVsdD0zMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nTnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCBi
ZWZvcmUgYSB0ZXN0IHRpbWVzIG91dCcpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbign
LS1uby10aW1lb3V0JywgZGVzdD0ndGltZW91dCcsIGFjdGlvbj0nc3RvcmVfZmFsc2UnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdEaXNhYmxlIHRpbWVvdXRzIGZvciBhbGwg
dGVzdHMnKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0taXRlcmF0aW9ucycsIHR5
cGU9J2ludCcsIGRlZmF1bHQ9MSwgaGVscD0nTnVtYmVyIG9mIHRpbWVzIHRvIHJ1biB0aGUgc2V0
IG9mIHRlc3RzIChlLmcuIEFCQ0FCQ0FCQyknKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRp
b24oJy0tcmVwZWF0LWVhY2gnLCB0eXBlPSdpbnQnLCBkZWZhdWx0PTEsIGhlbHA9J051bWJlciBv
ZiB0aW1lcyB0byBydW4gZWFjaCB0ZXN0IChlLmcuIEFBQUJCQkNDQyknKSwKKworICAgICAgICAj
IEZJWE1FOiBSZW1vdmUgdGhlIGRlZmF1bHQsIEFQSSB0ZXN0cyBzaG91bGQgYmUgbXVsdGlwcm9j
ZXNzCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWNoaWxkLXByb2Nlc3NlcycsIGRl
ZmF1bHQ9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nTnVtYmVyIG9mIHBy
b2Nlc3NlcyB0byBydW4gaW4gcGFyYWxsZWwuJyksCisKKyAgICAgICAgIyBGSVhNRTogRGVmYXVs
dCBzaG91bGQgYmUgZmFsc2UsIEFQSSB0ZXN0cyBzaG91bGQgbm90IGJlIGZvcmNlZCB0byBydW4g
c2luZ2x5CisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXJ1bi1zaW5nbHknLCBhY3Rp
b249J3N0b3JlX3RydWUnLCBkZWZhdWx0PVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlbHA9J1J1biBhIHNlcGFyYXRlIHByb2Nlc3MgZm9yIGVhY2ggdGVzdCcpLAorCisgICAg
ICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWZvcmNlJywgYWN0aW9uPSdzdG9yZV90cnVlJywg
ZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUnVuIGFs
bCB0ZXN0cywgZXZlbiBESVNBQkxFRCB0ZXN0cycpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29w
dGlvbignLS1hZGRpdGlvbmFsLWVudi12YXInLCB0eXBlPSdzdHJpbmcnLCBhY3Rpb249J2FwcGVu
ZCcsIGRlZmF1bHQ9W10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1Bhc3Nl
cyB0aGF0IGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSB0ZXN0cyAoLS1hZGRpdGlvbmFsLWVu
di12YXI9TkFNRT1WQUxVRSknKSwKKyAgICBdKSkKKyAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlv
bnMuYXBwZW5kKCgnVXBsb2FkIE9wdGlvbnMnLCB1cGxvYWRfb3B0aW9ucygpKSkKKworICAgIG9w
dGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoCisgICAgICAgIHVzYWdlPSdydW4t
YXBpLXRlc3RzIFtvcHRpb25zXSBbPHRlc3QgbmFtZXM+Li4uXScsCisgICAgICAgIGRlc2NyaXB0
aW9uPSIiIkJ5IGRlZmF1bHQsIHJ1bi1hcGktdGVzdHMgd2lsbCBydW4gYWxsIEFQSSB0ZXN0cy4g
SXQgYWxzbyBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB0ZXN0cyBvZiB0aGUgXAorZm9ybWF0
IDxzdWl0ZT4uPHRlc3Q+IG9yIDxjYW5vbmljYWxpemVkIGJpbmFyeSBuYW1lPi48c3VpdGU+Ljx0
ZXN0Pi4gTm90ZSB0aGF0IGluIHRoZSBjYXNlIHdoZXJlIGEgYmluYXJ5IGlzIG5vdCBcCitzcGVj
aWZpZWQsIG9uZSB3aWxsIGJlIGluZmVycmVkIGJ5IGxpc3RpbmcgYWxsIGF2YWlsYWJsZSB0ZXN0
cy4gU3BlY2lmeWluZyBqdXN0IGEgYmluYXJ5IG9yIGp1c3QgYSBzdWl0ZSB3aWxsIGNhdXNlIGV2
ZXJ5IFwKK3Rlc3QgY29udGFpbmVkIHdpdGhpbiB0byBiZSBydW4uIFRoZSBjYW5vbmljYWxpemVk
IGJpbmFyeSBuYW1lIGlzIHRoZSBiaW5hcnkgbmFtZSB3aXRoIGFueSBmaWxlbmFtZSBleHRlbnNp
b24gXAorc3RyaXBwZWQuIEZvciBVbml4IHBvcnRzLCB0aGVzZSBiaW5hcmllcyBhcmUge30gYW5k
IHt9LiBGb3IgV2luZG93cyBwb3J0cywgdGhleSBhcmUge30gYW5kIHt9LiIiIi5mb3JtYXQoCisg
ICAgICAgICAgICAnLCAnLmpvaW4oYmFzZS5Qb3J0LkFQSV9URVNUX0JJTkFSWV9OQU1FU1s6LTFd
KSwgYmFzZS5Qb3J0LkFQSV9URVNUX0JJTkFSWV9OQU1FU1stMV0sCisgICAgICAgICAgICAnLCAn
LmpvaW4od2luLldpblBvcnQuQVBJX1RFU1RfQklOQVJZX05BTUVTWzotMV0pLCB3aW4uV2luUG9y
dC5BUElfVEVTVF9CSU5BUllfTkFNRVNbLTFdLAorICAgICkpCisKKyAgICBmb3IgZ3JvdXBfbmFt
ZSwgZ3JvdXBfb3B0aW9ucyBpbiBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnM6CisgICAgICAgIG9w
dGlvbl9ncm91cCA9IG9wdHBhcnNlLk9wdGlvbkdyb3VwKG9wdGlvbl9wYXJzZXIsIGdyb3VwX25h
bWUpCisgICAgICAgIG9wdGlvbl9ncm91cC5hZGRfb3B0aW9ucyhncm91cF9vcHRpb25zKQorICAg
ICAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAob3B0aW9uX2dyb3VwKQorCisgICAg
cmV0dXJuIG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisKK2lmIF9fbmFtZV9fID09
ICdfX21haW5fXyc6CisgICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0sIHN5cy5zdGRvdXQs
IHN5cy5zdGRlcnIpKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5
L3NldHVwLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNv
cmVweS9zZXR1cC5weQkocmV2aXNpb24gMjc3MDIwKQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0Y29yZXB5L3NldHVwLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBA
IGRlZiByZWFkbWUoKToKIAogc2V0dXAoCiAgICAgbmFtZT0nd2Via2l0Y29yZXB5JywKLSAgICB2
ZXJzaW9uPScwLjUuMTMnLAorICAgIHZlcnNpb249JzAuNS4xNCcsCiAgICAgZGVzY3JpcHRpb249
J0xpYnJhcnkgY29udGFpbmluZyB2YXJpb3VzIFB5dGhvbiBzdXBwb3J0IGNsYXNzZXMgYW5kIGZ1
bmN0aW9ucy4nLAogICAgIGxvbmdfZGVzY3JpcHRpb249cmVhZG1lKCksCiAgICAgY2xhc3NpZmll
cnM9WwpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNv
cmVweS9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5CShyZXZpc2lvbiAyNzcwMjApCisr
KyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5p
dF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIGZyb20gd2Via2l0Y29yZXB5
Lm91dHB1dF9jYXB0dXJlIGltcG9ydCAKIGZyb20gd2Via2l0Y29yZXB5LnRhc2tfcG9vbCBpbXBv
cnQgVGFza1Bvb2wKIGZyb20gd2Via2l0Y29yZXB5LmNyZWRlbnRpYWxzIGltcG9ydCBjcmVkZW50
aWFscwogCi12ZXJzaW9uID0gVmVyc2lvbigwLCA1LCAxMykKK3ZlcnNpb24gPSBWZXJzaW9uKDAs
IDUsIDE0KQogCiBmcm9tIHdlYmtpdGNvcmVweS5hdXRvaW5zdGFsbCBpbXBvcnQgUGFja2FnZSwg
QXV0b0luc3RhbGwKIGlmIHN5cy52ZXJzaW9uX2luZm8gPiAoMywgMCk6CkluZGV4OiBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rhc2tfcG9vbC5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0
Y29yZXB5L3Rhc2tfcG9vbC5weQkocmV2aXNpb24gMjc3MDIwKQorKysgVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90YXNrX3Bvb2wucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTMzMiw2ICszMzIsOCBAQCBjbGFzcyBUYXNrUG9vbChvYmplY3QpOgogICAgICAg
ICBzZWxmLmJsb2NrX3NpemUgPSBibG9ja19zaXplCiAKICAgICBkZWYgX19lbnRlcl9fKHNlbGYp
OgorICAgICAgICBmcm9tIG1vY2sgaW1wb3J0IHBhdGNoCisKICAgICAgICAgd2l0aCBUaW1lb3V0
KHNlY29uZHM9MTAsIHBhdGNoPUZhbHNlLCBoYW5kbGVyPXNlbGYuRXhjZXB0aW9uKCdGYWlsZWQg
dG8gc3RhcnQgYWxsIHdvcmtlcnMnKSk6CiAgICAgICAgICAgICBmb3Igd29ya2VyIGluIHNlbGYu
d29ya2VyczoKICAgICAgICAgICAgICAgICB3b3JrZXIuc3RhcnQoKQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9hcGlfdGVzdHMvcnVuX2FwaV90ZXN0cy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2FwaV90ZXN0cy9ydW5fYXBpX3Rlc3RzLnB5CShyZXZpc2lv
biAyNzcwMjApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2FwaV90ZXN0cy9ydW5fYXBpX3Rl
c3RzLnB5CShub25leGlzdGVudCkKQEAgLTEsMTY0ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKLSMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotIyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0jIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUwotIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlv
bgotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcHRwYXJzZQotaW1wb3J0IHN5cwotaW1wb3J0IHRy
YWNlYmFjawotCi1mcm9tIHdlYmtpdHB5LmFwaV90ZXN0cy5tYW5hZ2VyIGltcG9ydCBNYW5hZ2Vy
Ci1mcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0Ci1mcm9tIHdlYmtpdHB5Lmxh
eW91dF90ZXN0cy52aWV3cy5tZXRlcmVkX3N0cmVhbSBpbXBvcnQgTWV0ZXJlZFN0cmVhbQotZnJv
bSB3ZWJraXRweS5wb3J0IGltcG9ydCBjb25maWd1cmF0aW9uX29wdGlvbnMsIHBsYXRmb3JtX29w
dGlvbnMsIGJhc2UsIHdpbgotZnJvbSB3ZWJraXRweS5yZXN1bHRzLm9wdGlvbnMgaW1wb3J0IHVw
bG9hZF9vcHRpb25zCi0KLUVYQ0VQVElPTkFMX0VYSVRfU1RBVFVTID0gLTEKLUlOVEVSUlVQVF9F
WElUX1NUQVRVUyA9IC0yCi0KLV9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKLQot
Ci1kZWYgbWFpbihhcmd2LCBzdGRvdXQsIHN0ZGVycik6Ci0gICAgb3B0aW9ucywgYXJncyA9IHBh
cnNlX2FyZ3MoYXJndikKLSAgICBob3N0ID0gSG9zdCgpCi0KLSAgICB0cnk6Ci0gICAgICAgIG9w
dGlvbnMud2Via2l0X3Rlc3RfcnVubmVyID0gVHJ1ZQotICAgICAgICBwb3J0ID0gaG9zdC5wb3J0
X2ZhY3RvcnkuZ2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMpCi0gICAgZXhjZXB0IE5vdElt
cGxlbWVudGVkRXJyb3IgYXMgZToKLSAgICAgICAgcHJpbnQoc3RyKGUpLCBmaWxlPXN0ZGVycikK
LSAgICAgICAgcmV0dXJuIEVYQ0VQVElPTkFMX0VYSVRfU1RBVFVTCi0KLSAgICAjIFNvbWUgcGxh
dGZvcm1zIGRvIG5vdCBzdXBwb3J0IEFQSSB0ZXN0cwotICAgIGRvZXNfbm90X3N1cHBvcnRfYXBp
X3Rlc3RzID0gWydpb3MtZGV2aWNlJ10KLSAgICBpZiBwb3J0Lm9wZXJhdGluZ19zeXN0ZW0oKSBp
biBkb2VzX25vdF9zdXBwb3J0X2FwaV90ZXN0czoKLSAgICAgICAgcHJpbnQoJ3t9IGNhbm5vdCBy
dW4gQVBJIHRlc3RzJy5mb3JtYXQocG9ydC5vcGVyYXRpbmdfc3lzdGVtKCkpLCBmaWxlPXN0ZGVy
cikKLSAgICAgICAgcmV0dXJuIEVYQ0VQVElPTkFMX0VYSVRfU1RBVFVTCi0KLSAgICB0cnk6Ci0g
ICAgICAgIHJldHVybiBydW4ocG9ydCwgb3B0aW9ucywgYXJncywgc3RkZXJyKQotICAgIGV4Y2Vw
dCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgcmV0dXJuIElOVEVSUlVQVF9FWElUX1NUQVRV
UwotICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2Uo
ZSwgRXhjZXB0aW9uKToKLSAgICAgICAgICAgIHByaW50KCdcbiVzIHJhaXNlZDogJXMnICUgKGUu
X19jbGFzc19fLl9fbmFtZV9fLCBzdHIoZSkpLCBmaWxlPXN0ZGVycikKLSAgICAgICAgICAgIHRy
YWNlYmFjay5wcmludF9leGMoZmlsZT1zdGRlcnIpCi0gICAgICAgIHJldHVybiBFWENFUFRJT05B
TF9FWElUX1NUQVRVUwotCi0KLWRlZiBydW4ocG9ydCwgb3B0aW9ucywgYXJncywgbG9nZ2luZ19z
dHJlYW0pOgotICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKLSAgICBsb2dnZXIuc2V0
TGV2ZWwobG9nZ2luZy5ERUJVRyBpZiBvcHRpb25zLnZlcmJvc2UgZWxzZSBsb2dnaW5nLkVSUk9S
IGlmIG9wdGlvbnMucXVpZXQgZWxzZSBsb2dnaW5nLklORk8pCi0KLSAgICB0cnk6Ci0gICAgICAg
IHN0cmVhbSA9IE1ldGVyZWRTdHJlYW0obG9nZ2luZ19zdHJlYW0sIG9wdGlvbnMudmVyYm9zZSwg
bG9nZ2VyPWxvZ2dlciwgbnVtYmVyX29mX2NvbHVtbnM9cG9ydC5ob3N0LnBsYXRmb3JtLnRlcm1p
bmFsX3dpZHRoKCksIHByaW50X3RpbWVzdGFtcHM9b3B0aW9ucy50aW1lc3RhbXBzKQotICAgICAg
ICBtYW5hZ2VyID0gTWFuYWdlcihwb3J0LCBvcHRpb25zLCBzdHJlYW0pCi0KLSAgICAgICAgcmVz
dWx0ID0gbWFuYWdlci5ydW4oYXJncywganNvbl9vdXRwdXQ9b3B0aW9ucy5qc29uX291dHB1dCkK
LSAgICAgICAgX2xvZy5kZWJ1ZygiVGVzdGluZyBjb21wbGV0ZWQsIEV4aXQgc3RhdHVzOiAlZCIg
JSByZXN1bHQpCi0gICAgICAgIHJldHVybiByZXN1bHQKLSAgICBmaW5hbGx5OgotICAgICAgICBz
dHJlYW0uY2xlYW51cCgpCi0KLQotZGVmIHBhcnNlX2FyZ3MoYXJncyk6Ci0gICAgb3B0aW9uX2dy
b3VwX2RlZmluaXRpb25zID0gW10KLQotICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9ucy5hcHBl
bmQoKCdQbGF0Zm9ybSBvcHRpb25zJywgcGxhdGZvcm1fb3B0aW9ucygpKSkKLSAgICBvcHRpb25f
Z3JvdXBfZGVmaW5pdGlvbnMuYXBwZW5kKCgnQ29uZmlndXJhdGlvbiBvcHRpb25zJywgY29uZmln
dXJhdGlvbl9vcHRpb25zKCkpKQotICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9ucy5hcHBlbmQo
KCdQcmludGluZyBPcHRpb25zJywgWwotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLXEn
LCAnLS1xdWlldCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1J1biBxdWlldGx5IChlcnJvcnMsIHdhcm5pbmdz
LCBhbmQgcHJvZ3Jlc3Mgb25seSknKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy12
JywgJy0tdmVyYm9zZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0VuYWJsZSB2ZXJib3NlIHByaW50aW5nJyks
Ci0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXRpbWVzdGFtcHMnLCBhY3Rpb249J3N0
b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSdQcmludCB0aW1lc3RhbXBzIGZvciBlYWNoIGxvZ2dlZCBsaW5lJyksCi0gICAgICAgIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKCctLWpzb24tb3V0cHV0JywgYWN0aW9uPSdzdG9yZScsIGRlZmF1
bHQ9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2F2ZSB0ZXN0IHJl
c3VsdHMgYXMgSlNPTiB0byBmaWxlJyksCi0gICAgXSkpCi0KLSAgICBvcHRpb25fZ3JvdXBfZGVm
aW5pdGlvbnMuYXBwZW5kKCgnV2ViS2l0IE9wdGlvbnMnLCBbCi0gICAgICAgIG9wdHBhcnNlLm1h
a2Vfb3B0aW9uKCctZycsICctLWd1YXJkLW1hbGxvYycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRl
ZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0VuYWJsZSBH
dWFyZCBNYWxsb2MgKE9TIFggb25seSknKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24o
Jy0tcm9vdCcsIGFjdGlvbj0nc3RvcmUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSdQYXRoIHRvIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGV4ZWN1dGFibGVzIG5lZWRl
ZCB0byBydW4gdGVzdHMuJyksCi0gICAgXSkpCi0KLSAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlv
bnMuYXBwZW5kKCgnVGVzdGluZyBPcHRpb25zJywgWwotICAgICAgICBvcHRwYXJzZS5tYWtlX29w
dGlvbignLS13dGYtb25seScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0nVGVzdFdURics
IGRlc3Q9J2FwaV9iaW5hcnknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdP
bmx5IGJ1aWxkLCBjaGVjayBhbmQgcnVuIFRlc3RXVEYnKSwKLSAgICAgICAgb3B0cGFyc2UubWFr
ZV9vcHRpb24oJy0td2Via2l0LW9ubHknLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J1Rl
c3RXZWJLaXRBUEknLCBkZXN0PSdhcGlfYmluYXJ5JywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVscD0nT25seSBjaGVjayBhbmQgcnVuIFRlc3RXZWJLaXRBUEknKSwKLSAgICAgICAg
b3B0cGFyc2UubWFrZV9vcHRpb24oJy0td2ViLWNvcmUtb25seScsIGFjdGlvbj0nc3RvcmVfY29u
c3QnLCBjb25zdD0nVGVzdFdlYkNvcmUnLCBkZXN0PSdhcGlfYmluYXJ5JywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVscD0nT25seSBjaGVjayBhbmQgcnVuIFRlc3RXZWJDb3JlLmV4
ZSAoV2luZG93cyBvbmx5KScpLAotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS13ZWJr
aXQtbGVnYWN5LW9ubHknLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J1Rlc3RXZWJLaXRM
ZWdhY3knLCBkZXN0PSdhcGlfYmluYXJ5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGVscD0nT25seSBjaGVjayBhbmQgcnVuIFRlc3RXZWJLaXRMZWdhY3kuZXhlIChXaW5kb3dzIG9u
bHkpJyksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctZCcsICctLWR1bXAnLCBhY3Rp
b249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWxwPSdEdW1wIGFsbCB0ZXN0IG5hbWVzIHdpdGhvdXQgcnVubmluZyB0aGVtJyksCi0g
ICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkJywgZGVzdD0nYnVpbGQnLCBhY3Rp
b249J3N0b3JlX3RydWUnLCBkZWZhdWx0PVRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlbHA9J0NoZWNrIHRvIGVuc3VyZSB0aGUgYnVpbGQgaXMgdXAtdG8tZGF0ZSAoZGVmYXVs
dCkuJyksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLW5vLWJ1aWxkJywgZGVzdD0n
YnVpbGQnLCBhY3Rpb249J3N0b3JlX2ZhbHNlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVscD0iRG9uJ3QgY2hlY2sgdG8gc2VlIGlmIHRoZSBidWlsZCBpcyB1cC10by1kYXRlLiIp
LAotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS10aW1lb3V0JywgZGVmYXVsdD0zMCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nTnVtYmVyIG9mIHNlY29uZHMgdG8g
d2FpdCBiZWZvcmUgYSB0ZXN0IHRpbWVzIG91dCcpLAotICAgICAgICBvcHRwYXJzZS5tYWtlX29w
dGlvbignLS1uby10aW1lb3V0JywgZGVzdD0ndGltZW91dCcsIGFjdGlvbj0nc3RvcmVfZmFsc2Un
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdEaXNhYmxlIHRpbWVvdXRzIGZv
ciBhbGwgdGVzdHMnKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0taXRlcmF0aW9u
cycsIHR5cGU9J2ludCcsIGRlZmF1bHQ9MSwgaGVscD0nTnVtYmVyIG9mIHRpbWVzIHRvIHJ1biB0
aGUgc2V0IG9mIHRlc3RzIChlLmcuIEFCQ0FCQ0FCQyknKSwKLSAgICAgICAgb3B0cGFyc2UubWFr
ZV9vcHRpb24oJy0tcmVwZWF0LWVhY2gnLCB0eXBlPSdpbnQnLCBkZWZhdWx0PTEsIGhlbHA9J051
bWJlciBvZiB0aW1lcyB0byBydW4gZWFjaCB0ZXN0IChlLmcuIEFBQUJCQkNDQyknKSwKLQotICAg
ICAgICAjIEZJWE1FOiBSZW1vdmUgdGhlIGRlZmF1bHQsIEFQSSB0ZXN0cyBzaG91bGQgYmUgbXVs
dGlwcm9jZXNzCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWNoaWxkLXByb2Nlc3Nl
cycsIGRlZmF1bHQ9MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nTnVtYmVy
IG9mIHByb2Nlc3NlcyB0byBydW4gaW4gcGFyYWxsZWwuJyksCi0KLSAgICAgICAgIyBGSVhNRTog
RGVmYXVsdCBzaG91bGQgYmUgZmFsc2UsIEFQSSB0ZXN0cyBzaG91bGQgbm90IGJlIGZvcmNlZCB0
byBydW4gc2luZ2x5Ci0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXJ1bi1zaW5nbHkn
LCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PVRydWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9J1J1biBhIHNlcGFyYXRlIHByb2Nlc3MgZm9yIGVhY2ggdGVzdCcpLAot
Ci0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWZvcmNlJywgYWN0aW9uPSdzdG9yZV90
cnVlJywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0n
UnVuIGFsbCB0ZXN0cywgZXZlbiBESVNBQkxFRCB0ZXN0cycpLAotICAgICAgICBvcHRwYXJzZS5t
YWtlX29wdGlvbignLS1hZGRpdGlvbmFsLWVudi12YXInLCB0eXBlPSdzdHJpbmcnLCBhY3Rpb249
J2FwcGVuZCcsIGRlZmF1bHQ9W10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
J1Bhc3NlcyB0aGF0IGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSB0ZXN0cyAoLS1hZGRpdGlv
bmFsLWVudi12YXI9TkFNRT1WQUxVRSknKSwKLSAgICBdKSkKLSAgICBvcHRpb25fZ3JvdXBfZGVm
aW5pdGlvbnMuYXBwZW5kKCgnVXBsb2FkIE9wdGlvbnMnLCB1cGxvYWRfb3B0aW9ucygpKSkKLQot
ICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoCi0gICAgICAgIHVzYWdl
PSdydW4tYXBpLXRlc3RzIFtvcHRpb25zXSBbPHRlc3QgbmFtZXM+Li4uXScsCi0gICAgICAgIGRl
c2NyaXB0aW9uPSIiIkJ5IGRlZmF1bHQsIHJ1bi1hcGktdGVzdHMgd2lsbCBydW4gYWxsIEFQSSB0
ZXN0cy4gSXQgYWxzbyBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB0ZXN0cyBvZiB0aGUgXAot
Zm9ybWF0IDxzdWl0ZT4uPHRlc3Q+IG9yIDxjYW5vbmljYWxpemVkIGJpbmFyeSBuYW1lPi48c3Vp
dGU+Ljx0ZXN0Pi4gTm90ZSB0aGF0IGluIHRoZSBjYXNlIHdoZXJlIGEgYmluYXJ5IGlzIG5vdCBc
Ci1zcGVjaWZpZWQsIG9uZSB3aWxsIGJlIGluZmVycmVkIGJ5IGxpc3RpbmcgYWxsIGF2YWlsYWJs
ZSB0ZXN0cy4gU3BlY2lmeWluZyBqdXN0IGEgYmluYXJ5IG9yIGp1c3QgYSBzdWl0ZSB3aWxsIGNh
dXNlIGV2ZXJ5IFwKLXRlc3QgY29udGFpbmVkIHdpdGhpbiB0byBiZSBydW4uIFRoZSBjYW5vbmlj
YWxpemVkIGJpbmFyeSBuYW1lIGlzIHRoZSBiaW5hcnkgbmFtZSB3aXRoIGFueSBmaWxlbmFtZSBl
eHRlbnNpb24gXAotc3RyaXBwZWQuIEZvciBVbml4IHBvcnRzLCB0aGVzZSBiaW5hcmllcyBhcmUg
e30gYW5kIHt9LiBGb3IgV2luZG93cyBwb3J0cywgdGhleSBhcmUge30gYW5kIHt9LiIiIi5mb3Jt
YXQoCi0gICAgICAgICAgICAnLCAnLmpvaW4oYmFzZS5Qb3J0LkFQSV9URVNUX0JJTkFSWV9OQU1F
U1s6LTFdKSwgYmFzZS5Qb3J0LkFQSV9URVNUX0JJTkFSWV9OQU1FU1stMV0sCi0gICAgICAgICAg
ICAnLCAnLmpvaW4od2luLldpblBvcnQuQVBJX1RFU1RfQklOQVJZX05BTUVTWzotMV0pLCB3aW4u
V2luUG9ydC5BUElfVEVTVF9CSU5BUllfTkFNRVNbLTFdLAotICAgICkpCi0KLSAgICBmb3IgZ3Jv
dXBfbmFtZSwgZ3JvdXBfb3B0aW9ucyBpbiBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnM6Ci0gICAg
ICAgIG9wdGlvbl9ncm91cCA9IG9wdHBhcnNlLk9wdGlvbkdyb3VwKG9wdGlvbl9wYXJzZXIsIGdy
b3VwX25hbWUpCi0gICAgICAgIG9wdGlvbl9ncm91cC5hZGRfb3B0aW9ucyhncm91cF9vcHRpb25z
KQotICAgICAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAob3B0aW9uX2dyb3VwKQot
Ci0gICAgcmV0dXJuIG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncyhhcmdzKQotCi0KLWlmIF9fbmFt
ZV9fID09ICdfX21haW5fXyc6Ci0gICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0sIHN5cy5z
dGRvdXQsIHN5cy5zdGRlcnIpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9hcGlfdGVz
dHMvcnVubmVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvYXBpX3Rl
c3RzL3J1bm5lci5weQkocmV2aXNpb24gMjc3MDIwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9hcGlfdGVzdHMvcnVubmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5
cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDEyICsyNSwzNCBAQCBpbXBvcnQgbG9nZ2lu
ZwogaW1wb3J0IHRpbWUKIAogZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IHN0cmluZ191dGlscwor
ZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IFRhc2tQb29sCiAKLWZyb20gd2Via2l0cHkuY29tbW9u
IGltcG9ydCBtZXNzYWdlX3Bvb2wKIGZyb20gd2Via2l0cHkuY29tbW9uLml0ZXJhdGlvbl9jb21w
YXRpYmlsaXR5IGltcG9ydCBpdGVyaXRlbXMKIGZyb20gd2Via2l0cHkucG9ydC5zZXJ2ZXJfcHJv
Y2VzcyBpbXBvcnQgU2VydmVyUHJvY2VzcywgX2xvZyBhcyBzZXJ2ZXJfcHJvY2Vzc19sb2dnZXIK
IGZyb20gd2Via2l0cHkueGNvZGUuc2ltdWxhdGVkX2RldmljZSBpbXBvcnQgU2ltdWxhdGVkRGV2
aWNlTWFuYWdlcgogCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworZGVm
IHNldHVwX3NoYXJkKHBvcnQ9Tm9uZSk6CisgICAgcmV0dXJuIF9Xb3JrZXIuc2V0dXAocG9ydD1w
b3J0KQorCisKK2RlZiBydW5fc2hhcmQobmFtZSwgKnRlc3RzKToKKyAgICByZXR1cm4gX1dvcmtl
ci5pbnN0YW5jZS5ydW4obmFtZSwgKnRlc3RzKQorCisKK2RlZiByZXBvcnRfcmVzdWx0KHdvcmtl
ciwgdGVzdCwgc3RhdHVzLCBvdXRwdXQpOgorICAgIGlmIHN0YXR1cyA9PSBSdW5uZXIuU1RBVFVT
X1BBU1NFRCBhbmQgKG5vdCBvdXRwdXQgb3IgUnVubmVyLmluc3RhbmNlLnBvcnQuZ2V0X29wdGlv
bigncXVpZXQnKSk6CisgICAgICAgIFJ1bm5lci5pbnN0YW5jZS5wcmludGVyLndyaXRlX3VwZGF0
ZSgne30ge30ge30nLmZvcm1hdCh3b3JrZXIsIHRlc3QsIFJ1bm5lci5OQU1FX0ZPUl9TVEFUVVNb
c3RhdHVzXSkpCisgICAgZWxzZToKKyAgICAgICAgUnVubmVyLmluc3RhbmNlLnByaW50ZXIud3Jp
dGVsbigne30ge30ge30nLmZvcm1hdCh3b3JrZXIsIHRlc3QsIFJ1bm5lci5OQU1FX0ZPUl9TVEFU
VVNbc3RhdHVzXSkpCisgICAgUnVubmVyLmluc3RhbmNlLnJlc3VsdHNbdGVzdF0gPSBzdGF0dXMs
IG91dHB1dAorCisKK2RlZiB0ZWFyZG93bl9zaGFyZCgpOgorICAgIHJldHVybiBfV29ya2VyLnRl
YXJkb3duKCkKKwogCiBjbGFzcyBSdW5uZXIob2JqZWN0KToKICAgICBTVEFUVVNfUEFTU0VEID0g
MApAQCAtNDgsNiArNzAsOCBAQCBjbGFzcyBSdW5uZXIob2JqZWN0KToKICAgICAgICAgJ0Rpc2Fi
bGVkJywKICAgICBdCiAKKyAgICBpbnN0YW5jZSA9IE5vbmUKKwogICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBwb3J0LCBwcmludGVyKToKICAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAogICAgICAgICBz
ZWxmLnByaW50ZXIgPSBwcmludGVyCkBAIC01NiwxNiArODAsNiBAQCBjbGFzcyBSdW5uZXIob2Jq
ZWN0KToKICAgICAgICAgc2VsZi5faGFzX2xvZ2dlZF9mb3JfdGVzdCA9IFRydWUgICMgU3VwcHJl
c3MgYW4gZW1wdHkgbGluZSBiZXR3ZWVuICJSdW5uaW5nIHRlc3RzIiBhbmQgdGhlIGZpcnN0IHRl
c3QncyBvdXRwdXQuCiAgICAgICAgIHNlbGYucmVzdWx0cyA9IHt9CiAKLSAgICBAc3RhdGljbWV0
aG9kCi0gICAgZGVmIF9zaGFyZF90ZXN0cyh0ZXN0cyk6Ci0gICAgICAgIHNoYXJkcyA9IHt9Ci0g
ICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgotICAgICAgICAgICAgc2hhcmRfcHJlZml4ID0gJy4n
LmpvaW4odGVzdC5zcGxpdCgnLicpWzotMV0pCi0gICAgICAgICAgICBpZiBzaGFyZF9wcmVmaXgg
bm90IGluIHNoYXJkczoKLSAgICAgICAgICAgICAgICBzaGFyZHNbc2hhcmRfcHJlZml4XSA9IFtd
Ci0gICAgICAgICAgICBzaGFyZHNbc2hhcmRfcHJlZml4XS5hcHBlbmQodGVzdCkKLSAgICAgICAg
cmV0dXJuIHNoYXJkcwotCiAgICAgIyBGSVhNRSBBUEkgdGVzdHMgc2hvdWxkIHJ1biBhcyBhbiBh
cHAsIHdlIHdvbid0IG5lZWQgdGhpcyBmdW5jdGlvbiA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3NTIwND4KICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIGNvbW1h
bmRfZm9yX3BvcnQocG9ydCwgYXJncyk6CkBAIC04MCw2ICs5NCwxNiBAQCBjbGFzcyBSdW5uZXIo
b2JqZWN0KToKICAgICAgICAgICAgIGFyZ3NbMF0gPSBvcy5wYXRoLnNwbGl0ZXh0KGFyZ3NbMF0p
WzBdICsgJy5leGUnCiAgICAgICAgIHJldHVybiBhcmdzCiAKKyAgICBAc3RhdGljbWV0aG9kCisg
ICAgZGVmIF9zaGFyZF90ZXN0cyh0ZXN0cyk6CisgICAgICAgIHNoYXJkcyA9IHt9CisgICAgICAg
IGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgc2hhcmRfcHJlZml4ID0gJy4nLmpvaW4o
dGVzdC5zcGxpdCgnLicpWzotMV0pCisgICAgICAgICAgICBpZiBzaGFyZF9wcmVmaXggbm90IGlu
IHNoYXJkczoKKyAgICAgICAgICAgICAgICBzaGFyZHNbc2hhcmRfcHJlZml4XSA9IFtdCisgICAg
ICAgICAgICBzaGFyZHNbc2hhcmRfcHJlZml4XS5hcHBlbmQodGVzdCkKKyAgICAgICAgcmV0dXJu
IHNoYXJkcworCiAgICAgZGVmIHJ1bihzZWxmLCB0ZXN0cywgbnVtX3dvcmtlcnMpOgogICAgICAg
ICBpZiBub3QgdGVzdHM6CiAgICAgICAgICAgICByZXR1cm4KQEAgLTkxLDQ0ICsxMTUsMjEgQEAg
Y2xhc3MgUnVubmVyKG9iamVjdCk6CiAgICAgICAgIHNlcnZlcl9wcm9jZXNzX2xvZ2dlci5zZXRM
ZXZlbChsb2dnaW5nLkNSSVRJQ0FMKQogCiAgICAgICAgIHRyeToKKyAgICAgICAgICAgIFJ1bm5l
ci5pbnN0YW5jZSA9IHNlbGYKICAgICAgICAgICAgIHNlbGYuX251bV93b3JrZXJzID0gbWluKG51
bV93b3JrZXJzLCBsZW4oc2hhcmRzKSkKLSAgICAgICAgICAgIHdpdGggbWVzc2FnZV9wb29sLmdl
dChzZWxmLCBsYW1iZGEgY2FsbGVyOiBfV29ya2VyKGNhbGxlciwgc2VsZi5wb3J0LCBzaGFyZHMp
LCBzZWxmLl9udW1fd29ya2VycykgYXMgcG9vbDoKLSAgICAgICAgICAgICAgICBwb29sLnJ1bigo
J3Rlc3QnLCBzaGFyZCkgZm9yIHNoYXJkLCBfIGluIGl0ZXJpdGVtcyhzaGFyZHMpKQotICAgICAg
ICBmaW5hbGx5OgotICAgICAgICAgICAgc2VydmVyX3Byb2Nlc3NfbG9nZ2VyLnNldExldmVsKG9y
aWdpbmFsX2xldmVsKQotCi0KLSAgICBkZWYgaGFuZGxlKHNlbGYsIG1lc3NhZ2VfbmFtZSwgc291
cmNlLCB0ZXN0X25hbWU9Tm9uZSwgc3RhdHVzPTAsIG91dHB1dD0nJyk6Ci0gICAgICAgIGlmIG1l
c3NhZ2VfbmFtZSA9PSAnZGlkX3NwYXduX3dvcmtlcic6Ci0gICAgICAgICAgICByZXR1cm4KIAot
ICAgICAgICBzb3VyY2UgPSAnJyBpZiBzZWxmLl9udW1fd29ya2VycyA9PSAxIGVsc2Ugc291cmNl
ICsgJyAnCi0gICAgICAgIHdpbGxfc3RyZWFtX2xvZ3MgPSBzZWxmLl9udW1fd29ya2VycyA9PSAx
IGFuZCBzZWxmLnBvcnQuZ2V0X29wdGlvbigndmVyYm9zZScpCi0gICAgICAgIGlmIG1lc3NhZ2Vf
bmFtZSA9PSAnZW5kZWRfdGVzdCc6Ci0gICAgICAgICAgICB1cGRhdGUgPSAne317fSB7fScuZm9y
bWF0KHNvdXJjZSwgdGVzdF9uYW1lLCBSdW5uZXIuTkFNRV9GT1JfU1RBVFVTW3N0YXR1c10pCi0K
LSAgICAgICAgICAgICMgRG9uJ3QgcHJpbnQgdGVzdCBvdXRwdXQgaWYgLS1xdWlldC4KLSAgICAg
ICAgICAgIGlmIHN0YXR1cyAhPSBSdW5uZXIuU1RBVFVTX1BBU1NFRCBvciAob3V0cHV0IGFuZCBu
b3Qgc2VsZi5wb3J0LmdldF9vcHRpb24oJ3F1aWV0JykpOgotICAgICAgICAgICAgICAgIGlmIG5v
dCB3aWxsX3N0cmVhbV9sb2dzOgotICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBvdXRw
dXQuc3BsaXRsaW5lcygpOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2hh
c19sb2dnZWRfZm9yX3Rlc3Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faGFz
X2xvZ2dlZF9mb3JfdGVzdCA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
LnByaW50ZXIud3JpdGVsbihzb3VyY2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBy
aW50ZXIud3JpdGVsbigne30gICAge30nLmZvcm1hdChzb3VyY2UsIGxpbmUpKQotICAgICAgICAg
ICAgICAgIHNlbGYucHJpbnRlci53cml0ZWxuKHVwZGF0ZSkKLSAgICAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAgICAgc2VsZi5wcmludGVyLndyaXRlX3VwZGF0ZSh1cGRhdGUpCi0gICAgICAg
ICAgICBzZWxmLnRlc3RzX3J1biArPSAxCi0gICAgICAgICAgICBzZWxmLnJlc3VsdHNbdGVzdF9u
YW1lXSA9IChzdGF0dXMsIG91dHB1dCkKLSAgICAgICAgICAgIHNlbGYuX2hhc19sb2dnZWRfZm9y
X3Rlc3QgPSBGYWxzZQotCi0gICAgICAgIGlmIG1lc3NhZ2VfbmFtZSA9PSAnbG9nJyBhbmQgd2ls
bF9zdHJlYW1fbG9nczoKLSAgICAgICAgICAgIGZvciBsaW5lIGluIG91dHB1dC5zcGxpdGxpbmVz
KCk6Ci0gICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2hhc19sb2dnZWRfZm9yX3Rlc3Q6Ci0g
ICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhc19sb2dnZWRfZm9yX3Rlc3QgPSBUcnVlCi0gICAg
ICAgICAgICAgICAgICAgIHNlbGYucHJpbnRlci53cml0ZWxuKHNvdXJjZSkKLSAgICAgICAgICAg
ICAgICBzZWxmLnByaW50ZXIud3JpdGVsbigne30gICAge30nLmZvcm1hdChzb3VyY2UsIGxpbmUp
KQorICAgICAgICAgICAgd2l0aCBUYXNrUG9vbCgKKyAgICAgICAgICAgICAgICB3b3JrZXJzPXNl
bGYuX251bV93b3JrZXJzLAorICAgICAgICAgICAgICAgIHNldHVwPXNldHVwX3NoYXJkLCBzZXR1
cGt3YXJncz1kaWN0KHBvcnQ9c2VsZi5wb3J0KSwKKyAgICAgICAgICAgICAgICB0ZWFyZG93bj10
ZWFyZG93bl9zaGFyZCwKKyAgICAgICAgICAgICkgYXMgcG9vbDoKKyAgICAgICAgICAgICAgICBm
b3IgbmFtZSwgdGVzdHMgaW4gaXRlcml0ZW1zKHNoYXJkcyk6CisgICAgICAgICAgICAgICAgICAg
IHBvb2wuZG8ocnVuX3NoYXJkLCBuYW1lLCAqdGVzdHMpCisgICAgICAgICAgICAgICAgcG9vbC53
YWl0KCkKIAorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VydmVyX3Byb2Nlc3NfbG9n
Z2VyLnNldExldmVsKG9yaWdpbmFsX2xldmVsKQorICAgICAgICAgICAgUnVubmVyLmluc3RhbmNl
ID0gTm9uZQogCiAgICAgZGVmIHJlc3VsdF9tYXBfYnlfc3RhdHVzKHNlbGYsIHN0YXR1cz1Ob25l
KToKICAgICAgICAgbWFwID0ge30KQEAgLTEzOSwxNyArMTQwLDI1IEBAIGNsYXNzIFJ1bm5lcihv
YmplY3QpOgogCiAKIGNsYXNzIF9Xb3JrZXIob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2Vs
ZiwgY2FsbGVyLCBwb3J0LCBzaGFyZF9tYXApOgotICAgICAgICBzZWxmLl9jYWxsZXIgPSBjYWxs
ZXIKKyAgICBpbnN0YW5jZSA9IE5vbmUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXR1
cChjbHMsIHBvcnQ9Tm9uZSk6CisgICAgICAgIGNscy5pbnN0YW5jZSA9IGNscyhwb3J0KQorCisg
ICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJkb3duKGNscyk6CisgICAgICAgIGNscy5pbnN0
YW5jZSA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0KToKICAgICAgICAgc2Vs
Zi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2VsZi5ob3N0ID0gcG9ydC5ob3N0Ci0gICAgICAgIHNl
bGYuX3NoYXJkX21hcCA9IHNoYXJkX21hcAogCiAgICAgICAgICMgU2VydmVyUHJvY2VzcyBkb2Vz
bid0IGFsbG93IGZvciBhIHRpbWVvdXQgb2YgJ05vbmUsJyB0aGlzIHVzZXMgYSB3ZWVrIGluc3Rl
YWQgb2YgTm9uZS4KICAgICAgICAgc2VsZi5fdGltZW91dCA9IGludChzZWxmLl9wb3J0LmdldF9v
cHRpb24oJ3RpbWVvdXQnKSkgaWYgc2VsZi5fcG9ydC5nZXRfb3B0aW9uKCd0aW1lb3V0JykgZWxz
ZSA2MCAqIDI0ICogNwogCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfZmlsdGVyX25vaXN5
X291dHB1dChvdXRwdXQpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZmlsdGVyX25vaXN5
X291dHB1dChjbHMsIG91dHB1dCk6CiAgICAgICAgIHJlc3VsdCA9ICcnCiAgICAgICAgIGZvciBs
aW5lIGluIG91dHB1dC5zcGxpdGxpbmVzKCk6CiAgICAgICAgICAgICBpZiBsaW5lLmxzdHJpcCgp
LnN0YXJ0c3dpdGgoJ29iamNbJyk6CkBAIC0xNjcsMTMgKzE3NiwxNCBAQCBjbGFzcyBfV29ya2Vy
KG9iamVjdCk6CiAgICAgICAgIGlmIHRlc3Quc3BsaXQoJy4nKVsxXS5zdGFydHN3aXRoKCdESVNB
QkxFRF8nKSBhbmQgbm90IHNlbGYuX3BvcnQuZ2V0X29wdGlvbignZm9yY2UnKToKICAgICAgICAg
ICAgIHN0YXR1cyA9IFJ1bm5lci5TVEFUVVNfRElTQUJMRUQKIAorICAgICAgICBzdGRvdXRfYnVm
ZmVyID0gJycKKyAgICAgICAgc3RkZXJyX2J1ZmZlciA9ICcnCisKICAgICAgICAgdHJ5OgogICAg
ICAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIHNlbGYuX3RpbWVvdXQKICAgICAgICAg
ICAgIGlmIHN0YXR1cyAhPSBSdW5uZXIuU1RBVFVTX0RJU0FCTEVEOgogICAgICAgICAgICAgICAg
IHNlcnZlcl9wcm9jZXNzLnN0YXJ0KCkKIAotICAgICAgICAgICAgc3Rkb3V0X2J1ZmZlciA9ICcn
Ci0gICAgICAgICAgICBzdGRlcnJfYnVmZmVyID0gJycKICAgICAgICAgICAgIHdoaWxlIHN0YXR1
cyA9PSBSdW5uZXIuU1RBVFVTX1JVTk5JTkc6CiAgICAgICAgICAgICAgICAgc3Rkb3V0X2xpbmUs
IHN0ZGVycl9saW5lID0gc2VydmVyX3Byb2Nlc3MucmVhZF9laXRoZXJfc3Rkb3V0X29yX3N0ZGVy
cl9saW5lKGRlYWRsaW5lKQogICAgICAgICAgICAgICAgIGlmIG5vdCBzdGRlcnJfbGluZSBhbmQg
bm90IHN0ZG91dF9saW5lOgpAQCAtMTgyLDcgKzE5Miw3IEBAIGNsYXNzIF9Xb3JrZXIob2JqZWN0
KToKICAgICAgICAgICAgICAgICBpZiBzdGRlcnJfbGluZToKICAgICAgICAgICAgICAgICAgICAg
c3RkZXJyX2xpbmUgPSBzdHJpbmdfdXRpbHMuZGVjb2RlKHN0ZGVycl9saW5lLCB0YXJnZXRfdHlw
ZT1zdHIpCiAgICAgICAgICAgICAgICAgICAgIHN0ZGVycl9idWZmZXIgKz0gc3RkZXJyX2xpbmUK
LSAgICAgICAgICAgICAgICAgICAgc2VsZi5wb3N0KCdsb2cnLCBvdXRwdXQ9c3RkZXJyX2xpbmVb
Oi0xXSkKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcihzdGRlcnJfbGluZVs6LTFdKQog
ICAgICAgICAgICAgICAgIGlmIHN0ZG91dF9saW5lOgogICAgICAgICAgICAgICAgICAgICBzdGRv
dXRfbGluZSA9IHN0cmluZ191dGlscy5kZWNvZGUoc3Rkb3V0X2xpbmUsIHRhcmdldF90eXBlPXN0
cikKICAgICAgICAgICAgICAgICAgICAgaWYgJyoqUEFTUyoqJyBpbiBzdGRvdXRfbGluZToKQEAg
LTE5MSw3ICsyMDEsNyBAQCBjbGFzcyBfV29ya2VyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0dXMgPSBSdW5uZXIuU1RBVFVTX0ZBSUxFRAogICAgICAgICAgICAgICAgICAg
ICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0X2J1ZmZlciArPSBzdGRvdXRf
bGluZQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wb3N0KCdsb2cnLCBvdXRwdXQ9c3Rk
b3V0X2xpbmVbOi0xXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJyb3Ioc3Rkb3V0
X2xpbmVbOi0xXSkKIAogICAgICAgICAgICAgaWYgc3RhdHVzID09IFJ1bm5lci5TVEFUVVNfRElT
QUJMRUQ6CiAgICAgICAgICAgICAgICAgcGFzcwpAQCAtMjA1LDIyICsyMTUsMzAgQEAgY2xhc3Mg
X1dvcmtlcihvYmplY3QpOgogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgcmVtYWluaW5n
X3N0ZGVyciA9IHN0cmluZ191dGlscy5kZWNvZGUoc2VydmVyX3Byb2Nlc3MucG9wX2FsbF9idWZm
ZXJlZF9zdGRlcnIoKSwgdGFyZ2V0X3R5cGU9c3RyKQogICAgICAgICAgICAgcmVtYWluaW5nX3N0
ZG91dCA9IHN0cmluZ191dGlscy5kZWNvZGUoc2VydmVyX3Byb2Nlc3MucG9wX2FsbF9idWZmZXJl
ZF9zdGRvdXQoKSwgdGFyZ2V0X3R5cGU9c3RyKQotICAgICAgICAgICAgc2VsZi5wb3N0KCdsb2cn
LCBvdXRwdXQ9cmVtYWluaW5nX3N0ZGVyciArIHJlbWFpbmluZ19zdGRvdXQpCisgICAgICAgICAg
ICBmb3IgbGluZSBpbiAocmVtYWluaW5nX3N0ZG91dCArIHJlbWFpbmluZ19zdGRlcnIpLnNwbGl0
bGluZXMoRmFsc2UpOgorICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IobGluZSkKICAgICAgICAg
ICAgIG91dHB1dF9idWZmZXIgPSBzdGRlcnJfYnVmZmVyICsgc3Rkb3V0X2J1ZmZlciArIHJlbWFp
bmluZ19zdGRlcnIgKyByZW1haW5pbmdfc3Rkb3V0CiAgICAgICAgICAgICBzZXJ2ZXJfcHJvY2Vz
cy5zdG9wKCkKIAotICAgICAgICBzZWxmLnBvc3QoJ2VuZGVkX3Rlc3QnLCAne30ue30nLmZvcm1h
dChiaW5hcnlfbmFtZSwgdGVzdCksIHN0YXR1cywgc2VsZi5fZmlsdGVyX25vaXN5X291dHB1dChv
dXRwdXRfYnVmZmVyKSkKLQotICAgIGRlZiBfcnVuX3NoYXJkX3dpdGhfYmluYXJ5KHNlbGYsIGJp
bmFyeV9uYW1lLCB0ZXN0cyk6Ci0gICAgICAgIHJlbWFpbmluZ190ZXN0cyA9IGxpc3QodGVzdHMp
CisgICAgICAgIFRhc2tQb29sLlByb2Nlc3MucXVldWUuc2VuZChUYXNrUG9vbC5UYXNrKAorICAg
ICAgICAgICAgcmVwb3J0X3Jlc3VsdCwgTm9uZSwgVGFza1Bvb2wuUHJvY2Vzcy5uYW1lLAorICAg
ICAgICAgICAgJ3t9Lnt9Jy5mb3JtYXQoYmluYXJ5X25hbWUsIHRlc3QpLAorICAgICAgICAgICAg
c3RhdHVzLAorICAgICAgICAgICAgc2VsZi5fZmlsdGVyX25vaXN5X291dHB1dChvdXRwdXRfYnVm
ZmVyKSwKKyAgICAgICAgKSkKKworICAgIGRlZiBydW4oc2VsZiwgbmFtZSwgKnRlc3RzKToKKyAg
ICAgICAgYmluYXJ5X25hbWUgPSBuYW1lLnNwbGl0KCcuJylbMF0KKyAgICAgICAgcmVtYWluaW5n
X3Rlc3RzID0gWycuJy5qb2luKHRlc3Quc3BsaXQoJy4nKVsxOl0pIGZvciB0ZXN0IGluIHRlc3Rz
XQogCiAgICAgICAgICMgVHJ5IHRvIHJ1biB0aGUgc2hhcmQgaW4gYSBzaW5nbGUgcHJvY2Vzcy4K
ICAgICAgICAgd2hpbGUgcmVtYWluaW5nX3Rlc3RzIGFuZCBub3Qgc2VsZi5fcG9ydC5nZXRfb3B0
aW9uKCdydW5fc2luZ2x5Jyk6CiAgICAgICAgICAgICBzdGFydGluZ19sZW5ndGggPSBsZW4ocmVt
YWluaW5nX3Rlc3RzKQogICAgICAgICAgICAgc2VydmVyX3Byb2Nlc3MgPSBTZXJ2ZXJQcm9jZXNz
KAogICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQsIGJpbmFyeV9uYW1lLAotICAgICAgICAgICAg
ICAgIFJ1bm5lci5jb21tYW5kX2Zvcl9wb3J0KHNlbGYuX3BvcnQsIFtzZWxmLl9wb3J0Ll9idWls
ZF9wYXRoKGJpbmFyeV9uYW1lKSwgJy0tZ3Rlc3RfZmlsdGVyPXt9Jy5mb3JtYXQoJzonLmpvaW4o
cmVtYWluaW5nX3Rlc3RzKSldKSwKLSAgICAgICAgICAgICAgICBlbnY9c2VsZi5fcG9ydC5lbnZp
cm9ubWVudF9mb3JfYXBpX3Rlc3RzKCkpCisgICAgICAgICAgICAgICAgUnVubmVyLmNvbW1hbmRf
Zm9yX3BvcnQoc2VsZi5fcG9ydCwgWworICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0Ll9i
dWlsZF9wYXRoKGJpbmFyeV9uYW1lKSwgJy0tZ3Rlc3RfZmlsdGVyPXt9Jy5mb3JtYXQoJzonLmpv
aW4ocmVtYWluaW5nX3Rlc3RzKSkKKyAgICAgICAgICAgICAgICBdKSwgZW52PXNlbGYuX3BvcnQu
ZW52aXJvbm1lbnRfZm9yX2FwaV90ZXN0cygpKQogCiAgICAgICAgICAgICB0cnk6CiAgICAgICAg
ICAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIHNlbGYuX3RpbWVvdXQKQEAgLTIzMCw3
ICsyNDgsNyBAQCBjbGFzcyBfV29ya2VyKG9iamVjdCk6CiAKICAgICAgICAgICAgICAgICBzZXJ2
ZXJfcHJvY2Vzcy5zdGFydCgpCiAgICAgICAgICAgICAgICAgd2hpbGUgcmVtYWluaW5nX3Rlc3Rz
OgotICAgICAgICAgICAgICAgICAgICBzdGRvdXQgPSBzZXJ2ZXJfcHJvY2Vzcy5yZWFkX3N0ZG91
dF9saW5lKGRlYWRsaW5lKQorICAgICAgICAgICAgICAgICAgICBzdGRvdXQgPSBzdHJpbmdfdXRp
bHMuZGVjb2RlKHNlcnZlcl9wcm9jZXNzLnJlYWRfc3Rkb3V0X2xpbmUoZGVhZGxpbmUpLCB0YXJn
ZXRfdHlwZT1zdHIpCiAKICAgICAgICAgICAgICAgICAgICAgIyBJZiB3ZSd2ZSB0cmlnZ2VyZWQg
YSB0aW1lb3V0LCB3ZSBkb24ndCBrbm93IHdoaWNoIHRlc3QgY2F1c2VkIGl0LiBCcmVhayBvdXQg
YW5kIHJ1biBzaW5nbHkuCiAgICAgICAgICAgICAgICAgICAgIGlmIHN0ZG91dCBpcyBOb25lIGFu
ZCBzZXJ2ZXJfcHJvY2Vzcy50aW1lZF9vdXQ6CkBAIC0yNTEsNyArMjY5LDE0IEBAIGNsYXNzIF9X
b3JrZXIob2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAg
ICAgICAgICAgICAgIGlmIGxhc3RfdGVzdCBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlbWFpbmluZ190ZXN0cy5yZW1vdmUobGFzdF90ZXN0KQotICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5wb3N0KCdlbmRlZF90ZXN0JywgJ3t9Lnt9Jy5mb3JtYXQoYmluYXJ5X25h
bWUsIGxhc3RfdGVzdCksIGxhc3Rfc3RhdHVzLCBzdGRvdXRfYnVmZmVyKQorCisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzdGRvdXRfYnVmZmVyLnNwbGl0bGluZXMoRmFsc2Up
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IobGluZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFRhc2tQb29sLlByb2Nlc3MucXVldWUuc2VuZChUYXNrUG9vbC5UYXNr
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydF9yZXN1bHQsIE5vbmUsIFRhc2tQ
b29sLlByb2Nlc3MubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAne30ue30nLmZv
cm1hdChiaW5hcnlfbmFtZSwgbGFzdF90ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsYXN0X3N0YXR1cywgc3Rkb3V0X2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICkp
CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgc2VsZi5f
dGltZW91dAogICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0X2J1ZmZlciA9ICcnCiAKQEAg
LTI2NCwxMCArMjg5LDE3IEBAIGNsYXNzIF9Xb3JrZXIob2JqZWN0KToKICAgICAgICAgICAgICAg
ICAjIFdlIGFzc3VtZSB0aGF0IHN0ZGVyciBpcyBvbmx5IHJlbGV2YW50IGlmIHRoZXJlIGlzIGEg
Y3Jhc2ggKG1lYW5pbmcgd2UgdHJpZ2dlcmVkIGFuIGFzc2VydCkKICAgICAgICAgICAgICAgICBp
ZiBsYXN0X3Rlc3Q6CiAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ190ZXN0cy5yZW1vdmUo
bGFzdF90ZXN0KQotICAgICAgICAgICAgICAgICAgICBzdGRvdXRfYnVmZmVyICs9IHNlcnZlcl9w
cm9jZXNzLnBvcF9hbGxfYnVmZmVyZWRfc3Rkb3V0KCkKLSAgICAgICAgICAgICAgICAgICAgc3Rk
ZXJyX2J1ZmZlciA9IHNlcnZlcl9wcm9jZXNzLnBvcF9hbGxfYnVmZmVyZWRfc3RkZXJyKCkgaWYg
bGFzdF9zdGF0dXMgPT0gUnVubmVyLlNUQVRVU19DUkFTSEVEIGVsc2UgJycKLSAgICAgICAgICAg
ICAgICAgICAgc2VsZi5wb3N0KCdsb2cnLCBvdXRwdXQ9c3Rkb3V0X2J1ZmZlciArIHN0ZGVycl9i
dWZmZXIpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYucG9zdCgnZW5kZWRfdGVzdCcsICd7fS57
fScuZm9ybWF0KGJpbmFyeV9uYW1lLCBsYXN0X3Rlc3QpLCBsYXN0X3N0YXR1cywgc2VsZi5fZmls
dGVyX25vaXN5X291dHB1dChzdGRvdXRfYnVmZmVyICsgc3RkZXJyX2J1ZmZlcikpCisgICAgICAg
ICAgICAgICAgICAgIHN0ZG91dF9idWZmZXIgKz0gc3RyaW5nX3V0aWxzLmRlY29kZShzZXJ2ZXJf
cHJvY2Vzcy5wb3BfYWxsX2J1ZmZlcmVkX3N0ZG91dCgpLCB0YXJnZXRfdHlwZT1zdHIpCisgICAg
ICAgICAgICAgICAgICAgIHN0ZGVycl9idWZmZXIgPSBzdHJpbmdfdXRpbHMuZGVjb2RlKHNlcnZl
cl9wcm9jZXNzLnBvcF9hbGxfYnVmZmVyZWRfc3RkZXJyKCksIHRhcmdldF90eXBlPXN0cikgaWYg
bGFzdF9zdGF0dXMgPT0gUnVubmVyLlNUQVRVU19DUkFTSEVEIGVsc2UgJycKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIGxpbmUgaW4gKHN0ZG91dF9idWZmZXIgKyBzdGRlcnJfYnVmZmVyKS5zcGxp
dGxpbmVzKGtlZXBlbmRzPUZhbHNlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJy
b3IobGluZSkKKworICAgICAgICAgICAgICAgICAgICBUYXNrUG9vbC5Qcm9jZXNzLnF1ZXVlLnNl
bmQoVGFza1Bvb2wuVGFzaygKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydF9yZXN1bHQs
IE5vbmUsIFRhc2tQb29sLlByb2Nlc3MubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICd7
fS57fScuZm9ybWF0KGJpbmFyeV9uYW1lLCBsYXN0X3Rlc3QpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgbGFzdF9zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWx0ZXJf
bm9pc3lfb3V0cHV0KHN0ZG91dF9idWZmZXIgKyBzdGRlcnJfYnVmZmVyKSwKKyAgICAgICAgICAg
ICAgICAgICAgKSkKIAogICAgICAgICAgICAgICAgIGlmIHNlcnZlcl9wcm9jZXNzLnRpbWVkX291
dDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKQEAgLTI4MSwxOSArMzEzLDMgQEAgY2xhc3Mg
X1dvcmtlcihvYmplY3QpOgogICAgICAgICAjIE5vdywganVzdCB0cnkgYW5kIHJ1biB0aGUgcmVz
dCBvZiB0aGUgdGVzdHMgc2luZ2x5LgogICAgICAgICBmb3IgdGVzdCBpbiByZW1haW5pbmdfdGVz
dHM6CiAgICAgICAgICAgICBzZWxmLl9ydW5fc2luZ2xlX3Rlc3QoYmluYXJ5X25hbWUsIHRlc3Qp
Ci0KLSAgICBkZWYgcG9zdChzZWxmLCBtZXNzYWdlX25hbWUsIHRlc3RfbmFtZT1Ob25lLCBzdGF0
dXM9MCwgb3V0cHV0PScnKToKLSAgICAgICAgc2VsZi5fY2FsbGVyLnBvc3QobWVzc2FnZV9uYW1l
LCB0ZXN0X25hbWUsIHN0YXR1cywgb3V0cHV0KQotCi0gICAgZGVmIGhhbmRsZShzZWxmLCBtZXNz
YWdlX25hbWUsIHNvdXJjZSwgc2hhcmRfbmFtZSk6Ci0gICAgICAgIGFzc2VydCBtZXNzYWdlX25h
bWUgPT0gJ3Rlc3QnCi0gICAgICAgIHNlbGYucG9zdCgnc3RhcnRlZF9zaGFyZCcsIHNoYXJkX25h
bWUpCi0KLSAgICAgICAgYmluYXJ5X21hcCA9IHt9Ci0gICAgICAgIGZvciB0ZXN0IGluIHNlbGYu
X3NoYXJkX21hcFtzaGFyZF9uYW1lXToKLSAgICAgICAgICAgIHNwbGl0X3Rlc3RfbmFtZSA9IHRl
c3Quc3BsaXQoJy4nKQotICAgICAgICAgICAgaWYgc3BsaXRfdGVzdF9uYW1lWzBdIG5vdCBpbiBi
aW5hcnlfbWFwOgotICAgICAgICAgICAgICAgIGJpbmFyeV9tYXBbc3BsaXRfdGVzdF9uYW1lWzBd
XSA9IFtdCi0gICAgICAgICAgICBiaW5hcnlfbWFwW3NwbGl0X3Rlc3RfbmFtZVswXV0uYXBwZW5k
KCcuJy5qb2luKHNwbGl0X3Rlc3RfbmFtZVsxOl0pKQotICAgICAgICBmb3IgYmluYXJ5X25hbWUs
IHRlc3RfbGlzdCBpbiBiaW5hcnlfbWFwLml0ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmLl9ydW5f
c2hhcmRfd2l0aF9iaW5hcnkoYmluYXJ5X25hbWUsIHRlc3RfbGlzdCkK
</data>
<flag name="commit-queue"
          id="448559"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427822</attachid>
            <date>2021-05-05 16:55:57 -0700</date>
            <delta_ts>2021-05-05 17:22:23 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-225221-20210505165556.patch</filename>
            <type>text/plain</type>
            <size>35359</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3NzAyNykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM5IEBACisyMDIxLTA1LTA1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbcnVuLWFwaS10ZXN0c10gVXNlIHdlYmtpdGNvcmVweSdzIFRhc2tQb29s
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUyMjEK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc3MzUyNDY1PgorCisgICAgICAgIFJldmlld2VkIGJ5
IERld2VpIFpodS4KKworICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS9z
ZXR1cC5weTogQnVtcCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHk6IERpdHRvLgorICAgICAgICAqIFNjcmlw
dHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGFza19wb29sLnB5OgorICAg
ICAgICAoVGFza1Bvb2wuX19lbnRlcl9fKTogRW5zdXJlIHRoYXQgbW9jayBoYXMgYmVlbiBpbXBv
cnRlZCBiZWZvcmUgc3Bhd25pbmcgY2hpbGQgcHJvY2Vzc2VzLgorICAgICAgICAqIFNjcmlwdHMv
cnVuLWFwaS10ZXN0czogTW92ZWQgZnJvbSB3ZWJraXRweS9hcGlfdGVzdHMvcnVuX2FwaV90ZXN0
cy5weS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2FwaV90ZXN0cy9ydW5fYXBpX3Rlc3Rz
LnB5OiBNb3ZlZCB0byBydW4tYXBpLXRlc3RzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
YXBpX3Rlc3RzL3J1bm5lci5weToKKyAgICAgICAgKF9Xb3JrZXIpOiBSZXByZXNlbnRhdGlvbiBv
ZiBXb3JrZXIgcHJvY2Vzcy4KKyAgICAgICAgKF9Xb3JrZXIuc2V0dXApOiBQYXNzIHBvcnQgb2Jq
ZWN0IHRvIHdvcmtlciBwcm9jZXNzLgorICAgICAgICAoX1dvcmtlci50ZWFyZG93bik6IFVuLXNl
dCBwb3J0IG9iamVjdCBvbiB3b3JrZXIgcHJvY2Vzcy4KKyAgICAgICAgKF9Xb3JrZXIuX19pbml0
X18pOiBDb25zdHJ1Y3Qgb2JqZWN0IHRvIGhvbGQgYSBXb3JrZXIgcHJvY2VzcydzIHZhcmlhYmxl
cy4KKyAgICAgICAgKF9Xb3JrZXIuX3J1bl9zaW5nbGVfdGVzdCk6IExvZyB0ZXN0IHJlc3VsdHMs
IHBvc3QgcmVzdWx0cyB0byBwYXJlbnQuCisgICAgICAgIChfV29ya2VyLnJ1bik6IFJ1biBzaGFy
ZCB3aXRoIGFuZCBwb3N0IHJlc3VsdHMgdG8gcGFyZW50IHByb2Nlc3MuCisgICAgICAgIChzZXR1
cF9zaGFyZCk6IFJ1biBzZXR1cCBpbiBXb3JrZXIgcHJvY2Vzcy4KKyAgICAgICAgKHJ1bl9zaGFy
ZCk6IFJ1biB0ZXN0IHNoYXJkIGluIFdvcmtlciBwcm9jZXNzLgorICAgICAgICAocmVwb3J0X3Jl
c3VsdCk6IFJlY2VpdmUgcmVzdWx0IGluIHRoZSBwYXJlbnQgcHJvY2Vzcy4KKyAgICAgICAgKCh0
ZWFyZG93bl9zaGFyZCk6IFRlYXIgZG93biBXb3JrZXIgcHJvY2Vzcy4KKyAgICAgICAgKFJ1bm5l
ci5fX2luaXRfXyk6CisgICAgICAgIChSdW5uZXIuY29tbWFuZF9mb3JfcG9ydCk6CisgICAgICAg
IChSdW5uZXIuX3NoYXJkX3Rlc3RzKTogU3BsaXQgdGVzdHMgaW50byBzaGFyZHMgdG8gYmUgZWZm
aWNpZW50bHkgcnVuLgorICAgICAgICAoUnVubmVyLnJ1bik6IFVzZSBUYXNrUG9vbCB0byBydW4g
dGVzdHMgaW4gc3ViIHByb2Nlc3Nlcy4KKyAgICAgICAgKFJ1bm5lci5jYWxsYmFjayk6IFNhdmUg
cmVzdWx0cyBpbiBwYXJlbnQgcHJvY2Vzcy4KKyAgICAgICAgKFJ1bm5lci5yZXN1bHRfbWFwX2J5
X3N0YXR1cyk6CisgICAgICAgIChSdW5uZXIuaGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKF9X
b3JrZXIuX3J1bl9zaGFyZF93aXRoX2JpbmFyeSk6IERlbGV0ZWQuCisgICAgICAgIChfV29ya2Vy
LnBvc3QpOiBEZWxldGVkLgorICAgICAgICAoX1dvcmtlci5oYW5kbGUpOiBEZWxldGVkLgorCiAy
MDIxLTA1LTA1ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQg
cHJlbGltaW5hcnkgc3VwcG9ydCBmb3Igc3BlY2lmeWluZyBhIGNvbG9yIHNwYWNlIGZvciAyRCBj
YW52YXMKSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVuLWFwaS10ZXN0cwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3J1bi1hcGktdGVzdHMJKHJldmlzaW9uIDI3NzAyMCkKKysrIFRvb2xzL1Nj
cmlwdHMvcnVuLWFwaS10ZXN0cwkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vz
ci9iaW4vZW52IHB5dGhvbgogCi0jIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjIsNyAr
MjIsMTQ1IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCiAjIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi0iIiJXcmFwcGVyIGFy
b3VuZCB3ZWJraXRweS9hcGlfdGVzdHMvcnVuX2FwaV90ZXN0cy5weSIiIgotZnJvbSB3ZWJraXRw
eS5jb21tb24gaW1wb3J0IG11bHRpcHJvY2Vzc2luZ19ib290c3RyYXAKK2Zyb20gX19mdXR1cmVf
XyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UK
K2ltcG9ydCBzeXMKK2ltcG9ydCB0cmFjZWJhY2sKIAotbXVsdGlwcm9jZXNzaW5nX2Jvb3RzdHJh
cC5ydW4oJ3dlYmtpdHB5JywgJ2FwaV90ZXN0cycsICdydW5fYXBpX3Rlc3RzLnB5JykKK2Zyb20g
d2Via2l0cHkuYXBpX3Rlc3RzLm1hbmFnZXIgaW1wb3J0IE1hbmFnZXIKK2Zyb20gd2Via2l0cHku
Y29tbW9uLmhvc3QgaW1wb3J0IEhvc3QKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnZpZXdz
Lm1ldGVyZWRfc3RyZWFtIGltcG9ydCBNZXRlcmVkU3RyZWFtCitmcm9tIHdlYmtpdHB5LnBvcnQg
aW1wb3J0IGNvbmZpZ3VyYXRpb25fb3B0aW9ucywgcGxhdGZvcm1fb3B0aW9ucywgYmFzZSwgd2lu
Citmcm9tIHdlYmtpdHB5LnJlc3VsdHMub3B0aW9ucyBpbXBvcnQgdXBsb2FkX29wdGlvbnMKKwor
RVhDRVBUSU9OQUxfRVhJVF9TVEFUVVMgPSAtMQorSU5URVJSVVBUX0VYSVRfU1RBVFVTID0gLTIK
KworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2RlZiBtYWluKGFyZ3Ys
IHN0ZG91dCwgc3RkZXJyKToKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VfYXJncyhhcmd2KQor
ICAgIGhvc3QgPSBIb3N0KCkKKworICAgIHRyeToKKyAgICAgICAgb3B0aW9ucy53ZWJraXRfdGVz
dF9ydW5uZXIgPSBUcnVlCisgICAgICAgIHBvcnQgPSBob3N0LnBvcnRfZmFjdG9yeS5nZXQob3B0
aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucykKKyAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvciBh
cyBlOgorICAgICAgICBwcmludChzdHIoZSksIGZpbGU9c3RkZXJyKQorICAgICAgICByZXR1cm4g
RVhDRVBUSU9OQUxfRVhJVF9TVEFUVVMKKworICAgICMgU29tZSBwbGF0Zm9ybXMgZG8gbm90IHN1
cHBvcnQgQVBJIHRlc3RzCisgICAgZG9lc19ub3Rfc3VwcG9ydF9hcGlfdGVzdHMgPSBbJ2lvcy1k
ZXZpY2UnXQorICAgIGlmIHBvcnQub3BlcmF0aW5nX3N5c3RlbSgpIGluIGRvZXNfbm90X3N1cHBv
cnRfYXBpX3Rlc3RzOgorICAgICAgICBwcmludCgne30gY2Fubm90IHJ1biBBUEkgdGVzdHMnLmZv
cm1hdChwb3J0Lm9wZXJhdGluZ19zeXN0ZW0oKSksIGZpbGU9c3RkZXJyKQorICAgICAgICByZXR1
cm4gRVhDRVBUSU9OQUxfRVhJVF9TVEFUVVMKKworICAgIHRyeToKKyAgICAgICAgcmV0dXJuIHJ1
bihwb3J0LCBvcHRpb25zLCBhcmdzLCBzdGRlcnIpCisgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJy
dXB0OgorICAgICAgICByZXR1cm4gSU5URVJSVVBUX0VYSVRfU1RBVFVTCisgICAgZXhjZXB0IEJh
c2VFeGNlcHRpb24gYXMgZToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShlLCBFeGNlcHRpb24pOgor
ICAgICAgICAgICAgcHJpbnQoJ1xuJXMgcmFpc2VkOiAlcycgJSAoZS5fX2NsYXNzX18uX19uYW1l
X18sIHN0cihlKSksIGZpbGU9c3RkZXJyKQorICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4
YyhmaWxlPXN0ZGVycikKKyAgICAgICAgcmV0dXJuIEVYQ0VQVElPTkFMX0VYSVRfU1RBVFVTCisK
KworZGVmIHJ1bihwb3J0LCBvcHRpb25zLCBhcmdzLCBsb2dnaW5nX3N0cmVhbSk6CisgICAgbG9n
Z2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRF
QlVHIGlmIG9wdGlvbnMudmVyYm9zZSBlbHNlIGxvZ2dpbmcuRVJST1IgaWYgb3B0aW9ucy5xdWll
dCBlbHNlIGxvZ2dpbmcuSU5GTykKKworICAgIHRyeToKKyAgICAgICAgc3RyZWFtID0gTWV0ZXJl
ZFN0cmVhbShsb2dnaW5nX3N0cmVhbSwgb3B0aW9ucy52ZXJib3NlLCBsb2dnZXI9bG9nZ2VyLCBu
dW1iZXJfb2ZfY29sdW1ucz1wb3J0Lmhvc3QucGxhdGZvcm0udGVybWluYWxfd2lkdGgoKSwgcHJp
bnRfdGltZXN0YW1wcz1vcHRpb25zLnRpbWVzdGFtcHMpCisgICAgICAgIG1hbmFnZXIgPSBNYW5h
Z2VyKHBvcnQsIG9wdGlvbnMsIHN0cmVhbSkKKworICAgICAgICByZXN1bHQgPSBtYW5hZ2VyLnJ1
bihhcmdzLCBqc29uX291dHB1dD1vcHRpb25zLmpzb25fb3V0cHV0KQorICAgICAgICBfbG9nLmRl
YnVnKCJUZXN0aW5nIGNvbXBsZXRlZCwgRXhpdCBzdGF0dXM6ICVkIiAlIHJlc3VsdCkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdAorICAgIGZpbmFsbHk6CisgICAgICAgIHN0cmVhbS5jbGVhbnVwKCkK
KworCitkZWYgcGFyc2VfYXJncyhhcmdzKToKKyAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnMg
PSBbXQorCisgICAgb3B0aW9uX2dyb3VwX2RlZmluaXRpb25zLmFwcGVuZCgoJ1BsYXRmb3JtIG9w
dGlvbnMnLCBwbGF0Zm9ybV9vcHRpb25zKCkpKQorICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9u
cy5hcHBlbmQoKCdDb25maWd1cmF0aW9uIG9wdGlvbnMnLCBjb25maWd1cmF0aW9uX29wdGlvbnMo
KSkpCisgICAgb3B0aW9uX2dyb3VwX2RlZmluaXRpb25zLmFwcGVuZCgoJ1ByaW50aW5nIE9wdGlv
bnMnLCBbCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctcScsICctLXF1aWV0JywgYWN0
aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVscD0nUnVuIHF1aWV0bHkgKGVycm9ycywgd2FybmluZ3MsIGFuZCBwcm9ncmVzcyBv
bmx5KScpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLXYnLCAnLS12ZXJib3NlJywg
YWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVscD0nRW5hYmxlIHZlcmJvc2UgcHJpbnRpbmcnKSwKKyAgICAgICAgb3B0cGFy
c2UubWFrZV9vcHRpb24oJy0tdGltZXN0YW1wcycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1
bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1ByaW50IHRpbWVz
dGFtcHMgZm9yIGVhY2ggbG9nZ2VkIGxpbmUnKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRp
b24oJy0tanNvbi1vdXRwdXQnLCBhY3Rpb249J3N0b3JlJywgZGVmYXVsdD1Ob25lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTYXZlIHRlc3QgcmVzdWx0cyBhcyBKU09OIHRv
IGZpbGUnKSwKKyAgICBdKSkKKworICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9ucy5hcHBlbmQo
KCdXZWJLaXQgT3B0aW9ucycsIFsKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy1nJywg
Jy0tZ3VhcmQtbWFsbG9jJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRW5hYmxlIEd1YXJkIE1hbGxvYyAoT1Mg
WCBvbmx5KScpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1yb290JywgYWN0aW9u
PSdzdG9yZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1BhdGggdG8gYSBk
aXJlY3RvcnkgY29udGFpbmluZyB0aGUgZXhlY3V0YWJsZXMgbmVlZGVkIHRvIHJ1biB0ZXN0cy4n
KSwKKyAgICBdKSkKKworICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9ucy5hcHBlbmQoKCdUZXN0
aW5nIE9wdGlvbnMnLCBbCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXd0Zi1vbmx5
JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PSdUZXN0V1RGJywgZGVzdD0nYXBpX2JpbmFy
eScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J09ubHkgYnVpbGQsIGNoZWNr
IGFuZCBydW4gVGVzdFdURicpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS13ZWJr
aXQtb25seScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0nVGVzdFdlYktpdEFQSScsIGRl
c3Q9J2FwaV9iaW5hcnknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdPbmx5
IGNoZWNrIGFuZCBydW4gVGVzdFdlYktpdEFQSScpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29w
dGlvbignLS13ZWItY29yZS1vbmx5JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PSdUZXN0
V2ViQ29yZScsIGRlc3Q9J2FwaV9iaW5hcnknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoZWxwPSdPbmx5IGNoZWNrIGFuZCBydW4gVGVzdFdlYkNvcmUuZXhlIChXaW5kb3dzIG9ubHkp
JyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXdlYmtpdC1sZWdhY3ktb25seScs
IGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0nVGVzdFdlYktpdExlZ2FjeScsIGRlc3Q9J2Fw
aV9iaW5hcnknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdPbmx5IGNoZWNr
IGFuZCBydW4gVGVzdFdlYktpdExlZ2FjeS5leGUgKFdpbmRvd3Mgb25seSknKSwKKyAgICAgICAg
b3B0cGFyc2UubWFrZV9vcHRpb24oJy1kJywgJy0tZHVtcCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScs
IGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0R1bXAg
YWxsIHRlc3QgbmFtZXMgd2l0aG91dCBydW5uaW5nIHRoZW0nKSwKKyAgICAgICAgb3B0cGFyc2Uu
bWFrZV9vcHRpb24oJy0tYnVpbGQnLCBkZXN0PSdidWlsZCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScs
IGRlZmF1bHQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQ2hlY2sg
dG8gZW5zdXJlIHRoZSBidWlsZCBpcyB1cC10by1kYXRlIChkZWZhdWx0KS4nKSwKKyAgICAgICAg
b3B0cGFyc2UubWFrZV9vcHRpb24oJy0tbm8tYnVpbGQnLCBkZXN0PSdidWlsZCcsIGFjdGlvbj0n
c3RvcmVfZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJEb24ndCBj
aGVjayB0byBzZWUgaWYgdGhlIGJ1aWxkIGlzIHVwLXRvLWRhdGUuIiksCisgICAgICAgIG9wdHBh
cnNlLm1ha2Vfb3B0aW9uKCctLXRpbWVvdXQnLCBkZWZhdWx0PTMwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWxwPSdOdW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBhIHRl
c3QgdGltZXMgb3V0JyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLW5vLXRpbWVv
dXQnLCBkZXN0PSd0aW1lb3V0JywgYWN0aW9uPSdzdG9yZV9mYWxzZScsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9J0Rpc2FibGUgdGltZW91dHMgZm9yIGFsbCB0ZXN0cycpLAor
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1pdGVyYXRpb25zJywgdHlwZT0naW50Jywg
ZGVmYXVsdD0xLCBoZWxwPSdOdW1iZXIgb2YgdGltZXMgdG8gcnVuIHRoZSBzZXQgb2YgdGVzdHMg
KGUuZy4gQUJDQUJDQUJDKScpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1yZXBl
YXQtZWFjaCcsIHR5cGU9J2ludCcsIGRlZmF1bHQ9MSwgaGVscD0nTnVtYmVyIG9mIHRpbWVzIHRv
IHJ1biBlYWNoIHRlc3QgKGUuZy4gQUFBQkJCQ0NDKScpLAorCisgICAgICAgICMgRklYTUU6IFJl
bW92ZSB0aGUgZGVmYXVsdCwgQVBJIHRlc3RzIHNob3VsZCBiZSBtdWx0aXByb2Nlc3MKKyAgICAg
ICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tY2hpbGQtcHJvY2Vzc2VzJywgZGVmYXVsdD0xLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdOdW1iZXIgb2YgcHJvY2Vzc2VzIHRv
IHJ1biBpbiBwYXJhbGxlbC4nKSwKKworICAgICAgICAjIEZJWE1FOiBEZWZhdWx0IHNob3VsZCBi
ZSBmYWxzZSwgQVBJIHRlc3RzIHNob3VsZCBub3QgYmUgZm9yY2VkIHRvIHJ1biBzaW5nbHkKKyAg
ICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tcnVuLXNpbmdseScsIGFjdGlvbj0nc3RvcmVf
dHJ1ZScsIGRlZmF1bHQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0n
UnVuIGEgc2VwYXJhdGUgcHJvY2VzcyBmb3IgZWFjaCB0ZXN0JyksCisKKyAgICAgICAgb3B0cGFy
c2UubWFrZV9vcHRpb24oJy0tZm9yY2UnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZh
bHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdSdW4gYWxsIHRlc3RzLCBl
dmVuIERJU0FCTEVEIHRlc3RzJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWFk
ZGl0aW9uYWwtZW52LXZhcicsIHR5cGU9J3N0cmluZycsIGFjdGlvbj0nYXBwZW5kJywgZGVmYXVs
dD1bXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUGFzc2VzIHRoYXQgZW52
aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIHRlc3RzICgtLWFkZGl0aW9uYWwtZW52LXZhcj1OQU1F
PVZBTFVFKScpLAorICAgIF0pKQorICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9ucy5hcHBlbmQo
KCdVcGxvYWQgT3B0aW9ucycsIHVwbG9hZF9vcHRpb25zKCkpKQorCisgICAgb3B0aW9uX3BhcnNl
ciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigKKyAgICAgICAgdXNhZ2U9J3J1bi1hcGktdGVzdHMg
W29wdGlvbnNdIFs8dGVzdCBuYW1lcz4uLi5dJywKKyAgICAgICAgZGVzY3JpcHRpb249IiIiQnkg
ZGVmYXVsdCwgcnVuLWFwaS10ZXN0cyB3aWxsIHJ1biBhbGwgQVBJIHRlc3RzLiBJdCBhbHNvIGFs
bG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IHRlc3RzIG9mIHRoZSBcCitmb3JtYXQgPHN1aXRlPi48
dGVzdD4gb3IgPGNhbm9uaWNhbGl6ZWQgYmluYXJ5IG5hbWU+LjxzdWl0ZT4uPHRlc3Q+LiBOb3Rl
IHRoYXQgaW4gdGhlIGNhc2Ugd2hlcmUgYSBiaW5hcnkgaXMgbm90IFwKK3NwZWNpZmllZCwgb25l
IHdpbGwgYmUgaW5mZXJyZWQgYnkgbGlzdGluZyBhbGwgYXZhaWxhYmxlIHRlc3RzLiBTcGVjaWZ5
aW5nIGp1c3QgYSBiaW5hcnkgb3IganVzdCBhIHN1aXRlIHdpbGwgY2F1c2UgZXZlcnkgXAordGVz
dCBjb250YWluZWQgd2l0aGluIHRvIGJlIHJ1bi4gVGhlIGNhbm9uaWNhbGl6ZWQgYmluYXJ5IG5h
bWUgaXMgdGhlIGJpbmFyeSBuYW1lIHdpdGggYW55IGZpbGVuYW1lIGV4dGVuc2lvbiBcCitzdHJp
cHBlZC4gRm9yIFVuaXggcG9ydHMsIHRoZXNlIGJpbmFyaWVzIGFyZSB7fSBhbmQge30uIEZvciBX
aW5kb3dzIHBvcnRzLCB0aGV5IGFyZSB7fSBhbmQge30uIiIiLmZvcm1hdCgKKyAgICAgICAgICAg
ICcsICcuam9pbihiYXNlLlBvcnQuQVBJX1RFU1RfQklOQVJZX05BTUVTWzotMV0pLCBiYXNlLlBv
cnQuQVBJX1RFU1RfQklOQVJZX05BTUVTWy0xXSwKKyAgICAgICAgICAgICcsICcuam9pbih3aW4u
V2luUG9ydC5BUElfVEVTVF9CSU5BUllfTkFNRVNbOi0xXSksIHdpbi5XaW5Qb3J0LkFQSV9URVNU
X0JJTkFSWV9OQU1FU1stMV0sCisgICAgKSkKKworICAgIGZvciBncm91cF9uYW1lLCBncm91cF9v
cHRpb25zIGluIG9wdGlvbl9ncm91cF9kZWZpbml0aW9uczoKKyAgICAgICAgb3B0aW9uX2dyb3Vw
ID0gb3B0cGFyc2UuT3B0aW9uR3JvdXAob3B0aW9uX3BhcnNlciwgZ3JvdXBfbmFtZSkKKyAgICAg
ICAgb3B0aW9uX2dyb3VwLmFkZF9vcHRpb25zKGdyb3VwX29wdGlvbnMpCisgICAgICAgIG9wdGlv
bl9wYXJzZXIuYWRkX29wdGlvbl9ncm91cChvcHRpb25fZ3JvdXApCisKKyAgICByZXR1cm4gb3B0
aW9uX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9f
JzoKKyAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSwgc3lzLnN0ZG91dCwgc3lzLnN0ZGVy
cikpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvc2V0dXAucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3NldHVw
LnB5CShyZXZpc2lvbiAyNzcwMjApCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRj
b3JlcHkvc2V0dXAucHkJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAgZGVmIHJlYWRt
ZSgpOgogCiBzZXR1cCgKICAgICBuYW1lPSd3ZWJraXRjb3JlcHknLAotICAgIHZlcnNpb249JzAu
NS4xMycsCisgICAgdmVyc2lvbj0nMC41LjE0JywKICAgICBkZXNjcmlwdGlvbj0nTGlicmFyeSBj
b250YWluaW5nIHZhcmlvdXMgUHl0aG9uIHN1cHBvcnQgY2xhc3NlcyBhbmQgZnVuY3Rpb25zLics
CiAgICAgbG9uZ19kZXNjcmlwdGlvbj1yZWFkbWUoKSwKICAgICBjbGFzc2lmaWVycz1bCkluZGV4
OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5p
dF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVw
eS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkJKHJldmlzaW9uIDI3NzAyMCkKKysrIFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgZnJvbSB3ZWJraXRjb3JlcHkub3V0cHV0X2Nh
cHR1cmUgaW1wb3J0IAogZnJvbSB3ZWJraXRjb3JlcHkudGFza19wb29sIGltcG9ydCBUYXNrUG9v
bAogZnJvbSB3ZWJraXRjb3JlcHkuY3JlZGVudGlhbHMgaW1wb3J0IGNyZWRlbnRpYWxzCiAKLXZl
cnNpb24gPSBWZXJzaW9uKDAsIDUsIDEzKQordmVyc2lvbiA9IFZlcnNpb24oMCwgNSwgMTQpCiAK
IGZyb20gd2Via2l0Y29yZXB5LmF1dG9pbnN0YWxsIGltcG9ydCBQYWNrYWdlLCBBdXRvSW5zdGFs
bAogaWYgc3lzLnZlcnNpb25faW5mbyA+ICgzLCAwKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGFza19wb29sLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGFz
a19wb29sLnB5CShyZXZpc2lvbiAyNzcwMjApCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rhc2tfcG9vbC5weQkod29ya2luZyBjb3B5KQpAQCAt
MzMyLDYgKzMzMiw4IEBAIGNsYXNzIFRhc2tQb29sKG9iamVjdCk6CiAgICAgICAgIHNlbGYuYmxv
Y2tfc2l6ZSA9IGJsb2NrX3NpemUKIAogICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAg
IGZyb20gbW9jayBpbXBvcnQgcGF0Y2gKKwogICAgICAgICB3aXRoIFRpbWVvdXQoc2Vjb25kcz0x
MCwgcGF0Y2g9RmFsc2UsIGhhbmRsZXI9c2VsZi5FeGNlcHRpb24oJ0ZhaWxlZCB0byBzdGFydCBh
bGwgd29ya2VycycpKToKICAgICAgICAgICAgIGZvciB3b3JrZXIgaW4gc2VsZi53b3JrZXJzOgog
ICAgICAgICAgICAgICAgIHdvcmtlci5zdGFydCgpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2FwaV90ZXN0cy9ydW5fYXBpX3Rlc3RzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvYXBpX3Rlc3RzL3J1bl9hcGlfdGVzdHMucHkJKHJldmlzaW9uIDI3NzAyMCkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvYXBpX3Rlc3RzL3J1bl9hcGlfdGVzdHMucHkJKG5v
bmV4aXN0ZW50KQpAQCAtMSwxNjQgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0j
IGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQot
IyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0jIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0jIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSMgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCi0jIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
Ci0jIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCi1pbXBvcnQg
bG9nZ2luZwotaW1wb3J0IG9wdHBhcnNlCi1pbXBvcnQgc3lzCi1pbXBvcnQgdHJhY2ViYWNrCi0K
LWZyb20gd2Via2l0cHkuYXBpX3Rlc3RzLm1hbmFnZXIgaW1wb3J0IE1hbmFnZXIKLWZyb20gd2Vi
a2l0cHkuY29tbW9uLmhvc3QgaW1wb3J0IEhvc3QKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LnZpZXdzLm1ldGVyZWRfc3RyZWFtIGltcG9ydCBNZXRlcmVkU3RyZWFtCi1mcm9tIHdlYmtpdHB5
LnBvcnQgaW1wb3J0IGNvbmZpZ3VyYXRpb25fb3B0aW9ucywgcGxhdGZvcm1fb3B0aW9ucywgYmFz
ZSwgd2luCi1mcm9tIHdlYmtpdHB5LnJlc3VsdHMub3B0aW9ucyBpbXBvcnQgdXBsb2FkX29wdGlv
bnMKLQotRVhDRVBUSU9OQUxfRVhJVF9TVEFUVVMgPSAtMQotSU5URVJSVVBUX0VYSVRfU1RBVFVT
ID0gLTIKLQotX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQotCi0KLWRlZiBtYWlu
KGFyZ3YsIHN0ZG91dCwgc3RkZXJyKToKLSAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VfYXJncyhh
cmd2KQotICAgIGhvc3QgPSBIb3N0KCkKLQotICAgIHRyeToKLSAgICAgICAgb3B0aW9ucy53ZWJr
aXRfdGVzdF9ydW5uZXIgPSBUcnVlCi0gICAgICAgIHBvcnQgPSBob3N0LnBvcnRfZmFjdG9yeS5n
ZXQob3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucykKLSAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRF
cnJvciBhcyBlOgotICAgICAgICBwcmludChzdHIoZSksIGZpbGU9c3RkZXJyKQotICAgICAgICBy
ZXR1cm4gRVhDRVBUSU9OQUxfRVhJVF9TVEFUVVMKLQotICAgICMgU29tZSBwbGF0Zm9ybXMgZG8g
bm90IHN1cHBvcnQgQVBJIHRlc3RzCi0gICAgZG9lc19ub3Rfc3VwcG9ydF9hcGlfdGVzdHMgPSBb
J2lvcy1kZXZpY2UnXQotICAgIGlmIHBvcnQub3BlcmF0aW5nX3N5c3RlbSgpIGluIGRvZXNfbm90
X3N1cHBvcnRfYXBpX3Rlc3RzOgotICAgICAgICBwcmludCgne30gY2Fubm90IHJ1biBBUEkgdGVz
dHMnLmZvcm1hdChwb3J0Lm9wZXJhdGluZ19zeXN0ZW0oKSksIGZpbGU9c3RkZXJyKQotICAgICAg
ICByZXR1cm4gRVhDRVBUSU9OQUxfRVhJVF9TVEFUVVMKLQotICAgIHRyeToKLSAgICAgICAgcmV0
dXJuIHJ1bihwb3J0LCBvcHRpb25zLCBhcmdzLCBzdGRlcnIpCi0gICAgZXhjZXB0IEtleWJvYXJk
SW50ZXJydXB0OgotICAgICAgICByZXR1cm4gSU5URVJSVVBUX0VYSVRfU1RBVFVTCi0gICAgZXhj
ZXB0IEJhc2VFeGNlcHRpb24gYXMgZToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShlLCBFeGNlcHRp
b24pOgotICAgICAgICAgICAgcHJpbnQoJ1xuJXMgcmFpc2VkOiAlcycgJSAoZS5fX2NsYXNzX18u
X19uYW1lX18sIHN0cihlKSksIGZpbGU9c3RkZXJyKQotICAgICAgICAgICAgdHJhY2ViYWNrLnBy
aW50X2V4YyhmaWxlPXN0ZGVycikKLSAgICAgICAgcmV0dXJuIEVYQ0VQVElPTkFMX0VYSVRfU1RB
VFVTCi0KLQotZGVmIHJ1bihwb3J0LCBvcHRpb25zLCBhcmdzLCBsb2dnaW5nX3N0cmVhbSk6Ci0g
ICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQotICAgIGxvZ2dlci5zZXRMZXZlbChsb2dn
aW5nLkRFQlVHIGlmIG9wdGlvbnMudmVyYm9zZSBlbHNlIGxvZ2dpbmcuRVJST1IgaWYgb3B0aW9u
cy5xdWlldCBlbHNlIGxvZ2dpbmcuSU5GTykKLQotICAgIHRyeToKLSAgICAgICAgc3RyZWFtID0g
TWV0ZXJlZFN0cmVhbShsb2dnaW5nX3N0cmVhbSwgb3B0aW9ucy52ZXJib3NlLCBsb2dnZXI9bG9n
Z2VyLCBudW1iZXJfb2ZfY29sdW1ucz1wb3J0Lmhvc3QucGxhdGZvcm0udGVybWluYWxfd2lkdGgo
KSwgcHJpbnRfdGltZXN0YW1wcz1vcHRpb25zLnRpbWVzdGFtcHMpCi0gICAgICAgIG1hbmFnZXIg
PSBNYW5hZ2VyKHBvcnQsIG9wdGlvbnMsIHN0cmVhbSkKLQotICAgICAgICByZXN1bHQgPSBtYW5h
Z2VyLnJ1bihhcmdzLCBqc29uX291dHB1dD1vcHRpb25zLmpzb25fb3V0cHV0KQotICAgICAgICBf
bG9nLmRlYnVnKCJUZXN0aW5nIGNvbXBsZXRlZCwgRXhpdCBzdGF0dXM6ICVkIiAlIHJlc3VsdCkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdAotICAgIGZpbmFsbHk6Ci0gICAgICAgIHN0cmVhbS5jbGVh
bnVwKCkKLQotCi1kZWYgcGFyc2VfYXJncyhhcmdzKToKLSAgICBvcHRpb25fZ3JvdXBfZGVmaW5p
dGlvbnMgPSBbXQotCi0gICAgb3B0aW9uX2dyb3VwX2RlZmluaXRpb25zLmFwcGVuZCgoJ1BsYXRm
b3JtIG9wdGlvbnMnLCBwbGF0Zm9ybV9vcHRpb25zKCkpKQotICAgIG9wdGlvbl9ncm91cF9kZWZp
bml0aW9ucy5hcHBlbmQoKCdDb25maWd1cmF0aW9uIG9wdGlvbnMnLCBjb25maWd1cmF0aW9uX29w
dGlvbnMoKSkpCi0gICAgb3B0aW9uX2dyb3VwX2RlZmluaXRpb25zLmFwcGVuZCgoJ1ByaW50aW5n
IE9wdGlvbnMnLCBbCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctcScsICctLXF1aWV0
JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVscD0nUnVuIHF1aWV0bHkgKGVycm9ycywgd2FybmluZ3MsIGFuZCBwcm9n
cmVzcyBvbmx5KScpLAotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLXYnLCAnLS12ZXJi
b3NlJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGVscD0nRW5hYmxlIHZlcmJvc2UgcHJpbnRpbmcnKSwKLSAgICAgICAg
b3B0cGFyc2UubWFrZV9vcHRpb24oJy0tdGltZXN0YW1wcycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScs
IGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1ByaW50
IHRpbWVzdGFtcHMgZm9yIGVhY2ggbG9nZ2VkIGxpbmUnKSwKLSAgICAgICAgb3B0cGFyc2UubWFr
ZV9vcHRpb24oJy0tanNvbi1vdXRwdXQnLCBhY3Rpb249J3N0b3JlJywgZGVmYXVsdD1Ob25lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTYXZlIHRlc3QgcmVzdWx0cyBhcyBK
U09OIHRvIGZpbGUnKSwKLSAgICBdKSkKLQotICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9ucy5h
cHBlbmQoKCdXZWJLaXQgT3B0aW9ucycsIFsKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24o
Jy1nJywgJy0tZ3VhcmQtbWFsbG9jJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxz
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRW5hYmxlIEd1YXJkIE1hbGxv
YyAoT1MgWCBvbmx5KScpLAotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1yb290Jywg
YWN0aW9uPSdzdG9yZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1BhdGgg
dG8gYSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZXhlY3V0YWJsZXMgbmVlZGVkIHRvIHJ1biB0
ZXN0cy4nKSwKLSAgICBdKSkKLQotICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9ucy5hcHBlbmQo
KCdUZXN0aW5nIE9wdGlvbnMnLCBbCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXd0
Zi1vbmx5JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PSdUZXN0V1RGJywgZGVzdD0nYXBp
X2JpbmFyeScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J09ubHkgYnVpbGQs
IGNoZWNrIGFuZCBydW4gVGVzdFdURicpLAotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbign
LS13ZWJraXQtb25seScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0nVGVzdFdlYktpdEFQ
SScsIGRlc3Q9J2FwaV9iaW5hcnknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSdPbmx5IGNoZWNrIGFuZCBydW4gVGVzdFdlYktpdEFQSScpLAotICAgICAgICBvcHRwYXJzZS5t
YWtlX29wdGlvbignLS13ZWItY29yZS1vbmx5JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0
PSdUZXN0V2ViQ29yZScsIGRlc3Q9J2FwaV9iaW5hcnknLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSdPbmx5IGNoZWNrIGFuZCBydW4gVGVzdFdlYkNvcmUuZXhlIChXaW5kb3dz
IG9ubHkpJyksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXdlYmtpdC1sZWdhY3kt
b25seScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0nVGVzdFdlYktpdExlZ2FjeScsIGRl
c3Q9J2FwaV9iaW5hcnknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdPbmx5
IGNoZWNrIGFuZCBydW4gVGVzdFdlYktpdExlZ2FjeS5leGUgKFdpbmRvd3Mgb25seSknKSwKLSAg
ICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy1kJywgJy0tZHVtcCcsIGFjdGlvbj0nc3RvcmVf
dHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
J0R1bXAgYWxsIHRlc3QgbmFtZXMgd2l0aG91dCBydW5uaW5nIHRoZW0nKSwKLSAgICAgICAgb3B0
cGFyc2UubWFrZV9vcHRpb24oJy0tYnVpbGQnLCBkZXN0PSdidWlsZCcsIGFjdGlvbj0nc3RvcmVf
dHJ1ZScsIGRlZmF1bHQ9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0n
Q2hlY2sgdG8gZW5zdXJlIHRoZSBidWlsZCBpcyB1cC10by1kYXRlIChkZWZhdWx0KS4nKSwKLSAg
ICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tbm8tYnVpbGQnLCBkZXN0PSdidWlsZCcsIGFj
dGlvbj0nc3RvcmVfZmFsc2UnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJE
b24ndCBjaGVjayB0byBzZWUgaWYgdGhlIGJ1aWxkIGlzIHVwLXRvLWRhdGUuIiksCi0gICAgICAg
IG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXRpbWVvdXQnLCBkZWZhdWx0PTMwLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWxwPSdOdW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJlZm9y
ZSBhIHRlc3QgdGltZXMgb3V0JyksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLW5v
LXRpbWVvdXQnLCBkZXN0PSd0aW1lb3V0JywgYWN0aW9uPSdzdG9yZV9mYWxzZScsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0Rpc2FibGUgdGltZW91dHMgZm9yIGFsbCB0ZXN0
cycpLAotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1pdGVyYXRpb25zJywgdHlwZT0n
aW50JywgZGVmYXVsdD0xLCBoZWxwPSdOdW1iZXIgb2YgdGltZXMgdG8gcnVuIHRoZSBzZXQgb2Yg
dGVzdHMgKGUuZy4gQUJDQUJDQUJDKScpLAotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbign
LS1yZXBlYXQtZWFjaCcsIHR5cGU9J2ludCcsIGRlZmF1bHQ9MSwgaGVscD0nTnVtYmVyIG9mIHRp
bWVzIHRvIHJ1biBlYWNoIHRlc3QgKGUuZy4gQUFBQkJCQ0NDKScpLAotCi0gICAgICAgICMgRklY
TUU6IFJlbW92ZSB0aGUgZGVmYXVsdCwgQVBJIHRlc3RzIHNob3VsZCBiZSBtdWx0aXByb2Nlc3MK
LSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tY2hpbGQtcHJvY2Vzc2VzJywgZGVmYXVs
dD0xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdOdW1iZXIgb2YgcHJvY2Vz
c2VzIHRvIHJ1biBpbiBwYXJhbGxlbC4nKSwKLQotICAgICAgICAjIEZJWE1FOiBEZWZhdWx0IHNo
b3VsZCBiZSBmYWxzZSwgQVBJIHRlc3RzIHNob3VsZCBub3QgYmUgZm9yY2VkIHRvIHJ1biBzaW5n
bHkKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tcnVuLXNpbmdseScsIGFjdGlvbj0n
c3RvcmVfdHJ1ZScsIGRlZmF1bHQ9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGVscD0nUnVuIGEgc2VwYXJhdGUgcHJvY2VzcyBmb3IgZWFjaCB0ZXN0JyksCi0KLSAgICAgICAg
b3B0cGFyc2UubWFrZV9vcHRpb24oJy0tZm9yY2UnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZh
dWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdSdW4gYWxsIHRl
c3RzLCBldmVuIERJU0FCTEVEIHRlc3RzJyksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9u
KCctLWFkZGl0aW9uYWwtZW52LXZhcicsIHR5cGU9J3N0cmluZycsIGFjdGlvbj0nYXBwZW5kJywg
ZGVmYXVsdD1bXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUGFzc2VzIHRo
YXQgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIHRlc3RzICgtLWFkZGl0aW9uYWwtZW52LXZh
cj1OQU1FPVZBTFVFKScpLAotICAgIF0pKQotICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9ucy5h
cHBlbmQoKCdVcGxvYWQgT3B0aW9ucycsIHVwbG9hZF9vcHRpb25zKCkpKQotCi0gICAgb3B0aW9u
X3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigKLSAgICAgICAgdXNhZ2U9J3J1bi1hcGkt
dGVzdHMgW29wdGlvbnNdIFs8dGVzdCBuYW1lcz4uLi5dJywKLSAgICAgICAgZGVzY3JpcHRpb249
IiIiQnkgZGVmYXVsdCwgcnVuLWFwaS10ZXN0cyB3aWxsIHJ1biBhbGwgQVBJIHRlc3RzLiBJdCBh
bHNvIGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IHRlc3RzIG9mIHRoZSBcCi1mb3JtYXQgPHN1
aXRlPi48dGVzdD4gb3IgPGNhbm9uaWNhbGl6ZWQgYmluYXJ5IG5hbWU+LjxzdWl0ZT4uPHRlc3Q+
LiBOb3RlIHRoYXQgaW4gdGhlIGNhc2Ugd2hlcmUgYSBiaW5hcnkgaXMgbm90IFwKLXNwZWNpZmll
ZCwgb25lIHdpbGwgYmUgaW5mZXJyZWQgYnkgbGlzdGluZyBhbGwgYXZhaWxhYmxlIHRlc3RzLiBT
cGVjaWZ5aW5nIGp1c3QgYSBiaW5hcnkgb3IganVzdCBhIHN1aXRlIHdpbGwgY2F1c2UgZXZlcnkg
XAotdGVzdCBjb250YWluZWQgd2l0aGluIHRvIGJlIHJ1bi4gVGhlIGNhbm9uaWNhbGl6ZWQgYmlu
YXJ5IG5hbWUgaXMgdGhlIGJpbmFyeSBuYW1lIHdpdGggYW55IGZpbGVuYW1lIGV4dGVuc2lvbiBc
Ci1zdHJpcHBlZC4gRm9yIFVuaXggcG9ydHMsIHRoZXNlIGJpbmFyaWVzIGFyZSB7fSBhbmQge30u
IEZvciBXaW5kb3dzIHBvcnRzLCB0aGV5IGFyZSB7fSBhbmQge30uIiIiLmZvcm1hdCgKLSAgICAg
ICAgICAgICcsICcuam9pbihiYXNlLlBvcnQuQVBJX1RFU1RfQklOQVJZX05BTUVTWzotMV0pLCBi
YXNlLlBvcnQuQVBJX1RFU1RfQklOQVJZX05BTUVTWy0xXSwKLSAgICAgICAgICAgICcsICcuam9p
bih3aW4uV2luUG9ydC5BUElfVEVTVF9CSU5BUllfTkFNRVNbOi0xXSksIHdpbi5XaW5Qb3J0LkFQ
SV9URVNUX0JJTkFSWV9OQU1FU1stMV0sCi0gICAgKSkKLQotICAgIGZvciBncm91cF9uYW1lLCBn
cm91cF9vcHRpb25zIGluIG9wdGlvbl9ncm91cF9kZWZpbml0aW9uczoKLSAgICAgICAgb3B0aW9u
X2dyb3VwID0gb3B0cGFyc2UuT3B0aW9uR3JvdXAob3B0aW9uX3BhcnNlciwgZ3JvdXBfbmFtZSkK
LSAgICAgICAgb3B0aW9uX2dyb3VwLmFkZF9vcHRpb25zKGdyb3VwX29wdGlvbnMpCi0gICAgICAg
IG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbl9ncm91cChvcHRpb25fZ3JvdXApCi0KLSAgICByZXR1
cm4gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCi0KLQotaWYgX19uYW1lX18gPT0gJ19f
bWFpbl9fJzoKLSAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSwgc3lzLnN0ZG91dCwgc3lz
LnN0ZGVycikpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2FwaV90ZXN0cy9ydW5uZXIu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9hcGlfdGVzdHMvcnVubmVy
LnB5CShyZXZpc2lvbiAyNzcwMjApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2FwaV90ZXN0
cy9ydW5uZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykg
MjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjUsMTIgKzI1LDM0IEBAIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQg
dGltZQogCiBmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgc3RyaW5nX3V0aWxzCitmcm9tIHdlYmtp
dGNvcmVweSBpbXBvcnQgVGFza1Bvb2wKIAotZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IG1l
c3NhZ2VfcG9vbAogZnJvbSB3ZWJraXRweS5jb21tb24uaXRlcmF0aW9uX2NvbXBhdGliaWxpdHkg
aW1wb3J0IGl0ZXJpdGVtcwogZnJvbSB3ZWJraXRweS5wb3J0LnNlcnZlcl9wcm9jZXNzIGltcG9y
dCBTZXJ2ZXJQcm9jZXNzLCBfbG9nIGFzIHNlcnZlcl9wcm9jZXNzX2xvZ2dlcgogZnJvbSB3ZWJr
aXRweS54Y29kZS5zaW11bGF0ZWRfZGV2aWNlIGltcG9ydCBTaW11bGF0ZWREZXZpY2VNYW5hZ2Vy
CiAKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitkZWYgc2V0dXBfc2hh
cmQocG9ydD1Ob25lKToKKyAgICByZXR1cm4gX1dvcmtlci5zZXR1cChwb3J0PXBvcnQpCisKKwor
ZGVmIHJ1bl9zaGFyZChuYW1lLCAqdGVzdHMpOgorICAgIHJldHVybiBfV29ya2VyLmluc3RhbmNl
LnJ1bihuYW1lLCAqdGVzdHMpCisKKworZGVmIHJlcG9ydF9yZXN1bHQod29ya2VyLCB0ZXN0LCBz
dGF0dXMsIG91dHB1dCk6CisgICAgaWYgc3RhdHVzID09IFJ1bm5lci5TVEFUVVNfUEFTU0VEIGFu
ZCAobm90IG91dHB1dCBvciBSdW5uZXIuaW5zdGFuY2UucG9ydC5nZXRfb3B0aW9uKCdxdWlldCcp
KToKKyAgICAgICAgUnVubmVyLmluc3RhbmNlLnByaW50ZXIud3JpdGVfdXBkYXRlKCd7fSB7fSB7
fScuZm9ybWF0KHdvcmtlciwgdGVzdCwgUnVubmVyLk5BTUVfRk9SX1NUQVRVU1tzdGF0dXNdKSkK
KyAgICBlbHNlOgorICAgICAgICBSdW5uZXIuaW5zdGFuY2UucHJpbnRlci53cml0ZWxuKCd7fSB7
fSB7fScuZm9ybWF0KHdvcmtlciwgdGVzdCwgUnVubmVyLk5BTUVfRk9SX1NUQVRVU1tzdGF0dXNd
KSkKKyAgICBSdW5uZXIuaW5zdGFuY2UucmVzdWx0c1t0ZXN0XSA9IHN0YXR1cywgb3V0cHV0CisK
KworZGVmIHRlYXJkb3duX3NoYXJkKCk6CisgICAgcmV0dXJuIF9Xb3JrZXIudGVhcmRvd24oKQor
CiAKIGNsYXNzIFJ1bm5lcihvYmplY3QpOgogICAgIFNUQVRVU19QQVNTRUQgPSAwCkBAIC00OCw2
ICs3MCw4IEBAIGNsYXNzIFJ1bm5lcihvYmplY3QpOgogICAgICAgICAnRGlzYWJsZWQnLAogICAg
IF0KIAorICAgIGluc3RhbmNlID0gTm9uZQorCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQs
IHByaW50ZXIpOgogICAgICAgICBzZWxmLnBvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYucHJpbnRl
ciA9IHByaW50ZXIKQEAgLTU2LDE2ICs4MCw2IEBAIGNsYXNzIFJ1bm5lcihvYmplY3QpOgogICAg
ICAgICBzZWxmLl9oYXNfbG9nZ2VkX2Zvcl90ZXN0ID0gVHJ1ZSAgIyBTdXBwcmVzcyBhbiBlbXB0
eSBsaW5lIGJldHdlZW4gIlJ1bm5pbmcgdGVzdHMiIGFuZCB0aGUgZmlyc3QgdGVzdCdzIG91dHB1
dC4KICAgICAgICAgc2VsZi5yZXN1bHRzID0ge30KIAotICAgIEBzdGF0aWNtZXRob2QKLSAgICBk
ZWYgX3NoYXJkX3Rlc3RzKHRlc3RzKToKLSAgICAgICAgc2hhcmRzID0ge30KLSAgICAgICAgZm9y
IHRlc3QgaW4gdGVzdHM6Ci0gICAgICAgICAgICBzaGFyZF9wcmVmaXggPSAnLicuam9pbih0ZXN0
LnNwbGl0KCcuJylbOi0xXSkKLSAgICAgICAgICAgIGlmIHNoYXJkX3ByZWZpeCBub3QgaW4gc2hh
cmRzOgotICAgICAgICAgICAgICAgIHNoYXJkc1tzaGFyZF9wcmVmaXhdID0gW10KLSAgICAgICAg
ICAgIHNoYXJkc1tzaGFyZF9wcmVmaXhdLmFwcGVuZCh0ZXN0KQotICAgICAgICByZXR1cm4gc2hh
cmRzCi0KICAgICAjIEZJWE1FIEFQSSB0ZXN0cyBzaG91bGQgcnVuIGFzIGFuIGFwcCwgd2Ugd29u
J3QgbmVlZCB0aGlzIGZ1bmN0aW9uIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc1MjA0PgogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgY29tbWFuZF9mb3JfcG9y
dChwb3J0LCBhcmdzKToKQEAgLTgwLDYgKzk0LDE2IEBAIGNsYXNzIFJ1bm5lcihvYmplY3QpOgog
ICAgICAgICAgICAgYXJnc1swXSA9IG9zLnBhdGguc3BsaXRleHQoYXJnc1swXSlbMF0gKyAnLmV4
ZScKICAgICAgICAgcmV0dXJuIGFyZ3MKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX3No
YXJkX3Rlc3RzKHRlc3RzKToKKyAgICAgICAgc2hhcmRzID0ge30KKyAgICAgICAgZm9yIHRlc3Qg
aW4gdGVzdHM6CisgICAgICAgICAgICBzaGFyZF9wcmVmaXggPSAnLicuam9pbih0ZXN0LnNwbGl0
KCcuJylbOi0xXSkKKyAgICAgICAgICAgIGlmIHNoYXJkX3ByZWZpeCBub3QgaW4gc2hhcmRzOgor
ICAgICAgICAgICAgICAgIHNoYXJkc1tzaGFyZF9wcmVmaXhdID0gW10KKyAgICAgICAgICAgIHNo
YXJkc1tzaGFyZF9wcmVmaXhdLmFwcGVuZCh0ZXN0KQorICAgICAgICByZXR1cm4gc2hhcmRzCisK
ICAgICBkZWYgcnVuKHNlbGYsIHRlc3RzLCBudW1fd29ya2Vycyk6CiAgICAgICAgIGlmIG5vdCB0
ZXN0czoKICAgICAgICAgICAgIHJldHVybgpAQCAtOTEsNDQgKzExNSwyMyBAQCBjbGFzcyBSdW5u
ZXIob2JqZWN0KToKICAgICAgICAgc2VydmVyX3Byb2Nlc3NfbG9nZ2VyLnNldExldmVsKGxvZ2dp
bmcuQ1JJVElDQUwpCiAKICAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgUnVubmVyLmluc3Rh
bmNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ2Fubm90IG5lc3QgQVBJ
IHRlc3QgcnVubmVycycpCisgICAgICAgICAgICBSdW5uZXIuaW5zdGFuY2UgPSBzZWxmCiAgICAg
ICAgICAgICBzZWxmLl9udW1fd29ya2VycyA9IG1pbihudW1fd29ya2VycywgbGVuKHNoYXJkcykp
Ci0gICAgICAgICAgICB3aXRoIG1lc3NhZ2VfcG9vbC5nZXQoc2VsZiwgbGFtYmRhIGNhbGxlcjog
X1dvcmtlcihjYWxsZXIsIHNlbGYucG9ydCwgc2hhcmRzKSwgc2VsZi5fbnVtX3dvcmtlcnMpIGFz
IHBvb2w6Ci0gICAgICAgICAgICAgICAgcG9vbC5ydW4oKCd0ZXN0Jywgc2hhcmQpIGZvciBzaGFy
ZCwgXyBpbiBpdGVyaXRlbXMoc2hhcmRzKSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAg
IHNlcnZlcl9wcm9jZXNzX2xvZ2dlci5zZXRMZXZlbChvcmlnaW5hbF9sZXZlbCkKLQotCi0gICAg
ZGVmIGhhbmRsZShzZWxmLCBtZXNzYWdlX25hbWUsIHNvdXJjZSwgdGVzdF9uYW1lPU5vbmUsIHN0
YXR1cz0wLCBvdXRwdXQ9JycpOgotICAgICAgICBpZiBtZXNzYWdlX25hbWUgPT0gJ2RpZF9zcGF3
bl93b3JrZXInOgotICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgc291cmNlID0gJycgaWYg
c2VsZi5fbnVtX3dvcmtlcnMgPT0gMSBlbHNlIHNvdXJjZSArICcgJwotICAgICAgICB3aWxsX3N0
cmVhbV9sb2dzID0gc2VsZi5fbnVtX3dvcmtlcnMgPT0gMSBhbmQgc2VsZi5wb3J0LmdldF9vcHRp
b24oJ3ZlcmJvc2UnKQotICAgICAgICBpZiBtZXNzYWdlX25hbWUgPT0gJ2VuZGVkX3Rlc3QnOgot
ICAgICAgICAgICAgdXBkYXRlID0gJ3t9e30ge30nLmZvcm1hdChzb3VyY2UsIHRlc3RfbmFtZSwg
UnVubmVyLk5BTUVfRk9SX1NUQVRVU1tzdGF0dXNdKQotCi0gICAgICAgICAgICAjIERvbid0IHBy
aW50IHRlc3Qgb3V0cHV0IGlmIC0tcXVpZXQuCi0gICAgICAgICAgICBpZiBzdGF0dXMgIT0gUnVu
bmVyLlNUQVRVU19QQVNTRUQgb3IgKG91dHB1dCBhbmQgbm90IHNlbGYucG9ydC5nZXRfb3B0aW9u
KCdxdWlldCcpKToKLSAgICAgICAgICAgICAgICBpZiBub3Qgd2lsbF9zdHJlYW1fbG9nczoKLSAg
ICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKToKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9oYXNfbG9nZ2VkX2Zvcl90ZXN0OgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhc19sb2dnZWRfZm9yX3Rlc3QgPSBUcnVl
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmludGVyLndyaXRlbG4oc291cmNl
KQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmludGVyLndyaXRlbG4oJ3t9ICAgIHt9
Jy5mb3JtYXQoc291cmNlLCBsaW5lKSkKLSAgICAgICAgICAgICAgICBzZWxmLnByaW50ZXIud3Jp
dGVsbih1cGRhdGUpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYucHJp
bnRlci53cml0ZV91cGRhdGUodXBkYXRlKQotICAgICAgICAgICAgc2VsZi50ZXN0c19ydW4gKz0g
MQotICAgICAgICAgICAgc2VsZi5yZXN1bHRzW3Rlc3RfbmFtZV0gPSAoc3RhdHVzLCBvdXRwdXQp
Ci0gICAgICAgICAgICBzZWxmLl9oYXNfbG9nZ2VkX2Zvcl90ZXN0ID0gRmFsc2UKLQotICAgICAg
ICBpZiBtZXNzYWdlX25hbWUgPT0gJ2xvZycgYW5kIHdpbGxfc3RyZWFtX2xvZ3M6Ci0gICAgICAg
ICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXRsaW5lcygpOgotICAgICAgICAgICAgICAgIGlm
IG5vdCBzZWxmLl9oYXNfbG9nZ2VkX2Zvcl90ZXN0OgotICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9oYXNfbG9nZ2VkX2Zvcl90ZXN0ID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICBzZWxmLnBy
aW50ZXIud3JpdGVsbihzb3VyY2UpCi0gICAgICAgICAgICAgICAgc2VsZi5wcmludGVyLndyaXRl
bG4oJ3t9ICAgIHt9Jy5mb3JtYXQoc291cmNlLCBsaW5lKSkKKyAgICAgICAgICAgIHdpdGggVGFz
a1Bvb2woCisgICAgICAgICAgICAgICAgd29ya2Vycz1zZWxmLl9udW1fd29ya2VycywKKyAgICAg
ICAgICAgICAgICBzZXR1cD1zZXR1cF9zaGFyZCwgc2V0dXBrd2FyZ3M9ZGljdChwb3J0PXNlbGYu
cG9ydCksCisgICAgICAgICAgICAgICAgdGVhcmRvd249dGVhcmRvd25fc2hhcmQsCisgICAgICAg
ICAgICApIGFzIHBvb2w6CisgICAgICAgICAgICAgICAgZm9yIG5hbWUsIHRlc3RzIGluIGl0ZXJp
dGVtcyhzaGFyZHMpOgorICAgICAgICAgICAgICAgICAgICBwb29sLmRvKHJ1bl9zaGFyZCwgbmFt
ZSwgKnRlc3RzKQorICAgICAgICAgICAgICAgIHBvb2wud2FpdCgpCiAKKyAgICAgICAgZmluYWxs
eToKKyAgICAgICAgICAgIHNlcnZlcl9wcm9jZXNzX2xvZ2dlci5zZXRMZXZlbChvcmlnaW5hbF9s
ZXZlbCkKKyAgICAgICAgICAgIFJ1bm5lci5pbnN0YW5jZSA9IE5vbmUKIAogICAgIGRlZiByZXN1
bHRfbWFwX2J5X3N0YXR1cyhzZWxmLCBzdGF0dXM9Tm9uZSk6CiAgICAgICAgIG1hcCA9IHt9CkBA
IC0xMzksMTcgKzE0MiwyNSBAQCBjbGFzcyBSdW5uZXIob2JqZWN0KToKIAogCiBjbGFzcyBfV29y
a2VyKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGNhbGxlciwgcG9ydCwgc2hhcmRf
bWFwKToKLSAgICAgICAgc2VsZi5fY2FsbGVyID0gY2FsbGVyCisgICAgaW5zdGFuY2UgPSBOb25l
CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0dXAoY2xzLCBwb3J0PU5vbmUpOgorICAg
ICAgICBjbHMuaW5zdGFuY2UgPSBjbHMocG9ydCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRl
ZiB0ZWFyZG93bihjbHMpOgorICAgICAgICBjbHMuaW5zdGFuY2UgPSBOb25lCisKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgcG9ydCk6CiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAg
IHNlbGYuaG9zdCA9IHBvcnQuaG9zdAotICAgICAgICBzZWxmLl9zaGFyZF9tYXAgPSBzaGFyZF9t
YXAKIAogICAgICAgICAjIFNlcnZlclByb2Nlc3MgZG9lc24ndCBhbGxvdyBmb3IgYSB0aW1lb3V0
IG9mICdOb25lLCcgdGhpcyB1c2VzIGEgd2VlayBpbnN0ZWFkIG9mIE5vbmUuCiAgICAgICAgIHNl
bGYuX3RpbWVvdXQgPSBpbnQoc2VsZi5fcG9ydC5nZXRfb3B0aW9uKCd0aW1lb3V0JykpIGlmIHNl
bGYuX3BvcnQuZ2V0X29wdGlvbigndGltZW91dCcpIGVsc2UgNjAgKiAyNCAqIDcKIAotICAgIEBz
dGF0aWNtZXRob2QKLSAgICBkZWYgX2ZpbHRlcl9ub2lzeV9vdXRwdXQob3V0cHV0KToKKyAgICBA
Y2xhc3NtZXRob2QKKyAgICBkZWYgX2ZpbHRlcl9ub2lzeV9vdXRwdXQoY2xzLCBvdXRwdXQpOgog
ICAgICAgICByZXN1bHQgPSAnJwogICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXRsaW5l
cygpOgogICAgICAgICAgICAgaWYgbGluZS5sc3RyaXAoKS5zdGFydHN3aXRoKCdvYmpjWycpOgpA
QCAtMTY3LDEzICsxNzgsMTQgQEAgY2xhc3MgX1dvcmtlcihvYmplY3QpOgogICAgICAgICBpZiB0
ZXN0LnNwbGl0KCcuJylbMV0uc3RhcnRzd2l0aCgnRElTQUJMRURfJykgYW5kIG5vdCBzZWxmLl9w
b3J0LmdldF9vcHRpb24oJ2ZvcmNlJyk6CiAgICAgICAgICAgICBzdGF0dXMgPSBSdW5uZXIuU1RB
VFVTX0RJU0FCTEVECiAKKyAgICAgICAgc3Rkb3V0X2J1ZmZlciA9ICcnCisgICAgICAgIHN0ZGVy
cl9idWZmZXIgPSAnJworCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGRlYWRsaW5lID0gdGlt
ZS50aW1lKCkgKyBzZWxmLl90aW1lb3V0CiAgICAgICAgICAgICBpZiBzdGF0dXMgIT0gUnVubmVy
LlNUQVRVU19ESVNBQkxFRDoKICAgICAgICAgICAgICAgICBzZXJ2ZXJfcHJvY2Vzcy5zdGFydCgp
CiAKLSAgICAgICAgICAgIHN0ZG91dF9idWZmZXIgPSAnJwotICAgICAgICAgICAgc3RkZXJyX2J1
ZmZlciA9ICcnCiAgICAgICAgICAgICB3aGlsZSBzdGF0dXMgPT0gUnVubmVyLlNUQVRVU19SVU5O
SU5HOgogICAgICAgICAgICAgICAgIHN0ZG91dF9saW5lLCBzdGRlcnJfbGluZSA9IHNlcnZlcl9w
cm9jZXNzLnJlYWRfZWl0aGVyX3N0ZG91dF9vcl9zdGRlcnJfbGluZShkZWFkbGluZSkKICAgICAg
ICAgICAgICAgICBpZiBub3Qgc3RkZXJyX2xpbmUgYW5kIG5vdCBzdGRvdXRfbGluZToKQEAgLTE4
Miw3ICsxOTQsNyBAQCBjbGFzcyBfV29ya2VyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgaWYg
c3RkZXJyX2xpbmU6CiAgICAgICAgICAgICAgICAgICAgIHN0ZGVycl9saW5lID0gc3RyaW5nX3V0
aWxzLmRlY29kZShzdGRlcnJfbGluZSwgdGFyZ2V0X3R5cGU9c3RyKQogICAgICAgICAgICAgICAg
ICAgICBzdGRlcnJfYnVmZmVyICs9IHN0ZGVycl9saW5lCi0gICAgICAgICAgICAgICAgICAgIHNl
bGYucG9zdCgnbG9nJywgb3V0cHV0PXN0ZGVycl9saW5lWzotMV0pCisgICAgICAgICAgICAgICAg
ICAgIF9sb2cuZXJyb3Ioc3RkZXJyX2xpbmVbOi0xXSkKICAgICAgICAgICAgICAgICBpZiBzdGRv
dXRfbGluZToKICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0X2xpbmUgPSBzdHJpbmdfdXRpbHMu
ZGVjb2RlKHN0ZG91dF9saW5lLCB0YXJnZXRfdHlwZT1zdHIpCiAgICAgICAgICAgICAgICAgICAg
IGlmICcqKlBBU1MqKicgaW4gc3Rkb3V0X2xpbmU6CkBAIC0xOTEsNyArMjAzLDcgQEAgY2xhc3Mg
X1dvcmtlcihvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUnVubmVy
LlNUQVRVU19GQUlMRUQKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZG91dF9idWZmZXIgKz0gc3Rkb3V0X2xpbmUKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYucG9zdCgnbG9nJywgb3V0cHV0PXN0ZG91dF9saW5lWzotMV0pCisgICAgICAg
ICAgICAgICAgICAgICAgICBfbG9nLmVycm9yKHN0ZG91dF9saW5lWzotMV0pCiAKICAgICAgICAg
ICAgIGlmIHN0YXR1cyA9PSBSdW5uZXIuU1RBVFVTX0RJU0FCTEVEOgogICAgICAgICAgICAgICAg
IHBhc3MKQEAgLTIwNSwyMiArMjE3LDMwIEBAIGNsYXNzIF9Xb3JrZXIob2JqZWN0KToKICAgICAg
ICAgZmluYWxseToKICAgICAgICAgICAgIHJlbWFpbmluZ19zdGRlcnIgPSBzdHJpbmdfdXRpbHMu
ZGVjb2RlKHNlcnZlcl9wcm9jZXNzLnBvcF9hbGxfYnVmZmVyZWRfc3RkZXJyKCksIHRhcmdldF90
eXBlPXN0cikKICAgICAgICAgICAgIHJlbWFpbmluZ19zdGRvdXQgPSBzdHJpbmdfdXRpbHMuZGVj
b2RlKHNlcnZlcl9wcm9jZXNzLnBvcF9hbGxfYnVmZmVyZWRfc3Rkb3V0KCksIHRhcmdldF90eXBl
PXN0cikKLSAgICAgICAgICAgIHNlbGYucG9zdCgnbG9nJywgb3V0cHV0PXJlbWFpbmluZ19zdGRl
cnIgKyByZW1haW5pbmdfc3Rkb3V0KQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gKHJlbWFpbmlu
Z19zdGRvdXQgKyByZW1haW5pbmdfc3RkZXJyKS5zcGxpdGxpbmVzKEZhbHNlKToKKyAgICAgICAg
ICAgICAgICBfbG9nLmVycm9yKGxpbmUpCiAgICAgICAgICAgICBvdXRwdXRfYnVmZmVyID0gc3Rk
ZXJyX2J1ZmZlciArIHN0ZG91dF9idWZmZXIgKyByZW1haW5pbmdfc3RkZXJyICsgcmVtYWluaW5n
X3N0ZG91dAogICAgICAgICAgICAgc2VydmVyX3Byb2Nlc3Muc3RvcCgpCiAKLSAgICAgICAgc2Vs
Zi5wb3N0KCdlbmRlZF90ZXN0JywgJ3t9Lnt9Jy5mb3JtYXQoYmluYXJ5X25hbWUsIHRlc3QpLCBz
dGF0dXMsIHNlbGYuX2ZpbHRlcl9ub2lzeV9vdXRwdXQob3V0cHV0X2J1ZmZlcikpCi0KLSAgICBk
ZWYgX3J1bl9zaGFyZF93aXRoX2JpbmFyeShzZWxmLCBiaW5hcnlfbmFtZSwgdGVzdHMpOgotICAg
ICAgICByZW1haW5pbmdfdGVzdHMgPSBsaXN0KHRlc3RzKQorICAgICAgICBUYXNrUG9vbC5Qcm9j
ZXNzLnF1ZXVlLnNlbmQoVGFza1Bvb2wuVGFzaygKKyAgICAgICAgICAgIHJlcG9ydF9yZXN1bHQs
IE5vbmUsIFRhc2tQb29sLlByb2Nlc3MubmFtZSwKKyAgICAgICAgICAgICd7fS57fScuZm9ybWF0
KGJpbmFyeV9uYW1lLCB0ZXN0KSwKKyAgICAgICAgICAgIHN0YXR1cywKKyAgICAgICAgICAgIHNl
bGYuX2ZpbHRlcl9ub2lzeV9vdXRwdXQob3V0cHV0X2J1ZmZlciksCisgICAgICAgICkpCisKKyAg
ICBkZWYgcnVuKHNlbGYsIG5hbWUsICp0ZXN0cyk6CisgICAgICAgIGJpbmFyeV9uYW1lID0gbmFt
ZS5zcGxpdCgnLicpWzBdCisgICAgICAgIHJlbWFpbmluZ190ZXN0cyA9IFsnLicuam9pbih0ZXN0
LnNwbGl0KCcuJylbMTpdKSBmb3IgdGVzdCBpbiB0ZXN0c10KIAogICAgICAgICAjIFRyeSB0byBy
dW4gdGhlIHNoYXJkIGluIGEgc2luZ2xlIHByb2Nlc3MuCiAgICAgICAgIHdoaWxlIHJlbWFpbmlu
Z190ZXN0cyBhbmQgbm90IHNlbGYuX3BvcnQuZ2V0X29wdGlvbigncnVuX3NpbmdseScpOgogICAg
ICAgICAgICAgc3RhcnRpbmdfbGVuZ3RoID0gbGVuKHJlbWFpbmluZ190ZXN0cykKICAgICAgICAg
ICAgIHNlcnZlcl9wcm9jZXNzID0gU2VydmVyUHJvY2VzcygKICAgICAgICAgICAgICAgICBzZWxm
Ll9wb3J0LCBiaW5hcnlfbmFtZSwKLSAgICAgICAgICAgICAgICBSdW5uZXIuY29tbWFuZF9mb3Jf
cG9ydChzZWxmLl9wb3J0LCBbc2VsZi5fcG9ydC5fYnVpbGRfcGF0aChiaW5hcnlfbmFtZSksICct
LWd0ZXN0X2ZpbHRlcj17fScuZm9ybWF0KCc6Jy5qb2luKHJlbWFpbmluZ190ZXN0cykpXSksCi0g
ICAgICAgICAgICAgICAgZW52PXNlbGYuX3BvcnQuZW52aXJvbm1lbnRfZm9yX2FwaV90ZXN0cygp
KQorICAgICAgICAgICAgICAgIFJ1bm5lci5jb21tYW5kX2Zvcl9wb3J0KHNlbGYuX3BvcnQsIFsK
KyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5fYnVpbGRfcGF0aChiaW5hcnlfbmFtZSks
ICctLWd0ZXN0X2ZpbHRlcj17fScuZm9ybWF0KCc6Jy5qb2luKHJlbWFpbmluZ190ZXN0cykpCisg
ICAgICAgICAgICAgICAgXSksIGVudj1zZWxmLl9wb3J0LmVudmlyb25tZW50X2Zvcl9hcGlfdGVz
dHMoKSkKIAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGRlYWRsaW5lID0gdGlt
ZS50aW1lKCkgKyBzZWxmLl90aW1lb3V0CkBAIC0yMzAsNyArMjUwLDcgQEAgY2xhc3MgX1dvcmtl
cihvYmplY3QpOgogCiAgICAgICAgICAgICAgICAgc2VydmVyX3Byb2Nlc3Muc3RhcnQoKQogICAg
ICAgICAgICAgICAgIHdoaWxlIHJlbWFpbmluZ190ZXN0czoKLSAgICAgICAgICAgICAgICAgICAg
c3Rkb3V0ID0gc2VydmVyX3Byb2Nlc3MucmVhZF9zdGRvdXRfbGluZShkZWFkbGluZSkKKyAgICAg
ICAgICAgICAgICAgICAgc3Rkb3V0ID0gc3RyaW5nX3V0aWxzLmRlY29kZShzZXJ2ZXJfcHJvY2Vz
cy5yZWFkX3N0ZG91dF9saW5lKGRlYWRsaW5lKSwgdGFyZ2V0X3R5cGU9c3RyKQogCiAgICAgICAg
ICAgICAgICAgICAgICMgSWYgd2UndmUgdHJpZ2dlcmVkIGEgdGltZW91dCwgd2UgZG9uJ3Qga25v
dyB3aGljaCB0ZXN0IGNhdXNlZCBpdC4gQnJlYWsgb3V0IGFuZCBydW4gc2luZ2x5LgogICAgICAg
ICAgICAgICAgICAgICBpZiBzdGRvdXQgaXMgTm9uZSBhbmQgc2VydmVyX3Byb2Nlc3MudGltZWRf
b3V0OgpAQCAtMjUxLDcgKzI3MSwxNCBAQCBjbGFzcyBfV29ya2VyKG9iamVjdCk6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgICBpZiBsYXN0X3Rl
c3QgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdfdGVzdHMu
cmVtb3ZlKGxhc3RfdGVzdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucG9zdCgnZW5k
ZWRfdGVzdCcsICd7fS57fScuZm9ybWF0KGJpbmFyeV9uYW1lLCBsYXN0X3Rlc3QpLCBsYXN0X3N0
YXR1cywgc3Rkb3V0X2J1ZmZlcikKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUg
aW4gc3Rkb3V0X2J1ZmZlci5zcGxpdGxpbmVzKEZhbHNlKToKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfbG9nLmVycm9yKGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBUYXNrUG9v
bC5Qcm9jZXNzLnF1ZXVlLnNlbmQoVGFza1Bvb2wuVGFzaygKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXBvcnRfcmVzdWx0LCBOb25lLCBUYXNrUG9vbC5Qcm9jZXNzLm5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3t9Lnt9Jy5mb3JtYXQoYmluYXJ5X25hbWUsIGxhc3Rf
dGVzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9zdGF0dXMsIHN0ZG91dF9i
dWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICApKQogICAgICAgICAgICAgICAgICAgICAg
ICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIHNlbGYuX3RpbWVvdXQKICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZG91dF9idWZmZXIgPSAnJwogCkBAIC0yNjQsMTAgKzI5MSwxNyBAQCBjbGFz
cyBfV29ya2VyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgIyBXZSBhc3N1bWUgdGhhdCBzdGRl
cnIgaXMgb25seSByZWxldmFudCBpZiB0aGVyZSBpcyBhIGNyYXNoIChtZWFuaW5nIHdlIHRyaWdn
ZXJlZCBhbiBhc3NlcnQpCiAgICAgICAgICAgICAgICAgaWYgbGFzdF90ZXN0OgogICAgICAgICAg
ICAgICAgICAgICByZW1haW5pbmdfdGVzdHMucmVtb3ZlKGxhc3RfdGVzdCkKLSAgICAgICAgICAg
ICAgICAgICAgc3Rkb3V0X2J1ZmZlciArPSBzZXJ2ZXJfcHJvY2Vzcy5wb3BfYWxsX2J1ZmZlcmVk
X3N0ZG91dCgpCi0gICAgICAgICAgICAgICAgICAgIHN0ZGVycl9idWZmZXIgPSBzZXJ2ZXJfcHJv
Y2Vzcy5wb3BfYWxsX2J1ZmZlcmVkX3N0ZGVycigpIGlmIGxhc3Rfc3RhdHVzID09IFJ1bm5lci5T
VEFUVVNfQ1JBU0hFRCBlbHNlICcnCi0gICAgICAgICAgICAgICAgICAgIHNlbGYucG9zdCgnbG9n
Jywgb3V0cHV0PXN0ZG91dF9idWZmZXIgKyBzdGRlcnJfYnVmZmVyKQotICAgICAgICAgICAgICAg
ICAgICBzZWxmLnBvc3QoJ2VuZGVkX3Rlc3QnLCAne30ue30nLmZvcm1hdChiaW5hcnlfbmFtZSwg
bGFzdF90ZXN0KSwgbGFzdF9zdGF0dXMsIHNlbGYuX2ZpbHRlcl9ub2lzeV9vdXRwdXQoc3Rkb3V0
X2J1ZmZlciArIHN0ZGVycl9idWZmZXIpKQorICAgICAgICAgICAgICAgICAgICBzdGRvdXRfYnVm
ZmVyICs9IHN0cmluZ191dGlscy5kZWNvZGUoc2VydmVyX3Byb2Nlc3MucG9wX2FsbF9idWZmZXJl
ZF9zdGRvdXQoKSwgdGFyZ2V0X3R5cGU9c3RyKQorICAgICAgICAgICAgICAgICAgICBzdGRlcnJf
YnVmZmVyID0gc3RyaW5nX3V0aWxzLmRlY29kZShzZXJ2ZXJfcHJvY2Vzcy5wb3BfYWxsX2J1ZmZl
cmVkX3N0ZGVycigpLCB0YXJnZXRfdHlwZT1zdHIpIGlmIGxhc3Rfc3RhdHVzID09IFJ1bm5lci5T
VEFUVVNfQ1JBU0hFRCBlbHNlICcnCisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIChz
dGRvdXRfYnVmZmVyICsgc3RkZXJyX2J1ZmZlcikuc3BsaXRsaW5lcyhrZWVwZW5kcz1GYWxzZSk6
CisgICAgICAgICAgICAgICAgICAgICAgICBfbG9nLmVycm9yKGxpbmUpCisKKyAgICAgICAgICAg
ICAgICAgICAgVGFza1Bvb2wuUHJvY2Vzcy5xdWV1ZS5zZW5kKFRhc2tQb29sLlRhc2soCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXBvcnRfcmVzdWx0LCBOb25lLCBUYXNrUG9vbC5Qcm9jZXNz
Lm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAne30ue30nLmZvcm1hdChiaW5hcnlfbmFt
ZSwgbGFzdF90ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Rfc3RhdHVzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsdGVyX25vaXN5X291dHB1dChzdGRvdXRfYnVm
ZmVyICsgc3RkZXJyX2J1ZmZlciksCisgICAgICAgICAgICAgICAgICAgICkpCiAKICAgICAgICAg
ICAgICAgICBpZiBzZXJ2ZXJfcHJvY2Vzcy50aW1lZF9vdXQ6CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrCkBAIC0yODEsMTkgKzMxNSwzIEBAIGNsYXNzIF9Xb3JrZXIob2JqZWN0KToKICAgICAg
ICAgIyBOb3csIGp1c3QgdHJ5IGFuZCBydW4gdGhlIHJlc3Qgb2YgdGhlIHRlc3RzIHNpbmdseS4K
ICAgICAgICAgZm9yIHRlc3QgaW4gcmVtYWluaW5nX3Rlc3RzOgogICAgICAgICAgICAgc2VsZi5f
cnVuX3NpbmdsZV90ZXN0KGJpbmFyeV9uYW1lLCB0ZXN0KQotCi0gICAgZGVmIHBvc3Qoc2VsZiwg
bWVzc2FnZV9uYW1lLCB0ZXN0X25hbWU9Tm9uZSwgc3RhdHVzPTAsIG91dHB1dD0nJyk6Ci0gICAg
ICAgIHNlbGYuX2NhbGxlci5wb3N0KG1lc3NhZ2VfbmFtZSwgdGVzdF9uYW1lLCBzdGF0dXMsIG91
dHB1dCkKLQotICAgIGRlZiBoYW5kbGUoc2VsZiwgbWVzc2FnZV9uYW1lLCBzb3VyY2UsIHNoYXJk
X25hbWUpOgotICAgICAgICBhc3NlcnQgbWVzc2FnZV9uYW1lID09ICd0ZXN0JwotICAgICAgICBz
ZWxmLnBvc3QoJ3N0YXJ0ZWRfc2hhcmQnLCBzaGFyZF9uYW1lKQotCi0gICAgICAgIGJpbmFyeV9t
YXAgPSB7fQotICAgICAgICBmb3IgdGVzdCBpbiBzZWxmLl9zaGFyZF9tYXBbc2hhcmRfbmFtZV06
Ci0gICAgICAgICAgICBzcGxpdF90ZXN0X25hbWUgPSB0ZXN0LnNwbGl0KCcuJykKLSAgICAgICAg
ICAgIGlmIHNwbGl0X3Rlc3RfbmFtZVswXSBub3QgaW4gYmluYXJ5X21hcDoKLSAgICAgICAgICAg
ICAgICBiaW5hcnlfbWFwW3NwbGl0X3Rlc3RfbmFtZVswXV0gPSBbXQotICAgICAgICAgICAgYmlu
YXJ5X21hcFtzcGxpdF90ZXN0X25hbWVbMF1dLmFwcGVuZCgnLicuam9pbihzcGxpdF90ZXN0X25h
bWVbMTpdKSkKLSAgICAgICAgZm9yIGJpbmFyeV9uYW1lLCB0ZXN0X2xpc3QgaW4gYmluYXJ5X21h
cC5pdGVtcygpOgotICAgICAgICAgICAgc2VsZi5fcnVuX3NoYXJkX3dpdGhfYmluYXJ5KGJpbmFy
eV9uYW1lLCB0ZXN0X2xpc3QpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>