<?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>222540</bug_id>
          
          <creation_ts>2021-03-01 03:41:32 -0800</creation_ts>
          <short_desc>[Tools] Make run-buildbot-test compatible with buildbot 2.10.5</short_desc>
          <delta_ts>2021-05-01 06:36:42 -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=225268</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Alberto Lopez Perez">clopez</reporter>
          <assigned_to name="Carlos Alberto Lopez Perez">clopez</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>angelos</cc>
    
    <cc>ap</cc>
    
    <cc>dean_johnson</cc>
    
    <cc>jbedard</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1734366</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2021-03-01 03:41:32 -0800</bug_when>
    <thetext>The tool run-buildbot-test stopped working since the upgrade of buildbot to  2.10.1 at https://build.webkit.org</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1737023</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-08 03:42:13 -0800</bug_when>
    <thetext>&lt;rdar://problem/75164639&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1748574</commentid>
    <comment_count>2</comment_count>
      <attachid>425570</attachid>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2021-04-08 19:17:04 -0700</bug_when>
    <thetext>Created attachment 425570
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750133</commentid>
    <comment_count>3</comment_count>
      <attachid>425570</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2021-04-14 08:50:13 -0700</bug_when>
    <thetext>Comment on attachment 425570
Patch

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

&gt; Tools/CISupport/ews-build/loadConfig.py:103
&gt; +    c[&apos;schedulers&apos;].append(forceScheduler)

This shouldn&apos;t be enabled in production EWS (atleast for now). Should be under &quot;if is_test_mode_enabled:&quot;

&gt; Tools/CISupport/ews-build/steps.py:319
&gt; +            shell.ShellCommand.start(self)

Is this part tested (locally)?

&gt; Tools/CISupport/start-buildbot-server-virtualenv.py:166
&gt; +                for worker in self._get_list_workers():

Instead of creating ~100 workers on local machine, it&apos;s better to use create just one worker named &apos;local-worker&apos;. We already have support for &apos;local-worker&apos; in EWS configuration and I am adding the support in build.webkit.org in https://bugs.webkit.org/show_bug.cgi?id=224551. local-worker attaches to all the builders. It is enabled automatically in test mode (when the BUILDBOT_PRODUCTION env variable is not explicitly set). See https://github.com/WebKit/WebKit/blob/main/Tools/CISupport/ews-build/loadConfig.py#L56

&gt; Tools/CISupport/start-buildbot-server-virtualenv.py:167
&gt; +                    worker_runner = multiprocessing.Process(target=self._start_worker, args=(worker,))

Don&apos;t need multiprocessing, since one worker is enough.

&gt; Tools/CISupport/start-buildbot-server-virtualenv.py:319
&gt; +    def _get_list_workers(self):

This can be deleted. Just one worker named &apos;local-worker&apos; is sufficient.

&gt; Tools/CISupport/start-buildbot-server-virtualenv.py:328
&gt; +    def _start_worker(self, worker):

Don&apos;t need multiprocessiung here. Just one worker is enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750144</commentid>
    <comment_count>4</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2021-04-14 09:01:21 -0700</bug_when>
    <thetext>By the way, overall this is great. Thanks Carlos for taking care of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750148</commentid>
    <comment_count>5</comment_count>
      <attachid>425570</attachid>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2021-04-14 09:08:12 -0700</bug_when>
    <thetext>Comment on attachment 425570
Patch

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

&gt;&gt; Tools/CISupport/ews-build/loadConfig.py:103
&gt;&gt; +    c[&apos;schedulers&apos;].append(forceScheduler)
&gt; 
&gt; This shouldn&apos;t be enabled in production EWS (atleast for now). Should be under &quot;if is_test_mode_enabled:&quot;

mmm, right

&gt;&gt; Tools/CISupport/ews-build/steps.py:319
&gt;&gt; +            shell.ShellCommand.start(self)
&gt; 
&gt; Is this part tested (locally)?

Yes. I assume wget is a command available on any developer machine.

&gt;&gt; Tools/CISupport/start-buildbot-server-virtualenv.py:166
&gt;&gt; +                for worker in self._get_list_workers():
&gt; 
&gt; Instead of creating ~100 workers on local machine, it&apos;s better to use create just one worker named &apos;local-worker&apos;. We already have support for &apos;local-worker&apos; in EWS configuration and I am adding the support in build.webkit.org in https://bugs.webkit.org/show_bug.cgi?id=224551. local-worker attaches to all the builders. It is enabled automatically in test mode (when the BUILDBOT_PRODUCTION env variable is not explicitly set). See https://github.com/WebKit/WebKit/blob/main/Tools/CISupport/ews-build/loadConfig.py#L56

Interesting stuff. Will try to use it, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750166</commentid>
    <comment_count>6</comment_count>
      <attachid>425570</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2021-04-14 09:41:33 -0700</bug_when>
    <thetext>Comment on attachment 425570
Patch

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

&gt; Tools/ChangeLog:8
&gt; +        This renames the previous tool run-buildbot-test to start-buildbot-server-virtualenv

Don&apos;t need virtualenv in the file name. 
You can also consider naming it: start-local-buildmaster/start-local-buildbot

&gt; Tools/CISupport/ews-build/loadConfig.py:101
&gt; +                    StringParameter(name=&quot;ews_revision&quot;, label=&quot;WebKit git sha1 hash to checkout before trying patch&quot;, required=True, maxsize=40)],

I believe it can be optional, and ews will just use ToT.

&gt; Tools/CISupport/start-buildbot-server-virtualenv.py:205
&gt; +                        print(f.read())

Can consider printing last few lines instead of complete file here.

&gt; Tools/CISupport/start-buildbot-server-virtualenv.py:287
&gt; +            print(&apos;Starting the twistd process ...&apos;)

Would be better to say buildbot instead of twistd here, to keep it easy to understand for users.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750174</commentid>
    <comment_count>7</comment_count>
      <attachid>425570</attachid>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2021-04-14 09:59:36 -0700</bug_when>
    <thetext>Comment on attachment 425570
Patch

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

&gt;&gt; Tools/CISupport/ews-build/loadConfig.py:101
&gt;&gt; +                    StringParameter(name=&quot;ews_revision&quot;, label=&quot;WebKit git sha1 hash to checkout before trying patch&quot;, required=True, maxsize=40)],
&gt; 
&gt; I believe it can be optional, and ews will just use ToT.

Ok, will try with that.

&gt;&gt; Tools/CISupport/start-buildbot-server-virtualenv.py:205
&gt;&gt; +                        print(f.read())
&gt; 
&gt; Can consider printing last few lines instead of complete file here.

This is only printed when it fails to start, so the log will be small in any case (it couldn&apos;t even start the server process).
Also when this happens many times there are useful backtraces on the lines above the failure... so in that case seeing the whole log is useful.
Initially I was not printing anything but I got tired of re-running the command with the --no-clean option to cat manually the server.log file (the log file is by default automatically deleted when this program ends).

&gt;&gt; Tools/CISupport/start-buildbot-server-virtualenv.py:287
&gt;&gt; +            print(&apos;Starting the twistd process ...&apos;)
&gt; 
&gt; Would be better to say buildbot instead of twistd here, to keep it easy to understand for users.

