<?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>225986</bug_id>
          
          <creation_ts>2021-05-19 15:10:16 -0700</creation_ts>
          <short_desc>[git-webkit] Add support for native git commands (log/blame/show/etc.)</short_desc>
          <delta_ts>2022-06-23 13:53:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=237439</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>225616</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Johnson">dean_johnson</reporter>
          <assigned_to name="Dean Johnson">dean_johnson</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>ap</cc>
    
    <cc>bfulgham</cc>
    
    <cc>dean_johnson</cc>
    
    <cc>dewei_zhu</cc>
    
    <cc>jbedard</cc>
    
    <cc>kocsen_chung</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1761724</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2021-05-19 15:10:16 -0700</bug_when>
    <thetext>git-webkit is our primary way for working with identifiers. We should support using identifiers with native git commands and annotating identifiers where hashes/revisions exist in output of git commands like `git log`, `git blame`, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761726</commentid>
    <comment_count>1</comment_count>
      <attachid>429099</attachid>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2021-05-19 15:15:17 -0700</bug_when>
    <thetext>Created attachment 429099
v1

Couple notes on this patch:
- This introduces a robust caching layer for conversions between identifiers, hashes and revisions. We may want to introduce / review that code separately.
- There are still a couple failing tests that seems related to the cache.
- New tests should be written for git_fallback both in making sure the original commands work, and for annotation.
- We need to support showing the correct error message when a git command fails (currently it shows nothing).

Since the mocking code needs additional updates to support the caching layer, uploading the patch as-is so Jonathan and I can more easily iterate on it together.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761741</commentid>
    <comment_count>2</comment_count>
      <attachid>429099</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-05-19 15:47:59 -0700</bug_when>
    <thetext>Comment on attachment 429099
v1

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

Wanted to call out a few things that jumped out to me on a first-pass.

Big picture, we want to split this change up into at least 2 parts: the cache and adding the new commands. As a side note, it should be pretty straight forward to test the filter `git log` given that we have already done the heavy-lifting to mock the output of `git log`

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:182
&gt; +                        print(&apos;[{}] Processed 1000 entries for branch {}&apos;.format(round(time.time(), 2), branch))

This shows up way too many times in unit test output. Haven&apos;t thought too much about if we want it at all, but it certainly shouldn&apos;t be a print statement, given we do configure logging for this module

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:203
&gt; +                ) if self.branch else mocks.ProcessCompletion(returncode=128),

self.branch can never be be none under the current implementation. I think this should be this:

mocks.Subprocess.Route(
    self.executable, &apos;branch&apos;, &apos;--show-current&apos;,
    cwd=self.path,
    generator=lambda *args, **kwargs: mocks.ProcessCompletion(
        returncode=0,
        stdout=&apos;{}\n&apos;.format(&apos;&apos; if self.detached else self.branch),
    )

Also pretty certain the fact that this will return a branch even when the head is detached is the cause of at least one of your test failures.

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:206
&gt; +                self.executable, &apos;branch&apos;,

We should just remove the `-a` from the existing `self.executable, &apos;branch&apos;, &apos;-a&apos;`, I think

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/program/git_fallback.py:133
&gt; +        with tempfile.TemporaryFile(suffix=f&apos;git-{cls.name}&apos;) as f:

We still need Python 2 compatibility :(

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/canonicalize_unittest.py:39
&gt; +            shutil.rmtree(self.path)

Should all of our SCM test classes share a base class so we aren&apos;t duplicating this?

Also, if I recall correctly, the mock git repo is basing the repository name off of the last folder. So, if we make this:

def setUp(self):
    self.container = tempfile.mkdtemp()
    self.path = os.join(self.container, &apos;repository&apos;)
    os.mkdir(self.path)

def tearDown(self):
    if os.path.exists(self.container) and self.container.startswith(&apos;/tmp&apos;):
        shut.rmtree(self.container)

we wouldn&apos;t need to change tests.

&gt; Tools/Scripts/webkitpy/common/checkout/scm/svn.py:103
&gt; +            return False

This bit is causing a failure in webkitpy.common.checkout.scm.detection_unittest.SCMDetectorTest.test_detect_scm_system, I think. It seems likely it&apos;s the test that&apos;s wrong, not your code. But in either case, this change (and the accompanying test change) should probably be separated from the rest of the cache work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761749</commentid>
    <comment_count>3</comment_count>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2021-05-19 16:01:54 -0700</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #2)
&gt; Comment on attachment 429099 [details]
&gt; v1
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=429099&amp;action=review
&gt; 
&gt; Wanted to call out a few things that jumped out to me on a first-pass.
&gt; 
&gt; Big picture, we want to split this change up into at least 2 parts: the
&gt; cache and adding the new commands. As a side note, it should be pretty
&gt; straight forward to test the filter `git log` given that we have already
&gt; done the heavy-lifting to mock the output of `git log`
&gt; 
&gt; &gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:182
&gt; &gt; +                        print(&apos;[{}] Processed 1000 entries for branch {}&apos;.format(round(time.time(), 2), branch))
&gt; 
&gt; This shows up way too many times in unit test output. Haven&apos;t thought too
&gt; much about if we want it at all, but it certainly shouldn&apos;t be a print
&gt; statement, given we do configure logging for this module
Yeah, looks like I missed removing that.
&gt; 
&gt; &gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:203
&gt; &gt; +                ) if self.branch else mocks.ProcessCompletion(returncode=128),
&gt; 
&gt; self.branch can never be be none under the current implementation. I think
&gt; this should be this:
&gt; 
&gt; mocks.Subprocess.Route(
&gt;     self.executable, &apos;branch&apos;, &apos;--show-current&apos;,
&gt;     cwd=self.path,
&gt;     generator=lambda *args, **kwargs: mocks.ProcessCompletion(
&gt;         returncode=0,
&gt;         stdout=&apos;{}\n&apos;.format(&apos;&apos; if self.detached else self.branch),
&gt;     )
Technically this output would not match `git branch --show-current` -- if there is no branch there is no output. But I can update it with that in mind.
&gt; 
&gt; Also pretty certain the fact that this will return a branch even when the
&gt; head is detached is the cause of at least one of your test failures.
&gt; 
&gt; &gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:206
&gt; &gt; +                self.executable, &apos;branch&apos;,
&gt; 
&gt; We should just remove the `-a` from the existing `self.executable, &apos;branch&apos;,
&gt; &apos;-a&apos;`, I think
That results in different output -- adding `-a` causes the output to include remotes.
&gt; 
&gt; &gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/program/git_fallback.py:133
&gt; &gt; +        with tempfile.TemporaryFile(suffix=f&apos;git-{cls.name}&apos;) as f:
&gt; 
&gt; We still need Python 2 compatibility :(
Will update.
&gt; 
&gt; &gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/canonicalize_unittest.py:39
&gt; &gt; +            shutil.rmtree(self.path)
&gt; 
&gt; Should all of our SCM test classes share a base class so we aren&apos;t
&gt; duplicating this?
&gt; 
&gt; Also, if I recall correctly, the mock git repo is basing the repository name
&gt; off of the last folder. So, if we make this:
&gt; 
&gt; def setUp(self):
&gt;     self.container = tempfile.mkdtemp()
&gt;     self.path = os.join(self.container, &apos;repository&apos;)
&gt;     os.mkdir(self.path)
&gt; 
&gt; def tearDown(self):
&gt;     if os.path.exists(self.container) and self.container.startswith(&apos;/tmp&apos;):
&gt;         shut.rmtree(self.container)
&gt; 
&gt; we wouldn&apos;t need to change tests.
I&apos;ll try this approach.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/checkout/scm/svn.py:103
&gt; &gt; +            return False
&gt; 
&gt; This bit is causing a failure in
&gt; webkitpy.common.checkout.scm.detection_unittest.SCMDetectorTest.
&gt; test_detect_scm_system, I think. It seems likely it&apos;s the test that&apos;s wrong,
&gt; not your code. But in either case, this change (and the accompanying test
&gt; change) should probably be separated from the rest of the cache work.

I&apos;ll create a new bug w/ a patch for the mapping cache, but probably not by EOD.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764077</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-26 15:11:42 -0700</bug_when>
    <thetext>&lt;rdar://problem/78535096&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1877813</commentid>
    <comment_count>5</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2022-06-23 13:53:14 -0700</bug_when>
    <thetext>Jonathan (4/4/2022):
Addressed this in https://commits.webkit.org/240074@main, marking this bug as resolved.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429099</attachid>
            <date>2021-05-19 15:15:17 -0700</date>
            <delta_ts>2021-05-19 15:15:17 -0700</delta_ts>
            <desc>v1</desc>
            <filename>git_fallback-identifier_cache.patch</filename>
            <type>text/plain</type>
            <size>57115</size>
            <attacher name="Dean Johnson">dean_johnson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxMmYz
OTc0NTc3YWUuLjM5NjFmNDM0YjQ0ZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDIxLTA1LTEzICBKb25hdGhhbiBC
ZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KKworICAgICAgICBbd2Via2l0c2NtcHldIENhY2hl
IGlkZW50aWZpZXJzIGluIEdpdCBjaGVja291dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTYxNgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzc3
ODkyMzA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V0lQLgorCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvbG9jYWwvZ2l0LnB5OgorICAgICAgICAoR2l0LkNhY2hlKTogQ2xhc3MgaG9sZGluZyBhIGNh
Y2hlIGFsbG93aW5nIHF1aWNrIG1hcHBpbmcgYmV0d2VlbiBoYXNoZXMsIGlkZW50aWZpZXJzIGFu
ZCByZXZpc2lvbnMuCisgICAgICAgIChHaXQuQ2FjaGUuX19pbml0X18pOiBMb2FkIGNhY2hlIGZy
b20ganNvbiBmaWxlIG9uIGRpc2suCisgICAgICAgIChHaXQuQ2FjaGUuX2ZpbGwpOiBQb3B1bGF0
ZSByZXZpc2lvbiBhbmQgaGFzaCB0byBpZGVudGlmaWVyIGRpY3Rpb25hcmllcy4KKyAgICAgICAg
KEdpdC5DYWNoZS5faW5zZXJ0KTogSW5zZXJ0IGhhc2ggYW5kIHJldmlzaW9uIGludG8gY2FjaGUg
Zm9yIGJyYW5jaC4KKyAgICAgICAgKEdpdC5DYWNoZS5wYXRoKTogUGF0aCB0byBsb2NhdGlvbiBv
ZiBjYWNoZSBvbiBkaXNrLgorICAgICAgICAoR2l0LkNhY2hlLnBvcHVsYXRlKTogUGFyc2UgZ2l0
LWxvZyBhbmQgcG9wdWxhdGUgY2FjaGUuCisgICAgICAgIChHaXQuQ2FjaGUucmV2aXNpb24pOiBH
aXZlbiBhbiBpZGVudGlmaWVyIG9yIGhhc2gsIGZpbmQgdGhlIHJldmlzaW9uLgorICAgICAgICAo
R2l0LkNhY2hlLmhhc2gpOiBHaXZlbiBhbiBpZGVudGlmaWVyIG9yIHJldmlzaW9uLCBmaW5kIHRo
ZSBhc2guCisgICAgICAgIChHaXQuQ2FjaGUuaWRlbnRpZmllcik6IEdpdmVuIGEgaGFzaCBvciBy
ZXZpc2lvbiwgZGV0ZXJtaW5lIHRoZSBpZGVudGlmaWVyLgorICAgICAgICAoR2l0Ll9faW5pdF9f
KToKKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9t
b2Nrcy9sb2NhbC9naXQucHk6CisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvd2Via2l0c2NtcHkvdGVzdC9naXRfdW5pdHRlc3QucHk6CisgICAgICAgIChUZXN0R2l0LnRl
c3RfY2FjaGUpOgorICAgICAgICAoVGVzdEdpdCk6CisgICAgICAgIChUZXN0R2l0LnRlc3RfcmV2
aXNpb25fY2FjaGUpOgorCiAyMDIxLTA1LTEzICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFw
cGxlLmNvbT4KIAogICAgICAgICBbZXdzXSBTdHlsZSBmaXhlcyBpbiBzdGVwcy5weQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy9naXQtd2Via2l0IGIvVG9vbHMvU2NyaXB0cy9naXQtd2Via2l0
CmluZGV4IDRkZWUzMzA0MjY1YS4uODNjNDJhNWU2ZWQwIDEwMDc1NQotLS0gYS9Ub29scy9TY3Jp
cHRzL2dpdC13ZWJraXQKKysrIGIvVG9vbHMvU2NyaXB0cy9naXQtd2Via2l0CkBAIC0xLDUgKzEs
NCBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwotCiAjIENvcHlyaWdodCAoQykgMjAyMCwgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDIs
NiArNDEsOCBAQCBpZiAnX19tYWluX18nID09IF9fbmFtZV9fOgogICAgICAgICAgICAgaWYgbmlj
ayBub3QgaW4gY29udHJpYnV0b3JzOgogICAgICAgICAgICAgICAgIGNvbnRyaWJ1dG9yc1tuaWNr
XSA9IGMKIAorICAgIG9zLmVudmlyb25bJ0lERU5USUZJRVJfTUFQUElOR1NfUEFUSCddID0gb3Mu
cGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICd3ZWJraXRweScsICcuY2FjaGVz
JykKKwogICAgIHN5cy5leGl0KHByb2dyYW0ubWFpbigKICAgICAgICAgcGF0aD1vcy5wYXRoLmRp
cm5hbWUoX19maWxlX18pLAogICAgICAgICBjb250cmlidXRvcnM9Y29udHJpYnV0b3JzLApkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkv
bG9jYWwvZ2l0LnB5IGIvVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0
c2NtcHkvbG9jYWwvZ2l0LnB5CmluZGV4IDllNmNhN2ZiMGM3NC4uMzg0ODFhMmZjOGZhIDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9s
b2NhbC9naXQucHkKKysrIGIvVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvbG9jYWwvZ2l0LnB5CkBAIC0yMSw2ICsyMSw3IEBACiAjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAK
IGltcG9ydCBjYWxlbmRhcgoraW1wb3J0IGpzb24KIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MK
IGltcG9ydCByZQpAQCAtMzYsNiArMzcsMzIxIEBAIGZyb20gd2Via2l0c2NtcHkubG9jYWwgaW1w
b3J0IFNjbQogZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgQ29tbWl0LCBDb250cmlidXRvciwgbG9n
CiAKIAorY2xhc3MgR2l0Q2FjaGUob2JqZWN0KToKKyAgICBIQVNIX1NJWkUgPSAxMgorICAgIEhB
U0hfUEFSVElUSU9OX1NJWkUgPSA2CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVwbywgaW5p
dGlhbGl6ZT1GYWxzZSk6CisgICAgICAgIHNlbGYucmVwbyA9IHJlcG8KKyAgICAgICAgc2VsZi5f
bWFwcGluZ3MgPSB7fQorICAgICAgICBzZWxmLl9rbm93bl91cGRhdGVkX2JyYW5jaGVzID0gc2V0
KCkKKworICAgICAgICBpZiBpbml0aWFsaXplOgorICAgICAgICAgICAgc2VsZi5pbml0aWFsaXpl
KGJyYW5jaD1zZWxmLnJlcG8uZGVmYXVsdF9icmFuY2gpCisKKyAgICBkZWYgaW5pdGlhbGl6ZShz
ZWxmLCBicmFuY2g9Tm9uZSk6CisgICAgICAgICcnJworICAgICAgICBGb3JtYXQgZm9yIG1hcHBp
bmcgaXMgZXhwZWN0ZWQgdG8gYmU6CisgICAgICAgICAgbWFwcGluZyA9IHsKKyAgICAgICAgICAg
IGJyYW5jaDogeworICAgICAgICAgICAgICAnY29tbWl0cyc6IHt9LAorICAgICAgICAgICAgICAn
cmV2aXNpb25zJzoge30sCisgICAgICAgICAgICAgICdsYXN0X3VwZGF0ZWQnOiB7CisgICAgICAg
ICAgICAgICAgJ2NvbW1pdCc6ICcnIG9yIG5pbCwKKyAgICAgICAgICAgICAgICAnaWRlbnRpZmll
cic6IDAgb3IgbmlsLAorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
fQorICAgICAgICAnJycKKworICAgICAgICBpZiBub3QgYnJhbmNoOgorICAgICAgICAgICAgcmV0
dXJuCisKKyAgICAgICAganNvbl9wYXRoID0gc2VsZi5wYXRoKGJyYW5jaCkKKyAgICAgICAgaWYg
b3MucGF0aC5leGlzdHMoanNvbl9wYXRoKSBhbmQgYnJhbmNoIG5vdCBpbiBzZWxmLl9tYXBwaW5n
czoKKyAgICAgICAgICAgIHdpdGggb3Blbihqc29uX3BhdGgpIGFzIGZpbGU6CisgICAgICAgICAg
ICAgICAgY29udGVudCA9IGpzb24ubG9hZChmaWxlKQorICAgICAgICAgICAgICAgIHNlbGYuX21h
cHBpbmdzW2JyYW5jaF0gPSBjb250ZW50CisgICAgICAgIGVsaWYgYnJhbmNoIG5vdCBpbiBzZWxm
Ll9tYXBwaW5nczoKKyAgICAgICAgICAgIHNlbGYuX21hcHBpbmdzW2JyYW5jaF0gPSB7J2NvbW1p
dHMnOiB7fSwgJ3JldmlzaW9ucyc6IHt9LCAnbGFzdF91cGRhdGVkJzoge319CisKKyAgICBkZWYg
cGF0aChzZWxmLCBicmFuY2gpOgorICAgICAgICBiYXNlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2Vs
Zi5yZXBvLnJvb3RfcGF0aCwgJy5naXQnLCAnY2FjaGVzJywgYnJhbmNoKQorICAgICAgICB0cnk6
CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYmFzZV9wYXRoKToKKyAgICAgICAg
ICAgICAgICBvcy5tYWtlZGlycyhiYXNlX3BhdGgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiAg
IyBGb3IgdW5pdCB0ZXN0cworICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJldHVybiBvcy5w
YXRoLmpvaW4oYmFzZV9wYXRoLCAnaWRlbnRpZmllcnMuanNvbicpCisKKyAgICBkZWYgcG9wdWxh
dGUoc2VsZiwgYnJhbmNoKToKKyAgICAgICAgaWYgYnJhbmNoIGluIHNlbGYuX2tub3duX3VwZGF0
ZWRfYnJhbmNoZXM6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLmluaXRpYWxp
emUoYnJhbmNoKQorICAgICAgICBlbmRfYnJhbmNoID0gb3MucGF0aC5qb2luKHNlbGYucmVwby51
cHN0cmVhbV9yZW1vdGUsIGJyYW5jaCkKKworICAgICAgICBzdGFydCA9IHNlbGYuX21hcHBpbmdz
LmdldChicmFuY2gsIHt9KS5nZXQoJ2xhc3RfdXBkYXRlZCcpCisKKyAgICAgICAgcmVzdWx0ID0g
cnVuKFtzZWxmLnJlcG8uZXhlY3V0YWJsZSgpLCAncmV2LXBhcnNlJywgZW5kX2JyYW5jaF0sIGN3
ZD1zZWxmLnJlcG8ucm9vdF9wYXRoLCBjYXB0dXJlX291dHB1dD1UcnVlLCBlbmNvZGluZz0ndXRm
LTgnKQorICAgICAgICBpc19jYWNoZWFibGVfYnJhbmNoID0gcmVzdWx0LnJldHVybmNvZGUgPT0g
MCAgIyBSZW1vdGUgYnJhbmNoIGV4aXN0cworICAgICAgICBvdXRwdXQgPSByZXN1bHQuc3Rkb3V0
LnN0cmlwKCkKKworICAgICAgICBpZiBvdXRwdXQgYW5kIHN0YXJ0IGFuZCBzdGFydFsnY29tbWl0
J10gPT0gb3V0cHV0WzpsZW4oc3RhcnRbJ2NvbW1pdCddKV06CisgICAgICAgICAgICBzZWxmLl9r
bm93bl91cGRhdGVkX2JyYW5jaGVzLmFkZChicmFuY2gpCisgICAgICAgICAgICByZXR1cm4gICMg
Q2FjaGUgaXMgdXAgdG8gZGF0ZQorCisgICAgICAgIGlmIG5vdCBpc19jYWNoZWFibGVfYnJhbmNo
OgorICAgICAgICAgICAgc2VsZi5fbWFwcGluZ3NbYnJhbmNoXSA9IHsnY29tbWl0cyc6IHt9LCAn
cmV2aXNpb25zJzoge30sICdsYXN0X3VwZGF0ZWQnOiB7fX0KKyAgICAgICAgICAgIHNlbGYuX2tu
b3duX3VwZGF0ZWRfYnJhbmNoZXMuYWRkKGJyYW5jaCkKKyAgICAgICAgICAgIHJldHVybgorCisg
ICAgICAgIG9yZGVyX3N0YXJ0ID0gMQorICAgICAgICByYW5nZV9hcmcgPSAnJworICAgICAgICBw
cmltYXJ5X3Vwc3RyZWFtX3JlbW90ZSA9IG9zLnBhdGguam9pbihzZWxmLnJlcG8udXBzdHJlYW1f
cmVtb3RlLCBzZWxmLnJlcG8uZGVmYXVsdF9icmFuY2gpCisgICAgICAgIGlmIHN0YXJ0IGFuZCBz
dGFydC5nZXQoJ2lkZW50aWZpZXInKToKKyAgICAgICAgICAgIG9yZGVyX3N0YXJ0ID0gaW50KHN0
YXJ0WydpZGVudGlmaWVyJ10pCisgICAgICAgICAgICByYW5nZV9hcmcgKz0gc3RhcnRbJ2NvbW1p
dCddICsgJy4uJworICAgICAgICBlbGlmIGJyYW5jaCAhPSBzZWxmLnJlcG8uZGVmYXVsdF9icmFu
Y2g6CisgICAgICAgICAgICByYW5nZV9hcmcgKz0gcHJpbWFyeV91cHN0cmVhbV9yZW1vdGUgKyAn
Li4nCisKKyAgICAgICAgcmFuZ2VfYXJnICs9IGVuZF9icmFuY2gKKworICAgICAgICAjIEZpcnN0
IHRpbWUgcnVubmluZywgYmUgc3VyZSB0byByZWNvcmQgd2hlcmUgbm9uLWRlZmF1bHQgYnJhbmNo
IGZvcmtlZCBmcm9tLgorICAgICAgICBpZiBvcmRlcl9zdGFydCA9PSAxIGFuZCBicmFuY2ggIT0g
c2VsZi5yZXBvLmRlZmF1bHRfYnJhbmNoOgorICAgICAgICAgICAgcHJpbWFyeV9icmFuY2hfaW50
ZXJzZWN0aW9uX2NvbW1hbmQgPSBbc2VsZi5yZXBvLmV4ZWN1dGFibGUoKSwgJ21lcmdlLWJhc2Un
LCBwcmltYXJ5X3Vwc3RyZWFtX3JlbW90ZSwgZW5kX2JyYW5jaF0KKyAgICAgICAgICAgIGZpcnN0
X2NvbW1pdCA9IHJ1bihwcmltYXJ5X2JyYW5jaF9pbnRlcnNlY3Rpb25fY29tbWFuZCwgY3dkPXNl
bGYucmVwby5yb290X3BhdGgsIGNhcHR1cmVfb3V0cHV0PVRydWUsIGVuY29kaW5nPSd1dGYtOCcp
LnN0ZG91dC5zdHJpcCgpCisgICAgICAgICAgICBzZWxmLnNldF9oYXNoX21hcHBpbmcoYnJhbmNo
LCBmaXJzdF9jb21taXQsIDApCisKKyAgICAgICAgY2FjaGVfcG9wdWxhdGlvbl9jb21tYW5kID0g
W3NlbGYucmVwby5leGVjdXRhYmxlKCksICdsb2cnLCByYW5nZV9hcmcsICctLXJldmVyc2UnXQor
ICAgICAgICByZXN1bHRzID0gcnVuKGNhY2hlX3BvcHVsYXRpb25fY29tbWFuZCwgY3dkPXNlbGYu
cmVwby5yb290X3BhdGgsIGNhcHR1cmVfb3V0cHV0PVRydWUsIGVuY29kaW5nPSd1dGYtOCcpCisK
KyAgICAgICAgIyBUZWNobmljYWxseSB3ZSBzaG91bGQgbmV2ZXIgc2VlIHRoaXMgaW4gYSBsb2Nh
bCBjaGVja291dCwgYnV0IGl0J3MgcG9zc2libGUgaW4gdGVzdHMuCisgICAgICAgIGlmIHJlc3Vs
dHMuc3Rkb3V0ID09ICcnOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbG9nID0gTm9u
ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBrd2FyZ3MgPSBkaWN0KCkKKyAgICAgICAgICAg
IGlmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsIDApOgorICAgICAgICAgICAgICAgIGt3YXJncyA9
IGRpY3QoZW5jb2Rpbmc9J3V0Zi04JykKKworICAgICAgICAgICAgbG9nID0gc3VicHJvY2Vzcy5Q
b3BlbihjYWNoZV9wb3B1bGF0aW9uX2NvbW1hbmQsIGN3ZD1zZWxmLnJlcG8ucm9vdF9wYXRoLAor
ICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNz
LlBJUEUsICoqa3dhcmdzKQorICAgICAgICAgICAgaWYgbG9nLnBvbGwoKToKKyAgICAgICAgICAg
ICAgICByYWlzZSBzZWxmLnJlcG8uRXhjZXB0aW9uKCJGYWlsZWQgdG8gY29uc3RydWN0IGJyYW5j
aCBoaXN0b3J5IGZvciAne30nIi5mb3JtYXQoYnJhbmNoKSkKKworICAgICAgICAgICAgX2hhc2gs
IHJldmlzaW9uLCBsYXN0X2hhc2ggPSBOb25lLCBOb25lLCBOb25lCisgICAgICAgICAgICByZWxh
dGl2ZV9pZGVudGlmaWVyX2Zyb21fc3RhcnQgPSAwCisKKyAgICAgICAgICAgIGxpbmUgPSBsb2cu
c3Rkb3V0LnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHdoaWxlIGxpbmU6CisgICAgICAgICAgICAg
ICAgaWYgbm90IGxpbmUuc3RyaXAoKToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxvZy5z
dGRvdXQucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAg
ICAgICAgICAgIyBDYWNoZSBidWlsZGluZyBtdXN0IHN1cHBvcnQgY2FzZXMgd2hlcmUgYSByZXBv
c2l0b3J5IG1heSBvciBtYXkgbm90IGhhdmUgaGlzdG9yaWNhbCBnaXQtc3ZuIGRhdGEuCisgICAg
ICAgICAgICAgICAgaGFzaF9tYXRjaCA9IHNlbGYucmVwby5DT01NSVRfRlJPTV9MT0cubWF0Y2go
bGluZSkKKyAgICAgICAgICAgICAgICBpZiBoYXNoX21hdGNoIGFuZCBfaGFzaCBpcyBOb25lOiAg
IyBnaXQtc3ZuIGxvZ2ljCisgICAgICAgICAgICAgICAgICAgIGlmIGxhc3RfaGFzaCBpcyBub3Qg
Tm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBfaGFzaCBpcyBOb25lLCAiRXJy
b3I6IFNvbWVob3cgZ290IGEgbm9uLWVtcHR5IGhhc2gge30uLi4gbWF5YmUgcmV2aXNpb24gZm9y
IHByZXZpb3VzIGNvbW1pdCBmYWlsZWQgdG8gYmUgY2FwdHVyZWQ/Ii5mb3JtYXQoX2hhc2gpCisK
KyAgICAgICAgICAgICAgICAgICAgX2hhc2ggPSBoYXNoX21hdGNoLmdyb3VwKCdjb21taXQnKQor
ICAgICAgICAgICAgICAgIGVsaWYgaGFzaF9tYXRjaCBhbmQgX2hhc2ggaXMgbm90IE5vbmU6ICAj
IG5vbiBnaXQtc3ZuIGxvZ2ljCisgICAgICAgICAgICAgICAgICAgIGxhc3RfaGFzaCA9IF9oYXNo
CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0X2hhc2hfbWFwcGluZyhicmFuY2gsIF9oYXNo
LCBvcmRlcl9zdGFydCArIHJlbGF0aXZlX2lkZW50aWZpZXJfZnJvbV9zdGFydCkKKyAgICAgICAg
ICAgICAgICAgICAgcmVsYXRpdmVfaWRlbnRpZmllcl9mcm9tX3N0YXJ0ICs9IDEKKworICAgICAg
ICAgICAgICAgICAgICBfaGFzaCA9IGhhc2hfbWF0Y2guZ3JvdXAoJ2NvbW1pdCcpCisKKyAgICAg
ICAgICAgICAgICByZXZpc2lvbl9tYXRjaCA9IHNlbGYucmVwby5HSVRfU1ZOX1JFVklTSU9OLm1h
dGNoKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgcmV2aXNpb25fbWF0Y2g6ICAjIGdpdC1zdm4g
bG9naWMKKyAgICAgICAgICAgICAgICAgICAgcmV2aXNpb24gPSBzdHIocmV2aXNpb25fbWF0Y2gu
Z3JvdXAoJ3JldmlzaW9uJykpCisKKyAgICAgICAgICAgICAgICAgICAgIyBGbHVzaCB0byBtYXBw
aW5nCisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBfaGFzaCBpcyBub3QgTm9uZSBhbmQgcmV2
aXNpb24gaXMgbm90IE5vbmUsICJFcnJvcjogU29tZWhvdyByZXZpc2lvbiBvciBfaGFzaCBpcyBO
b25lLi4uIgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNldF9oYXNoX21hcHBpbmcoYnJhbmNo
LCBfaGFzaCwgb3JkZXJfc3RhcnQgKyByZWxhdGl2ZV9pZGVudGlmaWVyX2Zyb21fc3RhcnQpCisg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX21hcHBpbmdzW2JyYW5jaF1bJ3JldmlzaW9ucyddW3Jl
dmlzaW9uXSA9IG9yZGVyX3N0YXJ0ICsgcmVsYXRpdmVfaWRlbnRpZmllcl9mcm9tX3N0YXJ0CisK
KyAgICAgICAgICAgICAgICAgICAgbGFzdF9oYXNoID0gX2hhc2gKKyAgICAgICAgICAgICAgICAg
ICAgX2hhc2gsIHJldmlzaW9uID0gTm9uZSwgTm9uZQorICAgICAgICAgICAgICAgICAgICByZWxh
dGl2ZV9pZGVudGlmaWVyX2Zyb21fc3RhcnQgKz0gMQorCisgICAgICAgICAgICAgICAgICAgIGlm
IChvcmRlcl9zdGFydCArIHJlbGF0aXZlX2lkZW50aWZpZXJfZnJvbV9zdGFydCkgJSAxMDAwID09
IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnW3t9XSBQcm9jZXNzZWQgMTAwMCBl
bnRyaWVzIGZvciBicmFuY2gge30nLmZvcm1hdChyb3VuZCh0aW1lLnRpbWUoKSwgMiksIGJyYW5j
aCkpCisKKyAgICAgICAgICAgICAgICBsaW5lID0gbG9nLnN0ZG91dC5yZWFkbGluZSgpCisKKyAg
ICAgICAgICAgIGFzc2VydCByZXZpc2lvbiBpcyBOb25lLCAnRXJyb3I6IEV4cGVjdGVkIHJldmlz
aW9uIHRvIGJlIE5vbmUgYWZ0ZXIgZ2VuZXJhdGluZyBjYWNoZSBmb3Ige30uJy5mb3JtYXQoYnJh
bmNoKQorICAgICAgICAgICAgaWYgX2hhc2g6ICAjIG5vbiBnaXQtc3ZuIGxvZ2ljOyBmbHVzaCBz
aW5jZSB3ZSBwcm9jZXNzIGFmdGVyIGVhY2ggY29tbWl0LgorICAgICAgICAgICAgICAgIGxhc3Rf
aGFzaCA9IF9oYXNoCisgICAgICAgICAgICAgICAgc2VsZi5zZXRfaGFzaF9tYXBwaW5nKGJyYW5j
aCwgX2hhc2gsIG9yZGVyX3N0YXJ0ICsgcmVsYXRpdmVfaWRlbnRpZmllcl9mcm9tX3N0YXJ0KQor
ICAgICAgICAgICAgICAgIHJlbGF0aXZlX2lkZW50aWZpZXJfZnJvbV9zdGFydCArPSAxCisKKyAg
ICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIGxvZzoKKyAgICAgICAgICAgICAgICBsb2cu
a2lsbCgpCisKKyAgICAgICAgc2VsZi5fbWFwcGluZ3NbYnJhbmNoXVsnbGFzdF91cGRhdGVkJ10g
PSB7J2NvbW1pdCc6IGxhc3RfaGFzaCwgJ2lkZW50aWZpZXInOiBvcmRlcl9zdGFydCArIHJlbGF0
aXZlX2lkZW50aWZpZXJfZnJvbV9zdGFydH0KKyAgICAgICAgc2VsZi5fa25vd25fdXBkYXRlZF9i
cmFuY2hlcy5hZGQoYnJhbmNoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3Bl
bihzZWxmLnBhdGgoYnJhbmNoKSwgJ3cnKSBhcyBmaWxlOgorICAgICAgICAgICAgICAgIGpzb24u
ZHVtcChzZWxmLl9tYXBwaW5nc1ticmFuY2hdLCBmaWxlLCBpbmRlbnQ9NCkKKyAgICAgICAgZXhj
ZXB0IChJT0Vycm9yLCBPU0Vycm9yLCBGaWxlTm90Rm91bmRFcnJvcik6CisgICAgICAgICAgICBz
ZWxmLnJlcG8ubG9nKCJGYWlsZWQgdG8gd3JpdGUgaWRlbnRpZmllciBjYWNoZSB0byAne30nIi5m
b3JtYXQoc2VsZi5wYXRoKSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYucGF0
aChicmFuY2gpKToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi5wYXRoKGJyYW5jaCkp
CisKKyAgICBkZWYgc2V0X2hhc2hfbWFwcGluZyhzZWxmLCBicmFuY2gsIGhhc2hfa2V5LCBpZGVu
dGlmaWVyKToKKyAgICAgICAgJycnCisgICAgICAgIFRvIHN1cHBvcnQgdXNpbmcgdGhlIGNhY2hl
IGZvciBjb21taXRzIGFzIHNob3J0IGFzIDYgY2hhcmFjdGVycywgdXNlIGEgbmVzdGVkIGRpY3Rp
b25hcnkKKyAgICAgICAgZm9yIHRoZSBmaXJzdCA2IGNoYXJhY3RlcnMgLT4gcmVtYWluaW5nIDM0
IGNoYXJhY3RlcnMgLT4gaWRlbnRpZmllci4KKworICAgICAgICBFeGFtcGxlOgorICAgICAgICBo
YXNoMTogOWMzMTRhMjQyMDczNWQwMjljZGY4OWY2YzMwNzMwODU1Y2EyYTRlNQorICAgICAgICBo
YXNoMjogOWMzMTRhMjk5MTBhOTVhNzZmMmQ5MzBhZWE4ZTgzMTI4ZmZhNTQ5NQorICAgICAgICAi
OWMzMTRhIjogeworICAgICAgICAgICAgIjI0MjA3MzVkMDI5Y2RmODlmNmMzMDczMDg1NWNhMmE0
ZTUiOiAxMSwKKyAgICAgICAgICAgICIyOTkxMGE5NWE3NmYyZDkzMGFlYThlODMxMjhmZmE1NDk1
IjogMzI0ODAKKyAgICAgICAgfSwKKyAgICAgICAgJycnCisgICAgICAgIGZpcnN0X3BhcnRpdGlv
biA9IGhhc2hfa2V5WzpzZWxmLkhBU0hfUEFSVElUSU9OX1NJWkVdCisgICAgICAgIHJlbWFpbmlu
ZyA9IGhhc2hfa2V5W3NlbGYuSEFTSF9QQVJUSVRJT05fU0laRTpdCisgICAgICAgIHNlbGYuX21h
cHBpbmdzW2JyYW5jaF1bJ2NvbW1pdHMnXS5zZXRkZWZhdWx0KGZpcnN0X3BhcnRpdGlvbiwge30p
CisgICAgICAgIHNlbGYuX21hcHBpbmdzW2JyYW5jaF1bJ2NvbW1pdHMnXVtmaXJzdF9wYXJ0aXRp
b25dW3JlbWFpbmluZ10gPSBpZGVudGlmaWVyCisKKyAgICBkZWYgZ2V0X2hhc2hfbWFwcGluZyhz
ZWxmLCBicmFuY2gsIGhhc2hfYXJnKToKKyAgICAgICAgZmlyc3RfcGFydGl0aW9uID0gaGFzaF9h
cmdbOnNlbGYuSEFTSF9QQVJUSVRJT05fU0laRV0KKyAgICAgICAgcmVtYWluaW5nID0gaGFzaF9h
cmdbc2VsZi5IQVNIX1BBUlRJVElPTl9TSVpFOl0KKyAgICAgICAgbnVtX3Jlc3VsdHMgPSAwCisg
ICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICAgICAgZm9yIHJlbWFpbmluZ19oYXNoLCBpZGVudGlm
aWVyIGluIHNlbGYuX21hcHBpbmdzW2JyYW5jaF1bJ2NvbW1pdHMnXS5nZXQoaGFzaF9hcmdbOnNl
bGYuSEFTSF9QQVJUSVRJT05fU0laRV0sIHt9KS5pdGVtcygpOgorICAgICAgICAgICAgaWYgcmVt
YWluaW5nX2hhc2guc3RhcnRzd2l0aChyZW1haW5pbmcpOgorICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IGlkZW50aWZpZXIKKyAgICAgICAgICAgICAgICBudW1fcmVzdWx0cyArPSAxCisKKyAgICAg
ICAgIyBSZXBsaWNhdGUgZ2l0IGJlaGF2aW9yLCB3aGljaCBhbHNvIGVycm9ycyBvdXQgd2hlbiBn
aXZlbiBhbiBhbWJpZ3VvdXMgY29tbWl0IGxpa2UgJzljMzE0YScuCisgICAgICAgIGFzc2VydCBu
dW1fcmVzdWx0cyA8IDIsICdFcnJvcjogR290IG1vcmUgdGhhbiBvbmUgcmVzdWx0IGZvciBoYXNo
IDw+IGlkZW50aWZpZXIgd2l0aCBhcmcge30nLmZvcm1hdChoYXNoX2FyZykKKyAgICAgICAgcmV0
dXJuIHJlc3VsdAorCisgICAgZGVmIGxvYWRfY29tbWl0c19hbmRfcmV2aXNpb25zX2NhY2hlKHNl
bGYsIGJyYW5jaCk6CisgICAgICAgIHNlbGYucG9wdWxhdGUoYnJhbmNoKQorCisgICAgZGVmIGxv
YWRfaWRlbnRpZmllcl9jYWNoZShzZWxmLCBicmFuY2gpOgorICAgICAgICBpZiBicmFuY2ggaW4g
c2VsZi5fbWFwcGluZ3MgYW5kICdpZGVudGlmaWVycycgaW4gc2VsZi5fbWFwcGluZ3NbYnJhbmNo
XToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIGJyYW5jaCAhPSBzZWxmLnJlcG8u
ZGVmYXVsdF9icmFuY2ggYW5kIChzZWxmLnJlcG8uZGVmYXVsdF9icmFuY2ggbm90IGluIHNlbGYu
X21hcHBpbmdzIG9yCisgICAgICAgICAgICAnaWRlbnRpZmllcnMnIG5vdCBpbiBzZWxmLl9tYXBw
aW5nc1tzZWxmLnJlcG8uZGVmYXVsdF9icmFuY2hdKToKKyAgICAgICAgICAgICAgICBzZWxmLmxv
YWRfaWRlbnRpZmllcl9jYWNoZShzZWxmLnJlcG8uZGVmYXVsdF9icmFuY2gpCisKKyAgICAgICAg
c2VsZi5wb3B1bGF0ZShicmFuY2gpCisgICAgICAgIHNlbGYuX21hcHBpbmdzW2JyYW5jaF1bJ2lk
ZW50aWZpZXJzJ10gPSB7fQorICAgICAgICBmb3IgZmlyc3RfaGFzaF9wYXJ0aXRpb24sIHNlY29u
ZF9wYXJ0aXRpb25zIGluIHNlbGYuX21hcHBpbmdzW2JyYW5jaF1bJ2NvbW1pdHMnXS5pdGVtcygp
OgorICAgICAgICAgICAgZm9yIHJlbWFpbmluZ19wYXJ0aXRpb24sIGlkZW50aWZpZXIgaW4gc2Vj
b25kX3BhcnRpdGlvbnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZWxmLl9tYXBwaW5nc1ti
cmFuY2hdWydpZGVudGlmaWVycyddW2lkZW50aWZpZXJdID0geyAnaGFzaCc6IGZpcnN0X2hhc2hf
cGFydGl0aW9uICsgcmVtYWluaW5nX3BhcnRpdGlvbn0KKyAgICAgICAgZm9yIHJldmlzaW9uLCBp
ZGVudGlmaWVyIGluIHNlbGYuX21hcHBpbmdzW2JyYW5jaF1bJ3JldmlzaW9ucyddLml0ZW1zKCk6
CisgICAgICAgICAgICBzZWxmLl9tYXBwaW5nc1ticmFuY2hdWydpZGVudGlmaWVycyddW2lkZW50
aWZpZXJdWydyZXZpc2lvbiddID0gcmV2aXNpb24KKworICAgIGRlZiBjYW5vbmljYWxpemVfYnJh
bmNoX2lkZW50aWZpZXIoc2VsZiwgaWRlbnRpZmllcik6CisgICAgICAgIGlmIG5vdCBpZGVudGlm
aWVyIG9yIGlkZW50aWZpZXIuZW5kc3dpdGgoc2VsZi5yZXBvLmRlZmF1bHRfYnJhbmNoKToKKyAg
ICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyCisKKyAgICAgICAgYnJhbmNoX3BvaW50X2lkZW50
aWZpZXIsIGJyYW5jaCA9IGlkZW50aWZpZXIuc3BsaXQoJ0AnKQorICAgICAgICBicmFuY2hfcG9p
bnRfaGFzaCA9IHNlbGYuaWRlbnRpZmllcl90b19oYXNoKCcwQHt9Jy5mb3JtYXQoYnJhbmNoKSwg
YnJhbmNoPWJyYW5jaCkKKyAgICAgICAgaW50ZXJzZWN0aW9uX2lkZW50aWZpZXIgPSBzZWxmLmhh
c2hfdG9faWRlbnRpZmllcihicmFuY2hfcG9pbnRfaGFzaCwgYnJhbmNoPXNlbGYucmVwby5kZWZh
dWx0X2JyYW5jaCkKKyAgICAgICAgXywgaW50ZXJzZWN0aW9uX2lkZW50aWZpZXIsIF8gPSBDb21t
aXQuX3BhcnNlX2lkZW50aWZpZXIoaW50ZXJzZWN0aW9uX2lkZW50aWZpZXIpCisgICAgICAgIGFz
c2VydCBpbnRlcnNlY3Rpb25faWRlbnRpZmllciwgIkVycm9yOiBTb21laG93IGludGVyc2VjdGlv
biB3aXRoIHt9IGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkIGZvciB7fSIuZm9ybWF0KHNlbGYucmVw
by5kZWZhdWx0X2JyYW5jaCwgaWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuICd7fS57fUB7fScu
Zm9ybWF0KGludGVyc2VjdGlvbl9pZGVudGlmaWVyLCBicmFuY2hfcG9pbnRfaWRlbnRpZmllciwg
YnJhbmNoKQorCisgICAgZGVmIGZvcm1hdF9pZGVudGlmaWVyKHNlbGYsIGlkZW50aWZpZXIsIGJy
YW5jaCk6CisgICAgICAgIHJldHVybiAne31Ae30nLmZvcm1hdChpZGVudGlmaWVyLCBicmFuY2gp
CisKKyAgICBkZWYgZm9ybWF0X2hhc2goc2VsZiwgX2hhc2gsIGJyYW5jaCk6CisgICAgICAgIHJl
dHVybiBfaGFzaAorCisgICAgZGVmIGZvcm1hdF9yZXZpc2lvbihzZWxmLCByZXZpc2lvbiwgYnJh
bmNoKToKKyAgICAgICAgcmV0dXJuICdye30nLmZvcm1hdChyZXZpc2lvbikKKworICAgIGRlZiBo
YXNoX3RvX2lkZW50aWZpZXIoc2VsZiwgX2hhc2gsIGJyYW5jaD1Ob25lKToKKyAgICAgICAgaWYg
bGVuKF9oYXNoKSA8IHNlbGYuSEFTSF9QQVJUSVRJT05fU0laRToKKyAgICAgICAgICAgIHJldHVy
biBOb25lCisKKyAgICAgICAgZ2V0X3Jlc3VsdF9mdW5jID0gbGFtYmRhIG1hcHBpbmcsIGJyYW5j
aCwgX2hhc2g6IHNlbGYuZ2V0X2hhc2hfbWFwcGluZyhicmFuY2gsIF9oYXNoKQorICAgICAgICBp
ZGVudGlmaWVyID0gc2VsZi5fdHJhbnNsYXRlKF9oYXNoLCBzZWxmLmxvYWRfY29tbWl0c19hbmRf
cmV2aXNpb25zX2NhY2hlLCBnZXRfcmVzdWx0X2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5mb3JtYXRfaWRlbnRpZmllciwgYnJhbmNoPWJyYW5jaCkKKyAgICAgICAg
cmV0dXJuIHNlbGYuY2Fub25pY2FsaXplX2JyYW5jaF9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisK
KyAgICBkZWYgaGFzaF90b19yZXZpc2lvbihzZWxmLCBfaGFzaCwgYnJhbmNoPU5vbmUpOgorICAg
ICAgICBpZGVudGlmaWVyID0gc2VsZi5oYXNoX3RvX2lkZW50aWZpZXIoX2hhc2gpCisgICAgICAg
IGlmIG5vdCBpZGVudGlmaWVyOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBy
ZXR1cm4gc2VsZi5pZGVudGlmaWVyX3RvX3JldmlzaW9uKGlkZW50aWZpZXIpCisKKyAgICBkZWYg
cmV2aXNpb25fdG9faWRlbnRpZmllcihzZWxmLCByZXZpc2lvbiwgYnJhbmNoPU5vbmUpOgorICAg
ICAgICB0cnk6CisgICAgICAgICAgICByZXZpc2lvbiA9IGludChzdHIocmV2aXNpb24pLmxzdHJp
cCgncicpKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYucmVw
by5sb2coJ0Vycm9yOiBJbnZhbGlkIHJldmlzaW9uIHt9IHBhc3NlZCB0byByZXZpc2lvbl90b19p
ZGVudGlmaWVyLi4uJy5mb3JtYXQocmV2aXNpb24pKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUK
KworICAgICAgICBnZXRfcmVzdWx0X2Z1bmMgPSBsYW1iZGEgbWFwcGluZywgYnJhbmNoLCByZXZp
c2lvbjogbWFwcGluZ1ticmFuY2hdWydyZXZpc2lvbnMnXS5nZXQocmV2aXNpb24pCisgICAgICAg
IGlkZW50aWZpZXIgPSBzZWxmLl90cmFuc2xhdGUoc3RyKHJldmlzaW9uKSwgc2VsZi5sb2FkX2Nv
bW1pdHNfYW5kX3JldmlzaW9uc19jYWNoZSwgZ2V0X3Jlc3VsdF9mdW5jLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5mb3JtYXRfaWRlbnRpZmllciwgYnJhbmNoPWJyYW5j
aCkKKyAgICAgICAgcmV0dXJuIHNlbGYuY2Fub25pY2FsaXplX2JyYW5jaF9pZGVudGlmaWVyKGlk
ZW50aWZpZXIpCisKKyAgICBkZWYgcmV2aXNpb25fdG9faGFzaChzZWxmLCByZXZpc2lvbiwgYnJh
bmNoPU5vbmUpOgorICAgICAgICBpZGVudGlmaWVyID0gc2VsZi5yZXZpc2lvbl90b19pZGVudGlm
aWVyKHJldmlzaW9uKQorICAgICAgICBpZiBub3QgaWRlbnRpZmllcjoKKyAgICAgICAgICAgIHJl
dHVybiBOb25lCisgICAgICAgIHJldHVybiBzZWxmLmlkZW50aWZpZXJfdG9faGFzaChpZGVudGlm
aWVyKQorCisgICAgZGVmIGlkZW50aWZpZXJfdG9faGFzaChzZWxmLCBpZGVudGlmaWVyLCBicmFu
Y2g9Tm9uZSk6CisgICAgICAgIHBhcnNlZF9icmFuY2hfcG9pbnQsIGlkZW50aWZpZXIsIHBhcnNl
ZF9icmFuY2ggPSBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICAgICAg
aWYgaWRlbnRpZmllciBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAg
ICBnZXRfcmVzdWx0X2Z1bmMgPSBsYW1iZGEgbWFwcGluZywgYnJhbmNoLCBpZGVudGlmaWVyOiBt
YXBwaW5nW2JyYW5jaF1bJ2lkZW50aWZpZXJzJ10uZ2V0KGlkZW50aWZpZXIsIHt9KS5nZXQoJ2hh
c2gnKQorICAgICAgICBfaGFzaCA9IHNlbGYuX3RyYW5zbGF0ZShpZGVudGlmaWVyLCBzZWxmLmxv
YWRfaWRlbnRpZmllcl9jYWNoZSwgZ2V0X3Jlc3VsdF9mdW5jLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLmZvcm1hdF9oYXNoLCBicmFuY2g9cGFyc2VkX2JyYW5jaCBvciBi
cmFuY2gpCisgICAgICAgIHJldHVybiBfaGFzaAorCisgICAgZGVmIGlkZW50aWZpZXJfdG9fcmV2
aXNpb24oc2VsZiwgaWRlbnRpZmllciwgYnJhbmNoPU5vbmUpOgorICAgICAgICBwYXJzZWRfYnJh
bmNoX3BvaW50LCBpZGVudGlmaWVyLCBwYXJzZWRfYnJhbmNoID0gQ29tbWl0Ll9wYXJzZV9pZGVu
dGlmaWVyKGlkZW50aWZpZXIpCisgICAgICAgIGlmIG5vdCBpZGVudGlmaWVyOgorICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKKworICAgICAgICBnZXRfcmVzdWx0X2Z1bmMgPSBsYW1iZGEgbWFwcGlu
ZywgYnJhbmNoLCBpZGVudGlmaWVyOiBtYXBwaW5nW2JyYW5jaF1bJ2lkZW50aWZpZXJzJ10uZ2V0
KGlkZW50aWZpZXIsIHt9KS5nZXQoJ3JldmlzaW9uJykKKyAgICAgICAgcmV2aXNpb24gPSBzZWxm
Ll90cmFuc2xhdGUoaWRlbnRpZmllciwgc2VsZi5sb2FkX2lkZW50aWZpZXJfY2FjaGUsIGdldF9y
ZXN1bHRfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mb3JtYXRf
cmV2aXNpb24sIGJyYW5jaD1wYXJzZWRfYnJhbmNoIG9yIGJyYW5jaCkKKyAgICAgICAgcmV0dXJu
IHJldmlzaW9uCisKKyAgICBkZWYgX3RyYW5zbGF0ZShzZWxmLCBhcmcsIGxvYWRfY2FjaGVfZnVu
YywgZ2V0X3Jlc3VsdF9mdW5jLCBmb3JtYXRfcmVzdWx0X2Z1bmMsIGJyYW5jaD1Ob25lKToKKyAg
ICAgICAgcHJlZmVycmVkX2JyYW5jaGVzID0gW2JyYW5jaF0gaWYgYnJhbmNoIGVsc2UgW3NlbGYu
cmVwby5kZWZhdWx0X2JyYW5jaCwgc2VsZi5yZXBvLm1lbW9pemVkX2N1cnJlbnRfYnJhbmNoXQor
ICAgICAgICBmb3IgX2JyYW5jaCBpbiBwcmVmZXJyZWRfYnJhbmNoZXM6CisgICAgICAgICAgICBp
ZiBub3QgX2JyYW5jaDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBs
b2FkX2NhY2hlX2Z1bmMoX2JyYW5jaCkKKyAgICAgICAgICAgIHJlc3VsdCA9IGdldF9yZXN1bHRf
ZnVuYyhzZWxmLl9tYXBwaW5ncywgX2JyYW5jaCwgYXJnKQorICAgICAgICAgICAgaWYgcmVzdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXRfcmVzdWx0X2Z1bmMocmVzdWx0LCBfYnJh
bmNoKQorCisgICAgICAgIGZvciBfYnJhbmNoIGluIHNlbGYucmVwby5tZW1vaXplZF9sb2NhbF9i
cmFuY2hlcygpOgorICAgICAgICAgICAgaWYgbm90IF9icmFuY2ggb3IgX2JyYW5jaCBpbiBwcmVm
ZXJyZWRfYnJhbmNoZXMgb3IgX2JyYW5jaCA9PSAnbWFzdGVyJzoKKyAgICAgICAgICAgICAgICBj
b250aW51ZQorCisgICAgICAgICAgICBsb2FkX2NhY2hlX2Z1bmMoX2JyYW5jaCkKKyAgICAgICAg
ICAgIHJlc3VsdCA9IGdldF9yZXN1bHRfZnVuYyhzZWxmLl9tYXBwaW5ncywgX2JyYW5jaCwgYXJn
KQorICAgICAgICAgICAgaWYgcmVzdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXRf
cmVzdWx0X2Z1bmMocmVzdWx0LCBfYnJhbmNoKQorCisgICAgICAgIHJldHVybiBOb25lCisKKwog
Y2xhc3MgR2l0KFNjbSk6CiAgICAgR0lUX0NPTU1JVCA9IHJlLmNvbXBpbGUocidjb21taXQgKD9Q
PGhhc2g+WzAtOWEtZl0rKScpCiAKQEAgLTUzLDYgKzM2OSw4IEBAIGNsYXNzIEdpdChTY20pOgog
ICAgICAgICBpZiBub3Qgc2VsZi5yb290X3BhdGg6CiAgICAgICAgICAgICByYWlzZSBPU0Vycm9y
KCdQcm92aWRlZCBwYXRoIHt9IGlzIG5vdCBhIGdpdCByZXBvc2l0b3J5Jy5mb3JtYXQocGF0aCkp
CiAKKyAgICAgICAgc2VsZi5jYWNoZSA9IEdpdENhY2hlKHNlbGYpCisKICAgICBAZGVjb3JhdG9y
cy5NZW1vaXplKGNhY2hlZD1GYWxzZSkKICAgICBkZWYgaW5mbyhzZWxmKToKICAgICAgICAgaWYg
bm90IHNlbGYuaXNfc3ZuOgpAQCAtOTQsOCArNDEyLDkgQEAgY2xhc3MgR2l0KFNjbSk6CiAgICAg
ICAgIHJldHVybiByZXN1bHQuc3Rkb3V0LnJzdHJpcCgpCiAKICAgICBAcHJvcGVydHkKKyAgICBA
ZGVjb3JhdG9ycy5NZW1vaXplKCkKICAgICBkZWYgZGVmYXVsdF9icmFuY2goc2VsZik6Ci0gICAg
ICAgIHJlc3VsdCA9IHJ1bihbc2VsZi5leGVjdXRhYmxlKCksICdyZXYtcGFyc2UnLCAnLS1hYmJy
ZXYtcmVmJywgJ29yaWdpbi9IRUFEJ10sIGN3ZD1zZWxmLnBhdGgsIGNhcHR1cmVfb3V0cHV0PVRy
dWUsIGVuY29kaW5nPSd1dGYtOCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bihbc2VsZi5leGVjdXRh
YmxlKCksICdyZXYtcGFyc2UnLCAnLS1hYmJyZXYtcmVmJywgJ29yaWdpbi9IRUFEJ10sIGN3ZD1z
ZWxmLnJvb3RfcGF0aCwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgZW5jb2Rpbmc9J3V0Zi04JykKICAg
ICAgICAgaWYgcmVzdWx0LnJldHVybmNvZGU6CiAgICAgICAgICAgICBjYW5kaWRhdGVzID0gc2Vs
Zi5icmFuY2hlcwogICAgICAgICAgICAgaWYgJ21hc3RlcicgaW4gY2FuZGlkYXRlczoKQEAgLTEw
NSw2ICs0MjQsMjcgQEAgY2xhc3MgR2l0KFNjbSk6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQog
ICAgICAgICByZXR1cm4gJy8nLmpvaW4ocmVzdWx0LnN0ZG91dC5yc3RyaXAoKS5zcGxpdCgnLycp
WzE6XSkKIAorICAgIEBwcm9wZXJ0eQorICAgIEBkZWNvcmF0b3JzLk1lbW9pemUoKQorICAgIGRl
ZiBtZW1vaXplZF9jdXJyZW50X2JyYW5jaChzZWxmKToKKyAgICAgICAgYnJhbmNoID0gcnVuKFtz
ZWxmLmV4ZWN1dGFibGUoKSwgJ2JyYW5jaCcsICctLXNob3ctY3VycmVudCddLCBjd2Q9c2VsZi5y
b290X3BhdGgsIGNhcHR1cmVfb3V0cHV0PVRydWUsIGVuY29kaW5nPSd1dGYtOCcpCisgICAgICAg
IGlmIG5vdCBicmFuY2gucmV0dXJuY29kZToKKyAgICAgICAgICAgIHJldHVybiBicmFuY2guc3Rk
b3V0LnN0cmlwKCkKKworICAgICAgICByZXR1cm4gTm9uZSAgIyBQcm9iYWJseSBkZXRhdGNoZWQg
aGVhZC4KKworICAgIEBkZWNvcmF0b3JzLk1lbW9pemUoKQorICAgIGRlZiBtZW1vaXplZF9sb2Nh
bF9icmFuY2hlcyhzZWxmKToKKyAgICAgICAgYnJhbmNoZXMgPSBbXQorICAgICAgICBmb3IgbGlu
ZSBpbiBydW4oW3NlbGYuZXhlY3V0YWJsZSgpLCAnYnJhbmNoJ10sIGN3ZD1zZWxmLnJvb3RfcGF0
aCwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgZW5jb2Rpbmc9J3V0Zi04Jykuc3Rkb3V0LnNwbGl0bGlu
ZXMoKToKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVl
CisKKyAgICAgICAgICAgICMgTm9ybWFsaXplIGN1cnJlbnQgYnJhbmNoCisgICAgICAgICAgICBi
cmFuY2ggPSBsaW5lLnJlcGxhY2UoJyogJywgJycpLnN0cmlwKCkKKyAgICAgICAgICAgIGJyYW5j
aGVzLmFwcGVuZChicmFuY2gpCisgICAgICAgIHJldHVybiBicmFuY2hlcworCiAgICAgQHByb3Bl
cnR5CiAgICAgZGVmIGJyYW5jaChzZWxmKToKICAgICAgICAgc3RhdHVzID0gcnVuKFtzZWxmLmV4
ZWN1dGFibGUoKSwgJ3N0YXR1cyddLCBjd2Q9c2VsZi5yb290X3BhdGgsIGNhcHR1cmVfb3V0cHV0
PVRydWUsIGVuY29kaW5nPSd1dGYtOCcpCkBAIC0xNTcsMTUgKzQ5NywxNiBAQCBjbGFzcyBHaXQo
U2NtKToKICAgICAgICAgcmV0dXJuIHNvcnRlZChzZXQoWycvJy5qb2luKGJyYW5jaC5zcGxpdCgn
LycpWzI6XSkgaWYgYnJhbmNoLnN0YXJ0c3dpdGgoJ3JlbW90ZXMvb3JpZ2luLycpIGVsc2UgYnJh
bmNoIGZvciBicmFuY2ggaW4gcmVzdWx0XSkpCiAKICAgICBkZWYgY29tbWl0KHNlbGYsIGhhc2g9
Tm9uZSwgcmV2aXNpb249Tm9uZSwgaWRlbnRpZmllcj1Ob25lLCBicmFuY2g9Tm9uZSwgdGFnPU5v
bmUsIGluY2x1ZGVfbG9nPVRydWUsIGluY2x1ZGVfaWRlbnRpZmllcj1UcnVlKToKLSAgICAgICAg
IyBPbmx5IGdpdC1zdm4gY2hlY2tvdXRzIGNhbiBjb252ZXJ0IHJldmlzaW9ucyB0byBmdWxseSBx
dWFsaWZpZWQgY29tbWl0cwotICAgICAgICBpZiByZXZpc2lvbiBhbmQgbm90IHNlbGYuaXNfc3Zu
OgotICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oJ1RoaXMgZ2l0IGNoZWNrb3V0IGRv
ZXMgbm90IHN1cHBvcnQgU1ZOIHJldmlzaW9ucycpCi0KLSAgICAgICAgIyBEZXRlcm1pbmUgdGhl
IGhhc2ggZm9yIGEgcHJvdmlkZWQgU3VidmVyc2lvbiByZXZpc2lvbgotICAgICAgICBlbGlmIHJl
dmlzaW9uOgorICAgICAgICAjIE9ubHkgZ2l0LXN2biBjaGVja291dHMgY2FuIGNvbnZlcnQgcmV2
aXNpb25zIHRvIGZ1bGx5IHF1YWxpZmllZCBjb21taXRzLCB1bmxlc3Mgd2UgaGFwcGVuIHRvIGhh
dmUgYSBTVk4gY2FjaGUgYnVpbHQKKyAgICAgICAgaWYgcmV2aXNpb246CiAgICAgICAgICAgICBp
ZiBoYXNoOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nhbm5vdCBkZWZpbmUg
Ym90aCBoYXNoIGFuZCByZXZpc2lvbicpCisgICAgICAgICAgICBoYXNoID0gc2VsZi5jYWNoZS5y
ZXZpc2lvbl90b19oYXNoKHJldmlzaW9uKQorICAgICAgICBpZiByZXZpc2lvbiBhbmQgbm90IGhh
c2ggYW5kIG5vdCBzZWxmLmlzX3N2bjoKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9u
KCdUaGlzIGdpdCBjaGVja291dCBkb2VzIG5vdCBzdXBwb3J0IFNWTiByZXZpc2lvbnMnKQogCisg
ICAgICAgICMgRGV0ZXJtaW5lIHRoZSBoYXNoIGZvciBhIHByb3ZpZGVkIFN1YnZlcnNpb24gcmV2
aXNpb24KKyAgICAgICAgZWxpZiByZXZpc2lvbiBhbmQgbm90IGhhc2g6CiAgICAgICAgICAgICBy
ZXZpc2lvbiA9IENvbW1pdC5fcGFyc2VfcmV2aXNpb24ocmV2aXNpb24sIGRvX2Fzc2VydD1UcnVl
KQogICAgICAgICAgICAgcmV2aXNpb25fbG9nID0gcnVuKAogICAgICAgICAgICAgICAgIFtzZWxm
LmV4ZWN1dGFibGUoKSwgJ3N2bicsICdmaW5kLXJldicsICdye30nLmZvcm1hdChyZXZpc2lvbild
LApAQCAtMjAxLDMyICs1NDIsNDUgQEAgY2xhc3MgR2l0KFNjbSk6CiAgICAgICAgICAgICAgICAg
ICAgICkKICAgICAgICAgICAgICAgICBicmFuY2ggPSBwYXJzZWRfYnJhbmNoCiAKLSAgICAgICAg
ICAgIGJhc2VsaW5lID0gYnJhbmNoIG9yICdIRUFEJwotICAgICAgICAgICAgaXNfZGVmYXVsdCA9
IGJhc2VsaW5lID09IGRlZmF1bHRfYnJhbmNoCi0gICAgICAgICAgICBpZiBiYXNlbGluZSA9PSAn
SEVBRCc6Ci0gICAgICAgICAgICAgICAgaXNfZGVmYXVsdCA9IGRlZmF1bHRfYnJhbmNoIGluIHNl
bGYuX2JyYW5jaGVzX2ZvcihiYXNlbGluZSkKLQotICAgICAgICAgICAgaWYgaXNfZGVmYXVsdCBh
bmQgcGFyc2VkX2JyYW5jaF9wb2ludDoKLSAgICAgICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2Vw
dGlvbignQ2Fubm90IHByb3ZpZGUgYSBicmFuY2ggcG9pbnQgZm9yIGEgY29tbWl0IG9uIHRoZSBk
ZWZhdWx0IGJyYW5jaCcpCi0KLSAgICAgICAgICAgIGJhc2VfY291bnQgPSBzZWxmLl9jb21taXRf
Y291bnQoYmFzZWxpbmUgaWYgaXNfZGVmYXVsdCBlbHNlICd7fS4ue30nLmZvcm1hdChkZWZhdWx0
X2JyYW5jaCwgYmFzZWxpbmUpKQotCi0gICAgICAgICAgICBpZiBpZGVudGlmaWVyID4gYmFzZV9j
b3VudDoKLSAgICAgICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbignSWRlbnRpZmllciB7
fSBjYW5ub3QgYmUgZm91bmQgb24gdGhlIHNwZWNpZmllZCBicmFuY2ggaW4gdGhlIGN1cnJlbnQg
Y2hlY2tvdXQnLmZvcm1hdChpZGVudGlmaWVyKSkKLSAgICAgICAgICAgIGxvZyA9IHJ1bigKLSAg
ICAgICAgICAgICAgICBbc2VsZi5leGVjdXRhYmxlKCksICdsb2cnLCAne31+e30nLmZvcm1hdChi
cmFuY2ggb3IgJ0hFQUQnLCBiYXNlX2NvdW50IC0gaWRlbnRpZmllcildICsgbG9nX2Zvcm1hdCwK
LSAgICAgICAgICAgICAgICBjd2Q9c2VsZi5yb290X3BhdGgsCi0gICAgICAgICAgICAgICAgY2Fw
dHVyZV9vdXRwdXQ9VHJ1ZSwKLSAgICAgICAgICAgICAgICBlbmNvZGluZz0ndXRmLTgnLAotICAg
ICAgICAgICAgKQotICAgICAgICAgICAgaWYgbG9nLnJldHVybmNvZGU6Ci0gICAgICAgICAgICAg
ICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oIkZhaWxlZCB0byByZXRyaWV2ZSBjb21taXQgaW5mb3Jt
YXRpb24gZm9yICdpe31Ae30nIi5mb3JtYXQoaWRlbnRpZmllciwgYnJhbmNoIG9yICdIRUFEJykp
Ci0KLSAgICAgICAgICAgICMgTmVnYXRpdmUgaWRlbnRpZmllcnMgYXJlIGFjdHVhbGx5IGNvbW1p
dHMgb24gdGhlIGRlZmF1bHQgYnJhbmNoLCB3ZSB3aWxsIG5lZWQgdG8gcmUtY29tcHV0ZSB0aGUg
aWRlbnRpZmllcgotICAgICAgICAgICAgaWYgaWRlbnRpZmllciA8IDAgYW5kIGlzX2RlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oJ0lsbGVnYWwgbmVnYXRpdmUg
aWRlbnRpZmllciBvbiB0aGUgZGVmYXVsdCBicmFuY2gnKQotICAgICAgICAgICAgaWYgaWRlbnRp
ZmllciA8IDA6Ci0gICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IE5vbmUKKyAgICAgICAgICAg
IGhhc2ggPSBzZWxmLmNhY2hlLmlkZW50aWZpZXJfdG9faGFzaCgne31Ae30nLmZvcm1hdChpZGVu
dGlmaWVyLCBwYXJzZWRfYnJhbmNoKSkKKyAgICAgICAgICAgIGlmIG5vdCBoYXNoOgorICAgICAg
ICAgICAgICAgIGJhc2VsaW5lID0gYnJhbmNoIG9yICdIRUFEJworICAgICAgICAgICAgICAgIGlz
X2RlZmF1bHQgPSBiYXNlbGluZSA9PSBkZWZhdWx0X2JyYW5jaAorICAgICAgICAgICAgICAgIGlm
IGJhc2VsaW5lID09ICdIRUFEJzoKKyAgICAgICAgICAgICAgICAgICAgaXNfZGVmYXVsdCA9IGRl
ZmF1bHRfYnJhbmNoIGluIHNlbGYuX2JyYW5jaGVzX2ZvcihiYXNlbGluZSkKKworICAgICAgICAg
ICAgICAgIGlmIGlzX2RlZmF1bHQgYW5kIHBhcnNlZF9icmFuY2hfcG9pbnQ6CisgICAgICAgICAg
ICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCdDYW5ub3QgcHJvdmlkZSBhIGJyYW5jaCBw
b2ludCBmb3IgYSBjb21taXQgb24gdGhlIGRlZmF1bHQgYnJhbmNoJykKKworICAgICAgICAgICAg
ICAgIGJhc2VfY291bnQgPSBzZWxmLl9jb21taXRfY291bnQoYmFzZWxpbmUgaWYgaXNfZGVmYXVs
dCBlbHNlICd7fS4ue30nLmZvcm1hdChkZWZhdWx0X2JyYW5jaCwgYmFzZWxpbmUpKQorCisgICAg
ICAgICAgICAgICAgaWYgaWRlbnRpZmllciA+IGJhc2VfY291bnQ6CisgICAgICAgICAgICAgICAg
ICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCdJZGVudGlmaWVyIHt9IGNhbm5vdCBiZSBmb3VuZCBv
biB0aGUgc3BlY2lmaWVkIGJyYW5jaCBpbiB0aGUgY3VycmVudCBjaGVja291dCcuZm9ybWF0KGlk
ZW50aWZpZXIpKQorICAgICAgICAgICAgICAgIGxvZyA9IHJ1bigKKyAgICAgICAgICAgICAgICAg
ICAgW3NlbGYuZXhlY3V0YWJsZSgpLCAnbG9nJywgJ3t9fnt9Jy5mb3JtYXQoYnJhbmNoIG9yICdI
RUFEJywgYmFzZV9jb3VudCAtIGlkZW50aWZpZXIpXSArIGxvZ19mb3JtYXQsCisgICAgICAgICAg
ICAgICAgICAgIGN3ZD1zZWxmLnJvb3RfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgY2FwdHVy
ZV9vdXRwdXQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9J3V0Zi04JywKKyAg
ICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgaWYgbG9nLnJldHVybmNvZGU6CisgICAg
ICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCJGYWlsZWQgdG8gcmV0cmlldmUg
Y29tbWl0IGluZm9ybWF0aW9uIGZvciAnaXt9QHt9JyIuZm9ybWF0KGlkZW50aWZpZXIsIGJyYW5j
aCBvciAnSEVBRCcpKQorCisgICAgICAgICAgICAgICAgIyBOZWdhdGl2ZSBpZGVudGlmaWVycyBh
cmUgYWN0dWFsbHkgY29tbWl0cyBvbiB0aGUgZGVmYXVsdCBicmFuY2gsIHdlIHdpbGwgbmVlZCB0
byByZS1jb21wdXRlIHRoZSBpZGVudGlmaWVyCisgICAgICAgICAgICAgICAgaWYgaWRlbnRpZmll
ciA8IDAgYW5kIGlzX2RlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhj
ZXB0aW9uKCdJbGxlZ2FsIG5lZ2F0aXZlIGlkZW50aWZpZXIgb24gdGhlIGRlZmF1bHQgYnJhbmNo
JykKKyAgICAgICAgICAgICAgICBpZiBpZGVudGlmaWVyIDwgMDoKKyAgICAgICAgICAgICAgICAg
ICAgaWRlbnRpZmllciA9IE5vbmUKKworICAgICAgICAgICAgIyBUaGUgY2FjaGUgY29udmVydGVk
IHRoZSBpZGVudGlmaWVyIHRvIGEgaGFzaAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICBsb2cgPSBydW4oCisgICAgICAgICAgICAgICAgICAgIFtzZWxmLmV4ZWN1dGFibGUoKSwg
J2xvZycsIGhhc2hdICsgbG9nX2Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgY3dkPXNlbGYu
cm9vdF9wYXRoLAorICAgICAgICAgICAgICAgICAgICBjYXB0dXJlX291dHB1dD1UcnVlLAorICAg
ICAgICAgICAgICAgICAgICBlbmNvZGluZz0ndXRmLTgnLAorICAgICAgICAgICAgICAgICkKKyAg
ICAgICAgICAgICAgICBpZiBsb2cucmV0dXJuY29kZToKKyAgICAgICAgICAgICAgICAgICAgcmFp
c2Ugc2VsZi5FeGNlcHRpb24oIkZhaWxlZCB0byByZXRyaWV2ZSBjb21taXQgaW5mb3JtYXRpb24g
Zm9yICd7fSciLmZvcm1hdChoYXNoKSkKIAogICAgICAgICAjIERldGVybWluZSB0aGUgYGdpdCBs
b2dgIG91dHB1dCBmb3IgYSBnaXZlbiBicmFuY2ggb3IgdGFnCiAgICAgICAgIGVsaWYgYnJhbmNo
IG9yIHRhZzoKQEAgLTI1MiwxNSArNjA2LDIzIEBAIGNsYXNzIEdpdChTY20pOgogICAgICAgICAg
ICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oJ0ludmFsaWQgY29tbWl0IGhhc2ggaW4gZ2l0IGxvZycp
CiAgICAgICAgIGhhc2ggPSBtYXRjaC5ncm91cCgnaGFzaCcpCiAKKyAgICAgICAgYnJhbmNoX3Bv
aW50ID0gTm9uZQorICAgICAgICBpZiBub3QgaWRlbnRpZmllciBhbmQgaW5jbHVkZV9pZGVudGlm
aWVyOgorICAgICAgICAgICAgY2FjaGVkX2lkZW50aWZpZXIgPSBzZWxmLmNhY2hlLmhhc2hfdG9f
aWRlbnRpZmllcihoYXNoKQorICAgICAgICAgICAgaWYgY2FjaGVkX2lkZW50aWZpZXI6CisgICAg
ICAgICAgICAgICAgYnJhbmNoX3BvaW50LCBpZGVudGlmaWVyLCBicmFuY2ggPSBDb21taXQuX3Bh
cnNlX2lkZW50aWZpZXIoY2FjaGVkX2lkZW50aWZpZXIpCisKICAgICAgICAgIyBBIGNvbW1pdCBp
cyBvZnRlbiBvbiBtdWx0aXBsZSBicmFuY2hlcywgdGhlIGNhbm9uaWNhbCBicmFuY2ggaXMgdGhl
IG9uZSB3aXRoIHRoZSBoaWdoZXN0IHByaW9yaXR5Ci0gICAgICAgIGJyYW5jaCA9IHNlbGYucHJp
b3JpdGl6ZV9icmFuY2hlcyhzZWxmLl9icmFuY2hlc19mb3IoaGFzaCkpCisgICAgICAgIGlmIGJy
YW5jaCAhPSBkZWZhdWx0X2JyYW5jaDoKKyAgICAgICAgICAgIGJyYW5jaCA9IHNlbGYucHJpb3Jp
dGl6ZV9icmFuY2hlcyhzZWxmLl9icmFuY2hlc19mb3IoaGFzaCkpCiAKICAgICAgICAgIyBDb21w
dXRlIHRoZSBpZGVudGlmaWVyIGlmIHRoZSBmdW5jdGlvbiBkaWQgbm90IHJlY2VpdmUgb25lIGFu
ZCB3ZSB3ZXJlIGFza2VkIHRvCiAgICAgICAgIGlmIG5vdCBpZGVudGlmaWVyIGFuZCBpbmNsdWRl
X2lkZW50aWZpZXI6CiAgICAgICAgICAgICBpZGVudGlmaWVyID0gc2VsZi5fY29tbWl0X2NvdW50
KGhhc2ggaWYgYnJhbmNoID09IGRlZmF1bHRfYnJhbmNoIGVsc2UgJ3t9Li57fScuZm9ybWF0KGRl
ZmF1bHRfYnJhbmNoLCBoYXNoKSkKIAogICAgICAgICAjIE9ubHkgY29tcHV0ZSB0aGUgYnJhbmNo
IHBvaW50IHdlJ3JlIG9uIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBkZWZhdWx0IGJyYW5jaAot
ICAgICAgICBicmFuY2hfcG9pbnQgPSBOb25lIGlmIG5vdCBpbmNsdWRlX2lkZW50aWZpZXIgb3Ig
YnJhbmNoID09IGRlZmF1bHRfYnJhbmNoIGVsc2Ugc2VsZi5fY29tbWl0X2NvdW50KGhhc2gpIC0g
aWRlbnRpZmllcgorICAgICAgICBpZiBub3QgYnJhbmNoX3BvaW50IGFuZCBpbmNsdWRlX2lkZW50
aWZpZXIgYW5kIGJyYW5jaCAhPSBkZWZhdWx0X2JyYW5jaDoKKyAgICAgICAgICAgIGJyYW5jaF9w
b2ludCA9IHNlbGYuX2NvbW1pdF9jb3VudChoYXNoKSAtIGlkZW50aWZpZXIKICAgICAgICAgaWYg
YnJhbmNoX3BvaW50IGFuZCBwYXJzZWRfYnJhbmNoX3BvaW50IGFuZCBicmFuY2hfcG9pbnQgIT0g
cGFyc2VkX2JyYW5jaF9wb2ludDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlByb3Zp
ZGVkICdicmFuY2hfcG9pbnQnIGRvZXMgbm90IG1hdGNoIGJyYW5jaCBwb2ludCBvZiBzcGVjaWZp
ZWQgYnJhbmNoIikKIApAQCAtNDgwLDMgKzg0Miw3IEBAIGNsYXNzIEdpdChTY20pOgogICAgICAg
ICByZXR1cm4gcnVuKFsKICAgICAgICAgICAgIHNlbGYuZXhlY3V0YWJsZSgpLCAncmVzZXQnLCAn
SEVBRCcsICctLWhhcmQnLAogICAgICAgICBdLCBjd2Q9c2VsZi5yb290X3BhdGgpLnJldHVybmNv
ZGUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB1cHN0cmVhbV9yZW1vdGUoc2VsZik6CisgICAg
ICAgIHJldHVybiAncmVtb3Rlcy9vcmlnaW4nICAjIEZJWE1FOiBGaW5kIGEgYmV0dGVyIHdheSB0
byBkbyB0aGlzIChtYXliZSB3ZSBwYXNzIGluIHRoaXMgYXJndW1lbnQpPwpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvZ2l0
LXJlcG8uanNvbiBiL1Rvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L21vY2tzL2dpdC1yZXBvLmpzb24KaW5kZXggOWRjZjc3ZGQzNDhkLi44MDExMjlkZTQyZjUg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L21vY2tzL2dpdC1yZXBvLmpzb24KKysrIGIvVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvZ2l0LXJlcG8uanNvbgpAQCAtMTQ2LDQgKzE0Niw0
IEBACiAgICAgICAgICAgICAicmV2aXNpb24iOiA2CiAgICAgICAgIH0KICAgICBdCi19ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvZ2l0LnB5IGIvVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvZ2l0
LnB5CmluZGV4IGRhOThlYmMyNDA3OC4uNjhiMDY3NTJkYWJmIDEwMDY0NAotLS0gYS9Ub29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9naXQu
cHkKKysrIGIvVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkv
bW9ja3MvbG9jYWwvZ2l0LnB5CkBAIC0xOTQsNiArMTk0LDIxIEBAIG5vdGhpbmcgdG8gY29tbWl0
LCB3b3JraW5nIHRyZWUgY2xlYW4KICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PSdcbicuam9p
bihzb3J0ZWQoWycqICcgKyBzZWxmLmJyYW5jaF0gKyBsaXN0KCh7ZGVmYXVsdF9icmFuY2h9IHwg
c2V0KHNlbGYuY29tbWl0cy5rZXlzKCkpKSAtIHtzZWxmLmJyYW5jaH0pKSkgKwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ1xucmVtb3Rlcy9vcmlnaW4vSEVBRCAtPiBvcmlnaW4ve31cbicu
Zm9ybWF0KGRlZmF1bHRfYnJhbmNoKSwKICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAg
KSwgbW9ja3MuU3VicHJvY2Vzcy5Sb3V0ZSgKKyAgICAgICAgICAgICAgICBzZWxmLmV4ZWN1dGFi
bGUsICdicmFuY2gnLCAnLS1zaG93LWN1cnJlbnQnLAorICAgICAgICAgICAgICAgIGN3ZD1zZWxm
LnBhdGgsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yPWxhbWJkYSAqYXJncywgKiprd2FyZ3M6
IG1vY2tzLlByb2Nlc3NDb21wbGV0aW9uKAorICAgICAgICAgICAgICAgICAgICByZXR1cm5jb2Rl
PTAsCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD0ne31cbicuZm9ybWF0KHNlbGYuYnJhbmNo
KSwKKyAgICAgICAgICAgICAgICApIGlmIHNlbGYuYnJhbmNoIGVsc2UgbW9ja3MuUHJvY2Vzc0Nv
bXBsZXRpb24ocmV0dXJuY29kZT0xMjgpLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIG1v
Y2tzLlN1YnByb2Nlc3MuUm91dGUoCisgICAgICAgICAgICAgICAgc2VsZi5leGVjdXRhYmxlLCAn
YnJhbmNoJywKKyAgICAgICAgICAgICAgICBjd2Q9c2VsZi5wYXRoLAorICAgICAgICAgICAgICAg
IGdlbmVyYXRvcj1sYW1iZGEgKmFyZ3MsICoqa3dhcmdzOiBtb2Nrcy5Qcm9jZXNzQ29tcGxldGlv
bigKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuY29kZT0wLAorICAgICAgICAgICAgICAgICAg
ICBzdGRvdXQ9J1xuJy5qb2luKHNvcnRlZChbJyogJyArIHNlbGYuYnJhbmNoXSArIGxpc3QoKHtk
ZWZhdWx0X2JyYW5jaH0gfCBzZXQoc2VsZi5jb21taXRzLmtleXMoKSkpIC0ge3NlbGYuYnJhbmNo
fSkpKSwKKyAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgKSwgbW9ja3MuU3VicHJvY2Vz
cy5Sb3V0ZSgKICAgICAgICAgICAgICAgICBzZWxmLmV4ZWN1dGFibGUsICd0YWcnLAogICAgICAg
ICAgICAgICAgIGN3ZD1zZWxmLnBhdGgsCkBAIC0yMTMsOCArMjI4LDE1IEBAIG5vdGhpbmcgdG8g
Y29tbWl0LCB3b3JraW5nIHRyZWUgY2xlYW4KICAgICAgICAgICAgICAgICBjd2Q9c2VsZi5wYXRo
LAogICAgICAgICAgICAgICAgIGdlbmVyYXRvcj1sYW1iZGEgKmFyZ3MsICoqa3dhcmdzOiBtb2Nr
cy5Qcm9jZXNzQ29tcGxldGlvbigKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuY29kZT0wLAot
ICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9J3t9XG4nLmZvcm1hdChzZWxmLmZpbmQoYXJnc1sy
XSkuaGFzaCksCi0gICAgICAgICAgICAgICAgKSBpZiBzZWxmLmZpbmQoYXJnc1syXSkgZWxzZSBt
b2Nrcy5Qcm9jZXNzQ29tcGxldGlvbihyZXR1cm5jb2RlPTEyOCkKKyAgICAgICAgICAgICAgICAg
ICAgc3Rkb3V0PSd7fVxuJy5mb3JtYXQoc2VsZi5maW5kKGFyZ3NbMl0uc3BsaXQoJy8nKVstMV0p
Lmhhc2gpLAorICAgICAgICAgICAgICAgICkgaWYgc2VsZi5maW5kKGFyZ3NbMl0uc3BsaXQoJy8n
KVstMV0pIGVsc2UgbW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24ocmV0dXJuY29kZT0xMjgpCisgICAg
ICAgICAgICApLCBtb2Nrcy5TdWJwcm9jZXNzLlJvdXRlKAorICAgICAgICAgICAgICAgIHNlbGYu
ZXhlY3V0YWJsZSwgJ21lcmdlLWJhc2UnLCByZS5jb21waWxlKCcuKycpLCByZS5jb21waWxlKCcu
KycpLAorICAgICAgICAgICAgICAgIGN3ZD1zZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgZ2Vu
ZXJhdG9yPWxhbWJkYSAqYXJncywgKiprd2FyZ3M6IG1vY2tzLlByb2Nlc3NDb21wbGV0aW9uKAor
ICAgICAgICAgICAgICAgICAgICByZXR1cm5jb2RlPTAsCisgICAgICAgICAgICAgICAgICAgIHN0
ZG91dD0ne31cbicuZm9ybWF0KHNlbGYuaW50ZXJzZWN0aW9uKGFyZ3NbM10pLmhhc2gpLAorICAg
ICAgICAgICAgICAgICkgaWYgc2VsZi5pbnRlcnNlY3Rpb24oYXJnc1szXSkgZWxzZSBtb2Nrcy5Q
cm9jZXNzQ29tcGxldGlvbihyZXR1cm5jb2RlPTEyOCkKICAgICAgICAgICAgICksIG1vY2tzLlN1
YnByb2Nlc3MuUm91dGUoCiAgICAgICAgICAgICAgICAgc2VsZi5leGVjdXRhYmxlLCAnbG9nJywg
cmUuY29tcGlsZShyJy4rJyksICctMScsCiAgICAgICAgICAgICAgICAgY3dkPXNlbGYucGF0aCwK
QEAgLTI0MCw2ICsyNjIsNjMgQEAgbm90aGluZyB0byBjb21taXQsIHdvcmtpbmcgdHJlZSBjbGVh
bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAg
ICksCiAgICAgICAgICAgICAgICAgKSBpZiBzZWxmLmZpbmQoYXJnc1syXSkgZWxzZSBtb2Nrcy5Q
cm9jZXNzQ29tcGxldGlvbihyZXR1cm5jb2RlPTEyOCksCisgICAgICAgICAgICApLCBtb2Nrcy5T
dWJwcm9jZXNzLlJvdXRlKAorICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0YWJsZSwgJ2xvZycs
IHJlLmNvbXBpbGUocicuKycpLAorICAgICAgICAgICAgICAgIGN3ZD1zZWxmLnBhdGgsCisgICAg
ICAgICAgICAgICAgZ2VuZXJhdG9yPWxhbWJkYSAqYXJncywgKiprd2FyZ3M6IG1vY2tzLlByb2Nl
c3NDb21wbGV0aW9uKAorICAgICAgICAgICAgICAgICAgICByZXR1cm5jb2RlPTAsCisgICAgICAg
ICAgICAgICAgICAgIHN0ZG91dD0nXG4nLmpvaW4oWworICAgICAgICAgICAgICAgICAgICAgICAg
J2NvbW1pdCB7aGFzaH1cbicKKyAgICAgICAgICAgICAgICAgICAgICAgICdBdXRob3I6ICAgICB7
YXV0aG9yfSA8e2VtYWlsfT5cbicKKyAgICAgICAgICAgICAgICAgICAgICAgICdEYXRlOiAgICAg
ICB7ZGF0ZX1cbicKKyAgICAgICAgICAgICAgICAgICAgICAgICdcbntsb2d9Jy5mb3JtYXQoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaD1jb21taXQuaGFzaCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhdXRob3I9Y29tbWl0LmF1dGhvci5uYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVtYWlsPWNvbW1pdC5hdXRob3IuZW1haWwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0ZT1kYXRldGltZS51dGNmcm9tdGltZXN0YW1wKGNvbW1pdC50aW1l
c3RhbXAgKyB0aW1lLnRpbWV6b25lKS5zdHJmdGltZSgnJWEgJWIgJWQgJUg6JU06JVMgJVkgKzAw
MDAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2c9J1xuJy5qb2luKFsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCcgICAgJyArIGxpbmUpIGlmIGxpbmUgZWxzZSAn
JyBmb3IgbGluZSBpbiBjb21taXQubWVzc2FnZS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBdICsgKFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAg
ICBnaXQtc3ZuLWlkOiBodHRwczovL3N2bi57fS9yZXBvc2l0b3J5L3t9L3RydW5rQHt9IDI2OGY0
NWNjLWNkMDktMDQxMC1hYjNjLWQ1MjY5MWI0ZGJmYycuZm9ybWF0KAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdGUuc3BsaXQoJ0AnKVstMV0uc3BsaXQoJzon
KVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5h
bWUocGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXQucmV2
aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKV0gaWYgZ2l0X3N2biBlbHNlIFtd
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICkpIGZvciBjb21taXQgaW4gc2VsZi5jb21taXRz
X2luX3JhbmdlKE5vbmUsIGFyZ3NbMl0pCisgICAgICAgICAgICAgICAgICAgIF0pCisgICAgICAg
ICAgICAgICAgKQorICAgICAgICAgICAgKSwgbW9ja3MuU3VicHJvY2Vzcy5Sb3V0ZSggICMgRm9y
IGNhY2hlIGdlbmVyYXRpb24KKyAgICAgICAgICAgICAgICBzZWxmLmV4ZWN1dGFibGUsICdsb2cn
LCByZS5jb21waWxlKHInLisnKSwgJy0tcmV2ZXJzZScsCisgICAgICAgICAgICAgICAgY3dkPXNl
bGYucGF0aCwKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3I9bGFtYmRhICphcmdzLCAqKmt3YXJn
czogbW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24oCisgICAgICAgICAgICAgICAgICAgIHJldHVybmNv
ZGU9MCwKKyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PSdcbicuam9pbihbCisgICAgICAgICAg
ICAgICAgICAgICAgICAnY29tbWl0IHtoYXNofVxuJworICAgICAgICAgICAgICAgICAgICAgICAg
J0F1dGhvcjogICAgIHthdXRob3J9IDx7ZW1haWx9PlxuJworICAgICAgICAgICAgICAgICAgICAg
ICAgJ0RhdGU6ICAgICAgIHtkYXRlfVxuJworICAgICAgICAgICAgICAgICAgICAgICAgJ1xue2xv
Z30nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoPWNvbW1pdC5oYXNo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcj1jb21taXQuYXV0aG9yLm5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1haWw9Y29tbWl0LmF1dGhvci5lbWFpbCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlPWRhdGV0aW1lLnV0Y2Zyb210aW1lc3Rh
bXAoY29tbWl0LnRpbWVzdGFtcCArIHRpbWUudGltZXpvbmUpLnN0cmZ0aW1lKCclYSAlYiAlZCAl
SDolTTolUyAlWSArMDAwMCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZz0nXG4n
LmpvaW4oWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJyAgICAnICsgbGluZSkg
aWYgbGluZSBlbHNlICcnIGZvciBsaW5lIGluIGNvbW1pdC5tZXNzYWdlLnNwbGl0bGluZXMoKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gKyAoWworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnICAgIGdpdC1zdm4taWQ6IGh0dHBzOi8vc3ZuLnt9L3JlcG9zaXRvcnkve30v
dHJ1bmtAe30gMjY4ZjQ1Y2MtY2QwOS0wNDEwLWFiM2MtZDUyNjkxYjRkYmZjJy5mb3JtYXQoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW90ZS5zcGxpdCgnQCcp
Wy0xXS5zcGxpdCgnOicpWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3MucGF0aC5iYXNlbmFtZShwYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbW1pdC5yZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApXSBpZiBn
aXRfc3ZuIGVsc2UgW10pLAorICAgICAgICAgICAgICAgICAgICAgICAgKSkgZm9yIGNvbW1pdCBp
bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2VkKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaXN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5jb21taXRzX2luX3JhbmdlKE5vbmUsIGFyZ3NbMl0ucmVwbGFjZSgncmVtb3Rlcy9v
cmlnaW4vJywgJycpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgJy4u
JyBub3QgaW4gYXJnc1syXSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5jb21taXRzX2luX3JhbmdlKCphcmdzWzJdLnJlcGxhY2UoJ3JlbW90ZXMvb3Jp
Z2luLycsICcnKS5zcGxpdCgnLi4nKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgXSkK
KyAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICApLCBtb2Nrcy5TdWJwcm9jZXNzLlJvdXRl
KAogICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0YWJsZSwgJ2xvZycsICctLWZvcm1hdD1mdWxs
ZXInLCByZS5jb21waWxlKHInLitcLlwuXC4uKycpLAogICAgICAgICAgICAgICAgIGN3ZD1zZWxm
LnBhdGgsCkBAIC0yNjIsNyArMzQxLDcgQEAgbm90aGluZyB0byBjb21taXQsIHdvcmtpbmcgdHJl
ZSBjbGVhbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGdpdC1zdm4taWQ6
IGh0dHBzOi8vc3ZuLnt9L3JlcG9zaXRvcnkve30vdHJ1bmtAe30gMjY4ZjQ1Y2MtY2QwOS0wNDEw
LWFiM2MtZDUyNjkxYjRkYmZjJy5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLnJlbW90ZS5zcGxpdCgnQCcpWy0xXS5zcGxpdCgnOicpWzBdLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShwYXRoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0LnJldmlzaW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0LnJldmlzaW9uLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICldIGlmIGdpdF9zdm4gZWxzZSBbXSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICApKSBmb3IgY29tbWl0IGluIHNlbGYuY29tbWl0c19pbl9yYW5nZShhcmdzWzNd
LnNwbGl0KCcuLi4nKVstMV0sIGFyZ3NbM10uc3BsaXQoJy4uLicpWzBdKQogICAgICAgICAgICAg
ICAgICAgICBdKQpAQCAtMzMyLDYgKzQxMSwxMyBAQCBub3RoaW5nIHRvIGNvbW1pdCwgd29ya2lu
ZyB0cmVlIGNsZWFuCiAgICAgZGVmIGJyYW5jaChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYu
aGVhZC5icmFuY2gKIAorICAgIGRlZiBpbnRlcnNlY3Rpb24oc2VsZiwgYnJhbmNoKToKKyAgICAg
ICAgYnJhbmNoID0gYnJhbmNoLnNwbGl0KCcvJylbLTFdCisgICAgICAgIGlmIG5vdCBzZWxmLmRl
ZmF1bHRfYnJhbmNoIGluIHNlbGYuY29tbWl0cyBvciBub3QgYnJhbmNoIGluIHNlbGYuY29tbWl0
czoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgcmV0dXJuIHNlbGYuY29tbWl0
c1tzZWxmLmRlZmF1bHRfYnJhbmNoXVtzZWxmLmNvbW1pdHNbYnJhbmNoXVswXS5icmFuY2hfcG9p
bnQgLSAxXQorCiAgICAgZGVmIGZpbmQoc2VsZiwgc29tZXRoaW5nKToKICAgICAgICAgaWYgJ34n
IGluIHNvbWV0aGluZzoKICAgICAgICAgICAgIHNwbGl0ID0gc29tZXRoaW5nLnNwbGl0KCd+JykK
QEAgLTQ5MywzMiArNTc5LDQxIEBAIG5vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5nIHRyZWUgY2xl
YW4KICAgICAgICAgKQogCiAgICAgZGVmIGNvbW1pdHNfaW5fcmFuZ2Uoc2VsZiwgYmVnaW4sIGVu
ZCk6CisgICAgICAgIGVuZCA9IGVuZCBhbmQgZW5kLnJlcGxhY2UoJ3JlbW90ZXMvb3JpZ2luJywg
JycpCisgICAgICAgIGJlZ2luID0gYmVnaW4gYW5kIGJlZ2luLnJlcGxhY2UoJ3JlbW90ZXMvb3Jp
Z2luJywgJycpCisKICAgICAgICAgYnJhbmNoZXMgPSBbc2VsZi5kZWZhdWx0X2JyYW5jaF0KLSAg
ICAgICAgZm9yIGJyYW5jaCwgY29tbWl0cyBpbiBzZWxmLmNvbW1pdHMuaXRlbXMoKToKLSAgICAg
ICAgICAgIGlmIGJyYW5jaCA9PSBzZWxmLmRlZmF1bHRfYnJhbmNoOgotICAgICAgICAgICAgICAg
IGNvbnRpbnVlCi0gICAgICAgICAgICBmb3IgY29tbWl0IGluIGNvbW1pdHM6Ci0gICAgICAgICAg
ICAgICAgaWYgY29tbWl0Lmhhc2ggPT0gZW5kOgotICAgICAgICAgICAgICAgICAgICBicmFuY2hl
cy5pbnNlcnQoMCwgYnJhbmNoKQorICAgICAgICBpZiBlbmQgaW4gc2VsZi5jb21taXRzLmtleXMo
KSBhbmQgZW5kICE9IHNlbGYuZGVmYXVsdF9icmFuY2g6CisgICAgICAgICAgICBicmFuY2hlcy5h
cHBlbmQoZW5kKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGJyYW5jaCwgY29tbWl0
cyBpbiBzZWxmLmNvbW1pdHMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBicmFuY2ggPT0g
c2VsZi5kZWZhdWx0X2JyYW5jaDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAg
ICAgICAgICAgICBmb3IgY29tbWl0IGluIGNvbW1pdHM6CisgICAgICAgICAgICAgICAgICAgIGlm
IGNvbW1pdC5oYXNoLnN0YXJ0c3dpdGgoZW5kKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
YW5jaGVzLmluc2VydCgwLCBicmFuY2gpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhawor
ICAgICAgICAgICAgICAgIGlmIGxlbihicmFuY2hlcykgPiAxOgogICAgICAgICAgICAgICAgICAg
ICBicmVhawotICAgICAgICAgICAgaWYgbGVuKGJyYW5jaGVzKSA+IDE6Ci0gICAgICAgICAgICAg
ICAgYnJlYWsKIAogICAgICAgICBpbl9yYW5nZSA9IEZhbHNlCiAgICAgICAgIHByZXZpb3VzID0g
Tm9uZQogICAgICAgICBmb3IgYnJhbmNoIGluIGJyYW5jaGVzOgogICAgICAgICAgICAgZm9yIGNv
bW1pdCBpbiByZXZlcnNlZChzZWxmLmNvbW1pdHNbYnJhbmNoXSk6Ci0gICAgICAgICAgICAgICAg
aWYgY29tbWl0Lmhhc2ggPT0gZW5kOgorICAgICAgICAgICAgICAgIGlmIGJyYW5jaCA9PSBiZWdp
bjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBjb21taXQu
aGFzaC5zdGFydHN3aXRoKGVuZCkgb3IgZW5kID09IGJyYW5jaDoKICAgICAgICAgICAgICAgICAg
ICAgaW5fcmFuZ2UgPSBUcnVlCiAgICAgICAgICAgICAgICAgaWYgaW5fcmFuZ2UgYW5kIChub3Qg
cHJldmlvdXMgb3IgY29tbWl0Lmhhc2ggIT0gcHJldmlvdXMuaGFzaCk6CiAgICAgICAgICAgICAg
ICAgICAgIHlpZWxkIGNvbW1pdAogICAgICAgICAgICAgICAgIHByZXZpb3VzID0gY29tbWl0Ci0g
ICAgICAgICAgICAgICAgaWYgY29tbWl0Lmhhc2ggPT0gYmVnaW46CisgICAgICAgICAgICAgICAg
aWYgYmVnaW4gYW5kIGNvbW1pdC5oYXNoLnN0YXJ0c3dpdGgoYmVnaW4pOgogICAgICAgICAgICAg
ICAgICAgICBpbl9yYW5nZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKICAg
ICAgICAgICAgIGluX3JhbmdlID0gRmFsc2UKICAgICAgICAgICAgIGlmIG5vdCBwcmV2aW91cyBv
ciBicmFuY2ggPT0gc2VsZi5kZWZhdWx0X2JyYW5jaDoKICAgICAgICAgICAgICAgICBjb250aW51
ZQotCiAgICAgICAgICAgICBmb3IgY29tbWl0IGluIHJldmVyc2VkKHNlbGYuY29tbWl0c1tzZWxm
LmRlZmF1bHRfYnJhbmNoXSk6CiAgICAgICAgICAgICAgICAgaWYgcHJldmlvdXMuYnJhbmNoX3Bv
aW50ID09IGNvbW1pdC5pZGVudGlmaWVyOgogICAgICAgICAgICAgICAgICAgICBlbmQgPSBjb21t
aXQuaGFzaApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvcHJvZ3JhbS9fX2luaXRfXy5weSBiL1Rvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vX19pbml0X18ucHkKaW5kZXggMmZlYjlj
YWUzOWJlLi5jZjBhYjE1MmM3MWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vX19pbml0X18ucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9fX2luaXRf
Xy5weQpAQCAtMzQsNiArMzQsNyBAQCBmcm9tIC5jaGVja291dCBpbXBvcnQgQ2hlY2tvdXQKIGZy
b20gLmZpbmQgaW1wb3J0IEZpbmQsIEluZm8KIGZyb20gLnB1bGwgaW1wb3J0IFB1bGwKIGZyb20g
LnNldHVwX2dpdF9zdm4gaW1wb3J0IFNldHVwR2l0U3ZuCitmcm9tIC5naXRfZmFsbGJhY2sgaW1w
b3J0IEJsYW1lLCBTaG93LCBMb2csIFNob3J0bG9nCiAKIAogZGVmIG1haW4oYXJncz1Ob25lLCBw
YXRoPU5vbmUsIGxvZ2dlcnM9Tm9uZSwgY29udHJpYnV0b3JzPU5vbmUsIGlkZW50aWZpZXJfdGVt
cGxhdGU9Tm9uZSwgc3VidmVyc2lvbj1Ob25lKToKQEAgLTU3LDcgKzU4LDcgQEAgZGVmIG1haW4o
YXJncz1Ob25lLCBwYXRoPU5vbmUsIGxvZ2dlcnM9Tm9uZSwgY29udHJpYnV0b3JzPU5vbmUsIGlk
ZW50aWZpZXJfdGVtcGwKIAogICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMo
aGVscD0nc3ViLWNvbW1hbmQgaGVscCcpCiAKLSAgICBwcm9ncmFtcyA9IFtGaW5kLCBJbmZvLCBD
aGVja291dCwgQ2Fub25pY2FsaXplLCBQdWxsLCBDbGVhbl0KKyAgICBwcm9ncmFtcyA9IFtGaW5k
LCBJbmZvLCBDaGVja291dCwgQ2Fub25pY2FsaXplLCBQdWxsLCBDbGVhbiwgQmxhbWUsIFNob3cs
IExvZywgU2hvcnRsb2ddCiAgICAgaWYgc3VidmVyc2lvbjoKICAgICAgICAgcHJvZ3JhbXMuYXBw
ZW5kKFNldHVwR2l0U3ZuKQogCkBAIC02Niw3ICs2Nyw3IEBAIGRlZiBtYWluKGFyZ3M9Tm9uZSwg
cGF0aD1Ob25lLCBsb2dnZXJzPU5vbmUsIGNvbnRyaWJ1dG9ycz1Ob25lLCBpZGVudGlmaWVyX3Rl
bXBsCiAgICAgICAgIHN1YnBhcnNlci5zZXRfZGVmYXVsdHMobWFpbj1wcm9ncmFtLm1haW4pCiAg
ICAgICAgIHByb2dyYW0ucGFyc2VyKHN1YnBhcnNlciwgbG9nZ2Vycz1sb2dnZXJzKQogCi0gICAg
cGFyc2VkID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncz1hcmdzKQorICAgIHBhcnNlZCwgdW5rbm93
bl9hcmdzID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoYXJncz1hcmdzKQogCiAgICAgaWYgcGFy
c2VkLnJlcG9zaXRvcnkuc3RhcnRzd2l0aCgoJ2h0dHBzOi8vJywgJ2h0dHA6Ly8nKSk6CiAgICAg
ICAgIHJlcG9zaXRvcnkgPSByZW1vdGUuU2NtLmZyb21fdXJsKHBhcnNlZC5yZXBvc2l0b3J5LCBj
b250cmlidXRvcnM9Y29udHJpYnV0b3JzKQpAQCAtODIsNCArODMsNSBAQCBkZWYgbWFpbihhcmdz
PU5vbmUsIHBhdGg9Tm9uZSwgbG9nZ2Vycz1Ob25lLCBjb250cmlidXRvcnM9Tm9uZSwgaWRlbnRp
Zmllcl90ZW1wbAogICAgICAgICByZXBvc2l0b3J5PXJlcG9zaXRvcnksCiAgICAgICAgIGlkZW50
aWZpZXJfdGVtcGxhdGU9aWRlbnRpZmllcl90ZW1wbGF0ZSwKICAgICAgICAgc3VidmVyc2lvbj1z
dWJ2ZXJzaW9uLAorICAgICAgICB1bmtub3duX2FyZ3M9dW5rbm93bl9hcmdzCiAgICAgKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkv
cHJvZ3JhbS9naXRfZmFsbGJhY2sucHkgYi9Ub29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS9wcm9ncmFtL2dpdF9mYWxsYmFjay5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjYwYTQ1NDEyYTk0YwotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0v
Z2l0X2ZhbGxiYWNrLnB5CkBAIC0wLDAgKzEsMTk2IEBACisjIENvcHlyaWdodCAoQykgMjAyMCwg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBqc29uCitpbXBvcnQgb3MKK2ltcG9ydCBy
ZQoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0
ZW1wZmlsZQoraW1wb3J0IHRpbWUKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2ltcG9ydCB0aHJl
YWRpbmcKKworZnJvbSAuY29tbWFuZCBpbXBvcnQgQ29tbWFuZAorZnJvbSBkYXRldGltZSBpbXBv
cnQgZGF0ZXRpbWUKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBhcmd1bWVudHMKK2Zyb20gd2Vi
a2l0c2NtcHkgaW1wb3J0IENvbW1pdCwgbG9jYWwKKworCisjIE5vdGU6IEhBU0hfUkUgYW5kIFNW
Tl9SRSBwZXJmb3JtYW5jZSBhcmUgdmVyeSBzZW5zaXRpdmUgdG8gYW55IGNoYW5nZXMuIFBsZWFz
ZSBiZW5jaG1hcmsgd2l0aAorIyBgZ2l0IHdlYmtpdCBsb2cgLS1iZW5jaG1hcmtgIHdoZW4gY2hh
bmdpbmcgdGhlc2UgdG8gZW5zdXJlIHNpbWlsYXIgd3JpdGUgdGltZXMgYXJlIGFjaGlldmVkLgor
IyBBcyBvZiB0aGlzIGNvZGUgYmVpbmcgYWRkZWQsIHdlIHVzdWFsbHkgZ2V0IGJldHdlZW4gNDMw
MC00OTAwa2JwcyBmb3IgYGdpdCB3ZWJraXQgbG9nIC0tYmVuY2htYXJrYC4KK0lERU5USUZJRVJf
UkUgPSByZS5jb21waWxlKHInKD86WzAtOV17MSw3fSg/OlwuWzAtOV17MSw1fSk/QFtcdy1dKykn
KQorSEFTSF9SRSA9IHJlLmNvbXBpbGUocidcYihbMC05YS1mXXsxMyw0MH0/KVxiJykgICMgR2l0
IGJsYW1lIHVzZXMgMTMgY2hhcmFjdGVycyBmb3IgYSBoYXNoLgorU1ZOX1JFID0gcmUuY29tcGls
ZShyJ1teL11yKFswLTldezQsNn0pJykKKworCitkZWYgYm9sZF90ZXh0KHRleHQpOgorICAgIHJl
dHVybiB1J1x1MDAxYlsxbScgKyB0ZXh0ICsgdSdcdTAwMWJbMG0nCisKK2RlZiBuYWl2ZV9hbm5v
dGF0aW9uKHJlcG8sIGxpbmUpOgorICAgIGhhc2hfbWF0Y2ggPSBIQVNIX1JFLmZpbmRhbGwobGlu
ZSkKKyAgICByZXZpc2lvbl9tYXRjaCA9IFNWTl9SRS5maW5kYWxsKGxpbmUpCisgICAgaWYgbm90
IGhhc2hfbWF0Y2ggYW5kIG5vdCByZXZpc2lvbl9tYXRjaDoKKyAgICAgICAgcmV0dXJuIGxpbmUK
KworICAgIGZvciByZXN1bHQgaW4gaGFzaF9tYXRjaDoKKyAgICAgICAgc2hvcnRlbmVkX2NvbW1p
dF9pZCA9IHJlc3VsdFs6MTNdCisgICAgICAgIGlkZW50aWZpZXIgPSByZXBvLmNhY2hlLmhhc2hf
dG9faWRlbnRpZmllcihzaG9ydGVuZWRfY29tbWl0X2lkKQorICAgICAgICBpZiBub3QgaWRlbnRp
ZmllcjoKKyAgICAgICAgICAgIGNvbnRpbnVlICAjIFNvbWV0aW1lcyB0aGVzZSBzaG93IHVwLgor
CisgICAgICAgIHNob3VsZF9ib2xkID0gJ2NvbW1pdCcgaW4gbGluZQorICAgICAgICBsaW5lID0g
bGluZS5yZXBsYWNlKHJlc3VsdCwgICd7fSAoe30pJy5mb3JtYXQocmVzdWx0LCBib2xkX3RleHQo
aWRlbnRpZmllcikgaWYgc2hvdWxkX2JvbGQgZWxzZSBpZGVudGlmaWVyKSwgMSkKKworICAgIGZv
ciByZXN1bHQgaW4gcmV2aXNpb25fbWF0Y2g6CisgICAgICAgIGlkZW50aWZpZXIgPSByZXBvLmNh
Y2hlLnJldmlzaW9uX3RvX2lkZW50aWZpZXIocmVzdWx0KQorICAgICAgICBpZiBub3QgaWRlbnRp
ZmllcjoKKyAgICAgICAgICAgIGNvbnRpbnVlICAjIFNvbWV0aW1lcyB0aGVzZSBzaG93IHVwLCBz
dWNoIGFzIEJsaW5rIHJldmlzaW9ucy4KKworICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKHJl
c3VsdCwgJ3t9ICh7fSknLmZvcm1hdChyZXN1bHQsIGlkZW50aWZpZXIpLCAxKQorCisgICAgcmV0
dXJuIGxpbmUKKworCitkZWYgd3JpdGVfZmlsZV9mb3JfbGVzc192aWV3aW5nKGdpdF9jb21tYW5k
LCBmcCwgcmVwbyk6CisgICAgd2l0aCBvcGVuKGZwLCAndycpIGFzIGY6CisgICAgICAgIGdpdF9w
cm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihnaXRfY29tbWFuZCwgc3Rkb3V0PXN1YnByb2Nlc3Mu
UElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgYnVmc2l6ZT00MDk2LCB0ZXh0PVRydWUpCisg
ICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBsaW5lID0gZ2l0X3Byb2Nlc3Muc3Rkb3V0
LnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGYud3JpdGUobmFpdmVfYW5ub3RhdGlvbihyZXBvLCBs
aW5lKSkKKyAgICAgICAgICAgIGYuZmx1c2goKQorCisKK2NsYXNzIE5hdGl2ZUdpdFZpZXdDb21t
YW5kKENvbW1hbmQpOgorICAgIG5hbWUgPSBOb25lICAjIE11c3QgaW1wbGVtZW50CisgICAgZXh0
cmFfZ2l0X2NvbW1hbmRzID0gW10KKyAgICBfaWRlbnRpZmllcl9tYXBwaW5ncyA9IHt9CisKKyAg
ICBAcHJvcGVydHkKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgaGVscChjbHMpOgorICAgICAg
ICB0cnk6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2dpdCcsIGNscy5u
YW1lXSkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6
CisgICAgICAgICAgICByZXR1cm4gZS5vdXRwdXQKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRl
ZiBwYXJzZXIoY2xzLCBwYXJzZXIsIGxvZ2dlcnM9Tm9uZSk6CisgICAgICAgIHBhcnNlci5hZGRf
YXJndW1lbnQoCisgICAgICAgICAgICAnLS1iZW5jaG1hcmsnLAorICAgICAgICAgICAgYWN0aW9u
PSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgIGhlbHA9J0JlbmNobWFy
ayBzdGFydHVwIGFuZCBwYWdlZC12aWV3IGdlbmVyYXRpb24uJworICAgICAgICApCisKKyAgICBA
Y2xhc3NtZXRob2QKKyAgICBkZWYgYmVuY2htYXJrX2NhY2hlX2luaXRpYWxpemF0aW9uX2FuZF9s
b29rdXAoY2xzLCByZXBvc2l0b3J5KToKKyAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgp
CisgICAgICAgIHJlcG9zaXRvcnkuY2FjaGUuaW5pdGlhbGl6ZSgpCisgICAgICAgIHJlcG9zaXRv
cnkubG9nKHN0cihyZXBvc2l0b3J5LmNhY2hlLmhhc2hfdG9faWRlbnRpZmllcignMGE3ZjQzYXNk
c2Rhc3NkYXNkZHNhZHNhZHNhJykpKQorICAgICAgICByZXBvc2l0b3J5LmxvZyhzdHIocmVwb3Np
dG9yeS5jYWNoZS5oYXNoX3RvX2lkZW50aWZpZXIoJzRkNWFjZjVhMDc0NWExYWZlZmM3OWY4ODQz
MDk0Yjk0ZGFkNjJiOTInKSkpCisgICAgICAgIHJlcG9zaXRvcnkubG9nKHN0cihyZXBvc2l0b3J5
LmNhY2hlLmhhc2hfdG9faWRlbnRpZmllcignNGQ1NWExYWZlZmM3OWY4ODQzMDk0Yjk0ZGFkNjJi
OTInKSkpCisgICAgICAgIHJlcG9zaXRvcnkubG9nKHN0cihyZXBvc2l0b3J5LmNhY2hlLnJldmlz
aW9uX3RvX2lkZW50aWZpZXIoJ3IyMTExMTEnKSkpCisgICAgICAgIHJlcG9zaXRvcnkubG9nKHN0
cihyZXBvc2l0b3J5LmNhY2hlLnJldmlzaW9uX3RvX2lkZW50aWZpZXIoMjExMTExKSkpCisgICAg
ICAgIHJlcG9zaXRvcnkubG9nKHN0cihyZXBvc2l0b3J5LmNhY2hlLmhhc2hfdG9faWRlbnRpZmll
cignZTFiMjc2M2I3YzE1YicpKSkKKyAgICAgICAgcmVwb3NpdG9yeS5sb2coc3RyKHJlcG9zaXRv
cnkuY2FjaGUuaWRlbnRpZmllcl90b19oYXNoKDIzNDEyNCkpKQorICAgICAgICByZXBvc2l0b3J5
LmxvZygnTG9va2luZyB1cCByMjcxODAxIGFuZCBleHBlY3RpbmcgaXQgdG8gcmV0dXJuIDIzMzMw
N0BtYWluOiB7fScuZm9ybWF0KAorICAgICAgICAgICAgc3RyKHJlcG9zaXRvcnkuY2FjaGUucmV2
aXNpb25fdG9faWRlbnRpZmllcigicjI3MTgwMSIpKSkpCisgICAgICAgIHJlcG9zaXRvcnkubG9n
KCdMb29raW5nIHVwIHIyNzIyMjAgYW5kIGV4cGVjdGluZyBpdCB0byByZXR1cm4gMjMzNTk2QG1h
aW46IHt9Jy5mb3JtYXQoCisgICAgICAgICAgICBzdHIocmVwb3NpdG9yeS5jYWNoZS5yZXZpc2lv
bl90b19pZGVudGlmaWVyKCJyMjcyMjIwIikpKSkKKyAgICAgICAgcmVwb3NpdG9yeS5sb2coJ1Rp
bWUgdGFrZW4gdG8gaW5pdGlhbGl6ZSBpZGVudGlmaWVyIGNhY2hlIGFuZCBsb29rdXAgc29tZSBj
b21taXRzOiB7fScuZm9ybWF0KHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSkpCisKKyAgICBAY2xh
c3NtZXRob2QKKyAgICBkZWYgbWFpbihjbHMsIGFyZ3MsIHJlcG9zaXRvcnksICoqa3dhcmdzKToK
KyAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIGlmIGFyZ3MuYmVuY2ht
YXJrOgorICAgICAgICAgICAgY2xzLmJlbmNobWFya19jYWNoZV9pbml0aWFsaXphdGlvbl9hbmRf
bG9va3VwKHJlcG9zaXRvcnkpCisKKyAgICAgICAgcGFzc3Rocm91Z2hfYXJncyA9IFtjbHMuY29u
dmVydF9pZGVudGlmaWVyX3RvX2hhc2hfaWZfbmVlZGVkKGFyZywgcmVwb3NpdG9yeSkgZm9yIGFy
ZyBpbiBrd2FyZ3MuZ2V0KCd1bmtub3duX2FyZ3MnLCBbXSldCisgICAgICAgIGdpdF9jb21tYW5k
ID0gWydnaXQnLCBjbHMubmFtZV0gKyBjbHMuZXh0cmFfZ2l0X2NvbW1hbmRzICsgcGFzc3Rocm91
Z2hfYXJncworCisgICAgICAgIHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZShzdWZmaXg9Zidn
aXQte2Nscy5uYW1lfScpIGFzIGY6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAg
cGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksIHN0cihmLm5hbWUpKQor
ICAgICAgICAgICAgICAgIGdlbmVyYXRlX3ZpZXdlYWJsZV9maWxlID0gdGhyZWFkaW5nLlRocmVh
ZCh0YXJnZXQ9d3JpdGVfZmlsZV9mb3JfbGVzc192aWV3aW5nLCBhcmdzPShnaXRfY29tbWFuZCwg
cGF0aCwgcmVwb3NpdG9yeSkpCisgICAgICAgICAgICAgICAgZ2VuZXJhdGVfdmlld2VhYmxlX2Zp
bGUuZGFlbW9uID0gVHJ1ZQorICAgICAgICAgICAgICAgIGdlbmVyYXRlX3ZpZXdlYWJsZV9maWxl
LnN0YXJ0KCkKKworICAgICAgICAgICAgICAgIHRpbWVvdXQgPSAxMAorICAgICAgICAgICAgICAg
IHRpbWVvdXRfdGltZSA9IHRpbWUudGltZSgpICsgdGltZW91dAorICAgICAgICAgICAgICAgIHdo
aWxlIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKSBvciBvcy5wYXRoLmdldHNpemUocGF0aCkgPCAy
MCBvciB0aW1lLnRpbWUoKSA+IHRpbWVvdXRfdGltZToKKyAgICAgICAgICAgICAgICAgICAgdGlt
ZS5zbGVlcCgwLjAxKQorICAgICAgICAgICAgICAgIGZvdW5kX2luaXRpYWxfZmlsZV90aW1lID0g
dGltZS50aW1lKCkKKworICAgICAgICAgICAgICAgICMjIFRha2VuIGZyb20gaHR0cHM6Ly9zdGFj
a292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjQ4ODQzNTcvcHl0aG9uLXNoZWxsLXNjcmlwdC1vcGVu
LWxlc3Mtd2l0aC1mLW9wdGlvbgorICAgICAgICAgICAgICAgIG9sZF9hY3Rpb24gPSBzaWduYWwu
c2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNpZ25hbC5TSUdfSUdOKQorICAgICAgICAgICAgICAgIG9z
LnNwYXdubHBlKG9zLlBfV0FJVCwgJ2xlc3MnLCAnK0YnLCAnLVInLCAnLVMnLCAnLVgnLCAnLUsn
LCAocGF0aCksIG9zLmVudmlyb24pCisgICAgICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWdu
YWwuU0lHSU5ULCBvbGRfYWN0aW9uKQorCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAg
ICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICAgICAgICAgICAgICBpZiBh
cmdzLmJlbmNobWFyazoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX2J5dGVzX3dyaXR0
ZW4gPSBvcy5wYXRoLmdldHNpemUocGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFs
X2VsYXBzZWRfc2Vjb25kcyA9IHJvdW5kKHRpbWUudGltZSgpIC0gZm91bmRfaW5pdGlhbF9maWxl
X3RpbWUsIDQpCisgICAgICAgICAgICAgICAgICAgICAgICBhdmdfa2JwcyA9IHJvdW5kKHRvdGFs
X2J5dGVzX3dyaXR0ZW4gLyAxMDI0IC8gdG90YWxfZWxhcHNlZF9zZWNvbmRzLCAzKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeS5sb2coJ1dyb3RlIHt9IGJ5dGVzIGluIHt9IHNl
Y29uZHMgKEF2ZyB7fWtiL3MpJy5mb3JtYXQodG90YWxfYnl0ZXNfd3JpdHRlbiwgdG90YWxfZWxh
cHNlZF9zZWNvbmRzLCBhdmdfa2JwcykpCisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShw
YXRoKQorCisgICAgICAgIHJldHVybiAwCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgY29u
dmVydF9pZGVudGlmaWVyX3RvX2hhc2hfaWZfbmVlZGVkKGNscywgX3N0cmluZywgcmVwb3NpdG9y
eSk6CisgICAgICAgICMgVE9ETzogV2UgcHJvYmFibHkgc2hvdWxkIG1vdmUgdGhpcyB0byB0aGUg
bWFpbiBwYXJzZXIgZm9yIGdpdC13ZWJraXQuCisgICAgICAgIGlkZW50aWZpZXJfbWF0Y2hlcyA9
IElERU5USUZJRVJfUkUuZmluZGFsbChfc3RyaW5nKQorICAgICAgICBpZiBub3QgaWRlbnRpZmll
cl9tYXRjaGVzOgorICAgICAgICAgICAgcmV0dXJuIF9zdHJpbmcKKworICAgICAgICBmb3IgcmVz
dWx0IGluIGlkZW50aWZpZXJfbWF0Y2hlczoKKyAgICAgICAgICAgIHBhcnNlZF9icmFuY2hfcG9p
bnQsIGlkZW50aWZpZXIsIGJyYW5jaCA9IENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcihyZXN1bHQp
CisgICAgICAgICAgICBjb252ZXJzaW9uID0gcmVwb3NpdG9yeS5jYWNoZS5pZGVudGlmaWVyX3Rv
X2hhc2goaWRlbnRpZmllciwgYnJhbmNoPWJyYW5jaCkKKyAgICAgICAgICAgIGlmIG5vdCBjb252
ZXJzaW9uOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIF9zdHJpbmcg
PSBfc3RyaW5nLnJlcGxhY2UocmVzdWx0LCBjb252ZXJzaW9uLCAxKQorCisgICAgICAgIHJldHVy
biBfc3RyaW5nCisKKworY2xhc3MgQmxhbWUoTmF0aXZlR2l0Vmlld0NvbW1hbmQpOgorICAgIG5h
bWUgPSAnYmxhbWUnCisKKworY2xhc3MgU2hvdyhOYXRpdmVHaXRWaWV3Q29tbWFuZCk6CisgICAg
bmFtZSA9ICdzaG93JworICAgIGV4dHJhX2dpdF9jb21tYW5kcyA9IFsnLS1jb2xvcj1hbHdheXMn
XQorCisKK2NsYXNzIFNob3J0bG9nKE5hdGl2ZUdpdFZpZXdDb21tYW5kKToKKyAgICBuYW1lID0g
J3Nob3J0bG9nJworICAgIGV4dHJhX2dpdF9jb21tYW5kcyA9IFsnLS1jb2xvcj1hbHdheXMnXQor
CisKK2NsYXNzIExvZyhOYXRpdmVHaXRWaWV3Q29tbWFuZCk6CisgICAgbmFtZSA9ICdsb2cnCisg
ICAgZXh0cmFfZ2l0X2NvbW1hbmRzID0gWyctLWNvbG9yPWFsd2F5cyddCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9zY21fYmFzZS5w
eSBiL1Rvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3NjbV9i
YXNlLnB5CmluZGV4IGYxZDVkYjhkOTAwYi4uYTU5MTQ5OWEwZjQyIDEwMDY0NAotLS0gYS9Ub29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9zY21fYmFzZS5weQor
KysgYi9Ub29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9zY21f
YmFzZS5weQpAQCAtMzcsNyArMzcsOSBAQCBjbGFzcyBTY21CYXNlKG9iamVjdCk6CiAgICAgIyB0
aGUgZm9sbG93aW5nIGlkaW9tcyBzZWVtIGNvbW1vbiBlbm91Z2ggdG8gYmUgc2hhcmVkLgogICAg
IERFVl9CUkFOQ0hFUyA9IHJlLmNvbXBpbGUocicuKlsoZW5nKShkZXYpKGJ1ZyldLy4rJykKICAg
ICBQUk9EX0JSQU5DSEVTID0gcmUuY29tcGlsZShyJ1xTKy1bXGQrXC5dKy1icmFuY2gnKQotICAg
IEdJVF9TVk5fUkVWSVNJT04gPSByZS5jb21waWxlKHInXmdpdC1zdm4taWQ6IFxTKzpcL1wvLitA
KD9QPHJldmlzaW9uPlxkKykgListListListLisnLCBmbGFncz1yZS5NVUxUSUxJTkUpCisgICAg
R0lUX1NWTl9SRVZJU0lPTiA9IHJlLmNvbXBpbGUocideKD86ICAgICk/Z2l0LXN2bi1pZDogXFMr
OlwvXC8uK0AoP1A8cmV2aXNpb24+XGQrKSAuKy0uKy0uKy0uKycsIGZsYWdzPXJlLk1VTFRJTElO
RSkKKyAgICBDT01NSVRfRlJPTV9MT0cgPSByZS5jb21waWxlKHInXmNvbW1pdCAoP1A8Y29tbWl0
PlthLXpBLVowLTldezQwfSknKQorCiAgICAgREVGQVVMVF9CUkFOQ0hFUyA9IFsnbWFpbicsICdt
YXN0ZXInLCAndHJ1bmsnXQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRldl9icmFuY2hlcz1O
b25lLCBwcm9kX2JyYW5jaGVzPU5vbmUsIGNvbnRyaWJ1dG9ycz1Ob25lLCBpZD1Ob25lKToKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L3Rlc3QvY2Fub25pY2FsaXplX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9jYW5vbmljYWxpemVfdW5pdHRlc3QucHkKaW5k
ZXggNzc5ZGQ4YWYzN2I1Li5kN2YwOTQyZWM4ZGMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvY2Fub25pY2FsaXplX3VuaXR0
ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L3Rlc3QvY2Fub25pY2FsaXplX3VuaXR0ZXN0LnB5CkBAIC0yMCw2ICsyMCw5IEBACiAjIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKK2ltcG9ydCBvcworaW1wb3J0IHNo
dXRpbAoraW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB3ZWJraXRjb3Jl
cHkgaW1wb3J0IE91dHB1dENhcHR1cmUKQEAgLTI4LDcgKzMxLDEyIEBAIGZyb20gd2Via2l0c2Nt
cHkgaW1wb3J0IHByb2dyYW0sIG1vY2tzLCBsb2NhbCwgQ29tbWl0LCBDb250cmlidXRvcgogCiAK
IGNsYXNzIFRlc3RDYW5vbmljYWxpemUodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIHBhdGggPSAn
L21vY2svcmVwb3NpdG9yeScKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucGF0
aCA9IHRlbXBmaWxlLm1rZHRlbXAoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAg
ICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLnBhdGgpIGFuZCBzZWxmLnBhdGguc3RhcnRzd2l0aCgn
L3RtcCcpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLnBhdGgpCiAKICAgICBkZWYg
dGVzdF9pbnZhbGlkKHNlbGYpOgogICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUoKSwgbW9ja3Mu
bG9jYWwuR2l0KCksIG1vY2tzLmxvY2FsLlN2bihzZWxmLnBhdGgpLCBNb2NrVGltZToKQEAgLTEz
OSw3ICsxNDcsNyBAQCBjbGFzcyBUZXN0Q2Fub25pY2FsaXplKHVuaXR0ZXN0LlRlc3RDYXNlKToK
ICAgICAgICAgICAgICAgICBjb21taXQubWVzc2FnZSwKICAgICAgICAgICAgICAgICAnTmV3IGNv
bW1pdFxuJwogICAgICAgICAgICAgICAgICdJZGVudGlmaWVyOiA2QG1haW5cbicKLSAgICAgICAg
ICAgICAgICAnZ2l0LXN2bi1pZDogaHR0cHM6Ly9zdm4uZXhhbXBsZS5vcmcvcmVwb3NpdG9yeS9y
ZXBvc2l0b3J5L3RydW5rQDkgMjY4ZjQ1Y2MtY2QwOS0wNDEwLWFiM2MtZDUyNjkxYjRkYmZjJywK
KyAgICAgICAgICAgICAgICAnZ2l0LXN2bi1pZDogaHR0cHM6Ly9zdm4uZXhhbXBsZS5vcmcvcmVw
b3NpdG9yeS97fS90cnVua0A5IDI2OGY0NWNjLWNkMDktMDQxMC1hYjNjLWQ1MjY5MWI0ZGJmYycu
Zm9ybWF0KG9zLnBhdGguYmFzZW5hbWUoc2VsZi5wYXRoKSksCiAgICAgICAgICAgICApCiAKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvY2hlY2tvdXRfdW5pdHRlc3QucHkgYi9U
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2NoZWNr
b3V0X3VuaXR0ZXN0LnB5CmluZGV4IGM1ODU4MDI1OGQ1Yy4uNzhiNjNlN2Y4ZDA4IDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0
L2NoZWNrb3V0X3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvY2hlY2tvdXRfdW5pdHRlc3QucHkKQEAgLTIwLDYgKzIw
LDkgQEAKICMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAoraW1wb3J0IG9z
CitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdAogCiBmcm9t
IHdlYmtpdGNvcmVweSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQpAQCAtMjgsNyArMzEsMTIgQEAgZnJv
bSB3ZWJraXRzY21weSBpbXBvcnQgcHJvZ3JhbSwgbW9ja3MsIGxvY2FsCiAKIAogY2xhc3MgVGVz
dENoZWNrb3V0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBwYXRoID0gJy9tb2NrL3JlcG9zaXRv
cnknCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnBhdGggPSB0ZW1wZmlsZS5t
a2R0ZW1wKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgb3MucGF0aC5l
eGlzdHMoc2VsZi5wYXRoKSBhbmQgc2VsZi5wYXRoLnN0YXJ0c3dpdGgoJy90bXAnKToKKyAgICAg
ICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5wYXRoKQogCiAgICAgZGVmIHRlc3RfY2hlY2tvdXRf
Z2l0KHNlbGYpOgogICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUoKSwgbW9ja3MubG9jYWwuR2l0
KHNlbGYucGF0aCksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGltZToKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvZmluZF91
bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L3Rlc3QvZmluZF91bml0dGVzdC5weQppbmRleCBiNmY1OTE4OTFmZmYuLmQ3NmJlYTQ5NDg5
OSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0
c2NtcHkvdGVzdC9maW5kX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvZmluZF91bml0dGVzdC5weQpAQCAtMjIsNiAr
MjIsNyBAQAogCiBpbXBvcnQganNvbgogaW1wb3J0IHNodXRpbAoraW1wb3J0IG9zCiBpbXBvcnQg
dGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdAogCkBAIC0zMiw3ICszMywxMiBAQCBmcm9tIHdlYmtp
dHNjbXB5IGltcG9ydCBwcm9ncmFtLCBtb2NrcwogCiAKIGNsYXNzIFRlc3RGaW5kKHVuaXR0ZXN0
LlRlc3RDYXNlKToKLSAgICBwYXRoID0gJy9tb2NrL3JlcG9zaXRvcnknCisgICAgZGVmIHNldFVw
KHNlbGYpOgorICAgICAgICBzZWxmLnBhdGggPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKworICAgIGRl
ZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5wYXRoKSBh
bmQgc2VsZi5wYXRoLnN0YXJ0c3dpdGgoJy90bXAnKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRy
ZWUoc2VsZi5wYXRoKQogCiAgICAgZGVmIHRlc3RfYmFzaWNfZ2l0KHNlbGYpOgogICAgICAgICB3
aXRoIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZCwgbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0
aCksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGltZToKQEAgLTE1OCw4ICsxNjQsOCBAQCBSZXZp
c2lvbjogNAogSGFzaDogMWFiZTI1YjQ0M2U5CiBJZGVudGlmaWVyOiAzQG1haW4KICAgICA0dGgg
Y29tbWl0Ci0gICAgZ2l0LXN2bi1pZDogaHR0cHM6Ly9zdm4uZXhhbXBsZS5vcmcvcmVwb3NpdG9y
eS9yZXBvc2l0b3J5L3RydW5rQDQgMjY4ZjQ1Y2MtY2QwOS0wNDEwLWFiM2MtZDUyNjkxYjRkYmZj
Ci0nJycuZm9ybWF0KGRhdGV0aW1lLmZyb210aW1lc3RhbXAoMTYwMTY2MzAwMCkuc3RyZnRpbWUo
JyVhICViICVkICVIOiVNOiVTICVZJykpLAorICAgIGdpdC1zdm4taWQ6IGh0dHBzOi8vc3ZuLmV4
YW1wbGUub3JnL3JlcG9zaXRvcnkve30vdHJ1bmtANCAyNjhmNDVjYy1jZDA5LTA0MTAtYWIzYy1k
NTI2OTFiNGRiZmMKKycnJy5mb3JtYXQoZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCgxNjAxNjYzMDAw
KS5zdHJmdGltZSgnJWEgJWIgJWQgJUg6JU06JVMgJVknKSwgb3MucGF0aC5iYXNlbmFtZShzZWxm
LnBhdGgpKSwKICAgICAgICAgKQogCiAgICAgZGVmIHRlc3RfanNvbihzZWxmKToKQEAgLTE4MSw3
ICsxODcsNyBAQCBJZGVudGlmaWVyOiAzQG1haW4KICAgICAgICAgICAgICAgICApLCB0aW1lc3Rh
bXA9MTYwMTY2MzAwMCwKICAgICAgICAgICAgICAgICBvcmRlcj0wLAogICAgICAgICAgICAgICAg
IGJyYW5jaD0nbWFpbicsCi0gICAgICAgICAgICAgICAgbWVzc2FnZT0nNHRoIGNvbW1pdFxuZ2l0
LXN2bi1pZDogaHR0cHM6Ly9zdm4uZXhhbXBsZS5vcmcvcmVwb3NpdG9yeS9yZXBvc2l0b3J5L3Ry
dW5rQDQgMjY4ZjQ1Y2MtY2QwOS0wNDEwLWFiM2MtZDUyNjkxYjRkYmZjJywKKyAgICAgICAgICAg
ICAgICBtZXNzYWdlPSc0dGggY29tbWl0XG5naXQtc3ZuLWlkOiBodHRwczovL3N2bi5leGFtcGxl
Lm9yZy9yZXBvc2l0b3J5L3t9L3RydW5rQDQgMjY4ZjQ1Y2MtY2QwOS0wNDEwLWFiM2MtZDUyNjkx
YjRkYmZjJy5mb3JtYXQob3MucGF0aC5iYXNlbmFtZShzZWxmLnBhdGgpKSwKICAgICAgICAgICAg
ICkpCiAKICAgICBkZWYgdGVzdF90YWdfc3ZuKHNlbGYpOgpAQCAtMjM2LDcgKzI0MiwxMiBAQCBJ
ZGVudGlmaWVyOiAzQHRydW5rCiAKIAogY2xhc3MgVGVzdEluZm8odW5pdHRlc3QuVGVzdENhc2Up
OgotICAgIHBhdGggPSAnL21vY2svcmVwb3NpdG9yeScKKyAgICBkZWYgc2V0VXAoc2VsZik6Cisg
ICAgICAgIHNlbGYucGF0aCA9IHRlbXBmaWxlLm1rZHRlbXAoKQorCisgICAgZGVmIHRlYXJEb3du
KHNlbGYpOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLnBhdGgpIGFuZCBzZWxmLnBh
dGguc3RhcnRzd2l0aCgnL3RtcCcpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLnBh
dGgpCiAKICAgICBkZWYgdGVzdF9iYXNpY19naXQoc2VsZik6CiAgICAgICAgIHdpdGggT3V0cHV0
Q2FwdHVyZSgpIGFzIGNhcHR1cmVkLCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoKSwgbW9ja3Mu
bG9jYWwuU3ZuKCksIE1vY2tUaW1lOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9naXRfdW5pdHRlc3QucHkgYi9Ub29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2dpdF91bml0dGVz
dC5weQppbmRleCBiYzdiNjM5MjliNGEuLjNmNjZlN2VhN2U1MSAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9naXRfdW5pdHRl
c3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvdGVzdC9naXRfdW5pdHRlc3QucHkKQEAgLTMyLDcgKzMyLDEyIEBAIGZyb20gd2Via2l0c2Nt
cHkgaW1wb3J0IENvbW1pdCwgbG9jYWwsIG1vY2tzLCByZW1vdGUKIAogCiBjbGFzcyBUZXN0R2l0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBwYXRoID0gJy9tb2NrL3JlcG9zaXRvcnknCisgICAg
ZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnBhdGggPSB0ZW1wZmlsZS5ta2R0ZW1wKCkK
KworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2Vs
Zi5wYXRoKSBhbmQgc2VsZi5wYXRoLnN0YXJ0c3dpdGgoJy90bXAnKToKKyAgICAgICAgICAgIHNo
dXRpbC5ybXRyZWUoc2VsZi5wYXRoKQogCiAgICAgZGVmIHRlc3RfZGV0ZWN0aW9uKHNlbGYpOgog
ICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUoKSwgbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCks
IG1vY2tzLmxvY2FsLlN2bigpOgpAQCAtMTAzLDggKzEwOCw4IEBAIGNsYXNzIFRlc3RHaXQodW5p
dHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKAog
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAnUGF0aCc6ICcu
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICdSZXBvc2l0b3J5IFJvb3QnOiAnZ2l0QGV4YW1w
bGUub3JnOi9tb2NrL3JlcG9zaXRvcnknLAotICAgICAgICAgICAgICAgICAgICAgICAgJ1VSTCc6
ICdnaXRAZXhhbXBsZS5vcmc6L21vY2svcmVwb3NpdG9yeS9tYWluJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICdSZXBvc2l0b3J5IFJvb3QnOiAnZ2l0QGV4YW1wbGUub3JnOnt9Jy5mb3JtYXQo
c2VsZi5wYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdVUkwnOiAnZ2l0QGV4YW1wbGUu
b3JnOnt9L21haW4nLmZvcm1hdChzZWxmLnBhdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
J1JldmlzaW9uJzogJzknLAogICAgICAgICAgICAgICAgICAgICAgICAgJ05vZGUgS2luZCc6ICdk
aXJlY3RvcnknLAogICAgICAgICAgICAgICAgICAgICAgICAgJ1NjaGVkdWxlJzogJ25vcm1hbCcs
CkBAIC0zMDUsNiArMzEwLDM1IEBAIGNsYXNzIFRlc3RHaXQodW5pdHRlc3QuVGVzdENhc2UpOgog
ICAgICAgICAgICAgICAgICAgICBnaXQuY29tbWl0KGhhc2g9JzliODMxMWYyJyksCiAgICAgICAg
ICAgICAgICAgXSksIENvbW1pdC5FbmNvZGVyKCkuZGVmYXVsdChsaXN0KGdpdC5jb21taXRzKGJl
Z2luPWRpY3QoYXJndW1lbnQ9JzliODMxMWYyJyksIGVuZD1kaWN0KGFyZ3VtZW50PSc2MjE2NTJh
ZCcpKSkpKQogCisgICAgZGVmIHRlc3RfY2FjaGUoc2VsZik6CisgICAgICAgIGZvciBtb2NrIGlu
IFttb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoKSwgbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwg
Z2l0X3N2bj1UcnVlKV06CisgICAgICAgICAgICB3aXRoIG1vY2ssIE91dHB1dENhcHR1cmUoKToK
KyAgICAgICAgICAgICAgICByZXBvID0gbG9jYWwuR2l0KHNlbGYucGF0aCkKKworICAgICAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwby5jYWNoZS5pZGVudGlmaWVyX3RvX2hhc2goJzFA
bWFpbicpLCAnOWI4MzExZjI1YTc3YmExNDkyM2Q5ZDVhNjUzMjEwM2Y1NGFiZWZjYicpCisgICAg
ICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXBvLmNhY2hlLmhhc2hfdG9faWRlbnRpZmll
cignZDhiY2UyNmZhNjVjJyksICc1QG1haW4nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwocmVwby5jYWNoZS5pZGVudGlmaWVyX3RvX2hhc2goJzIuM0BicmFuY2gtYicpLCAnNzkw
NzI1YTZkNzllMjhkYjJlY2RkZTI5NTQ4ZDIyNjJjMGJkMDU5ZCcpCisgICAgICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChyZXBvLmNhY2hlLmlkZW50aWZpZXJfdG9faGFzaCgnMi4xQGJyYW5j
aC1hJyksICdhMzBjZTg0OTRiZjFhYzI4MDdhNjk4NDRmNzI2YmU0YTk4NDNjYTU1JykKKyAgICAg
ICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcG8uY2FjaGUuaGFzaF90b19pZGVudGlmaWVy
KCdhMzBjZTg0OTRiZjEnKSwgJzIuMUBicmFuY2gtYScpCisKKyAgICAgICAgICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHJlcG8uY2FjaGUuaGFzaF90b19pZGVudGlmaWVyKCdiYWRjMGRkMWYnKSwg
Tm9uZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcG8uY2FjaGUuaWRlbnRp
Zmllcl90b19oYXNoKCc2QG1haW4nKSwgTm9uZSkKKworCisgICAgZGVmIHRlc3RfcmV2aXNpb25f
Y2FjaGUoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwgZ2l0
X3N2bj1UcnVlKSwgT3V0cHV0Q2FwdHVyZSgpOgorICAgICAgICAgICAgcmVwbyA9IGxvY2FsLkdp
dChzZWxmLnBhdGgpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwby5jYWNoZS5p
ZGVudGlmaWVyX3RvX3JldmlzaW9uKCcxQG1haW4nKSwgJ3IxJykKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwocmVwby5jYWNoZS5yZXZpc2lvbl90b19pZGVudGlmaWVyKCdyOScpLCAnNUBt
YWluJykKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXBvLmNhY2hlLnJldmlzaW9u
X3RvX2hhc2goJ3I4JyksICdiYWU1ZDFlOTA5OTlkNGY5MTZhOGExNTgxMGNjZmE0M2YzN2EyZmQ2
JykKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXBvLmNhY2hlLnJldmlzaW9uX3Rv
X2lkZW50aWZpZXIoJ3IxMDAnKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
cmVwby5jYWNoZS5oYXNoX3RvX3JldmlzaW9uKCdiYWRjMGRkMWYnKSwgTm9uZSkKKworICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXBvLmNhY2hlLmlkZW50aWZpZXJfdG9fcmV2aXNpb24o
JzZAbWFpbicpLCBOb25lKQorCiAKIGNsYXNzIFRlc3RHaXRIdWIodW5pdHRlc3QuVGVzdENhc2Up
OgogICAgIHJlbW90ZSA9ICdodHRwczovL2dpdGh1Yi5leGFtcGxlLmNvbS9XZWJLaXQvV2ViS2l0
JwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2Nt
L3N2bi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zdm4u
cHkKaW5kZXggZTM5ZDNkZjVkZjk0Li4zMWU0MTEzM2QxOTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zdm4ucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weQpAQCAtOTksMTcgKzk5LDE1
IEBAIGNsYXNzIFNWTihTQ00sIFNWTlJlcG9zaXRvcnkpOgogCiAgICAgQGNsYXNzbWV0aG9kCiAg
ICAgZGVmIGluX3dvcmtpbmdfZGlyZWN0b3J5KGNscywgcGF0aCwgZXhlY3V0aXZlPU5vbmUpOgot
ICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihwYXRoLCAnLnN2bicpKToKLSAg
ICAgICAgICAgICMgVGhpcyBpcyBhIGZhc3Qgc2hvcnRjdXQgZm9yIHN2biBpbmZvIHRoYXQgaXMg
dXN1YWxseSBjb3JyZWN0IGZvciBTVk4gPCAxLjcsCi0gICAgICAgICAgICAjIGJ1dCBkb2Vzbid0
IHdvcmsgZm9yIFNWTiA+PSAxLjcuCi0gICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBp
ZiBub3Qgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4ocGF0aCwgJy5zdm4nKSk6CisgICAgICAg
ICAgICByZXR1cm4gRmFsc2UKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBleGVjdXRpdmUg
PSBleGVjdXRpdmUgb3IgRXhlY3V0aXZlKCkKICAgICAgICAgICAgIHN2bl9pbmZvX2FyZ3MgPSBb
Y2xzLmV4ZWN1dGFibGVfbmFtZSwgJ2luZm8nXQogICAgICAgICAgICAgZXhpdF9jb2RlID0gZXhl
Y3V0aXZlLnJ1bl9jb21tYW5kKHN2bl9pbmZvX2FyZ3MsIGN3ZD1wYXRoLCByZXR1cm5fZXhpdF9j
b2RlPVRydWUpCiAgICAgICAgICAgICByZXR1cm4gKGV4aXRfY29kZSA9PSAwKQotICAgICAgICBl
eGNlcHQgT1NFcnJvcjoKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBTY3JpcHRFcnJvcik6CiAg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgIGRlZiBmaW5kX3V1aWQoc2VsZiwgcGF0aCk6
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>