<?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>32966</bug_id>
          
          <creation_ts>2009-12-27 11:51:33 -0800</creation_ts>
          <short_desc>check-webkit-style: Refactor style.parse_arguments so that it has no global variable side effects.</short_desc>
          <delta_ts>2010-01-05 22:38:11 -0800</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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>32592</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Jerdonek">cjerdonek</reporter>
          <assigned_to name="Chris Jerdonek">cjerdonek</assigned_to>
          <cc>cjerdonek</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>hamaji</cc>
    
    <cc>hamaji</cc>
    
    <cc>levin</cc>
    
    <cc>mjs</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>175073</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2009-12-27 11:51:33 -0800</bug_when>
    <thetext>Continuation of the following report (for Patch 2 of 2):

https://bugs.webkit.org/show_bug.cgi?id=32592</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175141</commentid>
    <comment_count>1</comment_count>
      <attachid>45541</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2009-12-27 19:54:55 -0800</bug_when>
    <thetext>Created attachment 45541
Proposed patch

This is part 2 of the patch originally proposed in the bug report mentioned in the first comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175142</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-27 19:59:30 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45541 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175162</commentid>
    <comment_count>3</comment_count>
      <attachid>45541</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2009-12-27 23:32:39 -0800</bug_when>
    <thetext>Comment on attachment 45541
Proposed patch

&gt; +        try:
&gt; +            (opts, filenames) = getopt.getopt(args, &apos;&apos;, flags)
&gt; +        except getopt.GetoptError:
&gt; +            # FIXME: Settle on an error handling approach: come up
&gt; +            #        with a consistent guideline as to when and whether
&gt; +            #        a ValueError should be raised versus calling
&gt; +            #        sys.exit when needing to interrupt execution.
&gt; +            self._exit_with_usage(&apos;Invalid arguments.&apos;)
&gt; +
&gt; +        extra_flag_values = {}
&gt; +        git_commit = None
&gt; +
&gt; +        for (opt, val) in opts:
&gt; +            if opt == &apos;--help&apos;:
&gt; +                self._exit_with_usage()
&gt; +            elif opt == &apos;--output&apos;:
&gt; +                output_format = val
&gt; +            elif opt == &apos;--verbose&apos;:
&gt; +                verbosity = val
&gt; +            elif opt == &apos;--git-commit&apos;:
&gt; +                git_commit = val
&gt; +            elif opt == &apos;--filter&apos;:
&gt; +                if not val:
&gt; +                    self._exit_with_categories()
&gt; +                # Prepend the defaults.
&gt; +                filter_rules = filter_rules + self._parse_filter_flag(val)
&gt; +            else:
&gt; +                extra_flag_values[opt] = val

I&apos;m not sure when we can reach here. I think unknown options will make getopt raise an exception. We may just want to raise an exception as taking this branch would be just an error of this script? Also, I&apos;m not sure if we need the argument extra_flags for this function.

&gt; +            self.assertEquals(rule.startswith(&apos;-&apos;), True)
&gt; +            self.assertEquals(rule[1:] in style.STYLE_CATEGORIES, True)
&gt; +            self.assertEquals(rule in already_seen, False)

I slightly prefer using assertTrue and assertFalse for these assertions.

&gt; +    def test_defaults(self):
&gt; +        defaults = style.ArgumentDefaults(style.DEFAULT_OUTPUT_FORMAT,
&gt; +                                          style.DEFAULT_VERBOSITY,
&gt; +                                          style.WEBKIT_FILTER_RULES)
&gt; +        parser = style.ArgumentParser(defaults)
&gt; +        parser.parse([]) # works

We may want to check the return value of parser.parse?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175176</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2009-12-28 00:03:13 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; +        try:
&gt; &gt; +            (opts, filenames) = getopt.getopt(args, &apos;&apos;, flags)
&gt; &gt; + ...
&gt; &gt; +            else:
&gt; &gt; +                extra_flag_values[opt] = val
&gt; I&apos;m not sure when we can reach here. I think unknown options will make getopt
&gt; raise an exception. We may just want to raise an exception as taking this
&gt; branch would be just an error of this script? Also, I&apos;m not sure if we need the
&gt; argument extra_flags for this function.

Thanks for the comments, Shinichiro.

On the first point, the &quot;extra flag&quot; functionality was there before, and I simply preserved it rather than take it out.  The check-webkit-style file originally used it to let the &quot;git-commit&quot; flag pass through parse_arguments() without cpp_style.py having to know about it.

With this patch we will no longer be using the extra flags, and I doubt we&apos;ll need it any longer, but I didn&apos;t want to remove functionality someone took time to add.  I can go either way.

The else clause is reachable because earlier in the function, the extra_flag values are added to flags:

&gt; for extra_flag in extra_flags:
&gt;     ...
&gt;     flags.append(extra_flag)

There are some unit tests in style_unittest.py (both succeeding ones and failing ones) that pass extra flag values and exercise the &quot;else&quot; code path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175338</commentid>
    <comment_count>5</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-12-28 17:33:55 -0800</bug_when>
    <thetext>Retitling to avoid confusion with patches needing specialized review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177350</commentid>
    <comment_count>6</comment_count>
      <attachid>45541</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-05 13:26:42 -0800</bug_when>
    <thetext>Comment on attachment 45541
Proposed patch

I&apos;m willing to rubber-stamp this change, but Dave Levin would be your best reviewer.  Despite Adam and I being useful for python changes, neither of us have touched this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177357</commentid>
    <comment_count>7</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-01-05 13:28:59 -0800</bug_when>
    <thetext>This is one of three patches that I&apos;m looking at this today... (I was out for vacation).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177369</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-05 13:41:14 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; This is one of three patches that I&apos;m looking at this today... (I was out for
&gt; vacation).

Thanks, guys!  And welcome back, David!

After thinking about Shinichiro&apos;s comment on the extra_flags parameter, I&apos;d say we should take it out (either in this report or a later report), and then switch to OptionParser as Eric suggested to me when reviewing a different script:

https://bugs.webkit.org/show_bug.cgi?id=33045#c16</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177452</commentid>
    <comment_count>9</comment_count>
      <attachid>45541</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-01-05 16:16:46 -0800</bug_when>
    <thetext>Comment on attachment 45541
Proposed patch

Just a few minor things to address.


&gt; Index: WebKitTools/Scripts/modules/style.py

&gt; -def exit_with_categories(display_help=False):
&gt; -    &quot;&quot;&quot;Exit and print all style categories, along with the default filter.
&gt; +    def __init__(self, output_format, verbosity=1, filter_rules=None,
&gt; +                 git_commit=None, extra_flag_values=None):
&gt; +        if filter_rules is None:
&gt; +            filter_rules = []
&gt; +        if extra_flag_values is None:
&gt; +            extra_flag_values is {}

I think you meant
   extra_flag_values = {}

&gt; +        for extra_flag in extra_flags:
&gt; +            if extra_flag in flags:
&gt; +                raise ValueError(&apos;Flag \&apos;%(extra_flag)s is duplicated &apos;
&gt; +                                 &apos;or already supported.&apos; %
&gt; +                                 {&apos;extra_flag&apos;: extra_flag })

Extra space after extra_flag

&gt; Index: WebKitTools/Scripts/modules/style_unittest.py
&gt; +    def _create_parser(self, defaults=None):
&gt; +        &quot;&quot;&quot;&quot;Return an ArgumentParser instance for testing.&quot;&quot;&quot;
&gt; +        def create_usage(_defaults):
&gt; +            &quot;&quot;&quot;Return a usage string for testing.&quot;&quot;&quot;
&gt; +            return &quot;usage&quot;;

Get rid of the trailing &quot;;&quot;
(Your C++ programming is showing.)


Also please consider Shinichiro&apos;s other comments:

I slightly prefer using assertTrue and assertFalse for these assertions.

&gt; +    def test_defaults(self):
&gt; +        defaults = style.ArgumentDefaults(style.DEFAULT_OUTPUT_FORMAT,
&gt; +                                          style.DEFAULT_VERBOSITY,
&gt; +                                          style.WEBKIT_FILTER_RULES)
&gt; +        parser = style.ArgumentParser(defaults)
&gt; +        parser.parse([]) # works

We may want to check the return value of parser.parse?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177527</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-05 19:23:51 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; +        def create_usage(_defaults):
&gt; &gt; +            &quot;&quot;&quot;Return a usage string for testing.&quot;&quot;&quot;
&gt; &gt; +            return &quot;usage&quot;;
&gt; 
&gt; Get rid of the trailing &quot;;&quot;
&gt; (Your C++ programming is showing.)

Thanks, David -- good eye!  And thanks, Shinichiro!

I&apos;m incorporating all of your and Shinichiro&apos;s comments.  In regards to checking the return value of parse() when passing default arguments, I&apos;m adding a couple comments there instead of adding an explicit check.  The reason is that if some input value code paths aren&apos;t being checked, those checks should really be added to the unit tests that check parse()&apos;s return values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177534</commentid>
    <comment_count>11</comment_count>
      <attachid>45954</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-05 20:49:23 -0800</bug_when>
    <thetext>Created attachment 45954
Proposed patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177535</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-05 20:52:09 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45954 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177542</commentid>
    <comment_count>13</comment_count>
      <attachid>45954</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-05 22:38:04 -0800</bug_when>
    <thetext>Comment on attachment 45954
Proposed patch 2

Clearing flags on attachment: 45954

Committed r52849: &lt;http://trac.webkit.org/changeset/52849&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177543</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-05 22:38:11 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45541</attachid>
            <date>2009-12-27 19:54:55 -0800</date>
            <delta_ts>2010-01-05 20:49:23 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch-tools5-3.txt</filename>
            <type>text/plain</type>
            <size>40278</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUyNTg0KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAKKzIwMDktMTItMjcgIENocmlzIEplcmRvbmVrICA8