Indeed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750338</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2021-04-14 14:32:05 -0700</bug_when>
    <thetext>(In reply to Carlos Alberto Lopez Perez from comment #5)
&gt; Comment on attachment 425570 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=425570&amp;action=review
&gt; 
&gt; &gt;&gt; Tools/CISupport/ews-build/loadConfig.py:103
&gt; &gt;&gt; +    c[&apos;schedulers&apos;].append(forceScheduler)
&gt; &gt; 
&gt; &gt; This shouldn&apos;t be enabled in production EWS (atleast for now). Should be under &quot;if is_test_mode_enabled:&quot;
&gt; 
&gt; mmm, right
&gt; 
&gt; &gt;&gt; Tools/CISupport/ews-build/steps.py:319
&gt; &gt;&gt; +            shell.ShellCommand.start(self)
&gt; &gt; 
&gt; &gt; Is this part tested (locally)?
&gt; 
&gt; Yes. I assume wget is a command available on any developer machine.
&gt; 

mmm.. maybe I should use curl instead

It seems wget is not available on Mac by default but curl is, isn&apos;t it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750602</commentid>
    <comment_count>9</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2021-04-15 07:08:06 -0700</bug_when>
    <thetext>(In reply to Carlos Alberto Lopez Perez from comment #8)
&gt; It seems wget is not available on Mac by default but curl is
That&apos;s right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755607</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2021-04-29 18:22:59 -0700</bug_when>
    <thetext>(In reply to Aakash Jain from comment #3)
&gt; 
&gt; Instead of creating ~100 workers on local machine, it&apos;s better to use create
&gt; just one worker named &apos;local-worker&apos;. We already have support for
&gt; &apos;local-worker&apos; in EWS configuration and I am adding the support in
&gt; build.webkit.org in https://bugs.webkit.org/show_bug.cgi?id=224551.
&gt; local-worker attaches to all the builders. It is enabled automatically in
&gt; test mode (when the BUILDBOT_PRODUCTION env variable is not explicitly set).
&gt; See
&gt; https://github.com/WebKit/WebKit/blob/main/Tools/CISupport/ews-build/
&gt; loadConfig.py#L56
&gt; 

I have experimented with this, and it works. But it doesn&apos;t behave exactly as I as expecting.

- With local-worker only one build at a time works. If I click on starting a new build (on queue B) meanwhile one build is already happening on queue A, then the request to start the job in queue B is held in a confusing state as it doesn&apos;t say it is waiting for queue A. I learned that if you cancel the on-going job on queue A then the one in queue A will start, but is far from intuitive.

- The dashboard with only local-worker shows all workers as offline except this local-worker connected that you don&apos;t see on the production deployment. See example screenshots: https://people.igalia.com/clopez/wkbug/222540
This is nitpick but to me it looks less confusing the image where I see all workers connected but the local-worker one.

However I can understand the benefit of not starting 100 workers by default, so I guess I will add a new option to the tool to start all workers instead of the local-worker. Meanwhile keeping the option to only start one local-worker as the default option, because it seems is the option that can be more useful for quick testing and uses less resources</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755608</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2021-04-29 18:25:24 -0700</bug_when>
    <thetext>(In reply to Carlos Alberto Lopez Perez from comment #10)
&gt; (In reply to Aakash Jain from comment #3)
&gt; &gt; 
&gt; &gt; Instead of creating ~100 workers on local machine, it&apos;s better to use create
&gt; &gt; just one worker named &apos;local-worker&apos;. We already have support for
&gt; &gt; &apos;local-worker&apos; in EWS configuration and I am adding the support in
&gt; &gt; build.webkit.org in https://bugs.webkit.org/show_bug.cgi?id=224551.
&gt; &gt; local-worker attaches to all the builders. It is enabled automatically in
&gt; &gt; test mode (when the BUILDBOT_PRODUCTION env variable is not explicitly set).
&gt; &gt; See
&gt; &gt; https://github.com/WebKit/WebKit/blob/main/Tools/CISupport/ews-build/
&gt; &gt; loadConfig.py#L56
&gt; &gt; 
&gt; 
&gt; I have experimented with this, and it works. But it doesn&apos;t behave exactly
&gt; as I as expecting.
&gt; 
&gt; - With local-worker only one build at a time works. If I click on starting a
&gt; new build (on queue B) meanwhile one build is already happening on queue A,
&gt; then the request to start the job in queue B is held in a confusing state as
&gt; it doesn&apos;t say it is waiting for queue A. I learned that if you cancel the
&gt; on-going job on queue A then the one in queue A will start, but is far from
&gt; intuitive.
&gt; 
^^ I wanted to mean: I learned that if you cancel the on-going job on queue A then the one in queue *B* will start, but is far from intuitive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755620</commentid>
    <comment_count>12</comment_count>
      <attachid>427397</attachid>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2021-04-29 20:35:36 -0700</bug_when>
    <thetext>Created attachment 427397
Patch

Patch v2. Address reviewer comments. Diff from previous version: http://ix.io/3lmQ/diff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755721</commentid>
    <comment_count>13</comment_count>
      <attachid>427397</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2021-04-30 09:37:15 -0700</bug_when>
    <thetext>Comment on attachment 427397
Patch

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

Looks good overall.

&gt; Tools/ChangeLog:24
&gt; +        * CISupport/start-buildbot-server-test: Added.

I don&apos;t like the word &apos;test&apos; in this filename, it makes it feel like this file contains some kind of tests (unit-test or regression test). But file name doesn&apos;t need to block this patch. We can rename it in subsequent patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755722</commentid>
    <comment_count>14</comment_count>
      <attachid>427397</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2021-04-30 09:37:59 -0700</bug_when>
    <thetext>Comment on attachment 427397
Patch

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

&gt; Tools/ChangeLog:3
&gt; +        [tools] Make run-buildbot-test compatible with buildbot 2.10.1

Nit: 2.10.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755735</commentid>
    <comment_count>15</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2021-04-30 10:03:46 -0700</bug_when>
    <thetext>(In reply to Aakash Jain from comment #13)
&gt; Comment on attachment 427397 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=427397&amp;action=review
&gt; 
&gt; Looks good overall.
&gt; 
&gt; &gt; Tools/ChangeLog:24
&gt; &gt; +        * CISupport/start-buildbot-server-test: Added.
&gt; 
&gt; I don&apos;t like the word &apos;test&apos; in this filename, it makes it feel like this
&gt; file contains some kind of tests (unit-test or regression test). But file
&gt; name doesn&apos;t need to block this patch. We can rename it in subsequent patch.

I used &apos;test&apos; because the tool launches the buildbot server for testing. Is the end purpose of this tool.. to easy testing how the buildbot server will behave after doing changes to the config.

I can rename before landing

I think just &apos;start-buildbot-server&apos; is maybe confusing in the sense that may imply this tool is for starting the builbot for production, which is not.

perhaps start-buildbot-server-staging ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755738</commentid>
    <comment_count>16</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2021-04-30 10:07:29 -0700</bug_when>
    <thetext>(In reply to Carlos Alberto Lopez Perez from comment #15)
&gt; I think just &apos;start-buildbot-server&apos; is maybe confusing in the sense that
&gt; may imply this tool is for starting the builbot for production, which is not.
That name is fine with me.
&gt; 
&gt; perhaps start-buildbot-server-staging ?
Maybe start-local-buildbot-server</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755887</commentid>
    <comment_count>17</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2021-04-30 18:12:15 -0700</bug_when>
    <thetext>(In reply to Aakash Jain from comment #16)
&gt; (In reply to Carlos Alberto Lopez Perez from comment #15)
&gt; &gt; I think just &apos;start-buildbot-server&apos; is maybe confusing in the sense that
&gt; &gt; may imply this tool is for starting the builbot for production, which is not.
&gt; That name is fine with me.
&gt; &gt; 
&gt; &gt; perhaps start-buildbot-server-staging ?
&gt; Maybe start-local-buildbot-server

That one seems ok to me. Let&apos;s go with it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755891</commentid>
    <comment_count>18</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2021-04-30 18:21:10 -0700</bug_when>
    <thetext>Committed r276868 (237214@main): &lt;https://commits.webkit.org/237214@main&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425570</attachid>
            <date>2021-04-08 19:17:04 -0700</date>
            <delta_ts>2021-04-29 20:35:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222540-20210409041702.patch</filename>
            <type>text/plain</type>
            <size>40840</size>
            <attacher name="Carlos Alberto Lopez Perez">clopez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1NjcwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMTAyOTMwMmMwZWVjNTZkODU1YzE5YTA3MWE4ZDY4ZmQw
M2Y4M2IyYS4uMWVjNzc0MGQzMjBmODlkOGFiMWRmOWFjZjVmYWVjNDlhNDJmMDA1YSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0
IEBACisyMDIxLTA0LTA4ICBDYXJsb3MgQWxiZXJ0byBMb3BleiBQZXJleiAgPGNsb3BlekBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFt0b29sc10gTWFrZSBydW4tYnVpbGRib3QtdGVzdCBjb21wYXRp
YmxlIHdpdGggYnVpbGRib3QgMi4xMC4xCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjI1NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIHJlbmFtZXMgdGhlIHByZXZpb3VzIHRvb2wgcnVuLWJ1aWxk
Ym90LXRlc3QgdG8gc3RhcnQtYnVpbGRib3Qtc2VydmVyLXZpcnR1YWxlbnYKKyAgICAgICAgYW5k
IGl0IG1ha2VzIHNldmVyYWwgY2hhbmdlcyB0byBpdDoKKyAgICAgICAgLSBVc2UgcHl0aG9uMyBh
bmQgcmVmYWN0b3IgdGhlIGNvZGUuCisgICAgICAgIC0gTWFrZSBpdCBhbHNvIHdvcmsgd2l0aCB0
aGUgRVdTIGNvbmZpZyAocHJldmlvdXNseSBpdCBvbmx5IHdvcmtlZCBmb3IgdGhlIGJ1aWxkLndl
YmtpdC5vcmcgY29uZmlnKS4KKyAgICAgICAgLSBVc2UgbmV3ZXIgYnVpbGRib3QgY29uZmlncy4K
KyAgICAgICAgLSBJbnN0ZWFkIG9mIGhhcmRjb2RpbmcgdmFsdWVzIHRyeSB0byBhdXRvbWF0aWNh
bGx5IGRldGVjdCB0aGUgdmFsdWVzIGZyb20gdGhlIGNvbmZpZyBkaXIuCisKKyAgICAgICAgSXQg
YWxzbyBtb2RpZmllcyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgRVdTIHNlcnZlciB0byBhZGQg
YSBmb3JjZSBzY2hlZHVsZXIgaW4gb3JkZXIKKyAgICAgICAgdG8gYWxsb3cgdG8gbWFudWFsbHkg
dHJpZ2dlciBidWlsZHMuCisKKyAgICAgICAgKiBDSVN1cHBvcnQvYnVpbGQtd2Via2l0LW9yZy9y
dW4tYnVpbGRib3QtdGVzdC5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBDSVN1cHBvcnQvZXdzLWJ1
aWxkL2xvYWRDb25maWcucHk6CisgICAgICAgIChsb2FkQnVpbGRlckNvbmZpZyk6CisgICAgICAg
ICogQ0lTdXBwb3J0L2V3cy1idWlsZC9zdGVwcy5weToKKyAgICAgICAgKEFwcGx5UGF0Y2guc3Rh
cnQpOgorICAgICAgICAqIENJU3VwcG9ydC9zdGFydC1idWlsZGJvdC1zZXJ2ZXItdmlydHVhbGVu
di5weTogQWRkZWQuCisgICAgICAgIChjaGVja190Y3BfcG9ydF9vcGVuKToKKyAgICAgICAgKGNy
ZWF0ZV90ZW1wZGlyKToKKyAgICAgICAgKHByaW50X2lmX2Vycm9yX3N0ZG91dF9zdGRlcnIpOgor
ICAgICAgICAoY21kX2V4aXN0cyk6CisgICAgICAgIChCdWlsZGJvdFRlc3RSdW5uZXIpOgorICAg
ICAgICAoQnVpbGRib3RUZXN0UnVubmVyLl9faW5pdF9fKToKKyAgICAgICAgKEJ1aWxkYm90VGVz
dFJ1bm5lci5fZ2V0X2NvbmZpZ190Y3BfcG9ydHMpOgorICAgICAgICAoQnVpbGRib3RUZXN0UnVu
bmVyLnN0YXJ0KToKKyAgICAgICAgKEJ1aWxkYm90VGVzdFJ1bm5lci5fd2FpdF9mb3Jfc2VydmVy
X3JlYWR5KToKKyAgICAgICAgKEJ1aWxkYm90VGVzdFJ1bm5lci5fY3JlYXRlX21vY2tfd29ya2Vy
X3Bhc3N3b3Jkc19kaWN0KToKKyAgICAgICAgKEJ1aWxkYm90VGVzdFJ1bm5lci5fc2V0dXBfc2Vy
dmVyX3dvcmtkaXIpOgorICAgICAgICAoQnVpbGRib3RUZXN0UnVubmVyLl9zZXR1cF92aXJ0dWFs
ZW52KToKKyAgICAgICAgKEJ1aWxkYm90VGVzdFJ1bm5lci5fdXBncmFkZV9kYl9uZWVkZWQpOgor
ICAgICAgICAoQnVpbGRib3RUZXN0UnVubmVyLl9zdGFydF9zZXJ2ZXIpOgorICAgICAgICAoQnVp
bGRib3RUZXN0UnVubmVyLl9nZXRfbGlzdF93b3JrZXJzKToKKyAgICAgICAgKEJ1aWxkYm90VGVz
dFJ1bm5lci5fc3RhcnRfd29ya2VyKToKKyAgICAgICAgKEJ1aWxkYm90VGVzdFJ1bm5lci5fY2xl
YW4pOgorCiAyMDIxLTA0LTA4ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBwcmVwYXJlLUNoYW5nZUxvZyBmYWlscyB0byBmaW5kIGRlbGV0ZWQgZnVuY3Rpb25zIGlu
IGZpbGVzIHdpdGggc3BhY2VzIGluIHRoZWlyIHBhdGggaW4gR2l0IHJlcG9zaXRvcmllcwpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ0lTdXBwb3J0L2J1aWxkLXdlYmtpdC1vcmcvcnVuLWJ1aWxkYm90LXRl
c3QucHkgYi9Ub29scy9DSVN1cHBvcnQvYnVpbGQtd2Via2l0LW9yZy9ydW4tYnVpbGRib3QtdGVz
dC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNGRjMjJmZDlhNDc2YjBlYjcxMTA3
ODBiMGVhYjQ1MzAzYzYwOGQzNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Ub29scy9DSVN1cHBvcnQvYnVpbGQtd2Via2l0LW9yZy9ydW4tYnVpbGRib3Qt
dGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDM0NyArMCwwIEBACi0jIS91c3IvYmluL2VudiBw
eXRob24KLSMKLSMgQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCi0jCi0jIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIwot
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jCi0jIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSMKLWltcG9ydCBzeXMK
LWltcG9ydCBzaWduYWwKLWltcG9ydCBvcwotaW1wb3J0IGFyZ3BhcnNlCi1pbXBvcnQgc3VicHJv
Y2VzcwotaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgc2h1dGlsCi1pbXBvcnQgc29ja2V0Ci1pbXBv
cnQganNvbgotaW1wb3J0IHRyYWNlYmFjawotaW1wb3J0IG11bHRpcHJvY2Vzc2luZwotZnJvbSB0
aW1lIGltcG9ydCBzbGVlcAotCi10ZXN0X2J1aWxkYm90X21hc3Rlcl90YWMgPSAiIiIKLWltcG9y
dCBvcwotZnJvbSB0d2lzdGVkLmFwcGxpY2F0aW9uIGltcG9ydCBzZXJ2aWNlCi10cnk6Ci0gICAg
ZnJvbSBidWlsZGJvdC5tYXN0ZXIuYm90IGltcG9ydCBCdWlsZE1hc3RlcgotZXhjZXB0OgotICAg
IGZyb20gYnVpbGRib3QubWFzdGVyIGltcG9ydCBCdWlsZE1hc3RlcgotCi1iYXNlZGlyID0gb3Mu
cGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQotY29uZmlnZmlsZSA9IHIn
bWFzdGVyLmNmZycKLQotYXBwbGljYXRpb24gPSBzZXJ2aWNlLkFwcGxpY2F0aW9uKCdidWlsZG1h
c3RlcicpCi1CdWlsZE1hc3RlcihiYXNlZGlyLCBjb25maWdmaWxlKS5zZXRTZXJ2aWNlUGFyZW50
KGFwcGxpY2F0aW9uKQotIiIiCi0KLXdvcmtlcl9idWlsZGJvdF9tYXN0ZXJfdGFjID0gIiIiCi1p
bXBvcnQgb3MKLWZyb20gdHdpc3RlZC5hcHBsaWNhdGlvbiBpbXBvcnQgc2VydmljZQotZnJvbSBi
dWlsZHNsYXZlLmJvdCBpbXBvcnQgQnVpbGRTbGF2ZQotCi1iYXNlZGlyID0gb3MucGF0aC5kaXJu
YW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQotYnVpbGRtYXN0ZXJfaG9zdCA9ICdsb2Nh
bGhvc3QnCi1wb3J0ID0gMTcwMDAKLXNsYXZlbmFtZSA9ICd7fScKLXBhc3N3ZCA9ICcxMjM0Jwot
a2VlcGFsaXZlID0gNjAwCi11c2VwdHkgPSAxCi0KLWFwcGxpY2F0aW9uID0gc2VydmljZS5BcHBs
aWNhdGlvbignYnVpbGRzbGF2ZScpCi1CdWlsZFNsYXZlKGJ1aWxkbWFzdGVyX2hvc3QsIHBvcnQs
IHNsYXZlbmFtZSwgcGFzc3dkLCBiYXNlZGlyLCBrZWVwYWxpdmUsIHVzZXB0eSkuc2V0U2Vydmlj
ZVBhcmVudChhcHBsaWNhdGlvbikKLSIiIgotCi0KLWRlZiBjaGVja190Y3BfcG9ydF9vcGVuKGFk
ZHJlc3MsIHBvcnQpOgotICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKLSAgICB0cnk6Ci0gICAgICAg
IHMuY29ubmVjdCgoYWRkcmVzcywgcG9ydCkpCi0gICAgICAgIHJldHVybiBUcnVlCi0gICAgZXhj
ZXB0OgotICAgICAgICByZXR1cm4gRmFsc2UKLQotCi1kZWYgdXBncmFkZV9kYl9uZWVkZWQobG9n
KToKLSAgICB0cnk6Ci0gICAgICAgIHdpdGggb3Blbihsb2cpIGFzIGY6Ci0gICAgICAgICAgICBm
b3IgbCBpbiBmOgotICAgICAgICAgICAgICAgIGlmICd1cGdyYWRlIHRoZSBkYXRhYmFzZScgaW4g
bDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICBleGNlcHQ6Ci0gICAgICAg
IHJldHVybiBGYWxzZQotICAgIHJldHVybiBGYWxzZQotCi0KLWRlZiBjcmVhdGVfdGVtcGRpcih0
bXBkaXI9Tm9uZSk6Ci0gICAgaWYgdG1wZGlyIGlzIG5vdCBOb25lOgotICAgICAgICBpZiBub3Qg
b3MucGF0aC5pc2Rpcih0bXBkaXIpOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigne30g
aXMgbm90IGEgZGlyZWN0b3J5Jy5mb3JtYXQodG1wZGlyKSkKLSAgICAgICAgcmV0dXJuIHRlbXBm
aWxlLm1rZHRlbXAocHJlZml4PW9zLnBhdGguam9pbihvcy5wYXRoLmFic3BhdGgodG1wZGlyKSwg
J3RtcCcpKQotICAgIHJldHVybiB0ZW1wZmlsZS5ta2R0ZW1wKCkKLQotCi1kZWYgcHJpbnRfaWZf
ZXJyb3Jfc3Rkb3V0X3N0ZGVycihjbWQsIHJldGNvZGUsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9u
ZSwgZXh0cmFtc2c9Tm9uZSk6Ci0gICAgaWYgcmV0Y29kZSAhPSAwOgotICAgICAgICBpZiB0eXBl
KGNtZCkgPT0gdHlwZShbXSk6Ci0gICAgICAgICAgICBjbWQgPSAnICcuam9pbihjbWQpCi0gICAg
ICAgIHByaW50KCdXQVJOSU5HOiAie2NtZH0iIHJldHVybmVkIHtyZXRjb2RlfSBzdGF0dXMgY29k
ZScuZm9ybWF0KGNtZD1jbWQsIHJldGNvZGU9cmV0Y29kZSkpCi0gICAgICAgIGlmIHN0ZG91dCBp
cyBub3QgTm9uZToKLSAgICAgICAgICAgIHByaW50KHN0ZG91dCkKLSAgICAgICAgaWYgc3RkZXJy
IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcHJpbnQoc3RkZXJyKQotICAgICAgICBpZiBleHRy
YW1zZyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHByaW50KGV4dHJhbXNnKQotCi0KLWRlZiBz
ZXR1cF9tYXN0ZXJfd29ya2Rpcihjb25maWdkaXIsIGJhc2Vfd29ya2Rpcik6Ci0gICAgbWFzdGVy
X3dvcmtkaXIgPSBvcy5wYXRoLmpvaW4oYmFzZV93b3JrZGlyLCAnbWFzdGVyJykKLSAgICBwcmlu
dCgnQ29weWluZyBmaWxlcyBmcm9tIHt9IHRvIHt9IC4uLicuZm9ybWF0KGNvbmZpZ2RpciwgbWFz
dGVyX3dvcmtkaXIpKQotICAgIHNodXRpbC5jb3B5dHJlZShjb25maWdkaXIsIG1hc3Rlcl93b3Jr
ZGlyKQotICAgIHByaW50KCdHZW5lcmF0aW5nIGJ1aWxkYm90IGZpbGVzIGF0IHt9IC4uLicuZm9y
bWF0KG1hc3Rlcl93b3JrZGlyKSkKLSAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKG1hc3Rlcl93
b3JrZGlyLCAnYnVpbGRib3QudGFjJyksICd3JykgYXMgZjoKLSAgICAgICAgZi53cml0ZSh0ZXN0
X2J1aWxkYm90X21hc3Rlcl90YWMpCi0gICAgbWtwd2RfY21kID0gWycuL21ha2VfcGFzc3dvcmRz
X2pzb24ucHknXQotICAgIG1rcHdkX3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKG1rcHdkX2Nt
ZCwgY3dkPW1hc3Rlcl93b3JrZGlyLAotICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNz
LlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKLSAgICBzdGRvdXQsIHN0ZGVyciA9IG1r
cHdkX3Byb2Nlc3MuY29tbXVuaWNhdGUoKQotICAgIHByaW50X2lmX2Vycm9yX3N0ZG91dF9zdGRl
cnIobWtwd2RfY21kLCBta3B3ZF9wcm9jZXNzLnJldHVybmNvZGUsIHN0ZG91dCwgc3RkZXJyKQot
ICAgIHJldHVybiBtYXN0ZXJfd29ya2RpcgotCi0KLWRlZiB3YWl0X2Zvcl9tYXN0ZXJfcmVhZHko
bWFzdGVyX3dvcmtkaXIpOgotICAgIG1hc3Rlcl9yZWFkeV9jaGVja19jb3VudGVyID0gMAotICAg
IHdoaWxlIFRydWU6Ci0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihtYXN0
ZXJfd29ya2RpciwgJy5tYXN0ZXItaXMtcmVhZHknKSk6Ci0gICAgICAgICAgICByZXR1cm4KLSAg
ICAgICAgaWYgbWFzdGVyX3JlYWR5X2NoZWNrX2NvdW50ZXIgPiA2MDoKLSAgICAgICAgICAgIHJh
aXNlIFJ1bnRpbWVFcnJvcignRVJST1I6IEFib3J0aW5nIGFmdGVyIHdhaXRpbmcgNjAgc2Vjb25k
cyBmb3IgdGhlIG1hc3RlciB0byBzdGFydC4nKQotICAgICAgICBzbGVlcCgxKQotICAgICAgICBt
YXN0ZXJfcmVhZHlfY2hlY2tfY291bnRlciArPSAxCi0KLQotZGVmIHN0YXJ0X21hc3RlcihtYXN0
ZXJfd29ya2Rpcik6Ci0gICAgIyBUaGlzIGlzIHN0YXJ0ZWQgdmlhIG11bHRpcHJvY2Vzc2luZy4g
V2Ugc2V0IGEgbmV3IHByb2Nlc3MgZ3JvdXAgaGVyZQotICAgICMgdG8gYmUgYWJsZSB0byByZWxp
YWJseSBraWxsIHRoaXMgc3VicHJvY2VzcyBhbmQgYWxsIG9mIGl0cyBjaGlsZCBvbiBjbGVhbi4K
LSAgICBvcy5zZXRzaWQoKQotICAgIGJ1aWxkbWFzdGVybG9nID0gb3MucGF0aC5qb2luKG1hc3Rl
cl93b3JrZGlyLCAnYnVpbGRtYXN0ZXIubG9nJykKLSAgICBkYnVwZ3JhZGVkID0gRmFsc2UKLSAg
ICByZXRyeSA9IFRydWUKLSAgICBpZiBjaGVja190Y3BfcG9ydF9vcGVuKCdsb2NhbGhvc3QnLCA4
NzEwKToKLSAgICAgICAgcHJpbnQoJ0VSUk9SOiBUaGVyZSBpcyBzb21lIHByb2Nlc3MgYWxyZWFk
eSBsaXN0ZW5pbmcgaW4gcG9ydCA4MTcwJykKLSAgICAgICAgcmV0dXJuIDEKLSAgICB3aGlsZSBy
ZXRyeToKLSAgICAgICAgcmV0cnkgPSBGYWxzZQotICAgICAgICBwcmludCgnU3RhcnRpbmcgdGhl
IHR3aXN0ZCBwcm9jZXNzIC4uLicpCi0gICAgICAgIHR3aXN0ZF9jbWQgPSBbJ3R3aXN0ZCcsICct
bCcsIGJ1aWxkbWFzdGVybG9nLCAnLW5veScsICdidWlsZGJvdC50YWMnXQotICAgICAgICB0d2lz
dGRfcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4odHdpc3RkX2NtZCwgY3dkPW1hc3Rlcl93b3Jr
ZGlyLAotICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9
c3VicHJvY2Vzcy5TVERPVVQpCi0gICAgICAgIHdoaWxlIHR3aXN0ZF9wcm9jZXNzLnBvbGwoKSBp
cyBOb25lOgotICAgICAgICAgICAgaWYgY2hlY2tfdGNwX3BvcnRfb3BlbignbG9jYWxob3N0Jywg
ODcxMCk6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJ1Rlc3QgYnVpbGRtYXN0ZXIgcmVhZHkhLlxu
XG4nCi0gICAgICAgICAgICAgICAgICAgICAgKyAnIC0gU2VlIGJ1aWxkbWFzdGVyIGxvZzpcbicK
LSAgICAgICAgICAgICAgICAgICAgICArICcgICAgIHRhaWwgLWYge31cbicuZm9ybWF0KGJ1aWxk
bWFzdGVybG9nKQotICAgICAgICAgICAgICAgICAgICAgICsgJyAtIE9wZW4gYSBicm93c2VyIHRv
OlxuJwotICAgICAgICAgICAgICAgICAgICAgICsgJyAgICAgaHR0cDovL2xvY2FsaG9zdDo4NzEw
XG4nCi0gICAgICAgICAgICAgICAgICAgICAgKyAnIC0gQ3JlZGVudGlhbHMgZm9yIHRyaWdnZXJp
bmcgbWFudWFsIGJ1aWxkczpcbicKLSAgICAgICAgICAgICAgICAgICAgICArICcgICAgIGxvZ2lu
OiAgICAgY29tbWl0dGVyQHdlYmtpdC5vcmdcbicKLSAgICAgICAgICAgICAgICAgICAgICArICcg
ICAgIHBhc3N3b3JkOiAgY29tbWl0dGVycGFzc3dvcmRcbicpCi0gICAgICAgICAgICAgICAgd2l0
aCBvcGVuKG9zLnBhdGguam9pbihtYXN0ZXJfd29ya2RpciwgJy5tYXN0ZXItaXMtcmVhZHknKSwg
J3cnKSBhcyBmOgotICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCdyZWFkeScpCi0gICAgICAg
ICAgICAgICAgdHdpc3RkX3Byb2Nlc3Mud2FpdCgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDAK
LSAgICAgICAgICAgIHNsZWVwKDEpCi0gICAgICAgIHN0ZG91dCwgc3RkZXJyID0gdHdpc3RkX3By
b2Nlc3MuY29tbXVuaWNhdGUoKQotICAgICAgICBpZiB0d2lzdGRfcHJvY2Vzcy5yZXR1cm5jb2Rl
ID09IDAgYW5kIHVwZ3JhZGVfZGJfbmVlZGVkKGJ1aWxkbWFzdGVybG9nKSBhbmQgbm90IGRidXBn
cmFkZWQ6Ci0gICAgICAgICAgICByZXRyeSA9IFRydWUKLSAgICAgICAgICAgIGRidXBncmFkZWQg
PSBUcnVlCi0gICAgICAgICAgICBwcmludCgnVXBncmFkaW5nIHRoZSBkYXRhYmFzZSAuLi4nKQot
ICAgICAgICAgICAgdXBncmFkZV9jbWQgPSBbJ2J1aWxkYm90JywgJ3VwZ3JhZGUtbWFzdGVyJywg
bWFzdGVyX3dvcmtkaXJdCi0gICAgICAgICAgICB1cGdyYWRlX3Byb2Nlc3MgPSBzdWJwcm9jZXNz
LlBvcGVuKHVwZ3JhZGVfY21kLCBjd2Q9bWFzdGVyX3dvcmtkaXIsCi0gICAgICAgICAgICAgICAg
ICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKLSAg
ICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gdXBncmFkZV9wcm9jZXNzLmNvbW11bmljYXRlKCkK
LSAgICAgICAgICAgIHByaW50X2lmX2Vycm9yX3N0ZG91dF9zdGRlcnIodXBncmFkZV9jbWQsIHVw
Z3JhZGVfcHJvY2Vzcy5yZXR1cm5jb2RlLCBzdGRvdXQsIHN0ZGVycikKLSAgICAgICAgZWxzZToK
LSAgICAgICAgICAgIHByaW50X2lmX2Vycm9yX3N0ZG91dF9zdGRlcnIodHdpc3RkX2NtZCwgdHdp
c3RkX3Byb2Nlc3MucmV0dXJuY29kZSwgc3Rkb3V0LCBzdGRlcnIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdDaGVjayB0aGUgbG9nIGF0IHt9Jy5mb3JtYXQoYnVp
bGRtYXN0ZXJsb2cpKQotICAgIHJldHVybiAwCi0KLQotZGVmIGdldF9saXN0X3dvcmtlcnMobWFz
dGVyX3dvcmtkaXIpOgotICAgIHBhc3N3b3JkX2xpc3QgPSBvcy5wYXRoLmpvaW4obWFzdGVyX3dv
cmtkaXIsICdwYXNzd29yZHMuanNvbicpCi0gICAgd2l0aCBvcGVuKHBhc3N3b3JkX2xpc3QpIGFz
IGY6Ci0gICAgICAgIHBhc3N3b3JkcyA9IGpzb24ubG9hZChmKQotICAgIGxpc3Rfd29ya2VycyA9
IFtdCi0gICAgZm9yIHdvcmtlciBpbiBwYXNzd29yZHM6Ci0gICAgICAgIGxpc3Rfd29ya2Vycy5h
cHBlbmQoc3RyKHdvcmtlcikpCi0gICAgcmV0dXJuIGxpc3Rfd29ya2VycwotCi0KLWRlZiBzdGFy
dF93b3JrZXIoYmFzZV93b3JrZGlyLCB3b3JrZXIpOgotICAgICMgVGhpcyBpcyBzdGFydGVkIHZp
YSBtdWx0aXByb2Nlc3NpbmcuIFdlIHNldCBhIG5ldyBwcm9jZXNzIGdyb3VwIGhlcmUKLSAgICAj
IHRvIGJlIGFibGUgdG8gcmVsaWFibHkga2lsbCB0aGlzIHN1YnByb2Nlc3MgYW5kIGFsbCBvZiBp
dHMgY2hpbGQgb24gY2xlYW4uCi0gICAgb3Muc2V0c2lkKCkKLSAgICB3b3JrZXJfd29ya2RpciA9
IG9zLnBhdGguam9pbihiYXNlX3dvcmtkaXIsIHdvcmtlcikKLSAgICBvcy5ta2Rpcih3b3JrZXJf
d29ya2RpcikKLSAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHdvcmtlcl93b3JrZGlyLCAnYnVp
bGRib3QudGFjJyksICd3JykgYXMgZjoKLSAgICAgICAgZi53cml0ZSh3b3JrZXJfYnVpbGRib3Rf
bWFzdGVyX3RhYy5mb3JtYXQod29ya2VyKSkKLSAgICB0d2lzdGRfY21kID0gWyd0d2lzdGQnLCAn
LWwnLCAnd29ya2VyLmxvZycsICctbm95JywgJ2J1aWxkYm90LnRhYyddCi0gICAgdHdpc3RkX3dv
cmtlcl9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3Blbih0d2lzdGRfY21kLCBjd2Q9d29ya2VyX3dv
cmtkaXIsCi0gICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNz
LlNURE9VVCkKLSAgICB0cnk6Ci0gICAgICAgIHN0ZG91dCwgc3RkZXJyID0gdHdpc3RkX3dvcmtl
cl9wcm9jZXNzLmNvbW11bmljYXRlKCkKLSAgICBleGNlcHQ6Ci0gICAgICAgIHR3aXN0ZF93b3Jr
ZXJfcHJvY2Vzcy5raWxsKCkKLSAgICAgICAgcmV0dXJuCi0gICAgcHJpbnRfaWZfZXJyb3Jfc3Rk
b3V0X3N0ZGVycih0d2lzdGRfY21kLCB0d2lzdGRfd29ya2VyX3Byb2Nlc3MucmV0dXJuY29kZSwg
c3Rkb3V0LCBzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ2hlY2sg
dGhlIGxvZyBhdCB7fScuZm9ybWF0KG9zLnBhdGguam9pbih3b3JrZXJfd29ya2RpciwgJ3dvcmtl
ci5sb2cnKSkpCi0KLQotZGVmIGNsZWFuKHRlbXBfZGlyKToKLSAgICBpZiBvcy5wYXRoLmlzZGly
KHRlbXBfZGlyKToKLSAgICAgICAgcHJpbnQoJ1xuXG5DbGVhbmluZyB7fSAuLi4gXG4nLmZvcm1h
dCh0ZW1wX2RpcikpCi0gICAgICAgICMgc2h1dGlsLnJtdHJlZSBjYW4gZmFpbCBpZiB3ZSBob2xk
IGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIG9uIHRlbXBfZGlyCi0gICAgICAgICMgKHdoaWNoIGlz
IHZlcnkgbGlrZWx5IHdoZW4gY2xlYW5pbmcpIG9yIGlmIHRlbXBfZGlyIGlzIGEgTkZTIG1vdW50
LgotICAgICAgICAjIFVzZSBybSBpbnN0ZWFkIHRoYXQgYWx3YXlzIHdvcmtzLgotICAgICAgICBy
bSA9IHN1YnByb2Nlc3MuUG9wZW4oWydybScsICctZnInLCB0ZW1wX2Rpcl0pCi0gICAgICAgIHJt
LndhaXQoKQotCi0KLWRlZiBjbWRfZXhpc3RzKGNtZCk6Ci0gICAgcmV0dXJuIGFueShvcy5hY2Nl
c3Mob3MucGF0aC5qb2luKHBhdGgsIGNtZCksIG9zLlhfT0spCi0gICAgICAgICAgICAgICBmb3Ig
cGF0aCBpbiBvcy5lbnZpcm9uWydQQVRIJ10uc3BsaXQob3MucGF0aHNlcCkpCi0KLQotZGVmIGNo
ZWNrX2J1aWxkYm90X2luc3RhbGxlZCgpOgotICAgIGlmIGNtZF9leGlzdHMoJ3R3aXN0ZCcpIGFu
ZCBjbWRfZXhpc3RzKCdidWlsZGJvdCcpOgotICAgICAgICByZXR1cm4KLSAgICByYWlzZSBSdW50
aW1lRXJyb3IoJ0J1aWxkYm90IGlzIG5vdCBpbnN0YWxsZWQuJykKLQotCi1kZWYgc2V0dXBfdmly
dHVhbGVudihiYXNlX3dvcmtkaXJfdGVtcCk6Ci0gICAgaWYgY21kX2V4aXN0cygndmlydHVhbGVu
dicpOgotICAgICAgICBwcmludCgnU2V0dGluZyB1cCB2aXJ0dWFsZW52IGF0IHt9IC4uLiAnLmZv
cm1hdChiYXNlX3dvcmtkaXJfdGVtcCkpCi0gICAgICAgIHZpcnR1YWxlbnZfY21kID0gWyd2aXJ0
dWFsZW52JywgJy1wJywgJ3B5dGhvbjInLCAndmVudiddCi0gICAgICAgIHZpcnR1YWxlbnZfcHJv
Y2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4odmlydHVhbGVudl9jbWQsIGN3ZD1iYXNlX3dvcmtkaXJf
dGVtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKLSAgICAgICAg
c3Rkb3V0LCBzdGRlcnIgPSB2aXJ0dWFsZW52X3Byb2Nlc3MuY29tbXVuaWNhdGUoKQotICAgICAg
ICBwcmludF9pZl9lcnJvcl9zdGRvdXRfc3RkZXJyKHZpcnR1YWxlbnZfY21kLCB2aXJ0dWFsZW52
X3Byb2Nlc3MucmV0dXJuY29kZSwgc3Rkb3V0LCBzdGRlcnIpCi0gICAgICAgIHZpcnR1YWxlbnZf
YmluZGlyID0gb3MucGF0aC5qb2luKGJhc2Vfd29ya2Rpcl90ZW1wLCAndmVudicsICdiaW4nKQot
ICAgICAgICB2aXJ0dWFsZW52X3BpcCA9IG9zLnBhdGguam9pbih2aXJ0dWFsZW52X2JpbmRpciwg
J3BpcCcpCi0gICAgICAgIGlmIG5vdCBvcy5hY2Nlc3ModmlydHVhbGVudl9waXAsIG9zLlhfT0sp
OgotICAgICAgICAgICAgcHJpbnQoJ1NvbWV0aGluZyB3ZW50IHdyb25nIHNldHRpbmcgdXAgdmly
dHVhbGVudicKLSAgICAgICAgICAgICAgICAgICdUcnlpbmcgdG8gY29udGludWUgdXNpbmcgdGhl
IHN5c3RlbSB2ZXJzaW9uIG9mIGJ1aWxkYm90JykKLSAgICAgICAgICAgIHJldHVybgotICAgICAg
ICBwcmludCgnU2V0dGluZyB1cCBidWlsZGJvdCBkZXBlbmRlbmNpZXMgb24gdGhlIHZpcnR1YWxl
bnYgLi4uICcpCi0gICAgICAgICMgVGhlIGlkZWEgaXMgdG8gaW5zdGFsbCB0aGUgdmVyeSBzYW1l
IHZlcnNpb24gb2YgYnVpbGRib3QgYW5kIGl0cwotICAgICAgICAjIGRlcGVuZGVuY2llcyB0aGFu
IHRoZSBvbmVzIHVzZWQgZm9yIHJ1bm5pbmcgaHR0cHM6Ly9idWlsZC53ZWJraXQub3JnL2Fib3V0
Ci0gICAgICAgIHBpcF9jbWQgPSBbdmlydHVhbGVudl9waXAsICdpbnN0YWxsJywKLSAgICAgICAg
ICAgICAgICAgICAgJ2J1aWxkYm90PT0wLjguNnAxJywKLSAgICAgICAgICAgICAgICAgICAgJ2J1
aWxkYm90LXNsYXZlPT0wLjguNnAxJywKLSAgICAgICAgICAgICAgICAgICAgJ3R3aXN0ZWQ9PTEy
LjEuMCcsCi0gICAgICAgICAgICAgICAgICAgICdqaW5qYTI9PTIuNicsCi0gICAgICAgICAgICAg
ICAgICAgICdzcWxhbGNoZW15PT0wLjcuOCcsCi0gICAgICAgICAgICAgICAgICAgICdzcWxhbGNo
ZW15LW1pZ3JhdGU9PTAuMTIuMCddCi0gICAgICAgIHBpcF9wcm9jZXNzID0gc3VicHJvY2Vzcy5Q
b3BlbihwaXBfY21kLCBjd2Q9YmFzZV93b3JrZGlyX3RlbXAsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJv
Y2Vzcy5TVERPVVQpCi0gICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcGlwX3Byb2Nlc3MuY29tbXVu
aWNhdGUoKQotICAgICAgICBwcmludF9pZl9lcnJvcl9zdGRvdXRfc3RkZXJyKHBpcF9jbWQsIHBp
cF9wcm9jZXNzLnJldHVybmNvZGUsIHN0ZG91dCwgc3RkZXJyKQotICAgICAgICBvcy5lbnZpcm9u
WydQQVRIJ10gPSB2aXJ0dWFsZW52X2JpbmRpciArICc6JyArIG9zLmVudmlyb25bJ1BBVEgnXQot
ICAgICAgICByZXR1cm4KLSAgICBwcmludCgnV0FSTklORzogdmlydHVhbGVudiBub3QgaW5zdGFs
bGVkLiAnCi0gICAgICAgICAgJ1RyeWluZyB0byBjb250aW51ZSB1c2luZyB0aGUgc3lzdGVtIHZl
cnNpb24gb2YgYnVpbGRib3QnKQotCi0KLWRlZiBjb25maWdkaXJfaXNfdmFsaWQoY29uZmlnZGly
KToKLSAgICByZXR1cm4ob3MucGF0aC5pc2Rpcihjb25maWdkaXIpIGFuZAotICAgICAgICAgICBv
cy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oY29uZmlnZGlyLCAnY29uZmlnLmpzb24nKSkgYW5k
Ci0gICAgICAgICAgIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihjb25maWdkaXIsICdtYXN0
ZXIuY2ZnJykpIGFuZAotICAgICAgICAgICBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKGNvbmZpZ2Rp
ciwgJ21ha2VfcGFzc3dvcmRzX2pzb24ucHknKSwgb3MuWF9PSykpCi0KLQotZGVmIG1haW4oY29u
ZmlnZGlyLCBiYXNldGVtcGRpcj1Ob25lLCBub19jbGVhbj1GYWxzZSwgbm9fd29ya2Vycz1GYWxz
ZSwgdXNlX3N5c3RlbV92ZXJzaW9uPUZhbHNlKToKLSAgICBjb25maWdkaXIgPSBvcy5wYXRoLmFi
c3BhdGgob3MucGF0aC5yZWFscGF0aChjb25maWdkaXIpKQotICAgIGlmIG5vdCBjb25maWdkaXJf
aXNfdmFsaWQoY29uZmlnZGlyKToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVGhlIGNvbmZp
Z2RpciB7fSBkb250IGNvbnRhaW5zIHRoZSBidWlsZG1hc3RlciBmaWxlcyBleHBlY3RlZCBieSB0
aGlzIHNjcmlwdCcuZm9ybWF0KGNvbmZpZ2RpcikpCi0gICAgYmFzZV93b3JrZGlyX3RlbXAgPSBv
cy5wYXRoLmFic3BhdGgob3MucGF0aC5yZWFscGF0aChjcmVhdGVfdGVtcGRpcihiYXNldGVtcGRp
cikpKQotICAgIGlmIGJhc2Vfd29ya2Rpcl90ZW1wLnN0YXJ0c3dpdGgoY29uZmlnZGlyKToKLSAg
ICAgICAgcmFpc2UgVmFsdWVFcnJvcignVGhlIHRlbXBvcmFsIHdvcmtpbmcgZGlyZWN0b3J5IHt9
IGNhbnQgYmUgbG9jYXRlZCBpbnNpZGUgY29uZmlnZGlyIHt9Jy5mb3JtYXQoYmFzZV93b3JrZGly
X3RlbXAsIGNvbmZpZ2RpcikpCi0gICAgdHJ5OgotICAgICAgICBpZiBub3QgdXNlX3N5c3RlbV92
ZXJzaW9uOgotICAgICAgICAgICAgc2V0dXBfdmlydHVhbGVudihiYXNlX3dvcmtkaXJfdGVtcCkK
LSAgICAgICAgY2hlY2tfYnVpbGRib3RfaW5zdGFsbGVkKCkKLSAgICAgICAgbWFzdGVyX3dvcmtk
aXIgPSBzZXR1cF9tYXN0ZXJfd29ya2Rpcihjb25maWdkaXIsIGJhc2Vfd29ya2Rpcl90ZW1wKQot
ICAgICAgICBtYXN0ZXJfcnVubmVyID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXN0
YXJ0X21hc3RlciwgYXJncz0obWFzdGVyX3dvcmtkaXIsKSkKLSAgICAgICAgbWFzdGVyX3J1bm5l
ci5zdGFydCgpCi0gICAgICAgIHdhaXRfZm9yX21hc3Rlcl9yZWFkeShtYXN0ZXJfd29ya2RpcikK
LSAgICAgICAgaWYgbm9fd29ya2VyczoKLSAgICAgICAgICAgIHByaW50KCcgLSBUbyBtYW51YWxs
eSBhdHRhY2ggYSBidWlsZCB3b3JrZXIgdXNlIHRoaXMgaW5mbzpcbicKLSAgICAgICAgICAgICAg
ICAgICsgJyAgICAgVENQIHBvcnQgZm9yIHRoZSB3b3JrZXItdG8tbWFzdGVyIGNvbm5lY3Rpb246
IDE3MDAwXG4nCi0gICAgICAgICAgICAgICAgICArICcgICAgIHdvcmtlci1pZDogdGhlIG9uZSBk
ZWZpbmVkIGF0IHt9XG4nLmZvcm1hdChvcy5wYXRoLmpvaW4obWFzdGVyX3dvcmtkaXIsICdwYXNz
d29yZHMuanNvbicpKQotICAgICAgICAgICAgICAgICAgKyAnICAgICBwYXNzd29yZDogIDEyMzRc
bicpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB3b3JrZXJfcnVubmVycyA9IFtdCi0gICAg
ICAgICAgICBmb3Igd29ya2VyIGluIGdldF9saXN0X3dvcmtlcnMobWFzdGVyX3dvcmtkaXIpOgot
ICAgICAgICAgICAgICAgIHdvcmtlcl9ydW5uZXIgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0
YXJnZXQ9c3RhcnRfd29ya2VyLCBhcmdzPShiYXNlX3dvcmtkaXJfdGVtcCwgd29ya2VyLCkpCi0g
ICAgICAgICAgICAgICAgd29ya2VyX3J1bm5lci5zdGFydCgpCi0gICAgICAgICAgICAgICAgd29y
a2VyX3J1bm5lcnMuYXBwZW5kKHdvcmtlcl9ydW5uZXIpCi0gICAgICAgICAgICBwcmludCgnIC0g
V29ya2VycyBzdGFydGVkIS5cbicKLSAgICAgICAgICAgICAgICAgICsgJyAgICAgQ2hlY2sgdGhl
IGxvZyBmb3IgZWFjaCBvbmUgYXQge30vJHt3b3JrZXItbmFtZS1pZH0vd29ya2VyLmxvZ1xuJy5m
b3JtYXQoYmFzZV93b3JrZGlyX3RlbXApCi0gICAgICAgICAgICAgICAgICArICcgICAgIHRhaWwg
LWYge30vKi93b3JrZXIubG9nXG4nLmZvcm1hdChiYXNlX3dvcmtkaXJfdGVtcCkpCi0gICAgICAg
ICAgICBmb3Igd29ya2VyX3J1bm5lciBpbiB3b3JrZXJfcnVubmVyczoKLSAgICAgICAgICAgICAg
ICB3b3JrZXJfcnVubmVyLmpvaW4oKQotICAgICAgICBtYXN0ZXJfcnVubmVyLmpvaW4oKQotICAg
IGV4Y2VwdDoKLSAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCi0gICAgZmluYWxseToKLSAg
ICAgICAgdHJ5OgotICAgICAgICAgICAgIyBUaGUgY2hpbGRyZW4gbWF5IGV4aXQgYmV0d2VlbiB0
aGUgY2hlY2sgYW5kIHRoZSBraWxsIGNhbGwuCi0gICAgICAgICAgICAjIElnbm9yZSBhbnkgZXhj
ZXB0aW9uIHJhaXNlZCBoZXJlLgotICAgICAgICAgICAgZm9yIGMgaW4gbXVsdGlwcm9jZXNzaW5n
LmFjdGl2ZV9jaGlsZHJlbigpOgotICAgICAgICAgICAgICAgICMgU2VuZCB0aGUgc2lnbmFsIHRv
IHRoZSB3aG9sZSBwcm9jZXNzIGdyb3VwLgotICAgICAgICAgICAgICAgICMgT3RoZXJ3aXNlIHNv
bWUgdHdpc3RkIHN1Yi1jaGlsZHMgY2FuIHJlbWFpbiBhbGl2ZS4KLSAgICAgICAgICAgICAgICBv
cy5raWxscGcob3MuZ2V0cGdpZChjLnBpZCksIHNpZ25hbC5TSUdLSUxMKQotICAgICAgICBleGNl
cHQ6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGlmIG5vdCBub19jbGVhbjoKLSAgICAgICAg
ICAgIGNsZWFuKGJhc2Vfd29ya2Rpcl90ZW1wKQotICAgICAgICBzeXMuZXhpdCgwKQotCi0KLWlm
IF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQ
YXJzZXIoKQotICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tY29uZmlnLWRpcicsIGhlbHA9J1Bh
dGggdG8gdGhlIGRpcmVjdG9yeSBvZiB0aGUgYnVpbGQgbWFzdGVyIGNvbmZpZyBmaWxlcy4gJwot
ICAgICAgICAgICAgICAgICAgICAgICAgJ0RlZmF1bHMgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB0
aGlzIHNjcmlwdCBpcyBsb2NhdGVkLicsCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdj
b25maWdkaXInLCB0eXBlPXN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9b3Mu
cGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJhc2Ut
dGVtcC1kaXInLCBoZWxwPSdQYXRoIHdoZXJlIHRoZSB0ZW1wb3JhbCB3b3JraW5nIGRpcmVjdG9y
eSB3aWxsIGJlIGNyZWF0ZWQuICcKLSAgICAgICAgICAgICAgICAgICAgICAgICdOb3RlOiBUbyB0
cmlnZ2VyIHRlc3QgYnVpbGRzIHdpdGggdGhlIHRlc3Qgd29ya2VycyB5b3UgbmVlZCBlbm91Z2gg
ZnJlZSBzcGFjZSBvbiB0aGF0IHBhdGguJywKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9
J2Jhc2V0ZW1wZGlyJywgZGVmYXVsdD1Ob25lLCB0eXBlPXN0cikKLSAgICBwYXJzZXIuYWRkX2Fy
Z3VtZW50KCctLW5vLWNsZWFuJywgaGVscD0nRG8gbm90IGNsZWFuIHRoZSB0ZW1wb3JhbCB3b3Jr
aW5nIGRpciBvbiBleGl0LicsCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdub19jbGVh
bicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCi0gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1uby13
b3JrZXJzJywgaGVscD0nRG8gbm90IHN0YXJ0IHRoZSB0ZXN0IHdvcmtlcnMuJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3Q9J25vX3dvcmtlcnMnLCBhY3Rpb249J3N0b3JlX3RydWUnKQot
ICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tdXNlLXN5c3RlbS12ZXJzaW9uJywgaGVscD0nSW5z
dGVhZCBvZiBzZXR0aW5nIHVwIGEgdmlydHVhbGVudiB3aXRoIHRoZSBidWlsZGJvdCB2ZXJzaW9u
ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICd1c2VkIGJ5IGJ1aWxkLndlYmtpdC5vcmcsIHVz
ZSB0aGUgYnVpbGRib3QgdmVyc2lvbiBpbnN0YWxsZWQgb24gdGhpcyBzeXN0ZW0uJywKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3Q9J3VzZV9zeXN0ZW1fdmVyc2lvbicsIGFjdGlvbj0nc3Rv
cmVfdHJ1ZScpCi0gICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLSAgICBtYWluKGFyZ3Mu
Y29uZmlnZGlyLCBhcmdzLmJhc2V0ZW1wZGlyLCBhcmdzLm5vX2NsZWFuLCBhcmdzLm5vX3dvcmtl
cnMsIGFyZ3MudXNlX3N5c3RlbV92ZXJzaW9uKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ0lTdXBwb3J0
L2V3cy1idWlsZC9sb2FkQ29uZmlnLnB5IGIvVG9vbHMvQ0lTdXBwb3J0L2V3cy1idWlsZC9sb2Fk
Q29uZmlnLnB5CmluZGV4IDhjMmUzNGMwYzZmNjk3YjY2YmIxOTNjZTU1MWE1NTMyMTczNmI3MjEu
LjhmMWJhZWIxNTU1NmQxMTQ0ZWM3ZWFiY2NiMzBiNTQ4MTFlNTMwMDAgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NJU3VwcG9ydC9ld3MtYnVpbGQvbG9hZENvbmZpZy5weQorKysgYi9Ub29scy9DSVN1cHBv
cnQvZXdzLWJ1aWxkL2xvYWRDb25maWcucHkKQEAgLTI3LDYgKzI3LDcgQEAgaW1wb3J0IHJlCiAK
IGZyb20gYnVpbGRib3Quc2NoZWR1bGVyIGltcG9ydCBBbnlCcmFuY2hTY2hlZHVsZXIsIFBlcmlv
ZGljLCBEZXBlbmRlbnQsIFRyaWdnZXJhYmxlLCBOaWdodGx5CiBmcm9tIGJ1aWxkYm90LnNjaGVk
dWxlcnMudHJ5c2NoZWQgaW1wb3J0IFRyeV9Vc2VycGFzcworZnJvbSBidWlsZGJvdC5zY2hlZHVs
ZXJzLmZvcmNlc2NoZWQgaW1wb3J0IEZvcmNlU2NoZWR1bGVyLCBTdHJpbmdQYXJhbWV0ZXIsIEZp
eGVkUGFyYW1ldGVyLCBDb2RlYmFzZVBhcmFtZXRlcgogZnJvbSBidWlsZGJvdC53b3JrZXIgaW1w
b3J0IFdvcmtlcgogZnJvbSBidWlsZGJvdC51dGlsIGltcG9ydCBpZGVudGlmaWVycyBhcyBidWls
ZGJvdF9pZGVudGlmaWVycwogCkBAIC04NSw2ICs4NiwyMiBAQCBkZWYgbG9hZEJ1aWxkZXJDb25m
aWcoYywgaXNfdGVzdF9tb2RlX2VuYWJsZWQ9RmFsc2UsIG1hc3Rlcl9wcmVmaXhfcGF0aD0nLi8n
KToKICAgICAgICAgICAgIHNjaGVkdWxlclsndXNlcnBhc3MnXSA9IFsob3MuZ2V0ZW52KCdCVUlM
REJPVF9UUllfVVNFUk5BTUUnLCAnc2FtcGxldXNlcicpLCBvcy5nZXRlbnYoJ0JVSUxEQk9UX1RS
WV9QQVNTV09SRCcsICdzYW1wbGVwYXNzJykpXQogICAgICAgICBjWydzY2hlZHVsZXJzJ10uYXBw
ZW5kKHNjaGVkdWxlckNsYXNzKCoqc2NoZWR1bGVyKSkKIAorICAgIGZvcmNlU2NoZWR1bGVyID0g
Rm9yY2VTY2hlZHVsZXIoCisgICAgICAgIG5hbWU9ImZvcmNlX2J1aWxkIiwKKyAgICAgICAgYnV0
dG9uTmFtZT0iRm9yY2UgQnVpbGQiLAorICAgICAgICBidWlsZGVyTmFtZXM9W3N0cihidWlsZGVy
WyduYW1lJ10pIGZvciBidWlsZGVyIGluIGNvbmZpZ1snYnVpbGRlcnMnXV0sCisgICAgICAgICMg
RGlzYWJsZSBkZWZhdWx0IGVuYWJsZWQgaW5wdXQgZmllbGRzOiBicmFuY2gsIHJlcG9zaXRvcnks
IHByb2plY3QsIGFkZGl0aW9uYWwgcHJvcGVydGllcworICAgICAgICBjb2RlYmFzZXM9W0NvZGVi
YXNlUGFyYW1ldGVyKCIiLAorICAgICAgICAgICAgICAgICAgIHJldmlzaW9uPUZpeGVkUGFyYW1l
dGVyKG5hbWU9InJldmlzaW9uIiwgZGVmYXVsdD0iIiksCisgICAgICAgICAgICAgICAgICAgcmVw
b3NpdG9yeT1GaXhlZFBhcmFtZXRlcihuYW1lPSJyZXBvc2l0b3J5IiwgZGVmYXVsdD0iIiksCisg
ICAgICAgICAgICAgICAgICAgcHJvamVjdD1GaXhlZFBhcmFtZXRlcihuYW1lPSJwcm9qZWN0Iiwg
ZGVmYXVsdD0iIiksCisgICAgICAgICAgICAgICAgICAgYnJhbmNoPUZpeGVkUGFyYW1ldGVyKG5h
bWU9ImJyYW5jaCIsIGRlZmF1bHQ9IiIpKV0sCisgICAgICAgICMgQWRkIGN1c3RvbSBwcm9wZXJ0
aWVzIG5lZWRlZAorICAgICAgICBwcm9wZXJ0aWVzPVtTdHJpbmdQYXJhbWV0ZXIobmFtZT0icGF0
Y2hfaWQiLCBsYWJlbD0iUGF0Y2ggYXR0YWNobWVudCBpZCBudW1iZXIiLCByZXF1aXJlZD1UcnVl
LCBtYXhzaXplPTcpLAorICAgICAgICAgICAgICAgICAgICBTdHJpbmdQYXJhbWV0ZXIobmFtZT0i
ZXdzX3JldmlzaW9uIiwgbGFiZWw9IldlYktpdCBnaXQgc2hhMSBoYXNoIHRvIGNoZWNrb3V0IGJl
Zm9yZSB0cnlpbmcgcGF0Y2giLCByZXF1aXJlZD1UcnVlLCBtYXhzaXplPTQwKV0sCisgICAgKQor
ICAgIGNbJ3NjaGVkdWxlcnMnXS5hcHBlbmQoZm9yY2VTY2hlZHVsZXIpCisKIAogZGVmIHByaW9y
aXRpemVCdWlsZGVycyhidWlsZG1hc3RlciwgYnVpbGRlcnMpOgogICAgICMgUHJpb3JpdGl6ZSBi
dWlsZGVyIHF1ZXVlcyBvdmVyIHRlc3RlciBxdWV1ZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL0NJU3Vw
cG9ydC9ld3MtYnVpbGQvc3RlcHMucHkgYi9Ub29scy9DSVN1cHBvcnQvZXdzLWJ1aWxkL3N0ZXBz
LnB5CmluZGV4IGU1Y2RlNTlkMmQwMGI3MWQ1NDA4Y2FmZDQzYjVkZDhkOTliOWJlYjMuLjg3Y2Y0
YzY3YzNhYWQ4MGUyOTlhYzdkZmQwZTkxM2I0YmVjYWEzYjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NJ
U3VwcG9ydC9ld3MtYnVpbGQvc3RlcHMucHkKKysrIGIvVG9vbHMvQ0lTdXBwb3J0L2V3cy1idWls
ZC9zdGVwcy5weQpAQCAtMzEzLDcgKzMxMywxMCBAQCBjbGFzcyBBcHBseVBhdGNoKHNoZWxsLlNo
ZWxsQ29tbWFuZCwgQ29tcG9zaXRlU3RlcE1peGluKToKICAgICBkZWYgc3RhcnQoc2VsZik6CiAg
ICAgICAgIHBhdGNoID0gc2VsZi5fZ2V0X3BhdGNoKCkKICAgICAgICAgaWYgbm90IHBhdGNoOgot
ICAgICAgICAgICAgc2VsZi5maW5pc2hlZChGQUlMVVJFKQorICAgICAgICAgICAgIyBGb3JjZWQg
YnVpbGQsIGRvbid0IGhhdmUgcGF0Y2hfaWQgcmF3IGRhdGEgb24gdGhlIHJlcXVlc3QsIG5lZWQg
dG8gZmVjaCBpdC4KKyAgICAgICAgICAgIHBhdGNoX2lkID0gc2VsZi5nZXRQcm9wZXJ0eSgncGF0
Y2hfaWQnLCAnJykKKyAgICAgICAgICAgIHNlbGYuY29tbWFuZCA9IFsnL2Jpbi9zaCcsICctYycs
ICd3Z2V0IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL2F0dGFjaG1lbnQuY2dpP2lkPXt9IC1PIC5i
dWlsZGJvdC1kaWZmICYmIHt9Jy5mb3JtYXQocGF0Y2hfaWQsICcgJy5qb2luKHNlbGYuY29tbWFu
ZCkpXQorICAgICAgICAgICAgc2hlbGwuU2hlbGxDb21tYW5kLnN0YXJ0KHNlbGYpCiAgICAgICAg
ICAgICByZXR1cm4gTm9uZQogCiAgICAgICAgIHBhdGNoX3Jldmlld2VyX25hbWUgPSBzZWxmLmdl
dFByb3BlcnR5KCdwYXRjaF9yZXZpZXdlcl9mdWxsX25hbWUnLCAnJykKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NJU3VwcG9ydC9zdGFydC1idWlsZGJvdC1zZXJ2ZXItdmlydHVhbGVudi5weSBiL1Rvb2xz
L0NJU3VwcG9ydC9zdGFydC1idWlsZGJvdC1zZXJ2ZXItdmlydHVhbGVudi5weQpuZXcgZmlsZSBt
b2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jNGJhZWM4YjhjYzQ3YzI1NDYyYjhmMDU3NDcyMzcyMzAxMzA1MGM2Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvQ0lTdXBwb3J0L3N0YXJ0LWJ1aWxkYm90LXNlcnZlci12aXJ0dWFsZW52LnB5
CkBAIC0wLDAgKzEsMzgzIEBACisjIS91c3IvYmluL2VudiBweXRob24zCisjCisjIENvcHlyaWdo
dCAoQykgMjAxNywgMjAyMSBJZ2FsaWEgUy5MLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMKKyMgICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCitpbXBvcnQgc3lzCitpbXBvcnQgc2lnbmFs
CitpbXBvcnQgb3MKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0
ZW1wZmlsZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHNvY2tldAoraW1wb3J0IGpzb24KK2ltcG9y
dCB0cmFjZWJhY2sKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2Zyb20gdGltZSBpbXBvcnQgc2xl
ZXAKKworYnVpbGRib3Rfc2VydmVyX3RhYyA9ICIiIgoraW1wb3J0IG9zCitmcm9tIHR3aXN0ZWQu
YXBwbGljYXRpb24gaW1wb3J0IHNlcnZpY2UKK2Zyb20gYnVpbGRib3QubWFzdGVyIGltcG9ydCBC
dWlsZE1hc3RlcgorCitiYXNlZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgo
X19maWxlX18pKQorY29uZmlnZmlsZSA9IHInJShjb25maWdfZmlsZSlzJworCithcHBsaWNhdGlv
biA9IHNlcnZpY2UuQXBwbGljYXRpb24oJ2J1aWxkbWFzdGVyJykKK0J1aWxkTWFzdGVyKGJhc2Vk
aXIsIGNvbmZpZ2ZpbGUpLnNldFNlcnZpY2VQYXJlbnQoYXBwbGljYXRpb24pCisiIiIKKworYnVp
bGRib3Rfd29ya2VyX3RhYyA9ICIiIgoraW1wb3J0IG9zCitmcm9tIGJ1aWxkYm90X3dvcmtlci5i
b3QgaW1wb3J0IFdvcmtlcgorZnJvbSB0d2lzdGVkLmFwcGxpY2F0aW9uIGltcG9ydCBzZXJ2aWNl
CisKK2Jhc2VkaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykp
CithcHBsaWNhdGlvbiA9IHNlcnZpY2UuQXBwbGljYXRpb24oJ2J1aWxkYm90LXdvcmtlcicpCisK
K2J1aWxkbWFzdGVyX2hvc3QgPSAnbG9jYWxob3N0JworcG9ydCA9ICUoc2VydmVyX3BiX3BvcnQp
cword29ya2VybmFtZSA9ICclKHdvcmtlcl9uYW1lKXMnCitwYXNzd2QgPSAncGFzc3dvcmQnCitr
ZWVwYWxpdmUgPSA2MDAKKworcyA9IFdvcmtlcihidWlsZG1hc3Rlcl9ob3N0LCBwb3J0LCB3b3Jr
ZXJuYW1lLCBwYXNzd2QsIGJhc2VkaXIsIGtlZXBhbGl2ZSkKK3Muc2V0U2VydmljZVBhcmVudChh
cHBsaWNhdGlvbikKKyIiIgorCisKK2RlZiBjaGVja190Y3BfcG9ydF9vcGVuKGFkZHJlc3MsIHBv
cnQpOgorICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICB0cnk6CisgICAgICAgIHMuY29ubmVj
dCgoYWRkcmVzcywgcG9ydCkpCisgICAgICAgIHJldHVybiBUcnVlCisgICAgZXhjZXB0IENvbm5l
Y3Rpb25SZWZ1c2VkRXJyb3I6CisgICAgICAgIHJldHVybiBGYWxzZQorCisKK2RlZiBjcmVhdGVf
dGVtcGRpcih0bXBkaXI9Tm9uZSk6CisgICAgaWYgdG1wZGlyIGlzIG5vdCBOb25lOgorICAgICAg
ICBpZiBub3Qgb3MucGF0aC5pc2Rpcih0bXBkaXIpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVF
cnJvcigne30gaXMgbm90IGEgZGlyZWN0b3J5Jy5mb3JtYXQodG1wZGlyKSkKKyAgICAgICAgcmV0
dXJuIHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PW9zLnBhdGguam9pbihvcy5wYXRoLmFic3BhdGgo
dG1wZGlyKSwgJ3RtcCcpKQorICAgIHJldHVybiB0ZW1wZmlsZS5ta2R0ZW1wKCkKKworCitkZWYg
cHJpbnRfaWZfZXJyb3Jfc3Rkb3V0X3N0ZGVycihjbWQsIHJldGNvZGUsIHN0ZG91dD1Ob25lLCBz
dGRlcnI9Tm9uZSwgZXh0cmFtc2c9Tm9uZSk6CisgICAgaWYgcmV0Y29kZSAhPSAwOgorICAgICAg
ICBpZiB0eXBlKGNtZCkgaXMgbGlzdDoKKyAgICAgICAgICAgIGNtZCA9ICcgJy5qb2luKGNtZCkK
KyAgICAgICAgcHJpbnQoJ1dBUk5JTkc6ICJ7Y21kfSIgcmV0dXJuZWQge3JldGNvZGV9IHN0YXR1
cyBjb2RlJy5mb3JtYXQoY21kPWNtZCwgcmV0Y29kZT1yZXRjb2RlKSkKKyAgICAgICAgaWYgc3Rk
b3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcHJpbnQoJ1NURE9VVDpcbicgKyBzdGRvdXQu
ZGVjb2RlKCd1dGYtOCcpKQorICAgICAgICBpZiBzdGRlcnIgaXMgbm90IE5vbmU6CisgICAgICAg
ICAgICBwcmludCgnU1RERVJSOlxuJyArIHN0ZGVyci5kZWNvZGUoJ3V0Zi04JykpCisgICAgICAg
IGlmIGV4dHJhbXNnIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcHJpbnQoZXh0cmFtc2cpCisK
KworZGVmIGNtZF9leGlzdHMoY21kKToKKyAgICByZXR1cm4gYW55KG9zLmFjY2Vzcyhvcy5wYXRo
LmpvaW4ocGF0aCwgY21kKSwgb3MuWF9PSykKKyAgICAgICAgICAgICAgIGZvciBwYXRoIGluIG9z
LmVudmlyb25bJ1BBVEgnXS5zcGxpdChvcy5wYXRoc2VwKSkKKworCitjbGFzcyBCdWlsZGJvdFRl
c3RSdW5uZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWdkaXIpOgor
ICAgICAgICBzZWxmLl9jb25maWdkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5yZWFscGF0
aChjb25maWdkaXIpKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzZWxmLl9jb25maWdk
aXIpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGUgY29uZmlnZGlyIHt9IGlz
IG5vdCBhIGRpcmVjdG9yeScuZm9ybWF0KHNlbGYuX2NvbmZpZ2RpcikpCisgICAgICAgIGlmIG5v
dCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5fY29uZmlnZGlyLCAnY29uZmlnLmpz
b24nKSk6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1RoZSBjb25maWdkaXIge30g
ZG9lcyBub3QgY29udGFpbiBhIGNvbmZpZy5qc29uIGZpbGUnLmZvcm1hdChzZWxmLl9jb25maWdk
aXIpKQorCisgICAgICAgIG51bWJlcl9jb25maWdfZmlsZXMgPSAwCisgICAgICAgIGZvciBmaWxl
IGluIG9zLmxpc3RkaXIoc2VsZi5fY29uZmlnZGlyKToKKyAgICAgICAgICAgIGlmIGZpbGUuZW5k
c3dpdGgoJy5jZmcnKToKKyAgICAgICAgICAgICAgICBzZWxmLl9zZXJ2ZXJfY29uZmlnX2ZpbGVf
bmFtZSA9IGZpbGUKKyAgICAgICAgICAgICAgICBudW1iZXJfY29uZmlnX2ZpbGVzICs9IDEKKyAg
ICAgICAgaWYgbnVtYmVyX2NvbmZpZ19maWxlcyA9PSAwOgorICAgICAgICAgICAgcmFpc2UgUnVu
dGltZUVycm9yKCdUaGUgY29uZmlnZGlyIHt9IGRvZXMgbm90IGNvbnRhaW4gYSAuY2ZnIGZpbGUn
LmZvcm1hdChzZWxmLl9jb25maWdkaXIpKQorICAgICAgICBpZiBudW1iZXJfY29uZmlnX2ZpbGVz
ICE9IDE6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1RoZSBjb25maWdkaXIge30g
aGFzIG1vcmUgdGhhbiBvbmUgLmNmZyBmaWxlJy5mb3JtYXQoc2VsZi5fY29uZmlnZGlyKSkKKwor
ICAgICAgICBzZWxmLl9zZXJ2ZXJfaHR0cF9wb3J0LCBzZWxmLl9zZXJ2ZXJfcGJfcG9ydCA9IHNl
bGYuX2dldF9jb25maWdfdGNwX3BvcnRzKCkKKworICAgIGRlZiBfZ2V0X2NvbmZpZ190Y3BfcG9y
dHMoc2VsZik6CisgICAgICAgIHBiX3BvcnQgPSAxNzAwMAorICAgICAgICBodHRwX3BvcnQgPSA4
MDEwCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2Vs
Zi5fY29uZmlnZGlyLCBzZWxmLl9zZXJ2ZXJfY29uZmlnX2ZpbGVfbmFtZSkpIGFzIGY6CisgICAg
ICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgaWYgJz0nIGlu
IGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAncHJvdG9jb2xzJyBpbiBsaW5lIGFu
ZCAncGInIGluIGxpbmUgYW5kICdwb3J0JyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBiID0gZXZhbChsaW5lLnNwbGl0KCc9JywgMSlbMV0pCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGJfcG9ydCA9IGludCgocGJbJ3BiJ11bJ3BvcnQnXSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAnd3d3JyBpbiBsaW5lIGFuZCAncG9ydCcgaW4gbGluZToKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBodHRwID0gZXZhbChsaW5lLnNwbGl0KCc9JywgMSlbMV0p
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9wb3J0ID0gaW50KChodHRwWydwb3J0
J10pKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwcmludCgiVW5hYmxlIHRvIGRldGVj
dCBodHRwIGFuZCBwYiBwb3J0cyBmcm9tIGNvbmZpZy4gVXNpbmcgZGVmYXVsdHMiKQorICAgICAg
ICByZXR1cm4gaHR0cF9wb3J0LCBwYl9wb3J0CisKKyAgICBkZWYgc3RhcnQoc2VsZiwgYmFzZXRl
bXBkaXI9Tm9uZSwgbm9fY2xlYW49RmFsc2UsIG5vX3dvcmtlcnM9RmFsc2UsIHVzZV9zeXN0ZW1f
dmVyc2lvbj1GYWxzZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2Jhc2Vfd29y
a2Rpcl90ZW1wID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGgucmVhbHBhdGgoY3JlYXRlX3RlbXBk
aXIoYmFzZXRlbXBkaXIpKSkKKyAgICAgICAgICAgIGlmIHNlbGYuX2Jhc2Vfd29ya2Rpcl90ZW1w
LnN0YXJ0c3dpdGgoc2VsZi5fY29uZmlnZGlyKToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCdUaGUgdGVtcG9yYWwgd29ya2luZyBkaXJlY3Rvcnkge30gY2FudCBiZSBsb2NhdGVk
IGluc2lkZSBjb25maWdkaXIge30nLmZvcm1hdChzZWxmLl9iYXNlX3dvcmtkaXJfdGVtcCwgc2Vs
Zi5fY29uZmlnZGlyKSkKKyAgICAgICAgICAgIGlmIG5vdCB1c2Vfc3lzdGVtX3ZlcnNpb246Cisg
ICAgICAgICAgICAgICAgc2VsZi5fc2V0dXBfdmlydHVhbGVudigpCisgICAgICAgICAgICBpZiBu
b3QgKGNtZF9leGlzdHMoJ3R3aXN0ZCcpIGFuZCBjbWRfZXhpc3RzKCdidWlsZGJvdCcpKToKKyAg
ICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0J1aWxkYm90IGlzIG5vdCBpbnN0YWxs
ZWQuJykKKyAgICAgICAgICAgIHNlbGYuX3NldHVwX3NlcnZlcl93b3JrZGlyKCkKKyAgICAgICAg
ICAgIHNlcnZlcl9ydW5uZXIgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5f
c3RhcnRfc2VydmVyKQorICAgICAgICAgICAgc2VydmVyX3J1bm5lci5zdGFydCgpCisgICAgICAg
ICAgICBzZWxmLl93YWl0X2Zvcl9zZXJ2ZXJfcmVhZHkoKQorICAgICAgICAgICAgaWYgbm9fd29y
a2VyczoKKyAgICAgICAgICAgICAgICBwcmludCgnIC0gVG8gbWFudWFsbHkgYXR0YWNoIGEgYnVp
bGQgd29ya2VyIHVzZSB0aGlzIGluZm86XG4nCisgICAgICAgICAgICAgICAgICAgICAgKyAnICAg
ICBUQ1AgcG9ydCBmb3IgdGhlIHdvcmtlci10by1zZXJ2ZXIgY29ubmVjdGlvbjoge31cbicuZm9y
bWF0KHNlbGYuX3NlcnZlcl9wYl9wb3J0KQorICAgICAgICAgICAgICAgICAgICAgICsgJyAgICAg
d29ya2VyLWlkOiB0aGUgb25lIGRlZmluZWQgYXQge31cbicuZm9ybWF0KG9zLnBhdGguam9pbihz
ZWxmLl9zZXJ2ZXJfd29yZGlyLCAncGFzc3dvcmRzLmpzb24nKSkKKyAgICAgICAgICAgICAgICAg
ICAgICArICcgICAgIHBhc3N3b3JkOiAgcGFzc3dvcmRcbicpCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIHdvcmtlcl9ydW5uZXJzID0gW10KKyAgICAgICAgICAgICAgICBmb3Ig
d29ya2VyIGluIHNlbGYuX2dldF9saXN0X3dvcmtlcnMoKToKKyAgICAgICAgICAgICAgICAgICAg
d29ya2VyX3J1bm5lciA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1zZWxmLl9zdGFy
dF93b3JrZXIsIGFyZ3M9KHdvcmtlciwpKQorICAgICAgICAgICAgICAgICAgICB3b3JrZXJfcnVu
bmVyLnN0YXJ0KCkKKyAgICAgICAgICAgICAgICAgICAgd29ya2VyX3J1bm5lcnMuYXBwZW5kKHdv
cmtlcl9ydW5uZXIpCisgICAgICAgICAgICAgICAgcHJpbnQoJyAtIFdvcmtlcnMgc3RhcnRlZCEu
XG4nCisgICAgICAgICAgICAgICAgICAgICAgKyAnICAgICBDaGVjayB0aGUgbG9nIGZvciBlYWNo
IG9uZSBhdCB7fS9XT1JLRVJOQU1FSUQvd29ya2VyLmxvZ1xuJy5mb3JtYXQoc2VsZi5fYmFzZV93
b3JrZGlyX3RlbXApCisgICAgICAgICAgICAgICAgICAgICAgKyAnICAgICB0YWlsIC1mIHt9Lyov
d29ya2VyLmxvZ1xuJy5mb3JtYXQoc2VsZi5fYmFzZV93b3JrZGlyX3RlbXApKQorICAgICAgICAg
ICAgICAgIGZvciB3b3JrZXJfcnVubmVyIGluIHdvcmtlcl9ydW5uZXJzOgorICAgICAgICAgICAg
ICAgICAgICB3b3JrZXJfcnVubmVyLmpvaW4oKQorICAgICAgICAgICAgc2VydmVyX3J1bm5lci5q
b2luKCkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgcGFz
cyAgIyBubyBwcmludCB0aGUgZXhjZXB0aW9uCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAg
IHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdHJ5
OgorICAgICAgICAgICAgICAgICMgVGhlIGNoaWxkcmVuIG1heSBleGl0IGJldHdlZW4gdGhlIGNo
ZWNrIGFuZCB0aGUga2lsbCBjYWxsLgorICAgICAgICAgICAgICAgICMgSWdub3JlIGFueSBleGNl
cHRpb24gcmFpc2VkIGhlcmUuCisgICAgICAgICAgICAgICAgZm9yIGMgaW4gbXVsdGlwcm9jZXNz
aW5nLmFjdGl2ZV9jaGlsZHJlbigpOgorICAgICAgICAgICAgICAgICAgICAjIFNlbmQgdGhlIHNp
Z25hbCB0byB0aGUgd2hvbGUgcHJvY2VzcyBncm91cC4KKyAgICAgICAgICAgICAgICAgICAgIyBP
dGhlcndpc2Ugc29tZSB0d2lzdGQgc3ViLWNoaWxkcyBjYW4gcmVtYWluIGFsaXZlLgorICAgICAg
ICAgICAgICAgICAgICBvcy5raWxscGcob3MuZ2V0cGdpZChjLnBpZCksIHNpZ25hbC5TSUdLSUxM
KQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAg
IGlmIG5vdCBub19jbGVhbjoKKyAgICAgICAgICAgICAgICBzZWxmLl9jbGVhbigpCisgICAgICAg
ICAgICBzeXMuZXhpdCgwKQorCisgICAgZGVmIF93YWl0X2Zvcl9zZXJ2ZXJfcmVhZHkoc2VsZik6
CisgICAgICAgIHNlcnZlcl9yZWFkeV9jaGVja19jb3VudGVyID0gMAorICAgICAgICB3aGlsZSBU
cnVlOgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoc2VsZi5fc2VydmVyX3JlYWR5X2Zk
KToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGlmIHNlcnZlcl9yZWFkeV9j
aGVja19jb3VudGVyID4gNjA6CisgICAgICAgICAgICAgICAgcHJpbnQoJ0VSUk9SOiBidWlsZGJv
dCBzZXJ2ZXIgaGFzIG5vdCBzdGFydGVkIGFmdGVyIHdhaXRpbmcgNjAgc2Vjb25kcyBmb3IgaXQu
JykKKworICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHNlbGYuX3NlcnZlcl9sb2cp
OgorICAgICAgICAgICAgICAgICAgICBwcmludCgnVGhlIHNlcnZlci5sb2cgZmlsZSBjb250YWlu
cyB0aGUgZm9sbG93aW5nOicpCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLl9z
ZXJ2ZXJfbG9nLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludChmLnJl
YWQoKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcmludCgn
VGhlcmUgaXMgbm8gc2VydmVyLmxvZyBvbiB0aGUgZGlyZWN0b3J5LiBUaGF0IG1lYW5zIGEgZ2Vu
ZXJhbCBmYWlsdXJlIHN0YXJ0aW5nIGJ1aWxkYm90LicpCisKKyAgICAgICAgICAgICAgICByYWlz
ZSBSdW50aW1lRXJyb3IoJ2J1aWxkYm90IHNlcnZlciBoYXMgbm90IHN0YXJ0ZWQgYWZ0ZXIgd2Fp
dGluZyA2MCBzZWNvbmRzIGZvciBpdC4nKQorICAgICAgICAgICAgc2xlZXAoMSkKKyAgICAgICAg
ICAgIHNlcnZlcl9yZWFkeV9jaGVja19jb3VudGVyICs9IDEKKworICAgIGRlZiBfY3JlYXRlX21v
Y2tfd29ya2VyX3Bhc3N3b3Jkc19kaWN0KHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4ob3MucGF0
aC5qb2luKHNlbGYuX3NlcnZlcl93b3JkaXIsICdjb25maWcuanNvbicpLCAncicpIGFzIGNvbmZp
Z19qc29uOgorICAgICAgICAgICAgY29uZmlnX2RpY3QgPSBqc29uLmxvYWQoY29uZmlnX2pzb24p
CisgICAgICAgIHJlc3VsdCA9IGRpY3QoWyh3b3JrZXJbJ25hbWUnXSwgJ3Bhc3N3b3JkJykgZm9y
IHdvcmtlciBpbiBjb25maWdfZGljdFsnd29ya2VycyddXSkKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dAorCisgICAgZGVmIF9zZXR1cF9zZXJ2ZXJfd29ya2RpcihzZWxmKToKKyAgICAgICAgc2VsZi5f
c2VydmVyX3dvcmRpciA9IG9zLnBhdGguam9pbihzZWxmLl9iYXNlX3dvcmtkaXJfdGVtcCwgJ2J1
aWxkYm90LXNlcnZlcicpCisgICAgICAgIGFzc2VydChub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5f
c2VydmVyX3dvcmRpcikpCisgICAgICAgIHNlbGYuX3NlcnZlcl9sb2cgPSBvcy5wYXRoLmpvaW4o
c2VsZi5fc2VydmVyX3dvcmRpciwgJ3NlcnZlci5sb2cnKQorICAgICAgICBzZWxmLl9zZXJ2ZXJf
cmVhZHlfZmQgPSBvcy5wYXRoLmpvaW4oc2VsZi5fc2VydmVyX3dvcmRpciwgJy5zZXJ2ZXItaXMt
cmVhZHknKQorICAgICAgICBwcmludCgnQ29weWluZyBmaWxlcyBmcm9tIHt9IHRvIHt9IC4uLicu
Zm9ybWF0KHNlbGYuX2NvbmZpZ2Rpciwgc2VsZi5fc2VydmVyX3dvcmRpcikpCisgICAgICAgIHNo
dXRpbC5jb3B5dHJlZShzZWxmLl9jb25maWdkaXIsIHNlbGYuX3NlcnZlcl93b3JkaXIpCisgICAg
ICAgIHByaW50KCdHZW5lcmF0aW5nIGJ1aWxkYm90IGZpbGVzIGF0IHt9IC4uLicuZm9ybWF0KHNl
bGYuX3NlcnZlcl93b3JkaXIpKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYu
X3NlcnZlcl93b3JkaXIsICdidWlsZGJvdC50YWMnKSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAg
Zi53cml0ZShidWlsZGJvdF9zZXJ2ZXJfdGFjICUgeydjb25maWdfZmlsZSc6IHNlbGYuX3NlcnZl
cl9jb25maWdfZmlsZV9uYW1lfSkKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxm
Ll9zZXJ2ZXJfd29yZGlyLCAncGFzc3dvcmRzLmpzb24nKSwgJ3cnKSBhcyBwYXNzd29yZHNfZmls
ZToKKyAgICAgICAgICAgIHBhc3N3b3Jkc19maWxlLndyaXRlKGpzb24uZHVtcHMoc2VsZi5fY3Jl
YXRlX21vY2tfd29ya2VyX3Bhc3N3b3Jkc19kaWN0KCksIGluZGVudD00LCBzb3J0X2tleXM9VHJ1
ZSkpCisKKyAgICBkZWYgX3NldHVwX3ZpcnR1YWxlbnYoc2VsZik6CisgICAgICAgIGlmIGNtZF9l
eGlzdHMoJ3ZpcnR1YWxlbnYnKToKKyAgICAgICAgICAgIHByaW50KCdTZXR0aW5nIHVwIHZpcnR1
YWxlbnYgYXQge30gLi4uICcuZm9ybWF0KHNlbGYuX2Jhc2Vfd29ya2Rpcl90ZW1wKSkKKyAgICAg
ICAgICAgIHZpcnR1YWxlbnZfY21kID0gWyd2aXJ0dWFsZW52JywgJy1wJywgJ3B5dGhvbjMnLCAn
dmVudiddCisgICAgICAgICAgICB2aXJ0dWFsZW52X3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVu
KHZpcnR1YWxlbnZfY21kLCBjd2Q9c2VsZi5fYmFzZV93b3JrZGlyX3RlbXAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNz
LlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgIHN0ZG91dCwgc3Rk
ZXJyID0gdmlydHVhbGVudl9wcm9jZXNzLmNvbW11bmljYXRlKCkKKyAgICAgICAgICAgIHByaW50
X2lmX2Vycm9yX3N0ZG91dF9zdGRlcnIodmlydHVhbGVudl9jbWQsIHZpcnR1YWxlbnZfcHJvY2Vz
cy5yZXR1cm5jb2RlLCBzdGRvdXQsIHN0ZGVycikKKyAgICAgICAgICAgIHZpcnR1YWxlbnZfYmlu
ZGlyID0gb3MucGF0aC5qb2luKHNlbGYuX2Jhc2Vfd29ya2Rpcl90ZW1wLCAndmVudicsICdiaW4n
KQorICAgICAgICAgICAgdmlydHVhbGVudl9waXAgPSBvcy5wYXRoLmpvaW4odmlydHVhbGVudl9i
aW5kaXIsICdwaXAnKQorICAgICAgICAgICAgaWYgbm90IG9zLmFjY2Vzcyh2aXJ0dWFsZW52X3Bp
cCwgb3MuWF9PSyk6CisgICAgICAgICAgICAgICAgcHJpbnQoJ1NvbWV0aGluZyB3ZW50IHdyb25n
IHNldHRpbmcgdXAgdmlydHVhbGVudicKKyAgICAgICAgICAgICAgICAgICAgICAnVHJ5aW5nIHRv
IGNvbnRpbnVlIHVzaW5nIHRoZSBzeXN0ZW0gdmVyc2lvbiBvZiBidWlsZGJvdCcpCisgICAgICAg
ICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBwcmludCgnU2V0dGluZyB1cCBidWlsZGJvdCBk
ZXBlbmRlbmNpZXMgb24gdGhlIHZpcnR1YWxlbnYgLi4uICcpCisgICAgICAgICAgICAjIFRoZSBp
ZGVhIGlzIHRvIGluc3RhbGwgdGhlIHZlcnkgc2FtZSB2ZXJzaW9uIG9mIGJ1aWxkYm90IGFuZCBp
dHMKKyAgICAgICAgICAgICMgZGVwZW5kZW5jaWVzIHRoYW4gdGhlIG9uZXMgdXNlZCBmb3IgcnVu
bmluZyBodHRwczovL2J1aWxkLndlYmtpdC5vcmcvYWJvdXQKKyAgICAgICAgICAgIGJ1aWxkYm90
X3ZlcnNpb24gPSAnMi4xMC41JworICAgICAgICAgICAgcGlwX2NtZCA9IFt2aXJ0dWFsZW52X3Bp
cCwgJ2luc3RhbGwnLAorICAgICAgICAgICAgICAgICAgICAgICAnYnVpbGRib3Q9PXt9Jy5mb3Jt
YXQoYnVpbGRib3RfdmVyc2lvbiksCisgICAgICAgICAgICAgICAgICAgICAgICdidWlsZGJvdC1j
b25zb2xlLXZpZXc9PXt9Jy5mb3JtYXQoYnVpbGRib3RfdmVyc2lvbiksCisgICAgICAgICAgICAg
ICAgICAgICAgICdidWlsZGJvdC1ncmlkLXZpZXc9PXt9Jy5mb3JtYXQoYnVpbGRib3RfdmVyc2lv
biksCisgICAgICAgICAgICAgICAgICAgICAgICdidWlsZGJvdC13YXRlcmZhbGwtdmlldz09e30n
LmZvcm1hdChidWlsZGJvdF92ZXJzaW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2J1aWxk
Ym90LXdvcmtlcj09e30nLmZvcm1hdChidWlsZGJvdF92ZXJzaW9uKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgJ2J1aWxkYm90LXd3dz09e30nLmZvcm1hdChidWlsZGJvdF92ZXJzaW9uKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgJ3R3aXN0ZWQ9PTIxLjIuMCcsCisgICAgICAgICAgICAgICAg
ICAgICAgICdyZXF1ZXN0cz09Mi4yMS4wJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2x6ND09
MS4xLjAnXQorICAgICAgICAgICAgcGlwX3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKHBpcF9j
bWQsIGN3ZD1zZWxmLl9iYXNlX3dvcmtkaXJfdGVtcCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJv
Y2Vzcy5TVERPVVQpCisgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHBpcF9wcm9jZXNzLmNv
bW11bmljYXRlKCkKKyAgICAgICAgICAgIHByaW50X2lmX2Vycm9yX3N0ZG91dF9zdGRlcnIocGlw
X2NtZCwgcGlwX3Byb2Nlc3MucmV0dXJuY29kZSwgc3Rkb3V0LCBzdGRlcnIpCisgICAgICAgICAg
ICBvcy5lbnZpcm9uWydQQVRIJ10gPSB2aXJ0dWFsZW52X2JpbmRpciArICc6JyArIG9zLmVudmly
b25bJ1BBVEgnXQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHByaW50KCdXQVJOSU5HOiB2
aXJ0dWFsZW52IG5vdCBpbnN0YWxsZWQuICcKKyAgICAgICAgICAgICAgJ1RyeWluZyB0byBjb250
aW51ZSB1c2luZyB0aGUgc3lzdGVtIHZlcnNpb24gb2YgYnVpbGRib3QnKQorCisgICAgZGVmIF91
cGdyYWRlX2RiX25lZWRlZChzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuX3NlcnZlcl9s
b2cpIGFzIGY6CisgICAgICAgICAgICBmb3IgbCBpbiBmOgorICAgICAgICAgICAgICAgIGlmICd1
cGdyYWRlIHRoZSBkYXRhYmFzZScgaW4gbDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRy
dWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX3N0YXJ0X3NlcnZlcihzZWxmKToK
KyAgICAgICAgIyBUaGlzIGlzIHN0YXJ0ZWQgdmlhIG11bHRpcHJvY2Vzc2luZy4gV2Ugc2V0IGEg
bmV3IHByb2Nlc3MgZ3JvdXAgaGVyZQorICAgICAgICAjIHRvIGJlIGFibGUgdG8gcmVsaWFibHkg
a2lsbCB0aGlzIHN1YnByb2Nlc3MgYW5kIGFsbCBvZiBpdHMgY2hpbGQgb24gY2xlYW4uCisgICAg
ICAgIG9zLnNldHNpZCgpCisgICAgICAgIGRidXBncmFkZWQgPSBGYWxzZQorICAgICAgICByZXRy
eSA9IFRydWUKKyAgICAgICAgaWYgY2hlY2tfdGNwX3BvcnRfb3BlbignbG9jYWxob3N0Jywgc2Vs
Zi5fc2VydmVyX3BiX3BvcnQpOgorICAgICAgICAgICAgcHJpbnQoJ0VSUk9SOiBUaGVyZSBpcyBz
b21lIHByb2Nlc3MgYWxyZWFkeSBsaXN0ZW5pbmcgaW4gcG9ydCB7fScuZm9ybWF0KHNlbGYuX3Nl
cnZlcl9wYl9wb3J0KSkKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIHdoaWxlIHJldHJ5
OgorICAgICAgICAgICAgcmV0cnkgPSBGYWxzZQorICAgICAgICAgICAgcHJpbnQoJ1N0YXJ0aW5n
IHRoZSB0d2lzdGQgcHJvY2VzcyAuLi4nKQorICAgICAgICAgICAgdHdpc3RkX2NtZCA9IFsndHdp
c3RkJywgJy1sJywgc2VsZi5fc2VydmVyX2xvZywgJy1ub3knLCAnYnVpbGRib3QudGFjJ10KKyAg
ICAgICAgICAgIHR3aXN0ZF9zZXJ2ZXJfcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4odHdpc3Rk
X2NtZCwgY3dkPXNlbGYuX3NlcnZlcl93b3JkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVy
cj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgIHdoaWxlIHR3aXN0ZF9zZXJ2ZXJfcHJv
Y2Vzcy5wb2xsKCkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBjaGVja190Y3BfcG9ydF9v
cGVuKCdsb2NhbGhvc3QnLCBzZWxmLl9zZXJ2ZXJfcGJfcG9ydCk6CisgICAgICAgICAgICAgICAg
ICAgIHByaW50KCdUZXN0IGJ1aWxkYm90IHNlcnZlciByZWFkeSFcbicKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgKyAnUHJlc3MgQ1RSTC1DIHRvIHN0b3BcblxuJworICAgICAgICAgICAgICAg
ICAgICAgICAgICArICcgLSBTZWUgYnVpbGRib3Qgc2VydmVyIGxvZzpcbicKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgKyAnICAgICB0YWlsIC1mIHt9XG5cbicuZm9ybWF0KHNlbGYuX3NlcnZl
cl9sb2cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICsgJyAtIE9wZW4gYSBicm93c2VyIHRv
OlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICArICcgICAgIGh0dHA6Ly9sb2NhbGhvc3Q6
e31cbicuZm9ybWF0KHNlbGYuX3NlcnZlcl9odHRwX3BvcnQpKQorICAgICAgICAgICAgICAgICAg
ICB3aXRoIG9wZW4oc2VsZi5fc2VydmVyX3JlYWR5X2ZkLCAndycpIGFzIGY6CisgICAgICAgICAg
ICAgICAgICAgICAgICBmLndyaXRlKCdyZWFkeScpCisgICAgICAgICAgICAgICAgICAgIHR3aXN0
ZF9zZXJ2ZXJfcHJvY2Vzcy53YWl0KCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAg
ICAgICAgICAgICAgICBzbGVlcCgxKQorICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSB0d2lz
dGRfc2VydmVyX3Byb2Nlc3MuY29tbXVuaWNhdGUoKQorICAgICAgICAgICAgaWYgdHdpc3RkX3Nl
cnZlcl9wcm9jZXNzLnJldHVybmNvZGUgPT0gMCBhbmQgc2VsZi5fdXBncmFkZV9kYl9uZWVkZWQo
KSBhbmQgbm90IGRidXBncmFkZWQ6CisgICAgICAgICAgICAgICAgcmV0cnkgPSBUcnVlCisgICAg
ICAgICAgICAgICAgZGJ1cGdyYWRlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBwcmludCgnVXBn
cmFkaW5nIHRoZSBkYXRhYmFzZSAuLi4nKQorICAgICAgICAgICAgICAgIHVwZ3JhZGVfY21kID0g
WydidWlsZGJvdCcsICd1cGdyYWRlLW1hc3RlcicsIHNlbGYuX3NlcnZlcl93b3JkaXJdCisgICAg
ICAgICAgICAgICAgdXBncmFkZV9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3Blbih1cGdyYWRlX2Nt
ZCwgY3dkPXNlbGYuX3NlcnZlcl93b3JkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3Vi
cHJvY2Vzcy5TVERPVVQpCisgICAgICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSB1cGdyYWRl
X3Byb2Nlc3MuY29tbXVuaWNhdGUoKQorICAgICAgICAgICAgICAgIHByaW50X2lmX2Vycm9yX3N0
ZG91dF9zdGRlcnIodXBncmFkZV9jbWQsIHVwZ3JhZGVfcHJvY2Vzcy5yZXR1cm5jb2RlLCBzdGRv
dXQsIHN0ZGVycikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnRfaWZf
ZXJyb3Jfc3Rkb3V0X3N0ZGVycih0d2lzdGRfY21kLCB0d2lzdGRfc2VydmVyX3Byb2Nlc3MucmV0
dXJuY29kZSwgc3Rkb3V0LCBzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnQ2hlY2sgdGhlIGxvZyBhdCB7fScuZm9ybWF0KHNlbGYuX3NlcnZlcl9s
b2cpKQorICAgICAgICByZXR1cm4gdHdpc3RkX3NlcnZlcl9wcm9jZXNzLnJldHVybmNvZGUKKwor
ICAgIGRlZiBfZ2V0X2xpc3Rfd29ya2VycyhzZWxmKToKKyAgICAgICAgcGFzc3dvcmRfbGlzdCA9
IG9zLnBhdGguam9pbihzZWxmLl9zZXJ2ZXJfd29yZGlyLCAncGFzc3dvcmRzLmpzb24nKQorICAg
ICAgICB3aXRoIG9wZW4ocGFzc3dvcmRfbGlzdCkgYXMgZjoKKyAgICAgICAgICAgIHBhc3N3b3Jk
cyA9IGpzb24ubG9hZChmKQorICAgICAgICBsaXN0X3dvcmtlcnMgPSBbXQorICAgICAgICBmb3Ig
d29ya2VyIGluIHBhc3N3b3JkczoKKyAgICAgICAgICAgIGxpc3Rfd29ya2Vycy5hcHBlbmQoc3Ry
KHdvcmtlcikpCisgICAgICAgIHJldHVybiBsaXN0X3dvcmtlcnMKKworICAgIGRlZiBfc3RhcnRf
d29ya2VyKHNlbGYsIHdvcmtlcik6CisgICAgICAgICMgVGhpcyBpcyBzdGFydGVkIHZpYSBtdWx0
aXByb2Nlc3NpbmcuIFdlIHNldCBhIG5ldyBwcm9jZXNzIGdyb3VwIGhlcmUKKyAgICAgICAgIyB0
byBiZSBhYmxlIHRvIHJlbGlhYmx5IGtpbGwgdGhpcyBzdWJwcm9jZXNzIGFuZCBhbGwgb2YgaXRz
IGNoaWxkIG9uIGNsZWFuLgorICAgICAgICBvcy5zZXRzaWQoKQorICAgICAgICB3b3JrZXJfd29y
a2RpciA9IG9zLnBhdGguam9pbihzZWxmLl9iYXNlX3dvcmtkaXJfdGVtcCwgd29ya2VyKQorICAg
ICAgICBvcy5ta2Rpcih3b3JrZXJfd29ya2RpcikKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGgu
am9pbih3b3JrZXJfd29ya2RpciwgJ2J1aWxkYm90LnRhYycpLCAndycpIGFzIGY6CisgICAgICAg
ICAgICBmLndyaXRlKGJ1aWxkYm90X3dvcmtlcl90YWMgJSB7J3dvcmtlcl9uYW1lJzogd29ya2Vy
LCAnc2VydmVyX3BiX3BvcnQnOiBzZWxmLl9zZXJ2ZXJfcGJfcG9ydH0pCisgICAgICAgIHR3aXN0
ZF9jbWQgPSBbJ3R3aXN0ZCcsICctbCcsICd3b3JrZXIubG9nJywgJy1ub3knLCAnYnVpbGRib3Qu
dGFjJ10KKyAgICAgICAgdHdpc3RkX3dvcmtlcl9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3Blbih0
d2lzdGRfY21kLCBjd2Q9d29ya2VyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1
YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHR3aXN0ZF93b3JrZXJf
cHJvY2Vzcy5jb21tdW5pY2F0ZSgpCisgICAgICAgIHByaW50X2lmX2Vycm9yX3N0ZG91dF9zdGRl
cnIodHdpc3RkX2NtZCwgdHdpc3RkX3dvcmtlcl9wcm9jZXNzLnJldHVybmNvZGUsIHN0ZG91dCwg
c3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDaGVjayB0aGUg
bG9nIGF0IHt9Jy5mb3JtYXQob3MucGF0aC5qb2luKHdvcmtlcl93b3JrZGlyLCAnd29ya2VyLmxv
ZycpKSkKKyAgICAgICAgcmV0dXJuIHR3aXN0ZF93b3JrZXJfcHJvY2Vzcy5yZXR1cm5jb2RlCisK
KyAgICBkZWYgX2NsZWFuKHNlbGYpOgorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHNlbGYuX2Jh
c2Vfd29ya2Rpcl90ZW1wKToKKyAgICAgICAgICAgIHByaW50KCdcblxuQ2xlYW5pbmcge30gLi4u
IFxuJy5mb3JtYXQoc2VsZi5fYmFzZV93b3JrZGlyX3RlbXApKQorICAgICAgICAgICAgIyBzaHV0
aWwucm10cmVlIGNhbiBmYWlsIGlmIHdlIGhvbGQgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3Igb24g
dGVtcF9kaXIKKyAgICAgICAgICAgICMgKHdoaWNoIGlzIHZlcnkgbGlrZWx5IHdoZW4gY2xlYW5p
bmcpIG9yIGlmIHRlbXBfZGlyIGlzIGEgTkZTIG1vdW50LgorICAgICAgICAgICAgIyBVc2Ugcm0g
aW5zdGVhZCB0aGF0IGFsd2F5cyB3b3Jrcy4KKyAgICAgICAgICAgIHJtID0gc3VicHJvY2Vzcy5Q
b3BlbihbJ3JtJywgJy1mcicsIHNlbGYuX2Jhc2Vfd29ya2Rpcl90ZW1wXSkKKyAgICAgICAgICAg
IHJtLndhaXQoKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgcGFyc2VyID0g
YXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgIGNvbmZpZ3VyYXRpb24gPSBwYXJzZXIuYWRk
X211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cChyZXF1aXJlZD1UcnVlKQorICAgIGNvbmZpZ3VyYXRp
b24uYWRkX2FyZ3VtZW50KCctLWV3cycsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0nZXdz
JywgZGVzdD0nY29uZmlndXJhdGlvbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGVscD0nU2ltdWxhdGUgdGhlIEVXUyBidWlsZGJvdCBzZXJ2ZXIgKGV3cy1idWlsZC53ZWJraXQu
b3JnKScpCisgICAgY29uZmlndXJhdGlvbi5hZGRfYXJndW1lbnQoJy0tcG9zdGNvbW1pdCcsIGFj
dGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0ncG9zdGNvbW1pdCcsIGRlc3Q9J2NvbmZpZ3VyYXRp
b24nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NpbXVsYXRlIHRoZSBw
b3N0LWNvbW1pdCBidWlsZGJvdCBzZXJ2ZXIgKGJ1aWxkLndlYmtpdC5vcmcpJykKKyAgICBjb25m
aWd1cmF0aW9uLmFkZF9hcmd1bWVudCgnLS1jb25maWctZGlyJywgZGVmYXVsdD1Ob25lLCBkZXN0
PSdjb25maWdkaXInLCB0eXBlPXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSdTcGVjaWZ5IHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGUgYnVpbGRib3QgY29u
ZmlnIGZpbGVzJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJhc2UtdGVtcC1kaXInLCBo
ZWxwPSdQYXRoIHdoZXJlIHRoZSB0ZW1wb3JhbCB3b3JraW5nIGRpcmVjdG9yeSB3aWxsIGJlIGNy
ZWF0ZWQuICcKKyAgICAgICAgICAgICAgICAgICAgICAgICdOb3RlOiBUbyB0cmlnZ2VyIHRlc3Qg
YnVpbGRzIHdpdGggdGhlIHRlc3Qgd29ya2VycyB5b3UgbmVlZCBlbm91Z2ggZnJlZSBzcGFjZSBv
biB0aGF0IHBhdGguJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J2Jhc2V0ZW1wZGly
JywgZGVmYXVsdD1Ob25lLCB0eXBlPXN0cikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW5v
LWNsZWFuJywgaGVscD0nRG8gbm90IGNsZWFuIHRoZSB0ZW1wb3JhbCB3b3JraW5nIGRpciBvbiBl
eGl0LicsCisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdub19jbGVhbicsIGFjdGlvbj0n
c3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1uby13b3JrZXJzJywgaGVs
cD0nRG8gbm90IHN0YXJ0IHRoZSB0ZXN0IHdvcmtlcnMuJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3Q9J25vX3dvcmtlcnMnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlci5h
ZGRfYXJndW1lbnQoJy0tdXNlLXN5c3RlbS12ZXJzaW9uJywgaGVscD0nSW5zdGVhZCBvZiBzZXR0
aW5nIHVwIGEgdmlydHVhbGVudiB3aXRoIHRoZSBidWlsZGJvdCB2ZXJzaW9uICcKKyAgICAgICAg
ICAgICAgICAgICAgICAgICd1c2VkIGJ5IGJ1aWxkLndlYmtpdC5vcmcsIHVzZSB0aGUgYnVpbGRi
b3QgdmVyc2lvbiBpbnN0YWxsZWQgb24gdGhpcyBzeXN0ZW0uJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3Q9J3VzZV9zeXN0ZW1fdmVyc2lvbicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisg
ICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIGlmIGFyZ3MuY29uZmlndXJhdGlv
biA9PSAiZXdzIjoKKyAgICAgICAgY29uZmlnZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGly
bmFtZShfX2ZpbGVfXyksICdld3MtYnVpbGQnKQorICAgIGVsaWYgYXJncy5jb25maWd1cmF0aW9u
ID09ICJwb3N0Y29tbWl0IjoKKyAgICAgICAgY29uZmlnZGlyID0gb3MucGF0aC5qb2luKG9zLnBh
dGguZGlybmFtZShfX2ZpbGVfXyksICdidWlsZC13ZWJraXQtb3JnJykKKyAgICBlbHNlOgorICAg
ICAgICBjb25maWdkaXIgPSBhcmdzLmNvbmZpZ2RpcgorCisgICAgYnVpbGRib3RfdGVzdF9ydW5u
ZXIgPSBCdWlsZGJvdFRlc3RSdW5uZXIoY29uZmlnZGlyKQorICAgIGJ1aWxkYm90X3Rlc3RfcnVu
bmVyLnN0YXJ0KGFyZ3MuYmFzZXRlbXBkaXIsIGFyZ3Mubm9fY2xlYW4sIGFyZ3Mubm9fd29ya2Vy
cywgYXJncy51c2Vfc3lzdGVtX3ZlcnNpb24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427397</attachid>
            <date>2021-04-29 20:35:36 -0700</date>
            <delta_ts>2021-04-30 18:23:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222540-20210430053534.patch</filename>
            <type>text/plain</type>
            <size>42062</size>
            <attacher name="Carlos Alberto Lopez Perez">clopez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2ODIyCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZTEzYWI3OTNhNTllNzUzOWYxZWY3YTdkNjllNzM5M2Fh
NDg3MDk4ZC4uODY2YTI1MjUyMDY1ZmU5OTczZDY1ZjRlYmUyZTM0YWY2ZWQ5NzdjOSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1
IEBACisyMDIxLTA0LTI5ICBDYXJsb3MgQWxiZXJ0byBMb3BleiBQZXJleiAgPGNsb3BlekBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFt0b29sc10gTWFrZSBydW4tYnVpbGRib3QtdGVzdCBjb21wYXRp
YmxlIHdpdGggYnVpbGRib3QgMi4xMC4xCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjI1NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIHJlbmFtZXMgdGhlIHByZXZpb3VzIHRvb2wgcnVuLWJ1aWxk
Ym90LXRlc3QgdG8gc3RhcnQtYnVpbGRib3Qtc2VydmVyLXZpcnR1YWxlbnYKKyAgICAgICAgYW5k
IGl0IG1ha2VzIHNldmVyYWwgY2hhbmdlcyB0byBpdDoKKyAgICAgICAgLSBVc2UgcHl0aG9uMyBh
bmQgcmVmYWN0b3IgdGhlIGNvZGUuCisgICAgICAgIC0gTWFrZSBpdCBhbHNvIHdvcmsgd2l0aCB0
aGUgRVdTIGNvbmZpZyAocHJldmlvdXNseSBpdCBvbmx5IHdvcmtlZCBmb3IgdGhlIGJ1aWxkLndl
YmtpdC5vcmcgY29uZmlnKS4KKyAgICAgICAgLSBVc2UgbmV3ZXIgYnVpbGRib3QgY29uZmlncy4K
KyAgICAgICAgLSBJbnN0ZWFkIG9mIGhhcmRjb2RpbmcgdmFsdWVzIHRyeSB0byBhdXRvbWF0aWNh
bGx5IGRldGVjdCB0aGUgdmFsdWVzIGZyb20gdGhlIGNvbmZpZyBkaXIuCisgICAgICAgIC0gSW5z
dGVhZCBvZiBzdGFydGluZyBOdGggd29ya2VycyBieSBkZWZhdWx0IHN0YXJ0IG9ubHkgb25lIHJv
dW5kLXJvYmluIHdvcmtlciAobG9jYWwtd29ya2VyKS4KKworICAgICAgICBJdCBhbHNvIG1vZGlm
aWVzIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBFV1Mgc2VydmVyIHRvIGFkZCBhIGZvcmNlIHNj
aGVkdWxlciBpbiBvcmRlcgorICAgICAgICB0byBhbGxvdyB0byBtYW51YWxseSB0cmlnZ2VyIGJ1
aWxkcyAob25seSBpbiB0ZXN0IG1vZGUpLgorCisgICAgICAgICogQ0lTdXBwb3J0L2J1aWxkLXdl
YmtpdC1vcmcvcnVuLWJ1aWxkYm90LXRlc3QucHk6IFJlbW92ZWQuCisgICAgICAgICogQ0lTdXBw
b3J0L2V3cy1idWlsZC9sb2FkQ29uZmlnLnB5OgorICAgICAgICAobG9hZEJ1aWxkZXJDb25maWcp
OgorICAgICAgICAqIENJU3VwcG9ydC9ld3MtYnVpbGQvc3RlcHMucHk6CisgICAgICAgIChBcHBs
eVBhdGNoLnN0YXJ0KToKKyAgICAgICAgKiBDSVN1cHBvcnQvc3RhcnQtYnVpbGRib3Qtc2VydmVy
LXRlc3Q6IEFkZGVkLgorICAgICAgICAoY2hlY2tfdGNwX3BvcnRfb3Blbik6CisgICAgICAgIChj
cmVhdGVfdGVtcGRpcik6CisgICAgICAgIChwcmludF9pZl9lcnJvcl9zdGRvdXRfc3RkZXJyKToK
KyAgICAgICAgKGNtZF9leGlzdHMpOgorICAgICAgICAoQnVpbGRib3RUZXN0UnVubmVyKToKKyAg
ICAgICAgKEJ1aWxkYm90VGVzdFJ1bm5lci5fX2luaXRfXyk6CisgICAgICAgIChCdWlsZGJvdFRl
c3RSdW5uZXIuX2dldF9jb25maWdfdGNwX3BvcnRzKToKKyAgICAgICAgKEJ1aWxkYm90VGVzdFJ1
bm5lci5zdGFydCk6CisgICAgICAgIChCdWlsZGJvdFRlc3RSdW5uZXIuX3dhaXRfZm9yX3NlcnZl
cl9yZWFkeSk6CisgICAgICAgIChCdWlsZGJvdFRlc3RSdW5uZXIuX2NyZWF0ZV9tb2NrX3dvcmtl
cl9wYXNzd29yZHNfZGljdCk6CisgICAgICAgIChCdWlsZGJvdFRlc3RSdW5uZXIuX3NldHVwX3Nl
cnZlcl93b3JrZGlyKToKKyAgICAgICAgKEJ1aWxkYm90VGVzdFJ1bm5lci5fc2V0dXBfdmlydHVh
bGVudik6CisgICAgICAgIChCdWlsZGJvdFRlc3RSdW5uZXIuX3VwZ3JhZGVfZGJfbmVlZGVkKToK
KyAgICAgICAgKEJ1aWxkYm90VGVzdFJ1bm5lci5fc3RhcnRfc2VydmVyKToKKyAgICAgICAgKEJ1
aWxkYm90VGVzdFJ1bm5lci5fZ2V0X2xpc3Rfd29ya2Vycyk6CisgICAgICAgIChCdWlsZGJvdFRl
c3RSdW5uZXIuX3N0YXJ0X3dvcmtlcik6CisgICAgICAgIChCdWlsZGJvdFRlc3RSdW5uZXIuX2Ns
ZWFuKToKKwogMjAyMS0wNC0yOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgRXh0ZW5kIFNvcnRlZEFycmF5TWFwIGZ1cnRoZXIgdG8gd29yayBvbiBjYXNlLWZvbGRl
ZCBzdHJpbmdzLCB1c2UgaW4gTUlNRVR5cGVSZWdpc3RyeQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ0lT
dXBwb3J0L2J1aWxkLXdlYmtpdC1vcmcvcnVuLWJ1aWxkYm90LXRlc3QucHkgYi9Ub29scy9DSVN1
cHBvcnQvYnVpbGQtd2Via2l0LW9yZy9ydW4tYnVpbGRib3QtdGVzdC5weQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA3NTUKaW5kZXggNGRjMjJmZDlhNDc2YjBlYjcxMTA3ODBiMGVhYjQ1MzAzYzYwOGQz
Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9D
SVN1cHBvcnQvYnVpbGQtd2Via2l0LW9yZy9ydW4tYnVpbGRib3QtdGVzdC5weQorKysgL2Rldi9u
dWxsCkBAIC0xLDM0NyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJp
Z2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIwotIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSMKLWltcG9ydCBzeXMKLWltcG9ydCBzaWduYWwKLWlt
cG9ydCBvcwotaW1wb3J0IGFyZ3BhcnNlCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHRlbXBm
aWxlCi1pbXBvcnQgc2h1dGlsCi1pbXBvcnQgc29ja2V0Ci1pbXBvcnQganNvbgotaW1wb3J0IHRy
YWNlYmFjawotaW1wb3J0IG11bHRpcHJvY2Vzc2luZwotZnJvbSB0aW1lIGltcG9ydCBzbGVlcAot
Ci10ZXN0X2J1aWxkYm90X21hc3Rlcl90YWMgPSAiIiIKLWltcG9ydCBvcwotZnJvbSB0d2lzdGVk
LmFwcGxpY2F0aW9uIGltcG9ydCBzZXJ2aWNlCi10cnk6Ci0gICAgZnJvbSBidWlsZGJvdC5tYXN0
ZXIuYm90IGltcG9ydCBCdWlsZE1hc3RlcgotZXhjZXB0OgotICAgIGZyb20gYnVpbGRib3QubWFz
dGVyIGltcG9ydCBCdWlsZE1hc3RlcgotCi1iYXNlZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBh
dGgucmVhbHBhdGgoX19maWxlX18pKQotY29uZmlnZmlsZSA9IHInbWFzdGVyLmNmZycKLQotYXBw
bGljYXRpb24gPSBzZXJ2aWNlLkFwcGxpY2F0aW9uKCdidWlsZG1hc3RlcicpCi1CdWlsZE1hc3Rl
cihiYXNlZGlyLCBjb25maWdmaWxlKS5zZXRTZXJ2aWNlUGFyZW50KGFwcGxpY2F0aW9uKQotIiIi
Ci0KLXdvcmtlcl9idWlsZGJvdF9tYXN0ZXJfdGFjID0gIiIiCi1pbXBvcnQgb3MKLWZyb20gdHdp
c3RlZC5hcHBsaWNhdGlvbiBpbXBvcnQgc2VydmljZQotZnJvbSBidWlsZHNsYXZlLmJvdCBpbXBv
cnQgQnVpbGRTbGF2ZQotCi1iYXNlZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBh
dGgoX19maWxlX18pKQotYnVpbGRtYXN0ZXJfaG9zdCA9ICdsb2NhbGhvc3QnCi1wb3J0ID0gMTcw
MDAKLXNsYXZlbmFtZSA9ICd7fScKLXBhc3N3ZCA9ICcxMjM0Jwota2VlcGFsaXZlID0gNjAwCi11
c2VwdHkgPSAxCi0KLWFwcGxpY2F0aW9uID0gc2VydmljZS5BcHBsaWNhdGlvbignYnVpbGRzbGF2
ZScpCi1CdWlsZFNsYXZlKGJ1aWxkbWFzdGVyX2hvc3QsIHBvcnQsIHNsYXZlbmFtZSwgcGFzc3dk
LCBiYXNlZGlyLCBrZWVwYWxpdmUsIHVzZXB0eSkuc2V0U2VydmljZVBhcmVudChhcHBsaWNhdGlv
bikKLSIiIgotCi0KLWRlZiBjaGVja190Y3BfcG9ydF9vcGVuKGFkZHJlc3MsIHBvcnQpOgotICAg
IHMgPSBzb2NrZXQuc29ja2V0KCkKLSAgICB0cnk6Ci0gICAgICAgIHMuY29ubmVjdCgoYWRkcmVz
cywgcG9ydCkpCi0gICAgICAgIHJldHVybiBUcnVlCi0gICAgZXhjZXB0OgotICAgICAgICByZXR1
cm4gRmFsc2UKLQotCi1kZWYgdXBncmFkZV9kYl9uZWVkZWQobG9nKToKLSAgICB0cnk6Ci0gICAg
ICAgIHdpdGggb3Blbihsb2cpIGFzIGY6Ci0gICAgICAgICAgICBmb3IgbCBpbiBmOgotICAgICAg
ICAgICAgICAgIGlmICd1cGdyYWRlIHRoZSBkYXRhYmFzZScgaW4gbDoKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFRydWUKLSAgICBleGNlcHQ6Ci0gICAgICAgIHJldHVybiBGYWxzZQotICAg
IHJldHVybiBGYWxzZQotCi0KLWRlZiBjcmVhdGVfdGVtcGRpcih0bXBkaXI9Tm9uZSk6Ci0gICAg
aWYgdG1wZGlyIGlzIG5vdCBOb25lOgotICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcih0bXBk
aXIpOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigne30gaXMgbm90IGEgZGlyZWN0b3J5
Jy5mb3JtYXQodG1wZGlyKSkKLSAgICAgICAgcmV0dXJuIHRlbXBmaWxlLm1rZHRlbXAocHJlZml4
PW9zLnBhdGguam9pbihvcy5wYXRoLmFic3BhdGgodG1wZGlyKSwgJ3RtcCcpKQotICAgIHJldHVy
biB0ZW1wZmlsZS5ta2R0ZW1wKCkKLQotCi1kZWYgcHJpbnRfaWZfZXJyb3Jfc3Rkb3V0X3N0ZGVy
cihjbWQsIHJldGNvZGUsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9uZSwgZXh0cmFtc2c9Tm9uZSk6
Ci0gICAgaWYgcmV0Y29kZSAhPSAwOgotICAgICAgICBpZiB0eXBlKGNtZCkgPT0gdHlwZShbXSk6
Ci0gICAgICAgICAgICBjbWQgPSAnICcuam9pbihjbWQpCi0gICAgICAgIHByaW50KCdXQVJOSU5H
OiAie2NtZH0iIHJldHVybmVkIHtyZXRjb2RlfSBzdGF0dXMgY29kZScuZm9ybWF0KGNtZD1jbWQs
IHJldGNvZGU9cmV0Y29kZSkpCi0gICAgICAgIGlmIHN0ZG91dCBpcyBub3QgTm9uZToKLSAgICAg
ICAgICAgIHByaW50KHN0ZG91dCkKLSAgICAgICAgaWYgc3RkZXJyIGlzIG5vdCBOb25lOgotICAg
ICAgICAgICAgcHJpbnQoc3RkZXJyKQotICAgICAgICBpZiBleHRyYW1zZyBpcyBub3QgTm9uZToK
LSAgICAgICAgICAgIHByaW50KGV4dHJhbXNnKQotCi0KLWRlZiBzZXR1cF9tYXN0ZXJfd29ya2Rp
cihjb25maWdkaXIsIGJhc2Vfd29ya2Rpcik6Ci0gICAgbWFzdGVyX3dvcmtkaXIgPSBvcy5wYXRo
LmpvaW4oYmFzZV93b3JrZGlyLCAnbWFzdGVyJykKLSAgICBwcmludCgnQ29weWluZyBmaWxlcyBm
cm9tIHt9IHRvIHt9IC4uLicuZm9ybWF0KGNvbmZpZ2RpciwgbWFzdGVyX3dvcmtkaXIpKQotICAg
IHNodXRpbC5jb3B5dHJlZShjb25maWdkaXIsIG1hc3Rlcl93b3JrZGlyKQotICAgIHByaW50KCdH
ZW5lcmF0aW5nIGJ1aWxkYm90IGZpbGVzIGF0IHt9IC4uLicuZm9ybWF0KG1hc3Rlcl93b3JrZGly
KSkKLSAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKG1hc3Rlcl93b3JrZGlyLCAnYnVpbGRib3Qu
dGFjJyksICd3JykgYXMgZjoKLSAgICAgICAgZi53cml0ZSh0ZXN0X2J1aWxkYm90X21hc3Rlcl90
YWMpCi0gICAgbWtwd2RfY21kID0gWycuL21ha2VfcGFzc3dvcmRzX2pzb24ucHknXQotICAgIG1r
cHdkX3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKG1rcHdkX2NtZCwgY3dkPW1hc3Rlcl93b3Jr
ZGlyLAotICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJw
cm9jZXNzLlNURE9VVCkKLSAgICBzdGRvdXQsIHN0ZGVyciA9IG1rcHdkX3Byb2Nlc3MuY29tbXVu
aWNhdGUoKQotICAgIHByaW50X2lmX2Vycm9yX3N0ZG91dF9zdGRlcnIobWtwd2RfY21kLCBta3B3
ZF9wcm9jZXNzLnJldHVybmNvZGUsIHN0ZG91dCwgc3RkZXJyKQotICAgIHJldHVybiBtYXN0ZXJf
d29ya2RpcgotCi0KLWRlZiB3YWl0X2Zvcl9tYXN0ZXJfcmVhZHkobWFzdGVyX3dvcmtkaXIpOgot
ICAgIG1hc3Rlcl9yZWFkeV9jaGVja19jb3VudGVyID0gMAotICAgIHdoaWxlIFRydWU6Ci0gICAg
ICAgIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihtYXN0ZXJfd29ya2RpciwgJy5tYXN0
ZXItaXMtcmVhZHknKSk6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgbWFzdGVyX3Jl
YWR5X2NoZWNrX2NvdW50ZXIgPiA2MDoKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcign
RVJST1I6IEFib3J0aW5nIGFmdGVyIHdhaXRpbmcgNjAgc2Vjb25kcyBmb3IgdGhlIG1hc3RlciB0
byBzdGFydC4nKQotICAgICAgICBzbGVlcCgxKQotICAgICAgICBtYXN0ZXJfcmVhZHlfY2hlY2tf
Y291bnRlciArPSAxCi0KLQotZGVmIHN0YXJ0X21hc3RlcihtYXN0ZXJfd29ya2Rpcik6Ci0gICAg
IyBUaGlzIGlzIHN0YXJ0ZWQgdmlhIG11bHRpcHJvY2Vzc2luZy4gV2Ugc2V0IGEgbmV3IHByb2Nl
c3MgZ3JvdXAgaGVyZQotICAgICMgdG8gYmUgYWJsZSB0byByZWxpYWJseSBraWxsIHRoaXMgc3Vi
cHJvY2VzcyBhbmQgYWxsIG9mIGl0cyBjaGlsZCBvbiBjbGVhbi4KLSAgICBvcy5zZXRzaWQoKQot
ICAgIGJ1aWxkbWFzdGVybG9nID0gb3MucGF0aC5qb2luKG1hc3Rlcl93b3JrZGlyLCAnYnVpbGRt
YXN0ZXIubG9nJykKLSAgICBkYnVwZ3JhZGVkID0gRmFsc2UKLSAgICByZXRyeSA9IFRydWUKLSAg
ICBpZiBjaGVja190Y3BfcG9ydF9vcGVuKCdsb2NhbGhvc3QnLCA4NzEwKToKLSAgICAgICAgcHJp
bnQoJ0VSUk9SOiBUaGVyZSBpcyBzb21lIHByb2Nlc3MgYWxyZWFkeSBsaXN0ZW5pbmcgaW4gcG9y
dCA4MTcwJykKLSAgICAgICAgcmV0dXJuIDEKLSAgICB3aGlsZSByZXRyeToKLSAgICAgICAgcmV0
cnkgPSBGYWxzZQotICAgICAgICBwcmludCgnU3RhcnRpbmcgdGhlIHR3aXN0ZCBwcm9jZXNzIC4u
LicpCi0gICAgICAgIHR3aXN0ZF9jbWQgPSBbJ3R3aXN0ZCcsICctbCcsIGJ1aWxkbWFzdGVybG9n
LCAnLW5veScsICdidWlsZGJvdC50YWMnXQotICAgICAgICB0d2lzdGRfcHJvY2VzcyA9IHN1YnBy
b2Nlc3MuUG9wZW4odHdpc3RkX2NtZCwgY3dkPW1hc3Rlcl93b3JrZGlyLAotICAgICAgICAgICAg
ICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQp
Ci0gICAgICAgIHdoaWxlIHR3aXN0ZF9wcm9jZXNzLnBvbGwoKSBpcyBOb25lOgotICAgICAgICAg
ICAgaWYgY2hlY2tfdGNwX3BvcnRfb3BlbignbG9jYWxob3N0JywgODcxMCk6Ci0gICAgICAgICAg
ICAgICAgcHJpbnQoJ1Rlc3QgYnVpbGRtYXN0ZXIgcmVhZHkhLlxuXG4nCi0gICAgICAgICAgICAg
ICAgICAgICAgKyAnIC0gU2VlIGJ1aWxkbWFzdGVyIGxvZzpcbicKLSAgICAgICAgICAgICAgICAg
ICAgICArICcgICAgIHRhaWwgLWYge31cbicuZm9ybWF0KGJ1aWxkbWFzdGVybG9nKQotICAgICAg
ICAgICAgICAgICAgICAgICsgJyAtIE9wZW4gYSBicm93c2VyIHRvOlxuJwotICAgICAgICAgICAg
ICAgICAgICAgICsgJyAgICAgaHR0cDovL2xvY2FsaG9zdDo4NzEwXG4nCi0gICAgICAgICAgICAg
ICAgICAgICAgKyAnIC0gQ3JlZGVudGlhbHMgZm9yIHRyaWdnZXJpbmcgbWFudWFsIGJ1aWxkczpc
bicKLSAgICAgICAgICAgICAgICAgICAgICArICcgICAgIGxvZ2luOiAgICAgY29tbWl0dGVyQHdl
YmtpdC5vcmdcbicKLSAgICAgICAgICAgICAgICAgICAgICArICcgICAgIHBhc3N3b3JkOiAgY29t
bWl0dGVycGFzc3dvcmRcbicpCi0gICAgICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9p
bihtYXN0ZXJfd29ya2RpciwgJy5tYXN0ZXItaXMtcmVhZHknKSwgJ3cnKSBhcyBmOgotICAgICAg
ICAgICAgICAgICAgICBmLndyaXRlKCdyZWFkeScpCi0gICAgICAgICAgICAgICAgdHdpc3RkX3By
b2Nlc3Mud2FpdCgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgICAgIHNsZWVw
KDEpCi0gICAgICAgIHN0ZG91dCwgc3RkZXJyID0gdHdpc3RkX3Byb2Nlc3MuY29tbXVuaWNhdGUo
KQotICAgICAgICBpZiB0d2lzdGRfcHJvY2Vzcy5yZXR1cm5jb2RlID09IDAgYW5kIHVwZ3JhZGVf
ZGJfbmVlZGVkKGJ1aWxkbWFzdGVybG9nKSBhbmQgbm90IGRidXBncmFkZWQ6Ci0gICAgICAgICAg
ICByZXRyeSA9IFRydWUKLSAgICAgICAgICAgIGRidXBncmFkZWQgPSBUcnVlCi0gICAgICAgICAg
ICBwcmludCgnVXBncmFkaW5nIHRoZSBkYXRhYmFzZSAuLi4nKQotICAgICAgICAgICAgdXBncmFk
ZV9jbWQgPSBbJ2J1aWxkYm90JywgJ3VwZ3JhZGUtbWFzdGVyJywgbWFzdGVyX3dvcmtkaXJdCi0g
ICAgICAgICAgICB1cGdyYWRlX3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKHVwZ3JhZGVfY21k
LCBjd2Q9bWFzdGVyX3dvcmtkaXIsCi0gICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9j
ZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKLSAgICAgICAgICAgIHN0ZG91dCwg
c3RkZXJyID0gdXBncmFkZV9wcm9jZXNzLmNvbW11bmljYXRlKCkKLSAgICAgICAgICAgIHByaW50
X2lmX2Vycm9yX3N0ZG91dF9zdGRlcnIodXBncmFkZV9jbWQsIHVwZ3JhZGVfcHJvY2Vzcy5yZXR1
cm5jb2RlLCBzdGRvdXQsIHN0ZGVycikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50
X2lmX2Vycm9yX3N0ZG91dF9zdGRlcnIodHdpc3RkX2NtZCwgdHdpc3RkX3Byb2Nlc3MucmV0dXJu
Y29kZSwgc3Rkb3V0LCBzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdDaGVjayB0aGUgbG9nIGF0IHt9Jy5mb3JtYXQoYnVpbGRtYXN0ZXJsb2cpKQotICAg
IHJldHVybiAwCi0KLQotZGVmIGdldF9saXN0X3dvcmtlcnMobWFzdGVyX3dvcmtkaXIpOgotICAg
IHBhc3N3b3JkX2xpc3QgPSBvcy5wYXRoLmpvaW4obWFzdGVyX3dvcmtkaXIsICdwYXNzd29yZHMu
anNvbicpCi0gICAgd2l0aCBvcGVuKHBhc3N3b3JkX2xpc3QpIGFzIGY6Ci0gICAgICAgIHBhc3N3
b3JkcyA9IGpzb24ubG9hZChmKQotICAgIGxpc3Rfd29ya2VycyA9IFtdCi0gICAgZm9yIHdvcmtl
ciBpbiBwYXNzd29yZHM6Ci0gICAgICAgIGxpc3Rfd29ya2Vycy5hcHBlbmQoc3RyKHdvcmtlcikp
Ci0gICAgcmV0dXJuIGxpc3Rfd29ya2VycwotCi0KLWRlZiBzdGFydF93b3JrZXIoYmFzZV93b3Jr
ZGlyLCB3b3JrZXIpOgotICAgICMgVGhpcyBpcyBzdGFydGVkIHZpYSBtdWx0aXByb2Nlc3Npbmcu
IFdlIHNldCBhIG5ldyBwcm9jZXNzIGdyb3VwIGhlcmUKLSAgICAjIHRvIGJlIGFibGUgdG8gcmVs
aWFibHkga2lsbCB0aGlzIHN1YnByb2Nlc3MgYW5kIGFsbCBvZiBpdHMgY2hpbGQgb24gY2xlYW4u
Ci0gICAgb3Muc2V0c2lkKCkKLSAgICB3b3JrZXJfd29ya2RpciA9IG9zLnBhdGguam9pbihiYXNl
X3dvcmtkaXIsIHdvcmtlcikKLSAgICBvcy5ta2Rpcih3b3JrZXJfd29ya2RpcikKLSAgICB3aXRo
IG9wZW4ob3MucGF0aC5qb2luKHdvcmtlcl93b3JrZGlyLCAnYnVpbGRib3QudGFjJyksICd3Jykg
YXMgZjoKLSAgICAgICAgZi53cml0ZSh3b3JrZXJfYnVpbGRib3RfbWFzdGVyX3RhYy5mb3JtYXQo
d29ya2VyKSkKLSAgICB0d2lzdGRfY21kID0gWyd0d2lzdGQnLCAnLWwnLCAnd29ya2VyLmxvZycs
ICctbm95JywgJ2J1aWxkYm90LnRhYyddCi0gICAgdHdpc3RkX3dvcmtlcl9wcm9jZXNzID0gc3Vi
cHJvY2Vzcy5Qb3Blbih0d2lzdGRfY21kLCBjd2Q9d29ya2VyX3dvcmtkaXIsCi0gICAgICAgIHN0
ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKLSAgICB0cnk6
Ci0gICAgICAgIHN0ZG91dCwgc3RkZXJyID0gdHdpc3RkX3dvcmtlcl9wcm9jZXNzLmNvbW11bmlj
YXRlKCkKLSAgICBleGNlcHQ6Ci0gICAgICAgIHR3aXN0ZF93b3JrZXJfcHJvY2Vzcy5raWxsKCkK
LSAgICAgICAgcmV0dXJuCi0gICAgcHJpbnRfaWZfZXJyb3Jfc3Rkb3V0X3N0ZGVycih0d2lzdGRf
Y21kLCB0d2lzdGRfd29ya2VyX3Byb2Nlc3MucmV0dXJuY29kZSwgc3Rkb3V0LCBzdGRlcnIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ2hlY2sgdGhlIGxvZyBhdCB7fScuZm9y
bWF0KG9zLnBhdGguam9pbih3b3JrZXJfd29ya2RpciwgJ3dvcmtlci5sb2cnKSkpCi0KLQotZGVm
IGNsZWFuKHRlbXBfZGlyKToKLSAgICBpZiBvcy5wYXRoLmlzZGlyKHRlbXBfZGlyKToKLSAgICAg
ICAgcHJpbnQoJ1xuXG5DbGVhbmluZyB7fSAuLi4gXG4nLmZvcm1hdCh0ZW1wX2RpcikpCi0gICAg
ICAgICMgc2h1dGlsLnJtdHJlZSBjYW4gZmFpbCBpZiB3ZSBob2xkIGFuIG9wZW4gZmlsZSBkZXNj
cmlwdG9yIG9uIHRlbXBfZGlyCi0gICAgICAgICMgKHdoaWNoIGlzIHZlcnkgbGlrZWx5IHdoZW4g
Y2xlYW5pbmcpIG9yIGlmIHRlbXBfZGlyIGlzIGEgTkZTIG1vdW50LgotICAgICAgICAjIFVzZSBy
bSBpbnN0ZWFkIHRoYXQgYWx3YXlzIHdvcmtzLgotICAgICAgICBybSA9IHN1YnByb2Nlc3MuUG9w
ZW4oWydybScsICctZnInLCB0ZW1wX2Rpcl0pCi0gICAgICAgIHJtLndhaXQoKQotCi0KLWRlZiBj
bWRfZXhpc3RzKGNtZCk6Ci0gICAgcmV0dXJuIGFueShvcy5hY2Nlc3Mob3MucGF0aC5qb2luKHBh
dGgsIGNtZCksIG9zLlhfT0spCi0gICAgICAgICAgICAgICBmb3IgcGF0aCBpbiBvcy5lbnZpcm9u
WydQQVRIJ10uc3BsaXQob3MucGF0aHNlcCkpCi0KLQotZGVmIGNoZWNrX2J1aWxkYm90X2luc3Rh
bGxlZCgpOgotICAgIGlmIGNtZF9leGlzdHMoJ3R3aXN0ZCcpIGFuZCBjbWRfZXhpc3RzKCdidWls
ZGJvdCcpOgotICAgICAgICByZXR1cm4KLSAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0J1aWxkYm90
IGlzIG5vdCBpbnN0YWxsZWQuJykKLQotCi1kZWYgc2V0dXBfdmlydHVhbGVudihiYXNlX3dvcmtk
aXJfdGVtcCk6Ci0gICAgaWYgY21kX2V4aXN0cygndmlydHVhbGVudicpOgotICAgICAgICBwcmlu
dCgnU2V0dGluZyB1cCB2aXJ0dWFsZW52IGF0IHt9IC4uLiAnLmZvcm1hdChiYXNlX3dvcmtkaXJf
dGVtcCkpCi0gICAgICAgIHZpcnR1YWxlbnZfY21kID0gWyd2aXJ0dWFsZW52JywgJy1wJywgJ3B5
dGhvbjInLCAndmVudiddCi0gICAgICAgIHZpcnR1YWxlbnZfcHJvY2VzcyA9IHN1YnByb2Nlc3Mu
UG9wZW4odmlydHVhbGVudl9jbWQsIGN3ZD1iYXNlX3dvcmtkaXJfdGVtcCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJ
UEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKLSAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSB2
aXJ0dWFsZW52X3Byb2Nlc3MuY29tbXVuaWNhdGUoKQotICAgICAgICBwcmludF9pZl9lcnJvcl9z
dGRvdXRfc3RkZXJyKHZpcnR1YWxlbnZfY21kLCB2aXJ0dWFsZW52X3Byb2Nlc3MucmV0dXJuY29k
ZSwgc3Rkb3V0LCBzdGRlcnIpCi0gICAgICAgIHZpcnR1YWxlbnZfYmluZGlyID0gb3MucGF0aC5q
b2luKGJhc2Vfd29ya2Rpcl90ZW1wLCAndmVudicsICdiaW4nKQotICAgICAgICB2aXJ0dWFsZW52
X3BpcCA9IG9zLnBhdGguam9pbih2aXJ0dWFsZW52X2JpbmRpciwgJ3BpcCcpCi0gICAgICAgIGlm
IG5vdCBvcy5hY2Nlc3ModmlydHVhbGVudl9waXAsIG9zLlhfT0spOgotICAgICAgICAgICAgcHJp
bnQoJ1NvbWV0aGluZyB3ZW50IHdyb25nIHNldHRpbmcgdXAgdmlydHVhbGVudicKLSAgICAgICAg
ICAgICAgICAgICdUcnlpbmcgdG8gY29udGludWUgdXNpbmcgdGhlIHN5c3RlbSB2ZXJzaW9uIG9m
IGJ1aWxkYm90JykKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBwcmludCgnU2V0dGluZyB1
cCBidWlsZGJvdCBkZXBlbmRlbmNpZXMgb24gdGhlIHZpcnR1YWxlbnYgLi4uICcpCi0gICAgICAg
ICMgVGhlIGlkZWEgaXMgdG8gaW5zdGFsbCB0aGUgdmVyeSBzYW1lIHZlcnNpb24gb2YgYnVpbGRi
b3QgYW5kIGl0cwotICAgICAgICAjIGRlcGVuZGVuY2llcyB0aGFuIHRoZSBvbmVzIHVzZWQgZm9y
IHJ1bm5pbmcgaHR0cHM6Ly9idWlsZC53ZWJraXQub3JnL2Fib3V0Ci0gICAgICAgIHBpcF9jbWQg
PSBbdmlydHVhbGVudl9waXAsICdpbnN0YWxsJywKLSAgICAgICAgICAgICAgICAgICAgJ2J1aWxk
Ym90PT0wLjguNnAxJywKLSAgICAgICAgICAgICAgICAgICAgJ2J1aWxkYm90LXNsYXZlPT0wLjgu
NnAxJywKLSAgICAgICAgICAgICAgICAgICAgJ3R3aXN0ZWQ9PTEyLjEuMCcsCi0gICAgICAgICAg
ICAgICAgICAgICdqaW5qYTI9PTIuNicsCi0gICAgICAgICAgICAgICAgICAgICdzcWxhbGNoZW15
PT0wLjcuOCcsCi0gICAgICAgICAgICAgICAgICAgICdzcWxhbGNoZW15LW1pZ3JhdGU9PTAuMTIu
MCddCi0gICAgICAgIHBpcF9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihwaXBfY21kLCBjd2Q9
YmFzZV93b3JrZGlyX3RlbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCi0gICAg
ICAgIHN0ZG91dCwgc3RkZXJyID0gcGlwX3Byb2Nlc3MuY29tbXVuaWNhdGUoKQotICAgICAgICBw
cmludF9pZl9lcnJvcl9zdGRvdXRfc3RkZXJyKHBpcF9jbWQsIHBpcF9wcm9jZXNzLnJldHVybmNv
ZGUsIHN0ZG91dCwgc3RkZXJyKQotICAgICAgICBvcy5lbnZpcm9uWydQQVRIJ10gPSB2aXJ0dWFs
ZW52X2JpbmRpciArICc6JyArIG9zLmVudmlyb25bJ1BBVEgnXQotICAgICAgICByZXR1cm4KLSAg
ICBwcmludCgnV0FSTklORzogdmlydHVhbGVudiBub3QgaW5zdGFsbGVkLiAnCi0gICAgICAgICAg
J1RyeWluZyB0byBjb250aW51ZSB1c2luZyB0aGUgc3lzdGVtIHZlcnNpb24gb2YgYnVpbGRib3Qn
KQotCi0KLWRlZiBjb25maWdkaXJfaXNfdmFsaWQoY29uZmlnZGlyKToKLSAgICByZXR1cm4ob3Mu
cGF0aC5pc2Rpcihjb25maWdkaXIpIGFuZAotICAgICAgICAgICBvcy5wYXRoLmlzZmlsZShvcy5w
YXRoLmpvaW4oY29uZmlnZGlyLCAnY29uZmlnLmpzb24nKSkgYW5kCi0gICAgICAgICAgIG9zLnBh
dGguaXNmaWxlKG9zLnBhdGguam9pbihjb25maWdkaXIsICdtYXN0ZXIuY2ZnJykpIGFuZAotICAg
ICAgICAgICBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKGNvbmZpZ2RpciwgJ21ha2VfcGFzc3dvcmRz
X2pzb24ucHknKSwgb3MuWF9PSykpCi0KLQotZGVmIG1haW4oY29uZmlnZGlyLCBiYXNldGVtcGRp
cj1Ob25lLCBub19jbGVhbj1GYWxzZSwgbm9fd29ya2Vycz1GYWxzZSwgdXNlX3N5c3RlbV92ZXJz
aW9uPUZhbHNlKToKLSAgICBjb25maWdkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5yZWFs
cGF0aChjb25maWdkaXIpKQotICAgIGlmIG5vdCBjb25maWdkaXJfaXNfdmFsaWQoY29uZmlnZGly
KToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVGhlIGNvbmZpZ2RpciB7fSBkb250IGNvbnRh
aW5zIHRoZSBidWlsZG1hc3RlciBmaWxlcyBleHBlY3RlZCBieSB0aGlzIHNjcmlwdCcuZm9ybWF0
KGNvbmZpZ2RpcikpCi0gICAgYmFzZV93b3JrZGlyX3RlbXAgPSBvcy5wYXRoLmFic3BhdGgob3Mu
cGF0aC5yZWFscGF0aChjcmVhdGVfdGVtcGRpcihiYXNldGVtcGRpcikpKQotICAgIGlmIGJhc2Vf
d29ya2Rpcl90ZW1wLnN0YXJ0c3dpdGgoY29uZmlnZGlyKToKLSAgICAgICAgcmFpc2UgVmFsdWVF
cnJvcignVGhlIHRlbXBvcmFsIHdvcmtpbmcgZGlyZWN0b3J5IHt9IGNhbnQgYmUgbG9jYXRlZCBp
bnNpZGUgY29uZmlnZGlyIHt9Jy5mb3JtYXQoYmFzZV93b3JrZGlyX3RlbXAsIGNvbmZpZ2Rpcikp
Ci0gICAgdHJ5OgotICAgICAgICBpZiBub3QgdXNlX3N5c3RlbV92ZXJzaW9uOgotICAgICAgICAg
ICAgc2V0dXBfdmlydHVhbGVudihiYXNlX3dvcmtkaXJfdGVtcCkKLSAgICAgICAgY2hlY2tfYnVp
bGRib3RfaW5zdGFsbGVkKCkKLSAgICAgICAgbWFzdGVyX3dvcmtkaXIgPSBzZXR1cF9tYXN0ZXJf
d29ya2Rpcihjb25maWdkaXIsIGJhc2Vfd29ya2Rpcl90ZW1wKQotICAgICAgICBtYXN0ZXJfcnVu
bmVyID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXN0YXJ0X21hc3RlciwgYXJncz0o
bWFzdGVyX3dvcmtkaXIsKSkKLSAgICAgICAgbWFzdGVyX3J1bm5lci5zdGFydCgpCi0gICAgICAg
IHdhaXRfZm9yX21hc3Rlcl9yZWFkeShtYXN0ZXJfd29ya2RpcikKLSAgICAgICAgaWYgbm9fd29y
a2VyczoKLSAgICAgICAgICAgIHByaW50KCcgLSBUbyBtYW51YWxseSBhdHRhY2ggYSBidWlsZCB3
b3JrZXIgdXNlIHRoaXMgaW5mbzpcbicKLSAgICAgICAgICAgICAgICAgICsgJyAgICAgVENQIHBv
cnQgZm9yIHRoZSB3b3JrZXItdG8tbWFzdGVyIGNvbm5lY3Rpb246IDE3MDAwXG4nCi0gICAgICAg
ICAgICAgICAgICArICcgICAgIHdvcmtlci1pZDogdGhlIG9uZSBkZWZpbmVkIGF0IHt9XG4nLmZv
cm1hdChvcy5wYXRoLmpvaW4obWFzdGVyX3dvcmtkaXIsICdwYXNzd29yZHMuanNvbicpKQotICAg
ICAgICAgICAgICAgICAgKyAnICAgICBwYXNzd29yZDogIDEyMzRcbicpCi0gICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICB3b3JrZXJfcnVubmVycyA9IFtdCi0gICAgICAgICAgICBmb3Igd29ya2Vy
IGluIGdldF9saXN0X3dvcmtlcnMobWFzdGVyX3dvcmtkaXIpOgotICAgICAgICAgICAgICAgIHdv
cmtlcl9ydW5uZXIgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9c3RhcnRfd29ya2Vy
LCBhcmdzPShiYXNlX3dvcmtkaXJfdGVtcCwgd29ya2VyLCkpCi0gICAgICAgICAgICAgICAgd29y
a2VyX3J1bm5lci5zdGFydCgpCi0gICAgICAgICAgICAgICAgd29ya2VyX3J1bm5lcnMuYXBwZW5k
KHdvcmtlcl9ydW5uZXIpCi0gICAgICAgICAgICBwcmludCgnIC0gV29ya2VycyBzdGFydGVkIS5c
bicKLSAgICAgICAgICAgICAgICAgICsgJyAgICAgQ2hlY2sgdGhlIGxvZyBmb3IgZWFjaCBvbmUg
YXQge30vJHt3b3JrZXItbmFtZS1pZH0vd29ya2VyLmxvZ1xuJy5mb3JtYXQoYmFzZV93b3JrZGly
X3RlbXApCi0gICAgICAgICAgICAgICAgICArICcgICAgIHRhaWwgLWYge30vKi93b3JrZXIubG9n
XG4nLmZvcm1hdChiYXNlX3dvcmtkaXJfdGVtcCkpCi0gICAgICAgICAgICBmb3Igd29ya2VyX3J1
bm5lciBpbiB3b3JrZXJfcnVubmVyczoKLSAgICAgICAgICAgICAgICB3b3JrZXJfcnVubmVyLmpv
aW4oKQotICAgICAgICBtYXN0ZXJfcnVubmVyLmpvaW4oKQotICAgIGV4Y2VwdDoKLSAgICAgICAg
dHJhY2ViYWNrLnByaW50X2V4YygpCi0gICAgZmluYWxseToKLSAgICAgICAgdHJ5OgotICAgICAg
ICAgICAgIyBUaGUgY2hpbGRyZW4gbWF5IGV4aXQgYmV0d2VlbiB0aGUgY2hlY2sgYW5kIHRoZSBr
aWxsIGNhbGwuCi0gICAgICAgICAgICAjIElnbm9yZSBhbnkgZXhjZXB0aW9uIHJhaXNlZCBoZXJl
LgotICAgICAgICAgICAgZm9yIGMgaW4gbXVsdGlwcm9jZXNzaW5nLmFjdGl2ZV9jaGlsZHJlbigp
OgotICAgICAgICAgICAgICAgICMgU2VuZCB0aGUgc2lnbmFsIHRvIHRoZSB3aG9sZSBwcm9jZXNz
IGdyb3VwLgotICAgICAgICAgICAgICAgICMgT3RoZXJ3aXNlIHNvbWUgdHdpc3RkIHN1Yi1jaGls
ZHMgY2FuIHJlbWFpbiBhbGl2ZS4KLSAgICAgICAgICAgICAgICBvcy5raWxscGcob3MuZ2V0cGdp
ZChjLnBpZCksIHNpZ25hbC5TSUdLSUxMKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBw
YXNzCi0gICAgICAgIGlmIG5vdCBub19jbGVhbjoKLSAgICAgICAgICAgIGNsZWFuKGJhc2Vfd29y
a2Rpcl90ZW1wKQotICAgICAgICBzeXMuZXhpdCgwKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21h
aW5fXyc6Ci0gICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQotICAgIHBhcnNl
ci5hZGRfYXJndW1lbnQoJy0tY29uZmlnLWRpcicsIGhlbHA9J1BhdGggdG8gdGhlIGRpcmVjdG9y
eSBvZiB0aGUgYnVpbGQgbWFzdGVyIGNvbmZpZyBmaWxlcy4gJwotICAgICAgICAgICAgICAgICAg
ICAgICAgJ0RlZmF1bHMgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGlzIHNjcmlwdCBpcyBsb2Nh
dGVkLicsCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdjb25maWdkaXInLCB0eXBlPXN0
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9b3MucGF0aC5kaXJuYW1lKF9fZmls
ZV9fKSkKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJhc2UtdGVtcC1kaXInLCBoZWxwPSdQ
YXRoIHdoZXJlIHRoZSB0ZW1wb3JhbCB3b3JraW5nIGRpcmVjdG9yeSB3aWxsIGJlIGNyZWF0ZWQu
ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICdOb3RlOiBUbyB0cmlnZ2VyIHRlc3QgYnVpbGRz
IHdpdGggdGhlIHRlc3Qgd29ya2VycyB5b3UgbmVlZCBlbm91Z2ggZnJlZSBzcGFjZSBvbiB0aGF0
IHBhdGguJywKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J2Jhc2V0ZW1wZGlyJywgZGVm
YXVsdD1Ob25lLCB0eXBlPXN0cikKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW5vLWNsZWFu
JywgaGVscD0nRG8gbm90IGNsZWFuIHRoZSB0ZW1wb3JhbCB3b3JraW5nIGRpciBvbiBleGl0Lics
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdub19jbGVhbicsIGFjdGlvbj0nc3RvcmVf
dHJ1ZScpCi0gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1uby13b3JrZXJzJywgaGVscD0nRG8g
bm90IHN0YXJ0IHRoZSB0ZXN0IHdvcmtlcnMuJywKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3Q9J25vX3dvcmtlcnMnLCBhY3Rpb249J3N0b3JlX3RydWUnKQotICAgIHBhcnNlci5hZGRfYXJn
dW1lbnQoJy0tdXNlLXN5c3RlbS12ZXJzaW9uJywgaGVscD0nSW5zdGVhZCBvZiBzZXR0aW5nIHVw
IGEgdmlydHVhbGVudiB3aXRoIHRoZSBidWlsZGJvdCB2ZXJzaW9uICcKLSAgICAgICAgICAgICAg
ICAgICAgICAgICd1c2VkIGJ5IGJ1aWxkLndlYmtpdC5vcmcsIHVzZSB0aGUgYnVpbGRib3QgdmVy
c2lvbiBpbnN0YWxsZWQgb24gdGhpcyBzeXN0ZW0uJywKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3Q9J3VzZV9zeXN0ZW1fdmVyc2lvbicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCi0gICAgYXJn
cyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLSAgICBtYWluKGFyZ3MuY29uZmlnZGlyLCBhcmdzLmJh
c2V0ZW1wZGlyLCBhcmdzLm5vX2NsZWFuLCBhcmdzLm5vX3dvcmtlcnMsIGFyZ3MudXNlX3N5c3Rl
bV92ZXJzaW9uKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ0lTdXBwb3J0L2V3cy1idWlsZC9sb2FkQ29u
ZmlnLnB5IGIvVG9vbHMvQ0lTdXBwb3J0L2V3cy1idWlsZC9sb2FkQ29uZmlnLnB5CmluZGV4IDY5
ZjY0NzljMjczNWU1ZTUyMGIwMTcyMGFjNmFiZmU2MTBiMTBiOWYuLjk5YjhiMWEyMDg2OWJiMzI1
YmIxMjkyMWE0ZDc5NDY5ZDZhMDNjYjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NJU3VwcG9ydC9ld3Mt
YnVpbGQvbG9hZENvbmZpZy5weQorKysgYi9Ub29scy9DSVN1cHBvcnQvZXdzLWJ1aWxkL2xvYWRD
b25maWcucHkKQEAgLTI3LDYgKzI3LDcgQEAgaW1wb3J0IHJlCiAKIGZyb20gYnVpbGRib3Quc2No
ZWR1bGVyIGltcG9ydCBBbnlCcmFuY2hTY2hlZHVsZXIsIFBlcmlvZGljLCBEZXBlbmRlbnQsIFRy
aWdnZXJhYmxlLCBOaWdodGx5CiBmcm9tIGJ1aWxkYm90LnNjaGVkdWxlcnMudHJ5c2NoZWQgaW1w
b3J0IFRyeV9Vc2VycGFzcworZnJvbSBidWlsZGJvdC5zY2hlZHVsZXJzLmZvcmNlc2NoZWQgaW1w
b3J0IEZvcmNlU2NoZWR1bGVyLCBTdHJpbmdQYXJhbWV0ZXIsIEZpeGVkUGFyYW1ldGVyLCBDb2Rl
YmFzZVBhcmFtZXRlcgogZnJvbSBidWlsZGJvdC53b3JrZXIgaW1wb3J0IFdvcmtlcgogZnJvbSBi
dWlsZGJvdC51dGlsIGltcG9ydCBpZGVudGlmaWVycyBhcyBidWlsZGJvdF9pZGVudGlmaWVycwog
CkBAIC04NCw2ICs4NSwyMyBAQCBkZWYgbG9hZEJ1aWxkZXJDb25maWcoYywgaXNfdGVzdF9tb2Rl
X2VuYWJsZWQ9RmFsc2UsIG1hc3Rlcl9wcmVmaXhfcGF0aD0nLi8nKToKICAgICAgICAgICAgIHNj
aGVkdWxlclsndXNlcnBhc3MnXSA9IFsob3MuZ2V0ZW52KCdCVUlMREJPVF9UUllfVVNFUk5BTUUn
LCAnc2FtcGxldXNlcicpLCBvcy5nZXRlbnYoJ0JVSUxEQk9UX1RSWV9QQVNTV09SRCcsICdzYW1w
bGVwYXNzJykpXQogICAgICAgICBjWydzY2hlZHVsZXJzJ10uYXBwZW5kKHNjaGVkdWxlckNsYXNz
KCoqc2NoZWR1bGVyKSkKIAorICAgIGlmIGlzX3Rlc3RfbW9kZV9lbmFibGVkOgorICAgICAgICBm
b3JjZVNjaGVkdWxlciA9IEZvcmNlU2NoZWR1bGVyKAorICAgICAgICAgICAgbmFtZT0iZm9yY2Vf
YnVpbGQiLAorICAgICAgICAgICAgYnV0dG9uTmFtZT0iRm9yY2UgQnVpbGQiLAorICAgICAgICAg
ICAgYnVpbGRlck5hbWVzPVtzdHIoYnVpbGRlclsnbmFtZSddKSBmb3IgYnVpbGRlciBpbiBjb25m
aWdbJ2J1aWxkZXJzJ11dLAorICAgICAgICAgICAgIyBEaXNhYmxlIGRlZmF1bHQgZW5hYmxlZCBp
bnB1dCBmaWVsZHM6IGJyYW5jaCwgcmVwb3NpdG9yeSwgcHJvamVjdCwgYWRkaXRpb25hbCBwcm9w
ZXJ0aWVzCisgICAgICAgICAgICBjb2RlYmFzZXM9W0NvZGViYXNlUGFyYW1ldGVyKCIiLAorICAg
ICAgICAgICAgICAgICAgICAgICByZXZpc2lvbj1GaXhlZFBhcmFtZXRlcihuYW1lPSJyZXZpc2lv
biIsIGRlZmF1bHQ9IiIpLAorICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5PUZpeGVk
UGFyYW1ldGVyKG5hbWU9InJlcG9zaXRvcnkiLCBkZWZhdWx0PSIiKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgcHJvamVjdD1GaXhlZFBhcmFtZXRlcihuYW1lPSJwcm9qZWN0IiwgZGVmYXVsdD0i
IiksCisgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaD1GaXhlZFBhcmFtZXRlcihuYW1lPSJi
cmFuY2giLCBkZWZhdWx0PSIiKSldLAorICAgICAgICAgICAgIyBBZGQgY3VzdG9tIHByb3BlcnRp
ZXMgbmVlZGVkCisgICAgICAgICAgICBwcm9wZXJ0aWVzPVtTdHJpbmdQYXJhbWV0ZXIobmFtZT0i
cGF0Y2hfaWQiLCBsYWJlbD0iUGF0Y2ggYXR0YWNobWVudCBpZCBudW1iZXIgKG5vdCBidWcgbnVt
YmVyKSIsIHJlcXVpcmVkPVRydWUsIG1heHNpemU9NyksCisgICAgICAgICAgICAgICAgICAgICAg
ICBTdHJpbmdQYXJhbWV0ZXIobmFtZT0iZXdzX3JldmlzaW9uIiwgbGFiZWw9IldlYktpdCBnaXQg
c2hhMSBoYXNoIHRvIGNoZWNrb3V0IGJlZm9yZSB0cnlpbmcgcGF0Y2ggKG9wdGlvbmFsKSIsIHJl
cXVpcmVkPUZhbHNlLCBtYXhzaXplPTQwKV0sCisgICAgICAgICkKKyAgICAgICAgY1snc2NoZWR1
bGVycyddLmFwcGVuZChmb3JjZVNjaGVkdWxlcikKKwogCiBkZWYgcHJpb3JpdGl6ZUJ1aWxkZXJz
KGJ1aWxkbWFzdGVyLCBidWlsZGVycyk6CiAgICAgIyBQcmlvcml0aXplIGJ1aWxkZXIgcXVldWVz
IG92ZXIgdGVzdGVyIHF1ZXVlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ0lTdXBwb3J0L2V3cy1idWls
ZC9zdGVwcy5weSBiL1Rvb2xzL0NJU3VwcG9ydC9ld3MtYnVpbGQvc3RlcHMucHkKaW5kZXggYTk2
MDEyMjkyNDkzYjFhZGJlZjljNzM0YTA0MWQ2Y2VmYzM1NWFjOS4uNjAzY2I5YTI2ZGIxZDY5MDRh
Nzg1YjExMjZiZWZjMDAwYjk5ZTIxNiAxMDA2NDQKLS0tIGEvVG9vbHMvQ0lTdXBwb3J0L2V3cy1i
dWlsZC9zdGVwcy5weQorKysgYi9Ub29scy9DSVN1cHBvcnQvZXdzLWJ1aWxkL3N0ZXBzLnB5CkBA
IC0zMTQsNyArMzE0LDEwIEBAIGNsYXNzIEFwcGx5UGF0Y2goc2hlbGwuU2hlbGxDb21tYW5kLCBD
b21wb3NpdGVTdGVwTWl4aW4pOgogICAgIGRlZiBzdGFydChzZWxmKToKICAgICAgICAgcGF0Y2gg
PSBzZWxmLl9nZXRfcGF0Y2goKQogICAgICAgICBpZiBub3QgcGF0Y2g6Ci0gICAgICAgICAgICBz
ZWxmLmZpbmlzaGVkKEZBSUxVUkUpCisgICAgICAgICAgICAjIEZvcmNlZCBidWlsZCwgZG9uJ3Qg
aGF2ZSBwYXRjaF9pZCByYXcgZGF0YSBvbiB0aGUgcmVxdWVzdCwgbmVlZCB0byBmZWNoIGl0Lgor
ICAgICAgICAgICAgcGF0Y2hfaWQgPSBzZWxmLmdldFByb3BlcnR5KCdwYXRjaF9pZCcsICcnKQor
ICAgICAgICAgICAgc2VsZi5jb21tYW5kID0gWycvYmluL3NoJywgJy1jJywgJ2N1cmwgLUwgImh0
dHBzOi8vYnVncy53ZWJraXQub3JnL2F0dGFjaG1lbnQuY2dpP2lkPXt9IiAtbyAuYnVpbGRib3Qt
ZGlmZiAmJiB7fScuZm9ybWF0KHBhdGNoX2lkLCAnICcuam9pbihzZWxmLmNvbW1hbmQpKV0KKyAg
ICAgICAgICAgIHNoZWxsLlNoZWxsQ29tbWFuZC5zdGFydChzZWxmKQogICAgICAgICAgICAgcmV0
dXJuIE5vbmUKIAogICAgICAgICBwYXRjaF9yZXZpZXdlcl9uYW1lID0gc2VsZi5nZXRQcm9wZXJ0
eSgncGF0Y2hfcmV2aWV3ZXJfZnVsbF9uYW1lJywgJycpCmRpZmYgLS1naXQgYS9Ub29scy9DSVN1
cHBvcnQvc3RhcnQtYnVpbGRib3Qtc2VydmVyLXRlc3QgYi9Ub29scy9DSVN1cHBvcnQvc3RhcnQt
YnVpbGRib3Qtc2VydmVyLXRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDYxY2I1YmUzMmFkMDFhZWNmNDA2NjNj
NGYxZDc4MTc5YTMyNGIyMgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0NJU3VwcG9ydC9zdGFy
dC1idWlsZGJvdC1zZXJ2ZXItdGVzdApAQCAtMCwwICsxLDM5OCBAQAorIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uMworIworIyBDb3B5cmlnaHQgKEMpIDIwMTcsIDIwMjEgSWdhbGlhIFMuTC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworaW1w
b3J0IHN5cworaW1wb3J0IHNpZ25hbAoraW1wb3J0IG9zCitpbXBvcnQgYXJncGFyc2UKK2ltcG9y
dCBzdWJwcm9jZXNzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzb2Nr
ZXQKK2ltcG9ydCBqc29uCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5n
Citmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCisKK2J1aWxkYm90X3NlcnZlcl90YWMgPSAiIiIKK2lt
cG9ydCBvcworZnJvbSB0d2lzdGVkLmFwcGxpY2F0aW9uIGltcG9ydCBzZXJ2aWNlCitmcm9tIGJ1
aWxkYm90Lm1hc3RlciBpbXBvcnQgQnVpbGRNYXN0ZXIKKworYmFzZWRpciA9IG9zLnBhdGguZGly
bmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSkKK2NvbmZpZ2ZpbGUgPSByJyUoY29uZmln
X2ZpbGUpcycKKworYXBwbGljYXRpb24gPSBzZXJ2aWNlLkFwcGxpY2F0aW9uKCdidWlsZG1hc3Rl
cicpCitCdWlsZE1hc3RlcihiYXNlZGlyLCBjb25maWdmaWxlKS5zZXRTZXJ2aWNlUGFyZW50KGFw
cGxpY2F0aW9uKQorIiIiCisKK2J1aWxkYm90X3dvcmtlcl90YWMgPSAiIiIKK2ltcG9ydCBvcwor
ZnJvbSBidWlsZGJvdF93b3JrZXIuYm90IGltcG9ydCBXb3JrZXIKK2Zyb20gdHdpc3RlZC5hcHBs
aWNhdGlvbiBpbXBvcnQgc2VydmljZQorCitiYXNlZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBh
dGgucmVhbHBhdGgoX19maWxlX18pKQorYXBwbGljYXRpb24gPSBzZXJ2aWNlLkFwcGxpY2F0aW9u
KCdidWlsZGJvdC13b3JrZXInKQorCitidWlsZG1hc3Rlcl9ob3N0ID0gJ2xvY2FsaG9zdCcKK3Bv
cnQgPSAlKHNlcnZlcl9wYl9wb3J0KXMKK3dvcmtlcm5hbWUgPSAnJSh3b3JrZXJfbmFtZSlzJwor
cGFzc3dkID0gJ3Bhc3N3b3JkJwora2VlcGFsaXZlID0gNjAwCisKK3MgPSBXb3JrZXIoYnVpbGRt
YXN0ZXJfaG9zdCwgcG9ydCwgd29ya2VybmFtZSwgcGFzc3dkLCBiYXNlZGlyLCBrZWVwYWxpdmUp
CitzLnNldFNlcnZpY2VQYXJlbnQoYXBwbGljYXRpb24pCisiIiIKKworCitkZWYgY2hlY2tfdGNw
X3BvcnRfb3BlbihhZGRyZXNzLCBwb3J0KToKKyAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAg
dHJ5OgorICAgICAgICBzLmNvbm5lY3QoKGFkZHJlc3MsIHBvcnQpKQorICAgICAgICByZXR1cm4g
VHJ1ZQorICAgIGV4Y2VwdCBDb25uZWN0aW9uUmVmdXNlZEVycm9yOgorICAgICAgICByZXR1cm4g
RmFsc2UKKworCitkZWYgY3JlYXRlX3RlbXBkaXIodG1wZGlyPU5vbmUpOgorICAgIGlmIHRtcGRp
ciBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIodG1wZGlyKToKKyAg
ICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9IGlzIG5vdCBhIGRpcmVjdG9yeScuZm9ybWF0
KHRtcGRpcikpCisgICAgICAgIHJldHVybiB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD1vcy5wYXRo
LmpvaW4ob3MucGF0aC5hYnNwYXRoKHRtcGRpciksICd0bXAnKSkKKyAgICByZXR1cm4gdGVtcGZp
bGUubWtkdGVtcCgpCisKKworZGVmIHByaW50X2lmX2Vycm9yX3N0ZG91dF9zdGRlcnIoY21kLCBy
ZXRjb2RlLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUsIGV4dHJhbXNnPU5vbmUpOgorICAgIGlm
IHJldGNvZGUgIT0gMDoKKyAgICAgICAgaWYgdHlwZShjbWQpIGlzIGxpc3Q6CisgICAgICAgICAg
ICBjbWQgPSAnICcuam9pbihjbWQpCisgICAgICAgIHByaW50KCdXQVJOSU5HOiAie2NtZH0iIHJl
dHVybmVkIHtyZXRjb2RlfSBzdGF0dXMgY29kZScuZm9ybWF0KGNtZD1jbWQsIHJldGNvZGU9cmV0
Y29kZSkpCisgICAgICAgIGlmIHN0ZG91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHByaW50
KCdTVERPVVQ6XG4nICsgc3Rkb3V0LmRlY29kZSgndXRmLTgnKSkKKyAgICAgICAgaWYgc3RkZXJy
IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcHJpbnQoJ1NUREVSUjpcbicgKyBzdGRlcnIuZGVj
b2RlKCd1dGYtOCcpKQorICAgICAgICBpZiBleHRyYW1zZyBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgIHByaW50KGV4dHJhbXNnKQorCisKK2RlZiBjbWRfZXhpc3RzKGNtZCk6CisgICAgcmV0dXJu
IGFueShvcy5hY2Nlc3Mob3MucGF0aC5qb2luKHBhdGgsIGNtZCksIG9zLlhfT0spCisgICAgICAg
ICAgICAgICBmb3IgcGF0aCBpbiBvcy5lbnZpcm9uWydQQVRIJ10uc3BsaXQob3MucGF0aHNlcCkp
CisKKworY2xhc3MgQnVpbGRib3RUZXN0UnVubmVyKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgY29uZmlnZGlyKToKKyAgICAgICAgc2VsZi5fY29uZmlnZGlyID0gb3MucGF0aC5h
YnNwYXRoKG9zLnBhdGgucmVhbHBhdGgoY29uZmlnZGlyKSkKKyAgICAgICAgaWYgbm90IG9zLnBh
dGguaXNkaXIoc2VsZi5fY29uZmlnZGlyKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJv
cignVGhlIGNvbmZpZ2RpciB7fSBpcyBub3QgYSBkaXJlY3RvcnknLmZvcm1hdChzZWxmLl9jb25m
aWdkaXIpKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNlbGYu
X2NvbmZpZ2RpciwgJ2NvbmZpZy5qc29uJykpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVy
cm9yKCdUaGUgY29uZmlnZGlyIHt9IGRvZXMgbm90IGNvbnRhaW4gYSBjb25maWcuanNvbiBmaWxl
Jy5mb3JtYXQoc2VsZi5fY29uZmlnZGlyKSkKKworICAgICAgICBudW1iZXJfY29uZmlnX2ZpbGVz
ID0gMAorICAgICAgICBmb3IgZmlsZSBpbiBvcy5saXN0ZGlyKHNlbGYuX2NvbmZpZ2Rpcik6Cisg
ICAgICAgICAgICBpZiBmaWxlLmVuZHN3aXRoKCcuY2ZnJyk6CisgICAgICAgICAgICAgICAgc2Vs
Zi5fc2VydmVyX2NvbmZpZ19maWxlX25hbWUgPSBmaWxlCisgICAgICAgICAgICAgICAgbnVtYmVy
X2NvbmZpZ19maWxlcyArPSAxCisgICAgICAgIGlmIG51bWJlcl9jb25maWdfZmlsZXMgPT0gMDoK
KyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVGhlIGNvbmZpZ2RpciB7fSBkb2VzIG5v
dCBjb250YWluIGEgLmNmZyBmaWxlJy5mb3JtYXQoc2VsZi5fY29uZmlnZGlyKSkKKyAgICAgICAg
aWYgbnVtYmVyX2NvbmZpZ19maWxlcyAhPSAxOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVy
cm9yKCdUaGUgY29uZmlnZGlyIHt9IGhhcyBtb3JlIHRoYW4gb25lIC5jZmcgZmlsZScuZm9ybWF0
KHNlbGYuX2NvbmZpZ2RpcikpCisKKyAgICAgICAgc2VsZi5fc2VydmVyX2h0dHBfcG9ydCwgc2Vs
Zi5fc2VydmVyX3BiX3BvcnQgPSBzZWxmLl9nZXRfY29uZmlnX3RjcF9wb3J0cygpCisKKyAgICBk
ZWYgX2dldF9jb25maWdfdGNwX3BvcnRzKHNlbGYpOgorICAgICAgICBwYl9wb3J0ID0gMTcwMDAK
KyAgICAgICAgaHR0cF9wb3J0ID0gODAxMAorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRo
IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX2NvbmZpZ2Rpciwgc2VsZi5fc2VydmVyX2NvbmZpZ19m
aWxlX25hbWUpKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAg
ICAgICAgICAgICAgIGlmICc9JyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
J3Byb3RvY29scycgaW4gbGluZSBhbmQgJ3BiJyBpbiBsaW5lIGFuZCAncG9ydCcgaW4gbGluZToK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYiA9IGV2YWwobGluZS5zcGxpdCgnPScsIDEp
WzFdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBiX3BvcnQgPSBpbnQoKHBiWydwYidd
Wydwb3J0J10pKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ3d3dycgaW4gbGluZSBhbmQg
J3BvcnQnIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cCA9IGV2YWwo
bGluZS5zcGxpdCgnPScsIDEpWzFdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBf
cG9ydCA9IGludCgoaHR0cFsncG9ydCddKSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAg
cHJpbnQoIlVuYWJsZSB0byBkZXRlY3QgaHR0cCBhbmQgcGIgcG9ydHMgZnJvbSBjb25maWcuIFVz
aW5nIGRlZmF1bHRzIikKKyAgICAgICAgcmV0dXJuIGh0dHBfcG9ydCwgcGJfcG9ydAorCisgICAg
ZGVmIHN0YXJ0KHNlbGYsIGJhc2V0ZW1wZGlyPU5vbmUsIG5vX2NsZWFuPUZhbHNlLCBudW1iZXJf
d29ya2Vycz0xLCB1c2Vfc3lzdGVtX3ZlcnNpb249RmFsc2UpOgorICAgICAgICB0cnk6CisgICAg
ICAgICAgICBzZWxmLl9iYXNlX3dvcmtkaXJfdGVtcCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRo
LnJlYWxwYXRoKGNyZWF0ZV90ZW1wZGlyKGJhc2V0ZW1wZGlyKSkpCisgICAgICAgICAgICBpZiBz
ZWxmLl9iYXNlX3dvcmtkaXJfdGVtcC5zdGFydHN3aXRoKHNlbGYuX2NvbmZpZ2Rpcik6CisgICAg
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVGhlIHRlbXBvcmFsIHdvcmtpbmcgZGlyZWN0
b3J5IHt9IGNhbnQgYmUgbG9jYXRlZCBpbnNpZGUgY29uZmlnZGlyIHt9Jy5mb3JtYXQoc2VsZi5f
YmFzZV93b3JrZGlyX3RlbXAsIHNlbGYuX2NvbmZpZ2RpcikpCisgICAgICAgICAgICBpZiBub3Qg
dXNlX3N5c3RlbV92ZXJzaW9uOgorICAgICAgICAgICAgICAgIHNlbGYuX3NldHVwX3ZpcnR1YWxl
bnYoKQorICAgICAgICAgICAgaWYgbm90IChjbWRfZXhpc3RzKCd0d2lzdGQnKSBhbmQgY21kX2V4
aXN0cygnYnVpbGRib3QnKSk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdC
dWlsZGJvdCBpcyBub3QgaW5zdGFsbGVkLicpCisgICAgICAgICAgICBzZWxmLl9zZXR1cF9zZXJ2
ZXJfd29ya2RpcigpCisgICAgICAgICAgICBzZXJ2ZXJfcnVubmVyID0gbXVsdGlwcm9jZXNzaW5n
LlByb2Nlc3ModGFyZ2V0PXNlbGYuX3N0YXJ0X3NlcnZlcikKKyAgICAgICAgICAgIHNlcnZlcl9y
dW5uZXIuc3RhcnQoKQorICAgICAgICAgICAgc2VsZi5fd2FpdF9mb3Jfc2VydmVyX3JlYWR5KCkK
KyAgICAgICAgICAgIGlmIG51bWJlcl93b3JrZXJzID09IDA6CisgICAgICAgICAgICAgICAgcHJp
bnQoJyAtIFRvIG1hbnVhbGx5IGF0dGFjaCBhIGJ1aWxkIHdvcmtlciB1c2UgdGhpcyBpbmZvOlxu
JworICAgICAgICAgICAgICAgICAgICAgICsgJyAgICAgVENQIHBvcnQgZm9yIHRoZSB3b3JrZXIt
dG8tc2VydmVyIGNvbm5lY3Rpb246IHt9XG4nLmZvcm1hdChzZWxmLl9zZXJ2ZXJfcGJfcG9ydCkK
KyAgICAgICAgICAgICAgICAgICAgICArICcgICAgIHdvcmtlci1pZDogdGhlIG9uZSBkZWZpbmVk
IGF0IHt9XG4nLmZvcm1hdChvcy5wYXRoLmpvaW4oc2VsZi5fc2VydmVyX3dvcmRpciwgJ3Bhc3N3
b3Jkcy5qc29uJykpCisgICAgICAgICAgICAgICAgICAgICAgKyAnICAgICBwYXNzd29yZDogIHBh
c3N3b3JkXG4nKQorICAgICAgICAgICAgZWxpZiBudW1iZXJfd29ya2VycyA9PSAxOgorICAgICAg
ICAgICAgICAgIHdvcmtlciA9ICdsb2NhbC13b3JrZXInCisgICAgICAgICAgICAgICAgd29ya2Vy
X3J1bm5lciA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1zZWxmLl9zdGFydF93b3Jr
ZXIsIGFyZ3M9KHdvcmtlciwpKQorICAgICAgICAgICAgICAgIHdvcmtlcl9ydW5uZXIuc3RhcnQo
KQorICAgICAgICAgICAgICAgIHByaW50KCcgLSBXb3JrZXIgc3RhcnRlZCEuXG4nCisgICAgICAg
ICAgICAgICAgICAgICAgKyAnICAgICBDaGVjayB0aGUgbG9nIGZvciBhdCB7fS9sb2NhbC13b3Jr
ZXIvd29ya2VyLmxvZ1xuJy5mb3JtYXQoc2VsZi5fYmFzZV93b3JrZGlyX3RlbXApCisgICAgICAg
ICAgICAgICAgICAgICAgKyAnICAgICB0YWlsIC1mIHt9L2xvY2FsLXdvcmtlci93b3JrZXIubG9n
XG4nLmZvcm1hdChzZWxmLl9iYXNlX3dvcmtkaXJfdGVtcCkpCisgICAgICAgICAgICAgICAgd29y
a2VyX3J1bm5lci5qb2luKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgd29y
a2VyX3J1bm5lcnMgPSBbXQorICAgICAgICAgICAgICAgIGZvciB3b3JrZXIgaW4gc2VsZi5fZ2V0
X2xpc3Rfd29ya2VycygpOgorICAgICAgICAgICAgICAgICAgICB3b3JrZXJfcnVubmVyID0gbXVs
dGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXNlbGYuX3N0YXJ0X3dvcmtlciwgYXJncz0od29y
a2VyLCkpCisgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9ydW5uZXIuc3RhcnQoKQorICAgICAg
ICAgICAgICAgICAgICB3b3JrZXJfcnVubmVycy5hcHBlbmQod29ya2VyX3J1bm5lcikKKyAgICAg
ICAgICAgICAgICBwcmludCgnIC0gV29ya2VycyBzdGFydGVkIS5cbicKKyAgICAgICAgICAgICAg
ICAgICAgICArICcgICAgIENoZWNrIHRoZSBsb2cgZm9yIGVhY2ggb25lIGF0IHt9L1dPUktFUk5B
TUVJRC93b3JrZXIubG9nXG4nLmZvcm1hdChzZWxmLl9iYXNlX3dvcmtkaXJfdGVtcCkKKyAgICAg
ICAgICAgICAgICAgICAgICArICcgICAgIHRhaWwgLWYge30vKi93b3JrZXIubG9nXG4nLmZvcm1h
dChzZWxmLl9iYXNlX3dvcmtkaXJfdGVtcCkpCisgICAgICAgICAgICAgICAgZm9yIHdvcmtlcl9y
dW5uZXIgaW4gd29ya2VyX3J1bm5lcnM6CisgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9ydW5u
ZXIuam9pbigpCisgICAgICAgICAgICBzZXJ2ZXJfcnVubmVyLmpvaW4oKQorICAgICAgICBleGNl
cHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBwYXNzICAjIG5vIHByaW50IHRoZSBl
eGNlcHRpb24KKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4
YygpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAg
IyBUaGUgY2hpbGRyZW4gbWF5IGV4aXQgYmV0d2VlbiB0aGUgY2hlY2sgYW5kIHRoZSBraWxsIGNh
bGwuCisgICAgICAgICAgICAgICAgIyBJZ25vcmUgYW55IGV4Y2VwdGlvbiByYWlzZWQgaGVyZS4K
KyAgICAgICAgICAgICAgICBmb3IgYyBpbiBtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVu
KCk6CisgICAgICAgICAgICAgICAgICAgICMgU2VuZCB0aGUgc2lnbmFsIHRvIHRoZSB3aG9sZSBw
cm9jZXNzIGdyb3VwLgorICAgICAgICAgICAgICAgICAgICAjIE90aGVyd2lzZSBzb21lIHR3aXN0
ZCBzdWItY2hpbGRzIGNhbiByZW1haW4gYWxpdmUuCisgICAgICAgICAgICAgICAgICAgIG9zLmtp
bGxwZyhvcy5nZXRwZ2lkKGMucGlkKSwgc2lnbmFsLlNJR0tJTEwpCisgICAgICAgICAgICBleGNl
cHQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYgbm90IG5vX2NsZWFuOgor
ICAgICAgICAgICAgICAgIHNlbGYuX2NsZWFuKCkKKyAgICAgICAgICAgIHN5cy5leGl0KDApCisK
KyAgICBkZWYgX3dhaXRfZm9yX3NlcnZlcl9yZWFkeShzZWxmKToKKyAgICAgICAgc2VydmVyX3Jl
YWR5X2NoZWNrX2NvdW50ZXIgPSAwCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBp
ZiBvcy5wYXRoLmlzZmlsZShzZWxmLl9zZXJ2ZXJfcmVhZHlfZmQpOgorICAgICAgICAgICAgICAg
IHJldHVybgorICAgICAgICAgICAgaWYgc2VydmVyX3JlYWR5X2NoZWNrX2NvdW50ZXIgPiA2MDoK
KyAgICAgICAgICAgICAgICBwcmludCgnRVJST1I6IGJ1aWxkYm90IHNlcnZlciBoYXMgbm90IHN0
YXJ0ZWQgYWZ0ZXIgd2FpdGluZyA2MCBzZWNvbmRzIGZvciBpdC4nKQorCisgICAgICAgICAgICAg
ICAgaWYgb3MucGF0aC5pc2ZpbGUoc2VsZi5fc2VydmVyX2xvZyk6CisgICAgICAgICAgICAgICAg
ICAgIHByaW50KCdUaGUgc2VydmVyLmxvZyBmaWxlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmc6JykK
KyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuX3NlcnZlcl9sb2csICdyJykgYXMg
ZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGYucmVhZCgpKQorICAgICAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCdUaGVyZSBpcyBubyBzZXJ2ZXIu
bG9nIG9uIHRoZSBkaXJlY3RvcnkuIFRoYXQgbWVhbnMgYSBnZW5lcmFsIGZhaWx1cmUgc3RhcnRp
bmcgYnVpbGRib3QuJykKKworICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignYnVp
bGRib3Qgc2VydmVyIGhhcyBub3Qgc3RhcnRlZCBhZnRlciB3YWl0aW5nIDYwIHNlY29uZHMgZm9y
IGl0LicpCisgICAgICAgICAgICBzbGVlcCgxKQorICAgICAgICAgICAgc2VydmVyX3JlYWR5X2No
ZWNrX2NvdW50ZXIgKz0gMQorCisgICAgZGVmIF9jcmVhdGVfbW9ja193b3JrZXJfcGFzc3dvcmRz
X2RpY3Qoc2VsZik6CisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fc2VydmVy
X3dvcmRpciwgJ2NvbmZpZy5qc29uJyksICdyJykgYXMgY29uZmlnX2pzb246CisgICAgICAgICAg
ICBjb25maWdfZGljdCA9IGpzb24ubG9hZChjb25maWdfanNvbikKKyAgICAgICAgcmVzdWx0ID0g
ZGljdChbKHdvcmtlclsnbmFtZSddLCAncGFzc3dvcmQnKSBmb3Igd29ya2VyIGluIGNvbmZpZ19k
aWN0Wyd3b3JrZXJzJ11dKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX3NldHVw
X3NlcnZlcl93b3JrZGlyKHNlbGYpOgorICAgICAgICBzZWxmLl9zZXJ2ZXJfd29yZGlyID0gb3Mu
cGF0aC5qb2luKHNlbGYuX2Jhc2Vfd29ya2Rpcl90ZW1wLCAnYnVpbGRib3Qtc2VydmVyJykKKyAg
ICAgICAgYXNzZXJ0KG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLl9zZXJ2ZXJfd29yZGlyKSkKKyAg
ICAgICAgc2VsZi5fc2VydmVyX2xvZyA9IG9zLnBhdGguam9pbihzZWxmLl9zZXJ2ZXJfd29yZGly
LCAnc2VydmVyLmxvZycpCisgICAgICAgIHNlbGYuX3NlcnZlcl9yZWFkeV9mZCA9IG9zLnBhdGgu
am9pbihzZWxmLl9zZXJ2ZXJfd29yZGlyLCAnLnNlcnZlci1pcy1yZWFkeScpCisgICAgICAgIHBy
aW50KCdDb3B5aW5nIGZpbGVzIGZyb20ge30gdG8ge30gLi4uJy5mb3JtYXQoc2VsZi5fY29uZmln
ZGlyLCBzZWxmLl9zZXJ2ZXJfd29yZGlyKSkKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNlbGYu
X2NvbmZpZ2Rpciwgc2VsZi5fc2VydmVyX3dvcmRpcikKKyAgICAgICAgcHJpbnQoJ0dlbmVyYXRp
bmcgYnVpbGRib3QgZmlsZXMgYXQge30gLi4uJy5mb3JtYXQoc2VsZi5fc2VydmVyX3dvcmRpcikp
CisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fc2VydmVyX3dvcmRpciwgJ2J1
aWxkYm90LnRhYycpLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGJ1aWxkYm90X3Nl
cnZlcl90YWMgJSB7J2NvbmZpZ19maWxlJzogc2VsZi5fc2VydmVyX2NvbmZpZ19maWxlX25hbWV9
KQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3NlcnZlcl93b3JkaXIsICdw
YXNzd29yZHMuanNvbicpLCAndycpIGFzIHBhc3N3b3Jkc19maWxlOgorICAgICAgICAgICAgcGFz
c3dvcmRzX2ZpbGUud3JpdGUoanNvbi5kdW1wcyhzZWxmLl9jcmVhdGVfbW9ja193b3JrZXJfcGFz
c3dvcmRzX2RpY3QoKSwgaW5kZW50PTQsIHNvcnRfa2V5cz1UcnVlKSkKKworICAgIGRlZiBfc2V0
dXBfdmlydHVhbGVudihzZWxmKToKKyAgICAgICAgaWYgY21kX2V4aXN0cygndmlydHVhbGVudicp
OgorICAgICAgICAgICAgcHJpbnQoJ1NldHRpbmcgdXAgdmlydHVhbGVudiBhdCB7fSAuLi4gJy5m
b3JtYXQoc2VsZi5fYmFzZV93b3JrZGlyX3RlbXApKQorICAgICAgICAgICAgdmlydHVhbGVudl9j
bWQgPSBbJ3ZpcnR1YWxlbnYnLCAnLXAnLCAncHl0aG9uMycsICd2ZW52J10KKyAgICAgICAgICAg
IHZpcnR1YWxlbnZfcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4odmlydHVhbGVudl9jbWQsIGN3
ZD1zZWxmLl9iYXNlX3dvcmtkaXJfdGVtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnBy
b2Nlc3MuU1RET1VUKQorICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSB2aXJ0dWFsZW52X3By
b2Nlc3MuY29tbXVuaWNhdGUoKQorICAgICAgICAgICAgcHJpbnRfaWZfZXJyb3Jfc3Rkb3V0X3N0
ZGVycih2aXJ0dWFsZW52X2NtZCwgdmlydHVhbGVudl9wcm9jZXNzLnJldHVybmNvZGUsIHN0ZG91
dCwgc3RkZXJyKQorICAgICAgICAgICAgdmlydHVhbGVudl9iaW5kaXIgPSBvcy5wYXRoLmpvaW4o
c2VsZi5fYmFzZV93b3JrZGlyX3RlbXAsICd2ZW52JywgJ2JpbicpCisgICAgICAgICAgICB2aXJ0
dWFsZW52X3BpcCA9IG9zLnBhdGguam9pbih2aXJ0dWFsZW52X2JpbmRpciwgJ3BpcCcpCisgICAg
ICAgICAgICBpZiBub3Qgb3MuYWNjZXNzKHZpcnR1YWxlbnZfcGlwLCBvcy5YX09LKToKKyAgICAg
ICAgICAgICAgICBwcmludCgnU29tZXRoaW5nIHdlbnQgd3Jvbmcgc2V0dGluZyB1cCB2aXJ0dWFs
ZW52JworICAgICAgICAgICAgICAgICAgICAgICdUcnlpbmcgdG8gY29udGludWUgdXNpbmcgdGhl
IHN5c3RlbSB2ZXJzaW9uIG9mIGJ1aWxkYm90JykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAg
ICAgICAgICAgIHByaW50KCdTZXR0aW5nIHVwIGJ1aWxkYm90IGRlcGVuZGVuY2llcyBvbiB0aGUg
dmlydHVhbGVudiAuLi4gJykKKyAgICAgICAgICAgICMgVGhlIGlkZWEgaXMgdG8gaW5zdGFsbCB0
aGUgdmVyeSBzYW1lIHZlcnNpb24gb2YgYnVpbGRib3QgYW5kIGl0cworICAgICAgICAgICAgIyBk
ZXBlbmRlbmNpZXMgdGhhbiB0aGUgb25lcyB1c2VkIGZvciBydW5uaW5nIGh0dHBzOi8vYnVpbGQu
d2Via2l0Lm9yZy9hYm91dAorICAgICAgICAgICAgYnVpbGRib3RfdmVyc2lvbiA9ICcyLjEwLjUn
CisgICAgICAgICAgICBwaXBfY21kID0gW3ZpcnR1YWxlbnZfcGlwLCAnaW5zdGFsbCcsCisgICAg
ICAgICAgICAgICAgICAgICAgICdidWlsZGJvdD09e30nLmZvcm1hdChidWlsZGJvdF92ZXJzaW9u
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2J1aWxkYm90LWNvbnNvbGUtdmlldz09e30nLmZv
cm1hdChidWlsZGJvdF92ZXJzaW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2J1aWxkYm90
LWdyaWQtdmlldz09e30nLmZvcm1hdChidWlsZGJvdF92ZXJzaW9uKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgJ2J1aWxkYm90LXdhdGVyZmFsbC12aWV3PT17fScuZm9ybWF0KGJ1aWxkYm90X3Zl
cnNpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAnYnVpbGRib3Qtd29ya2VyPT17fScuZm9y
bWF0KGJ1aWxkYm90X3ZlcnNpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAnYnVpbGRib3Qt
d3d3PT17fScuZm9ybWF0KGJ1aWxkYm90X3ZlcnNpb24pLAorICAgICAgICAgICAgICAgICAgICAg
ICAndHdpc3RlZD09MjEuMi4wJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVlc3RzPT0y
LjIxLjAnLAorICAgICAgICAgICAgICAgICAgICAgICAnbHo0PT0xLjEuMCddCisgICAgICAgICAg
ICBwaXBfcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4ocGlwX2NtZCwgY3dkPXNlbGYuX2Jhc2Vf
d29ya2Rpcl90ZW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAg
ICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcGlwX3Byb2Nlc3MuY29tbXVuaWNhdGUoKQorICAgICAg
ICAgICAgcHJpbnRfaWZfZXJyb3Jfc3Rkb3V0X3N0ZGVycihwaXBfY21kLCBwaXBfcHJvY2Vzcy5y
ZXR1cm5jb2RlLCBzdGRvdXQsIHN0ZGVycikKKyAgICAgICAgICAgIG9zLmVudmlyb25bJ1BBVEgn
XSA9IHZpcnR1YWxlbnZfYmluZGlyICsgJzonICsgb3MuZW52aXJvblsnUEFUSCddCisgICAgICAg
ICAgICByZXR1cm4KKyAgICAgICAgcHJpbnQoJ1dBUk5JTkc6IHZpcnR1YWxlbnYgbm90IGluc3Rh
bGxlZC4gJworICAgICAgICAgICAgICAnVHJ5aW5nIHRvIGNvbnRpbnVlIHVzaW5nIHRoZSBzeXN0
ZW0gdmVyc2lvbiBvZiBidWlsZGJvdCcpCisKKyAgICBkZWYgX3VwZ3JhZGVfZGJfbmVlZGVkKHNl
bGYpOgorICAgICAgICB3aXRoIG9wZW4oc2VsZi5fc2VydmVyX2xvZykgYXMgZjoKKyAgICAgICAg
ICAgIGZvciBsIGluIGY6CisgICAgICAgICAgICAgICAgaWYgJ3VwZ3JhZGUgdGhlIGRhdGFiYXNl
JyBpbiBsOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4g
RmFsc2UKKworICAgIGRlZiBfc3RhcnRfc2VydmVyKHNlbGYpOgorICAgICAgICAjIFRoaXMgaXMg
c3RhcnRlZCB2aWEgbXVsdGlwcm9jZXNzaW5nLiBXZSBzZXQgYSBuZXcgcHJvY2VzcyBncm91cCBo
ZXJlCisgICAgICAgICMgdG8gYmUgYWJsZSB0byByZWxpYWJseSBraWxsIHRoaXMgc3VicHJvY2Vz
cyBhbmQgYWxsIG9mIGl0cyBjaGlsZCBvbiBjbGVhbi4KKyAgICAgICAgb3Muc2V0c2lkKCkKKyAg
ICAgICAgZGJ1cGdyYWRlZCA9IEZhbHNlCisgICAgICAgIHJldHJ5ID0gVHJ1ZQorICAgICAgICBp
ZiBjaGVja190Y3BfcG9ydF9vcGVuKCdsb2NhbGhvc3QnLCBzZWxmLl9zZXJ2ZXJfcGJfcG9ydCk6
CisgICAgICAgICAgICBwcmludCgnRVJST1I6IFRoZXJlIGlzIHNvbWUgcHJvY2VzcyBhbHJlYWR5
IGxpc3RlbmluZyBpbiBwb3J0IHt9Jy5mb3JtYXQoc2VsZi5fc2VydmVyX3BiX3BvcnQpKQorICAg
ICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgd2hpbGUgcmV0cnk6CisgICAgICAgICAgICByZXRy
eSA9IEZhbHNlCisgICAgICAgICAgICBwcmludCgnU3RhcnRpbmcgdGhlIGJ1aWxkYm90IHNlcnZl
ciBwcm9jZXNzIC4uLicpCisgICAgICAgICAgICB0d2lzdGRfY21kID0gWyd0d2lzdGQnLCAnLWwn
LCBzZWxmLl9zZXJ2ZXJfbG9nLCAnLW5veScsICdidWlsZGJvdC50YWMnXQorICAgICAgICAgICAg
dHdpc3RkX3NlcnZlcl9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3Blbih0d2lzdGRfY21kLCBjd2Q9
c2VsZi5fc2VydmVyX3dvcmRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nl
c3MuU1RET1VUKQorICAgICAgICAgICAgd2hpbGUgdHdpc3RkX3NlcnZlcl9wcm9jZXNzLnBvbGwo
KSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGlmIGNoZWNrX3RjcF9wb3J0X29wZW4oJ2xvY2Fs
aG9zdCcsIHNlbGYuX3NlcnZlcl9wYl9wb3J0KToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQo
J1Rlc3QgYnVpbGRib3Qgc2VydmVyIHJlYWR5IVxuJworICAgICAgICAgICAgICAgICAgICAgICAg
ICArICdQcmVzcyBDVFJMLUMgdG8gc3RvcFxuXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICsgJyAtIFNlZSBidWlsZGJvdCBzZXJ2ZXIgbG9nOlxuJworICAgICAgICAgICAgICAgICAgICAg
ICAgICArICcgICAgIHRhaWwgLWYge31cblxuJy5mb3JtYXQoc2VsZi5fc2VydmVyX2xvZykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgKyAnIC0gT3BlbiBhIGJyb3dzZXIgdG86XG4nCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICsgJyAgICAgaHR0cDovL2xvY2FsaG9zdDp7fVxuJy5mb3Jt
YXQoc2VsZi5fc2VydmVyX2h0dHBfcG9ydCkpCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3Bl
bihzZWxmLl9zZXJ2ZXJfcmVhZHlfZmQsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGYud3JpdGUoJ3JlYWR5JykKKyAgICAgICAgICAgICAgICAgICAgdHdpc3RkX3NlcnZlcl9w
cm9jZXNzLndhaXQoKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAg
ICAgIHNsZWVwKDEpCisgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHR3aXN0ZF9zZXJ2ZXJf
cHJvY2Vzcy5jb21tdW5pY2F0ZSgpCisgICAgICAgICAgICBpZiB0d2lzdGRfc2VydmVyX3Byb2Nl
c3MucmV0dXJuY29kZSA9PSAwIGFuZCBzZWxmLl91cGdyYWRlX2RiX25lZWRlZCgpIGFuZCBub3Qg
ZGJ1cGdyYWRlZDoKKyAgICAgICAgICAgICAgICByZXRyeSA9IFRydWUKKyAgICAgICAgICAgICAg
ICBkYnVwZ3JhZGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIHByaW50KCdVcGdyYWRpbmcgdGhl
IGRhdGFiYXNlIC4uLicpCisgICAgICAgICAgICAgICAgdXBncmFkZV9jbWQgPSBbJ2J1aWxkYm90
JywgJ3VwZ3JhZGUtbWFzdGVyJywgc2VsZi5fc2VydmVyX3dvcmRpcl0KKyAgICAgICAgICAgICAg
ICB1cGdyYWRlX3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKHVwZ3JhZGVfY21kLCBjd2Q9c2Vs
Zi5fc2VydmVyX3dvcmRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNU
RE9VVCkKKyAgICAgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHVwZ3JhZGVfcHJvY2Vzcy5j
b21tdW5pY2F0ZSgpCisgICAgICAgICAgICAgICAgcHJpbnRfaWZfZXJyb3Jfc3Rkb3V0X3N0ZGVy
cih1cGdyYWRlX2NtZCwgdXBncmFkZV9wcm9jZXNzLnJldHVybmNvZGUsIHN0ZG91dCwgc3RkZXJy
KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludF9pZl9lcnJvcl9zdGRv
dXRfc3RkZXJyKHR3aXN0ZF9jbWQsIHR3aXN0ZF9zZXJ2ZXJfcHJvY2Vzcy5yZXR1cm5jb2RlLCBz
dGRvdXQsIHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdDaGVjayB0aGUgbG9nIGF0IHt9Jy5mb3JtYXQoc2VsZi5fc2VydmVyX2xvZykpCisgICAg
ICAgIHJldHVybiB0d2lzdGRfc2VydmVyX3Byb2Nlc3MucmV0dXJuY29kZQorCisgICAgZGVmIF9n
ZXRfbGlzdF93b3JrZXJzKHNlbGYpOgorICAgICAgICBwYXNzd29yZF9saXN0ID0gb3MucGF0aC5q
b2luKHNlbGYuX3NlcnZlcl93b3JkaXIsICdwYXNzd29yZHMuanNvbicpCisgICAgICAgIHdpdGgg
b3BlbihwYXNzd29yZF9saXN0KSBhcyBmOgorICAgICAgICAgICAgcGFzc3dvcmRzID0ganNvbi5s
b2FkKGYpCisgICAgICAgIGxpc3Rfd29ya2VycyA9IFtdCisgICAgICAgIGZvciB3b3JrZXIgaW4g
cGFzc3dvcmRzOgorICAgICAgICAgICAgbGlzdF93b3JrZXJzLmFwcGVuZChzdHIod29ya2VyKSkK
KyAgICAgICAgcmV0dXJuIGxpc3Rfd29ya2VycworCisgICAgZGVmIF9zdGFydF93b3JrZXIoc2Vs
Ziwgd29ya2VyKToKKyAgICAgICAgIyBUaGlzIGlzIHN0YXJ0ZWQgdmlhIG11bHRpcHJvY2Vzc2lu
Zy4gV2Ugc2V0IGEgbmV3IHByb2Nlc3MgZ3JvdXAgaGVyZQorICAgICAgICAjIHRvIGJlIGFibGUg
dG8gcmVsaWFibHkga2lsbCB0aGlzIHN1YnByb2Nlc3MgYW5kIGFsbCBvZiBpdHMgY2hpbGQgb24g
Y2xlYW4uCisgICAgICAgIG9zLnNldHNpZCgpCisgICAgICAgIHdvcmtlcl93b3JrZGlyID0gb3Mu
cGF0aC5qb2luKHNlbGYuX2Jhc2Vfd29ya2Rpcl90ZW1wLCB3b3JrZXIpCisgICAgICAgIG9zLm1r
ZGlyKHdvcmtlcl93b3JrZGlyKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHdvcmtl
cl93b3JrZGlyLCAnYnVpbGRib3QudGFjJyksICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3Jp
dGUoYnVpbGRib3Rfd29ya2VyX3RhYyAlIHsnd29ya2VyX25hbWUnOiB3b3JrZXIsICdzZXJ2ZXJf
cGJfcG9ydCc6IHNlbGYuX3NlcnZlcl9wYl9wb3J0fSkKKyAgICAgICAgdHdpc3RkX2NtZCA9IFsn
dHdpc3RkJywgJy1sJywgJ3dvcmtlci5sb2cnLCAnLW5veScsICdidWlsZGJvdC50YWMnXQorICAg
ICAgICB0d2lzdGRfd29ya2VyX3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKHR3aXN0ZF9jbWQs
IGN3ZD13b3JrZXJfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5T
VERPVVQpCisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gdHdpc3RkX3dvcmtlcl9wcm9jZXNzLmNv
bW11bmljYXRlKCkKKyAgICAgICAgcHJpbnRfaWZfZXJyb3Jfc3Rkb3V0X3N0ZGVycih0d2lzdGRf
Y21kLCB0d2lzdGRfd29ya2VyX3Byb2Nlc3MucmV0dXJuY29kZSwgc3Rkb3V0LCBzdGRlcnIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NoZWNrIHRoZSBsb2cgYXQge30n
LmZvcm1hdChvcy5wYXRoLmpvaW4od29ya2VyX3dvcmtkaXIsICd3b3JrZXIubG9nJykpKQorICAg
ICAgICByZXR1cm4gdHdpc3RkX3dvcmtlcl9wcm9jZXNzLnJldHVybmNvZGUKKworICAgIGRlZiBf
Y2xlYW4oc2VsZik6CisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc2VsZi5fYmFzZV93b3JrZGly
X3RlbXApOgorICAgICAgICAgICAgcHJpbnQoJ1xuXG5DbGVhbmluZyB7fSAuLi4gXG4nLmZvcm1h
dChzZWxmLl9iYXNlX3dvcmtkaXJfdGVtcCkpCisgICAgICAgICAgICAjIHNodXRpbC5ybXRyZWUg
Y2FuIGZhaWwgaWYgd2UgaG9sZCBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvciBvbiB0ZW1wX2Rpcgor
ICAgICAgICAgICAgIyAod2hpY2ggaXMgdmVyeSBsaWtlbHkgd2hlbiBjbGVhbmluZykgb3IgaWYg
dGVtcF9kaXIgaXMgYSBORlMgbW91bnQuCisgICAgICAgICAgICAjIFVzZSBybSBpbnN0ZWFkIHRo
YXQgYWx3YXlzIHdvcmtzLgorICAgICAgICAgICAgcm0gPSBzdWJwcm9jZXNzLlBvcGVuKFsncm0n
LCAnLWZyJywgc2VsZi5fYmFzZV93b3JrZGlyX3RlbXBdKQorICAgICAgICAgICAgcm0ud2FpdCgp
CisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5B
cmd1bWVudFBhcnNlcigpCisgICAgY29uZmlndXJhdGlvbiA9IHBhcnNlci5hZGRfbXV0dWFsbHlf
ZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPVRydWUpCisgICAgY29uZmlndXJhdGlvbi5hZGRfYXJn
dW1lbnQoJy0tZXdzJywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PSdld3MnLCBkZXN0PSdj
b25maWd1cmF0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTaW11
bGF0ZSB0aGUgRVdTIGJ1aWxkYm90IHNlcnZlciAoZXdzLWJ1aWxkLndlYmtpdC5vcmcpJykKKyAg
ICBjb25maWd1cmF0aW9uLmFkZF9hcmd1bWVudCgnLS1wb3N0LWNvbW1pdCcsIGFjdGlvbj0nc3Rv
cmVfY29uc3QnLCBjb25zdD0ncG9zdF9jb21taXQnLCBkZXN0PSdjb25maWd1cmF0aW9uJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTaW11bGF0ZSB0aGUgcG9zdC1jb21t
aXQgYnVpbGRib3Qgc2VydmVyIChidWlsZC53ZWJraXQub3JnKScpCisgICAgY29uZmlndXJhdGlv
bi5hZGRfYXJndW1lbnQoJy0tY29uZmlnLWRpcicsIGRlZmF1bHQ9Tm9uZSwgZGVzdD0nY29uZmln
ZGlyJywgdHlwZT1zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU3Bl
Y2lmeSB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIGJ1aWxkYm90IGNvbmZpZyBmaWxl
cycpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1iYXNlLXRlbXAtZGlyJywgaGVscD0nUGF0
aCB3aGVyZSB0aGUgdGVtcG9yYWwgd29ya2luZyBkaXJlY3Rvcnkgd2lsbCBiZSBjcmVhdGVkLiAn
CisgICAgICAgICAgICAgICAgICAgICAgICAnTm90ZTogVG8gdHJpZ2dlciB0ZXN0IGJ1aWxkcyB3
aXRoIHRoZSB0ZXN0IHdvcmtlcnMgeW91IG5lZWQgZW5vdWdoIGZyZWUgc3BhY2Ugb24gdGhhdCBw
YXRoLicsCisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdiYXNldGVtcGRpcicsIGRlZmF1
bHQ9Tm9uZSwgdHlwZT1zdHIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1uby1jbGVhbics
IGhlbHA9J0RvIG5vdCBjbGVhbiB0aGUgdGVtcG9yYWwgd29ya2luZyBkaXIgb24gZXhpdC4nLAor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nbm9fY2xlYW4nLCBhY3Rpb249J3N0b3JlX3Ry
dWUnKQorICAgIHdvcmtlcnMgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cChy
ZXF1aXJlZD1GYWxzZSkKKyAgICB3b3JrZXJzLmFkZF9hcmd1bWVudCgnLS1uby13b3JrZXJzJywg
aGVscD0nRG8gbm90IHN0YXJ0IGFueSB3b3JrZXJzLicsCisgICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0PSdudW1iZXJfd29ya2VycycsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0wKQor
ICAgIHdvcmtlcnMuYWRkX2FyZ3VtZW50KCctLWFsbC13b3JrZXJzJywgaGVscD0nSW5zdGVhZCBv
ZiBzdGFydGluZyBvbmx5IG9uZSB3b3JrZXIgdGhhdCByb3VuZC1yb2JpbnMgYmV0d2VlbiBhbGwg
dGhlIHF1ZXVlcywgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnc3RhcnQgbXVsdGlwbGUgcGFyYWxsZWwgd29ya2VycyBhcyBkZWZpbmVkIG9uIHRoZSBz
ZXJ2ZXIgY29uZmlnLicsCisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdudW1iZXJfd29y
a2VycycsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD1mbG9hdCgnaW5mJykpCisgICAgcGFy
c2VyLmFkZF9hcmd1bWVudCgnLS11c2Utc3lzdGVtLXZlcnNpb24nLCBoZWxwPSdJbnN0ZWFkIG9m
IHNldHRpbmcgdXAgYSB2aXJ0dWFsZW52IHdpdGggdGhlIGJ1aWxkYm90IHZlcnNpb24gJworICAg
ICAgICAgICAgICAgICAgICAgICAgJ3VzZWQgYnkgYnVpbGQud2Via2l0Lm9yZywgdXNlIHRoZSBi
dWlsZGJvdCB2ZXJzaW9uIGluc3RhbGxlZCBvbiB0aGlzIHN5c3RlbS4nLAorICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdD0ndXNlX3N5c3RlbV92ZXJzaW9uJywgYWN0aW9uPSdzdG9yZV90cnVl
JykKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgaWYgYXJncy5jb25maWd1
cmF0aW9uID09ICJld3MiOgorICAgICAgICBjb25maWdkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0
aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2V3cy1idWlsZCcpCisgICAgZWxpZiBhcmdzLmNvbmZpZ3Vy
YXRpb24gPT0gInBvc3RfY29tbWl0IjoKKyAgICAgICAgY29uZmlnZGlyID0gb3MucGF0aC5qb2lu
KG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdidWlsZC13ZWJraXQtb3JnJykKKyAgICBlbHNl
OgorICAgICAgICBjb25maWdkaXIgPSBhcmdzLmNvbmZpZ2RpcgorCisgICAgaWYgYXJncy5udW1i
ZXJfd29ya2VycyBpcyBOb25lOgorICAgICAgICBhcmdzLm51bWJlcl93b3JrZXJzID0gMQorCisg
ICAgYnVpbGRib3RfdGVzdF9ydW5uZXIgPSBCdWlsZGJvdFRlc3RSdW5uZXIoY29uZmlnZGlyKQor
ICAgIGJ1aWxkYm90X3Rlc3RfcnVubmVyLnN0YXJ0KGFyZ3MuYmFzZXRlbXBkaXIsIGFyZ3Mubm9f
Y2xlYW4sIGFyZ3MubnVtYmVyX3dvcmtlcnMsIGFyZ3MudXNlX3N5c3RlbV92ZXJzaW9uKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>