<?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>118785</bug_id>
          
          <creation_ts>2013-07-17 02:00:04 -0700</creation_ts>
          <short_desc>[GTK] Implement leak checking with valgrind</short_desc>
          <delta_ts>2013-08-06 02:15:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>116317</blocked>
    
    <blocked>119446</blocked>
    
    <blocked>119448</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Brian Holt">brian.holt</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dpranke</cc>
    
    <cc>glenn</cc>
    
    <cc>mario</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pnormand</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>909251</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-17 02:00:04 -0700</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=116317 is a meta bug for tracking memory leaks found in the Gtk port. It should remain open until all the leaks have been resolved.

This bug is to implement the leak checking.

1) launch the DRT under valgrind to generate a xml file with details of leaks found
2) to parse this file and display leak results
3) update the valgrind suppressions file(s)
4) raise bugs for known memory leaks/violations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>909273</commentid>
    <comment_count>1</comment_count>
      <attachid>206874</attachid>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-17 02:58:39 -0700</bug_when>
    <thetext>Created attachment 206874
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914153</commentid>
    <comment_count>2</comment_count>
      <attachid>208021</attachid>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-08-02 08:13:11 -0700</bug_when>
    <thetext>Created attachment 208021
Launch DRT under valgrind

launch the DRT under valgrind to generate a xml file with details of leaks found. \n run with \n $ Tools/Scripts/run-webkit-tests --gtk --debug --leaks --wrapper=valgrind --run-singly LayoutTests/platform/gtk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914157</commentid>
    <comment_count>3</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-08-02 08:20:59 -0700</bug_when>
    <thetext>Given that the previous patch was large and daunting to review, I&apos;m breaking this up into smaller patches.  The first one is to launch the DRT under Valgrind.  

I will submit another patch (in a new bug) to implement the parsing of the xml files that are generated by Valgrind.  This will contain Chromium code, but I will additionally upload diffs with the current Chromium code to assist reviewing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914484</commentid>
    <comment_count>4</comment_count>
      <attachid>208021</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-08-04 15:49:05 -0700</bug_when>
    <thetext>Comment on attachment 208021
Launch DRT under valgrind

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

Thanks for the patch Brian. I&apos;m informally reviewing it now, hope you will find my comments useful. 

Overall, the patch seems to be fine to me, although I see some things that perhaps might not be needed (e.g. the changes related to is_running) and some minor nits. See my comments below...

&gt; Tools/ChangeLog:15
&gt; +        * Scripts/webkitpy/port/base.py:
&gt; +        (Port.check_for_leaks): Move is_running flag to base class.

I don&apos;t really understand why you need to move this here if you are actually not reading this value for gtk, and the same logic could be kept for the mac without having this parameter moved here

&gt; Tools/Scripts/webkitpy/port/base.py:384
&gt; -    def check_for_leaks(self, process_name, process_pid):
&gt; +    def check_for_leaks(self, process_name, process_pid, is_running):

As mentioned above, it seems to me this change is not actually needed.

&gt; Tools/Scripts/webkitpy/port/gtk.py:52
&gt; +                raise ValueError(&apos;use --wrapper=\&quot;valgrind\&quot; for&apos;
&gt; +                                 &apos; memory leak detection on GTK&apos;)

No need to split these line in two

&gt; Tools/Scripts/webkitpy/port/gtk.py:55
&gt; +            self.set_option_default(&quot;batch_size&quot;, 1000)

Where does this 1000 number come from? Is it just personal experience or something else?

&gt; Tools/Scripts/webkitpy/port/gtk.py:70
&gt; +        multiplier = 10 if self.get_option(&quot;leaks&quot;) else 1

I think a brief comment here explaining why having a ten times bigger timeout is needed for the &quot;leaks&quot; case would be helpful

&gt; Tools/Scripts/webkitpy/port/gtk.py:80
&gt; +        # we want to be slow on cleanup as well
&gt; +        # (for things like ASAN, Valgrind, etc.)

Put these two last lines in one. End with a period.

&gt; Tools/Scripts/webkitpy/port/gtk.py:104
&gt; +            xmlfile = &quot;&quot;.join((&apos;\&quot;&apos;, self.results_directory(), &quot;/drt-%p-&quot;,
&gt; +                               uuid.uuid1().hex, &quot;-leaks.xml&quot;, &apos;\&quot;&apos;))

No need to split this in two lines. Also, I think you could use os.path.join() better here.

&gt; Tools/Scripts/webkitpy/port/gtk.py:112
&gt; +            # FIXME: instead we should be using &quot;jhbuild-wrapper --gtk run&quot;

instead -&gt; Instead

&gt; Tools/Scripts/webkitpy/port/gtk.py:115
&gt; +            #environment[&apos;LD_LIBRARY_PATH&apos;] = self.path_from_webkit_base(
&gt; +            #    &apos;WebKitBuild&apos;, &apos;Dependencies&apos;, &apos;Root&apos;, &apos;lib64&apos;)

Remove these two lines if not needed, otherwise uncomment them and put them in a single line

&gt; Tools/Scripts/webkitpy/port/gtk.py:161
&gt; +    def check_for_leaks(self, process_name, process_pid, is_running):
&gt; +        # With Gtk we initiate memory checking by passing valgrind as a wrapper to the test.
&gt; +        pass

As mentioned above, you&apos;re not actually reading the is_running value here, so it seems like you do not need it for gtk

&gt; Tools/Scripts/webkitpy/port/gtk.py:166
&gt; +        # In a subsequent patch the leak xml files will be parsed here.

Add a FIXME: prefix here

&gt; Tools/Scripts/webkitpy/port/mac.py:153
&gt; -    def check_for_leaks(self, process_name, process_pid):
&gt; -        if not self.get_option(&apos;leaks&apos;):
&gt; +    def check_for_leaks(self, process_name, process_pid, is_running):
&gt; +        # Only bother to check for leaks or stderr if the process is still running.
&gt; +        if not self.get_option(&apos;leaks&apos;) or not is_running:

You can&apos;t avoid this change, I think, if you just leave the original code in server_process.py untouched, since you are not doing anything special after all in the newly supported port (GTK)

&gt; Tools/Scripts/webkitpy/port/server_process.py:335
&gt; -        # Only bother to check for leaks or stderr if the process is still running.
&gt; -        if self.poll() is None:
&gt; -            self._port.check_for_leaks(self.name(), self.pid())
&gt; +        is_running = self.poll() is None
&gt; +        self._port.check_for_leaks(self.name(), self.pid(), is_running)

I think you don&apos;t need to do this, and so that you can leave the original code here too.

&gt; Tools/Scripts/webkitpy/port/server_process_unittest.py:50
&gt; -    def check_for_leaks(self, process_name, process_pid):
&gt; +    def check_for_leaks(self, process_name, process_pid, is_running):

You don&apos;t need this change either</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914485</commentid>
    <comment_count>5</comment_count>
      <attachid>208021</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-08-04 15:59:27 -0700</bug_when>
    <thetext>Comment on attachment 208021
Launch DRT under valgrind

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

&gt; Tools/Scripts/webkitpy/port/gtk.py:111
&gt; +            environment[&apos;VALGRIND_OPTS&apos;] = &quot;--tool=memcheck &quot; \
&gt; +                &quot;--num-callers=40 --demangle=no --trace-children=no  &quot; \
&gt; +                &quot;--smc-check=all-non-file --leak-check=yes &quot; \
&gt; +                &quot;--leak-resolution=high --show-possibly-lost=no &quot; \
&gt; +                &quot;--show-reachable=no --leak-check=full &quot; \
&gt; +                &quot; --undef-value-errors=no &quot; \
&gt; +                &quot;--gen-suppressions=all --xml=yes --xml-file=%s &quot; % (xmlfile)

Also, please keep only one pair --option=value per line, with the first one (--tool=memcheck) starting in the line following the assignment, to improve readability.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914486</commentid>
    <comment_count>6</comment_count>
      <attachid>208021</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-08-04 15:59:29 -0700</bug_when>
    <thetext>Comment on attachment 208021
Launch DRT under valgrind

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

&gt; Tools/Scripts/webkitpy/port/gtk.py:111
&gt; +            environment[&apos;VALGRIND_OPTS&apos;] = &quot;--tool=memcheck &quot; \
&gt; +                &quot;--num-callers=40 --demangle=no --trace-children=no  &quot; \
&gt; +                &quot;--smc-check=all-non-file --leak-check=yes &quot; \
&gt; +                &quot;--leak-resolution=high --show-possibly-lost=no &quot; \
&gt; +                &quot;--show-reachable=no --leak-check=full &quot; \
&gt; +                &quot; --undef-value-errors=no &quot; \
&gt; +                &quot;--gen-suppressions=all --xml=yes --xml-file=%s &quot; % (xmlfile)

Also, please keep only one pair --option=value per line, with the first one (--tool=memcheck) starting in the line following the assignment, to improve readability.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914595</commentid>
    <comment_count>7</comment_count>
      <attachid>208129</attachid>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-08-05 08:46:44 -0700</bug_when>
    <thetext>Created attachment 208129
Patch

Addressed review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914596</commentid>
    <comment_count>8</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-08-05 08:49:54 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 208021 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=208021&amp;action=review
&gt; 
&gt; Thanks for the patch Brian. I&apos;m informally reviewing it now, hope you will find my comments useful. 
&gt; 

Thanks for the review! Your comments made me check assumptions I had made along the (long) way of creating this patch and as result I&apos;ve trimmed it down to a *much* smaller patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914610</commentid>
    <comment_count>9</comment_count>
      <attachid>208129</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-08-05 10:04:30 -0700</bug_when>
    <thetext>Comment on attachment 208129
Patch

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

Besides a small nit (which I&apos;m not even sure whether others would agree with anyway), the patch now looks good to me, so I would say an official review would be in place now.

It&apos;s so beautiful to see it reduced to less than half of the original size! :)

&gt; Tools/Scripts/webkitpy/port/gtk.py:92
&gt; +            environment[&apos;G_SLICE&apos;] = &apos;always-malloc&apos;

I understand that forcing malloc() for every single memory allocation is some kind of prerequisite to use valgrind here?

If so, a comment explaining the reason would be handy here too, as it&apos;s not obvious why we need this.

&gt; Tools/Scripts/webkitpy/port/gtk.py:96
&gt; +            environment[&apos;VALGRIND_OPTS&apos;] = &quot;--tool=memcheck &quot; \
&gt; +                &quot;--num-callers=40 &quot; \

Nit. I would probably move this --tool parameter to the following line, so every option is aligned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914615</commentid>
    <comment_count>10</comment_count>
      <attachid>208129</attachid>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-08-05 10:15:04 -0700</bug_when>
    <thetext>Comment on attachment 208129
Patch

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

Thanks for the review!  Since the other changes are so heavily dependent on this getting in I&apos;m going to hold off uploading new versions of them until this gets in (hopefully soon)!

&gt;&gt; Tools/Scripts/webkitpy/port/gtk.py:92
&gt;&gt; +            environment[&apos;G_SLICE&apos;] = &apos;always-malloc&apos;
&gt; 
&gt; I understand that forcing malloc() for every single memory allocation is some kind of prerequisite to use valgrind here?
&gt; 
&gt; If so, a comment explaining the reason would be handy here too, as it&apos;s not obvious why we need this.