Y2hyaXMuamVyZG9uZWtAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgY2hlY2std2Via2l0LXN0eWxlJ3MgYXJndW1l
bnQgcGFyc2VyIHRvIG5vdCByZWx5CisgICAgICAgIG9uIGdsb2JhbCBzdGF0ZSwgYW5kIGltcHJv
dmVkIGl0cyBlcnJvciBoYW5kbGluZyBhbmQgdW5pdCAKKyAgICAgICAgdGVzdCBjb3ZlcmFnZS4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI5NjYK
KyAgICAgICAgICAKKyAgICAgICAgKiBTY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHlsZToKKyAgICAg
ICAgICAtIEFkanVzdGVkIHRvIHVzZSBuZXcgYXJndW1lbnQgcGFyc2VyLgorCisgICAgICAgICog
U2NyaXB0cy9tb2R1bGVzL2NwcF9zdHlsZS5weToKKyAgICAgICAgICAtIENoYW5nZWQgX0NwcFN0
eWxlU3RhdGUgdG8gYWNjZXB0IGFuIGFycmF5IG9mIGZpbHRlciBydWxlcworICAgICAgICAgICAg
aW5zdGVhZCBvZiBhIGNvbW1hLWRlbGltaXRlZCBzdHJpbmcuCisgICAgICAgICAgLSBFbGltaW5h
dGVkIGNwcF9zdHlsZS5fREVGQVVMVF9GSUxURVJfUlVMRVMuCisgICAgICAgICAgLSBFbGltaW5h
dGVkIGNwcF9zdHlsZS5fVVNBR0UuCisKKyAgICAgICAgKiBTY3JpcHRzL21vZHVsZXMvY3BwX3N0
eWxlX3VuaXR0ZXN0LnB5OgorICAgICAgICAgIC0gVXBkYXRlZCB0ZXN0X2ZpbHRlcigpIGFuZCB0
ZXN0X2RlZmF1bHRfZmlsdGVyKCkuCisgICAgICAgIAorICAgICAgICAqIFNjcmlwdHMvbW9kdWxl
cy9zdHlsZS5weToKKyAgICAgICAgICAtIENvbnZlcnRlZCBzdHlsZS5fVVNBR0UgdG8gY3JlYXRl
X3VzYWdlKCkuCisgICAgICAgICAgLSBDb3JyZWN0ZWQgdXNhZ2UgaW5zdHJ1Y3Rpb25zIGJ5IHJl
bW92aW5nIDAgYXMgYSB2YWxpZAorICAgICAgICAgICAgLS12ZXJib3NlIGZsYWcgdmFsdWUuCisg
ICAgICAgICAgLSBSZW1vdmVkIHVzZV93ZWJraXRfc3R5bGVzKCkuCisgICAgICAgICAgLSBBZGRl
ZCBQcm9jZXNzb3JPcHRpb25zIGNsYXNzLgorICAgICAgICAgIC0gQWRkZWQgQXJndW1lbnREZWZh
dWx0cyBjbGFzcy4KKyAgICAgICAgICAtIEFkZGVkIEFyZ3VtZW50UHJpbnRlciBjbGFzcy4KKyAg
ICAgICAgICAtIFJlbW92ZWQgcGFyc2VfYXJndW1lbnRzIGFuZCBhZGRlZCBBcmd1bWVudFBhcnNl
ciBjbGFzcy4KKyAgICAgICAgICAtIE1vdmVkIGV4aXRfd2l0aF91c2FnZSgpIGFuZCBleGl0X3dp
dGhfY2F0ZWdvcmllcygpIGludG8gCisgICAgICAgICAgICBBcmd1bWVudFBhcnNlci4KKyAgICAg
ICAgICAtIFJlZmFjdG9yZWQgcGFyc2VfYXJndW1lbnRzKCkgYXMgQXJndW1lbnRQYXJzZXIucGFy
c2UoKS4KKyAgICAgICAgICAtIEltcHJvdmVkIHBhcnNlciBlcnJvciBoYW5kbGluZy4KKyAgICAg
ICAgICAKKyAgICAgICAgKiBTY3JpcHRzL21vZHVsZXMvc3R5bGVfdW5pdHRlc3QucHk6CisgICAg
ICAgICAgLSBBZGRlZCBEZWZhdWx0QXJndW1lbnRzVGVzdCBjbGFzcy4KKyAgICAgICAgICAtIEFk
ZHJlc3NlZCBGSVhNRSB0byBjaGVjayBzdHlsZS5XRUJLSVRfRklMVEVSX1JVTEVTCisgICAgICAg
ICAgICBhZ2FpbnN0IHN0eWxlLlNUWUxFX0NBVEVHT1JJRVMuCisgICAgICAgICAgLSBBZGRlZCBB
cmd1bWVudFByaW50ZXJUZXN0IGNsYXNzLgorICAgICAgICAgIC0gQWRkZWQgQXJndW1lbnRQYXJz
ZXJUZXN0IGNsYXNzIGFuZCByZXdyb3RlIHBhcnNlciB1bml0IHRlc3RzLgorCiAyMDA5LTEyLTI3
ICBEYW5pZWwgQmF0ZXMgIDxkYmF0ZXNAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
LiBBZGRlZCBtaXNzaW5nIGZpbGUgc3R5bGVfdW5pdHRlc3QucHkgdGhhdCB3YXNuJ3QgY29tbWl0
dGVkCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHlsZQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHlsZQkocmV2aXNpb24g
NTI1ODQpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHlsZQkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsMTEgKzUxLDYgQEAgZnJvbSBtb2R1bGVzLnNjbSBpbXBvcnQgZGV0ZWN0
X3NjbV9zeXN0ZQogCiAKIGRlZiBtYWluKCk6Ci0gICAgc3R5bGUudXNlX3dlYmtpdF9zdHlsZXMo
KQotCi0gICAgKGZpbGVzLCBmbGFncykgPSBzdHlsZS5wYXJzZV9hcmd1bWVudHMoc3lzLmFyZ3Zb
MTpdLCBbImdpdC1jb21taXQ9Il0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGlzcGxheV9oZWxwPVRydWUpCi0KICAgICAjIENoYW5nZSBzdGRlcnIgdG8gd3Jp
dGUgd2l0aCByZXBsYWNlbWVudCBjaGFyYWN0ZXJzIHNvIHdlIGRvbid0IGRpZQogICAgICMgaWYg
d2UgdHJ5IHRvIHByaW50IHNvbWV0aGluZyBjb250YWluaW5nIG5vbi1BU0NJSSBjaGFyYWN0ZXJz
LgogICAgIHN5cy5zdGRlcnIgPSBjb2RlY3MuU3RyZWFtUmVhZGVyV3JpdGVyKHN5cy5zdGRlcnIs
CkBAIC02MywxMCArNTgsMTYgQEAgZGVmIG1haW4oKToKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb2RlY3MuZ2V0d3JpdGVyKCd1dGY4JyksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcGxhY2UnKQogCi0gICAgaWYgZmls
ZXMgYW5kICItLWdpdC1jb21taXQiIGluIGZsYWdzOgotICAgICAgICBzdHlsZS5leGl0X3dpdGhf
dXNhZ2UoJ0l0IGlzIG5vdCBwb3NzaWJsZSB0byBjaGVjayBmaWxlcyBhbmQgYSAnCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnc3BlY2lmaWMgY29tbWl0IGF0IHRoZSBzYW1lIHRpbWUu
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlfaGVscD1UcnVlKQorICAg
IGRlZmF1bHRzID0gc3R5bGUuQXJndW1lbnREZWZhdWx0cyhzdHlsZS5ERUZBVUxUX09VVFBVVF9G
T1JNQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLkRFRkFV
TFRfVkVSQk9TSVRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHls
ZS5XRUJLSVRfRklMVEVSX1JVTEVTKQorCisgICAgcGFyc2VyID0gc3R5bGUuQXJndW1lbnRQYXJz
ZXIoZGVmYXVsdHMpCisgICAgKGZpbGVzLCBvcHRpb25zKSA9IHBhcnNlci5wYXJzZShzeXMuYXJn
dlsxOl0pCisKKyAgICAjIEZJWE1FOiBFbGltaW5hdGUgdGhlIG5lZWQgdG8gY2FsbCB0aGlzIGZ1
bmN0aW9uLgorICAgICMgICAgICAgIE9wdGlvbnMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHByb2Nl
c3NfZmlsZSBpbnN0ZWFkLgorICAgIHN0eWxlLnNldF9vcHRpb25zKG9wdGlvbnMpCiAKICAgICBp
ZiBmaWxlczoKICAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVzOgpAQCAtNzYsOCArNzcsOCBA
QCBkZWYgbWFpbigpOgogICAgICAgICBjd2QgPSBvcy5wYXRoLmFic3BhdGgoJy4nKQogICAgICAg
ICBzY20gPSBkZXRlY3Rfc2NtX3N5c3RlbShjd2QpCiAKLSAgICAgICAgaWYgIi0tZ2l0LWNvbW1p
dCIgaW4gZmxhZ3M6Ci0gICAgICAgICAgICBjb21taXQgPSBmbGFnc1siLS1naXQtY29tbWl0Il0K
KyAgICAgICAgaWYgb3B0aW9ucy5naXRfY29tbWl0OgorICAgICAgICAgICAgY29tbWl0ID0gb3B0
aW9ucy5naXRfY29tbWl0CiAgICAgICAgICAgICBpZiAnLi4nIGluIGNvbW1pdDoKICAgICAgICAg
ICAgICAgICAjIEZJWE1FOiBJZiB0aGUgcmFuZ2UgaXMgYSAiLi4uIiwgdGhlIGNvZGUgc2hvdWxk
IGZpbmQgdGhlIGNvbW1vbiBhbmNlc3RvciBhbmQKICAgICAgICAgICAgICAgICAjIHN0YXJ0IHRo
ZXJlIChzZWUgZ2l0IGRpZmYgLS1oZWxwIGZvciBpbmZvcm1hdGlvbiBhYm91dCBob3cgLi4uIHVz
dWFsbHkgd29ya3MpLgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NwcF9zdHls
ZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3BwX3N0eWxl
LnB5CShyZXZpc2lvbiA1MjU4NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jcHBf
c3R5bGUucHkJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDE1ICs0Nyw2IEBAIGltcG9ydCBzeXMKIGlt
cG9ydCB1bmljb2RlZGF0YQogCiAKLV9VU0FHRSA9ICcnCi0KLQotIyBUaGUgZGVmYXVsdCBzdGF0
ZSBvZiB0aGUgY2F0ZWdvcnkgZmlsdGVyLiBUaGlzIGlzIG92ZXJyaWRlZCBieSB0aGUgLS1maWx0
ZXI9Ci0jIGZsYWcuIEJ5IGRlZmF1bHQgYWxsIGVycm9ycyBhcmUgb24sIHNvIG9ubHkgYWRkIGhl
cmUgY2F0ZWdvcmllcyB0aGF0IHNob3VsZCBiZQotIyBvZmYgYnkgZGVmYXVsdCAoaS5lLiwgY2F0
ZWdvcmllcyB0aGF0IG11c3QgYmUgZW5hYmxlZCBieSB0aGUgLS1maWx0ZXI9IGZsYWdzKS4KLSMg
QWxsIGVudHJpZXMgaGVyZSBzaG91bGQgc3RhcnQgd2l0aCBhICctJyBvciAnKycsIGFzIGluIHRo
ZSAtLWZpbHRlcj0gZmxhZy4KLV9ERUZBVUxUX0ZJTFRFUl9SVUxFUyA9IFtdCi0KICMgSGVhZGVy
cyB0aGF0IHdlIGNvbnNpZGVyIFNUTCBoZWFkZXJzLgogX1NUTF9IRUFERVJTID0gZnJvemVuc2V0
KFsKICAgICAnYWxnb2Jhc2UuaCcsICdhbGdvcml0aG0nLCAnYWxsb2MuaCcsICdiaXRzZXQnLCAn
ZGVxdWUnLCAnZXhjZXB0aW9uJywKQEAgLTI1OCw3ICsyNDksNyBAQCBjbGFzcyBfQ3BwU3R5bGVT
dGF0ZShvYmplY3QpOgogICAgICAgICBzZWxmLnZlcmJvc2VfbGV2ZWwgPSAxICAjIGdsb2JhbCBz
ZXR0aW5nLgogICAgICAgICBzZWxmLmVycm9yX2NvdW50ID0gMCAgICAjIGdsb2JhbCBjb3VudCBv
ZiByZXBvcnRlZCBlcnJvcnMKICAgICAgICAgIyBmaWx0ZXJzIHRvIGFwcGx5IHdoZW4gZW1pdHRp
bmcgZXJyb3IgbWVzc2FnZXMKLSAgICAgICAgc2VsZi5maWx0ZXJzID0gX0RFRkFVTFRfRklMVEVS
X1JVTEVTWzpdCisgICAgICAgIHNlbGYuZmlsdGVycyA9IFtdCiAKICAgICAgICAgIyBvdXRwdXQg
Zm9ybWF0OgogICAgICAgICAjICJlbWFjcyIgLSBmb3JtYXQgdGhhdCBlbWFjcyBjYW4gcGFyc2Ug
KGRlZmF1bHQpCkBAIC0yODIsMTYgKzI3MywxOCBAQCBjbGFzcyBfQ3BwU3R5bGVTdGF0ZShvYmpl
Y3QpOgogICAgICAgICBlcnJvciBtZXNzYWdlLgogCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAg
ZmlsdGVyczogQSBzdHJpbmcgb2YgY29tbWEtc2VwYXJhdGVkIGZpbHRlcnMgKGVnICIrd2hpdGVz
cGFjZS9pbmRlbnQiKS4KLSAgICAgICAgICAgICAgICAgICBFYWNoIGZpbHRlciBzaG91bGQgc3Rh
cnQgd2l0aCArIG9yIC07IGVsc2Ugd2UgZGllLgorICAgICAgICAgIGZpbHRlcnM6IEEgbGlzdCBv
ZiBzdHJpbmdzIHRoYXQgYXJlIGJvb2xlYW4gZmlsdGVyIHJ1bGVzIHVzZWQKKyAgICAgICAgICAg
ICAgICAgICB0byBkZXRlcm1pbmUgd2hldGhlciBhIHN0eWxlIGNhdGVnb3J5IHNob3VsZCBiZSBj
aGVja2VkLgorICAgICAgICAgICAgICAgICAgIEVhY2ggc3RyaW5nIHNob3VsZCBzdGFydCB3aXRo
ICsgb3IgLS4gQW4gZXhhbXBsZQorICAgICAgICAgICAgICAgICAgIHN0cmluZyBpcyAiK3doaXRl
c3BhY2UvaW5kZW50Ii4gVGhlIGxpc3QgaW5jbHVkZXMgYW55CisgICAgICAgICAgICAgICAgICAg
cHJlcGVuZGVkIGRlZmF1bHQgZmlsdGVyIHJ1bGVzLgogCiAgICAgICAgIFJhaXNlczoKLSAgICAg
ICAgICBWYWx1ZUVycm9yOiBUaGUgY29tbWEtc2VwYXJhdGVkIGZpbHRlcnMgZGlkIG5vdCBhbGwg
c3RhcnQgd2l0aCAnKycgb3IgJy0nLgotICAgICAgICAgICAgICAgICAgICAgIEUuZy4gIi0sK3do
aXRlc3BhY2UsLXdoaXRlc3BhY2UvaW5kZW50LHdoaXRlc3BhY2UvYmFkZmlsdGVyIgorICAgICAg
ICAgIFZhbHVlRXJyb3I6IE5vdCBhbGwgZmlsdGVycyBzdGFydGVkIHdpdGggJysnIG9yICctJy4g
Rm9yIGV4YW1wbGUsCisgICAgICAgICAgICAgICAgICAgICAgIi0sK3doaXRlc3BhY2UsLXdoaXRl
c3BhY2UvaW5kZW50LHdoaXRlc3BhY2UvYmFkZmlsdGVyIgogICAgICAgICAiIiIKLSAgICAgICAg
IyBEZWZhdWx0IGZpbHRlcnMgYWx3YXlzIGhhdmUgbGVzcyBwcmlvcml0eSB0aGFuIHRoZSBmbGFn
IG9uZXMuCi0gICAgICAgIHNlbGYuZmlsdGVycyA9IF9ERUZBVUxUX0ZJTFRFUl9SVUxFU1s6XQot
ICAgICAgICBmb3IgZmlsdGVyIGluIGZpbHRlcnMuc3BsaXQoJywnKToKKyAgICAgICAgc2VsZi5m
aWx0ZXJzID0gW10KKyAgICAgICAgZm9yIGZpbHRlciBpbiBmaWx0ZXJzOgogICAgICAgICAgICAg
Y2xlYW5fZmlsdGVyID0gZmlsdGVyLnN0cmlwKCkKICAgICAgICAgICAgIGlmIGNsZWFuX2ZpbHRl
cjoKICAgICAgICAgICAgICAgICBzZWxmLmZpbHRlcnMuYXBwZW5kKGNsZWFuX2ZpbHRlcikKQEAg
LTM0NCw4ICszMzcsMTEgQEAgZGVmIF9zZXRfZmlsdGVycyhmaWx0ZXJzKToKICAgICBlcnJvciBt
ZXNzYWdlLgogCiAgICAgQXJnczoKLSAgICAgIGZpbHRlcnM6IEEgc3RyaW5nIG9mIGNvbW1hLXNl
cGFyYXRlZCBmaWx0ZXJzIChlZyAid2hpdGVzcGFjZS9pbmRlbnQiKS4KLSAgICAgICAgICAgICAg
IEVhY2ggZmlsdGVyIHNob3VsZCBzdGFydCB3aXRoICsgb3IgLTsgZWxzZSB3ZSBkaWUuCisgICAg
ICBmaWx0ZXJzOiBBIGxpc3Qgb2Ygc3RyaW5ncyB0aGF0IGFyZSBib29sZWFuIGZpbHRlciBydWxl
cyB1c2VkCisgICAgICAgICAgICAgICB0byBkZXRlcm1pbmUgd2hldGhlciBhIHN0eWxlIGNhdGVn
b3J5IHNob3VsZCBiZSBjaGVja2VkLgorICAgICAgICAgICAgICAgRWFjaCBzdHJpbmcgc2hvdWxk
IHN0YXJ0IHdpdGggKyBvciAtLiBBbiBleGFtcGxlCisgICAgICAgICAgICAgICBzdHJpbmcgaXMg
Iit3aGl0ZXNwYWNlL2luZGVudCIuIFRoZSBsaXN0IGluY2x1ZGVzIGFueQorICAgICAgICAgICAg
ICAgcHJlcGVuZGVkIGRlZmF1bHQgZmlsdGVyIHJ1bGVzLgogICAgICIiIgogICAgIF9jcHBfc3R5
bGVfc3RhdGUuc2V0X2ZpbHRlcnMoZmlsdGVycykKIApJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0
cy9tb2R1bGVzL2NwcF9zdHlsZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9TY3JpcHRzL21vZHVsZXMvY3BwX3N0eWxlX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA1MjU4NCkK
KysrIFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jcHBfc3R5bGVfdW5pdHRlc3QucHkJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDE0ICs0MSwxNiBAQCBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgcmUK
IGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGNwcF9zdHlsZQotIyBGSVhNRTogUmVtb3ZlIHRoZSBu
ZWVkIHRvIGltcG9ydCBzb21ldGhpbmcgZnJvbSBzdHlsZS4KLWZyb20gc3R5bGUgaW1wb3J0IF9T
VFlMRV9DQVRFR09SSUVTCisjIEZJWE1FOiBSZW1vdmUgdGhlIG5lZWQgdG8gaW1wb3J0IHNvbWV0
aGluZyBmcm9tIHN0eWxlLiBTZWUgdGhlCisjICAgICAgICBGSVhNRSBub3RlcyBuZWFyIHRoZSBT
VFlMRV9DQVRFR09SSUVTIGRlZmluaXRpb24gZm9yIGEKKyMgICAgICAgIHN1Z2dlc3Rpb24gb24g
aG93IHRvIGJlc3QgZG8gdGhpcy4KK2Zyb20gc3R5bGUgaW1wb3J0IFNUWUxFX0NBVEVHT1JJRVMK
IAogIyBUaGlzIGNsYXNzIHdvcmtzIGFzIGFuIGVycm9yIGNvbGxlY3RvciBhbmQgcmVwbGFjZXMg
Y3BwX3N0eWxlLkVycm9yCiAjIGZ1bmN0aW9uIGZvciB0aGUgdW5pdCB0ZXN0cy4gIFdlIGFsc28g
dmVyaWZ5IGVhY2ggY2F0ZWdvcnkgd2Ugc2VlCi0jIGlzIGluIGNwcF9zdHlsZS5fU1RZTEVfQ0FU
RUdPUklFUywgdG8gaGVscCBrZWVwIHRoYXQgbGlzdCB1cCB0byBkYXRlLgorIyBpcyBpbiBTVFlM
RV9DQVRFR09SSUVTLCB0byBoZWxwIGtlZXAgdGhhdCBsaXN0IHVwIHRvIGRhdGUuCiBjbGFzcyBF
cnJvckNvbGxlY3RvcjoKLSAgICBfYWxsX3N0eWxlX2NhdGVnb3JpZXMgPSBfU1RZTEVfQ0FURUdP
UklFUworICAgIF9hbGxfc3R5bGVfY2F0ZWdvcmllcyA9IFNUWUxFX0NBVEVHT1JJRVMKICAgICAj
IFRoaXMgYSBsaXN0IGluY2x1ZGluZyBhbGwgY2F0ZWdvcmllcyBzZWVuIGluIGFueSB1bml0IHRl
c3QuCiAgICAgX3NlZW5fc3R5bGVfY2F0ZWdvcmllcyA9IHt9CiAKQEAgLTYxLDcgKzYzLDcgQEAg
Y2xhc3MgRXJyb3JDb2xsZWN0b3I6CiAgICAgICAgICAgICAgICAgIGNhdGVnb3J5LCBjb25maWRl
bmNlLCBtZXNzYWdlKToKICAgICAgICAgc2VsZi5fYXNzZXJ0X2ZuKGNhdGVnb3J5IGluIHNlbGYu
X2FsbF9zdHlsZV9jYXRlZ29yaWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgJ01lc3NhZ2Ug
IiVzIiBoYXMgY2F0ZWdvcnkgIiVzIiwnCi0gICAgICAgICAgICAgICAgICAgICAgICAnIHdoaWNo
IGlzIG5vdCBpbiBfU1RZTEVfQ0FURUdPUklFUycgJSAobWVzc2FnZSwgY2F0ZWdvcnkpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgJyB3aGljaCBpcyBub3QgaW4gU1RZTEVfQ0FURUdPUklFUycg
JSAobWVzc2FnZSwgY2F0ZWdvcnkpKQogICAgICAgICBzZWxmLl9zZWVuX3N0eWxlX2NhdGVnb3Jp
ZXNbY2F0ZWdvcnldID0gMQogICAgICAgICBpZiBjcHBfc3R5bGUuX3Nob3VsZF9wcmludF9lcnJv
cihjYXRlZ29yeSwgY29uZmlkZW5jZSk6CiAgICAgICAgICAgICBzZWxmLl9lcnJvcnMuYXBwZW5k
KCclcyAgWyVzXSBbJWRdJyAlIChtZXNzYWdlLCBjYXRlZ29yeSwgY29uZmlkZW5jZSkpCkBAIC0x
NTcxLDcgKzE1NzMsNyBAQCBjbGFzcyBDcHBTdHlsZVRlc3QoQ3BwU3R5bGVUZXN0QmFzZSk6CiAg
ICAgZGVmIHRlc3RfZmlsdGVyKHNlbGYpOgogICAgICAgICBvbGRfZmlsdGVycyA9IGNwcF9zdHls
ZS5fY3BwX3N0eWxlX3N0YXRlLmZpbHRlcnMKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgY3Bw
X3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUuc2V0X2ZpbHRlcnMoJy0sK3doaXRlc3BhY2UsLXdoaXRl
c3BhY2UvaW5kZW50JykKKyAgICAgICAgICAgIGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLnNl
dF9maWx0ZXJzKFsnLScsICcrd2hpdGVzcGFjZScsICctd2hpdGVzcGFjZS9pbmRlbnQnXSkKICAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCiAgICAgICAgICAgICAgICAgJy8vIEhlbGxvIHRo
ZXJlICcsCiAgICAgICAgICAgICAgICAgJ0xpbmUgZW5kcyBpbiB3aGl0ZXNwYWNlLiAgQ29uc2lk
ZXIgZGVsZXRpbmcgdGhlc2UgZXh0cmEgc3BhY2VzLicKQEAgLTE1ODEsMTUgKzE1ODMsMTMgQEAg
Y2xhc3MgQ3BwU3R5bGVUZXN0KENwcFN0eWxlVGVzdEJhc2UpOgogICAgICAgICBmaW5hbGx5Ogog
ICAgICAgICAgICAgY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUuZmlsdGVycyA9IG9sZF9maWx0
ZXJzCiAKLSAgICBkZWYgdGVzdF9kZWZhdWx0X2ZpbHRlcihzZWxmKToKLSAgICAgICAgZGVmYXVs
dF9maWx0ZXJfcnVsZXMgPSBjcHBfc3R5bGUuX0RFRkFVTFRfRklMVEVSX1JVTEVTCisgICAgZGVm
IHRlc3RfZmlsdGVyX2FwcGVuZGluZyhzZWxmKToKICAgICAgICAgb2xkX2ZpbHRlcnMgPSBjcHBf
c3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS5maWx0ZXJzCi0gICAgICAgIGNwcF9zdHlsZS5fREVGQVVM
VF9GSUxURVJfUlVMRVMgPSBbICctd2hpdGVzcGFjZScgXQogICAgICAgICB0cnk6CiAgICAgICAg
ICAgICAjIFJlc2V0IGZpbHRlcnMKLSAgICAgICAgICAgIGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0
YXRlLnNldF9maWx0ZXJzKCcnKQorICAgICAgICAgICAgY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3Rh
dGUuc2V0X2ZpbHRlcnMoWyctd2hpdGVzcGFjZSddKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRf
bGludCgnLy8gSGVsbG8gdGhlcmUgJywgJycpCi0gICAgICAgICAgICBjcHBfc3R5bGUuX2NwcF9z
dHlsZV9zdGF0ZS5zZXRfZmlsdGVycygnK3doaXRlc3BhY2UvZW5kX29mX2xpbmUnKQorICAgICAg
ICAgICAgY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUuc2V0X2ZpbHRlcnMoWyctd2hpdGVzcGFj
ZScsICcrd2hpdGVzcGFjZS9lbmRfb2ZfbGluZSddKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRf
bGludCgKICAgICAgICAgICAgICAgICAnLy8gSGVsbG8gdGhlcmUgJywKICAgICAgICAgICAgICAg
ICAnTGluZSBlbmRzIGluIHdoaXRlc3BhY2UuICBDb25zaWRlciBkZWxldGluZyB0aGVzZSBleHRy
YSBzcGFjZXMuJwpAQCAtMTU5Nyw3ICsxNTk3LDYgQEAgY2xhc3MgQ3BwU3R5bGVUZXN0KENwcFN0
eWxlVGVzdEJhc2UpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnIHdlaXJkIG9wZW5p
bmcgc3BhY2UnLCAnJykKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGNwcF9zdHlsZS5f
Y3BwX3N0eWxlX3N0YXRlLmZpbHRlcnMgPSBvbGRfZmlsdGVycwotICAgICAgICAgICAgY3BwX3N0
eWxlLl9ERUZBVUxUX0ZJTFRFUl9SVUxFUyA9IGRlZmF1bHRfZmlsdGVyX3J1bGVzCiAKICAgICBk
ZWYgdGVzdF91bm5hbWVkX25hbWVzcGFjZXNfaW5faGVhZGVycyhzZWxmKToKICAgICAgICAgc2Vs
Zi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRz
L21vZHVsZXMvc3R5bGUucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1
bGVzL3N0eWxlLnB5CShyZXZpc2lvbiA1MjU4NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvbW9k
dWxlcy9zdHlsZS5weQkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogIiIiRnJvbnQg
ZW5kIG9mIHNvbWUgc3R5bGUtY2hlY2tlciBtb2R1bGVzLiIiIgogCiAjIEZJWE1FOiBNb3ZlIG1v
cmUgY29kZSBmcm9tIGNwcF9zdHlsZSB0byBoZXJlLgotIyBjaGVjay13ZWJraXQtc3R5bGUgc2hv
dWxkIG5vdCByZWZlciBjcHBfc3R5bGUgZGlyZWN0bHkuCiAKIGltcG9ydCBnZXRvcHQKIGltcG9y
dCBvcy5wYXRoCkBAIC00MCwyMiArMzksMjQgQEAgaW1wb3J0IHRleHRfc3R5bGUKIGZyb20gZGlm
Zl9wYXJzZXIgaW1wb3J0IERpZmZQYXJzZXIKIAogCi0jIERlZmF1bHQgb3B0aW9ucwotX0RFRkFV
TFRfVkVSQk9TSVRZID0gMQotX0RFRkFVTFRfT1VUUFVUX0ZPUk1BVCA9ICdlbWFjcycKKyMgVGhl
c2UgZGVmYXVsdHMgYXJlIHVzZWQgYnkgY2hlY2std2Via2l0LXN0eWxlLgorREVGQVVMVF9WRVJC
T1NJVFkgPSAxCitERUZBVUxUX09VVFBVVF9GT1JNQVQgPSAnZW1hY3MnCiAKIAogIyBGSVhNRTog
Rm9yIHN0eWxlIGNhdGVnb3JpZXMgd2Ugd2lsbCBuZXZlciB3YW50IHRvIGhhdmUsIHJlbW92ZSB0
aGVtLgogIyAgICAgICAgRm9yIGNhdGVnb3JpZXMgZm9yIHdoaWNoIHdlIHdhbnQgdG8gaGF2ZSBz
aW1pbGFyIGZ1bmN0aW9uYWxpdHksCiAjICAgICAgICBtb2RpZnkgdGhlIGltcGxlbWVudGF0aW9u
IGFuZCBlbmFibGUgdGhlbS4KLSMgRklYTUU6IEFkZCBhIHVuaXQgdGVzdCB0byBlbnN1cmUgdGhl
IGNvcnJlc3BvbmRpbmcgY2F0ZWdvcmllcwotIyAgICAgICAgYXJlIGVsZW1lbnRzIG9mIF9TVFlM
RV9DQVRFR09SSUVTLgogIwotIyBGb3IgdW5hbWJpZ3VvdXMgdGVybWlub2xvZ3ksIHdlIHVzZSAi
ZmlsdGVyIHJ1bGUiIHJhdGhlciB0aGFuICJmaWx0ZXIiCi0jIGZvciBhbiBpbmRpdmlkdWFsIGJv
b2xlYW4gZmlsdGVyIGZsYWcgbGlrZSAiK2ZvbyIuIFRoaXMgYWxsb3dzIHVzIHRvIAotIyByZXNl
cnZlICJmaWx0ZXIiIGZvciB3aGF0IG9uZSBnZXRzIGJ5IGNvbGxlY3RpdmVseSBhcHBseWluZyBh
bGwgb2YgCi0jIHRoZSBmaWx0ZXIgcnVsZXMgYXMgc3BlY2lmaWVkIGJ5IGEgLS1maWx0ZXIgZmxh
Zy4KLV9XRUJLSVRfRklMVEVSX1JVTEVTID0gWworIyBUaHJvdWdob3V0IHRoaXMgbW9kdWxlLCB3
ZSB1c2UgImZpbHRlciBydWxlIiByYXRoZXIgdGhhbiAiZmlsdGVyIgorIyBmb3IgYW4gaW5kaXZp
ZHVhbCBib29sZWFuIGZpbHRlciBmbGFnIGxpa2UgIitmb28iLiBUaGlzIGFsbG93cyB1cyB0bwor
IyByZXNlcnZlICJmaWx0ZXIiIGZvciB3aGF0IG9uZSBnZXRzIGJ5IGNvbGxlY3RpdmVseSBhcHBs
eWluZyBhbGwgb2YKKyMgdGhlIGZpbHRlciBydWxlcy4KKyMKKyMgVGhlIF9XRUJLSVRfRklMVEVS
X1JVTEVTIGFyZSBwcmVwZW5kZWQgdG8gYW55IHVzZXItc3BlY2lmaWVkIGZpbHRlcgorIyBydWxl
cy4gU2luY2UgYnkgZGVmYXVsdCBhbGwgZXJyb3JzIGFyZSBvbiwgb25seSBpbmNsdWRlIHJ1bGVz
IHRoYXQKKyMgYmVnaW4gd2l0aCBhIC0gc2lnbi4KK1dFQktJVF9GSUxURVJfUlVMRVMgPSBbCiAg
ICAgJy1idWlsZC9lbmRpZl9jb21tZW50JywKICAgICAnLWJ1aWxkL2luY2x1ZGVfd2hhdF95b3Vf
dXNlJywgICMgPHN0cmluZz4gZm9yIHN0ZDo6c3RyaW5nCiAgICAgJy1idWlsZC9zdG9yYWdlX2Ns
YXNzJywgICMgY29uc3Qgc3RhdGljCkBAIC03OSwxMSArODAsMjAgQEAgX1dFQktJVF9GSUxURVJf
UlVMRVMgPSBbCiAgICAgXQogCiAKKyMgRklYTUU6IFRoZSBTVFlMRV9DQVRFR09SSUVTIHNob3cg
dXAgaW4gYm90aCBmaWxlIHR5cGVzIGNwcF9zdHlsZS5weQorIyAgICAgICAgYW5kIHRleHRfc3R5
bGUucHkuIEJyZWFrIHRoaXMgbGlzdCBpbnRvIHBvc3NpYmx5IG92ZXJsYXBwaW5nCisjICAgICAg
ICBzdWItbGlzdHMsIGFuZCBzdG9yZSBlYWNoIHN1Yi1saXN0IGluIHRoZSBjb3JyZXNwb25kaW5n
IC5weQorIyAgICAgICAgZmlsZS4gVGhlIGZpbGUgc3R5bGUucHkgY2FuIG9idGFpbiB0aGUgbWFz
dGVyIGxpc3QgYnkgdGFraW5nCisjICAgICAgICB0aGUgdW5pb24uIFRoaXMgd2lsbCBhbGxvdyB0
aGUgdW5pdCB0ZXN0cyBmb3IgZWFjaCBmaWxlIHR5cGUKKyMgICAgICAgIHRvIGNoZWNrIHRoYXQg
YWxsIG9mIHRoZWlyIHJlc3BlY3RpdmUgc3R5bGUgY2F0ZWdvcmllcyBhcmUgCisjICAgICAgICBy
ZXByZXNlbnRlZCAtLSB3aXRob3V0IGhhdmluZyB0byByZWZlcmVuY2Ugc3R5bGUucHkgb3IgYmUK
KyMgICAgICAgIGF3YXJlIG9mIHRoZSBleGlzdGVuY2Ugb2Ygb3RoZXIgZmlsZSB0eXBlcy4KKyMK
ICMgV2UgY2F0ZWdvcml6ZSBlYWNoIHN0eWxlIHJ1bGUgd2UgcHJpbnQuICBIZXJlIGFyZSB0aGUg
Y2F0ZWdvcmllcy4KLSMgV2Ugd2FudCBhbiBleHBsaWNpdCBsaXN0IHNvIHdlIGNhbiBsaXN0IHRo
ZW0gYWxsIGluIGNwcF9zdHlsZSAtLWZpbHRlcj0uCisjIFdlIHdhbnQgYW4gZXhwbGljaXQgbGlz
dCBzbyB3ZSBjYW4gZGlzcGxheSBhIGZ1bGwgbGlzdCB0byB0aGUgdXNlci4KICMgSWYgeW91IGFk
ZCBhIG5ldyBlcnJvciBtZXNzYWdlIHdpdGggYSBuZXcgY2F0ZWdvcnksIGFkZCBpdCB0byB0aGUg
bGlzdAogIyBoZXJlISAgY3BwX3N0eWxlX3VuaXR0ZXN0LnB5IHNob3VsZCB0ZWxsIHlvdSBpZiB5
b3UgZm9yZ2V0IHRvIGRvIHRoaXMuCi1fU1RZTEVfQ0FURUdPUklFUyA9IFsKK1NUWUxFX0NBVEVH
T1JJRVMgPSBbCiAgICAgJ2J1aWxkL2NsYXNzJywKICAgICAnYnVpbGQvZGVwcmVjYXRlZCcsCiAg
ICAgJ2J1aWxkL2VuZGlmX2NvbW1lbnQnLApAQCAtMTQ3LDcgKzE1NywxNCBAQCBfU1RZTEVfQ0FU
RUdPUklFUyA9IFsKICAgICBdCiAKIAotX1VTQUdFID0gIiIiCitkZWYgX2NyZWF0ZV91c2FnZShk
ZWZhdWx0cyk6CisgICAgIiIiUmV0dXJuIHRoZSB1c2FnZSBzdHJpbmcgdG8gZGlzcGxheSBmb3Ig
Y29tbWFuZCBoZWxwLgorCisgICAgQXJnczoKKyAgICAgIGRlZmF1bHRzOiBBbiBBcmd1bWVudERl
ZmF1bHRzIGluc3RhbmNlLgorCisgICAgIiIiCisgICAgdXNhZ2UgPSAiIiIKIFN5bnRheDogJShw
cm9ncmFtX25hbWUpcyBbLS12ZXJib3NlPSNdIFstLWdpdC1jb21taXQ9PFNpbmdsZUNvbW1pdD5d
IFstLW91dHB1dD12czddCiAgICAgICAgIFstLWZpbHRlcj0teCwreSwuLi5dIFtmaWxlXSAuLi4K
IApAQCAtMTcxLDggKzE4OCw5IEBAIFN5bnRheDogJShwcm9ncmFtX25hbWUpcyBbLS12ZXJib3Nl
PSNdIFsKICAgRmxhZ3M6CiAKICAgICB2ZXJib3NlPSMKLSAgICAgIEEgbnVtYmVyIDAtNSB0byBy
ZXN0cmljdCBlcnJvcnMgdG8gY2VydGFpbiB2ZXJib3NpdHkgbGV2ZWxzLgotICAgICAgRGVmYXVs
dHMgdG8gJShkZWZhdWx0X3ZlcmJvc2l0eSlzLgorICAgICAgQSBudW1iZXIgMS01IHRoYXQgcmVz
dHJpY3RzIG91dHB1dCB0byBlcnJvcnMgd2l0aCBhIGNvbmZpZGVuY2UKKyAgICAgIHNjb3JlIGF0
IG9yIGFib3ZlIHRoaXMgdmFsdWUuIEluIHBhcnRpY3VsYXIsIHRoZSB2YWx1ZSAxIGRpc3BsYXlz
CisgICAgICBhbGwgZXJyb3JzLiBUaGUgZGVmYXVsdCBpcyAlKGRlZmF1bHRfdmVyYm9zaXR5KXMu
CiAKICAgICBnaXQtY29tbWl0PTxTaW5nbGVDb21taXQ+CiAgICAgICBDaGVja3MgdGhlIHN0eWxl
IG9mIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgZ2l2ZW4gY29tbWl0IHRvIHRoZSBsb2NhbCB0cmVlLgpA
QCAtMjA0LDEwOCArMjIyLDI3NyBAQCBTeW50YXg6ICUocHJvZ3JhbV9uYW1lKXMgWy0tdmVyYm9z
ZT0jXSBbCiAgICAgICAlKHByb2dyYW1fbmFtZSlzLCBhbG9uZyB3aXRoIHdoaWNoIGFyZSBlbmFi
bGVkIGJ5IGRlZmF1bHQsIHBhc3MKICAgICAgIHRoZSBlbXB0eSBmaWx0ZXIgYXMgZm9sbG93czoK
ICAgICAgICAgIC0tZmlsdGVyPQotIiIiICUgewotICAgICdwcm9ncmFtX25hbWUnOiBvcy5wYXRo
LmJhc2VuYW1lKHN5cy5hcmd2WzBdKSwKLSAgICAnZGVmYXVsdF92ZXJib3NpdHknOiBfREVGQVVM
VF9WRVJCT1NJVFksCi0gICAgJ2RlZmF1bHRfb3V0cHV0X2Zvcm1hdCc6IF9ERUZBVUxUX09VVFBV
VF9GT1JNQVQKLSAgICB9Ci0KLQotZGVmIHVzZV93ZWJraXRfc3R5bGVzKCk6Ci0gICAgIiIiQ29u
ZmlndXJlcyB0aGlzIG1vZHVsZSBmb3IgV2ViS2l0IHN0eWxlLiIiIgotICAgIGNwcF9zdHlsZS5f
REVGQVVMVF9GSUxURVJfUlVMRVMgPSBfV0VCS0lUX0ZJTFRFUl9SVUxFUwotCi0KLWRlZiBleGl0
X3dpdGhfdXNhZ2UoZXJyb3JfbWVzc2FnZSwgZGlzcGxheV9oZWxwPUZhbHNlKToKLSAgICAiIiJF
eGl0IGFuZCBwcmludCBhIHVzYWdlIHN0cmluZyB3aXRoIGFuIG9wdGlvbmFsIGVycm9yIG1lc3Nh
Z2UuCisiIiIgJSB7J3Byb2dyYW1fbmFtZSc6IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0p
LAorICAgICAgICdkZWZhdWx0X3ZlcmJvc2l0eSc6IGRlZmF1bHRzLnZlcmJvc2l0eSwKKyAgICAg
ICAnZGVmYXVsdF9vdXRwdXRfZm9ybWF0JzogZGVmYXVsdHMub3V0cHV0X2Zvcm1hdH0KKworICAg
IHJldHVybiB1c2FnZQorCisKKyMgVGhpcyBjbGFzcyBzaG91bGQgbm90IGhhdmUga25vd2xlZGdl
IG9mIHRoZSBmbGFnIGtleSBuYW1lcy4KK2NsYXNzIFByb2Nlc3Nvck9wdGlvbnMob2JqZWN0KToK
KyAgICAiIiJBIGNvbnRhaW5lciB0byBzdG9yZSBvcHRpb25zIHRvIHVzZSB3aGVuIGNoZWNraW5n
IHN0eWxlLgorCisgICAgQXR0cmlidXRlczoKKyAgICAgIG91dHB1dF9mb3JtYXQ6IEEgc3RyaW5n
IHRoYXQgaXMgdGhlIG91dHB1dCBmb3JtYXQuIFRoZSBzdXBwb3J0ZWQKKyAgICAgICAgICAgICAg
ICAgICAgIG91dHB1dCBmb3JtYXRzIGFyZSAiZW1hY3MiIHdoaWNoIGVtYWNzIGNhbiBwYXJzZQor
ICAgICAgICAgICAgICAgICAgICAgYW5kICJ2czciIHdoaWNoIE1pY3Jvc29mdCBWaXN1YWwgU3R1
ZGlvIDcgY2FuIHBhcnNlLgorCisgICAgICB2ZXJib3NpdHk6IEFuIGludGVnZXIgMS01IHRoYXQg
cmVzdHJpY3RzIG91dHB1dCB0byBlcnJvcnMgd2l0aCBhCisgICAgICAgICAgICAgICAgIGNvbmZp
ZGVuY2Ugc2NvcmUgYXQgb3IgYWJvdmUgdGhpcyB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgVGhl
IGRlZmF1bHQgaXMgMSwgd2hpY2ggZGlzcGxheXMgYWxsIGVycm9ycy4KKworICAgICAgZmlsdGVy
X3J1bGVzOiBBIGxpc3Qgb2Ygc3RyaW5ncyB0aGF0IGFyZSBib29sZWFuIGZpbHRlciBydWxlcyB1
c2VkCisgICAgICAgICAgICAgICAgICAgIHRvIGRldGVybWluZSB3aGV0aGVyIGEgc3R5bGUgY2F0
ZWdvcnkgc2hvdWxkIGJlIGNoZWNrZWQuCisgICAgICAgICAgICAgICAgICAgIEVhY2ggc3RyaW5n
IHNob3VsZCBzdGFydCB3aXRoICsgb3IgLS4gQW4gZXhhbXBsZQorICAgICAgICAgICAgICAgICAg
ICBzdHJpbmcgaXMgIit3aGl0ZXNwYWNlL2luZGVudCIuIFRoZSBsaXN0IGluY2x1ZGVzIGFueQor
ICAgICAgICAgICAgICAgICAgICBwcmVwZW5kZWQgZGVmYXVsdCBmaWx0ZXIgcnVsZXMuIFRoZSBk
ZWZhdWx0IGlzIHRoZQorICAgICAgICAgICAgICAgICAgICBlbXB0eSBsaXN0LCB3aGljaCBpbmNs
dWRlcyBhbGwgY2F0ZWdvcmllcy4KKworICAgICAgZ2l0X2NvbW1pdDogQSBzdHJpbmcgcmVwcmVz
ZW50aW5nIHRoZSBnaXQgY29tbWl0IHRvIGNoZWNrLgorICAgICAgICAgICAgICAgICAgVGhlIGRl
ZmF1bHQgaXMgTm9uZS4KKworICAgICAgZXh0cmFfZmxhZ192YWx1ZXM6IEEgc3RyaW5nLXN0cmlu
ZyBkaWN0aW9uYXJ5IG9mIGFsbCBmbGFnIGtleS12YWx1ZQorICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhaXJzIHRoYXQgYXJlIG5vdCBvdGhlcndpc2UgcmVwcmVzZW50ZWQgYnkgdGhpcworICAg
ICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLiBUaGUgZGVmYXVsdCBpcyB0aGUgZW1wdHkgZGlj
dGlvbmFyeS4KIAotICAgIEFyZ3M6Ci0gICAgICBlcnJvcl9tZXNzYWdlOiBUaGUgb3B0aW9uYWwg
ZXJyb3IgbWVzc2FnZS4KLSAgICAgIGRpc3BsYXlfaGVscDogV2hldGhlciB0byBkaXNwbGF5IGhl
bHAgb3V0cHV0LiBTdXBwcmVzc2luZyBoZWxwCi0gICAgICAgICAgICAgICAgICAgIG91dHB1dCBp
cyB1c2VmdWwgZm9yIHVuaXQgdGVzdHMuCiAgICAgIiIiCi0gICAgaWYgZGlzcGxheV9oZWxwOgot
ICAgICAgICBzeXMuc3RkZXJyLndyaXRlKF9VU0FHRSkKLSAgICBpZiBlcnJvcl9tZXNzYWdlOgot
ICAgICAgICBzeXMuZXhpdCgnXG5GQVRBTCBFUlJPUjogJyArIGVycm9yX21lc3NhZ2UpCi0gICAg
ZWxzZToKLSAgICAgICAgc3lzLmV4aXQoMSkKLQotCi1kZWYgZXhpdF93aXRoX2NhdGVnb3JpZXMo
ZGlzcGxheV9oZWxwPUZhbHNlKToKLSAgICAiIiJFeGl0IGFuZCBwcmludCBhbGwgc3R5bGUgY2F0
ZWdvcmllcywgYWxvbmcgd2l0aCB0aGUgZGVmYXVsdCBmaWx0ZXIuCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIG91dHB1dF9mb3JtYXQsIHZlcmJvc2l0eT0xLCBmaWx0ZXJfcnVsZXM9Tm9uZSwKKyAg
ICAgICAgICAgICAgICAgZ2l0X2NvbW1pdD1Ob25lLCBleHRyYV9mbGFnX3ZhbHVlcz1Ob25lKToK
KyAgICAgICAgaWYgZmlsdGVyX3J1bGVzIGlzIE5vbmU6CisgICAgICAgICAgICBmaWx0ZXJfcnVs
ZXMgPSBbXQorICAgICAgICBpZiBleHRyYV9mbGFnX3ZhbHVlcyBpcyBOb25lOgorICAgICAgICAg
ICAgZXh0cmFfZmxhZ192YWx1ZXMgaXMge30KKworICAgICAgICBzZWxmLm91dHB1dF9mb3JtYXQg
PSBvdXRwdXRfZm9ybWF0CisgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gdmVyYm9zaXR5CisgICAg
ICAgIHNlbGYuZmlsdGVyX3J1bGVzID0gZmlsdGVyX3J1bGVzCisgICAgICAgIHNlbGYuZ2l0X2Nv
bW1pdCA9IGdpdF9jb21taXQKKyAgICAgICAgc2VsZi5leHRyYV9mbGFnX3ZhbHVlcyA9IGV4dHJh
X2ZsYWdfdmFsdWVzCisKKworIyBGSVhNRTogRWxpbWluYXRlIHRoZSBuZWVkIGZvciB0aGlzIGZ1
bmN0aW9uLgorIyAgICAgICAgT3B0aW9ucyBzaG91bGQgYmUgcGFzc2VkIGludG8gcHJvY2Vzc19m
aWxlIGluc3RlYWQuCitkZWYgc2V0X29wdGlvbnMob3B0aW9ucyk6CisgICAgIiIiSW5pdGlhbGl6
ZSBnbG9iYWwgX0NwcFN0eWxlU3RhdGUgaW5zdGFuY2UuCiAKLSAgICBUaGVzZSBjYXRlZ29yeSBu
YW1lcyBhcHBlYXIgaW4gZXJyb3IgbWVzc2FnZXMuICBUaGV5IGNhbiBiZSBmaWx0ZXJlZAotICAg
IHVzaW5nIHRoZSAtLWZpbHRlciBmbGFnLgorICAgIFRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGJl
Zm9yZSBjYWxsaW5nIHByb2Nlc3NfZmlsZS4KIAogICAgIEFyZ3M6Ci0gICAgICBkaXNwbGF5X2hl
bHA6IFdoZXRoZXIgdG8gZGlzcGxheSBoZWxwIG91dHB1dC4gU3VwcHJlc3NpbmcgaGVscAotICAg
ICAgICAgICAgICAgICAgICBvdXRwdXQgaXMgdXNlZnVsIGZvciB1bml0IHRlc3RzLgorICAgICAg
b3B0aW9uczogQSBQcm9jZXNzb3JPcHRpb25zIGluc3RhbmNlLgogICAgICIiIgotICAgIGlmIGRp
c3BsYXlfaGVscDoKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnXG5BbGwgY2F0ZWdvcmllczpc
bicpCi0gICAgICAgIGZvciBjYXRlZ29yeSBpbiBzb3J0ZWQoX1NUWUxFX0NBVEVHT1JJRVMpOgot
ICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnICAgICcgKyBjYXRlZ29yeSArICdcbicpCi0K
LSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnXG5EZWZhdWx0IGZpbHRlciBydWxlcyoqOlxuJykK
LSAgICAgICAgZm9yIGZpbHRlcl9ydWxlIGluIHNvcnRlZChfV0VCS0lUX0ZJTFRFUl9SVUxFUyk6
Ci0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCcgICAgJyArIGZpbHRlcl9ydWxlICsgJ1xu
JykKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnXG4qKlRoZSBjb21tYW5kIGFsd2F5cyBldmFs
dWF0ZXMgdGhlIGFib3ZlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAncnVsZXMsIGFuZCBi
ZWZvcmUgYW55IC0tZmlsdGVyIGZsYWcuXG5cbicpCi0KLSAgICBzeXMuZXhpdCgwKQorICAgIGNw
cF9zdHlsZS5fc2V0X291dHB1dF9mb3JtYXQob3B0aW9ucy5vdXRwdXRfZm9ybWF0KQorICAgIGNw
cF9zdHlsZS5fc2V0X3ZlcmJvc2VfbGV2ZWwob3B0aW9ucy52ZXJib3NpdHkpCisgICAgY3BwX3N0
eWxlLl9zZXRfZmlsdGVycyhvcHRpb25zLmZpbHRlcl9ydWxlcykKIAogCi1kZWYgcGFyc2VfYXJn
dW1lbnRzKGFyZ3MsIGFkZGl0aW9uYWxfZmxhZ3M9W10sIGRpc3BsYXlfaGVscD1GYWxzZSk6Ci0g
ICAgIiIiUGFyc2VzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorIyBUaGlzIGNsYXNzIHNo
b3VsZCBub3QgaGF2ZSBrbm93bGVkZ2Ugb2YgdGhlIGZsYWcga2V5IG5hbWVzLgorY2xhc3MgQXJn
dW1lbnREZWZhdWx0cyhvYmplY3QpOgorICAgICIiIkEgY29udGFpbmVyIHRvIHN0b3JlIGRlZmF1
bHQgYXJndW1lbnQgdmFsdWVzLgorCisgICAgQXR0cmlidXRlczoKKyAgICAgIG91dHB1dF9mb3Jt
YXQ6IEEgc3RyaW5nIHRoYXQgaXMgdGhlIGRlZmF1bHQgb3V0cHV0IGZvcm1hdC4KKyAgICAgIHZl
cmJvc2l0eTogQW4gaW50ZWdlciB0aGF0IGlzIHRoZSBkZWZhdWx0IHZlcmJvc2l0eSBsZXZlbC4K
KyAgICAgIGZpbHRlcl9ydWxlczogQSBsaXN0IG9mIHN0cmluZ3MgdGhhdCBhcmUgYm9vbGVhbiBm
aWx0ZXIgcnVsZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gcHJlcGVuZCB0byBhbnkgdXNlci1z
cGVjaWZpZWQgcnVsZXMuCiAKLSAgICBUaGlzIG1heSBzZXQgdGhlIG91dHB1dCBmb3JtYXQgYW5k
IHZlcmJvc2l0eSBsZXZlbCBhcyBzaWRlLWVmZmVjdHMuCi0KLSAgICBBcmdzOgotICAgICAgYXJn
czogVGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHM6Ci0gICAgICBhZGRpdGlvbmFsX2ZsYWdzOiBB
IGxpc3Qgb2Ygc3RyaW5ncyB3aGljaCBzcGVjaWZpZXMgZmxhZ3Mgd2UgYWxsb3cuCi0gICAgICBk
aXNwbGF5X2hlbHA6IFdoZXRoZXIgdG8gZGlzcGxheSBoZWxwIG91dHB1dC4gU3VwcHJlc3Npbmcg
aGVscAotICAgICAgICAgICAgICAgICAgICBvdXRwdXQgaXMgdXNlZnVsIGZvciB1bml0IHRlc3Rz
LgotCi0gICAgUmV0dXJuczoKLSAgICAgIEEgdHVwbGUgb2YgKGZpbGVuYW1lcywgZmxhZ3MpCisg
ICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlZmF1bHRfb3V0cHV0X2Zvcm1hdCwgZGVm
YXVsdF92ZXJib3NpdHksCisgICAgICAgICAgICAgICAgIGRlZmF1bHRfZmlsdGVyX3J1bGVzKToK
KyAgICAgICAgc2VsZi5vdXRwdXRfZm9ybWF0ID0gZGVmYXVsdF9vdXRwdXRfZm9ybWF0CisgICAg
ICAgIHNlbGYudmVyYm9zaXR5ID0gZGVmYXVsdF92ZXJib3NpdHkKKyAgICAgICAgc2VsZi5maWx0
ZXJfcnVsZXMgPSBkZWZhdWx0X2ZpbHRlcl9ydWxlcworCisKK2NsYXNzIEFyZ3VtZW50UHJpbnRl
cihvYmplY3QpOgorICAgICIiIlN1cHBvcnRzIHRoZSBwcmludGluZyBvZiBjaGVjay13ZWJraXQt
c3R5bGUgY29tbWFuZCBhcmd1bWVudHMuIiIiCisgICAgZGVmIF9mbGFnX3BhaXJfdG9fc3RyaW5n
KHNlbGYsIGZsYWdfa2V5LCBmbGFnX3ZhbHVlKToKKyAgICAgICAgcmV0dXJuICctLSUoa2V5KXM9
JSh2YWwpcycgJSB7J2tleSc6IGZsYWdfa2V5LCAndmFsJzogZmxhZ192YWx1ZSB9CisKKyAgICBk
ZWYgdG9fZmxhZ19zdHJpbmcoc2VsZiwgb3B0aW9ucyk6CisgICAgICAgICIiIlJldHVybiBhIGZs
YWcgc3RyaW5nIHlpZWxkaW5nIHRoZSBnaXZlbiBQcm9jZXNzb3JPcHRpb25zIGluc3RhbmNlLgor
CisgICAgICAgIFRoaXMgbWV0aG9kIG9yZGVycyB0aGUgZmxhZyB2YWx1ZXMgYWxwaGFiZXRpY2Fs
bHkgYnkgdGhlIGZsYWcga2V5LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgb3B0aW9uczog
QSBQcm9jZXNzb3JPcHRpb25zIGluc3RhbmNlLgorCisgICAgICAgICIiIgorICAgICAgICBmbGFn
cyA9IG9wdGlvbnMuZXh0cmFfZmxhZ192YWx1ZXMuY29weSgpCisKKyAgICAgICAgZmxhZ3NbJ291
dHB1dCddID0gb3B0aW9ucy5vdXRwdXRfZm9ybWF0CisgICAgICAgIGZsYWdzWyd2ZXJib3NlJ10g
PSBvcHRpb25zLnZlcmJvc2l0eQorICAgICAgICBpZiBvcHRpb25zLmZpbHRlcl9ydWxlczoKKyAg
ICAgICAgICAgIGZsYWdzWydmaWx0ZXInXSA9ICcsJy5qb2luKG9wdGlvbnMuZmlsdGVyX3J1bGVz
KQorICAgICAgICBpZiBvcHRpb25zLmdpdF9jb21taXQ6CisgICAgICAgICAgICBmbGFnc1snZ2l0
LWNvbW1pdCddID0gb3B0aW9ucy5naXRfY29tbWl0CisKKyAgICAgICAgZmxhZ19zdHJpbmcgPSAn
JworICAgICAgICAjIEFscGhhYmV0aXppbmcgbGV0cyB1cyB1bml0IHRlc3QgdGhpcyBtZXRob2Qu
CisgICAgICAgIGZvciBrZXkgaW4gc29ydGVkKGZsYWdzLmtleXMoKSk6CisgICAgICAgICAgICBm
bGFnX3N0cmluZyArPSBzZWxmLl9mbGFnX3BhaXJfdG9fc3RyaW5nKGtleSwgZmxhZ3Nba2V5XSkg
KyAnICcKKworICAgICAgICByZXR1cm4gZmxhZ19zdHJpbmcuc3RyaXAoKQorCisKK2NsYXNzIEFy
Z3VtZW50UGFyc2VyKG9iamVjdCk6CisgICAgIiIiU3VwcG9ydHMgdGhlIHBhcnNpbmcgb2YgY2hl
Y2std2Via2l0LXN0eWxlIGNvbW1hbmQgYXJndW1lbnRzLgorCisgICAgQXR0cmlidXRlczoKKyAg
ICAgIGRlZmF1bHRzOiBBbiBBcmd1bWVudERlZmF1bHRzIGluc3RhbmNlLgorICAgICAgY3JlYXRl
X3VzYWdlOiBBIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhbiBBcmd1bWVudERlZmF1bHRzIGluc3Rh
bmNlCisgICAgICAgICAgICAgICAgICAgIGFuZCByZXR1cm5zIGEgc3RyaW5nIG9mIHVzYWdlIGlu
c3RydWN0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBkZWZhdWx0cyB0byB0aGUgZnVu
Y3Rpb24gdXNlZCB0byBnZW5lcmF0ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdXNhZ2Ugc3Ry
aW5nIGZvciBjaGVjay13ZWJraXQtc3R5bGUuCisgICAgICBkb2NfcHJpbnQ6IEEgZnVuY3Rpb24g
dGhhdCBhY2NlcHRzIGEgc3RyaW5nIHBhcmFtZXRlciBhbmQgdGhhdCBpcworICAgICAgICAgICAg
ICAgICBjYWxsZWQgdG8gZGlzcGxheSBoZWxwIG1lc3NhZ2VzLiBUaGlzIGRlZmF1bHRzIHRvCisg
ICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoKS4KIAotICAgICAgZmlsZW5hbWVzOiBU
aGUgbGlzdCBvZiBmaWxlbmFtZXMgdG8gbGludC4KLSAgICAgIGZsYWdzOiBUaGUgZGljdCBvZiB0
aGUgZmxhZyBuYW1lcyBhbmQgdGhlIGZsYWcgdmFsdWVzLgogICAgICIiIgotICAgIGZsYWdzID0g
WydoZWxwJywgJ291dHB1dD0nLCAndmVyYm9zZT0nLCAnZmlsdGVyPSddICsgYWRkaXRpb25hbF9m
bGFncwotICAgIGFkZGl0aW9uYWxfZmxhZ192YWx1ZXMgPSB7fQotICAgIHRyeToKLSAgICAgICAg
KG9wdHMsIGZpbGVuYW1lcykgPSBnZXRvcHQuZ2V0b3B0KGFyZ3MsICcnLCBmbGFncykKLSAgICBl
eGNlcHQgZ2V0b3B0LkdldG9wdEVycm9yOgotICAgICAgICBleGl0X3dpdGhfdXNhZ2UoJ0ludmFs
aWQgYXJndW1lbnRzLicsIGRpc3BsYXlfaGVscCkKLQotICAgIHZlcmJvc2l0eSA9IF9ERUZBVUxU
X1ZFUkJPU0lUWQotICAgIG91dHB1dF9mb3JtYXQgPSBfREVGQVVMVF9PVVRQVVRfRk9STUFUCi0g
ICAgZmlsdGVycyA9ICcnCi0KLSAgICBmb3IgKG9wdCwgdmFsKSBpbiBvcHRzOgotICAgICAgICBp
ZiBvcHQgPT0gJy0taGVscCc6Ci0gICAgICAgICAgICBleGl0X3dpdGhfdXNhZ2UoTm9uZSwgZGlz
cGxheV9oZWxwKQotICAgICAgICBlbGlmIG9wdCA9PSAnLS1vdXRwdXQnOgotICAgICAgICAgICAg
aWYgbm90IHZhbCBpbiAoJ2VtYWNzJywgJ3ZzNycpOgotICAgICAgICAgICAgICAgIGV4aXRfd2l0
aF91c2FnZSgnVGhlIG9ubHkgYWxsb3dlZCBvdXRwdXQgZm9ybWF0cyBhcmUgZW1hY3MgYW5kIHZz
Ny4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5X2hlbHApCi0gICAg
ICAgICAgICBvdXRwdXRfZm9ybWF0ID0gdmFsCi0gICAgICAgIGVsaWYgb3B0ID09ICctLXZlcmJv
c2UnOgotICAgICAgICAgICAgdmVyYm9zaXR5ID0gaW50KHZhbCkKLSAgICAgICAgZWxpZiBvcHQg
PT0gJy0tZmlsdGVyJzoKLSAgICAgICAgICAgIGZpbHRlcnMgPSB2YWwKLSAgICAgICAgICAgIGlm
IG5vdCBmaWx0ZXJzOgotICAgICAgICAgICAgICAgIGV4aXRfd2l0aF9jYXRlZ29yaWVzKGRpc3Bs
YXlfaGVscCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYXJndW1lbnRfZGVmYXVsdHMsIGNyZWF0
ZV91c2FnZT1Ob25lLCBkb2NfcHJpbnQ9Tm9uZSk6CisgICAgICAgIGlmIGNyZWF0ZV91c2FnZSBp
cyBOb25lOgorICAgICAgICAgICAgY3JlYXRlX3VzYWdlID0gX2NyZWF0ZV91c2FnZQorICAgICAg
ICBpZiBkb2NfcHJpbnQgaXMgTm9uZToKKyAgICAgICAgICAgIGRvY19wcmludCA9IHN5cy5zdGRl
cnIud3JpdGUKKworICAgICAgICBzZWxmLmRlZmF1bHRzID0gYXJndW1lbnRfZGVmYXVsdHMKKyAg
ICAgICAgc2VsZi5jcmVhdGVfdXNhZ2UgPSBjcmVhdGVfdXNhZ2UKKyAgICAgICAgc2VsZi5kb2Nf
cHJpbnQgPSBkb2NfcHJpbnQKKworICAgIGRlZiBfZXhpdF93aXRoX3VzYWdlKHNlbGYsIGVycm9y
X21lc3NhZ2U9JycpOgorICAgICAgICAiIiJFeGl0IGFuZCBwcmludCBhIHVzYWdlIHN0cmluZyB3
aXRoIGFuIG9wdGlvbmFsIGVycm9yIG1lc3NhZ2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAg
ICBlcnJvcl9tZXNzYWdlOiBBIHN0cmluZyB0aGF0IGlzIGFuIGVycm9yIG1lc3NhZ2UgdG8gcHJp
bnQuCisgICAgICAgICIiIgorICAgICAgICB1c2FnZSA9IHNlbGYuY3JlYXRlX3VzYWdlKHNlbGYu
ZGVmYXVsdHMpCisgICAgICAgIHNlbGYuZG9jX3ByaW50KHVzYWdlKQorICAgICAgICBpZiBlcnJv
cl9tZXNzYWdlOgorICAgICAgICAgICAgc3lzLmV4aXQoJ1xuRkFUQUwgRVJST1I6ICcgKyBlcnJv
cl9tZXNzYWdlKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgYWRkaXRpb25hbF9mbGFnX3Zh
bHVlc1tvcHRdID0gdmFsCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZGVmIF9leGl0
X3dpdGhfY2F0ZWdvcmllcyhzZWxmKToKKyAgICAgICAgIiIiRXhpdCBhbmQgcHJpbnQgdGhlIHN0
eWxlIGNhdGVnb3JpZXMgYW5kIGRlZmF1bHQgZmlsdGVyIHJ1bGVzLiIiIgorICAgICAgICBzZWxm
LmRvY19wcmludCgnXG5BbGwgY2F0ZWdvcmllczpcbicpCisgICAgICAgIGZvciBjYXRlZ29yeSBp
biBzb3J0ZWQoU1RZTEVfQ0FURUdPUklFUyk6CisgICAgICAgICAgICBzZWxmLmRvY19wcmludCgn
ICAgICcgKyBjYXRlZ29yeSArICdcbicpCisKKyAgICAgICAgc2VsZi5kb2NfcHJpbnQoJ1xuRGVm
YXVsdCBmaWx0ZXIgcnVsZXMqKjpcbicpCisgICAgICAgIGZvciBmaWx0ZXJfcnVsZSBpbiBzb3J0
ZWQoc2VsZi5kZWZhdWx0cy5maWx0ZXJfcnVsZXMpOgorICAgICAgICAgICAgc2VsZi5kb2NfcHJp
bnQoJyAgICAnICsgZmlsdGVyX3J1bGUgKyAnXG4nKQorICAgICAgICBzZWxmLmRvY19wcmludCgn
XG4qKlRoZSBjb21tYW5kIGFsd2F5cyBldmFsdWF0ZXMgdGhlIGFib3ZlIHJ1bGVzLCAnCisgICAg
ICAgICAgICAgICAgICAgICAgICdhbmQgYmVmb3JlIGFueSAtLWZpbHRlciBmbGFnLlxuXG4nKQor
CisgICAgICAgIHN5cy5leGl0KDApCisKKyAgICBkZWYgX3BhcnNlX2ZpbHRlcl9mbGFnKHNlbGYs
IGZsYWdfdmFsdWUpOgorICAgICAgICAiIiJQYXJzZSB0aGUgdmFsdWUgb2YgdGhlIC0tZmlsdGVy
IGZsYWcuCisKKyAgICAgICAgVGhlc2UgZmlsdGVycyBhcmUgYXBwbGllZCB3aGVuIGRlY2lkaW5n
IHdoZXRoZXIgdG8gZW1pdCBhIGdpdmVuCisgICAgICAgIGVycm9yIG1lc3NhZ2UuCisKKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICBmbGFnX3ZhbHVlOiBBIHN0cmluZyBvZiBjb21tYS1zZXBhcmF0
ZWQgZmlsdGVyIHJ1bGVzLCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICBleGFtcGxlICItd2hp
dGVzcGFjZSwrd2hpdGVzcGFjZS9pbmRlbnQiLgorCisgICAgICAgICIiIgorICAgICAgICBmaWx0
ZXJzID0gW10KKyAgICAgICAgZm9yIHVuY2xlYW5lZF9maWx0ZXIgaW4gZmxhZ192YWx1ZS5zcGxp
dCgnLCcpOgorICAgICAgICAgICAgZmlsdGVyID0gdW5jbGVhbmVkX2ZpbHRlci5zdHJpcCgpCisg
ICAgICAgICAgICBpZiBub3QgZmlsdGVyOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAg
ICAgICAgICBmaWx0ZXJzLmFwcGVuZChmaWx0ZXIpCisgICAgICAgIHJldHVybiBmaWx0ZXJzCisK
KyAgICBkZWYgcGFyc2Uoc2VsZiwgYXJncywgZXh0cmFfZmxhZ3M9Tm9uZSk6CisgICAgICAgICIi
IlBhcnNlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIGNoZWNrLXdlYmtpdC1zdHlsZS4K
KworICAgICAgICBBcmdzOgorICAgICAgICAgIGFyZ3M6IEEgbGlzdCBvZiBjb21tYW5kLWxpbmUg
YXJndW1lbnRzIGFzIHJldHVybmVkIGJ5IHN5cy5hcmd2WzE6XS4KKyAgICAgICAgICBleHRyYV9m
bGFnczogQSBsaXN0IG9mIGZsYWdzIHdob3NlIHZhbHVlcyB3ZSB3YW50IHRvIGV4dHJhY3QsIGJ1
dAorICAgICAgICAgICAgICAgICAgICAgICBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgUHJvY2Vz
c29yT3B0aW9ucyBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgQW4gZXhhbXBsZSBmbGFn
ICJuZXdfZmxhZz0iLiBUaGlzIGRlZmF1bHRzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAg
ICBlbXB0eSBsaXN0LgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgQSB0dXBsZSBvZiAo
ZmlsZW5hbWVzLCBvcHRpb25zKQorCisgICAgICAgICAgZmlsZW5hbWVzOiBUaGUgbGlzdCBvZiBm
aWxlbmFtZXMgdG8gY2hlY2suCisgICAgICAgICAgb3B0aW9uczogQSBQcm9jZXNzb3JPcHRpb25z
IGluc3RhbmNlLgorCisgICAgICAgICIiIgorICAgICAgICBpZiBleHRyYV9mbGFncyBpcyBOb25l
OgorICAgICAgICAgICAgZXh0cmFfZmxhZ3MgPSBbXQorICAgICAgICAgICAgCisgICAgICAgIG91
dHB1dF9mb3JtYXQgPSBzZWxmLmRlZmF1bHRzLm91dHB1dF9mb3JtYXQKKyAgICAgICAgdmVyYm9z
aXR5ID0gc2VsZi5kZWZhdWx0cy52ZXJib3NpdHkKKyAgICAgICAgZmlsdGVyX3J1bGVzID0gc2Vs
Zi5kZWZhdWx0cy5maWx0ZXJfcnVsZXMKKworICAgICAgICAjIFRoZSBmbGFncyBhbHJlYWR5IHN1
cHBvcnRlZCBieSB0aGUgUHJvY2Vzc29yT3B0aW9ucyBjbGFzcy4KKyAgICAgICAgZmxhZ3MgPSBb
J2hlbHAnLCAnb3V0cHV0PScsICd2ZXJib3NlPScsICdmaWx0ZXI9JywgJ2dpdC1jb21taXQ9J10K
KworICAgICAgICBmb3IgZXh0cmFfZmxhZyBpbiBleHRyYV9mbGFnczoKKyAgICAgICAgICAgIGlm
IGV4dHJhX2ZsYWcgaW4gZmxhZ3M6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcign
RmxhZyBcJyUoZXh0cmFfZmxhZylzIGlzIGR1cGxpY2F0ZWQgJworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ29yIGFscmVhZHkgc3VwcG9ydGVkLicgJQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeydleHRyYV9mbGFnJzogZXh0cmFfZmxhZyB9KQorICAgICAgICAg
ICAgZmxhZ3MuYXBwZW5kKGV4dHJhX2ZsYWcpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
KG9wdHMsIGZpbGVuYW1lcykgPSBnZXRvcHQuZ2V0b3B0KGFyZ3MsICcnLCBmbGFncykKKyAgICAg
ICAgZXhjZXB0IGdldG9wdC5HZXRvcHRFcnJvcjoKKyAgICAgICAgICAgICMgRklYTUU6IFNldHRs
ZSBvbiBhbiBlcnJvciBoYW5kbGluZyBhcHByb2FjaDogY29tZSB1cAorICAgICAgICAgICAgIyAg
ICAgICAgd2l0aCBhIGNvbnNpc3RlbnQgZ3VpZGVsaW5lIGFzIHRvIHdoZW4gYW5kIHdoZXRoZXIK
KyAgICAgICAgICAgICMgICAgICAgIGEgVmFsdWVFcnJvciBzaG91bGQgYmUgcmFpc2VkIHZlcnN1
cyBjYWxsaW5nCisgICAgICAgICAgICAjICAgICAgICBzeXMuZXhpdCB3aGVuIG5lZWRpbmcgdG8g
aW50ZXJydXB0IGV4ZWN1dGlvbi4KKyAgICAgICAgICAgIHNlbGYuX2V4aXRfd2l0aF91c2FnZSgn
SW52YWxpZCBhcmd1bWVudHMuJykKKworICAgICAgICBleHRyYV9mbGFnX3ZhbHVlcyA9IHt9Cisg
ICAgICAgIGdpdF9jb21taXQgPSBOb25lCisKKyAgICAgICAgZm9yIChvcHQsIHZhbCkgaW4gb3B0
czoKKyAgICAgICAgICAgIGlmIG9wdCA9PSAnLS1oZWxwJzoKKyAgICAgICAgICAgICAgICBzZWxm
Ll9leGl0X3dpdGhfdXNhZ2UoKQorICAgICAgICAgICAgZWxpZiBvcHQgPT0gJy0tb3V0cHV0JzoK
KyAgICAgICAgICAgICAgICBvdXRwdXRfZm9ybWF0ID0gdmFsCisgICAgICAgICAgICBlbGlmIG9w
dCA9PSAnLS12ZXJib3NlJzoKKyAgICAgICAgICAgICAgICB2ZXJib3NpdHkgPSB2YWwKKyAgICAg
ICAgICAgIGVsaWYgb3B0ID09ICctLWdpdC1jb21taXQnOgorICAgICAgICAgICAgICAgIGdpdF9j
b21taXQgPSB2YWwKKyAgICAgICAgICAgIGVsaWYgb3B0ID09ICctLWZpbHRlcic6CisgICAgICAg
ICAgICAgICAgaWYgbm90IHZhbDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXhpdF93aXRo
X2NhdGVnb3JpZXMoKQorICAgICAgICAgICAgICAgICMgUHJlcGVuZCB0aGUgZGVmYXVsdHMuCisg
ICAgICAgICAgICAgICAgZmlsdGVyX3J1bGVzID0gZmlsdGVyX3J1bGVzICsgc2VsZi5fcGFyc2Vf
ZmlsdGVyX2ZsYWcodmFsKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBleHRy
YV9mbGFnX3ZhbHVlc1tvcHRdID0gdmFsCisKKyAgICAgICAgIyBDaGVjayB2YWxpZGl0eSBvZiBy
ZXN1bHRpbmcgdmFsdWVzLgorICAgICAgICBpZiBmaWxlbmFtZXMgYW5kIChnaXRfY29tbWl0ICE9
IE5vbmUpOgorICAgICAgICAgICAgc2VsZi5fZXhpdF93aXRoX3VzYWdlKCdJdCBpcyBub3QgcG9z
c2libGUgdG8gY2hlY2sgZmlsZXMgYW5kIGEgJworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdzcGVjaWZpYyBjb21taXQgYXQgdGhlIHNhbWUgdGltZS4nKQorCisgICAgICAgIGlm
IG91dHB1dF9mb3JtYXQgbm90IGluICgnZW1hY3MnLCAndnM3Jyk6CisgICAgICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKCdJbnZhbGlkIC0tb3V0cHV0IHZhbHVlICIlcyI6IFRoZSBvbmx5ICcKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsbG93ZWQgb3V0cHV0IGZvcm1hdHMgYXJlIGVt
YWNzIGFuZCB2czcuJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mb3Jt
YXQpCisKKyAgICAgICAgdmVyYm9zaXR5ID0gaW50KHZlcmJvc2l0eSkKKyAgICAgICAgaWYgKCh2
ZXJib3NpdHkgPCAxKSBvciAodmVyYm9zaXR5ID4gNSkpOgorICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcignSW52YWxpZCAtLXZlcmJvc2UgdmFsdWUgJXM6IHZhbHVlIG11c3QgJworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnYmUgYmV0d2VlbiAxLTUuJyAlIHZlcmJvc2l0eSkKKwor
ICAgICAgICBmb3IgcnVsZSBpbiBmaWx0ZXJfcnVsZXM6CisgICAgICAgICAgICBpZiBub3QgKHJ1
bGUuc3RhcnRzd2l0aCgnKycpIG9yIHJ1bGUuc3RhcnRzd2l0aCgnLScpKToKKyAgICAgICAgICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIGZpbHRlciBydWxlICIlcyI6IGV2ZXJ5IHJ1
bGUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1bGUgaW4gdGhlIC0tZmls
dGVyIGZsYWcgbXVzdCBzdGFydCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
d2l0aCArIG9yIC0uJyAlIHJ1bGUpCiAKLSAgICBjcHBfc3R5bGUuX3NldF9vdXRwdXRfZm9ybWF0
KG91dHB1dF9mb3JtYXQpCi0gICAgY3BwX3N0eWxlLl9zZXRfdmVyYm9zZV9sZXZlbCh2ZXJib3Np
dHkpCi0gICAgY3BwX3N0eWxlLl9zZXRfZmlsdGVycyhmaWx0ZXJzKQorICAgICAgICBvcHRpb25z
ID0gUHJvY2Vzc29yT3B0aW9ucyhvdXRwdXRfZm9ybWF0LCB2ZXJib3NpdHksIGZpbHRlcl9ydWxl
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l0X2NvbW1pdCwgZXh0cmFf
ZmxhZ192YWx1ZXMpCiAKLSAgICByZXR1cm4gKGZpbGVuYW1lcywgYWRkaXRpb25hbF9mbGFnX3Zh
bHVlcykKKyAgICAgICAgcmV0dXJuIChmaWxlbmFtZXMsIG9wdGlvbnMpCiAKIAogZGVmIHByb2Nl
c3NfZmlsZShmaWxlbmFtZSk6CkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvc3R5
bGVfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVz
L3N0eWxlX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA1MjU4NCkKKysrIFdlYktpdFRvb2xzL1Njcmlw
dHMvbW9kdWxlcy9zdHlsZV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzYsODYgKzM2
LDE2NSBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKIGltcG9ydCBzdHlsZQotIyBGSVhNRTogRWxpbWlu
YXRlIGNwcF9zdHlsZSBkZXBlbmRlbmN5LgotaW1wb3J0IGNwcF9zdHlsZQorCisKK2NsYXNzIERl
ZmF1bHRBcmd1bWVudHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB2YWxp
ZGl0eSBvZiBkZWZhdWx0IGFyZ3VtZW50cyB1c2VkIGJ5IGNoZWNrLXdlYmtpdC1zdHlsZS4iIiIK
KyAgICBkZWYgdGVzdF9maWx0ZXJfcnVsZXMoc2VsZik6CisgICAgICAgIGFscmVhZHlfc2VlbiA9
IFtdCisgICAgICAgIGZvciBydWxlIGluIHN0eWxlLldFQktJVF9GSUxURVJfUlVMRVM6CisgICAg
ICAgICAgICAjIEFsbCBjYXRlZ29yaWVzIGFyZSBvbiBieSBkZWZhdWx0LCBzbyBkZWZhdWx0cyBz
aG91bGQKKyAgICAgICAgICAgICMgYmVnaW4gd2l0aCAtLgorICAgICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMocnVsZS5zdGFydHN3aXRoKCctJyksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhydWxlWzE6XSBpbiBzdHlsZS5TVFlMRV9DQVRFR09SSUVTLCBUcnVlKQorICAg
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocnVsZSBpbiBhbHJlYWR5X3NlZW4sIEZhbHNlKQor
ICAgICAgICAgICAgYWxyZWFkeV9zZWVuLmFwcGVuZChydWxlKQorCisgICAgZGVmIHRlc3RfZGVm
YXVsdHMoc2VsZik6CisgICAgICAgIGRlZmF1bHRzID0gc3R5bGUuQXJndW1lbnREZWZhdWx0cyhz
dHlsZS5ERUZBVUxUX09VVFBVVF9GT1JNQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHlsZS5ERUZBVUxUX1ZFUkJPU0lUWSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLldFQktJVF9GSUxURVJfUlVMRVMpCisgICAg
ICAgIHBhcnNlciA9IHN0eWxlLkFyZ3VtZW50UGFyc2VyKGRlZmF1bHRzKQorICAgICAgICBwYXJz
ZXIucGFyc2UoW10pICMgd29ya3MKKworCitjbGFzcyBBcmd1bWVudFByaW50ZXJUZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGUgQXJndW1lbnRQcmludGVyIGNsYXNzLiIi
IgorICAgIF9wcmludGVyID0gc3R5bGUuQXJndW1lbnRQcmludGVyKCkKKworICAgIGRlZiBfY3Jl
YXRlX29wdGlvbnMoc2VsZiwgb3V0cHV0X2Zvcm1hdD0nZW1hY3MnLCB2ZXJib3NpdHk9MywKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9ydWxlcz1bXSwgZ2l0X2NvbW1pdD1Ob25lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfZmxhZ192YWx1ZXM9e30pOgorICAgICAgICBy
ZXR1cm4gc3R5bGUuUHJvY2Vzc29yT3B0aW9ucyhvdXRwdXRfZm9ybWF0LCB2ZXJib3NpdHksIGZp
bHRlcl9ydWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l0X2Nv
bW1pdCwgZXh0cmFfZmxhZ192YWx1ZXMpCisKKyAgICBkZWYgdGVzdF90b19mbGFnX3N0cmluZyhz
ZWxmKToKKyAgICAgICAgb3B0aW9ucyA9IHNlbGYuX2NyZWF0ZV9vcHRpb25zKCd2czcnLCA1LCBb
Jytmb28nLCAnLWJhciddLCAnZ2l0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsnYSc6IDAsICd6JzogMX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCctLWE9
MCAtLWZpbHRlcj0rZm9vLC1iYXIgLS1naXQtY29tbWl0PWdpdCAnCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICctLW91dHB1dD12czcgLS12ZXJib3NlPTUgLS16PTEnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9wcmludGVyLnRvX2ZsYWdfc3RyaW5nKG9wdGlvbnMpKQorCisg
ICAgICAgICMgVGhpcyBpcyB0byBjaGVjayB0aGF0IC0tZmlsdGVyIGFuZCAtLWdpdC1jb21taXQg
ZG8gbm90CisgICAgICAgICMgc2hvdyB1cCB3aGVuIG5vdCB1c2VyLXNwZWNpZmllZC4KKyAgICAg
ICAgb3B0aW9ucyA9IHNlbGYuX2NyZWF0ZV9vcHRpb25zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoJy0tb3V0cHV0PWVtYWNzIC0tdmVyYm9zZT0zJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fcHJpbnRlci50b19mbGFnX3N0cmluZyhvcHRpb25zKSkKIAogCiBjbGFzcyBB
cmd1bWVudFBhcnNlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICIiIlRlc3RzIGFyZ3Vt
ZW50IHBhcnNpbmcuIiIiCi0gICAgZGVmIHRlc3RfcGFyc2VfYXJndW1lbnRzKHNlbGYpOgotICAg
ICAgICBvbGRfdXNhZ2UgPSBzdHlsZS5fVVNBR0UKLSAgICAgICAgb2xkX3N0eWxlX2NhdGVnb3Jp
ZXMgPSBzdHlsZS5fU1RZTEVfQ0FURUdPUklFUwotICAgICAgICBvbGRfd2Via2l0X2ZpbHRlcl9y
dWxlcyA9IHN0eWxlLl9XRUJLSVRfRklMVEVSX1JVTEVTCi0gICAgICAgIG9sZF9vdXRwdXRfZm9y
bWF0ID0gY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUub3V0cHV0X2Zvcm1hdAotICAgICAgICBv
bGRfdmVyYm9zZV9sZXZlbCA9IGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLnZlcmJvc2VfbGV2
ZWwKLSAgICAgICAgb2xkX2ZpbHRlcnMgPSBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS5maWx0
ZXJzCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgRG9uJ3QgcHJpbnQgdXNhZ2UgZHVyaW5n
IHRoZSB0ZXN0cywgb3IgZmlsdGVyIGNhdGVnb3JpZXMKLSAgICAgICAgICAgIHN0eWxlLl9VU0FH
RSA9ICcnCi0gICAgICAgICAgICBzdHlsZS5fU1RZTEVfQ0FURUdPUklFUyA9IFtdCi0gICAgICAg
ICAgICBzdHlsZS5fV0VCS0lUX0ZJTFRFUl9SVUxFUyA9IFtdCi0KLSAgICAgICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQsIHN0eWxlLnBhcnNlX2FyZ3VtZW50cywgWyctLWJhZG9w
dCddKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCwgc3R5bGUucGFy
c2VfYXJndW1lbnRzLCBbJy0taGVscCddKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMo
U3lzdGVtRXhpdCwgc3R5bGUucGFyc2VfYXJndW1lbnRzLCBbJy0tZmlsdGVyPSddKQotICAgICAg
ICAgICAgIyBUaGlzIGlzIGlsbGVnYWwgYmVjYXVzZSBhbGwgZmlsdGVycyBtdXN0IHN0YXJ0IHdp
dGggKyBvciAtCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHls
ZS5wYXJzZV9hcmd1bWVudHMsIFsnLS1maWx0ZXI9Zm9vJ10pCi0gICAgICAgICAgICBzZWxmLmFz
c2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHlsZS5wYXJzZV9hcmd1bWVudHMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBbJy0tZmlsdGVyPSthLGIsLWMnXSkKLQotICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoKFsnZm9vLmNwcCddLCB7fSksIHN0eWxlLnBhcnNlX2FyZ3VtZW50
cyhbJ2Zvby5jcHAnXSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvbGRfb3V0cHV0
X2Zvcm1hdCwgY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUub3V0cHV0X2Zvcm1hdCkKLSAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9sZF92ZXJib3NlX2xldmVsLCBjcHBfc3R5bGUuX2Nw
cF9zdHlsZV9zdGF0ZS52ZXJib3NlX2xldmVsKQotCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVx
dWFscygoW10sIHt9KSwgc3R5bGUucGFyc2VfYXJndW1lbnRzKFtdKSkKLSAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKChbXSwge30pLCBzdHlsZS5wYXJzZV9hcmd1bWVudHMoWyctLXY9MCdd
KSkKLQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKFsnZm9vLmNwcCddLCB7fSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5wYXJzZV9hcmd1bWVudHMoWyctLXY9
MScsICdmb28uY3BwJ10pKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMSwgY3BwX3N0
eWxlLl9jcHBfc3R5bGVfc3RhdGUudmVyYm9zZV9sZXZlbCkKLSAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKChbJ2Zvby5oJ10sIHt9KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0eWxlLnBhcnNlX2FyZ3VtZW50cyhbJy0tdj0zJywgJ2Zvby5oJ10pKQotICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoMywgY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUudmVyYm9zZV9s
ZXZlbCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKChbJ2Zvby5jcHAnXSwge30pLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUucGFyc2VfYXJndW1lbnRzKFsnLS12
ZXJib3NlPTUnLCAnZm9vLmNwcCddKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDUs
IGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLnZlcmJvc2VfbGV2ZWwpCi0gICAgICAgICAgICBz
ZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3R5bGUucGFyc2VfYXJndW1lbnRzLCBbJy0tdj1mJywgJ2Zvby5jcHAnXSkKLQotICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKFsnZm9vLmNwcCddLCB7fSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHlsZS5wYXJzZV9hcmd1bWVudHMoWyctLW91dHB1dD1lbWFjcycs
ICdmb28uY3BwJ10pKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ2VtYWNzJywgY3Bw
X3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUub3V0cHV0X2Zvcm1hdCkKLSAgICAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKChbJ2Zvby5oJ10sIHt9KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0eWxlLnBhcnNlX2FyZ3VtZW50cyhbJy0tb3V0cHV0PXZzNycsICdmb28uaCddKSkKLSAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCd2czcnLCBjcHBfc3R5bGUuX2NwcF9zdHlsZV9z
dGF0ZS5vdXRwdXRfZm9ybWF0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVt
RXhpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLnBhcnNlX2FyZ3VtZW50
cywgWyctLW91dHB1dD1ibGFoJywgJ2Zvby5jcHAnXSkKLQotICAgICAgICAgICAgZmlsdCA9ICct
LCt3aGl0ZXNwYWNlLC13aGl0ZXNwYWNlL2luZGVudCcKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKChbJ2Zvby5oJ10sIHt9KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
eWxlLnBhcnNlX2FyZ3VtZW50cyhbJy0tZmlsdGVyPScrZmlsdCwgJ2Zvby5oJ10pKQotICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWyctJywgJyt3aGl0ZXNwYWNlJywgJy13aGl0ZXNwYWNl
L2luZGVudCddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BwX3N0eWxlLl9jcHBf
c3R5bGVfc3RhdGUuZmlsdGVycykKLQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKFsn
Zm9vLmNwcCcsICdmb28uaCddLCB7fSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHlsZS5wYXJzZV9hcmd1bWVudHMoWydmb28uY3BwJywgJ2Zvby5oJ10pKQotCi0gICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscygoWydmb28uY3BwJ10sIHsnLS1mb28nOiAnJ30pLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUucGFyc2VfYXJndW1lbnRzKFsnLS1mb28nLCAn
Zm9vLmNwcCddLCBbJ2ZvbyddKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKChbJ2Zv
by5jcHAnXSwgeyctLWZvbyc6ICdiYXInfSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHlsZS5wYXJzZV9hcmd1bWVudHMoWyctLWZvbz1iYXInLCAnZm9vLmNwcCddLCBbJ2Zvbz0n
XSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoWydmb28uY3BwJ10sIHt9KSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLnBhcnNlX2FyZ3VtZW50cyhbJ2Zvby5j
cHAnXSwgWydmb289J10pKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhp
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLnBhcnNlX2FyZ3VtZW50cywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnLS1mb290eXBvPWJhcicsICdmb28uY3Bw
J10sIFsnZm9vPSddKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc3R5bGUuX1VTQUdF
ID0gb2xkX3VzYWdlCi0gICAgICAgICAgICBzdHlsZS5fU1RZTEVfQ0FURUdPUklFUyA9IG9sZF9z
dHlsZV9jYXRlZ29yaWVzCi0gICAgICAgICAgICBzdHlsZS5fV0VCS0lUX0ZJTFRFUl9SVUxFUyA9
IG9sZF93ZWJraXRfZmlsdGVyX3J1bGVzCi0gICAgICAgICAgICBjcHBfc3R5bGUuX2NwcF9zdHls
ZV9zdGF0ZS5vdXRwdXRfZm9ybWF0ID0gb2xkX291dHB1dF9mb3JtYXQKLSAgICAgICAgICAgIGNw
cF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLnZlcmJvc2VfbGV2ZWwgPSBvbGRfdmVyYm9zZV9sZXZl
bAotICAgICAgICAgICAgY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUuZmlsdGVycyA9IG9sZF9m
aWx0ZXJzCisgICAgIiIiVGVzdCB0aGUgQXJndW1lbnRQYXJzZXIgY2xhc3MuIiIiCisgICAgZGVm
IF9wYXJzZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgZGVmYXVsdCBwYXJzZSgpIGZ1bmN0
aW9uIGZvciB0ZXN0aW5nLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fY3JlYXRlX3BhcnNlcigp
LnBhcnNlCisKKyAgICBkZWYgX2NyZWF0ZV9kZWZhdWx0cyhzZWxmLCBkZWZhdWx0X291dHB1dF9m
b3JtYXQ9J3ZzNycsCisgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF92ZXJib3NpdHk9
MywKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X2ZpbHRlcl9ydWxlcz1bJy0nLCAn
K3doaXRlc3BhY2UnXSk6CisgICAgICAgICIiIiJSZXR1cm4gYSBkZWZhdWx0IEFyZ3VtZW50RGVm
YXVsdHMgaW5zdGFuY2UgZm9yIHRlc3RpbmcuIiIiCisgICAgICAgIHJldHVybiBzdHlsZS5Bcmd1
bWVudERlZmF1bHRzKGRlZmF1bHRfb3V0cHV0X2Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdF92ZXJib3NpdHksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfZmlsdGVyX3J1bGVzKQorCisgICAgZGVmIF9jcmVh
dGVfcGFyc2VyKHNlbGYsIGRlZmF1bHRzPU5vbmUpOgorICAgICAgICAiIiIiUmV0dXJuIGFuIEFy
Z3VtZW50UGFyc2VyIGluc3RhbmNlIGZvciB0ZXN0aW5nLiIiIgorICAgICAgICBkZWYgY3JlYXRl
X3VzYWdlKF9kZWZhdWx0cyk6CisgICAgICAgICAgICAiIiJSZXR1cm4gYSB1c2FnZSBzdHJpbmcg
Zm9yIHRlc3RpbmcuIiIiCisgICAgICAgICAgICByZXR1cm4gInVzYWdlIjsKKworICAgICAgICBk
ZWYgZG9jX3ByaW50KG1lc3NhZ2UpOgorICAgICAgICAgICAgIyBXZSBkbyBub3Qgd2FudCB0aGUg
dXNhZ2Ugc3RyaW5nIG9yIHN0eWxlIGNhdGVnb3JpZXMKKyAgICAgICAgICAgICMgdG8gcHJpbnQg
ZHVyaW5nIHVuaXQgdGVzdHMsIHNvIHByaW50IG5vdGhpbmcuCisgICAgICAgICAgICByZXR1cm4K
KworICAgICAgICBpZiBkZWZhdWx0cyBpcyBOb25lOgorICAgICAgICAgICAgZGVmYXVsdHMgPSBz
ZWxmLl9jcmVhdGVfZGVmYXVsdHMoKQorCisgICAgICAgIHJldHVybiBzdHlsZS5Bcmd1bWVudFBh
cnNlcihkZWZhdWx0cywgY3JlYXRlX3VzYWdlLCBkb2NfcHJpbnQpCisKKyAgICBkZWYgdGVzdF9w
YXJzZV9kb2N1bWVudGF0aW9uKHNlbGYpOgorICAgICAgICBwYXJzZSA9IHNlbGYuX3BhcnNlKCkK
KworICAgICAgICAjIEZJWE1FOiBUZXN0IGJvdGggdGhlIHByaW50aW5nIG9mIHRoZSB1c2FnZSBz
dHJpbmcgYW5kIHRoZQorICAgICAgICAjICAgICAgICBmaWx0ZXIgY2F0ZWdvcmllcyBoZWxwLgor
CisgICAgICAgICMgUmVxdWVzdCB0aGUgdXNhZ2Ugc3RyaW5nLgorICAgICAgICBzZWxmLmFzc2Vy
dFJhaXNlcyhTeXN0ZW1FeGl0LCBwYXJzZSwgWyctLWhlbHAnXSkKKyAgICAgICAgIyBSZXF1ZXN0
IGRlZmF1bHQgZmlsdGVyIHJ1bGVzIGFuZCBhdmFpbGFibGUgc3R5bGUgY2F0ZWdvcmllcy4KKyAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCwgcGFyc2UsIFsnLS1maWx0ZXI9J10p
CisKKyAgICBkZWYgdGVzdF9wYXJzZV9iYWRfdmFsdWVzKHNlbGYpOgorICAgICAgICBwYXJzZSA9
IHNlbGYuX3BhcnNlKCkKKworICAgICAgICAjIFBhc3MgYW4gdW5zdXBwb3J0ZWQgYXJndW1lbnQu
CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQsIHBhcnNlLCBbJy0tYmFkJ10p
CisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGFyc2UsIFsnLS12ZXJi
b3NlPWJhZCddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwYXJzZSwg
WyctLXZlcmJvc2U9MCddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBw
YXJzZSwgWyctLXZlcmJvc2U9NiddKQorICAgICAgICBwYXJzZShbJy0tdmVyYm9zZT0xJ10pICMg
d29ya3MKKyAgICAgICAgcGFyc2UoWyctLXZlcmJvc2U9NSddKSAjIHdvcmtzCisKKyAgICAgICAg
c2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGFyc2UsIFsnLS1vdXRwdXQ9YmFkJ10pCisg
ICAgICAgIHBhcnNlKFsnLS1vdXRwdXQ9dnM3J10pICMgd29ya3MKKworICAgICAgICAjIFBhc3Mg
YSBmaWx0ZXIgcnVsZSBub3QgYmVnaW5uaW5nIHdpdGggKyBvciAtLgorICAgICAgICBzZWxmLmFz
c2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwYXJzZSwgWyctLWZpbHRlcj1mb28nXSkKKyAgICAgICAg
cGFyc2UoWyctLWZpbHRlcj0rZm9vJ10pICMgd29ya3MKKyAgICAgICAgIyBQYXNzIGZpbGVzIGFu
ZCBnaXQtY29tbWl0IGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
KFN5c3RlbUV4aXQsIHBhcnNlLCBbJy0tZ2l0LWNvbW1pdD0nLCAnZmlsZS50eHQnXSkKKyAgICAg
ICAgIyBQYXNzIGFuIGV4dHJhIGZsYWcgYWxyZWFkeSBzdXBwb3J0ZWQuCisgICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBhcnNlLCBbXSwgWydmaWx0ZXI9J10pCisgICAgICAg
IHBhcnNlKFtdLCBbJ2V4dHJhPSddKSAjIHdvcmtzCisgICAgICAgICMgUGFzcyBhbiBleHRyYSBm
bGFnIHdpdGggdHlwby4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCwgcGFy
c2UsIFsnLS1leHRyYXR5cG89J10sIFsnZXh0cmE9J10pCisgICAgICAgIHBhcnNlKFsnLS1leHRy
YT0nXSwgWydleHRyYT0nXSkgIyB3b3JrcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1
ZUVycm9yLCBwYXJzZSwgW10sIFsnZXh0cmE9JywgJ2V4dHJhPSddKQorICAgICAgICAKKworICAg
IGRlZiB0ZXN0X3BhcnNlX2RlZmF1bHRfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICBwYXJzZSA9
IHNlbGYuX3BhcnNlKCkKKworICAgICAgICAoZmlsZXMsIG9wdGlvbnMpID0gcGFyc2UoW10pCisK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZmlsZXMsIFtdKQorCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKG9wdGlvbnMub3V0cHV0X2Zvcm1hdCwgJ3ZzNycpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKG9wdGlvbnMudmVyYm9zaXR5LCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhvcHRpb25zLmZpbHRlcl9ydWxlcywgWyctJywgJyt3aGl0ZXNwYWNlJ10pCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKG9wdGlvbnMuZ2l0X2NvbW1pdCwgTm9uZSkKKworICAgIGRlZiB0ZXN0
X3BhcnNlX2V4cGxpY2l0X2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgcGFyc2UgPSBzZWxmLl9w
YXJzZSgpCisKKyAgICAgICAgIyBQYXNzIG5vbi1kZWZhdWx0IGV4cGxpY2l0IHZhbHVlcy4KKyAg
ICAgICAgKGZpbGVzLCBvcHRpb25zKSA9IHBhcnNlKFsnLS1vdXRwdXQ9ZW1hY3MnXSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5vdXRwdXRfZm9ybWF0LCAnZW1hY3MnKQorICAg
ICAgICAoZmlsZXMsIG9wdGlvbnMpID0gcGFyc2UoWyctLXZlcmJvc2U9NCddKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhvcHRpb25zLnZlcmJvc2l0eSwgNCkKKyAgICAgICAgKGZpbGVzLCBv
cHRpb25zKSA9IHBhcnNlKFsnLS1naXQtY29tbWl0PWNvbW1pdCddKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhvcHRpb25zLmdpdF9jb21taXQsICdjb21taXQnKQorICAgICAgICAoZmlsZXMs
IG9wdGlvbnMpID0gcGFyc2UoWyctLWZpbHRlcj0rZm9vLC1iYXInXSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMob3B0aW9ucy5maWx0ZXJfcnVsZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIFsnLScsICcrd2hpdGVzcGFjZScsICcrZm9vJywgJy1iYXInXSkKKworICAgICAgICAjIFBh
c3MgZXh0cmEgZmxhZyB2YWx1ZXMuCisgICAgICAgIChmaWxlcywgb3B0aW9ucykgPSBwYXJzZShb
Jy0tZXh0cmEnXSwgWydleHRyYSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25z
LmV4dHJhX2ZsYWdfdmFsdWVzLCB7Jy0tZXh0cmEnOiAnJ30pCisgICAgICAgIChmaWxlcywgb3B0
aW9ucykgPSBwYXJzZShbJy0tZXh0cmE9J10sIFsnZXh0cmE9J10pCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKG9wdGlvbnMuZXh0cmFfZmxhZ192YWx1ZXMsIHsnLS1leHRyYSc6ICcnfSkKKyAg
ICAgICAgKGZpbGVzLCBvcHRpb25zKSA9IHBhcnNlKFsnLS1leHRyYT14J10sIFsnZXh0cmE9J10p
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wdGlvbnMuZXh0cmFfZmxhZ192YWx1ZXMsIHsn
LS1leHRyYSc6ICd4J30pCisKKyAgICBkZWYgdGVzdF9wYXJzZV9maWxlcyhzZWxmKToKKyAgICAg
ICAgcGFyc2UgPSBzZWxmLl9wYXJzZSgpCisKKyAgICAgICAgKGZpbGVzLCBvcHRpb25zKSA9IHBh
cnNlKFsnZm9vLmNwcCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmaWxlcywgWydmb28u
Y3BwJ10pCisKKyAgICAgICAgIyBQYXNzIG11bHRpcGxlIGZpbGVzLgorICAgICAgICAoZmlsZXMs
IG9wdGlvbnMpID0gcGFyc2UoWyctLW91dHB1dD1lbWFjcycsICdmb28uY3BwJywgJ2Jhci5jcHAn
XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZmlsZXMsIFsnZm9vLmNwcCcsICdiYXIuY3Bw
J10pCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoK
</data>
<flag name="review"
          id="27593"
          type_id="1"
          status="-"
          setter="levin"
    />
    <flag name="commit-queue"
          id="27594"
          type_id="3"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45954</attachid>
            <date>2010-01-05 20:49:23 -0800</date>
            <delta_ts>2010-01-05 22:38:04 -0800</delta_ts>
            <desc>Proposed patch 2</desc>
            <filename>patch-tools8-1.txt</filename>
            <type>text/plain</type>
            <size>41489</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUyODQ3KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTAtMDEtMDUgIENocmlzIEplcmRvbmVrICA8
