<?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>122936</bug_id>
          
          <creation_ts>2013-10-16 19:34:32 -0700</creation_ts>
          <short_desc>Add a new flakiness dashboard clone</short_desc>
          <delta_ts>2013-10-17 12:22:38 -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>WebKit Website</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>ap</cc>
    
    <cc>dfarler</cc>
    
    <cc>lforschler</cc>
    
    <cc>mrowe</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>940623</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-16 19:34:32 -0700</bug_when>
    <thetext>Add a new flakiness dashboard clone</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940627</commentid>
    <comment_count>1</comment_count>
      <attachid>214416</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-16 19:44:12 -0700</bug_when>
    <thetext>Created attachment 214416
Adds the app</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940631</commentid>
    <comment_count>2</comment_count>
      <attachid>214418</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-16 19:49:47 -0700</bug_when>
    <thetext>Created attachment 214418
Removed defer attributes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940632</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-16 19:52:00 -0700</bug_when>
    <thetext>My plan is to check this initial version in and then iterate over time instead of trying to address all use cases, etc...

We can always delete it if we later find that the existing flamines dashboard is better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940633</commentid>
    <comment_count>4</comment_count>
      <attachid>214418</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-10-16 19:53:57 -0700</bug_when>
    <thetext>Comment on attachment 214418
Removed defer attributes

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

&gt; Websites/test-results/index.html:23
&gt; +    var urls = removeJunkFromResultsPage(removeJunksFromNRWTStdout(rawInput)).split(&apos;\n&apos;);

Junks should probably be Junk here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940636</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-16 20:09:07 -0700</bug_when>
    <thetext>Committed r157555: &lt;http://trac.webkit.org/changeset/157555&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940653</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-10-16 22:48:46 -0700</bug_when>
    <thetext>Is this already deployed on one of webkit.org servers? I have some security concerns that may limit where this can be deployed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940660</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-17 00:02:31 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Is this already deployed on one of webkit.org servers? I have some security concerns that may limit where this can be deployed.

No. What are your security concerns?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940790</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-10-17 08:49:19 -0700</bug_when>
    <thetext>Flakiness dashboard is particularly vulnerable because it&apos;s a persistent database that any attacker can write arbitrary data to. While there is some validation in report.php, I think that it&apos;s best to have multiple layers or protection, ideally by isolating it to its own domain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940895</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-17 12:22:38 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Flakiness dashboard is particularly vulnerable because it&apos;s a persistent database that any attacker can write arbitrary data to.

With that token, the current flakiness dashboard also can also store arbitrary data any attacker sends.

&gt; While there is some validation in report.php, I think that it&apos;s best to have multiple layers or protection, ideally by isolating it to its own domain.

Indeed. We&apos;ll probably host it at test-results.webkit.org.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214416</attachid>
            <date>2013-10-16 19:44:12 -0700</date>
            <delta_ts>2013-10-16 19:49:44 -0700</delta_ts>
            <desc>Adds the app</desc>
            <filename>bug-122936-20131016194412.patch</filename>
            <type>text/plain</type>
            <size>48898</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzQ4
OCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEzLTEw
LTE2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIG5l
dyBmbGFraW5lc3MgZGFzaGJvYXJkIGNsb25lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI5MzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0aGUgaW5pdGlhbCBwcm90b3R5cGUuCisKKyAgICAg
ICAgKiBXZWJzaXRlcy90ZXN0LXJlc3VsdHM6IEFkZGVkLgorICAgICAgICAqIFdlYnNpdGVzL3Rl
c3QtcmVzdWx0cy8uaHRhY2Nlc3M6IEFkZGVkLgorICAgICAgICAqIFdlYnNpdGVzL3Rlc3QtcmVz
dWx0cy9hZG1pbjogQWRkZWQuCisgICAgICAgICogV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2FkbWlu
L2luZGV4LnBocDogQWRkZWQuCisgICAgICAgICogV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2FwaTog
QWRkZWQuCisgICAgICAgICogV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2FwaS9tYW5pZmVzdC5waHA6
IEFkZGVkLgorICAgICAgICAqIFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9hcGkvcmVwb3J0LnBocDog
QWRkZWQuCisgICAgICAgICogV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2FwaS9yZXN1bHRzLnBocDog
QWRkZWQuCisgICAgICAgICogV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2luY2x1ZGU6IEFkZGVkLgor
ICAgICAgICAqIFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9pbmNsdWRlL2NvbmZpZy5qc29uOiBBZGRl
ZC4KKyAgICAgICAgKiBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvaW5jbHVkZS9kYi5waHA6IEFkZGVk
LgorICAgICAgICAqIFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9pbmNsdWRlL2luaXQtZGF0YWJhc2Uu
c3FsOiBBZGRlZC4KKyAgICAgICAgKiBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvaW5jbHVkZS9qc29u
LXNoYXJlZC5waHA6IEFkZGVkLgorICAgICAgICAqIFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9pbmNs
dWRlL3Rlc3QtcmVzdWx0cy5waHA6IEFkZGVkLgorICAgICAgICAqIFdlYnNpdGVzL3Rlc3QtcmVz
dWx0cy9pbmRleC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBXZWJzaXRlcy90ZXN0LXJlc3VsdHMv
anM6IEFkZGVkLgorICAgICAgICAqIFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9qcy9hdXRvY29tcGxl
dGVyLmpzOiBBZGRlZC4KKyAgICAgICAgKiBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvanMvYnVpbGQu
anM6IEFkZGVkLgorICAgICAgICAqIFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9qcy9kb20uanM6IEFk
ZGVkLgorCiAyMDEzLTEwLTEwICBNYXJjZWxvIE1vcmFpcyAgPG0ubW9yYWlzQHNhbXN1bmcuY29t
PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlbW92ZSB0aGUgb2xkIGZyb250LWVuZCBmcm9t
IFdlYktpdApJbmRleDogV2Vic2l0ZXMvdGVzdC1yZXN1bHRzLy5odGFjY2Vzcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvLmh0YWNjZXNzCShyZXZpc2lvbiAwKQorKysgV2Vi
c2l0ZXMvdGVzdC1yZXN1bHRzLy5odGFjY2Vzcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgg
QEAKK3BocF92YWx1ZSBwb3N0X21heF9zaXplIDIwTQorCis8SWZNb2R1bGUgbW9kX3BocDUuYz4K
K3BocF92YWx1ZSB1cGxvYWRfbWF4X2ZpbGVzaXplIDEwMDAwMDAwMAorcGhwX3ZhbHVlIHBvc3Rf
bWF4X3NpemUgMTEwMDAwMDAwCitwaHBfdmFsdWUgbWVtb3J5X2xpbWl0IDEyMDAwMDAwMAorcGhw
X3ZhbHVlIG1heF9pbnB1dF90aW1lIDYwCis8L0lmTW9kdWxlPgpJbmRleDogV2Vic2l0ZXMvdGVz
dC1yZXN1bHRzL2luZGV4Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvdGVzdC1yZXN1bHRz
L2luZGV4Lmh0bWwJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvaW5kZXgu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorPHRpdGxlPldlYktpdCBUZXN0IFJlc3VsdHM8L3RpdGxlPgorPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvY29tbW9uLmNzcyI+Cis8c2NyaXB0IHNyYz0ianMvYXV0
b2NvbXBsZXRlci5qcyIgZGVmZXI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvYnVpbGQuanMi
IGRlZmVyPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL2RvbS5qcyIgZGVmZXI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKworPGhlYWRlciBpZD0idGl0bGUiPgorPGgxPjxhIGhyZWY9Ii8i
PldlYktpdCBUZXN0IFJlc3VsdHM8L2E+PC9oMT4KKzx1bD4KKyAgICA8bGk+PGEgaHJlZj0iaHR0
cDovL2J1aWxkLndlYmtpdC5vcmcvd2F0ZXJmYWxsIj5XYXRlcmZhbGw8L2E+PC9saT4KKzwvdWw+
Cis8L2hlYWRlcj4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIHNhbml0aXplKCkgeworICAgIHZhciB0
ZXh0YXJlYSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk7CisgICAgdmFyIHJh
d0lucHV0ID0gdGV4dGFyZWEudmFsdWU7CisgICAgdmFyIHVybHMgPSByZW1vdmVKdW5rRnJvbVJl
c3VsdHNQYWdlKHJlbW92ZUp1bmtzRnJvbU5SV1RTdGRvdXQocmF3SW5wdXQpKS5zcGxpdCgnXG4n
KTsKKyAgICB0ZXh0YXJlYS52YWx1ZSA9IHVybHMuZmlsdGVyKGZ1bmN0aW9uICh1cmwpIHsgcmV0
dXJuIHVybC5sZW5ndGg7IH0pLmpvaW4oJ1xuJyk7Cit9CisKKzwvc2NyaXB0PgorCis8Zm9ybSBp
ZD0ibmF2aWdhdGlvbkJhciIgb25zdWJtaXQ9IlRlc3RSZXN1bHRzVmlldy5mZXRjaFRlc3QodGhp
c1sndGVzdE5hbWUnXS52YWx1ZSk7CisgICAgVGVzdFJlc3VsdHNWaWV3LnVwZGF0ZUxvY2F0aW9u
SGFzaCgpOworICAgIHJldHVybiBmYWxzZTsiPgorPGlucHV0IGlkPSJ0ZXN0TmFtZSIgdHlwZT0i
dGV4dCIgc2l6ZT0iMTUwIiBvbnBhc3RlPSJwYXN0ZUhlbHBlcih0aGlzLCBldmVudCkiCisgICAg
cGxhY2Vob2xkZXI9IlR5cGUgaW4gYSB0ZXN0IG5hbWUsIG9yIGNvcHkgYW5kIHBhc3RlIHRlc3Qg
bmFtZXMgb24gcmVzdWx0cy5odG1sIG9yIE5SV1Qgc3Rkb3V0IChpbmNsdWRpbmcganVua3MpIj48
L2Zvcm0+CisKKzxkaXYgaWQ9ImNvbnRhaW5lciI+PC9kaXY+Cis8ZGl2IGlkPSJ0b29sdGlwQ29u
dGFpbmVyIj48L2Rpdj4KKworPHN0eWxlPgorCisjdGVzdE5hbWUgeworICAgIHdpZHRoOiA5OSU7
CisgICAgZm9udC1zaXplOiAxZW07CisgICAgb3V0bGluZTogbm9uZTsKKyAgICBib3JkZXI6IDFw
eCBzb2xpZCAjY2NjOworICAgIGJvcmRlci1yYWRpdXM6IDVweDsKKyAgICBwYWRkaW5nOiA1cHg7
Cit9CisKKy50ZXN0UmVzdWx0cyB7CisgICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKKyAgICBi
b3JkZXItcmFkaXVzOiA1cHg7CisgICAgcGFkZGluZzogNXB4OworICAgIG1hcmdpbjogMTBweCAw
cHg7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworfQorCisuY2xvc2VCdXR0b24geworICAgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdodDogNXB4OworICAgIHRvcDogNXB4OworICAgIHdp
ZHRoOiAxZW07CisgICAgaGVpZ2h0OiAxZW07CisgICAgc3Ryb2tlOiAjOTk5OworfQorCisucmVz
dWx0c1RhYmxlIHsKKyAgICBmb250LXNpemU6IHNtYWxsOworICAgIGJvcmRlci1jb2xsYXBzZTog
Y29sbGFwc2U7CisgICAgYm9yZGVyOiAycHggc29saWQgI2ZmZjsKKyAgICBwYWRkaW5nOiAwOwor
ICAgIG1hcmdpbjogMDsKK30KKworLnJlc3VsdHNUYWJsZSBjYXB0aW9uIHsKKyAgICBmb250LXNp
emU6IGxhcmdlOworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgICAgdGV4dC1hbGlnbjogbGVm
dDsKKyAgICBtYXJnaW4tYm90dG9tOiAwLjNlbTsKKyAgICB3aGl0ZS1zcGFjZTogcHJlOworfQor
CisucmVzdWx0c1RhYmxlIHRkLAorLnJlc3VsdHNUYWJsZSB0aCB7CisgICAgYm9yZGVyOiAycHgg
c29saWQgI2ZmZjsKKyAgICBwYWRkaW5nOiAwOworICAgIG1hcmdpbjogMDsKK30KKworLnJlc3Vs
dHNUYWJsZSB0aCwKKy5yZXN1bHRzVGFibGUgLnBhc3NpbmdSYXRlIHsKKyAgICBmb250LXdlaWdo
dDogbm9ybWFsOworICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7Cit9CisKKy5yZXN1bHRzVGFibGUg
dGggeworICAgIHdpZHRoOiAxNWVtOworfQorCisucmVzdWx0c1RhYmxlIC5wYXNzaW5nUmF0ZSB7
CisgICAgd2lkdGg6IDNlbTsKK30KKworLnJlc3VsdHNUYWJsZSAucmVzdWx0Q2VsbCB7CisgICAg
ZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgIHBhZGRpbmc6IDAuMmVtIDAuMmVtOworfQorCisu
cmVzdWx0c1RhYmxlIGEgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIHdpZHRoOiAxZW07Cisg
ICAgaGVpZ2h0OiAxLjVlbTsKKyAgICBib3JkZXItcmFkaXVzOiAzcHg7Cit9CisKKy5yZXN1bHRz
VGFibGUgLlBBU1MgYSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogIzBjMzsKK30KKworLnJlc3Vs
dHNUYWJsZSAuVEVYVCBhIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzMzOworfQorCisucmVz
dWx0c1RhYmxlIC5JTUFHRSBhIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2NmOworfQorCisu
cmVzdWx0c1RhYmxlIC5URVhULlBBU1MgYSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2NmMzsK
K30KKworLnJlc3VsdHNUYWJsZSAuQ1JBU0ggYSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2Yw
MDsKK30KKworLmNhbmRpZGF0ZVdpbmRvdyB7CisgICAgei1pbmRleDogOTk5OworICAgIHBvc2l0
aW9uOiBhYnNvbHV0ZTsKKyAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKKyAgICBjb2xvcjogYmxhY2s7
CisgICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7Cisg
ICAgbWFyZ2luOiA1cHggMCAwIDA7CisgICAgcGFkZGluZzogNXB4OworICAgIGZvbnQtc2l6ZTog
MWVtOworICAgIGxpc3Qtc3R5bGU6IG5vbmU7Cit9CisKKy5jYW5kaWRhdGVXaW5kb3cgZW0gewor
ICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2M7CisgICAgZm9udC1zdHlsZTogbm9ybWFsOworfQor
CisuY2FuZGlkYXRlV2luZG93IC5zZWxlY3RlZCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogIzBj
ZjsKKyAgICBjb2xvcjogd2hpdGU7Cit9CisKKyN0b29sdGlwQ29udGFpbmVyIHsKKyAgICBwb3Np
dGlvbjogYWJzb2x1dGU7Cit9CisKKy50b29sdGlwIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7
CisgICAgYm9yZGVyLXJhZGl1czogNXB4OworICAgIHBhZGRpbmc6IDVweDsKKyAgICBvcGFjaXR5
OiAwLjk7CisgICAgYmFja2dyb3VuZDogIzMzMzsKKyAgICBjb2xvcjogI2VlZTsKKyAgICBmb250
LXNpemU6IHNtYWxsOworICAgIGxpbmUtaGVpZ2h0OiAxMzAlOworfQorCisudG9vbHRpcDphZnRl
ciB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHdpZHRoOiAwOworICAgIGhlaWdodDog
MDsKKyAgICBsZWZ0OiA1MCU7CisgICAgbWFyZ2luLWxlZnQ6IC05cHg7CisgICAgYm90dG9tOiAt
MTlweDsKKyAgICBjb250ZW50OiAiIjsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBib3JkZXIt
c3R5bGU6IHNvbGlkOworICAgIGJvcmRlci13aWR0aDogMTBweDsKKyAgICBib3JkZXItY29sb3I6
ICMzMzMgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7Cit9CisKKy50b29sdGlw
IHVsLAorLnRvb2x0aXAgbGkgeworICAgIHBhZGRpbmc6IDA7CisgICAgbWFyZ2luOiAwOworICAg
IGxpc3Qtc3R5bGU6IG5vbmU7Cit9CisKKy50b29sdGlwIGEgeworICAgIGNvbG9yOiB3aGl0ZTsK
KyAgICB0ZXh0LXNoYWRvdzogbm9uZTsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsK
K30KKworPC9zdHlsZT4KKzxzY3JpcHQ+CisKK3ZhciBUZXN0UmVzdWx0c1ZpZXcgPSBuZXcgKGZ1
bmN0aW9uICgpIHsKKyAgICB2YXIgdG9vbHRpcENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCd0b29sdGlwQ29udGFpbmVyJyk7CisKKyAgICB0b29sdGlwQ29udGFpbmVyLm9uY2xp
Y2sgPSBmdW5jdGlvbiAoZXZlbnQpIHsgZXZlbnQuaW5zaWRlVG9vbHRpcCA9IHRydWU7IH0KKyAg
ICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChldmVudCkgewor
ICAgICAgICBpZiAoIWV2ZW50Lmluc2lkZVRvb2x0aXApCisgICAgICAgICAgICB0b29sdGlwQ29u
dGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgfSk7CisKKyAgICB3aW5kb3cuYWRk
RXZlbnRMaXN0ZW5lcignaGFzaGNoYW5nZScsIGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICBU
ZXN0UmVzdWx0c1ZpZXcubG9jYXRpb25IYXNoQ2hhbmdlZCgpOworICAgIH0pOworCisgICAgdGhp
cy5fdG9vbHRpcENvbnRhaW5lciA9IHRvb2x0aXBDb250YWluZXI7CisgICAgdGhpcy5fdGVzdHMg
PSBbXTsKKyAgICB0aGlzLl9vbGRIYXNoID0gbnVsbDsKKyAgICB0aGlzLl9idWlsZGVycyA9IFtd
OworICAgIHRoaXMuX3NsYXZlcyA9IFtdOworICAgIHRoaXMuX3JlcG9zaXRvcmllcyA9IFtdOwor
fSk7CisKK1Rlc3RSZXN1bHRzVmlldy5zZXRCdWlsZGVycyA9IGZ1bmN0aW9uIChidWlsZGVycykg
eworICAgIHRoaXMuX2J1aWxkZXJzID0gYnVpbGRlcnM7Cit9CisKK1Rlc3RSZXN1bHRzVmlldy5z
ZXRTbGF2ZXMgPSBmdW5jdGlvbiAoc2xhdmVzKSB7CisgICAgdGhpcy5fc2xhdmVzID0gc2xhdmVz
OworfQorCitUZXN0UmVzdWx0c1ZpZXcuc2V0UmVwb3NpdG9yaWVzID0gZnVuY3Rpb24gKHJlcG9z
aXRvcmllcykgeworICAgIHRoaXMuX3JlcG9zaXRvcmllcyA9IHJlcG9zaXRvcmllczsKK30KKwor
VGVzdFJlc3VsdHNWaWV3LnNob3dUb29sdGlwID0gZnVuY3Rpb24gKGFuY2hvciwgY29udGVudEVs
ZW1lbnQpIHsKKyAgICB2YXIgdG9vbHRpcENvbnRhaW5lciA9IHRoaXMuX3Rvb2x0aXBDb250YWlu
ZXI7CisgICAgdG9vbHRpcENvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gbnVsbDsKKworICAgIHdo
aWxlICh0b29sdGlwQ29udGFpbmVyLmZpcnN0Q2hpbGQpCisgICAgICAgIHRvb2x0aXBDb250YWlu
ZXIucmVtb3ZlQ2hpbGQodG9vbHRpcENvbnRhaW5lci5maXJzdENoaWxkKTsKKyAgICB0b29sdGlw
Q29udGFpbmVyLmFwcGVuZENoaWxkKGNvbnRlbnRFbGVtZW50KTsKKworICAgIHZhciByZWN0ID0g
YW5jaG9yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgIHRvb2x0aXBDb250YWluZXIuc3R5
bGUubGVmdCA9IChyZWN0LmxlZnQgLSBjb250ZW50RWxlbWVudC5vZmZzZXRXaWR0aCAvIDIgKyBh
bmNob3Iub2Zmc2V0V2lkdGggLyAyKSArICdweCc7CisgICAgdG9vbHRpcENvbnRhaW5lci5zdHls
ZS50b3AgPSAocmVjdC50b3AgLSBjb250ZW50RWxlbWVudC5jbGllbnRIZWlnaHQgLSA1KSArICdw
eCc7Cit9CisKK1Rlc3RSZXN1bHRzVmlldy5fdXJsRnJvbUJ1aWxkZXIgPSBmdW5jdGlvbiAodXJs
VHlwZSwgbWFzdGVyLCBidWlsZGVyLCByZXZpc2lvbiwgYnVpbGQpIHsKKyAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyBjb25maWd1cmFibGUgb3IgZmV0Y2ggZnJvbSBi
dWlsZGJvdCBjb25maWd1cmFyYXRpb24uCisgICAgcmV0dXJuIHsKKyAgICAgICAgImJ1aWxkIjog
Imh0dHA6Ly8kbWFzdGVyL2J1aWxkZXJzLyRidWlsZGVyL2J1aWxkcy8kYnVpbGQiLAorICAgICAg
ICAicmVzdWx0IjogImh0dHA6Ly8kbWFzdGVyL3Jlc3VsdHMvJGJ1aWxkZXIvciRyZXZpc2lvbiUy
MCgkYnVpbGQpL3Jlc3VsdHMuaHRtbCIKKyAgICB9W3VybFR5cGVdLnJlcGxhY2UoL1wkbWFzdGVy
L2csIG1hc3RlcikucmVwbGFjZSgvXCRidWlsZGVyL2csIGJ1aWxkZXIpCisgICAgICAgIC5yZXBs
YWNlKC9cJHJldmlzaW9uL2csIHJldmlzaW9uKS5yZXBsYWNlKC9cJGJ1aWxkL2csIGJ1aWxkKTsK
K30KKworVGVzdFJlc3VsdHNWaWV3Ll9jcmVhdGVSZXN1bHRDZWxsID0gZnVuY3Rpb24gKG1hc3Rl
ciwgYnVpbGRlciwgcmVzdWx0LCBwcmV2aW91c1Jlc3VsdCkgeworICAgIHZhciBidWlsZFRpbWUg
PSByZXN1bHRbJ2J1aWxkVGltZSddOworICAgIHZhciByZXZpc2lvbiA9IHJlc3VsdFsncmV2aXNp
b24nXTsKKyAgICB2YXIgc2xhdmUgPSByZXN1bHRbJ3NsYXZlJ107CisgICAgdmFyIGJ1aWxkID0g
cmVzdWx0WydidWlsZE51bWJlciddOworICAgIHZhciBhY3R1YWwgPSByZXN1bHRbJ2FjdHVhbCdd
OworICAgIHZhciBleHBlY3RlZCA9IHJlc3VsdFsnZXhwZWN0ZWQnXTsKKyAgICB2YXIgYW5jaG9y
ID0gZWxlbWVudCgnYScsIHsnaHJlZic6IHRoaXMuX3VybEZyb21CdWlsZGVyKCdyZXN1bHQnLCBt
YXN0ZXIsIGJ1aWxkZXIsIHJldmlzaW9uLCBidWlsZCl9KTsKKyAgICBhbmNob3Iub25tb3VzZWVu
dGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgcmVwb3NpdG9yeUJ5SWQgPSBUZXN0UmVz
dWx0c1ZpZXcuX3JlcG9zaXRvcmllczsKKyAgICAgICAgdmFyIGZvcm1hdHRlZFJldmlzaW9ucyA9
IHJlc3VsdC5idWlsZC5mb3JtYXR0ZWRSZXZpc2lvbnMocHJldmlvdXNSZXN1bHQgPyBwcmV2aW91
c1Jlc3VsdC5idWlsZCA6IG51bGwpOworICAgICAgICB2YXIgcmV2aXNpb25EZXNjcmlwdGlvbiA9
ICcnOworICAgICAgICBmb3IgKHZhciByZXBvc2l0b3J5TmFtZSBpbiBmb3JtYXR0ZWRSZXZpc2lv
bnMpIHsKKyAgICAgICAgICAgIHZhciByZXZpc2lvbiA9IGZvcm1hdHRlZFJldmlzaW9uc1tyZXBv
c2l0b3J5TmFtZV07CisgICAgICAgICAgICBpZiAocmV2aXNpb25EZXNjcmlwdGlvbikKKyAgICAg
ICAgICAgICAgICByZXZpc2lvbkRlc2NyaXB0aW9uICs9ICcsICc7CisgICAgICAgICAgICBpZiAo
cmV2aXNpb24udXJsKQorICAgICAgICAgICAgICAgIHJldmlzaW9uRGVzY3JpcHRpb24gKz0gcmVw
b3NpdG9yeU5hbWUgKyAnOiAnICsgcmV2aXNpb24udXJsOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHJldmlzaW9uRGVzY3JpcHRpb24gKz0gcmV2aXNpb24ubGFiZWw7CisgICAg
ICAgIH0KKworICAgICAgICBUZXN0UmVzdWx0c1ZpZXcuc2hvd1Rvb2x0aXAoYW5jaG9yLCBlbGVt
ZW50KCdkaXYnLCB7J2NsYXNzJzogJ3Rvb2x0aXAnfSwgWworICAgICAgICAgICAgZWxlbWVudCgn
dWwnLCBbCisgICAgICAgICAgICAgICAgZWxlbWVudCgnbGknLCBbJ0J1aWxkIFRpbWU6ICcgKyBy
ZXN1bHQuYnVpbGQuZm9ybWF0dGVkQnVpbGRUaW1lKCldKSwKKyAgICAgICAgICAgICAgICBlbGVt
ZW50KCdsaScsIFsnUmV2aXNpb246ICcgKyAgcmV2aXNpb25EZXNjcmlwdGlvbl0pLAorICAgICAg
ICAgICAgICAgIGVsZW1lbnQoJ2xpJywgWydCdWlsZDogJywgZWxlbWVudCgnYScsIHsnaHJlZic6
IFRlc3RSZXN1bHRzVmlldy5fdXJsRnJvbUJ1aWxkZXIoJ2J1aWxkJywgbWFzdGVyLCBidWlsZGVy
LCByZXZpc2lvbiwgYnVpbGQpfSwgW2J1aWxkXSldKSwKKyAgICAgICAgICAgICAgICBlbGVtZW50
KCdsaScsIFsnUmVzdWx0OiAnICsgYWN0dWFsXSksCisgICAgICAgICAgICBdKQorICAgICAgICBd
KSk7CisgICAgfQorICAgIHZhciBjZWxsID0gZWxlbWVudCgnc3BhbicsIHsKKyAgICAgICAgJ2Ns
YXNzJzogYWN0dWFsICsgJyByZXN1bHRDZWxsJywKKyAgICB9LCBbYW5jaG9yXSk7CisgICAgcmV0
dXJuIGNlbGw7Cit9CisKK1Rlc3RSZXN1bHRzVmlldy5fcG9wdWxhdGVQYW5lID0gZnVuY3Rpb24o
dGVzdE5hbWUsIHJlc3VsdHMsIHNlY3Rpb24pIHsKKyAgICB2YXIgdGFibGUgPSBlbGVtZW50KCd0
YWJsZScsIHsnY2xhc3MnOiAncmVzdWx0c1RhYmxlJ30sIFtlbGVtZW50KCdjYXB0aW9uJywgW3Rl
c3ROYW1lXSldKTsKKyAgICB2YXIgcmVzdWx0c0J5QnVpbGRlciA9IHJlc3VsdHNbJ2J1aWxkZXJz
J107CisgICAgZm9yICh2YXIgYnVpbGRlcklkIGluIHJlc3VsdHNCeUJ1aWxkZXIpIHsKKyAgICAg
ICAgdmFyIHJlc3VsdHMgPSByZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJJZF07CisgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgcmVz
dWx0c1tpXS5idWlsZCA9IG5ldyBUZXN0QnVpbGQodGhpcy5fcmVwb3NpdG9yaWVzLCB0aGlzLl9i
dWlsZGVycywgcmVzdWx0c1tpXSk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgc29ydGVkUmVz
dWx0cyA9IHJlc3VsdHMuc29ydChmdW5jdGlvbiAocmVzdWx0MSwgcmVzdWx0MikgeyByZXR1cm4g
cmVzdWx0MS5idWlsZC50aW1lKCkgLSByZXN1bHQyLmJ1aWxkLnRpbWUoKTsgfSk7CisgICAgICAg
IHZhciBjZWxscyA9IG5ldyBBcnJheShzb3J0ZWRSZXN1bHRzLmxlbmd0aCk7CisgICAgICAgIHZh
ciBidWlsZGVyID0gdGhpcy5fYnVpbGRlcnNbYnVpbGRlcklkXTsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBzb3J0ZWRSZXN1bHRzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgY2VsbHNb
aV0gPSB0aGlzLl9jcmVhdGVSZXN1bHRDZWxsKGJ1aWxkZXIubWFzdGVyLCBidWlsZGVyLm5hbWUs
IHNvcnRlZFJlc3VsdHNbaV0sIHNvcnRlZFJlc3VsdHNbaSAtIDFdKTsKKworICAgICAgICB2YXIg
cGFzc0NvdW50ID0gY2VsbHMuZmlsdGVyKGZ1bmN0aW9uIChjZWxsKSB7IHJldHVybiBjZWxsLmNs
YXNzTmFtZSA9PSAnUEFTUyc7IH0pLmxlbmd0aDsKKyAgICAgICAgdmFyIHBhc3NpbmdSYXRlID0g
TWF0aC5yb3VuZChwYXNzQ291bnQgLyBjZWxscy5sZW5ndGggKiAxMDApICsgJyUnOworICAgICAg
ICB0YWJsZS5hcHBlbmRDaGlsZChlbGVtZW50KCd0cicsIFtlbGVtZW50KCd0aCcsIFtidWlsZGVy
Lm5hbWVdKSwgZWxlbWVudCgndGQnLCB7J2NsYXNzJzogJ3Bhc3NpbmdSYXRlJ30sIFtwYXNzaW5n
UmF0ZV0pLAorICAgICAgICAgICAgZWxlbWVudCgndGQnLCBjZWxscyldKSk7CisgICAgICAgIC8v
IEZJWE1FOiBBZGQgYSBtYXN0ZXIgbmFtZSBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lLgorICAg
IH0KKyAgICBzZWN0aW9uLmFwcGVuZENoaWxkKHRhYmxlKTsKK30KKworVGVzdFJlc3VsdHNWaWV3
LmZldGNoVGVzdCA9IGZ1bmN0aW9uICh0ZXN0TmFtZSkgeworICAgIGlmICh0aGlzLl90ZXN0cy5p
bmRleE9mKHRlc3ROYW1lKSA+PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICB2YXIgc2VsZiA9
IHRoaXM7CisKKyAgICB2YXIgY2xvc2VCdXR0b24gPSBlbGVtZW50KCdkaXYnLCB7J2NsYXNzJzog
J2Nsb3NlQnV0dG9uJ30pOworICAgIGNsb3NlQnV0dG9uLmlubmVySFRNTCA9ICc8c3ZnIHZpZXdC
b3g9IjAgMCAxMDAgMTAwIj48ZyBzdHJva2Utd2lkdGg9IjEwIj4nCisgICAgICAgICsgJzxjaXJj
bGUgY3g9IjUwIiBjeT0iNTAiIHI9IjQ1IiBmaWxsPSJ0cmFuc3BhcmVudCI+PC9jaXJjbGU+PHBv
bHlnb24gcG9pbnRzPSIzMCwzMCA3MCw3MCI+PC9wb2x5Z29uPicKKyAgICAgICAgKyAnPHBvbHln
b24gcG9pbnRzPSIzMCw3MCA3MCwzMCI+PC9wb2x5Z29uPjwvZz48L3N2Zz4nOworICAgIGNsb3Nl
QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7CisgICAg
ICAgICAgICBzZWxmLl9yZW1vdmVUZXN0KHRlc3ROYW1lKTsKKyAgICAgICAgICAgIHNlY3Rpb24u
cGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzZWN0aW9uKTsKKyAgICAgICAgICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KCk7CisgICAgICAgIH0pOworICAgIHZhciBzZWN0aW9uID0gZWxlbWVudCgnc2Vj
dGlvbicsIHsnaWQnOiB0ZXN0TmFtZSwgJ2NsYXNzJzogJ3Rlc3RSZXN1bHRzJ30sIFtjbG9zZUJ1
dHRvbl0pOworCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpLmFwcGVu
ZENoaWxkKHNlY3Rpb24pOworCisgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwor
ICAgIHhoci5vcGVuKCJHRVQiLCAnYXBpL3Jlc3VsdHMucGhwP3Rlc3Q9JyArIHRlc3ROYW1lLCB0
cnVlKTsgIAorICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICB2YXIg
cmVzcG9uc2UgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZSk7CisgICAgICAgIGlmIChyZXNwb25z
ZVsnc3RhdHVzJ10gIT0gJ09LJykgeworICAgICAgICAgICAgc2VjdGlvbi5hcHBlbmRDaGlsZCh0
ZXh0KCdGYWlsZWQgdG8gbG9hZCByZXN1bHRzIGZvciAnICsgdGVzdE5hbWUgKyAnOiAnICsgcmVz
cG9uc2VbJ3N0YXR1cyddKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBzZWxmLl9wb3B1bGF0ZVBhbmUodGVzdE5hbWUsIHJlc3BvbnNlLCBzZWN0aW9uKTsKKyAg
ICB9CisgICAgeGhyLnNlbmQoKTsKKyAgICB0aGlzLl90ZXN0cy5wdXNoKHRlc3ROYW1lKTsKK30K
KworVGVzdFJlc3VsdHNWaWV3Ll9yZW1vdmVUZXN0ID0gZnVuY3Rpb24gKHRlc3ROYW1lKSB7Cisg
ICAgdmFyIGluZGV4ID0gdGhpcy5fdGVzdHMuaW5kZXhPZih0ZXN0TmFtZSk7CisgICAgaWYgKGlu
ZGV4IDwgMCkKKyAgICAgICAgcmV0dXJuOworICAgIHRoaXMuX3Rlc3RzLnNwbGljZShpbmRleCwg
MSk7CisgICAgdGhpcy51cGRhdGVMb2NhdGlvbkhhc2goKTsKK30KKworVGVzdFJlc3VsdHNWaWV3
LmZldGNoVGVzdHMgPSBmdW5jdGlvbiAodGVzdE5hbWVzLCBkb05vdFVwZGF0ZUhhc2gpIHsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3ROYW1lcy5sZW5ndGg7IGkrKykKKyAgICAgICAgdGhp
cy5mZXRjaFRlc3QodGVzdE5hbWVzW2ldLCBkb05vdFVwZGF0ZUhhc2gpOworICAgIHRoaXMudXBk
YXRlTG9jYXRpb25IYXNoKCk7Cit9CisKK1Rlc3RSZXN1bHRzVmlldy51cGRhdGVMb2NhdGlvbkhh
c2ggPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyIHBhcmFtcyA9IHsKKyAgICAgICAgJ3Rlc3RzJzog
dGhpcy5fdGVzdHMuam9pbignLCcpCisgICAgfTsKKyAgICB2YXIgaGFzaCA9ICcnOworICAgIGZv
ciAodmFyIGtleSBpbiBwYXJhbXMpCisgICAgICAgIGhhc2ggKz0gZGVjb2RlVVJJQ29tcG9uZW50
KGtleSkgKyAnPScgKyBkZWNvZGVVUklDb21wb25lbnQocGFyYW1zW2tleV0pOworICAgIGxvY2F0
aW9uLmhhc2ggPSBoYXNoOworICAgIHRoaXMuX29sZEhhc2ggPSBsb2NhdGlvbi5oYXNoOworfQor
CitUZXN0UmVzdWx0c1ZpZXcubG9jYXRpb25IYXNoQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICB2YXIgbmV3SGFzaCA9IGxvY2F0aW9uLmhhc2g7CisgICAgaWYgKG5ld0hhc2ggPT0gdGhpcy5f
b2xkSGFzaCkKKyAgICAgICAgcmV0dXJuOworICAgIHRoaXMuX29sZEhhc2ggPSBuZXdIYXNoOwor
ICAgIHRoaXMuX3Rlc3RzID0gW107CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRh
aW5lcicpLmlubmVySFRNTCA9ICcnOworICAgIHRoaXMubG9hZFRlc3RzRnJvbUxvY2F0aW9uSGFz
aCgpOworfQorCitUZXN0UmVzdWx0c1ZpZXcubG9hZFRlc3RzRnJvbUxvY2F0aW9uSGFzaCA9IGZ1
bmN0aW9uICgpIHsKKyAgICB2YXIgcGFyc2VkID0ge307CisgICAgbG9jYXRpb24uaGFzaC5zdWJz
dHIoMSkuc3BsaXQoJyYnKS5mb3JFYWNoKGZ1bmN0aW9uIChjb21wb25lbnQpIHsKKyAgICAgICAg
dmFyIGVxdWFsUG9zaXRpb24gPSBjb21wb25lbnQuaW5kZXhPZignPScpOworICAgICAgICBpZiAo
ZXF1YWxQb3NpdGlvbiA8IDApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciBuYW1l
ID0gZGVjb2RlVVJJQ29tcG9uZW50KGNvbXBvbmVudC5zdWJzdHIoMCwgZXF1YWxQb3NpdGlvbikp
OworICAgICAgICBwYXJzZWRbbmFtZV0gPSBkZWNvZGVVUklDb21wb25lbnQoY29tcG9uZW50LnN1
YnN0cihlcXVhbFBvc2l0aW9uICsgMSkpOworICAgIH0pOworICAgIGlmICghcGFyc2VkWyd0ZXN0
cyddKQorICAgICAgICByZXR1cm47CisgICAgdmFyIGRvTm90VXBkYXRlSGFzaCA9IHRydWU7Cisg
ICAgdGhpcy5mZXRjaFRlc3RzKHBhcnNlZFsndGVzdHMnXS5zcGxpdCgnLCcpLCBkb05vdFVwZGF0
ZUhhc2gpOworfQorCitmdW5jdGlvbiBmZXRjaE1hbmlmZXN0KGNhbGxiYWNrKSB7CisgICAgdmFy
IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vcGVuKCJHRVQiLCAnYXBpL21h
bmlmZXN0LnBocCcsIHRydWUpOyAgCisgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKGV2ZW50KSB7
CisgICAgICAgIHZhciByZXNwb25zZSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKTsKKyAgICAg
ICAgaWYgKHJlc3BvbnNlWydzdGF0dXMnXSAhPSAnT0snKSB7CisgICAgICAgICAgICBhbGVydCgn
RmFpbGVkIHRvIGxvYWQgbWFuaWZlc3Q6JyArIHJlc3BvbnNlWydzdGF0dXMnXSk7CisgICAgICAg
ICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgY2FsbGJhY2socmVzcG9uc2UpOworICAgIH0gIAorICAgIHhoci5zZW5kKCk7
Cit9CisKK2ZldGNoTWFuaWZlc3QoZnVuY3Rpb24gKHJlc3BvbnNlKSB7CisgICAgdmFyIHRlc3RO
YW1lcyA9IHJlc3BvbnNlWyd0ZXN0cyddLm1hcChmdW5jdGlvbiAodGVzdCkgeyByZXR1cm4gdGVz
dFsnbmFtZSddOyB9KQorICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0
ZXN0TmFtZScpOworICAgIGlucHV0LmF1dG9jb21wbGV0ZXIgPSBuZXcgQXV0b2NvbXBsZXRlcihp
bnB1dCwgdGVzdE5hbWVzKTsKKworICAgIFRlc3RSZXN1bHRzVmlldy5zZXRCdWlsZGVycyhyZXNw
b25zZVsnYnVpbGRlcnMnXSk7CisgICAgVGVzdFJlc3VsdHNWaWV3LnNldFNsYXZlcyhyZXNwb25z
ZVsnc2xhdmVzJ10pOworICAgIFRlc3RSZXN1bHRzVmlldy5zZXRSZXBvc2l0b3JpZXMocmVzcG9u
c2VbJ3JlcG9zaXRvcmllcyddKTsKKyAgICBUZXN0UmVzdWx0c1ZpZXcubG9hZFRlc3RzRnJvbUxv
Y2F0aW9uSGFzaCgpOworfSk7CisKK2Z1bmN0aW9uIHBhc3RlSGVscGVyKGlucHV0LCBldmVudCkg
eworICAgIGZ1bmN0aW9uIHJlbW92ZUp1bmtzRnJvbU5SV1RTdGRvdXQoaW5wdXQpIHsKKyAgICAg
ICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoLyhcW1tcdyBdK1xdKXwoLitcOi4rKS9nLCAnJykucmVw
bGFjZSgvXlsgXHRdK3xbIFx0XSskL2dtLCAnJyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcmVt
b3ZlSnVua0Zyb21SZXN1bHRzUGFnZShpbnB1dCkgeworICAgICAgICByZXR1cm4gaW5wdXQucmVw
bGFjZSgvKF5bXlwvXSskKXwoXlwrKS9nbSwgJycpLnJlcGxhY2UoL1woW14pXStcKS9nLCAnJyku
cmVwbGFjZSgvXHMrW0EtWmEtel0rKFxzK1tBLVphLXpdKykqXHMqJC9nbSwgJycpOworICAgIH0K
KworICAgIHZhciB0ZXh0ID0gZXZlbnQuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWlu
Jyk7CisgICAgaWYgKHRleHQuaW5kZXhPZignXG4nKSA8IDApCisgICAgICAgIHJldHVybjsKKwor
ICAgIHZhciB1cmxzID0gcmVtb3ZlSnVua0Zyb21SZXN1bHRzUGFnZShyZW1vdmVKdW5rc0Zyb21O
UldUU3Rkb3V0KHRleHQpKS5zcGxpdCgnXG4nKTsKKyAgICBUZXN0UmVzdWx0c1ZpZXcuZmV0Y2hU
ZXN0cyh1cmxzLmZpbHRlcihmdW5jdGlvbiAodXJsKSB7IHJldHVybiB1cmwubGVuZ3RoOyB9KSk7
CisgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKK30KKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogV2Vic2l0ZXMvdGVzdC1y
ZXN1bHRzL2FkbWluL2luZGV4LnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy90ZXN0LXJlc3Vs
dHMvYWRtaW4vaW5kZXgucGhwCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvdGVzdC1yZXN1bHRz
L2FkbWluL2luZGV4LnBocAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMiBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPldlYktpdCBUZXN0IFJlc3VsdHM8L3Rp
dGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvY29tbW9uLmNzcyI+Cis8c3R5bGUg
dHlwZT0idGV4dC9jc3MiPgorCisudW5mZXRjaGVkIHsKKyAgICBjb2xvcjogZ3JheTsKK30KKwor
PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGhlYWRlciBpZD0idGl0bGUiPgorPGgxPjxhIGhy
ZWY9Ii8iPldlYktpdCBUZXN0IFJlc3VsdHM8L2E+PC9oMT4KKzx1bD4KKyAgICA8bGk+PGEgaHJl
Zj0iL2FkbWluL3VwZGF0ZS1tYXN0ZXIiPlVwZGF0ZSBNYXN0ZXI8L2E+PC9saT4KKzwvdWw+Cis8
L2hlYWRlcj4KKworPGRpdiBpZD0ibWFpbkNvbnRlbnRzIj4KKzxwPjxzdHJvbmc+RklYTUU6IFRo
aXMgcGFnZSBpcyBicm9rZW4hPC9zdHJvbmc+PC9wPgorPD9waHAKKworcmVxdWlyZV9vbmNlKCcu
Li9pbmNsdWRlL2RiLnBocCcpOworcmVxdWlyZV9vbmNlKCcuLi9pbmNsdWRlL3Rlc3QtcmVzdWx0
cy5waHAnKTsKKworZnVuY3Rpb24gbm90aWNlKCRtZXNzYWdlKSB7CisgICAgZWNobyAiPHAgY2xh
c3M9J25vdGljZSc+JG1lc3NhZ2U8L3A+IjsKK30KKworZGVmaW5lKCdNQVhfRkVUQ0hfQ09VTlQn
LCAxMCk7CisKK2Z1bmN0aW9uIGZldGNoX2J1aWxkZXJzKCRkYiwgJG1hc3RlcikgeworICAgIGZs
dXNoKCk7CisgICAgJGJ1aWxkZXJzX2pzb24gPSBmZXRjaF9hbmRfcGFyc2VfdGVzdF9yZXN1bHRz
X2pzb24oImh0dHA6Ly8kbWFzdGVyL2pzb24vYnVpbGRlcnMvIik7CisgICAgaWYgKCEkYnVpbGRl
cnNfanNvbikKKyAgICAgICAgcmV0dXJuIG5vdGljZSgiRmFpbGVkIHRvIGZldGNoIG9yIGRlY29k
ZSAvanNvbi9idWlsZGVycyBmcm9tICRtYXN0ZXIiKTsKKworICAgIGVjaG8gIjxoMj5GZXRjaGlu
ZyBidWlsZHMgZnJvbSAkbWFzdGVyPC9oMj5cbiI7CisgICAgZWNobyAiPHVsPlxuIjsKKworICAg
IGZvcmVhY2ggKCRidWlsZGVyc19qc29uIGFzICRidWlsZGVyX25hbWUgPT4gJGJ1aWxkZXJfZGF0
YSkgeworICAgICAgICBpZiAoIXN0cmlzdHIoJGJ1aWxkZXJfbmFtZSwgJ1Rlc3QnKSB8fCBzdHJp
c3RyKCRidWlsZGVyX25hbWUsICdBcHBsZSBXaW4nKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAkYnVpbGRlcl9pZCA9ICRkYi0+c2VsZWN0X29yX2luc2VydF9yb3coJ2J1aWxkZXJz
JywgTlVMTCwgYXJyYXkoJ21hc3RlcicgPT4gJG1hc3RlciwgJ25hbWUnID0+ICRidWlsZGVyX25h
bWUpKTsKKyAgICAgICAgJGVzY2FwZWRfYnVpbGRlcl9uYW1lID0gaHRtbHNwZWNpYWxjaGFycygk
YnVpbGRlcl9uYW1lKTsKKyAgICAgICAgZWNobyAiPGxpPjxlbT4kZXNjYXBlZF9idWlsZGVyX25h
bWU8L2VtPiAoaWQ6ICRidWlsZGVyX2lkKSAtICI7CisKKyAgICAgICAgJGZldGNoQ291bnQgPSAw
OworICAgICAgICAkYnVpbGRzID0gJGJ1aWxkZXJfZGF0YVsnY2FjaGVkQnVpbGRzJ107CisgICAg
ICAgIGZvcmVhY2ggKGFycmF5X3JldmVyc2UoJGJ1aWxkcykgYXMgJGJ1aWxkX251bWJlcikgewor
ICAgICAgICAgICAgJGJ1aWxkX251bWJlciA9IGludHZhbCgkYnVpbGRfbnVtYmVyKTsKKyAgICAg
ICAgICAgICRidWlsZCA9ICRkYi0+c2VsZWN0X29yX2luc2VydF9yb3coJ2J1aWxkcycsIE5VTEws
IGFycmF5KCdidWlsZGVyJyA9PiAkYnVpbGRlcl9pZCwgJ251bWJlcicgPT4gJGJ1aWxkX251bWJl
ciksIE5VTEwsICcqJyk7CisgICAgICAgICAgICBpZiAoJGRiLT5pc190cnVlKCRidWlsZFsnZmV0
Y2hlZCddKSkKKyAgICAgICAgICAgICAgICAkY2xhc3MgPSAnZmV0Y2hlZCc7CisgICAgICAgICAg
ICBlbHNlIGlmICgkZmV0Y2hDb3VudCA+PSBNQVhfRkVUQ0hfQ09VTlQpCisgICAgICAgICAgICAg
ICAgJGNsYXNzID0gJ3VuZmV0Y2hlZCc7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAkY2xhc3MgPSBmZXRjaF9idWlsZCgkZGIsICRtYXN0ZXIsICRidWlsZGVyX25hbWUsICRi
dWlsZFsnaWQnXSwgJGJ1aWxkX251bWJlcikgPyAnZmV0Y2hlZCcgOiAndW5mZXRjaGVkJzsKKyAg
ICAgICAgICAgICAgICAkZmV0Y2hDb3VudCsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWNobyAiPHNwYW4gY2xhc3M9XCIkY2xhc3NcIj4kYnVpbGRfbnVtYmVyPC9hPiAiOworICAgICAg
ICB9CisgICAgICAgIGVjaG8gIjwvbGk+XG4iOworICAgIH0KKyAgICBlY2hvICI8dWw+XG4iOwor
CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK2Z1bmN0aW9uIHVybGVuY29kZV93aXRob3V0X3BsdXMo
JHVybCkgeworICAgIHJldHVybiBzdHJfcmVwbGFjZSgnKycsICclMjAnLCB1cmxlbmNvZGUoJHVy
bCkpOworfQorCitmdW5jdGlvbiBmZXRjaF9idWlsZCgkZGIsICRtYXN0ZXIsICRidWlsZGVyX25h
bWUsICRidWlsZF9pZCwgJGJ1aWxkX251bWJlcikgeworICAgIGZsdXNoKCk7CisgICAgJGJ1aWxk
ZXJfbmFtZSA9IHVybGVuY29kZV93aXRob3V0X3BsdXMoJGJ1aWxkZXJfbmFtZSk7CisgICAgJGJ1
aWxkX2pzb24gPSBmZXRjaF9hbmRfcGFyc2VfdGVzdF9yZXN1bHRzX2pzb24oImh0dHA6Ly8kbWFz
dGVyL2pzb24vYnVpbGRlcnMvJGJ1aWxkZXJfbmFtZS9idWlsZHMvJGJ1aWxkX251bWJlciIpOwor
ICAgIGlmICghJGJ1aWxkX2pzb24gfHwgIWFycmF5X2tleV9leGlzdHMoJ3RpbWVzJywgJGJ1aWxk
X2pzb24pIHx8IGNvdW50KCRidWlsZF9qc29uWyd0aW1lcyddKSAhPSAyKQorICAgICAgICByZXR1
cm4gRkFMU0U7CisKKyAgICAkcmV2aXNpb24gPSBOVUxMOworICAgICRzbGF2ZW5hbWUgPSBOVUxM
OworICAgIGZvcmVhY2ggKCRidWlsZF9qc29uWydwcm9wZXJ0aWVzJ10gYXMgJHByb3BlcnR5KSB7
CisgICAgICAgIGlmICgkcHJvcGVydHlbMF0gPT0gJ2dvdF9yZXZpc2lvbicpCisgICAgICAgICAg
ICAkcmV2aXNpb24gPSAkcHJvcGVydHlbMV07CisgICAgICAgIGlmICgkcHJvcGVydHlbMF0gPT0g
J3NsYXZlbmFtZScpCisgICAgICAgICAgICAkc2xhdmVuYW1lID0gJHByb3BlcnR5WzJdOworICAg
IH0KKyAgICBpZiAoISRyZXZpc2lvbiB8fCAhJHNsYXZlbmFtZSkKKyAgICAgICAgcmV0dXJuIEZB
TFNFOworCisgICAgJHN0YXJ0X3RpbWUgPSBmbG9hdF90b190aW1lKCRidWlsZF9qc29uWyd0aW1l
cyddWzBdKTsKKyAgICAkZW5kX3RpbWUgPSBmbG9hdF90b190aW1lKCRidWlsZF9qc29uWyd0aW1l
cyddWzFdKTsKKworICAgIGZsdXNoKCk7CisgICAgJGZ1bGxfcmVzdWx0cyA9IGZldGNoX2FuZF9w
YXJzZV90ZXN0X3Jlc3VsdHNfanNvbigiaHR0cDovLyRtYXN0ZXIvcmVzdWx0cy8kYnVpbGRlcl9u
YW1lL3IkcmV2aXNpb24lMjAoJGJ1aWxkX251bWJlcikvZnVsbF9yZXN1bHRzLmpzb24iLCBUUlVF
KTsKKyAgICByZXR1cm4gc3RvcmVfdGVzdF9yZXN1bHRzKCRkYiwgJGZ1bGxfcmVzdWx0cywgJGJ1
aWxkX2lkLCAkcmV2aXNpb24sICRzdGFydF90aW1lLCAkZW5kX3RpbWUsICRzbGF2ZW5hbWUpOwor
fQorCiskZGIgPSBuZXcgRGF0YWJhc2U7CitpZiAoISRkYi0+Y29ubmVjdCgpKQorICAgIG5vdGlj
ZSgnRmFpbGVkIHRvIGNvbm5lY3QgdG8gdGhlIGRhdGFiYXNlJyk7CitlbHNlIGlmIChhcnJheV9r
ZXlfZXhpc3RzKCdtYXN0ZXInLCAkX0dFVCkpIHsKKyAgICAkbWFzdGVyID0gaHRtbHNwZWNpYWxj
aGFycygkX0dFVFsnbWFzdGVyJ10pOyAvLyBPa2F5IHNpbmNlIGhvc3RuYW1lIHNob3VkbG4ndCBj
b250YWluIGFueSBIVE1MIHNwZWNpYWwgY2hhcmFjdGVycy4KKyAgICBpZiAoaW5fYXJyYXkoJG1h
c3RlciwgY29uZmlnKCdtYXN0ZXJzJykpKQorICAgICAgICBmZXRjaF9idWlsZGVycygkZGIsICRt
YXN0ZXIpOworICAgIGVsc2UKKyAgICAgICAgbm90aWNlKCJUaGUgbWFzdGVyICRtYXN0ZXIgbm90
IGZvdW5kIik7Cit9IGVsc2UgeworICAgIGVjaG8gIjx1bD5cbiI7CisgICAgZm9yZWFjaCAoY29u
ZmlnKCdtYXN0ZXJzJykgYXMgJG1hc3RlcikKKyAgICAgICAgZWNobyAiPGxpPjxhIGhyZWY9XCI/
bWFzdGVyPSRtYXN0ZXJcIj4kbWFzdGVyPC9hPjwvbGk+XG4iOworICAgIGVjaG8gIjwvdWw+XG4i
OworfQorCis/PjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBXZWJzaXRlcy90ZXN0
LXJlc3VsdHMvYXBpL21hbmlmZXN0LnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy90ZXN0LXJl
c3VsdHMvYXBpL21hbmlmZXN0LnBocAkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3Rlc3QtcmVz
dWx0cy9hcGkvbWFuaWZlc3QucGhwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcgQEAKKzw/
cGhwCisKK3JlcXVpcmVfb25jZSgnLi4vaW5jbHVkZS9qc29uLXNoYXJlZC5waHAnKTsKKworJGRi
ID0gY29ubmVjdCgpOworJHRlc3RzID0gJGRiLT5mZXRjaF90YWJsZSgndGVzdHMnKTsKKworZnVu
Y3Rpb24gZmV0Y2hfdGFibGVfYW5kX2NyZWF0ZV9tYXBfYnlfaWQoJHRhYmxlX25hbWUpIHsKKyAg
ICBnbG9iYWwgJGRiOworCisgICAgJHJvd3MgPSAkZGItPmZldGNoX3RhYmxlKCR0YWJsZV9uYW1l
KTsKKyAgICBpZiAoISRyb3dzKQorICAgICAgICByZXR1cm4gYXJyYXkoKTsKKworICAgICRyZXN1
bHRzID0gYXJyYXkoKTsKKyAgICBmb3JlYWNoICgkcm93cyBhcyAkcm93KSB7CisgICAgICAgICRy
ZXN1bHRzWyRyb3dbJ2lkJ11dID0gJHJvdzsKKyAgICB9CisgICAgcmV0dXJuICRyZXN1bHRzOwor
fQorCitleGl0X3dpdGhfc3VjY2VzcyhhcnJheSgndGVzdHMnID0+ICR0ZXN0cywKKyAgICAnYnVp
bGRlcnMnID0+IGZldGNoX3RhYmxlX2FuZF9jcmVhdGVfbWFwX2J5X2lkKCdidWlsZGVycycpLAor
ICAgICdzbGF2ZXMnID0+IGZldGNoX3RhYmxlX2FuZF9jcmVhdGVfbWFwX2J5X2lkKCdzbGF2ZXMn
KSwKKyAgICAncmVwb3NpdG9yaWVzJyA9PiBmZXRjaF90YWJsZV9hbmRfY3JlYXRlX21hcF9ieV9p
ZCgncmVwb3NpdG9yaWVzJykpKTsKKworPz4KSW5kZXg6IFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9h
cGkvcmVwb3J0LnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvYXBpL3Jl
cG9ydC5waHAJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvYXBpL3JlcG9y
dC5waHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorPD9waHAKKworcmVxdWlyZV9v
bmNlKCcuLi9pbmNsdWRlL2pzb24tc2hhcmVkLnBocCcpOworcmVxdWlyZV9vbmNlKCcuLi9pbmNs
dWRlL3Rlc3QtcmVzdWx0cy5waHAnKTsKKworJGRiID0gY29ubmVjdCgpOworCityZXF1aXJlX2V4
aXN0ZW5jZV9vZigkX1BPU1QsIGFycmF5KAorICAgICdtYXN0ZXInID0+ICcvW0EtWmEtejAtOVwu
XSsvJywKKyAgICAnYnVpbGRlcl9uYW1lJyA9PiAnL15bQS1aYS16MC05IFwoXClcLV9dKyQvJywK
KyAgICAnYnVpbGRfbnVtYmVyJyA9PiAnL15bMC05XSs/JC8nLAorICAgICdidWlsZF9zbGF2ZScg
PT4gJy9eW0EtWmEtejAtOVwtX10rJC8nLAorICAgICdyZXZpc2lvbnMnID0+ICcvXi4rPyQvJywK
KyAgICAnc3RhcnRfdGltZScgPT4gJy9eWzAtOV0rKFwuWzAtOV0rKT8kLycsCisgICAgJ2VuZF90
aW1lJyA9PiAnL15bMC05XSsoXC5bMC05XSspPyQvJykpOworCitpZiAoIWFycmF5X2tleV9leGlz
dHMoJ2ZpbGUnLCAkX0ZJTEVTKSBvciAhYXJyYXlfa2V5X2V4aXN0cygndG1wX25hbWUnLCAkX0ZJ
TEVTWydmaWxlJ10pIG9yIGNvdW50KCRfRklMRVNbJ2ZpbGUnXVsndG1wX25hbWUnXSkgPD0gMCkK
KyAgICBleGl0X3dpdGhfZXJyb3IoJ1Jlc3VsdHNKU09OTm90SW5jbHVkZWQnKTsKKworJHJldmlz
aW9ucyA9IGpzb25fZGVjb2RlKCRfUE9TVFsncmV2aXNpb25zJ10sIHRydWUpOworZm9yZWFjaCAo
JHJldmlzaW9ucyBhcyAkcmVwb3NpdG9yeV9uYW1lID0+ICRyZXZpc2lvbl9kYXRhKSB7CisgICAg
cmVxdWlyZV9mb3JtYXQoJ3JlcG9zaXRvcnlfbmFtZScsICRyZXBvc2l0b3J5X25hbWUsICcvXlx3
KyQvJyk7CisgICAgcmVxdWlyZV9leGlzdGVuY2Vfb2YoJHJldmlzaW9uX2RhdGEsIGFycmF5KAor
ICAgICAgICAncmV2aXNpb24nID0+ICcvXlthLXowLTldKyQvJywKKyAgICAgICAgJ3RpbWVzdGFt
cCcgPT4gJy9eW2EtejAtOVwtXC46VFpdKyQvJywKKyAgICApLCAncmV2aXNpb24nKTsKK30KKwor
JHRlc3RfcmVzdWx0cyA9IGZldGNoX2FuZF9wYXJzZV90ZXN0X3Jlc3VsdHNfanNvbigkX0ZJTEVT
WydmaWxlJ11bJ3RtcF9uYW1lJ10pOworaWYgKCEkdGVzdF9yZXN1bHRzKQorICAgIGV4aXRfd2l0
aF9lcnJvcignSW52YWxpZFJlc3VsdHNKU09OJyk7CisKKyRzdGFydF90aW1lID0gZmxvYXRfdG9f
dGltZSgkX1BPU1RbJ3N0YXJ0X3RpbWUnXSk7CiskZW5kX3RpbWUgPSBmbG9hdF90b190aW1lKCRf
UE9TVFsnZW5kX3RpbWUnXSk7CisKKyRidWlsZF9pZCA9IGFkZF9idWlsZCgkZGIsICRfUE9TVFsn
bWFzdGVyJ10sICRfUE9TVFsnYnVpbGRlcl9uYW1lJ10sIGludHZhbCgkX1BPU1RbJ2J1aWxkX251
bWJlciddKSk7CitpZiAoISRidWlsZF9pZCkKKyAgICBleGl0X3dpdGhfZXJyb3IoJ0ZhaWxlZFRv
SW5zZXJ0QnVpbGQnLCBhcnJheSgnbWFzdGVyJyA9PiAkX1BPU1RbJ21hc3RlciddLCAnYnVpbGRl
ck5hbWUnID0+ICRfUE9TVFsnYnVpbGRlcl9uYW1lJ10sICdidWlsZE51bWJlcicgPT4gJF9QT1NU
WydidWlsZF9udW1iZXInXSkpOworCitmb3JlYWNoICgkcmV2aXNpb25zIGFzICRyZXBvc2l0b3J5
X25hbWUgPT4gJHJldmlzaW9uX2RhdGEpIHsKKyAgICAkcmVwb3NpdG9yeV9pZCA9ICRkYi0+c2Vs
ZWN0X29yX2luc2VydF9yb3coJ3JlcG9zaXRvcmllcycsIE5VTEwsIGFycmF5KCduYW1lJyA9PiAk
cmVwb3NpdG9yeV9uYW1lKSk7CisgICAgaWYgKCEkcmVwb3NpdG9yeV9pZCkKKyAgICAgICAgZXhp
dF93aXRoX2Vycm9yKCdGYWlsZWRUb0luc2VydFJlcG9zaXRvcnknLCBhcnJheSgnbmFtZScgPT4g
JHJlcG9zaXRvcnlfbmFtZSkpOworCisgICAgJHJldmlzaW9uX2RhdGEgPSBhcnJheSgKKyAgICAg
ICAgJ3JlcG9zaXRvcnknID0+ICRyZXBvc2l0b3J5X2lkLAorICAgICAgICAnYnVpbGQnID0+ICRi
dWlsZF9pZCwKKyAgICAgICAgJ3ZhbHVlJyA9PiAkcmV2aXNpb25fZGF0YVsncmV2aXNpb24nXSwK
KyAgICAgICAgJ3RpbWUnID0+IGFycmF5X2dldCgkcmV2aXNpb25fZGF0YSwgJ3RpbWVzdGFtcCcp
KTsKKyAgICAkZGItPnNlbGVjdF9vcl9pbnNlcnRfcm93KCdidWlsZF9yZXZpc2lvbnMnLCBOVUxM
LCBhcnJheSgncmVwb3NpdG9yeScgPT4gJHJlcG9zaXRvcnlfaWQsICdidWlsZCcgPT4gJGJ1aWxk
X2lkKSwgJHJldmlzaW9uX2RhdGEsICd2YWx1ZScpCisgICAgICAgIG9yIGV4aXRfd2l0aF9lcnJv
cignRmFpbGVkVG9JbnNlcnRSZXZpc2lvbicsIGFycmF5KCduYW1lJyA9PiAkcmVwb3NpdG9yeV9u
YW1lLCAnZGF0YScgPT4gJHJldmlzaW9uX2RhdGEpKTsKK30KKworJHNsYXZlX2lkID0gYWRkX3Ns
YXZlKCRkYiwgJF9QT1NUWydidWlsZF9zbGF2ZSddKTsKK2lmICghc3RvcmVfdGVzdF9yZXN1bHRz
KCRkYiwgJHRlc3RfcmVzdWx0cywgJGJ1aWxkX2lkLCAkc3RhcnRfdGltZSwgJGVuZF90aW1lLCAk
c2xhdmVfaWQpKQorICAgIGV4aXRfd2l0aF9lcnJvcignRmFpbGVkVG9TdG9yZVJlc3VsdHMnLCBh
cnJheSgnYnVpbGRJZCcgPT4gJGJ1aWxkX2lkKSk7CisKK2V4aXRfd2l0aF9zdWNjZXNzKCk7CisK
Kz8+CkluZGV4OiBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvYXBpL3Jlc3VsdHMucGhwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9hcGkvcmVzdWx0cy5waHAJKHJldmlzaW9uIDAp
CisrKyBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvYXBpL3Jlc3VsdHMucGhwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDggQEAKKzw/cGhwCisKK3JlcXVpcmVfb25jZSgnLi4vaW5jbHVkZS9qc29u
LXNoYXJlZC5waHAnKTsKKworJGRiID0gY29ubmVjdCgpOworCityZXF1aXJlX2V4aXN0ZW5jZV9v
ZigkX0dFVCwgYXJyYXkoJ3Rlc3QnID0+ICcvW0EtWmEtejAtOVwuX1wtIF0rLycpKTsKKworJHRl
c3QgPSAkZGItPnNlbGVjdF9maXJzdF9yb3coJ3Rlc3RzJywgTlVMTCwgYXJyYXkoJ25hbWUnID0+
ICRfR0VUWyd0ZXN0J10pKTsKK2lmICghJHRlc3QpCisgICAgZXhpdF93aXRoX2Vycm9yKCdUZXN0
Tm90Rm91bmQnKTsKKworJHJlc3VsdF9yb3dzID0gJGRiLT5xdWVyeV9hbmRfZmV0Y2hfYWxsKAor
J1NFTEVDVCByZXN1bHRzLiosIGJ1aWxkcy4qLCBhcnJheV9hZ2coKGJ1aWxkX3JldmlzaW9ucy5y
ZXBvc2l0b3J5LCBidWlsZF9yZXZpc2lvbnMudmFsdWUsIGJ1aWxkX3JldmlzaW9ucy50aW1lKSkg
QVMgcmV2aXNpb25zCisgICAgRlJPTSByZXN1bHRzLCBidWlsZHMsIGJ1aWxkX3JldmlzaW9ucwor
ICAgIFdIRVJFIGJ1aWxkX3JldmlzaW9ucy5idWlsZCA9IGJ1aWxkcy5pZCBBTkQgcmVzdWx0cy50
ZXN0ID0gJDEgQU5EIHJlc3VsdHMuYnVpbGQgPSBidWlsZHMuaWQKKyAgICBHUk9VUCBCWSByZXN1
bHRzLmlkLCBidWlsZHMuaWQnLCBhcnJheSgkdGVzdFsnaWQnXSkpOworaWYgKCEkcmVzdWx0X3Jv
d3MpCisgICAgZXhpdF93aXRoX2Vycm9yKCdSZXN1bHRzTm90Rm91bmQnKTsKKworZGF0ZV9kZWZh
dWx0X3RpbWV6b25lX3NldCgnVVRDJyk7CitmdW5jdGlvbiBwYXJzZV9yZXZpc2lvbnNfYXJyYXko
JHBvc3RncmVzX2FycmF5KSB7CisgICAgLy8gZS5nLiB7IihXZWJLaXQsMTMxNDU2LFwiMjAxMi0x
MC0xNiAxNDo1MzowMFwiKSIsIihTYWZhcmksMTYyMDA0LCkifQorICAgICRvdXRlcl9hcnJheSA9
IGpzb25fZGVjb2RlKCdbJyAuIHRyaW0oJHBvc3RncmVzX2FycmF5LCAne30nKSAuICddJyk7Cisg
ICAgJHJldmlzaW9ucyA9IGFycmF5KCk7CisgICAgZm9yZWFjaCAoJG91dGVyX2FycmF5IGFzICRp
dGVtKSB7CisgICAgICAgICRuYW1lX2FuZF9yZXZpc2lvbiA9IGV4cGxvZGUoJywnLCB0cmltKCRp
dGVtLCAnKCknKSk7CisgICAgICAgICR0aW1lID0gc3RydG90aW1lKHRyaW0oJG5hbWVfYW5kX3Jl
dmlzaW9uWzJdLCAnIicpKSAqIDEwMDA7CisgICAgICAgICRyZXZpc2lvbnNbdHJpbSgkbmFtZV9h
bmRfcmV2aXNpb25bMF0sICciJyldID0gYXJyYXkodHJpbSgkbmFtZV9hbmRfcmV2aXNpb25bMV0s
ICciJyksICR0aW1lKTsKKyAgICB9CisgICAgcmV0dXJuICRyZXZpc2lvbnM7Cit9CisKKyRidWls
ZGVycyA9IGFycmF5KCk7Citmb3JlYWNoICgkcmVzdWx0X3Jvd3MgYXMgJHJlc3VsdCkgeworICAg
IGFycmF5X3B1c2goYXJyYXlfZW5zdXJlX2l0ZW1faGFzX2FycmF5KCRidWlsZGVycywgJHJlc3Vs
dFsnYnVpbGRlciddKSwKKyAgICAgICAgYXJyYXkoJ2J1aWxkVGltZScgPT4gc3RydG90aW1lKCRy
ZXN1bHRbJ3N0YXJ0X3RpbWUnXSkgKiAxMDAwLAorICAgICAgICAncmV2aXNpb25zJyA9PiBwYXJz
ZV9yZXZpc2lvbnNfYXJyYXkoJHJlc3VsdFsncmV2aXNpb25zJ10pLAorICAgICAgICAnYnVpbGRl
cicgPT4gJHJlc3VsdFsnYnVpbGRlciddLAorICAgICAgICAnc2xhdmUnID0+ICRyZXN1bHRbJ3Ns
YXZlJ10sCisgICAgICAgICdidWlsZE51bWJlcicgPT4gJHJlc3VsdFsnbnVtYmVyJ10sCisgICAg
ICAgICdhY3R1YWwnID0+ICRyZXN1bHRbJ2FjdHVhbCddLAorICAgICAgICAnZXhwZWN0ZWQnID0+
ICRyZXN1bHRbJ2V4cGVjdGVkJ10pKTsKK30KKworZXhpdF93aXRoX3N1Y2Nlc3MoYXJyYXkoJ2J1
aWxkZXJzJyA9PiAkYnVpbGRlcnMpKTsKKworPz4KSW5kZXg6IFdlYnNpdGVzL3Rlc3QtcmVzdWx0
cy9pbmNsdWRlL2NvbmZpZy5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3Rlc3QtcmVzdWx0
cy9pbmNsdWRlL2NvbmZpZy5qc29uCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvdGVzdC1yZXN1
bHRzL2luY2x1ZGUvY29uZmlnLmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNCBAQAor
eworICAgICJkZWJ1ZyI6IHRydWUsCisgICAgImRhdGFiYXNlIjogeworICAgICAgICAiaG9zdCI6
ICJsb2NhbGhvc3QiLAorICAgICAgICAicG9ydCI6ICI1NDMyIiwKKyAgICAgICAgInVzZXJuYW1l
IjogInNhZmFyaS10ZXN0LWhpc3RvcnkiLAorICAgICAgICAicGFzc3dvcmQiOiAicGFzc3dvcmQi
LAorICAgICAgICAibmFtZSI6ICJzYWZhcmktdGVzdC1oaXN0b3J5LWRiIgorICAgIH0sCisgICAg
Im1hc3RlcnMiOiBbCisgICAgICAgICJidWlsZC53ZWJraXQub3JnIiwKKyAgICAgICAgImJ1aWxk
LXNhZmFyaS5hcHBsZS5jb20iCisgICAgXQorfQpJbmRleDogV2Vic2l0ZXMvdGVzdC1yZXN1bHRz
L2luY2x1ZGUvZGIucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9pbmNs
dWRlL2RiLnBocAkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9pbmNsdWRl
L2RiLnBocAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4NyBAQAorPD9waHAKKworLy8gTm90
ZTogVGhpcyBjb2RlIGlzIGlkZW50aWNhbCB0byBTYWZhcmlQZXJmTW9uaXRvcidzIGRiLnBocAor
CitlcnJvcl9yZXBvcnRpbmcoRV9BTEwgfCBFX1NUUklDVCk7CisKK2Z1bmN0aW9uIGVuZHNfd2l0
aCgkc3RyLCAka2V5KSB7CisgICAgcmV0dXJuIHN0cnJwb3MoJHN0ciwgJGtleSkgPT0gc3RybGVu
KCRzdHIpIC0gc3RybGVuKCRrZXkpOworfQorCitmdW5jdGlvbiBjdHlwZV9hbG51bV91bmRlcnNj
b3JlKCRzdHIpIHsKKyAgICByZXR1cm4gY3R5cGVfYWxudW0oc3RyX3JlcGxhY2UoJ18nLCAnJywg
JHN0cikpOworfQorCitmdW5jdGlvbiAmYXJyYXlfZW5zdXJlX2l0ZW1faGFzX2FycmF5KCYkYXJy
YXksICRrZXkpIHsKKyAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJGtleSwgJGFycmF5KSkKKyAg
ICAgICAgJGFycmF5WyRrZXldID0gYXJyYXkoKTsKKyAgICByZXR1cm4gJGFycmF5WyRrZXldOwor
fQorCitmdW5jdGlvbiBhcnJheV9nZXQoJGFycmF5LCAka2V5LCAkZGVmYXVsdCA9IE5VTEwpIHsK
KyAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJGtleSwgJGFycmF5KSkKKyAgICAgICAgcmV0dXJu
ICRkZWZhdWx0OworICAgIHJldHVybiAkYXJyYXlbJGtleV07Cit9CisKKyRfY29uZmlnID0gTlVM
TDsKKworZnVuY3Rpb24gY29uZmlnKCRrZXkpIHsKKyAgICBnbG9iYWwgJF9jb25maWc7CisgICAg
aWYgKCEkX2NvbmZpZykKKyAgICAgICAgJF9jb25maWcgPSBqc29uX2RlY29kZShmaWxlX2dldF9j
b250ZW50cyhkaXJuYW1lKF9fRklMRV9fKSAuICcvY29uZmlnLmpzb24nKSwgdHJ1ZSk7CisgICAg
cmV0dXJuICRfY29uZmlnWyRrZXldOworfQorCitpZiAoY29uZmlnKCdkZWJ1ZycpKQorICAgIGlu
aV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgJ09uJyk7CisKK2NsYXNzIERhdGFiYXNlCit7CisgICAg
cHJpdmF0ZSAkY29ubmVjdGlvbiA9IGZhbHNlOworCisgICAgZnVuY3Rpb24gX19kZXN0cnVjdCgp
IHsKKyAgICAgICAgaWYgKCR0aGlzLT5jb25uZWN0aW9uKQorICAgICAgICAgICAgcGdfY2xvc2Uo
JHRoaXMtPmNvbm5lY3Rpb24pOworICAgICAgICAkdGhpcy0+Y29ubmVjdGlvbiA9IGZhbHNlOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGlzX3RydWUoJHZhbHVlKSB7CisgICAgICAgIHJldHVybiAk
dmFsdWUgPT0gJ3QnOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNvbm5lY3QoKSB7CisgICAgICAg
ICRkYXRhYmFzZUNvbmZpZyA9IGNvbmZpZygnZGF0YWJhc2UnKTsKKyAgICAgICAgJHRoaXMtPmNv
bm5lY3Rpb24gPSBwZ19jb25uZWN0KCdob3N0PScgLiAkZGF0YWJhc2VDb25maWdbJ2hvc3QnXSAu
ICcgcG9ydD0nIC4gJGRhdGFiYXNlQ29uZmlnWydwb3J0J10KKyAgICAgICAgICAgIC4gJyBkYm5h
bWU9JyAuICRkYXRhYmFzZUNvbmZpZ1snbmFtZSddIC4gJyB1c2VyPScgLiAkZGF0YWJhc2VDb25m
aWdbJ3VzZXJuYW1lJ10gLiAnIHBhc3N3b3JkPScgLiAkZGF0YWJhc2VDb25maWdbJ3Bhc3N3b3Jk
J10pOworICAgICAgICByZXR1cm4gJHRoaXMtPmNvbm5lY3Rpb24gPyB0cnVlIDogZmFsc2U7Cisg
ICAgfQorCisgICAgcHJpdmF0ZSBmdW5jdGlvbiBwcmVmaXhlZF9jb2x1bW5fbmFtZXMoJGNvbHVt
bnMsICRwcmVmaXggPSBOVUxMKSB7CisgICAgICAgIGlmICghJHByZWZpeCkKKyAgICAgICAgICAg
IHJldHVybiBqb2luKCcsICcsICRjb2x1bW5zKTsKKyAgICAgICAgcmV0dXJuICRwcmVmaXggLiAn
XycgLiBqb2luKCcsICcgLiAkcHJlZml4IC4gJ18nLCAkY29sdW1ucyk7CisgICAgfQorCisgICAg
cHJpdmF0ZSBmdW5jdGlvbiBwcmVmaXhlZF9uYW1lKCRjb2x1bW4sICRwcmVmaXggPSBOVUxMKSB7
CisgICAgICAgIHJldHVybiAkcHJlZml4ID8gJHByZWZpeCAuICdfJyAuICRjb2x1bW4gOiAkY29s
dW1uOworICAgIH0KKworICAgIHByaXZhdGUgZnVuY3Rpb24gcHJlcGFyZV9wYXJhbXMoJHBhcmFt
cywgJiRwbGFjZWhvbGRlcnMsICYkdmFsdWVzKSB7CisgICAgICAgICRjb2x1bW5fbmFtZXMgPSBh
cnJheV9rZXlzKCRwYXJhbXMpOworCisgICAgICAgICRpID0gY291bnQoJHZhbHVlcykgKyAxOwor
ICAgICAgICBmb3JlYWNoICgkY29sdW1uX25hbWVzIGFzICRuYW1lKSB7CisgICAgICAgICAgICBh
c3NlcnQoY3R5cGVfYWxudW1fdW5kZXJzY29yZSgkbmFtZSkpOworICAgICAgICAgICAgYXJyYXlf
cHVzaCgkcGxhY2Vob2xkZXJzLCAnJCcgLiAkaSk7CisgICAgICAgICAgICBhcnJheV9wdXNoKCR2
YWx1ZXMsICRwYXJhbXNbJG5hbWVdKTsKKyAgICAgICAgICAgICRpKys7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gJGNvbHVtbl9uYW1lczsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpbnNl
cnRfcm93KCR0YWJsZSwgJHByZWZpeCwgJHBhcmFtcywgJHJldHVybmluZyA9ICdpZCcpIHsKKyAg
ICAgICAgJHBsYWNlaG9sZGVycyA9IGFycmF5KCk7CisgICAgICAgICR2YWx1ZXMgPSBhcnJheSgp
OworICAgICAgICAkY29sdW1uX25hbWVzID0gJHRoaXMtPnByZXBhcmVfcGFyYW1zKCRwYXJhbXMs
ICRwbGFjZWhvbGRlcnMsICR2YWx1ZXMpOworCisgICAgICAgIGFzc2VydCghJHByZWZpeCB8fCBj
dHlwZV9hbG51bV91bmRlcnNjb3JlKCRwcmVmaXgpKTsKKyAgICAgICAgJGNvbHVtbl9uYW1lcyA9
ICR0aGlzLT5wcmVmaXhlZF9jb2x1bW5fbmFtZXMoJGNvbHVtbl9uYW1lcywgJHByZWZpeCk7Cisg
ICAgICAgICRwbGFjZWhvbGRlcnMgPSBqb2luKCcsICcsICRwbGFjZWhvbGRlcnMpOworCisgICAg
ICAgIGlmICgkcmV0dXJuaW5nKSB7CisgICAgICAgICAgICAkcmV0dXJuaW5nX2NvbHVtbl9uYW1l
ID0gJHRoaXMtPnByZWZpeGVkX25hbWUoJHJldHVybmluZywgJHByZWZpeCk7CisgICAgICAgICAg
ICAkcm93cyA9ICR0aGlzLT5xdWVyeV9hbmRfZmV0Y2hfYWxsKCJJTlNFUlQgSU5UTyAkdGFibGUg
KCRjb2x1bW5fbmFtZXMpIFZBTFVFUyAoJHBsYWNlaG9sZGVycykgUkVUVVJOSU5HICRyZXR1cm5p
bmdfY29sdW1uX25hbWUiLCAkdmFsdWVzKTsKKyAgICAgICAgICAgIHJldHVybiAkcm93cyA/ICRy
b3dzWzBdWyRyZXR1cm5pbmdfY29sdW1uX25hbWVdIDogTlVMTDsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiAkdGhpcy0+cXVlcnlfYW5kX2dldF9hZmZlY3RlZF9yb3dzKCJJTlNFUlQgSU5U
TyAkdGFibGUgKCRjb2x1bW5fbmFtZXMpIFZBTFVFUyAoJHBsYWNlaG9sZGVycykiLCAkdmFsdWVz
KSA9PSAxOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNlbGVjdF9vcl9pbnNlcnRfcm93KCR0YWJs
ZSwgJHByZWZpeCwgJHNlbGVjdF9wYXJhbXMsICRpbnNlcnRfcGFyYW1zID0gTlVMTCwgJHJldHVy
bmluZyA9ICdpZCcpIHsKKyAgICAgICAgJHZhbHVlcyA9IGFycmF5KCk7CisKKyAgICAgICAgJHNl
bGVjdF9wbGFjZWhvbGRlcnMgPSBhcnJheSgpOworICAgICAgICAkc2VsZWN0X2NvbHVtbl9uYW1l
cyA9ICR0aGlzLT5wcmVwYXJlX3BhcmFtcygkc2VsZWN0X3BhcmFtcywgJHNlbGVjdF9wbGFjZWhv
bGRlcnMsICR2YWx1ZXMpOworICAgICAgICAkc2VsZWN0X3ZhbHVlcyA9IGFycmF5X3NsaWNlKCR2
YWx1ZXMsIDApOworCisgICAgICAgIGlmICgkaW5zZXJ0X3BhcmFtcyA9PT0gTlVMTCkKKyAgICAg
ICAgICAgICRpbnNlcnRfcGFyYW1zID0gJHNlbGVjdF9wYXJhbXM7CisgICAgICAgICRpbnNlcnRf
cGxhY2Vob2xkZXJzID0gYXJyYXkoKTsKKyAgICAgICAgJGluc2VydF9jb2x1bW5fbmFtZXMgPSAk
dGhpcy0+cHJlcGFyZV9wYXJhbXMoJGluc2VydF9wYXJhbXMsICRpbnNlcnRfcGxhY2Vob2xkZXJz
LCAkdmFsdWVzKTsKKworICAgICAgICBhc3NlcnQoISEkcmV0dXJuaW5nKTsKKyAgICAgICAgYXNz
ZXJ0KCEkcHJlZml4IHx8IGN0eXBlX2FsbnVtX3VuZGVyc2NvcmUoJHByZWZpeCkpOworICAgICAg
ICAkcmV0dXJuaW5nX2NvbHVtbl9uYW1lID0gJHJldHVybmluZyA9PSAnKicgPyAnKicgOiAkdGhp
cy0+cHJlZml4ZWRfbmFtZSgkcmV0dXJuaW5nLCAkcHJlZml4KTsKKyAgICAgICAgJHNlbGVjdF9j
b2x1bW5fbmFtZXMgPSAkdGhpcy0+cHJlZml4ZWRfY29sdW1uX25hbWVzKCRzZWxlY3RfY29sdW1u
X25hbWVzLCAkcHJlZml4KTsKKyAgICAgICAgJHNlbGVjdF9wbGFjZWhvbGRlcnMgPSBqb2luKCcs
ICcsICRzZWxlY3RfcGxhY2Vob2xkZXJzKTsKKyAgICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCAkcmV0
dXJuaW5nX2NvbHVtbl9uYW1lIEZST00gJHRhYmxlIFdIRVJFICgkc2VsZWN0X2NvbHVtbl9uYW1l
cykgPSAoJHNlbGVjdF9wbGFjZWhvbGRlcnMpIjsKKworICAgICAgICAkaW5zZXJ0X2NvbHVtbl9u
YW1lcyA9ICR0aGlzLT5wcmVmaXhlZF9jb2x1bW5fbmFtZXMoJGluc2VydF9jb2x1bW5fbmFtZXMs
ICRwcmVmaXgpOworICAgICAgICAkaW5zZXJ0X3BsYWNlaG9sZGVycyA9IGpvaW4oJywgJywgJGlu
c2VydF9wbGFjZWhvbGRlcnMpOworICAgICAgICAkcm93cyA9ICR0aGlzLT5xdWVyeV9hbmRfZmV0
Y2hfYWxsKCJJTlNFUlQgSU5UTyAkdGFibGUgKCRpbnNlcnRfY29sdW1uX25hbWVzKSBTRUxFQ1Qg
JGluc2VydF9wbGFjZWhvbGRlcnMgV0hFUkUgTk9UIEVYSVNUUworICAgICAgICAgICAgKCRxdWVy
eSkgUkVUVVJOSU5HICRyZXR1cm5pbmdfY29sdW1uX25hbWUiLCAkdmFsdWVzKTsKKyAgICAgICAg
aWYgKCEkcm93cykKKyAgICAgICAgICAgICRyb3dzID0gJHRoaXMtPnF1ZXJ5X2FuZF9mZXRjaF9h
bGwoJHF1ZXJ5LCAkc2VsZWN0X3ZhbHVlcyk7CisKKyAgICAgICAgcmV0dXJuICRyb3dzID8gKCRy
ZXR1cm5pbmcgPT0gJyonID8gJHJvd3NbMF0gOiAkcm93c1swXVskcmV0dXJuaW5nX2NvbHVtbl9u
YW1lXSkgOiBOVUxMOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNlbGVjdF9maXJzdF9yb3coJHRh
YmxlLCAkcHJlZml4LCAkcGFyYW1zLCAkb3JkZXJfYnkgPSBOVUxMKSB7CisgICAgICAgICRwbGFj
ZWhvbGRlcnMgPSBhcnJheSgpOworICAgICAgICAkdmFsdWVzID0gYXJyYXkoKTsKKyAgICAgICAg
JGNvbHVtbl9uYW1lcyA9IGpvaW4oJywgJywgJHRoaXMtPnByZXBhcmVfcGFyYW1zKCRwYXJhbXMs
ICRwbGFjZWhvbGRlcnMsICR2YWx1ZXMpKTsKKyAgICAgICAgJHBsYWNlaG9sZGVycyA9IGpvaW4o
JywgJywgJHBsYWNlaG9sZGVycyk7CisgICAgICAgICRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICR0
YWJsZSBXSEVSRSAoJGNvbHVtbl9uYW1lcykgPSAoJHBsYWNlaG9sZGVycykiOworICAgICAgICBp
ZiAoJG9yZGVyX2J5KSB7CisgICAgICAgICAgICBhc3NlcnQoIWN0eXBlX2FsbnVtX3VuZGVyc2Nv
cmUoJG9yZGVyX2J5KSk7CisgICAgICAgICAgICAkcXVlcnkgLj0gJyBPUkRFUiBCWSAnIC4gJHRo
aXMtPnByZWZpeGVkX25hbWUoJG9yZGVyX2J5LCAkcHJlZml4KTsKKyAgICAgICAgfQorICAgICAg
ICAkcm93cyA9ICR0aGlzLT5xdWVyeV9hbmRfZmV0Y2hfYWxsKCRxdWVyeSAuICcgTElNSVQgMScs
ICR2YWx1ZXMpOworCisgICAgICAgIHJldHVybiAkcm93cyA/ICRyb3dzWzBdIDogTlVMTDsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBxdWVyeV9hbmRfZ2V0X2FmZmVjdGVkX3Jvd3MoJHF1ZXJ5LCAk
cGFyYW1zID0gYXJyYXkoKSkgeworICAgICAgICBpZiAoISR0aGlzLT5jb25uZWN0aW9uKQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICRyZXN1bHQgPSBwZ19xdWVyeV9wYXJhbXMoJHRo
aXMtPmNvbm5lY3Rpb24sICRxdWVyeSwgJHBhcmFtcyk7CisgICAgICAgIGlmICghJHJlc3VsdCkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gcGdfYWZmZWN0ZWRfcm93cygk
cmVzdWx0KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBxdWVyeV9hbmRfZmV0Y2hfYWxsKCRxdWVy
eSwgJHBhcmFtcyA9IGFycmF5KCkpIHsKKyAgICAgICAgaWYgKCEkdGhpcy0+Y29ubmVjdGlvbikK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgJHJlc3VsdCA9IHBnX3F1ZXJ5X3Bh
cmFtcygkdGhpcy0+Y29ubmVjdGlvbiwgJHF1ZXJ5LCAkcGFyYW1zKTsKKyAgICAgICAgaWYgKCEk
cmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gcGdfZmV0
Y2hfYWxsKCRyZXN1bHQpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZldGNoX3RhYmxlKCR0YWJs
ZV9uYW1lLCAkY29sdW1uX3RvX2JlX29yZGVyZWRfYnkgPSBudWxsKSB7CisgICAgICAgIGlmICgh
JHRoaXMtPmNvbm5lY3Rpb24gfHwgIWN0eXBlX2FsbnVtX3VuZGVyc2NvcmUoJHRhYmxlX25hbWUp
IHx8ICgkY29sdW1uX3RvX2JlX29yZGVyZWRfYnkgJiYgIWN0eXBlX2FsbnVtX3VuZGVyc2NvcmUo
JGNvbHVtbl90b19iZV9vcmRlcmVkX2J5KSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICRjbGF1c2VzID0gJyc7CisgICAgICAgIGlmICgkY29sdW1uX3RvX2JlX29yZGVyZWRf
YnkpCisgICAgICAgICAgICAkY2xhdXNlcyAuPSAnT1JERVIgQlkgJyAuICRjb2x1bW5fdG9fYmVf
b3JkZXJlZF9ieTsKKyAgICAgICAgcmV0dXJuICR0aGlzLT5xdWVyeV9hbmRfZmV0Y2hfYWxsKCJT
RUxFQ1QgKiBGUk9NICR0YWJsZV9uYW1lICRjbGF1c2VzIik7CisgICAgfQorCisgICAgZnVuY3Rp
b24gYmVnaW5fdHJhbnNhY3Rpb24oKSB7CisgICAgICAgIHJldHVybiAkdGhpcy0+Y29ubmVjdGlv
biBhbmQgcGdfcXVlcnkoJHRoaXMtPmNvbm5lY3Rpb24sICJCRUdJTiIpOworICAgIH0KKworICAg
IGZ1bmN0aW9uIGNvbW1pdF90cmFuc2FjdGlvbigpIHsKKyAgICAgICAgcmV0dXJuICR0aGlzLT5j
b25uZWN0aW9uIGFuZCBwZ19xdWVyeSgkdGhpcy0+Y29ubmVjdGlvbiwgJ0NPTU1JVCcpOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHJvbGxiYWNrX3RyYW5zYWN0aW9uKCkgeworICAgICAgICByZXR1
cm4gJHRoaXMtPmNvbm5lY3Rpb24gYW5kIHBnX3F1ZXJ5KCR0aGlzLT5jb25uZWN0aW9uLCAnUk9M
TEJBQ0snKTsKKyAgICB9CisKK30KKworPz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCklu
ZGV4OiBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvaW5jbHVkZS9pbml0LWRhdGFiYXNlLnNxbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvaW5jbHVkZS9pbml0LWRhdGFiYXNlLnNx
bAkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9pbmNsdWRlL2luaXQtZGF0
YWJhc2Uuc3FsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKK0RST1AgVEFCTEUgcmVz
dWx0cyBDQVNDQURFOworRFJPUCBUQUJMRSB0ZXN0cyBDQVNDQURFOworRFJPUCBUQUJMRSBidWls
ZF9yZXZpc2lvbl9tYXAgQ0FTQ0FERTsKK0RST1AgVEFCTEUgcmV2aXNpb25zIENBU0NBREU7CitE
Uk9QIFRBQkxFIGJ1aWxkcyBDQVNDQURFOworRFJPUCBUQUJMRSBzbGF2ZXMgQ0FTQ0FERTsKK0RS
T1AgVEFCTEUgYnVpbGRlcnMgQ0FTQ0FERTsKKworQ1JFQVRFIFRBQkxFIGJ1aWxkZXJzICgKKyAg
ICBpZCBzZXJpYWwgUFJJTUFSWSBLRVksCisgICAgbWFzdGVyIHZhcmNoYXIoNjQpIE5PVCBOVUxM
LAorICAgIG5hbWUgdmFyY2hhcig2NCkgTk9UIE5VTEwgVU5JUVVFKTsKKworQ1JFQVRFIFRBQkxF
IHJlcG9zaXRvcmllcyAoCisgICAgaWQgc2VyaWFsIFBSSU1BUlkgS0VZLAorICAgIG5hbWUgdmFy
Y2hhcig2NCkgTk9UIE5VTEwsCisgICAgdXJsIHZhcmNoYXIoMTAyNCksCisgICAgYmxhbWVfdXJs
IHZhcmNoYXIoMTAyNCkpOworCitDUkVBVEUgVEFCTEUgc2xhdmVzICgKKyAgICBpZCBzZXJpYWwg
UFJJTUFSWSBLRVksCisgICAgbmFtZSB2YXJjaGFyKDEyOCkgTk9UIE5VTEwgVU5JUVVFKTsKKwor
Q1JFQVRFIFRBQkxFIGJ1aWxkcyAoCisgICAgaWQgc2VyaWFsIFBSSU1BUlkgS0VZLAorICAgIGJ1
aWxkZXIgaW50ZWdlciBSRUZFUkVOQ0VTIGJ1aWxkZXJzIE9OIERFTEVURSBDQVNDQURFLAorICAg
IG51bWJlciBpbnRlZ2VyIE5PVCBOVUxMLAorICAgIHN0YXJ0X3RpbWUgdGltZXN0YW1wLAorICAg
IGVuZF90aW1lIHRpbWVzdGFtcCwKKyAgICBzbGF2ZSBpbnRlZ2VyIFJFRkVSRU5DRVMgc2xhdmVz
IE9OIERFTEVURSBDQVNDQURFLAorICAgIGZldGNoZWQgYm9vbCBOT1QgTlVMTCBERUZBVUxUIEZB
TFNFLAorICAgIENPTlNUUkFJTlQgYnVpbGRlcl9hbmRfYnVpbGRfbnVtYmVyX211c3RfYmVfdW5p
cXVlIFVOSVFVRShidWlsZGVyLCBudW1iZXIpKTsKK0NSRUFURSBJTkRFWCBidWlsZF9idWlsZGVy
X2luZGV4IE9OIGJ1aWxkcyhidWlsZGVyKTsKK0NSRUFURSBJTkRFWCBidWlsZF9zbGF2ZV9pbmRl
eCBPTiBidWlsZHMoc2xhdmUpOworCitDUkVBVEUgVEFCTEUgYnVpbGRfcmV2aXNpb25zICgKKyAg
ICBidWlsZCBpbnRlZ2VyIE5PVCBOVUxMIFJFRkVSRU5DRVMgYnVpbGRzIE9OIERFTEVURSBDQVND
QURFLAorICAgIHJlcG9zaXRvcnkgaW50ZWdlciBOT1QgTlVMTCBSRUZFUkVOQ0VTIHJlcG9zaXRv
cmllcyBPTiBERUxFVEUgQ0FTQ0FERSwKKyAgICB2YWx1ZSB2YXJjaGFyKDY0KSBOT1QgTlVMTCwK
KyAgICB0aW1lIHRpbWVzdGFtcCwKKyAgICBQUklNQVJZIEtFWSAocmVwb3NpdG9yeSwgYnVpbGQp
KTsKK0NSRUFURSBJTkRFWCByZXZpc2lvbl9idWlsZF9pbmRleCBPTiBidWlsZF9yZXZpc2lvbnMo
YnVpbGQpOworQ1JFQVRFIElOREVYIHJldmlzaW9uX3JlcG9zaXRvcnlfaW5kZXggT04gYnVpbGRf
cmV2aXNpb25zKHJlcG9zaXRvcnkpOworCitDUkVBVEUgVEFCTEUgdGVzdHMgKAorICAgIGlkIHNl
cmlhbCBQUklNQVJZIEtFWSwKKyAgICBuYW1lIHZhcmNoYXIoMTAyNCkgTk9UIE5VTEwgVU5JUVVF
LAorICAgIHJlZnRlc3RfdHlwZSB2YXJjaGFyKDY0KSk7CisKK0NSRUFURSBUQUJMRSByZXN1bHRz
ICgKKyAgICBpZCBzZXJpYWwgUFJJTUFSWSBLRVksCisgICAgdGVzdCBpbnRlZ2VyIFJFRkVSRU5D
RVMgdGVzdHMgT04gREVMRVRFIENBU0NBREUsCisgICAgYnVpbGQgaW50ZWdlciBSRUZFUkVOQ0VT
IGJ1aWxkcyBPTiBERUxFVEUgQ0FTQ0FERSwKKyAgICBleHBlY3RlZCB2YXJjaGFyKDY0KSBOT1Qg
TlVMTCwKKyAgICBhY3R1YWwgdmFyY2hhcig2NCkgTk9UIE5VTEwpOworQ1JFQVRFIElOREVYIHJl
c3VsdHNfdGVzdCBPTiByZXN1bHRzKHRlc3QpOworQ1JFQVRFIElOREVYIHJlc3VsdHNfYnVpbGQg
T04gcmVzdWx0cyhidWlsZCk7CkluZGV4OiBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvaW5jbHVkZS9q
c29uLXNoYXJlZC5waHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2luY2x1
ZGUvanNvbi1zaGFyZWQucGhwCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvdGVzdC1yZXN1bHRz
L2luY2x1ZGUvanNvbi1zaGFyZWQucGhwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAK
Kzw/cGhwCisKK3JlcXVpcmVfb25jZSgnLi4vaW5jbHVkZS9kYi5waHAnKTsKKworaGVhZGVyKCdD
b250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL2pzb24nKTsKKworZnVuY3Rpb24gZXhpdF93aXRoX2Vy
cm9yKCRzdGF0dXMsICRkZXRhaWxzID0gYXJyYXkoKSkgeworICAgICRkZXRhaWxzWydzdGF0dXMn
XSA9ICRzdGF0dXM7CisgICAgZWNobyBqc29uX2VuY29kZSgkZGV0YWlscyk7CisgICAgZXhpdCgx
KTsKK30KKworZnVuY3Rpb24gZXhpdF93aXRoX3N1Y2Nlc3MoJGRldGFpbHMgPSBhcnJheSgpKSB7
CisgICAgJGRldGFpbHNbJ3N0YXR1cyddID0gJ09LJzsKKyAgICBlY2hvIGpzb25fZW5jb2RlKCRk
ZXRhaWxzKTsKKyAgICBleGl0KDApOworfQorCitmdW5jdGlvbiBjb25uZWN0KCkgeworICAgICRk
YiA9IG5ldyBEYXRhYmFzZTsKKyAgICBpZiAoISRkYi0+Y29ubmVjdCgpKQorICAgICAgICBleGl0
X3dpdGhfZXJyb3IoJ0RhdGFiYXNlQ29ubmVjdGlvbkVycm9yJyk7CisgICAgcmV0dXJuICRkYjsK
K30KKworZnVuY3Rpb24gY2FtZWxfY2FzZV93b3Jkc19zZXBhcmF0ZWRfYnlfdW5kZXJzY29yZSgk
bmFtZSkgeworICAgIHJldHVybiBpbXBsb2RlKCcnLCBhcnJheV9tYXAoJ3VjZmlyc3QnLCBleHBs
b2RlKCdfJywgJG5hbWUpKSk7Cit9CisKK2Z1bmN0aW9uIHJlcXVpcmVfZm9ybWF0KCRrZXksICR2
YWx1ZSwgJHBhdHRlcm4pIHsKKyAgICBpZiAoIXByZWdfbWF0Y2goJHBhdHRlcm4sICR2YWx1ZSkp
CisgICAgICAgIGV4aXRfd2l0aF9lcnJvcignSW52YWxpZCcgLiBjYW1lbF9jYXNlX3dvcmRzX3Nl
cGFyYXRlZF9ieV91bmRlcnNjb3JlKCRrZXkpLCBhcnJheSgndmFsdWUnID0+ICR2YWx1ZSkpOwor
fQorCitmdW5jdGlvbiByZXF1aXJlX2V4aXN0ZW5jZV9vZigkYXJyYXksICRsaXN0X29mX2FyZ3Vt
ZW50cywgJHByZWZpeCA9ICcnKSB7CisgICAgaWYgKCRwcmVmaXgpCisgICAgICAgICRwcmVmaXgg
Lj0gJ18nOworICAgIGZvcmVhY2ggKCRsaXN0X29mX2FyZ3VtZW50cyBhcyAka2V5ID0+ICRwYXR0
ZXJuKSB7CisgICAgICAgICRuYW1lID0gY2FtZWxfY2FzZV93b3Jkc19zZXBhcmF0ZWRfYnlfdW5k
ZXJzY29yZSgkcHJlZml4IC4gJGtleSk7CisgICAgICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygk
a2V5LCAkYXJyYXkpKQorICAgICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCRuYW1lIC4gJ05vdFNw
ZWNpZmllZCcpOworICAgICAgICByZXF1aXJlX2Zvcm1hdCgkbmFtZSwgJGFycmF5WyRrZXldLCAk
cGF0dGVybik7CisgICAgfQorfQorCis/PgpJbmRleDogV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2lu
Y2x1ZGUvdGVzdC1yZXN1bHRzLnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy90ZXN0LXJlc3Vs
dHMvaW5jbHVkZS90ZXN0LXJlc3VsdHMucGhwCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvdGVz
dC1yZXN1bHRzL2luY2x1ZGUvdGVzdC1yZXN1bHRzLnBocAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDY5IEBACis8P3BocAorCityZXF1aXJlX29uY2UoJ2RiLnBocCcpOworCitmdW5jdGlvbiBm
bG9hdF90b190aW1lKCR0aW1lX2luX2Zsb2F0KSB7CisgICAgJHRpbWUgPSBuZXcgRGF0ZVRpbWUo
KTsKKyAgICAkdGltZS0+c2V0VGltZXN0YW1wKGZsb2F0dmFsKCR0aW1lX2luX2Zsb2F0KSk7Cisg
ICAgcmV0dXJuICR0aW1lOworfQorCitmdW5jdGlvbiBhZGRfYnVpbGQoJGRiLCAkbWFzdGVyLCAk
YnVpbGRlcl9uYW1lLCAkYnVpbGRfbnVtYmVyKSB7CisgICAgaWYgKCFpbl9hcnJheSgkbWFzdGVy
LCBjb25maWcoJ21hc3RlcnMnKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgJGJ1aWxk
ZXJfaWQgPSAkZGItPnNlbGVjdF9vcl9pbnNlcnRfcm93KCdidWlsZGVycycsIE5VTEwsIGFycmF5
KCdtYXN0ZXInID0+ICRtYXN0ZXIsICduYW1lJyA9PiAkYnVpbGRlcl9uYW1lKSk7CisgICAgaWYg
KCEkYnVpbGRlcl9pZCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gJGRiLT5z
ZWxlY3Rfb3JfaW5zZXJ0X3JvdygnYnVpbGRzJywgTlVMTCwgYXJyYXkoJ2J1aWxkZXInID0+ICRi
dWlsZGVyX2lkLCAnbnVtYmVyJyA9PiAkYnVpbGRfbnVtYmVyKSk7Cit9CisKK2Z1bmN0aW9uIGFk
ZF9zbGF2ZSgkZGIsICRuYW1lKSB7CisgICAgcmV0dXJuICRkYi0+c2VsZWN0X29yX2luc2VydF9y
b3coJ3NsYXZlcycsIE5VTEwsIGFycmF5KCduYW1lJyA9PiAkbmFtZSkpOworfQorCitmdW5jdGlv
biBmZXRjaF9hbmRfcGFyc2VfdGVzdF9yZXN1bHRzX2pzb24oJHVybCwgJGpzb25wID0gRkFMU0Up
IHsKKyAgICAkanNvbl9jb250ZW50cyA9IGZpbGVfZ2V0X2NvbnRlbnRzKCR1cmwpOworICAgIGlm
ICghJGpzb25fY29udGVudHMpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKCRqc29u
cCkKKyAgICAgICAgJGpzb25fY29udGVudHMgPSBwcmVnX3JlcGxhY2UoJy9eXHcrXCh8XCk7JC8n
LCAnJywgJGpzb25fY29udGVudHMpOworCisgICAgcmV0dXJuIGpzb25fZGVjb2RlKCRqc29uX2Nv
bnRlbnRzLCB0cnVlKTsKK30KKworZnVuY3Rpb24gc3RvcmVfdGVzdF9yZXN1bHRzKCRkYiwgJHRl
c3RfcmVzdWx0cywgJGJ1aWxkX2lkLCAkc3RhcnRfdGltZSwgJGVuZF90aW1lLCAkc2xhdmVfaWQp
IHsKKyAgICAkZGItPmJlZ2luX3RyYW5zYWN0aW9uKCk7CisKKyAgICB0cnkgeworICAgICAgICBm
b3JlYWNoICgkdGVzdF9yZXN1bHRzWyd0ZXN0cyddIGFzICRuYW1lID0+ICRzdWJ0ZXN0cykKKyAg
ICAgICAgICAgIHJlY3Vyc2l2ZWx5X2FkZF90ZXN0X3Jlc3VsdHMoJGRiLCAkYnVpbGRfaWQsICRz
dWJ0ZXN0cywgJG5hbWUpOworICAgICAgICAkZGItPnF1ZXJ5X2FuZF9nZXRfYWZmZWN0ZWRfcm93
cygnVVBEQVRFIGJ1aWxkcyBTRVQgKHN0YXJ0X3RpbWUsIGVuZF90aW1lLCBzbGF2ZSwgZmV0Y2hl
ZCkgPSAoJDEsICQyLCAkMywgVFJVRSkgV0hFUkUgaWQgPSAkNCcsCisgICAgICAgICAgICBhcnJh
eSgkc3RhcnRfdGltZS0+Zm9ybWF0KCdZLW0tZCBIOmk6cy51JyksICRlbmRfdGltZS0+Zm9ybWF0
KCdZLW0tZCBIOmk6cy51JyksICRzbGF2ZV9pZCwgJGJ1aWxkX2lkKSk7CisgICAgICAgICRkYi0+
Y29tbWl0X3RyYW5zYWN0aW9uKCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CisgICAg
ICAgICRkYi0+cm9sbGJhY2tfdHJhbnNhY3Rpb24oKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOwor
ICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCitmdW5jdGlvbiByZWN1cnNpdmVseV9hZGRf
dGVzdF9yZXN1bHRzKCRkYiwgJGJ1aWxkX2lkLCAkdGVzdHMsICRmdWxsX25hbWUpIHsKKyAgICBp
ZiAoIWFycmF5X2tleV9leGlzdHMoJ2V4cGVjdGVkJywgJHRlc3RzKSBhbmQgIWFycmF5X2tleV9l
eGlzdHMoJ2FjdHVhbCcsICR0ZXN0cykpIHsKKyAgICAgICAgZm9yZWFjaCAoJHRlc3RzIGFzICRu
YW1lID0+ICRzdWJ0ZXN0cykKKyAgICAgICAgICAgIHJlY3Vyc2l2ZWx5X2FkZF90ZXN0X3Jlc3Vs
dHMoJGRiLCAkYnVpbGRfaWQsICRzdWJ0ZXN0cywgJGZ1bGxfbmFtZSAuICcvJyAuICRuYW1lKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICR0ZXN0X2lkID0gJGRiLT5zZWxlY3Rfb3Jf
aW5zZXJ0X3JvdygndGVzdHMnLCBOVUxMLAorICAgICAgICBhcnJheSgnbmFtZScgPT4gJGZ1bGxf
bmFtZSksIGFycmF5KCduYW1lJyA9PiAkZnVsbF9uYW1lLCAncmVmdGVzdF90eXBlJyA9PiBqc29u
X2VuY29kZShhcnJheV9nZXQoJHRlc3RzLCAncmVmdGVzdF90eXBlJykpKSk7CisKKyAgICAvLyBG
SVhNRTogRWl0aGVyIHVzZSBhIHRyYW5zYWN0aW9uIG9yIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUu
CisgICAgJGRiLT5zZWxlY3Rfb3JfaW5zZXJ0X3JvdygncmVzdWx0cycsIE5VTEwsIGFycmF5KCd0
ZXN0JyA9PiAkdGVzdF9pZCwgJ2J1aWxkJyA9PiAkYnVpbGRfaWQsCisgICAgICAgICdleHBlY3Rl
ZCcgPT4gJHRlc3RzWydleHBlY3RlZCddLCAnYWN0dWFsJyA9PiAkdGVzdHNbJ2FjdHVhbCddKSk7
Cit9CisKKz8+CkluZGV4OiBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvanMvYXV0b2NvbXBsZXRlci5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvanMvYXV0b2NvbXBsZXRlci5q
cwkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9qcy9hdXRvY29tcGxldGVy
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE0IEBACitmdW5jdGlvbiBBdXRvY29tcGxl
dGVyKGlucHV0RWxlbWVudCwgbGlzdCkgeworICAgIHRoaXMuX2lucHV0RWxlbWVudCA9IGlucHV0
RWxlbWVudDsKKyAgICB0aGlzLl9jdXJyZW50U2VsZWN0aW9uID0gdW5kZWZpbmVkOworICAgIHRo
aXMuX2xpc3QgPSBsaXN0OworICAgIHRoaXMuX2NhbmRpZGF0ZXMgPSBbXTsKKyAgICB0aGlzLl9j
dXJyZW50RmlsdGVyID0gbnVsbDsKKyAgICB0aGlzLl9jYW5kaWRhdGVXaW5kb3cgPSBudWxsOwor
CisgICAgaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5zaG93LmJp
bmQodGhpcykpOworICAgIGlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhp
cy5oaWRlLmJpbmQodGhpcykpOworICAgIGlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdr
ZXl1cCcsIHRoaXMudXBkYXRlLmJpbmQodGhpcykpOworICAgIGlucHV0RWxlbWVudC5hZGRFdmVu
dExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5uYXZpZ2F0ZS5iaW5kKHRoaXMpKTsKK30KKworQXV0
b2NvbXBsZXRlci5wcm90b3R5cGUuX2Vuc3VyZUNhbmRpZGF0ZVdpbmRvdyA9IGZ1bmN0aW9uICgp
IHsKKyAgICBpZiAodGhpcy5fY2FuZGlkYXRlV2luZG93KQorICAgICAgICByZXR1cm47CisKKyAg
ICB2YXIgY29udGFpbmVyID0gZWxlbWVudCgndWwnKTsKKyAgICBjb250YWluZXIuY2xhc3NOYW1l
ID0gJ2NhbmRpZGF0ZVdpbmRvdyc7CisgICAgY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gJ2Fi
c29sdXRlJzsKKyAgICBjb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICB0aGlz
Ll9pbnB1dEVsZW1lbnQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjb250YWluZXIpOworICAgIHRo
aXMuX2NhbmRpZGF0ZVdpbmRvdyA9IGNvbnRhaW5lcjsKK30KKworQXV0b2NvbXBsZXRlci5wcm90
b3R5cGUuX3VwZGF0ZUNhbmRpZGF0ZXMgPSBmdW5jdGlvbiAoZmlsdGVyKSB7CisgICAgaWYgKHRo
aXMuX2N1cnJlbnRGaWx0ZXIgPT0gZmlsdGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICB2YXIgY2FuZGlkYXRlcyA9IHRoaXMuX2xpc3QuZmlsdGVyKGZ1bmN0aW9uICh0ZXN0TmFtZSkg
eyByZXR1cm4gdGVzdE5hbWUuaW5kZXhPZihmaWx0ZXIpID49IDA7IH0pOworICAgIGlmIChjYW5k
aWRhdGVzLmxlbmd0aCA+IDUwIHx8IGNhbmRpZGF0ZXMubGVuZ3RoID09IDEpCisgICAgICAgIGNh
bmRpZGF0ZXMgPSBbXTsKKyAgICB0aGlzLl9jYW5kaWRhdGVzID0gY2FuZGlkYXRlczsKKyAgICB0
aGlzLl9jdXJyZW50RmlsdGVyID0gZmlsdGVyOworICAgIHRoaXMuX2N1cnJlbnRTZWxlY3Rpb24g
PSB1bmRlZmluZWQ7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0F1dG9jb21wbGV0ZXIucHJvdG90
eXBlLl9zaG93Q2FuZGlkYXRlV2luZG93ID0gZnVuY3Rpb24gKCkgeworICAgIGlmICghdGhpcy5f
Y2FuZGlkYXRlV2luZG93KQorICAgICAgICByZXR1cm47CisgICAgdmFyIHN0eWxlID0gdGhpcy5f
Y2FuZGlkYXRlV2luZG93LnN0eWxlOworICAgIHN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOworICAg
IHN0eWxlLnRvcCA9IHRoaXMuX2lucHV0RWxlbWVudC5vZmZzZXRUb3AgKyB0aGlzLl9pbnB1dEVs
ZW1lbnQub2Zmc2V0SGVpZ2h0ICsgJ3B4JzsKKyAgICBzdHlsZS5sZWZ0ID0gdGhpcy5faW5wdXRF
bGVtZW50Lm9mZnNldExlZnQgKyAncHgnOworfQorCitBdXRvY29tcGxldGVyLnByb3RvdHlwZS5f
Y3JlYXRlSXRlbSA9IGZ1bmN0aW9uIChjYW5kaWRhdGUpIHsKKyAgICB2YXIgdG9rZW5zID0gY2Fu
ZGlkYXRlLnNwbGl0KHRoaXMuX2N1cnJlbnRGaWx0ZXIpOworICAgIHZhciBjaGlsZHJlbiA9IFtd
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
IGNoaWxkcmVuLnB1c2godGV4dCh0b2tlbnNbaV0pKTsKKyAgICAgICAgaWYgKGkgKyAxIDwgdG9r
ZW5zLmxlbmd0aCkKKyAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goZWxlbWVudCgnZW0nLCBbdGhp
cy5fY3VycmVudEZpbHRlcl0pKTsKKyAgICB9CisgICAgcmV0dXJuIGVsZW1lbnQoJ2xpJywgY2hp
bGRyZW4pOworfQorCitBdXRvY29tcGxldGVyLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24gKCkg
eworICAgIHRoaXMuaGlkZSgpOworICAgIHRoaXMuX2Vuc3VyZUNhbmRpZGF0ZVdpbmRvdygpOwor
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jYW5kaWRhdGVzLmxlbmd0aDsgaSsrKQor
ICAgICAgICB0aGlzLl9jYW5kaWRhdGVXaW5kb3cuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlSXRl
bSh0aGlzLl9jYW5kaWRhdGVzW2ldKSk7CisgICAgdGhpcy5fc2VsZWN0SXRlbSh0aGlzLl9jdXJy
ZW50U2VsZWN0aW9uKTsKKworICAgIGlmICh0aGlzLl9jYW5kaWRhdGVzLmxlbmd0aCkKKyAgICAg
ICAgdGhpcy5fc2hvd0NhbmRpZGF0ZVdpbmRvdygpOworfQorCitBdXRvY29tcGxldGVyLnByb3Rv
dHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKHRoaXMuX3VwZGF0ZUNhbmRpZGF0
ZXModGhpcy5faW5wdXRFbGVtZW50LnZhbHVlKSkKKyAgICAgICAgdGhpcy5zaG93KCk7Cit9CisK
K0F1dG9jb21wbGV0ZXIucHJvdG90eXBlLmhpZGUgPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKCF0
aGlzLl9jYW5kaWRhdGVXaW5kb3cpCisgICAgICAgIHJldHVybjsKKyAgICB0aGlzLl9jYW5kaWRh
dGVXaW5kb3cuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICB0aGlzLl9jYW5kaWRhdGVXaW5k
b3cuaW5uZXJIVE1MID0gJyc7Cit9CisKK0F1dG9jb21wbGV0ZXIucHJvdG90eXBlLl9zZWxlY3RJ
dGVtID0gZnVuY3Rpb24gKGluZGV4KSB7CisgICAgaWYgKCF0aGlzLl9jYW5kaWRhdGVXaW5kb3cg
fHwgdGhpcy5fY3VycmVudFNlbGVjdGlvbiA9PSBpbmRleCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgdmFyIGl0ZW0gPSB0aGlzLl9jYW5kaWRhdGVXaW5kb3cuY2hpbGROb2Rlc1tpbmRleF07Cisg
ICAgaWYgKCFpdGVtKQorICAgICAgICByZXR1cm47CisgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdz
ZWxlY3RlZCcpOworCisgICAgdmFyIG9sZEl0ZW0gPSB0aGlzLl9jYW5kaWRhdGVXaW5kb3cuY2hp
bGROb2Rlc1t0aGlzLl9jdXJyZW50U2VsZWN0aW9uXTsKKyAgICBpZiAob2xkSXRlbSkKKyAgICAg
ICAgb2xkSXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3RlZCcpOworCisgICAgdGhpcy5fY3Vy
cmVudFNlbGVjdGlvbiA9IGluZGV4OworfQorCitBdXRvY29tcGxldGVyLnByb3RvdHlwZS5uYXZp
Z2F0ZSA9IGZ1bmN0aW9uIChldmVudCkgeworICAgIGlmIChldmVudC5rZXlDb2RlID09IDB4Mjgg
LyogRE9NX1ZLX0RPV04gKi8pIHsKKyAgICAgICAgdGhpcy5fc2VsZWN0SXRlbSh0aGlzLl9jdXJy
ZW50U2VsZWN0aW9uID09PSB1bmRlZmluZWQgPyAwIDogTWF0aC5taW4odGhpcy5fY3VycmVudFNl
bGVjdGlvbiArIDEsIHRoaXMuX2NhbmRpZGF0ZXMubGVuZ3RoIC0gMSkpOworICAgICAgICBldmVu
dC5wcmV2ZW50RGVmYXVsdCgpOworICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PSAweDI2
IC8qIERPTV9WS19VUCAqLykgeworICAgICAgICB0aGlzLl9zZWxlY3RJdGVtKHRoaXMuX2N1cnJl
bnRTZWxlY3Rpb24gPT09IHVuZGVmaW5lZCA/IHRoaXMuX2NhbmRpZGF0ZXMubGVuZ3RoIC0gMSA6
IE1hdGgubWF4KHRoaXMuX2N1cnJlbnRTZWxlY3Rpb24gLSAxLCAwKSk7CisgICAgICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7CisgICAgfSBlbHNlIGlmIChldmVudC5rZXlDb2RlID09IDB4MEQg
LyogVktfUkVUVVJOICovKSB7CisgICAgICAgIGlmICh0aGlzLl9jdXJyZW50U2VsZWN0aW9uID09
PSB1bmRlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuX2lucHV0RWxl
bWVudC52YWx1ZSA9IHRoaXMuX2NhbmRpZGF0ZXNbdGhpcy5fY3VycmVudFNlbGVjdGlvbl07Cisg
ICAgfSBlbHNlIGlmIChldmVudC5rZXlDb2RlID09IDB4MUIgLyogRE9NX1ZLX0VTQ0FQRSAqLykg
eworICAgICAgICB0aGlzLmhpZGUoKTsKKyAgICB9Cit9CkluZGV4OiBXZWJzaXRlcy90ZXN0LXJl
c3VsdHMvanMvYnVpbGQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2pz
L2J1aWxkLmpzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2pzL2J1aWxk
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8vIEZJWE1FOiBEZS1kdXBsaWNh
dGUgdGhpcyBjb2RlIHdpdGggcGVyZi53ZWJraXQub3JnCitmdW5jdGlvbiBUZXN0QnVpbGQocmVw
b3NpdG9yaWVzLCBidWlsZGVycywgcmF3UnVuKSB7CisgICAgY29uc3QgcmV2aXNpb25zID0gcmF3
UnVuLnJldmlzaW9uczsKKyAgICB2YXIgbWF4VGltZSA9IDA7CisgICAgdmFyIHJldmlzaW9uQ291
bnQgPSAwOworICAgIGZvciAodmFyIHJlcG9zaXRvcnlOYW1lIGluIHJldmlzaW9ucykgeworICAg
ICAgICBtYXhUaW1lID0gTWF0aC5tYXgobWF4VGltZSwgcmV2aXNpb25zW3JlcG9zaXRvcnlOYW1l
XVsxXSk7IC8vIFJldmlzaW9uIGlzIGFuIHBhaXIgKHJldmlzaW9uLCB0aW1lKQorICAgICAgICBy
ZXZpc2lvbkNvdW50Kys7CisgICAgfQorICAgIHZhciBtYXhUaW1lU3RyaW5nID0gbmV3IERhdGUo
bWF4VGltZSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKCdUJywgJyAnKS5yZXBsYWNlKC9cLlxkK1ok
LywgJycpOworICAgIHZhciBidWlsZFRpbWUgPSByYXdSdW4uYnVpbGRUaW1lOworICAgIHZhciBi
dWlsZFRpbWVTdHJpbmcgPSBuZXcgRGF0ZShidWlsZFRpbWUpLnRvSVNPU3RyaW5nKCkucmVwbGFj
ZSgnVCcsICcgJykucmVwbGFjZSgvXC5cZCtaJC8sICcnKTsKKworICAgIHRoaXMudGltZSA9IGZ1
bmN0aW9uICgpIHsgcmV0dXJuIG1heFRpbWU7IH0KKyAgICB0aGlzLmZvcm1hdHRlZFRpbWUgPSBm
dW5jdGlvbiAoKSB7IHJldHVybiBtYXhUaW1lU3RyaW5nOyB9CisgICAgdGhpcy5idWlsZFRpbWUg
PSBmdW5jdGlvbiAoKSB7IHJldHVybiBidWlsZFRpbWU7IH0KKyAgICB0aGlzLmZvcm1hdHRlZEJ1
aWxkVGltZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJ1aWxkVGltZVN0cmluZzsgfQorICAgIHRo
aXMuYnVpbGRlciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJ1aWxkZXJzW3Jhd1J1bi5idWlsZGVy
XS5uYW1lOyB9CisgICAgdGhpcy5idWlsZE51bWJlciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJh
d1J1bi5idWlsZE51bWJlcjsgfQorICAgIHRoaXMuYnVpbGRVcmwgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHZhciB0ZW1wbGF0ZSA9IGJ1aWxkZXJzW3Jhd1J1bi5idWlsZGVyXS5idWlsZFVybDsK
KyAgICAgICAgcmV0dXJuIHRlbXBsYXRlID8gdGVtcGxhdGUucmVwbGFjZSgvXCRidWlsZE51bWJl
ci9nLCB0aGlzLmJ1aWxkTnVtYmVyKCkpIDogbnVsbDsKKyAgICB9CisgICAgdGhpcy5yZXZpc2lv
biA9IGZ1bmN0aW9uKHJlcG9zaXRvcnlJZCkgeyByZXR1cm4gcmV2aXNpb25zW3JlcG9zaXRvcnlJ
ZF1bMF07IH0KKyAgICB0aGlzLmZvcm1hdHRlZFJldmlzaW9ucyA9IGZ1bmN0aW9uIChwcmV2aW91
c0J1aWxkKSB7CisgICAgICAgIHZhciByZXN1bHQgPSB7fTsKKyAgICAgICAgZm9yICh2YXIgcmVw
b3NpdG9yeUlkIGluIHJldmlzaW9ucykgeworICAgICAgICAgICAgdmFyIHJlcG9zaXRvcnkgPSBy
ZXBvc2l0b3JpZXNbcmVwb3NpdG9yeUlkXTsKKyAgICAgICAgICAgIHZhciByZXBvc2l0b3J5TmFt
ZSA9IHJlcG9zaXRvcnkgPyByZXBvc2l0b3J5Lm5hbWUgOiAnVW5rbm93biByZXBvc2l0b3J5ICcg
KyByZXBvc2l0b3J5SWQ7CisgICAgICAgICAgICB2YXIgcHJldmlvdXNSZXZpc2lvbiA9IHByZXZp
b3VzQnVpbGQgPyBwcmV2aW91c0J1aWxkLnJldmlzaW9uKHJlcG9zaXRvcnlJZCkgOiB1bmRlZmlu
ZWQ7CisgICAgICAgICAgICB2YXIgY3VycmVudFJldmlzaW9uID0gdGhpcy5yZXZpc2lvbihyZXBv
c2l0b3J5SWQpOworICAgICAgICAgICAgaWYgKHByZXZpb3VzUmV2aXNpb24gPT09IGN1cnJlbnRS
ZXZpc2lvbikKKyAgICAgICAgICAgICAgICBwcmV2aW91c1JldmlzaW9uID0gdW5kZWZpbmVkOwor
CisgICAgICAgICAgICB2YXIgcmV2aXNpb25QcmVmaXggPSAnJzsKKyAgICAgICAgICAgIGlmIChj
dXJyZW50UmV2aXNpb24ubGVuZ3RoIDwgMTApIHsgLy8gU1ZOLWxpa2UgcmV2aXNpb24uCisgICAg
ICAgICAgICAgICAgcmV2aXNpb25QcmVmaXggPSAncic7CisgICAgICAgICAgICAgICAgaWYgKHBy
ZXZpb3VzUmV2aXNpb24pCisgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzUmV2aXNpb24gPSAo
cGFyc2VJbnQocHJldmlvdXNSZXZpc2lvbikgKyAxKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgdmFyIGxhYmVsRm9yVGhpc1JlcG9zaXRvcnkgPSByZXZpc2lvbkNvdW50ID8gcmVwb3Np
dG9yeU5hbWUgOiAnJzsKKyAgICAgICAgICAgIGlmIChwcmV2aW91c1JldmlzaW9uKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGxhYmVsRm9yVGhpc1JlcG9zaXRvcnkpCisgICAgICAgICAgICAgICAg
ICAgIGxhYmVsRm9yVGhpc1JlcG9zaXRvcnkgKz0gJyAnOworICAgICAgICAgICAgICAgIGxhYmVs
Rm9yVGhpc1JlcG9zaXRvcnkgKz0gcmV2aXNpb25QcmVmaXggKyBwcmV2aW91c1JldmlzaW9uICsg
Jy0nICsgcmV2aXNpb25QcmVmaXggKyBjdXJyZW50UmV2aXNpb247CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICBsYWJlbEZvclRoaXNSZXBvc2l0b3J5ICs9ICcgQCAnICsgcmV2
aXNpb25QcmVmaXggKyBjdXJyZW50UmV2aXNpb247CisKKyAgICAgICAgICAgIHZhciB1cmw7Cisg
ICAgICAgICAgICBpZiAocmVwb3NpdG9yeSkgeworICAgICAgICAgICAgICAgIGlmIChwcmV2aW91
c1JldmlzaW9uKQorICAgICAgICAgICAgICAgICAgICB1cmwgPSAocmVwb3NpdG9yeVsnYmxhbWVV
cmwnXSB8fCAnJykucmVwbGFjZSgvXCQxL2csIHByZXZpb3VzUmV2aXNpb24pLnJlcGxhY2UoL1wk
Mi9nLCBjdXJyZW50UmV2aXNpb24pOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgdXJsID0gKHJlcG9zaXRvcnlbJ3VybCddIHx8ICcnKS5yZXBsYWNlKC9cJDEvZywg
Y3VycmVudFJldmlzaW9uKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0W3Jl
cG9zaXRvcnlOYW1lXSA9IHsKKyAgICAgICAgICAgICAgICAnbGFiZWwnOiBsYWJlbEZvclRoaXNS
ZXBvc2l0b3J5LAorICAgICAgICAgICAgICAgICdjdXJyZW50UmV2aXNpb24nOiBjdXJyZW50UmV2
aXNpb24sCisgICAgICAgICAgICAgICAgJ3ByZXZpb3VzUmV2aXNpb24nOiBwcmV2aW91c1Jldmlz
aW9uLAorICAgICAgICAgICAgICAgICd1cmwnOiB1cmwsCisgICAgICAgICAgICB9OworICAgICAg
ICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQpJbmRleDogV2Vic2l0ZXMvdGVz
dC1yZXN1bHRzL2pzL2RvbS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy90ZXN0LXJlc3VsdHMv
anMvZG9tLmpzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2pzL2RvbS5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0IEBACitmdW5jdGlvbiB0ZXh0KHRleHQpIHsK
KyAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7Cit9CisKK2Z1bmN0aW9u
IGVsZW1lbnQoZWxlbWVudE5hbWUsIGF0dHJpYnV0ZXNPckNoaWxkTm9kZXMsIGNoaWxkTm9kZXMp
IHsKKyAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWxlbWVudE5hbWUp
OworCisgICAgaWYgKGF0dHJpYnV0ZXNPckNoaWxkTm9kZXMgaW5zdGFuY2VvZiBBcnJheSkKKyAg
ICAgICAgY2hpbGROb2RlcyA9IGF0dHJpYnV0ZXNPckNoaWxkTm9kZXM7CisgICAgZWxzZSBpZiAo
YXR0cmlidXRlc09yQ2hpbGROb2RlcykgeworICAgICAgICBmb3IgKHZhciBhdHRyaWJ1dGVOYW1l
IGluIGF0dHJpYnV0ZXNPckNoaWxkTm9kZXMpCisgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJp
YnV0ZShhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVzT3JDaGlsZE5vZGVzW2F0dHJpYnV0ZU5hbWVd
KTsKKyAgICB9CisKKyAgICBpZiAoY2hpbGROb2RlcykgeworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2Yo
Y2hpbGROb2Rlc1tpXSkgPT09ICdzdHJpbmcnKQorICAgICAgICAgICAgICAgIGVsZW1lbnQuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2hpbGROb2Rlc1tpXSkpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGROb2Rl
c1tpXSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGVsZW1lbnQ7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214418</attachid>
            <date>2013-10-16 19:49:47 -0700</date>
            <delta_ts>2013-10-16 19:53:57 -0700</delta_ts>
            <desc>Removed defer attributes</desc>
            <filename>bug-122936-20131016194946.patch</filename>
            <type>text/plain</type>
            <size>48880</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzQ4
OCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEzLTEw
LTE2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIG5l
dyBmbGFraW5lc3MgZGFzaGJvYXJkIGNsb25lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI5MzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0aGUgaW5pdGlhbCBwcm90b3R5cGUuCisKKyAgICAg
ICAgKiBXZWJzaXRlcy90ZXN0LXJlc3VsdHM6IEFkZGVkLgorICAgICAgICAqIFdlYnNpdGVzL3Rl
c3QtcmVzdWx0cy8uaHRhY2Nlc3M6IEFkZGVkLgorICAgICAgICAqIFdlYnNpdGVzL3Rlc3QtcmVz
dWx0cy9hZG1pbjogQWRkZWQuCisgICAgICAgICogV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2FkbWlu
L2luZGV4LnBocDogQWRkZWQuCisgICAgICAgICogV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2FwaTog
QWRkZWQuCisgICAgICAgICogV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2FwaS9tYW5pZmVzdC5waHA6
IEFkZGVkLgorICAgICAgICAqIFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9hcGkvcmVwb3J0LnBocDog
QWRkZWQuCisgICAgICAgICogV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2FwaS9yZXN1bHRzLnBocDog
QWRkZWQuCisgICAgICAgICogV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2luY2x1ZGU6IEFkZGVkLgor
ICAgICAgICAqIFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9pbmNsdWRlL2NvbmZpZy5qc29uOiBBZGRl
ZC4KKyAgICAgICAgKiBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvaW5jbHVkZS9kYi5waHA6IEFkZGVk
LgorICAgICAgICAqIFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9pbmNsdWRlL2luaXQtZGF0YWJhc2Uu
c3FsOiBBZGRlZC4KKyAgICAgICAgKiBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvaW5jbHVkZS9qc29u
LXNoYXJlZC5waHA6IEFkZGVkLgorICAgICAgICAqIFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9pbmNs
dWRlL3Rlc3QtcmVzdWx0cy5waHA6IEFkZGVkLgorICAgICAgICAqIFdlYnNpdGVzL3Rlc3QtcmVz
dWx0cy9pbmRleC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBXZWJzaXRlcy90ZXN0LXJlc3VsdHMv
anM6IEFkZGVkLgorICAgICAgICAqIFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9qcy9hdXRvY29tcGxl
dGVyLmpzOiBBZGRlZC4KKyAgICAgICAgKiBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvanMvYnVpbGQu
anM6IEFkZGVkLgorICAgICAgICAqIFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9qcy9kb20uanM6IEFk
ZGVkLgorCiAyMDEzLTEwLTEwICBNYXJjZWxvIE1vcmFpcyAgPG0ubW9yYWlzQHNhbXN1bmcuY29t
PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlbW92ZSB0aGUgb2xkIGZyb250LWVuZCBmcm9t
IFdlYktpdApJbmRleDogV2Vic2l0ZXMvdGVzdC1yZXN1bHRzLy5odGFjY2Vzcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvLmh0YWNjZXNzCShyZXZpc2lvbiAwKQorKysgV2Vi
c2l0ZXMvdGVzdC1yZXN1bHRzLy5odGFjY2Vzcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgg
QEAKK3BocF92YWx1ZSBwb3N0X21heF9zaXplIDIwTQorCis8SWZNb2R1bGUgbW9kX3BocDUuYz4K
K3BocF92YWx1ZSB1cGxvYWRfbWF4X2ZpbGVzaXplIDEwMDAwMDAwMAorcGhwX3ZhbHVlIHBvc3Rf
bWF4X3NpemUgMTEwMDAwMDAwCitwaHBfdmFsdWUgbWVtb3J5X2xpbWl0IDEyMDAwMDAwMAorcGhw
X3ZhbHVlIG1heF9pbnB1dF90aW1lIDYwCis8L0lmTW9kdWxlPgpJbmRleDogV2Vic2l0ZXMvdGVz
dC1yZXN1bHRzL2luZGV4Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvdGVzdC1yZXN1bHRz
L2luZGV4Lmh0bWwJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvaW5kZXgu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorPHRpdGxlPldlYktpdCBUZXN0IFJlc3VsdHM8L3RpdGxlPgorPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvY29tbW9uLmNzcyI+Cis8c2NyaXB0IHNyYz0ianMvYXV0
b2NvbXBsZXRlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvYnVpbGQuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9ImpzL2RvbS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KworPGhlYWRlciBpZD0idGl0bGUiPgorPGgxPjxhIGhyZWY9Ii8iPldlYktpdCBUZXN0IFJlc3Vs
dHM8L2E+PC9oMT4KKzx1bD4KKyAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2J1aWxkLndlYmtpdC5v
cmcvd2F0ZXJmYWxsIj5XYXRlcmZhbGw8L2E+PC9saT4KKzwvdWw+Cis8L2hlYWRlcj4KKzxzY3Jp
cHQ+CisKK2Z1bmN0aW9uIHNhbml0aXplKCkgeworICAgIHZhciB0ZXh0YXJlYSA9IGRvY3VtZW50
LnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk7CisgICAgdmFyIHJhd0lucHV0ID0gdGV4dGFyZWEu
dmFsdWU7CisgICAgdmFyIHVybHMgPSByZW1vdmVKdW5rRnJvbVJlc3VsdHNQYWdlKHJlbW92ZUp1
bmtzRnJvbU5SV1RTdGRvdXQocmF3SW5wdXQpKS5zcGxpdCgnXG4nKTsKKyAgICB0ZXh0YXJlYS52
YWx1ZSA9IHVybHMuZmlsdGVyKGZ1bmN0aW9uICh1cmwpIHsgcmV0dXJuIHVybC5sZW5ndGg7IH0p
LmpvaW4oJ1xuJyk7Cit9CisKKzwvc2NyaXB0PgorCis8Zm9ybSBpZD0ibmF2aWdhdGlvbkJhciIg
b25zdWJtaXQ9IlRlc3RSZXN1bHRzVmlldy5mZXRjaFRlc3QodGhpc1sndGVzdE5hbWUnXS52YWx1
ZSk7CisgICAgVGVzdFJlc3VsdHNWaWV3LnVwZGF0ZUxvY2F0aW9uSGFzaCgpOworICAgIHJldHVy
biBmYWxzZTsiPgorPGlucHV0IGlkPSJ0ZXN0TmFtZSIgdHlwZT0idGV4dCIgc2l6ZT0iMTUwIiBv
bnBhc3RlPSJwYXN0ZUhlbHBlcih0aGlzLCBldmVudCkiCisgICAgcGxhY2Vob2xkZXI9IlR5cGUg
aW4gYSB0ZXN0IG5hbWUsIG9yIGNvcHkgYW5kIHBhc3RlIHRlc3QgbmFtZXMgb24gcmVzdWx0cy5o
dG1sIG9yIE5SV1Qgc3Rkb3V0IChpbmNsdWRpbmcganVua3MpIj48L2Zvcm0+CisKKzxkaXYgaWQ9
ImNvbnRhaW5lciI+PC9kaXY+Cis8ZGl2IGlkPSJ0b29sdGlwQ29udGFpbmVyIj48L2Rpdj4KKwor
PHN0eWxlPgorCisjdGVzdE5hbWUgeworICAgIHdpZHRoOiA5OSU7CisgICAgZm9udC1zaXplOiAx
ZW07CisgICAgb3V0bGluZTogbm9uZTsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOworICAg
IGJvcmRlci1yYWRpdXM6IDVweDsKKyAgICBwYWRkaW5nOiA1cHg7Cit9CisKKy50ZXN0UmVzdWx0
cyB7CisgICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7
CisgICAgcGFkZGluZzogNXB4OworICAgIG1hcmdpbjogMTBweCAwcHg7CisgICAgcG9zaXRpb246
IHJlbGF0aXZlOworfQorCisuY2xvc2VCdXR0b24geworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
KyAgICByaWdodDogNXB4OworICAgIHRvcDogNXB4OworICAgIHdpZHRoOiAxZW07CisgICAgaGVp
Z2h0OiAxZW07CisgICAgc3Ryb2tlOiAjOTk5OworfQorCisucmVzdWx0c1RhYmxlIHsKKyAgICBm
b250LXNpemU6IHNtYWxsOworICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CisgICAgYm9y
ZGVyOiAycHggc29saWQgI2ZmZjsKKyAgICBwYWRkaW5nOiAwOworICAgIG1hcmdpbjogMDsKK30K
KworLnJlc3VsdHNUYWJsZSBjYXB0aW9uIHsKKyAgICBmb250LXNpemU6IGxhcmdlOworICAgIGZv
bnQtd2VpZ2h0OiBub3JtYWw7CisgICAgdGV4dC1hbGlnbjogbGVmdDsKKyAgICBtYXJnaW4tYm90
dG9tOiAwLjNlbTsKKyAgICB3aGl0ZS1zcGFjZTogcHJlOworfQorCisucmVzdWx0c1RhYmxlIHRk
LAorLnJlc3VsdHNUYWJsZSB0aCB7CisgICAgYm9yZGVyOiAycHggc29saWQgI2ZmZjsKKyAgICBw
YWRkaW5nOiAwOworICAgIG1hcmdpbjogMDsKK30KKworLnJlc3VsdHNUYWJsZSB0aCwKKy5yZXN1
bHRzVGFibGUgLnBhc3NpbmdSYXRlIHsKKyAgICBmb250LXdlaWdodDogbm9ybWFsOworICAgIHBh
ZGRpbmctcmlnaHQ6IDEwcHg7Cit9CisKKy5yZXN1bHRzVGFibGUgdGggeworICAgIHdpZHRoOiAx
NWVtOworfQorCisucmVzdWx0c1RhYmxlIC5wYXNzaW5nUmF0ZSB7CisgICAgd2lkdGg6IDNlbTsK
K30KKworLnJlc3VsdHNUYWJsZSAucmVzdWx0Q2VsbCB7CisgICAgZGlzcGxheTogaW5saW5lLWJs
b2NrOworICAgIHBhZGRpbmc6IDAuMmVtIDAuMmVtOworfQorCisucmVzdWx0c1RhYmxlIGEgewor
ICAgIGRpc3BsYXk6IGJsb2NrOworICAgIHdpZHRoOiAxZW07CisgICAgaGVpZ2h0OiAxLjVlbTsK
KyAgICBib3JkZXItcmFkaXVzOiAzcHg7Cit9CisKKy5yZXN1bHRzVGFibGUgLlBBU1MgYSB7Cisg
ICAgYmFja2dyb3VuZC1jb2xvcjogIzBjMzsKK30KKworLnJlc3VsdHNUYWJsZSAuVEVYVCBhIHsK
KyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzMzOworfQorCisucmVzdWx0c1RhYmxlIC5JTUFHRSBh
IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2NmOworfQorCisucmVzdWx0c1RhYmxlIC5URVhU
LlBBU1MgYSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2NmMzsKK30KKworLnJlc3VsdHNUYWJs
ZSAuQ1JBU0ggYSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2YwMDsKK30KKworLmNhbmRpZGF0
ZVdpbmRvdyB7CisgICAgei1pbmRleDogOTk5OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAg
ICBiYWNrZ3JvdW5kOiB3aGl0ZTsKKyAgICBjb2xvcjogYmxhY2s7CisgICAgYm9yZGVyOiAxcHgg
c29saWQgI2NjYzsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7CisgICAgbWFyZ2luOiA1cHggMCAw
IDA7CisgICAgcGFkZGluZzogNXB4OworICAgIGZvbnQtc2l6ZTogMWVtOworICAgIGxpc3Qtc3R5
bGU6IG5vbmU7Cit9CisKKy5jYW5kaWRhdGVXaW5kb3cgZW0geworICAgIGJhY2tncm91bmQtY29s
b3I6ICNjY2M7CisgICAgZm9udC1zdHlsZTogbm9ybWFsOworfQorCisuY2FuZGlkYXRlV2luZG93
IC5zZWxlY3RlZCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogIzBjZjsKKyAgICBjb2xvcjogd2hp
dGU7Cit9CisKKyN0b29sdGlwQ29udGFpbmVyIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7Cit9
CisKKy50b29sdGlwIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgYm9yZGVyLXJhZGl1
czogNXB4OworICAgIHBhZGRpbmc6IDVweDsKKyAgICBvcGFjaXR5OiAwLjk7CisgICAgYmFja2dy
b3VuZDogIzMzMzsKKyAgICBjb2xvcjogI2VlZTsKKyAgICBmb250LXNpemU6IHNtYWxsOworICAg
IGxpbmUtaGVpZ2h0OiAxMzAlOworfQorCisudG9vbHRpcDphZnRlciB7CisgICAgcG9zaXRpb246
IGFic29sdXRlOworICAgIHdpZHRoOiAwOworICAgIGhlaWdodDogMDsKKyAgICBsZWZ0OiA1MCU7
CisgICAgbWFyZ2luLWxlZnQ6IC05cHg7CisgICAgYm90dG9tOiAtMTlweDsKKyAgICBjb250ZW50
OiAiIjsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBib3JkZXItc3R5bGU6IHNvbGlkOworICAg
IGJvcmRlci13aWR0aDogMTBweDsKKyAgICBib3JkZXItY29sb3I6ICMzMzMgdHJhbnNwYXJlbnQg
dHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7Cit9CisKKy50b29sdGlwIHVsLAorLnRvb2x0aXAgbGkg
eworICAgIHBhZGRpbmc6IDA7CisgICAgbWFyZ2luOiAwOworICAgIGxpc3Qtc3R5bGU6IG5vbmU7
Cit9CisKKy50b29sdGlwIGEgeworICAgIGNvbG9yOiB3aGl0ZTsKKyAgICB0ZXh0LXNoYWRvdzog
bm9uZTsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworPC9zdHlsZT4KKzxz
Y3JpcHQ+CisKK3ZhciBUZXN0UmVzdWx0c1ZpZXcgPSBuZXcgKGZ1bmN0aW9uICgpIHsKKyAgICB2
YXIgdG9vbHRpcENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sdGlwQ29u
dGFpbmVyJyk7CisKKyAgICB0b29sdGlwQ29udGFpbmVyLm9uY2xpY2sgPSBmdW5jdGlvbiAoZXZl
bnQpIHsgZXZlbnQuaW5zaWRlVG9vbHRpcCA9IHRydWU7IH0KKyAgICBkb2N1bWVudC5hZGRFdmVu
dExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICBpZiAoIWV2ZW50
Lmluc2lkZVRvb2x0aXApCisgICAgICAgICAgICB0b29sdGlwQ29udGFpbmVyLnN0eWxlLmRpc3Bs
YXkgPSAnbm9uZSc7CisgICAgfSk7CisKKyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignaGFz
aGNoYW5nZScsIGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICBUZXN0UmVzdWx0c1ZpZXcubG9j
YXRpb25IYXNoQ2hhbmdlZCgpOworICAgIH0pOworCisgICAgdGhpcy5fdG9vbHRpcENvbnRhaW5l
ciA9IHRvb2x0aXBDb250YWluZXI7CisgICAgdGhpcy5fdGVzdHMgPSBbXTsKKyAgICB0aGlzLl9v
bGRIYXNoID0gbnVsbDsKKyAgICB0aGlzLl9idWlsZGVycyA9IFtdOworICAgIHRoaXMuX3NsYXZl
cyA9IFtdOworICAgIHRoaXMuX3JlcG9zaXRvcmllcyA9IFtdOworfSk7CisKK1Rlc3RSZXN1bHRz
Vmlldy5zZXRCdWlsZGVycyA9IGZ1bmN0aW9uIChidWlsZGVycykgeworICAgIHRoaXMuX2J1aWxk
ZXJzID0gYnVpbGRlcnM7Cit9CisKK1Rlc3RSZXN1bHRzVmlldy5zZXRTbGF2ZXMgPSBmdW5jdGlv
biAoc2xhdmVzKSB7CisgICAgdGhpcy5fc2xhdmVzID0gc2xhdmVzOworfQorCitUZXN0UmVzdWx0
c1ZpZXcuc2V0UmVwb3NpdG9yaWVzID0gZnVuY3Rpb24gKHJlcG9zaXRvcmllcykgeworICAgIHRo
aXMuX3JlcG9zaXRvcmllcyA9IHJlcG9zaXRvcmllczsKK30KKworVGVzdFJlc3VsdHNWaWV3LnNo
b3dUb29sdGlwID0gZnVuY3Rpb24gKGFuY2hvciwgY29udGVudEVsZW1lbnQpIHsKKyAgICB2YXIg
dG9vbHRpcENvbnRhaW5lciA9IHRoaXMuX3Rvb2x0aXBDb250YWluZXI7CisgICAgdG9vbHRpcENv
bnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gbnVsbDsKKworICAgIHdoaWxlICh0b29sdGlwQ29udGFp
bmVyLmZpcnN0Q2hpbGQpCisgICAgICAgIHRvb2x0aXBDb250YWluZXIucmVtb3ZlQ2hpbGQodG9v
bHRpcENvbnRhaW5lci5maXJzdENoaWxkKTsKKyAgICB0b29sdGlwQ29udGFpbmVyLmFwcGVuZENo
aWxkKGNvbnRlbnRFbGVtZW50KTsKKworICAgIHZhciByZWN0ID0gYW5jaG9yLmdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpOworICAgIHRvb2x0aXBDb250YWluZXIuc3R5bGUubGVmdCA9IChyZWN0Lmxl
ZnQgLSBjb250ZW50RWxlbWVudC5vZmZzZXRXaWR0aCAvIDIgKyBhbmNob3Iub2Zmc2V0V2lkdGgg
LyAyKSArICdweCc7CisgICAgdG9vbHRpcENvbnRhaW5lci5zdHlsZS50b3AgPSAocmVjdC50b3Ag
LSBjb250ZW50RWxlbWVudC5jbGllbnRIZWlnaHQgLSA1KSArICdweCc7Cit9CisKK1Rlc3RSZXN1
bHRzVmlldy5fdXJsRnJvbUJ1aWxkZXIgPSBmdW5jdGlvbiAodXJsVHlwZSwgbWFzdGVyLCBidWls
ZGVyLCByZXZpc2lvbiwgYnVpbGQpIHsKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5
IG1ha2UgdGhpcyBjb25maWd1cmFibGUgb3IgZmV0Y2ggZnJvbSBidWlsZGJvdCBjb25maWd1cmFy
YXRpb24uCisgICAgcmV0dXJuIHsKKyAgICAgICAgImJ1aWxkIjogImh0dHA6Ly8kbWFzdGVyL2J1
aWxkZXJzLyRidWlsZGVyL2J1aWxkcy8kYnVpbGQiLAorICAgICAgICAicmVzdWx0IjogImh0dHA6
Ly8kbWFzdGVyL3Jlc3VsdHMvJGJ1aWxkZXIvciRyZXZpc2lvbiUyMCgkYnVpbGQpL3Jlc3VsdHMu
aHRtbCIKKyAgICB9W3VybFR5cGVdLnJlcGxhY2UoL1wkbWFzdGVyL2csIG1hc3RlcikucmVwbGFj
ZSgvXCRidWlsZGVyL2csIGJ1aWxkZXIpCisgICAgICAgIC5yZXBsYWNlKC9cJHJldmlzaW9uL2cs
IHJldmlzaW9uKS5yZXBsYWNlKC9cJGJ1aWxkL2csIGJ1aWxkKTsKK30KKworVGVzdFJlc3VsdHNW
aWV3Ll9jcmVhdGVSZXN1bHRDZWxsID0gZnVuY3Rpb24gKG1hc3RlciwgYnVpbGRlciwgcmVzdWx0
LCBwcmV2aW91c1Jlc3VsdCkgeworICAgIHZhciBidWlsZFRpbWUgPSByZXN1bHRbJ2J1aWxkVGlt
ZSddOworICAgIHZhciByZXZpc2lvbiA9IHJlc3VsdFsncmV2aXNpb24nXTsKKyAgICB2YXIgc2xh
dmUgPSByZXN1bHRbJ3NsYXZlJ107CisgICAgdmFyIGJ1aWxkID0gcmVzdWx0WydidWlsZE51bWJl
ciddOworICAgIHZhciBhY3R1YWwgPSByZXN1bHRbJ2FjdHVhbCddOworICAgIHZhciBleHBlY3Rl
ZCA9IHJlc3VsdFsnZXhwZWN0ZWQnXTsKKyAgICB2YXIgYW5jaG9yID0gZWxlbWVudCgnYScsIHsn
aHJlZic6IHRoaXMuX3VybEZyb21CdWlsZGVyKCdyZXN1bHQnLCBtYXN0ZXIsIGJ1aWxkZXIsIHJl
dmlzaW9uLCBidWlsZCl9KTsKKyAgICBhbmNob3Iub25tb3VzZWVudGVyID0gZnVuY3Rpb24gKCkg
eworICAgICAgICB2YXIgcmVwb3NpdG9yeUJ5SWQgPSBUZXN0UmVzdWx0c1ZpZXcuX3JlcG9zaXRv
cmllczsKKyAgICAgICAgdmFyIGZvcm1hdHRlZFJldmlzaW9ucyA9IHJlc3VsdC5idWlsZC5mb3Jt
YXR0ZWRSZXZpc2lvbnMocHJldmlvdXNSZXN1bHQgPyBwcmV2aW91c1Jlc3VsdC5idWlsZCA6IG51
bGwpOworICAgICAgICB2YXIgcmV2aXNpb25EZXNjcmlwdGlvbiA9ICcnOworICAgICAgICBmb3Ig
KHZhciByZXBvc2l0b3J5TmFtZSBpbiBmb3JtYXR0ZWRSZXZpc2lvbnMpIHsKKyAgICAgICAgICAg
IHZhciByZXZpc2lvbiA9IGZvcm1hdHRlZFJldmlzaW9uc1tyZXBvc2l0b3J5TmFtZV07CisgICAg
ICAgICAgICBpZiAocmV2aXNpb25EZXNjcmlwdGlvbikKKyAgICAgICAgICAgICAgICByZXZpc2lv
bkRlc2NyaXB0aW9uICs9ICcsICc7CisgICAgICAgICAgICBpZiAocmV2aXNpb24udXJsKQorICAg
ICAgICAgICAgICAgIHJldmlzaW9uRGVzY3JpcHRpb24gKz0gcmVwb3NpdG9yeU5hbWUgKyAnOiAn
ICsgcmV2aXNpb24udXJsOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldmlz
aW9uRGVzY3JpcHRpb24gKz0gcmV2aXNpb24ubGFiZWw7CisgICAgICAgIH0KKworICAgICAgICBU
ZXN0UmVzdWx0c1ZpZXcuc2hvd1Rvb2x0aXAoYW5jaG9yLCBlbGVtZW50KCdkaXYnLCB7J2NsYXNz
JzogJ3Rvb2x0aXAnfSwgWworICAgICAgICAgICAgZWxlbWVudCgndWwnLCBbCisgICAgICAgICAg
ICAgICAgZWxlbWVudCgnbGknLCBbJ0J1aWxkIFRpbWU6ICcgKyByZXN1bHQuYnVpbGQuZm9ybWF0
dGVkQnVpbGRUaW1lKCldKSwKKyAgICAgICAgICAgICAgICBlbGVtZW50KCdsaScsIFsnUmV2aXNp
b246ICcgKyAgcmV2aXNpb25EZXNjcmlwdGlvbl0pLAorICAgICAgICAgICAgICAgIGVsZW1lbnQo
J2xpJywgWydCdWlsZDogJywgZWxlbWVudCgnYScsIHsnaHJlZic6IFRlc3RSZXN1bHRzVmlldy5f
dXJsRnJvbUJ1aWxkZXIoJ2J1aWxkJywgbWFzdGVyLCBidWlsZGVyLCByZXZpc2lvbiwgYnVpbGQp
fSwgW2J1aWxkXSldKSwKKyAgICAgICAgICAgICAgICBlbGVtZW50KCdsaScsIFsnUmVzdWx0OiAn
ICsgYWN0dWFsXSksCisgICAgICAgICAgICBdKQorICAgICAgICBdKSk7CisgICAgfQorICAgIHZh
ciBjZWxsID0gZWxlbWVudCgnc3BhbicsIHsKKyAgICAgICAgJ2NsYXNzJzogYWN0dWFsICsgJyBy
ZXN1bHRDZWxsJywKKyAgICB9LCBbYW5jaG9yXSk7CisgICAgcmV0dXJuIGNlbGw7Cit9CisKK1Rl
c3RSZXN1bHRzVmlldy5fcG9wdWxhdGVQYW5lID0gZnVuY3Rpb24odGVzdE5hbWUsIHJlc3VsdHMs
IHNlY3Rpb24pIHsKKyAgICB2YXIgdGFibGUgPSBlbGVtZW50KCd0YWJsZScsIHsnY2xhc3MnOiAn
cmVzdWx0c1RhYmxlJ30sIFtlbGVtZW50KCdjYXB0aW9uJywgW3Rlc3ROYW1lXSldKTsKKyAgICB2
YXIgcmVzdWx0c0J5QnVpbGRlciA9IHJlc3VsdHNbJ2J1aWxkZXJzJ107CisgICAgZm9yICh2YXIg
YnVpbGRlcklkIGluIHJlc3VsdHNCeUJ1aWxkZXIpIHsKKyAgICAgICAgdmFyIHJlc3VsdHMgPSBy
ZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJJZF07CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
cmVzdWx0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgcmVzdWx0c1tpXS5idWlsZCA9IG5l
dyBUZXN0QnVpbGQodGhpcy5fcmVwb3NpdG9yaWVzLCB0aGlzLl9idWlsZGVycywgcmVzdWx0c1tp
XSk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgc29ydGVkUmVzdWx0cyA9IHJlc3VsdHMuc29y
dChmdW5jdGlvbiAocmVzdWx0MSwgcmVzdWx0MikgeyByZXR1cm4gcmVzdWx0MS5idWlsZC50aW1l
KCkgLSByZXN1bHQyLmJ1aWxkLnRpbWUoKTsgfSk7CisgICAgICAgIHZhciBjZWxscyA9IG5ldyBB
cnJheShzb3J0ZWRSZXN1bHRzLmxlbmd0aCk7CisgICAgICAgIHZhciBidWlsZGVyID0gdGhpcy5f
YnVpbGRlcnNbYnVpbGRlcklkXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3J0ZWRS
ZXN1bHRzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgY2VsbHNbaV0gPSB0aGlzLl9jcmVhdGVS
ZXN1bHRDZWxsKGJ1aWxkZXIubWFzdGVyLCBidWlsZGVyLm5hbWUsIHNvcnRlZFJlc3VsdHNbaV0s
IHNvcnRlZFJlc3VsdHNbaSAtIDFdKTsKKworICAgICAgICB2YXIgcGFzc0NvdW50ID0gY2VsbHMu
ZmlsdGVyKGZ1bmN0aW9uIChjZWxsKSB7IHJldHVybiBjZWxsLmNsYXNzTmFtZSA9PSAnUEFTUyc7
IH0pLmxlbmd0aDsKKyAgICAgICAgdmFyIHBhc3NpbmdSYXRlID0gTWF0aC5yb3VuZChwYXNzQ291
bnQgLyBjZWxscy5sZW5ndGggKiAxMDApICsgJyUnOworICAgICAgICB0YWJsZS5hcHBlbmRDaGls
ZChlbGVtZW50KCd0cicsIFtlbGVtZW50KCd0aCcsIFtidWlsZGVyLm5hbWVdKSwgZWxlbWVudCgn
dGQnLCB7J2NsYXNzJzogJ3Bhc3NpbmdSYXRlJ30sIFtwYXNzaW5nUmF0ZV0pLAorICAgICAgICAg
ICAgZWxlbWVudCgndGQnLCBjZWxscyldKSk7CisgICAgICAgIC8vIEZJWE1FOiBBZGQgYSBtYXN0
ZXIgbmFtZSBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lLgorICAgIH0KKyAgICBzZWN0aW9uLmFw
cGVuZENoaWxkKHRhYmxlKTsKK30KKworVGVzdFJlc3VsdHNWaWV3LmZldGNoVGVzdCA9IGZ1bmN0
aW9uICh0ZXN0TmFtZSkgeworICAgIGlmICh0aGlzLl90ZXN0cy5pbmRleE9mKHRlc3ROYW1lKSA+
PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICB2YXIg
Y2xvc2VCdXR0b24gPSBlbGVtZW50KCdkaXYnLCB7J2NsYXNzJzogJ2Nsb3NlQnV0dG9uJ30pOwor
ICAgIGNsb3NlQnV0dG9uLmlubmVySFRNTCA9ICc8c3ZnIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48
ZyBzdHJva2Utd2lkdGg9IjEwIj4nCisgICAgICAgICsgJzxjaXJjbGUgY3g9IjUwIiBjeT0iNTAi
IHI9IjQ1IiBmaWxsPSJ0cmFuc3BhcmVudCI+PC9jaXJjbGU+PHBvbHlnb24gcG9pbnRzPSIzMCwz
MCA3MCw3MCI+PC9wb2x5Z29uPicKKyAgICAgICAgKyAnPHBvbHlnb24gcG9pbnRzPSIzMCw3MCA3
MCwzMCI+PC9wb2x5Z29uPjwvZz48L3N2Zz4nOworICAgIGNsb3NlQnV0dG9uLmFkZEV2ZW50TGlz
dGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAgICBzZWxmLl9yZW1v
dmVUZXN0KHRlc3ROYW1lKTsKKyAgICAgICAgICAgIHNlY3Rpb24ucGFyZW50Tm9kZS5yZW1vdmVD
aGlsZChzZWN0aW9uKTsKKyAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAg
ICAgIH0pOworICAgIHZhciBzZWN0aW9uID0gZWxlbWVudCgnc2VjdGlvbicsIHsnaWQnOiB0ZXN0
TmFtZSwgJ2NsYXNzJzogJ3Rlc3RSZXN1bHRzJ30sIFtjbG9zZUJ1dHRvbl0pOworCisgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpLmFwcGVuZENoaWxkKHNlY3Rpb24pOwor
CisgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vcGVuKCJHRVQi
LCAnYXBpL3Jlc3VsdHMucGhwP3Rlc3Q9JyArIHRlc3ROYW1lLCB0cnVlKTsgIAorICAgIHhoci5v
bmxvYWQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICB2YXIgcmVzcG9uc2UgPSBKU09OLnBh
cnNlKHhoci5yZXNwb25zZSk7CisgICAgICAgIGlmIChyZXNwb25zZVsnc3RhdHVzJ10gIT0gJ09L
JykgeworICAgICAgICAgICAgc2VjdGlvbi5hcHBlbmRDaGlsZCh0ZXh0KCdGYWlsZWQgdG8gbG9h
ZCByZXN1bHRzIGZvciAnICsgdGVzdE5hbWUgKyAnOiAnICsgcmVzcG9uc2VbJ3N0YXR1cyddKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzZWxmLl9wb3B1bGF0
ZVBhbmUodGVzdE5hbWUsIHJlc3BvbnNlLCBzZWN0aW9uKTsKKyAgICB9CisgICAgeGhyLnNlbmQo
KTsKKyAgICB0aGlzLl90ZXN0cy5wdXNoKHRlc3ROYW1lKTsKK30KKworVGVzdFJlc3VsdHNWaWV3
Ll9yZW1vdmVUZXN0ID0gZnVuY3Rpb24gKHRlc3ROYW1lKSB7CisgICAgdmFyIGluZGV4ID0gdGhp
cy5fdGVzdHMuaW5kZXhPZih0ZXN0TmFtZSk7CisgICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAg
cmV0dXJuOworICAgIHRoaXMuX3Rlc3RzLnNwbGljZShpbmRleCwgMSk7CisgICAgdGhpcy51cGRh
dGVMb2NhdGlvbkhhc2goKTsKK30KKworVGVzdFJlc3VsdHNWaWV3LmZldGNoVGVzdHMgPSBmdW5j
dGlvbiAodGVzdE5hbWVzLCBkb05vdFVwZGF0ZUhhc2gpIHsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHRlc3ROYW1lcy5sZW5ndGg7IGkrKykKKyAgICAgICAgdGhpcy5mZXRjaFRlc3QodGVzdE5h
bWVzW2ldLCBkb05vdFVwZGF0ZUhhc2gpOworICAgIHRoaXMudXBkYXRlTG9jYXRpb25IYXNoKCk7
Cit9CisKK1Rlc3RSZXN1bHRzVmlldy51cGRhdGVMb2NhdGlvbkhhc2ggPSBmdW5jdGlvbiAoKSB7
CisgICAgdmFyIHBhcmFtcyA9IHsKKyAgICAgICAgJ3Rlc3RzJzogdGhpcy5fdGVzdHMuam9pbign
LCcpCisgICAgfTsKKyAgICB2YXIgaGFzaCA9ICcnOworICAgIGZvciAodmFyIGtleSBpbiBwYXJh
bXMpCisgICAgICAgIGhhc2ggKz0gZGVjb2RlVVJJQ29tcG9uZW50KGtleSkgKyAnPScgKyBkZWNv
ZGVVUklDb21wb25lbnQocGFyYW1zW2tleV0pOworICAgIGxvY2F0aW9uLmhhc2ggPSBoYXNoOwor
ICAgIHRoaXMuX29sZEhhc2ggPSBsb2NhdGlvbi5oYXNoOworfQorCitUZXN0UmVzdWx0c1ZpZXcu
bG9jYXRpb25IYXNoQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgbmV3SGFzaCA9IGxv
Y2F0aW9uLmhhc2g7CisgICAgaWYgKG5ld0hhc2ggPT0gdGhpcy5fb2xkSGFzaCkKKyAgICAgICAg
cmV0dXJuOworICAgIHRoaXMuX29sZEhhc2ggPSBuZXdIYXNoOworICAgIHRoaXMuX3Rlc3RzID0g
W107CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpLmlubmVySFRNTCA9
ICcnOworICAgIHRoaXMubG9hZFRlc3RzRnJvbUxvY2F0aW9uSGFzaCgpOworfQorCitUZXN0UmVz
dWx0c1ZpZXcubG9hZFRlc3RzRnJvbUxvY2F0aW9uSGFzaCA9IGZ1bmN0aW9uICgpIHsKKyAgICB2
YXIgcGFyc2VkID0ge307CisgICAgbG9jYXRpb24uaGFzaC5zdWJzdHIoMSkuc3BsaXQoJyYnKS5m
b3JFYWNoKGZ1bmN0aW9uIChjb21wb25lbnQpIHsKKyAgICAgICAgdmFyIGVxdWFsUG9zaXRpb24g
PSBjb21wb25lbnQuaW5kZXhPZignPScpOworICAgICAgICBpZiAoZXF1YWxQb3NpdGlvbiA8IDAp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciBuYW1lID0gZGVjb2RlVVJJQ29tcG9u
ZW50KGNvbXBvbmVudC5zdWJzdHIoMCwgZXF1YWxQb3NpdGlvbikpOworICAgICAgICBwYXJzZWRb
bmFtZV0gPSBkZWNvZGVVUklDb21wb25lbnQoY29tcG9uZW50LnN1YnN0cihlcXVhbFBvc2l0aW9u
ICsgMSkpOworICAgIH0pOworICAgIGlmICghcGFyc2VkWyd0ZXN0cyddKQorICAgICAgICByZXR1
cm47CisgICAgdmFyIGRvTm90VXBkYXRlSGFzaCA9IHRydWU7CisgICAgdGhpcy5mZXRjaFRlc3Rz
KHBhcnNlZFsndGVzdHMnXS5zcGxpdCgnLCcpLCBkb05vdFVwZGF0ZUhhc2gpOworfQorCitmdW5j
dGlvbiBmZXRjaE1hbmlmZXN0KGNhbGxiYWNrKSB7CisgICAgdmFyIHhociA9IG5ldyBYTUxIdHRw
UmVxdWVzdCgpOworICAgIHhoci5vcGVuKCJHRVQiLCAnYXBpL21hbmlmZXN0LnBocCcsIHRydWUp
OyAgCisgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciByZXNw
b25zZSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKTsKKyAgICAgICAgaWYgKHJlc3BvbnNlWydz
dGF0dXMnXSAhPSAnT0snKSB7CisgICAgICAgICAgICBhbGVydCgnRmFpbGVkIHRvIGxvYWQgbWFu
aWZlc3Q6JyArIHJlc3BvbnNlWydzdGF0dXMnXSk7CisgICAgICAgICAgICBjb25zb2xlLmxvZyhy
ZXNwb25zZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FsbGJh
Y2socmVzcG9uc2UpOworICAgIH0gIAorICAgIHhoci5zZW5kKCk7Cit9CisKK2ZldGNoTWFuaWZl
c3QoZnVuY3Rpb24gKHJlc3BvbnNlKSB7CisgICAgdmFyIHRlc3ROYW1lcyA9IHJlc3BvbnNlWyd0
ZXN0cyddLm1hcChmdW5jdGlvbiAodGVzdCkgeyByZXR1cm4gdGVzdFsnbmFtZSddOyB9KQorICAg
IHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0TmFtZScpOworICAgIGlu
cHV0LmF1dG9jb21wbGV0ZXIgPSBuZXcgQXV0b2NvbXBsZXRlcihpbnB1dCwgdGVzdE5hbWVzKTsK
KworICAgIFRlc3RSZXN1bHRzVmlldy5zZXRCdWlsZGVycyhyZXNwb25zZVsnYnVpbGRlcnMnXSk7
CisgICAgVGVzdFJlc3VsdHNWaWV3LnNldFNsYXZlcyhyZXNwb25zZVsnc2xhdmVzJ10pOworICAg
IFRlc3RSZXN1bHRzVmlldy5zZXRSZXBvc2l0b3JpZXMocmVzcG9uc2VbJ3JlcG9zaXRvcmllcydd
KTsKKyAgICBUZXN0UmVzdWx0c1ZpZXcubG9hZFRlc3RzRnJvbUxvY2F0aW9uSGFzaCgpOworfSk7
CisKK2Z1bmN0aW9uIHBhc3RlSGVscGVyKGlucHV0LCBldmVudCkgeworICAgIGZ1bmN0aW9uIHJl
bW92ZUp1bmtzRnJvbU5SV1RTdGRvdXQoaW5wdXQpIHsKKyAgICAgICAgcmV0dXJuIGlucHV0LnJl
cGxhY2UoLyhcW1tcdyBdK1xdKXwoLitcOi4rKS9nLCAnJykucmVwbGFjZSgvXlsgXHRdK3xbIFx0
XSskL2dtLCAnJyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcmVtb3ZlSnVua0Zyb21SZXN1bHRz
UGFnZShpbnB1dCkgeworICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvKF5bXlwvXSskKXwo
XlwrKS9nbSwgJycpLnJlcGxhY2UoL1woW14pXStcKS9nLCAnJykucmVwbGFjZSgvXHMrW0EtWmEt
el0rKFxzK1tBLVphLXpdKykqXHMqJC9nbSwgJycpOworICAgIH0KKworICAgIHZhciB0ZXh0ID0g
ZXZlbnQuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJyk7CisgICAgaWYgKHRleHQu
aW5kZXhPZignXG4nKSA8IDApCisgICAgICAgIHJldHVybjsKKworICAgIHZhciB1cmxzID0gcmVt
b3ZlSnVua0Zyb21SZXN1bHRzUGFnZShyZW1vdmVKdW5rc0Zyb21OUldUU3Rkb3V0KHRleHQpKS5z
cGxpdCgnXG4nKTsKKyAgICBUZXN0UmVzdWx0c1ZpZXcuZmV0Y2hUZXN0cyh1cmxzLmZpbHRlcihm
dW5jdGlvbiAodXJsKSB7IHJldHVybiB1cmwubGVuZ3RoOyB9KSk7CisgICAgZXZlbnQucHJldmVu
dERlZmF1bHQoKTsKK30KKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2FkbWluL2luZGV4
LnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvYWRtaW4vaW5kZXgucGhw
CShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2FkbWluL2luZGV4LnBocAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPHRpdGxlPldlYktpdCBUZXN0IFJlc3VsdHM8L3RpdGxlPgorPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiBocmVmPSIvY29tbW9uLmNzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgor
CisudW5mZXRjaGVkIHsKKyAgICBjb2xvcjogZ3JheTsKK30KKworPC9zdHlsZT4KKzwvaGVhZD4K
Kzxib2R5PgorPGhlYWRlciBpZD0idGl0bGUiPgorPGgxPjxhIGhyZWY9Ii8iPldlYktpdCBUZXN0
IFJlc3VsdHM8L2E+PC9oMT4KKzx1bD4KKyAgICA8bGk+PGEgaHJlZj0iL2FkbWluL3VwZGF0ZS1t
YXN0ZXIiPlVwZGF0ZSBNYXN0ZXI8L2E+PC9saT4KKzwvdWw+Cis8L2hlYWRlcj4KKworPGRpdiBp
ZD0ibWFpbkNvbnRlbnRzIj4KKzxwPjxzdHJvbmc+RklYTUU6IFRoaXMgcGFnZSBpcyBicm9rZW4h
PC9zdHJvbmc+PC9wPgorPD9waHAKKworcmVxdWlyZV9vbmNlKCcuLi9pbmNsdWRlL2RiLnBocCcp
OworcmVxdWlyZV9vbmNlKCcuLi9pbmNsdWRlL3Rlc3QtcmVzdWx0cy5waHAnKTsKKworZnVuY3Rp
b24gbm90aWNlKCRtZXNzYWdlKSB7CisgICAgZWNobyAiPHAgY2xhc3M9J25vdGljZSc+JG1lc3Nh
Z2U8L3A+IjsKK30KKworZGVmaW5lKCdNQVhfRkVUQ0hfQ09VTlQnLCAxMCk7CisKK2Z1bmN0aW9u
IGZldGNoX2J1aWxkZXJzKCRkYiwgJG1hc3RlcikgeworICAgIGZsdXNoKCk7CisgICAgJGJ1aWxk
ZXJzX2pzb24gPSBmZXRjaF9hbmRfcGFyc2VfdGVzdF9yZXN1bHRzX2pzb24oImh0dHA6Ly8kbWFz
dGVyL2pzb24vYnVpbGRlcnMvIik7CisgICAgaWYgKCEkYnVpbGRlcnNfanNvbikKKyAgICAgICAg
cmV0dXJuIG5vdGljZSgiRmFpbGVkIHRvIGZldGNoIG9yIGRlY29kZSAvanNvbi9idWlsZGVycyBm
cm9tICRtYXN0ZXIiKTsKKworICAgIGVjaG8gIjxoMj5GZXRjaGluZyBidWlsZHMgZnJvbSAkbWFz
dGVyPC9oMj5cbiI7CisgICAgZWNobyAiPHVsPlxuIjsKKworICAgIGZvcmVhY2ggKCRidWlsZGVy
c19qc29uIGFzICRidWlsZGVyX25hbWUgPT4gJGJ1aWxkZXJfZGF0YSkgeworICAgICAgICBpZiAo
IXN0cmlzdHIoJGJ1aWxkZXJfbmFtZSwgJ1Rlc3QnKSB8fCBzdHJpc3RyKCRidWlsZGVyX25hbWUs
ICdBcHBsZSBXaW4nKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAkYnVpbGRlcl9p
ZCA9ICRkYi0+c2VsZWN0X29yX2luc2VydF9yb3coJ2J1aWxkZXJzJywgTlVMTCwgYXJyYXkoJ21h
c3RlcicgPT4gJG1hc3RlciwgJ25hbWUnID0+ICRidWlsZGVyX25hbWUpKTsKKyAgICAgICAgJGVz
Y2FwZWRfYnVpbGRlcl9uYW1lID0gaHRtbHNwZWNpYWxjaGFycygkYnVpbGRlcl9uYW1lKTsKKyAg
ICAgICAgZWNobyAiPGxpPjxlbT4kZXNjYXBlZF9idWlsZGVyX25hbWU8L2VtPiAoaWQ6ICRidWls
ZGVyX2lkKSAtICI7CisKKyAgICAgICAgJGZldGNoQ291bnQgPSAwOworICAgICAgICAkYnVpbGRz
ID0gJGJ1aWxkZXJfZGF0YVsnY2FjaGVkQnVpbGRzJ107CisgICAgICAgIGZvcmVhY2ggKGFycmF5
X3JldmVyc2UoJGJ1aWxkcykgYXMgJGJ1aWxkX251bWJlcikgeworICAgICAgICAgICAgJGJ1aWxk
X251bWJlciA9IGludHZhbCgkYnVpbGRfbnVtYmVyKTsKKyAgICAgICAgICAgICRidWlsZCA9ICRk
Yi0+c2VsZWN0X29yX2luc2VydF9yb3coJ2J1aWxkcycsIE5VTEwsIGFycmF5KCdidWlsZGVyJyA9
PiAkYnVpbGRlcl9pZCwgJ251bWJlcicgPT4gJGJ1aWxkX251bWJlciksIE5VTEwsICcqJyk7Cisg
ICAgICAgICAgICBpZiAoJGRiLT5pc190cnVlKCRidWlsZFsnZmV0Y2hlZCddKSkKKyAgICAgICAg
ICAgICAgICAkY2xhc3MgPSAnZmV0Y2hlZCc7CisgICAgICAgICAgICBlbHNlIGlmICgkZmV0Y2hD
b3VudCA+PSBNQVhfRkVUQ0hfQ09VTlQpCisgICAgICAgICAgICAgICAgJGNsYXNzID0gJ3VuZmV0
Y2hlZCc7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAkY2xhc3MgPSBmZXRj
aF9idWlsZCgkZGIsICRtYXN0ZXIsICRidWlsZGVyX25hbWUsICRidWlsZFsnaWQnXSwgJGJ1aWxk
X251bWJlcikgPyAnZmV0Y2hlZCcgOiAndW5mZXRjaGVkJzsKKyAgICAgICAgICAgICAgICAkZmV0
Y2hDb3VudCsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWNobyAiPHNwYW4gY2xhc3M9
XCIkY2xhc3NcIj4kYnVpbGRfbnVtYmVyPC9hPiAiOworICAgICAgICB9CisgICAgICAgIGVjaG8g
IjwvbGk+XG4iOworICAgIH0KKyAgICBlY2hvICI8dWw+XG4iOworCisgICAgcmV0dXJuIFRSVUU7
Cit9CisKK2Z1bmN0aW9uIHVybGVuY29kZV93aXRob3V0X3BsdXMoJHVybCkgeworICAgIHJldHVy
biBzdHJfcmVwbGFjZSgnKycsICclMjAnLCB1cmxlbmNvZGUoJHVybCkpOworfQorCitmdW5jdGlv
biBmZXRjaF9idWlsZCgkZGIsICRtYXN0ZXIsICRidWlsZGVyX25hbWUsICRidWlsZF9pZCwgJGJ1
aWxkX251bWJlcikgeworICAgIGZsdXNoKCk7CisgICAgJGJ1aWxkZXJfbmFtZSA9IHVybGVuY29k
ZV93aXRob3V0X3BsdXMoJGJ1aWxkZXJfbmFtZSk7CisgICAgJGJ1aWxkX2pzb24gPSBmZXRjaF9h
bmRfcGFyc2VfdGVzdF9yZXN1bHRzX2pzb24oImh0dHA6Ly8kbWFzdGVyL2pzb24vYnVpbGRlcnMv
JGJ1aWxkZXJfbmFtZS9idWlsZHMvJGJ1aWxkX251bWJlciIpOworICAgIGlmICghJGJ1aWxkX2pz
b24gfHwgIWFycmF5X2tleV9leGlzdHMoJ3RpbWVzJywgJGJ1aWxkX2pzb24pIHx8IGNvdW50KCRi
dWlsZF9qc29uWyd0aW1lcyddKSAhPSAyKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAk
cmV2aXNpb24gPSBOVUxMOworICAgICRzbGF2ZW5hbWUgPSBOVUxMOworICAgIGZvcmVhY2ggKCRi
dWlsZF9qc29uWydwcm9wZXJ0aWVzJ10gYXMgJHByb3BlcnR5KSB7CisgICAgICAgIGlmICgkcHJv
cGVydHlbMF0gPT0gJ2dvdF9yZXZpc2lvbicpCisgICAgICAgICAgICAkcmV2aXNpb24gPSAkcHJv
cGVydHlbMV07CisgICAgICAgIGlmICgkcHJvcGVydHlbMF0gPT0gJ3NsYXZlbmFtZScpCisgICAg
ICAgICAgICAkc2xhdmVuYW1lID0gJHByb3BlcnR5WzJdOworICAgIH0KKyAgICBpZiAoISRyZXZp
c2lvbiB8fCAhJHNsYXZlbmFtZSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgJHN0YXJ0
X3RpbWUgPSBmbG9hdF90b190aW1lKCRidWlsZF9qc29uWyd0aW1lcyddWzBdKTsKKyAgICAkZW5k
X3RpbWUgPSBmbG9hdF90b190aW1lKCRidWlsZF9qc29uWyd0aW1lcyddWzFdKTsKKworICAgIGZs
dXNoKCk7CisgICAgJGZ1bGxfcmVzdWx0cyA9IGZldGNoX2FuZF9wYXJzZV90ZXN0X3Jlc3VsdHNf
anNvbigiaHR0cDovLyRtYXN0ZXIvcmVzdWx0cy8kYnVpbGRlcl9uYW1lL3IkcmV2aXNpb24lMjAo
JGJ1aWxkX251bWJlcikvZnVsbF9yZXN1bHRzLmpzb24iLCBUUlVFKTsKKyAgICByZXR1cm4gc3Rv
cmVfdGVzdF9yZXN1bHRzKCRkYiwgJGZ1bGxfcmVzdWx0cywgJGJ1aWxkX2lkLCAkcmV2aXNpb24s
ICRzdGFydF90aW1lLCAkZW5kX3RpbWUsICRzbGF2ZW5hbWUpOworfQorCiskZGIgPSBuZXcgRGF0
YWJhc2U7CitpZiAoISRkYi0+Y29ubmVjdCgpKQorICAgIG5vdGljZSgnRmFpbGVkIHRvIGNvbm5l
Y3QgdG8gdGhlIGRhdGFiYXNlJyk7CitlbHNlIGlmIChhcnJheV9rZXlfZXhpc3RzKCdtYXN0ZXIn
LCAkX0dFVCkpIHsKKyAgICAkbWFzdGVyID0gaHRtbHNwZWNpYWxjaGFycygkX0dFVFsnbWFzdGVy
J10pOyAvLyBPa2F5IHNpbmNlIGhvc3RuYW1lIHNob3VkbG4ndCBjb250YWluIGFueSBIVE1MIHNw
ZWNpYWwgY2hhcmFjdGVycy4KKyAgICBpZiAoaW5fYXJyYXkoJG1hc3RlciwgY29uZmlnKCdtYXN0
ZXJzJykpKQorICAgICAgICBmZXRjaF9idWlsZGVycygkZGIsICRtYXN0ZXIpOworICAgIGVsc2UK
KyAgICAgICAgbm90aWNlKCJUaGUgbWFzdGVyICRtYXN0ZXIgbm90IGZvdW5kIik7Cit9IGVsc2Ug
eworICAgIGVjaG8gIjx1bD5cbiI7CisgICAgZm9yZWFjaCAoY29uZmlnKCdtYXN0ZXJzJykgYXMg
JG1hc3RlcikKKyAgICAgICAgZWNobyAiPGxpPjxhIGhyZWY9XCI/bWFzdGVyPSRtYXN0ZXJcIj4k
bWFzdGVyPC9hPjwvbGk+XG4iOworICAgIGVjaG8gIjwvdWw+XG4iOworfQorCis/PjwvZGl2Pgor
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvYXBpL21hbmlm
ZXN0LnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvYXBpL21hbmlmZXN0
LnBocAkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9hcGkvbWFuaWZlc3Qu
cGhwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcgQEAKKzw/cGhwCisKK3JlcXVpcmVfb25j
ZSgnLi4vaW5jbHVkZS9qc29uLXNoYXJlZC5waHAnKTsKKworJGRiID0gY29ubmVjdCgpOworJHRl
c3RzID0gJGRiLT5mZXRjaF90YWJsZSgndGVzdHMnKTsKKworZnVuY3Rpb24gZmV0Y2hfdGFibGVf
YW5kX2NyZWF0ZV9tYXBfYnlfaWQoJHRhYmxlX25hbWUpIHsKKyAgICBnbG9iYWwgJGRiOworCisg
ICAgJHJvd3MgPSAkZGItPmZldGNoX3RhYmxlKCR0YWJsZV9uYW1lKTsKKyAgICBpZiAoISRyb3dz
KQorICAgICAgICByZXR1cm4gYXJyYXkoKTsKKworICAgICRyZXN1bHRzID0gYXJyYXkoKTsKKyAg
ICBmb3JlYWNoICgkcm93cyBhcyAkcm93KSB7CisgICAgICAgICRyZXN1bHRzWyRyb3dbJ2lkJ11d
ID0gJHJvdzsKKyAgICB9CisgICAgcmV0dXJuICRyZXN1bHRzOworfQorCitleGl0X3dpdGhfc3Vj
Y2VzcyhhcnJheSgndGVzdHMnID0+ICR0ZXN0cywKKyAgICAnYnVpbGRlcnMnID0+IGZldGNoX3Rh
YmxlX2FuZF9jcmVhdGVfbWFwX2J5X2lkKCdidWlsZGVycycpLAorICAgICdzbGF2ZXMnID0+IGZl
dGNoX3RhYmxlX2FuZF9jcmVhdGVfbWFwX2J5X2lkKCdzbGF2ZXMnKSwKKyAgICAncmVwb3NpdG9y
aWVzJyA9PiBmZXRjaF90YWJsZV9hbmRfY3JlYXRlX21hcF9ieV9pZCgncmVwb3NpdG9yaWVzJykp
KTsKKworPz4KSW5kZXg6IFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9hcGkvcmVwb3J0LnBocAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvYXBpL3JlcG9ydC5waHAJKHJldmlzaW9u
IDApCisrKyBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvYXBpL3JlcG9ydC5waHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MCBAQAorPD9waHAKKworcmVxdWlyZV9vbmNlKCcuLi9pbmNsdWRlL2pz
b24tc2hhcmVkLnBocCcpOworcmVxdWlyZV9vbmNlKCcuLi9pbmNsdWRlL3Rlc3QtcmVzdWx0cy5w
aHAnKTsKKworJGRiID0gY29ubmVjdCgpOworCityZXF1aXJlX2V4aXN0ZW5jZV9vZigkX1BPU1Qs
IGFycmF5KAorICAgICdtYXN0ZXInID0+ICcvW0EtWmEtejAtOVwuXSsvJywKKyAgICAnYnVpbGRl
cl9uYW1lJyA9PiAnL15bQS1aYS16MC05IFwoXClcLV9dKyQvJywKKyAgICAnYnVpbGRfbnVtYmVy
JyA9PiAnL15bMC05XSs/JC8nLAorICAgICdidWlsZF9zbGF2ZScgPT4gJy9eW0EtWmEtejAtOVwt
X10rJC8nLAorICAgICdyZXZpc2lvbnMnID0+ICcvXi4rPyQvJywKKyAgICAnc3RhcnRfdGltZScg
PT4gJy9eWzAtOV0rKFwuWzAtOV0rKT8kLycsCisgICAgJ2VuZF90aW1lJyA9PiAnL15bMC05XSso
XC5bMC05XSspPyQvJykpOworCitpZiAoIWFycmF5X2tleV9leGlzdHMoJ2ZpbGUnLCAkX0ZJTEVT
KSBvciAhYXJyYXlfa2V5X2V4aXN0cygndG1wX25hbWUnLCAkX0ZJTEVTWydmaWxlJ10pIG9yIGNv
dW50KCRfRklMRVNbJ2ZpbGUnXVsndG1wX25hbWUnXSkgPD0gMCkKKyAgICBleGl0X3dpdGhfZXJy
b3IoJ1Jlc3VsdHNKU09OTm90SW5jbHVkZWQnKTsKKworJHJldmlzaW9ucyA9IGpzb25fZGVjb2Rl
KCRfUE9TVFsncmV2aXNpb25zJ10sIHRydWUpOworZm9yZWFjaCAoJHJldmlzaW9ucyBhcyAkcmVw
b3NpdG9yeV9uYW1lID0+ICRyZXZpc2lvbl9kYXRhKSB7CisgICAgcmVxdWlyZV9mb3JtYXQoJ3Jl
cG9zaXRvcnlfbmFtZScsICRyZXBvc2l0b3J5X25hbWUsICcvXlx3KyQvJyk7CisgICAgcmVxdWly
ZV9leGlzdGVuY2Vfb2YoJHJldmlzaW9uX2RhdGEsIGFycmF5KAorICAgICAgICAncmV2aXNpb24n
ID0+ICcvXlthLXowLTldKyQvJywKKyAgICAgICAgJ3RpbWVzdGFtcCcgPT4gJy9eW2EtejAtOVwt
XC46VFpdKyQvJywKKyAgICApLCAncmV2aXNpb24nKTsKK30KKworJHRlc3RfcmVzdWx0cyA9IGZl
dGNoX2FuZF9wYXJzZV90ZXN0X3Jlc3VsdHNfanNvbigkX0ZJTEVTWydmaWxlJ11bJ3RtcF9uYW1l
J10pOworaWYgKCEkdGVzdF9yZXN1bHRzKQorICAgIGV4aXRfd2l0aF9lcnJvcignSW52YWxpZFJl
c3VsdHNKU09OJyk7CisKKyRzdGFydF90aW1lID0gZmxvYXRfdG9fdGltZSgkX1BPU1RbJ3N0YXJ0
X3RpbWUnXSk7CiskZW5kX3RpbWUgPSBmbG9hdF90b190aW1lKCRfUE9TVFsnZW5kX3RpbWUnXSk7
CisKKyRidWlsZF9pZCA9IGFkZF9idWlsZCgkZGIsICRfUE9TVFsnbWFzdGVyJ10sICRfUE9TVFsn
YnVpbGRlcl9uYW1lJ10sIGludHZhbCgkX1BPU1RbJ2J1aWxkX251bWJlciddKSk7CitpZiAoISRi
dWlsZF9pZCkKKyAgICBleGl0X3dpdGhfZXJyb3IoJ0ZhaWxlZFRvSW5zZXJ0QnVpbGQnLCBhcnJh
eSgnbWFzdGVyJyA9PiAkX1BPU1RbJ21hc3RlciddLCAnYnVpbGRlck5hbWUnID0+ICRfUE9TVFsn
YnVpbGRlcl9uYW1lJ10sICdidWlsZE51bWJlcicgPT4gJF9QT1NUWydidWlsZF9udW1iZXInXSkp
OworCitmb3JlYWNoICgkcmV2aXNpb25zIGFzICRyZXBvc2l0b3J5X25hbWUgPT4gJHJldmlzaW9u
X2RhdGEpIHsKKyAgICAkcmVwb3NpdG9yeV9pZCA9ICRkYi0+c2VsZWN0X29yX2luc2VydF9yb3co
J3JlcG9zaXRvcmllcycsIE5VTEwsIGFycmF5KCduYW1lJyA9PiAkcmVwb3NpdG9yeV9uYW1lKSk7
CisgICAgaWYgKCEkcmVwb3NpdG9yeV9pZCkKKyAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdGYWls
ZWRUb0luc2VydFJlcG9zaXRvcnknLCBhcnJheSgnbmFtZScgPT4gJHJlcG9zaXRvcnlfbmFtZSkp
OworCisgICAgJHJldmlzaW9uX2RhdGEgPSBhcnJheSgKKyAgICAgICAgJ3JlcG9zaXRvcnknID0+
ICRyZXBvc2l0b3J5X2lkLAorICAgICAgICAnYnVpbGQnID0+ICRidWlsZF9pZCwKKyAgICAgICAg
J3ZhbHVlJyA9PiAkcmV2aXNpb25fZGF0YVsncmV2aXNpb24nXSwKKyAgICAgICAgJ3RpbWUnID0+
IGFycmF5X2dldCgkcmV2aXNpb25fZGF0YSwgJ3RpbWVzdGFtcCcpKTsKKyAgICAkZGItPnNlbGVj
dF9vcl9pbnNlcnRfcm93KCdidWlsZF9yZXZpc2lvbnMnLCBOVUxMLCBhcnJheSgncmVwb3NpdG9y
eScgPT4gJHJlcG9zaXRvcnlfaWQsICdidWlsZCcgPT4gJGJ1aWxkX2lkKSwgJHJldmlzaW9uX2Rh
dGEsICd2YWx1ZScpCisgICAgICAgIG9yIGV4aXRfd2l0aF9lcnJvcignRmFpbGVkVG9JbnNlcnRS
ZXZpc2lvbicsIGFycmF5KCduYW1lJyA9PiAkcmVwb3NpdG9yeV9uYW1lLCAnZGF0YScgPT4gJHJl
dmlzaW9uX2RhdGEpKTsKK30KKworJHNsYXZlX2lkID0gYWRkX3NsYXZlKCRkYiwgJF9QT1NUWydi
dWlsZF9zbGF2ZSddKTsKK2lmICghc3RvcmVfdGVzdF9yZXN1bHRzKCRkYiwgJHRlc3RfcmVzdWx0
cywgJGJ1aWxkX2lkLCAkc3RhcnRfdGltZSwgJGVuZF90aW1lLCAkc2xhdmVfaWQpKQorICAgIGV4
aXRfd2l0aF9lcnJvcignRmFpbGVkVG9TdG9yZVJlc3VsdHMnLCBhcnJheSgnYnVpbGRJZCcgPT4g
JGJ1aWxkX2lkKSk7CisKK2V4aXRfd2l0aF9zdWNjZXNzKCk7CisKKz8+CkluZGV4OiBXZWJzaXRl
cy90ZXN0LXJlc3VsdHMvYXBpL3Jlc3VsdHMucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3Rl
c3QtcmVzdWx0cy9hcGkvcmVzdWx0cy5waHAJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy90ZXN0
LXJlc3VsdHMvYXBpL3Jlc3VsdHMucGhwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAK
Kzw/cGhwCisKK3JlcXVpcmVfb25jZSgnLi4vaW5jbHVkZS9qc29uLXNoYXJlZC5waHAnKTsKKwor
JGRiID0gY29ubmVjdCgpOworCityZXF1aXJlX2V4aXN0ZW5jZV9vZigkX0dFVCwgYXJyYXkoJ3Rl
c3QnID0+ICcvW0EtWmEtejAtOVwuX1wtIF0rLycpKTsKKworJHRlc3QgPSAkZGItPnNlbGVjdF9m
aXJzdF9yb3coJ3Rlc3RzJywgTlVMTCwgYXJyYXkoJ25hbWUnID0+ICRfR0VUWyd0ZXN0J10pKTsK
K2lmICghJHRlc3QpCisgICAgZXhpdF93aXRoX2Vycm9yKCdUZXN0Tm90Rm91bmQnKTsKKworJHJl
c3VsdF9yb3dzID0gJGRiLT5xdWVyeV9hbmRfZmV0Y2hfYWxsKAorJ1NFTEVDVCByZXN1bHRzLios
IGJ1aWxkcy4qLCBhcnJheV9hZ2coKGJ1aWxkX3JldmlzaW9ucy5yZXBvc2l0b3J5LCBidWlsZF9y
ZXZpc2lvbnMudmFsdWUsIGJ1aWxkX3JldmlzaW9ucy50aW1lKSkgQVMgcmV2aXNpb25zCisgICAg
RlJPTSByZXN1bHRzLCBidWlsZHMsIGJ1aWxkX3JldmlzaW9ucworICAgIFdIRVJFIGJ1aWxkX3Jl
dmlzaW9ucy5idWlsZCA9IGJ1aWxkcy5pZCBBTkQgcmVzdWx0cy50ZXN0ID0gJDEgQU5EIHJlc3Vs
dHMuYnVpbGQgPSBidWlsZHMuaWQKKyAgICBHUk9VUCBCWSByZXN1bHRzLmlkLCBidWlsZHMuaWQn
LCBhcnJheSgkdGVzdFsnaWQnXSkpOworaWYgKCEkcmVzdWx0X3Jvd3MpCisgICAgZXhpdF93aXRo
X2Vycm9yKCdSZXN1bHRzTm90Rm91bmQnKTsKKworZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgn
VVRDJyk7CitmdW5jdGlvbiBwYXJzZV9yZXZpc2lvbnNfYXJyYXkoJHBvc3RncmVzX2FycmF5KSB7
CisgICAgLy8gZS5nLiB7IihXZWJLaXQsMTMxNDU2LFwiMjAxMi0xMC0xNiAxNDo1MzowMFwiKSIs
IihTYWZhcmksMTYyMDA0LCkifQorICAgICRvdXRlcl9hcnJheSA9IGpzb25fZGVjb2RlKCdbJyAu
IHRyaW0oJHBvc3RncmVzX2FycmF5LCAne30nKSAuICddJyk7CisgICAgJHJldmlzaW9ucyA9IGFy
cmF5KCk7CisgICAgZm9yZWFjaCAoJG91dGVyX2FycmF5IGFzICRpdGVtKSB7CisgICAgICAgICRu
YW1lX2FuZF9yZXZpc2lvbiA9IGV4cGxvZGUoJywnLCB0cmltKCRpdGVtLCAnKCknKSk7CisgICAg
ICAgICR0aW1lID0gc3RydG90aW1lKHRyaW0oJG5hbWVfYW5kX3JldmlzaW9uWzJdLCAnIicpKSAq
IDEwMDA7CisgICAgICAgICRyZXZpc2lvbnNbdHJpbSgkbmFtZV9hbmRfcmV2aXNpb25bMF0sICci
JyldID0gYXJyYXkodHJpbSgkbmFtZV9hbmRfcmV2aXNpb25bMV0sICciJyksICR0aW1lKTsKKyAg
ICB9CisgICAgcmV0dXJuICRyZXZpc2lvbnM7Cit9CisKKyRidWlsZGVycyA9IGFycmF5KCk7Citm
b3JlYWNoICgkcmVzdWx0X3Jvd3MgYXMgJHJlc3VsdCkgeworICAgIGFycmF5X3B1c2goYXJyYXlf
ZW5zdXJlX2l0ZW1faGFzX2FycmF5KCRidWlsZGVycywgJHJlc3VsdFsnYnVpbGRlciddKSwKKyAg
ICAgICAgYXJyYXkoJ2J1aWxkVGltZScgPT4gc3RydG90aW1lKCRyZXN1bHRbJ3N0YXJ0X3RpbWUn
XSkgKiAxMDAwLAorICAgICAgICAncmV2aXNpb25zJyA9PiBwYXJzZV9yZXZpc2lvbnNfYXJyYXko
JHJlc3VsdFsncmV2aXNpb25zJ10pLAorICAgICAgICAnYnVpbGRlcicgPT4gJHJlc3VsdFsnYnVp
bGRlciddLAorICAgICAgICAnc2xhdmUnID0+ICRyZXN1bHRbJ3NsYXZlJ10sCisgICAgICAgICdi
dWlsZE51bWJlcicgPT4gJHJlc3VsdFsnbnVtYmVyJ10sCisgICAgICAgICdhY3R1YWwnID0+ICRy
ZXN1bHRbJ2FjdHVhbCddLAorICAgICAgICAnZXhwZWN0ZWQnID0+ICRyZXN1bHRbJ2V4cGVjdGVk
J10pKTsKK30KKworZXhpdF93aXRoX3N1Y2Nlc3MoYXJyYXkoJ2J1aWxkZXJzJyA9PiAkYnVpbGRl
cnMpKTsKKworPz4KSW5kZXg6IFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9pbmNsdWRlL2NvbmZpZy5q
c29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9pbmNsdWRlL2NvbmZpZy5q
c29uCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2luY2x1ZGUvY29uZmln
Lmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNCBAQAoreworICAgICJkZWJ1ZyI6IHRy
dWUsCisgICAgImRhdGFiYXNlIjogeworICAgICAgICAiaG9zdCI6ICJsb2NhbGhvc3QiLAorICAg
ICAgICAicG9ydCI6ICI1NDMyIiwKKyAgICAgICAgInVzZXJuYW1lIjogInNhZmFyaS10ZXN0LWhp
c3RvcnkiLAorICAgICAgICAicGFzc3dvcmQiOiAicGFzc3dvcmQiLAorICAgICAgICAibmFtZSI6
ICJzYWZhcmktdGVzdC1oaXN0b3J5LWRiIgorICAgIH0sCisgICAgIm1hc3RlcnMiOiBbCisgICAg
ICAgICJidWlsZC53ZWJraXQub3JnIiwKKyAgICAgICAgImJ1aWxkLXNhZmFyaS5hcHBsZS5jb20i
CisgICAgXQorfQpJbmRleDogV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2luY2x1ZGUvZGIucGhwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9pbmNsdWRlL2RiLnBocAkocmV2aXNp
b24gMCkKKysrIFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9pbmNsdWRlL2RiLnBocAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE4NyBAQAorPD9waHAKKworLy8gTm90ZTogVGhpcyBjb2RlIGlzIGlk
ZW50aWNhbCB0byBTYWZhcmlQZXJmTW9uaXRvcidzIGRiLnBocAorCitlcnJvcl9yZXBvcnRpbmco
RV9BTEwgfCBFX1NUUklDVCk7CisKK2Z1bmN0aW9uIGVuZHNfd2l0aCgkc3RyLCAka2V5KSB7Cisg
ICAgcmV0dXJuIHN0cnJwb3MoJHN0ciwgJGtleSkgPT0gc3RybGVuKCRzdHIpIC0gc3RybGVuKCRr
ZXkpOworfQorCitmdW5jdGlvbiBjdHlwZV9hbG51bV91bmRlcnNjb3JlKCRzdHIpIHsKKyAgICBy
ZXR1cm4gY3R5cGVfYWxudW0oc3RyX3JlcGxhY2UoJ18nLCAnJywgJHN0cikpOworfQorCitmdW5j
dGlvbiAmYXJyYXlfZW5zdXJlX2l0ZW1faGFzX2FycmF5KCYkYXJyYXksICRrZXkpIHsKKyAgICBp
ZiAoIWFycmF5X2tleV9leGlzdHMoJGtleSwgJGFycmF5KSkKKyAgICAgICAgJGFycmF5WyRrZXld
ID0gYXJyYXkoKTsKKyAgICByZXR1cm4gJGFycmF5WyRrZXldOworfQorCitmdW5jdGlvbiBhcnJh
eV9nZXQoJGFycmF5LCAka2V5LCAkZGVmYXVsdCA9IE5VTEwpIHsKKyAgICBpZiAoIWFycmF5X2tl
eV9leGlzdHMoJGtleSwgJGFycmF5KSkKKyAgICAgICAgcmV0dXJuICRkZWZhdWx0OworICAgIHJl
dHVybiAkYXJyYXlbJGtleV07Cit9CisKKyRfY29uZmlnID0gTlVMTDsKKworZnVuY3Rpb24gY29u
ZmlnKCRrZXkpIHsKKyAgICBnbG9iYWwgJF9jb25maWc7CisgICAgaWYgKCEkX2NvbmZpZykKKyAg
ICAgICAgJF9jb25maWcgPSBqc29uX2RlY29kZShmaWxlX2dldF9jb250ZW50cyhkaXJuYW1lKF9f
RklMRV9fKSAuICcvY29uZmlnLmpzb24nKSwgdHJ1ZSk7CisgICAgcmV0dXJuICRfY29uZmlnWyRr
ZXldOworfQorCitpZiAoY29uZmlnKCdkZWJ1ZycpKQorICAgIGluaV9zZXQoJ2Rpc3BsYXlfZXJy
b3JzJywgJ09uJyk7CisKK2NsYXNzIERhdGFiYXNlCit7CisgICAgcHJpdmF0ZSAkY29ubmVjdGlv
biA9IGZhbHNlOworCisgICAgZnVuY3Rpb24gX19kZXN0cnVjdCgpIHsKKyAgICAgICAgaWYgKCR0
aGlzLT5jb25uZWN0aW9uKQorICAgICAgICAgICAgcGdfY2xvc2UoJHRoaXMtPmNvbm5lY3Rpb24p
OworICAgICAgICAkdGhpcy0+Y29ubmVjdGlvbiA9IGZhbHNlOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGlzX3RydWUoJHZhbHVlKSB7CisgICAgICAgIHJldHVybiAkdmFsdWUgPT0gJ3QnOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGNvbm5lY3QoKSB7CisgICAgICAgICRkYXRhYmFzZUNvbmZpZyA9
IGNvbmZpZygnZGF0YWJhc2UnKTsKKyAgICAgICAgJHRoaXMtPmNvbm5lY3Rpb24gPSBwZ19jb25u
ZWN0KCdob3N0PScgLiAkZGF0YWJhc2VDb25maWdbJ2hvc3QnXSAuICcgcG9ydD0nIC4gJGRhdGFi
YXNlQ29uZmlnWydwb3J0J10KKyAgICAgICAgICAgIC4gJyBkYm5hbWU9JyAuICRkYXRhYmFzZUNv
bmZpZ1snbmFtZSddIC4gJyB1c2VyPScgLiAkZGF0YWJhc2VDb25maWdbJ3VzZXJuYW1lJ10gLiAn
IHBhc3N3b3JkPScgLiAkZGF0YWJhc2VDb25maWdbJ3Bhc3N3b3JkJ10pOworICAgICAgICByZXR1
cm4gJHRoaXMtPmNvbm5lY3Rpb24gPyB0cnVlIDogZmFsc2U7CisgICAgfQorCisgICAgcHJpdmF0
ZSBmdW5jdGlvbiBwcmVmaXhlZF9jb2x1bW5fbmFtZXMoJGNvbHVtbnMsICRwcmVmaXggPSBOVUxM
KSB7CisgICAgICAgIGlmICghJHByZWZpeCkKKyAgICAgICAgICAgIHJldHVybiBqb2luKCcsICcs
ICRjb2x1bW5zKTsKKyAgICAgICAgcmV0dXJuICRwcmVmaXggLiAnXycgLiBqb2luKCcsICcgLiAk
cHJlZml4IC4gJ18nLCAkY29sdW1ucyk7CisgICAgfQorCisgICAgcHJpdmF0ZSBmdW5jdGlvbiBw
cmVmaXhlZF9uYW1lKCRjb2x1bW4sICRwcmVmaXggPSBOVUxMKSB7CisgICAgICAgIHJldHVybiAk
cHJlZml4ID8gJHByZWZpeCAuICdfJyAuICRjb2x1bW4gOiAkY29sdW1uOworICAgIH0KKworICAg
IHByaXZhdGUgZnVuY3Rpb24gcHJlcGFyZV9wYXJhbXMoJHBhcmFtcywgJiRwbGFjZWhvbGRlcnMs
ICYkdmFsdWVzKSB7CisgICAgICAgICRjb2x1bW5fbmFtZXMgPSBhcnJheV9rZXlzKCRwYXJhbXMp
OworCisgICAgICAgICRpID0gY291bnQoJHZhbHVlcykgKyAxOworICAgICAgICBmb3JlYWNoICgk
Y29sdW1uX25hbWVzIGFzICRuYW1lKSB7CisgICAgICAgICAgICBhc3NlcnQoY3R5cGVfYWxudW1f
dW5kZXJzY29yZSgkbmFtZSkpOworICAgICAgICAgICAgYXJyYXlfcHVzaCgkcGxhY2Vob2xkZXJz
LCAnJCcgLiAkaSk7CisgICAgICAgICAgICBhcnJheV9wdXNoKCR2YWx1ZXMsICRwYXJhbXNbJG5h
bWVdKTsKKyAgICAgICAgICAgICRpKys7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gJGNv
bHVtbl9uYW1lczsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpbnNlcnRfcm93KCR0YWJsZSwgJHBy
ZWZpeCwgJHBhcmFtcywgJHJldHVybmluZyA9ICdpZCcpIHsKKyAgICAgICAgJHBsYWNlaG9sZGVy
cyA9IGFycmF5KCk7CisgICAgICAgICR2YWx1ZXMgPSBhcnJheSgpOworICAgICAgICAkY29sdW1u
X25hbWVzID0gJHRoaXMtPnByZXBhcmVfcGFyYW1zKCRwYXJhbXMsICRwbGFjZWhvbGRlcnMsICR2
YWx1ZXMpOworCisgICAgICAgIGFzc2VydCghJHByZWZpeCB8fCBjdHlwZV9hbG51bV91bmRlcnNj
b3JlKCRwcmVmaXgpKTsKKyAgICAgICAgJGNvbHVtbl9uYW1lcyA9ICR0aGlzLT5wcmVmaXhlZF9j
b2x1bW5fbmFtZXMoJGNvbHVtbl9uYW1lcywgJHByZWZpeCk7CisgICAgICAgICRwbGFjZWhvbGRl
cnMgPSBqb2luKCcsICcsICRwbGFjZWhvbGRlcnMpOworCisgICAgICAgIGlmICgkcmV0dXJuaW5n
KSB7CisgICAgICAgICAgICAkcmV0dXJuaW5nX2NvbHVtbl9uYW1lID0gJHRoaXMtPnByZWZpeGVk
X25hbWUoJHJldHVybmluZywgJHByZWZpeCk7CisgICAgICAgICAgICAkcm93cyA9ICR0aGlzLT5x
dWVyeV9hbmRfZmV0Y2hfYWxsKCJJTlNFUlQgSU5UTyAkdGFibGUgKCRjb2x1bW5fbmFtZXMpIFZB
TFVFUyAoJHBsYWNlaG9sZGVycykgUkVUVVJOSU5HICRyZXR1cm5pbmdfY29sdW1uX25hbWUiLCAk
dmFsdWVzKTsKKyAgICAgICAgICAgIHJldHVybiAkcm93cyA/ICRyb3dzWzBdWyRyZXR1cm5pbmdf
Y29sdW1uX25hbWVdIDogTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAkdGhpcy0+
cXVlcnlfYW5kX2dldF9hZmZlY3RlZF9yb3dzKCJJTlNFUlQgSU5UTyAkdGFibGUgKCRjb2x1bW5f
bmFtZXMpIFZBTFVFUyAoJHBsYWNlaG9sZGVycykiLCAkdmFsdWVzKSA9PSAxOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHNlbGVjdF9vcl9pbnNlcnRfcm93KCR0YWJsZSwgJHByZWZpeCwgJHNlbGVj
dF9wYXJhbXMsICRpbnNlcnRfcGFyYW1zID0gTlVMTCwgJHJldHVybmluZyA9ICdpZCcpIHsKKyAg
ICAgICAgJHZhbHVlcyA9IGFycmF5KCk7CisKKyAgICAgICAgJHNlbGVjdF9wbGFjZWhvbGRlcnMg
PSBhcnJheSgpOworICAgICAgICAkc2VsZWN0X2NvbHVtbl9uYW1lcyA9ICR0aGlzLT5wcmVwYXJl
X3BhcmFtcygkc2VsZWN0X3BhcmFtcywgJHNlbGVjdF9wbGFjZWhvbGRlcnMsICR2YWx1ZXMpOwor
ICAgICAgICAkc2VsZWN0X3ZhbHVlcyA9IGFycmF5X3NsaWNlKCR2YWx1ZXMsIDApOworCisgICAg
ICAgIGlmICgkaW5zZXJ0X3BhcmFtcyA9PT0gTlVMTCkKKyAgICAgICAgICAgICRpbnNlcnRfcGFy
YW1zID0gJHNlbGVjdF9wYXJhbXM7CisgICAgICAgICRpbnNlcnRfcGxhY2Vob2xkZXJzID0gYXJy
YXkoKTsKKyAgICAgICAgJGluc2VydF9jb2x1bW5fbmFtZXMgPSAkdGhpcy0+cHJlcGFyZV9wYXJh
bXMoJGluc2VydF9wYXJhbXMsICRpbnNlcnRfcGxhY2Vob2xkZXJzLCAkdmFsdWVzKTsKKworICAg
ICAgICBhc3NlcnQoISEkcmV0dXJuaW5nKTsKKyAgICAgICAgYXNzZXJ0KCEkcHJlZml4IHx8IGN0
eXBlX2FsbnVtX3VuZGVyc2NvcmUoJHByZWZpeCkpOworICAgICAgICAkcmV0dXJuaW5nX2NvbHVt
bl9uYW1lID0gJHJldHVybmluZyA9PSAnKicgPyAnKicgOiAkdGhpcy0+cHJlZml4ZWRfbmFtZSgk
cmV0dXJuaW5nLCAkcHJlZml4KTsKKyAgICAgICAgJHNlbGVjdF9jb2x1bW5fbmFtZXMgPSAkdGhp
cy0+cHJlZml4ZWRfY29sdW1uX25hbWVzKCRzZWxlY3RfY29sdW1uX25hbWVzLCAkcHJlZml4KTsK
KyAgICAgICAgJHNlbGVjdF9wbGFjZWhvbGRlcnMgPSBqb2luKCcsICcsICRzZWxlY3RfcGxhY2Vo
b2xkZXJzKTsKKyAgICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCAkcmV0dXJuaW5nX2NvbHVtbl9uYW1l
IEZST00gJHRhYmxlIFdIRVJFICgkc2VsZWN0X2NvbHVtbl9uYW1lcykgPSAoJHNlbGVjdF9wbGFj
ZWhvbGRlcnMpIjsKKworICAgICAgICAkaW5zZXJ0X2NvbHVtbl9uYW1lcyA9ICR0aGlzLT5wcmVm
aXhlZF9jb2x1bW5fbmFtZXMoJGluc2VydF9jb2x1bW5fbmFtZXMsICRwcmVmaXgpOworICAgICAg
ICAkaW5zZXJ0X3BsYWNlaG9sZGVycyA9IGpvaW4oJywgJywgJGluc2VydF9wbGFjZWhvbGRlcnMp
OworICAgICAgICAkcm93cyA9ICR0aGlzLT5xdWVyeV9hbmRfZmV0Y2hfYWxsKCJJTlNFUlQgSU5U
TyAkdGFibGUgKCRpbnNlcnRfY29sdW1uX25hbWVzKSBTRUxFQ1QgJGluc2VydF9wbGFjZWhvbGRl
cnMgV0hFUkUgTk9UIEVYSVNUUworICAgICAgICAgICAgKCRxdWVyeSkgUkVUVVJOSU5HICRyZXR1
cm5pbmdfY29sdW1uX25hbWUiLCAkdmFsdWVzKTsKKyAgICAgICAgaWYgKCEkcm93cykKKyAgICAg
ICAgICAgICRyb3dzID0gJHRoaXMtPnF1ZXJ5X2FuZF9mZXRjaF9hbGwoJHF1ZXJ5LCAkc2VsZWN0
X3ZhbHVlcyk7CisKKyAgICAgICAgcmV0dXJuICRyb3dzID8gKCRyZXR1cm5pbmcgPT0gJyonID8g
JHJvd3NbMF0gOiAkcm93c1swXVskcmV0dXJuaW5nX2NvbHVtbl9uYW1lXSkgOiBOVUxMOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHNlbGVjdF9maXJzdF9yb3coJHRhYmxlLCAkcHJlZml4LCAkcGFy
YW1zLCAkb3JkZXJfYnkgPSBOVUxMKSB7CisgICAgICAgICRwbGFjZWhvbGRlcnMgPSBhcnJheSgp
OworICAgICAgICAkdmFsdWVzID0gYXJyYXkoKTsKKyAgICAgICAgJGNvbHVtbl9uYW1lcyA9IGpv
aW4oJywgJywgJHRoaXMtPnByZXBhcmVfcGFyYW1zKCRwYXJhbXMsICRwbGFjZWhvbGRlcnMsICR2
YWx1ZXMpKTsKKyAgICAgICAgJHBsYWNlaG9sZGVycyA9IGpvaW4oJywgJywgJHBsYWNlaG9sZGVy
cyk7CisgICAgICAgICRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICR0YWJsZSBXSEVSRSAoJGNvbHVt
bl9uYW1lcykgPSAoJHBsYWNlaG9sZGVycykiOworICAgICAgICBpZiAoJG9yZGVyX2J5KSB7Cisg
ICAgICAgICAgICBhc3NlcnQoIWN0eXBlX2FsbnVtX3VuZGVyc2NvcmUoJG9yZGVyX2J5KSk7Cisg
ICAgICAgICAgICAkcXVlcnkgLj0gJyBPUkRFUiBCWSAnIC4gJHRoaXMtPnByZWZpeGVkX25hbWUo
JG9yZGVyX2J5LCAkcHJlZml4KTsKKyAgICAgICAgfQorICAgICAgICAkcm93cyA9ICR0aGlzLT5x
dWVyeV9hbmRfZmV0Y2hfYWxsKCRxdWVyeSAuICcgTElNSVQgMScsICR2YWx1ZXMpOworCisgICAg
ICAgIHJldHVybiAkcm93cyA/ICRyb3dzWzBdIDogTlVMTDsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBxdWVyeV9hbmRfZ2V0X2FmZmVjdGVkX3Jvd3MoJHF1ZXJ5LCAkcGFyYW1zID0gYXJyYXkoKSkg
eworICAgICAgICBpZiAoISR0aGlzLT5jb25uZWN0aW9uKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICRyZXN1bHQgPSBwZ19xdWVyeV9wYXJhbXMoJHRoaXMtPmNvbm5lY3Rpb24sICRx
dWVyeSwgJHBhcmFtcyk7CisgICAgICAgIGlmICghJHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICByZXR1cm4gcGdfYWZmZWN0ZWRfcm93cygkcmVzdWx0KTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBxdWVyeV9hbmRfZmV0Y2hfYWxsKCRxdWVyeSwgJHBhcmFtcyA9IGFycmF5
KCkpIHsKKyAgICAgICAgaWYgKCEkdGhpcy0+Y29ubmVjdGlvbikKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgJHJlc3VsdCA9IHBnX3F1ZXJ5X3BhcmFtcygkdGhpcy0+Y29ubmVj
dGlvbiwgJHF1ZXJ5LCAkcGFyYW1zKTsKKyAgICAgICAgaWYgKCEkcmVzdWx0KQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gcGdfZmV0Y2hfYWxsKCRyZXN1bHQpOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGZldGNoX3RhYmxlKCR0YWJsZV9uYW1lLCAkY29sdW1uX3Rv
X2JlX29yZGVyZWRfYnkgPSBudWxsKSB7CisgICAgICAgIGlmICghJHRoaXMtPmNvbm5lY3Rpb24g
fHwgIWN0eXBlX2FsbnVtX3VuZGVyc2NvcmUoJHRhYmxlX25hbWUpIHx8ICgkY29sdW1uX3RvX2Jl
X29yZGVyZWRfYnkgJiYgIWN0eXBlX2FsbnVtX3VuZGVyc2NvcmUoJGNvbHVtbl90b19iZV9vcmRl
cmVkX2J5KSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICRjbGF1c2VzID0g
Jyc7CisgICAgICAgIGlmICgkY29sdW1uX3RvX2JlX29yZGVyZWRfYnkpCisgICAgICAgICAgICAk
Y2xhdXNlcyAuPSAnT1JERVIgQlkgJyAuICRjb2x1bW5fdG9fYmVfb3JkZXJlZF9ieTsKKyAgICAg
ICAgcmV0dXJuICR0aGlzLT5xdWVyeV9hbmRfZmV0Y2hfYWxsKCJTRUxFQ1QgKiBGUk9NICR0YWJs
ZV9uYW1lICRjbGF1c2VzIik7CisgICAgfQorCisgICAgZnVuY3Rpb24gYmVnaW5fdHJhbnNhY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiAkdGhpcy0+Y29ubmVjdGlvbiBhbmQgcGdfcXVlcnkoJHRo
aXMtPmNvbm5lY3Rpb24sICJCRUdJTiIpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNvbW1pdF90
cmFuc2FjdGlvbigpIHsKKyAgICAgICAgcmV0dXJuICR0aGlzLT5jb25uZWN0aW9uIGFuZCBwZ19x
dWVyeSgkdGhpcy0+Y29ubmVjdGlvbiwgJ0NPTU1JVCcpOworICAgIH0KKworICAgIGZ1bmN0aW9u
IHJvbGxiYWNrX3RyYW5zYWN0aW9uKCkgeworICAgICAgICByZXR1cm4gJHRoaXMtPmNvbm5lY3Rp
b24gYW5kIHBnX3F1ZXJ5KCR0aGlzLT5jb25uZWN0aW9uLCAnUk9MTEJBQ0snKTsKKyAgICB9CisK
K30KKworPz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBXZWJzaXRlcy90ZXN0
LXJlc3VsdHMvaW5jbHVkZS9pbml0LWRhdGFiYXNlLnNxbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRl
cy90ZXN0LXJlc3VsdHMvaW5jbHVkZS9pbml0LWRhdGFiYXNlLnNxbAkocmV2aXNpb24gMCkKKysr
IFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9pbmNsdWRlL2luaXQtZGF0YWJhc2Uuc3FsCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKK0RST1AgVEFCTEUgcmVzdWx0cyBDQVNDQURFOworRFJP
UCBUQUJMRSB0ZXN0cyBDQVNDQURFOworRFJPUCBUQUJMRSBidWlsZF9yZXZpc2lvbl9tYXAgQ0FT
Q0FERTsKK0RST1AgVEFCTEUgcmV2aXNpb25zIENBU0NBREU7CitEUk9QIFRBQkxFIGJ1aWxkcyBD
QVNDQURFOworRFJPUCBUQUJMRSBzbGF2ZXMgQ0FTQ0FERTsKK0RST1AgVEFCTEUgYnVpbGRlcnMg
Q0FTQ0FERTsKKworQ1JFQVRFIFRBQkxFIGJ1aWxkZXJzICgKKyAgICBpZCBzZXJpYWwgUFJJTUFS
WSBLRVksCisgICAgbWFzdGVyIHZhcmNoYXIoNjQpIE5PVCBOVUxMLAorICAgIG5hbWUgdmFyY2hh
cig2NCkgTk9UIE5VTEwgVU5JUVVFKTsKKworQ1JFQVRFIFRBQkxFIHJlcG9zaXRvcmllcyAoCisg
ICAgaWQgc2VyaWFsIFBSSU1BUlkgS0VZLAorICAgIG5hbWUgdmFyY2hhcig2NCkgTk9UIE5VTEws
CisgICAgdXJsIHZhcmNoYXIoMTAyNCksCisgICAgYmxhbWVfdXJsIHZhcmNoYXIoMTAyNCkpOwor
CitDUkVBVEUgVEFCTEUgc2xhdmVzICgKKyAgICBpZCBzZXJpYWwgUFJJTUFSWSBLRVksCisgICAg
bmFtZSB2YXJjaGFyKDEyOCkgTk9UIE5VTEwgVU5JUVVFKTsKKworQ1JFQVRFIFRBQkxFIGJ1aWxk
cyAoCisgICAgaWQgc2VyaWFsIFBSSU1BUlkgS0VZLAorICAgIGJ1aWxkZXIgaW50ZWdlciBSRUZF
UkVOQ0VTIGJ1aWxkZXJzIE9OIERFTEVURSBDQVNDQURFLAorICAgIG51bWJlciBpbnRlZ2VyIE5P
VCBOVUxMLAorICAgIHN0YXJ0X3RpbWUgdGltZXN0YW1wLAorICAgIGVuZF90aW1lIHRpbWVzdGFt
cCwKKyAgICBzbGF2ZSBpbnRlZ2VyIFJFRkVSRU5DRVMgc2xhdmVzIE9OIERFTEVURSBDQVNDQURF
LAorICAgIGZldGNoZWQgYm9vbCBOT1QgTlVMTCBERUZBVUxUIEZBTFNFLAorICAgIENPTlNUUkFJ
TlQgYnVpbGRlcl9hbmRfYnVpbGRfbnVtYmVyX211c3RfYmVfdW5pcXVlIFVOSVFVRShidWlsZGVy
LCBudW1iZXIpKTsKK0NSRUFURSBJTkRFWCBidWlsZF9idWlsZGVyX2luZGV4IE9OIGJ1aWxkcyhi
dWlsZGVyKTsKK0NSRUFURSBJTkRFWCBidWlsZF9zbGF2ZV9pbmRleCBPTiBidWlsZHMoc2xhdmUp
OworCitDUkVBVEUgVEFCTEUgYnVpbGRfcmV2aXNpb25zICgKKyAgICBidWlsZCBpbnRlZ2VyIE5P
VCBOVUxMIFJFRkVSRU5DRVMgYnVpbGRzIE9OIERFTEVURSBDQVNDQURFLAorICAgIHJlcG9zaXRv
cnkgaW50ZWdlciBOT1QgTlVMTCBSRUZFUkVOQ0VTIHJlcG9zaXRvcmllcyBPTiBERUxFVEUgQ0FT
Q0FERSwKKyAgICB2YWx1ZSB2YXJjaGFyKDY0KSBOT1QgTlVMTCwKKyAgICB0aW1lIHRpbWVzdGFt
cCwKKyAgICBQUklNQVJZIEtFWSAocmVwb3NpdG9yeSwgYnVpbGQpKTsKK0NSRUFURSBJTkRFWCBy
ZXZpc2lvbl9idWlsZF9pbmRleCBPTiBidWlsZF9yZXZpc2lvbnMoYnVpbGQpOworQ1JFQVRFIElO
REVYIHJldmlzaW9uX3JlcG9zaXRvcnlfaW5kZXggT04gYnVpbGRfcmV2aXNpb25zKHJlcG9zaXRv
cnkpOworCitDUkVBVEUgVEFCTEUgdGVzdHMgKAorICAgIGlkIHNlcmlhbCBQUklNQVJZIEtFWSwK
KyAgICBuYW1lIHZhcmNoYXIoMTAyNCkgTk9UIE5VTEwgVU5JUVVFLAorICAgIHJlZnRlc3RfdHlw
ZSB2YXJjaGFyKDY0KSk7CisKK0NSRUFURSBUQUJMRSByZXN1bHRzICgKKyAgICBpZCBzZXJpYWwg
UFJJTUFSWSBLRVksCisgICAgdGVzdCBpbnRlZ2VyIFJFRkVSRU5DRVMgdGVzdHMgT04gREVMRVRF
IENBU0NBREUsCisgICAgYnVpbGQgaW50ZWdlciBSRUZFUkVOQ0VTIGJ1aWxkcyBPTiBERUxFVEUg
Q0FTQ0FERSwKKyAgICBleHBlY3RlZCB2YXJjaGFyKDY0KSBOT1QgTlVMTCwKKyAgICBhY3R1YWwg
dmFyY2hhcig2NCkgTk9UIE5VTEwpOworQ1JFQVRFIElOREVYIHJlc3VsdHNfdGVzdCBPTiByZXN1
bHRzKHRlc3QpOworQ1JFQVRFIElOREVYIHJlc3VsdHNfYnVpbGQgT04gcmVzdWx0cyhidWlsZCk7
CkluZGV4OiBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvaW5jbHVkZS9qc29uLXNoYXJlZC5waHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2luY2x1ZGUvanNvbi1zaGFyZWQucGhw
CShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2luY2x1ZGUvanNvbi1zaGFy
ZWQucGhwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKzw/cGhwCisKK3JlcXVpcmVf
b25jZSgnLi4vaW5jbHVkZS9kYi5waHAnKTsKKworaGVhZGVyKCdDb250ZW50LXR5cGU6IGFwcGxp
Y2F0aW9uL2pzb24nKTsKKworZnVuY3Rpb24gZXhpdF93aXRoX2Vycm9yKCRzdGF0dXMsICRkZXRh
aWxzID0gYXJyYXkoKSkgeworICAgICRkZXRhaWxzWydzdGF0dXMnXSA9ICRzdGF0dXM7CisgICAg
ZWNobyBqc29uX2VuY29kZSgkZGV0YWlscyk7CisgICAgZXhpdCgxKTsKK30KKworZnVuY3Rpb24g
ZXhpdF93aXRoX3N1Y2Nlc3MoJGRldGFpbHMgPSBhcnJheSgpKSB7CisgICAgJGRldGFpbHNbJ3N0
YXR1cyddID0gJ09LJzsKKyAgICBlY2hvIGpzb25fZW5jb2RlKCRkZXRhaWxzKTsKKyAgICBleGl0
KDApOworfQorCitmdW5jdGlvbiBjb25uZWN0KCkgeworICAgICRkYiA9IG5ldyBEYXRhYmFzZTsK
KyAgICBpZiAoISRkYi0+Y29ubmVjdCgpKQorICAgICAgICBleGl0X3dpdGhfZXJyb3IoJ0RhdGFi
YXNlQ29ubmVjdGlvbkVycm9yJyk7CisgICAgcmV0dXJuICRkYjsKK30KKworZnVuY3Rpb24gY2Ft
ZWxfY2FzZV93b3Jkc19zZXBhcmF0ZWRfYnlfdW5kZXJzY29yZSgkbmFtZSkgeworICAgIHJldHVy
biBpbXBsb2RlKCcnLCBhcnJheV9tYXAoJ3VjZmlyc3QnLCBleHBsb2RlKCdfJywgJG5hbWUpKSk7
Cit9CisKK2Z1bmN0aW9uIHJlcXVpcmVfZm9ybWF0KCRrZXksICR2YWx1ZSwgJHBhdHRlcm4pIHsK
KyAgICBpZiAoIXByZWdfbWF0Y2goJHBhdHRlcm4sICR2YWx1ZSkpCisgICAgICAgIGV4aXRfd2l0
aF9lcnJvcignSW52YWxpZCcgLiBjYW1lbF9jYXNlX3dvcmRzX3NlcGFyYXRlZF9ieV91bmRlcnNj
b3JlKCRrZXkpLCBhcnJheSgndmFsdWUnID0+ICR2YWx1ZSkpOworfQorCitmdW5jdGlvbiByZXF1
aXJlX2V4aXN0ZW5jZV9vZigkYXJyYXksICRsaXN0X29mX2FyZ3VtZW50cywgJHByZWZpeCA9ICcn
KSB7CisgICAgaWYgKCRwcmVmaXgpCisgICAgICAgICRwcmVmaXggLj0gJ18nOworICAgIGZvcmVh
Y2ggKCRsaXN0X29mX2FyZ3VtZW50cyBhcyAka2V5ID0+ICRwYXR0ZXJuKSB7CisgICAgICAgICRu
YW1lID0gY2FtZWxfY2FzZV93b3Jkc19zZXBhcmF0ZWRfYnlfdW5kZXJzY29yZSgkcHJlZml4IC4g
JGtleSk7CisgICAgICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkYXJyYXkpKQorICAg
ICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCRuYW1lIC4gJ05vdFNwZWNpZmllZCcpOworICAgICAg
ICByZXF1aXJlX2Zvcm1hdCgkbmFtZSwgJGFycmF5WyRrZXldLCAkcGF0dGVybik7CisgICAgfQor
fQorCis/PgpJbmRleDogV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2luY2x1ZGUvdGVzdC1yZXN1bHRz
LnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvaW5jbHVkZS90ZXN0LXJl
c3VsdHMucGhwCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2luY2x1ZGUv
dGVzdC1yZXN1bHRzLnBocAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACis8P3BocAor
CityZXF1aXJlX29uY2UoJ2RiLnBocCcpOworCitmdW5jdGlvbiBmbG9hdF90b190aW1lKCR0aW1l
X2luX2Zsb2F0KSB7CisgICAgJHRpbWUgPSBuZXcgRGF0ZVRpbWUoKTsKKyAgICAkdGltZS0+c2V0
VGltZXN0YW1wKGZsb2F0dmFsKCR0aW1lX2luX2Zsb2F0KSk7CisgICAgcmV0dXJuICR0aW1lOwor
fQorCitmdW5jdGlvbiBhZGRfYnVpbGQoJGRiLCAkbWFzdGVyLCAkYnVpbGRlcl9uYW1lLCAkYnVp
bGRfbnVtYmVyKSB7CisgICAgaWYgKCFpbl9hcnJheSgkbWFzdGVyLCBjb25maWcoJ21hc3RlcnMn
KSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgJGJ1aWxkZXJfaWQgPSAkZGItPnNlbGVj
dF9vcl9pbnNlcnRfcm93KCdidWlsZGVycycsIE5VTEwsIGFycmF5KCdtYXN0ZXInID0+ICRtYXN0
ZXIsICduYW1lJyA9PiAkYnVpbGRlcl9uYW1lKSk7CisgICAgaWYgKCEkYnVpbGRlcl9pZCkKKyAg
ICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gJGRiLT5zZWxlY3Rfb3JfaW5zZXJ0X3Jv
dygnYnVpbGRzJywgTlVMTCwgYXJyYXkoJ2J1aWxkZXInID0+ICRidWlsZGVyX2lkLCAnbnVtYmVy
JyA9PiAkYnVpbGRfbnVtYmVyKSk7Cit9CisKK2Z1bmN0aW9uIGFkZF9zbGF2ZSgkZGIsICRuYW1l
KSB7CisgICAgcmV0dXJuICRkYi0+c2VsZWN0X29yX2luc2VydF9yb3coJ3NsYXZlcycsIE5VTEws
IGFycmF5KCduYW1lJyA9PiAkbmFtZSkpOworfQorCitmdW5jdGlvbiBmZXRjaF9hbmRfcGFyc2Vf
dGVzdF9yZXN1bHRzX2pzb24oJHVybCwgJGpzb25wID0gRkFMU0UpIHsKKyAgICAkanNvbl9jb250
ZW50cyA9IGZpbGVfZ2V0X2NvbnRlbnRzKCR1cmwpOworICAgIGlmICghJGpzb25fY29udGVudHMp
CisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKCRqc29ucCkKKyAgICAgICAgJGpzb25f
Y29udGVudHMgPSBwcmVnX3JlcGxhY2UoJy9eXHcrXCh8XCk7JC8nLCAnJywgJGpzb25fY29udGVu
dHMpOworCisgICAgcmV0dXJuIGpzb25fZGVjb2RlKCRqc29uX2NvbnRlbnRzLCB0cnVlKTsKK30K
KworZnVuY3Rpb24gc3RvcmVfdGVzdF9yZXN1bHRzKCRkYiwgJHRlc3RfcmVzdWx0cywgJGJ1aWxk
X2lkLCAkc3RhcnRfdGltZSwgJGVuZF90aW1lLCAkc2xhdmVfaWQpIHsKKyAgICAkZGItPmJlZ2lu
X3RyYW5zYWN0aW9uKCk7CisKKyAgICB0cnkgeworICAgICAgICBmb3JlYWNoICgkdGVzdF9yZXN1
bHRzWyd0ZXN0cyddIGFzICRuYW1lID0+ICRzdWJ0ZXN0cykKKyAgICAgICAgICAgIHJlY3Vyc2l2
ZWx5X2FkZF90ZXN0X3Jlc3VsdHMoJGRiLCAkYnVpbGRfaWQsICRzdWJ0ZXN0cywgJG5hbWUpOwor
ICAgICAgICAkZGItPnF1ZXJ5X2FuZF9nZXRfYWZmZWN0ZWRfcm93cygnVVBEQVRFIGJ1aWxkcyBT
RVQgKHN0YXJ0X3RpbWUsIGVuZF90aW1lLCBzbGF2ZSwgZmV0Y2hlZCkgPSAoJDEsICQyLCAkMywg
VFJVRSkgV0hFUkUgaWQgPSAkNCcsCisgICAgICAgICAgICBhcnJheSgkc3RhcnRfdGltZS0+Zm9y
bWF0KCdZLW0tZCBIOmk6cy51JyksICRlbmRfdGltZS0+Zm9ybWF0KCdZLW0tZCBIOmk6cy51Jyks
ICRzbGF2ZV9pZCwgJGJ1aWxkX2lkKSk7CisgICAgICAgICRkYi0+Y29tbWl0X3RyYW5zYWN0aW9u
KCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CisgICAgICAgICRkYi0+cm9sbGJhY2tf
dHJhbnNhY3Rpb24oKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHJldHVy
biBUUlVFOworfQorCitmdW5jdGlvbiByZWN1cnNpdmVseV9hZGRfdGVzdF9yZXN1bHRzKCRkYiwg
JGJ1aWxkX2lkLCAkdGVzdHMsICRmdWxsX25hbWUpIHsKKyAgICBpZiAoIWFycmF5X2tleV9leGlz
dHMoJ2V4cGVjdGVkJywgJHRlc3RzKSBhbmQgIWFycmF5X2tleV9leGlzdHMoJ2FjdHVhbCcsICR0
ZXN0cykpIHsKKyAgICAgICAgZm9yZWFjaCAoJHRlc3RzIGFzICRuYW1lID0+ICRzdWJ0ZXN0cykK
KyAgICAgICAgICAgIHJlY3Vyc2l2ZWx5X2FkZF90ZXN0X3Jlc3VsdHMoJGRiLCAkYnVpbGRfaWQs
ICRzdWJ0ZXN0cywgJGZ1bGxfbmFtZSAuICcvJyAuICRuYW1lKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgICR0ZXN0X2lkID0gJGRiLT5zZWxlY3Rfb3JfaW5zZXJ0X3JvdygndGVzdHMn
LCBOVUxMLAorICAgICAgICBhcnJheSgnbmFtZScgPT4gJGZ1bGxfbmFtZSksIGFycmF5KCduYW1l
JyA9PiAkZnVsbF9uYW1lLCAncmVmdGVzdF90eXBlJyA9PiBqc29uX2VuY29kZShhcnJheV9nZXQo
JHRlc3RzLCAncmVmdGVzdF90eXBlJykpKSk7CisKKyAgICAvLyBGSVhNRTogRWl0aGVyIHVzZSBh
IHRyYW5zYWN0aW9uIG9yIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUuCisgICAgJGRiLT5zZWxlY3Rf
b3JfaW5zZXJ0X3JvdygncmVzdWx0cycsIE5VTEwsIGFycmF5KCd0ZXN0JyA9PiAkdGVzdF9pZCwg
J2J1aWxkJyA9PiAkYnVpbGRfaWQsCisgICAgICAgICdleHBlY3RlZCcgPT4gJHRlc3RzWydleHBl
Y3RlZCddLCAnYWN0dWFsJyA9PiAkdGVzdHNbJ2FjdHVhbCddKSk7Cit9CisKKz8+CkluZGV4OiBX
ZWJzaXRlcy90ZXN0LXJlc3VsdHMvanMvYXV0b2NvbXBsZXRlci5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJzaXRlcy90ZXN0LXJlc3VsdHMvanMvYXV0b2NvbXBsZXRlci5qcwkocmV2aXNpb24gMCkKKysr
IFdlYnNpdGVzL3Rlc3QtcmVzdWx0cy9qcy9hdXRvY29tcGxldGVyLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTE0IEBACitmdW5jdGlvbiBBdXRvY29tcGxldGVyKGlucHV0RWxlbWVudCwg
bGlzdCkgeworICAgIHRoaXMuX2lucHV0RWxlbWVudCA9IGlucHV0RWxlbWVudDsKKyAgICB0aGlz
Ll9jdXJyZW50U2VsZWN0aW9uID0gdW5kZWZpbmVkOworICAgIHRoaXMuX2xpc3QgPSBsaXN0Owor
ICAgIHRoaXMuX2NhbmRpZGF0ZXMgPSBbXTsKKyAgICB0aGlzLl9jdXJyZW50RmlsdGVyID0gbnVs
bDsKKyAgICB0aGlzLl9jYW5kaWRhdGVXaW5kb3cgPSBudWxsOworCisgICAgaW5wdXRFbGVtZW50
LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5zaG93LmJpbmQodGhpcykpOworICAgIGlu
cHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5oaWRlLmJpbmQodGhpcykp
OworICAgIGlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMudXBkYXRl
LmJpbmQodGhpcykpOworICAgIGlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3du
JywgdGhpcy5uYXZpZ2F0ZS5iaW5kKHRoaXMpKTsKK30KKworQXV0b2NvbXBsZXRlci5wcm90b3R5
cGUuX2Vuc3VyZUNhbmRpZGF0ZVdpbmRvdyA9IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAodGhpcy5f
Y2FuZGlkYXRlV2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICB2YXIgY29udGFpbmVyID0g
ZWxlbWVudCgndWwnKTsKKyAgICBjb250YWluZXIuY2xhc3NOYW1lID0gJ2NhbmRpZGF0ZVdpbmRv
dyc7CisgICAgY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKKyAgICBjb250
YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICB0aGlzLl9pbnB1dEVsZW1lbnQucGFy
ZW50Tm9kZS5hcHBlbmRDaGlsZChjb250YWluZXIpOworICAgIHRoaXMuX2NhbmRpZGF0ZVdpbmRv
dyA9IGNvbnRhaW5lcjsKK30KKworQXV0b2NvbXBsZXRlci5wcm90b3R5cGUuX3VwZGF0ZUNhbmRp
ZGF0ZXMgPSBmdW5jdGlvbiAoZmlsdGVyKSB7CisgICAgaWYgKHRoaXMuX2N1cnJlbnRGaWx0ZXIg
PT0gZmlsdGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2YXIgY2FuZGlkYXRlcyA9
IHRoaXMuX2xpc3QuZmlsdGVyKGZ1bmN0aW9uICh0ZXN0TmFtZSkgeyByZXR1cm4gdGVzdE5hbWUu
aW5kZXhPZihmaWx0ZXIpID49IDA7IH0pOworICAgIGlmIChjYW5kaWRhdGVzLmxlbmd0aCA+IDUw
IHx8IGNhbmRpZGF0ZXMubGVuZ3RoID09IDEpCisgICAgICAgIGNhbmRpZGF0ZXMgPSBbXTsKKyAg
ICB0aGlzLl9jYW5kaWRhdGVzID0gY2FuZGlkYXRlczsKKyAgICB0aGlzLl9jdXJyZW50RmlsdGVy
ID0gZmlsdGVyOworICAgIHRoaXMuX2N1cnJlbnRTZWxlY3Rpb24gPSB1bmRlZmluZWQ7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK0F1dG9jb21wbGV0ZXIucHJvdG90eXBlLl9zaG93Q2FuZGlkYXRl
V2luZG93ID0gZnVuY3Rpb24gKCkgeworICAgIGlmICghdGhpcy5fY2FuZGlkYXRlV2luZG93KQor
ICAgICAgICByZXR1cm47CisgICAgdmFyIHN0eWxlID0gdGhpcy5fY2FuZGlkYXRlV2luZG93LnN0
eWxlOworICAgIHN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOworICAgIHN0eWxlLnRvcCA9IHRoaXMu
X2lucHV0RWxlbWVudC5vZmZzZXRUb3AgKyB0aGlzLl9pbnB1dEVsZW1lbnQub2Zmc2V0SGVpZ2h0
ICsgJ3B4JzsKKyAgICBzdHlsZS5sZWZ0ID0gdGhpcy5faW5wdXRFbGVtZW50Lm9mZnNldExlZnQg
KyAncHgnOworfQorCitBdXRvY29tcGxldGVyLnByb3RvdHlwZS5fY3JlYXRlSXRlbSA9IGZ1bmN0
aW9uIChjYW5kaWRhdGUpIHsKKyAgICB2YXIgdG9rZW5zID0gY2FuZGlkYXRlLnNwbGl0KHRoaXMu
X2N1cnJlbnRGaWx0ZXIpOworICAgIHZhciBjaGlsZHJlbiA9IFtdOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGNoaWxkcmVuLnB1c2godGV4
dCh0b2tlbnNbaV0pKTsKKyAgICAgICAgaWYgKGkgKyAxIDwgdG9rZW5zLmxlbmd0aCkKKyAgICAg
ICAgICAgIGNoaWxkcmVuLnB1c2goZWxlbWVudCgnZW0nLCBbdGhpcy5fY3VycmVudEZpbHRlcl0p
KTsKKyAgICB9CisgICAgcmV0dXJuIGVsZW1lbnQoJ2xpJywgY2hpbGRyZW4pOworfQorCitBdXRv
Y29tcGxldGVyLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXMuaGlkZSgp
OworICAgIHRoaXMuX2Vuc3VyZUNhbmRpZGF0ZVdpbmRvdygpOworCisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB0aGlzLl9jYW5kaWRhdGVzLmxlbmd0aDsgaSsrKQorICAgICAgICB0aGlzLl9jYW5k
aWRhdGVXaW5kb3cuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlSXRlbSh0aGlzLl9jYW5kaWRhdGVz
W2ldKSk7CisgICAgdGhpcy5fc2VsZWN0SXRlbSh0aGlzLl9jdXJyZW50U2VsZWN0aW9uKTsKKwor
ICAgIGlmICh0aGlzLl9jYW5kaWRhdGVzLmxlbmd0aCkKKyAgICAgICAgdGhpcy5fc2hvd0NhbmRp
ZGF0ZVdpbmRvdygpOworfQorCitBdXRvY29tcGxldGVyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5j
dGlvbiAoKSB7CisgICAgaWYgKHRoaXMuX3VwZGF0ZUNhbmRpZGF0ZXModGhpcy5faW5wdXRFbGVt
ZW50LnZhbHVlKSkKKyAgICAgICAgdGhpcy5zaG93KCk7Cit9CisKK0F1dG9jb21wbGV0ZXIucHJv
dG90eXBlLmhpZGUgPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKCF0aGlzLl9jYW5kaWRhdGVXaW5k
b3cpCisgICAgICAgIHJldHVybjsKKyAgICB0aGlzLl9jYW5kaWRhdGVXaW5kb3cuc3R5bGUuZGlz
cGxheSA9ICdub25lJzsKKyAgICB0aGlzLl9jYW5kaWRhdGVXaW5kb3cuaW5uZXJIVE1MID0gJyc7
Cit9CisKK0F1dG9jb21wbGV0ZXIucHJvdG90eXBlLl9zZWxlY3RJdGVtID0gZnVuY3Rpb24gKGlu
ZGV4KSB7CisgICAgaWYgKCF0aGlzLl9jYW5kaWRhdGVXaW5kb3cgfHwgdGhpcy5fY3VycmVudFNl
bGVjdGlvbiA9PSBpbmRleCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdmFyIGl0ZW0gPSB0aGlz
Ll9jYW5kaWRhdGVXaW5kb3cuY2hpbGROb2Rlc1tpbmRleF07CisgICAgaWYgKCFpdGVtKQorICAg
ICAgICByZXR1cm47CisgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdzZWxlY3RlZCcpOworCisgICAg
dmFyIG9sZEl0ZW0gPSB0aGlzLl9jYW5kaWRhdGVXaW5kb3cuY2hpbGROb2Rlc1t0aGlzLl9jdXJy
ZW50U2VsZWN0aW9uXTsKKyAgICBpZiAob2xkSXRlbSkKKyAgICAgICAgb2xkSXRlbS5jbGFzc0xp
c3QucmVtb3ZlKCdzZWxlY3RlZCcpOworCisgICAgdGhpcy5fY3VycmVudFNlbGVjdGlvbiA9IGlu
ZGV4OworfQorCitBdXRvY29tcGxldGVyLnByb3RvdHlwZS5uYXZpZ2F0ZSA9IGZ1bmN0aW9uIChl
dmVudCkgeworICAgIGlmIChldmVudC5rZXlDb2RlID09IDB4MjggLyogRE9NX1ZLX0RPV04gKi8p
IHsKKyAgICAgICAgdGhpcy5fc2VsZWN0SXRlbSh0aGlzLl9jdXJyZW50U2VsZWN0aW9uID09PSB1
bmRlZmluZWQgPyAwIDogTWF0aC5taW4odGhpcy5fY3VycmVudFNlbGVjdGlvbiArIDEsIHRoaXMu
X2NhbmRpZGF0ZXMubGVuZ3RoIC0gMSkpOworICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgp
OworICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PSAweDI2IC8qIERPTV9WS19VUCAqLykg
eworICAgICAgICB0aGlzLl9zZWxlY3RJdGVtKHRoaXMuX2N1cnJlbnRTZWxlY3Rpb24gPT09IHVu
ZGVmaW5lZCA/IHRoaXMuX2NhbmRpZGF0ZXMubGVuZ3RoIC0gMSA6IE1hdGgubWF4KHRoaXMuX2N1
cnJlbnRTZWxlY3Rpb24gLSAxLCAwKSk7CisgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7
CisgICAgfSBlbHNlIGlmIChldmVudC5rZXlDb2RlID09IDB4MEQgLyogVktfUkVUVVJOICovKSB7
CisgICAgICAgIGlmICh0aGlzLl9jdXJyZW50U2VsZWN0aW9uID09PSB1bmRlZmluZWQpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuX2lucHV0RWxlbWVudC52YWx1ZSA9IHRoaXMu
X2NhbmRpZGF0ZXNbdGhpcy5fY3VycmVudFNlbGVjdGlvbl07CisgICAgfSBlbHNlIGlmIChldmVu
dC5rZXlDb2RlID09IDB4MUIgLyogRE9NX1ZLX0VTQ0FQRSAqLykgeworICAgICAgICB0aGlzLmhp
ZGUoKTsKKyAgICB9Cit9CkluZGV4OiBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvanMvYnVpbGQuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2pzL2J1aWxkLmpzCShyZXZpc2lv
biAwKQorKysgV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2pzL2J1aWxkLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNjcgQEAKKy8vIEZJWE1FOiBEZS1kdXBsaWNhdGUgdGhpcyBjb2RlIHdpdGgg
cGVyZi53ZWJraXQub3JnCitmdW5jdGlvbiBUZXN0QnVpbGQocmVwb3NpdG9yaWVzLCBidWlsZGVy
cywgcmF3UnVuKSB7CisgICAgY29uc3QgcmV2aXNpb25zID0gcmF3UnVuLnJldmlzaW9uczsKKyAg
ICB2YXIgbWF4VGltZSA9IDA7CisgICAgdmFyIHJldmlzaW9uQ291bnQgPSAwOworICAgIGZvciAo
dmFyIHJlcG9zaXRvcnlOYW1lIGluIHJldmlzaW9ucykgeworICAgICAgICBtYXhUaW1lID0gTWF0
aC5tYXgobWF4VGltZSwgcmV2aXNpb25zW3JlcG9zaXRvcnlOYW1lXVsxXSk7IC8vIFJldmlzaW9u
IGlzIGFuIHBhaXIgKHJldmlzaW9uLCB0aW1lKQorICAgICAgICByZXZpc2lvbkNvdW50Kys7Cisg
ICAgfQorICAgIHZhciBtYXhUaW1lU3RyaW5nID0gbmV3IERhdGUobWF4VGltZSkudG9JU09TdHJp
bmcoKS5yZXBsYWNlKCdUJywgJyAnKS5yZXBsYWNlKC9cLlxkK1okLywgJycpOworICAgIHZhciBi
dWlsZFRpbWUgPSByYXdSdW4uYnVpbGRUaW1lOworICAgIHZhciBidWlsZFRpbWVTdHJpbmcgPSBu
ZXcgRGF0ZShidWlsZFRpbWUpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgnVCcsICcgJykucmVwbGFj
ZSgvXC5cZCtaJC8sICcnKTsKKworICAgIHRoaXMudGltZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJu
IG1heFRpbWU7IH0KKyAgICB0aGlzLmZvcm1hdHRlZFRpbWUgPSBmdW5jdGlvbiAoKSB7IHJldHVy
biBtYXhUaW1lU3RyaW5nOyB9CisgICAgdGhpcy5idWlsZFRpbWUgPSBmdW5jdGlvbiAoKSB7IHJl
dHVybiBidWlsZFRpbWU7IH0KKyAgICB0aGlzLmZvcm1hdHRlZEJ1aWxkVGltZSA9IGZ1bmN0aW9u
ICgpIHsgcmV0dXJuIGJ1aWxkVGltZVN0cmluZzsgfQorICAgIHRoaXMuYnVpbGRlciA9IGZ1bmN0
aW9uICgpIHsgcmV0dXJuIGJ1aWxkZXJzW3Jhd1J1bi5idWlsZGVyXS5uYW1lOyB9CisgICAgdGhp
cy5idWlsZE51bWJlciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJhd1J1bi5idWlsZE51bWJlcjsg
fQorICAgIHRoaXMuYnVpbGRVcmwgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciB0ZW1wbGF0
ZSA9IGJ1aWxkZXJzW3Jhd1J1bi5idWlsZGVyXS5idWlsZFVybDsKKyAgICAgICAgcmV0dXJuIHRl
bXBsYXRlID8gdGVtcGxhdGUucmVwbGFjZSgvXCRidWlsZE51bWJlci9nLCB0aGlzLmJ1aWxkTnVt
YmVyKCkpIDogbnVsbDsKKyAgICB9CisgICAgdGhpcy5yZXZpc2lvbiA9IGZ1bmN0aW9uKHJlcG9z
aXRvcnlJZCkgeyByZXR1cm4gcmV2aXNpb25zW3JlcG9zaXRvcnlJZF1bMF07IH0KKyAgICB0aGlz
LmZvcm1hdHRlZFJldmlzaW9ucyA9IGZ1bmN0aW9uIChwcmV2aW91c0J1aWxkKSB7CisgICAgICAg
IHZhciByZXN1bHQgPSB7fTsKKyAgICAgICAgZm9yICh2YXIgcmVwb3NpdG9yeUlkIGluIHJldmlz
aW9ucykgeworICAgICAgICAgICAgdmFyIHJlcG9zaXRvcnkgPSByZXBvc2l0b3JpZXNbcmVwb3Np
dG9yeUlkXTsKKyAgICAgICAgICAgIHZhciByZXBvc2l0b3J5TmFtZSA9IHJlcG9zaXRvcnkgPyBy
ZXBvc2l0b3J5Lm5hbWUgOiAnVW5rbm93biByZXBvc2l0b3J5ICcgKyByZXBvc2l0b3J5SWQ7Cisg
ICAgICAgICAgICB2YXIgcHJldmlvdXNSZXZpc2lvbiA9IHByZXZpb3VzQnVpbGQgPyBwcmV2aW91
c0J1aWxkLnJldmlzaW9uKHJlcG9zaXRvcnlJZCkgOiB1bmRlZmluZWQ7CisgICAgICAgICAgICB2
YXIgY3VycmVudFJldmlzaW9uID0gdGhpcy5yZXZpc2lvbihyZXBvc2l0b3J5SWQpOworICAgICAg
ICAgICAgaWYgKHByZXZpb3VzUmV2aXNpb24gPT09IGN1cnJlbnRSZXZpc2lvbikKKyAgICAgICAg
ICAgICAgICBwcmV2aW91c1JldmlzaW9uID0gdW5kZWZpbmVkOworCisgICAgICAgICAgICB2YXIg
cmV2aXNpb25QcmVmaXggPSAnJzsKKyAgICAgICAgICAgIGlmIChjdXJyZW50UmV2aXNpb24ubGVu
Z3RoIDwgMTApIHsgLy8gU1ZOLWxpa2UgcmV2aXNpb24uCisgICAgICAgICAgICAgICAgcmV2aXNp
b25QcmVmaXggPSAncic7CisgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzUmV2aXNpb24pCisg
ICAgICAgICAgICAgICAgICAgIHByZXZpb3VzUmV2aXNpb24gPSAocGFyc2VJbnQocHJldmlvdXNS
ZXZpc2lvbikgKyAxKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGxhYmVsRm9y
VGhpc1JlcG9zaXRvcnkgPSByZXZpc2lvbkNvdW50ID8gcmVwb3NpdG9yeU5hbWUgOiAnJzsKKyAg
ICAgICAgICAgIGlmIChwcmV2aW91c1JldmlzaW9uKSB7CisgICAgICAgICAgICAgICAgaWYgKGxh
YmVsRm9yVGhpc1JlcG9zaXRvcnkpCisgICAgICAgICAgICAgICAgICAgIGxhYmVsRm9yVGhpc1Jl
cG9zaXRvcnkgKz0gJyAnOworICAgICAgICAgICAgICAgIGxhYmVsRm9yVGhpc1JlcG9zaXRvcnkg
Kz0gcmV2aXNpb25QcmVmaXggKyBwcmV2aW91c1JldmlzaW9uICsgJy0nICsgcmV2aXNpb25QcmVm
aXggKyBjdXJyZW50UmV2aXNpb247CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICBsYWJlbEZvclRoaXNSZXBvc2l0b3J5ICs9ICcgQCAnICsgcmV2aXNpb25QcmVmaXggKyBjdXJy
ZW50UmV2aXNpb247CisKKyAgICAgICAgICAgIHZhciB1cmw7CisgICAgICAgICAgICBpZiAocmVw
b3NpdG9yeSkgeworICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1JldmlzaW9uKQorICAgICAg
ICAgICAgICAgICAgICB1cmwgPSAocmVwb3NpdG9yeVsnYmxhbWVVcmwnXSB8fCAnJykucmVwbGFj
ZSgvXCQxL2csIHByZXZpb3VzUmV2aXNpb24pLnJlcGxhY2UoL1wkMi9nLCBjdXJyZW50UmV2aXNp
b24pOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdXJsID0gKHJl
cG9zaXRvcnlbJ3VybCddIHx8ICcnKS5yZXBsYWNlKC9cJDEvZywgY3VycmVudFJldmlzaW9uKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0W3JlcG9zaXRvcnlOYW1lXSA9IHsK
KyAgICAgICAgICAgICAgICAnbGFiZWwnOiBsYWJlbEZvclRoaXNSZXBvc2l0b3J5LAorICAgICAg
ICAgICAgICAgICdjdXJyZW50UmV2aXNpb24nOiBjdXJyZW50UmV2aXNpb24sCisgICAgICAgICAg
ICAgICAgJ3ByZXZpb3VzUmV2aXNpb24nOiBwcmV2aW91c1JldmlzaW9uLAorICAgICAgICAgICAg
ICAgICd1cmwnOiB1cmwsCisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorfQpJbmRleDogV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2pzL2RvbS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy90ZXN0LXJlc3VsdHMvanMvZG9tLmpzCShyZXZpc2lv
biAwKQorKysgV2Vic2l0ZXMvdGVzdC1yZXN1bHRzL2pzL2RvbS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDI0IEBACitmdW5jdGlvbiB0ZXh0KHRleHQpIHsKKyAgICByZXR1cm4gZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7Cit9CisKK2Z1bmN0aW9uIGVsZW1lbnQoZWxlbWVudE5h
bWUsIGF0dHJpYnV0ZXNPckNoaWxkTm9kZXMsIGNoaWxkTm9kZXMpIHsKKyAgICB2YXIgZWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWxlbWVudE5hbWUpOworCisgICAgaWYgKGF0dHJp
YnV0ZXNPckNoaWxkTm9kZXMgaW5zdGFuY2VvZiBBcnJheSkKKyAgICAgICAgY2hpbGROb2RlcyA9
IGF0dHJpYnV0ZXNPckNoaWxkTm9kZXM7CisgICAgZWxzZSBpZiAoYXR0cmlidXRlc09yQ2hpbGRO
b2RlcykgeworICAgICAgICBmb3IgKHZhciBhdHRyaWJ1dGVOYW1lIGluIGF0dHJpYnV0ZXNPckNo
aWxkTm9kZXMpCisgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1l
LCBhdHRyaWJ1dGVzT3JDaGlsZE5vZGVzW2F0dHJpYnV0ZU5hbWVdKTsKKyAgICB9CisKKyAgICBp
ZiAoY2hpbGROb2RlcykgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkTm9kZXMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2YoY2hpbGROb2Rlc1tpXSkgPT09
ICdzdHJpbmcnKQorICAgICAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUoY2hpbGROb2Rlc1tpXSkpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGROb2Rlc1tpXSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIGVsZW1lbnQ7Cit9Cg==
</data>
<flag name="review"
          id="236958"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>