Good point - and in finding a link (https://wiki.gnome.org/Valgrind) I&apos;ve found that I should also set G_DEBUG=gc-friendly.

&gt;&gt; Tools/Scripts/webkitpy/port/gtk.py:96
&gt;&gt; +                &quot;--num-callers=40 &quot; \
&gt; 
&gt; Nit. I would probably move this --tool parameter to the following line, so every option is aligned.

Sorry, you mentioned that last review but I missed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914618</commentid>
    <comment_count>11</comment_count>
      <attachid>208133</attachid>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-08-05 10:22:36 -0700</bug_when>
    <thetext>Created attachment 208133
Launch DRT under Valgrind v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914643</commentid>
    <comment_count>12</comment_count>
      <attachid>208133</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-08-05 12:31:27 -0700</bug_when>
    <thetext>Comment on attachment 208133
Launch DRT under Valgrind v2

Thanks Brian for addressing all the comments. I&apos;ve certainly nothing to add now, so... time for and official review? :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914645</commentid>
    <comment_count>13</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2013-08-05 12:33:25 -0700</bug_when>
    <thetext>I will try to take a look shortly :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914658</commentid>
    <comment_count>14</comment_count>
      <attachid>208133</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-08-05 13:01:36 -0700</bug_when>
    <thetext>Comment on attachment 208133
Launch DRT under Valgrind v2

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

&gt; Tools/Scripts/webkitpy/port/gtk.py:71
&gt; +        # Starting an application under Valgrind takes a lot longer than normal
&gt; +        # so increase the timeout (empirically 10x is enough to avoid timeouts).
&gt; +        multiplier = 10 if self.get_option(&quot;leaks&quot;) else 1
&gt;          if self.get_option(&apos;configuration&apos;) == &apos;Debug&apos;:
&gt; -            return 12 * 1000
&gt; -        return 6 * 1000
&gt; +            return multiplier * 12 * 1000
&gt; +        return multiplier * 6 * 1000

This timeout value covers the maximum time each test is allowed to run, not the amount of time each DumpRenderTree/WebKitTestRunner instance takes to fire up and get ready for testing.

I assume that under Valgrind, you&apos;d still want a prolonged timeout value (so applying the multiplier here is OK), but the comment is not technically correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914659</commentid>
    <comment_count>15</comment_count>
      <attachid>208133</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2013-08-05 13:02:12 -0700</bug_when>
    <thetext>Comment on attachment 208133
Launch DRT under Valgrind v2

This looks fine. I&apos;m basically rubber-stamping the valigrind command line part :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914669</commentid>
    <comment_count>16</comment_count>
      <attachid>208133</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-05 13:25:16 -0700</bug_when>
    <thetext>Comment on attachment 208133
Launch DRT under Valgrind v2

Clearing flags on attachment: 208133

Committed r153721: &lt;http://trac.webkit.org/changeset/153721&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914670</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-05 13:25:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914809</commentid>
    <comment_count>18</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-08-06 02:15:31 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; All reviewed patches have been landed.  Closing bug.

Thanks everyone for the reviews, its much appreciated!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206874</attachid>
            <date>2013-07-17 02:58:39 -0700</date>
            <delta_ts>2013-08-02 08:13:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118785-20130717105855.patch</filename>
            <type>text/plain</type>
            <size>80552</size>
            <attacher name="Brian Holt">brian.holt</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUyNzczCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNzIyMTA0MGFmNGNkNGYwN2I0ZWY5MTQ4NjBjZmVjM2Ew
YTY2NDVjYi4uMDJlZmM2YjVlM2Q3OTFkODc3ZjJhOTIwNjQyMmZjOTAxNDNmNmY1NiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEw
MyBAQAorMjAxMy0wNy0xNyAgQnJpYW4gSG9sdCAgPGJyaWFuLmhvbHRAc2Ftc3VuZy5jb20+CisK
KyAgICAgICAgW0dUS10gSW1wbGVtZW50IGxlYWsgY2hlY2tpbmcgd2l0aCB2YWxncmluZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4Nzg1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGF1bmNoIHRoZSBE
UlQgdW5kZXIgVmFsZ3JpbmQgdG8gZ2VuZXJhdGUgeG1sIGZpbGVzIHdpdGggZGV0YWlscworICAg
ICAgICBvZiBsZWFrcyBmb3VuZCwgYW5kIHRoZW4gdG8gcGFyc2UgdGhlc2UgZmlsZXMgYW5kIGRp
c3BsYXkgc3RhY2sKKyAgICAgICAgdHJhY2VzIG9mIGxlYWsgb3JpZ2lucy4gTWVtb3J5IGxlYWtz
IHNob3VsZCByZXN1bHQgaW4gdGhlIGZpbGluZworICAgICAgICBvZiBidWdzIGFuZCBhZGRpbmcg
dGhlIGVycm9yIHRvIHRoZSBzdXBwcmVzc2lvbiBmaWxlLgorCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKyAgICAgICAgKHBhcnNl
X2FyZ3MpOiBMZWFrIGNoZWNrcyBhcmUgYWxzbyBmb3IgR3RrLgorCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0LmNoZWNrX2Zvcl9sZWFrcyk6
IE1vdmUgaXNfcnVubmluZyBmbGFnIHRvIGJhc2UgY2xhc3MuCisKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3BvcnQvY29tbW9uLnB5OiBBZGRlZC4KKyAgICAgICAgQ29tbW9uIGNvZGUgdG8g
c3VwcG9ydCBhbmFseXNpcyBvZiBWYWxncmluZCBvdXRwdXQuCisgICAgICAgIChOb3RJbXBsZW1l
bnRlZEVycm9yKToKKyAgICAgICAgKFRpbWVvdXRFcnJvcik6CisgICAgICAgIChfcHJpbnRfbGlu
ZSk6CisgICAgICAgIChSdW5TdWJwcm9jZXNzSW5CYWNrZ3JvdW5kKToKKyAgICAgICAgKFJ1blN1
YnByb2Nlc3MpOgorICAgICAgICAoSXNMaW51eCk6CisgICAgICAgIChJc01hYyk6CisgICAgICAg
IChJc1dpbmRvd3MpOgorICAgICAgICAoV2luZG93c1ZlcnNpb25OYW1lKToKKyAgICAgICAgKFBs
YXRmb3JtTmFtZXMpOgorICAgICAgICAoUHV0RW52QW5kTG9nKToKKyAgICAgICAgKEJvcmluZ0Nh
bGxlcnMpOgorICAgICAgICAoTm9ybWFsaXplV2luZG93c1BhdGgpOgorICAgICAgICAoUHJpbnRV
c2VkU3VwcHJlc3Npb25zTGlzdCk6CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
Z2RiX2hlbHBlci5weTogQWRkZWQuCisgICAgICAgIEhlbHBlciBmdW5jdGlvbnMgZm9yIHF1ZXJ5
aW5nIGdkYi4KKyAgICAgICAgKF9HZGJPdXRwdXRUb0ZpbGVMaW5lKToKKyAgICAgICAgKFJlc29s
dmVBZGRyZXNzZXNXaXRoaW5BQmluYXJ5KToKKyAgICAgICAgKEFkZHJlc3NUYWJsZSk6CisgICAg
ICAgIChBZGRyZXNzVGFibGUuX19pbml0X18pOgorICAgICAgICAoQWRkcmVzc1RhYmxlLkFkZEJp
bmFyeUF0KToKKyAgICAgICAgKEFkZHJlc3NUYWJsZS5BZGQpOgorICAgICAgICAoQWRkcmVzc1Rh
YmxlLlJlc29sdmVBbGwpOgorICAgICAgICAoQWRkcmVzc1RhYmxlLkdldEZpbGVMaW5lKToKKwor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHk6CisgICAgICAgIFN1cHBvcnQg
bWVtb3J5IGxlYWsgZGV0ZWN0aW9uLgorICAgICAgICAoR3RrUG9ydC5fX2luaXRfXyk6CisgICAg
ICAgIChHdGtQb3J0LmRlZmF1bHRfdGltZW91dF9tcyk6CisgICAgICAgIChHdGtQb3J0LmRyaXZl
cl9zdG9wX3RpbWVvdXQpOgorICAgICAgICAoR3RrUG9ydC5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2
ZXIpOgorICAgICAgICAoR3RrUG9ydC5fZ2VuZXJhdGVfYWxsX3Rlc3RfY29uZmlndXJhdGlvbnMp
OgorICAgICAgICAoR3RrUG9ydC5jaGVja19mb3JfbGVha3MpOgorICAgICAgICAoR3RrUG9ydCk6
CisgICAgICAgIChHdGtQb3J0LnByaW50X2xlYWtzX3N1bW1hcnkpOgorCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2d0a19sZWFrZGV0ZWN0b3IucHk6IEFkZGVkLgorICAgICAgICBJ
bXBsZW1lbnQgYSBHdGtMZWFrRGV0ZWN0b3IgdG8gcGFyc2UgdGhlIGxlYWtzIGZvdW5kIGJ5IFZh
bGdyaW5kLgorICAgICAgICAoR3RrTGVha0RldGVjdG9yKToKKyAgICAgICAgKEd0a0xlYWtEZXRl
Y3Rvci5fX2luaXRfXyk6CisgICAgICAgIChHdGtMZWFrRGV0ZWN0b3IucGFyc2VfbGVha3Nfb3V0
cHV0KToKKyAgICAgICAgKEd0a0xlYWtEZXRlY3Rvci5sZWFrc19maWxlc19pbl9kaXJlY3Rvcnkp
OgorICAgICAgICAoR3RrTGVha0RldGVjdG9yLmxlYWtzX2ZpbGVfbmFtZSk6CisKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjLnB5OgorICAgICAgICAoTWFjUG9ydC5jaGVja19m
b3JfbGVha3MpOiBNYWMgb25seSBjaGVja3MgZm9yIGxlYWtzIGlmIHByb2Nlc3MgaXMKKyAgICAg
ICAgcnVubmluZy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9tZW1jaGVja19h
bmFseXplLnB5OiBBZGRlZC4KKyAgICAgICAgUGFyc2UgdGhlIHhtbCBmaWxlcyBnZW5lcmF0ZWQg
YnkgVmFsZ3JpbmQgYW5kIHN1bW1hcmlzZSBsZWFrcworICAgICAgICBpbnRvIGFuIGVhc2lseSB1
bmRlcnN0YW5kYWJsZSBsaXN0LgorICAgICAgICAoZ2V0VGV4dE9mKToKKyAgICAgICAgKGdldENE
QVRBT2YpOgorICAgICAgICAoc2hvcnRlbkZpbGVQYXRoKToKKyAgICAgICAgKGdhdGhlckZyYW1l
cyk6CisgICAgICAgIChWYWxncmluZEVycm9yKToKKyAgICAgICAgKFZhbGdyaW5kRXJyb3IuX19p
bml0X18pOgorICAgICAgICAoVmFsZ3JpbmRFcnJvci5fX3N0cl9fKToKKyAgICAgICAgKFZhbGdy
aW5kRXJyb3IuVW5pcXVlU3RyaW5nKToKKyAgICAgICAgKFZhbGdyaW5kRXJyb3IuRXJyb3JIYXNo
KToKKyAgICAgICAgKFZhbGdyaW5kRXJyb3IuX19oYXNoX18pOgorICAgICAgICAoVmFsZ3JpbmRF
cnJvci5fX2VxX18pOgorICAgICAgICAobG9nX2lzX2ZpbmlzaGVkKToKKyAgICAgICAgKE1lbWNo
ZWNrQW5hbHl6ZXIpOgorICAgICAgICAoTWVtY2hlY2tBbmFseXplci5fX2luaXRfXyk6CisgICAg
ICAgIChNZW1jaGVja0FuYWx5emVyLlJlcG9ydCk6CisgICAgICAgIChfbWFpbik6CisgICAgICAg
IChfbWFpbi5zaG91bGQpOgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZl
cl9wcm9jZXNzLnB5OgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5zdG9wKTogTGV0IHRoZSBwb3J0
IGRlY2lkZSB3aGV0aGVyIHRvIGNoZWNrIGZvcgorICAgICAgICBsZWFrcyBpZiB0aGUgcHJvY2Vz
cyBpcyBydW5uaW5nLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9w
cm9jZXNzX3VuaXR0ZXN0LnB5OgorICAgICAgICAoVHJpdmlhbE1vY2tQb3J0LmNoZWNrX2Zvcl9s
ZWFrcyk6CisKKyAgICAgICAgKiB2YWxncmluZC9tZW1jaGVjay9zdXBwcmVzc2lvbnMudHh0OiBB
ZGRlZC4KKyAgICAgICAgRmlsZSBjb250YWluaW5nIHN1cHByZXNzaW9ucyBmb3Iga25vd24gbGVh
a3MuCisKIDIwMTMtMDctMTYgIEt3YW5nIFl1bCBTZW8gIDxza3l1bEBjb21wYW55MTAwLm5ldD4K
IAogICAgICAgICBjaGVjay13ZWJraXQtc3R5bGU6ICJ1c2luZyBuYW1lc3BhY2UgZm9vOyIgc2hv
dWxkIGJlIGZsYWdnZWQgYXMgYW4gZXJyb3Igb25seSBpbiBoZWFkZXJzCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpp
bmRleCA2YjRiYjc2ZDFlMWEzYWI0YWRhYTlkMjZjZDgzZmVmNGUxN2YzNmU4Li5jYWYzZmUwNGM3
YTRmMjM0ODQ1MzQwNGU2YTQyMGJiOWM0ODRiMTdiIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKQEAgLTExMCw3
ICsxMTAsNyBAQCBkZWYgcGFyc2VfYXJncyhhcmdzKToKICAgICAgICAgb3B0cGFyc2UubWFrZV9v
cHRpb24oIi0tY29tcGxleC10ZXh0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxz
ZSwKICAgICAgICAgICAgIGhlbHA9IlVzZSB0aGUgY29tcGxleCB0ZXh0IGNvZGUgcGF0aCBmb3Ig
YWxsIHRleHQgKE1hYyBPUyBYIGFuZCBXaW5kb3dzIG9ubHkpIiksCiAgICAgICAgIG9wdHBhcnNl
Lm1ha2Vfb3B0aW9uKCItbCIsICItLWxlYWtzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVs
dD1GYWxzZSwKLSAgICAgICAgICAgIGhlbHA9IkVuYWJsZSBsZWFrcyBjaGVja2luZyAoTWFjIE9T
IFggb25seSkiKSwKKyAgICAgICAgICAgIGhlbHA9IkVuYWJsZSBsZWFrcyBjaGVja2luZyAoTWFj
IE9TIFggYW5kIEd0aysgb25seSkiKSwKICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi1n
IiwgIi0tZ3VhcmQtbWFsbG9jIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwK
ICAgICAgICAgICAgIGhlbHA9IkVuYWJsZSBHdWFyZCBNYWxsb2MgKE1hYyBPUyBYIG9ubHkpIiks
CiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXRocmVhZGVkIiwgYWN0aW9uPSJzdG9y
ZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9iYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKaW5k
ZXggZjc2OGExZjcyYTdhMGZiMjg5MjUwZTJjZjI5OGQyYzNkZDU4ODE5OC4uZTk4MWNkYzdhYzE0
OGI0NzU0MjcwYTIyNmM3MjEzNGI5OWEyMGQ1MCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2Jhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jh
c2UucHkKQEAgLTM4MSw3ICszODEsNyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxfZmlsZW5hbWUpCiAgICAgICAgIHJldHVy
biAnJy5qb2luKGRpZmYpCiAKLSAgICBkZWYgY2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nlc3Nf
bmFtZSwgcHJvY2Vzc19waWQpOgorICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwgcHJvY2Vz
c19uYW1lLCBwcm9jZXNzX3BpZCwgaXNfcnVubmluZyk6CiAgICAgICAgICMgU3ViY2xhc3NlcyBz
aG91bGQgY2hlY2sgZm9yIGxlYWtzIGluIHRoZSBydW5uaW5nIHByb2Nlc3MKICAgICAgICAgIyBh
bmQgcHJpbnQgYW55IG5lY2Vzc2FyeSB3YXJuaW5ncyBpZiBsZWFrcyBhcmUgZm91bmQuCiAgICAg
ICAgICMgRklYTUU6IFdlIHNob3VsZCBjb25zaWRlciBtb3ZpbmcgbXVjaCBvZiB0aGlzIGxvZ2lj
IGludG8KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9jb21tb24ucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvY29tbW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5MjMw
ZDAwNWQxNThkNGUyMzQzZjY1ODI4M2Q4ZWJkODYxMWNmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvY29tbW9uLnB5CkBAIC0wLDAgKzEsMzEwIEBACisj
IE9yaWdpbmFsbHkgZnJvbSBDaHJvbWl1bSwgY29weXJpZ2h0IGFzIGZvbGxvd3M6CisjCisjIENv
cHlyaWdodCAoYykgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1
dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcGxhdGZvcm0K
K2ltcG9ydCBvcworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMK
K2ltcG9ydCB0aW1lCisKKworY2xhc3MgTm90SW1wbGVtZW50ZWRFcnJvcihFeGNlcHRpb24pOgor
ICAgIHBhc3MKKworCitjbGFzcyBUaW1lb3V0RXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisK
KworZGVmIF9wcmludF9saW5lKGxpbmUsIGZsdXNoPVRydWUpOgorICAgICMgUHJpbnRpbmcgdG8g
YSB0ZXh0IGZpbGUgKGluY2x1ZGluZyBzdGRvdXQpIG9uIFdpbmRvd3MgYWx3YXlzIHdpbmRzIHVw
CisgICAgIyB1c2luZyBcclxuIGF1dG9tYXRpY2FsbHkuIE9uIGJ1aWxkYm90LCB0aGlzIHdpbmRz
IHVwIGJlaW5nIHJlYWQgYnkgYQorICAgICMgbWFzdGVyIHJ1bm5pbmcgb24gTGludXgsIHNvIHdl
IG1hbnVhbGx5IGNvbnZlcnQgY3JsZiB0byAnXG4nLgorICAgIHByaW50IGxpbmUucnN0cmlwKCkg
KyAnXG4nLAorICAgIGlmIGZsdXNoOgorICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKworCitk
ZWYgUnVuU3VicHJvY2Vzc0luQmFja2dyb3VuZChwcm9jKToKKyAgICAiIiJSdW5zIGEgc3VicHJv
Y2VzcyBpbiB0aGUgYmFja2dyb3VuZC4gUmV0dXJucyBhIGhhbmRsZSB0byB0aGUgcHJvY2Vzcy4i
IiIKKyAgICBsb2dnaW5nLmluZm8oInJ1bm5pbmcgJXMgaW4gdGhlIGJhY2tncm91bmQiICUgIiAi
LmpvaW4ocHJvYykpCisgICAgcmV0dXJuIHN1YnByb2Nlc3MuUG9wZW4ocHJvYykKKworCitkZWYg
UnVuU3VicHJvY2Vzcyhwcm9jLCB0aW1lb3V0PTAsIGRldGFjaD1GYWxzZSwgYmFja2dyb3VuZD1G
YWxzZSk6CisgICAgIiIiIFJ1bnMgYSBzdWJwcm9jZXNzLCB1bnRpbCBpdCBmaW5pc2hlcyBvciB8
dGltZW91dHwgaXMgZXhjZWVkZWQgYW5kIHRoZQorICAgIHByb2Nlc3MgaXMga2lsbGVkIHdpdGgg
dGFza2tpbGwuICAgIEEgfHRpbWVvdXR8IDw9IDAgICAgbWVhbnMgbm8gdGltZW91dC4KKworICAg
IEFyZ3M6CisgICAgICAgIHByb2M6IGxpc3Qgb2YgcHJvY2VzcyBjb21wb25lbnRzIChleGUgKyBh
cmdzKQorICAgICAgICB0aW1lb3V0OiBob3cgbG9uZyB0byB3YWl0IGJlZm9yZSBraWxsaW5nLCA8
PSAwIG1lYW5zIHdhaXQgZm9yZXZlcgorICAgICAgICBkZXRhY2g6IFdoZXRoZXIgdG8gcGFzcyB0
aGUgREVUQUNIRURfUFJPQ0VTUyBhcmd1bWVudCB0byBDcmVhdGVQcm9jZXNzCisgICAgICAgICAg
b24gV2luZG93cy4gIFRoaXMgaXMgdXNlZCBieSBQdXJpZnkgc3VicHJvY2Vzc2VzIG9uIGJ1aWxk
Ym90IHdoaWNoCisgICAgICAgICAgc2VlbSB0byBnZXQgY29uZnVzZWQgYnkgdGhlIHBhcmVudCBj
b25zb2xlIHRoYXQgYnVpbGRib3Qgc2V0cyB1cC4KKyAgICAiIiIKKworICAgIGxvZ2dpbmcuaW5m
bygicnVubmluZyAlcywgdGltZW91dCAlZCBzZWMiICUgKCIgIi5qb2luKHByb2MpLCB0aW1lb3V0
KSkKKyAgICBpZiBkZXRhY2g6CisgICAgICAgICMgc2VlIE1TRE4gZG9jcyBmb3IgIlByb2Nlc3Mg
Q3JlYXRpb24gRmxhZ3MiLgorICAgICAgICBERVRBQ0hFRF9QUk9DRVNTID0gMHg4CisgICAgICAg
IHAgPSBzdWJwcm9jZXNzLlBvcGVuKHByb2MsIGNyZWF0aW9uZmxhZ3M9REVUQUNIRURfUFJPQ0VT
UykKKyAgICBlbHNlOgorICAgICAgICAjIEZvciBub24tZGV0YWNoZWQgcHJvY2Vzc2VzLCBtYW51
YWxseSByZWFkIGFuZCBwcmludCBvdXQgc3Rkb3V0IGFuZAorICAgICAgICAjIHN0ZGVyci4gQnkg
ZGVmYXVsdCwgdGhlIHN1YnByb2Nlc3MgaXMgc3VwcG9zZWQgdG8gaW5oZXJpdCB0aGVzZSBmcm9t
CisgICAgICAgICMgaXRzIHBhcmVudCwgaG93ZXZlciB3aGVuIHJ1biB1bmRlciBidWlsZGJvdCwg
aXQgc2VlbXMgdW5hYmxlIHRvIHJlYWQKKyAgICAgICAgIyBkYXRhIGZyb20gYSBncmFuZGNoaWxk
IHByb2Nlc3MsIHNvIHdlIGhhdmUgdG8gcmVhZCB0aGUgY2hpbGQgYW5kCisgICAgICAgICMgcHJp
bnQgdGhlIGRhdGEgYXMgaWYgaXQgY2FtZSBmcm9tIHVzIGZvciBidWlsZGJvdCB0byByZWFkIGl0
LgorICAgICAgICAjIFdlJ3JlIG5vdCBzdXJlIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4KKyAgICAg
ICAgIyBUT0RPKGVyaWtrYXkpOiBzaG91bGQgd2UgYnVmZmVyIHN0ZGVyciBhbmQgc3Rkb3V0IHNl
cGFyYXRlbHk/CisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKHByb2MsIHN0ZG91dD1zdWJw
cm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9j
ZXNzLlNURE9VVCkKKworICAgIGxvZ2dpbmcuaW5mbygic3RhcnRlZCBzdWJwcm9jZXNzIikKKwor
ICAgICMgSG93IGxvbmcgdG8gd2FpdCAoaW4gc2Vjb25kcykgYmVmb3JlIHByaW50aW5nIHByb2dy
ZXNzIGxvZyBtZXNzYWdlcy4KKyAgICBwcm9ncmVzc19kZWxheSA9IDMwMAorICAgIHByb2dyZXNz
X2RlbGF5X3RpbWUgPSB0aW1lLnRpbWUoKSArIHByb2dyZXNzX2RlbGF5CisgICAgZGlkX3RpbWVv
dXQgPSBGYWxzZQorICAgIGlmIHRpbWVvdXQgPiAwOgorICAgICAgICB3YWl0X3VudGlsID0gdGlt
ZS50aW1lKCkgKyB0aW1lb3V0CisgICAgd2hpbGUgcC5wb2xsKCkgaXMgTm9uZSBhbmQgbm90IGRp
ZF90aW1lb3V0OgorICAgICAgICBpZiBub3QgZGV0YWNoOgorICAgICAgICAgICAgbGluZSA9IHAu
c3Rkb3V0LnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHdoaWxlIGxpbmUgYW5kIG5vdCBkaWRfdGlt
ZW91dDoKKyAgICAgICAgICAgICAgICBfcHJpbnRfbGluZShsaW5lKQorICAgICAgICAgICAgICAg
IGxpbmUgPSBwLnN0ZG91dC5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgaWYgdGltZW91dCA+
IDA6CisgICAgICAgICAgICAgICAgICAgIGRpZF90aW1lb3V0ID0gdGltZS50aW1lKCkgPiB3YWl0
X3VudGlsCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFdoZW4gd2UgZGV0YWNoLCBibG9j
a2luZyBvbiByZWFkaW5nIHN0ZG91dCBkb2Vzbid0IHdvcmssIHNvCisgICAgICAgICAgICAjIHdl
IHNsZWVwIGEgc2hvcnQgdGltZSBhbmQgcG9sbC4KKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC41
KQorICAgICAgICAgICAgaWYgdGltZS50aW1lKCkgPj0gcHJvZ3Jlc3NfZGVsYXlfdGltZToKKyAg
ICAgICAgICAgICAgICAjIEZvcmNlIG91dHB1dCBvbiBhIHBlcmlvZGljIGJhc2lzIHRvIGF2b2lk
IGdldHRpbmcga2lsbGVkIG9mZgorICAgICAgICAgICAgICAgICMgYnkgdGhlIGJ1aWxkYm90Lgor
ICAgICAgICAgICAgICAgICMgVE9ETyhlcmlra2F5KTogSSdkIHByZWZlciBhIGxlc3Mgb2J0cnVz
aXZlICdwcmludCAiLiIsJyB3aXRoCisgICAgICAgICAgICAgICAgIyBhIGZsdXNoIGJ1dCBiZWNh
dXNlIG9mIGhvdyB3ZSdyZSBkb2luZyBzdWJwcm9jZXNzZXMsIHRoaXMKKyAgICAgICAgICAgICAg
ICAjIGRvZXNuJ3QgYXBwZWFyIHRvIHdvcmsgcmVsaWFibHkuCisgICAgICAgICAgICAgICAgbG9n
Z2luZy5pbmZvKCIlcyBzdGlsbCBydW5uaW5nLi4uIiAlIG9zLnBhdGguYmFzZW5hbWUocHJvY1sw
XSkpCisgICAgICAgICAgICAgICAgcHJvZ3Jlc3NfZGVsYXlfdGltZSA9IHRpbWUudGltZSgpICsg
cHJvZ3Jlc3NfZGVsYXkKKyAgICAgICAgaWYgdGltZW91dCA+IDA6CisgICAgICAgICAgICBkaWRf
dGltZW91dCA9IHRpbWUudGltZSgpID4gd2FpdF91bnRpbAorCisgICAgaWYgZGlkX3RpbWVvdXQ6
CisgICAgICAgIGxvZ2dpbmcuaW5mbygicHJvY2VzcyB0aW1lZCBvdXQiKQorICAgIGVsc2U6Cisg
ICAgICAgIGxvZ2dpbmcuaW5mbygicHJvY2VzcyBlbmRlZCwgZGlkIG5vdCB0aW1lIG91dCIpCisK
KyAgICBpZiBkaWRfdGltZW91dDoKKyAgICAgICAgaWYgSXNXaW5kb3dzKCk6CisgICAgICAgICAg
ICBzdWJwcm9jZXNzLmNhbGwoWyJ0YXNra2lsbCIsICIvVCIsICIvRiIsICIvUElEIiwgc3RyKHAu
cGlkKV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIERvZXMgdGhpcyBraWxsIGFsbCBj
aGlsZHJlbiwgdG9vPworICAgICAgICAgICAgb3Mua2lsbChwLnBpZCwgc2lnbmFsLlNJR0lOVCkK
KyAgICAgICAgbG9nZ2luZy5lcnJvcigiS0lMTEVEICVkIiAlIHAucGlkKQorICAgICAgICAjIEdp
dmUgdGhlIHByb2Nlc3MgYSBjaGFuY2UgdG8gYWN0dWFsbHkgZGllIGJlZm9yZSBjb250aW51aW5n
CisgICAgICAgICMgc28gdGhhdCBjbGVhbnVwIGNhbiBoYXBwZW4gc2FmZWx5LgorICAgICAgICB0
aW1lLnNsZWVwKDEuMCkKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiVElNRU9VVCB3YWl0aW5nIGZv
ciAlcyIgJSBwcm9jWzBdKQorICAgICAgICByYWlzZSBUaW1lb3V0RXJyb3IocHJvY1swXSkKKyAg
ICBlbGlmIG5vdCBkZXRhY2g6CisgICAgICAgIGZvciBsaW5lIGluIHAuc3Rkb3V0LnJlYWRsaW5l
cygpOgorICAgICAgICAgICAgX3ByaW50X2xpbmUobGluZSwgRmFsc2UpCisgICAgICAgIGlmIG5v
dCBJc01hYygpOiAgICAgIyBzdGRvdXQgZmx1c2ggZmFpbHMgb24gTWFjLgorICAgICAgICAgICAg
bG9nZ2luZy5pbmZvKCJmbHVzaGluZyBzdGRvdXQiKQorICAgICAgICAgICAgcC5zdGRvdXQuZmx1
c2goKQorCisgICAgbG9nZ2luZy5pbmZvKCJjb2xsZWN0aW5nIHJlc3VsdCBjb2RlIikKKyAgICBy
ZXN1bHQgPSBwLnBvbGwoKQorICAgIGlmIHJlc3VsdDoKKyAgICAgICAgbG9nZ2luZy5lcnJvcigi
JXMgZXhpdGVkIHdpdGggbm9uLXplcm8gcmVzdWx0IGNvZGUgJWQiICUKKyAgICAgICAgICAgICAg
ICAgICAgICAocHJvY1swXSwgcmVzdWx0KSkKKyAgICByZXR1cm4gcmVzdWx0CisKKworZGVmIElz
TGludXgoKToKKyAgICByZXR1cm4gc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2xpbnV4JykKKwor
CitkZWYgSXNNYWMoKToKKyAgICByZXR1cm4gc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2Rhcndp
bicpCisKKworZGVmIElzV2luZG93cygpOgorICAgIHJldHVybiBzeXMucGxhdGZvcm0gPT0gJ2N5
Z3dpbicgb3Igc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpCisKKworZGVmIFdpbmRvd3NW
ZXJzaW9uTmFtZSgpOgorICAgICIiIlJldHVybnMgdGhlIG5hbWUgb2YgdGhlIFdpbmRvd3MgdmVy
c2lvbiBpZiBpdCBpcyBrbm93biwgb3IgTm9uZS4KKworICAgIFBvc3NpYmxlIHJldHVybiB2YWx1
ZXMgYXJlOiB4cCwgdmlzdGEsIDcsIDgsIG9yIE5vbmUKKyAgICAiIiIKKyAgICBpZiBzeXMucGxh
dGZvcm0gPT0gJ2N5Z3dpbic6CisgICAgICAgICMgV2luZG93cyB2ZXJzaW9uIG51bWJlciBpcyBo
aWRpbmcgaW4gc3lzdGVtIG5hbWUuICAgIExvb2tzIGxpa2U6CisgICAgICAgICMgQ1lHV0lOX05U
LTYuMS1XT1c2NAorICAgICAgICB0cnk6CisgICAgICAgICAgICB2ZXJzaW9uX3N0ciA9IHBsYXRm
b3JtLnVuYW1lKClbMF0uc3BsaXQoJy0nKVsxXQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAg
ICByZXR1cm4gTm9uZQorICAgIGVsaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgor
ICAgICAgICAjIE5vcm1hbCBXaW5kb3dzIHZlcnNpb24gc3RyaW5nLiAgICBNaW5lOiA2LjEuNzYw
MQorICAgICAgICB2ZXJzaW9uX3N0ciA9IHBsYXRmb3JtLnZlcnNpb24oKQorICAgIGVsc2U6Cisg
ICAgICAgIHJldHVybiBOb25lCisKKyAgICBwYXJ0cyA9IHZlcnNpb25fc3RyLnNwbGl0KCcuJykK
KyAgICB0cnk6CisgICAgICAgIG1ham9yID0gaW50KHBhcnRzWzBdKQorICAgICAgICBtaW5vciA9
IGludChwYXJ0c1sxXSkKKyAgICBleGNlcHQ6CisgICAgICAgIHJldHVybiBOb25lICAgICMgQ2Fu
J3QgcGFyc2UsIHVua25vd24gdmVyc2lvbi4KKworICAgIGlmIG1ham9yID09IDU6CisgICAgICAg
IHJldHVybiAneHAnCisgICAgZWxpZiBtYWpvciA9PSA2IGFuZCBtaW5vciA9PSAwOgorICAgICAg
ICByZXR1cm4gJ3Zpc3RhJworICAgIGVsaWYgbWFqb3IgPT0gNiBhbmQgbWlub3IgPT0gMToKKyAg
ICAgICAgcmV0dXJuICc3JworICAgIGVsaWYgbWFqb3IgPT0gNiBhbmQgbWlub3IgPT0gMjoKKyAg
ICAgICAgcmV0dXJuICc4JyAgICAjIEZ1dHVyZSBwcm9vZi4gICAgOykKKyAgICByZXR1cm4gTm9u
ZQorCisKK2RlZiBQbGF0Zm9ybU5hbWVzKCk6CisgICAgIiIiUmV0dXJuIGFuIGFycmF5IG9mIHN0
cmluZyB0byBiZSB1c2VkIGluIHBhdGhzIGZvciB0aGUgcGxhdGZvcm0KKyAgICAoZS5nLiBzdXBw
cmVzc2lvbnMsIGd0ZXN0IGZpbHRlcnMsIGlnbm9yZSBmaWxlcyBldGMuKQorICAgIFRoZSBmaXJz
dCBlbGVtZW50IG9mIHRoZSBhcnJheSBkZXNjcmliZXMgdGhlICdtYWluJyBwbGF0Zm9ybS4KKyAg
ICAiIiIKKyAgICBpZiBJc0xpbnV4KCk6CisgICAgICAgIHJldHVybiBbJ2xpbnV4J10KKyAgICBp
ZiBJc01hYygpOgorICAgICAgICByZXR1cm4gWydtYWMnXQorICAgIGlmIElzV2luZG93cygpOgor
ICAgICAgICBuYW1lcyA9IFsnd2luMzInXQorICAgICAgICB2ZXJzaW9uX25hbWUgPSBXaW5kb3dz
VmVyc2lvbk5hbWUoKQorICAgICAgICBpZiB2ZXJzaW9uX25hbWUgaXMgbm90IE5vbmU6CisgICAg
ICAgICAgICBuYW1lcy5hcHBlbmQoJ3dpbi0lcycgJSB2ZXJzaW9uX25hbWUpCisgICAgICAgIHJl
dHVybiBuYW1lcworICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1Vua25vd24gcGxhdGZv
cm0gIiVzIi4nICUgc3lzLnBsYXRmb3JtKQorCisKK2RlZiBQdXRFbnZBbmRMb2coZW52X25hbWUs
IGVudl92YWx1ZSk6CisgICAgb3MucHV0ZW52KGVudl9uYW1lLCBlbnZfdmFsdWUpCisgICAgbG9n
Z2luZy5pbmZvKCdleHBvcnQgJXM9JXMnLCBlbnZfbmFtZSwgZW52X3ZhbHVlKQorCisKK2RlZiBC
b3JpbmdDYWxsZXJzKG1hbmdsZWQsIHVzZV9yZV93aWxkY2FyZHMpOgorICAgICIiIlJldHVybiBh
IGxpc3Qgb2YgJ2JvcmluZycgZnVuY3Rpb24gbmFtZXMgKG9wdGluYWxseSBtYW5nbGVkKQorICAg
IHdpdGggKi8/IHdpbGRjYXJkcyAob3B0aW9uYWxseSAuKi8uKS4KKyAgICBCb3JpbmcgPSB3ZSBk
cm9wIG9mZiB0aGUgYm90dG9tIG9mIHN0YWNrIHRyYWNlcyBiZWxvdyBzdWNoIGZ1bmN0aW9ucy4K
KyAgICAiIiIKKworICAgIG5lZWRfbWFuZ2xpbmcgPSBbCisgICAgICAgICMgRG9uJ3Qgc2hvdyBv
dXIgdGVzdGluZyBmcmFtZXdvcms6CisgICAgICAgICgidGVzdGluZzo6VGVzdDo6UnVuIiwgICAg
ICAgICAiX1pON3Rlc3Rpbmc0VGVzdDNSdW5FdiIpLAorICAgICAgICAoInRlc3Rpbmc6OlRlc3RJ
bmZvOjpSdW4iLCAiX1pON3Rlc3Rpbmc4VGVzdEluZm8zUnVuRXYiKSwKKyAgICAgICAgKCJ0ZXN0
aW5nOjppbnRlcm5hbDo6SGFuZGxlKkV4Y2VwdGlvbnNJbk1ldGhvZElmU3VwcG9ydGVkKiIsCisg
ICAgICAgICAiX1pON3Rlc3Rpbmc4aW50ZXJuYWwzP0hhbmRsZSpFeGNlcHRpb25zSW5NZXRob2RJ
ZlN1cHBvcnRlZCoiKSwKKworICAgICAgICAjIERlcGVuZCBvbiBzY2hlZHVsaW5nOgorICAgICAg
ICAoIk1lc3NhZ2VMb29wOjpSdW4iLCAgICAgICAgICJfWk4xMU1lc3NhZ2VMb29wM1J1bkV2Iiks
CisgICAgICAgICgiTWVzc2FnZUxvb3A6OlJ1blRhc2siLCAiX1pOMTFNZXNzYWdlTG9vcDdSdW5U
YXNrKiIpLAorICAgICAgICAoIlJ1bm5hYmxlTWV0aG9kKiIsICAgICAgICAgICAgIl9aTjE0UnVu
bmFibGVNZXRob2QqIiksCisgICAgICAgICgiRGlzcGF0Y2hUb01ldGhvZCoiLCAgICAgICAgIl9a
KjE2RGlzcGF0Y2hUb01ldGhvZCoiKSwKKyAgICAgICAgKCJiYXNlOjppbnRlcm5hbDo6SW52b2tl
cio6OkRvSW52b2tlKiIsCisgICAgICAgICAiX1pONGJhc2U4aW50ZXJuYWw4SW52b2tlcipEb0lu
dm9rZSoiKSwgICAgIyBJbnZva2VyezEsMiwzfQorICAgICAgICAoImJhc2U6OmludGVybmFsOjpS
dW5uYWJsZUFkYXB0ZXIqOjpSdW4qIiwKKyAgICAgICAgICJfWk40YmFzZThpbnRlcm5hbDE1UnVu
bmFibGVBZGFwdGVyKlJ1bioiKSwKKyAgICBdCisKKyAgICByZXQgPSBbXQorICAgIGZvciBwYWly
IGluIG5lZWRfbWFuZ2xpbmc6CisgICAgICAgIHJldC5hcHBlbmQocGFpclsxIGlmIG1hbmdsZWQg
ZWxzZSAwXSkKKworICAgIHJldCArPSBbCisgICAgICAgICMgQWxzbyBkb24ndCBzaG93IHRoZSBp
bnRlcm5hbHMgb2YgbGliYy9wdGhyZWFkLgorICAgICAgICAic3RhcnRfdGhyZWFkIiwKKyAgICAg
ICAgIm1haW4iLAorICAgICAgICAiQmFzZVRocmVhZEluaXRUaHVuayIsCisgICAgXQorCisgICAg
aWYgdXNlX3JlX3dpbGRjYXJkczoKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHJldCkp
OgorICAgICAgICAgICAgcmV0W2ldID0gcmV0W2ldLnJlcGxhY2UoJyonLCAnLionKS5yZXBsYWNl
KCc/JywgJy4nKQorCisgICAgcmV0dXJuIHJldAorCisKK2RlZiBOb3JtYWxpemVXaW5kb3dzUGF0
aChwYXRoKToKKyAgICAiIiJJZiB3ZSdyZSB1c2luZyBDeWd3aW4gUHl0aG9uLCB0dXJuIHRoZSBw
YXRoIGludG8gYSBXaW5kb3dzIHBhdGguCisKKyAgICBEb24ndCB0dXJuIGZvcndhcmQgc2xhc2hl
cyBpbnRvIGJhY2tzbGFzaGVzIGZvciBlYXNpZXIgY29weS1wYXN0aW5nIGFuZAorICAgIGVzY2Fw
aW5nLgorCisgICAgVE9ETyhybmspOiBJZiB3ZSBldmVyIHdhbnQgdG8gY3V0IG91dCB0aGUgc3Vi
cHJvY2VzcyBpbnZvY2F0aW9uLCB3ZSBjYW4gdXNlCisgICAgX3dpbnJlZyB0byBnZXQgdGhlIHJv
b3QgQ3lnd2luIGRpcmVjdG9yeSBmcm9tIHRoZSByZWdpc3RyeSBrZXk6CisgICAgSEtFWV9MT0NB
TF9NQUNISU5FXFNPRlRXQVJFXEN5Z3dpblxzZXR1cFxyb290ZGlyLgorICAgICIiIgorICAgIGlm
IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJjeWd3aW4iKToKKyAgICAgICAgcCA9IHN1YnByb2Nl
c3MuUG9wZW4oWyJjeWdwYXRoIiwgIi1tIiwgcGF0aF0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJv
Y2Vzcy5QSVBFKQorICAgICAgICAob3V0LCBlcnIpID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAg
IGlmIGVycjoKKyAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygiV0FSTklORzogY3lncGF0aCBl
cnJvcjogJXMiLCBlcnIpCisgICAgICAgIHJldHVybiBvdXQuc3RyaXAoKQorICAgIGVsc2U6Cisg
ICAgICAgIHJldHVybiBwYXRoCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29t
bW9uIG91dHB1dCBmb3JtYXQgY29kZQorCisKK2RlZiBQcmludFVzZWRTdXBwcmVzc2lvbnNMaXN0
KHN1cHBjb3VudHMpOgorICAgICIiIiBQcmludHMgb3V0IHRoZSBsaXN0IG9mIHVzZWQgc3VwcHJl
c3Npb25zIGluIGEgZm9ybWF0IGNvbW1vbiB0byBhbGwgdGhlCisgICAgICAgIG1lbW9yeSB0b29s
cy4gSWYgdGhlIGxpc3QgaXMgZW1wdHksIHByaW50cyBub3RoaW5nIGFuZCByZXR1cm5zIEZhbHNl
LAorICAgICAgICBvdGhlcndpc2UgVHJ1ZS4KKworICAgICAgICBzdXBwY291bnRzOiBhIGRpY3Rp
b25hcnkgb2YgdXNlZCBzdXBwcmVzc2lvbiBjb3VudHMsCisgICAgICAgICAgICAgICAgICAgIEtl
eSAtPiBuYW1lLCBWYWx1ZSAtPiBjb3VudC4KKyAgICAiIiIKKyAgICBpZiBub3Qgc3VwcGNvdW50
czoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAgcHJpbnQgIlN1cHByZXNz
aW9ucyB1c2VkOiIKKyAgICBwcmludCAiICAgIGNvdW50IG5hbWUiCisgICAgZm9yIChuYW1lLCBj
b3VudCkgaW4gc29ydGVkKHN1cHBjb3VudHMuaXRlbXMoKSwga2V5PWxhbWJkYSAoaywgdik6ICh2
LCBrKSk6CisgICAgICAgIHByaW50ICIlN2QgJXMiICUgKGNvdW50LCBuYW1lKQorICAgIHByaW50
ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIK
KyAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICByZXR1cm4gVHJ1ZQpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2dkYl9oZWxwZXIucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvZ2RiX2hlbHBlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTAyYjgzMTRjY2RiNmE4NTE1
OTIyMDEyZDA1YmEwMzU5MzBjNjRiCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2dkYl9oZWxwZXIucHkKQEAgLTAsMCArMSwxMTYgQEAKKyMgT3JpZ2luYWxs
eSBmcm9tIENocm9taXVtLCBjb3B5cmlnaHQgYXMgZm9sbG93czoKKyMKKyMgQ29weXJpZ2h0IChj
KSAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworJycnIEEgYnVuY2ggb2YgaGVscGVyIGZ1bmN0aW9ucyBmb3IgcXVlcnlp
bmcgZ2RiLicnJworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9y
dCB0ZW1wZmlsZQorCitHREJfTElORV9SRSA9IHJlLmNvbXBpbGUocidMaW5lIChbMC05XSopIG9m
ICIoW14iXSopIi4qJykKKworCitkZWYgX0dkYk91dHB1dFRvRmlsZUxpbmUob3V0cHV0X2xpbmUp
OgorICAgICcnJyBQYXJzZSB0aGUgZ2RiIG91dHB1dCBsaW5lLCByZXR1cm4gYSBwYWlyIChmaWxl
LCBsaW5lIG51bSkgJycnCisgICAgbWF0Y2ggPSBHREJfTElORV9SRS5tYXRjaChvdXRwdXRfbGlu
ZSkKKyAgICBpZiBtYXRjaDoKKyAgICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwcygpWzFdLCBtYXRj
aC5ncm91cHMoKVswXQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBOb25lCisKKworZGVmIFJl
c29sdmVBZGRyZXNzZXNXaXRoaW5BQmluYXJ5KGJpbmFyeV9uYW1lLCBsb2FkX2FkZHJlc3MsIGFk
ZHJlc3NfbGlzdCk6CisgICAgJycnIEZvciBlYWNoIGFkZHJlc3MsIHJldHVybiBhIHBhaXIgKGZp
bGUsIGxpbmUgbnVtKSAnJycKKyAgICBjb21tYW5kcyA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5
RmlsZSgpCisgICAgY29tbWFuZHMud3JpdGUoJ2FkZC1zeW1ib2wtZmlsZSAiJXMiICVzXG4nICUg
KGJpbmFyeV9uYW1lLCBsb2FkX2FkZHJlc3MpKQorICAgIGZvciBhZGRyIGluIGFkZHJlc3NfbGlz
dDoKKyAgICAgICAgY29tbWFuZHMud3JpdGUoJ2luZm8gbGluZSAqJXNcbicgJSBhZGRyKQorICAg
IGNvbW1hbmRzLndyaXRlKCdxdWl0XG4nKQorICAgIGNvbW1hbmRzLmZsdXNoKCkKKyAgICBnZGJf
Y29tbWFuZGxpbmUgPSAnZ2RiIC1iYXRjaCAteCAlcyAyPi9kZXYvbnVsbCcgJSBjb21tYW5kcy5u
YW1lCisgICAgZ2RiX3BpcGUgPSBvcy5wb3BlbihnZGJfY29tbWFuZGxpbmUpCisgICAgcmVzdWx0
ID0gZ2RiX3BpcGUucmVhZGxpbmVzKCkKKworICAgIGFkZHJlc3NfY291bnQgPSAwCisgICAgcmV0
ID0ge30KKyAgICBmb3IgbGluZSBpbiByZXN1bHQ6CisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0
aCgnTGluZScpOgorICAgICAgICAgICAgcmV0W2FkZHJlc3NfbGlzdFthZGRyZXNzX2NvdW50XV0g
PSBfR2RiT3V0cHV0VG9GaWxlTGluZShsaW5lKQorICAgICAgICAgICAgYWRkcmVzc19jb3VudCAr
PSAxCisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnTm8gbGluZScpOgorICAgICAgICAgICAg
cmV0W2FkZHJlc3NfbGlzdFthZGRyZXNzX2NvdW50XV0gPSAoTm9uZSwgTm9uZSkKKyAgICAgICAg
ICAgIGFkZHJlc3NfY291bnQgKz0gMQorICAgIGdkYl9waXBlLmNsb3NlKCkKKyAgICBjb21tYW5k
cy5jbG9zZSgpCisgICAgcmV0dXJuIHJldAorCisKK2NsYXNzIEFkZHJlc3NUYWJsZShvYmplY3Qp
OgorICAgICcnJyBPYmplY3QgdG8gZG8gYmF0Y2hlZCBsaW5lIG51bWJlciBsb29rdXAuICcnJwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9hZF9hZGRyZXNzZXMgPSB7
fQorICAgICAgICBzZWxmLl9iaW5hcmllcyA9IHt9CisgICAgICAgIHNlbGYuX2FsbF9yZXNvbHZl
ZCA9IEZhbHNlCisKKyAgICBkZWYgQWRkQmluYXJ5QXQoc2VsZiwgYmluYXJ5LCBsb2FkX2FkZHJl
c3MpOgorICAgICAgICAnJycgUmVnaXN0ZXIgYSBuZXcgc2hhcmVkIGxpYnJhcnkgb3IgZXhlY3V0
YWJsZS4gJycnCisgICAgICAgIHNlbGYuX2xvYWRfYWRkcmVzc2VzW2JpbmFyeV0gPSBsb2FkX2Fk
ZHJlc3MKKworICAgIGRlZiBBZGQoc2VsZiwgYmluYXJ5LCBhZGRyZXNzKToKKyAgICAgICAgJycn
IFJlZ2lzdGVyIGEgbG9va3VwIHJlcXVlc3QuICcnJworICAgICAgICBpZiBiaW5hcnkgPT0gJyc6
CisgICAgICAgICAgICBsb2dnaW5nLndhcm4oJ2FkZGluZyBhZGRyZXNzICVzIGluIGVtcHR5IGJp
bmFyeT8nICUgYWRkcmVzcykKKyAgICAgICAgaWYgYmluYXJ5IGluIHNlbGYuX2JpbmFyaWVzOgor
ICAgICAgICAgICAgc2VsZi5fYmluYXJpZXNbYmluYXJ5XS5hcHBlbmQoYWRkcmVzcykKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2JpbmFyaWVzW2JpbmFyeV0gPSBbYWRkcmVzc10K
KyAgICAgICAgc2VsZi5fYWxsX3Jlc29sdmVkID0gRmFsc2UKKworICAgIGRlZiBSZXNvbHZlQWxs
KHNlbGYpOgorICAgICAgICAnJycgQ2Fycnkgb3V0IGFsbCBsb29rdXAgcmVxdWVzdHMuICcnJwor
ICAgICAgICBzZWxmLl90cmFuc2xhdGlvbiA9IHt9CisgICAgICAgIGZvciBiaW5hcnkgaW4gc2Vs
Zi5fYmluYXJpZXMua2V5cygpOgorICAgICAgICAgICAgaWYgYmluYXJ5ICE9ICcnIGFuZCBiaW5h
cnkgaW4gc2VsZi5fbG9hZF9hZGRyZXNzZXM6CisgICAgICAgICAgICAgICAgbG9hZF9hZGRyZXNz
ID0gc2VsZi5fbG9hZF9hZGRyZXNzZXNbYmluYXJ5XQorICAgICAgICAgICAgICAgIGFkZHIgPSBS
ZXNvbHZlQWRkcmVzc2VzV2l0aGluQUJpbmFyeSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGJp
bmFyeSwgbG9hZF9hZGRyZXNzLCBzZWxmLl9iaW5hcmllc1tiaW5hcnldKQorICAgICAgICAgICAg
ICAgIHNlbGYuX3RyYW5zbGF0aW9uW2JpbmFyeV0gPSBhZGRyCisgICAgICAgIHNlbGYuX2FsbF9y
ZXNvbHZlZCA9IFRydWUKKworICAgIGRlZiBHZXRGaWxlTGluZShzZWxmLCBiaW5hcnksIGFkZHIp
OgorICAgICAgICAnJycgR2V0IHRoZSAoZmlsZW5hbWUsIGxpbmVudW0pIHJlc3VsdCBvZiBhIHBy
ZXZpb3VzbHktcmVnaXN0ZXJlZAorICAgICAgICBsb29rdXAgcmVxdWVzdC4KKyAgICAgICAgJycn
CisgICAgICAgIGlmIHNlbGYuX2FsbF9yZXNvbHZlZDoKKyAgICAgICAgICAgIGlmIGJpbmFyeSBp
biBzZWxmLl90cmFuc2xhdGlvbjoKKyAgICAgICAgICAgICAgICBpZiBhZGRyIGluIHNlbGYuX3Ry
YW5zbGF0aW9uW2JpbmFyeV06CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl90cmFu
c2xhdGlvbltiaW5hcnldW2FkZHJdCisgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSkKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvZ3RrLnB5CmluZGV4IDYzYjhlYjg5YTU4YmY1YmY4OWYyZmZiZTBkNTRj
NWE5ODkzZGIxNWMuLjkzMTk5NWMxNjc0ZjRiNTkyODE0OTQwZmY4NDlhOGQwZDZmOGE4YWMgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weQpAQCAtMSw0ICsxLDUgQEAKICMgQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAo
QykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTI4LDEyICsyOSwxMyBAQAogCiBpbXBvcnQg
b3MKIGltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdXVpZAogCiBmcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5tb2RlbHMudGVzdF9jb25maWd1cmF0aW9uIGltcG9ydCBUZXN0Q29uZmlndXJhdGlv
bgogZnJvbSB3ZWJraXRweS5wb3J0LmJhc2UgaW1wb3J0IFBvcnQKIGZyb20gd2Via2l0cHkucG9y
dC5wdWxzZWF1ZGlvX3Nhbml0aXplciBpbXBvcnQgUHVsc2VBdWRpb1Nhbml0aXplcgogZnJvbSB3
ZWJraXRweS5wb3J0Lnh2ZmJkcml2ZXIgaW1wb3J0IFh2ZmJEcml2ZXIKLQorZnJvbSB3ZWJraXRw
eS5wb3J0Lmd0a19sZWFrZGV0ZWN0b3IgaW1wb3J0IEd0a0xlYWtEZXRlY3RvcgogCiBjbGFzcyBH
dGtQb3J0KFBvcnQpOgogICAgIHBvcnRfbmFtZSA9ICJndGsiCkBAIC00Miw2ICs0NCwxNCBAQCBj
bGFzcyBHdGtQb3J0KFBvcnQpOgogICAgICAgICBzdXBlcihHdGtQb3J0LCBzZWxmKS5fX2luaXRf
XygqYXJncywgKiprd2FyZ3MpCiAgICAgICAgIHNlbGYuX3B1bHNlYXVkaW9fc2FuaXRpemVyID0g
UHVsc2VBdWRpb1Nhbml0aXplcigpCiAKKyAgICAgICAgc2VsZi5fbGVha19kZXRlY3RvciA9IEd0
a0xlYWtEZXRlY3RvcihzZWxmKQorICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oImxlYWtzIik6
CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5nZXRfb3B0aW9uKCJ3cmFwcGVyIik6CisgICAgICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigndXNlIC0td3JhcHBlcj1cInZhbGdyaW5kXCIgZm9y
IG1lbW9yeSBsZWFrIGRldGVjdGlvbiBvbiBHVEsnKQorICAgICAgICAgICAgIyBEdW1wUmVuZGVy
VHJlZSBzbG93cyBkb3duIG5vdGljYWJseSBpZiB3ZSBydW4gbW9yZSB0aGFuIGFib3V0IDEwMDAg
dGVzdHMgaW4gYSBiYXRjaAorICAgICAgICAgICAgIyB3aXRoIE1hbGxvY1N0YWNrTG9nZ2luZyBl
bmFibGVkLgorICAgICAgICAgICAgc2VsZi5zZXRfb3B0aW9uX2RlZmF1bHQoImJhdGNoX3NpemUi
LCAxMDAwKQorCiAgICAgZGVmIHdhcm5faWZfYnVnX21pc3NpbmdfaW5fdGVzdF9leHBlY3RhdGlv
bnMoc2VsZik6CiAgICAgICAgIHJldHVybiBub3Qgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVz
dF9ydW5uZXInKQogCkBAIC01Miw5ICs2MiwxNiBAQCBjbGFzcyBHdGtQb3J0KFBvcnQpOgogICAg
ICAgICByZXR1cm4gWHZmYkRyaXZlcgogCiAgICAgZGVmIGRlZmF1bHRfdGltZW91dF9tcyhzZWxm
KToKKyAgICAgICAgbXVsdGlwbGllciA9IDEwIGlmIHNlbGYuZ2V0X29wdGlvbigibGVha3MiKSBl
bHNlIDEKICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdjb25maWd1cmF0aW9uJykgPT0gJ0Rl
YnVnJzoKLSAgICAgICAgICAgIHJldHVybiAxMiAqIDEwMDAKLSAgICAgICAgcmV0dXJuIDYgKiAx
MDAwCisgICAgICAgICAgICByZXR1cm4gbXVsdGlwbGllciAqIDEyICogMTAwMAorICAgICAgICBy
ZXR1cm4gbXVsdGlwbGllciAqIDYgKiAxMDAwCisKKyAgICBkZWYgZHJpdmVyX3N0b3BfdGltZW91
dChzZWxmKToKKyAgICAgICAgIiIiIFJldHVybnMgdGhlIGFtb3VudCBvZiB0aW1lIGluIHNlY29u
ZHMgdG8gd2FpdCBiZWZvcmUga2lsbGluZyB0aGUgcHJvY2VzcyBpbiBkcml2ZXIuc3RvcCgpLiIi
IgorICAgICAgICAjIFdlIHdhbnQgdG8gd2FpdCBmb3IgYXQgbGVhc3QgMyBzZWNvbmRzLCBidXQg
aWYgd2UgYXJlIHJlYWxseSBzbG93LCB3ZSB3YW50IHRvIGJlIHNsb3cgb24gY2xlYW51cCBhcwor
ICAgICAgICAjIHdlbGwgKGZvciB0aGluZ3MgbGlrZSBBU0FOLCBWYWxncmluZCwgZXRjLikKKyAg
ICAgICAgcmV0dXJuIDMuMCAqIHNlbGYuZGVmYXVsdF90aW1lb3V0X21zKCkKIAogICAgIGRlZiBz
ZXR1cF90ZXN0X3J1bihzZWxmKToKICAgICAgICAgc3VwZXIoR3RrUG9ydCwgc2VsZikuc2V0dXBf
dGVzdF9ydW4oKQpAQCAtNjksMTcgKzg2LDQyIEBAIGNsYXNzIEd0a1BvcnQoUG9ydCk6CiAgICAg
ICAgIGVudmlyb25tZW50WydHVEtfTU9EVUxFUyddID0gJ2dhaWwnCiAgICAgICAgIGVudmlyb25t
ZW50WydHU0VUVElOR1NfQkFDS0VORCddID0gJ21lbW9yeScKICAgICAgICAgZW52aXJvbm1lbnRb
J0xJQk9WRVJMQVlfU0NST0xMQkFSJ10gPSAnMCcKLSAgICAgICAgZW52aXJvbm1lbnRbJ1RFU1Rf
UlVOTkVSX0lOSkVDVEVEX0JVTkRMRV9GSUxFTkFNRSddID0gc2VsZi5fYnVpbGRfcGF0aCgnTGli
cmFyaWVzJywgJ2xpYlRlc3RSdW5uZXJJbmplY3RlZEJ1bmRsZS5sYScpCi0gICAgICAgIGVudmly
b25tZW50WydURVNUX1JVTk5FUl9URVNUX1BMVUdJTl9QQVRIJ10gPSBzZWxmLl9idWlsZF9wYXRo
KCdUZXN0TmV0c2NhcGVQbHVnaW4nLCAnLmxpYnMnKQotICAgICAgICBlbnZpcm9ubWVudFsnV0VC
S0lUX0lOU1BFQ1RPUl9QQVRIJ10gPSBzZWxmLl9idWlsZF9wYXRoKCdQcm9ncmFtcycsICdyZXNv
dXJjZXMnLCAnaW5zcGVjdG9yJykKLSAgICAgICAgZW52aXJvbm1lbnRbJ0FVRElPX1JFU09VUkNF
U19QQVRIJ10gPSBzZWxmLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnU291cmNlJywgJ1dlYkNvcmUn
LCAncGxhdGZvcm0nLCAnYXVkaW8nLCAncmVzb3VyY2VzJykKLSAgICAgICAgc2VsZi5fY29weV92
YWx1ZV9mcm9tX2Vudmlyb25faWZfc2V0KGVudmlyb25tZW50LCAnV0VCS0lUX09VVFBVVERJUicp
CisgICAgICAgIGVudmlyb25tZW50WydURVNUX1JVTk5FUl9JTkpFQ1RFRF9CVU5ETEVfRklMRU5B
TUUnXSA9IHNlbGYuX2J1aWxkX3BhdGgoCisgICAgICAgICAgICAnTGlicmFyaWVzJywgJ2xpYlRl
c3RSdW5uZXJJbmplY3RlZEJ1bmRsZS5sYScpCisgICAgICAgIGVudmlyb25tZW50WydURVNUX1JV
Tk5FUl9URVNUX1BMVUdJTl9QQVRIJ10gPSBzZWxmLl9idWlsZF9wYXRoKAorICAgICAgICAgICAg
J1Rlc3ROZXRzY2FwZVBsdWdpbicsICcubGlicycpCisgICAgICAgIGVudmlyb25tZW50WydXRUJL
SVRfSU5TUEVDVE9SX1BBVEgnXSA9IHNlbGYuX2J1aWxkX3BhdGgoCisgICAgICAgICAgICAnUHJv
Z3JhbXMnLCAncmVzb3VyY2VzJywgJ2luc3BlY3RvcicpCisgICAgICAgIGVudmlyb25tZW50WydB
VURJT19SRVNPVVJDRVNfUEFUSCddID0gc2VsZi5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoCisgICAg
ICAgICAgICAnU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnYXVkaW8nLCAncmVzb3Vy
Y2VzJykKKyAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCJsZWFrcyIpOgorICAgICAgICAgICAg
ZW52aXJvbm1lbnRbJ0dfU0xJQ0UnXSA9ICdhbHdheXMtbWFsbG9jJworICAgICAgICAgICAgeG1s
ZmlsZSA9ICIiLmpvaW4oKCdcIicsIHNlbGYucmVzdWx0c19kaXJlY3RvcnkoKSwgIi9kcnQtJXAt
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dWlkLnV1aWQxKCkuaGV4LCAiLWxl
YWtzLnhtbCIsICdcIicpKQorICAgICAgICAgICAgc3VwcHJlc3Npb25zZmlsZSA9IHNlbGYucGF0
aF9mcm9tX3dlYmtpdF9iYXNlKAorICAgICAgICAgICAgICAgICdUb29scycsICd2YWxncmluZCcs
ICdtZW1jaGVjaycsICdzdXBwcmVzc2lvbnMudHh0JykKKyAgICAgICAgICAgIGVudmlyb25tZW50
WydWQUxHUklORF9PUFRTJ10gPSAiLS10b29sPW1lbWNoZWNrICIgXAorICAgICAgICAgICAgICAg
ICItLW51bS1jYWxsZXJzPTQwIC0tZGVtYW5nbGU9bm8gLS10cmFjZS1jaGlsZHJlbj1ubyAgIiBc
CisgICAgICAgICAgICAgICAgIi0tc21jLWNoZWNrPWFsbC1ub24tZmlsZSAtLWxlYWstY2hlY2s9
eWVzICIgXAorICAgICAgICAgICAgICAgICItLWxlYWstcmVzb2x1dGlvbj1oaWdoIC0tc2hvdy1w
b3NzaWJseS1sb3N0PW5vICIgXAorICAgICAgICAgICAgICAgICItLXNob3ctcmVhY2hhYmxlPW5v
IC0tbGVhay1jaGVjaz1mdWxsICIgXAorICAgICAgICAgICAgICAgICIgLS11bmRlZi12YWx1ZS1l
cnJvcnM9bm8gIiBcCisgICAgICAgICAgICAgICAgIi0tZ2VuLXN1cHByZXNzaW9ucz1hbGwgLS14
bWw9eWVzIC0teG1sLWZpbGU9JXMgIiBcCisgICAgICAgICAgICAgICAgIi0tc3VwcHJlc3Npb25z
PSVzIiAlICh4bWxmaWxlLCBzdXBwcmVzc2lvbnNmaWxlKQorICAgICAgICAgICAgIyBGSVhNRTog
aW5zdGVhZCB3ZSBzaG91bGQgYmUgdXNpbmcgImpoYnVpbGQtd3JhcHBlciAtLWd0ayBydW4iCisg
ICAgICAgICAgICAjIHRvIGVuc3VyZSB3ZSBnZXQgdGhlIGNvcnJlY3QgbGlicmFyeSBwYXRoLgor
ICAgICAgICAgICAgZW52aXJvbm1lbnRbJ0xEX0xJQlJBUllfUEFUSCddID0gc2VsZi5wYXRoX2Zy
b21fd2Via2l0X2Jhc2UoCisgICAgICAgICAgICAgICAgJ1dlYktpdEJ1aWxkJywgJ0RlcGVuZGVu
Y2llcycsICdSb290JywgJ2xpYjY0JykKKyAgICAgICAgc2VsZi5fY29weV92YWx1ZV9mcm9tX2Vu
dmlyb25faWZfc2V0KGVudmlyb25tZW50LCAnV0VCS0lUT1VUUFVURElSJykKICAgICAgICAgcmV0
dXJuIGVudmlyb25tZW50CiAKICAgICBkZWYgX2dlbmVyYXRlX2FsbF90ZXN0X2NvbmZpZ3VyYXRp
b25zKHNlbGYpOgogICAgICAgICBjb25maWd1cmF0aW9ucyA9IFtdCiAgICAgICAgIGZvciBidWls
ZF90eXBlIGluIHNlbGYuQUxMX0JVSUxEX1RZUEVTOgotICAgICAgICAgICAgY29uZmlndXJhdGlv
bnMuYXBwZW5kKFRlc3RDb25maWd1cmF0aW9uKHZlcnNpb249c2VsZi5fdmVyc2lvbiwgYXJjaGl0
ZWN0dXJlPSd4ODYnLCBidWlsZF90eXBlPWJ1aWxkX3R5cGUpKQorICAgICAgICAgICAgY29uZmln
dXJhdGlvbnMuYXBwZW5kKAorICAgICAgICAgICAgICAgIFRlc3RDb25maWd1cmF0aW9uKHZlcnNp
b249c2VsZi5fdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNo
aXRlY3R1cmU9J3g4NicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRf
dHlwZT1idWlsZF90eXBlKSkKICAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25zCiAKICAgICBk
ZWYgX3BhdGhfdG9fZHJpdmVyKHNlbGYpOgpAQCAtMTE3LDggKzE1OSwyMSBAQCBjbGFzcyBHdGtQ
b3J0KFBvcnQpOgogICAgIGRlZiBfcG9ydF9zcGVjaWZpY19leHBlY3RhdGlvbnNfZmlsZXMoc2Vs
Zik6CiAgICAgICAgIHJldHVybiBbc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX3dlYmtpdF9i
YXNlbGluZV9wYXRoKHApLCAnVGVzdEV4cGVjdGF0aW9ucycpIGZvciBwIGluIHJldmVyc2VkKHNl
bGYuX3NlYXJjaF9wYXRocygpKV0KIAotICAgICMgRklYTUU6IFdlIHNob3VsZCBmaW5kIGEgd2F5
IHRvIHNoYXJlIHRoaXMgaW1wbG1lbnRhdGlvbiB3aXRoIEd0aywKLSAgICAjIG9yIHRlYWNoIHJ1
bi1sYXVuY2hlciBob3cgdG8gY2FsbCBydW4tc2FmYXJpIGFuZCBtb3ZlIHRoaXMgZG93biB0byBQ
b3J0LgorICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwgcHJvY2Vzc19uYW1lLCBwcm9jZXNz
X3BpZCwgaXNfcnVubmluZyk6CisgICAgICAgICMgV2l0aCBHdGsgd2UgaW5pdGlhdGUgbWVtb3J5
IGNoZWNraW5nIGJ5IHBhc3NpbmcgdmFsZ3JpbmQgYXMgYSB3cmFwcGVyIHRvIHRoZSB0ZXN0Lgor
ICAgICAgICBwYXNzCisKKyAgICBkZWYgcHJpbnRfbGVha3Nfc3VtbWFyeShzZWxmKToKKyAgICAg
ICAgaWYgbm90IHNlbGYuZ2V0X29wdGlvbignbGVha3MnKToKKyAgICAgICAgICAgIHJldHVybgor
ICAgICAgICAjIFdlJ3JlIGluIHRoZSBtYW5hZ2VyIHByb2Nlc3MsIHNvIHRoZSBsZWFrIGRldGVj
dG9yIHdpbGwgbm90IGhhdmUgYSB2YWxpZCBsaXN0IG9mIGxlYWsgZmlsZXMuCisgICAgICAgICMg
RklYTUU6IFRoaXMgaXMgYSBoYWNrLCBidXQgd2UgZG9uJ3QgaGF2ZSBhIGJldHRlciB3YXkgdG8g
Z2V0IHRoaXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgd29ya2VycyB5ZXQuCisgICAgICAgICMgRklY
TUU6IFRoaXMgd2lsbCBpbmNsdWRlIHRvbyBtYW55IGxlYWtzIGluIHN1YnNlcXVlbnQgcnVucyB1
bnRpbCB0aGUgcmVzdWx0cyBkaXJlY3RvcnkgaXMgY2xlYXJlZCEKKyAgICAgICAgbGVha3NfZmls
ZXMgPSBzZWxmLl9sZWFrX2RldGVjdG9yLmxlYWtzX2ZpbGVzX2luX2RpcmVjdG9yeShzZWxmLnJl
c3VsdHNfZGlyZWN0b3J5KCkpCisgICAgICAgIGlmIG5vdCBsZWFrc19maWxlczoKKyAgICAgICAg
ICAgIHJldHVybgorICAgICAgICBzZWxmLl9sZWFrX2RldGVjdG9yLnBhcnNlX2xlYWtzX291dHB1
dChsZWFrc19maWxlcykKKwogICAgIGRlZiBzaG93X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYsIHJl
c3VsdHNfZmlsZW5hbWUpOgogICAgICAgICBydW5fbGF1bmNoZXJfYXJncyA9IFsiZmlsZTovLyVz
IiAlIHJlc3VsdHNfZmlsZW5hbWVdCiAgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0
X3Rlc3RfcnVubmVyJyk6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
Z3RrX2xlYWtkZXRlY3Rvci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGtfbGVh
a2RldGVjdG9yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcxMzE5ZDBkNWQyNjUzMGNjMGI4MzRkZTNhNGFjOWRh
Njg2NDhhOTQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
Z3RrX2xlYWtkZXRlY3Rvci5weQpAQCAtMCwwICsxLDU3IEBACisjIENvcHlyaWdodCAoQykgMjAx
MyBTYW1zdW5nIEVsZWN0cm9uaWNzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20gd2Via2l0cHkucG9ydC5tZW1jaGVja19h
bmFseXplIGltcG9ydCBNZW1jaGVja0FuYWx5emVyCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dl
cihfX25hbWVfXykKKworCisjIElmIG90aGVyIHBvcnRzL3BsYXRmb3JtcyBkZWNpZGUgdG8gc3Vw
cG9ydCAtLWxlYWtzLCB3ZSBzaG91bGQgc2VlIGFib3V0CisjIHNoYXJpbmcgYXMgbXVjaCBvZiB0
aGlzIGNvZGUgYXMgcG9zc2libGUuCisjIFRoaXMgY29kZSBpcyBmb3IgdGhlIEd0aysgcG9ydCwg
dGFrZW4gZnJvbSB0aGUgTWFjIHBvcnQuCisKK2NsYXNzIEd0a0xlYWtEZXRlY3RvcihvYmplY3Qp
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0KToKKyAgICAgICAgIyBXZSBzaG91bGQgb3Bl
cmF0ZSBvbiBhICJwbGF0Zm9ybSIgbm90IGEgcG9ydCBoZXJlLgorICAgICAgICBzZWxmLl9wb3J0
ID0gcG9ydAorICAgICAgICBzZWxmLl9leGVjdXRpdmUgPSBwb3J0Ll9leGVjdXRpdmUKKyAgICAg
ICAgc2VsZi5fZmlsZXN5c3RlbSA9IHBvcnQuX2ZpbGVzeXN0ZW0KKyAgICAgICAgc2VsZi5fbWVt
Y2hlY2tfbGVha19hbmFseXplciA9IE1lbWNoZWNrQW5hbHl6ZXIocG9ydC53ZWJraXRfYmFzZSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1c2VfZ2RiPUZhbHNlKQorCisgICAgZGVmIHBhcnNlX2xlYWtzX291dHB1dChzZWxmLCBsZWFr
c19maWxlcyk6CisgICAgICAgIHNlbGYuX21lbWNoZWNrX2xlYWtfYW5hbHl6ZXIuUmVwb3J0KGxl
YWtzX2ZpbGVzLCAgTm9uZSkKKworICAgIGRlZiBsZWFrc19maWxlc19pbl9kaXJlY3Rvcnkoc2Vs
ZiwgZGlyZWN0b3J5KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uZ2xvYihzZWxm
Ll9maWxlc3lzdGVtLmpvaW4oZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKi1sZWFrcy54bWwiKSkKKworICAgIGRl
ZiBsZWFrc19maWxlX25hbWUoc2VsZiwgcHJvY2Vzc19uYW1lLCBwcm9jZXNzX3BpZCk6CisgICAg
ICAgIHJldHVybiAiZHJ0LSVzLWxlYWtzLnhtbCIgJSAocHJvY2Vzc19waWQpCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L21hYy5weQppbmRleCAwYjI0Y2U3MGVjZTdmMWY2YjQ0NmY3ODk4ODRlYzdlMDRi
MTViNzMzLi5mYTE2MDRkNmVmMTFlM2JlMzA3MGI0ZTY4Yzc3YWY2NGRlZTM2MjZjIDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjLnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9tYWMucHkKQEAgLTE0Nyw4ICsxNDcsOSBAQCBjbGFzcyBNYWNQb3J0
KEFwcGxlUG9ydCk6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgcmV0dXJuIFRy
dWUKIAotICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwgcHJvY2Vzc19uYW1lLCBwcm9jZXNz
X3BpZCk6Ci0gICAgICAgIGlmIG5vdCBzZWxmLmdldF9vcHRpb24oJ2xlYWtzJyk6CisgICAgZGVm
IGNoZWNrX2Zvcl9sZWFrcyhzZWxmLCBwcm9jZXNzX25hbWUsIHByb2Nlc3NfcGlkLCBpc19ydW5u
aW5nKToKKyAgICAgICAgIyBPbmx5IGJvdGhlciB0byBjaGVjayBmb3IgbGVha3Mgb3Igc3RkZXJy
IGlmIHRoZSBwcm9jZXNzIGlzIHN0aWxsIHJ1bm5pbmcuCisgICAgICAgIGlmIG5vdCBzZWxmLmdl
dF9vcHRpb24oJ2xlYWtzJykgb3Igbm90IGlzX3J1bm5pbmc6CiAgICAgICAgICAgICByZXR1cm4K
ICAgICAgICAgIyBXZSBjb3VsZCB1c2UgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3BzdXRpbC8g
dG8gZ2V0IHRoZSBwcm9jZXNzX25hbWUgZnJvbSB0aGUgcGlkLgogICAgICAgICBzZWxmLl9sZWFr
X2RldGVjdG9yLmNoZWNrX2Zvcl9sZWFrcyhwcm9jZXNzX25hbWUsIHByb2Nlc3NfcGlkKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L21lbWNoZWNrX2FuYWx5emUucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWVtY2hlY2tfYW5hbHl6ZS5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42MmU1NGQ2MzEzYjBkODAxYjZhMTBiMmIxNDk4ZGQwMDkwOGIzNmFjCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L21lbWNoZWNrX2FuYWx5emUucHkK
QEAgLTAsMCArMSw2ODQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBPcmlnaW5hbGx5IGZy
b20gQ2hyb21pdW0sIGNvcHlyaWdodCBhcyBmb2xsb3dzOgorIworIyBDb3B5cmlnaHQgKGMpIDIw
MTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisKKyMgbWVtY2hlY2tfYW5hbHl6ZS5weQorCisnJycgR2l2ZW4gYSB2YWxncmlu
ZCBYTUwgZmlsZSwgcGFyc2VzIGVycm9ycyBhbmQgdW5pcXVlcyB0aGVtLicnJworCitpbXBvcnQg
Z2RiX2hlbHBlcgorCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoraW1wb3J0
IGhhc2hsaWIKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBvcworaW1w
b3J0IHJlCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2Zyb20g
eG1sLmRvbS5taW5pZG9tIGltcG9ydCBwYXJzZQorZnJvbSB4bWwucGFyc2Vycy5leHBhdCBpbXBv
cnQgRXhwYXRFcnJvcgorCitpbXBvcnQgY29tbW9uCisKKyMgR2xvYmFsIHN5bWJvbCB0YWJsZSAo
eXVjaykKK1RoZUFkZHJlc3NUYWJsZSA9IE5vbmUKKworIyBUaGVzZSBhcmUgcmVnZXhwcyB0aGF0
IGRlZmluZSBmdW5jdGlvbnMgKHVzaW5nIEMrKyBtYW5nbGVkIG5hbWVzKQorIyB3ZSBkb24ndCB3
YW50IHRvIHNlZSBpbiBzdGFjayB0cmFjZXMgd2hpbGUgcHJldHR5IHByaW50aW5nCisjIG9yIGdl
bmVyYXRpbmcgc3VwcHJlc3Npb25zLgorIyBKdXN0IHN0b3AgcHJpbnRpbmcgdGhlIHN0YWNrL3N1
cHByZXNzaW9uIGZyYW1lcyB3aGVuIHRoZSBjdXJyZW50IG9uZQorIyBtYXRjaGVzIGFueSBvZiB0
aGVzZS4KK19CT1JJTkdfQ0FMTEVSUyA9IGNvbW1vbi5Cb3JpbmdDYWxsZXJzKG1hbmdsZWQ9VHJ1
ZSwgdXNlX3JlX3dpbGRjYXJkcz1UcnVlKQorCisKK2RlZiBnZXRUZXh0T2YodG9wX25vZGUsIG5h
bWUpOgorICAgICcnJyBSZXR1cm5zIGFsbCB0ZXh0IGluIGFsbCBET00gbm9kZXMgd2l0aCBhIGNl
cnRhaW4gfG5hbWV8IHRoYXQgYXJlCisgICAgY2hpbGRyZW4gb2YgfHRvcF9ub2RlfC4KKyAgICAn
JycKKworICAgIHRleHQgPSAiIgorICAgIGZvciBub2Rlc19uYW1lZCBpbiB0b3Bfbm9kZS5nZXRF
bGVtZW50c0J5VGFnTmFtZShuYW1lKToKKyAgICAgICAgdGV4dCArPSAiIi5qb2luKFtub2RlLmRh
dGEgZm9yIG5vZGUgaW4gbm9kZXNfbmFtZWQuY2hpbGROb2RlcworICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIG5vZGUubm9kZVR5cGUgPT0gbm9kZS5URVhUX05PREVdKQorICAgIHJldHVybiB0
ZXh0CisKKworZGVmIGdldENEQVRBT2YodG9wX25vZGUsIG5hbWUpOgorICAgICcnJyBSZXR1cm5z
IGFsbCBDREFUQSBpbiBhbGwgRE9NIG5vZGVzIHdpdGggYSBjZXJ0YWluIHxuYW1lfCB0aGF0IGFy
ZQorICAgIGNoaWxkcmVuIG9mIHx0b3Bfbm9kZXwuCisgICAgJycnCisKKyAgICB0ZXh0ID0gIiIK
KyAgICBmb3Igbm9kZXNfbmFtZWQgaW4gdG9wX25vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUobmFt
ZSk6CisgICAgICAgIHRleHQgKz0gIiIuam9pbihbbm9kZS5kYXRhIGZvciBub2RlIGluIG5vZGVz
X25hbWVkLmNoaWxkTm9kZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub2RlLm5vZGVU
eXBlID09IG5vZGUuQ0RBVEFfU0VDVElPTl9OT0RFXSkKKyAgICBpZiAodGV4dCA9PSAiIik6Cisg
ICAgICAgIHJldHVybiBOb25lCisgICAgcmV0dXJuIHRleHQKKworCitkZWYgc2hvcnRlbkZpbGVQ
YXRoKHNvdXJjZV9kaXIsIGRpcmVjdG9yeSk6CisgICAgJycnUmV0dXJucyBhIHN0cmluZyB3aXRo
IHRoZSBzdHJpbmcgcHJlZml4IHxzb3VyY2VfZGlyfCByZW1vdmVkIGZyb20KKyAgICB8ZGlyZWN0
b3J5fC4nJycKKyAgICBwcmVmaXhlc190b19jdXQgPSBbImJ1aWxkL3NyYy8iLCAidmFsZ3JpbmQv
Y29yZWdyaW5kLyJdCisKKyAgICBpZiBzb3VyY2VfZGlyOgorICAgICAgICBwcmVmaXhlc190b19j
dXQuYXBwZW5kKHNvdXJjZV9kaXIpCisKKyAgICBmb3IgcCBpbiBwcmVmaXhlc190b19jdXQ6Cisg
ICAgICAgIGluZGV4ID0gZGlyZWN0b3J5LnJmaW5kKHApCisgICAgICAgIGlmIGluZGV4ICE9IC0x
OgorICAgICAgICAgICAgZGlyZWN0b3J5ID0gZGlyZWN0b3J5W2luZGV4ICsgbGVuKHApOl0KKwor
ICAgIHJldHVybiBkaXJlY3RvcnkKKworIyBDb25zdGFudHMgdGhhdCBnaXZlIHJlYWwgbmFtZXMg
dG8gdGhlIGFiYnJldmlhdGlvbnMgaW4gdmFsZ3JpbmQgWE1MIG91dHB1dC4KK0lOU1RSVUNUSU9O
X1BPSU5URVIgPSAiaXAiCitPQkpFQ1RfRklMRSA9ICJvYmoiCitGVU5DVElPTl9OQU1FID0gImZu
IgorU1JDX0ZJTEVfRElSID0gImRpciIKK1NSQ19GSUxFX05BTUUgPSAiZmlsZSIKK1NSQ19MSU5F
ID0gImxpbmUiCisKKworZGVmIGdhdGhlckZyYW1lcyhub2RlLCBzb3VyY2VfZGlyKToKKyAgICBm
cmFtZXMgPSBbXQorICAgIGZvciBmcmFtZSBpbiBub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJm
cmFtZSIpOgorICAgICAgICBmcmFtZV9kaWN0ID0geworICAgICAgICAgICAgSU5TVFJVQ1RJT05f
UE9JTlRFUjogZ2V0VGV4dE9mKGZyYW1lLCBJTlNUUlVDVElPTl9QT0lOVEVSKSwKKyAgICAgICAg
ICAgIE9CSkVDVF9GSUxFOiBnZXRUZXh0T2YoZnJhbWUsIE9CSkVDVF9GSUxFKSwKKyAgICAgICAg
ICAgIEZVTkNUSU9OX05BTUU6IGdldFRleHRPZihmcmFtZSwgRlVOQ1RJT05fTkFNRSksCisgICAg
ICAgICAgICBTUkNfRklMRV9ESVI6IHNob3J0ZW5GaWxlUGF0aCgKKyAgICAgICAgICAgICAgICAg
ICAgc291cmNlX2RpciwgZ2V0VGV4dE9mKGZyYW1lLCBTUkNfRklMRV9ESVIpKSwKKyAgICAgICAg
ICAgIFNSQ19GSUxFX05BTUU6IGdldFRleHRPZihmcmFtZSwgU1JDX0ZJTEVfTkFNRSksCisgICAg
ICAgICAgICBTUkNfTElORTogZ2V0VGV4dE9mKGZyYW1lLCBTUkNfTElORSl9CisKKyAgICAgICAg
IyBJZ25vcmUgdGhpcyBmcmFtZSBhbmQgYWxsIHRoZSBmb2xsb3dpbmcgaWYgaXQncyBhICJib3Jp
bmciIGZ1bmN0aW9uLgorICAgICAgICBlbm91Z2hfZnJhbWVzID0gRmFsc2UKKyAgICAgICAgZm9y
IHJlZ2V4cCBpbiBfQk9SSU5HX0NBTExFUlM6CisgICAgICAgICAgICBpZiByZS5tYXRjaCgiXiVz
JCIgJSByZWdleHAsIGZyYW1lX2RpY3RbRlVOQ1RJT05fTkFNRV0pOgorICAgICAgICAgICAgICAg
IGVub3VnaF9mcmFtZXMgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYg
ZW5vdWdoX2ZyYW1lczoKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgZnJhbWVzICs9IFtm
cmFtZV9kaWN0XQorCisgICAgICAgIGdsb2JhbCBUaGVBZGRyZXNzVGFibGUKKyAgICAgICAgaWYg
VGhlQWRkcmVzc1RhYmxlICE9IE5vbmUgYW5kIGZyYW1lX2RpY3RbU1JDX0xJTkVdID09ICIiOgor
ICAgICAgICAgICAgIyBUcnkgdXNpbmcgZ2RiCisgICAgICAgICAgICBUaGVBZGRyZXNzVGFibGUu
QWRkKGZyYW1lX2RpY3RbT0JKRUNUX0ZJTEVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmcmFtZV9kaWN0W0lOU1RSVUNUSU9OX1BPSU5URVJdKQorICAgIHJldHVybiBmcmFtZXMK
KworCitjbGFzcyBWYWxncmluZEVycm9yOgorICAgICcnJyBUYWtlcyBhIDxET00gRWxlbWVudDog
ZXJyb3I+IG5vZGUgYW5kIHJlYWRzIGFsbCB0aGUgZGF0YSBmcm9tIGl0LiBBCisgICAgVmFsZ3Jp
bmRFcnJvciBpcyBpbW11dGFibGUgYW5kIGlzIGhhc2hlZCBvbiBpdHMgcHJldHR5IHByaW50ZWQg
b3V0cHV0LgorICAgICcnJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZV9kaXIsIGVy
cm9yX25vZGUsIGNvbW1hbmRsaW5lLCB0ZXN0Y2FzZSk6CisgICAgICAgICcnJyBDb3BpZXMgYWxs
IHRoZSByZWxldmFudCBpbmZvcm1hdGlvbiBvdXQgb2YgdGhlIERPTSBhbmQgaW50byBvYmplY3QK
KyAgICAgICAgcHJvcGVydGllcy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZXJyb3Jf
bm9kZTogVGhlIDxlcnJvcj48L2Vycm9yPiBET00gbm9kZSB3ZSdyZSBleHRyYWN0aW5nIGZyb20u
CisgICAgICAgICAgICBzb3VyY2VfZGlyOiBQcmVmaXggdGhhdCBzaG91bGQgYmUgc3RyaXBwZWQg
ZnJvbSB0aGUgPGRpcj4gbm9kZS4KKyAgICAgICAgICAgIGNvbW1hbmRsaW5lOiBUaGUgY29tbWFu
ZCB0aGF0IHdhcyBydW4gdW5kZXIgdmFsZ3JpbmQKKyAgICAgICAgICAgIHRlc3RjYXNlOiBUaGUg
dGVzdCBjYXNlIG5hbWUsIGlmIGtub3duLgorICAgICAgICAnJycKKworICAgICAgICAjIFZhbGdy
aW5kIGVycm9ycyBjb250YWluIG9uZSA8d2hhdD48c3RhY2s+IHBhaXIsIHBsdXMgYW4gb3B0aW9u
YWwKKyAgICAgICAgIyA8YXV4d2hhdD48c3RhY2s+IHBhaXIsIHBsdXMgYW4gb3B0aW9uYWwgPG9y
aWdpbj48d2hhdD48c3RhY2s+PC9vcmlnaW4+LAorICAgICAgICAjIHBsdXMgKHNpbmNlIDMuNS4w
KSBhIDxzdXBwcmVzc2lvbj48L3N1cHByZXNzaW9uPiBwYWlyLgorICAgICAgICAjIChPcmlnaW4g
aXMgbmljZWx5IGVuY2xvc2VkOyB0b28gYmFkIHRoZSBvdGhlciB0d28gYXJlbid0LikKKyAgICAg
ICAgIyBUaGUgbW9zdCBjb21tb24gd2F5IHRvIHNlZSBhbGwgdGhyZWUgaW4gb25lIHJlcG9ydCBp
cworICAgICAgICAjIGEgc3lzY2FsbCB3aXRoIGEgcGFyYW1ldGVyIHRoYXQgcG9pbnRzIHRvIHVu
aW5pdGlhbGl6ZWQgbWVtb3J5LCBlLmcuCisgICAgICAgICMgRm9ybWF0OgorICAgICAgICAjIDxl
cnJvcj4KKyAgICAgICAgIyAgICAgPHVuaXF1ZT4weDZkPC91bmlxdWU+CisgICAgICAgICMgICAg
IDx0aWQ+MTwvdGlkPgorICAgICAgICAjICAgICA8a2luZD5TeXNjYWxsUGFyYW08L2tpbmQ+Cisg
ICAgICAgICMgICAgIDx3aGF0PlN5c2NhbGwgcGFyYW0gd3JpdGUoYnVmKSBwb2ludHMgdG8gdW5p
bml0aWFsaXNlZCBieXRlKHMpPC93aGF0PgorICAgICAgICAjICAgICA8c3RhY2s+CisgICAgICAg
ICMgICAgICAgICA8ZnJhbWU+CisgICAgICAgICMgICAgICAgICAuLi4KKyAgICAgICAgIyAgICAg
ICAgIDwvZnJhbWU+CisgICAgICAgICMgICAgIDwvc3RhY2s+CisgICAgICAgICMgICAgIDxhdXh3
aGF0PkFkZHJlc3MgMHg1YzlhZjRmIGlzIDcgYnl0ZXMgaW5zaWRlIGEgYmxvY2sgb2YgLi4uPC9h
dXh3aGF0PgorICAgICAgICAjICAgICA8c3RhY2s+CisgICAgICAgICMgICAgICAgICA8ZnJhbWU+
CisgICAgICAgICMgICAgICAgICAuLi4KKyAgICAgICAgIyAgICAgICAgIDwvZnJhbWU+CisgICAg
ICAgICMgICAgIDwvc3RhY2s+CisgICAgICAgICMgICAgIDxvcmlnaW4+CisgICAgICAgICMgICAg
IDx3aGF0PlVuaW5pdGlhbGlzZWQgdmFsdWUgd2FzIGNyZWF0ZWQgYnkgYSBoZWFwIGFsbG9jYXRp
b248L3doYXQ+CisgICAgICAgICMgICAgIDxzdGFjaz4KKyAgICAgICAgIyAgICAgICAgIDxmcmFt
ZT4KKyAgICAgICAgIyAgICAgICAgIC4uLgorICAgICAgICAjICAgICAgICAgPC9mcmFtZT4KKyAg
ICAgICAgIyAgICAgPC9zdGFjaz4KKyAgICAgICAgIyAgICAgPC9vcmlnaW4+CisgICAgICAgICMg
ICAgIDxzdXBwcmVzc2lvbj4KKyAgICAgICAgIyAgICAgICAgIDxzbmFtZT5pbnNlcnRfYV9zdXBw
cmVzc2lvbl9uYW1lX2hlcmU8L3NuYW1lPgorICAgICAgICAjICAgICAgICAgPHNraW5kPk1lbWNo
ZWNrOlBhcmFtPC9za2luZD4KKyAgICAgICAgIyAgICAgICAgIDxza2F1eD53cml0ZShidWYpPC9z
a2F1eD4KKyAgICAgICAgIyAgICAgICAgIDxzZnJhbWU+IDxmdW4+X193cml0ZV9ub2NhbmNlbDwv
ZnVuPiA8L3NmcmFtZT4KKyAgICAgICAgIyAgICAgICAgIC4uLgorICAgICAgICAjICAgICAgICAg
PHNmcmFtZT4gPGZ1bj5tYWluPC9mdW4+IDwvc2ZyYW1lPgorICAgICAgICAjICAgICAgICAgPHJh
d3RleHQ+CisgICAgICAgICMgPCFbQ0RBVEFbCisgICAgICAgICMgeworICAgICAgICAjICAgICAg
ICA8aW5zZXJ0X2Ffc3VwcHJlc3Npb25fbmFtZV9oZXJlPgorICAgICAgICAjICAgICAgICBNZW1j
aGVjazpQYXJhbQorICAgICAgICAjICAgICAgICB3cml0ZShidWYpCisgICAgICAgICMgICAgICAg
IGZ1bjpfX3dyaXRlX25vY2FuY2VsCisgICAgICAgICMgICAgICAgIC4uLgorICAgICAgICAjICAg
ICAgICBmdW46bWFpbgorICAgICAgICAjIH0KKyAgICAgICAgIyBdXT4KKyAgICAgICAgIyAgICAg
ICAgIDwvcmF3dGV4dD4KKyAgICAgICAgIyAgICAgPC9zdXBwcmVzc2lvbj4KKyAgICAgICAgIyA8
L2Vycm9yPgorICAgICAgICAjCisgICAgICAgICMgRWFjaCBmcmFtZSBsb29rcyBsaWtlIHRoaXM6
CisgICAgICAgICMgICAgPGZyYW1lPgorICAgICAgICAjICAgICAgICA8aXA+MHg4Mzc1MUJDPC9p
cD4KKyAgICAgICAgIyAgICAgICAgPG9iaj4vZGF0YS9ka2VnZWwvY2hyb21lLWJ1aWxkL3NyYy9v
dXQvUmVsZWFzZS9iYXNlX3VuaXR0ZXN0czwvb2JqPgorICAgICAgICAjICAgICAgICA8Zm4+X1pO
N3Rlc3Rpbmc4aW50ZXJuYWwxMlRlc3RJbmZvSW1wbDdSdW5UZXN0RVBOU184VGVzdEluZm9FPC9m
bj4KKyAgICAgICAgIyAgICAgICAgPGRpcj4vZGF0YS9ka2VnZWwvY2hyb21lLWJ1aWxkL3NyYy90
ZXN0aW5nL2d0ZXN0L3NyYzwvZGlyPgorICAgICAgICAjICAgICAgICA8ZmlsZT5ndGVzdC1pbnRl
cm5hbC1pbmwuaDwvZmlsZT4KKyAgICAgICAgIyAgICAgICAgPGxpbmU+NjU1PC9saW5lPgorICAg
ICAgICAjICAgIDwvZnJhbWU+CisgICAgICAgICMgYWx0aG91Z2ggdGhlIGRpciwgZmlsZSwgYW5k
IGxpbmUgZWxlbWVudHMgYXJlIG1pc3NpbmcgaWYgdGhlcmUgaXMKKyAgICAgICAgIyBubyBkZWJ1
ZyBpbmZvLgorCisgICAgICAgIHNlbGYuX2tpbmQgPSBnZXRUZXh0T2YoZXJyb3Jfbm9kZSwgImtp
bmQiKQorICAgICAgICBzZWxmLl9iYWNrdHJhY2VzID0gW10KKyAgICAgICAgc2VsZi5fc3VwcHJl
c3Npb24gPSBOb25lCisgICAgICAgIHNlbGYuX2NvbW1hbmRsaW5lID0gY29tbWFuZGxpbmUKKyAg
ICAgICAgc2VsZi5fdGVzdGNhc2UgPSB0ZXN0Y2FzZQorICAgICAgICBzZWxmLl9hZGRpdGlvbmFs
ID0gW10KKworICAgICAgICAjIEl0ZXJhdGUgdGhyb3VnaCB0aGUgbm9kZXMsIHBhcnNpbmcgPHdo
YXR8YXV4d2hhdD48c3RhY2s+IHBhaXJzLgorICAgICAgICBkZXNjcmlwdGlvbiA9IE5vbmUKKyAg
ICAgICAgZm9yIG5vZGUgaW4gZXJyb3Jfbm9kZS5jaGlsZE5vZGVzOgorICAgICAgICAgICAgaWYg
bm9kZS5sb2NhbE5hbWUgPT0gIndoYXQiIG9yIG5vZGUubG9jYWxOYW1lID09ICJhdXh3aGF0IjoK
KyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICIiLmpvaW4oW24uZGF0YSBmb3IgbiBpbiBu
b2RlLmNoaWxkTm9kZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IG4ubm9kZVR5cGUgPT0gbi5URVhUX05PREVdKQorICAgICAgICAgICAgZWxpZiBub2RlLmxvY2Fs
TmFtZSA9PSAieHdoYXQiOgorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gZ2V0VGV4dE9m
KG5vZGUsICJ0ZXh0IikKKyAgICAgICAgICAgIGVsaWYgbm9kZS5sb2NhbE5hbWUgPT0gInN0YWNr
IjoKKyAgICAgICAgICAgICAgICBhc3NlcnQgZGVzY3JpcHRpb24KKyAgICAgICAgICAgICAgICBz
ZWxmLl9iYWNrdHJhY2VzLmFwcGVuZChbZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdhdGhlckZyYW1lcyhub2RlLCBzb3VyY2VfZGlyKV0pCisg
ICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBOb25lCisgICAgICAgICAgICBlbGlmIG5vZGUu
bG9jYWxOYW1lID09ICJvcmlnaW4iOgorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gZ2V0
VGV4dE9mKG5vZGUsICJ3aGF0IikKKyAgICAgICAgICAgICAgICBzdGFjayA9IG5vZGUuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoInN0YWNrIilbMF0KKyAgICAgICAgICAgICAgICBmcmFtZXMgPSBnYXRo
ZXJGcmFtZXMoc3RhY2ssIHNvdXJjZV9kaXIpCisgICAgICAgICAgICAgICAgc2VsZi5fYmFja3Ry
YWNlcy5hcHBlbmQoW2Rlc2NyaXB0aW9uLCBmcmFtZXNdKQorICAgICAgICAgICAgICAgIGRlc2Ny
aXB0aW9uID0gTm9uZQorICAgICAgICAgICAgICAgIHN0YWNrID0gTm9uZQorICAgICAgICAgICAg
ICAgIGZyYW1lcyA9IE5vbmUKKyAgICAgICAgICAgIGVsaWYgZGVzY3JpcHRpb24gYW5kIG5vZGUu
bG9jYWxOYW1lICE9IE5vbmU6CisgICAgICAgICAgICAgICAgIyBUaGUgbGFzdGVzdCBkZXNjcmlw
dGlvbiBoYXMgbm8gc3RhY2ssCisgICAgICAgICAgICAgICAgIyBlLmcuICJBZGRyZXNzIDB4Mjgg
aXMgdW5rbm93biIKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRpdGlvbmFsLmFwcGVuZChkZXNj
cmlwdGlvbikKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IE5vbmUKKworICAgICAgICAg
ICAgaWYgbm9kZS5sb2NhbE5hbWUgPT0gInN1cHByZXNzaW9uIjoKKyAgICAgICAgICAgICAgICBz
ZWxmLl9zdXBwcmVzc2lvbiA9IGdldENEQVRBT2Yobm9kZSwgInJhd3RleHQiKQorCisgICAgZGVm
IF9fc3RyX18oc2VsZik6CisgICAgICAgICcnJyBQcmV0dHkgcHJpbnQgdGhlIHR5cGUgYW5kIGJh
Y2t0cmFjZShzKSBvZiB0aGlzIHNwZWNpZmljIGVycm9yLAorICAgICAgICAgICAgICAgIGluY2x1
ZGluZyBzdXBwcmVzc2lvbiAod2hpY2ggaXMganVzdCBhIG1hbmdsZWQgYmFja3RyYWNlKS4nJycK
KyAgICAgICAgb3V0cHV0ID0gIiIKKyAgICAgICAgaWYgKHNlbGYuX2NvbW1hbmRsaW5lKToKKyAg
ICAgICAgICAgIG91dHB1dCArPSBzZWxmLl9jb21tYW5kbGluZSArICJcbiIKKworICAgICAgICBv
dXRwdXQgKz0gc2VsZi5fa2luZCArICJcbiIKKyAgICAgICAgZm9yIGJhY2t0cmFjZSBpbiBzZWxm
Ll9iYWNrdHJhY2VzOgorICAgICAgICAgICAgb3V0cHV0ICs9IGJhY2t0cmFjZVswXSArICJcbiIK
KyAgICAgICAgICAgIGZpbHRlciA9IHN1YnByb2Nlc3MuUG9wZW4oImMrK2ZpbHQgLW4iLCBzdGRp
bj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERP
VVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2hlbGw9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjbG9zZV9mZHM9VHJ1ZSkKKyAgICAgICAgICAgIGJ1ZiA9ICIiCisgICAgICAgICAg
ICBmb3IgZnJhbWUgaW4gYmFja3RyYWNlWzFdOgorICAgICAgICAgICAgICAgIGJ1ZiArPSAoZnJh
bWVbRlVOQ1RJT05fTkFNRV0gb3IgXAorICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVbSU5T
VFJVQ1RJT05fUE9JTlRFUl0pICsgIlxuIgorICAgICAgICAgICAgKHN0ZG91dGJ1Ziwgc3RkZXJy
YnVmKSA9IGZpbHRlci5jb21tdW5pY2F0ZShidWYuZW5jb2RlKCdsYXRpbi0xJykpCisgICAgICAg
ICAgICBkZW1hbmdsZWRfbmFtZXMgPSBzdGRvdXRidWYuc3BsaXQoIlxuIikKKworICAgICAgICAg
ICAgaSA9IDAKKyAgICAgICAgICAgIGZvciBmcmFtZSBpbiBiYWNrdHJhY2VbMV06CisgICAgICAg
ICAgICAgICAgb3V0cHV0ICs9ICgiICAgICIgKyBkZW1hbmdsZWRfbmFtZXNbaV0pCisgICAgICAg
ICAgICAgICAgaSA9IGkgKyAxCisKKyAgICAgICAgICAgICAgICBnbG9iYWwgVGhlQWRkcmVzc1Rh
YmxlCisgICAgICAgICAgICAgICAgaWYgVGhlQWRkcmVzc1RhYmxlICE9IE5vbmUgYW5kIGZyYW1l
W1NSQ19GSUxFX0RJUl0gPT0gIiI6CisgICAgICAgICAgICAgICAgICAgICMgVHJ5IHVzaW5nIGdk
YgorICAgICAgICAgICAgICAgICAgICBmb28gPSBUaGVBZGRyZXNzVGFibGUuR2V0RmlsZUxpbmUo
CisgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZVtPQkpFQ1RfRklMRV0sCisgICAgICAgICAg
ICAgICAgICAgICAgICBmcmFtZVtJTlNUUlVDVElPTl9QT0lOVEVSXSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgZm9vWzBdICE9IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQg
Kz0gKCIgKCIgKyBmb29bMF0gKyAiOiIgKyBmb29bMV0gKyAiKSIpCisgICAgICAgICAgICAgICAg
ZWxpZiBmcmFtZVtTUkNfRklMRV9ESVJdICE9ICIiOgorICAgICAgICAgICAgICAgICAgICBvdXRw
dXQgKz0gKCIgKCIgKyBmcmFtZVtTUkNfRklMRV9ESVJdICsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiLyIgKyBmcmFtZVtTUkNfRklMRV9OQU1FXSArCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIjoiICsgZnJhbWVbU1JDX0xJTkVdICsgIikiKQorICAgICAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSAiICgiICsgZnJhbWVbT0JK
RUNUX0ZJTEVdICsgIikiCisgICAgICAgICAgICAgICAgb3V0cHV0ICs9ICJcbiIKKworICAgICAg
ICBmb3IgYWRkaXRpb25hbCBpbiBzZWxmLl9hZGRpdGlvbmFsOgorICAgICAgICAgICAgb3V0cHV0
ICs9IGFkZGl0aW9uYWwgKyAiXG4iCisKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3N1cHByZXNzaW9u
ICE9IE5vbmUsICJZb3VyIFZhbGdyaW5kIGRvZXNuJ3QgZ2VuZXJhdGUgIiBcCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cHByZXNzaW9ucyAtIGlzIGl0IHRv
byBvbGQ/IgorCisgICAgICAgIGlmIHNlbGYuX3Rlc3RjYXNlOgorICAgICAgICAgICAgb3V0cHV0
ICs9ICJUaGUgcmVwb3J0IGNhbWUgZnJvbSB0aGUgYCVzYCB0ZXN0LlxuIiAlIHNlbGYuX3Rlc3Rj
YXNlCisgICAgICAgIG91dHB1dCArPSAiU3VwcHJlc3Npb24gKGVycm9yIGhhc2g9IyUwMTZYIyk6
XG4iICUgc2VsZi5FcnJvckhhc2goKQorICAgICAgICBvdXRwdXQgKz0gKCIgIEZvciBtb3JlIGlu
Zm8gb24gdXNpbmcgc3VwcHJlc3Npb25zIHNlZSAiCisgICAgICAgICAgICAgICAgICAgICAgImh0
dHA6Ly9kZXYuY2hyb21pdW0ub3JnL2RldmVsb3BlcnMvdHJlZS1zaGVyaWZmcy8iCisgICAgICAg
ICAgICAgICAgICAgICAgInNoZXJpZmYtZGV0YWlscy1jaHJvbWl1bS9tZW1vcnktc2hlcmlmZiMi
CisgICAgICAgICAgICAgICAgICAgICAgIlRPQy1TdXBwcmVzc2luZy1tZW1vcnktcmVwb3J0cyIp
CisKKyAgICAgICAgIyBXaWRlbiBzdXBwcmVzc2lvbiBzbGlnaHRseSB0byBtYWtlIHBvcnRhYmxl
IGJldHdlZW4gbWFjIGFuZCBsaW51eAorICAgICAgICAjIFRPRE8odGltdXJycnIpOiBPb3BzLCB0
aGVzZSB0cmFuc2Zvcm1hdGlvbnMgc2hvdWxkIGhhcHBlbgorICAgICAgICAjIEJFRk9SRSBjYWxj
dWxhdGluZyB0aGUgaGFzaCEKKyAgICAgICAgc3VwcCA9IHNlbGYuX3N1cHByZXNzaW9uCisgICAg
ICAgIHN1cHAgPSBzdXBwLnJlcGxhY2UoImZ1bjpfWm53aiIsICJmdW46X1pudyoiKQorICAgICAg
ICBzdXBwID0gc3VwcC5yZXBsYWNlKCJmdW46X1pud20iLCAiZnVuOl9abncqIikKKyAgICAgICAg
c3VwcCA9IHN1cHAucmVwbGFjZSgiZnVuOl9abmFqIiwgImZ1bjpfWm5hKiIpCisgICAgICAgIHN1
cHAgPSBzdXBwLnJlcGxhY2UoImZ1bjpfWm5hbSIsICJmdW46X1puYSoiKQorCisgICAgICAgICMg
U3BsaXQgaW50byBsaW5lcyBzbyB3ZSBjYW4gZW5mb3JjZSBsZW5ndGggbGltaXRzCisgICAgICAg
IHN1cHBsaW5lcyA9IHN1cHAuc3BsaXQoIlxuIikKKyAgICAgICAgc3VwcCA9IE5vbmUgICAgIyB0
byBhdm9pZCByZS11c2UKKworICAgICAgICAjIFRydW5jYXRlIGF0IGxpbmUgMjYgKFZHX01BWF9T
VVBQX0NBTExFUlMgcGx1cyAyIGZvciBuYW1lIGFuZCB0eXBlKQorICAgICAgICAjIG9yIGF0IHRo
ZSBmaXJzdCAnYm9yaW5nJyBjYWxsZXIuCisgICAgICAgICMgKGh0dHBzOi8vYnVncy5rZGUub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTk0NjggcHJvcG9zZXMgcmFpc2luZworICAgICAgICAjIFZHX01B
WF9TVVBQX0NBTExFUlMsIGJ1dCB3ZSdyZSBwcm9iYWJseSBmaW5lIHdpdGggaXQgYXMgaXMuKQor
ICAgICAgICBuZXdsZW4gPSBtaW4oMjYsIGxlbihzdXBwbGluZXMpKQorCisgICAgICAgICMgRHJv
cCBib3JpbmcgZnJhbWVzIGFuZCBhbGwgdGhlIGZvbGxvd2luZy4KKyAgICAgICAgZW5vdWdoX2Zy
YW1lcyA9IEZhbHNlCisgICAgICAgIGZvciBmcmFtZW5vIGluIHJhbmdlKG5ld2xlbik6CisgICAg
ICAgICAgICBmb3IgYm9yaW5nX2NhbGxlciBpbiBfQk9SSU5HX0NBTExFUlM6CisgICAgICAgICAg
ICAgICAgaWYgcmUubWF0Y2goIl4gK2Z1bjolcyQiICUgYm9yaW5nX2NhbGxlciwgc3VwcGxpbmVz
W2ZyYW1lbm9dKToKKyAgICAgICAgICAgICAgICAgICAgbmV3bGVuID0gZnJhbWVubworICAgICAg
ICAgICAgICAgICAgICBlbm91Z2hfZnJhbWVzID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBi
cmVhaworICAgICAgICAgICAgaWYgZW5vdWdoX2ZyYW1lczoKKyAgICAgICAgICAgICAgICBicmVh
aworICAgICAgICBpZiAobGVuKHN1cHBsaW5lcykgPiBuZXdsZW4pOgorICAgICAgICAgICAgc3Vw
cGxpbmVzID0gc3VwcGxpbmVzWzA6bmV3bGVuXQorICAgICAgICAgICAgc3VwcGxpbmVzLmFwcGVu
ZCgifSIpCisKKyAgICAgICAgZm9yIGZyYW1lIGluIHJhbmdlKGxlbihzdXBwbGluZXMpKToKKyAg
ICAgICAgICAgICMgUmVwbGFjZSB0aGUgYWx3YXlzLWNoYW5naW5nIGFub255bW91cyBuYW1lc3Bh
Y2UgcHJlZml4IHdpdGggIioiLgorICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCIoICtmdW46KV9a
Ti4qX0dMT0JBTF9fTl8uKlwuY2NfIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIlswLTlhLWZBLUZdezh9X1swLTlhLWZBLUZdezh9KC4qKSIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3VwcGxpbmVzW2ZyYW1lXSkKKyAgICAgICAgICAgIGlm
IG06CisgICAgICAgICAgICAgICAgc3VwcGxpbmVzW2ZyYW1lXSA9ICIqIi5qb2luKG0uZ3JvdXBz
KCkpCisKKyAgICAgICAgb3V0cHV0ICs9ICJcbiIuam9pbihzdXBwbGluZXMpICsgIlxuIgorCisg
ICAgICAgIHJldHVybiBvdXRwdXQKKworICAgIGRlZiBVbmlxdWVTdHJpbmcoc2VsZik6CisgICAg
ICAgICcnJyBTdHJpbmcgdG8gdXNlIGZvciBvYmplY3QgaWRlbnRpdHkuIERvbid0IHByaW50IHRo
aXMsIHVzZSBzdHIob2JqKQorICAgICAgICBpbnN0ZWFkLicnJworICAgICAgICByZXAgPSBzZWxm
Ll9raW5kICsgIiAiCisgICAgICAgIGZvciBiYWNrdHJhY2UgaW4gc2VsZi5fYmFja3RyYWNlczoK
KyAgICAgICAgICAgIGZvciBmcmFtZSBpbiBiYWNrdHJhY2VbMV06CisgICAgICAgICAgICAgICAg
cmVwICs9IGZyYW1lW0ZVTkNUSU9OX05BTUVdCisKKyAgICAgICAgICAgICAgICBpZiBmcmFtZVtT
UkNfRklMRV9ESVJdICE9ICIiOgorICAgICAgICAgICAgICAgICAgICByZXAgKz0gZnJhbWVbU1JD
X0ZJTEVfRElSXSArICIvIiArIGZyYW1lW1NSQ19GSUxFX05BTUVdCisgICAgICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVwICs9IGZyYW1lW09CSkVDVF9GSUxFXQorCisg
ICAgICAgIHJldHVybiByZXAKKworICAgICMgVGhpcyBpcyBhIGRldmljZS1pbmRlcGVuZGVudCBo
YXNoIGlkZW50aWZ5aW5nIHRoZSBzdXBwcmVzc2lvbi4KKyAgICAjIEJ5IHByaW50aW5nIG91dCB0
aGlzIGhhc2ggd2UgY2FuIGZpbmQgZHVwbGljYXRlIHJlcG9ydHMgYmV0d2VlbiB0ZXN0cyBhbmQK
KyAgICAjIGRpZmZlcmVudCBzaGFyZHMgcnVubmluZyBvbiBtdWx0aXBsZSBidWlsZGJvdHMKKyAg
ICBkZWYgRXJyb3JIYXNoKHNlbGYpOgorICAgICAgICByZXR1cm4gaW50KGhhc2hsaWIubWQ1KHNl
bGYuVW5pcXVlU3RyaW5nKCkpLmhleGRpZ2VzdCgpWzoxNl0sIDE2KQorCisgICAgZGVmIF9faGFz
aF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLlVuaXF1ZVN0cmluZygpKQorCisg
ICAgZGVmIF9fZXFfXyhzZWxmLCByaHMpOgorICAgICAgICByZXR1cm4gc2VsZi5VbmlxdWVTdHJp
bmcoKSA9PSByaHMKKworCitkZWYgbG9nX2lzX2ZpbmlzaGVkKGYsIGZvcmNlX2ZpbmlzaCk6Cisg
ICAgZi5zZWVrKDApCisgICAgcHJldl9saW5lID0gIiIKKyAgICB3aGlsZSBUcnVlOgorICAgICAg
ICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgIGlmIGxpbmUgPT0gIiI6CisgICAgICAgICAg
ICBpZiBub3QgZm9yY2VfZmluaXNoOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAg
ICAgICAgICAgIyBPa2F5LCB0aGUgbG9nIGlzIG5vdCBmaW5pc2hlZCBidXQgd2UgY2FuCisgICAg
ICAgICAgICAjIG1ha2UgaXQgdXAgdG8gYmUgcGFyc2VhYmxlOgorICAgICAgICAgICAgaWYgcHJl
dl9saW5lLnN0cmlwKCkgaW4gWyI8L2Vycm9yPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIjwvZXJyb3Jjb3VudHM+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiPC9zdGF0dXM+Il06CisgICAgICAgICAgICAgICAgZi53cml0ZSgiPC92YWxn
cmluZG91dHB1dD5cbiIpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAg
IHJldHVybiBGYWxzZQorICAgICAgICBpZiAnPC92YWxncmluZG91dHB1dD4nIGluIGxpbmU6Cisg
ICAgICAgICAgICAjIFZhbGdyaW5kIG9mdGVuIGhhcyBnYXJiYWdlIGFmdGVyIDwvdmFsZ3JpbmRv
dXRwdXQ+IHVwb24gY3Jhc2guCisgICAgICAgICAgICBmLnRydW5jYXRlKCkKKyAgICAgICAgICAg
IHJldHVybiBUcnVlCisgICAgICAgIHByZXZfbGluZSA9IGxpbmUKKworCitjbGFzcyBNZW1jaGVj
a0FuYWx5emVyOgorICAgICcnJyBHaXZlbiBhIHNldCBvZiBWYWxncmluZCBYTUwgZmlsZXMsIHBh
cnNlIGFsbCB0aGUgZXJyb3JzIG91dCBvZiB0aGVtLAorICAgIHVuaXF1ZSB0aGVtIGFuZCBvdXRw
dXQgdGhlIHJlc3VsdHMuJycnCisKKyAgICBTQU5JVFlfVEVTVF9TVVBQUkVTU0lPTlMgPSB7Cisg
ICAgICAgICAgICAiTWVtY2hlY2sgc2FuaXR5IHRlc3QgMDEgKG1lbW9yeSBsZWFrKS4iOiAxLAor
ICAgICAgICAgICAgIk1lbWNoZWNrIHNhbml0eSB0ZXN0IDAyIChtYWxsb2MvcmVhZCBsZWZ0KS4i
OiAxLAorICAgICAgICAgICAgIk1lbWNoZWNrIHNhbml0eSB0ZXN0IDAzIChtYWxsb2MvcmVhZCBy
aWdodCkuIjogMSwKKyAgICAgICAgICAgICJNZW1jaGVjayBzYW5pdHkgdGVzdCAwNCAobWFsbG9j
L3dyaXRlIGxlZnQpLiI6IDEsCisgICAgICAgICAgICAiTWVtY2hlY2sgc2FuaXR5IHRlc3QgMDUg
KG1hbGxvYy93cml0ZSByaWdodCkuIjogMSwKKyAgICAgICAgICAgICJNZW1jaGVjayBzYW5pdHkg
dGVzdCAwNiAobmV3L3JlYWQgbGVmdCkuIjogMSwKKyAgICAgICAgICAgICJNZW1jaGVjayBzYW5p
dHkgdGVzdCAwNyAobmV3L3JlYWQgcmlnaHQpLiI6IDEsCisgICAgICAgICAgICAiTWVtY2hlY2sg
c2FuaXR5IHRlc3QgMDggKG5ldy93cml0ZSBsZWZ0KS4iOiAxLAorICAgICAgICAgICAgIk1lbWNo
ZWNrIHNhbml0eSB0ZXN0IDA5IChuZXcvd3JpdGUgcmlnaHQpLiI6IDEsCisgICAgICAgICAgICAi
TWVtY2hlY2sgc2FuaXR5IHRlc3QgMTAgKHdyaXRlIGFmdGVyIGZyZWUpLiI6IDEsCisgICAgICAg
ICAgICAiTWVtY2hlY2sgc2FuaXR5IHRlc3QgMTEgKHdyaXRlIGFmdGVyIGRlbGV0ZSkuIjogMSwK
KyAgICAgICAgICAgICJNZW1jaGVjayBzYW5pdHkgdGVzdCAxMiAoYXJyYXkgZGVsZXRlZCB3aXRo
b3V0IFtdKS4iOiAxLAorICAgICAgICAgICAgIk1lbWNoZWNrIHNhbml0eSB0ZXN0IDEzIChzaW5n
bGUgZWxlbWVudCBkZWxldGVkIHdpdGggW10pLiI6IDEsCisgICAgICAgICAgICAiTWVtY2hlY2sg
c2FuaXR5IHRlc3QgMTQgKG1hbGxvYy9yZWFkIHVuaW5pdCkuIjogMSwKKyAgICAgICAgICAgICJN
ZW1jaGVjayBzYW5pdHkgdGVzdCAxNSAobmV3L3JlYWQgdW5pbml0KS4iOiAxLAorICAgIH0KKwor
ICAgICMgTWF4IHRpbWUgdG8gd2FpdCBmb3IgbWVtY2hlY2sgbG9ncyB0byBjb21wbGV0ZS4KKyAg
ICBMT0dfQ09NUExFVElPTl9USU1FT1VUID0gMTgwLjAKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBzb3VyY2VfZGlyLCBzaG93X2FsbF9sZWFrcz1GYWxzZSwgdXNlX2dkYj1GYWxzZSk6CisgICAg
ICAgICcnJ0NyZWF0ZSBhIHBhcnNlciBmb3IgTWVtY2hlY2sgbG9ncy4KKworICAgICAgICBBcmdz
OgorICAgICAgICAgICAgc291cmNlX2RpcjogUGF0aCB0byB0b3Agb2Ygc291cmNlIHRyZWUgZm9y
IHRoaXMgYnVpbGQKKyAgICAgICAgICAgIHNob3dfYWxsX2xlYWtzOiBXaGV0aGVyIHRvIHNob3cg
ZXZlbiBsZXNzIGltcG9ydGFudCBsZWFrcworICAgICAgICAgICAgdXNlX2dkYjogV2hldGhlciB0
byB1c2UgZ2RiIHRvIHJlc29sdmUgc291cmNlIGZpbGVuYW1lcyBhbmQgbGluZQorICAgICAgICAg
ICAgICAgICAgICAgbnVtYmVycyBpbiB0aGUgcmVwb3J0IHN0YWNrdHJhY2VzCisgICAgICAgICcn
JworICAgICAgICBzZWxmLl9zb3VyY2VfZGlyID0gc291cmNlX2RpcgorICAgICAgICBzZWxmLl9z
aG93X2FsbF9sZWFrcyA9IHNob3dfYWxsX2xlYWtzCisgICAgICAgIHNlbGYuX3VzZV9nZGIgPSB1
c2VfZ2RiCisKKyAgICAgICAgIyBDb250YWlucyB0aGUgc2V0IG9mIHVuaXF1ZSBlcnJvcnMKKyAg
ICAgICAgc2VsZi5fZXJyb3JzID0gc2V0KCkKKworICAgICAgICAjIENvbnRhaW5zIHRoZSB0aW1l
IHdoZW4gdGhlIHdlIHN0YXJ0ZWQgYW5hbHl6aW5nIHRoZSBmaXJzdCBsb2cgZmlsZS4KKyAgICAg
ICAgIyBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gc2tpcCBpbmNvbXBsZXRlIGxvZ3MgYWZ0ZXIg
c29tZSB0aW1lb3V0LgorICAgICAgICBzZWxmLl9hbmFseXplX3N0YXJ0X3RpbWUgPSBOb25lCisK
KyAgICBkZWYgUmVwb3J0KHNlbGYsIGZpbGVzLCB0ZXN0Y2FzZSwgY2hlY2tfc2FuaXR5PUZhbHNl
KToKKyAgICAgICAgJycnUmVhZHMgaW4gYSBzZXQgb2YgZmlsZXMgYW5kIHByaW50cyBNZW1jaGVj
ayByZXBvcnQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGZpbGVzOiBBIGxpc3Qgb2Yg
ZmlsZW5hbWVzLgorICAgICAgICAgICAgY2hlY2tfc2FuaXR5OiBpZiB0cnVlLCBzZWFyY2ggZm9y
IFNBTklUWV9URVNUX1NVUFBSRVNTSU9OUworICAgICAgICAnJycKKyAgICAgICAgIyBCZXlvbmQg
dGhlIGRldGFpbGVkIGVycm9ycyBwYXJzZWQgYnkgVmFsZ3JpbmRFcnJvciBhYm92ZSwKKyAgICAg
ICAgIyB0aGUgeG1sIGZpbGUgY29udGFpbiByZWNvcmRzIGRlc2NyaWJpbmcgc3VwcHJlc3Npb25z
IHRoYXQgd2VyZSB1c2VkOgorICAgICAgICAjIDxzdXBwY291bnRzPgorICAgICAgICAjICAgIDxw
YWlyPgorICAgICAgICAjICAgICAgICA8Y291bnQ+Mjg8L2NvdW50PgorICAgICAgICAjICAgICAg
ICA8bmFtZT5wYW5nb19mb250X2xlYWtfdG9kbzwvbmFtZT4KKyAgICAgICAgIyAgICA8L3BhaXI+
CisgICAgICAgICMgICAgPHBhaXI+CisgICAgICAgICMgICAgICAgIDxjb3VudD4zNzg8L2NvdW50
PgorICAgICAgICAjICAgICAgICA8bmFtZT5idWdfMTMyNDM8L25hbWU+CisgICAgICAgICMgICAg
PC9wYWlyPgorICAgICAgICAjIDwvc3VwcGNvdW50cworICAgICAgICAjIENvbGxlY3QgdGhlc2Ug
YW5kIHByaW50IHRoZW0gYXQgdGhlIGVuZC4KKyAgICAgICAgIworICAgICAgICAjIFdpdGggb3Vy
IHBhdGNoIGZvciBodHRwczovL2J1Z3Mua2RlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1MDAwIGlu
LAorICAgICAgICAjIHRoZSBmaWxlIGFsc28gaW5jbHVkZXMgcmVjb3JkcyBvZiB0aGUgZm9ybQor
ICAgICAgICAjIDxsb2FkX29iaj48b2JqPi91c3IvbGliL2xpYmdjY19zLjEuZHlsaWI8L29iaj48
aXA+MHgyNzAwMDwvaXA+PC9sb2FkX29iaj4KKyAgICAgICAgIyBnaXZpbmcgdGhlIGZpbGVuYW1l
IGFuZCBsb2FkIGFkZHJlc3Mgb2YgZWFjaCBiaW5hcnkgdGhhdCB3YXMgbWFwcGVkCisgICAgICAg
ICMgaW50byB0aGUgcHJvY2Vzcy4KKworICAgICAgICBnbG9iYWwgVGhlQWRkcmVzc1RhYmxlCisg
ICAgICAgIGlmIHNlbGYuX3VzZV9nZGI6CisgICAgICAgICAgICBUaGVBZGRyZXNzVGFibGUgPSBn
ZGJfaGVscGVyLkFkZHJlc3NUYWJsZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBUaGVB
ZGRyZXNzVGFibGUgPSBOb25lCisgICAgICAgIGN1cl9yZXBvcnRfZXJyb3JzID0gc2V0KCkKKyAg
ICAgICAgc3VwcGNvdW50cyA9IGRlZmF1bHRkaWN0KGludCkKKyAgICAgICAgYmFkZmlsZXMgPSBz
ZXQoKQorCisgICAgICAgIGlmIHNlbGYuX2FuYWx5emVfc3RhcnRfdGltZSA9PSBOb25lOgorICAg
ICAgICAgICAgc2VsZi5fYW5hbHl6ZV9zdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAg
c3RhcnRfdGltZSA9IHNlbGYuX2FuYWx5emVfc3RhcnRfdGltZQorCisgICAgICAgIHBhcnNlX2Zh
aWxlZCA9IEZhbHNlCisgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgIyBX
YWl0IHVwIHRvIHRocmVlIG1pbnV0ZXMgZm9yIHZhbGdyaW5kIHRvIGZpbmlzaCB3cml0aW5nIGFs
bAorICAgICAgICAgICAgIyBmaWxlcywgYnV0IGFmdGVyIHRoYXQsIGp1c3Qgc2tpcCBpbmNvbXBs
ZXRlIGZpbGVzIGFuZCB3YXJuLgorICAgICAgICAgICAgZiA9IG9wZW4oZmlsZSwgInIrIikKKyAg
ICAgICAgICAgIHBpZCA9IHJlLm1hdGNoKCIuKlwuKFswLTldKykkIiwgZmlsZSkKKyAgICAgICAg
ICAgIGlmIHBpZDoKKyAgICAgICAgICAgICAgICBwaWQgPSBwaWQuZ3JvdXBzKClbMF0KKyAgICAg
ICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgIHJ1bm5pbmcgPSBUcnVlCisgICAgICAg
ICAgICBmaXJzdHJ1biA9IFRydWUKKyAgICAgICAgICAgIHNraXAgPSBGYWxzZQorICAgICAgICAg
ICAgb3JpZ3NpemUgPSBvcy5wYXRoLmdldHNpemUoZmlsZSkKKyAgICAgICAgICAgIHdoaWxlIChy
dW5uaW5nIGFuZCBub3QgZm91bmQgYW5kIG5vdCBza2lwIGFuZAorICAgICAgICAgICAgICAgICAg
IChmaXJzdHJ1biBvciAoKHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDwgc2VsZi5MT0dfQ09NUExFVElPTl9USU1FT1VUKSkpOgorICAg
ICAgICAgICAgICAgIGZpcnN0cnVuID0gRmFsc2UKKyAgICAgICAgICAgICAgICBmLnNlZWsoMCkK
KyAgICAgICAgICAgICAgICBpZiBwaWQ6CisgICAgICAgICAgICAgICAgICAgICMgTWFrZSBzdXJl
IHRoZSBwcm9jZXNzIGlzIHN0aWxsIHJ1bm5pbmcgc28gd2UgZG9uJ3Qgd2FpdAorICAgICAgICAg
ICAgICAgICAgICAjIGZvciAzIG1pbnV0ZXMgaWYgaXQgd2FzIGtpbGxlZC4KKyAgICAgICAgICAg
ICAgICAgICAgIyBTZWUgaHR0cDovL2NyYnVnLmNvbS8xNzQ1MworICAgICAgICAgICAgICAgICAg
ICBwc19vdXQgPSBzdWJwcm9jZXNzLlBvcGVuKCJwcyBwICVzIiAlIHBpZCwgc2hlbGw9VHJ1ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3Vi
cHJvY2Vzcy5QSVBFKS5zdGRvdXQKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHBzX291dC5y
ZWFkbGluZXMoKSkgPCAyOgorICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyA9IEZhbHNl
CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2tpcCA9IFRydWUK
KyAgICAgICAgICAgICAgICAgICAgcnVubmluZyA9IEZhbHNlCisgICAgICAgICAgICAgICAgZm91
bmQgPSBsb2dfaXNfZmluaXNoZWQoZiwgRmFsc2UpCisgICAgICAgICAgICAgICAgaWYgbm90IHJ1
bm5pbmcgYW5kIG5vdCBmb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy53YXJuKCJW
YWxncmluZCBwcm9jZXNzIFBJRCA9ICVzIGlzIG5vdCBydW5uaW5nIGJ1dCIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICIgaXRzIFhNTCBsb2cgaGFzIG5vdCBiZWVuIGZpbmlzaGVkIGNvcnJlY3Rs
eS5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICJNYWtlIGl0IHVwIGJ5IGFkZGluZyBzb21l
IGNsb3NpbmcgdGFncyBtYW51YWxseS4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpZCkK
KyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBsb2dfaXNfZmluaXNoZWQoZiwgbm90IHJ1bm5p
bmcpCisgICAgICAgICAgICAgICAgaWYgcnVubmluZyBhbmQgbm90IGZvdW5kOgorICAgICAgICAg
ICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAg
ICAgIGlmIG5vdCBmb3VuZDoKKyAgICAgICAgICAgICAgICBiYWRmaWxlcy5hZGQoZmlsZSkKKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV3c2l6ZSA9IG9zLnBhdGguZ2V0c2l6
ZShmaWxlKQorICAgICAgICAgICAgICAgIGlmIG9yaWdzaXplID4gbmV3c2l6ZSArIDE6CisgICAg
ICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybihzdHIob3JpZ3NpemUgLSBuZXdzaXplKSArCisg
ICAgICAgICAgICAgICAgICAgICAgICAiIGJ5dGVzIG9mIGp1bmsgd2VyZSBhZnRlciA8L3ZhbGdy
aW5kb3V0cHV0PiBpbiAlcyEiICUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUpCisgICAg
ICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBwYXJzZWRfZmlsZSA9IHBhcnNl
KGZpbGUpCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4cGF0RXJyb3IsIGU6CisgICAgICAgICAg
ICAgICAgICAgIHBhcnNlX2ZhaWxlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2lu
Zy53YXJuKCJjb3VsZCBub3QgcGFyc2UgJXM6ICVzIiAlIChmaWxlLCBlKSkKKyAgICAgICAgICAg
ICAgICAgICAgbGluZW5vID0gZS5saW5lbm8gLSAxCisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHRfbGluZXMgPSA1CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHRfc3RhcnQgPSBtYXgoMCwg
bGluZW5vIC0gY29udGV4dF9saW5lcykKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dF9lbmQg
PSBsaW5lbm8gKyBjb250ZXh0X2xpbmVzICsgMQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0
X2ZpbGUgPSBvcGVuKGZpbGUsICJyIikKKyAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFu
Z2UoMCwgY29udGV4dF9zdGFydCk6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0X2Zp
bGUucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShjb250ZXh0
X3N0YXJ0LCBjb250ZXh0X2VuZCk6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0X2Rh
dGEgPSBjb250ZXh0X2ZpbGUucmVhZGxpbmUoKS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgaSAhPSBsaW5lbm86CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2lu
Zy53YXJuKCIgICAgJXMiICUgY29udGV4dF9kYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm4oIj4gJXMiICUg
Y29udGV4dF9kYXRhKQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0X2ZpbGUuY2xvc2UoKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIFRoZUFkZHJl
c3NUYWJsZSAhPSBOb25lOgorICAgICAgICAgICAgICAgICAgICBsb2FkX29ianMgPSBwYXJzZWRf
ZmlsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgibG9hZF9vYmoiKQorICAgICAgICAgICAgICAgICAg
ICBmb3IgbG9hZF9vYmogaW4gbG9hZF9vYmpzOgorICAgICAgICAgICAgICAgICAgICAgICAgb2Jq
ID0gZ2V0VGV4dE9mKGxvYWRfb2JqLCAib2JqIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlw
ID0gZ2V0VGV4dE9mKGxvYWRfb2JqLCAiaXAiKQorICAgICAgICAgICAgICAgICAgICAgICAgVGhl
QWRkcmVzc1RhYmxlLkFkZEJpbmFyeUF0KG9iaiwgaXApCisKKyAgICAgICAgICAgICAgICBjb21t
YW5kbGluZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBwcmVhbWJsZSA9IHBhcnNlZF9maWxlLmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCJwcmVhbWJsZSIpWzBdCisgICAgICAgICAgICAgICAgZm9yIG5v
ZGUgaW4gcHJlYW1ibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmUiKToKKyAgICAgICAgICAg
ICAgICAgICAgaWYgbm9kZS5sb2NhbE5hbWUgPT0gImxpbmUiOgorICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIHggaW4gbm9kZS5jaGlsZE5vZGVzOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIHgubm9kZVR5cGUgPT0gbm9kZS5URVhUX05PREUgYW5kIFwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIkNvbW1hbmQiIGluIHguZGF0YToKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29tbWFuZGxpbmUgPSB4LmRhdGEKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgIHJhd19lcnJvcnMgPSBwYXJz
ZWRfZmlsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZXJyb3IiKQorICAgICAgICAgICAgICAgIGZv
ciByYXdfZXJyb3IgaW4gcmF3X2Vycm9yczoKKyAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUg
InBvc3NpYmxlIiBsZWFrcyBhbmQgSW52YWxpZFJlYWQvV3JpdGUgZm9yIG5vdyBieSBkZWZhdWx0
LgorICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5fc2hvd19hbGxfbGVha3Mgb3IgXAorICAg
ICAgICAgICAgICAgICAgICAgICAgKGdldFRleHRPZihyYXdfZXJyb3IsICJraW5kIikgIT0gIkxl
YWtfUG9zc2libHlMb3N0IikgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChnZXRUZXh0
T2YocmF3X2Vycm9yLCAia2luZCIpICE9ICJMZWFrX1N0aWxsUmVhY2hhYmxlIikgYW5kIFwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIChnZXRUZXh0T2YocmF3X2Vycm9yLCAia2luZCIpICE9ICJJ
bnZhbGlkV3JpdGUiKSBhbmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgKGdldFRleHRPZihy
YXdfZXJyb3IsICJraW5kIikgIT0gIkludmFsaWRSZWFkIikpOgorICAgICAgICAgICAgICAgICAg
ICAgICAgZXJyb3IgPSBWYWxncmluZEVycm9yKHNlbGYuX3NvdXJjZV9kaXIsIHJhd19lcnJvciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kbGlu
ZSwgdGVzdGNhc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnJvciBub3QgaW4gY3Vy
X3JlcG9ydF9lcnJvcnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBoYXZlbid0
IHNlZW4gc3VjaCBlcnJvcnMgZG9pbmcgdGhpcyByZXBvcnQgeWV0CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgZXJyb3IgaW4gc2VsZi5fZXJyb3JzOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAjIC4uLiBidXQgd2Ugc2F3IGl0IGluIGVhcmxpZXIgcmVwb3J0cywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBlLmcuIHByZXZpb3VzIFVJIHRlc3QKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX3JlcG9ydF9lcnJvcnMuYWRkKCJUaGlz
IGVycm9yIHdhcyBhbHJlYWR5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJwcmludGVkIGluIHNvbWUgb3RoZXIgdGVzdCwgIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInNlZSAnaGFzaD0jJTAxNlgjJyIgJSBcCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlcnJvci5FcnJvckhhc2goKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIC4uLiBhbmQg
d2UgaGF2ZW4ndCBzZWVuIGl0IGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg
b3RoZXIgdGVzdHMgYXMgd2VsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9lcnJvcnMuYWRkKGVycm9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJf
cmVwb3J0X2Vycm9ycy5hZGQoZXJyb3IpCisKKyAgICAgICAgICAgICAgICBzdXBwY291bnRsaXN0
ID0gcGFyc2VkX2ZpbGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInN1cHBjb3VudHMiKQorICAgICAg
ICAgICAgICAgIGlmIGxlbihzdXBwY291bnRsaXN0KSA+IDA6CisgICAgICAgICAgICAgICAgICAg
IHN1cHBjb3VudGxpc3QgPSBzdXBwY291bnRsaXN0WzBdCisgICAgICAgICAgICAgICAgICAgIGZv
ciBub2RlIGluIHN1cHBjb3VudGxpc3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhaXIiKToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gZ2V0VGV4dE9mKG5vZGUsICJjb3VudCIpCisg
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gZ2V0VGV4dE9mKG5vZGUsICJuYW1lIikKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN1cHBjb3VudHNbbmFtZV0gKz0gaW50KGNvdW50KQorCisg
ICAgICAgIGlmIGxlbihiYWRmaWxlcykgPiAwOgorICAgICAgICAgICAgbG9nZ2luZy53YXJuKCJ2
YWxncmluZCBkaWRuJ3QgZmluaXNoIHdyaXRpbmcgJWQgZmlsZXM/ISIgJQorICAgICAgICAgICAg
ICAgIGxlbihiYWRmaWxlcykpCisgICAgICAgICAgICBmb3IgZmlsZSBpbiBiYWRmaWxlczoKKyAg
ICAgICAgICAgICAgICBsb2dnaW5nLndhcm4oIkxhc3QgMjAgbGluZXMgb2YgJXMgOiIgJSBmaWxl
KQorICAgICAgICAgICAgICAgIG9zLnN5c3RlbSgidGFpbCAtbiAyMCAnJXMnIDE+JjIiICUgZmls
ZSkKKworICAgICAgICBpZiBwYXJzZV9mYWlsZWQ6CisgICAgICAgICAgICBsb2dnaW5nLmVycm9y
KCJGQUlMISBDb3VsZG4ndCBwYXJzZSBWYWxncmluZCBvdXRwdXQgZmlsZSIpCisgICAgICAgICAg
ICByZXR1cm4gLTIKKworICAgICAgICBjb21tb24uUHJpbnRVc2VkU3VwcHJlc3Npb25zTGlzdChz
dXBwY291bnRzKQorCisgICAgICAgIHJldGNvZGUgPSAwCisgICAgICAgIGlmIGN1cl9yZXBvcnRf
ZXJyb3JzOgorICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiRkFJTCEgVGhlcmUgd2VyZSAlcyBl
cnJvcnM6ICIgJQorICAgICAgICAgICAgICAgIGxlbihjdXJfcmVwb3J0X2Vycm9ycykpCisKKyAg
ICAgICAgICAgIGlmIFRoZUFkZHJlc3NUYWJsZSAhPSBOb25lOgorICAgICAgICAgICAgICAgIFRo
ZUFkZHJlc3NUYWJsZS5SZXNvbHZlQWxsKCkKKworICAgICAgICAgICAgZm9yIGVycm9yIGluIGN1
cl9yZXBvcnRfZXJyb3JzOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoZXJyb3IpCisK
KyAgICAgICAgICAgIHJldGNvZGUgPSAtMQorCisgICAgICAgICMgUmVwb3J0IHRvb2wncyBpbnNh
bml0eSBldmVuIGlmIHRoZXJlIHdlcmUgZXJyb3JzLgorICAgICAgICBpZiBjaGVja19zYW5pdHk6
CisgICAgICAgICAgICByZW1haW5pbmdfc2FuaXR5X3N1cHAgPSBNZW1jaGVja0FuYWx5emVyLlNB
TklUWV9URVNUX1NVUFBSRVNTSU9OUworICAgICAgICAgICAgZm9yIChuYW1lLCBjb3VudCkgaW4g
c3VwcGNvdW50cy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiAobmFtZSBpbiByZW1h
aW5pbmdfc2FuaXR5X3N1cHAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdf
c2FuaXR5X3N1cHBbbmFtZV0gPT0gY291bnQpOgorICAgICAgICAgICAgICAgICAgICBkZWwgcmVt
YWluaW5nX3Nhbml0eV9zdXBwW25hbWVdCisgICAgICAgICAgICBpZiByZW1haW5pbmdfc2FuaXR5
X3N1cHA6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiRkFJTCEgU2FuaXR5IGNoZWNr
IGZhaWxlZCEiKQorICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygiVGhlIGZvbGxvd2luZyB0
ZXN0IGVycm9ycyB3ZXJlIG5vdCBoYW5kbGVkOiAiKQorICAgICAgICAgICAgICAgIGZvciAobmFt
ZSwgY291bnQpIGluIHJlbWFpbmluZ19zYW5pdHlfc3VwcC5pdGVyaXRlbXMoKToKKyAgICAgICAg
ICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCIgICAgKiAlZHggJXMiICUgKGNvdW50LCBuYW1lKSkK
KyAgICAgICAgICAgICAgICByZXRjb2RlID0gLTMKKworICAgICAgICBpZiByZXRjb2RlICE9IDA6
CisgICAgICAgICAgICByZXR1cm4gcmV0Y29kZQorCisgICAgICAgIGxvZ2dpbmcuaW5mbygiUEFT
UyEgTm8gZXJyb3JzIGZvdW5kISIpCisgICAgICAgIHJldHVybiAwCisKKworZGVmIF9tYWluKCk6
CisgICAgJycnRm9yIHRlc3Rpbmcgb25seS4KKyAgICBUaGUgTWVtY2hlY2tBbmFseXplciBjbGFz
cyBzaG91bGQgYmUgaW1wb3J0ZWQgaW5zdGVhZC4KKyAgICAnJycKKyAgICBwYXJzZXIgPSBvcHRw
YXJzZS5PcHRpb25QYXJzZXIoInVzYWdlOiAlcHJvZyBbb3B0aW9uc10gPGZpbGVzIHRvIGFuYWx5
emU+IikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tc291cmNlX2RpciIsCisgICAgICAg
ICAgICAgICAgICAgICAgaGVscD0icGF0aCB0byB0b3Agb2Ygc291cmNlIHRyZWUgZm9yIHRoaXMg
YnVpbGQiCisgICAgICAgICAgICAgICAgICAgICAgIih1c2VkIHRvIG5vcm1hbGl6ZSBzb3VyY2Ug
cGF0aHMgaW4gYmFzZWxpbmUpIikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJz
ZV9hcmdzKCkKKyAgICBpZiBsZW4oYXJncykgPT0gMDoKKyAgICAgICAgcGFyc2VyLmVycm9yKCJu
byBmaWxlbmFtZSBzcGVjaWZpZWQiKQorICAgIGZpbGVuYW1lcyA9IGFyZ3MKKworICAgIGFuYWx5
emVyID0gTWVtY2hlY2tBbmFseXplcihvcHRpb25zLnNvdXJjZV9kaXIsIHVzZV9nZGI9RmFsc2Up
CisgICAgcmV0dXJuIGFuYWx5emVyLlJlcG9ydChmaWxlbmFtZXMsIE5vbmUpCisKKworaWYgX19u
YW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBzeXMuZXhpdChfbWFpbigpKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5CmluZGV4IDgxODRkMjU4N2FiMWQ5
ZDljOGEzNjVjNWYxYmE1MGQwOTY4MDk2OWUuLmU0MjFlN2IyMTg1NjdlNTUxMDU5NDc0ZTA3MTg5
OGIxYjg4YjBiMzggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2
ZXJfcHJvY2Vzcy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3By
b2Nlc3MucHkKQEAgLTMzMSw5ICszMzEsOCBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6
CiAgICAgICAgIGlmIG5vdCBzZWxmLl9wcm9jOgogICAgICAgICAgICAgcmV0dXJuIChOb25lLCBO
b25lKQogCi0gICAgICAgICMgT25seSBib3RoZXIgdG8gY2hlY2sgZm9yIGxlYWtzIG9yIHN0ZGVy
ciBpZiB0aGUgcHJvY2VzcyBpcyBzdGlsbCBydW5uaW5nLgotICAgICAgICBpZiBzZWxmLnBvbGwo
KSBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5fcG9ydC5jaGVja19mb3JfbGVha3Moc2VsZi5u
YW1lKCksIHNlbGYucGlkKCkpCisgICAgICAgIGlzX3J1bm5pbmcgPSBzZWxmLnBvbGwoKSBpcyBO
b25lCisgICAgICAgIHNlbGYuX3BvcnQuY2hlY2tfZm9yX2xlYWtzKHNlbGYubmFtZSgpLCBzZWxm
LnBpZCgpLCBpc19ydW5uaW5nKQogCiAgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCiAgICAgICAg
IGlmIHNlbGYuX3Byb2Muc3RkaW46CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvc2VydmVyX3Byb2Nlc3NfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvc2VydmVyX3Byb2Nlc3NfdW5pdHRlc3QucHkKaW5kZXggNWFkN2QwZWE3ZTY1ZjQxZTVm
ZGM2YmVkYjMxYWM2MWFmMjZjOGY0MS4uYjIzNmU0ZDIwZWMxYTgwMDFhYmQzODRmY2I1OGRkZjVm
OTJjNTk5ZSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9w
cm9jZXNzX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2
ZXJfcHJvY2Vzc191bml0dGVzdC5weQpAQCAtNDcsNyArNDcsNyBAQCBjbGFzcyBUcml2aWFsTW9j
a1BvcnQob2JqZWN0KToKICAgICBkZWYgcmVzdWx0c19kaXJlY3Rvcnkoc2VsZik6CiAgICAgICAg
IHJldHVybiAiL21vY2stcmVzdWx0cyIKIAotICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwg
cHJvY2Vzc19uYW1lLCBwcm9jZXNzX3BpZCk6CisgICAgZGVmIGNoZWNrX2Zvcl9sZWFrcyhzZWxm
LCBwcm9jZXNzX25hbWUsIHByb2Nlc3NfcGlkLCBpc19ydW5uaW5nKToKICAgICAgICAgcGFzcwog
CiAgICAgZGVmIHByb2Nlc3Nfa2lsbF90aW1lKHNlbGYpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvdmFs
Z3JpbmQvbWVtY2hlY2svc3VwcHJlc3Npb25zLnR4dCBiL1Rvb2xzL3ZhbGdyaW5kL21lbWNoZWNr
L3N1cHByZXNzaW9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODFmMWMyZWJhZWY0YmI4NjRiOWY5OTBiMDM1
NjhjOTg5ZjBhMGI0NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3ZhbGdyaW5kL21lbWNoZWNr
L3N1cHByZXNzaW9ucy50eHQKQEAgLTAsMCArMSw2OTMgQEAKKyMgVGhlcmUgYXJlIGZvdXIga2lu
ZHMgb2Ygc3VwcHJlc3Npb25zIGluIHRoaXMgZmlsZS4KKyMgMS4gdGhpcmQgcGFydHkgc3R1ZmYg
d2UgaGF2ZSBubyBjb250cm9sIG92ZXIKKyMKKyMgMi4gaW50ZW50aW9uYWwgdW5pdCB0ZXN0IGVy
cm9ycywgb3Igc3R1ZmYgdGhhdCBpcyBzb21laG93IGEgZmFsc2UgcG9zaXRpdmUKKyMgaW4gb3Vy
IG93biBjb2RlLCBvciBzdHVmZiB0aGF0IGlzIHNvIHRyaXZpYWwgaXQncyBub3Qgd29ydGggZml4
aW5nCisjCisjIDMuIFN1cHByZXNzaW9ucyBmb3IgcmVhbCB3ZWJraXQgYnVncyB0aGF0IGFyZSBu
b3QgeWV0IGZpeGVkLgorIyBUaGVzZSBzaG91bGQgYWxsIGJlIGluIHdlYmtpdCdzIGJ1ZyB0cmFj
a2luZyBzeXN0ZW0gKGJ1dCBhIGZldyBhcmVuJ3QgeWV0KS4KKyMgUGVyaW9kaWNhbGx5IHdlIHNo
b3VsZCBzd2VlcCB0aGlzIGZpbGUgYW5kIHRoZSBidWcgdHJhY2tlciBjbGVhbiBieQorIyBydW5u
aW5nIG92ZXJuaWdodCBhbmQgcmVtb3Zpbmcgb3V0ZGF0ZWQgYnVncy9zdXBwcmVzc2lvbnMuCisj
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworIyAxLiB0aGlyZCBwYXJ0eSBzdHVmZiB3ZSBoYXZlIG5vIGNvbnRy
b2wgb3ZlcgoreworICAgI2d0ayBkZXZlbG9wZXJzIGRvbid0IGxpa2UgY2xlYW5pbmcgdXAgb25l
LXRpbWUgbGVha3MuICBTZWUgaHR0cDovL21haWwuZ25vbWUub3JnL2FyY2hpdmVzL2d0ay1kZXZl
bC1saXN0LzIwMDQtQXByaWwvbXNnMDAyMzAuaHRtbAorICAgZ3RrX2luaXRfY2hlY2sgbGVhayAo
VGhpcmQgUGFydHkpCisgICBNZW1jaGVjazpMZWFrCisgICAuLi4KKyAgIGZ1bjpndGtfaW5pdF9j
aGVjaworfQoreworICAgRm9udGNvbmZpZyBsZWFrCisgICBNZW1jaGVjazpMZWFrCisgICAuLi4K
KyAgIGZ1bjpYTUxfUGFyc2VCdWZmZXIKKyAgIGZ1bjpGY0NvbmZpZ1BhcnNlQW5kTG9hZAorfQor
eworICAgRmNDb25maWdBcHBGb250QWRkRmlsZV9sZWFrCisgICBNZW1jaGVjazpMZWFrCisgICAu
Li4KKyAgIGZ1bjpGY0NvbmZpZ0FwcEZvbnRBZGRGaWxlCit9Cit7CisgICAjIFNlZSBhbHNvIGh0
dHA6Ly93d3cuZ25vbWUub3JnL35qb2hhbi9ndGsuc3VwcHJlc3Npb24KKyAgICMgKHdoaWNoIGhh
cyBhIHNtYXR0ZXJpbmcgb2Ygc2ltaWxhciBwYW5nbyBzdXBwcmVzc2lvbnMpCisgICBwYW5nb19m
b250X2xlYWtfdG9kbworICAgTWVtY2hlY2s6TGVhaworICAgLi4uCisgICBmdW46RmNGb250UmVu
ZGVyUHJlcGFyZQorICAgb2JqOioKKyAgIGZ1bjpwYW5nb19mb250X21hcF9sb2FkX2ZvbnRzZXQK
K30KK3sKKyAgIHBhbmdvX2ZvbnRfbGVha190b2RvXzIKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1
bjptYWxsb2MKKyAgIGZ1bjpnX21hbGxvYworICAgZnVuOmdfc3RyZHVwCisgICBmdW46cGFuZ29f
c2NyaXB0X2dldF9zYW1wbGVfbGFuZ3VhZ2UKKyAgIC4uLgorICAgZnVuOnBhbmdvX2ZvbnRfZ2V0
X21ldHJpY3MKK30KK3sKKyAgIHBhbmdvX2ZvbnRfbGVha190b2RvXzMKKyAgIE1lbWNoZWNrOkxl
YWsKKyAgIC4uLgorICAgZnVuOkZjRm9udFJlbmRlclByZXBhcmUKKyAgIC4uLgorICAgZnVuOnBh
bmdvX2l0ZW1pemVfd2l0aF9iYXNlX2RpcgorfQoreworICAgcGFuZ29fZm9udF9sZWFrX3RvZG9f
NAorICAgTWVtY2hlY2s6TGVhaworICAgLi4uCisgICBmdW46RmNGb250UmVuZGVyUHJlcGFyZQor
ICAgLi4uCisgICBmdW46cGFuZ29fb3RfYnVmZmVyX291dHB1dAorfQoreworICAgcGFuZ29fZm9u
dF9sZWFrX3RvZG9fNQorICAgTWVtY2hlY2s6TGVhaworICAgLi4uCisgICBmdW46RmNGb250UmVu
ZGVyUHJlcGFyZQorICAgLi4uCisgICBmdW46cGFuZ29fY29udGV4dF9nZXRfbWV0cmljcworfQor
eworICAgcGFuZ29fZm9udF9sZWFrX3RvZG9fNgorICAgTWVtY2hlY2s6TGVhaworICAgLi4uCisg
ICBmdW46RmNEZWZhdWx0U3Vic3RpdHV0ZQorICAgLi4uCisgICBmdW46cGFuZ29faXRlbWl6ZV93
aXRoX2Jhc2VfZGlyCit9Cit7CisgICAjIFNpbWlsYXIgdG8gZm9udGNvbmZpZ19idWdfODQyOCBi
ZWxvdy4gUmVwb3J0ZWQgaW4KKyAgICMgaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODIxNQorICAgZm9udGNvbmZpZ19idWdfODIxNQorICAgTWVtY2hlY2s6TGVh
aworICAgZnVuOm1hbGxvYworICAgZnVuOkZjUGF0dGVybk9iamVjdEluc2VydEVsdAorICAgZnVu
OkZjUGF0dGVybk9iamVjdEFkZFdpdGhCaW5kaW5nCit9Cit7CisgICAjIEZvbnRjb25maWcgbGVh
aywgc2VlbiBpbiBzaGFyZCAxNiBvZiAyMCBvZiB1aV90ZXN0cworICAgIyBTZWUgaHR0cHM6Ly9i
dWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQyOAorICAgIyBhbmQgaHR0cDov
L3d3dy5nbm9tZS5vcmcvfmpvaGFuL2d0ay5zdXBwcmVzc2lvbgorICAgZm9udGNvbmZpZ19idWdf
ODQyOAorICAgTWVtY2hlY2s6TGVhaworICAgLi4uCisgICBmdW46cmVhbGxvYworICAgZnVuOkZj
UGF0dGVybk9iamVjdEluc2VydEVsdAorICAgZnVuOkZjUGF0dGVybk9iamVjdEFkZFdpdGhCaW5k
aW5nCit9Cit7CisgICAjIEFub3RoZXIgcGVybXV0YXRpb24gb2YgcHJldmlvdXMgbGVhay4KKyAg
IGZvbnRjb25maWdfYnVnXzg0MjhfMgorICAgTWVtY2hlY2s6TGVhaworICAgLi4uCisgICBmdW46
cmVhbGxvYworICAgZnVuOkZjUGF0dGVybk9iamVjdEluc2VydEVsdAorICAgZnVuOkZjUGF0dGVy
bk9iamVjdEFkZAorfQoreworICAgZm9udGNvbmZpZ19idWcgICAoVGhpcmQgUGFydHkpCisgICBN
ZW1jaGVjazpMZWFrCisgICAuLi4KKyAgIGZ1bjptYWxsb2MKKyAgIGZ1bjpGY0NvbmZpZ1ZhbHVl
cworICAgZnVuOkZjQ29uZmlnVmFsdWVzCisgICAuLi4KKyAgIGZ1bjpGY0NvbmZpZ1ZhbHVlcwor
ICAgZnVuOkZjQ29uZmlnVmFsdWVzCit9Cit7CisgICBidWdfNDYxNzdfYSAoVGhpcmQgUGFydHkp
CisgICBNZW1jaGVjazpMZWFrCisgICAuLi4KKyAgIGZ1bjpGY0NoYXJTZXRPcGVyYXRlCisgICBm
dW46RmNGb250U2V0U29ydAorICAgZnVuOkZjRm9udFNvcnQKKyAgIC4uLgorICAgZnVuOnBhbmdv
X2xheW91dF9nZXRfcGl4ZWxfc2l6ZQorfQoreworICAgYnVnXzQ2MTc3X2IgKFRoaXJkIFBhcnR5
KQorICAgTWVtY2hlY2s6TGVhaworICAgLi4uCisgICBmdW46RmNDaGFyU2V0RmluZExlYWZDcmVh
dGUKKyAgIGZ1bjpGY0NoYXJTZXRBZGRMZWFmCisgICBmdW46RmNDaGFyU2V0T3BlcmF0ZQorICAg
ZnVuOkZjRm9udFNldFNvcnQKKyAgIGZ1bjpGY0ZvbnRTb3J0CisgICAuLi4KKyAgIGZ1bjpwYW5n
b19sYXlvdXRfZ2V0X2l0ZXIKK30KK3sKKyAgIGJ1Z180NjE3N19jIChUaGlyZCBQYXJ0eSkKKyAg
IE1lbWNoZWNrOkxlYWsKKyAgIC4uLgorICAgZnVuOkZjQ2hhclNldEZpbmRMZWFmQ3JlYXRlCisg
ICBmdW46RmNDaGFyU2V0QWRkTGVhZgorICAgZnVuOkZjQ2hhclNldE9wZXJhdGUKKyAgIGZ1bjpG
Y0ZvbnRTZXRTb3J0CisgICBmdW46RmNGb250U29ydAorICAgLi4uCisgICBmdW46cGFuZ29fbGF5
b3V0X2xpbmVfZ2V0X2V4dGVudHMKK30KK3sKKyAgIGJ1Z180NjE3N19kIChUaGlyZCBQYXJ0eSkK
KyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjptYWxsb2MKKyAgIGZ1bjpGY0ZvbnRTZXRDcmVhdGUK
KyAgIGZ1bjpGY0ZvbnRTZXRTb3J0CisgICBmdW46RmNGb250U29ydAorfQoreworICAgYnVnXzQ2
MTc3X2UgKFRoaXJkIFBhcnR5KQorICAgTWVtY2hlY2s6TGVhaworICAgLi4uCisgICBmdW46RmND
aGFyU2V0RmluZExlYWZDcmVhdGUKKyAgIGZ1bjpGY0NoYXJTZXRBZGRDaGFyCit9Cit7CisgICBk
bG9wZW4gbGVhayBvbiBlcnJvci4gU2VlIGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9z
aG93X2J1Zy5jZ2k/aWQ9MTI4NzguCisgICBNZW1jaGVjazpMZWFrCisgICBmdW46Y2FsbG9jCisg
ICBmdW46X2RsZXJyb3JfcnVuCisgICBmdW46ZGxvcGVuQEBHTElCQ18yLjEKK30KK3sKKyAgIF9k
bF9zdGFydCBKdW1wCisgICBNZW1jaGVjazpKdW1wCisgICBvYmo6KgorICAgb2JqOioKKyAgIGZ1
bjpkbF9tYWluCisgICBmdW46X2RsX3N5c2RlcF9zdGFydAorICAgZnVuOl9kbF9zdGFydAorICAg
b2JqOi9saWIveDg2XzY0LWxpbnV4LWdudS9sZC0yLjE1LnNvCisgICBvYmo6KgorICAgb2JqOioK
KyAgIG9iajoqCit9CisKK3sKKyAgIGdsaWJjIGxlYWsuICBTZWUgYWxzbyBodHRwOi8vc291cmNl
cy5yZWRoYXQuY29tL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0yNDUxCisgICBNZW1jaGVjazpM
ZWFrCisgICBmdW46bWFsbG9jCisgICBmdW46X2RsX21hcF9vYmplY3RfZnJvbV9mZAorfQorewor
ICAgIyBhcnJheSBvZiB3ZWFrIHJlZmVyZW5jZXMgZnJlZWQgYnV0IG5vdCBwcm9jZXNzZWQ/Cisg
ICBidWdfMTY1NzYKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIC4uLgorICAgZnVuOmdfb2JqZWN0X3dl
YWtfcmVmCisgICBmdW46Z19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcgorfQoreworICAgaHR0cDov
L3NvdXJjZXMucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTE3MQorICAgTWVt
Y2hlY2s6TGVhaworICAgZnVuOmNhbGxvYworICAgZnVuOmFsbG9jYXRlX2R0dgorICAgZnVuOl9k
bF9hbGxvY2F0ZV90bHMKKyAgIGZ1bjpwdGhyZWFkX2NyZWF0ZUBAR0xJQkNfMi4xCit9CisKK3sK
KyAgIGdfYnVpbGRfZmlsZW5hbWUgZm9yIGZvbnRzIChUaGlyZCBwYXJ0eSkKKyAgIE1lbWNoZWNr
OkxlYWsKKyAgIGZ1bjpyZWFsbG9jCisgICBmdW46Z19yZWFsbG9jCisgICBmdW46Z19zdHJpbmdf
bWF5YmVfZXhwYW5kCisgICBmdW46Z19zdHJpbmdfaW5zZXJ0X2xlbgorICAgZnVuOmdfYnVpbGRf
cGF0aF92YQorICAgZnVuOmdfYnVpbGRfZmlsZW5hbWUKKyAgIGZ1bjpfWkwxNWluaXRpYWxpemVG
b250c1BLYworfQorCisKK3sKKyAgICMgTG9va3MgbGlrZSBhIGxlYWsgaW4gZ3RrJ3MgY29kZSB3
aGVuIGxvYWRpbmcgdGhlIGltIGNvbnRleHQgbW9kdWxlLgorICAgYnVnXzQxMjMxIChUaGlyZCBQ
YXJ0eSkKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIC4uLgorICAgZnVuOm1hbGxvYworICAgZnVuOmdf
bWFsbG9jCisgICBmdW46Z19zdHJkdXAKKyAgIGZ1bjpndGtfaW1fbXVsdGljb250ZXh0X2dldF9z
bGF2ZQorICAgZnVuOmd0a19pbV9tdWx0aWNvbnRleHRfc2V0X2NsaWVudF93aW5kb3cKKyAgIGZ1
bjpndGtfaW1fY29udGV4dF9zZXRfY2xpZW50X3dpbmRvdworfQoreworICAgIyBTZWUgaHR0cDov
L3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xNDAxNS4KKyAgIGJ1Z181
MTc3MCAoVGhpcmQgUGFydHkpCisgICBNZW1jaGVjazpMZWFrCisgICBmdW46Y2FsbG9jCisgICBm
dW46X2RsZXJyb3JfcnVuCisgICBmdW46ZGxzeW0KK30KKworeworICAgZ19xdWFya19mcm9tX3N0
YXRpY19zdHJpbmcgKFRoaXJkIHBhcnR5KQorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOm1hbGxv
YworICAgZnVuOmdfbWFsbG9jCisgICBmdW46Z19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcKKyAg
IGZ1bjpnb2JqZWN0X2luaXRfY3RvcgorICAgZnVuOmNhbGxfaW5pdC5wYXJ0LjAKKyAgIGZ1bjpf
ZGxfaW5pdAorICAgb2JqOi9saWIveDg2XzY0LWxpbnV4LWdudS9sZC0yLjE1LnNvCisgICBvYmo6
KgorICAgb2JqOioKKyAgIG9iajoqCit9CisKK3sKKyAgIGd0a19jc3MgKFRoaXJkIHBhcnR5KQor
ICAgTWVtY2hlY2s6TGVhaworICAgZnVuOnJlYWxsb2MKKyAgIGZ1bjpnX3JlYWxsb2MKKyAgIGZ1
bjpnX3N0cmluZ19tYXliZV9leHBhbmQKKyAgIGZ1bjpnX3N0cmluZ19pbnNlcnRfYworICAgZnVu
Ol9ndGtfY3NzX3BhcnNlcl9yZWFkX2NoYXIKKyAgIGZ1bjpfZ3RrX2Nzc19wYXJzZXJfdHJ5X2lk
ZW50CisgICBmdW46YmluZGluZ3NfdmFsdWVfcGFyc2Vfb25lCisgICBmdW46X2d0a19jc3NfYXJy
YXlfdmFsdWVfcGFyc2UKKyAgIGZ1bjpndGtfY3NzX3Byb3ZpZGVyX2xvYWRfaW50ZXJuYWwKKyAg
IGZ1bjpndGtfY3NzX3Byb3ZpZGVyX2xvYWRfZnJvbV9kYXRhCit9Cit7CisgICAgR3RrIGxlYWtz
IGFuIFgxMSB3aW5kb3cgYnVnXzk2NDAyIChUaGlyZCBwYXJ0eSkKKyAgIE1lbWNoZWNrOkxlYWsK
KyAgIGZ1bjptYWxsb2MKKyAgIGZ1bjpnX21hbGxvYworICAgZnVuOmdfc2xpY2VfYWxsb2MKKyAg
IGZ1bjpnX3NsaWNlX2FsbG9jMAorICAgZnVuOmdfdHlwZV9jcmVhdGVfaW5zdGFuY2UKKyAgIGZ1
bjpnX29iamVjdF9jb25zdHJ1Y3RvcgorICAgZnVuOmdfb2JqZWN0X25ld3YKKyAgIGZ1bjpnX29i
amVjdF9uZXcKKyAgIGZ1bjpfZ2RrX3dpbmRvd19pbXBsX25ldworICAgZnVuOmdka193aW5kb3df
ZW5zdXJlX25hdGl2ZQorICAgZnVuOmdka194MTFfZHJhd2FibGVfZ2V0X3hpZAorfQorCit7Cisg
ICBHdGsgbGVha3MgYSBjYWlybyBjb250ZXh0IChsYXJnZSBsZWFrKQorICAgTWVtY2hlY2s6TGVh
aworICAgZnVuOm1hbGxvYworICAgZnVuOl9jYWlyb19kZWZhdWx0X2NvbnRleHRfY3JlYXRlCisg
ICBmdW46c2V0X2dyaXBfc2hhcGUKKyAgIGZ1bjpyZXNpemVfZ3JpcF9jcmVhdGVfd2luZG93Cisg
ICBmdW46Z3RrX3dpbmRvd19yZWFsaXplCit9CisKK3sKKyAgIGxlYWtzIGluIGJhc2gKKyAgIE1l
bWNoZWNrOkxlYWsKKyAgIC4uLgorICAgb2JqOi9iaW4vYmFzaAorfQoreworICAgRW5jaGFudCBz
cGVsbGluZyAoVGhpcmQgcGFydHkpCisgICBNZW1jaGVjazpMZWFrCisgICBmdW46X1pudyoKKyAg
IC4uLgorICAgb2JqOiovbGliZW5jaGFudC5zby4xLjYuMAorICAgZnVuOmVuY2hhbnRfYnJva2Vy
X2RpY3RfZXhpc3RzCit9CisKK3sKKyAgIEVuY2hhbnQgc3BlbGxpbmcgKFRoaXJkIHBhcnR5KQor
ICAgTWVtY2hlY2s6TGVhaworICAgZnVuOiphbGxvYworICAgLi4uCisgICBvYmo6Ki9saWJlbmNo
YW50LnNvLjEuNi4wCisgICBmdW46ZW5jaGFudF9icm9rZXJfZGljdF9leGlzdHMKK30KKworewor
ICAgQ2Fpcm8gbGVha3MgYSBwYXR0ZXJuX3QqIGluIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZQor
ICAgTWVtY2hlY2s6TGVhaworICAgZnVuOm1hbGxvYworICAgZnVuOmNhaXJvX3BhdHRlcm5fY3Jl
YXRlX2Zvcl9zdXJmYWNlCisgICBmdW46X2NhaXJvX2RlZmF1bHRfY29udGV4dF9zZXRfc291cmNl
X3N1cmZhY2UKKyAgIGZ1bjpjYWlyb19zZXRfc291cmNlX3N1cmZhY2UKK30KKworIyBYUmFuZFJJ
bmZvIG9iamVjdCBzZWVtcyB0byBiZSBsZWFraW5nIGluc2lkZSBYUlJGaW5kRGlzcGxheS4gIFRo
aXMgaGFwcGVucyB0aGUKKyMgZmlyc3QgdGltZSBpdCBpcyBjYWxsZWQsIG5vIG1hdHRlciB3aG8g
dGhlIGNhbGxlciBpcy4gIFdlIGhhdmUgb2JzZXJ2ZWQgdGhpcworIyBwcm9ibGVtIHdpdGggYm90
aCBYUlJTZWxlY3RJbnB1dCBhbmQgWFJSUXVlcnlFeHRlbnNpb24uCit7CisgICBYUlJGaW5kRGlz
cGxheSBsZWFrCisgICBNZW1jaGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICBmdW46WFJSRmlu
ZERpc3BsYXkKK30KK3sKKyAgIEZsYXNoIFBsYXllciBMZWFrCisgICBNZW1jaGVjazpMZWFrCisg
ICAuLi4KKyAgIG9iajovdXNyL2xpYi9mbGFzaHBsdWdpbi1pbnN0YWxsZXIvbGliZmxhc2hwbGF5
ZXIuc28KK30KKworeworICAgT2NjYXNpb25hbCBsZWFrIGluc2lkZSBnZGtfaW5pdCgpCisgICBN
ZW1jaGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICAuLi4KKyAgIGZ1bjpfbmxfZmluZF9kb21h
aW4KKyAgIGZ1bjpfX2RjaWdldHRleHQKKyAgIGZ1bjpnZGtfc2NyZWVuX2NsYXNzX2ludGVybl9p
bml0CisgICBmdW46Z190eXBlX2NsYXNzX3JlZgorICAgZnVuOmdfdHlwZV9jbGFzc19yZWYKKyAg
IGZ1bjpnX29iamVjdF9uZXd2CisgICBmdW46Z19vYmplY3RfbmV3CisgICBmdW46X2dka194MTFf
c2NyZWVuX25ldworICAgZnVuOmdka19kaXNwbGF5X29wZW4KKyAgIGZ1bjpnZGtfZGlzcGxheV9v
cGVuX2RlZmF1bHRfbGliZ3RrX29ubHkKKyAgIGZ1bjpnZGtfaW5pdF9jaGVjaworICAgZnVuOmdk
a19pbml0Cit9CisKK3sKKyAgIExlYWsgaW4gWEtleXN5bVRvU3RyaW5nCisgICBNZW1jaGVjazpM
ZWFrCisgICBmdW46bWFsbG9jCisgICBmdW46WEtleXN5bVRvU3RyaW5nCisgICBmdW46X2dhaWxf
dXRpbF9rZXlfc25vb3BlcgorICAgZnVuOmd0a19tYWluX2RvX2V2ZW50Cit9CisKK3sKKyAgIGds
aWIvZ3RocmVhZCBtYWxsb2MgbGVhayBpbiBjb21wb25lbnQgYnVpbGQKKyAgIE1lbWNoZWNrOkxl
YWsKKyAgIGZ1bjoqYWxsb2MKKyAgIC4uLgorICAgZnVuOmdfdGhyZWFkX3Byb3h5Cit9Cit7Cisg
ICBKYXZhIGNyZWF0ZSBKTkkgbGVhayAoVGhpcmQgcGFydHkpCisgICBNZW1jaGVjazpMZWFrCisg
ICAuLi4KKyAgIGZ1bjpKTklfQ3JlYXRlSmF2YVZNCisgICBmdW46SmF2YU1haW4KK30KKworewor
ICAgSmF2YSBzdGFydCB0aHJlYWQgbGVhayAoVGhpcmQgcGFydHkpCisgICBNZW1jaGVjazpMZWFr
CisgICAuLi4KKyAgIGZ1bjpfWk44Vk1UaHJlYWQzcnVuRXYKKyAgIGZ1bjpfWkwxMGphdmFfc3Rh
cnRQNlRocmVhZAorICAgLi4uCisKK30KKworeworICAgSmF2YSBsZWFrIChvYmopIChUaGlyZCBw
YXJ0eSkKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIC4uLgorICAgb2JqOi91c3IvbGliL2p2bS9qYXZh
LTYtb3Blbmpkay1hbWQ2NC9qcmUvYmluL2phdmEKKyAgIC4uLgorfQoreworICAgT2NjYXNpb25h
bCBPcGVuR0wgbGVha3MgKFRoaXJkIHBhcnR5KQorICAgTWVtY2hlY2s6TGVhaworICAgLi4uCisg
ICBvYmo6Ki9saWJHTC5zby4qCisgICAuLi4KK30KKworeworICAgY2Fpcm8gcGl4bWFuIGltYWdl
IGFsbG9jYXRlCisgICBNZW1jaGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICBmdW46X3BpeG1h
bl9pbWFnZV9hbGxvY2F0ZQorICAgZnVuOnBpeG1hbl9pbWFnZV9jcmVhdGVfYml0cworICAgZnVu
Ol9jYWlyb194bGliX3NobV9zdXJmYWNlX2NyZWF0ZS5pc3JhLjExCit9CisKK3sKKyAgIE5TUyBw
YXJzZSBsZWFrCisgICBNZW1jaGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICBmdW46bnNzX3Bh
cnNlX3NlcnZpY2VfbGlzdAorICAgZnVuOl9fbnNzX2RhdGFiYXNlX2xvb2t1cAorICAgb2JqOioK
K30KKworeworICAgR1N0cmVhbWVyIGluaXQgbGVhaworICAgTWVtY2hlY2s6TGVhaworICAgZnVu
Om1hbGxvYworICAgZnVuOmdfbWFsbG9jCisgICBmdW46Z19pbnRlcm5fc3RyaW5nCisgICBmdW46
X3ByaXZfZ3N0X3JlZ2lzdHJ5X2NodW5rc19sb2FkX3BsdWdpbgorICAgZnVuOmV4Y2hhbmdlX3Bh
Y2tldHMKKyAgIGZ1bjpwbHVnaW5fbG9hZGVyX2xvYWQKKyAgIGZ1bjpnc3RfcmVnaXN0cnlfc2Nh
bl9wbHVnaW5fZmlsZQorICAgZnVuOmdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfbGV2ZWwKKyAgIGZ1
bjpnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2ludGVybmFsCisgICBmdW46Z3N0X3VwZGF0ZV9yZWdp
c3RyeQorICAgZnVuOmluaXRfcG9zdAorICAgZnVuOmdfb3B0aW9uX2NvbnRleHRfcGFyc2UKKyAg
IGZ1bjpnc3RfaW5pdF9jaGVjaworCit9CisKK3sKKyAgIGdfdGhyZWFkIGxlYWtzIGZvciBhc3lu
YyB0YXNrcworICAgTWVtY2hlY2s6TGVhaworICAgZnVuOm1hbGxvYworICAgZnVuOmdfbWFsbG9j
CisgICBmdW46Z19zbGljZV9hbGxvYworICAgZnVuOmdfc2xpY2VfYWxsb2MwCisgICBmdW46Z19z
eXN0ZW1fdGhyZWFkX25ldworICAgZnVuOmdfdGhyZWFkX25ld19pbnRlcm5hbAorICAgZnVuOmdf
dGhyZWFkX3Bvb2xfc3RhcnRfdGhyZWFkCisgICBmdW46Z190aHJlYWRfcG9vbF9wdXNoCisgICBm
dW46Z190YXNrX3N0YXJ0X3Rhc2tfdGhyZWFkCisgICBmdW46Z190YXNrX3J1bl9pbl90aHJlYWQK
K30KKworeworICAgTGFyZ2UgbGVhayBpbiBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZQorICAg
TWVtY2hlY2s6TGVhaworICAgZnVuOm1hbGxvYworICAgZnVuOl9jYWlyb19pbWFnZV9zdXJmYWNl
X2NyZWF0ZV9mb3JfcGl4bWFuX2ltYWdlCisgICBmdW46X2NhaXJvX2ltYWdlX3N1cmZhY2VfY3Jl
YXRlX3dpdGhfcGl4bWFuX2Zvcm1hdAorICAgZnVuOl9aTjdXZWJDb3JlMjFjb3B5Q2Fpcm9JbWFn
ZVN1cmZhY2VFUDE0X2NhaXJvX3N1cmZhY2UKK30KKworeworICAgTWVtb3J5IGlzIG5vdCBmcmVl
ZCBmcm9tIHRoZSBET00gT2JqZWN0IENhY2hlIChwcm9iYWJseSBpbnRlbnRpb25hbCkKKyAgIE1l
bWNoZWNrOkxlYWsKKyAgIGZ1bjptYWxsb2MKKyAgIGZ1bjpnX21hbGxvYworICAgZnVuOmdfc2xp
Y2VfYWxsb2MKKyAgIGZ1bjpfWk42V2ViS2l0MTRET01PYmplY3RDYWNoZTNwdXRFUHZTMV8KKyAg
IGZ1bjpfWkwzM3dlYmtpdF9kb21fZG9tX3dpbmRvd19jb25zdHJ1Y3Rvcm1qUDIyX0dPYmplY3RD
b25zdHJ1Y3RQYXJhbQorICAgZnVuOmdfb2JqZWN0X25ld3YKKyAgIGZ1bjpnX29iamVjdF9uZXdf
dmFsaXN0CisgICBmdW46Z19vYmplY3RfbmV3CisgICBmdW46X1pONldlYktpdDEzd3JhcERPTVdp
bmRvd0VQTjdXZWJDb3JlOURPTVdpbmRvd0UKKyAgIGZ1bjpfWk42V2ViS2l0M2tpdEVQTjdXZWJD
b3JlOURPTVdpbmRvd0UKKyAgIGZ1bjp3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kZWZhdWx0X3Zp
ZXcKKyAgIGZ1bjpfWjIzZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb25QMTVfV2ViS2l0V2ViRnJhbWUK
KyAgIGZ1bjpfWjRkdW1wdgorICAgZnVuOl9aTDI3dG9wTG9hZGluZ0ZyYW1lTG9hZEZpbmlzaGVk
dgorICAgZnVuOl9aTDI2d2ViRnJhbWVMb2FkU3RhdHVzTm90aWZpZWRQMTVfV2ViS2l0V2ViRnJh
bWVQdgorICAgZnVuOmdfY2xvc3VyZV9pbnZva2UKKyAgIGZ1bjpzaWduYWxfZW1pdF91bmxvY2tl
ZF9SCisgICBmdW46Z19zaWduYWxfZW1pdF92YWxpc3QKKyAgIGZ1bjpnX3NpZ25hbF9lbWl0Cisg
ICBmdW46Z19vYmplY3RfZGlzcGF0Y2hfcHJvcGVydGllc19jaGFuZ2VkCisgICBmdW46Z19vYmpl
Y3Rfbm90aWZ5CisgICBmdW46X1pONldlYktpdEwxMm5vdGlmeVN0YXR1c0VQMTVfV2ViS2l0V2Vi
RnJhbWUxNldlYktpdExvYWRTdGF0dXMKK30KKworeworICAgQXRrUHJvcGVydHkgaXMgY2FjaGVk
IGJ1dCBub3QgcmVsZWFzZWQgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTE4NTY3I2MyKQorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOm1hbGxvYworICAgZnVu
Ol9aTjNXVEYxMGZhc3RNYWxsb2NFbQorICAgZnVuOl9aTjNXVEYxM0NTdHJpbmdCdWZmZXIxOWNy
ZWF0ZVVuaW5pdGlhbGl6ZWRFbQorICAgZnVuOl9aTjNXVEY3Q1N0cmluZzRpbml0RVBLY20KKyAg
IGZ1bjpfWk4zV1RGN0NTdHJpbmdDMUVQS2NtCisgICBmdW46X1pOSzNXVEY2U3RyaW5nNHV0ZjhF
TlMwXzE0Q29udmVyc2lvbk1vZGVFCisgICBmdW46Y2FjaGVBbmRSZXR1cm5BdGtQcm9wZXJ0eQor
fQorCit7CisgICBBdGtSZWxhdGlvblNldCBpcyBuZXZlciBmcmVlZCBiZWNhdXNlIHRoZSB0YXJn
ZXQgQXRrT2JqZWN0IGlzIGNhY2hlZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTE4NTY3CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICAuLi4KKyAg
IGZ1bjpnX29iamVjdF93ZWFrX3JlZgorICAgZnVuOmF0a19yZWxhdGlvbl9zZXRfcHJvcGVydHkK
KyAgIGZ1bjpnX29iamVjdF9uZXd2CisgICBmdW46Z19vYmplY3RfbmV3X3ZhbGlzdAorICAgZnVu
Omdfb2JqZWN0X25ldworICAgZnVuOmF0a19yZWxhdGlvbl9uZXcKKyAgIGZ1bjphdGtfcmVsYXRp
b25fc2V0X2FkZF9yZWxhdGlvbl9ieV90eXBlCisgICBmdW46X1pMMzFzZXRBdGtSZWxhdGlvblNl
dEZyb21Db3JlT2JqZWN0UE43V2ViQ29yZTE5QWNjZXNzaWJpbGl0eU9iamVjdEVQMTVfQXRrUmVs
YXRpb25TZXQKKyAgIGZ1bjpfWkwzMHdlYmtpdEFjY2Vzc2libGVSZWZSZWxhdGlvblNldFAxMF9B
dGtPYmplY3QKKyAgIGZ1bjpfWk4yMkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQxNHRpdGxlVUlFbGVt
ZW50RXYKK30KKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgMi4gaW50ZW50aW9uYWwgdW5pdCB0ZXN0
IGVycm9ycywgb3Igc3R1ZmYgdGhhdCBpcyBzb21laG93IGEgZmFsc2UgcG9zaXRpdmUKKyMgaW4g
b3VyIG93biBjb2RlLCBvciBzdHVmZiB0aGF0IGlzIHNvIHRyaXZpYWwgaXQncyBub3Qgd29ydGgg
Zml4aW5nCisKKyMgU2VlIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tZW1jaGVja19hbmFs
eXplLnB5IGJlZm9yZSBtb2RpZnlpbmcgc2FuaXR5IHRlc3RzLgoreworICAgTWVtY2hlY2sgc2Fu
aXR5IHRlc3QgMDEgKG1lbW9yeSBsZWFrKS4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjpfWm5h
KgorICAgZnVuOl9aTjRiYXNlMzFUb29sc1Nhbml0eVRlc3RfTWVtb3J5TGVha19UZXN0OFRlc3RC
b2R5RXYKK30KKworeworICAgTWVtY2hlY2sgc2FuaXR5IHRlc3QgMTIgKGFycmF5IGRlbGV0ZWQg
d2l0aG91dCBbXSkuCisgICBNZW1jaGVjazpGcmVlCisgICAuLi4KKyAgIGZ1bjpfWk40YmFzZTQ2
VG9vbHNTYW5pdHlUZXN0X0FycmF5RGVsZXRlZFdpdGhvdXRCcmFjZXNfVGVzdDhUZXN0Qm9keUV2
Cit9Cit7CisgICBNZW1jaGVjayBzYW5pdHkgdGVzdCAxMyAoc2luZ2xlIGVsZW1lbnQgZGVsZXRl
ZCB3aXRoIFtdKS4KKyAgIE1lbWNoZWNrOkZyZWUKKyAgIC4uLgorICAgZnVuOl9aTjRiYXNlNTFU
b29sc1Nhbml0eVRlc3RfU2luZ2xlRWxlbWVudERlbGV0ZWRXaXRoQnJhY2VzX1Rlc3Q4VGVzdEJv
ZHlFdgorfQorCit7CisgICAjIEFjY29yZGluZyB0byBkZ2xhemtvdiwgdGhlc2UgYXJlIG9uZS10
aW1lIGxlYWtzIGFuZCBpbnRlbnRpb25hbC4KKyAgICMgVGhleSBtYXkgZ28gYXdheSBpZiB0aGUg
Y2hhbmdlIHRvIG1vdmUgdGhlc2Ugb2ZmIHRoZSBoZWFwIGxhbmRzLgorICAgYnVnXzE3OTk2IChJ
bnRlbnRpb25hbCkKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIC4uLgorICAgZnVuOl9aTjdXZWJDb3Jl
OFNWR05hbWVzNGluaXRFdgorfQorCit7CisgICAjIFRoaXMgaXMgYW4gb24gZGVtYW5kIGluaXRp
YWxpemF0aW9uIHdoaWNoIGlzIGRvbmUgYW5kIHRoZW4gaW50ZW50aW9uYWxseQorICAgIyBrZXB0
IGFyb3VuZCAobm90IGZyZWVkKSB3aGlsZSB0aGUgcHJvY2VzcyBpcyBydW5uaW5nLgorICAgaW50
ZW50aW9uYWxfV2ViQ29yZV9YTUxOYW1lc19pbml0X2xlYWsKKyAgIE1lbWNoZWNrOkxlYWsKKyAg
IC4uLgorICAgZnVuOl9aTjdXZWJDb3JlOFhNTE5hbWVzNGluaXRFdgorfQoreworICAgIyBUaGlz
IGlzIFdlYktpdCB3aWRlIHRoZWFkaW5nIGluaXRpYWxpemF0aW9uIHdoaWNoIGlzIGludGVudGlv
bmFsbHkga2VwdAorICAgIyBhcm91bmQgKG5vdCBmcmVlZCkgd2hpbGUgdGhlIHByb2Nlc3MgaXMg
cnVubmluZy4KKyAgIGludGVudGlvbmFsX1dURl9UaHJlYWRJZGVudGlmaWVyRGF0YV9pbml0aWFs
aXplX2xlYWsKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIC4uLgorICAgZnVuOl9aTjNXVEYyMFRocmVh
ZElkZW50aWZpZXJEYXRhMTBpbml0aWFsaXplRWoKK30KK3sKKyAgICMgVGhpcyBpcyBXZWJLaXQg
d2lkZSB0aGVhZGluZyBpbml0aWFsaXphdGlvbiB3aGljaCBpcyBpbnRlbnRpb25hbGx5IGtlcHQK
KyAgICMgYXJvdW5kIChub3QgZnJlZWQpIHdoaWxlIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcuCisg
ICBpbnRlbnRpb25hbF9XVEZfd3RmVGhyZWFkRGF0YV9sZWFrCisgICBNZW1jaGVjazpMZWFrCisg
ICAuLi4KKyAgIGZ1bjpfWk4zV1RGMTN3dGZUaHJlYWREYXRhRXYKK30KKworIy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisjIDMuIFN1cHByZXNzaW9ucyBmb3IgcmVhbCB3ZWJraXQgYnVncyB0aGF0IGFyZSBub3Qg
eWV0IGZpeGVkLgorIyBUaGVzZSBzaG91bGQgYWxsIGJlIGluIHdlYmtpdCdzIGJ1ZyB0cmFja2lu
ZyBzeXN0ZW0gKGJ1dCBhIGZldyBhcmVuJ3QgeWV0KS4KKworeworICAgTGVhayB3ZWJraXRBY2Nl
c3NpYmxlTmV3IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTgzODIK
KyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjoqYWxsb2MKKyAgIC4uLgorICAgZnVuOndlYmtpdEFj
Y2Vzc2libGVOZXcKKyAgIGZ1bjpfWk43V2ViQ29yZTEzQVhPYmplY3RDYWNoZTEzYXR0YWNoV3Jh
cHBlckVQTlNfMTlBY2Nlc3NpYmlsaXR5T2JqZWN0RQorfQorCit7CisgICBMZWFrIGF0ayB0aXRs
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4Mzg1CisgICBNZW1j
aGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICBmdW46Z19tYWxsb2MKKyAgIGZ1bjpnX3N0cmR1
cAorICAgZnVuOl9aTDI3d2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0UDhfQXRrVGV4dGlpCisg
ICBmdW46X1pMMjN3ZWJraXRBY2Nlc3NpYmxlR2V0TmFtZVAxMF9BdGtPYmplY3QKK30KKworewor
ICAgTGVhayBQbHVnaW5PYmplY3QgaW4gZXhjZXB0aW9uYWwgY2lyY3Vtc3RhbmNlcyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NTI4CisgICBNZW1jaGVjazpMZWFr
CisgICBmdW46bWFsbG9jCisgICBmdW46X1pMMTRwbHVnaW5BbGxvY2F0ZVA0X05QUFA3TlBDbGFz
cworICAgZnVuOl9OUE5fQ3JlYXRlT2JqZWN0CisgICBmdW46TlBQX05ldworICAgZnVuOl9aTjdX
ZWJDb3JlMTBQbHVnaW5WaWV3NXN0YXJ0RXYKK30KKworeworICAgVGV4dENvZGVjSUNVOjpyZWdp
c3RlckNvZGVjcyBpcyBsZWFraW5nIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTg1MDUKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjptYWxsb2MKKyAgIGZ1bjpfWk4z
V1RGMTBmYXN0TWFsbG9jRW0KKyAgIGZ1bjpfWk4zV1RGMTBmYXN0U3RyRHVwRVBLYworICAgZnVu
Ol9aTjdXZWJDb3JlMTJUZXh0Q29kZWNJQ1UxNHJlZ2lzdGVyQ29kZWNzRVBGdlBLY1BGTjNXVEYx
MFBhc3NPd25QdHJJTlNfOVRleHRDb2RlY0VFRVJLTlNfMTJUZXh0RW5jb2RpbmdFUEt2RVNCX0UK
K30KKworeworICAgV1RGOjpCaXRWZWN0b3IgaXMgbGVha2luZworICAgTWVtY2hlY2s6TGVhawor
ICAgZnVuOm1hbGxvYworICAgZnVuOl9aTjNXVEYxMGZhc3RNYWxsb2NFbQorICAgZnVuOl9aTjNX
VEY5Qml0VmVjdG9yMTNPdXRPZkxpbmVCaXRzNmNyZWF0ZUVtCisgICBmdW46X1pOM1dURjlCaXRW
ZWN0b3IxNXJlc2l6ZU91dE9mTGluZUVtCisgICBmdW46X1pOM1dURjlCaXRWZWN0b3IxMGVuc3Vy
ZVNpemVFbQorICAgZnVuOl9aTjNXVEY5Qml0VmVjdG9yQzFFbQorfQorCit7CisgICBEdW1wUmVu
ZGVyVHJlZSBXZWJLaXRXZWJWaWV3IGlzIGxlYWtlZAorICAgTWVtY2hlY2s6TGVhaworICAgZnVu
Om1hbGxvYworICAgZnVuOmdfbWFsbG9jCisgICBmdW46Z19zbGljZV9hbGxvYworICAgZnVuOmdf
c2xpc3RfcHJlcGVuZAorICAgZnVuOl9aTDEzd2ViVmlld0NyZWF0ZVAxNF9XZWJLaXRXZWJWaWV3
UDE1X1dlYktpdFdlYkZyYW1lCisgICBmdW46d2Via2l0X21hcnNoYWxfT0JKRUNUX19PQkpFQ1QK
KyAgIGZ1bjpnX2Nsb3N1cmVfaW52b2tlCisgICBmdW46c2lnbmFsX2VtaXRfdW5sb2NrZWRfUgor
ICAgZnVuOmdfc2lnbmFsX2VtaXRfdmFsaXN0CisgICBmdW46Z19zaWduYWxfZW1pdF9ieV9uYW1l
CisgICBmdW46X1pONldlYktpdDEyQ2hyb21lQ2xpZW50MTJjcmVhdGVXaW5kb3dFUE43V2ViQ29y
ZTVGcmFtZUVSS05TMV8xNkZyYW1lTG9hZFJlcXVlc3RFUktOUzFfMTRXaW5kb3dGZWF0dXJlc0VS
S05TMV8xNk5hdmlnYXRpb25BY3Rpb25FCisgICBmdW46X1pOSzdXZWJDb3JlNkNocm9tZTEyY3Jl
YXRlV2luZG93RVBOU181RnJhbWVFUktOU18xNkZyYW1lTG9hZFJlcXVlc3RFUktOU18xNFdpbmRv
d0ZlYXR1cmVzRVJLTlNfMTZOYXZpZ2F0aW9uQWN0aW9uRQorICAgZnVuOl9aTjdXZWJDb3JlMTJj
cmVhdGVXaW5kb3dFUE5TXzVGcmFtZUVTMV9SS05TXzE2RnJhbWVMb2FkUmVxdWVzdEVSS05TXzE0
V2luZG93RmVhdHVyZXNFUmIKKyAgIGZ1bjpfWk43V2ViQ29yZTlET01XaW5kb3cxMmNyZWF0ZVdp
bmRvd0VSS04zV1RGNlN0cmluZ0VSS05TMV8xMkF0b21pY1N0cmluZ0VSS05TXzE0V2luZG93RmVh
dHVyZXNFUFMwX1BOU181RnJhbWVFU0RfUEZ2U0JfUHZFU0VfCisgICBmdW46X1pON1dlYkNvcmU5
RE9NV2luZG93NG9wZW5FUktOM1dURjZTdHJpbmdFUktOUzFfMTJBdG9taWNTdHJpbmdFUzRfUFMw
X1M4XworICAgZnVuOl9aTjdXZWJDb3JlMTFKU0RPTVdpbmRvdzRvcGVuRVBOM0pTQzlFeGVjU3Rh
dGVFCisgICBmdW46X1pON1dlYkNvcmUzMmpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rpb25PcGVu
RVBOM0pTQzlFeGVjU3RhdGVFCisgICBvYmo6KgorICAgZnVuOl9aTjNKU0M3SklUQ29kZTdleGVj
dXRlRVBOU183SlNTdGFja0VQTlNfOUV4ZWNTdGF0ZUVQTlNfMlZNRQorICAgZnVuOl9aTjNKU0Mx
MUludGVycHJldGVyMTFleGVjdXRlQ2FsbEVQTlNfOUV4ZWNTdGF0ZUVQTlNfOEpTT2JqZWN0RU5T
XzhDYWxsVHlwZUVSS05TXzhDYWxsRGF0YUVOU183SlNWYWx1ZUVSS05TXzdBcmdMaXN0RQorICAg
ZnVuOl9aTjNKU0M0Y2FsbEVQTlNfOUV4ZWNTdGF0ZUVOU183SlNWYWx1ZUVOU184Q2FsbFR5cGVF
UktOU184Q2FsbERhdGFFUzJfUktOU183QXJnTGlzdEUKKyAgIGZ1bjpfWk43V2ViQ29yZTIxSlNN
YWluVGhyZWFkRXhlY1N0YXRlNGNhbGxFUE4zSlNDOUV4ZWNTdGF0ZUVOUzFfN0pTVmFsdWVFTlMx
XzhDYWxsVHlwZUVSS05TMV84Q2FsbERhdGFFUzRfUktOUzFfN0FyZ0xpc3RFCit9CisKK3sKKyAg
IFdURjo6VGhyZWFkU3BlY2lmaWM6OnNldCgpIGxlYWtzCisgICBNZW1jaGVjazpMZWFrCisgICBm
dW46X1pudyoKKyAgIGZ1bjpfWk4zV1RGMTRUaHJlYWRTcGVjaWZpY0liRTNzZXRFUGIKKyAgIGZ1
bjpfWk4zV1RGMTRUaHJlYWRTcGVjaWZpY0liRWN2UGJFdgorICAgZnVuOl9aTjNXVEYxNFRocmVh
ZFNwZWNpZmljSWJFZGVFdgorICAgZnVuOl9aTjNXVEYxNnJlZ2lzdGVyR0NUaHJlYWRFdgorICAg
ZnVuOl9aTjNKU0M4R0NUaHJlYWQxMmdjVGhyZWFkTWFpbkV2CisgICBmdW46X1pOM0pTQzhHQ1Ro
cmVhZDE3Z2NUaHJlYWRTdGFydEZ1bmNFUHYKKyAgIGZ1bjpfWk4zV1RGTDE2dGhyZWFkRW50cnlQ
b2ludEVQdgorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208021</attachid>
            <date>2013-08-02 08:13:11 -0700</date>
            <delta_ts>2013-08-05 08:46:36 -0700</delta_ts>
            <desc>Launch DRT under valgrind</desc>
            <filename>bug-118785-20130802161337.patch</filename>
            <type>text/plain</type>
            <size>10602</size>
            <attacher name="Brian Holt">brian.holt</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUzNDY4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjk4MWEzMDc5MzljN2FlYmM5YmUyZmQ1NTllZDY0NDY1
YjVjYjQ1NC4uYTI3ODkzZTJlMTE2YjdiOGMwZGNlYWFhYTdkZTZhMDc2MjVhZjI5ZiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1
IEBACisyMDEzLTA4LTAyICBCcmlhbiBIb2x0ICA8YnJpYW4uaG9sdEBzYW1zdW5nLmNvbT4KKwor
ICAgICAgICBbR1RLXSBJbXBsZW1lbnQgbGVhayBjaGVja2luZyB3aXRoIHZhbGdyaW5kCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg3ODUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMYXVuY2ggdGhlIERS
VCB1bmRlciBWYWxncmluZCB0byBnZW5lcmF0ZSB4bWwgZmlsZXMgd2l0aCBkZXRhaWxzCisgICAg
ICAgIG9mIGxlYWtzIGZvdW5kLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKyAgICAgICAgKHBhcnNlX2FyZ3MpOiBMZWFrIGNo
ZWNrcyBhcmUgYWxzbyBmb3IgR3RrLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0
L2Jhc2UucHk6CisgICAgICAgIChQb3J0LmNoZWNrX2Zvcl9sZWFrcyk6IE1vdmUgaXNfcnVubmlu
ZyBmbGFnIHRvIGJhc2UgY2xhc3MuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
Z3RrLnB5OgorICAgICAgICAoR3RrUG9ydC5fX2luaXRfXyk6CisgICAgICAgIChHdGtQb3J0LmRl
ZmF1bHRfdGltZW91dF9tcyk6IEFsbG93IGV4dHJhIHRpbWUgdG8gcnVuIHVuZGVyCisgICAgICAg
IFZhbGdyaW5kLgorICAgICAgICAoR3RrUG9ydC5kcml2ZXJfc3RvcF90aW1lb3V0KTogQWxsb3cg
ZXh0cmEgdGltZSB0byBjbGVhbiB1cCBhZnRlcgorICAgICAgICB0aGUgZHJpdmVyIGhhcyBzdG9w
cGVkIGZvciBsb25nIHJ1bm5pbmcgcHJvY2Vzc2VzLgorICAgICAgICAoR3RrUG9ydC5zZXR1cF9l
bnZpcm9uX2Zvcl9zZXJ2ZXIpOiBQYXNzIHZhbGdyaW5kIGluc3RydWN0aW9ucworICAgICAgICB1
c2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisgICAgICAgIChHdGtQb3J0Ll9nZW5lcmF0ZV9h
bGxfdGVzdF9jb25maWd1cmF0aW9ucyk6CisgICAgICAgIChHdGtQb3J0LmNoZWNrX2Zvcl9sZWFr
cyk6IEd0ayBkb2VzIG5vdGhpbmcgYmVjYXVzZSBtZW1vcnkgbGVhaworICAgICAgICBkZXRlY3Rp
b24gaXMgYWNoaWV2ZWQgYnkgcnVubmluZyB1bmRlciBhIFZhbGdyaW5kIHdyYXBwZXIuCisgICAg
ICAgIChHdGtQb3J0KToKKyAgICAgICAgKEd0a1BvcnQucHJpbnRfbGVha3Nfc3VtbWFyeSk6IElu
IGEgc3Vic2VxdWVudCBwYXRjaCBhbmFseXNpcyBvZgorICAgICAgICBWYWxncmluZCBvdXRwdXQg
d2lsbCBiZSBkb25lIGFuZCBhIHN1bW1hcnkgcHJpbnRlZC4KKworICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvcG9ydC9tYWMucHk6CisgICAgICAgIChNYWNQb3J0LmNoZWNrX2Zvcl9sZWFrcyk6
IE1hYyBvbmx5IGNoZWNrcyBmb3IgbGVha3MgaWYgcHJvY2VzcyBpcworICAgICAgICBydW5uaW5n
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5Ogor
ICAgICAgICAoU2VydmVyUHJvY2Vzcy5zdG9wKTogTGV0IHRoZSBwb3J0IGRlY2lkZSB3aGV0aGVy
IHRvIGNoZWNrIGZvcgorICAgICAgICBsZWFrcyBpZiB0aGUgcHJvY2VzcyBpcyBydW5uaW5nLgor
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzX3VuaXR0ZXN0
LnB5OgorICAgICAgICAoVHJpdmlhbE1vY2tQb3J0LmNoZWNrX2Zvcl9sZWFrcyk6CisKIDIwMTMt
MDctMjkgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxNTI4NjAuCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQppbmRleCA2YjRi
Yjc2ZDFlMWEzYWI0YWRhYTlkMjZjZDgzZmVmNGUxN2YzNmU4Li5jYWYzZmUwNGM3YTRmMjM0ODQ1
MzQwNGU2YTQyMGJiOWM0ODRiMTdiIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKQEAgLTExMCw3ICsxMTAsNyBA
QCBkZWYgcGFyc2VfYXJncyhhcmdzKToKICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0t
Y29tcGxleC10ZXh0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKICAgICAg
ICAgICAgIGhlbHA9IlVzZSB0aGUgY29tcGxleCB0ZXh0IGNvZGUgcGF0aCBmb3IgYWxsIHRleHQg
KE1hYyBPUyBYIGFuZCBXaW5kb3dzIG9ubHkpIiksCiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0
aW9uKCItbCIsICItLWxlYWtzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwK
LSAgICAgICAgICAgIGhlbHA9IkVuYWJsZSBsZWFrcyBjaGVja2luZyAoTWFjIE9TIFggb25seSki
KSwKKyAgICAgICAgICAgIGhlbHA9IkVuYWJsZSBsZWFrcyBjaGVja2luZyAoTWFjIE9TIFggYW5k
IEd0aysgb25seSkiKSwKICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi1nIiwgIi0tZ3Vh
cmQtbWFsbG9jIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKICAgICAgICAg
ICAgIGhlbHA9IkVuYWJsZSBHdWFyZCBNYWxsb2MgKE1hYyBPUyBYIG9ubHkpIiksCiAgICAgICAg
IG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXRocmVhZGVkIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwg
ZGVmYXVsdD1GYWxzZSwKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9i
YXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKaW5kZXggZGQ2NmRh
NWVmMjY4NGMzOWFkZjM3Y2VmMDFhOGEyNDJjZDk0YmI5MS4uMjY3YjczNWI5NDA2NGE4Yjc4ZWUy
MDI1MmJmNThhMDI4MjI0ZmMzNCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2Jhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKQEAg
LTM4MSw3ICszODEsNyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhY3R1YWxfZmlsZW5hbWUpCiAgICAgICAgIHJldHVybiAnJy5qb2lu
KGRpZmYpCiAKLSAgICBkZWYgY2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nlc3NfbmFtZSwgcHJv
Y2Vzc19waWQpOgorICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwgcHJvY2Vzc19uYW1lLCBw
cm9jZXNzX3BpZCwgaXNfcnVubmluZyk6CiAgICAgICAgICMgU3ViY2xhc3NlcyBzaG91bGQgY2hl
Y2sgZm9yIGxlYWtzIGluIHRoZSBydW5uaW5nIHByb2Nlc3MKICAgICAgICAgIyBhbmQgcHJpbnQg
YW55IG5lY2Vzc2FyeSB3YXJuaW5ncyBpZiBsZWFrcyBhcmUgZm91bmQuCiAgICAgICAgICMgRklY
TUU6IFdlIHNob3VsZCBjb25zaWRlciBtb3ZpbmcgbXVjaCBvZiB0aGlzIGxvZ2ljIGludG8KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5CmluZGV4IGIzZjFmMjNlMWU0NDQ4MTNmMWEwYTJhZTBj
ZDJhYTM1NGQ2OWUyNzcuLjdjODkyNTlmZTYxOTg3YWQ2N2Q1NDc3NDQ2NDAxOTdhMzIzMmZkNTEg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weQpAQCAtMSw0ICsxLDUgQEAKICMgQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdo
dCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMK
ICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTI4LDYgKzI5LDcgQEAKIAogaW1wb3J0
IG9zCiBpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHV1aWQKIAogZnJvbSB3ZWJraXRweS5jb21t
b24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5t
b2RlbHMudGVzdF9jb25maWd1cmF0aW9uIGltcG9ydCBUZXN0Q29uZmlndXJhdGlvbgpAQCAtNDQs
NiArNDYsMTQgQEAgY2xhc3MgR3RrUG9ydChQb3J0KToKICAgICAgICAgc3VwZXIoR3RrUG9ydCwg
c2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQogICAgICAgICBzZWxmLl9wdWxzZWF1ZGlv
X3Nhbml0aXplciA9IFB1bHNlQXVkaW9TYW5pdGl6ZXIoKQogCisgICAgICAgIGlmIHNlbGYuZ2V0
X29wdGlvbigibGVha3MiKToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmdldF9vcHRpb24oIndy
YXBwZXIiKToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd1c2UgLS13cmFwcGVy
PVwidmFsZ3JpbmRcIiBmb3InCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIG1l
bW9yeSBsZWFrIGRldGVjdGlvbiBvbiBHVEsnKQorICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJl
ZSBzbG93cyBkb3duIG5vdGljYWJseSBpZiB3ZSBydW4gbW9yZSB0aGFuIGFib3V0CisgICAgICAg
ICAgICAjIDEwMDAgdGVzdHMgaW4gYSBiYXRjaCB3aXRoIE1hbGxvY1N0YWNrTG9nZ2luZyBlbmFi
bGVkLgorICAgICAgICAgICAgc2VsZi5zZXRfb3B0aW9uX2RlZmF1bHQoImJhdGNoX3NpemUiLCAx
MDAwKQorCiAgICAgZGVmIHdhcm5faWZfYnVnX21pc3NpbmdfaW5fdGVzdF9leHBlY3RhdGlvbnMo
c2VsZik6CiAgICAgICAgIHJldHVybiBub3Qgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9y
dW5uZXInKQogCkBAIC01Nyw5ICs2NywxOCBAQCBjbGFzcyBHdGtQb3J0KFBvcnQpOgogICAgICAg
ICByZXR1cm4gWHZmYkRyaXZlcgogCiAgICAgZGVmIGRlZmF1bHRfdGltZW91dF9tcyhzZWxmKToK
KyAgICAgICAgbXVsdGlwbGllciA9IDEwIGlmIHNlbGYuZ2V0X29wdGlvbigibGVha3MiKSBlbHNl
IDEKICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdjb25maWd1cmF0aW9uJykgPT0gJ0RlYnVn
JzoKLSAgICAgICAgICAgIHJldHVybiAxMiAqIDEwMDAKLSAgICAgICAgcmV0dXJuIDYgKiAxMDAw
CisgICAgICAgICAgICByZXR1cm4gbXVsdGlwbGllciAqIDEyICogMTAwMAorICAgICAgICByZXR1
cm4gbXVsdGlwbGllciAqIDYgKiAxMDAwCisKKyAgICBkZWYgZHJpdmVyX3N0b3BfdGltZW91dChz
ZWxmKToKKyAgICAgICAgIiIiIFJldHVybnMgdGhlIGFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMg
dG8gd2FpdCBiZWZvcmUga2lsbGluZyB0aGUKKyAgICAgICAgICAgIHByb2Nlc3MgaW4gZHJpdmVy
LnN0b3AoKS4iIiIKKyAgICAgICAgIyBXZSB3YW50IHRvIHdhaXQgZm9yIGF0IGxlYXN0IDMgc2Vj
b25kcywgYnV0IGlmIHdlIGFyZSByZWFsbHkgc2xvdywKKyAgICAgICAgIyB3ZSB3YW50IHRvIGJl
IHNsb3cgb24gY2xlYW51cCBhcyB3ZWxsCisgICAgICAgICMgKGZvciB0aGluZ3MgbGlrZSBBU0FO
LCBWYWxncmluZCwgZXRjLikKKyAgICAgICAgcmV0dXJuIDEwLjAgKiBzZWxmLmRlZmF1bHRfdGlt
ZW91dF9tcygpCiAKICAgICBkZWYgc2V0dXBfdGVzdF9ydW4oc2VsZik6CiAgICAgICAgIHN1cGVy
KEd0a1BvcnQsIHNlbGYpLnNldHVwX3Rlc3RfcnVuKCkKQEAgLTc5LDYgKzk4LDIxIEBAIGNsYXNz
IEd0a1BvcnQoUG9ydCk6CiAgICAgICAgIGVudmlyb25tZW50WydXRUJLSVRfSU5TUEVDVE9SX1BB
VEgnXSA9IHNlbGYuX2J1aWxkX3BhdGgoJ1Byb2dyYW1zJywgJ3Jlc291cmNlcycsICdpbnNwZWN0
b3InKQogICAgICAgICBlbnZpcm9ubWVudFsnQVVESU9fUkVTT1VSQ0VTX1BBVEgnXSA9IHNlbGYu
cGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdh
dWRpbycsICdyZXNvdXJjZXMnKQogICAgICAgICBzZWxmLl9jb3B5X3ZhbHVlX2Zyb21fZW52aXJv
bl9pZl9zZXQoZW52aXJvbm1lbnQsICdXRUJLSVRfT1VUUFVURElSJykKKyAgICAgICAgaWYgc2Vs
Zi5nZXRfb3B0aW9uKCJsZWFrcyIpOgorICAgICAgICAgICAgZW52aXJvbm1lbnRbJ0dfU0xJQ0Un
XSA9ICdhbHdheXMtbWFsbG9jJworICAgICAgICAgICAgeG1sZmlsZSA9ICIiLmpvaW4oKCdcIics
IHNlbGYucmVzdWx0c19kaXJlY3RvcnkoKSwgIi9kcnQtJXAtIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1dWlkLnV1aWQxKCkuaGV4LCAiLWxlYWtzLnhtbCIsICdcIicpKQorICAg
ICAgICAgICAgZW52aXJvbm1lbnRbJ1ZBTEdSSU5EX09QVFMnXSA9ICItLXRvb2w9bWVtY2hlY2sg
IiBcCisgICAgICAgICAgICAgICAgIi0tbnVtLWNhbGxlcnM9NDAgLS1kZW1hbmdsZT1ubyAtLXRy
YWNlLWNoaWxkcmVuPW5vICAiIFwKKyAgICAgICAgICAgICAgICAiLS1zbWMtY2hlY2s9YWxsLW5v
bi1maWxlIC0tbGVhay1jaGVjaz15ZXMgIiBcCisgICAgICAgICAgICAgICAgIi0tbGVhay1yZXNv
bHV0aW9uPWhpZ2ggLS1zaG93LXBvc3NpYmx5LWxvc3Q9bm8gIiBcCisgICAgICAgICAgICAgICAg
Ii0tc2hvdy1yZWFjaGFibGU9bm8gLS1sZWFrLWNoZWNrPWZ1bGwgIiBcCisgICAgICAgICAgICAg
ICAgIiAtLXVuZGVmLXZhbHVlLWVycm9ycz1ubyAiIFwKKyAgICAgICAgICAgICAgICAiLS1nZW4t
c3VwcHJlc3Npb25zPWFsbCAtLXhtbD15ZXMgLS14bWwtZmlsZT0lcyAiICUgKHhtbGZpbGUpCisg
ICAgICAgICAgICAjIEZJWE1FOiBpbnN0ZWFkIHdlIHNob3VsZCBiZSB1c2luZyAiamhidWlsZC13
cmFwcGVyIC0tZ3RrIHJ1biIKKyAgICAgICAgICAgICMgdG8gZW5zdXJlIHdlIGdldCB0aGUgY29y
cmVjdCBsaWJyYXJ5IHBhdGguCisgICAgICAgICAgICAjZW52aXJvbm1lbnRbJ0xEX0xJQlJBUllf
UEFUSCddID0gc2VsZi5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoCisgICAgICAgICAgICAjICAgICdX
ZWJLaXRCdWlsZCcsICdEZXBlbmRlbmNpZXMnLCAnUm9vdCcsICdsaWI2NCcpCiAgICAgICAgIHJl
dHVybiBlbnZpcm9ubWVudAogCiAgICAgZGVmIF9nZW5lcmF0ZV9hbGxfdGVzdF9jb25maWd1cmF0
aW9ucyhzZWxmKToKQEAgLTEyMiw4ICsxNTYsMTUgQEAgY2xhc3MgR3RrUG9ydChQb3J0KToKICAg
ICBkZWYgX3BvcnRfc3BlY2lmaWNfZXhwZWN0YXRpb25zX2ZpbGVzKHNlbGYpOgogICAgICAgICBy
ZXR1cm4gW3NlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aChw
KSwgJ1Rlc3RFeHBlY3RhdGlvbnMnKSBmb3IgcCBpbiByZXZlcnNlZChzZWxmLl9zZWFyY2hfcGF0
aHMoKSldCiAKLSAgICAjIEZJWE1FOiBXZSBzaG91bGQgZmluZCBhIHdheSB0byBzaGFyZSB0aGlz
IGltcGxtZW50YXRpb24gd2l0aCBHdGssCi0gICAgIyBvciB0ZWFjaCBydW4tbGF1bmNoZXIgaG93
IHRvIGNhbGwgcnVuLXNhZmFyaSBhbmQgbW92ZSB0aGlzIGRvd24gdG8gUG9ydC4KKyAgICBkZWYg
Y2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nlc3NfbmFtZSwgcHJvY2Vzc19waWQsIGlzX3J1bm5p
bmcpOgorICAgICAgICAjIFdpdGggR3RrIHdlIGluaXRpYXRlIG1lbW9yeSBjaGVja2luZyBieSBw
YXNzaW5nIHZhbGdyaW5kIGFzIGEgd3JhcHBlciB0byB0aGUgdGVzdC4KKyAgICAgICAgcGFzcwor
CisgICAgZGVmIHByaW50X2xlYWtzX3N1bW1hcnkoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxm
LmdldF9vcHRpb24oJ2xlYWtzJyk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgIyBJbiBh
IHN1YnNlcXVlbnQgcGF0Y2ggdGhlIGxlYWsgeG1sIGZpbGVzIHdpbGwgYmUgcGFyc2VkIGhlcmUu
CisKICAgICBkZWYgc2hvd19yZXN1bHRzX2h0bWxfZmlsZShzZWxmLCByZXN1bHRzX2ZpbGVuYW1l
KToKICAgICAgICAgcnVuX2xhdW5jaGVyX2FyZ3MgPSBbImZpbGU6Ly8lcyIgJSByZXN1bHRzX2Zp
bGVuYW1lXQogICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3dlYmtpdF90ZXN0X3J1bm5lcicp
OgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L21hYy5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWMucHkKaW5kZXggYzc0MzlhYzdiY2IzZWEwMTdmNmZj
ZTEyNDZiOGYwY2E5NTE5OGMzZC4uZWU0MzJiZWE5ZDY4NWM3MWMwYTc2M2FkZjBlNzEyYzc0ZmU2
NDFjNiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L21hYy5weQorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjLnB5CkBAIC0xNDgsOCArMTQ4LDkgQEAg
Y2xhc3MgTWFjUG9ydChBcHBsZVBvcnQpOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAg
ICAgIHJldHVybiBUcnVlCiAKLSAgICBkZWYgY2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nlc3Nf
bmFtZSwgcHJvY2Vzc19waWQpOgotICAgICAgICBpZiBub3Qgc2VsZi5nZXRfb3B0aW9uKCdsZWFr
cycpOgorICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwgcHJvY2Vzc19uYW1lLCBwcm9jZXNz
X3BpZCwgaXNfcnVubmluZyk6CisgICAgICAgICMgT25seSBib3RoZXIgdG8gY2hlY2sgZm9yIGxl
YWtzIG9yIHN0ZGVyciBpZiB0aGUgcHJvY2VzcyBpcyBzdGlsbCBydW5uaW5nLgorICAgICAgICBp
ZiBub3Qgc2VsZi5nZXRfb3B0aW9uKCdsZWFrcycpIG9yIG5vdCBpc19ydW5uaW5nOgogICAgICAg
ICAgICAgcmV0dXJuCiAgICAgICAgICMgV2UgY291bGQgdXNlIGh0dHA6Ly9jb2RlLmdvb2dsZS5j
b20vcC9wc3V0aWwvIHRvIGdldCB0aGUgcHJvY2Vzc19uYW1lIGZyb20gdGhlIHBpZC4KICAgICAg
ICAgc2VsZi5fbGVha19kZXRlY3Rvci5jaGVja19mb3JfbGVha3MocHJvY2Vzc19uYW1lLCBwcm9j
ZXNzX3BpZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJf
cHJvY2Vzcy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5w
eQppbmRleCA4MTg0ZDI1ODdhYjFkOWQ5YzhhMzY1YzVmMWJhNTBkMDk2ODA5NjllLi5lNDIxZTdi
MjE4NTY3ZTU1MTA1OTQ3NGUwNzE4OThiMWI4OGIwYjM4IDEwMDY0NAotLS0gYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5CkBAIC0zMzEsOSArMzMxLDggQEAgY2xhc3Mg
U2VydmVyUHJvY2VzcyhvYmplY3QpOgogICAgICAgICBpZiBub3Qgc2VsZi5fcHJvYzoKICAgICAg
ICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSkKIAotICAgICAgICAjIE9ubHkgYm90aGVyIHRvIGNo
ZWNrIGZvciBsZWFrcyBvciBzdGRlcnIgaWYgdGhlIHByb2Nlc3MgaXMgc3RpbGwgcnVubmluZy4K
LSAgICAgICAgaWYgc2VsZi5wb2xsKCkgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX3BvcnQu
Y2hlY2tfZm9yX2xlYWtzKHNlbGYubmFtZSgpLCBzZWxmLnBpZCgpKQorICAgICAgICBpc19ydW5u
aW5nID0gc2VsZi5wb2xsKCkgaXMgTm9uZQorICAgICAgICBzZWxmLl9wb3J0LmNoZWNrX2Zvcl9s
ZWFrcyhzZWxmLm5hbWUoKSwgc2VsZi5waWQoKSwgaXNfcnVubmluZykKIAogICAgICAgICBub3cg
PSB0aW1lLnRpbWUoKQogICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZGluOgpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzX3VuaXR0ZXN0LnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzX3VuaXR0ZXN0LnB5Cmlu
ZGV4IDVhZDdkMGVhN2U2NWY0MWU1ZmRjNmJlZGIzMWFjNjFhZjI2YzhmNDEuLmIyMzZlNGQyMGVj
MWE4MDAxYWJkMzg0ZmNiNThkZGY1ZjkyYzU5OWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzc191bml0dGVzdC5weQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3NfdW5pdHRlc3QucHkKQEAgLTQ3LDcgKzQ3
LDcgQEAgY2xhc3MgVHJpdmlhbE1vY2tQb3J0KG9iamVjdCk6CiAgICAgZGVmIHJlc3VsdHNfZGly
ZWN0b3J5KHNlbGYpOgogICAgICAgICByZXR1cm4gIi9tb2NrLXJlc3VsdHMiCiAKLSAgICBkZWYg
Y2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nlc3NfbmFtZSwgcHJvY2Vzc19waWQpOgorICAgIGRl
ZiBjaGVja19mb3JfbGVha3Moc2VsZiwgcHJvY2Vzc19uYW1lLCBwcm9jZXNzX3BpZCwgaXNfcnVu
bmluZyk6CiAgICAgICAgIHBhc3MKIAogICAgIGRlZiBwcm9jZXNzX2tpbGxfdGltZShzZWxmKToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208129</attachid>
            <date>2013-08-05 08:46:44 -0700</date>
            <delta_ts>2013-08-05 10:22:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118785-20130805164712.patch</filename>
            <type>text/plain</type>
            <size>5083</size>
            <attacher name="Brian Holt">brian.holt</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUzNDY4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjk4MWEzMDc5MzljN2FlYmM5YmUyZmQ1NTllZDY0NDY1
YjVjYjQ1NC4uNDVlMzY1MjhlMzBmOTgxY2VlMjAxOTgxMzAyMWE4MmQwNDA5ODhiNSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIy
IEBACisyMDEzLTA4LTA1ICBCcmlhbiBIb2x0ICA8YnJpYW4uaG9sdEBzYW1zdW5nLmNvbT4KKwor
ICAgICAgICBbR1RLXSBJbXBsZW1lbnQgbGVhayBjaGVja2luZyB3aXRoIHZhbGdyaW5kCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg3ODUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMYXVuY2ggdGhlIERS
VCB1bmRlciBWYWxncmluZCB0byBnZW5lcmF0ZSB4bWwgZmlsZXMgd2l0aCBkZXRhaWxzCisgICAg
ICAgIG9mIGxlYWtzIGZvdW5kLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKyAgICAgICAgKHBhcnNlX2FyZ3MpOgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHk6CisgICAgICAgIChHdGtQb3J0Ll9faW5p
dF9fKToKKyAgICAgICAgKEd0a1BvcnQuZGVmYXVsdF90aW1lb3V0X21zKTogQWxsb3cgZXh0cmEg
dGltZSB0byBydW4gdW5kZXIKKyAgICAgICAgVmFsZ3JpbmQuCisgICAgICAgIChHdGtQb3J0LnNl
dHVwX2Vudmlyb25fZm9yX3NlcnZlcik6IFBhc3MgVmFsZ3JpbmQgaW5zdHJ1Y3Rpb25zCisgICAg
ICAgIHVzaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKwogMjAxMy0wNy0yOSAgQ29tbWl0IFF1
ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9s
bGluZyBvdXQgcjE1Mjg2MC4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4IDZiNGJiNzZkMWUxYTNhYjRhZGFh
OWQyNmNkODNmZWY0ZTE3ZjM2ZTguLmNhZjNmZTA0YzdhNGYyMzQ4NDUzNDA0ZTZhNDIwYmI5YzQ4
NGIxN2IgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtMTEwLDcgKzExMCw3IEBAIGRlZiBwYXJzZV9hcmdz
KGFyZ3MpOgogICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1jb21wbGV4LXRleHQiLCBh
Y3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAogICAgICAgICAgICAgaGVscD0iVXNl
IHRoZSBjb21wbGV4IHRleHQgY29kZSBwYXRoIGZvciBhbGwgdGV4dCAoTWFjIE9TIFggYW5kIFdp
bmRvd3Mgb25seSkiKSwKICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi1sIiwgIi0tbGVh
a3MiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgaGVs
cD0iRW5hYmxlIGxlYWtzIGNoZWNraW5nIChNYWMgT1MgWCBvbmx5KSIpLAorICAgICAgICAgICAg
aGVscD0iRW5hYmxlIGxlYWtzIGNoZWNraW5nIChNYWMgT1MgWCBhbmQgR3RrKyBvbmx5KSIpLAog
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLWciLCAiLS1ndWFyZC1tYWxsb2MiLCBhY3Rp
b249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAogICAgICAgICAgICAgaGVscD0iRW5hYmxl
IEd1YXJkIE1hbGxvYyAoTWFjIE9TIFggb25seSkiKSwKICAgICAgICAgb3B0cGFyc2UubWFrZV9v
cHRpb24oIi0tdGhyZWFkZWQiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLApk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkKaW5kZXggYjNmMWYyM2UxZTQ0NDgxM2YxYTBhMmFl
MGNkMmFhMzU0ZDY5ZTI3Ny4uN2VhNTgyOTQxNmZjNWE3YWRiYTliMmZiNGQzMDY3ZWU5N2JjMDY4
MCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5CkBAIC0xLDQgKzEsNSBAQAogIyBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJp
Z2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
IwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMjgsNiArMjksNyBAQAogCiBpbXBv
cnQgb3MKIGltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdXVpZAogCiBmcm9tIHdlYmtpdHB5LmNv
bW1vbi5tZW1vaXplZCBpbXBvcnQgbWVtb2l6ZWQKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
Lm1vZGVscy50ZXN0X2NvbmZpZ3VyYXRpb24gaW1wb3J0IFRlc3RDb25maWd1cmF0aW9uCkBAIC00
NCw2ICs0NiwxMCBAQCBjbGFzcyBHdGtQb3J0KFBvcnQpOgogICAgICAgICBzdXBlcihHdGtQb3J0
LCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCiAgICAgICAgIHNlbGYuX3B1bHNlYXVk
aW9fc2FuaXRpemVyID0gUHVsc2VBdWRpb1Nhbml0aXplcigpCiAKKyAgICAgICAgaWYgc2VsZi5n
ZXRfb3B0aW9uKCJsZWFrcyIpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuZ2V0X29wdGlvbigi
d3JhcHBlciIpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3VzZSAtLXdyYXBw
ZXI9XCJ2YWxncmluZFwiIGZvciBtZW1vcnkgbGVhayBkZXRlY3Rpb24gb24gR1RLJykKKwogICAg
IGRlZiB3YXJuX2lmX2J1Z19taXNzaW5nX2luX3Rlc3RfZXhwZWN0YXRpb25zKHNlbGYpOgogICAg
ICAgICByZXR1cm4gbm90IHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJykKIApA
QCAtNTcsOSArNjMsMTIgQEAgY2xhc3MgR3RrUG9ydChQb3J0KToKICAgICAgICAgcmV0dXJuIFh2
ZmJEcml2ZXIKIAogICAgIGRlZiBkZWZhdWx0X3RpbWVvdXRfbXMoc2VsZik6CisgICAgICAgICMg
U3RhcnRpbmcgYW4gYXBwbGljYXRpb24gdW5kZXIgVmFsZ3JpbmQgdGFrZXMgYSBsb3QgbG9uZ2Vy
IHRoYW4gbm9ybWFsCisgICAgICAgICMgc28gaW5jcmVhc2UgdGhlIHRpbWVvdXQgKGVtcGlyaWNh
bGx5IDEweCBpcyBlbm91Z2ggdG8gYXZvaWQgdGltZW91dHMpLgorICAgICAgICBtdWx0aXBsaWVy
ID0gMTAgaWYgc2VsZi5nZXRfb3B0aW9uKCJsZWFrcyIpIGVsc2UgMQogICAgICAgICBpZiBzZWxm
LmdldF9vcHRpb24oJ2NvbmZpZ3VyYXRpb24nKSA9PSAnRGVidWcnOgotICAgICAgICAgICAgcmV0
dXJuIDEyICogMTAwMAotICAgICAgICByZXR1cm4gNiAqIDEwMDAKKyAgICAgICAgICAgIHJldHVy
biBtdWx0aXBsaWVyICogMTIgKiAxMDAwCisgICAgICAgIHJldHVybiBtdWx0aXBsaWVyICogNiAq
IDEwMDAKIAogICAgIGRlZiBzZXR1cF90ZXN0X3J1bihzZWxmKToKICAgICAgICAgc3VwZXIoR3Rr
UG9ydCwgc2VsZikuc2V0dXBfdGVzdF9ydW4oKQpAQCAtNzksNiArODgsMjQgQEAgY2xhc3MgR3Rr
UG9ydChQb3J0KToKICAgICAgICAgZW52aXJvbm1lbnRbJ1dFQktJVF9JTlNQRUNUT1JfUEFUSCdd
ID0gc2VsZi5fYnVpbGRfcGF0aCgnUHJvZ3JhbXMnLCAncmVzb3VyY2VzJywgJ2luc3BlY3Rvcicp
CiAgICAgICAgIGVudmlyb25tZW50WydBVURJT19SRVNPVVJDRVNfUEFUSCddID0gc2VsZi5wYXRo
X2Zyb21fd2Via2l0X2Jhc2UoJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ2F1ZGlv
JywgJ3Jlc291cmNlcycpCiAgICAgICAgIHNlbGYuX2NvcHlfdmFsdWVfZnJvbV9lbnZpcm9uX2lm
X3NldChlbnZpcm9ubWVudCwgJ1dFQktJVF9PVVRQVVRESVInKQorICAgICAgICBpZiBzZWxmLmdl
dF9vcHRpb24oImxlYWtzIik6CisgICAgICAgICAgICBlbnZpcm9ubWVudFsnR19TTElDRSddID0g
J2Fsd2F5cy1tYWxsb2MnCisgICAgICAgICAgICB4bWxmaWxlbmFtZSA9ICIiLmpvaW4oKCJkcnQt
JXAtIiwgdXVpZC51dWlkMSgpLmhleCwgIi1sZWFrcy54bWwiKSkKKyAgICAgICAgICAgIHhtbGZp
bGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSgpLCB4bWxmaWxlbmFtZSkK
KyAgICAgICAgICAgIGVudmlyb25tZW50WydWQUxHUklORF9PUFRTJ10gPSAiLS10b29sPW1lbWNo
ZWNrICIgXAorICAgICAgICAgICAgICAgICItLW51bS1jYWxsZXJzPTQwICIgXAorICAgICAgICAg
ICAgICAgICItLWRlbWFuZ2xlPW5vICIgXAorICAgICAgICAgICAgICAgICItLXRyYWNlLWNoaWxk
cmVuPW5vICIgXAorICAgICAgICAgICAgICAgICItLXNtYy1jaGVjaz1hbGwtbm9uLWZpbGUgIiBc
CisgICAgICAgICAgICAgICAgIi0tbGVhay1jaGVjaz15ZXMgIiBcCisgICAgICAgICAgICAgICAg
Ii0tbGVhay1yZXNvbHV0aW9uPWhpZ2ggIiBcCisgICAgICAgICAgICAgICAgIi0tc2hvdy1wb3Nz
aWJseS1sb3N0PW5vICIgXAorICAgICAgICAgICAgICAgICItLXNob3ctcmVhY2hhYmxlPW5vICIg
XAorICAgICAgICAgICAgICAgICItLWxlYWstY2hlY2s9ZnVsbCAiIFwKKyAgICAgICAgICAgICAg
ICAiLS11bmRlZi12YWx1ZS1lcnJvcnM9bm8gIiBcCisgICAgICAgICAgICAgICAgIi0tZ2VuLXN1
cHByZXNzaW9ucz1hbGwgIiBcCisgICAgICAgICAgICAgICAgIi0teG1sPXllcyAiIFwKKyAgICAg
ICAgICAgICAgICAiLS14bWwtZmlsZT1cIiVzXCIgIiAlICh4bWxmaWxlKQogICAgICAgICByZXR1
cm4gZW52aXJvbm1lbnQKIAogICAgIGRlZiBfZ2VuZXJhdGVfYWxsX3Rlc3RfY29uZmlndXJhdGlv
bnMoc2VsZik6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208133</attachid>
            <date>2013-08-05 10:22:36 -0700</date>
            <delta_ts>2013-08-05 13:25:15 -0700</delta_ts>
            <desc>Launch DRT under Valgrind v2</desc>
            <filename>bug-118785-20130805182304.patch</filename>
            <type>text/plain</type>
            <size>5238</size>
            <attacher name="Brian Holt">brian.holt</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUzNDY4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjk4MWEzMDc5MzljN2FlYmM5YmUyZmQ1NTllZDY0NDY1
YjVjYjQ1NC4uNDVlMzY1MjhlMzBmOTgxY2VlMjAxOTgxMzAyMWE4MmQwNDA5ODhiNSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIy
IEBACisyMDEzLTA4LTA1ICBCcmlhbiBIb2x0ICA8YnJpYW4uaG9sdEBzYW1zdW5nLmNvbT4KKwor
ICAgICAgICBbR1RLXSBJbXBsZW1lbnQgbGVhayBjaGVja2luZyB3aXRoIHZhbGdyaW5kCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg3ODUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMYXVuY2ggdGhlIERS
VCB1bmRlciBWYWxncmluZCB0byBnZW5lcmF0ZSB4bWwgZmlsZXMgd2l0aCBkZXRhaWxzCisgICAg
ICAgIG9mIGxlYWtzIGZvdW5kLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKyAgICAgICAgKHBhcnNlX2FyZ3MpOgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHk6CisgICAgICAgIChHdGtQb3J0Ll9faW5p
dF9fKToKKyAgICAgICAgKEd0a1BvcnQuZGVmYXVsdF90aW1lb3V0X21zKTogQWxsb3cgZXh0cmEg
dGltZSB0byBydW4gdW5kZXIKKyAgICAgICAgVmFsZ3JpbmQuCisgICAgICAgIChHdGtQb3J0LnNl
dHVwX2Vudmlyb25fZm9yX3NlcnZlcik6IFBhc3MgVmFsZ3JpbmQgaW5zdHJ1Y3Rpb25zCisgICAg
ICAgIHVzaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKwogMjAxMy0wNy0yOSAgQ29tbWl0IFF1
ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9s
bGluZyBvdXQgcjE1Mjg2MC4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4IDZiNGJiNzZkMWUxYTNhYjRhZGFh
OWQyNmNkODNmZWY0ZTE3ZjM2ZTguLmNhZjNmZTA0YzdhNGYyMzQ4NDUzNDA0ZTZhNDIwYmI5YzQ4
NGIxN2IgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtMTEwLDcgKzExMCw3IEBAIGRlZiBwYXJzZV9hcmdz
KGFyZ3MpOgogICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1jb21wbGV4LXRleHQiLCBh
Y3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAogICAgICAgICAgICAgaGVscD0iVXNl
IHRoZSBjb21wbGV4IHRleHQgY29kZSBwYXRoIGZvciBhbGwgdGV4dCAoTWFjIE9TIFggYW5kIFdp
bmRvd3Mgb25seSkiKSwKICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi1sIiwgIi0tbGVh
a3MiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgaGVs
cD0iRW5hYmxlIGxlYWtzIGNoZWNraW5nIChNYWMgT1MgWCBvbmx5KSIpLAorICAgICAgICAgICAg
aGVscD0iRW5hYmxlIGxlYWtzIGNoZWNraW5nIChNYWMgT1MgWCBhbmQgR3RrKyBvbmx5KSIpLAog
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLWciLCAiLS1ndWFyZC1tYWxsb2MiLCBhY3Rp
b249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAogICAgICAgICAgICAgaGVscD0iRW5hYmxl
IEd1YXJkIE1hbGxvYyAoTWFjIE9TIFggb25seSkiKSwKICAgICAgICAgb3B0cGFyc2UubWFrZV9v
cHRpb24oIi0tdGhyZWFkZWQiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLApk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkKaW5kZXggYjNmMWYyM2UxZTQ0NDgxM2YxYTBhMmFl
MGNkMmFhMzU0ZDY5ZTI3Ny4uNTA2YTJhYjFiMzMzY2JiNGM3OTJmNzZkM2U2ZmUyNDk0NzVlZjM3
NiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5CkBAIC0xLDQgKzEsNSBAQAogIyBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJp
Z2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
IwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMjgsNiArMjksNyBAQAogCiBpbXBv
cnQgb3MKIGltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdXVpZAogCiBmcm9tIHdlYmtpdHB5LmNv
bW1vbi5tZW1vaXplZCBpbXBvcnQgbWVtb2l6ZWQKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
Lm1vZGVscy50ZXN0X2NvbmZpZ3VyYXRpb24gaW1wb3J0IFRlc3RDb25maWd1cmF0aW9uCkBAIC00
NCw2ICs0NiwxMCBAQCBjbGFzcyBHdGtQb3J0KFBvcnQpOgogICAgICAgICBzdXBlcihHdGtQb3J0
LCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCiAgICAgICAgIHNlbGYuX3B1bHNlYXVk
aW9fc2FuaXRpemVyID0gUHVsc2VBdWRpb1Nhbml0aXplcigpCiAKKyAgICAgICAgaWYgc2VsZi5n
ZXRfb3B0aW9uKCJsZWFrcyIpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuZ2V0X29wdGlvbigi
d3JhcHBlciIpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3VzZSAtLXdyYXBw
ZXI9XCJ2YWxncmluZFwiIGZvciBtZW1vcnkgbGVhayBkZXRlY3Rpb24gb24gR1RLJykKKwogICAg
IGRlZiB3YXJuX2lmX2J1Z19taXNzaW5nX2luX3Rlc3RfZXhwZWN0YXRpb25zKHNlbGYpOgogICAg
ICAgICByZXR1cm4gbm90IHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJykKIApA
QCAtNTcsOSArNjMsMTIgQEAgY2xhc3MgR3RrUG9ydChQb3J0KToKICAgICAgICAgcmV0dXJuIFh2
ZmJEcml2ZXIKIAogICAgIGRlZiBkZWZhdWx0X3RpbWVvdXRfbXMoc2VsZik6CisgICAgICAgICMg
U3RhcnRpbmcgYW4gYXBwbGljYXRpb24gdW5kZXIgVmFsZ3JpbmQgdGFrZXMgYSBsb3QgbG9uZ2Vy
IHRoYW4gbm9ybWFsCisgICAgICAgICMgc28gaW5jcmVhc2UgdGhlIHRpbWVvdXQgKGVtcGlyaWNh
bGx5IDEweCBpcyBlbm91Z2ggdG8gYXZvaWQgdGltZW91dHMpLgorICAgICAgICBtdWx0aXBsaWVy
ID0gMTAgaWYgc2VsZi5nZXRfb3B0aW9uKCJsZWFrcyIpIGVsc2UgMQogICAgICAgICBpZiBzZWxm
LmdldF9vcHRpb24oJ2NvbmZpZ3VyYXRpb24nKSA9PSAnRGVidWcnOgotICAgICAgICAgICAgcmV0
dXJuIDEyICogMTAwMAotICAgICAgICByZXR1cm4gNiAqIDEwMDAKKyAgICAgICAgICAgIHJldHVy
biBtdWx0aXBsaWVyICogMTIgKiAxMDAwCisgICAgICAgIHJldHVybiBtdWx0aXBsaWVyICogNiAq
IDEwMDAKIAogICAgIGRlZiBzZXR1cF90ZXN0X3J1bihzZWxmKToKICAgICAgICAgc3VwZXIoR3Rr
UG9ydCwgc2VsZikuc2V0dXBfdGVzdF9ydW4oKQpAQCAtNzksNiArODgsMjcgQEAgY2xhc3MgR3Rr
UG9ydChQb3J0KToKICAgICAgICAgZW52aXJvbm1lbnRbJ1dFQktJVF9JTlNQRUNUT1JfUEFUSCdd
ID0gc2VsZi5fYnVpbGRfcGF0aCgnUHJvZ3JhbXMnLCAncmVzb3VyY2VzJywgJ2luc3BlY3Rvcicp
CiAgICAgICAgIGVudmlyb25tZW50WydBVURJT19SRVNPVVJDRVNfUEFUSCddID0gc2VsZi5wYXRo
X2Zyb21fd2Via2l0X2Jhc2UoJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ2F1ZGlv
JywgJ3Jlc291cmNlcycpCiAgICAgICAgIHNlbGYuX2NvcHlfdmFsdWVfZnJvbV9lbnZpcm9uX2lm
X3NldChlbnZpcm9ubWVudCwgJ1dFQktJVF9PVVRQVVRESVInKQorICAgICAgICBpZiBzZWxmLmdl
dF9vcHRpb24oImxlYWtzIik6CisgICAgICAgICAgICAjICBUdXJuIG9mZiBHTGliIG1lbW9yeSBv
cHRpbWlzYXRpb25zIGh0dHBzOi8vd2lraS5nbm9tZS5vcmcvVmFsZ3JpbmQuCisgICAgICAgICAg
ICBlbnZpcm9ubWVudFsnR19TTElDRSddID0gJ2Fsd2F5cy1tYWxsb2MnCisgICAgICAgICAgICBl
bnZpcm9ubWVudFsnR19ERUJVRyddID0gJ2djLWZyaWVuZGx5JworICAgICAgICAgICAgeG1sZmls
ZW5hbWUgPSAiIi5qb2luKCgiZHJ0LSVwLSIsIHV1aWQudXVpZDEoKS5oZXgsICItbGVha3MueG1s
IikpCisgICAgICAgICAgICB4bWxmaWxlID0gb3MucGF0aC5qb2luKHNlbGYucmVzdWx0c19kaXJl
Y3RvcnkoKSwgeG1sZmlsZW5hbWUpCisgICAgICAgICAgICBlbnZpcm9ubWVudFsnVkFMR1JJTkRf
T1BUUyddID0gXAorICAgICAgICAgICAgICAgICItLXRvb2w9bWVtY2hlY2sgIiBcCisgICAgICAg
ICAgICAgICAgIi0tbnVtLWNhbGxlcnM9NDAgIiBcCisgICAgICAgICAgICAgICAgIi0tZGVtYW5n
bGU9bm8gIiBcCisgICAgICAgICAgICAgICAgIi0tdHJhY2UtY2hpbGRyZW49bm8gIiBcCisgICAg
ICAgICAgICAgICAgIi0tc21jLWNoZWNrPWFsbC1ub24tZmlsZSAiIFwKKyAgICAgICAgICAgICAg
ICAiLS1sZWFrLWNoZWNrPXllcyAiIFwKKyAgICAgICAgICAgICAgICAiLS1sZWFrLXJlc29sdXRp
b249aGlnaCAiIFwKKyAgICAgICAgICAgICAgICAiLS1zaG93LXBvc3NpYmx5LWxvc3Q9bm8gIiBc
CisgICAgICAgICAgICAgICAgIi0tc2hvdy1yZWFjaGFibGU9bm8gIiBcCisgICAgICAgICAgICAg
ICAgIi0tbGVhay1jaGVjaz1mdWxsICIgXAorICAgICAgICAgICAgICAgICItLXVuZGVmLXZhbHVl
LWVycm9ycz1ubyAiIFwKKyAgICAgICAgICAgICAgICAiLS1nZW4tc3VwcHJlc3Npb25zPWFsbCAi
IFwKKyAgICAgICAgICAgICAgICAiLS14bWw9eWVzICIgXAorICAgICAgICAgICAgICAgICItLXht
bC1maWxlPVwiJXNcIiAiICUgKHhtbGZpbGUpCiAgICAgICAgIHJldHVybiBlbnZpcm9ubWVudAog
CiAgICAgZGVmIF9nZW5lcmF0ZV9hbGxfdGVzdF9jb25maWd1cmF0aW9ucyhzZWxmKToK
</data>

          </attachment>
      

    </bug>

</bugzilla>