Y2hyaXMuamVyZG9uZWtAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgY2hlY2std2Via2l0LXN0eWxlJ3MgYXJndW1l
bnQgcGFyc2VyIHRvIG5vdCByZWx5CisgICAgICAgIG9uIGdsb2JhbCBzdGF0ZSwgYW5kIGltcHJv
dmVkIGl0cyBlcnJvciBoYW5kbGluZyBhbmQgdW5pdAorICAgICAgICB0ZXN0IGNvdmVyYWdlLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjk2Ngor
CisgICAgICAgICogU2NyaXB0cy9jaGVjay13ZWJraXQtc3R5bGU6CisgICAgICAgICAgLSBBZGp1
c3RlZCB0byB1c2UgbmV3IGFyZ3VtZW50IHBhcnNlci4KKworICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvY3BwX3N0eWxlLnB5OgorICAgICAgICAgIC0gQ2hhbmdlZCBfQ3BwU3R5bGVTdGF0ZSB0
byBhY2NlcHQgYW4gYXJyYXkgb2YgZmlsdGVyIHJ1bGVzCisgICAgICAgICAgICBpbnN0ZWFkIG9m
IGEgY29tbWEtZGVsaW1pdGVkIHN0cmluZy4KKyAgICAgICAgICAtIEVsaW1pbmF0ZWQgY3BwX3N0
eWxlLl9ERUZBVUxUX0ZJTFRFUl9SVUxFUy4KKyAgICAgICAgICAtIEVsaW1pbmF0ZWQgY3BwX3N0
eWxlLl9VU0FHRS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY3BwX3N0eWxlX3VuaXR0
ZXN0LnB5OgorICAgICAgICAgIC0gVXBkYXRlZCB0ZXN0X2ZpbHRlcigpIGFuZCB0ZXN0X2RlZmF1
bHRfZmlsdGVyKCkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlLnB5OgorICAg
ICAgICAgIC0gQ29udmVydGVkIHN0eWxlLl9VU0FHRSB0byBjcmVhdGVfdXNhZ2UoKS4KKyAgICAg
ICAgICAtIENvcnJlY3RlZCB1c2FnZSBpbnN0cnVjdGlvbnMgYnkgcmVtb3ZpbmcgMCBhcyBhIHZh
bGlkCisgICAgICAgICAgICAtLXZlcmJvc2UgZmxhZyB2YWx1ZS4KKyAgICAgICAgICAtIFJlbW92
ZWQgdXNlX3dlYmtpdF9zdHlsZXMoKS4KKyAgICAgICAgICAtIEFkZGVkIFByb2Nlc3Nvck9wdGlv
bnMgY2xhc3MuCisgICAgICAgICAgLSBBZGRlZCBBcmd1bWVudERlZmF1bHRzIGNsYXNzLgorICAg
ICAgICAgIC0gQWRkZWQgQXJndW1lbnRQcmludGVyIGNsYXNzLgorICAgICAgICAgIC0gUmVtb3Zl
ZCBwYXJzZV9hcmd1bWVudHMgYW5kIGFkZGVkIEFyZ3VtZW50UGFyc2VyIGNsYXNzLgorICAgICAg
ICAgIC0gTW92ZWQgZXhpdF93aXRoX3VzYWdlKCkgYW5kIGV4aXRfd2l0aF9jYXRlZ29yaWVzKCkg
aW50bworICAgICAgICAgICAgQXJndW1lbnRQYXJzZXIuCisgICAgICAgICAgLSBSZWZhY3RvcmVk
IHBhcnNlX2FyZ3VtZW50cygpIGFzIEFyZ3VtZW50UGFyc2VyLnBhcnNlKCkuCisgICAgICAgICAg
LSBJbXByb3ZlZCBwYXJzZXIgZXJyb3IgaGFuZGxpbmcuCisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3N0eWxlX3VuaXR0ZXN0LnB5OgorICAgICAgICAgIC0gQWRkZWQgRGVmYXVsdEFyZ3Vt
ZW50c1Rlc3QgY2xhc3MuCisgICAgICAgICAgLSBBZGRyZXNzZWQgRklYTUUgdG8gY2hlY2sgc3R5
bGUuV0VCS0lUX0ZJTFRFUl9SVUxFUworICAgICAgICAgICAgYWdhaW5zdCBzdHlsZS5TVFlMRV9D
QVRFR09SSUVTLgorICAgICAgICAgIC0gQWRkZWQgQXJndW1lbnRQcmludGVyVGVzdCBjbGFzcy4K
KyAgICAgICAgICAtIEFkZGVkIEFyZ3VtZW50UGFyc2VyVGVzdCBjbGFzcyBhbmQgcmV3cm90ZSBw
YXJzZXIgdW5pdCB0ZXN0cy4KKwogMjAxMC0wMS0wNSAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgVGVzdCB0aGF0IGl0J3Mgc2FmZSB0byBjYWxsIElXZWJWaWV3Ojpj
bG9zZSB3aGVuCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHlsZQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHlsZQkocmV2
aXNpb24gNTI4NDcpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHlsZQko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbgogIwog
IyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMg
Q29weXJpZ2h0IChDKSAyMDEwIENocmlzIEplcmRvbmVrIChjaHJpcy5qZXJkb25la0BnbWFpbC5j
b20pCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC01MSwxMSArNTIsNiBAQCBm
cm9tIHdlYmtpdHB5LnNjbSBpbXBvcnQgZGV0ZWN0X3NjbV9zeXN0CiAKIAogZGVmIG1haW4oKToK
LSAgICBzdHlsZS51c2Vfd2Via2l0X3N0eWxlcygpCi0KLSAgICAoZmlsZXMsIGZsYWdzKSA9IHN0
eWxlLnBhcnNlX2FyZ3VtZW50cyhzeXMuYXJndlsxOl0sIFsiZ2l0LWNvbW1pdD0iXSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5X2hlbHA9VHJ1ZSkK
LQogICAgICMgQ2hhbmdlIHN0ZGVyciB0byB3cml0ZSB3aXRoIHJlcGxhY2VtZW50IGNoYXJhY3Rl
cnMgc28gd2UgZG9uJ3QgZGllCiAgICAgIyBpZiB3ZSB0cnkgdG8gcHJpbnQgc29tZXRoaW5nIGNv
bnRhaW5pbmcgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCiAgICAgc3lzLnN0ZGVyciA9IGNvZGVjcy5T
dHJlYW1SZWFkZXJXcml0ZXIoc3lzLnN0ZGVyciwKQEAgLTYzLDEwICs1OSwxNiBAQCBkZWYgbWFp
bigpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVjcy5n
ZXR3cml0ZXIoJ3V0ZjgnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAncmVwbGFjZScpCiAKLSAgICBpZiBmaWxlcyBhbmQgIi0tZ2l0LWNvbW1pdCIgaW4gZmxh
Z3M6Ci0gICAgICAgIHN0eWxlLmV4aXRfd2l0aF91c2FnZSgnSXQgaXMgbm90IHBvc3NpYmxlIHRv
IGNoZWNrIGZpbGVzIGFuZCBhICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGVj
aWZpYyBjb21taXQgYXQgdGhlIHNhbWUgdGltZS4nLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGlzcGxheV9oZWxwPVRydWUpCisgICAgZGVmYXVsdHMgPSBzdHlsZS5Bcmd1bWVudERl
ZmF1bHRzKHN0eWxlLkRFRkFVTFRfT1VUUFVUX0ZPUk1BVCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3R5bGUuREVGQVVMVF9WRVJCT1NJVFksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLldFQktJVF9GSUxURVJfUlVMRVMpCisKKyAg
ICBwYXJzZXIgPSBzdHlsZS5Bcmd1bWVudFBhcnNlcihkZWZhdWx0cykKKyAgICAoZmlsZXMsIG9w
dGlvbnMpID0gcGFyc2VyLnBhcnNlKHN5cy5hcmd2WzE6XSkKKworICAgICMgRklYTUU6IEVsaW1p
bmF0ZSB0aGUgbmVlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24uCisgICAgIyAgICAgICAgT3B0aW9u
cyBzaG91bGQgYmUgcGFzc2VkIGludG8gcHJvY2Vzc19maWxlIGluc3RlYWQuCisgICAgc3R5bGUu
c2V0X29wdGlvbnMob3B0aW9ucykKIAogICAgIGlmIGZpbGVzOgogICAgICAgICBmb3IgZmlsZW5h
bWUgaW4gZmlsZXM6CkBAIC03Niw4ICs3OCw4IEBAIGRlZiBtYWluKCk6CiAgICAgICAgIGN3ZCA9
IG9zLnBhdGguYWJzcGF0aCgnLicpCiAgICAgICAgIHNjbSA9IGRldGVjdF9zY21fc3lzdGVtKGN3
ZCkKIAotICAgICAgICBpZiAiLS1naXQtY29tbWl0IiBpbiBmbGFnczoKLSAgICAgICAgICAgIGNv
bW1pdCA9IGZsYWdzWyItLWdpdC1jb21taXQiXQorICAgICAgICBpZiBvcHRpb25zLmdpdF9jb21t
aXQ6CisgICAgICAgICAgICBjb21taXQgPSBvcHRpb25zLmdpdF9jb21taXQKICAgICAgICAgICAg
IGlmICcuLicgaW4gY29tbWl0OgogICAgICAgICAgICAgICAgICMgRklYTUU6IElmIHRoZSByYW5n
ZSBpcyBhICIuLi4iLCB0aGUgY29kZSBzaG91bGQgZmluZCB0aGUgY29tbW9uIGFuY2VzdG9yIGFu
ZAogICAgICAgICAgICAgICAgICMgc3RhcnQgdGhlcmUgKHNlZSBnaXQgZGlmZiAtLWhlbHAgZm9y
IGluZm9ybWF0aW9uIGFib3V0IGhvdyAuLi4gdXN1YWxseSB3b3JrcykuCkluZGV4OiBXZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NwcF9zdHlsZS5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NwcF9zdHlsZS5weQkocmV2aXNpb24gNTI4NDcpCisrKyBX
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NwcF9zdHlsZS5weQkod29ya2luZyBjb3B5KQpA
QCAtNDcsMTUgKzQ3LDYgQEAgaW1wb3J0IHN5cwogaW1wb3J0IHVuaWNvZGVkYXRhCiAKIAotX1VT
QUdFID0gJycKLQotCi0jIFRoZSBkZWZhdWx0IHN0YXRlIG9mIHRoZSBjYXRlZ29yeSBmaWx0ZXIu
IFRoaXMgaXMgb3ZlcnJpZGVkIGJ5IHRoZSAtLWZpbHRlcj0KLSMgZmxhZy4gQnkgZGVmYXVsdCBh
bGwgZXJyb3JzIGFyZSBvbiwgc28gb25seSBhZGQgaGVyZSBjYXRlZ29yaWVzIHRoYXQgc2hvdWxk
IGJlCi0jIG9mZiBieSBkZWZhdWx0IChpLmUuLCBjYXRlZ29yaWVzIHRoYXQgbXVzdCBiZSBlbmFi
bGVkIGJ5IHRoZSAtLWZpbHRlcj0gZmxhZ3MpLgotIyBBbGwgZW50cmllcyBoZXJlIHNob3VsZCBz
dGFydCB3aXRoIGEgJy0nIG9yICcrJywgYXMgaW4gdGhlIC0tZmlsdGVyPSBmbGFnLgotX0RFRkFV
TFRfRklMVEVSX1JVTEVTID0gW10KLQogIyBIZWFkZXJzIHRoYXQgd2UgY29uc2lkZXIgU1RMIGhl
YWRlcnMuCiBfU1RMX0hFQURFUlMgPSBmcm96ZW5zZXQoWwogICAgICdhbGdvYmFzZS5oJywgJ2Fs
Z29yaXRobScsICdhbGxvYy5oJywgJ2JpdHNldCcsICdkZXF1ZScsICdleGNlcHRpb24nLApAQCAt
MjU4LDcgKzI0OSw3IEBAIGNsYXNzIF9DcHBTdHlsZVN0YXRlKG9iamVjdCk6CiAgICAgICAgIHNl
bGYudmVyYm9zZV9sZXZlbCA9IDEgICMgZ2xvYmFsIHNldHRpbmcuCiAgICAgICAgIHNlbGYuZXJy
b3JfY291bnQgPSAwICAgICMgZ2xvYmFsIGNvdW50IG9mIHJlcG9ydGVkIGVycm9ycwogICAgICAg
ICAjIGZpbHRlcnMgdG8gYXBwbHkgd2hlbiBlbWl0dGluZyBlcnJvciBtZXNzYWdlcwotICAgICAg
ICBzZWxmLmZpbHRlcnMgPSBfREVGQVVMVF9GSUxURVJfUlVMRVNbOl0KKyAgICAgICAgc2VsZi5m
aWx0ZXJzID0gW10KIAogICAgICAgICAjIG91dHB1dCBmb3JtYXQ6CiAgICAgICAgICMgImVtYWNz
IiAtIGZvcm1hdCB0aGF0IGVtYWNzIGNhbiBwYXJzZSAoZGVmYXVsdCkKQEAgLTI4MiwxNiArMjcz
LDE4IEBAIGNsYXNzIF9DcHBTdHlsZVN0YXRlKG9iamVjdCk6CiAgICAgICAgIGVycm9yIG1lc3Nh
Z2UuCiAKICAgICAgICAgQXJnczoKLSAgICAgICAgICBmaWx0ZXJzOiBBIHN0cmluZyBvZiBjb21t
YS1zZXBhcmF0ZWQgZmlsdGVycyAoZWcgIit3aGl0ZXNwYWNlL2luZGVudCIpLgotICAgICAgICAg
ICAgICAgICAgIEVhY2ggZmlsdGVyIHNob3VsZCBzdGFydCB3aXRoICsgb3IgLTsgZWxzZSB3ZSBk
aWUuCisgICAgICAgICAgZmlsdGVyczogQSBsaXN0IG9mIHN0cmluZ3MgdGhhdCBhcmUgYm9vbGVh
biBmaWx0ZXIgcnVsZXMgdXNlZAorICAgICAgICAgICAgICAgICAgIHRvIGRldGVybWluZSB3aGV0
aGVyIGEgc3R5bGUgY2F0ZWdvcnkgc2hvdWxkIGJlIGNoZWNrZWQuCisgICAgICAgICAgICAgICAg
ICAgRWFjaCBzdHJpbmcgc2hvdWxkIHN0YXJ0IHdpdGggKyBvciAtLiBBbiBleGFtcGxlCisgICAg
ICAgICAgICAgICAgICAgc3RyaW5nIGlzICIrd2hpdGVzcGFjZS9pbmRlbnQiLiBUaGUgbGlzdCBp
bmNsdWRlcyBhbnkKKyAgICAgICAgICAgICAgICAgICBwcmVwZW5kZWQgZGVmYXVsdCBmaWx0ZXIg
cnVsZXMuCiAKICAgICAgICAgUmFpc2VzOgotICAgICAgICAgIFZhbHVlRXJyb3I6IFRoZSBjb21t
YS1zZXBhcmF0ZWQgZmlsdGVycyBkaWQgbm90IGFsbCBzdGFydCB3aXRoICcrJyBvciAnLScuCi0g
ICAgICAgICAgICAgICAgICAgICAgRS5nLiAiLSwrd2hpdGVzcGFjZSwtd2hpdGVzcGFjZS9pbmRl
bnQsd2hpdGVzcGFjZS9iYWRmaWx0ZXIiCisgICAgICAgICAgVmFsdWVFcnJvcjogTm90IGFsbCBm
aWx0ZXJzIHN0YXJ0ZWQgd2l0aCAnKycgb3IgJy0nLiBGb3IgZXhhbXBsZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAiLSwrd2hpdGVzcGFjZSwtd2hpdGVzcGFjZS9pbmRlbnQsd2hpdGVzcGFjZS9i
YWRmaWx0ZXIiCiAgICAgICAgICIiIgotICAgICAgICAjIERlZmF1bHQgZmlsdGVycyBhbHdheXMg
aGF2ZSBsZXNzIHByaW9yaXR5IHRoYW4gdGhlIGZsYWcgb25lcy4KLSAgICAgICAgc2VsZi5maWx0
ZXJzID0gX0RFRkFVTFRfRklMVEVSX1JVTEVTWzpdCi0gICAgICAgIGZvciBmaWx0ZXIgaW4gZmls
dGVycy5zcGxpdCgnLCcpOgorICAgICAgICBzZWxmLmZpbHRlcnMgPSBbXQorICAgICAgICBmb3Ig
ZmlsdGVyIGluIGZpbHRlcnM6CiAgICAgICAgICAgICBjbGVhbl9maWx0ZXIgPSBmaWx0ZXIuc3Ry
aXAoKQogICAgICAgICAgICAgaWYgY2xlYW5fZmlsdGVyOgogICAgICAgICAgICAgICAgIHNlbGYu
ZmlsdGVycy5hcHBlbmQoY2xlYW5fZmlsdGVyKQpAQCAtMzQ0LDggKzMzNywxMSBAQCBkZWYgX3Nl
dF9maWx0ZXJzKGZpbHRlcnMpOgogICAgIGVycm9yIG1lc3NhZ2UuCiAKICAgICBBcmdzOgotICAg
ICAgZmlsdGVyczogQSBzdHJpbmcgb2YgY29tbWEtc2VwYXJhdGVkIGZpbHRlcnMgKGVnICJ3aGl0
ZXNwYWNlL2luZGVudCIpLgotICAgICAgICAgICAgICAgRWFjaCBmaWx0ZXIgc2hvdWxkIHN0YXJ0
IHdpdGggKyBvciAtOyBlbHNlIHdlIGRpZS4KKyAgICAgIGZpbHRlcnM6IEEgbGlzdCBvZiBzdHJp
bmdzIHRoYXQgYXJlIGJvb2xlYW4gZmlsdGVyIHJ1bGVzIHVzZWQKKyAgICAgICAgICAgICAgIHRv
IGRldGVybWluZSB3aGV0aGVyIGEgc3R5bGUgY2F0ZWdvcnkgc2hvdWxkIGJlIGNoZWNrZWQuCisg
ICAgICAgICAgICAgICBFYWNoIHN0cmluZyBzaG91bGQgc3RhcnQgd2l0aCArIG9yIC0uIEFuIGV4
YW1wbGUKKyAgICAgICAgICAgICAgIHN0cmluZyBpcyAiK3doaXRlc3BhY2UvaW5kZW50Ii4gVGhl
IGxpc3QgaW5jbHVkZXMgYW55CisgICAgICAgICAgICAgICBwcmVwZW5kZWQgZGVmYXVsdCBmaWx0
ZXIgcnVsZXMuCiAgICAgIiIiCiAgICAgX2NwcF9zdHlsZV9zdGF0ZS5zZXRfZmlsdGVycyhmaWx0
ZXJzKQogCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NwcF9zdHlsZV91bml0
dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NwcF9z
dHlsZV91bml0dGVzdC5weQkocmV2aXNpb24gNTI4NDcpCisrKyBXZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NwcF9zdHlsZV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtNDEsMTQg
KzQxLDE2IEBAIGltcG9ydCByYW5kb20KIGltcG9ydCByZQogaW1wb3J0IHVuaXR0ZXN0CiBpbXBv
cnQgY3BwX3N0eWxlCi0jIEZJWE1FOiBSZW1vdmUgdGhlIG5lZWQgdG8gaW1wb3J0IHNvbWV0aGlu
ZyBmcm9tIHN0eWxlLgotZnJvbSBzdHlsZSBpbXBvcnQgX1NUWUxFX0NBVEVHT1JJRVMKKyMgRklY
TUU6IFJlbW92ZSB0aGUgbmVlZCB0byBpbXBvcnQgc29tZXRoaW5nIGZyb20gc3R5bGUuIFNlZSB0
aGUKKyMgICAgICAgIEZJWE1FIG5vdGVzIG5lYXIgdGhlIFNUWUxFX0NBVEVHT1JJRVMgZGVmaW5p
dGlvbiBmb3IgYQorIyAgICAgICAgc3VnZ2VzdGlvbiBvbiBob3cgdG8gYmVzdCBkbyB0aGlzLgor
ZnJvbSBzdHlsZSBpbXBvcnQgU1RZTEVfQ0FURUdPUklFUwogCiAjIFRoaXMgY2xhc3Mgd29ya3Mg
YXMgYW4gZXJyb3IgY29sbGVjdG9yIGFuZCByZXBsYWNlcyBjcHBfc3R5bGUuRXJyb3IKICMgZnVu
Y3Rpb24gZm9yIHRoZSB1bml0IHRlc3RzLiAgV2UgYWxzbyB2ZXJpZnkgZWFjaCBjYXRlZ29yeSB3
ZSBzZWUKLSMgaXMgaW4gY3BwX3N0eWxlLl9TVFlMRV9DQVRFR09SSUVTLCB0byBoZWxwIGtlZXAg
dGhhdCBsaXN0IHVwIHRvIGRhdGUuCisjIGlzIGluIFNUWUxFX0NBVEVHT1JJRVMsIHRvIGhlbHAg
a2VlcCB0aGF0IGxpc3QgdXAgdG8gZGF0ZS4KIGNsYXNzIEVycm9yQ29sbGVjdG9yOgotICAgIF9h
bGxfc3R5bGVfY2F0ZWdvcmllcyA9IF9TVFlMRV9DQVRFR09SSUVTCisgICAgX2FsbF9zdHlsZV9j
YXRlZ29yaWVzID0gU1RZTEVfQ0FURUdPUklFUwogICAgICMgVGhpcyBhIGxpc3QgaW5jbHVkaW5n
IGFsbCBjYXRlZ29yaWVzIHNlZW4gaW4gYW55IHVuaXQgdGVzdC4KICAgICBfc2Vlbl9zdHlsZV9j
YXRlZ29yaWVzID0ge30KIApAQCAtNjEsNyArNjMsNyBAQCBjbGFzcyBFcnJvckNvbGxlY3RvcjoK
ICAgICAgICAgICAgICAgICAgY2F0ZWdvcnksIGNvbmZpZGVuY2UsIG1lc3NhZ2UpOgogICAgICAg
ICBzZWxmLl9hc3NlcnRfZm4oY2F0ZWdvcnkgaW4gc2VsZi5fYWxsX3N0eWxlX2NhdGVnb3JpZXMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAnTWVzc2FnZSAiJXMiIGhhcyBjYXRlZ29yeSAiJXMi
LCcKLSAgICAgICAgICAgICAgICAgICAgICAgICcgd2hpY2ggaXMgbm90IGluIF9TVFlMRV9DQVRF
R09SSUVTJyAlIChtZXNzYWdlLCBjYXRlZ29yeSkpCisgICAgICAgICAgICAgICAgICAgICAgICAn
IHdoaWNoIGlzIG5vdCBpbiBTVFlMRV9DQVRFR09SSUVTJyAlIChtZXNzYWdlLCBjYXRlZ29yeSkp
CiAgICAgICAgIHNlbGYuX3NlZW5fc3R5bGVfY2F0ZWdvcmllc1tjYXRlZ29yeV0gPSAxCiAgICAg
ICAgIGlmIGNwcF9zdHlsZS5fc2hvdWxkX3ByaW50X2Vycm9yKGNhdGVnb3J5LCBjb25maWRlbmNl
KToKICAgICAgICAgICAgIHNlbGYuX2Vycm9ycy5hcHBlbmQoJyVzICBbJXNdIFslZF0nICUgKG1l
c3NhZ2UsIGNhdGVnb3J5LCBjb25maWRlbmNlKSkKQEAgLTE1NzEsNyArMTU3Myw3IEBAIGNsYXNz
IENwcFN0eWxlVGVzdChDcHBTdHlsZVRlc3RCYXNlKToKICAgICBkZWYgdGVzdF9maWx0ZXIoc2Vs
Zik6CiAgICAgICAgIG9sZF9maWx0ZXJzID0gY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUuZmls
dGVycwogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0
ZS5zZXRfZmlsdGVycygnLSwrd2hpdGVzcGFjZSwtd2hpdGVzcGFjZS9pbmRlbnQnKQorICAgICAg
ICAgICAgY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUuc2V0X2ZpbHRlcnMoWyctJywgJyt3aGl0
ZXNwYWNlJywgJy13aGl0ZXNwYWNlL2luZGVudCddKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRf
bGludCgKICAgICAgICAgICAgICAgICAnLy8gSGVsbG8gdGhlcmUgJywKICAgICAgICAgICAgICAg
ICAnTGluZSBlbmRzIGluIHdoaXRlc3BhY2UuICBDb25zaWRlciBkZWxldGluZyB0aGVzZSBleHRy
YSBzcGFjZXMuJwpAQCAtMTU4MSwxNSArMTU4MywxMyBAQCBjbGFzcyBDcHBTdHlsZVRlc3QoQ3Bw
U3R5bGVUZXN0QmFzZSk6CiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBjcHBfc3R5bGUu
X2NwcF9zdHlsZV9zdGF0ZS5maWx0ZXJzID0gb2xkX2ZpbHRlcnMKIAotICAgIGRlZiB0ZXN0X2Rl
ZmF1bHRfZmlsdGVyKHNlbGYpOgotICAgICAgICBkZWZhdWx0X2ZpbHRlcl9ydWxlcyA9IGNwcF9z
dHlsZS5fREVGQVVMVF9GSUxURVJfUlVMRVMKKyAgICBkZWYgdGVzdF9maWx0ZXJfYXBwZW5kaW5n
KHNlbGYpOgogICAgICAgICBvbGRfZmlsdGVycyA9IGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRl
LmZpbHRlcnMKLSAgICAgICAgY3BwX3N0eWxlLl9ERUZBVUxUX0ZJTFRFUl9SVUxFUyA9IFsgJy13
aGl0ZXNwYWNlJyBdCiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgUmVzZXQgZmlsdGVycwot
ICAgICAgICAgICAgY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUuc2V0X2ZpbHRlcnMoJycpCisg
ICAgICAgICAgICBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS5zZXRfZmlsdGVycyhbJy13aGl0
ZXNwYWNlJ10pCiAgICAgICAgICAgICBzZWxmLmFzc2VydF9saW50KCcvLyBIZWxsbyB0aGVyZSAn
LCAnJykKLSAgICAgICAgICAgIGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLnNldF9maWx0ZXJz
KCcrd2hpdGVzcGFjZS9lbmRfb2ZfbGluZScpCisgICAgICAgICAgICBjcHBfc3R5bGUuX2NwcF9z
dHlsZV9zdGF0ZS5zZXRfZmlsdGVycyhbJy13aGl0ZXNwYWNlJywgJyt3aGl0ZXNwYWNlL2VuZF9v
Zl9saW5lJ10pCiAgICAgICAgICAgICBzZWxmLmFzc2VydF9saW50KAogICAgICAgICAgICAgICAg
ICcvLyBIZWxsbyB0aGVyZSAnLAogICAgICAgICAgICAgICAgICdMaW5lIGVuZHMgaW4gd2hpdGVz
cGFjZS4gIENvbnNpZGVyIGRlbGV0aW5nIHRoZXNlIGV4dHJhIHNwYWNlcy4nCkBAIC0xNTk3LDcg
KzE1OTcsNiBAQCBjbGFzcyBDcHBTdHlsZVRlc3QoQ3BwU3R5bGVUZXN0QmFzZSk6CiAgICAgICAg
ICAgICBzZWxmLmFzc2VydF9saW50KCcgd2VpcmQgb3BlbmluZyBzcGFjZScsICcnKQogICAgICAg
ICBmaW5hbGx5OgogICAgICAgICAgICAgY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUuZmlsdGVy
cyA9IG9sZF9maWx0ZXJzCi0gICAgICAgICAgICBjcHBfc3R5bGUuX0RFRkFVTFRfRklMVEVSX1JV
TEVTID0gZGVmYXVsdF9maWx0ZXJfcnVsZXMKIAogICAgIGRlZiB0ZXN0X3VubmFtZWRfbmFtZXNw
YWNlc19pbl9oZWFkZXJzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxl
c19jaGVjaygKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS5weQkocmV2aXNp
b24gNTI4NDcpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDQgKzEsNSBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDEwIENocmlzIEplcmRv
bmVrIChjaHJpcy5qZXJkb25la0BnbWFpbC5jb20pCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCkBAIC0yOSw3ICszMCw2IEBACiAiIiJGcm9udCBlbmQgb2Ygc29tZSBzdHlsZS1jaGVj
a2VyIG1vZHVsZXMuIiIiCiAKICMgRklYTUU6IE1vdmUgbW9yZSBjb2RlIGZyb20gY3BwX3N0eWxl
IHRvIGhlcmUuCi0jIGNoZWNrLXdlYmtpdC1zdHlsZSBzaG91bGQgbm90IHJlZmVyIGNwcF9zdHls
ZSBkaXJlY3RseS4KIAogaW1wb3J0IGdldG9wdAogaW1wb3J0IG9zLnBhdGgKQEAgLTQwLDIyICs0
MCwyNCBAQCBpbXBvcnQgdGV4dF9zdHlsZQogZnJvbSBkaWZmX3BhcnNlciBpbXBvcnQgRGlmZlBh
cnNlcgogCiAKLSMgRGVmYXVsdCBvcHRpb25zCi1fREVGQVVMVF9WRVJCT1NJVFkgPSAxCi1fREVG
QVVMVF9PVVRQVVRfRk9STUFUID0gJ2VtYWNzJworIyBUaGVzZSBkZWZhdWx0cyBhcmUgdXNlZCBi
eSBjaGVjay13ZWJraXQtc3R5bGUuCitERUZBVUxUX1ZFUkJPU0lUWSA9IDEKK0RFRkFVTFRfT1VU
UFVUX0ZPUk1BVCA9ICdlbWFjcycKIAogCiAjIEZJWE1FOiBGb3Igc3R5bGUgY2F0ZWdvcmllcyB3
ZSB3aWxsIG5ldmVyIHdhbnQgdG8gaGF2ZSwgcmVtb3ZlIHRoZW0uCiAjICAgICAgICBGb3IgY2F0
ZWdvcmllcyBmb3Igd2hpY2ggd2Ugd2FudCB0byBoYXZlIHNpbWlsYXIgZnVuY3Rpb25hbGl0eSwK
ICMgICAgICAgIG1vZGlmeSB0aGUgaW1wbGVtZW50YXRpb24gYW5kIGVuYWJsZSB0aGVtLgotIyBG
SVhNRTogQWRkIGEgdW5pdCB0ZXN0IHRvIGVuc3VyZSB0aGUgY29ycmVzcG9uZGluZyBjYXRlZ29y
aWVzCi0jICAgICAgICBhcmUgZWxlbWVudHMgb2YgX1NUWUxFX0NBVEVHT1JJRVMuCiAjCi0jIEZv
ciB1bmFtYmlndW91cyB0ZXJtaW5vbG9neSwgd2UgdXNlICJmaWx0ZXIgcnVsZSIgcmF0aGVyIHRo
YW4gImZpbHRlciIKLSMgZm9yIGFuIGluZGl2aWR1YWwgYm9vbGVhbiBmaWx0ZXIgZmxhZyBsaWtl
ICIrZm9vIi4gVGhpcyBhbGxvd3MgdXMgdG8gCi0jIHJlc2VydmUgImZpbHRlciIgZm9yIHdoYXQg
b25lIGdldHMgYnkgY29sbGVjdGl2ZWx5IGFwcGx5aW5nIGFsbCBvZiAKLSMgdGhlIGZpbHRlciBy
dWxlcyBhcyBzcGVjaWZpZWQgYnkgYSAtLWZpbHRlciBmbGFnLgotX1dFQktJVF9GSUxURVJfUlVM
RVMgPSBbCisjIFRocm91Z2hvdXQgdGhpcyBtb2R1bGUsIHdlIHVzZSAiZmlsdGVyIHJ1bGUiIHJh
dGhlciB0aGFuICJmaWx0ZXIiCisjIGZvciBhbiBpbmRpdmlkdWFsIGJvb2xlYW4gZmlsdGVyIGZs
YWcgbGlrZSAiK2ZvbyIuIFRoaXMgYWxsb3dzIHVzIHRvCisjIHJlc2VydmUgImZpbHRlciIgZm9y
IHdoYXQgb25lIGdldHMgYnkgY29sbGVjdGl2ZWx5IGFwcGx5aW5nIGFsbCBvZgorIyB0aGUgZmls
dGVyIHJ1bGVzLgorIworIyBUaGUgX1dFQktJVF9GSUxURVJfUlVMRVMgYXJlIHByZXBlbmRlZCB0
byBhbnkgdXNlci1zcGVjaWZpZWQgZmlsdGVyCisjIHJ1bGVzLiBTaW5jZSBieSBkZWZhdWx0IGFs
bCBlcnJvcnMgYXJlIG9uLCBvbmx5IGluY2x1ZGUgcnVsZXMgdGhhdAorIyBiZWdpbiB3aXRoIGEg
LSBzaWduLgorV0VCS0lUX0ZJTFRFUl9SVUxFUyA9IFsKICAgICAnLWJ1aWxkL2VuZGlmX2NvbW1l
bnQnLAogICAgICctYnVpbGQvaW5jbHVkZV93aGF0X3lvdV91c2UnLCAgIyA8c3RyaW5nPiBmb3Ig
c3RkOjpzdHJpbmcKICAgICAnLWJ1aWxkL3N0b3JhZ2VfY2xhc3MnLCAgIyBjb25zdCBzdGF0aWMK
QEAgLTc5LDExICs4MSwyMCBAQCBfV0VCS0lUX0ZJTFRFUl9SVUxFUyA9IFsKICAgICBdCiAKIAor
IyBGSVhNRTogVGhlIFNUWUxFX0NBVEVHT1JJRVMgc2hvdyB1cCBpbiBib3RoIGZpbGUgdHlwZXMg
Y3BwX3N0eWxlLnB5CisjICAgICAgICBhbmQgdGV4dF9zdHlsZS5weS4gQnJlYWsgdGhpcyBsaXN0
IGludG8gcG9zc2libHkgb3ZlcmxhcHBpbmcKKyMgICAgICAgIHN1Yi1saXN0cywgYW5kIHN0b3Jl
IGVhY2ggc3ViLWxpc3QgaW4gdGhlIGNvcnJlc3BvbmRpbmcgLnB5CisjICAgICAgICBmaWxlLiBU
aGUgZmlsZSBzdHlsZS5weSBjYW4gb2J0YWluIHRoZSBtYXN0ZXIgbGlzdCBieSB0YWtpbmcKKyMg
ICAgICAgIHRoZSB1bmlvbi4gVGhpcyB3aWxsIGFsbG93IHRoZSB1bml0IHRlc3RzIGZvciBlYWNo
IGZpbGUgdHlwZQorIyAgICAgICAgdG8gY2hlY2sgdGhhdCBhbGwgb2YgdGhlaXIgcmVzcGVjdGl2
ZSBzdHlsZSBjYXRlZ29yaWVzIGFyZQorIyAgICAgICAgcmVwcmVzZW50ZWQgLS0gd2l0aG91dCBo
YXZpbmcgdG8gcmVmZXJlbmNlIHN0eWxlLnB5IG9yIGJlCisjICAgICAgICBhd2FyZSBvZiB0aGUg
ZXhpc3RlbmNlIG9mIG90aGVyIGZpbGUgdHlwZXMuCisjCiAjIFdlIGNhdGVnb3JpemUgZWFjaCBz
dHlsZSBydWxlIHdlIHByaW50LiAgSGVyZSBhcmUgdGhlIGNhdGVnb3JpZXMuCi0jIFdlIHdhbnQg
YW4gZXhwbGljaXQgbGlzdCBzbyB3ZSBjYW4gbGlzdCB0aGVtIGFsbCBpbiBjcHBfc3R5bGUgLS1m
aWx0ZXI9LgorIyBXZSB3YW50IGFuIGV4cGxpY2l0IGxpc3Qgc28gd2UgY2FuIGRpc3BsYXkgYSBm
dWxsIGxpc3QgdG8gdGhlIHVzZXIuCiAjIElmIHlvdSBhZGQgYSBuZXcgZXJyb3IgbWVzc2FnZSB3
aXRoIGEgbmV3IGNhdGVnb3J5LCBhZGQgaXQgdG8gdGhlIGxpc3QKICMgaGVyZSEgIGNwcF9zdHls
ZV91bml0dGVzdC5weSBzaG91bGQgdGVsbCB5b3UgaWYgeW91IGZvcmdldCB0byBkbyB0aGlzLgot
X1NUWUxFX0NBVEVHT1JJRVMgPSBbCitTVFlMRV9DQVRFR09SSUVTID0gWwogICAgICdidWlsZC9j
bGFzcycsCiAgICAgJ2J1aWxkL2RlcHJlY2F0ZWQnLAogICAgICdidWlsZC9lbmRpZl9jb21tZW50
JywKQEAgLTE0Nyw3ICsxNTgsMTQgQEAgX1NUWUxFX0NBVEVHT1JJRVMgPSBbCiAgICAgXQogCiAK
LV9VU0FHRSA9ICIiIgorZGVmIF9jcmVhdGVfdXNhZ2UoZGVmYXVsdHMpOgorICAgICIiIlJldHVy
biB0aGUgdXNhZ2Ugc3RyaW5nIHRvIGRpc3BsYXkgZm9yIGNvbW1hbmQgaGVscC4KKworICAgIEFy
Z3M6CisgICAgICBkZWZhdWx0czogQW4gQXJndW1lbnREZWZhdWx0cyBpbnN0YW5jZS4KKworICAg
ICIiIgorICAgIHVzYWdlID0gIiIiCiBTeW50YXg6ICUocHJvZ3JhbV9uYW1lKXMgWy0tdmVyYm9z
ZT0jXSBbLS1naXQtY29tbWl0PTxTaW5nbGVDb21taXQ+XSBbLS1vdXRwdXQ9dnM3XQogICAgICAg
ICBbLS1maWx0ZXI9LXgsK3ksLi4uXSBbZmlsZV0gLi4uCiAKQEAgLTE3MSw4ICsxODksOSBAQCBT
eW50YXg6ICUocHJvZ3JhbV9uYW1lKXMgWy0tdmVyYm9zZT0jXSBbCiAgIEZsYWdzOgogCiAgICAg
dmVyYm9zZT0jCi0gICAgICBBIG51bWJlciAwLTUgdG8gcmVzdHJpY3QgZXJyb3JzIHRvIGNlcnRh
aW4gdmVyYm9zaXR5IGxldmVscy4KLSAgICAgIERlZmF1bHRzIHRvICUoZGVmYXVsdF92ZXJib3Np
dHkpcy4KKyAgICAgIEEgbnVtYmVyIDEtNSB0aGF0IHJlc3RyaWN0cyBvdXRwdXQgdG8gZXJyb3Jz
IHdpdGggYSBjb25maWRlbmNlCisgICAgICBzY29yZSBhdCBvciBhYm92ZSB0aGlzIHZhbHVlLiBJ
biBwYXJ0aWN1bGFyLCB0aGUgdmFsdWUgMSBkaXNwbGF5cworICAgICAgYWxsIGVycm9ycy4gVGhl
IGRlZmF1bHQgaXMgJShkZWZhdWx0X3ZlcmJvc2l0eSlzLgogCiAgICAgZ2l0LWNvbW1pdD08U2lu
Z2xlQ29tbWl0PgogICAgICAgQ2hlY2tzIHRoZSBzdHlsZSBvZiBldmVyeXRoaW5nIGZyb20gdGhl
IGdpdmVuIGNvbW1pdCB0byB0aGUgbG9jYWwgdHJlZS4KQEAgLTIwNCwxMDggKzIyMywyODQgQEAg
U3ludGF4OiAlKHByb2dyYW1fbmFtZSlzIFstLXZlcmJvc2U9I10gWwogICAgICAgJShwcm9ncmFt
X25hbWUpcywgYWxvbmcgd2l0aCB3aGljaCBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LCBwYXNzCiAg
ICAgICB0aGUgZW1wdHkgZmlsdGVyIGFzIGZvbGxvd3M6CiAgICAgICAgICAtLWZpbHRlcj0KLSIi
IiAlIHsKLSAgICAncHJvZ3JhbV9uYW1lJzogb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSks
Ci0gICAgJ2RlZmF1bHRfdmVyYm9zaXR5JzogX0RFRkFVTFRfVkVSQk9TSVRZLAotICAgICdkZWZh
dWx0X291dHB1dF9mb3JtYXQnOiBfREVGQVVMVF9PVVRQVVRfRk9STUFUCi0gICAgfQorIiIiICUg
eydwcm9ncmFtX25hbWUnOiBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKSwKKyAgICAgICAn
ZGVmYXVsdF92ZXJib3NpdHknOiBkZWZhdWx0cy52ZXJib3NpdHksCisgICAgICAgJ2RlZmF1bHRf
b3V0cHV0X2Zvcm1hdCc6IGRlZmF1bHRzLm91dHB1dF9mb3JtYXR9CisKKyAgICByZXR1cm4gdXNh
Z2UKIAogCi1kZWYgdXNlX3dlYmtpdF9zdHlsZXMoKToKLSAgICAiIiJDb25maWd1cmVzIHRoaXMg
bW9kdWxlIGZvciBXZWJLaXQgc3R5bGUuIiIiCi0gICAgY3BwX3N0eWxlLl9ERUZBVUxUX0ZJTFRF
Ul9SVUxFUyA9IF9XRUJLSVRfRklMVEVSX1JVTEVTCisjIFRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBo
YXZlIGtub3dsZWRnZSBvZiB0aGUgZmxhZyBrZXkgbmFtZXMuCitjbGFzcyBQcm9jZXNzb3JPcHRp
b25zKG9iamVjdCk6CisKKyAgICAiIiJBIGNvbnRhaW5lciB0byBzdG9yZSBvcHRpb25zIHRvIHVz
ZSB3aGVuIGNoZWNraW5nIHN0eWxlLgorCisgICAgQXR0cmlidXRlczoKKyAgICAgIG91dHB1dF9m
b3JtYXQ6IEEgc3RyaW5nIHRoYXQgaXMgdGhlIG91dHB1dCBmb3JtYXQuIFRoZSBzdXBwb3J0ZWQK
KyAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBmb3JtYXRzIGFyZSAiZW1hY3MiIHdoaWNoIGVt
YWNzIGNhbiBwYXJzZQorICAgICAgICAgICAgICAgICAgICAgYW5kICJ2czciIHdoaWNoIE1pY3Jv
c29mdCBWaXN1YWwgU3R1ZGlvIDcgY2FuIHBhcnNlLgorCisgICAgICB2ZXJib3NpdHk6IEFuIGlu
dGVnZXIgMS01IHRoYXQgcmVzdHJpY3RzIG91dHB1dCB0byBlcnJvcnMgd2l0aCBhCisgICAgICAg
ICAgICAgICAgIGNvbmZpZGVuY2Ugc2NvcmUgYXQgb3IgYWJvdmUgdGhpcyB2YWx1ZS4KKyAgICAg
ICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgMSwgd2hpY2ggZGlzcGxheXMgYWxsIGVycm9ycy4K
KworICAgICAgZmlsdGVyX3J1bGVzOiBBIGxpc3Qgb2Ygc3RyaW5ncyB0aGF0IGFyZSBib29sZWFu
IGZpbHRlciBydWxlcyB1c2VkCisgICAgICAgICAgICAgICAgICAgIHRvIGRldGVybWluZSB3aGV0
aGVyIGEgc3R5bGUgY2F0ZWdvcnkgc2hvdWxkIGJlIGNoZWNrZWQuCisgICAgICAgICAgICAgICAg
ICAgIEVhY2ggc3RyaW5nIHNob3VsZCBzdGFydCB3aXRoICsgb3IgLS4gQW4gZXhhbXBsZQorICAg
ICAgICAgICAgICAgICAgICBzdHJpbmcgaXMgIit3aGl0ZXNwYWNlL2luZGVudCIuIFRoZSBsaXN0
IGluY2x1ZGVzIGFueQorICAgICAgICAgICAgICAgICAgICBwcmVwZW5kZWQgZGVmYXVsdCBmaWx0
ZXIgcnVsZXMuIFRoZSBkZWZhdWx0IGlzIHRoZQorICAgICAgICAgICAgICAgICAgICBlbXB0eSBs
aXN0LCB3aGljaCBpbmNsdWRlcyBhbGwgY2F0ZWdvcmllcy4KKworICAgICAgZ2l0X2NvbW1pdDog
QSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBnaXQgY29tbWl0IHRvIGNoZWNrLgorICAgICAgICAg
ICAgICAgICAgVGhlIGRlZmF1bHQgaXMgTm9uZS4KKworICAgICAgZXh0cmFfZmxhZ192YWx1ZXM6
IEEgc3RyaW5nLXN0cmluZyBkaWN0aW9uYXJ5IG9mIGFsbCBmbGFnIGtleS12YWx1ZQorICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhaXJzIHRoYXQgYXJlIG5vdCBvdGhlcndpc2UgcmVwcmVzZW50
ZWQgYnkgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLiBUaGUgZGVmYXVsdCBp
cyB0aGUgZW1wdHkgZGljdGlvbmFyeS4KKyAgICAiIiIKIAorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBvdXRwdXRfZm9ybWF0LCB2ZXJib3NpdHk9MSwgZmlsdGVyX3J1bGVzPU5vbmUsCisgICAgICAg
ICAgICAgICAgIGdpdF9jb21taXQ9Tm9uZSwgZXh0cmFfZmxhZ192YWx1ZXM9Tm9uZSk6CisgICAg
ICAgIGlmIGZpbHRlcl9ydWxlcyBpcyBOb25lOgorICAgICAgICAgICAgZmlsdGVyX3J1bGVzID0g
W10KKyAgICAgICAgaWYgZXh0cmFfZmxhZ192YWx1ZXMgaXMgTm9uZToKKyAgICAgICAgICAgIGV4
dHJhX2ZsYWdfdmFsdWVzID0ge30KKworICAgICAgICBzZWxmLm91dHB1dF9mb3JtYXQgPSBvdXRw
dXRfZm9ybWF0CisgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gdmVyYm9zaXR5CisgICAgICAgIHNl
bGYuZmlsdGVyX3J1bGVzID0gZmlsdGVyX3J1bGVzCisgICAgICAgIHNlbGYuZ2l0X2NvbW1pdCA9
IGdpdF9jb21taXQKKyAgICAgICAgc2VsZi5leHRyYV9mbGFnX3ZhbHVlcyA9IGV4dHJhX2ZsYWdf
dmFsdWVzCisKKworIyBGSVhNRTogRWxpbWluYXRlIHRoZSBuZWVkIGZvciB0aGlzIGZ1bmN0aW9u
LgorIyAgICAgICAgT3B0aW9ucyBzaG91bGQgYmUgcGFzc2VkIGludG8gcHJvY2Vzc19maWxlIGlu
c3RlYWQuCitkZWYgc2V0X29wdGlvbnMob3B0aW9ucyk6CisgICAgIiIiSW5pdGlhbGl6ZSBnbG9i
YWwgX0NwcFN0eWxlU3RhdGUgaW5zdGFuY2UuCiAKLWRlZiBleGl0X3dpdGhfdXNhZ2UoZXJyb3Jf
bWVzc2FnZSwgZGlzcGxheV9oZWxwPUZhbHNlKToKLSAgICAiIiJFeGl0IGFuZCBwcmludCBhIHVz
YWdlIHN0cmluZyB3aXRoIGFuIG9wdGlvbmFsIGVycm9yIG1lc3NhZ2UuCisgICAgVGhpcyBuZWVk
cyB0byBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgcHJvY2Vzc19maWxlLgogCiAgICAgQXJnczoK
LSAgICAgIGVycm9yX21lc3NhZ2U6IFRoZSBvcHRpb25hbCBlcnJvciBtZXNzYWdlLgotICAgICAg
ZGlzcGxheV9oZWxwOiBXaGV0aGVyIHRvIGRpc3BsYXkgaGVscCBvdXRwdXQuIFN1cHByZXNzaW5n
IGhlbHAKLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGlzIHVzZWZ1bCBmb3IgdW5pdCB0ZXN0
cy4KKyAgICAgIG9wdGlvbnM6IEEgUHJvY2Vzc29yT3B0aW9ucyBpbnN0YW5jZS4KICAgICAiIiIK
LSAgICBpZiBkaXNwbGF5X2hlbHA6Ci0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoX1VTQUdFKQot
ICAgIGlmIGVycm9yX21lc3NhZ2U6Ci0gICAgICAgIHN5cy5leGl0KCdcbkZBVEFMIEVSUk9SOiAn
ICsgZXJyb3JfbWVzc2FnZSkKLSAgICBlbHNlOgotICAgICAgICBzeXMuZXhpdCgxKQorICAgIGNw
cF9zdHlsZS5fc2V0X291dHB1dF9mb3JtYXQob3B0aW9ucy5vdXRwdXRfZm9ybWF0KQorICAgIGNw
cF9zdHlsZS5fc2V0X3ZlcmJvc2VfbGV2ZWwob3B0aW9ucy52ZXJib3NpdHkpCisgICAgY3BwX3N0
eWxlLl9zZXRfZmlsdGVycyhvcHRpb25zLmZpbHRlcl9ydWxlcykKIAogCi1kZWYgZXhpdF93aXRo
X2NhdGVnb3JpZXMoZGlzcGxheV9oZWxwPUZhbHNlKToKLSAgICAiIiJFeGl0IGFuZCBwcmludCBh
bGwgc3R5bGUgY2F0ZWdvcmllcywgYWxvbmcgd2l0aCB0aGUgZGVmYXVsdCBmaWx0ZXIuCisjIFRo
aXMgY2xhc3Mgc2hvdWxkIG5vdCBoYXZlIGtub3dsZWRnZSBvZiB0aGUgZmxhZyBrZXkgbmFtZXMu
CitjbGFzcyBBcmd1bWVudERlZmF1bHRzKG9iamVjdCk6CiAKLSAgICBUaGVzZSBjYXRlZ29yeSBu
YW1lcyBhcHBlYXIgaW4gZXJyb3IgbWVzc2FnZXMuICBUaGV5IGNhbiBiZSBmaWx0ZXJlZAotICAg
IHVzaW5nIHRoZSAtLWZpbHRlciBmbGFnLgorICAgICIiIkEgY29udGFpbmVyIHRvIHN0b3JlIGRl
ZmF1bHQgYXJndW1lbnQgdmFsdWVzLgorCisgICAgQXR0cmlidXRlczoKKyAgICAgIG91dHB1dF9m
b3JtYXQ6IEEgc3RyaW5nIHRoYXQgaXMgdGhlIGRlZmF1bHQgb3V0cHV0IGZvcm1hdC4KKyAgICAg
IHZlcmJvc2l0eTogQW4gaW50ZWdlciB0aGF0IGlzIHRoZSBkZWZhdWx0IHZlcmJvc2l0eSBsZXZl
bC4KKyAgICAgIGZpbHRlcl9ydWxlczogQSBsaXN0IG9mIHN0cmluZ3MgdGhhdCBhcmUgYm9vbGVh
biBmaWx0ZXIgcnVsZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gcHJlcGVuZCB0byBhbnkgdXNl
ci1zcGVjaWZpZWQgcnVsZXMuCiAKLSAgICBBcmdzOgotICAgICAgZGlzcGxheV9oZWxwOiBXaGV0
aGVyIHRvIGRpc3BsYXkgaGVscCBvdXRwdXQuIFN1cHByZXNzaW5nIGhlbHAKLSAgICAgICAgICAg
ICAgICAgICAgb3V0cHV0IGlzIHVzZWZ1bCBmb3IgdW5pdCB0ZXN0cy4KICAgICAiIiIKLSAgICBp
ZiBkaXNwbGF5X2hlbHA6Ci0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ1xuQWxsIGNhdGVnb3Jp
ZXM6XG4nKQotICAgICAgICBmb3IgY2F0ZWdvcnkgaW4gc29ydGVkKF9TVFlMRV9DQVRFR09SSUVT
KToKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJyAgICAnICsgY2F0ZWdvcnkgKyAnXG4n
KQogCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ1xuRGVmYXVsdCBmaWx0ZXIgcnVsZXMqKjpc
bicpCi0gICAgICAgIGZvciBmaWx0ZXJfcnVsZSBpbiBzb3J0ZWQoX1dFQktJVF9GSUxURVJfUlVM
RVMpOgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnICAgICcgKyBmaWx0ZXJfcnVsZSAr
ICdcbicpCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ1xuKipUaGUgY29tbWFuZCBhbHdheXMg
ZXZhbHVhdGVzIHRoZSBhYm92ZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ3J1bGVzLCBh
bmQgYmVmb3JlIGFueSAtLWZpbHRlciBmbGFnLlxuXG4nKQorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBkZWZhdWx0X291dHB1dF9mb3JtYXQsIGRlZmF1bHRfdmVyYm9zaXR5LAorICAgICAgICAgICAg
ICAgICBkZWZhdWx0X2ZpbHRlcl9ydWxlcyk6CisgICAgICAgIHNlbGYub3V0cHV0X2Zvcm1hdCA9
IGRlZmF1bHRfb3V0cHV0X2Zvcm1hdAorICAgICAgICBzZWxmLnZlcmJvc2l0eSA9IGRlZmF1bHRf
dmVyYm9zaXR5CisgICAgICAgIHNlbGYuZmlsdGVyX3J1bGVzID0gZGVmYXVsdF9maWx0ZXJfcnVs
ZXMKIAotICAgIHN5cy5leGl0KDApCiAKK2NsYXNzIEFyZ3VtZW50UHJpbnRlcihvYmplY3QpOgog
Ci1kZWYgcGFyc2VfYXJndW1lbnRzKGFyZ3MsIGFkZGl0aW9uYWxfZmxhZ3M9W10sIGRpc3BsYXlf
aGVscD1GYWxzZSk6Ci0gICAgIiIiUGFyc2VzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgor
ICAgICIiIlN1cHBvcnRzIHRoZSBwcmludGluZyBvZiBjaGVjay13ZWJraXQtc3R5bGUgY29tbWFu
ZCBhcmd1bWVudHMuIiIiCiAKLSAgICBUaGlzIG1heSBzZXQgdGhlIG91dHB1dCBmb3JtYXQgYW5k
IHZlcmJvc2l0eSBsZXZlbCBhcyBzaWRlLWVmZmVjdHMuCisgICAgZGVmIF9mbGFnX3BhaXJfdG9f
c3RyaW5nKHNlbGYsIGZsYWdfa2V5LCBmbGFnX3ZhbHVlKToKKyAgICAgICAgcmV0dXJuICctLSUo
a2V5KXM9JSh2YWwpcycgJSB7J2tleSc6IGZsYWdfa2V5LCAndmFsJzogZmxhZ192YWx1ZSB9CiAK
LSAgICBBcmdzOgotICAgICAgYXJnczogVGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHM6Ci0gICAg
ICBhZGRpdGlvbmFsX2ZsYWdzOiBBIGxpc3Qgb2Ygc3RyaW5ncyB3aGljaCBzcGVjaWZpZXMgZmxh
Z3Mgd2UgYWxsb3cuCi0gICAgICBkaXNwbGF5X2hlbHA6IFdoZXRoZXIgdG8gZGlzcGxheSBoZWxw
IG91dHB1dC4gU3VwcHJlc3NpbmcgaGVscAotICAgICAgICAgICAgICAgICAgICBvdXRwdXQgaXMg
dXNlZnVsIGZvciB1bml0IHRlc3RzLgorICAgIGRlZiB0b19mbGFnX3N0cmluZyhzZWxmLCBvcHRp
b25zKToKKyAgICAgICAgIiIiUmV0dXJuIGEgZmxhZyBzdHJpbmcgeWllbGRpbmcgdGhlIGdpdmVu
IFByb2Nlc3Nvck9wdGlvbnMgaW5zdGFuY2UuCisKKyAgICAgICAgVGhpcyBtZXRob2Qgb3JkZXJz
IHRoZSBmbGFnIHZhbHVlcyBhbHBoYWJldGljYWxseSBieSB0aGUgZmxhZyBrZXkuCisKKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICBvcHRpb25zOiBBIFByb2Nlc3Nvck9wdGlvbnMgaW5zdGFuY2Uu
CisKKyAgICAgICAgIiIiCisgICAgICAgIGZsYWdzID0gb3B0aW9ucy5leHRyYV9mbGFnX3ZhbHVl
cy5jb3B5KCkKKworICAgICAgICBmbGFnc1snb3V0cHV0J10gPSBvcHRpb25zLm91dHB1dF9mb3Jt
YXQKKyAgICAgICAgZmxhZ3NbJ3ZlcmJvc2UnXSA9IG9wdGlvbnMudmVyYm9zaXR5CisgICAgICAg
IGlmIG9wdGlvbnMuZmlsdGVyX3J1bGVzOgorICAgICAgICAgICAgZmxhZ3NbJ2ZpbHRlciddID0g
JywnLmpvaW4ob3B0aW9ucy5maWx0ZXJfcnVsZXMpCisgICAgICAgIGlmIG9wdGlvbnMuZ2l0X2Nv
bW1pdDoKKyAgICAgICAgICAgIGZsYWdzWydnaXQtY29tbWl0J10gPSBvcHRpb25zLmdpdF9jb21t
aXQKIAotICAgIFJldHVybnM6Ci0gICAgICBBIHR1cGxlIG9mIChmaWxlbmFtZXMsIGZsYWdzKQor
ICAgICAgICBmbGFnX3N0cmluZyA9ICcnCisgICAgICAgICMgQWxwaGFiZXRpemluZyBsZXRzIHVz
IHVuaXQgdGVzdCB0aGlzIG1ldGhvZC4KKyAgICAgICAgZm9yIGtleSBpbiBzb3J0ZWQoZmxhZ3Mu
a2V5cygpKToKKyAgICAgICAgICAgIGZsYWdfc3RyaW5nICs9IHNlbGYuX2ZsYWdfcGFpcl90b19z
dHJpbmcoa2V5LCBmbGFnc1trZXldKSArICcgJworCisgICAgICAgIHJldHVybiBmbGFnX3N0cmlu
Zy5zdHJpcCgpCisKKworY2xhc3MgQXJndW1lbnRQYXJzZXIob2JqZWN0KToKKworICAgICIiIlN1
cHBvcnRzIHRoZSBwYXJzaW5nIG9mIGNoZWNrLXdlYmtpdC1zdHlsZSBjb21tYW5kIGFyZ3VtZW50
cy4KKworICAgIEF0dHJpYnV0ZXM6CisgICAgICBkZWZhdWx0czogQW4gQXJndW1lbnREZWZhdWx0
cyBpbnN0YW5jZS4KKyAgICAgIGNyZWF0ZV91c2FnZTogQSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMg
YW4gQXJndW1lbnREZWZhdWx0cyBpbnN0YW5jZQorICAgICAgICAgICAgICAgICAgICBhbmQgcmV0
dXJucyBhIHN0cmluZyBvZiB1c2FnZSBpbnN0cnVjdGlvbnMuCisgICAgICAgICAgICAgICAgICAg
IFRoaXMgZGVmYXVsdHMgdG8gdGhlIGZ1bmN0aW9uIHVzZWQgdG8gZ2VuZXJhdGUgdGhlCisgICAg
ICAgICAgICAgICAgICAgIHVzYWdlIHN0cmluZyBmb3IgY2hlY2std2Via2l0LXN0eWxlLgorICAg
ICAgZG9jX3ByaW50OiBBIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIHN0cmluZyBwYXJhbWV0ZXIg
YW5kIHRoYXQgaXMKKyAgICAgICAgICAgICAgICAgY2FsbGVkIHRvIGRpc3BsYXkgaGVscCBtZXNz
YWdlcy4gVGhpcyBkZWZhdWx0cyB0bworICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRl
KCkuCiAKLSAgICAgIGZpbGVuYW1lczogVGhlIGxpc3Qgb2YgZmlsZW5hbWVzIHRvIGxpbnQuCi0g
ICAgICBmbGFnczogVGhlIGRpY3Qgb2YgdGhlIGZsYWcgbmFtZXMgYW5kIHRoZSBmbGFnIHZhbHVl
cy4KICAgICAiIiIKLSAgICBmbGFncyA9IFsnaGVscCcsICdvdXRwdXQ9JywgJ3ZlcmJvc2U9Jywg
J2ZpbHRlcj0nXSArIGFkZGl0aW9uYWxfZmxhZ3MKLSAgICBhZGRpdGlvbmFsX2ZsYWdfdmFsdWVz
ID0ge30KLSAgICB0cnk6Ci0gICAgICAgIChvcHRzLCBmaWxlbmFtZXMpID0gZ2V0b3B0LmdldG9w
dChhcmdzLCAnJywgZmxhZ3MpCi0gICAgZXhjZXB0IGdldG9wdC5HZXRvcHRFcnJvcjoKLSAgICAg
ICAgZXhpdF93aXRoX3VzYWdlKCdJbnZhbGlkIGFyZ3VtZW50cy4nLCBkaXNwbGF5X2hlbHApCi0K
LSAgICB2ZXJib3NpdHkgPSBfREVGQVVMVF9WRVJCT1NJVFkKLSAgICBvdXRwdXRfZm9ybWF0ID0g
X0RFRkFVTFRfT1VUUFVUX0ZPUk1BVAotICAgIGZpbHRlcnMgPSAnJwotCi0gICAgZm9yIChvcHQs
IHZhbCkgaW4gb3B0czoKLSAgICAgICAgaWYgb3B0ID09ICctLWhlbHAnOgotICAgICAgICAgICAg
ZXhpdF93aXRoX3VzYWdlKE5vbmUsIGRpc3BsYXlfaGVscCkKLSAgICAgICAgZWxpZiBvcHQgPT0g
Jy0tb3V0cHV0JzoKLSAgICAgICAgICAgIGlmIG5vdCB2YWwgaW4gKCdlbWFjcycsICd2czcnKToK
LSAgICAgICAgICAgICAgICBleGl0X3dpdGhfdXNhZ2UoJ1RoZSBvbmx5IGFsbG93ZWQgb3V0cHV0
IGZvcm1hdHMgYXJlIGVtYWNzIGFuZCB2czcuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGlzcGxheV9oZWxwKQotICAgICAgICAgICAgb3V0cHV0X2Zvcm1hdCA9IHZhbAotICAg
ICAgICBlbGlmIG9wdCA9PSAnLS12ZXJib3NlJzoKLSAgICAgICAgICAgIHZlcmJvc2l0eSA9IGlu
dCh2YWwpCi0gICAgICAgIGVsaWYgb3B0ID09ICctLWZpbHRlcic6Ci0gICAgICAgICAgICBmaWx0
ZXJzID0gdmFsCi0gICAgICAgICAgICBpZiBub3QgZmlsdGVyczoKLSAgICAgICAgICAgICAgICBl
eGl0X3dpdGhfY2F0ZWdvcmllcyhkaXNwbGF5X2hlbHApCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgYXJndW1lbnRfZGVmYXVsdHMsIGNyZWF0ZV91c2FnZT1Ob25lLCBkb2NfcHJpbnQ9Tm9uZSk6
CisgICAgICAgIGlmIGNyZWF0ZV91c2FnZSBpcyBOb25lOgorICAgICAgICAgICAgY3JlYXRlX3Vz
YWdlID0gX2NyZWF0ZV91c2FnZQorICAgICAgICBpZiBkb2NfcHJpbnQgaXMgTm9uZToKKyAgICAg
ICAgICAgIGRvY19wcmludCA9IHN5cy5zdGRlcnIud3JpdGUKKworICAgICAgICBzZWxmLmRlZmF1
bHRzID0gYXJndW1lbnRfZGVmYXVsdHMKKyAgICAgICAgc2VsZi5jcmVhdGVfdXNhZ2UgPSBjcmVh
dGVfdXNhZ2UKKyAgICAgICAgc2VsZi5kb2NfcHJpbnQgPSBkb2NfcHJpbnQKKworICAgIGRlZiBf
ZXhpdF93aXRoX3VzYWdlKHNlbGYsIGVycm9yX21lc3NhZ2U9JycpOgorICAgICAgICAiIiJFeGl0
IGFuZCBwcmludCBhIHVzYWdlIHN0cmluZyB3aXRoIGFuIG9wdGlvbmFsIGVycm9yIG1lc3NhZ2Uu
CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBlcnJvcl9tZXNzYWdlOiBBIHN0cmluZyB0aGF0
IGlzIGFuIGVycm9yIG1lc3NhZ2UgdG8gcHJpbnQuCisgICAgICAgICIiIgorICAgICAgICB1c2Fn
ZSA9IHNlbGYuY3JlYXRlX3VzYWdlKHNlbGYuZGVmYXVsdHMpCisgICAgICAgIHNlbGYuZG9jX3By
aW50KHVzYWdlKQorICAgICAgICBpZiBlcnJvcl9tZXNzYWdlOgorICAgICAgICAgICAgc3lzLmV4
aXQoJ1xuRkFUQUwgRVJST1I6ICcgKyBlcnJvcl9tZXNzYWdlKQogICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgYWRkaXRpb25hbF9mbGFnX3ZhbHVlc1tvcHRdID0gdmFsCisgICAgICAgICAgICBz
eXMuZXhpdCgxKQorCisgICAgZGVmIF9leGl0X3dpdGhfY2F0ZWdvcmllcyhzZWxmKToKKyAgICAg
ICAgIiIiRXhpdCBhbmQgcHJpbnQgdGhlIHN0eWxlIGNhdGVnb3JpZXMgYW5kIGRlZmF1bHQgZmls
dGVyIHJ1bGVzLiIiIgorICAgICAgICBzZWxmLmRvY19wcmludCgnXG5BbGwgY2F0ZWdvcmllczpc
bicpCisgICAgICAgIGZvciBjYXRlZ29yeSBpbiBzb3J0ZWQoU1RZTEVfQ0FURUdPUklFUyk6Cisg
ICAgICAgICAgICBzZWxmLmRvY19wcmludCgnICAgICcgKyBjYXRlZ29yeSArICdcbicpCisKKyAg
ICAgICAgc2VsZi5kb2NfcHJpbnQoJ1xuRGVmYXVsdCBmaWx0ZXIgcnVsZXMqKjpcbicpCisgICAg
ICAgIGZvciBmaWx0ZXJfcnVsZSBpbiBzb3J0ZWQoc2VsZi5kZWZhdWx0cy5maWx0ZXJfcnVsZXMp
OgorICAgICAgICAgICAgc2VsZi5kb2NfcHJpbnQoJyAgICAnICsgZmlsdGVyX3J1bGUgKyAnXG4n
KQorICAgICAgICBzZWxmLmRvY19wcmludCgnXG4qKlRoZSBjb21tYW5kIGFsd2F5cyBldmFsdWF0
ZXMgdGhlIGFib3ZlIHJ1bGVzLCAnCisgICAgICAgICAgICAgICAgICAgICAgICdhbmQgYmVmb3Jl
IGFueSAtLWZpbHRlciBmbGFnLlxuXG4nKQorCisgICAgICAgIHN5cy5leGl0KDApCisKKyAgICBk
ZWYgX3BhcnNlX2ZpbHRlcl9mbGFnKHNlbGYsIGZsYWdfdmFsdWUpOgorICAgICAgICAiIiJQYXJz
ZSB0aGUgdmFsdWUgb2YgdGhlIC0tZmlsdGVyIGZsYWcuCisKKyAgICAgICAgVGhlc2UgZmlsdGVy
cyBhcmUgYXBwbGllZCB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgdG8gZW1pdCBhIGdpdmVuCisgICAg
ICAgIGVycm9yIG1lc3NhZ2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBmbGFnX3ZhbHVl
OiBBIHN0cmluZyBvZiBjb21tYS1zZXBhcmF0ZWQgZmlsdGVyIHJ1bGVzLCBmb3IKKyAgICAgICAg
ICAgICAgICAgICAgICBleGFtcGxlICItd2hpdGVzcGFjZSwrd2hpdGVzcGFjZS9pbmRlbnQiLgor
CisgICAgICAgICIiIgorICAgICAgICBmaWx0ZXJzID0gW10KKyAgICAgICAgZm9yIHVuY2xlYW5l
ZF9maWx0ZXIgaW4gZmxhZ192YWx1ZS5zcGxpdCgnLCcpOgorICAgICAgICAgICAgZmlsdGVyID0g
dW5jbGVhbmVkX2ZpbHRlci5zdHJpcCgpCisgICAgICAgICAgICBpZiBub3QgZmlsdGVyOgorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmaWx0ZXJzLmFwcGVuZChmaWx0ZXIp
CisgICAgICAgIHJldHVybiBmaWx0ZXJzCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgYXJncywgZXh0
cmFfZmxhZ3M9Tm9uZSk6CisgICAgICAgICIiIlBhcnNlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1l
bnRzIHRvIGNoZWNrLXdlYmtpdC1zdHlsZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIGFy
Z3M6IEEgbGlzdCBvZiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGFzIHJldHVybmVkIGJ5IHN5cy5h
cmd2WzE6XS4KKyAgICAgICAgICBleHRyYV9mbGFnczogQSBsaXN0IG9mIGZsYWdzIHdob3NlIHZh
bHVlcyB3ZSB3YW50IHRvIGV4dHJhY3QsIGJ1dAorICAgICAgICAgICAgICAgICAgICAgICBhcmUg
bm90IHN1cHBvcnRlZCBieSB0aGUgUHJvY2Vzc29yT3B0aW9ucyBjbGFzcy4KKyAgICAgICAgICAg
ICAgICAgICAgICAgQW4gZXhhbXBsZSBmbGFnICJuZXdfZmxhZz0iLiBUaGlzIGRlZmF1bHRzIHRv
IHRoZQorICAgICAgICAgICAgICAgICAgICAgICBlbXB0eSBsaXN0LgorCisgICAgICAgIFJldHVy
bnM6CisgICAgICAgICAgQSB0dXBsZSBvZiAoZmlsZW5hbWVzLCBvcHRpb25zKQorCisgICAgICAg
ICAgZmlsZW5hbWVzOiBUaGUgbGlzdCBvZiBmaWxlbmFtZXMgdG8gY2hlY2suCisgICAgICAgICAg
b3B0aW9uczogQSBQcm9jZXNzb3JPcHRpb25zIGluc3RhbmNlLgorCisgICAgICAgICIiIgorICAg
ICAgICBpZiBleHRyYV9mbGFncyBpcyBOb25lOgorICAgICAgICAgICAgZXh0cmFfZmxhZ3MgPSBb
XQorCisgICAgICAgIG91dHB1dF9mb3JtYXQgPSBzZWxmLmRlZmF1bHRzLm91dHB1dF9mb3JtYXQK
KyAgICAgICAgdmVyYm9zaXR5ID0gc2VsZi5kZWZhdWx0cy52ZXJib3NpdHkKKyAgICAgICAgZmls
dGVyX3J1bGVzID0gc2VsZi5kZWZhdWx0cy5maWx0ZXJfcnVsZXMKKworICAgICAgICAjIFRoZSBm
bGFncyBhbHJlYWR5IHN1cHBvcnRlZCBieSB0aGUgUHJvY2Vzc29yT3B0aW9ucyBjbGFzcy4KKyAg
ICAgICAgZmxhZ3MgPSBbJ2hlbHAnLCAnb3V0cHV0PScsICd2ZXJib3NlPScsICdmaWx0ZXI9Jywg
J2dpdC1jb21taXQ9J10KKworICAgICAgICBmb3IgZXh0cmFfZmxhZyBpbiBleHRyYV9mbGFnczoK
KyAgICAgICAgICAgIGlmIGV4dHJhX2ZsYWcgaW4gZmxhZ3M6CisgICAgICAgICAgICAgICAgcmFp
c2UgVmFsdWVFcnJvcignRmxhZyBcJyUoZXh0cmFfZmxhZylzIGlzIGR1cGxpY2F0ZWQgJworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29yIGFscmVhZHkgc3VwcG9ydGVkLicgJQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeydleHRyYV9mbGFnJzogZXh0cmFfZmxh
Z30pCisgICAgICAgICAgICBmbGFncy5hcHBlbmQoZXh0cmFfZmxhZykKKworICAgICAgICB0cnk6
CisgICAgICAgICAgICAob3B0cywgZmlsZW5hbWVzKSA9IGdldG9wdC5nZXRvcHQoYXJncywgJycs
IGZsYWdzKQorICAgICAgICBleGNlcHQgZ2V0b3B0LkdldG9wdEVycm9yOgorICAgICAgICAgICAg
IyBGSVhNRTogU2V0dGxlIG9uIGFuIGVycm9yIGhhbmRsaW5nIGFwcHJvYWNoOiBjb21lIHVwCisg
ICAgICAgICAgICAjICAgICAgICB3aXRoIGEgY29uc2lzdGVudCBndWlkZWxpbmUgYXMgdG8gd2hl
biBhbmQgd2hldGhlcgorICAgICAgICAgICAgIyAgICAgICAgYSBWYWx1ZUVycm9yIHNob3VsZCBi
ZSByYWlzZWQgdmVyc3VzIGNhbGxpbmcKKyAgICAgICAgICAgICMgICAgICAgIHN5cy5leGl0IHdo
ZW4gbmVlZGluZyB0byBpbnRlcnJ1cHQgZXhlY3V0aW9uLgorICAgICAgICAgICAgc2VsZi5fZXhp
dF93aXRoX3VzYWdlKCdJbnZhbGlkIGFyZ3VtZW50cy4nKQorCisgICAgICAgIGV4dHJhX2ZsYWdf
dmFsdWVzID0ge30KKyAgICAgICAgZ2l0X2NvbW1pdCA9IE5vbmUKKworICAgICAgICBmb3IgKG9w
dCwgdmFsKSBpbiBvcHRzOgorICAgICAgICAgICAgaWYgb3B0ID09ICctLWhlbHAnOgorICAgICAg
ICAgICAgICAgIHNlbGYuX2V4aXRfd2l0aF91c2FnZSgpCisgICAgICAgICAgICBlbGlmIG9wdCA9
PSAnLS1vdXRwdXQnOgorICAgICAgICAgICAgICAgIG91dHB1dF9mb3JtYXQgPSB2YWwKKyAgICAg
ICAgICAgIGVsaWYgb3B0ID09ICctLXZlcmJvc2UnOgorICAgICAgICAgICAgICAgIHZlcmJvc2l0
eSA9IHZhbAorICAgICAgICAgICAgZWxpZiBvcHQgPT0gJy0tZ2l0LWNvbW1pdCc6CisgICAgICAg
ICAgICAgICAgZ2l0X2NvbW1pdCA9IHZhbAorICAgICAgICAgICAgZWxpZiBvcHQgPT0gJy0tZmls
dGVyJzoKKyAgICAgICAgICAgICAgICBpZiBub3QgdmFsOgorICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9leGl0X3dpdGhfY2F0ZWdvcmllcygpCisgICAgICAgICAgICAgICAgIyBQcmVwZW5kIHRo
ZSBkZWZhdWx0cy4KKyAgICAgICAgICAgICAgICBmaWx0ZXJfcnVsZXMgPSBmaWx0ZXJfcnVsZXMg
KyBzZWxmLl9wYXJzZV9maWx0ZXJfZmxhZyh2YWwpCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIGV4dHJhX2ZsYWdfdmFsdWVzW29wdF0gPSB2YWwKKworICAgICAgICAjIENoZWNr
IHZhbGlkaXR5IG9mIHJlc3VsdGluZyB2YWx1ZXMuCisgICAgICAgIGlmIGZpbGVuYW1lcyBhbmQg
KGdpdF9jb21taXQgIT0gTm9uZSk6CisgICAgICAgICAgICBzZWxmLl9leGl0X3dpdGhfdXNhZ2Uo
J0l0IGlzIG5vdCBwb3NzaWJsZSB0byBjaGVjayBmaWxlcyBhbmQgYSAnCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ3NwZWNpZmljIGNvbW1pdCBhdCB0aGUgc2FtZSB0aW1lLicp
CisKKyAgICAgICAgaWYgb3V0cHV0X2Zvcm1hdCBub3QgaW4gKCdlbWFjcycsICd2czcnKToKKyAg
ICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgLS1vdXRwdXQgdmFsdWUgIiVzIjog
VGhlIG9ubHkgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxsb3dlZCBvdXRwdXQg
Zm9ybWF0cyBhcmUgZW1hY3MgYW5kIHZzNy4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cHV0X2Zvcm1hdCkKKworICAgICAgICB2ZXJib3NpdHkgPSBpbnQodmVyYm9zaXR5KQor
ICAgICAgICBpZiAoKHZlcmJvc2l0eSA8IDEpIG9yICh2ZXJib3NpdHkgPiA1KSk6CisgICAgICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIC0tdmVyYm9zZSB2YWx1ZSAlczogdmFsdWUg
bXVzdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZSBiZXR3ZWVuIDEtNS4nICUg
dmVyYm9zaXR5KQorCisgICAgICAgIGZvciBydWxlIGluIGZpbHRlcl9ydWxlczoKKyAgICAgICAg
ICAgIGlmIG5vdCAocnVsZS5zdGFydHN3aXRoKCcrJykgb3IgcnVsZS5zdGFydHN3aXRoKCctJykp
OgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgZmlsdGVyIHJ1bGUg
IiVzIjogZXZlcnkgcnVsZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVs
ZSBpbiB0aGUgLS1maWx0ZXIgZmxhZyBtdXN0IHN0YXJ0ICcKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICd3aXRoICsgb3IgLS4nICUgcnVsZSkKIAotICAgIGNwcF9zdHlsZS5fc2V0
X291dHB1dF9mb3JtYXQob3V0cHV0X2Zvcm1hdCkKLSAgICBjcHBfc3R5bGUuX3NldF92ZXJib3Nl
X2xldmVsKHZlcmJvc2l0eSkKLSAgICBjcHBfc3R5bGUuX3NldF9maWx0ZXJzKGZpbHRlcnMpCisg
ICAgICAgIG9wdGlvbnMgPSBQcm9jZXNzb3JPcHRpb25zKG91dHB1dF9mb3JtYXQsIHZlcmJvc2l0
eSwgZmlsdGVyX3J1bGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaXRf
Y29tbWl0LCBleHRyYV9mbGFnX3ZhbHVlcykKIAotICAgIHJldHVybiAoZmlsZW5hbWVzLCBhZGRp
dGlvbmFsX2ZsYWdfdmFsdWVzKQorICAgICAgICByZXR1cm4gKGZpbGVuYW1lcywgb3B0aW9ucykK
IAogCiBkZWYgcHJvY2Vzc19maWxlKGZpbGVuYW1lKToKSW5kZXg6IFdlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGVfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdHlsZV91bml0dGVzdC5weQkocmV2aXNpb24gNTI4NDcpCisrKyBX
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNv
cHkpCkBAIC00LDYgKzQsNyBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMu
CiAjIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
IENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2hyaXMuamVyZG9uZWtAZ21haWwu
Y29tKQogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzYsODYgKzM3LDE3NiBA
QAogaW1wb3J0IHVuaXR0ZXN0CiAKIGltcG9ydCBzdHlsZQotIyBGSVhNRTogRWxpbWluYXRlIGNw
cF9zdHlsZSBkZXBlbmRlbmN5LgotaW1wb3J0IGNwcF9zdHlsZQorCisKK2NsYXNzIERlZmF1bHRB
cmd1bWVudHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICIiIlRlc3RzIHZhbGlkaXR5
IG9mIGRlZmF1bHQgYXJndW1lbnRzIHVzZWQgYnkgY2hlY2std2Via2l0LXN0eWxlLiIiIgorCisg
ICAgZGVmIHRlc3RfZmlsdGVyX3J1bGVzKHNlbGYpOgorICAgICAgICBhbHJlYWR5X3NlZW4gPSBb
XQorICAgICAgICBmb3IgcnVsZSBpbiBzdHlsZS5XRUJLSVRfRklMVEVSX1JVTEVTOgorICAgICAg
ICAgICAgIyBBbGwgY2F0ZWdvcmllcyBhcmUgb24gYnkgZGVmYXVsdCwgc28gZGVmYXVsdHMgc2hv
dWxkCisgICAgICAgICAgICAjIGJlZ2luIHdpdGggLS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShydWxlLnN0YXJ0c3dpdGgoJy0nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShy
dWxlWzE6XSBpbiBzdHlsZS5TVFlMRV9DQVRFR09SSUVTKQorICAgICAgICAgICAgc2VsZi5hc3Nl
cnRGYWxzZShydWxlIGluIGFscmVhZHlfc2VlbikKKyAgICAgICAgICAgIGFscmVhZHlfc2Vlbi5h
cHBlbmQocnVsZSkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRzKHNlbGYpOgorICAgICAgICAiIiJD
aGVjayB0aGF0IGRlZmF1bHQgYXJndW1lbnRzIGFyZSB2YWxpZC4iIiIKKyAgICAgICAgZGVmYXVs
dHMgPSBzdHlsZS5Bcmd1bWVudERlZmF1bHRzKHN0eWxlLkRFRkFVTFRfT1VUUFVUX0ZPUk1BVCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLkRFRkFVTFRf
VkVSQk9TSVRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5
bGUuV0VCS0lUX0ZJTFRFUl9SVUxFUykKKyAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBu
ZWVkIHRvIGNhbGwgcGFyc2UoKSB0byBkZXRlcm1pbmUKKyAgICAgICAgIyAgICAgICAgd2hldGhl
ciB0aGUgZGVmYXVsdCBhcmd1bWVudHMgYXJlIHZhbGlkLgorICAgICAgICBwYXJzZXIgPSBzdHls
ZS5Bcmd1bWVudFBhcnNlcihkZWZhdWx0cykKKyAgICAgICAgIyBObyBuZWVkIHRvIHRlc3QgdGhl
IHJldHVybiB2YWx1ZSBoZXJlIHNpbmNlIHdlIHRlc3QgcGFyc2UoKQorICAgICAgICAjIG9uIHZh
bGlkIGFyZ3VtZW50cyBlbHNld2hlcmUuCisgICAgICAgIHBhcnNlci5wYXJzZShbXSkgIyBhcmd1
bWVudHMgdmFsaWQ6IG5vIGVycm9yIG9yIFN5c3RlbUV4aXQKKworCitjbGFzcyBBcmd1bWVudFBy
aW50ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICIiIlRlc3RzIHRoZSBBcmd1bWVu
dFByaW50ZXIgY2xhc3MuIiIiCisKKyAgICBfcHJpbnRlciA9IHN0eWxlLkFyZ3VtZW50UHJpbnRl
cigpCisKKyAgICBkZWYgX2NyZWF0ZV9vcHRpb25zKHNlbGYsIG91dHB1dF9mb3JtYXQ9J2VtYWNz
JywgdmVyYm9zaXR5PTMsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfcnVsZXM9W10s
IGdpdF9jb21taXQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2ZsYWdfdmFs
dWVzPXt9KToKKyAgICAgICAgcmV0dXJuIHN0eWxlLlByb2Nlc3Nvck9wdGlvbnMob3V0cHV0X2Zv
cm1hdCwgdmVyYm9zaXR5LCBmaWx0ZXJfcnVsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdpdF9jb21taXQsIGV4dHJhX2ZsYWdfdmFsdWVzKQorCisgICAgZGVmIHRl
c3RfdG9fZmxhZ19zdHJpbmcoc2VsZik6CisgICAgICAgIG9wdGlvbnMgPSBzZWxmLl9jcmVhdGVf
b3B0aW9ucygndnM3JywgNSwgWycrZm9vJywgJy1iYXInXSwgJ2dpdCcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiAwLCAneic6IDF9KQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFscygnLS1hPTAgLS1maWx0ZXI9K2ZvbywtYmFyIC0tZ2l0LWNvbW1pdD1naXQg
JworICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1vdXRwdXQ9dnM3IC0tdmVyYm9zZT01IC0t
ej0xJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRlci50b19mbGFnX3N0
cmluZyhvcHRpb25zKSkKKworICAgICAgICAjIFRoaXMgaXMgdG8gY2hlY2sgdGhhdCAtLWZpbHRl
ciBhbmQgLS1naXQtY29tbWl0IGRvIG5vdAorICAgICAgICAjIHNob3cgdXAgd2hlbiBub3QgdXNl
ci1zcGVjaWZpZWQuCisgICAgICAgIG9wdGlvbnMgPSBzZWxmLl9jcmVhdGVfb3B0aW9ucygpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCctLW91dHB1dD1lbWFjcyAtLXZlcmJvc2U9MycsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIudG9fZmxhZ19zdHJpbmcob3B0
aW9ucykpCiAKIAogY2xhc3MgQXJndW1lbnRQYXJzZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
LSAgICAiIiJUZXN0cyBhcmd1bWVudCBwYXJzaW5nLiIiIgotICAgIGRlZiB0ZXN0X3BhcnNlX2Fy
Z3VtZW50cyhzZWxmKToKLSAgICAgICAgb2xkX3VzYWdlID0gc3R5bGUuX1VTQUdFCi0gICAgICAg
IG9sZF9zdHlsZV9jYXRlZ29yaWVzID0gc3R5bGUuX1NUWUxFX0NBVEVHT1JJRVMKLSAgICAgICAg
b2xkX3dlYmtpdF9maWx0ZXJfcnVsZXMgPSBzdHlsZS5fV0VCS0lUX0ZJTFRFUl9SVUxFUwotICAg
ICAgICBvbGRfb3V0cHV0X2Zvcm1hdCA9IGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLm91dHB1
dF9mb3JtYXQKLSAgICAgICAgb2xkX3ZlcmJvc2VfbGV2ZWwgPSBjcHBfc3R5bGUuX2NwcF9zdHls
ZV9zdGF0ZS52ZXJib3NlX2xldmVsCi0gICAgICAgIG9sZF9maWx0ZXJzID0gY3BwX3N0eWxlLl9j
cHBfc3R5bGVfc3RhdGUuZmlsdGVycwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIERvbid0
IHByaW50IHVzYWdlIGR1cmluZyB0aGUgdGVzdHMsIG9yIGZpbHRlciBjYXRlZ29yaWVzCi0gICAg
ICAgICAgICBzdHlsZS5fVVNBR0UgPSAnJwotICAgICAgICAgICAgc3R5bGUuX1NUWUxFX0NBVEVH
T1JJRVMgPSBbXQotICAgICAgICAgICAgc3R5bGUuX1dFQktJVF9GSUxURVJfUlVMRVMgPSBbXQot
Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBzdHlsZS5wYXJzZV9h
cmd1bWVudHMsIFsnLS1iYWRvcHQnXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5
c3RlbUV4aXQsIHN0eWxlLnBhcnNlX2FyZ3VtZW50cywgWyctLWhlbHAnXSkKLSAgICAgICAgICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQsIHN0eWxlLnBhcnNlX2FyZ3VtZW50cywgWyct
LWZpbHRlcj0nXSkKLSAgICAgICAgICAgICMgVGhpcyBpcyBpbGxlZ2FsIGJlY2F1c2UgYWxsIGZp
bHRlcnMgbXVzdCBzdGFydCB3aXRoICsgb3IgLQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlz
ZXMoVmFsdWVFcnJvciwgc3R5bGUucGFyc2VfYXJndW1lbnRzLCBbJy0tZmlsdGVyPWZvbyddKQot
ICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3R5bGUucGFyc2VfYXJn
dW1lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyctLWZpbHRlcj0rYSxiLC1j
J10pCi0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKChbJ2Zvby5jcHAnXSwge30pLCBz
dHlsZS5wYXJzZV9hcmd1bWVudHMoWydmb28uY3BwJ10pKQotICAgICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMob2xkX291dHB1dF9mb3JtYXQsIGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLm91
dHB1dF9mb3JtYXQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvbGRfdmVyYm9zZV9s
ZXZlbCwgY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUudmVyYm9zZV9sZXZlbCkKLQotICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKFtdLCB7fSksIHN0eWxlLnBhcnNlX2FyZ3VtZW50cyhb
XSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoW10sIHt9KSwgc3R5bGUucGFyc2Vf
YXJndW1lbnRzKFsnLS12PTAnXSkpCi0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKChb
J2Zvby5jcHAnXSwge30pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUucGFy
c2VfYXJndW1lbnRzKFsnLS12PTEnLCAnZm9vLmNwcCddKSkKLSAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKDEsIGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLnZlcmJvc2VfbGV2ZWwpCi0g
ICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoWydmb28uaCddLCB7fSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHlsZS5wYXJzZV9hcmd1bWVudHMoWyctLXY9MycsICdmb28u
aCddKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDMsIGNwcF9zdHlsZS5fY3BwX3N0
eWxlX3N0YXRlLnZlcmJvc2VfbGV2ZWwpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscygo
Wydmb28uY3BwJ10sIHt9KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLnBh
cnNlX2FyZ3VtZW50cyhbJy0tdmVyYm9zZT01JywgJ2Zvby5jcHAnXSkpCi0gICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyg1LCBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS52ZXJib3NlX2xl
dmVsKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLnBhcnNlX2FyZ3VtZW50cywgWyctLXY9ZicsICdm
b28uY3BwJ10pCi0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKChbJ2Zvby5jcHAnXSwg
e30pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUucGFyc2VfYXJndW1lbnRz
KFsnLS1vdXRwdXQ9ZW1hY3MnLCAnZm9vLmNwcCddKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKCdlbWFjcycsIGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLm91dHB1dF9mb3JtYXQp
Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoWydmb28uaCddLCB7fSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5wYXJzZV9hcmd1bWVudHMoWyctLW91dHB1dD12
czcnLCAnZm9vLmgnXSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscygndnM3JywgY3Bw
X3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUub3V0cHV0X2Zvcm1hdCkKLSAgICAgICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHlsZS5wYXJzZV9hcmd1bWVudHMsIFsnLS1vdXRwdXQ9YmxhaCcsICdmb28uY3BwJ10pCi0KLSAg
ICAgICAgICAgIGZpbHQgPSAnLSwrd2hpdGVzcGFjZSwtd2hpdGVzcGFjZS9pbmRlbnQnCi0gICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoWydmb28uaCddLCB7fSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHlsZS5wYXJzZV9hcmd1bWVudHMoWyctLWZpbHRlcj0nK2ZpbHQs
ICdmb28uaCddKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsnLScsICcrd2hpdGVz
cGFjZScsICctd2hpdGVzcGFjZS9pbmRlbnQnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLmZpbHRlcnMpCi0KLSAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKChbJ2Zvby5jcHAnLCAnZm9vLmgnXSwge30pLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3R5bGUucGFyc2VfYXJndW1lbnRzKFsnZm9vLmNwcCcsICdmb28u
aCddKSkKLQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKFsnZm9vLmNwcCddLCB7Jy0t
Zm9vJzogJyd9KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLnBhcnNlX2Fy
Z3VtZW50cyhbJy0tZm9vJywgJ2Zvby5jcHAnXSwgWydmb28nXSkpCi0gICAgICAgICAgICBzZWxm
LmFzc2VydEVxdWFscygoWydmb28uY3BwJ10sIHsnLS1mb28nOiAnYmFyJ30pLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3R5bGUucGFyc2VfYXJndW1lbnRzKFsnLS1mb289YmFyJywg
J2Zvby5jcHAnXSwgWydmb289J10pKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKFsn
Zm9vLmNwcCddLCB7fSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5wYXJz
ZV9hcmd1bWVudHMoWydmb28uY3BwJ10sIFsnZm9vPSddKSkKLSAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0UmFpc2VzKFN5c3RlbUV4aXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHls
ZS5wYXJzZV9hcmd1bWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJy0tZm9v
dHlwbz1iYXInLCAnZm9vLmNwcCddLCBbJ2Zvbz0nXSkKLSAgICAgICAgZmluYWxseToKLSAgICAg
ICAgICAgIHN0eWxlLl9VU0FHRSA9IG9sZF91c2FnZQotICAgICAgICAgICAgc3R5bGUuX1NUWUxF
X0NBVEVHT1JJRVMgPSBvbGRfc3R5bGVfY2F0ZWdvcmllcwotICAgICAgICAgICAgc3R5bGUuX1dF
QktJVF9GSUxURVJfUlVMRVMgPSBvbGRfd2Via2l0X2ZpbHRlcl9ydWxlcwotICAgICAgICAgICAg
Y3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUub3V0cHV0X2Zvcm1hdCA9IG9sZF9vdXRwdXRfZm9y
bWF0Ci0gICAgICAgICAgICBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS52ZXJib3NlX2xldmVs
ID0gb2xkX3ZlcmJvc2VfbGV2ZWwKLSAgICAgICAgICAgIGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0
YXRlLmZpbHRlcnMgPSBvbGRfZmlsdGVycworCisgICAgIiIiVGVzdCB0aGUgQXJndW1lbnRQYXJz
ZXIgY2xhc3MuIiIiCisKKyAgICBkZWYgX3BhcnNlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4g
YSBkZWZhdWx0IHBhcnNlKCkgZnVuY3Rpb24gZm9yIHRlc3RpbmcuIiIiCisgICAgICAgIHJldHVy
biBzZWxmLl9jcmVhdGVfcGFyc2VyKCkucGFyc2UKKworICAgIGRlZiBfY3JlYXRlX2RlZmF1bHRz
KHNlbGYsIGRlZmF1bHRfb3V0cHV0X2Zvcm1hdD0ndnM3JywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0X3ZlcmJvc2l0eT0zLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHRfZmlsdGVyX3J1bGVzPVsnLScsICcrd2hpdGVzcGFjZSddKToKKyAgICAgICAgIiIiIlJldHVy
biBhIGRlZmF1bHQgQXJndW1lbnREZWZhdWx0cyBpbnN0YW5jZSBmb3IgdGVzdGluZy4iIiIKKyAg
ICAgICAgcmV0dXJuIHN0eWxlLkFyZ3VtZW50RGVmYXVsdHMoZGVmYXVsdF9vdXRwdXRfZm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3ZlcmJvc2l0
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9maWx0ZXJf
cnVsZXMpCisKKyAgICBkZWYgX2NyZWF0ZV9wYXJzZXIoc2VsZiwgZGVmYXVsdHM9Tm9uZSk6Cisg
ICAgICAgICIiIiJSZXR1cm4gYW4gQXJndW1lbnRQYXJzZXIgaW5zdGFuY2UgZm9yIHRlc3Rpbmcu
IiIiCisgICAgICAgIGRlZiBjcmVhdGVfdXNhZ2UoX2RlZmF1bHRzKToKKyAgICAgICAgICAgICIi
IlJldHVybiBhIHVzYWdlIHN0cmluZyBmb3IgdGVzdGluZy4iIiIKKyAgICAgICAgICAgIHJldHVy
biAidXNhZ2UiCisKKyAgICAgICAgZGVmIGRvY19wcmludChtZXNzYWdlKToKKyAgICAgICAgICAg
ICMgV2UgZG8gbm90IHdhbnQgdGhlIHVzYWdlIHN0cmluZyBvciBzdHlsZSBjYXRlZ29yaWVzCisg
ICAgICAgICAgICAjIHRvIHByaW50IGR1cmluZyB1bml0IHRlc3RzLCBzbyBwcmludCBub3RoaW5n
LgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgZGVmYXVsdHMgaXMgTm9uZToKKyAg
ICAgICAgICAgIGRlZmF1bHRzID0gc2VsZi5fY3JlYXRlX2RlZmF1bHRzKCkKKworICAgICAgICBy
ZXR1cm4gc3R5bGUuQXJndW1lbnRQYXJzZXIoZGVmYXVsdHMsIGNyZWF0ZV91c2FnZSwgZG9jX3By
aW50KQorCisgICAgZGVmIHRlc3RfcGFyc2VfZG9jdW1lbnRhdGlvbihzZWxmKToKKyAgICAgICAg
cGFyc2UgPSBzZWxmLl9wYXJzZSgpCisKKyAgICAgICAgIyBGSVhNRTogVGVzdCBib3RoIHRoZSBw
cmludGluZyBvZiB0aGUgdXNhZ2Ugc3RyaW5nIGFuZCB0aGUKKyAgICAgICAgIyAgICAgICAgZmls
dGVyIGNhdGVnb3JpZXMgaGVscC4KKworICAgICAgICAjIFJlcXVlc3QgdGhlIHVzYWdlIHN0cmlu
Zy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCwgcGFyc2UsIFsnLS1oZWxw
J10pCisgICAgICAgICMgUmVxdWVzdCBkZWZhdWx0IGZpbHRlciBydWxlcyBhbmQgYXZhaWxhYmxl
IHN0eWxlIGNhdGVnb3JpZXMuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQs
IHBhcnNlLCBbJy0tZmlsdGVyPSddKQorCisgICAgZGVmIHRlc3RfcGFyc2VfYmFkX3ZhbHVlcyhz
ZWxmKToKKyAgICAgICAgcGFyc2UgPSBzZWxmLl9wYXJzZSgpCisKKyAgICAgICAgIyBQYXNzIGFu
IHVuc3VwcG9ydGVkIGFyZ3VtZW50LgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1F
eGl0LCBwYXJzZSwgWyctLWJhZCddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVl
RXJyb3IsIHBhcnNlLCBbJy0tdmVyYm9zZT1iYWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlz
ZXMoVmFsdWVFcnJvciwgcGFyc2UsIFsnLS12ZXJib3NlPTAnXSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoVmFsdWVFcnJvciwgcGFyc2UsIFsnLS12ZXJib3NlPTYnXSkKKyAgICAgICAgcGFy
c2UoWyctLXZlcmJvc2U9MSddKSAjIHdvcmtzCisgICAgICAgIHBhcnNlKFsnLS12ZXJib3NlPTUn
XSkgIyB3b3JrcworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBhcnNl
LCBbJy0tb3V0cHV0PWJhZCddKQorICAgICAgICBwYXJzZShbJy0tb3V0cHV0PXZzNyddKSAjIHdv
cmtzCisKKyAgICAgICAgIyBQYXNzIGEgZmlsdGVyIHJ1bGUgbm90IGJlZ2lubmluZyB3aXRoICsg
b3IgLS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGFyc2UsIFsnLS1m
aWx0ZXI9Zm9vJ10pCisgICAgICAgIHBhcnNlKFsnLS1maWx0ZXI9K2ZvbyddKSAjIHdvcmtzCisg
ICAgICAgICMgUGFzcyBmaWxlcyBhbmQgZ2l0LWNvbW1pdCBhdCB0aGUgc2FtZSB0aW1lLgorICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBwYXJzZSwgWyctLWdpdC1jb21taXQ9
JywgJ2ZpbGUudHh0J10pCisgICAgICAgICMgUGFzcyBhbiBleHRyYSBmbGFnIGFscmVhZHkgc3Vw
cG9ydGVkLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwYXJzZSwgW10s
IFsnZmlsdGVyPSddKQorICAgICAgICBwYXJzZShbXSwgWydleHRyYT0nXSkgIyB3b3JrcworICAg
ICAgICAjIFBhc3MgYW4gZXh0cmEgZmxhZyB3aXRoIHR5cG8uCisgICAgICAgIHNlbGYuYXNzZXJ0
UmFpc2VzKFN5c3RlbUV4aXQsIHBhcnNlLCBbJy0tZXh0cmF0eXBvPSddLCBbJ2V4dHJhPSddKQor
ICAgICAgICBwYXJzZShbJy0tZXh0cmE9J10sIFsnZXh0cmE9J10pICMgd29ya3MKKyAgICAgICAg
c2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGFyc2UsIFtdLCBbJ2V4dHJhPScsICdleHRy
YT0nXSkKKworCisgICAgZGVmIHRlc3RfcGFyc2VfZGVmYXVsdF9hcmd1bWVudHMoc2VsZik6Cisg
ICAgICAgIHBhcnNlID0gc2VsZi5fcGFyc2UoKQorCisgICAgICAgIChmaWxlcywgb3B0aW9ucykg
PSBwYXJzZShbXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmaWxlcywgW10pCisKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5vdXRwdXRfZm9ybWF0LCAndnM3JykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy52ZXJib3NpdHksIDMpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKG9wdGlvbnMuZmlsdGVyX3J1bGVzLCBbJy0nLCAnK3doaXRlc3BhY2Un
XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5naXRfY29tbWl0LCBOb25lKQor
CisgICAgZGVmIHRlc3RfcGFyc2VfZXhwbGljaXRfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICBw
YXJzZSA9IHNlbGYuX3BhcnNlKCkKKworICAgICAgICAjIFBhc3Mgbm9uLWRlZmF1bHQgZXhwbGlj
aXQgdmFsdWVzLgorICAgICAgICAoZmlsZXMsIG9wdGlvbnMpID0gcGFyc2UoWyctLW91dHB1dD1l
bWFjcyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25zLm91dHB1dF9mb3JtYXQs
ICdlbWFjcycpCisgICAgICAgIChmaWxlcywgb3B0aW9ucykgPSBwYXJzZShbJy0tdmVyYm9zZT00
J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wdGlvbnMudmVyYm9zaXR5LCA0KQorICAg
ICAgICAoZmlsZXMsIG9wdGlvbnMpID0gcGFyc2UoWyctLWdpdC1jb21taXQ9Y29tbWl0J10pCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wdGlvbnMuZ2l0X2NvbW1pdCwgJ2NvbW1pdCcpCisg
ICAgICAgIChmaWxlcywgb3B0aW9ucykgPSBwYXJzZShbJy0tZmlsdGVyPStmb28sLWJhciddKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25zLmZpbHRlcl9ydWxlcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgWyctJywgJyt3aGl0ZXNwYWNlJywgJytmb28nLCAnLWJhciddKQor
CisgICAgICAgICMgUGFzcyBleHRyYSBmbGFnIHZhbHVlcy4KKyAgICAgICAgKGZpbGVzLCBvcHRp
b25zKSA9IHBhcnNlKFsnLS1leHRyYSddLCBbJ2V4dHJhJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKG9wdGlvbnMuZXh0cmFfZmxhZ192YWx1ZXMsIHsnLS1leHRyYSc6ICcnfSkKKyAgICAg
ICAgKGZpbGVzLCBvcHRpb25zKSA9IHBhcnNlKFsnLS1leHRyYT0nXSwgWydleHRyYT0nXSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5leHRyYV9mbGFnX3ZhbHVlcywgeyctLWV4
dHJhJzogJyd9KQorICAgICAgICAoZmlsZXMsIG9wdGlvbnMpID0gcGFyc2UoWyctLWV4dHJhPXgn
XSwgWydleHRyYT0nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5leHRyYV9m
bGFnX3ZhbHVlcywgeyctLWV4dHJhJzogJ3gnfSkKKworICAgIGRlZiB0ZXN0X3BhcnNlX2ZpbGVz
KHNlbGYpOgorICAgICAgICBwYXJzZSA9IHNlbGYuX3BhcnNlKCkKKworICAgICAgICAoZmlsZXMs
IG9wdGlvbnMpID0gcGFyc2UoWydmb28uY3BwJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KGZpbGVzLCBbJ2Zvby5jcHAnXSkKKworICAgICAgICAjIFBhc3MgbXVsdGlwbGUgZmlsZXMuCisg
ICAgICAgIChmaWxlcywgb3B0aW9ucykgPSBwYXJzZShbJy0tb3V0cHV0PWVtYWNzJywgJ2Zvby5j
cHAnLCAnYmFyLmNwcCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmaWxlcywgWydmb28u
Y3BwJywgJ2Jhci5jcHAnXSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>