<?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>173559</bug_id>
          
          <creation_ts>2017-06-19 12:06:13 -0700</creation_ts>
          <short_desc>lint-test-expectations should be run during style checking</short_desc>
          <delta_ts>2017-07-24 00:38:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>174775</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>achristensen</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>dean_johnson</cc>
    
    <cc>glenn</cc>
    
    <cc>kocsen_chung</cc>
    
    <cc>lforschler</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1320769</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-06-19 12:06:13 -0700</bug_when>
    <thetext>Talking to a few bot-watchers, no one was aware of the stand-alone lint-test-expectations script and it is not regularly being checked (Note that our bots actually run a variant of lint-test-expectations every time they run the layout tests).  To prevent errors in the test-expectations from finding their way into the tree, we should run lint-test-expectations on during style checking, only printing out errors in the changed expectation files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1320770</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-06-19 12:06:44 -0700</bug_when>
    <thetext>&lt;rdar://problem/32854941&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1320771</commentid>
    <comment_count>2</comment_count>
      <attachid>313324</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-06-19 12:09:28 -0700</bug_when>
    <thetext>Created attachment 313324
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1320956</commentid>
    <comment_count>3</comment_count>
      <attachid>313324</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-06-19 20:41:40 -0700</bug_when>
    <thetext>Comment on attachment 313324
Patch

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

&gt; Tools/Scripts/webkitpy/style/main.py:168
&gt; +        linter_path = host.filesystem.join(host.filesystem.dirname(__file__), &apos;..&apos;, &apos;..&apos;, &apos;lint-test-expectations&apos;)
&gt; +        lint_output = host.executive.run_command([&apos;python&apos;, linter_path], error_handler=lambda error: 0)
&gt; +        for line in lint_output.splitlines():
&gt; +            if line:
&gt; +                for file in file_reader.files:
&gt; +                    if file in line:
&gt; +                        _log.info(line)
&gt; +                        error_count += 1
&gt; +                        break

We should put this logic in a helper function.

Notice that the script lint-test-expectations is implemented using the webkitpy code in Tools/Scripts/webkitpy/layout_tests/lint_test_expectations.py and ultimately uses functionality on test_expectations.TestExpectations() to parse each test expectation file. Can we do this more directly by implementing similar logic and only listing a file if it is in the patch and is a port expectation file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321156</commentid>
    <comment_count>4</comment_count>
      <attachid>313412</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-06-20 10:34:48 -0700</bug_when>
    <thetext>Created attachment 313412
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321157</commentid>
    <comment_count>5</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-06-20 10:37:49 -0700</bug_when>
    <thetext>Attachment 313412 only lints expectation files which have been changed.  Causes quite a bit of code duplication, though, which is the reason I had originally just called lint-test-expectations.

This patch will be a bit fast than the first, since it doesn&apos;t lint every test expectation file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322290</commentid>
    <comment_count>6</comment_count>
      <attachid>313412</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-06-23 08:00:57 -0700</bug_when>
    <thetext>Comment on attachment 313412
Patch

I talked in person with Dan Bates about this change yesterday (6/22).  He would like the linter inside check-webkit-style to only report errors caused by new changes and for the resulting to output to be more inline with what check-webkit-style uses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322922</commentid>
    <comment_count>7</comment_count>
      <attachid>313855</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-06-26 11:44:22 -0700</bug_when>
    <thetext>Created attachment 313855
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322923</commentid>
    <comment_count>8</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-06-26 11:45:49 -0700</bug_when>
    <thetext>Attachment 313855 still needs tests, but I would like to make sure that this is the correct approach before constructing tests for this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1326208</commentid>
    <comment_count>9</comment_count>
      <attachid>314760</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-07-06 15:01:48 -0700</bug_when>
    <thetext>Created attachment 314760
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330158</commentid>
    <comment_count>10</comment_count>
      <attachid>314760</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2017-07-18 15:23:28 -0700</bug_when>
    <thetext>Comment on attachment 314760
Patch

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

r=me, although this patch is complex enough it wouldn&apos;t hurt to get a second set of eyes.

&gt; Tools/ChangeLog:11
&gt; +        Running the test expectation linter requires reading both files and lines not in the
&gt; +        patch because, for example, deletion of a test can cause a lint failure even though
&gt; +        not test expectations where modified.

I feel there&apos;s more to be said here.  What is the implication of this statement?  Maybe something like this?

This means that the linter may occasionally warn about lines that weren&apos;t changed in the immediate patch, but which were triggered by those changes.  Care is taken to reduce the number of warnings outside the changes made within a patch, though.

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:401
&gt; +        self.related_files = {}  # Dictionary of files to lines in that file. Storing associated warnings

Nit: Comment should end with period.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330193</commentid>
    <comment_count>11</comment_count>
      <attachid>315854</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-07-18 16:23:57 -0700</bug_when>
    <thetext>Created attachment 315854
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330208</commentid>
    <comment_count>12</comment_count>
      <attachid>315854</attachid>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2017-07-18 16:55:25 -0700</bug_when>
    <thetext>Comment on attachment 315854
Patch

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

Looks good overall, and thanks for adding tests! Few stylistic / pythonic idioms comments, but functionally nothing seems wrong/off to me. Unofficial r=me w/ my comments.

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:64
&gt; +class Warning(object):

I feel like this should be called TestExpectationWarning instead of just &apos;Warning&apos; as to provide greater clarity as to what this object is representing.

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:103
&gt; +        self._shorten_filename = shorten_filename or (lambda x: x)

You could default to &apos;str&apos; (the function) instead of &apos;None&apos; and avoid doing the &apos;or (lambda x: x)&apos;.

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:401
&gt; +        self.related_files = {}  # Dictionary of files to lines in that file associated with the warnings of this line.

Can you update this comment to be a bit more clear? Specifically the latter half.

&gt; Tools/Scripts/webkitpy/style/checker.py:815
&gt; +    def do_association_check(self, files, cwd, host=Host()):

Nice job with the docstring here!

&gt; Tools/Scripts/webkitpy/style/filereader.py:67
&gt; +        self._files = {}

Nit: Use collections.defaultdict here instead, like so:
import collections
self._files = collections.defaultdict(list)

&gt; Tools/Scripts/webkitpy/style/filereader.py:112
&gt; +        abs_file_path = self.filesystem.abspath(file_path)  # Unifies patch and cherry-picking code paths.

This comment for this line specifically adds confusion for me... it seems like it&apos;d be better placed in the ChangeLog, or you should describe why it&apos;s implemented this way in the docstring.

&gt; Tools/Scripts/webkitpy/style/filereader.py:113
&gt; +        if not abs_file_path in self._files:

Nit: not abs_file_path in self._files: =&gt; abs_file_path not in self._files:

&gt; Tools/Scripts/webkitpy/style/filereader.py:119
&gt;  

You can remove the first if block, and the inner if block of `if &apos;line_numbers&apos; in kwargs` by using collections.defaultdict. It will essentially auto-create a list for your key when instantiating a new key on the dict. This allows you to easily do:
self._files.extend(kwargs[&apos;line_numbers&apos;])

I would rewrite the entire block as follows:
abs_file_path = self.filesystem.abspath(file_path)
line_numbers = kwargs.get(&apos;line_numbers)
if line_numbers is not None:
  self._files[abs_file_path].extend(line_numbers)

&gt; Tools/Scripts/webkitpy/style/checkers/test_expectations.py:127
&gt; +        files_linted = set()

Super-nit: Swap the order of these for readability. Also remove the excessive new-line above.

&gt; Tools/Scripts/webkitpy/style/checkers/test_expectations.py:129
&gt; +            expectations_dict = port.expectations_dict()

Nit: expectations_dict is only used here and doesn&apos;t provide much value. Let&apos;s just in-line the port.expectations_dict().keys() call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330209</commentid>
    <comment_count>13</comment_count>
      <attachid>315854</attachid>
    <who name="Kocsen Chung">kocsen_chung</who>
    <bug_when>2017-07-18 16:59:36 -0700</bug_when>
    <thetext>Comment on attachment 315854
Patch

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

Overall seems solid, I have a few nits listed here and there as well as some questions.

&gt; Tools/ChangeLog:3
&gt; +        lint-test-expectations should be run during style checking

Nit: period at the end of this line?

&gt; Tools/ChangeLog:11
&gt; +        not test expectations where modified. This means that the linter will occasionally warn

not =&gt; no

&gt; Tools/Scripts/webkitpy/common/system/filesystem_mock.py:335
&gt; +    def open_text_file_for_reading(self, path, errors=&apos;strict&apos;):

Where is this new parameter &apos;errors&apos; used?

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:64
&gt; +class Warning(object):

&quot;Warning&quot; is too generic of a name IMO. What about &quot;TextExpectationWarning&quot;? If that&apos;s too long maybe &quot;TestWarning&quot;?

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:103
&gt; +        self._shorten_filename = shorten_filename or (lambda x: x)

Why are we passing `shorten_filename` as a parameter? Why not have the private function within TestExpectationParser?

&gt; Tools/Scripts/webkitpy/port/win.py:52
&gt; +    _log.debug(&quot;Not running on native Windows.&quot;)  # Importing win.py on non-windows systems is a common use case.

Nit: The in-line comment is good to explain why you made this change when reviewing the patch, but I don&apos;t think we should check it in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330363</commentid>
    <comment_count>14</comment_count>
      <attachid>315854</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-07-19 08:47:43 -0700</bug_when>
    <thetext>Comment on attachment 315854
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/common/system/filesystem_mock.py:335
&gt;&gt; +    def open_text_file_for_reading(self, path, errors=&apos;strict&apos;):
&gt; 
&gt; Where is this new parameter &apos;errors&apos; used?

This is a mock object.  It should have had this the entire time since the actual object has this.  The mock object doesn&apos;t use it.

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:103
&gt;&gt;&gt; +        self._shorten_filename = shorten_filename or (lambda x: x)
&gt;&gt; 
&gt;&gt; You could default to &apos;str&apos; (the function) instead of &apos;None&apos; and avoid doing the &apos;or (lambda x: x)&apos;.
&gt; 
&gt; Why are we passing `shorten_filename` as a parameter? Why not have the private function within TestExpectationParser?

To Kocsen&apos;s question: It&apos;s the same idiom used in TestExpectationsModel.

&gt;&gt; Tools/Scripts/webkitpy/style/filereader.py:67
&gt;&gt; +        self._files = {}
&gt; 
&gt; Nit: Use collections.defaultdict here instead, like so:
&gt; import collections
&gt; self._files = collections.defaultdict(list)

In this case, using a defaultdict isn&apos;t the correct approach since &apos;None&apos; vs &apos;not in the dictionary&apos; are not the same thing.  Take a look at the file deletion code on line 153.  Generally, None is used to indicate that the entire file has been changed (with a move or a delete) while a list of line numbers tracks changes in specific lines in a file.  This results in a bit more code in TextFileReader.process_file(...), but much less code in TestExpectationChecker.lint_test_expectations(...)

&gt;&gt; Tools/Scripts/webkitpy/style/filereader.py:119
&gt;&gt;  
&gt; 
&gt; You can remove the first if block, and the inner if block of `if &apos;line_numbers&apos; in kwargs` by using collections.defaultdict. It will essentially auto-create a list for your key when instantiating a new key on the dict. This allows you to easily do:
&gt; self._files.extend(kwargs[&apos;line_numbers&apos;])
&gt; 
&gt; I would rewrite the entire block as follows:
&gt; abs_file_path = self.filesystem.abspath(file_path)
&gt; line_numbers = kwargs.get(&apos;line_numbers)
&gt; if line_numbers is not None:
&gt;   self._files[abs_file_path].extend(line_numbers)

See my above comment.  Because of how deleted files are handled, this isn&apos;t the correct approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330365</commentid>
    <comment_count>15</comment_count>
      <attachid>315922</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-07-19 08:55:20 -0700</bug_when>
    <thetext>Created attachment 315922
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330391</commentid>
    <comment_count>16</comment_count>
      <attachid>315922</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-19 10:09:35 -0700</bug_when>
    <thetext>Comment on attachment 315922
Patch

Clearing flags on attachment: 315922

Committed r219657: &lt;http://trac.webkit.org/changeset/219657&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330392</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-19 10:09:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330415</commentid>
    <comment_count>18</comment_count>
      <attachid>315922</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-07-19 11:02:20 -0700</bug_when>
    <thetext>Comment on attachment 315922
Patch

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

&gt; Tools/Scripts/webkitpy/style/filereader.py:159
&gt;          &quot;&quot;&quot;Count up files that contains only deleted lines.
&gt;  
&gt;          Files which has no modified or newly-added lines don&apos;t need
&gt;          to check style, but should be treated as checked. For that
&gt;          purpose, we just count up the number of such files.
&gt;          &quot;&quot;&quot;

This comment is out-of-date.

&gt; Tools/Scripts/webkitpy/style/checkers/test_expectations.py:123
&gt; +    def lint_test_expectations(files, configuration, cwd, increment_error_count=lambda: 0, line_numbers=None, host=Host()):

Is it necessary to have default values for increment_error_count and host?

&gt; Tools/Scripts/webkitpy/style/checkers/test_expectations.py:133
&gt; +                    expectations_file,
&gt; +                    configuration,
&gt; +                    increment_error_count,
&gt; +                    line_numbers)

See my remark above about exploding function arguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330420</commentid>
    <comment_count>19</comment_count>
      <attachid>315922</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-07-19 11:08:15 -0700</bug_when>
    <thetext>Comment on attachment 315922
Patch

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

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:95
&gt; +    def __init__(self, port, full_test_list, allow_rebaseline_modifier, shorten_filename=str):

How did you come to the decision to use str() as the default value for shorten_filename? Does this mean that we can never have Unicode characters in the names of layout tests? This default value does not match the default value of the same argument in the TestExpectationsModel constructor.

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:745
&gt; +        if expectation_line.related_files.get(self._shorten_filename(prev_expectation_line.filename), None) is None:
&gt; +            expectation_line.related_files[self._shorten_filename(prev_expectation_line.filename)] = []
&gt; +        expectation_line.related_files[self._shorten_filename(prev_expectation_line.filename)].append(prev_expectation_line.line_number)

This code repeatedly computes the shortened filename and underutilizes the default value for .get(). I would have written this as:

previous_expectation_filename = self._shorten_filename(prev_expectation_line.filename)
expectation_line.related_files[previous_expectation_filename] = expectation_line.related_files.get(previous_expectation_filename, [])
expectation_line.related_files[previous_expectation_filename].append(prev_expectation_line.line_number)

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:748
&gt; +        if prev_expectation_line.related_files.get(self._shorten_filename(expectation_line.filename), None) is None:
&gt; +            prev_expectation_line.related_files[self._shorten_filename(expectation_line.filename)] = []

I would take a similar approach as above.

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:749
&gt; +        prev_expectation_line.related_files[self._shorten_filename(expectation_line.filename)].append(prev_expectation_line.line_number)

Did you mean to append prev_expectation_line.line_number?

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:971
&gt; +                    self._shorten_filename(expectation.filename),
&gt; +                    expectation.line_number,
&gt; +                    expectation.original_string,
&gt; +                    warning,
&gt; +                    expectation.name if expectation.expectations else None)

As far as I know exploding function arguments such that there is one argument per line is not the style we use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330421</commentid>
    <comment_count>20</comment_count>
      <attachid>315922</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-07-19 11:10:13 -0700</bug_when>
    <thetext>Comment on attachment 315922
Patch

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

&gt; Tools/Scripts/webkitpy/style/checkers/test_expectations.py:102
&gt; +    def _should_log_linter_warning(warning, files, cwd, host):

Can we write unit test for this?

&gt;&gt; Tools/Scripts/webkitpy/style/checkers/test_expectations.py:123
&gt;&gt; +    def lint_test_expectations(files, configuration, cwd, increment_error_count=lambda: 0, line_numbers=None, host=Host()):
&gt; 
&gt; Is it necessary to have default values for increment_error_count and host?

Can we write unit test for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330451</commentid>
    <comment_count>21</comment_count>
      <attachid>315922</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-07-19 11:53:26 -0700</bug_when>
    <thetext>Comment on attachment 315922
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:95
&gt;&gt; +    def __init__(self, port, full_test_list, allow_rebaseline_modifier, shorten_filename=str):
&gt; 
&gt; How did you come to the decision to use str() as the default value for shorten_filename? Does this mean that we can never have Unicode characters in the names of layout tests? This default value does not match the default value of the same argument in the TestExpectationsModel constructor.

This was an attempt to remove the (lambda x: x) in line 103.  But you are correct.  str is not right here.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:971
&gt;&gt; +                    expectation.name if expectation.expectations else None)
&gt; 
&gt; As far as I know exploding function arguments such that there is one argument per line is not the style we use.

I believe our style guide is ambitious on the matter.  In some cases we break these calls up in our python (especially when the line would be very long, as in this case).  Even the previous line was split, although not one argument on each line.  I will mimic the pattern used previously.

&gt;&gt; Tools/Scripts/webkitpy/style/checkers/test_expectations.py:102
&gt;&gt; +    def _should_log_linter_warning(warning, files, cwd, host):
&gt; 
&gt; Can we write unit test for this?

I don&apos;t think such a unit test would be very meaningful.  In order to test these functions, we would need to construct fake warnings, a fake file-line-number map and a host which was aware of the files which both those warnings and file-line-number-map came from.  Given that the error-prone parts of this process is creating those file-line-number maps, I feel like unit tests would result in brittle test code.

The better way to test these functions is implemented in main_unittest.py, where we create TestExpectations in a mock file system with the types of errors we expect to catch with these functions.  Errors in these functions will be caught with that testing code.

&gt;&gt;&gt; Tools/Scripts/webkitpy/style/checkers/test_expectations.py:123
&gt;&gt;&gt; +    def lint_test_expectations(files, configuration, cwd, increment_error_count=lambda: 0, line_numbers=None, host=Host()):
&gt;&gt; 
&gt;&gt; Is it necessary to have default values for increment_error_count and host?
&gt; 
&gt; Can we write unit test for this?

Default values: Not at the moment, it is not necessary to have default values.  But since we can do something sane without these arguments, I think its worth defining defaults for them.

Unit tests: See above comment on _should_log_linter_warning.

&gt;&gt; Tools/Scripts/webkitpy/style/checkers/test_expectations.py:133
&gt;&gt; +                    line_numbers)
&gt; 
&gt; See my remark above about exploding function arguments.

Here, it should definitely be collapsed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330453</commentid>
    <comment_count>22</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-07-19 11:53:56 -0700</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330454</commentid>
    <comment_count>23</comment_count>
      <attachid>315946</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-07-19 11:53:57 -0700</bug_when>
    <thetext>Created attachment 315946
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330458</commentid>
    <comment_count>24</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-07-19 11:56:18 -0700</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #23)
&gt; Created attachment 315946 [details]
&gt; Patch

This patch addresses Dan&apos;s comments, except for the unit tests and default arguments.

Note that the change Dan was commenting on has already landed.  I would still like to make these changes since 2 of them are fixing bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330466</commentid>
    <comment_count>25</comment_count>
      <attachid>315946</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-07-19 12:08:03 -0700</bug_when>
    <thetext>Comment on attachment 315946
Patch

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

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:718
&gt; +        shortened_expectation_file = self._shorten_filename(expectation_line.filename)
&gt; +        shortened_previous_expectation_file = self._shorten_filename(prev_expectation_line.filename)

file =&gt; filename

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:734
&gt; -                self._shorten_filename(expectation_line.filename), expectation_line.line_number,
&gt; -                self._shorten_filename(prev_expectation_line.filename), prev_expectation_line.line_number))
&gt; +                shortened_previous_expectation_file, expectation_line.line_number,
&gt; +                shortened_expectation_file, prev_expectation_line.line_number))

This is a behavior change. Is this intentional?

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:747
&gt; +        if expectation_line.related_files.get(shortened_previous_expectation_file, None) is None:
&gt; +            expectation_line.related_files[shortened_previous_expectation_file] = []
&gt; +        expectation_line.related_files[shortened_previous_expectation_file].append(prev_expectation_line.line_number)

You did not make the change I suggested in comment #19. Did you disagree with it? If so, can you elaborate?

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:751
&gt; +        if prev_expectation_line.related_files.get(shortened_expectation_file, None) is None:
&gt; +            prev_expectation_line.related_files[shortened_expectation_file] = []
&gt; +        prev_expectation_line.related_files[shortened_expectation_file].append(expectation_line.line_number)

You did not make the change I suggested in comment #19. Did you disagree with it? If so, can you elaborate?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330494</commentid>
    <comment_count>26</comment_count>
      <attachid>315946</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-07-19 13:26:14 -0700</bug_when>
    <thetext>Comment on attachment 315946
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:734
&gt;&gt; +                shortened_expectation_file, prev_expectation_line.line_number))
&gt; 
&gt; This is a behavior change. Is this intentional?

Good catch.  No, it is not intentional.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:747
&gt;&gt; +        expectation_line.related_files[shortened_previous_expectation_file].append(prev_expectation_line.line_number)
&gt; 
&gt; You did not make the change I suggested in comment #19. Did you disagree with it? If so, can you elaborate?

I&apos;m sorry, I didn&apos;t read comment #19 closely enough.

The catch with this code is that an entry in related_files can be none if the file in question was deleted. (see line 205 in Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py)  I did this so that this code would be robust and continue working even if you somehow find yourself in a case where you both have a line number for a file and you think the file does not exist.  In practice, this case should be impossible since a) you shouldn&apos;t be able to attribute a file line to a missing file and, b) as the code is currently structured, files will only be classified as missing if they are test files and will only have line numbers associated with errors if they are test expectations.

Since this is a question of style over robustness, I tend to err on the side of more robust code.  In this case, I don&apos;t feel strongly either way.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:751
&gt;&gt; +        prev_expectation_line.related_files[shortened_expectation_file].append(expectation_line.line_number)
&gt; 
&gt; You did not make the change I suggested in comment #19. Did you disagree with it? If so, can you elaborate?

See above comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330497</commentid>
    <comment_count>27</comment_count>
      <attachid>315953</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-07-19 13:38:41 -0700</bug_when>
    <thetext>Created attachment 315953
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330505</commentid>
    <comment_count>28</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-07-19 14:38:56 -0700</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #26)
&gt; &gt;&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:747
&gt; &gt;&gt; +        expectation_line.related_files[shortened_previous_expectation_file].append(prev_expectation_line.line_number)
&gt; &gt; 
&gt; &gt; You did not make the change I suggested in comment #19. Did you disagree with it? If so, can you elaborate?
&gt; 
&gt; I&apos;m sorry, I didn&apos;t read comment #19 closely enough.
&gt; 
&gt; The catch with this code is that an entry in related_files can be none if
&gt; the file in question was deleted. (see line 205 in
&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py)  I did this
&gt; so that this code would be robust and continue working even if you somehow
&gt; find yourself in a case where you both have a line number for a file and you
&gt; think the file does not exist.  In practice, this case should be impossible
&gt; since a) you shouldn&apos;t be able to attribute a file line to a missing file
&gt; and, b) as the code is currently structured, files will only be classified
&gt; as missing if they are test files and will only have line numbers associated
&gt; with errors if they are test expectations.
&gt; 
&gt; Since this is a question of style over robustness, I tend to err on the side
&gt; of more robust code.  In this case, I don&apos;t feel strongly either way.
&gt; 

Usually we use assert to ensure invariants. I am not very familiar with this code and hence did not check your patch for correctness. The fact that the related files dictionary can have keys that map to None does not seem intuitive and caught me and Kocsen off guard. When something is not obvious it is always better to make the code obvious and add asserts. If this is not straightforward then adding unit tests is a great way to capture such knowledge. Lastly code comments can help explain non-obvious or weird code contortions. I will leave the decision how to update this code (or not) to you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330516</commentid>
    <comment_count>29</comment_count>
      <attachid>315960</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-07-19 16:40:07 -0700</bug_when>
    <thetext>Created attachment 315960
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330517</commentid>
    <comment_count>30</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-07-19 16:44:46 -0700</bug_when>
    <thetext>(In reply to Daniel Bates from comment #28)
&gt; (In reply to Jonathan Bedard from comment #26)
&gt; &gt; ...
&gt; &gt; 
&gt; 
&gt; Usually we use assert to ensure invariants. I am not very familiar with this
&gt; code and hence did not check your patch for correctness. The fact that the
&gt; related files dictionary can have keys that map to None does not seem
&gt; intuitive and caught me and Kocsen off guard. When something is not obvious
&gt; it is always better to make the code obvious and add asserts. If this is not
&gt; straightforward then adding unit tests is a great way to capture such
&gt; knowledge. Lastly code comments can help explain non-obvious or weird code
&gt; contortions. I will leave the decision how to update this code (or not) to
&gt; you.

Since it seems like my use of &apos;None&apos; has caused confusion, I added a comment in both filereader.py and models/test_expectations.py. I also added an assert in models/test_expectations.py, to check that the case which I said should be impossible does not occur.

With these changes, your suggestion in comment #19 has also been integrated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330519</commentid>
    <comment_count>31</comment_count>
      <attachid>315960</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-19 17:17:44 -0700</bug_when>
    <thetext>Comment on attachment 315960
Patch for landing

Clearing flags on attachment: 315960

Committed r219669: &lt;http://trac.webkit.org/changeset/219669&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330520</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-19 17:17:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330524</commentid>
    <comment_count>33</comment_count>
      <attachid>315960</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-07-19 17:39:17 -0700</bug_when>
    <thetext>Comment on attachment 315960
Patch for landing

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

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:747
&gt; +        expectation_line.related_files[shortened_previous_expectation_filename] = expectation_line.related_files.get(shortened_previous_expectation_filename, []).append(prev_expectation_line.line_number)

The way you wrote this is not faithful to the way I suggested writing his code in comment #19. That&apos;s fine as long as this code works. Does it? From the examples on &lt;https://docs.python.org/2/tutorial/datastructures.html&gt; it looks like list.append() returns None.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330638</commentid>
    <comment_count>34</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-07-20 09:05:33 -0700</bug_when>
    <thetext>(In reply to Daniel Bates from comment #33)
&gt; Comment on attachment 315960 [details]
&gt; Patch for landing
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=315960&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:747
&gt; &gt; +        expectation_line.related_files[shortened_previous_expectation_filename] = expectation_line.related_files.get(shortened_previous_expectation_filename, []).append(prev_expectation_line.line_number)
&gt; 
&gt; The way you wrote this is not faithful to the way I suggested writing his
&gt; code in comment #19. That&apos;s fine as long as this code works. Does it? From
&gt; the examples on &lt;https://docs.python.org/2/tutorial/datastructures.html&gt; it
&gt; looks like list.append() returns None.

You are correct, and this has revealed a weakness in the unit tests as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330641</commentid>
    <comment_count>35</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-07-20 09:21:46 -0700</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330642</commentid>
    <comment_count>36</comment_count>
      <attachid>315992</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-07-20 09:21:46 -0700</bug_when>
    <thetext>Created attachment 315992
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330647</commentid>
    <comment_count>37</comment_count>
      <attachid>315992</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2017-07-20 09:30:13 -0700</bug_when>
    <thetext>Comment on attachment 315992
Patch

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

&gt; Tools/Scripts/webkitpy/style/main_unittest.py:155
&gt; +                &apos;# TestExpectations\ncss1/test.html [ Failure ]\ncss1/test.html [ Failure ]\n&apos;}

Nit: spacing seems off.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330648</commentid>
    <comment_count>38</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-07-20 09:33:35 -0700</bug_when>
    <thetext>Committed r219689: &lt;http://trac.webkit.org/changeset/219689&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331554</commentid>
    <comment_count>39</comment_count>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2017-07-24 00:38:23 -0700</bug_when>
    <thetext>(In reply to WebKit Commit Bot from comment #16)
&gt; Comment on attachment 315922 [details]
&gt; Patch
&gt; 
&gt; Clearing flags on attachment: 315922
&gt; 
&gt; Committed r219657: &lt;http://trac.webkit.org/changeset/219657&gt;

It seems this introduced an issue on the style checker.
See bug #174775 for details.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313324</attachid>
            <date>2017-06-19 12:09:28 -0700</date>
            <delta_ts>2017-06-20 10:34:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173559-20170619120927.patch</filename>
            <type>text/plain</type>
            <size>3147</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxODUwMCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE5IEBACisyMDE3LTA2LTE5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBsaW50LXRlc3QtZXhwZWN0YXRpb25zIHNob3VsZCBiZSBydW4gZHVyaW5n
IHN0eWxlIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzM1NTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMyODU0OTQxPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9maWxlcmVhZGVyLnB5OgorICAgICAgICAoVGV4dEZpbGVSZWFkZXIuX19pbml0
X18pOiBSZXRhaW4gYSBsaXN0IG9mIGNoYW5nZWQgZmlsZXMuCisgICAgICAgIChUZXh0RmlsZVJl
YWRlci5maWxlX2NvdW50KTogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGxpc3Qgb2YgY2hhbmdl
ZCBmaWxlcy4KKyAgICAgICAgKFRleHRGaWxlUmVhZGVyLnByb2Nlc3NfZmlsZSk6IEFkZCB0aGUg
ZmlsZSBwcm9jZXNzZWQgdG8gdGhlIGxpc3Qgb2YgY2hhbmdlZCBmaWxlcy4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL21haW4ucHk6CisgICAgICAgIChDaGVja1dlYktpdFN0eWxl
Lm1haW4pOiBSdW4gbGludC10ZXN0LWV4cGVjdGF0aW9ucywgYnV0IG9ubHkgbG9nIGVycm9ycyBp
biBmaWxlcworICAgICAgICB3aGljaCBoYXZlIGJlZW4gY2hhbmdlZC4KKwogMjAxNy0wNi0xOCAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IFJlZiB0byBkZXJl
ZiBiZWZvcmUgYXNzaWdubWVudCwgYWRkIHRlc3RzIGZvciB0aGlzIHRvIFJlZlB0ciwgUmVmLCBG
dW5jdGlvbgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9maWxlcmVhZGVyLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvZmlsZXJlYWRlci5w
eQkocmV2aXNpb24gMjE4NDk5KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9maWxl
cmVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC02Miw5ICs2MiwxMyBAQCBjbGFzcyBUZXh0Rmls
ZVJlYWRlcihvYmplY3QpOgogCiAgICAgICAgIHNlbGYuZmlsZXN5c3RlbSA9IGZpbGVzeXN0ZW0K
ICAgICAgICAgc2VsZi5fcHJvY2Vzc29yID0gcHJvY2Vzc29yCi0gICAgICAgIHNlbGYuZmlsZV9j
b3VudCA9IDAKKyAgICAgICAgc2VsZi5maWxlcyA9IFtdCiAgICAgICAgIHNlbGYuZGVsZXRlX29u
bHlfZmlsZV9jb3VudCA9IDAKIAorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBmaWxlX2NvdW50KHNl
bGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuZmlsZXMpCisKICAgICBkZWYgX3JlYWRfbGlu
ZXMoc2VsZiwgZmlsZV9wYXRoKToKICAgICAgICAgIiIiUmVhZCB0aGUgZmlsZSBhdCBhIHBhdGgs
IGFuZCByZXR1cm4gaXRzIGxpbmVzLgogCkBAIC0xMDMsNyArMTA3LDcgQEAgY2xhc3MgVGV4dEZp
bGVSZWFkZXIob2JqZWN0KToKICAgICAgICAgICBTeXN0ZW1FeGl0OiBJZiBubyBmaWxlIGF0IGZp
bGVfcGF0aCBleGlzdHMuCiAKICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuZmlsZV9jb3VudCAr
PSAxCisgICAgICAgIHNlbGYuZmlsZXMuYXBwZW5kKGZpbGVfcGF0aCkKIAogICAgICAgICBpZiBu
b3Qgc2VsZi5maWxlc3lzdGVtLmV4aXN0cyhmaWxlX3BhdGgpIGFuZCBmaWxlX3BhdGggIT0gIi0i
OgogICAgICAgICAgICAgX2xvZy5lcnJvcigiRmlsZSBkb2VzIG5vdCBleGlzdDogJyVzJyIgJSBm
aWxlX3BhdGgpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL21haW4ucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9tYWluLnB5CShyZXZpc2lv
biAyMTg0OTkpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL21haW4ucHkJKHdvcmtp
bmcgY29weSkKQEAgLTE1Nyw2ICsxNTcsMTggQEAgY2xhc3MgQ2hlY2tXZWJLaXRTdHlsZShvYmpl
Y3QpOgogICAgICAgICBmaWxlX2NvdW50ID0gZmlsZV9yZWFkZXIuZmlsZV9jb3VudAogICAgICAg
ICBkZWxldGVfb25seV9maWxlX2NvdW50ID0gZmlsZV9yZWFkZXIuZGVsZXRlX29ubHlfZmlsZV9j
b3VudAogCisgICAgICAgIGxpbnRlcl9wYXRoID0gaG9zdC5maWxlc3lzdGVtLmpvaW4oaG9zdC5m
aWxlc3lzdGVtLmRpcm5hbWUoX19maWxlX18pLCAnLi4nLCAnLi4nLCAnbGludC10ZXN0LWV4cGVj
dGF0aW9ucycpCisgICAgICAgIGxpbnRfb3V0cHV0ID0gaG9zdC5leGVjdXRpdmUucnVuX2NvbW1h
bmQoWydweXRob24nLCBsaW50ZXJfcGF0aF0sIGVycm9yX2hhbmRsZXI9bGFtYmRhIGVycm9yOiAw
KQorICAgICAgICBmb3IgbGluZSBpbiBsaW50X291dHB1dC5zcGxpdGxpbmVzKCk6CisgICAgICAg
ICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVfcmVhZGVyLmZp
bGVzOgorICAgICAgICAgICAgICAgICAgICBpZiBmaWxlIGluIGxpbmU6CisgICAgICAgICAgICAg
ICAgICAgICAgICBfbG9nLmluZm8obGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y
X2NvdW50ICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKworCiAgICAgICAg
IF9sb2cuaW5mbygiVG90YWwgZXJyb3JzIGZvdW5kOiAlZCBpbiAlZCBmaWxlcyIgJSAoZXJyb3Jf
Y291bnQsIGZpbGVfY291bnQpKQogICAgICAgICAjIFdlIGZhaWwgd2hlbiBzdHlsZSBlcnJvcnMg
YXJlIGZvdW5kIG9yIHRoZXJlIGFyZSBubyBjaGVja2VkIGZpbGVzLgogICAgICAgICByZXR1cm4g
ZXJyb3JfY291bnQgPiAwIG9yIChmaWxlX2NvdW50ID09IDAgYW5kIGRlbGV0ZV9vbmx5X2ZpbGVf
Y291bnQgPT0gMCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313412</attachid>
            <date>2017-06-20 10:34:48 -0700</date>
            <delta_ts>2017-06-26 11:44:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173559-20170620103448.patch</filename>
            <type>text/plain</type>
            <size>4630</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxODU5OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIwIEBACisyMDE3LTA2LTIwICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBsaW50LXRlc3QtZXhwZWN0YXRpb25zIHNob3VsZCBiZSBydW4gZHVyaW5n
IHN0eWxlIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzM1NTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMyODU0OTQxPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9maWxlcmVhZGVyLnB5OgorICAgICAgICAoVGV4dEZpbGVSZWFkZXIuX19pbml0
X18pOiBSZXRhaW4gYSBsaXN0IG9mIGNoYW5nZWQgZmlsZXMuCisgICAgICAgIChUZXh0RmlsZVJl
YWRlci5maWxlX2NvdW50KTogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGxpc3Qgb2YgY2hhbmdl
ZCBmaWxlcy4KKyAgICAgICAgKFRleHRGaWxlUmVhZGVyLnByb2Nlc3NfZmlsZSk6IEFkZCB0aGUg
ZmlsZSBwcm9jZXNzZWQgdG8gdGhlIGxpc3Qgb2YgY2hhbmdlZCBmaWxlcy4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL21haW4ucHk6CisgICAgICAgIChDaGVja1dlYktpdFN0eWxl
LmxpbnRfdGVzdF9leHBlY3RhdGlvbnMpOiBSdW4gdGhlIGxpbnRlciBvbiB0ZXN0IGV4cGVjdGF0
aW9uCisgICAgICAgIGZpbGVzIHdoaWNoIGhhdmUgYmVlbiBjaGFuZ2VkLCBsb2cgZXJyb3JzIGFu
ZCByZXR1cm4gdGhlIG51bWJlciBvZiBlcnJvcnMgZm91bmQuCisgICAgICAgIChDaGVja1dlYktp
dFN0eWxlLm1haW4pOiBDYWxsIGxpbnRfdGVzdF9leHBlY3RhdGlvbnMuCisKIDIwMTctMDYtMjAg
IFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPUyBE
bkRdIFtXSzJdIFJlbW92ZSBjdXN0b20gbG9naWMgZm9yIGRpc2FtYmlndWF0aW5nIGxvbmcgcHJl
c3MgYWN0aW9uIHNoZWV0IGdlc3R1cmVzIGFuZCBkcmFnIGxpZnQKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvZmlsZXJlYWRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2ZpbGVyZWFkZXIucHkJKHJldmlzaW9uIDIxODU5MikKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvZmlsZXJlYWRlci5weQkod29ya2luZyBjb3B5KQpA
QCAtNjIsOSArNjIsMTMgQEAgY2xhc3MgVGV4dEZpbGVSZWFkZXIob2JqZWN0KToKIAogICAgICAg
ICBzZWxmLmZpbGVzeXN0ZW0gPSBmaWxlc3lzdGVtCiAgICAgICAgIHNlbGYuX3Byb2Nlc3NvciA9
IHByb2Nlc3NvcgotICAgICAgICBzZWxmLmZpbGVfY291bnQgPSAwCisgICAgICAgIHNlbGYuZmls
ZXMgPSBbXQogICAgICAgICBzZWxmLmRlbGV0ZV9vbmx5X2ZpbGVfY291bnQgPSAwCiAKKyAgICBA
cHJvcGVydHkKKyAgICBkZWYgZmlsZV9jb3VudChzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihz
ZWxmLmZpbGVzKQorCiAgICAgZGVmIF9yZWFkX2xpbmVzKHNlbGYsIGZpbGVfcGF0aCk6CiAgICAg
ICAgICIiIlJlYWQgdGhlIGZpbGUgYXQgYSBwYXRoLCBhbmQgcmV0dXJuIGl0cyBsaW5lcy4KIApA
QCAtMTAzLDcgKzEwNyw3IEBAIGNsYXNzIFRleHRGaWxlUmVhZGVyKG9iamVjdCk6CiAgICAgICAg
ICAgU3lzdGVtRXhpdDogSWYgbm8gZmlsZSBhdCBmaWxlX3BhdGggZXhpc3RzLgogCiAgICAgICAg
ICIiIgotICAgICAgICBzZWxmLmZpbGVfY291bnQgKz0gMQorICAgICAgICBzZWxmLmZpbGVzLmFw
cGVuZChmaWxlX3BhdGgpCiAKICAgICAgICAgaWYgbm90IHNlbGYuZmlsZXN5c3RlbS5leGlzdHMo
ZmlsZV9wYXRoKSBhbmQgZmlsZV9wYXRoICE9ICItIjoKICAgICAgICAgICAgIF9sb2cuZXJyb3Io
IkZpbGUgZG9lcyBub3QgZXhpc3Q6ICclcyciICUgZmlsZV9wYXRoKQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9tYWluLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvbWFpbi5weQkocmV2aXNpb24gMjE4NTkyKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9zdHlsZS9tYWluLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMSArMjQsMTIg
QEAgaW1wb3J0IGNvZGVjcwogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBzeXMKIAotaW1wb3J0IHdl
YmtpdHB5LnN0eWxlLmNoZWNrZXIgYXMgY2hlY2tlcgorZnJvbSB3ZWJraXRweS5jb21tb24uaG9z
dCBpbXBvcnQgSG9zdAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzIGltcG9ydCB0
ZXN0X2V4cGVjdGF0aW9ucworZnJvbSB3ZWJraXRweS5zdHlsZSBpbXBvcnQgY2hlY2tlcgogZnJv
bSB3ZWJraXRweS5zdHlsZS5wYXRjaHJlYWRlciBpbXBvcnQgUGF0Y2hSZWFkZXIKIGZyb20gd2Vi
a2l0cHkuc3R5bGUuY2hlY2tlciBpbXBvcnQgU3R5bGVQcm9jZXNzb3IKIGZyb20gd2Via2l0cHku
c3R5bGUuZmlsZXJlYWRlciBpbXBvcnQgVGV4dEZpbGVSZWFkZXIKLWZyb20gd2Via2l0cHkuY29t
bW9uLmhvc3QgaW1wb3J0IEhvc3QKIAogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1l
X18pCkBAIC0xMjAsNiArMTIxLDI4IEBAIGNsYXNzIENoZWNrV2ViS2l0U3R5bGUob2JqZWN0KToK
ICAgICAgICAgc3lzLnN0ZGVyciA9IHN0ZGVycgogICAgICAgICByZXR1cm4gc3RkZXJyCiAKKyAg
ICBkZWYgbGludF90ZXN0X2V4cGVjdGF0aW9ucyhzZWxmLCBmaWxlcyk6CisgICAgICAgIGVycm9y
X2NvdW50ID0gMAorICAgICAgICBob3N0ID0gSG9zdCgpCisgICAgICAgIGFic19wYXRoX2ZpbGVz
ID0gW2hvc3QuZmlsZXN5c3RlbS5hYnNwYXRoKGZpbGUpIGZvciBmaWxlIGluIGZpbGVzXQorICAg
ICAgICBwb3J0c190b19saW50ID0gW2hvc3QucG9ydF9mYWN0b3J5LmdldChuYW1lKSBmb3IgbmFt
ZSBpbiBob3N0LnBvcnRfZmFjdG9yeS5hbGxfcG9ydF9uYW1lcygpXQorICAgICAgICBmaWxlc19s
aW50ZWQgPSBzZXQoKQorICAgICAgICBmb3IgcG9ydCBpbiBwb3J0c190b19saW50OgorICAgICAg
ICAgICAgZXhwZWN0YXRpb25zX2RpY3QgPSBwb3J0LmV4cGVjdGF0aW9uc19kaWN0KCkKKyAgICAg
ICAgICAgIGZvciBleHBlY3RhdGlvbnNfZmlsZSBpbiBleHBlY3RhdGlvbnNfZGljdC5rZXlzKCk6
CisgICAgICAgICAgICAgICAgaWYgZXhwZWN0YXRpb25zX2ZpbGUgaW4gZmlsZXNfbGludGVkIG9y
IGV4cGVjdGF0aW9uc19maWxlIG5vdCBpbiBhYnNfcGF0aF9maWxlczoKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAg
IGV4cGVjdGF0aW9ucyA9IHRlc3RfZXhwZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvbnMocG9ydCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9uc190b19saW50PXtleHBlY3RhdGlv
bnNfZmlsZTogZXhwZWN0YXRpb25zX2RpY3RbZXhwZWN0YXRpb25zX2ZpbGVdfSkKKyAgICAgICAg
ICAgICAgICAgICAgZXhwZWN0YXRpb25zLnBhcnNlX2FsbF9leHBlY3RhdGlvbnMoKQorICAgICAg
ICAgICAgICAgIGV4Y2VwdCB0ZXN0X2V4cGVjdGF0aW9ucy5QYXJzZUVycm9yIGFzIGU6CisgICAg
ICAgICAgICAgICAgICAgIGZvciB3YXJuaW5nIGluIGUud2FybmluZ3M6CisgICAgICAgICAgICAg
ICAgICAgICAgICBlcnJvcl9jb3VudCArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICBfbG9n
LmVycm9yKHdhcm5pbmcpCisgICAgICAgICAgICAgICAgZmlsZXNfbGludGVkLmFkZChleHBlY3Rh
dGlvbnNfZmlsZSkKKyAgICAgICAgcmV0dXJuIGVycm9yX2NvdW50CisKICAgICBkZWYgbWFpbihz
ZWxmKToKICAgICAgICAgYXJncyA9IHN5cy5hcmd2WzE6XQogCkBAIC0xNTcsNiArMTgwLDggQEAg
Y2xhc3MgQ2hlY2tXZWJLaXRTdHlsZShvYmplY3QpOgogICAgICAgICBmaWxlX2NvdW50ID0gZmls
ZV9yZWFkZXIuZmlsZV9jb3VudAogICAgICAgICBkZWxldGVfb25seV9maWxlX2NvdW50ID0gZmls
ZV9yZWFkZXIuZGVsZXRlX29ubHlfZmlsZV9jb3VudAogCisgICAgICAgIGVycm9yX2NvdW50ICs9
IHNlbGYubGludF90ZXN0X2V4cGVjdGF0aW9ucyhmaWxlX3JlYWRlci5maWxlcykKKwogICAgICAg
ICBfbG9nLmluZm8oIlRvdGFsIGVycm9ycyBmb3VuZDogJWQgaW4gJWQgZmlsZXMiICUgKGVycm9y
X2NvdW50LCBmaWxlX2NvdW50KSkKICAgICAgICAgIyBXZSBmYWlsIHdoZW4gc3R5bGUgZXJyb3Jz
IGFyZSBmb3VuZCBvciB0aGVyZSBhcmUgbm8gY2hlY2tlZCBmaWxlcy4KICAgICAgICAgcmV0dXJu
IGVycm9yX2NvdW50ID4gMCBvciAoZmlsZV9jb3VudCA9PSAwIGFuZCBkZWxldGVfb25seV9maWxl
X2NvdW50ID09IDApCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313855</attachid>
            <date>2017-06-26 11:44:22 -0700</date>
            <delta_ts>2017-07-06 15:01:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173559-20170626114421.patch</filename>
            <type>text/plain</type>
            <size>21834</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxODgxNSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDY0IEBACisyMDE3LTA2LTI2ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBsaW50LXRlc3QtZXhwZWN0YXRpb25zIHNob3VsZCBiZSBydW4gZHVyaW5n
IHN0eWxlIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzM1NTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMyODU0OTQxPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJ1bm5pbmcgdGhlIHRl
c3QgZXhwZWN0YXRpb24gbGludGVyIHJlcXVpcmVzIHJlYWRpbmcgYm90aCBmaWxlcyBhbmQgbGlu
ZXMgbm90IGluIHRoZQorICAgICAgICBwYXRjaCBiZWNhdXNlLCBmb3IgZXhhbXBsZSwgZGVsZXRp
b24gb2YgYSB0ZXN0IGNhbiBjYXVzZSBhIGxpbnQgZmFpbHVyZSBldmVuIHRob3VnaAorICAgICAg
ICBub3QgdGVzdCBleHBlY3RhdGlvbnMgd2hlcmUgbW9kaWZpZWQuCisKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9leHBlY3RhdGlvbnMucHk6Cisg
ICAgICAgIChXYXJuaW5nKTogQWRkZWQgY2xhc3MgdG8gcGFzcyB3YXJuaW5ncyBhcyBhbiBvYmpl
Y3QgaW5zdGVhZCBvZiBhIHN0cmluZy4KKyAgICAgICAgKFdhcm5pbmcuX19pbml0X18pOiBDb25z
dHJ1Y3Qgd2FybmluZyB3aXRoIGZpbGUgbmFtZSwgbGluZSBudW1iZXIsIGxpbmUgY29udGVudCwK
KyAgICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yIGFuZCB0aGUgbmFtZSBvZiB0aGUgYXNz
b2NpYXRlZCB0ZXN0LgorICAgICAgICAoV2FybmluZy5fX3N0cl9fKTogQ29udmVydCB0byBzdHJp
bmcgc28gdGhhdCBleGlzdGluZyBwcmludGluZyBjb2RlIHdvcmtzLgorICAgICAgICAoVGVzdEV4
cGVjdGF0aW9uUGFyc2VyLl9faW5pdF9fKTogUGFzcyBzaG9ydGVuX2ZpbGVuYW1lIGZ1bmN0aW9u
IHRvCisgICAgICAgIFRlc3RFeHBlY3RhdGlvbnNQYXJzZXIgdG8gYWRkIGEgZGVsZXRlZCBmaWxl
IHRvIHRoZSByZWxhdGVkX2ZpbGVzIGRpY3Rpb25hcnkuCisgICAgICAgIChUZXN0RXhwZWN0YXRp
b25QYXJzZXIuX2NoZWNrX3Rlc3RfZXhpc3RzKTogSWYgdGhlIHRlc3QgZG9lcyBub3QgZXhpc3Qs
IGFkZCB0aGUKKyAgICAgICAgbWlzc2luZyBwYXRoIHRvIHRoZSByZWxhdGVkX2ZpbGVzIGRpY3Rp
b25hcnkuCisgICAgICAgIChUZXN0RXhwZWN0YXRpb25MaW5lLl9faW5pdF9fKTogQWRkIHJlbGF0
ZWRfZmlsZXMgZGljdGlvbmFyeSwgd2hpY2ggdHJhY2tzCisgICAgICAgIGZpbGVzIGFuZCBsaW5l
IG51bWJlcnMgcmVsYXRlZCB0byB0aGlzIHRlc3QgZXhwZWN0YXRpb24gbGluZS4gVGhpcyB3aWxs
IGFsbG93CisgICAgICAgIHRyYWNraW5nIGxpbnRlciBlcnJvcnMgaW4gdGhlIHN0eWxlIGNoZWNr
ZXIgb2NjdXJyaW5nIGFjcm9zcyBtdWx0aXBsZSBmaWxlcy4KKyAgICAgICAgKFRlc3RFeHBlY3Rh
dGlvbnNNb2RlbC5fYWxyZWFkeV9zZWVuX2JldHRlcl9tYXRjaCk6IEFkZCByZWR1bmRhbnQgZXhw
ZWN0YXRpb24KKyAgICAgICAgbGluZXMgdG8gcmVsYXRlZF9maWxlcyBkaWN0aW9uYXJ5LgorICAg
ICAgICAoVGVzdEV4cGVjdGF0aW9ucy5fX2luaXRfXyk6IFBhc3Mgc2VsZi5fc2hvcnRlbl9maWxl
bmFtZSB0byBUZXN0RXhwZWN0YXRpb25QYXJzZXIuCisgICAgICAgIChUZXN0RXhwZWN0YXRpb25z
Ll9yZXBvcnRfd2FybmluZ3MpOiBDb25zdHJ1Y3Qgd2FybmluZyBvYmplY3QgaW5zdGVhZCBvZiBz
dHJpbmcKKyAgICAgICAgd2hlbiBhZGRpbmcgdG8gd2FybmluZ3MgbGlzdC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHk6CisgICAgICAgIChQcm9jZXNzb3JCYXNl
LmRvX2Fzc29jaWF0aW9uX2NoZWNrKTogQWRkIHJlcXVpcmVkIGZ1bmN0aW9uIGZvciBwcm9jZXNz
b3IgY2xhc3Nlcy4KKyAgICAgICAgKFN0eWxlUHJvY2Vzc29yLmRvX2Fzc29jaWF0aW9uX2NoZWNr
KTogUnVuIHRoZSBUZXN0RXhwZWN0YXRpb25zIGxpbnRlciB3aGVuCisgICAgICAgIGNoZWNraW5n
IGZvciBlcnJvcnMgYmV0d2VlbiBhc3NvY2lhdGVkIGZpbGVzLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvdGVzdF9leHBlY3RhdGlvbnMucHk6CisgICAgICAgIChU
ZXN0RXhwZWN0YXRpb25zQ2hlY2tlci5jaGVja190ZXN0X2V4cGVjdGF0aW9ucyk6IFJlZmxlY3Qg
Y2hhbmdlZCBpbXBvcnQgc3RhdGVtZW50cy4KKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnNDaGVj
a2VyLl9zaG91bGRfbG9nX2xpbnRlcl93YXJuaW5nKTogR2l2ZW4gYSB3YXJuaW5nIGFuZCBhIGRp
Y3Rpb25hcnkKKyAgICAgICAgb2YgbW9kaWZpZWQgZmlsZXMsIGRldGVybWluZSBpZiB0aGUgbGlu
dGVyIHdhcm5pbmcgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjaGFuZ2VzLiAKKyAgICAgICAgKFRl
c3RFeHBlY3RhdGlvbnNDaGVja2VyLmxpbnRfdGVzdF9leHBlY3RhdGlvbnMpOiBMaW50IHRlc3Qg
ZXhwZWN0YXRpb25zIGZvciB0aGUKKyAgICAgICAgc3R5bGUgY2hlY2tlci4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2ZpbGVyZWFkZXIucHk6CisgICAgICAgIChUZXh0RmlsZVJl
YWRlci5fX2luaXRfXyk6IFRyYWNrIG1vZGlmaWVkIGZpbGVzIGluIGRpY3Rpb25hcnkgaW5zdGVh
ZCBvZiBhIGNvdW50ZXIuCisgICAgICAgIChUZXh0RmlsZVJlYWRlci5maWxlX2NvdW50KTogVXNl
IGRpY3Rpb25hcnkgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgbW9kaWZpZWQgZmlsZXMuCisg
ICAgICAgIChUZXh0RmlsZVJlYWRlci5wcm9jZXNzX2ZpbGUpOiBUcmFjayBib3RoIHRoZSBudW1i
ZXIgb2YgZmlsZXMgY2hhbmdlZCBhbmQgd2hpY2ggbGluZXMKKyAgICAgICAgaW4gdGhvc2UgZmls
ZXMgd2VyZSBjaGFuZ2VkLgorICAgICAgICAoVGV4dEZpbGVSZWFkZXIuZG9fYXNzb2NpYXRpb25f
Y2hlY2spOiBSdW4gdGhlIHByb2Nlc3NvcidzIGFzc29jaWF0ZWQgY2hlY2sgb24gYWxsCisgICAg
ICAgIG1vZGlmaWVkIG9yIGRlbGV0ZWQgZmlsZXMgcHJvY2Vzc2VkIGJ5IFRleHRGaWxlUmVhZGVy
LgorICAgICAgICAoVGV4dEZpbGVSZWFkZXIuZGVsZXRlX2ZpbGUpOiBUcmFjayBkZWxldGVkIGZp
bGVzIGluIF9maWxlcyBkaWN0aW9uYXJ5LgorICAgICAgICAoVGV4dEZpbGVSZWFkZXIuY291bnRf
ZGVsZXRlX29ubHlfZmlsZSk6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9maWxlcmVhZGVyX3VuaXR0ZXN0LnB5OgorICAgICAgICAoVGV4dEZpbGVSZWFkZXJUZXN0
LnRlc3RfZGVsZXRlX2ZpbGUpOiBSZW5hbWVkIGZ1bmN0aW9uIHRvIHJlZmxlY3QgbmV3IGZ1bmN0
aW9uIG5hbWUuCisgICAgICAgIChUZXh0RmlsZVJlYWRlclRlc3QudGVzdF9jb3VudF9kZWxldGVf
b25seV9maWxlKTogTW92ZWQgdG8gdGVzdF9kZWxldGVfZmlsZS4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL21haW4ucHk6CisgICAgICAgIChDaGVja1dlYktpdFN0eWxlLm1haW4p
OiBXaGVuIHJ1bm5pbmcgdGhlIHN0eWxlIGNoZWNrZXIgb24gYSBzcGVjaWZpYyBsaXN0IG9mIGZp
bGVzLAorICAgICAgICBleHBsaWNpdGx5IHJ1biB0aGUgYXNzb2NpYXRpb24gY2hlY2sgb24gdGhl
IGZpbGUgcmVhZGVyLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvcGF0Y2hyZWFk
ZXIucHk6CisgICAgICAgIChQYXRjaFJlYWRlci5jaGVjayk6IFNwZWNpZnkgd2hpY2ggZmlsZSB3
YXMgZGVsZXRlZCwgcnVuIHRoZSBhc3NvY2lhdGlvbiBjaGVjay4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL3BhdGNocmVhZGVyX3VuaXR0ZXN0LnB5OgorICAgICAgICAoUGF0Y2hS
ZWFkZXJUZXN0Lk1vY2tUZXh0RmlsZVJlYWRlci5kZWxldGVfZmlsZSk6IFJlbmFtZWQgY291bnRf
ZGVsZXRlX29ubHlfZmlsZS4KKyAgICAgICAgKFBhdGNoUmVhZGVyVGVzdC5Nb2NrVGV4dEZpbGVS
ZWFkZXIuZG9fYXNzb2NpYXRpb25fY2hlY2spOiBBZGRlZC4KKyAgICAgICAgKFBhdGNoUmVhZGVy
VGVzdC5Nb2NrVGV4dEZpbGVSZWFkZXIuY291bnRfZGVsZXRlX29ubHlfZmlsZSk6IFJlbmFtZWQg
ZGVsZXRlX2ZpbGUuCisKIDIwMTctMDYtMjYgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxl
LmNvbT4KIAogICAgICAgICBbVGVzdFdlYktpdEFQSV0gRml4IGZhbHNlLXBvc2l0aXZlIGJhZCBy
ZWxlYXNlIHdhcm5pbmdzIGZvdW5kIGJ5IGNsYW5nIHN0YXRpYyBhbmFseXplcgpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfZXhwZWN0YXRpb25z
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21v
ZGVscy90ZXN0X2V4cGVjdGF0aW9ucy5weQkocmV2aXNpb24gMjE4NzYyKQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfZXhwZWN0YXRpb25zLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwyMCBAQCBjbGFzcyBQYXJzZUVycm9yKEV4Y2VwdGlv
bik6CiAgICAgICAgIHJldHVybiAnUGFyc2VFcnJvcih3YXJuaW5ncz0lcyknICUgc2VsZi53YXJu
aW5ncwogCiAKK2NsYXNzIFdhcm5pbmcob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
ZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCBsaW5lLCBlcnJvciwgdGVzdD1Ob25lKToKKyAgICAgICAg
c2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYubGluZV9udW1iZXIgPSBsaW5l
X251bWJlcgorICAgICAgICBzZWxmLmxpbmUgPSBsaW5lCisgICAgICAgIHNlbGYuZXJyb3IgPSBl
cnJvcgorICAgICAgICBzZWxmLnRlc3QgPSB0ZXN0CisKKyAgICAgICAgc2VsZi5yZWxhdGVkX2Zp
bGVzID0ge30KKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJ3t9Ont9
IHt9IHt9Jy5mb3JtYXQoc2VsZi5maWxlbmFtZSwgc2VsZi5saW5lX251bWJlciwgc2VsZi5lcnJv
ciwgc2VsZi50ZXN0IGlmIHNlbGYudGVzdCBlbHNlIHNlbGYubGluZSkKKworCiBjbGFzcyBUZXN0
RXhwZWN0YXRpb25QYXJzZXIob2JqZWN0KToKICAgICAiIiJQcm92aWRlcyBwYXJzaW5nIGZhY2ls
aXRpZXMgZm9yIGxpbmVzIGluIHRoZSB0ZXN0X2V4cGVjdGF0aW9uLnR4dCBmaWxlLiIiIgogCkBA
IC03OCw3ICs5Miw3IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvblBhcnNlcihvYmplY3QpOgogCiAg
ICAgTUlTU0lOR19CVUdfV0FSTklORyA9ICdUZXN0IGxhY2tzIEJVRyBtb2RpZmllci4nCiAKLSAg
ICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgZnVsbF90ZXN0X2xpc3QsIGFsbG93X3JlYmFzZWxp
bmVfbW9kaWZpZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBmdWxsX3Rlc3RfbGlz
dCwgYWxsb3dfcmViYXNlbGluZV9tb2RpZmllciwgc2hvcnRlbl9maWxlbmFtZT1Ob25lKToKICAg
ICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2VsZi5fdGVzdF9jb25maWd1cmF0aW9u
X2NvbnZlcnRlciA9IFRlc3RDb25maWd1cmF0aW9uQ29udmVydGVyKHNldChwb3J0LmFsbF90ZXN0
X2NvbmZpZ3VyYXRpb25zKCkpLCBwb3J0LmNvbmZpZ3VyYXRpb25fc3BlY2lmaWVyX21hY3Jvcygp
KQogICAgICAgICBpZiBmdWxsX3Rlc3RfbGlzdCBpcyBOb25lOgpAQCAtODYsNiArMTAwLDcgQEAg
Y2xhc3MgVGVzdEV4cGVjdGF0aW9uUGFyc2VyKG9iamVjdCk6CiAgICAgICAgIGVsc2U6CiAgICAg
ICAgICAgICBzZWxmLl9mdWxsX3Rlc3RfbGlzdCA9IHNldChmdWxsX3Rlc3RfbGlzdCkKICAgICAg
ICAgc2VsZi5fYWxsb3dfcmViYXNlbGluZV9tb2RpZmllciA9IGFsbG93X3JlYmFzZWxpbmVfbW9k
aWZpZXIKKyAgICAgICAgc2VsZi5fc2hvcnRlbl9maWxlbmFtZSA9IHNob3J0ZW5fZmlsZW5hbWUg
b3IgKGxhbWJkYSB4OiB4KQogCiAgICAgZGVmIHBhcnNlKHNlbGYsIGZpbGVuYW1lLCBleHBlY3Rh
dGlvbnNfc3RyaW5nKToKICAgICAgICAgZXhwZWN0YXRpb25fbGluZXMgPSBbXQpAQCAtMTg2LDYg
KzIwMSw4IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvblBhcnNlcihvYmplY3QpOgogICAgICAgICAg
ICAgIyB0aW1lIHlvdSB1cGRhdGUgVGVzdEV4cGVjdGF0aW9ucyB3aXRob3V0IHN5bmNpbmcKICAg
ICAgICAgICAgICMgdGhlIExheW91dFRlc3RzIGRpcmVjdG9yeQogICAgICAgICAgICAgZXhwZWN0
YXRpb25fbGluZS53YXJuaW5ncy5hcHBlbmQoJ1BhdGggZG9lcyBub3QgZXhpc3QuJykKKyAgICAg
ICAgICAgIGV4cGVjdGVkX3BhdGggPSBzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKHNlbGYuX3BvcnQu
YWJzcGF0aF9mb3JfdGVzdChleHBlY3RhdGlvbl9saW5lLm5hbWUpKQorICAgICAgICAgICAgZXhw
ZWN0YXRpb25fbGluZS5yZWxhdGVkX2ZpbGVzW2V4cGVjdGVkX3BhdGhdID0gTm9uZQogICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHJldHVybiBUcnVlCiAKQEAgLTM4MSw2ICszOTgs
NyBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25MaW5lKG9iamVjdCk6CiAgICAgICAgIHNlbGYuY29t
bWVudCA9IE5vbmUKICAgICAgICAgc2VsZi5tYXRjaGluZ190ZXN0cyA9IFtdCiAgICAgICAgIHNl
bGYud2FybmluZ3MgPSBbXQorICAgICAgICBzZWxmLnJlbGF0ZWRfZmlsZXMgPSB7fSAgIyBEaWN0
aW9uYXJ5IG9mIGZpbGVzIHRvIGxpbmVzIGluIHRoYXQgZmlsZS4gU3RvcmluZyBhc3NvY2lhdGVk
IHdhcm5pbmdzCiAgICAgICAgIHNlbGYubm90X2FwcGxpY2FibGVfdG9fY3VycmVudF9wbGF0Zm9y
bSA9IEZhbHNlCiAKICAgICBkZWYgaXNfaW52YWxpZChzZWxmKToKQEAgLTcwMSwyOSArNzE5LDM2
IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnNNb2RlbChvYmplY3QpOgogICAgICAgICAgICAgZXhw
ZWN0YXRpb25fbGluZS53YXJuaW5ncy5hcHBlbmQoJ0R1cGxpY2F0ZSBvciBhbWJpZ3VvdXMgZW50
cnkgbGluZXMgJXM6JWQgYW5kICVzOiVkLicgJSAoCiAgICAgICAgICAgICAgICAgc2VsZi5fc2hv
cnRlbl9maWxlbmFtZShwcmV2X2V4cGVjdGF0aW9uX2xpbmUuZmlsZW5hbWUpLCBwcmV2X2V4cGVj
dGF0aW9uX2xpbmUubGluZV9udW1iZXIsCiAgICAgICAgICAgICAgICAgc2VsZi5fc2hvcnRlbl9m
aWxlbmFtZShleHBlY3RhdGlvbl9saW5lLmZpbGVuYW1lKSwgZXhwZWN0YXRpb25fbGluZS5saW5l
X251bWJlcikpCi0gICAgICAgICAgICByZXR1cm4gVHJ1ZQogCi0gICAgICAgIGlmIHByZXZfZXhw
ZWN0YXRpb25fbGluZS5tYXRjaGluZ19jb25maWd1cmF0aW9ucyA+PSBleHBlY3RhdGlvbl9saW5l
Lm1hdGNoaW5nX2NvbmZpZ3VyYXRpb25zOgorICAgICAgICBlbGlmIHByZXZfZXhwZWN0YXRpb25f
bGluZS5tYXRjaGluZ19jb25maWd1cmF0aW9ucyA+PSBleHBlY3RhdGlvbl9saW5lLm1hdGNoaW5n
X2NvbmZpZ3VyYXRpb25zOgogICAgICAgICAgICAgZXhwZWN0YXRpb25fbGluZS53YXJuaW5ncy5h
cHBlbmQoJ01vcmUgc3BlY2lmaWMgZW50cnkgZm9yICVzIG9uIGxpbmUgJXM6JWQgb3ZlcnJpZGVz
IGxpbmUgJXM6JWQuJyAlIChleHBlY3RhdGlvbl9saW5lLm5hbWUsCiAgICAgICAgICAgICAgICAg
c2VsZi5fc2hvcnRlbl9maWxlbmFtZShwcmV2X2V4cGVjdGF0aW9uX2xpbmUuZmlsZW5hbWUpLCBw
cmV2X2V4cGVjdGF0aW9uX2xpbmUubGluZV9udW1iZXIsCiAgICAgICAgICAgICAgICAgc2VsZi5f
c2hvcnRlbl9maWxlbmFtZShleHBlY3RhdGlvbl9saW5lLmZpbGVuYW1lKSwgZXhwZWN0YXRpb25f
bGluZS5saW5lX251bWJlcikpCiAgICAgICAgICAgICAjIEZJWE1FOiByZXR1cm4gRmFsc2UgaWYg
d2Ugd2FudCBtb3JlIHNwZWNpZmljIHRvIHdpbi4KLSAgICAgICAgICAgIHJldHVybiBUcnVlCiAK
LSAgICAgICAgaWYgcHJldl9leHBlY3RhdGlvbl9saW5lLm1hdGNoaW5nX2NvbmZpZ3VyYXRpb25z
IDw9IGV4cGVjdGF0aW9uX2xpbmUubWF0Y2hpbmdfY29uZmlndXJhdGlvbnM6CisgICAgICAgIGVs
aWYgcHJldl9leHBlY3RhdGlvbl9saW5lLm1hdGNoaW5nX2NvbmZpZ3VyYXRpb25zIDw9IGV4cGVj
dGF0aW9uX2xpbmUubWF0Y2hpbmdfY29uZmlndXJhdGlvbnM6CiAgICAgICAgICAgICBleHBlY3Rh
dGlvbl9saW5lLndhcm5pbmdzLmFwcGVuZCgnTW9yZSBzcGVjaWZpYyBlbnRyeSBmb3IgJXMgb24g
bGluZSAlczolZCBvdmVycmlkZXMgbGluZSAlczolZC4nICUgKGV4cGVjdGF0aW9uX2xpbmUubmFt
ZSwKICAgICAgICAgICAgICAgICBzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKGV4cGVjdGF0aW9uX2xp
bmUuZmlsZW5hbWUpLCBleHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyLAogICAgICAgICAgICAg
ICAgIHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUocHJldl9leHBlY3RhdGlvbl9saW5lLmZpbGVuYW1l
KSwgcHJldl9leHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyKSkKLSAgICAgICAgICAgIHJldHVy
biBUcnVlCiAKLSAgICAgICAgaWYgcHJldl9leHBlY3RhdGlvbl9saW5lLm1hdGNoaW5nX2NvbmZp
Z3VyYXRpb25zICYgZXhwZWN0YXRpb25fbGluZS5tYXRjaGluZ19jb25maWd1cmF0aW9uczoKKyAg
ICAgICAgZWxpZiBwcmV2X2V4cGVjdGF0aW9uX2xpbmUubWF0Y2hpbmdfY29uZmlndXJhdGlvbnMg
JiBleHBlY3RhdGlvbl9saW5lLm1hdGNoaW5nX2NvbmZpZ3VyYXRpb25zOgogICAgICAgICAgICAg
ZXhwZWN0YXRpb25fbGluZS53YXJuaW5ncy5hcHBlbmQoJ0VudHJpZXMgZm9yICVzIG9uIGxpbmVz
ICVzOiVkIGFuZCAlczolZCBtYXRjaCBvdmVybGFwcGluZyBzZXRzIG9mIGNvbmZpZ3VyYXRpb25z
LicgJSAoZXhwZWN0YXRpb25fbGluZS5uYW1lLAogICAgICAgICAgICAgICAgIHNlbGYuX3Nob3J0
ZW5fZmlsZW5hbWUocHJldl9leHBlY3RhdGlvbl9saW5lLmZpbGVuYW1lKSwgcHJldl9leHBlY3Rh
dGlvbl9saW5lLmxpbmVfbnVtYmVyLAogICAgICAgICAgICAgICAgIHNlbGYuX3Nob3J0ZW5fZmls
ZW5hbWUoZXhwZWN0YXRpb25fbGluZS5maWxlbmFtZSksIGV4cGVjdGF0aW9uX2xpbmUubGluZV9u
dW1iZXIpKQotICAgICAgICAgICAgcmV0dXJuIFRydWUKIAotICAgICAgICAjIENvbmZpZ3VyYXRp
b24gc2V0cyBhcmUgZGlzam9pbnQsIHRoZW4uCi0gICAgICAgIHJldHVybiBGYWxzZQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgIyBDb25maWd1cmF0aW9uIHNldHMgYXJlIGRpc2pvaW50Lgor
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgZXhwZWN0YXRpb25fbGluZS5y
ZWxhdGVkX2ZpbGVzLmdldChzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKHByZXZfZXhwZWN0YXRpb25f
bGluZS5maWxlbmFtZSksIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICBleHBlY3RhdGlvbl9s
aW5lLnJlbGF0ZWRfZmlsZXNbc2VsZi5fc2hvcnRlbl9maWxlbmFtZShwcmV2X2V4cGVjdGF0aW9u
X2xpbmUuZmlsZW5hbWUpXSA9IFtdCisgICAgICAgIGV4cGVjdGF0aW9uX2xpbmUucmVsYXRlZF9m
aWxlc1tzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKHByZXZfZXhwZWN0YXRpb25fbGluZS5maWxlbmFt
ZSldLmFwcGVuZChwcmV2X2V4cGVjdGF0aW9uX2xpbmUubGluZV9udW1iZXIpCisKKyAgICAgICAg
aWYgcHJldl9leHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXMuZ2V0KHNlbGYuX3Nob3J0ZW5f
ZmlsZW5hbWUoZXhwZWN0YXRpb25fbGluZS5maWxlbmFtZSksIE5vbmUpIGlzIE5vbmU6CisgICAg
ICAgICAgICBwcmV2X2V4cGVjdGF0aW9uX2xpbmUucmVsYXRlZF9maWxlc1tzZWxmLl9zaG9ydGVu
X2ZpbGVuYW1lKGV4cGVjdGF0aW9uX2xpbmUuZmlsZW5hbWUpXSA9IFtdCisgICAgICAgIHByZXZf
ZXhwZWN0YXRpb25fbGluZS5yZWxhdGVkX2ZpbGVzW3NlbGYuX3Nob3J0ZW5fZmlsZW5hbWUoZXhw
ZWN0YXRpb25fbGluZS5maWxlbmFtZSldLmFwcGVuZChwcmV2X2V4cGVjdGF0aW9uX2xpbmUubGlu
ZV9udW1iZXIpCisKKyAgICAgICAgcmV0dXJuIFRydWUKIAogCiBjbGFzcyBUZXN0RXhwZWN0YXRp
b25zKG9iamVjdCk6CkBAIC04NTMsNyArODc4LDcgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9ucyhv
YmplY3QpOgogICAgICAgICBzZWxmLl90ZXN0X2NvbmZpZyA9IHBvcnQudGVzdF9jb25maWd1cmF0
aW9uKCkKICAgICAgICAgc2VsZi5faXNfbGludF9tb2RlID0gZXhwZWN0YXRpb25zX3RvX2xpbnQg
aXMgbm90IE5vbmUKICAgICAgICAgc2VsZi5fbW9kZWwgPSBUZXN0RXhwZWN0YXRpb25zTW9kZWwo
c2VsZi5fc2hvcnRlbl9maWxlbmFtZSkKLSAgICAgICAgc2VsZi5fcGFyc2VyID0gVGVzdEV4cGVj
dGF0aW9uUGFyc2VyKHBvcnQsIHRlc3RzLCBzZWxmLl9pc19saW50X21vZGUpCisgICAgICAgIHNl
bGYuX3BhcnNlciA9IFRlc3RFeHBlY3RhdGlvblBhcnNlcihwb3J0LCB0ZXN0cywgc2VsZi5faXNf
bGludF9tb2RlLCBzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKQogICAgICAgICBzZWxmLl9wb3J0ID0g
cG9ydAogICAgICAgICBzZWxmLl9za2lwcGVkX3Rlc3RzX3dhcm5pbmdzID0gW10KICAgICAgICAg
c2VsZi5fZXhwZWN0YXRpb25zID0gW10KQEAgLTkzOCw4ICs5NjMsMTQgQEAgY2xhc3MgVGVzdEV4
cGVjdGF0aW9ucyhvYmplY3QpOgogICAgICAgICB3YXJuaW5ncyA9IFtdCiAgICAgICAgIGZvciBl
eHBlY3RhdGlvbiBpbiBzZWxmLl9leHBlY3RhdGlvbnM6CiAgICAgICAgICAgICBmb3Igd2Fybmlu
ZyBpbiBleHBlY3RhdGlvbi53YXJuaW5nczoKLSAgICAgICAgICAgICAgICB3YXJuaW5ncy5hcHBl
bmQoJyVzOiVkICVzICVzJyAlIChzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKGV4cGVjdGF0aW9uLmZp
bGVuYW1lKSwgZXhwZWN0YXRpb24ubGluZV9udW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdhcm5pbmcsIGV4cGVjdGF0aW9uLm5hbWUgaWYgZXhwZWN0YXRpb24uZXhwZWN0
YXRpb25zIGVsc2UgZXhwZWN0YXRpb24ub3JpZ2luYWxfc3RyaW5nKSkKKyAgICAgICAgICAgICAg
ICB3YXJuaW5nID0gV2FybmluZygKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2hvcnRlbl9m
aWxlbmFtZShleHBlY3RhdGlvbi5maWxlbmFtZSksCisgICAgICAgICAgICAgICAgICAgIGV4cGVj
dGF0aW9uLmxpbmVfbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbi5vcmln
aW5hbF9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcsCisgICAgICAgICAgICAg
ICAgICAgIGV4cGVjdGF0aW9uLm5hbWUgaWYgZXhwZWN0YXRpb24uZXhwZWN0YXRpb25zIGVsc2Ug
Tm9uZSkKKyAgICAgICAgICAgICAgICB3YXJuaW5nLnJlbGF0ZWRfZmlsZXMgPSBleHBlY3RhdGlv
bi5yZWxhdGVkX2ZpbGVzCisgICAgICAgICAgICAgICAgd2FybmluZ3MuYXBwZW5kKHdhcm5pbmcp
CiAKICAgICAgICAgaWYgd2FybmluZ3M6CiAgICAgICAgICAgICBzZWxmLl9oYXNfd2FybmluZ3Mg
PSBUcnVlCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CShyZXZp
c2lvbiAyMTg3NjIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTgwNCw2ICs4MDQsMjAgQEAgY2xhc3MgUHJvY2Vzc29yQmFzZShv
YmplY3QpOgogICAgICAgICAiIiIKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcign
U3ViY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50LicpCiAKKyAgICBkZWYgZG9fYXNzb2NpYXRpb25f
Y2hlY2soc2VsZiwgZmlsZXMpOgorICAgICAgICAiIiJJdCBtYXkgYmUgdGhlIGNhc2UgdGhhdCBj
aGFuZ2VzIGluIGEgZmlsZSBjYXVzZSBzdHlsZSBlcnJvcnMgdG8KKyAgICAgICAgb2NjdXIgZWxz
ZXdoZXJlIGluIHRoZSBtb2RpZmllZCBmaWxlIG9yIGluIG90aGVyIGZpbGVzIChtb3N0IG5vdGFi
bHksCisgICAgICAgIHRoaXMgaXMgdGhlIGNhc2UgZm9yIHRoZSB0ZXN0IGV4cGVjdGF0aW9ucyBs
aW50ZXIpLiBUaGUgYXNzb2NpYXRpb24gY2hlY2sKKyAgICAgICAgaXMgZGVzaWduZWQgdG8gdGFr
ZSBmaW5kIGlzc3VlcyB3aGljaCByZXF1aXJlIHBhcnNpbmcgb2YgZmlsZXMgb3V0c2lkZQorICAg
ICAgICB0aG9zZSBwcm92aWRlZCB0byB0aGUgcHJvY2Vzc29yLgorCisgICAgICAgIEFyZ3M6Cisg
ICAgICAgICAgICBmaWxlczogQSBkaWN0aW9uYXJ5IG9mIGZpbGUgbmFtZXMgdG8gbGlzdHMgb2Yg
bGluZXMgbW9kaWZpZWQgaW4gdGhlIHByb3ZpZGVkCisgICAgICAgICAgICBmaWxlLiAgRmlsZXMg
d2hpY2ggaGF2ZSBiZWVuIHJlbW92ZWQgd2lsbCBhbHNvIGJlIGluIHRoZSBkaWN0aW9uYXJ5LCB0
aGV5CisgICAgICAgICAgICB3aWxsIG1hcCB0byAnTm9uZScKKyAgICAgICAgIiIiCisgICAgICAg
IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1N1YmNsYXNzZXMgc2hvdWxkIGltcGxlbWVudC4n
KQorCiAKIGNsYXNzIFN0eWxlUHJvY2Vzc29yKFByb2Nlc3NvckJhc2UpOgogCkBAIC05MTEsMyAr
OTI1LDcgQEAgY2xhc3MgU3R5bGVQcm9jZXNzb3IoUHJvY2Vzc29yQmFzZSk6CiAgICAgICAgIF9s
b2cuZGVidWcoIlVzaW5nIGNsYXNzOiAiICsgY2hlY2tlci5fX2NsYXNzX18uX19uYW1lX18pCiAK
ICAgICAgICAgY2hlY2tlci5jaGVjayhsaW5lcykKKworICAgIGRlZiBkb19hc3NvY2lhdGlvbl9j
aGVjayhzZWxmLCBmaWxlcyk6CisgICAgICAgIF9sb2cuZGVidWcoIlJ1bm5pbmcgVGVzdEV4cGVj
dGF0aW9ucyBsaW50ZXIiKQorICAgICAgICBUZXN0RXhwZWN0YXRpb25zQ2hlY2tlci5saW50X3Rl
c3RfZXhwZWN0YXRpb25zKGZpbGVzLCBzZWxmLl9jb25maWd1cmF0aW9uLCBzZWxmLl9pbmNyZW1l
bnRfZXJyb3JfY291bnQpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2ZpbGVy
ZWFkZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9maWxl
cmVhZGVyLnB5CShyZXZpc2lvbiAyMTg3NjIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2ZpbGVyZWFkZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTYyLDkgKzYyLDEzIEBAIGNsYXNz
IFRleHRGaWxlUmVhZGVyKG9iamVjdCk6CiAKICAgICAgICAgc2VsZi5maWxlc3lzdGVtID0gZmls
ZXN5c3RlbQogICAgICAgICBzZWxmLl9wcm9jZXNzb3IgPSBwcm9jZXNzb3IKLSAgICAgICAgc2Vs
Zi5maWxlX2NvdW50ID0gMAorICAgICAgICBzZWxmLl9maWxlcyA9IHt9CiAgICAgICAgIHNlbGYu
ZGVsZXRlX29ubHlfZmlsZV9jb3VudCA9IDAKIAorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBmaWxl
X2NvdW50KHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX2ZpbGVzKSAtIHNlbGYuZGVs
ZXRlX29ubHlfZmlsZV9jb3VudAorCiAgICAgZGVmIF9yZWFkX2xpbmVzKHNlbGYsIGZpbGVfcGF0
aCk6CiAgICAgICAgICIiIlJlYWQgdGhlIGZpbGUgYXQgYSBwYXRoLCBhbmQgcmV0dXJuIGl0cyBs
aW5lcy4KIApAQCAtMTAzLDcgKzEwNywxMiBAQCBjbGFzcyBUZXh0RmlsZVJlYWRlcihvYmplY3Qp
OgogICAgICAgICAgIFN5c3RlbUV4aXQ6IElmIG5vIGZpbGUgYXQgZmlsZV9wYXRoIGV4aXN0cy4K
IAogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5maWxlX2NvdW50ICs9IDEKKyAgICAgICAgaWYg
bm90IGZpbGVfcGF0aCBpbiBzZWxmLl9maWxlczoKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzW2Zp
bGVfcGF0aF0gPSBOb25lCisgICAgICAgIGlmICdsaW5lX251bWJlcnMnIGluIGt3YXJnczoKKyAg
ICAgICAgICAgIGlmIHNlbGYuX2ZpbGVzW2ZpbGVfcGF0aF0gaXMgTm9uZToKKyAgICAgICAgICAg
ICAgICBzZWxmLl9maWxlc1tmaWxlX3BhdGhdID0gW10KKyAgICAgICAgICAgIHNlbGYuX2ZpbGVz
W2ZpbGVfcGF0aF0gPSBzZWxmLl9maWxlc1tmaWxlX3BhdGhdICsga3dhcmdzWydsaW5lX251bWJl
cnMnXQogCiAgICAgICAgIGlmIG5vdCBzZWxmLmZpbGVzeXN0ZW0uZXhpc3RzKGZpbGVfcGF0aCkg
YW5kIGZpbGVfcGF0aCAhPSAiLSI6CiAgICAgICAgICAgICBfbG9nLmVycm9yKCJGaWxlIGRvZXMg
bm90IGV4aXN0OiAnJXMnIiAlIGZpbGVfcGF0aCkKQEAgLTEzNSwxMSArMTQ0LDE2IEBAIGNsYXNz
IFRleHRGaWxlUmVhZGVyKG9iamVjdCk6CiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAg
ICAgIHNlbGYucHJvY2Vzc19maWxlKHBhdGgpCiAKLSAgICBkZWYgY291bnRfZGVsZXRlX29ubHlf
ZmlsZShzZWxmKToKKyAgICBkZWYgZG9fYXNzb2NpYXRpb25fY2hlY2soc2VsZik6CisgICAgICAg
IHNlbGYuX3Byb2Nlc3Nvci5kb19hc3NvY2lhdGlvbl9jaGVjayhzZWxmLl9maWxlcykKKworICAg
IGRlZiBkZWxldGVfZmlsZShzZWxmLCBmaWxlX3BhdGg9Tm9uZSk6CiAgICAgICAgICIiIkNvdW50
IHVwIGZpbGVzIHRoYXQgY29udGFpbnMgb25seSBkZWxldGVkIGxpbmVzLgogCiAgICAgICAgIEZp
bGVzIHdoaWNoIGhhcyBubyBtb2RpZmllZCBvciBuZXdseS1hZGRlZCBsaW5lcyBkb24ndCBuZWVk
CiAgICAgICAgIHRvIGNoZWNrIHN0eWxlLCBidXQgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY2hlY2tl
ZC4gRm9yIHRoYXQKICAgICAgICAgcHVycG9zZSwgd2UganVzdCBjb3VudCB1cCB0aGUgbnVtYmVy
IG9mIHN1Y2ggZmlsZXMuCiAgICAgICAgICIiIgorICAgICAgICBpZiBmaWxlX3BhdGg6CisgICAg
ICAgICAgICBzZWxmLl9maWxlc1tmaWxlX3BhdGhdID0gTm9uZQogICAgICAgICBzZWxmLmRlbGV0
ZV9vbmx5X2ZpbGVfY291bnQgKz0gMQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHls
ZS9maWxlcmVhZGVyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvZmlsZXJlYWRlcl91bml0dGVzdC5weQkocmV2aXNpb24gMjE4NzYyKQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9maWxlcmVhZGVyX3VuaXR0ZXN0LnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTAsOCArMTUwLDggQEAgY2xhc3MgVGV4dEZpbGVSZWFkZXJUZXN0KExv
Z2dpbmdUZXN0Q2FzZQogICAgICAgICAgICAgICAgICAgICAgKFsnZm9vJ10sIGZpbGVfcGF0aDEs
IE5vbmUpXQogICAgICAgICBzZWxmLl9hc3NlcnRfZmlsZV9yZWFkZXIocHJvY2Vzc2VkLCAyKQog
Ci0gICAgZGVmIHRlc3RfY291bnRfZGVsZXRlX29ubHlfZmlsZShzZWxmKToKLSAgICAgICAgc2Vs
Zi5fZmlsZV9yZWFkZXIuY291bnRfZGVsZXRlX29ubHlfZmlsZSgpCisgICAgZGVmIHRlc3RfZGVs
ZXRlX2ZpbGUoc2VsZik6CisgICAgICAgIHNlbGYuX2ZpbGVfcmVhZGVyLmRlbGV0ZV9maWxlKCkK
ICAgICAgICAgZGVsZXRlX29ubHlfZmlsZV9jb3VudCA9IHNlbGYuX2ZpbGVfcmVhZGVyLmRlbGV0
ZV9vbmx5X2ZpbGVfY291bnQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWxldGVfb25seV9m
aWxlX2NvdW50LCAxKQogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL21haW4u
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9tYWluLnB5CShy
ZXZpc2lvbiAyMTg3NjIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL21haW4ucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTE0Nyw2ICsxNDcsNyBAQCBjbGFzcyBDaGVja1dlYktpdFN0eWxl
KG9iamVjdCk6CiAKICAgICAgICAgaWYgcGF0aHMgYW5kIG5vdCBvcHRpb25zLmRpZmZfZmlsZXM6
CiAgICAgICAgICAgICBmaWxlX3JlYWRlci5wcm9jZXNzX3BhdGhzKHBhdGhzKQorICAgICAgICAg
ICAgZmlsZV9yZWFkZXIuZG9fYXNzb2NpYXRpb25fY2hlY2soKQogICAgICAgICBlbHNlOgogICAg
ICAgICAgICAgY2hhbmdlZF9maWxlcyA9IHBhdGhzIGlmIG9wdGlvbnMuZGlmZl9maWxlcyBlbHNl
IE5vbmUKICAgICAgICAgICAgIHBhdGNoID0gaG9zdC5zY20oKS5jcmVhdGVfcGF0Y2gob3B0aW9u
cy5naXRfY29tbWl0LCBjaGFuZ2VkX2ZpbGVzPWNoYW5nZWRfZmlsZXMsIGdpdF9pbmRleD1vcHRp
b25zLmdpdF9pbmRleCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvcGF0Y2hy
ZWFkZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9wYXRj
aHJlYWRlci5weQkocmV2aXNpb24gMjE4NzYyKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9wYXRjaHJlYWRlci5weQkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsOCBAQCBjbGFz
cyBQYXRjaFJlYWRlcihvYmplY3QpOgogICAgICAgICAgICAgICAgICMgRG9uJ3QgY2hlY2sgZmls
ZXMgd2hpY2ggY29udGFpbiBvbmx5IGRlbGV0ZWQgbGluZXMKICAgICAgICAgICAgICAgICAjIGFz
IHRoZXkgY2FuIG5ldmVyIGFkZCBzdHlsZSBlcnJvcnMuIEhvd2V2ZXIsIG1hcmsgdGhlbSBhcwog
ICAgICAgICAgICAgICAgICMgcHJvY2Vzc2VkIHNvIHRoYXQgd2UgY291bnQgdXAgbnVtYmVyIG9m
IHN1Y2ggZmlsZXMuCi0gICAgICAgICAgICAgICAgc2VsZi5fdGV4dF9maWxlX3JlYWRlci5jb3Vu
dF9kZWxldGVfb25seV9maWxlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl90ZXh0X2ZpbGVfcmVh
ZGVyLmRlbGV0ZV9maWxlKHBhdGgpCiAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAg
ICAgICAgc2VsZi5fdGV4dF9maWxlX3JlYWRlci5wcm9jZXNzX2ZpbGUoZmlsZV9wYXRoPXBhdGgs
IGxpbmVfbnVtYmVycz1saW5lX251bWJlcnMpCisgICAgICAgIHNlbGYuX3RleHRfZmlsZV9yZWFk
ZXIuZG9fYXNzb2NpYXRpb25fY2hlY2soKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9wYXRjaHJlYWRlcl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL3BhdGNocmVhZGVyX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMTg3NjIp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL3BhdGNocmVhZGVyX3VuaXR0ZXN0LnB5
CSh3b3JraW5nIGNvcHkpCkBAIC00NSwxNCArNDUsMTcgQEAgY2xhc3MgUGF0Y2hSZWFkZXJUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKQogICAgICAgICAgICAgc2VsZi5wYXNzZWRfdG9fcHJvY2Vzc19m
aWxlID0gW10KICAgICAgICAgICAgICIiIkEgbGlzdCBvZiAoZmlsZV9wYXRoLCBsaW5lX251bWJl
cnMpIHBhaXJzLiIiIgogICAgICAgICAgICAgc2VsZi5kZWxldGVfb25seV9maWxlX2NvdW50ID0g
MAotICAgICAgICAgICAgIiIiQSBudW1iZXIgb2YgdGltZXMgY291bnRfZGVsZXRlX29ubHlfZmls
ZSgpIGNhbGxlZCIiIgorICAgICAgICAgICAgIiIiQSBudW1iZXIgb2YgdGltZXMgZGVsZXRlX2Zp
bGUoKSBjYWxsZWQiIiIKIAogICAgICAgICBkZWYgcHJvY2Vzc19maWxlKHNlbGYsIGZpbGVfcGF0
aCwgbGluZV9udW1iZXJzKToKICAgICAgICAgICAgIHNlbGYucGFzc2VkX3RvX3Byb2Nlc3NfZmls
ZS5hcHBlbmQoKGZpbGVfcGF0aCwgbGluZV9udW1iZXJzKSkKIAotICAgICAgICBkZWYgY291bnRf
ZGVsZXRlX29ubHlfZmlsZShzZWxmKToKKyAgICAgICAgZGVmIGRlbGV0ZV9maWxlKHNlbGYsIGZp
bGVfcGF0aD1Ob25lKToKICAgICAgICAgICAgIHNlbGYuZGVsZXRlX29ubHlfZmlsZV9jb3VudCAr
PSAxCiAKKyAgICAgICAgZGVmIGRvX2Fzc29jaWF0aW9uX2NoZWNrKHNlbGYpOgorICAgICAgICAg
ICAgcGFzcworCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBmaWxlX3JlYWRlciA9IHNl
bGYuTW9ja1RleHRGaWxlUmVhZGVyKCkKICAgICAgICAgc2VsZi5fZmlsZV9yZWFkZXIgPSBmaWxl
X3JlYWRlcgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy90ZXN0
X2V4cGVjdGF0aW9ucy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2NoZWNrZXJzL3Rlc3RfZXhwZWN0YXRpb25zLnB5CShyZXZpc2lvbiAyMTg3NjIpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL3Rlc3RfZXhwZWN0YXRpb25zLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw4IEBAIGltcG9ydCBzeXMKIAogZnJvbSBjb21t
b24gaW1wb3J0IFRhYkNoZWNrZXIKIGZyb20gd2Via2l0cHkuY29tbW9uLmhvc3QgaW1wb3J0IEhv
c3QKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2V4cGVjdGF0aW9ucyBp
bXBvcnQgVGVzdEV4cGVjdGF0aW9uUGFyc2VyCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5t
b2RlbHMgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCitmcm9tIHdlYmtpdHB5LnN0eWxlLmVycm9y
X2hhbmRsZXJzIGltcG9ydCBEZWZhdWx0U3R5bGVFcnJvckhhbmRsZXIKIAogCiBfbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoX19uYW1lX18pCkBAIC03OCw3ICs3OSw3IEBAIGNsYXNzIFRlc3RFeHBl
Y3RhdGlvbnNDaGVja2VyKG9iamVjdCk6CiAgICAgICAgIHBhc3MKIAogICAgIGRlZiBjaGVja190
ZXN0X2V4cGVjdGF0aW9ucyhzZWxmLCBleHBlY3RhdGlvbnNfc3RyLCB0ZXN0cz1Ob25lKToKLSAg
ICAgICAgcGFyc2VyID0gVGVzdEV4cGVjdGF0aW9uUGFyc2VyKHNlbGYuX3BvcnRfb2JqLCB0ZXN0
cywgYWxsb3dfcmViYXNlbGluZV9tb2RpZmllcj1GYWxzZSkKKyAgICAgICAgcGFyc2VyID0gdGVz
dF9leHBlY3RhdGlvbnMuVGVzdEV4cGVjdGF0aW9uUGFyc2VyKHNlbGYuX3BvcnRfb2JqLCB0ZXN0
cywgYWxsb3dfcmViYXNlbGluZV9tb2RpZmllcj1GYWxzZSkKICAgICAgICAgZXhwZWN0YXRpb25z
ID0gcGFyc2VyLnBhcnNlKCdleHBlY3RhdGlvbnMnLCBleHBlY3RhdGlvbnNfc3RyKQogCiAgICAg
ICAgIGxldmVsID0gNQpAQCAtOTYsMyArOTcsNTMgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uc0No
ZWNrZXIob2JqZWN0KToKIAogICAgICAgICAjIFdhcm4gdGFicyBpbiBsaW5lcyBhcyB3ZWxsCiAg
ICAgICAgIHNlbGYuY2hlY2tfdGFicyhsaW5lcykKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBk
ZWYgX3Nob3VsZF9sb2dfbGludGVyX3dhcm5pbmcod2FybmluZywgZmlsZXMpOgorICAgICAgICAj
IENhc2UgMSwgdGhlIGxpbmUgdGhlIHdhcm5pbmcgd2FzIHRpZWQgdG8gaXMgaW4gb3VyIHBhdGNo
CisgICAgICAgIGlmIHdhcm5pbmcuZmlsZW5hbWUgaW4gZmlsZXMgYW5kIHdhcm5pbmcubGluZV9u
dW1iZXIgaW4gZmlsZXNbd2FybmluZy5maWxlbmFtZV06CisgICAgICAgICAgICByZXR1cm4gVHJ1
ZQorCisgICAgICAgIGZvciBmaWxlLCBsaW5lcyBpbiB3YXJuaW5nLnJlbGF0ZWRfZmlsZXMuaXRl
cml0ZW1zKCk6CisgICAgICAgICAgICBpZiBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAg
ICMgQ2FzZSAyLCBhIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSB3YXJuaW5nIGlzIGluIG91ciBw
YXRjaAorICAgICAgICAgICAgICAgICMgTm90ZSB0aGF0IHRoaXMgd2lsbCByZWFsbHkgb25seSBo
YXBwZW4gaWYgeW91IGRlbGV0ZSBhIHRlc3QuCisgICAgICAgICAgICAgICAgaWYgbGluZXMgaXMg
Tm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAgICAgICAg
ICMgQ2FzZSAzLCBhIGxpbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB3YXJuaW5nIGlzIGluIG91ciBw
YXRjaAorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgICAg
ICAgICBpZiBsaW5lIGluIGZpbGVzW2ZpbGVdOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIGxpbnRfdGVzdF9leHBlY3RhdGlvbnMoZmlsZXMsIGNvbmZpZ3VyYXRpb24sIGluY3JlbWVu
dF9lcnJvcl9jb3VudD1sYW1iZGE6IDAsIGxpbmVfbnVtYmVycz1Ob25lKToKKyAgICAgICAgaG9z
dCA9IEhvc3QoKQorICAgICAgICBlcnJvcl9jb3VudCA9IDAKKworICAgICAgICBwb3J0c190b19s
aW50ID0gW2hvc3QucG9ydF9mYWN0b3J5LmdldChuYW1lKSBmb3IgbmFtZSBpbiBob3N0LnBvcnRf
ZmFjdG9yeS5hbGxfcG9ydF9uYW1lcygpXQorICAgICAgICBmaWxlc19saW50ZWQgPSBzZXQoKQor
ICAgICAgICBmb3IgcG9ydCBpbiBwb3J0c190b19saW50OgorICAgICAgICAgICAgZXhwZWN0YXRp
b25zX2RpY3QgPSBwb3J0LmV4cGVjdGF0aW9uc19kaWN0KCkKKyAgICAgICAgICAgIGZvciBleHBl
Y3RhdGlvbnNfZmlsZSBpbiBleHBlY3RhdGlvbnNfZGljdC5rZXlzKCk6CisgICAgICAgICAgICAg
ICAgc3R5bGVfZXJyb3JfaGFuZGxlciA9IERlZmF1bHRTdHlsZUVycm9ySGFuZGxlcigKKyAgICAg
ICAgICAgICAgICAgICAgZXhwZWN0YXRpb25zX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgIGNv
bmZpZ3VyYXRpb24sCisgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudF9lcnJvcl9jb3VudCwK
KyAgICAgICAgICAgICAgICAgICAgbGluZV9udW1iZXJzKQorCisgICAgICAgICAgICAgICAgdHJ5
OgorICAgICAgICAgICAgICAgICAgICBpZiBleHBlY3RhdGlvbnNfZmlsZSBpbiBmaWxlc19saW50
ZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAg
ICBleHBlY3RhdGlvbnMgPSB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zKAorICAg
ICAgICAgICAgICAgICAgICAgICAgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVj
dGF0aW9uc190b19saW50PXtleHBlY3RhdGlvbnNfZmlsZTogZXhwZWN0YXRpb25zX2RpY3RbZXhw
ZWN0YXRpb25zX2ZpbGVdfSkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0YXRpb25zLnBhcnNl
X2FsbF9leHBlY3RhdGlvbnMoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCB0ZXN0X2V4cGVjdGF0
aW9ucy5QYXJzZUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGZvciB3YXJuaW5nIGlu
IGUud2FybmluZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBUZXN0RXhwZWN0YXRpb25z
Q2hlY2tlci5fc2hvdWxkX2xvZ19saW50ZXJfd2FybmluZyh3YXJuaW5nLCBmaWxlcyk6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVfZXJyb3JfaGFuZGxlcih3YXJuaW5nLmxpbmVf
bnVtYmVyLCAndGVzdC9leHBlY3RhdGlvbnMnLCA1LCB3YXJuaW5nLmVycm9yKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yX2NvdW50ICs9IDEKKyAgICAgICAgICAgICAgICBmaWxl
c19saW50ZWQuYWRkKGV4cGVjdGF0aW9uc19maWxlKQorICAgICAgICByZXR1cm4gZXJyb3JfY291
bnQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314760</attachid>
            <date>2017-07-06 15:01:48 -0700</date>
            <delta_ts>2017-07-18 16:23:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173559-20170706150147.patch</filename>
            <type>text/plain</type>
            <size>31241</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxOTIxOCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDg3IEBACisyMDE3LTA3LTA2ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBsaW50LXRlc3QtZXhwZWN0YXRpb25zIHNob3VsZCBiZSBydW4gZHVyaW5n
IHN0eWxlIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzM1NTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMyODU0OTQxPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJ1bm5pbmcgdGhlIHRl
c3QgZXhwZWN0YXRpb24gbGludGVyIHJlcXVpcmVzIHJlYWRpbmcgYm90aCBmaWxlcyBhbmQgbGlu
ZXMgbm90IGluIHRoZQorICAgICAgICBwYXRjaCBiZWNhdXNlLCBmb3IgZXhhbXBsZSwgZGVsZXRp
b24gb2YgYSB0ZXN0IGNhbiBjYXVzZSBhIGxpbnQgZmFpbHVyZSBldmVuIHRob3VnaAorICAgICAg
ICBub3QgdGVzdCBleHBlY3RhdGlvbnMgd2hlcmUgbW9kaWZpZWQuCisKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5OgorICAgICAgICAo
TW9ja0ZpbGVTeXN0ZW0ub3Blbl90ZXh0X2ZpbGVfZm9yX3JlYWRpbmcpOiBBZGQgJ2Vycm9ycycg
YXJndW1lbnQgdG8gbWltaWMgZmlsZXN5c3RlbS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9leHBlY3RhdGlvbnMucHk6CisgICAgICAgIChXYXJu
aW5nKTogQWRkZWQgY2xhc3MgdG8gcGFzcyB3YXJuaW5ncyBhcyBhbiBvYmplY3QgaW5zdGVhZCBv
ZiBhIHN0cmluZy4KKyAgICAgICAgKFdhcm5pbmcuX19pbml0X18pOiBDb25zdHJ1Y3Qgd2Fybmlu
ZyB3aXRoIGZpbGUgbmFtZSwgbGluZSBudW1iZXIsIGxpbmUgY29udGVudCwKKyAgICAgICAgZGVz
Y3JpcHRpb24gb2YgdGhlIGVycm9yIGFuZCB0aGUgbmFtZSBvZiB0aGUgYXNzb2NpYXRlZCB0ZXN0
LgorICAgICAgICAoV2FybmluZy5fX3N0cl9fKTogQ29udmVydCB0byBzdHJpbmcgc28gdGhhdCBl
eGlzdGluZyBwcmludGluZyBjb2RlIHdvcmtzLgorICAgICAgICAoVGVzdEV4cGVjdGF0aW9uUGFy
c2VyLl9faW5pdF9fKTogUGFzcyBzaG9ydGVuX2ZpbGVuYW1lIGZ1bmN0aW9uIHRvCisgICAgICAg
IFRlc3RFeHBlY3RhdGlvbnNQYXJzZXIgdG8gYWRkIGEgZGVsZXRlZCBmaWxlIHRvIHRoZSByZWxh
dGVkX2ZpbGVzIGRpY3Rpb25hcnkuCisgICAgICAgIChUZXN0RXhwZWN0YXRpb25QYXJzZXIuX2No
ZWNrX3Rlc3RfZXhpc3RzKTogSWYgdGhlIHRlc3QgZG9lcyBub3QgZXhpc3QsIGFkZCB0aGUKKyAg
ICAgICAgbWlzc2luZyBwYXRoIHRvIHRoZSByZWxhdGVkX2ZpbGVzIGRpY3Rpb25hcnkuCisgICAg
ICAgIChUZXN0RXhwZWN0YXRpb25MaW5lLl9faW5pdF9fKTogQWRkIHJlbGF0ZWRfZmlsZXMgZGlj
dGlvbmFyeSwgd2hpY2ggdHJhY2tzCisgICAgICAgIGZpbGVzIGFuZCBsaW5lIG51bWJlcnMgcmVs
YXRlZCB0byB0aGlzIHRlc3QgZXhwZWN0YXRpb24gbGluZS4gVGhpcyB3aWxsIGFsbG93CisgICAg
ICAgIHRyYWNraW5nIGxpbnRlciBlcnJvcnMgaW4gdGhlIHN0eWxlIGNoZWNrZXIgb2NjdXJyaW5n
IGFjcm9zcyBtdWx0aXBsZSBmaWxlcy4KKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnNNb2RlbC5f
YWxyZWFkeV9zZWVuX2JldHRlcl9tYXRjaCk6IEFkZCByZWR1bmRhbnQgZXhwZWN0YXRpb24KKyAg
ICAgICAgbGluZXMgdG8gcmVsYXRlZF9maWxlcyBkaWN0aW9uYXJ5LgorICAgICAgICAoVGVzdEV4
cGVjdGF0aW9ucy5fX2luaXRfXyk6IFBhc3Mgc2VsZi5fc2hvcnRlbl9maWxlbmFtZSB0byBUZXN0
RXhwZWN0YXRpb25QYXJzZXIuCisgICAgICAgIChUZXN0RXhwZWN0YXRpb25zLl9yZXBvcnRfd2Fy
bmluZ3MpOiBDb25zdHJ1Y3Qgd2FybmluZyBvYmplY3QgaW5zdGVhZCBvZiBzdHJpbmcKKyAgICAg
ICAgd2hlbiBhZGRpbmcgdG8gd2FybmluZ3MgbGlzdC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3BvcnQvd2luLnB5OiBDaGFuZ2VkIGxvZ2dpbmcgbGV2ZWwgZm9ybSB3YXJuaW5nIHRvIGRl
YnVnIHRvCisgICAgICAgIGNsZWFuLXVwIGxvZy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXIucHk6CisgICAgICAgIChQcm9jZXNzb3JCYXNlLmRvX2Fzc29jaWF0aW9u
X2NoZWNrKTogQWRkIHJlcXVpcmVkIGZ1bmN0aW9uIGZvciBwcm9jZXNzb3IgY2xhc3Nlcy4KKyAg
ICAgICAgKFN0eWxlUHJvY2Vzc29yKToKKyAgICAgICAgKFN0eWxlUHJvY2Vzc29yLmRvX2Fzc29j
aWF0aW9uX2NoZWNrKTogUnVuIHRoZSBUZXN0RXhwZWN0YXRpb25zIGxpbnRlciB3aGVuCisgICAg
ICAgIGNoZWNraW5nIGZvciBlcnJvcnMgYmV0d2VlbiBhc3NvY2lhdGVkIGZpbGVzLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvdGVzdF9leHBlY3RhdGlvbnMucHk6
CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25zQ2hlY2tlci5jaGVja190ZXN0X2V4cGVjdGF0aW9u
cyk6IFJlZmxlY3QgY2hhbmdlZCBpbXBvcnQgc3RhdGVtZW50cy4KKyAgICAgICAgKFRlc3RFeHBl
Y3RhdGlvbnNDaGVja2VyKToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnNDaGVja2VyLl9zaG91
bGRfbG9nX2xpbnRlcl93YXJuaW5nKTogR2l2ZW4gYSB3YXJuaW5nLCBhIGRpY3Rpb25hcnkKKyAg
ICAgICAgb2YgbW9kaWZpZWQgZmlsZXMsIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGFu
ZCB0aGUgaG9zdCwgZGV0ZXJtaW5lIGlmIHRoZSBsaW50ZXIKKyAgICAgICAgd2FybmluZyBpcyBh
c3NvY2lhdGVkIHdpdGggdGhlIGNoYW5nZXMuCisgICAgICAgIChUZXN0RXhwZWN0YXRpb25zQ2hl
Y2tlci5saW50X3Rlc3RfZXhwZWN0YXRpb25zKTogTGludCB0ZXN0IGV4cGVjdGF0aW9ucyBmb3Ig
dGhlCisgICAgICAgIHN0eWxlIGNoZWNrZXIuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9maWxlcmVhZGVyLnB5OgorICAgICAgICAoVGV4dEZpbGVSZWFkZXIpOgorICAgICAgICAo
VGV4dEZpbGVSZWFkZXIuX19pbml0X18pOiBUcmFjayBtb2RpZmllZCBmaWxlcyBpbiBkaWN0aW9u
YXJ5IGluc3RlYWQgb2YgYSBjb3VudGVyLgorICAgICAgICAoVGV4dEZpbGVSZWFkZXIuZmlsZV9j
b3VudCk6IFVzZSBkaWN0aW9uYXJ5IHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIG1vZGlmaWVk
IGZpbGVzLgorICAgICAgICAoVGV4dEZpbGVSZWFkZXIucHJvY2Vzc19maWxlKTogVHJhY2sgYm90
aCB0aGUgbnVtYmVyIG9mIGZpbGVzIGNoYW5nZWQgYW5kIHdoaWNoIGxpbmVzCisgICAgICAgIGlu
IHRob3NlIGZpbGVzIHdlcmUgY2hhbmdlZC4KKyAgICAgICAgKFRleHRGaWxlUmVhZGVyLmRvX2Fz
c29jaWF0aW9uX2NoZWNrKTogUnVuIHRoZSBwcm9jZXNzb3IncyBhc3NvY2lhdGlvbiBjaGVjayBv
biBhbGwKKyAgICAgICAgbW9kaWZpZWQgb3IgZGVsZXRlZCBmaWxlcyBwcm9jZXNzZWQgYnkgVGV4
dEZpbGVSZWFkZXIuCisgICAgICAgIChUZXh0RmlsZVJlYWRlci5kZWxldGVfZmlsZSk6IFRyYWNr
IGRlbGV0ZWQgZmlsZXMgaW4gX2ZpbGVzIGRpY3Rpb25hcnkuCisgICAgICAgIChUZXh0RmlsZVJl
YWRlci5jb3VudF9kZWxldGVfb25seV9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2ZpbGVyZWFkZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChUZXh0Rmls
ZVJlYWRlclRlc3QudGVzdF9kZWxldGVfZmlsZSk6IFJlbmFtZWQgZnVuY3Rpb24gdG8gcmVmbGVj
dCBuZXcgZnVuY3Rpb24gbmFtZS4KKyAgICAgICAgKFRleHRGaWxlUmVhZGVyVGVzdC50ZXN0X2Nv
dW50X2RlbGV0ZV9vbmx5X2ZpbGUpOiBNb3ZlZCB0byB0ZXN0X2RlbGV0ZV9maWxlLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvbWFpbi5weToKKyAgICAgICAgKENoZWNrV2ViS2l0
U3R5bGUubWFpbik6IFdoZW4gcnVubmluZyB0aGUgc3R5bGUgY2hlY2tlciBvbiBhIHNwZWNpZmlj
IGxpc3Qgb2YgZmlsZXMsCisgICAgICAgIGV4cGxpY2l0bHkgcnVuIHRoZSBhc3NvY2lhdGlvbiBj
aGVjayBvbiB0aGUgZmlsZSByZWFkZXIuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHls
ZS9tYWluX3VuaXR0ZXN0LnB5OgorICAgICAgICAoRXhwZWN0YXRpb25MaW50ZXJJblN0eWxlQ2hl
Y2tlclRlc3QpOiBBZGRlZCB0byB0ZXN0IHRoZSBUZXN0RXhwZWN0YXRpb25MaW50ZXIgbm93Cisg
ICAgICAgIGVtYmVkZGVkIGluIHRoZSBzdHlsZSBjaGVja2VyLgorICAgICAgICAoRXhwZWN0YXRp
b25MaW50ZXJJblN0eWxlQ2hlY2tlclRlc3Quc2V0VXApOiBTZXQgdXAgdGhlIHN0eWxlIGNoZWNr
ZXIgY29uZmlndXJhdGlvbi4KKyAgICAgICAgKEV4cGVjdGF0aW9uTGludGVySW5TdHlsZUNoZWNr
ZXJUZXN0Ll9nZW5lcmF0ZV9maWxlX3JlYWRlcik6IEdpdmVuIGEgZmlsZXN5c3RlbSBvYmplY3Qs
CisgICAgICAgIGNvbnN0cnVjdCB0aGUgVGV4dEZpbGVSZWFkZXIgb2JqZWN0IHdpdGggYSBTdHls
ZVByb2Nlc3NvciB1c2VkIHRvIHJ1biBzdHlsZSBjaGVja3Mgb24KKyAgICAgICAgc3BlY2lmaWMg
ZmlsZXMuCisgICAgICAgIChFeHBlY3RhdGlvbkxpbnRlckluU3R5bGVDaGVja2VyVGVzdC5fZ2Vu
ZXJhdGVfdGVzdGluZ19ob3N0KTogR2VuZXJhdGUgYSBob3N0IHVzZWQgZm9yCisgICAgICAgIHRl
c3RpbmcgdGhlIHRlc3QgZXhwZWN0YXRpb24gbGludGVyIGluc2lkZSB0aGUgc3R5bGUgY2hlY2tl
ci4gVGhpcyBob3N0IG11c3QgY29udGFpbiBhCisgICAgICAgIG1vY2sgZmlsZSBzeXN0ZW0gd2l0
aCB0aGUgYmFzaWMgc3RydWN0dXJlIG9mIHRlc3QgZXhwZWN0YXRpb25zLgorICAgICAgICAoRXhw
ZWN0YXRpb25MaW50ZXJJblN0eWxlQ2hlY2tlclRlc3QudGVzdF9ub19saW50ZXJfZXJyb3JzKToK
KyAgICAgICAgKEV4cGVjdGF0aW9uTGludGVySW5TdHlsZUNoZWNrZXJUZXN0LnRlc3RfbGludGVy
X2R1cGxpY2F0ZV9saW5lKToKKyAgICAgICAgKEV4cGVjdGF0aW9uTGludGVySW5TdHlsZUNoZWNr
ZXJUZXN0LnRlc3RfbGludGVyX2R1cGxpY2F0ZV9saW5lX25vX2VkaXQpOgorICAgICAgICAoRXhw
ZWN0YXRpb25MaW50ZXJJblN0eWxlQ2hlY2tlclRlc3QudGVzdF9saW50ZXJfZGVsZXRlZF9maWxl
KToKKyAgICAgICAgKEV4cGVjdGF0aW9uTGludGVySW5TdHlsZUNoZWNrZXJUZXN0LnRlc3RfbGlu
dGVyX2RlbGV0ZWRfZmlsZV9ub19lZGl0KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL3BhdGNocmVhZGVyLnB5OgorICAgICAgICAoUGF0Y2hSZWFkZXIuY2hlY2spOiBTcGVjaWZ5
IHdoaWNoIGZpbGUgd2FzIGRlbGV0ZWQsIHJ1biB0aGUgYXNzb2NpYXRpb24gY2hlY2suCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9wYXRjaHJlYWRlcl91bml0dGVzdC5weToKKyAg
ICAgICAgKFBhdGNoUmVhZGVyVGVzdC5Nb2NrVGV4dEZpbGVSZWFkZXIuZGVsZXRlX2ZpbGUpOiBS
ZW5hbWVkIGNvdW50X2RlbGV0ZV9vbmx5X2ZpbGUuCisgICAgICAgIChQYXRjaFJlYWRlclRlc3Qu
TW9ja1RleHRGaWxlUmVhZGVyLmRvX2Fzc29jaWF0aW9uX2NoZWNrKTogQWRkZWQuCisgICAgICAg
IChQYXRjaFJlYWRlclRlc3QuTW9ja1RleHRGaWxlUmVhZGVyLmNvdW50X2RlbGV0ZV9vbmx5X2Zp
bGUpOiBSZW5hbWVkIGRlbGV0ZV9maWxlLgorCiAyMDE3LTA3LTA2ICBDb21taXQgUXVldWUgIDxj
b21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91
dCByMjE5MTk0LgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2Zp
bGVzeXN0ZW1fbW9jay5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5CShyZXZpc2lvbiAyMTkxOTYpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMzIsNyArMzMyLDcgQEAgY2xhc3MgTW9ja0ZpbGVTeXN0ZW0ob2JqZWN0
KToKICAgICAgICAgc2VsZi5maWxlc1twYXRoXSA9IGNvbnRlbnRzCiAgICAgICAgIHNlbGYud3Jp
dHRlbl9maWxlc1twYXRoXSA9IGNvbnRlbnRzCiAKLSAgICBkZWYgb3Blbl90ZXh0X2ZpbGVfZm9y
X3JlYWRpbmcoc2VsZiwgcGF0aCk6CisgICAgZGVmIG9wZW5fdGV4dF9maWxlX2Zvcl9yZWFkaW5n
KHNlbGYsIHBhdGgsIGVycm9ycz0nc3RyaWN0Jyk6CiAgICAgICAgIGlmIHNlbGYuZmlsZXNbcGF0
aF0gaXMgTm9uZToKICAgICAgICAgICAgIHNlbGYuX3JhaXNlX25vdF9mb3VuZChwYXRoKQogICAg
ICAgICByZXR1cm4gUmVhZGFibGVUZXh0RmlsZU9iamVjdChzZWxmLCBwYXRoLCBzZWxmLmZpbGVz
W3BhdGhdKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxz
L3Rlc3RfZXhwZWN0YXRpb25zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9ucy5weQkocmV2aXNpb24gMjE5
MTk2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3Rf
ZXhwZWN0YXRpb25zLnB5CSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwyMCBAQCBjbGFzcyBQ
YXJzZUVycm9yKEV4Y2VwdGlvbik6CiAgICAgICAgIHJldHVybiAnUGFyc2VFcnJvcih3YXJuaW5n
cz0lcyknICUgc2VsZi53YXJuaW5ncwogCiAKK2NsYXNzIFdhcm5pbmcob2JqZWN0KToKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCBsaW5lLCBlcnJvciwgdGVz
dD1Ob25lKToKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYu
bGluZV9udW1iZXIgPSBsaW5lX251bWJlcgorICAgICAgICBzZWxmLmxpbmUgPSBsaW5lCisgICAg
ICAgIHNlbGYuZXJyb3IgPSBlcnJvcgorICAgICAgICBzZWxmLnRlc3QgPSB0ZXN0CisKKyAgICAg
ICAgc2VsZi5yZWxhdGVkX2ZpbGVzID0ge30KKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAg
ICAgICByZXR1cm4gJ3t9Ont9IHt9IHt9Jy5mb3JtYXQoc2VsZi5maWxlbmFtZSwgc2VsZi5saW5l
X251bWJlciwgc2VsZi5lcnJvciwgc2VsZi50ZXN0IGlmIHNlbGYudGVzdCBlbHNlIHNlbGYubGlu
ZSkKKworCiBjbGFzcyBUZXN0RXhwZWN0YXRpb25QYXJzZXIob2JqZWN0KToKICAgICAiIiJQcm92
aWRlcyBwYXJzaW5nIGZhY2lsaXRpZXMgZm9yIGxpbmVzIGluIHRoZSB0ZXN0X2V4cGVjdGF0aW9u
LnR4dCBmaWxlLiIiIgogCkBAIC03OCw3ICs5Miw3IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvblBh
cnNlcihvYmplY3QpOgogCiAgICAgTUlTU0lOR19CVUdfV0FSTklORyA9ICdUZXN0IGxhY2tzIEJV
RyBtb2RpZmllci4nCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgZnVsbF90ZXN0X2xp
c3QsIGFsbG93X3JlYmFzZWxpbmVfbW9kaWZpZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBw
b3J0LCBmdWxsX3Rlc3RfbGlzdCwgYWxsb3dfcmViYXNlbGluZV9tb2RpZmllciwgc2hvcnRlbl9m
aWxlbmFtZT1Ob25lKToKICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2VsZi5f
dGVzdF9jb25maWd1cmF0aW9uX2NvbnZlcnRlciA9IFRlc3RDb25maWd1cmF0aW9uQ29udmVydGVy
KHNldChwb3J0LmFsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKCkpLCBwb3J0LmNvbmZpZ3VyYXRpb25f
c3BlY2lmaWVyX21hY3JvcygpKQogICAgICAgICBpZiBmdWxsX3Rlc3RfbGlzdCBpcyBOb25lOgpA
QCAtODYsNiArMTAwLDcgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uUGFyc2VyKG9iamVjdCk6CiAg
ICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLl9mdWxsX3Rlc3RfbGlzdCA9IHNldChmdWxs
X3Rlc3RfbGlzdCkKICAgICAgICAgc2VsZi5fYWxsb3dfcmViYXNlbGluZV9tb2RpZmllciA9IGFs
bG93X3JlYmFzZWxpbmVfbW9kaWZpZXIKKyAgICAgICAgc2VsZi5fc2hvcnRlbl9maWxlbmFtZSA9
IHNob3J0ZW5fZmlsZW5hbWUgb3IgKGxhbWJkYSB4OiB4KQogCiAgICAgZGVmIHBhcnNlKHNlbGYs
IGZpbGVuYW1lLCBleHBlY3RhdGlvbnNfc3RyaW5nKToKICAgICAgICAgZXhwZWN0YXRpb25fbGlu
ZXMgPSBbXQpAQCAtMTg2LDYgKzIwMSw4IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvblBhcnNlcihv
YmplY3QpOgogICAgICAgICAgICAgIyB0aW1lIHlvdSB1cGRhdGUgVGVzdEV4cGVjdGF0aW9ucyB3
aXRob3V0IHN5bmNpbmcKICAgICAgICAgICAgICMgdGhlIExheW91dFRlc3RzIGRpcmVjdG9yeQog
ICAgICAgICAgICAgZXhwZWN0YXRpb25fbGluZS53YXJuaW5ncy5hcHBlbmQoJ1BhdGggZG9lcyBu
b3QgZXhpc3QuJykKKyAgICAgICAgICAgIGV4cGVjdGVkX3BhdGggPSBzZWxmLl9zaG9ydGVuX2Zp
bGVuYW1lKHNlbGYuX3BvcnQuYWJzcGF0aF9mb3JfdGVzdChleHBlY3RhdGlvbl9saW5lLm5hbWUp
KQorICAgICAgICAgICAgZXhwZWN0YXRpb25fbGluZS5yZWxhdGVkX2ZpbGVzW2V4cGVjdGVkX3Bh
dGhdID0gTm9uZQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHJldHVybiBUcnVl
CiAKQEAgLTM4MSw2ICszOTgsNyBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25MaW5lKG9iamVjdCk6
CiAgICAgICAgIHNlbGYuY29tbWVudCA9IE5vbmUKICAgICAgICAgc2VsZi5tYXRjaGluZ190ZXN0
cyA9IFtdCiAgICAgICAgIHNlbGYud2FybmluZ3MgPSBbXQorICAgICAgICBzZWxmLnJlbGF0ZWRf
ZmlsZXMgPSB7fSAgIyBEaWN0aW9uYXJ5IG9mIGZpbGVzIHRvIGxpbmVzIGluIHRoYXQgZmlsZS4g
U3RvcmluZyBhc3NvY2lhdGVkIHdhcm5pbmdzCiAgICAgICAgIHNlbGYubm90X2FwcGxpY2FibGVf
dG9fY3VycmVudF9wbGF0Zm9ybSA9IEZhbHNlCiAKICAgICBkZWYgaXNfaW52YWxpZChzZWxmKToK
QEAgLTcwMSwyOSArNzE5LDM2IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnNNb2RlbChvYmplY3Qp
OgogICAgICAgICAgICAgZXhwZWN0YXRpb25fbGluZS53YXJuaW5ncy5hcHBlbmQoJ0R1cGxpY2F0
ZSBvciBhbWJpZ3VvdXMgZW50cnkgbGluZXMgJXM6JWQgYW5kICVzOiVkLicgJSAoCiAgICAgICAg
ICAgICAgICAgc2VsZi5fc2hvcnRlbl9maWxlbmFtZShwcmV2X2V4cGVjdGF0aW9uX2xpbmUuZmls
ZW5hbWUpLCBwcmV2X2V4cGVjdGF0aW9uX2xpbmUubGluZV9udW1iZXIsCiAgICAgICAgICAgICAg
ICAgc2VsZi5fc2hvcnRlbl9maWxlbmFtZShleHBlY3RhdGlvbl9saW5lLmZpbGVuYW1lKSwgZXhw
ZWN0YXRpb25fbGluZS5saW5lX251bWJlcikpCi0gICAgICAgICAgICByZXR1cm4gVHJ1ZQogCi0g
ICAgICAgIGlmIHByZXZfZXhwZWN0YXRpb25fbGluZS5tYXRjaGluZ19jb25maWd1cmF0aW9ucyA+
PSBleHBlY3RhdGlvbl9saW5lLm1hdGNoaW5nX2NvbmZpZ3VyYXRpb25zOgorICAgICAgICBlbGlm
IHByZXZfZXhwZWN0YXRpb25fbGluZS5tYXRjaGluZ19jb25maWd1cmF0aW9ucyA+PSBleHBlY3Rh
dGlvbl9saW5lLm1hdGNoaW5nX2NvbmZpZ3VyYXRpb25zOgogICAgICAgICAgICAgZXhwZWN0YXRp
b25fbGluZS53YXJuaW5ncy5hcHBlbmQoJ01vcmUgc3BlY2lmaWMgZW50cnkgZm9yICVzIG9uIGxp
bmUgJXM6JWQgb3ZlcnJpZGVzIGxpbmUgJXM6JWQuJyAlIChleHBlY3RhdGlvbl9saW5lLm5hbWUs
CiAgICAgICAgICAgICAgICAgc2VsZi5fc2hvcnRlbl9maWxlbmFtZShwcmV2X2V4cGVjdGF0aW9u
X2xpbmUuZmlsZW5hbWUpLCBwcmV2X2V4cGVjdGF0aW9uX2xpbmUubGluZV9udW1iZXIsCiAgICAg
ICAgICAgICAgICAgc2VsZi5fc2hvcnRlbl9maWxlbmFtZShleHBlY3RhdGlvbl9saW5lLmZpbGVu
YW1lKSwgZXhwZWN0YXRpb25fbGluZS5saW5lX251bWJlcikpCiAgICAgICAgICAgICAjIEZJWE1F
OiByZXR1cm4gRmFsc2UgaWYgd2Ugd2FudCBtb3JlIHNwZWNpZmljIHRvIHdpbi4KLSAgICAgICAg
ICAgIHJldHVybiBUcnVlCiAKLSAgICAgICAgaWYgcHJldl9leHBlY3RhdGlvbl9saW5lLm1hdGNo
aW5nX2NvbmZpZ3VyYXRpb25zIDw9IGV4cGVjdGF0aW9uX2xpbmUubWF0Y2hpbmdfY29uZmlndXJh
dGlvbnM6CisgICAgICAgIGVsaWYgcHJldl9leHBlY3RhdGlvbl9saW5lLm1hdGNoaW5nX2NvbmZp
Z3VyYXRpb25zIDw9IGV4cGVjdGF0aW9uX2xpbmUubWF0Y2hpbmdfY29uZmlndXJhdGlvbnM6CiAg
ICAgICAgICAgICBleHBlY3RhdGlvbl9saW5lLndhcm5pbmdzLmFwcGVuZCgnTW9yZSBzcGVjaWZp
YyBlbnRyeSBmb3IgJXMgb24gbGluZSAlczolZCBvdmVycmlkZXMgbGluZSAlczolZC4nICUgKGV4
cGVjdGF0aW9uX2xpbmUubmFtZSwKICAgICAgICAgICAgICAgICBzZWxmLl9zaG9ydGVuX2ZpbGVu
YW1lKGV4cGVjdGF0aW9uX2xpbmUuZmlsZW5hbWUpLCBleHBlY3RhdGlvbl9saW5lLmxpbmVfbnVt
YmVyLAogICAgICAgICAgICAgICAgIHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUocHJldl9leHBlY3Rh
dGlvbl9saW5lLmZpbGVuYW1lKSwgcHJldl9leHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyKSkK
LSAgICAgICAgICAgIHJldHVybiBUcnVlCiAKLSAgICAgICAgaWYgcHJldl9leHBlY3RhdGlvbl9s
aW5lLm1hdGNoaW5nX2NvbmZpZ3VyYXRpb25zICYgZXhwZWN0YXRpb25fbGluZS5tYXRjaGluZ19j
b25maWd1cmF0aW9uczoKKyAgICAgICAgZWxpZiBwcmV2X2V4cGVjdGF0aW9uX2xpbmUubWF0Y2hp
bmdfY29uZmlndXJhdGlvbnMgJiBleHBlY3RhdGlvbl9saW5lLm1hdGNoaW5nX2NvbmZpZ3VyYXRp
b25zOgogICAgICAgICAgICAgZXhwZWN0YXRpb25fbGluZS53YXJuaW5ncy5hcHBlbmQoJ0VudHJp
ZXMgZm9yICVzIG9uIGxpbmVzICVzOiVkIGFuZCAlczolZCBtYXRjaCBvdmVybGFwcGluZyBzZXRz
IG9mIGNvbmZpZ3VyYXRpb25zLicgJSAoZXhwZWN0YXRpb25fbGluZS5uYW1lLAogICAgICAgICAg
ICAgICAgIHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUocHJldl9leHBlY3RhdGlvbl9saW5lLmZpbGVu
YW1lKSwgcHJldl9leHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyLAogICAgICAgICAgICAgICAg
IHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUoZXhwZWN0YXRpb25fbGluZS5maWxlbmFtZSksIGV4cGVj
dGF0aW9uX2xpbmUubGluZV9udW1iZXIpKQotICAgICAgICAgICAgcmV0dXJuIFRydWUKIAotICAg
ICAgICAjIENvbmZpZ3VyYXRpb24gc2V0cyBhcmUgZGlzam9pbnQsIHRoZW4uCi0gICAgICAgIHJl
dHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBDb25maWd1cmF0aW9uIHNl
dHMgYXJlIGRpc2pvaW50LgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYg
ZXhwZWN0YXRpb25fbGluZS5yZWxhdGVkX2ZpbGVzLmdldChzZWxmLl9zaG9ydGVuX2ZpbGVuYW1l
KHByZXZfZXhwZWN0YXRpb25fbGluZS5maWxlbmFtZSksIE5vbmUpIGlzIE5vbmU6CisgICAgICAg
ICAgICBleHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXNbc2VsZi5fc2hvcnRlbl9maWxlbmFt
ZShwcmV2X2V4cGVjdGF0aW9uX2xpbmUuZmlsZW5hbWUpXSA9IFtdCisgICAgICAgIGV4cGVjdGF0
aW9uX2xpbmUucmVsYXRlZF9maWxlc1tzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKHByZXZfZXhwZWN0
YXRpb25fbGluZS5maWxlbmFtZSldLmFwcGVuZChwcmV2X2V4cGVjdGF0aW9uX2xpbmUubGluZV9u
dW1iZXIpCisKKyAgICAgICAgaWYgcHJldl9leHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXMu
Z2V0KHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUoZXhwZWN0YXRpb25fbGluZS5maWxlbmFtZSksIE5v
bmUpIGlzIE5vbmU6CisgICAgICAgICAgICBwcmV2X2V4cGVjdGF0aW9uX2xpbmUucmVsYXRlZF9m
aWxlc1tzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKGV4cGVjdGF0aW9uX2xpbmUuZmlsZW5hbWUpXSA9
IFtdCisgICAgICAgIHByZXZfZXhwZWN0YXRpb25fbGluZS5yZWxhdGVkX2ZpbGVzW3NlbGYuX3No
b3J0ZW5fZmlsZW5hbWUoZXhwZWN0YXRpb25fbGluZS5maWxlbmFtZSldLmFwcGVuZChwcmV2X2V4
cGVjdGF0aW9uX2xpbmUubGluZV9udW1iZXIpCisKKyAgICAgICAgcmV0dXJuIFRydWUKIAogCiBj
bGFzcyBUZXN0RXhwZWN0YXRpb25zKG9iamVjdCk6CkBAIC04NTMsNyArODc4LDcgQEAgY2xhc3Mg
VGVzdEV4cGVjdGF0aW9ucyhvYmplY3QpOgogICAgICAgICBzZWxmLl90ZXN0X2NvbmZpZyA9IHBv
cnQudGVzdF9jb25maWd1cmF0aW9uKCkKICAgICAgICAgc2VsZi5faXNfbGludF9tb2RlID0gZXhw
ZWN0YXRpb25zX3RvX2xpbnQgaXMgbm90IE5vbmUKICAgICAgICAgc2VsZi5fbW9kZWwgPSBUZXN0
RXhwZWN0YXRpb25zTW9kZWwoc2VsZi5fc2hvcnRlbl9maWxlbmFtZSkKLSAgICAgICAgc2VsZi5f
cGFyc2VyID0gVGVzdEV4cGVjdGF0aW9uUGFyc2VyKHBvcnQsIHRlc3RzLCBzZWxmLl9pc19saW50
X21vZGUpCisgICAgICAgIHNlbGYuX3BhcnNlciA9IFRlc3RFeHBlY3RhdGlvblBhcnNlcihwb3J0
LCB0ZXN0cywgc2VsZi5faXNfbGludF9tb2RlLCBzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKQogICAg
ICAgICBzZWxmLl9wb3J0ID0gcG9ydAogICAgICAgICBzZWxmLl9za2lwcGVkX3Rlc3RzX3dhcm5p
bmdzID0gW10KICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zID0gW10KQEAgLTkzOCw4ICs5NjMs
MTQgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9ucyhvYmplY3QpOgogICAgICAgICB3YXJuaW5ncyA9
IFtdCiAgICAgICAgIGZvciBleHBlY3RhdGlvbiBpbiBzZWxmLl9leHBlY3RhdGlvbnM6CiAgICAg
ICAgICAgICBmb3Igd2FybmluZyBpbiBleHBlY3RhdGlvbi53YXJuaW5nczoKLSAgICAgICAgICAg
ICAgICB3YXJuaW5ncy5hcHBlbmQoJyVzOiVkICVzICVzJyAlIChzZWxmLl9zaG9ydGVuX2ZpbGVu
YW1lKGV4cGVjdGF0aW9uLmZpbGVuYW1lKSwgZXhwZWN0YXRpb24ubGluZV9udW1iZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcsIGV4cGVjdGF0aW9uLm5hbWUgaWYg
ZXhwZWN0YXRpb24uZXhwZWN0YXRpb25zIGVsc2UgZXhwZWN0YXRpb24ub3JpZ2luYWxfc3RyaW5n
KSkKKyAgICAgICAgICAgICAgICB3YXJuaW5nID0gV2FybmluZygKKyAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fc2hvcnRlbl9maWxlbmFtZShleHBlY3RhdGlvbi5maWxlbmFtZSksCisgICAgICAg
ICAgICAgICAgICAgIGV4cGVjdGF0aW9uLmxpbmVfbnVtYmVyLAorICAgICAgICAgICAgICAgICAg
ICBleHBlY3RhdGlvbi5vcmlnaW5hbF9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgIHdhcm5p
bmcsCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9uLm5hbWUgaWYgZXhwZWN0YXRpb24u
ZXhwZWN0YXRpb25zIGVsc2UgTm9uZSkKKyAgICAgICAgICAgICAgICB3YXJuaW5nLnJlbGF0ZWRf
ZmlsZXMgPSBleHBlY3RhdGlvbi5yZWxhdGVkX2ZpbGVzCisgICAgICAgICAgICAgICAgd2Fybmlu
Z3MuYXBwZW5kKHdhcm5pbmcpCiAKICAgICAgICAgaWYgd2FybmluZ3M6CiAgICAgICAgICAgICBz
ZWxmLl9oYXNfd2FybmluZ3MgPSBUcnVlCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvd2luLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4u
cHkJKHJldmlzaW9uIDIxOTE5NikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4u
cHkJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgdHJ5OgogICAgIGltcG9ydCBfd2lu
cmVnCiAgICAgaW1wb3J0IHdpbjMyY29tLmNsaWVudAogZXhjZXB0IEltcG9ydEVycm9yOgotICAg
IF9sb2cud2FybigiTm90IHJ1bm5pbmcgb24gbmF0aXZlIFdpbmRvd3MuIikKKyAgICBfbG9nLmRl
YnVnKCJOb3QgcnVubmluZyBvbiBuYXRpdmUgV2luZG93cy4iKSAgIyBJbXBvcnRpbmcgd2luLnB5
IG9uIG5vbi13aW5kb3dzIHN5c3RlbXMgaXMgYSBjb21tb24gdXNlIGNhc2UuCiAKIAogY2xhc3Mg
V2luUG9ydChBcHBsZVBvcnQpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9j
aGVja2VyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hl
Y2tlci5weQkocmV2aXNpb24gMjE5MTk2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHls
ZS9jaGVja2VyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3IEBAIGZyb20gZXJyb3Jf
aGFuZGxlcnMgaW1wb3J0IERlZmF1bHRTdHlsZUUKIGZyb20gZmlsdGVyIGltcG9ydCBGaWx0ZXJD
b25maWd1cmF0aW9uCiBmcm9tIG9wdHBhcnNlciBpbXBvcnQgQXJndW1lbnRQYXJzZXIKIGZyb20g
b3B0cGFyc2VyIGltcG9ydCBEZWZhdWx0Q29tbWFuZE9wdGlvblZhbHVlcworZnJvbSB3ZWJraXRw
eS5jb21tb24uaG9zdCBpbXBvcnQgSG9zdAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmxv
Z3V0aWxzIGltcG9ydCBjb25maWd1cmVfbG9nZ2luZyBhcyBfY29uZmlndXJlX2xvZ2dpbmcKIAog
CkBAIC04MDQsNiArODA1LDIyIEBAIGNsYXNzIFByb2Nlc3NvckJhc2Uob2JqZWN0KToKICAgICAg
ICAgIiIiCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1N1YmNsYXNzZXMgc2hv
dWxkIGltcGxlbWVudC4nKQogCisgICAgZGVmIGRvX2Fzc29jaWF0aW9uX2NoZWNrKHNlbGYsIGZp
bGVzLCBjd2QsIGhvc3Q9SG9zdCgpKToKKyAgICAgICAgIiIiSXQgbWF5IGJlIHRoZSBjYXNlIHRo
YXQgY2hhbmdlcyBpbiBhIGZpbGUgY2F1c2Ugc3R5bGUgZXJyb3JzIHRvCisgICAgICAgIG9jY3Vy
IGVsc2V3aGVyZSBpbiB0aGUgbW9kaWZpZWQgZmlsZSBvciBpbiBvdGhlciBmaWxlcyAobW9zdCBu
b3RhYmx5LAorICAgICAgICB0aGlzIGlzIHRoZSBjYXNlIGZvciB0aGUgdGVzdCBleHBlY3RhdGlv
bnMgbGludGVyKS4gVGhlIGFzc29jaWF0aW9uIGNoZWNrCisgICAgICAgIGlzIGRlc2lnbmVkIHRv
IHRha2UgZmluZCBpc3N1ZXMgd2hpY2ggcmVxdWlyZSBwYXJzaW5nIG9mIGZpbGVzIG91dHNpZGUK
KyAgICAgICAgdGhvc2UgcHJvdmlkZWQgdG8gdGhlIHByb2Nlc3Nvci4KKworICAgICAgICBBcmdz
OgorICAgICAgICAgICAgZmlsZXM6IEEgZGljdGlvbmFyeSBvZiBmaWxlIG5hbWVzIHRvIGxpc3Rz
IG9mIGxpbmVzIG1vZGlmaWVkIGluIHRoZSBwcm92aWRlZAorICAgICAgICAgICAgZmlsZS4gIEZp
bGVzIHdoaWNoIGhhdmUgYmVlbiByZW1vdmVkIHdpbGwgYWxzbyBiZSBpbiB0aGUgZGljdGlvbmFy
eSwgdGhleQorICAgICAgICAgICAgd2lsbCBtYXAgdG8gJ05vbmUnCisgICAgICAgICAgICBjd2Q6
IEN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksIGFzc3VtZWQgdG8gYmUgdGhlIHJvb3Qgb2YgdGhl
IHNjbSByZXBvc2l0b3J5CisgICAgICAgICAgICBob3N0OiBDdXJyZW50IGhvc3QgZm9yIHRlc3Rp
bmcKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1N1YmNs
YXNzZXMgc2hvdWxkIGltcGxlbWVudC4nKQorCiAKIGNsYXNzIFN0eWxlUHJvY2Vzc29yKFByb2Nl
c3NvckJhc2UpOgogCkBAIC05MTEsMyArOTI4LDcgQEAgY2xhc3MgU3R5bGVQcm9jZXNzb3IoUHJv
Y2Vzc29yQmFzZSk6CiAgICAgICAgIF9sb2cuZGVidWcoIlVzaW5nIGNsYXNzOiAiICsgY2hlY2tl
ci5fX2NsYXNzX18uX19uYW1lX18pCiAKICAgICAgICAgY2hlY2tlci5jaGVjayhsaW5lcykKKwor
ICAgIGRlZiBkb19hc3NvY2lhdGlvbl9jaGVjayhzZWxmLCBmaWxlcywgY3dkLCBob3N0PUhvc3Qo
KSk6CisgICAgICAgIF9sb2cuZGVidWcoIlJ1bm5pbmcgVGVzdEV4cGVjdGF0aW9ucyBsaW50ZXIi
KQorICAgICAgICBUZXN0RXhwZWN0YXRpb25zQ2hlY2tlci5saW50X3Rlc3RfZXhwZWN0YXRpb25z
KGZpbGVzLCBzZWxmLl9jb25maWd1cmF0aW9uLCBjd2QsIHNlbGYuX2luY3JlbWVudF9lcnJvcl9j
b3VudCwgaG9zdD1ob3N0KQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9maWxl
cmVhZGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvZmls
ZXJlYWRlci5weQkocmV2aXNpb24gMjE5MTk2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9maWxlcmVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw4IEBACiBpbXBv
cnQgbG9nZ2luZwogaW1wb3J0IHN5cwogCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9y
dCBIb3N0CisKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCkBAIC02Miw5
ICs2NCwxMyBAQCBjbGFzcyBUZXh0RmlsZVJlYWRlcihvYmplY3QpOgogCiAgICAgICAgIHNlbGYu
ZmlsZXN5c3RlbSA9IGZpbGVzeXN0ZW0KICAgICAgICAgc2VsZi5fcHJvY2Vzc29yID0gcHJvY2Vz
c29yCi0gICAgICAgIHNlbGYuZmlsZV9jb3VudCA9IDAKKyAgICAgICAgc2VsZi5fZmlsZXMgPSB7
fQogICAgICAgICBzZWxmLmRlbGV0ZV9vbmx5X2ZpbGVfY291bnQgPSAwCiAKKyAgICBAcHJvcGVy
dHkKKyAgICBkZWYgZmlsZV9jb3VudChzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9m
aWxlcykgLSBzZWxmLmRlbGV0ZV9vbmx5X2ZpbGVfY291bnQKKwogICAgIGRlZiBfcmVhZF9saW5l
cyhzZWxmLCBmaWxlX3BhdGgpOgogICAgICAgICAiIiJSZWFkIHRoZSBmaWxlIGF0IGEgcGF0aCwg
YW5kIHJldHVybiBpdHMgbGluZXMuCiAKQEAgLTEwMyw3ICsxMDksMTMgQEAgY2xhc3MgVGV4dEZp
bGVSZWFkZXIob2JqZWN0KToKICAgICAgICAgICBTeXN0ZW1FeGl0OiBJZiBubyBmaWxlIGF0IGZp
bGVfcGF0aCBleGlzdHMuCiAKICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuZmlsZV9jb3VudCAr
PSAxCisgICAgICAgIGFic19maWxlX3BhdGggPSBzZWxmLmZpbGVzeXN0ZW0uYWJzcGF0aChmaWxl
X3BhdGgpICAjIFVuaWZpZXMgcGF0Y2ggYW5kIGNoZXJyeS1waWNraW5nIGNvZGUgcGF0aHMuCisg
ICAgICAgIGlmIG5vdCBhYnNfZmlsZV9wYXRoIGluIHNlbGYuX2ZpbGVzOgorICAgICAgICAgICAg
c2VsZi5fZmlsZXNbYWJzX2ZpbGVfcGF0aF0gPSBOb25lCisgICAgICAgIGlmICdsaW5lX251bWJl
cnMnIGluIGt3YXJnczoKKyAgICAgICAgICAgIGlmIHNlbGYuX2ZpbGVzW2Fic19maWxlX3BhdGhd
IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5fZmlsZXNbYWJzX2ZpbGVfcGF0aF0gPSBb
XQorICAgICAgICAgICAgc2VsZi5fZmlsZXNbYWJzX2ZpbGVfcGF0aF0gPSBzZWxmLl9maWxlc1th
YnNfZmlsZV9wYXRoXSArIGt3YXJnc1snbGluZV9udW1iZXJzJ10KIAogICAgICAgICBpZiBub3Qg
c2VsZi5maWxlc3lzdGVtLmV4aXN0cyhmaWxlX3BhdGgpIGFuZCBmaWxlX3BhdGggIT0gIi0iOgog
ICAgICAgICAgICAgX2xvZy5lcnJvcigiRmlsZSBkb2VzIG5vdCBleGlzdDogJyVzJyIgJSBmaWxl
X3BhdGgpCkBAIC0xMzUsMTEgKzE0NywxNiBAQCBjbGFzcyBUZXh0RmlsZVJlYWRlcihvYmplY3Qp
OgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NfZmlsZShw
YXRoKQogCi0gICAgZGVmIGNvdW50X2RlbGV0ZV9vbmx5X2ZpbGUoc2VsZik6CisgICAgZGVmIGRv
X2Fzc29jaWF0aW9uX2NoZWNrKHNlbGYsIGN3ZCwgaG9zdD1Ib3N0KCkpOgorICAgICAgICBzZWxm
Ll9wcm9jZXNzb3IuZG9fYXNzb2NpYXRpb25fY2hlY2soc2VsZi5fZmlsZXMsIGN3ZCwgaG9zdD1o
b3N0KQorCisgICAgZGVmIGRlbGV0ZV9maWxlKHNlbGYsIGZpbGVfcGF0aD1Ob25lKToKICAgICAg
ICAgIiIiQ291bnQgdXAgZmlsZXMgdGhhdCBjb250YWlucyBvbmx5IGRlbGV0ZWQgbGluZXMuCiAK
ICAgICAgICAgRmlsZXMgd2hpY2ggaGFzIG5vIG1vZGlmaWVkIG9yIG5ld2x5LWFkZGVkIGxpbmVz
IGRvbid0IG5lZWQKICAgICAgICAgdG8gY2hlY2sgc3R5bGUsIGJ1dCBzaG91bGQgYmUgdHJlYXRl
ZCBhcyBjaGVja2VkLiBGb3IgdGhhdAogICAgICAgICBwdXJwb3NlLCB3ZSBqdXN0IGNvdW50IHVw
IHRoZSBudW1iZXIgb2Ygc3VjaCBmaWxlcy4KICAgICAgICAgIiIiCisgICAgICAgIGlmIGZpbGVf
cGF0aDoKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzW3NlbGYuZmlsZXN5c3RlbS5hYnNwYXRoKGZp
bGVfcGF0aCldID0gTm9uZQogICAgICAgICBzZWxmLmRlbGV0ZV9vbmx5X2ZpbGVfY291bnQgKz0g
MQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9maWxlcmVhZGVyX3VuaXR0ZXN0
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvZmlsZXJlYWRl
cl91bml0dGVzdC5weQkocmV2aXNpb24gMjE5MTk2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS9maWxlcmVhZGVyX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsOCAr
MTUwLDggQEAgY2xhc3MgVGV4dEZpbGVSZWFkZXJUZXN0KExvZ2dpbmdUZXN0Q2FzZQogICAgICAg
ICAgICAgICAgICAgICAgKFsnZm9vJ10sIGZpbGVfcGF0aDEsIE5vbmUpXQogICAgICAgICBzZWxm
Ll9hc3NlcnRfZmlsZV9yZWFkZXIocHJvY2Vzc2VkLCAyKQogCi0gICAgZGVmIHRlc3RfY291bnRf
ZGVsZXRlX29ubHlfZmlsZShzZWxmKToKLSAgICAgICAgc2VsZi5fZmlsZV9yZWFkZXIuY291bnRf
ZGVsZXRlX29ubHlfZmlsZSgpCisgICAgZGVmIHRlc3RfZGVsZXRlX2ZpbGUoc2VsZik6CisgICAg
ICAgIHNlbGYuX2ZpbGVfcmVhZGVyLmRlbGV0ZV9maWxlKCkKICAgICAgICAgZGVsZXRlX29ubHlf
ZmlsZV9jb3VudCA9IHNlbGYuX2ZpbGVfcmVhZGVyLmRlbGV0ZV9vbmx5X2ZpbGVfY291bnQKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWxldGVfb25seV9maWxlX2NvdW50LCAxKQogCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL21haW4ucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9tYWluLnB5CShyZXZpc2lvbiAyMTkxOTYpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL21haW4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTE0
Nyw2ICsxNDcsNyBAQCBjbGFzcyBDaGVja1dlYktpdFN0eWxlKG9iamVjdCk6CiAKICAgICAgICAg
aWYgcGF0aHMgYW5kIG5vdCBvcHRpb25zLmRpZmZfZmlsZXM6CiAgICAgICAgICAgICBmaWxlX3Jl
YWRlci5wcm9jZXNzX3BhdGhzKHBhdGhzKQorICAgICAgICAgICAgZmlsZV9yZWFkZXIuZG9fYXNz
b2NpYXRpb25fY2hlY2soaG9zdC5zY20oKS5jaGVja291dF9yb290KQogICAgICAgICBlbHNlOgog
ICAgICAgICAgICAgY2hhbmdlZF9maWxlcyA9IHBhdGhzIGlmIG9wdGlvbnMuZGlmZl9maWxlcyBl
bHNlIE5vbmUKICAgICAgICAgICAgIHBhdGNoID0gaG9zdC5zY20oKS5jcmVhdGVfcGF0Y2gob3B0
aW9ucy5naXRfY29tbWl0LCBjaGFuZ2VkX2ZpbGVzPWNoYW5nZWRfZmlsZXMsIGdpdF9pbmRleD1v
cHRpb25zLmdpdF9pbmRleCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvbWFp
bl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxl
L21haW5fdW5pdHRlc3QucHkJKHJldmlzaW9uIDIxOTE5NikKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvbWFpbl91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjAsMTEgKzIw
LDE4IEBACiAjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKK2ltcG9ydCBv
cHRwYXJzZQogaW1wb3J0IHVuaXR0ZXN0CiAKK2ltcG9ydCB3ZWJraXRweS5zdHlsZS5jaGVja2Vy
IGFzIGNoZWNrZXIKKwogZnJvbSBtYWluIGltcG9ydCBjaGFuZ2VfZGlyZWN0b3J5Citmcm9tIHdl
YmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0uZmlsZXN5c3RlbV9tb2NrIGltcG9ydCBNb2NrRmlsZVN5c3RlbQorZnJvbSB3ZWJraXRweS5j
b21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmVTY29wZQogZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmxvZ3Rlc3RpbmcgaW1wb3J0IExvZ1Rlc3RpbmcKK2Zy
b20gd2Via2l0cHkuc3R5bGUuY2hlY2tlciBpbXBvcnQgU3R5bGVQcm9jZXNzb3IKK2Zyb20gd2Vi
a2l0cHkuc3R5bGUuZmlsZXJlYWRlciBpbXBvcnQgVGV4dEZpbGVSZWFkZXIKIAogCiBjbGFzcyBD
aGFuZ2VEaXJlY3RvcnlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTczLDMgKzgwLDEwMCBA
QCBjbGFzcyBDaGFuZ2VEaXJlY3RvcnlUZXN0KHVuaXR0ZXN0LlRlc3RDCiAKICIiIl0KICAgICAg
ICAgc2VsZi5fYXNzZXJ0X3Jlc3VsdChwYXRocywgcGF0aHMsIGxvZ19tZXNzYWdlcywgc2VsZi5f
b3JpZ2luYWxfZGlyZWN0b3J5KQorCisKK2NsYXNzIEV4cGVjdGF0aW9uTGludGVySW5TdHlsZUNo
ZWNrZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAg
ICAgICAgcGFyc2VyID0gY2hlY2tlci5jaGVja193ZWJraXRfc3R5bGVfcGFyc2VyKCkKKyAgICAg
ICAgKF8sIG9wdGlvbnMpID0gcGFyc2VyLnBhcnNlKFtdKQorICAgICAgICBzZWxmLl9zdHlsZV9j
aGVja2VyX2NvbmZpZ3VyYXRpb24gPSBjaGVja2VyLmNoZWNrX3dlYmtpdF9zdHlsZV9jb25maWd1
cmF0aW9uKG9wdGlvbnMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2ZpbGVfcmVhZGVyKHNlbGYsIGZp
bGVfc3lzdGVtKToKKyAgICAgICAgc3R5bGVfcHJvY2Vzc29yID0gU3R5bGVQcm9jZXNzb3Ioc2Vs
Zi5fc3R5bGVfY2hlY2tlcl9jb25maWd1cmF0aW9uKQorICAgICAgICByZXR1cm4gVGV4dEZpbGVS
ZWFkZXIoZmlsZV9zeXN0ZW0sIHN0eWxlX3Byb2Nlc3NvcikKKworICAgIGRlZiBfZ2VuZXJhdGVf
dGVzdGluZ19ob3N0KHNlbGYsIGZpbGVzPXt9KToKKyAgICAgICAgaG9zdCA9IEhvc3QoKQorICAg
ICAgICBleHBlY3RhdGlvbl9maWxlcyA9IGZpbGVzCisKKyAgICAgICAgaG9zdC5maWxlc3lzdGVt
ID0gTW9ja0ZpbGVTeXN0ZW0oZGlycz1bJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzJ10pCisg
ICAgICAgIG9wdGlvbnMgPSBvcHRwYXJzZS5WYWx1ZXMoKQorICAgICAgICBzZXRhdHRyKG9wdGlv
bnMsICdsYXlvdXRfdGVzdHNfZGlyJywgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzJykKKwor
ICAgICAgICBhbGxfcG9ydHMgPSBbaG9zdC5wb3J0X2ZhY3RvcnkuZ2V0KG5hbWUsIG9wdGlvbnM9
b3B0aW9ucykgZm9yIG5hbWUgaW4gaG9zdC5wb3J0X2ZhY3RvcnkuYWxsX3BvcnRfbmFtZXMoKV0K
KyAgICAgICAgZm9yIHBvcnQgaW4gYWxsX3BvcnRzOgorICAgICAgICAgICAgZm9yIHBhdGggaW4g
cG9ydC5leHBlY3RhdGlvbnNfZmlsZXMoKToKKyAgICAgICAgICAgICAgICBpZiBwYXRoIG5vdCBp
biBleHBlY3RhdGlvbl9maWxlczoKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0YXRpb25fZmls
ZXNbcGF0aF0gPSAnIyBFbXB0eSBleHBlY3RhdGlvbiBmaWxlXG4nCisKKyAgICAgICAgZXhwZWN0
YXRpb25fZmlsZXNbJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL2NzczEvdGVzdC5odG1sJ10g
PSAnVGVzdCcKKyAgICAgICAgZXhwZWN0YXRpb25fZmlsZXNbJy9tb2NrLWNoZWNrb3V0L0xheW91
dFRlc3RzL2NzczEvdGVzdC1leHBlY3RlZC50eHQnXSA9ICdUZXN0IEV4cGVjdGF0aW9uJworICAg
ICAgICBob3N0LmZpbGVzeXN0ZW0gPSBNb2NrRmlsZVN5c3RlbShmaWxlcz1leHBlY3RhdGlvbl9m
aWxlcykKKyAgICAgICAgcmV0dXJuIGhvc3QKKworICAgIGRlZiB0ZXN0X25vX2xpbnRlcl9lcnJv
cnMoc2VsZik6CisgICAgICAgIGhvc3QgPSBzZWxmLl9nZW5lcmF0ZV90ZXN0aW5nX2hvc3QoKQor
CisgICAgICAgIHNjb3BlID0gT3V0cHV0Q2FwdHVyZVNjb3BlKCkKKyAgICAgICAgd2l0aCBzY29w
ZToKKyAgICAgICAgICAgIGZpbGVfcmVhZGVyID0gc2VsZi5fZ2VuZXJhdGVfZmlsZV9yZWFkZXIo
aG9zdC5maWxlc3lzdGVtKQorICAgICAgICAgICAgZmlsZV9yZWFkZXIuZG9fYXNzb2NpYXRpb25f
Y2hlY2soJy9tb2NrLWNoZWNrb3V0JywgaG9zdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
Y29wZS5jYXB0dXJlZF9vdXRwdXQsICgnJywgJycsICcnKSkKKworICAgIGRlZiB0ZXN0X2xpbnRl
cl9kdXBsaWNhdGVfbGluZShzZWxmKToKKyAgICAgICAgZmlsZXMgPSB7CisgICAgICAgICAgICAn
L21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucyc6CisgICAgICAgICAg
ICAnIyBUZXN0RXhwZWN0YXRpb25zXG5jc3MxL3Rlc3QuaHRtbCBbIEZhaWx1cmUgXVxuY3NzMS90
ZXN0Lmh0bWwgWyBGYWlsdXJlIF1cbid9CisgICAgICAgIGhvc3QgPSBzZWxmLl9nZW5lcmF0ZV90
ZXN0aW5nX2hvc3QoZmlsZXMpCisKKyAgICAgICAgc2NvcGUgPSBPdXRwdXRDYXB0dXJlU2NvcGUo
KQorICAgICAgICB3aXRoIHNjb3BlOgorICAgICAgICAgICAgZmlsZV9yZWFkZXIgPSBzZWxmLl9n
ZW5lcmF0ZV9maWxlX3JlYWRlcihob3N0LmZpbGVzeXN0ZW0pCisgICAgICAgICAgICBmaWxlX3Jl
YWRlci5wcm9jZXNzX3BhdGhzKHsnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvVGVzdEV4cGVj
dGF0aW9ucyd9KQorICAgICAgICAgICAgZmlsZV9yZWFkZXIuZG9fYXNzb2NpYXRpb25fY2hlY2so
Jy9tb2NrLWNoZWNrb3V0JywgaG9zdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAg
ICAgICAgIHNjb3BlLmNhcHR1cmVkX291dHB1dCwKKyAgICAgICAgICAgICgnJywgJycsICcvbW9j
ay1jaGVja291dC9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zOjM6ICBEdXBsaWNhdGUgb3Ig
YW1iaWd1b3VzIGVudHJ5IGxpbmVzIExheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnM6MiBhbmQg
TGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9uczozLiAgW3Rlc3QvZXhwZWN0YXRpb25zXSBbNV1c
bicpKQorCisgICAgZGVmIHRlc3RfbGludGVyX2R1cGxpY2F0ZV9saW5lX25vX2VkaXQoc2VsZik6
CisgICAgICAgIGZpbGVzID0geworICAgICAgICAgICAgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRl
c3RzL1Rlc3RFeHBlY3RhdGlvbnMnOgorICAgICAgICAgICAgJyMgVGVzdEV4cGVjdGF0aW9uc1xu
Y3NzMS90ZXN0Lmh0bWwgWyBGYWlsdXJlIF1cbmNzczEvdGVzdC5odG1sIFsgRmFpbHVyZSBdXG4n
fQorICAgICAgICBob3N0ID0gc2VsZi5fZ2VuZXJhdGVfdGVzdGluZ19ob3N0KGZpbGVzKQorCisg
ICAgICAgIHNjb3BlID0gT3V0cHV0Q2FwdHVyZVNjb3BlKCkKKyAgICAgICAgd2l0aCBzY29wZToK
KyAgICAgICAgICAgIGZpbGVfcmVhZGVyID0gc2VsZi5fZ2VuZXJhdGVfZmlsZV9yZWFkZXIoaG9z
dC5maWxlc3lzdGVtKQorICAgICAgICAgICAgZmlsZV9yZWFkZXIucHJvY2Vzc19wYXRocyhbJy9t
b2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy9UZXN0RXhwZWN0YXRpb25zJ10p
CisgICAgICAgICAgICBmaWxlX3JlYWRlci5kb19hc3NvY2lhdGlvbl9jaGVjaygnL21vY2stY2hl
Y2tvdXQnLCBob3N0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjb3BlLmNhcHR1cmVkX291
dHB1dCwgKCcnLCAnJywgJycpKQorCisgICAgZGVmIHRlc3RfbGludGVyX2RlbGV0ZWRfZmlsZShz
ZWxmKToKKyAgICAgICAgZmlsZXMgPSB7CisgICAgICAgICAgICAnL21vY2stY2hlY2tvdXQvTGF5
b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucyc6CisgICAgICAgICAgICAnIyBUZXN0RXhwZWN0YXRp
b25zXG5jc3MxL2RlbGV0ZWQtdGVzdC5odG1sIFsgRmFpbHVyZSBdXG4nfQorICAgICAgICBob3N0
ID0gc2VsZi5fZ2VuZXJhdGVfdGVzdGluZ19ob3N0KGZpbGVzKQorICAgICAgICBob3N0ID0gc2Vs
Zi5fZ2VuZXJhdGVfdGVzdGluZ19ob3N0KGZpbGVzKQorCisgICAgICAgIHNjb3BlID0gT3V0cHV0
Q2FwdHVyZVNjb3BlKCkKKyAgICAgICAgd2l0aCBzY29wZToKKyAgICAgICAgICAgIGZpbGVfcmVh
ZGVyID0gc2VsZi5fZ2VuZXJhdGVfZmlsZV9yZWFkZXIoaG9zdC5maWxlc3lzdGVtKQorICAgICAg
ICAgICAgZmlsZV9yZWFkZXIuZGVsZXRlX2ZpbGUoJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3Rz
L2NzczEvZGVsZXRlZC10ZXN0Lmh0bWwnKQorICAgICAgICAgICAgZmlsZV9yZWFkZXIuZG9fYXNz
b2NpYXRpb25fY2hlY2soJy9tb2NrLWNoZWNrb3V0JywgaG9zdCkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgKKyAgICAgICAgICAgIHNjb3BlLmNhcHR1cmVkX291dHB1dCwKKyAgICAgICAgICAg
ICgnJywgJycsICcvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zOjI6
ICBQYXRoIGRvZXMgbm90IGV4aXN0LiAgW3Rlc3QvZXhwZWN0YXRpb25zXSBbNV1cbicpKQorCisg
ICAgZGVmIHRlc3RfbGludGVyX2RlbGV0ZWRfZmlsZV9ub19lZGl0KHNlbGYpOgorICAgICAgICBm
aWxlcyA9IHsKKyAgICAgICAgICAgICcvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9UZXN0RXhw
ZWN0YXRpb25zJzoKKyAgICAgICAgICAgICcjIFRlc3RFeHBlY3RhdGlvbnNcbmNzczEvZGVsZXRl
ZC10ZXN0Lmh0bWwgWyBGYWlsdXJlIF1cbid9CisgICAgICAgIGhvc3QgPSBzZWxmLl9nZW5lcmF0
ZV90ZXN0aW5nX2hvc3QoZmlsZXMpCisKKyAgICAgICAgc2NvcGUgPSBPdXRwdXRDYXB0dXJlU2Nv
cGUoKQorICAgICAgICB3aXRoIHNjb3BlOgorICAgICAgICAgICAgZmlsZV9yZWFkZXIgPSBzZWxm
Ll9nZW5lcmF0ZV9maWxlX3JlYWRlcihob3N0LmZpbGVzeXN0ZW0pCisgICAgICAgICAgICBmaWxl
X3JlYWRlci5kZWxldGVfZmlsZSgnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvY3NzMS9vdGhl
ci1kZWxldGVkLXRlc3QuaHRtbCcpCisgICAgICAgICAgICBmaWxlX3JlYWRlci5kb19hc3NvY2lh
dGlvbl9jaGVjaygnL21vY2stY2hlY2tvdXQnLCBob3N0KQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHNjb3BlLmNhcHR1cmVkX291dHB1dCwgKCcnLCAnJywgJycpKQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9wYXRjaHJlYWRlci5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL3BhdGNocmVhZGVyLnB5CShyZXZpc2lvbiAyMTkxOTYpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL3BhdGNocmVhZGVyLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC03Nyw3ICs3Nyw4IEBAIGNsYXNzIFBhdGNoUmVhZGVyKG9iamVjdCk6CiAgICAgICAg
ICAgICAgICAgIyBEb24ndCBjaGVjayBmaWxlcyB3aGljaCBjb250YWluIG9ubHkgZGVsZXRlZCBs
aW5lcwogICAgICAgICAgICAgICAgICMgYXMgdGhleSBjYW4gbmV2ZXIgYWRkIHN0eWxlIGVycm9y
cy4gSG93ZXZlciwgbWFyayB0aGVtIGFzCiAgICAgICAgICAgICAgICAgIyBwcm9jZXNzZWQgc28g
dGhhdCB3ZSBjb3VudCB1cCBudW1iZXIgb2Ygc3VjaCBmaWxlcy4KLSAgICAgICAgICAgICAgICBz
ZWxmLl90ZXh0X2ZpbGVfcmVhZGVyLmNvdW50X2RlbGV0ZV9vbmx5X2ZpbGUoKQorICAgICAgICAg
ICAgICAgIHNlbGYuX3RleHRfZmlsZV9yZWFkZXIuZGVsZXRlX2ZpbGUocGF0aCkKICAgICAgICAg
ICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICBzZWxmLl90ZXh0X2ZpbGVfcmVhZGVyLnBy
b2Nlc3NfZmlsZShmaWxlX3BhdGg9cGF0aCwgbGluZV9udW1iZXJzPWxpbmVfbnVtYmVycykKKyAg
ICAgICAgc2VsZi5fdGV4dF9maWxlX3JlYWRlci5kb19hc3NvY2lhdGlvbl9jaGVjayhmcy5nZXRj
d2QoKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvcGF0Y2hyZWFkZXJfdW5p
dHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9wYXRj
aHJlYWRlcl91bml0dGVzdC5weQkocmV2aXNpb24gMjE5MTk2KQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9wYXRjaHJlYWRlcl91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAt
NDUsMTQgKzQ1LDE3IEBAIGNsYXNzIFBhdGNoUmVhZGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSkK
ICAgICAgICAgICAgIHNlbGYucGFzc2VkX3RvX3Byb2Nlc3NfZmlsZSA9IFtdCiAgICAgICAgICAg
ICAiIiJBIGxpc3Qgb2YgKGZpbGVfcGF0aCwgbGluZV9udW1iZXJzKSBwYWlycy4iIiIKICAgICAg
ICAgICAgIHNlbGYuZGVsZXRlX29ubHlfZmlsZV9jb3VudCA9IDAKLSAgICAgICAgICAgICIiIkEg
bnVtYmVyIG9mIHRpbWVzIGNvdW50X2RlbGV0ZV9vbmx5X2ZpbGUoKSBjYWxsZWQiIiIKKyAgICAg
ICAgICAgICIiIkEgbnVtYmVyIG9mIHRpbWVzIGRlbGV0ZV9maWxlKCkgY2FsbGVkIiIiCiAKICAg
ICAgICAgZGVmIHByb2Nlc3NfZmlsZShzZWxmLCBmaWxlX3BhdGgsIGxpbmVfbnVtYmVycyk6CiAg
ICAgICAgICAgICBzZWxmLnBhc3NlZF90b19wcm9jZXNzX2ZpbGUuYXBwZW5kKChmaWxlX3BhdGgs
IGxpbmVfbnVtYmVycykpCiAKLSAgICAgICAgZGVmIGNvdW50X2RlbGV0ZV9vbmx5X2ZpbGUoc2Vs
Zik6CisgICAgICAgIGRlZiBkZWxldGVfZmlsZShzZWxmLCBmaWxlX3BhdGg9Tm9uZSk6CiAgICAg
ICAgICAgICBzZWxmLmRlbGV0ZV9vbmx5X2ZpbGVfY291bnQgKz0gMQogCisgICAgICAgIGRlZiBk
b19hc3NvY2lhdGlvbl9jaGVjayhzZWxmLCBjd2QpOgorICAgICAgICAgICAgcGFzcworCiAgICAg
ZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBmaWxlX3JlYWRlciA9IHNlbGYuTW9ja1RleHRGaWxl
UmVhZGVyKCkKICAgICAgICAgc2VsZi5fZmlsZV9yZWFkZXIgPSBmaWxlX3JlYWRlcgpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy90ZXN0X2V4cGVjdGF0aW9ucy5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL3Rl
c3RfZXhwZWN0YXRpb25zLnB5CShyZXZpc2lvbiAyMTkxOTYpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL2NoZWNrZXJzL3Rlc3RfZXhwZWN0YXRpb25zLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw3ICszNiw4IEBAIGltcG9ydCBzeXMKIAogZnJvbSBjb21tb24gaW1wb3J0IFRhYkNo
ZWNrZXIKIGZyb20gd2Via2l0cHkuY29tbW9uLmhvc3QgaW1wb3J0IEhvc3QKLWZyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2V4cGVjdGF0aW9ucyBpbXBvcnQgVGVzdEV4cGVj
dGF0aW9uUGFyc2VyCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMgaW1wb3J0IHRl
c3RfZXhwZWN0YXRpb25zCitmcm9tIHdlYmtpdHB5LnN0eWxlLmVycm9yX2hhbmRsZXJzIGltcG9y
dCBEZWZhdWx0U3R5bGVFcnJvckhhbmRsZXIKIAogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIo
X19uYW1lX18pCkBAIC03OCw3ICs3OSw3IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnNDaGVja2Vy
KG9iamVjdCk6CiAgICAgICAgIHBhc3MKIAogICAgIGRlZiBjaGVja190ZXN0X2V4cGVjdGF0aW9u
cyhzZWxmLCBleHBlY3RhdGlvbnNfc3RyLCB0ZXN0cz1Ob25lKToKLSAgICAgICAgcGFyc2VyID0g
VGVzdEV4cGVjdGF0aW9uUGFyc2VyKHNlbGYuX3BvcnRfb2JqLCB0ZXN0cywgYWxsb3dfcmViYXNl
bGluZV9tb2RpZmllcj1GYWxzZSkKKyAgICAgICAgcGFyc2VyID0gdGVzdF9leHBlY3RhdGlvbnMu
VGVzdEV4cGVjdGF0aW9uUGFyc2VyKHNlbGYuX3BvcnRfb2JqLCB0ZXN0cywgYWxsb3dfcmViYXNl
bGluZV9tb2RpZmllcj1GYWxzZSkKICAgICAgICAgZXhwZWN0YXRpb25zID0gcGFyc2VyLnBhcnNl
KCdleHBlY3RhdGlvbnMnLCBleHBlY3RhdGlvbnNfc3RyKQogCiAgICAgICAgIGxldmVsID0gNQpA
QCAtOTYsMyArOTcsNTQgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uc0NoZWNrZXIob2JqZWN0KToK
IAogICAgICAgICAjIFdhcm4gdGFicyBpbiBsaW5lcyBhcyB3ZWxsCiAgICAgICAgIHNlbGYuY2hl
Y2tfdGFicyhsaW5lcykKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX3Nob3VsZF9sb2df
bGludGVyX3dhcm5pbmcod2FybmluZywgZmlsZXMsIGN3ZCwgaG9zdCk6CisgICAgICAgICMgQ2Fz
ZSAxLCB0aGUgbGluZSB0aGUgd2FybmluZyB3YXMgdGllZCB0byBpcyBpbiBvdXIgcGF0Y2guCisg
ICAgICAgIGFic19maWxlbmFtZSA9IGhvc3QuZmlsZXN5c3RlbS5qb2luKGN3ZCwgd2FybmluZy5m
aWxlbmFtZSkKKyAgICAgICAgaWYgYWJzX2ZpbGVuYW1lIGluIGZpbGVzIGFuZCAoZmlsZXNbYWJz
X2ZpbGVuYW1lXSBpcyBOb25lIG9yIHdhcm5pbmcubGluZV9udW1iZXIgaW4gZmlsZXNbYWJzX2Zp
bGVuYW1lXSk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGZvciBmaWxlLCBs
aW5lcyBpbiB3YXJuaW5nLnJlbGF0ZWRfZmlsZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBh
YnNfZmlsZW5hbWUgPSBob3N0LmZpbGVzeXN0ZW0uam9pbihjd2QsIGZpbGUpCisgICAgICAgICAg
ICBpZiBhYnNfZmlsZW5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgIyBDYXNlIDIsIGEg
ZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhlIHdhcm5pbmcgaXMgaW4gb3VyIHBhdGNoCisgICAgICAg
ICAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyB3aWxsIHJlYWxseSBvbmx5IGhhcHBlbiBpZiB5b3Ug
ZGVsZXRlIGEgdGVzdC4KKyAgICAgICAgICAgICAgICBpZiBsaW5lcyBpcyBOb25lOgorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICAgICAgICAgIyBDYXNlIDMsIGEg
bGluZSBhc3NvY2lhdGVkIHdpdGggdGhlIHdhcm5pbmcgaXMgaW4gb3VyIHBhdGNoLgorICAgICAg
ICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5l
IGluIGZpbGVzW2Fic19maWxlbmFtZV06CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
VHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYg
bGludF90ZXN0X2V4cGVjdGF0aW9ucyhmaWxlcywgY29uZmlndXJhdGlvbiwgY3dkLCBpbmNyZW1l
bnRfZXJyb3JfY291bnQ9bGFtYmRhOiAwLCBsaW5lX251bWJlcnM9Tm9uZSwgaG9zdD1Ib3N0KCkp
OgorICAgICAgICBlcnJvcl9jb3VudCA9IDAKKworICAgICAgICBwb3J0c190b19saW50ID0gW2hv
c3QucG9ydF9mYWN0b3J5LmdldChuYW1lKSBmb3IgbmFtZSBpbiBob3N0LnBvcnRfZmFjdG9yeS5h
bGxfcG9ydF9uYW1lcygpXQorICAgICAgICBmaWxlc19saW50ZWQgPSBzZXQoKQorICAgICAgICBm
b3IgcG9ydCBpbiBwb3J0c190b19saW50OgorICAgICAgICAgICAgZXhwZWN0YXRpb25zX2RpY3Qg
PSBwb3J0LmV4cGVjdGF0aW9uc19kaWN0KCkKKyAgICAgICAgICAgIGZvciBleHBlY3RhdGlvbnNf
ZmlsZSBpbiBleHBlY3RhdGlvbnNfZGljdC5rZXlzKCk6CisgICAgICAgICAgICAgICAgc3R5bGVf
ZXJyb3JfaGFuZGxlciA9IERlZmF1bHRTdHlsZUVycm9ySGFuZGxlcigKKyAgICAgICAgICAgICAg
ICAgICAgZXhwZWN0YXRpb25zX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRp
b24sCisgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudF9lcnJvcl9jb3VudCwKKyAgICAgICAg
ICAgICAgICAgICAgbGluZV9udW1iZXJzKQorCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgICAgICAgICBpZiBleHBlY3RhdGlvbnNfZmlsZSBpbiBmaWxlc19saW50ZWQ6CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBleHBlY3Rh
dGlvbnMgPSB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zKAorICAgICAgICAgICAg
ICAgICAgICAgICAgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9uc190
b19saW50PXtleHBlY3RhdGlvbnNfZmlsZTogZXhwZWN0YXRpb25zX2RpY3RbZXhwZWN0YXRpb25z
X2ZpbGVdfSkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0YXRpb25zLnBhcnNlX2FsbF9leHBl
Y3RhdGlvbnMoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCB0ZXN0X2V4cGVjdGF0aW9ucy5QYXJz
ZUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGZvciB3YXJuaW5nIGluIGUud2Fybmlu
Z3M6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBUZXN0RXhwZWN0YXRpb25zQ2hlY2tlci5f
c2hvdWxkX2xvZ19saW50ZXJfd2FybmluZyh3YXJuaW5nLCBmaWxlcywgY3dkLCBob3N0KToKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZV9lcnJvcl9oYW5kbGVyKHdhcm5pbmcubGlu
ZV9udW1iZXIsICd0ZXN0L2V4cGVjdGF0aW9ucycsIDUsIHdhcm5pbmcuZXJyb3IpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY291bnQgKz0gMQorICAgICAgICAgICAgICAgIGZp
bGVzX2xpbnRlZC5hZGQoZXhwZWN0YXRpb25zX2ZpbGUpCisgICAgICAgIHJldHVybiBlcnJvcl9j
b3VudAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315854</attachid>
            <date>2017-07-18 16:23:57 -0700</date>
            <delta_ts>2017-07-19 08:55:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173559-20170718162356.patch</filename>
            <type>text/plain</type>
            <size>31479</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxOTYzOCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDg5IEBACisyMDE3LTA3LTE4ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBsaW50LXRlc3QtZXhwZWN0YXRpb25zIHNob3VsZCBiZSBydW4gZHVyaW5n
IHN0eWxlIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzM1NTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMyODU0OTQxPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IERhdmlkIEtpbHplci4KKworICAgICAgICBSdW5uaW5nIHRoZSB0ZXN0
IGV4cGVjdGF0aW9uIGxpbnRlciByZXF1aXJlcyByZWFkaW5nIGJvdGggZmlsZXMgYW5kIGxpbmVz
IG5vdCBpbiB0aGUKKyAgICAgICAgcGF0Y2ggYmVjYXVzZSwgZm9yIGV4YW1wbGUsIGRlbGV0aW9u
IG9mIGEgdGVzdCBjYW4gY2F1c2UgYSBsaW50IGZhaWx1cmUgZXZlbiB0aG91Z2gKKyAgICAgICAg
bm90IHRlc3QgZXhwZWN0YXRpb25zIHdoZXJlIG1vZGlmaWVkLiBUaGlzIG1lYW5zIHRoYXQgdGhl
IGxpbnRlciB3aWxsIG9jY2FzaW9uYWxseSB3YXJuCisgICAgICAgIGFib3V0IGxpbmVzIHdoaWNo
IHdlcmUgbm90IGNoYW5nZWQgaW4gYSBnaXZlbiBwYXRjaCBidXQgd2hvc2UgZXJyb3IgaXMgcmVs
YXRlZCB0byBhCisgICAgICAgIGNoYW5nZSBtYWRlIGluIHRoYXQgcGF0Y2guCisKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5OgorICAg
ICAgICAoTW9ja0ZpbGVTeXN0ZW0ub3Blbl90ZXh0X2ZpbGVfZm9yX3JlYWRpbmcpOiBBZGQgJ2Vy
cm9ycycgYXJndW1lbnQgdG8gbWltaWMgZmlsZXN5c3RlbS4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9leHBlY3RhdGlvbnMucHk6CisgICAgICAg
IChXYXJuaW5nKTogQWRkZWQgY2xhc3MgdG8gcGFzcyB3YXJuaW5ncyBhcyBhbiBvYmplY3QgaW5z
dGVhZCBvZiBhIHN0cmluZy4KKyAgICAgICAgKFdhcm5pbmcuX19pbml0X18pOiBDb25zdHJ1Y3Qg
d2FybmluZyB3aXRoIGZpbGUgbmFtZSwgbGluZSBudW1iZXIsIGxpbmUgY29udGVudCwKKyAgICAg
ICAgZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yIGFuZCB0aGUgbmFtZSBvZiB0aGUgYXNzb2NpYXRl
ZCB0ZXN0LgorICAgICAgICAoV2FybmluZy5fX3N0cl9fKTogQ29udmVydCB0byBzdHJpbmcgc28g
dGhhdCBleGlzdGluZyBwcmludGluZyBjb2RlIHdvcmtzLgorICAgICAgICAoVGVzdEV4cGVjdGF0
aW9uUGFyc2VyLl9faW5pdF9fKTogUGFzcyBzaG9ydGVuX2ZpbGVuYW1lIGZ1bmN0aW9uIHRvCisg
ICAgICAgIFRlc3RFeHBlY3RhdGlvbnNQYXJzZXIgdG8gYWRkIGEgZGVsZXRlZCBmaWxlIHRvIHRo
ZSByZWxhdGVkX2ZpbGVzIGRpY3Rpb25hcnkuCisgICAgICAgIChUZXN0RXhwZWN0YXRpb25QYXJz
ZXIuX2NoZWNrX3Rlc3RfZXhpc3RzKTogSWYgdGhlIHRlc3QgZG9lcyBub3QgZXhpc3QsIGFkZCB0
aGUKKyAgICAgICAgbWlzc2luZyBwYXRoIHRvIHRoZSByZWxhdGVkX2ZpbGVzIGRpY3Rpb25hcnku
CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25MaW5lLl9faW5pdF9fKTogQWRkIHJlbGF0ZWRfZmls
ZXMgZGljdGlvbmFyeSwgd2hpY2ggdHJhY2tzCisgICAgICAgIGZpbGVzIGFuZCBsaW5lIG51bWJl
cnMgcmVsYXRlZCB0byB0aGlzIHRlc3QgZXhwZWN0YXRpb24gbGluZS4gVGhpcyB3aWxsIGFsbG93
CisgICAgICAgIHRyYWNraW5nIGxpbnRlciBlcnJvcnMgaW4gdGhlIHN0eWxlIGNoZWNrZXIgb2Nj
dXJyaW5nIGFjcm9zcyBtdWx0aXBsZSBmaWxlcy4KKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnNN
b2RlbC5fYWxyZWFkeV9zZWVuX2JldHRlcl9tYXRjaCk6IEFkZCByZWR1bmRhbnQgZXhwZWN0YXRp
b24KKyAgICAgICAgbGluZXMgdG8gcmVsYXRlZF9maWxlcyBkaWN0aW9uYXJ5LgorICAgICAgICAo
VGVzdEV4cGVjdGF0aW9ucy5fX2luaXRfXyk6IFBhc3Mgc2VsZi5fc2hvcnRlbl9maWxlbmFtZSB0
byBUZXN0RXhwZWN0YXRpb25QYXJzZXIuCisgICAgICAgIChUZXN0RXhwZWN0YXRpb25zLl9yZXBv
cnRfd2FybmluZ3MpOiBDb25zdHJ1Y3Qgd2FybmluZyBvYmplY3QgaW5zdGVhZCBvZiBzdHJpbmcK
KyAgICAgICAgd2hlbiBhZGRpbmcgdG8gd2FybmluZ3MgbGlzdC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3BvcnQvd2luLnB5OiBDaGFuZ2VkIGxvZ2dpbmcgbGV2ZWwgZm9ybSB3YXJuaW5n
IHRvIGRlYnVnIHRvCisgICAgICAgIGNsZWFuLXVwIGxvZy4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL2NoZWNrZXIucHk6CisgICAgICAgIChQcm9jZXNzb3JCYXNlLmRvX2Fzc29j
aWF0aW9uX2NoZWNrKTogQWRkIHJlcXVpcmVkIGZ1bmN0aW9uIGZvciBwcm9jZXNzb3IgY2xhc3Nl
cy4KKyAgICAgICAgKFN0eWxlUHJvY2Vzc29yKToKKyAgICAgICAgKFN0eWxlUHJvY2Vzc29yLmRv
X2Fzc29jaWF0aW9uX2NoZWNrKTogUnVuIHRoZSBUZXN0RXhwZWN0YXRpb25zIGxpbnRlciB3aGVu
CisgICAgICAgIGNoZWNraW5nIGZvciBlcnJvcnMgYmV0d2VlbiBhc3NvY2lhdGVkIGZpbGVzLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvdGVzdF9leHBlY3RhdGlv
bnMucHk6CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25zQ2hlY2tlci5jaGVja190ZXN0X2V4cGVj
dGF0aW9ucyk6IFJlZmxlY3QgY2hhbmdlZCBpbXBvcnQgc3RhdGVtZW50cy4KKyAgICAgICAgKFRl
c3RFeHBlY3RhdGlvbnNDaGVja2VyKToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnNDaGVja2Vy
Ll9zaG91bGRfbG9nX2xpbnRlcl93YXJuaW5nKTogR2l2ZW4gYSB3YXJuaW5nLCBhIGRpY3Rpb25h
cnkKKyAgICAgICAgb2YgbW9kaWZpZWQgZmlsZXMsIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0
b3J5IGFuZCB0aGUgaG9zdCwgZGV0ZXJtaW5lIGlmIHRoZSBsaW50ZXIKKyAgICAgICAgd2Fybmlu
ZyBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNoYW5nZXMuCisgICAgICAgIChUZXN0RXhwZWN0YXRp
b25zQ2hlY2tlci5saW50X3Rlc3RfZXhwZWN0YXRpb25zKTogTGludCB0ZXN0IGV4cGVjdGF0aW9u
cyBmb3IgdGhlCisgICAgICAgIHN0eWxlIGNoZWNrZXIuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9maWxlcmVhZGVyLnB5OgorICAgICAgICAoVGV4dEZpbGVSZWFkZXIpOgorICAg
ICAgICAoVGV4dEZpbGVSZWFkZXIuX19pbml0X18pOiBUcmFjayBtb2RpZmllZCBmaWxlcyBpbiBk
aWN0aW9uYXJ5IGluc3RlYWQgb2YgYSBjb3VudGVyLgorICAgICAgICAoVGV4dEZpbGVSZWFkZXIu
ZmlsZV9jb3VudCk6IFVzZSBkaWN0aW9uYXJ5IHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIG1v
ZGlmaWVkIGZpbGVzLgorICAgICAgICAoVGV4dEZpbGVSZWFkZXIucHJvY2Vzc19maWxlKTogVHJh
Y2sgYm90aCB0aGUgbnVtYmVyIG9mIGZpbGVzIGNoYW5nZWQgYW5kIHdoaWNoIGxpbmVzCisgICAg
ICAgIGluIHRob3NlIGZpbGVzIHdlcmUgY2hhbmdlZC4KKyAgICAgICAgKFRleHRGaWxlUmVhZGVy
LmRvX2Fzc29jaWF0aW9uX2NoZWNrKTogUnVuIHRoZSBwcm9jZXNzb3IncyBhc3NvY2lhdGlvbiBj
aGVjayBvbiBhbGwKKyAgICAgICAgbW9kaWZpZWQgb3IgZGVsZXRlZCBmaWxlcyBwcm9jZXNzZWQg
YnkgVGV4dEZpbGVSZWFkZXIuCisgICAgICAgIChUZXh0RmlsZVJlYWRlci5kZWxldGVfZmlsZSk6
IFRyYWNrIGRlbGV0ZWQgZmlsZXMgaW4gX2ZpbGVzIGRpY3Rpb25hcnkuCisgICAgICAgIChUZXh0
RmlsZVJlYWRlci5jb3VudF9kZWxldGVfb25seV9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2ZpbGVyZWFkZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChU
ZXh0RmlsZVJlYWRlclRlc3QudGVzdF9kZWxldGVfZmlsZSk6IFJlbmFtZWQgZnVuY3Rpb24gdG8g
cmVmbGVjdCBuZXcgZnVuY3Rpb24gbmFtZS4KKyAgICAgICAgKFRleHRGaWxlUmVhZGVyVGVzdC50
ZXN0X2NvdW50X2RlbGV0ZV9vbmx5X2ZpbGUpOiBNb3ZlZCB0byB0ZXN0X2RlbGV0ZV9maWxlLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvbWFpbi5weToKKyAgICAgICAgKENoZWNr
V2ViS2l0U3R5bGUubWFpbik6IFdoZW4gcnVubmluZyB0aGUgc3R5bGUgY2hlY2tlciBvbiBhIHNw
ZWNpZmljIGxpc3Qgb2YgZmlsZXMsCisgICAgICAgIGV4cGxpY2l0bHkgcnVuIHRoZSBhc3NvY2lh
dGlvbiBjaGVjayBvbiB0aGUgZmlsZSByZWFkZXIuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS9tYWluX3VuaXR0ZXN0LnB5OgorICAgICAgICAoRXhwZWN0YXRpb25MaW50ZXJJblN0
eWxlQ2hlY2tlclRlc3QpOiBBZGRlZCB0byB0ZXN0IHRoZSBUZXN0RXhwZWN0YXRpb25MaW50ZXIg
bm93CisgICAgICAgIGVtYmVkZGVkIGluIHRoZSBzdHlsZSBjaGVja2VyLgorICAgICAgICAoRXhw
ZWN0YXRpb25MaW50ZXJJblN0eWxlQ2hlY2tlclRlc3Quc2V0VXApOiBTZXQgdXAgdGhlIHN0eWxl
IGNoZWNrZXIgY29uZmlndXJhdGlvbi4KKyAgICAgICAgKEV4cGVjdGF0aW9uTGludGVySW5TdHls
ZUNoZWNrZXJUZXN0Ll9nZW5lcmF0ZV9maWxlX3JlYWRlcik6IEdpdmVuIGEgZmlsZXN5c3RlbSBv
YmplY3QsCisgICAgICAgIGNvbnN0cnVjdCB0aGUgVGV4dEZpbGVSZWFkZXIgb2JqZWN0IHdpdGgg
YSBTdHlsZVByb2Nlc3NvciB1c2VkIHRvIHJ1biBzdHlsZSBjaGVja3Mgb24KKyAgICAgICAgc3Bl
Y2lmaWMgZmlsZXMuCisgICAgICAgIChFeHBlY3RhdGlvbkxpbnRlckluU3R5bGVDaGVja2VyVGVz
dC5fZ2VuZXJhdGVfdGVzdGluZ19ob3N0KTogR2VuZXJhdGUgYSBob3N0IHVzZWQgZm9yCisgICAg
ICAgIHRlc3RpbmcgdGhlIHRlc3QgZXhwZWN0YXRpb24gbGludGVyIGluc2lkZSB0aGUgc3R5bGUg
Y2hlY2tlci4gVGhpcyBob3N0IG11c3QgY29udGFpbiBhCisgICAgICAgIG1vY2sgZmlsZSBzeXN0
ZW0gd2l0aCB0aGUgYmFzaWMgc3RydWN0dXJlIG9mIHRlc3QgZXhwZWN0YXRpb25zLgorICAgICAg
ICAoRXhwZWN0YXRpb25MaW50ZXJJblN0eWxlQ2hlY2tlclRlc3QudGVzdF9ub19saW50ZXJfZXJy
b3JzKToKKyAgICAgICAgKEV4cGVjdGF0aW9uTGludGVySW5TdHlsZUNoZWNrZXJUZXN0LnRlc3Rf
bGludGVyX2R1cGxpY2F0ZV9saW5lKToKKyAgICAgICAgKEV4cGVjdGF0aW9uTGludGVySW5TdHls
ZUNoZWNrZXJUZXN0LnRlc3RfbGludGVyX2R1cGxpY2F0ZV9saW5lX25vX2VkaXQpOgorICAgICAg
ICAoRXhwZWN0YXRpb25MaW50ZXJJblN0eWxlQ2hlY2tlclRlc3QudGVzdF9saW50ZXJfZGVsZXRl
ZF9maWxlKToKKyAgICAgICAgKEV4cGVjdGF0aW9uTGludGVySW5TdHlsZUNoZWNrZXJUZXN0LnRl
c3RfbGludGVyX2RlbGV0ZWRfZmlsZV9ub19lZGl0KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL3BhdGNocmVhZGVyLnB5OgorICAgICAgICAoUGF0Y2hSZWFkZXIuY2hlY2spOiBT
cGVjaWZ5IHdoaWNoIGZpbGUgd2FzIGRlbGV0ZWQsIHJ1biB0aGUgYXNzb2NpYXRpb24gY2hlY2su
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9wYXRjaHJlYWRlcl91bml0dGVzdC5w
eToKKyAgICAgICAgKFBhdGNoUmVhZGVyVGVzdC5Nb2NrVGV4dEZpbGVSZWFkZXIuZGVsZXRlX2Zp
bGUpOiBSZW5hbWVkIGNvdW50X2RlbGV0ZV9vbmx5X2ZpbGUuCisgICAgICAgIChQYXRjaFJlYWRl
clRlc3QuTW9ja1RleHRGaWxlUmVhZGVyLmRvX2Fzc29jaWF0aW9uX2NoZWNrKTogQWRkZWQuCisg
ICAgICAgIChQYXRjaFJlYWRlclRlc3QuTW9ja1RleHRGaWxlUmVhZGVyLmNvdW50X2RlbGV0ZV9v
bmx5X2ZpbGUpOiBSZW5hbWVkIGRlbGV0ZV9maWxlLgorCiAyMDE3LTA3LTE4ICBEYW5pZWwgQmF0
ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBsbGRiOiBBZGQgdHlwZSBzdW1tYXJ5
IGZvciBTdHJpbmdWaWV3CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0
ZW0vZmlsZXN5c3RlbV9tb2NrLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHkJKHJldmlzaW9uIDIxOTYzOCkKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTMzMiw3ICszMzIsNyBAQCBjbGFzcyBNb2NrRmlsZVN5c3RlbShv
YmplY3QpOgogICAgICAgICBzZWxmLmZpbGVzW3BhdGhdID0gY29udGVudHMKICAgICAgICAgc2Vs
Zi53cml0dGVuX2ZpbGVzW3BhdGhdID0gY29udGVudHMKIAotICAgIGRlZiBvcGVuX3RleHRfZmls
ZV9mb3JfcmVhZGluZyhzZWxmLCBwYXRoKToKKyAgICBkZWYgb3Blbl90ZXh0X2ZpbGVfZm9yX3Jl
YWRpbmcoc2VsZiwgcGF0aCwgZXJyb3JzPSdzdHJpY3QnKToKICAgICAgICAgaWYgc2VsZi5maWxl
c1twYXRoXSBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi5fcmFpc2Vfbm90X2ZvdW5kKHBhdGgp
CiAgICAgICAgIHJldHVybiBSZWFkYWJsZVRleHRGaWxlT2JqZWN0KHNlbGYsIHBhdGgsIHNlbGYu
ZmlsZXNbcGF0aF0pCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9t
b2RlbHMvdGVzdF9leHBlY3RhdGlvbnMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfZXhwZWN0YXRpb25zLnB5CShyZXZpc2lv
biAyMTk2MzgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMv
dGVzdF9leHBlY3RhdGlvbnMucHkJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDIwIEBAIGNs
YXNzIFBhcnNlRXJyb3IoRXhjZXB0aW9uKToKICAgICAgICAgcmV0dXJuICdQYXJzZUVycm9yKHdh
cm5pbmdzPSVzKScgJSBzZWxmLndhcm5pbmdzCiAKIAorY2xhc3MgV2FybmluZyhvYmplY3QpOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZV9udW1iZXIsIGxpbmUsIGVycm9y
LCB0ZXN0PU5vbmUpOgorICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKKyAgICAgICAg
c2VsZi5saW5lX251bWJlciA9IGxpbmVfbnVtYmVyCisgICAgICAgIHNlbGYubGluZSA9IGxpbmUK
KyAgICAgICAgc2VsZi5lcnJvciA9IGVycm9yCisgICAgICAgIHNlbGYudGVzdCA9IHRlc3QKKwor
ICAgICAgICBzZWxmLnJlbGF0ZWRfZmlsZXMgPSB7fQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6
CisgICAgICAgIHJldHVybiAne306e30ge30ge30nLmZvcm1hdChzZWxmLmZpbGVuYW1lLCBzZWxm
LmxpbmVfbnVtYmVyLCBzZWxmLmVycm9yLCBzZWxmLnRlc3QgaWYgc2VsZi50ZXN0IGVsc2Ugc2Vs
Zi5saW5lKQorCisKIGNsYXNzIFRlc3RFeHBlY3RhdGlvblBhcnNlcihvYmplY3QpOgogICAgICIi
IlByb3ZpZGVzIHBhcnNpbmcgZmFjaWxpdGllcyBmb3IgbGluZXMgaW4gdGhlIHRlc3RfZXhwZWN0
YXRpb24udHh0IGZpbGUuIiIiCiAKQEAgLTc4LDcgKzkyLDcgQEAgY2xhc3MgVGVzdEV4cGVjdGF0
aW9uUGFyc2VyKG9iamVjdCk6CiAKICAgICBNSVNTSU5HX0JVR19XQVJOSU5HID0gJ1Rlc3QgbGFj
a3MgQlVHIG1vZGlmaWVyLicKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBmdWxsX3Rl
c3RfbGlzdCwgYWxsb3dfcmViYXNlbGluZV9tb2RpZmllcik6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHBvcnQsIGZ1bGxfdGVzdF9saXN0LCBhbGxvd19yZWJhc2VsaW5lX21vZGlmaWVyLCBzaG9y
dGVuX2ZpbGVuYW1lPU5vbmUpOgogICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAogICAgICAgICBz
ZWxmLl90ZXN0X2NvbmZpZ3VyYXRpb25fY29udmVydGVyID0gVGVzdENvbmZpZ3VyYXRpb25Db252
ZXJ0ZXIoc2V0KHBvcnQuYWxsX3Rlc3RfY29uZmlndXJhdGlvbnMoKSksIHBvcnQuY29uZmlndXJh
dGlvbl9zcGVjaWZpZXJfbWFjcm9zKCkpCiAgICAgICAgIGlmIGZ1bGxfdGVzdF9saXN0IGlzIE5v
bmU6CkBAIC04Niw2ICsxMDAsNyBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25QYXJzZXIob2JqZWN0
KToKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX2Z1bGxfdGVzdF9saXN0ID0gc2V0
KGZ1bGxfdGVzdF9saXN0KQogICAgICAgICBzZWxmLl9hbGxvd19yZWJhc2VsaW5lX21vZGlmaWVy
ID0gYWxsb3dfcmViYXNlbGluZV9tb2RpZmllcgorICAgICAgICBzZWxmLl9zaG9ydGVuX2ZpbGVu
YW1lID0gc2hvcnRlbl9maWxlbmFtZSBvciAobGFtYmRhIHg6IHgpCiAKICAgICBkZWYgcGFyc2Uo
c2VsZiwgZmlsZW5hbWUsIGV4cGVjdGF0aW9uc19zdHJpbmcpOgogICAgICAgICBleHBlY3RhdGlv
bl9saW5lcyA9IFtdCkBAIC0xODYsNiArMjAxLDggQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uUGFy
c2VyKG9iamVjdCk6CiAgICAgICAgICAgICAjIHRpbWUgeW91IHVwZGF0ZSBUZXN0RXhwZWN0YXRp
b25zIHdpdGhvdXQgc3luY2luZwogICAgICAgICAgICAgIyB0aGUgTGF5b3V0VGVzdHMgZGlyZWN0
b3J5CiAgICAgICAgICAgICBleHBlY3RhdGlvbl9saW5lLndhcm5pbmdzLmFwcGVuZCgnUGF0aCBk
b2VzIG5vdCBleGlzdC4nKQorICAgICAgICAgICAgZXhwZWN0ZWRfcGF0aCA9IHNlbGYuX3Nob3J0
ZW5fZmlsZW5hbWUoc2VsZi5fcG9ydC5hYnNwYXRoX2Zvcl90ZXN0KGV4cGVjdGF0aW9uX2xpbmUu
bmFtZSkpCisgICAgICAgICAgICBleHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXNbZXhwZWN0
ZWRfcGF0aF0gPSBOb25lCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgcmV0dXJu
IFRydWUKIApAQCAtMzgxLDYgKzM5OCw3IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbkxpbmUob2Jq
ZWN0KToKICAgICAgICAgc2VsZi5jb21tZW50ID0gTm9uZQogICAgICAgICBzZWxmLm1hdGNoaW5n
X3Rlc3RzID0gW10KICAgICAgICAgc2VsZi53YXJuaW5ncyA9IFtdCisgICAgICAgIHNlbGYucmVs
YXRlZF9maWxlcyA9IHt9ICAjIERpY3Rpb25hcnkgb2YgZmlsZXMgdG8gbGluZXMgaW4gdGhhdCBm
aWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgd2FybmluZ3Mgb2YgdGhpcyBsaW5lLgogICAgICAgICBz
ZWxmLm5vdF9hcHBsaWNhYmxlX3RvX2N1cnJlbnRfcGxhdGZvcm0gPSBGYWxzZQogCiAgICAgZGVm
IGlzX2ludmFsaWQoc2VsZik6CkBAIC03MDEsMjkgKzcxOSwzNiBAQCBjbGFzcyBUZXN0RXhwZWN0
YXRpb25zTW9kZWwob2JqZWN0KToKICAgICAgICAgICAgIGV4cGVjdGF0aW9uX2xpbmUud2Fybmlu
Z3MuYXBwZW5kKCdEdXBsaWNhdGUgb3IgYW1iaWd1b3VzIGVudHJ5IGxpbmVzICVzOiVkIGFuZCAl
czolZC4nICUgKAogICAgICAgICAgICAgICAgIHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUocHJldl9l
eHBlY3RhdGlvbl9saW5lLmZpbGVuYW1lKSwgcHJldl9leHBlY3RhdGlvbl9saW5lLmxpbmVfbnVt
YmVyLAogICAgICAgICAgICAgICAgIHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUoZXhwZWN0YXRpb25f
bGluZS5maWxlbmFtZSksIGV4cGVjdGF0aW9uX2xpbmUubGluZV9udW1iZXIpKQotICAgICAgICAg
ICAgcmV0dXJuIFRydWUKIAotICAgICAgICBpZiBwcmV2X2V4cGVjdGF0aW9uX2xpbmUubWF0Y2hp
bmdfY29uZmlndXJhdGlvbnMgPj0gZXhwZWN0YXRpb25fbGluZS5tYXRjaGluZ19jb25maWd1cmF0
aW9uczoKKyAgICAgICAgZWxpZiBwcmV2X2V4cGVjdGF0aW9uX2xpbmUubWF0Y2hpbmdfY29uZmln
dXJhdGlvbnMgPj0gZXhwZWN0YXRpb25fbGluZS5tYXRjaGluZ19jb25maWd1cmF0aW9uczoKICAg
ICAgICAgICAgIGV4cGVjdGF0aW9uX2xpbmUud2FybmluZ3MuYXBwZW5kKCdNb3JlIHNwZWNpZmlj
IGVudHJ5IGZvciAlcyBvbiBsaW5lICVzOiVkIG92ZXJyaWRlcyBsaW5lICVzOiVkLicgJSAoZXhw
ZWN0YXRpb25fbGluZS5uYW1lLAogICAgICAgICAgICAgICAgIHNlbGYuX3Nob3J0ZW5fZmlsZW5h
bWUocHJldl9leHBlY3RhdGlvbl9saW5lLmZpbGVuYW1lKSwgcHJldl9leHBlY3RhdGlvbl9saW5l
LmxpbmVfbnVtYmVyLAogICAgICAgICAgICAgICAgIHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUoZXhw
ZWN0YXRpb25fbGluZS5maWxlbmFtZSksIGV4cGVjdGF0aW9uX2xpbmUubGluZV9udW1iZXIpKQog
ICAgICAgICAgICAgIyBGSVhNRTogcmV0dXJuIEZhbHNlIGlmIHdlIHdhbnQgbW9yZSBzcGVjaWZp
YyB0byB3aW4uCi0gICAgICAgICAgICByZXR1cm4gVHJ1ZQogCi0gICAgICAgIGlmIHByZXZfZXhw
ZWN0YXRpb25fbGluZS5tYXRjaGluZ19jb25maWd1cmF0aW9ucyA8PSBleHBlY3RhdGlvbl9saW5l
Lm1hdGNoaW5nX2NvbmZpZ3VyYXRpb25zOgorICAgICAgICBlbGlmIHByZXZfZXhwZWN0YXRpb25f
bGluZS5tYXRjaGluZ19jb25maWd1cmF0aW9ucyA8PSBleHBlY3RhdGlvbl9saW5lLm1hdGNoaW5n
X2NvbmZpZ3VyYXRpb25zOgogICAgICAgICAgICAgZXhwZWN0YXRpb25fbGluZS53YXJuaW5ncy5h
cHBlbmQoJ01vcmUgc3BlY2lmaWMgZW50cnkgZm9yICVzIG9uIGxpbmUgJXM6JWQgb3ZlcnJpZGVz
IGxpbmUgJXM6JWQuJyAlIChleHBlY3RhdGlvbl9saW5lLm5hbWUsCiAgICAgICAgICAgICAgICAg
c2VsZi5fc2hvcnRlbl9maWxlbmFtZShleHBlY3RhdGlvbl9saW5lLmZpbGVuYW1lKSwgZXhwZWN0
YXRpb25fbGluZS5saW5lX251bWJlciwKICAgICAgICAgICAgICAgICBzZWxmLl9zaG9ydGVuX2Zp
bGVuYW1lKHByZXZfZXhwZWN0YXRpb25fbGluZS5maWxlbmFtZSksIHByZXZfZXhwZWN0YXRpb25f
bGluZS5saW5lX251bWJlcikpCi0gICAgICAgICAgICByZXR1cm4gVHJ1ZQogCi0gICAgICAgIGlm
IHByZXZfZXhwZWN0YXRpb25fbGluZS5tYXRjaGluZ19jb25maWd1cmF0aW9ucyAmIGV4cGVjdGF0
aW9uX2xpbmUubWF0Y2hpbmdfY29uZmlndXJhdGlvbnM6CisgICAgICAgIGVsaWYgcHJldl9leHBl
Y3RhdGlvbl9saW5lLm1hdGNoaW5nX2NvbmZpZ3VyYXRpb25zICYgZXhwZWN0YXRpb25fbGluZS5t
YXRjaGluZ19jb25maWd1cmF0aW9uczoKICAgICAgICAgICAgIGV4cGVjdGF0aW9uX2xpbmUud2Fy
bmluZ3MuYXBwZW5kKCdFbnRyaWVzIGZvciAlcyBvbiBsaW5lcyAlczolZCBhbmQgJXM6JWQgbWF0
Y2ggb3ZlcmxhcHBpbmcgc2V0cyBvZiBjb25maWd1cmF0aW9ucy4nICUgKGV4cGVjdGF0aW9uX2xp
bmUubmFtZSwKICAgICAgICAgICAgICAgICBzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKHByZXZfZXhw
ZWN0YXRpb25fbGluZS5maWxlbmFtZSksIHByZXZfZXhwZWN0YXRpb25fbGluZS5saW5lX251bWJl
ciwKICAgICAgICAgICAgICAgICBzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKGV4cGVjdGF0aW9uX2xp
bmUuZmlsZW5hbWUpLCBleHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyKSkKLSAgICAgICAgICAg
IHJldHVybiBUcnVlCiAKLSAgICAgICAgIyBDb25maWd1cmF0aW9uIHNldHMgYXJlIGRpc2pvaW50
LCB0aGVuLgotICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICMgQ29uZmlndXJhdGlvbiBzZXRzIGFyZSBkaXNqb2ludC4KKyAgICAgICAgICAgIHJldHVybiBG
YWxzZQorCisgICAgICAgIGlmIGV4cGVjdGF0aW9uX2xpbmUucmVsYXRlZF9maWxlcy5nZXQoc2Vs
Zi5fc2hvcnRlbl9maWxlbmFtZShwcmV2X2V4cGVjdGF0aW9uX2xpbmUuZmlsZW5hbWUpLCBOb25l
KSBpcyBOb25lOgorICAgICAgICAgICAgZXhwZWN0YXRpb25fbGluZS5yZWxhdGVkX2ZpbGVzW3Nl
bGYuX3Nob3J0ZW5fZmlsZW5hbWUocHJldl9leHBlY3RhdGlvbl9saW5lLmZpbGVuYW1lKV0gPSBb
XQorICAgICAgICBleHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXNbc2VsZi5fc2hvcnRlbl9m
aWxlbmFtZShwcmV2X2V4cGVjdGF0aW9uX2xpbmUuZmlsZW5hbWUpXS5hcHBlbmQocHJldl9leHBl
Y3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyKQorCisgICAgICAgIGlmIHByZXZfZXhwZWN0YXRpb25f
bGluZS5yZWxhdGVkX2ZpbGVzLmdldChzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKGV4cGVjdGF0aW9u
X2xpbmUuZmlsZW5hbWUpLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgcHJldl9leHBlY3Rh
dGlvbl9saW5lLnJlbGF0ZWRfZmlsZXNbc2VsZi5fc2hvcnRlbl9maWxlbmFtZShleHBlY3RhdGlv
bl9saW5lLmZpbGVuYW1lKV0gPSBbXQorICAgICAgICBwcmV2X2V4cGVjdGF0aW9uX2xpbmUucmVs
YXRlZF9maWxlc1tzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKGV4cGVjdGF0aW9uX2xpbmUuZmlsZW5h
bWUpXS5hcHBlbmQocHJldl9leHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyKQorCisgICAgICAg
IHJldHVybiBUcnVlCiAKIAogY2xhc3MgVGVzdEV4cGVjdGF0aW9ucyhvYmplY3QpOgpAQCAtODUz
LDcgKzg3OCw3IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnMob2JqZWN0KToKICAgICAgICAgc2Vs
Zi5fdGVzdF9jb25maWcgPSBwb3J0LnRlc3RfY29uZmlndXJhdGlvbigpCiAgICAgICAgIHNlbGYu
X2lzX2xpbnRfbW9kZSA9IGV4cGVjdGF0aW9uc190b19saW50IGlzIG5vdCBOb25lCiAgICAgICAg
IHNlbGYuX21vZGVsID0gVGVzdEV4cGVjdGF0aW9uc01vZGVsKHNlbGYuX3Nob3J0ZW5fZmlsZW5h
bWUpCi0gICAgICAgIHNlbGYuX3BhcnNlciA9IFRlc3RFeHBlY3RhdGlvblBhcnNlcihwb3J0LCB0
ZXN0cywgc2VsZi5faXNfbGludF9tb2RlKQorICAgICAgICBzZWxmLl9wYXJzZXIgPSBUZXN0RXhw
ZWN0YXRpb25QYXJzZXIocG9ydCwgdGVzdHMsIHNlbGYuX2lzX2xpbnRfbW9kZSwgc2VsZi5fc2hv
cnRlbl9maWxlbmFtZSkKICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2VsZi5f
c2tpcHBlZF90ZXN0c193YXJuaW5ncyA9IFtdCiAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucyA9
IFtdCkBAIC05MzgsOCArOTYzLDE0IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnMob2JqZWN0KToK
ICAgICAgICAgd2FybmluZ3MgPSBbXQogICAgICAgICBmb3IgZXhwZWN0YXRpb24gaW4gc2VsZi5f
ZXhwZWN0YXRpb25zOgogICAgICAgICAgICAgZm9yIHdhcm5pbmcgaW4gZXhwZWN0YXRpb24ud2Fy
bmluZ3M6Ci0gICAgICAgICAgICAgICAgd2FybmluZ3MuYXBwZW5kKCclczolZCAlcyAlcycgJSAo
c2VsZi5fc2hvcnRlbl9maWxlbmFtZShleHBlY3RhdGlvbi5maWxlbmFtZSksIGV4cGVjdGF0aW9u
LmxpbmVfbnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nLCBl
eHBlY3RhdGlvbi5uYW1lIGlmIGV4cGVjdGF0aW9uLmV4cGVjdGF0aW9ucyBlbHNlIGV4cGVjdGF0
aW9uLm9yaWdpbmFsX3N0cmluZykpCisgICAgICAgICAgICAgICAgd2FybmluZyA9IFdhcm5pbmco
CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUoZXhwZWN0YXRpb24u
ZmlsZW5hbWUpLAorICAgICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbi5saW5lX251bWJlciwK
KyAgICAgICAgICAgICAgICAgICAgZXhwZWN0YXRpb24ub3JpZ2luYWxfc3RyaW5nLAorICAgICAg
ICAgICAgICAgICAgICB3YXJuaW5nLAorICAgICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbi5u
YW1lIGlmIGV4cGVjdGF0aW9uLmV4cGVjdGF0aW9ucyBlbHNlIE5vbmUpCisgICAgICAgICAgICAg
ICAgd2FybmluZy5yZWxhdGVkX2ZpbGVzID0gZXhwZWN0YXRpb24ucmVsYXRlZF9maWxlcworICAg
ICAgICAgICAgICAgIHdhcm5pbmdzLmFwcGVuZCh3YXJuaW5nKQogCiAgICAgICAgIGlmIHdhcm5p
bmdzOgogICAgICAgICAgICAgc2VsZi5faGFzX3dhcm5pbmdzID0gVHJ1ZQpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvd2luLnB5CShyZXZpc2lvbiAyMTk2MzgpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvd2luLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHRy
eToKICAgICBpbXBvcnQgX3dpbnJlZwogICAgIGltcG9ydCB3aW4zMmNvbS5jbGllbnQKIGV4Y2Vw
dCBJbXBvcnRFcnJvcjoKLSAgICBfbG9nLndhcm4oIk5vdCBydW5uaW5nIG9uIG5hdGl2ZSBXaW5k
b3dzLiIpCisgICAgX2xvZy5kZWJ1ZygiTm90IHJ1bm5pbmcgb24gbmF0aXZlIFdpbmRvd3MuIikg
ICMgSW1wb3J0aW5nIHdpbi5weSBvbiBub24td2luZG93cyBzeXN0ZW1zIGlzIGEgY29tbW9uIHVz
ZSBjYXNlLgogCiAKIGNsYXNzIFdpblBvcnQoQXBwbGVQb3J0KToKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkJKHJldmlzaW9uIDIxOTYzOCkKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQkod29ya2luZyBjb3B5KQpAQCAtNjAsNiAr
NjAsNyBAQCBmcm9tIGVycm9yX2hhbmRsZXJzIGltcG9ydCBEZWZhdWx0U3R5bGVFCiBmcm9tIGZp
bHRlciBpbXBvcnQgRmlsdGVyQ29uZmlndXJhdGlvbgogZnJvbSBvcHRwYXJzZXIgaW1wb3J0IEFy
Z3VtZW50UGFyc2VyCiBmcm9tIG9wdHBhcnNlciBpbXBvcnQgRGVmYXVsdENvbW1hbmRPcHRpb25W
YWx1ZXMKK2Zyb20gd2Via2l0cHkuY29tbW9uLmhvc3QgaW1wb3J0IEhvc3QKIGZyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbS5sb2d1dGlscyBpbXBvcnQgY29uZmlndXJlX2xvZ2dpbmcgYXMgX2Nv
bmZpZ3VyZV9sb2dnaW5nCiBmcm9tIHdlYmtpdHB5LnBvcnQuY29uZmlnIGltcG9ydCBhcHBsZV9h
ZGRpdGlvbnMKIApAQCAtODExLDYgKzgxMiwyMiBAQCBjbGFzcyBQcm9jZXNzb3JCYXNlKG9iamVj
dCk6CiAgICAgICAgICIiIgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdTdWJj
bGFzc2VzIHNob3VsZCBpbXBsZW1lbnQuJykKIAorICAgIGRlZiBkb19hc3NvY2lhdGlvbl9jaGVj
ayhzZWxmLCBmaWxlcywgY3dkLCBob3N0PUhvc3QoKSk6CisgICAgICAgICIiIkl0IG1heSBiZSB0
aGUgY2FzZSB0aGF0IGNoYW5nZXMgaW4gYSBmaWxlIGNhdXNlIHN0eWxlIGVycm9ycyB0bworICAg
ICAgICBvY2N1ciBlbHNld2hlcmUgaW4gdGhlIG1vZGlmaWVkIGZpbGUgb3IgaW4gb3RoZXIgZmls
ZXMgKG1vc3Qgbm90YWJseSwKKyAgICAgICAgdGhpcyBpcyB0aGUgY2FzZSBmb3IgdGhlIHRlc3Qg
ZXhwZWN0YXRpb25zIGxpbnRlcikuIFRoZSBhc3NvY2lhdGlvbiBjaGVjaworICAgICAgICBpcyBk
ZXNpZ25lZCB0byB0YWtlIGZpbmQgaXNzdWVzIHdoaWNoIHJlcXVpcmUgcGFyc2luZyBvZiBmaWxl
cyBvdXRzaWRlCisgICAgICAgIHRob3NlIHByb3ZpZGVkIHRvIHRoZSBwcm9jZXNzb3IuCisKKyAg
ICAgICAgQXJnczoKKyAgICAgICAgICAgIGZpbGVzOiBBIGRpY3Rpb25hcnkgb2YgZmlsZSBuYW1l
cyB0byBsaXN0cyBvZiBsaW5lcyBtb2RpZmllZCBpbiB0aGUgcHJvdmlkZWQKKyAgICAgICAgICAg
IGZpbGUuICBGaWxlcyB3aGljaCBoYXZlIGJlZW4gcmVtb3ZlZCB3aWxsIGFsc28gYmUgaW4gdGhl
IGRpY3Rpb25hcnksIHRoZXkKKyAgICAgICAgICAgIHdpbGwgbWFwIHRvICdOb25lJworICAgICAg
ICAgICAgY3dkOiBDdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCBhc3N1bWVkIHRvIGJlIHRoZSBy
b290IG9mIHRoZSBzY20gcmVwb3NpdG9yeQorICAgICAgICAgICAgaG9zdDogQ3VycmVudCBob3N0
IGZvciB0ZXN0aW5nCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVy
cm9yKCdTdWJjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQuJykKKwogCiBjbGFzcyBTdHlsZVByb2Nl
c3NvcihQcm9jZXNzb3JCYXNlKToKIApAQCAtOTE4LDMgKzkzNSw3IEBAIGNsYXNzIFN0eWxlUHJv
Y2Vzc29yKFByb2Nlc3NvckJhc2UpOgogICAgICAgICBfbG9nLmRlYnVnKCJVc2luZyBjbGFzczog
IiArIGNoZWNrZXIuX19jbGFzc19fLl9fbmFtZV9fKQogCiAgICAgICAgIGNoZWNrZXIuY2hlY2so
bGluZXMpCisKKyAgICBkZWYgZG9fYXNzb2NpYXRpb25fY2hlY2soc2VsZiwgZmlsZXMsIGN3ZCwg
aG9zdD1Ib3N0KCkpOgorICAgICAgICBfbG9nLmRlYnVnKCJSdW5uaW5nIFRlc3RFeHBlY3RhdGlv
bnMgbGludGVyIikKKyAgICAgICAgVGVzdEV4cGVjdGF0aW9uc0NoZWNrZXIubGludF90ZXN0X2V4
cGVjdGF0aW9ucyhmaWxlcywgc2VsZi5fY29uZmlndXJhdGlvbiwgY3dkLCBzZWxmLl9pbmNyZW1l
bnRfZXJyb3JfY291bnQsIGhvc3Q9aG9zdCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3R5bGUvZmlsZXJlYWRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2ZpbGVyZWFkZXIucHkJKHJldmlzaW9uIDIxOTYzOCkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvZmlsZXJlYWRlci5weQkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMs
OCBAQAogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBzeXMKIAorZnJvbSB3ZWJraXRweS5jb21tb24u
aG9zdCBpbXBvcnQgSG9zdAorCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykK
IApAQCAtNjIsOSArNjQsMTMgQEAgY2xhc3MgVGV4dEZpbGVSZWFkZXIob2JqZWN0KToKIAogICAg
ICAgICBzZWxmLmZpbGVzeXN0ZW0gPSBmaWxlc3lzdGVtCiAgICAgICAgIHNlbGYuX3Byb2Nlc3Nv
ciA9IHByb2Nlc3NvcgotICAgICAgICBzZWxmLmZpbGVfY291bnQgPSAwCisgICAgICAgIHNlbGYu
X2ZpbGVzID0ge30KICAgICAgICAgc2VsZi5kZWxldGVfb25seV9maWxlX2NvdW50ID0gMAogCisg
ICAgQHByb3BlcnR5CisgICAgZGVmIGZpbGVfY291bnQoc2VsZik6CisgICAgICAgIHJldHVybiBs
ZW4oc2VsZi5fZmlsZXMpIC0gc2VsZi5kZWxldGVfb25seV9maWxlX2NvdW50CisKICAgICBkZWYg
X3JlYWRfbGluZXMoc2VsZiwgZmlsZV9wYXRoKToKICAgICAgICAgIiIiUmVhZCB0aGUgZmlsZSBh
dCBhIHBhdGgsIGFuZCByZXR1cm4gaXRzIGxpbmVzLgogCkBAIC0xMDMsNyArMTA5LDEzIEBAIGNs
YXNzIFRleHRGaWxlUmVhZGVyKG9iamVjdCk6CiAgICAgICAgICAgU3lzdGVtRXhpdDogSWYgbm8g
ZmlsZSBhdCBmaWxlX3BhdGggZXhpc3RzLgogCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLmZp
bGVfY291bnQgKz0gMQorICAgICAgICBhYnNfZmlsZV9wYXRoID0gc2VsZi5maWxlc3lzdGVtLmFi
c3BhdGgoZmlsZV9wYXRoKSAgIyBVbmlmaWVzIHBhdGNoIGFuZCBjaGVycnktcGlja2luZyBjb2Rl
IHBhdGhzLgorICAgICAgICBpZiBub3QgYWJzX2ZpbGVfcGF0aCBpbiBzZWxmLl9maWxlczoKKyAg
ICAgICAgICAgIHNlbGYuX2ZpbGVzW2Fic19maWxlX3BhdGhdID0gTm9uZQorICAgICAgICBpZiAn
bGluZV9udW1iZXJzJyBpbiBrd2FyZ3M6CisgICAgICAgICAgICBpZiBzZWxmLl9maWxlc1thYnNf
ZmlsZV9wYXRoXSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVzW2Fic19maWxl
X3BhdGhdID0gW10KKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzW2Fic19maWxlX3BhdGhdID0gc2Vs
Zi5fZmlsZXNbYWJzX2ZpbGVfcGF0aF0gKyBrd2FyZ3NbJ2xpbmVfbnVtYmVycyddCiAKICAgICAg
ICAgaWYgbm90IHNlbGYuZmlsZXN5c3RlbS5leGlzdHMoZmlsZV9wYXRoKSBhbmQgZmlsZV9wYXRo
ICE9ICItIjoKICAgICAgICAgICAgIF9sb2cuZXJyb3IoIkZpbGUgZG9lcyBub3QgZXhpc3Q6ICcl
cyciICUgZmlsZV9wYXRoKQpAQCAtMTM1LDExICsxNDcsMTYgQEAgY2xhc3MgVGV4dEZpbGVSZWFk
ZXIob2JqZWN0KToKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5wcm9j
ZXNzX2ZpbGUocGF0aCkKIAotICAgIGRlZiBjb3VudF9kZWxldGVfb25seV9maWxlKHNlbGYpOgor
ICAgIGRlZiBkb19hc3NvY2lhdGlvbl9jaGVjayhzZWxmLCBjd2QsIGhvc3Q9SG9zdCgpKToKKyAg
ICAgICAgc2VsZi5fcHJvY2Vzc29yLmRvX2Fzc29jaWF0aW9uX2NoZWNrKHNlbGYuX2ZpbGVzLCBj
d2QsIGhvc3Q9aG9zdCkKKworICAgIGRlZiBkZWxldGVfZmlsZShzZWxmLCBmaWxlX3BhdGg9Tm9u
ZSk6CiAgICAgICAgICIiIkNvdW50IHVwIGZpbGVzIHRoYXQgY29udGFpbnMgb25seSBkZWxldGVk
IGxpbmVzLgogCiAgICAgICAgIEZpbGVzIHdoaWNoIGhhcyBubyBtb2RpZmllZCBvciBuZXdseS1h
ZGRlZCBsaW5lcyBkb24ndCBuZWVkCiAgICAgICAgIHRvIGNoZWNrIHN0eWxlLCBidXQgc2hvdWxk
IGJlIHRyZWF0ZWQgYXMgY2hlY2tlZC4gRm9yIHRoYXQKICAgICAgICAgcHVycG9zZSwgd2UganVz
dCBjb3VudCB1cCB0aGUgbnVtYmVyIG9mIHN1Y2ggZmlsZXMuCiAgICAgICAgICIiIgorICAgICAg
ICBpZiBmaWxlX3BhdGg6CisgICAgICAgICAgICBzZWxmLl9maWxlc1tzZWxmLmZpbGVzeXN0ZW0u
YWJzcGF0aChmaWxlX3BhdGgpXSA9IE5vbmUKICAgICAgICAgc2VsZi5kZWxldGVfb25seV9maWxl
X2NvdW50ICs9IDEKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvZmlsZXJlYWRl
cl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxl
L2ZpbGVyZWFkZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIxOTYzOCkKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvZmlsZXJlYWRlcl91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpA
QCAtMTUwLDggKzE1MCw4IEBAIGNsYXNzIFRleHRGaWxlUmVhZGVyVGVzdChMb2dnaW5nVGVzdENh
c2UKICAgICAgICAgICAgICAgICAgICAgIChbJ2ZvbyddLCBmaWxlX3BhdGgxLCBOb25lKV0KICAg
ICAgICAgc2VsZi5fYXNzZXJ0X2ZpbGVfcmVhZGVyKHByb2Nlc3NlZCwgMikKIAotICAgIGRlZiB0
ZXN0X2NvdW50X2RlbGV0ZV9vbmx5X2ZpbGUoc2VsZik6Ci0gICAgICAgIHNlbGYuX2ZpbGVfcmVh
ZGVyLmNvdW50X2RlbGV0ZV9vbmx5X2ZpbGUoKQorICAgIGRlZiB0ZXN0X2RlbGV0ZV9maWxlKHNl
bGYpOgorICAgICAgICBzZWxmLl9maWxlX3JlYWRlci5kZWxldGVfZmlsZSgpCiAgICAgICAgIGRl
bGV0ZV9vbmx5X2ZpbGVfY291bnQgPSBzZWxmLl9maWxlX3JlYWRlci5kZWxldGVfb25seV9maWxl
X2NvdW50CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVsZXRlX29ubHlfZmlsZV9jb3VudCwg
MSkKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9tYWluLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvbWFpbi5weQkocmV2aXNpb24gMjE5
NjM4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9tYWluLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0xNDcsNiArMTQ3LDcgQEAgY2xhc3MgQ2hlY2tXZWJLaXRTdHlsZShvYmplY3QpOgog
CiAgICAgICAgIGlmIHBhdGhzIGFuZCBub3Qgb3B0aW9ucy5kaWZmX2ZpbGVzOgogICAgICAgICAg
ICAgZmlsZV9yZWFkZXIucHJvY2Vzc19wYXRocyhwYXRocykKKyAgICAgICAgICAgIGZpbGVfcmVh
ZGVyLmRvX2Fzc29jaWF0aW9uX2NoZWNrKGhvc3Quc2NtKCkuY2hlY2tvdXRfcm9vdCkKICAgICAg
ICAgZWxzZToKICAgICAgICAgICAgIGNoYW5nZWRfZmlsZXMgPSBwYXRocyBpZiBvcHRpb25zLmRp
ZmZfZmlsZXMgZWxzZSBOb25lCiAgICAgICAgICAgICBwYXRjaCA9IGhvc3Quc2NtKCkuY3JlYXRl
X3BhdGNoKG9wdGlvbnMuZ2l0X2NvbW1pdCwgY2hhbmdlZF9maWxlcz1jaGFuZ2VkX2ZpbGVzLCBn
aXRfaW5kZXg9b3B0aW9ucy5naXRfaW5kZXgpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL21haW5fdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9tYWluX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMTk2MzgpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL21haW5fdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAg
LTIwLDExICsyMCwxOCBAQAogIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
CitpbXBvcnQgb3B0cGFyc2UKIGltcG9ydCB1bml0dGVzdAogCitpbXBvcnQgd2Via2l0cHkuc3R5
bGUuY2hlY2tlciBhcyBjaGVja2VyCisKIGZyb20gbWFpbiBpbXBvcnQgY2hhbmdlX2RpcmVjdG9y
eQorZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdCBpbXBvcnQgSG9zdAogZnJvbSB3ZWJraXRweS5j
b21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0ZpbGVTeXN0ZW0KK2Zyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJl
U2NvcGUKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5sb2d0ZXN0aW5nIGltcG9ydCBMb2dU
ZXN0aW5nCitmcm9tIHdlYmtpdHB5LnN0eWxlLmNoZWNrZXIgaW1wb3J0IFN0eWxlUHJvY2Vzc29y
Citmcm9tIHdlYmtpdHB5LnN0eWxlLmZpbGVyZWFkZXIgaW1wb3J0IFRleHRGaWxlUmVhZGVyCiAK
IAogY2xhc3MgQ2hhbmdlRGlyZWN0b3J5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC03Mywz
ICs4MCwxMDAgQEAgY2xhc3MgQ2hhbmdlRGlyZWN0b3J5VGVzdCh1bml0dGVzdC5UZXN0QwogCiAi
IiJdCiAgICAgICAgIHNlbGYuX2Fzc2VydF9yZXN1bHQocGF0aHMsIHBhdGhzLCBsb2dfbWVzc2Fn
ZXMsIHNlbGYuX29yaWdpbmFsX2RpcmVjdG9yeSkKKworCitjbGFzcyBFeHBlY3RhdGlvbkxpbnRl
ckluU3R5bGVDaGVja2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAo
c2VsZik6CisgICAgICAgIHBhcnNlciA9IGNoZWNrZXIuY2hlY2tfd2Via2l0X3N0eWxlX3BhcnNl
cigpCisgICAgICAgIChfLCBvcHRpb25zKSA9IHBhcnNlci5wYXJzZShbXSkKKyAgICAgICAgc2Vs
Zi5fc3R5bGVfY2hlY2tlcl9jb25maWd1cmF0aW9uID0gY2hlY2tlci5jaGVja193ZWJraXRfc3R5
bGVfY29uZmlndXJhdGlvbihvcHRpb25zKQorCisgICAgZGVmIF9nZW5lcmF0ZV9maWxlX3JlYWRl
cihzZWxmLCBmaWxlX3N5c3RlbSk6CisgICAgICAgIHN0eWxlX3Byb2Nlc3NvciA9IFN0eWxlUHJv
Y2Vzc29yKHNlbGYuX3N0eWxlX2NoZWNrZXJfY29uZmlndXJhdGlvbikKKyAgICAgICAgcmV0dXJu
IFRleHRGaWxlUmVhZGVyKGZpbGVfc3lzdGVtLCBzdHlsZV9wcm9jZXNzb3IpCisKKyAgICBkZWYg
X2dlbmVyYXRlX3Rlc3RpbmdfaG9zdChzZWxmLCBmaWxlcz17fSk6CisgICAgICAgIGhvc3QgPSBI
b3N0KCkKKyAgICAgICAgZXhwZWN0YXRpb25fZmlsZXMgPSBmaWxlcworCisgICAgICAgIGhvc3Qu
ZmlsZXN5c3RlbSA9IE1vY2tGaWxlU3lzdGVtKGRpcnM9WycvbW9jay1jaGVja291dC9MYXlvdXRU
ZXN0cyddKQorICAgICAgICBvcHRpb25zID0gb3B0cGFyc2UuVmFsdWVzKCkKKyAgICAgICAgc2V0
YXR0cihvcHRpb25zLCAnbGF5b3V0X3Rlc3RzX2RpcicsICcvbW9jay1jaGVja291dC9MYXlvdXRU
ZXN0cycpCisKKyAgICAgICAgYWxsX3BvcnRzID0gW2hvc3QucG9ydF9mYWN0b3J5LmdldChuYW1l
LCBvcHRpb25zPW9wdGlvbnMpIGZvciBuYW1lIGluIGhvc3QucG9ydF9mYWN0b3J5LmFsbF9wb3J0
X25hbWVzKCldCisgICAgICAgIGZvciBwb3J0IGluIGFsbF9wb3J0czoKKyAgICAgICAgICAgIGZv
ciBwYXRoIGluIHBvcnQuZXhwZWN0YXRpb25zX2ZpbGVzKCk6CisgICAgICAgICAgICAgICAgaWYg
cGF0aCBub3QgaW4gZXhwZWN0YXRpb25fZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGV4cGVj
dGF0aW9uX2ZpbGVzW3BhdGhdID0gJyMgRW1wdHkgZXhwZWN0YXRpb24gZmlsZVxuJworCisgICAg
ICAgIGV4cGVjdGF0aW9uX2ZpbGVzWycvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9jc3MxL3Rl
c3QuaHRtbCddID0gJ1Rlc3QnCisgICAgICAgIGV4cGVjdGF0aW9uX2ZpbGVzWycvbW9jay1jaGVj
a291dC9MYXlvdXRUZXN0cy9jc3MxL3Rlc3QtZXhwZWN0ZWQudHh0J10gPSAnVGVzdCBFeHBlY3Rh
dGlvbicKKyAgICAgICAgaG9zdC5maWxlc3lzdGVtID0gTW9ja0ZpbGVTeXN0ZW0oZmlsZXM9ZXhw
ZWN0YXRpb25fZmlsZXMpCisgICAgICAgIHJldHVybiBob3N0CisKKyAgICBkZWYgdGVzdF9ub19s
aW50ZXJfZXJyb3JzKHNlbGYpOgorICAgICAgICBob3N0ID0gc2VsZi5fZ2VuZXJhdGVfdGVzdGlu
Z19ob3N0KCkKKworICAgICAgICBzY29wZSA9IE91dHB1dENhcHR1cmVTY29wZSgpCisgICAgICAg
IHdpdGggc2NvcGU6CisgICAgICAgICAgICBmaWxlX3JlYWRlciA9IHNlbGYuX2dlbmVyYXRlX2Zp
bGVfcmVhZGVyKGhvc3QuZmlsZXN5c3RlbSkKKyAgICAgICAgICAgIGZpbGVfcmVhZGVyLmRvX2Fz
c29jaWF0aW9uX2NoZWNrKCcvbW9jay1jaGVja291dCcsIGhvc3QpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2NvcGUuY2FwdHVyZWRfb3V0cHV0LCAoJycsICcnLCAnJykpCisKKyAgICBkZWYg
dGVzdF9saW50ZXJfZHVwbGljYXRlX2xpbmUoc2VsZik6CisgICAgICAgIGZpbGVzID0geworICAg
ICAgICAgICAgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMnOgor
ICAgICAgICAgICAgJyMgVGVzdEV4cGVjdGF0aW9uc1xuY3NzMS90ZXN0Lmh0bWwgWyBGYWlsdXJl
IF1cbmNzczEvdGVzdC5odG1sIFsgRmFpbHVyZSBdXG4nfQorICAgICAgICBob3N0ID0gc2VsZi5f
Z2VuZXJhdGVfdGVzdGluZ19ob3N0KGZpbGVzKQorCisgICAgICAgIHNjb3BlID0gT3V0cHV0Q2Fw
dHVyZVNjb3BlKCkKKyAgICAgICAgd2l0aCBzY29wZToKKyAgICAgICAgICAgIGZpbGVfcmVhZGVy
ID0gc2VsZi5fZ2VuZXJhdGVfZmlsZV9yZWFkZXIoaG9zdC5maWxlc3lzdGVtKQorICAgICAgICAg
ICAgZmlsZV9yZWFkZXIucHJvY2Vzc19wYXRocyh7Jy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3Rz
L1Rlc3RFeHBlY3RhdGlvbnMnfSkKKyAgICAgICAgICAgIGZpbGVfcmVhZGVyLmRvX2Fzc29jaWF0
aW9uX2NoZWNrKCcvbW9jay1jaGVja291dCcsIGhvc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoCisgICAgICAgICAgICBzY29wZS5jYXB0dXJlZF9vdXRwdXQsCisgICAgICAgICAgICAoJycs
ICcnLCAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9uczozOiAgRHVw
bGljYXRlIG9yIGFtYmlndW91cyBlbnRyeSBsaW5lcyBMYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRp
b25zOjIgYW5kIExheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnM6My4gIFt0ZXN0L2V4cGVjdGF0
aW9uc10gWzVdXG4nKSkKKworICAgIGRlZiB0ZXN0X2xpbnRlcl9kdXBsaWNhdGVfbGluZV9ub19l
ZGl0KHNlbGYpOgorICAgICAgICBmaWxlcyA9IHsKKyAgICAgICAgICAgICcvbW9jay1jaGVja291
dC9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zJzoKKyAgICAgICAgICAgICcjIFRlc3RFeHBl
Y3RhdGlvbnNcbmNzczEvdGVzdC5odG1sIFsgRmFpbHVyZSBdXG5jc3MxL3Rlc3QuaHRtbCBbIEZh
aWx1cmUgXVxuJ30KKyAgICAgICAgaG9zdCA9IHNlbGYuX2dlbmVyYXRlX3Rlc3RpbmdfaG9zdChm
aWxlcykKKworICAgICAgICBzY29wZSA9IE91dHB1dENhcHR1cmVTY29wZSgpCisgICAgICAgIHdp
dGggc2NvcGU6CisgICAgICAgICAgICBmaWxlX3JlYWRlciA9IHNlbGYuX2dlbmVyYXRlX2ZpbGVf
cmVhZGVyKGhvc3QuZmlsZXN5c3RlbSkKKyAgICAgICAgICAgIGZpbGVfcmVhZGVyLnByb2Nlc3Nf
cGF0aHMoWycvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVzdEV4cGVj
dGF0aW9ucyddKQorICAgICAgICAgICAgZmlsZV9yZWFkZXIuZG9fYXNzb2NpYXRpb25fY2hlY2so
Jy9tb2NrLWNoZWNrb3V0JywgaG9zdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY29wZS5j
YXB0dXJlZF9vdXRwdXQsICgnJywgJycsICcnKSkKKworICAgIGRlZiB0ZXN0X2xpbnRlcl9kZWxl
dGVkX2ZpbGUoc2VsZik6CisgICAgICAgIGZpbGVzID0geworICAgICAgICAgICAgJy9tb2NrLWNo
ZWNrb3V0L0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMnOgorICAgICAgICAgICAgJyMgVGVz
dEV4cGVjdGF0aW9uc1xuY3NzMS9kZWxldGVkLXRlc3QuaHRtbCBbIEZhaWx1cmUgXVxuJ30KKyAg
ICAgICAgaG9zdCA9IHNlbGYuX2dlbmVyYXRlX3Rlc3RpbmdfaG9zdChmaWxlcykKKyAgICAgICAg
aG9zdCA9IHNlbGYuX2dlbmVyYXRlX3Rlc3RpbmdfaG9zdChmaWxlcykKKworICAgICAgICBzY29w
ZSA9IE91dHB1dENhcHR1cmVTY29wZSgpCisgICAgICAgIHdpdGggc2NvcGU6CisgICAgICAgICAg
ICBmaWxlX3JlYWRlciA9IHNlbGYuX2dlbmVyYXRlX2ZpbGVfcmVhZGVyKGhvc3QuZmlsZXN5c3Rl
bSkKKyAgICAgICAgICAgIGZpbGVfcmVhZGVyLmRlbGV0ZV9maWxlKCcvbW9jay1jaGVja291dC9M
YXlvdXRUZXN0cy9jc3MxL2RlbGV0ZWQtdGVzdC5odG1sJykKKyAgICAgICAgICAgIGZpbGVfcmVh
ZGVyLmRvX2Fzc29jaWF0aW9uX2NoZWNrKCcvbW9jay1jaGVja291dCcsIGhvc3QpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzY29wZS5jYXB0dXJlZF9vdXRwdXQsCisg
ICAgICAgICAgICAoJycsICcnLCAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvVGVzdEV4cGVj
dGF0aW9uczoyOiAgUGF0aCBkb2VzIG5vdCBleGlzdC4gIFt0ZXN0L2V4cGVjdGF0aW9uc10gWzVd
XG4nKSkKKworICAgIGRlZiB0ZXN0X2xpbnRlcl9kZWxldGVkX2ZpbGVfbm9fZWRpdChzZWxmKToK
KyAgICAgICAgZmlsZXMgPSB7CisgICAgICAgICAgICAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVz
dHMvVGVzdEV4cGVjdGF0aW9ucyc6CisgICAgICAgICAgICAnIyBUZXN0RXhwZWN0YXRpb25zXG5j
c3MxL2RlbGV0ZWQtdGVzdC5odG1sIFsgRmFpbHVyZSBdXG4nfQorICAgICAgICBob3N0ID0gc2Vs
Zi5fZ2VuZXJhdGVfdGVzdGluZ19ob3N0KGZpbGVzKQorCisgICAgICAgIHNjb3BlID0gT3V0cHV0
Q2FwdHVyZVNjb3BlKCkKKyAgICAgICAgd2l0aCBzY29wZToKKyAgICAgICAgICAgIGZpbGVfcmVh
ZGVyID0gc2VsZi5fZ2VuZXJhdGVfZmlsZV9yZWFkZXIoaG9zdC5maWxlc3lzdGVtKQorICAgICAg
ICAgICAgZmlsZV9yZWFkZXIuZGVsZXRlX2ZpbGUoJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3Rz
L2NzczEvb3RoZXItZGVsZXRlZC10ZXN0Lmh0bWwnKQorICAgICAgICAgICAgZmlsZV9yZWFkZXIu
ZG9fYXNzb2NpYXRpb25fY2hlY2soJy9tb2NrLWNoZWNrb3V0JywgaG9zdCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzY29wZS5jYXB0dXJlZF9vdXRwdXQsICgnJywgJycsICcnKSkKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvcGF0Y2hyZWFkZXIucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9wYXRjaHJlYWRlci5weQkocmV2aXNpb24g
MjE5NjM4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9wYXRjaHJlYWRlci5weQko
d29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsOCBAQCBjbGFzcyBQYXRjaFJlYWRlcihvYmplY3Qp
OgogICAgICAgICAgICAgICAgICMgRG9uJ3QgY2hlY2sgZmlsZXMgd2hpY2ggY29udGFpbiBvbmx5
IGRlbGV0ZWQgbGluZXMKICAgICAgICAgICAgICAgICAjIGFzIHRoZXkgY2FuIG5ldmVyIGFkZCBz
dHlsZSBlcnJvcnMuIEhvd2V2ZXIsIG1hcmsgdGhlbSBhcwogICAgICAgICAgICAgICAgICMgcHJv
Y2Vzc2VkIHNvIHRoYXQgd2UgY291bnQgdXAgbnVtYmVyIG9mIHN1Y2ggZmlsZXMuCi0gICAgICAg
ICAgICAgICAgc2VsZi5fdGV4dF9maWxlX3JlYWRlci5jb3VudF9kZWxldGVfb25seV9maWxlKCkK
KyAgICAgICAgICAgICAgICBzZWxmLl90ZXh0X2ZpbGVfcmVhZGVyLmRlbGV0ZV9maWxlKHBhdGgp
CiAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgc2VsZi5fdGV4dF9maWxl
X3JlYWRlci5wcm9jZXNzX2ZpbGUoZmlsZV9wYXRoPXBhdGgsIGxpbmVfbnVtYmVycz1saW5lX251
bWJlcnMpCisgICAgICAgIHNlbGYuX3RleHRfZmlsZV9yZWFkZXIuZG9fYXNzb2NpYXRpb25fY2hl
Y2soZnMuZ2V0Y3dkKCkpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL3BhdGNo
cmVhZGVyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3R5bGUvcGF0Y2hyZWFkZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIxOTYzOCkKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvcGF0Y2hyZWFkZXJfdW5pdHRlc3QucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDE0ICs0NSwxNyBAQCBjbGFzcyBQYXRjaFJlYWRlclRlc3QodW5pdHRlc3Qu
VGVzdENhc2UpCiAgICAgICAgICAgICBzZWxmLnBhc3NlZF90b19wcm9jZXNzX2ZpbGUgPSBbXQog
ICAgICAgICAgICAgIiIiQSBsaXN0IG9mIChmaWxlX3BhdGgsIGxpbmVfbnVtYmVycykgcGFpcnMu
IiIiCiAgICAgICAgICAgICBzZWxmLmRlbGV0ZV9vbmx5X2ZpbGVfY291bnQgPSAwCi0gICAgICAg
ICAgICAiIiJBIG51bWJlciBvZiB0aW1lcyBjb3VudF9kZWxldGVfb25seV9maWxlKCkgY2FsbGVk
IiIiCisgICAgICAgICAgICAiIiJBIG51bWJlciBvZiB0aW1lcyBkZWxldGVfZmlsZSgpIGNhbGxl
ZCIiIgogCiAgICAgICAgIGRlZiBwcm9jZXNzX2ZpbGUoc2VsZiwgZmlsZV9wYXRoLCBsaW5lX251
bWJlcnMpOgogICAgICAgICAgICAgc2VsZi5wYXNzZWRfdG9fcHJvY2Vzc19maWxlLmFwcGVuZCgo
ZmlsZV9wYXRoLCBsaW5lX251bWJlcnMpKQogCi0gICAgICAgIGRlZiBjb3VudF9kZWxldGVfb25s
eV9maWxlKHNlbGYpOgorICAgICAgICBkZWYgZGVsZXRlX2ZpbGUoc2VsZiwgZmlsZV9wYXRoPU5v
bmUpOgogICAgICAgICAgICAgc2VsZi5kZWxldGVfb25seV9maWxlX2NvdW50ICs9IDEKIAorICAg
ICAgICBkZWYgZG9fYXNzb2NpYXRpb25fY2hlY2soc2VsZiwgY3dkKToKKyAgICAgICAgICAgIHBh
c3MKKwogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgZmlsZV9yZWFkZXIgPSBzZWxmLk1v
Y2tUZXh0RmlsZVJlYWRlcigpCiAgICAgICAgIHNlbGYuX2ZpbGVfcmVhZGVyID0gZmlsZV9yZWFk
ZXIKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvdGVzdF9leHBl
Y3RhdGlvbnMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9j
aGVja2Vycy90ZXN0X2V4cGVjdGF0aW9ucy5weQkocmV2aXNpb24gMjE5NjM4KQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy90ZXN0X2V4cGVjdGF0aW9ucy5weQkod29y
a2luZyBjb3B5KQpAQCAtMzYsNyArMzYsOCBAQCBpbXBvcnQgc3lzCiAKIGZyb20gY29tbW9uIGlt
cG9ydCBUYWJDaGVja2VyCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0Ci1m
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9leHBlY3RhdGlvbnMgaW1wb3J0
IFRlc3RFeHBlY3RhdGlvblBhcnNlcgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxz
IGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucworZnJvbSB3ZWJraXRweS5zdHlsZS5lcnJvcl9oYW5k
bGVycyBpbXBvcnQgRGVmYXVsdFN0eWxlRXJyb3JIYW5kbGVyCiAKIAogX2xvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKF9fbmFtZV9fKQpAQCAtNzgsNyArNzksNyBAQCBjbGFzcyBUZXN0RXhwZWN0YXRp
b25zQ2hlY2tlcihvYmplY3QpOgogICAgICAgICBwYXNzCiAKICAgICBkZWYgY2hlY2tfdGVzdF9l
eHBlY3RhdGlvbnMoc2VsZiwgZXhwZWN0YXRpb25zX3N0ciwgdGVzdHM9Tm9uZSk6Ci0gICAgICAg
IHBhcnNlciA9IFRlc3RFeHBlY3RhdGlvblBhcnNlcihzZWxmLl9wb3J0X29iaiwgdGVzdHMsIGFs
bG93X3JlYmFzZWxpbmVfbW9kaWZpZXI9RmFsc2UpCisgICAgICAgIHBhcnNlciA9IHRlc3RfZXhw
ZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvblBhcnNlcihzZWxmLl9wb3J0X29iaiwgdGVzdHMsIGFs
bG93X3JlYmFzZWxpbmVfbW9kaWZpZXI9RmFsc2UpCiAgICAgICAgIGV4cGVjdGF0aW9ucyA9IHBh
cnNlci5wYXJzZSgnZXhwZWN0YXRpb25zJywgZXhwZWN0YXRpb25zX3N0cikKIAogICAgICAgICBs
ZXZlbCA9IDUKQEAgLTk2LDMgKzk3LDU0IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnNDaGVja2Vy
KG9iamVjdCk6CiAKICAgICAgICAgIyBXYXJuIHRhYnMgaW4gbGluZXMgYXMgd2VsbAogICAgICAg
ICBzZWxmLmNoZWNrX3RhYnMobGluZXMpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9z
aG91bGRfbG9nX2xpbnRlcl93YXJuaW5nKHdhcm5pbmcsIGZpbGVzLCBjd2QsIGhvc3QpOgorICAg
ICAgICAjIENhc2UgMSwgdGhlIGxpbmUgdGhlIHdhcm5pbmcgd2FzIHRpZWQgdG8gaXMgaW4gb3Vy
IHBhdGNoLgorICAgICAgICBhYnNfZmlsZW5hbWUgPSBob3N0LmZpbGVzeXN0ZW0uam9pbihjd2Qs
IHdhcm5pbmcuZmlsZW5hbWUpCisgICAgICAgIGlmIGFic19maWxlbmFtZSBpbiBmaWxlcyBhbmQg
KGZpbGVzW2Fic19maWxlbmFtZV0gaXMgTm9uZSBvciB3YXJuaW5nLmxpbmVfbnVtYmVyIGluIGZp
bGVzW2Fic19maWxlbmFtZV0pOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBm
b3IgZmlsZSwgbGluZXMgaW4gd2FybmluZy5yZWxhdGVkX2ZpbGVzLml0ZXJpdGVtcygpOgorICAg
ICAgICAgICAgYWJzX2ZpbGVuYW1lID0gaG9zdC5maWxlc3lzdGVtLmpvaW4oY3dkLCBmaWxlKQor
ICAgICAgICAgICAgaWYgYWJzX2ZpbGVuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICMg
Q2FzZSAyLCBhIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSB3YXJuaW5nIGlzIGluIG91ciBwYXRj
aAorICAgICAgICAgICAgICAgICMgTm90ZSB0aGF0IHRoaXMgd2lsbCByZWFsbHkgb25seSBoYXBw
ZW4gaWYgeW91IGRlbGV0ZSBhIHRlc3QuCisgICAgICAgICAgICAgICAgaWYgbGluZXMgaXMgTm9u
ZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAgICAgICAgICMg
Q2FzZSAzLCBhIGxpbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB3YXJuaW5nIGlzIGluIG91ciBwYXRj
aC4KKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICAg
ICAgaWYgbGluZSBpbiBmaWxlc1thYnNfZmlsZW5hbWVdOgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBAc3RhdGljbWV0aG9k
CisgICAgZGVmIGxpbnRfdGVzdF9leHBlY3RhdGlvbnMoZmlsZXMsIGNvbmZpZ3VyYXRpb24sIGN3
ZCwgaW5jcmVtZW50X2Vycm9yX2NvdW50PWxhbWJkYTogMCwgbGluZV9udW1iZXJzPU5vbmUsIGhv
c3Q9SG9zdCgpKToKKyAgICAgICAgZXJyb3JfY291bnQgPSAwCisKKyAgICAgICAgcG9ydHNfdG9f
bGludCA9IFtob3N0LnBvcnRfZmFjdG9yeS5nZXQobmFtZSkgZm9yIG5hbWUgaW4gaG9zdC5wb3J0
X2ZhY3RvcnkuYWxsX3BvcnRfbmFtZXMoKV0KKyAgICAgICAgZmlsZXNfbGludGVkID0gc2V0KCkK
KyAgICAgICAgZm9yIHBvcnQgaW4gcG9ydHNfdG9fbGludDoKKyAgICAgICAgICAgIGV4cGVjdGF0
aW9uc19kaWN0ID0gcG9ydC5leHBlY3RhdGlvbnNfZGljdCgpCisgICAgICAgICAgICBmb3IgZXhw
ZWN0YXRpb25zX2ZpbGUgaW4gZXhwZWN0YXRpb25zX2RpY3Qua2V5cygpOgorICAgICAgICAgICAg
ICAgIHN0eWxlX2Vycm9yX2hhbmRsZXIgPSBEZWZhdWx0U3R5bGVFcnJvckhhbmRsZXIoCisgICAg
ICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9uc19maWxlLAorICAgICAgICAgICAgICAgICAgICBj
b25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRfZXJyb3JfY291bnQs
CisgICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtYmVycykKKworICAgICAgICAgICAgICAgIHRy
eToKKyAgICAgICAgICAgICAgICAgICAgaWYgZXhwZWN0YXRpb25zX2ZpbGUgaW4gZmlsZXNfbGlu
dGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAg
ICAgZXhwZWN0YXRpb25zID0gdGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4cGVjdGF0aW9ucygKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICBleHBl
Y3RhdGlvbnNfdG9fbGludD17ZXhwZWN0YXRpb25zX2ZpbGU6IGV4cGVjdGF0aW9uc19kaWN0W2V4
cGVjdGF0aW9uc19maWxlXX0pCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9ucy5wYXJz
ZV9hbGxfZXhwZWN0YXRpb25zKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgdGVzdF9leHBlY3Rh
dGlvbnMuUGFyc2VFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBmb3Igd2FybmluZyBp
biBlLndhcm5pbmdzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgVGVzdEV4cGVjdGF0aW9u
c0NoZWNrZXIuX3Nob3VsZF9sb2dfbGludGVyX3dhcm5pbmcod2FybmluZywgZmlsZXMsIGN3ZCwg
aG9zdCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVfZXJyb3JfaGFuZGxlcih3
YXJuaW5nLmxpbmVfbnVtYmVyLCAndGVzdC9leHBlY3RhdGlvbnMnLCA1LCB3YXJuaW5nLmVycm9y
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvdW50ICs9IDEKKyAgICAgICAg
ICAgICAgICBmaWxlc19saW50ZWQuYWRkKGV4cGVjdGF0aW9uc19maWxlKQorICAgICAgICByZXR1
cm4gZXJyb3JfY291bnQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315922</attachid>
            <date>2017-07-19 08:55:20 -0700</date>
            <delta_ts>2017-07-19 11:53:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173559-20170719085520.patch</filename>
            <type>text/plain</type>
            <size>31384</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxOTY0MikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDg5IEBACisyMDE3LTA3LTE4ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBsaW50LXRlc3QtZXhwZWN0YXRpb25zIHNob3VsZCBiZSBydW4gZHVyaW5n
IHN0eWxlIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzM1NTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMyODU0OTQxPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IERhdmlkIEtpbHplci4KKworICAgICAgICBSdW5uaW5nIHRoZSB0ZXN0
IGV4cGVjdGF0aW9uIGxpbnRlciByZXF1aXJlcyByZWFkaW5nIGJvdGggZmlsZXMgYW5kIGxpbmVz
IG5vdCBpbiB0aGUKKyAgICAgICAgcGF0Y2ggYmVjYXVzZSwgZm9yIGV4YW1wbGUsIGRlbGV0aW9u
IG9mIGEgdGVzdCBjYW4gY2F1c2UgYSBsaW50IGZhaWx1cmUgZXZlbiB0aG91Z2gKKyAgICAgICAg
bm8gdGVzdCBleHBlY3RhdGlvbnMgd2hlcmUgbW9kaWZpZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUg
bGludGVyIHdpbGwgb2NjYXNpb25hbGx5IHdhcm4KKyAgICAgICAgYWJvdXQgbGluZXMgd2hpY2gg
d2VyZSBub3QgY2hhbmdlZCBpbiBhIGdpdmVuIHBhdGNoIGJ1dCB3aG9zZSBlcnJvciBpcyByZWxh
dGVkIHRvIGEKKyAgICAgICAgY2hhbmdlIG1hZGUgaW4gdGhhdCBwYXRjaC4KKworICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHk6CisgICAg
ICAgIChNb2NrRmlsZVN5c3RlbS5vcGVuX3RleHRfZmlsZV9mb3JfcmVhZGluZyk6IEFkZCAnZXJy
b3JzJyBhcmd1bWVudCB0byBtaW1pYyBmaWxlc3lzdGVtLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9ucy5weToKKyAgICAgICAg
KFRlc3RFeHBlY3RhdGlvbldhcm5pbmcpOiBBZGRlZCBjbGFzcyB0byBwYXNzIHdhcm5pbmdzIGFz
IGFuIG9iamVjdCBpbnN0ZWFkIG9mIGEgc3RyaW5nLgorICAgICAgICAoVGVzdEV4cGVjdGF0aW9u
V2FybmluZy5fX2luaXRfXyk6IENvbnN0cnVjdCB3YXJuaW5nIHdpdGggZmlsZSBuYW1lLCBsaW5l
IG51bWJlciwgbGluZQorICAgICAgICBjb250ZW50LCBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3Ig
YW5kIHRoZSBuYW1lIG9mIHRoZSBhc3NvY2lhdGVkIHRlc3QuCisgICAgICAgIChUZXN0RXhwZWN0
YXRpb25XYXJuaW5nLl9fc3RyX18pOiBDb252ZXJ0IHRvIHN0cmluZyBzbyB0aGF0IGV4aXN0aW5n
IHByaW50aW5nIGNvZGUgd29ya3MuCisgICAgICAgIChUZXN0RXhwZWN0YXRpb25QYXJzZXIuX19p
bml0X18pOiBQYXNzIHNob3J0ZW5fZmlsZW5hbWUgZnVuY3Rpb24gdG8KKyAgICAgICAgVGVzdEV4
cGVjdGF0aW9uc1BhcnNlciB0byBhZGQgYSBkZWxldGVkIGZpbGUgdG8gdGhlIHJlbGF0ZWRfZmls
ZXMgZGljdGlvbmFyeS4KKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvblBhcnNlci5fY2hlY2tfdGVz
dF9leGlzdHMpOiBJZiB0aGUgdGVzdCBkb2VzIG5vdCBleGlzdCwgYWRkIHRoZQorICAgICAgICBt
aXNzaW5nIHBhdGggdG8gdGhlIHJlbGF0ZWRfZmlsZXMgZGljdGlvbmFyeS4KKyAgICAgICAgKFRl
c3RFeHBlY3RhdGlvbkxpbmUuX19pbml0X18pOiBBZGQgcmVsYXRlZF9maWxlcyBkaWN0aW9uYXJ5
LCB3aGljaCB0cmFja3MKKyAgICAgICAgZmlsZXMgYW5kIGxpbmUgbnVtYmVycyByZWxhdGVkIHRv
IHRoaXMgdGVzdCBleHBlY3RhdGlvbiBsaW5lLiBUaGlzIHdpbGwgYWxsb3cKKyAgICAgICAgdHJh
Y2tpbmcgbGludGVyIGVycm9ycyBpbiB0aGUgc3R5bGUgY2hlY2tlciBvY2N1cnJpbmcgYWNyb3Nz
IG11bHRpcGxlIGZpbGVzLgorICAgICAgICAoVGVzdEV4cGVjdGF0aW9uc01vZGVsLl9hbHJlYWR5
X3NlZW5fYmV0dGVyX21hdGNoKTogQWRkIHJlZHVuZGFudCBleHBlY3RhdGlvbgorICAgICAgICBs
aW5lcyB0byByZWxhdGVkX2ZpbGVzIGRpY3Rpb25hcnkuCisgICAgICAgIChUZXN0RXhwZWN0YXRp
b25zLl9faW5pdF9fKTogUGFzcyBzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lIHRvIFRlc3RFeHBlY3Rh
dGlvblBhcnNlci4KKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnMuX3JlcG9ydF93YXJuaW5ncyk6
IENvbnN0cnVjdCB3YXJuaW5nIG9iamVjdCBpbnN0ZWFkIG9mIHN0cmluZworICAgICAgICB3aGVu
IGFkZGluZyB0byB3YXJuaW5ncyBsaXN0LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9y
dC93aW4ucHk6IENoYW5nZWQgbG9nZ2luZyBsZXZlbCBmb3JtIHdhcm5pbmcgdG8gZGVidWcgdG8K
KyAgICAgICAgY2xlYW4tdXAgbG9nLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlci5weToKKyAgICAgICAgKFByb2Nlc3NvckJhc2UuZG9fYXNzb2NpYXRpb25fY2hlY2sp
OiBBZGQgcmVxdWlyZWQgZnVuY3Rpb24gZm9yIHByb2Nlc3NvciBjbGFzc2VzLgorICAgICAgICAo
U3R5bGVQcm9jZXNzb3IpOgorICAgICAgICAoU3R5bGVQcm9jZXNzb3IuZG9fYXNzb2NpYXRpb25f
Y2hlY2spOiBSdW4gdGhlIFRlc3RFeHBlY3RhdGlvbnMgbGludGVyIHdoZW4KKyAgICAgICAgY2hl
Y2tpbmcgZm9yIGVycm9ycyBiZXR3ZWVuIGFzc29jaWF0ZWQgZmlsZXMuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy90ZXN0X2V4cGVjdGF0aW9ucy5weToKKyAgICAg
ICAgKFRlc3RFeHBlY3RhdGlvbnNDaGVja2VyLmNoZWNrX3Rlc3RfZXhwZWN0YXRpb25zKTogUmVm
bGVjdCBjaGFuZ2VkIGltcG9ydCBzdGF0ZW1lbnRzLgorICAgICAgICAoVGVzdEV4cGVjdGF0aW9u
c0NoZWNrZXIpOgorICAgICAgICAoVGVzdEV4cGVjdGF0aW9uc0NoZWNrZXIuX3Nob3VsZF9sb2df
bGludGVyX3dhcm5pbmcpOiBHaXZlbiBhIHdhcm5pbmcsIGEgZGljdGlvbmFyeQorICAgICAgICBv
ZiBtb2RpZmllZCBmaWxlcywgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYW5kIHRoZSBo
b3N0LCBkZXRlcm1pbmUgaWYgdGhlIGxpbnRlcgorICAgICAgICB3YXJuaW5nIGlzIGFzc29jaWF0
ZWQgd2l0aCB0aGUgY2hhbmdlcy4KKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnNDaGVja2VyLmxp
bnRfdGVzdF9leHBlY3RhdGlvbnMpOiBMaW50IHRlc3QgZXhwZWN0YXRpb25zIGZvciB0aGUKKyAg
ICAgICAgc3R5bGUgY2hlY2tlci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2Zp
bGVyZWFkZXIucHk6CisgICAgICAgIChUZXh0RmlsZVJlYWRlcik6CisgICAgICAgIChUZXh0Rmls
ZVJlYWRlci5fX2luaXRfXyk6IFRyYWNrIG1vZGlmaWVkIGZpbGVzIGluIGRpY3Rpb25hcnkgaW5z
dGVhZCBvZiBhIGNvdW50ZXIuCisgICAgICAgIChUZXh0RmlsZVJlYWRlci5maWxlX2NvdW50KTog
VXNlIGRpY3Rpb25hcnkgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgbW9kaWZpZWQgZmlsZXMu
CisgICAgICAgIChUZXh0RmlsZVJlYWRlci5wcm9jZXNzX2ZpbGUpOiBUcmFjayBib3RoIHRoZSBu
dW1iZXIgb2YgZmlsZXMgY2hhbmdlZCBhbmQgd2hpY2ggbGluZXMKKyAgICAgICAgaW4gdGhvc2Ug
ZmlsZXMgd2VyZSBjaGFuZ2VkLgorICAgICAgICAoVGV4dEZpbGVSZWFkZXIuZG9fYXNzb2NpYXRp
b25fY2hlY2spOiBSdW4gdGhlIHByb2Nlc3NvcidzIGFzc29jaWF0aW9uIGNoZWNrIG9uIGFsbAor
ICAgICAgICBtb2RpZmllZCBvciBkZWxldGVkIGZpbGVzIHByb2Nlc3NlZCBieSBUZXh0RmlsZVJl
YWRlci4KKyAgICAgICAgKFRleHRGaWxlUmVhZGVyLmRlbGV0ZV9maWxlKTogVHJhY2sgZGVsZXRl
ZCBmaWxlcyBpbiBfZmlsZXMgZGljdGlvbmFyeS4KKyAgICAgICAgKFRleHRGaWxlUmVhZGVyLmNv
dW50X2RlbGV0ZV9vbmx5X2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvc3R5bGUvZmlsZXJlYWRlcl91bml0dGVzdC5weToKKyAgICAgICAgKFRleHRGaWxlUmVhZGVy
VGVzdC50ZXN0X2RlbGV0ZV9maWxlKTogUmVuYW1lZCBmdW5jdGlvbiB0byByZWZsZWN0IG5ldyBm
dW5jdGlvbiBuYW1lLgorICAgICAgICAoVGV4dEZpbGVSZWFkZXJUZXN0LnRlc3RfY291bnRfZGVs
ZXRlX29ubHlfZmlsZSk6IE1vdmVkIHRvIHRlc3RfZGVsZXRlX2ZpbGUuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9tYWluLnB5OgorICAgICAgICAoQ2hlY2tXZWJLaXRTdHlsZS5t
YWluKTogV2hlbiBydW5uaW5nIHRoZSBzdHlsZSBjaGVja2VyIG9uIGEgc3BlY2lmaWMgbGlzdCBv
ZiBmaWxlcywKKyAgICAgICAgZXhwbGljaXRseSBydW4gdGhlIGFzc29jaWF0aW9uIGNoZWNrIG9u
IHRoZSBmaWxlIHJlYWRlci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL21haW5f
dW5pdHRlc3QucHk6CisgICAgICAgIChFeHBlY3RhdGlvbkxpbnRlckluU3R5bGVDaGVja2VyVGVz
dCk6IEFkZGVkIHRvIHRlc3QgdGhlIFRlc3RFeHBlY3RhdGlvbkxpbnRlciBub3cKKyAgICAgICAg
ZW1iZWRkZWQgaW4gdGhlIHN0eWxlIGNoZWNrZXIuCisgICAgICAgIChFeHBlY3RhdGlvbkxpbnRl
ckluU3R5bGVDaGVja2VyVGVzdC5zZXRVcCk6IFNldCB1cCB0aGUgc3R5bGUgY2hlY2tlciBjb25m
aWd1cmF0aW9uLgorICAgICAgICAoRXhwZWN0YXRpb25MaW50ZXJJblN0eWxlQ2hlY2tlclRlc3Qu
X2dlbmVyYXRlX2ZpbGVfcmVhZGVyKTogR2l2ZW4gYSBmaWxlc3lzdGVtIG9iamVjdCwKKyAgICAg
ICAgY29uc3RydWN0IHRoZSBUZXh0RmlsZVJlYWRlciBvYmplY3Qgd2l0aCBhIFN0eWxlUHJvY2Vz
c29yIHVzZWQgdG8gcnVuIHN0eWxlIGNoZWNrcyBvbgorICAgICAgICBzcGVjaWZpYyBmaWxlcy4K
KyAgICAgICAgKEV4cGVjdGF0aW9uTGludGVySW5TdHlsZUNoZWNrZXJUZXN0Ll9nZW5lcmF0ZV90
ZXN0aW5nX2hvc3QpOiBHZW5lcmF0ZSBhIGhvc3QgdXNlZCBmb3IKKyAgICAgICAgdGVzdGluZyB0
aGUgdGVzdCBleHBlY3RhdGlvbiBsaW50ZXIgaW5zaWRlIHRoZSBzdHlsZSBjaGVja2VyLiBUaGlz
IGhvc3QgbXVzdCBjb250YWluIGEKKyAgICAgICAgbW9jayBmaWxlIHN5c3RlbSB3aXRoIHRoZSBi
YXNpYyBzdHJ1Y3R1cmUgb2YgdGVzdCBleHBlY3RhdGlvbnMuCisgICAgICAgIChFeHBlY3RhdGlv
bkxpbnRlckluU3R5bGVDaGVja2VyVGVzdC50ZXN0X25vX2xpbnRlcl9lcnJvcnMpOgorICAgICAg
ICAoRXhwZWN0YXRpb25MaW50ZXJJblN0eWxlQ2hlY2tlclRlc3QudGVzdF9saW50ZXJfZHVwbGlj
YXRlX2xpbmUpOgorICAgICAgICAoRXhwZWN0YXRpb25MaW50ZXJJblN0eWxlQ2hlY2tlclRlc3Qu
dGVzdF9saW50ZXJfZHVwbGljYXRlX2xpbmVfbm9fZWRpdCk6CisgICAgICAgIChFeHBlY3RhdGlv
bkxpbnRlckluU3R5bGVDaGVja2VyVGVzdC50ZXN0X2xpbnRlcl9kZWxldGVkX2ZpbGUpOgorICAg
ICAgICAoRXhwZWN0YXRpb25MaW50ZXJJblN0eWxlQ2hlY2tlclRlc3QudGVzdF9saW50ZXJfZGVs
ZXRlZF9maWxlX25vX2VkaXQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvcGF0
Y2hyZWFkZXIucHk6CisgICAgICAgIChQYXRjaFJlYWRlci5jaGVjayk6IFNwZWNpZnkgd2hpY2gg
ZmlsZSB3YXMgZGVsZXRlZCwgcnVuIHRoZSBhc3NvY2lhdGlvbiBjaGVjay4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL3BhdGNocmVhZGVyX3VuaXR0ZXN0LnB5OgorICAgICAgICAo
UGF0Y2hSZWFkZXJUZXN0Lk1vY2tUZXh0RmlsZVJlYWRlci5kZWxldGVfZmlsZSk6IFJlbmFtZWQg
Y291bnRfZGVsZXRlX29ubHlfZmlsZS4KKyAgICAgICAgKFBhdGNoUmVhZGVyVGVzdC5Nb2NrVGV4
dEZpbGVSZWFkZXIuZG9fYXNzb2NpYXRpb25fY2hlY2spOiBBZGRlZC4KKyAgICAgICAgKFBhdGNo
UmVhZGVyVGVzdC5Nb2NrVGV4dEZpbGVSZWFkZXIuY291bnRfZGVsZXRlX29ubHlfZmlsZSk6IFJl
bmFtZWQgZGVsZXRlX2ZpbGUuCisKIDIwMTctMDctMTggIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNA
YXBwbGUuY29tPgogCiAgICAgICAgIGxsZGI6IEFkZCB0eXBlIHN1bW1hcnkgZm9yIFN0cmluZ1Zp
ZXcKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVt
X21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL2ZpbGVzeXN0ZW1fbW9jay5weQkocmV2aXNpb24gMjE5NjQyKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5weQkod29ya2luZyBjb3B5
KQpAQCAtMzMyLDcgKzMzMiw3IEBAIGNsYXNzIE1vY2tGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAg
ICAgIHNlbGYuZmlsZXNbcGF0aF0gPSBjb250ZW50cwogICAgICAgICBzZWxmLndyaXR0ZW5fZmls
ZXNbcGF0aF0gPSBjb250ZW50cwogCi0gICAgZGVmIG9wZW5fdGV4dF9maWxlX2Zvcl9yZWFkaW5n
KHNlbGYsIHBhdGgpOgorICAgIGRlZiBvcGVuX3RleHRfZmlsZV9mb3JfcmVhZGluZyhzZWxmLCBw
YXRoLCBlcnJvcnM9J3N0cmljdCcpOgogICAgICAgICBpZiBzZWxmLmZpbGVzW3BhdGhdIGlzIE5v
bmU6CiAgICAgICAgICAgICBzZWxmLl9yYWlzZV9ub3RfZm91bmQocGF0aCkKICAgICAgICAgcmV0
dXJuIFJlYWRhYmxlVGV4dEZpbGVPYmplY3Qoc2VsZiwgcGF0aCwgc2VsZi5maWxlc1twYXRoXSkK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4
cGVjdGF0aW9ucy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9tb2RlbHMvdGVzdF9leHBlY3RhdGlvbnMucHkJKHJldmlzaW9uIDIxOTY0MikKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVjdGF0
aW9ucy5weQkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsMjAgQEAgY2xhc3MgUGFyc2VFcnJv
cihFeGNlcHRpb24pOgogICAgICAgICByZXR1cm4gJ1BhcnNlRXJyb3Iod2FybmluZ3M9JXMpJyAl
IHNlbGYud2FybmluZ3MKIAogCitjbGFzcyBUZXN0RXhwZWN0YXRpb25XYXJuaW5nKG9iamVjdCk6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lX251bWJlciwgbGluZSwgZXJy
b3IsIHRlc3Q9Tm9uZSk6CisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQorICAgICAg
ICBzZWxmLmxpbmVfbnVtYmVyID0gbGluZV9udW1iZXIKKyAgICAgICAgc2VsZi5saW5lID0gbGlu
ZQorICAgICAgICBzZWxmLmVycm9yID0gZXJyb3IKKyAgICAgICAgc2VsZi50ZXN0ID0gdGVzdAor
CisgICAgICAgIHNlbGYucmVsYXRlZF9maWxlcyA9IHt9CisKKyAgICBkZWYgX19zdHJfXyhzZWxm
KToKKyAgICAgICAgcmV0dXJuICd7fTp7fSB7fSB7fScuZm9ybWF0KHNlbGYuZmlsZW5hbWUsIHNl
bGYubGluZV9udW1iZXIsIHNlbGYuZXJyb3IsIHNlbGYudGVzdCBpZiBzZWxmLnRlc3QgZWxzZSBz
ZWxmLmxpbmUpCisKKwogY2xhc3MgVGVzdEV4cGVjdGF0aW9uUGFyc2VyKG9iamVjdCk6CiAgICAg
IiIiUHJvdmlkZXMgcGFyc2luZyBmYWNpbGl0aWVzIGZvciBsaW5lcyBpbiB0aGUgdGVzdF9leHBl
Y3RhdGlvbi50eHQgZmlsZS4iIiIKIApAQCAtNzgsNyArOTIsNyBAQCBjbGFzcyBUZXN0RXhwZWN0
YXRpb25QYXJzZXIob2JqZWN0KToKIAogICAgIE1JU1NJTkdfQlVHX1dBUk5JTkcgPSAnVGVzdCBs
YWNrcyBCVUcgbW9kaWZpZXIuJwogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGZ1bGxf
dGVzdF9saXN0LCBhbGxvd19yZWJhc2VsaW5lX21vZGlmaWVyKToKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgcG9ydCwgZnVsbF90ZXN0X2xpc3QsIGFsbG93X3JlYmFzZWxpbmVfbW9kaWZpZXIsIHNo
b3J0ZW5fZmlsZW5hbWU9c3RyKToKICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAg
c2VsZi5fdGVzdF9jb25maWd1cmF0aW9uX2NvbnZlcnRlciA9IFRlc3RDb25maWd1cmF0aW9uQ29u
dmVydGVyKHNldChwb3J0LmFsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKCkpLCBwb3J0LmNvbmZpZ3Vy
YXRpb25fc3BlY2lmaWVyX21hY3JvcygpKQogICAgICAgICBpZiBmdWxsX3Rlc3RfbGlzdCBpcyBO
b25lOgpAQCAtODYsNiArMTAwLDcgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uUGFyc2VyKG9iamVj
dCk6CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLl9mdWxsX3Rlc3RfbGlzdCA9IHNl
dChmdWxsX3Rlc3RfbGlzdCkKICAgICAgICAgc2VsZi5fYWxsb3dfcmViYXNlbGluZV9tb2RpZmll
ciA9IGFsbG93X3JlYmFzZWxpbmVfbW9kaWZpZXIKKyAgICAgICAgc2VsZi5fc2hvcnRlbl9maWxl
bmFtZSA9IHNob3J0ZW5fZmlsZW5hbWUKIAogICAgIGRlZiBwYXJzZShzZWxmLCBmaWxlbmFtZSwg
ZXhwZWN0YXRpb25zX3N0cmluZyk6CiAgICAgICAgIGV4cGVjdGF0aW9uX2xpbmVzID0gW10KQEAg
LTE4Niw2ICsyMDEsOCBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25QYXJzZXIob2JqZWN0KToKICAg
ICAgICAgICAgICMgdGltZSB5b3UgdXBkYXRlIFRlc3RFeHBlY3RhdGlvbnMgd2l0aG91dCBzeW5j
aW5nCiAgICAgICAgICAgICAjIHRoZSBMYXlvdXRUZXN0cyBkaXJlY3RvcnkKICAgICAgICAgICAg
IGV4cGVjdGF0aW9uX2xpbmUud2FybmluZ3MuYXBwZW5kKCdQYXRoIGRvZXMgbm90IGV4aXN0Licp
CisgICAgICAgICAgICBleHBlY3RlZF9wYXRoID0gc2VsZi5fc2hvcnRlbl9maWxlbmFtZShzZWxm
Ll9wb3J0LmFic3BhdGhfZm9yX3Rlc3QoZXhwZWN0YXRpb25fbGluZS5uYW1lKSkKKyAgICAgICAg
ICAgIGV4cGVjdGF0aW9uX2xpbmUucmVsYXRlZF9maWxlc1tleHBlY3RlZF9wYXRoXSA9IE5vbmUK
ICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICByZXR1cm4gVHJ1ZQogCkBAIC0zODEs
NiArMzk4LDcgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uTGluZShvYmplY3QpOgogICAgICAgICBz
ZWxmLmNvbW1lbnQgPSBOb25lCiAgICAgICAgIHNlbGYubWF0Y2hpbmdfdGVzdHMgPSBbXQogICAg
ICAgICBzZWxmLndhcm5pbmdzID0gW10KKyAgICAgICAgc2VsZi5yZWxhdGVkX2ZpbGVzID0ge30g
ICMgRGljdGlvbmFyeSBvZiBmaWxlcyB0byBsaW5lcyBudW1iZXIgaW4gdGhhdCBmaWxlIHdoaWNo
IG1heSBoYXZlIGNhdXNlZCB0aGUgbGlzdCBvZiB3YXJuaW5ncy4KICAgICAgICAgc2VsZi5ub3Rf
YXBwbGljYWJsZV90b19jdXJyZW50X3BsYXRmb3JtID0gRmFsc2UKIAogICAgIGRlZiBpc19pbnZh
bGlkKHNlbGYpOgpAQCAtNzAxLDI5ICs3MTksMzYgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uc01v
ZGVsKG9iamVjdCk6CiAgICAgICAgICAgICBleHBlY3RhdGlvbl9saW5lLndhcm5pbmdzLmFwcGVu
ZCgnRHVwbGljYXRlIG9yIGFtYmlndW91cyBlbnRyeSBsaW5lcyAlczolZCBhbmQgJXM6JWQuJyAl
ICgKICAgICAgICAgICAgICAgICBzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKHByZXZfZXhwZWN0YXRp
b25fbGluZS5maWxlbmFtZSksIHByZXZfZXhwZWN0YXRpb25fbGluZS5saW5lX251bWJlciwKICAg
ICAgICAgICAgICAgICBzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKGV4cGVjdGF0aW9uX2xpbmUuZmls
ZW5hbWUpLCBleHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyKSkKLSAgICAgICAgICAgIHJldHVy
biBUcnVlCiAKLSAgICAgICAgaWYgcHJldl9leHBlY3RhdGlvbl9saW5lLm1hdGNoaW5nX2NvbmZp
Z3VyYXRpb25zID49IGV4cGVjdGF0aW9uX2xpbmUubWF0Y2hpbmdfY29uZmlndXJhdGlvbnM6Cisg
ICAgICAgIGVsaWYgcHJldl9leHBlY3RhdGlvbl9saW5lLm1hdGNoaW5nX2NvbmZpZ3VyYXRpb25z
ID49IGV4cGVjdGF0aW9uX2xpbmUubWF0Y2hpbmdfY29uZmlndXJhdGlvbnM6CiAgICAgICAgICAg
ICBleHBlY3RhdGlvbl9saW5lLndhcm5pbmdzLmFwcGVuZCgnTW9yZSBzcGVjaWZpYyBlbnRyeSBm
b3IgJXMgb24gbGluZSAlczolZCBvdmVycmlkZXMgbGluZSAlczolZC4nICUgKGV4cGVjdGF0aW9u
X2xpbmUubmFtZSwKICAgICAgICAgICAgICAgICBzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKHByZXZf
ZXhwZWN0YXRpb25fbGluZS5maWxlbmFtZSksIHByZXZfZXhwZWN0YXRpb25fbGluZS5saW5lX251
bWJlciwKICAgICAgICAgICAgICAgICBzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKGV4cGVjdGF0aW9u
X2xpbmUuZmlsZW5hbWUpLCBleHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyKSkKICAgICAgICAg
ICAgICMgRklYTUU6IHJldHVybiBGYWxzZSBpZiB3ZSB3YW50IG1vcmUgc3BlY2lmaWMgdG8gd2lu
LgotICAgICAgICAgICAgcmV0dXJuIFRydWUKIAotICAgICAgICBpZiBwcmV2X2V4cGVjdGF0aW9u
X2xpbmUubWF0Y2hpbmdfY29uZmlndXJhdGlvbnMgPD0gZXhwZWN0YXRpb25fbGluZS5tYXRjaGlu
Z19jb25maWd1cmF0aW9uczoKKyAgICAgICAgZWxpZiBwcmV2X2V4cGVjdGF0aW9uX2xpbmUubWF0
Y2hpbmdfY29uZmlndXJhdGlvbnMgPD0gZXhwZWN0YXRpb25fbGluZS5tYXRjaGluZ19jb25maWd1
cmF0aW9uczoKICAgICAgICAgICAgIGV4cGVjdGF0aW9uX2xpbmUud2FybmluZ3MuYXBwZW5kKCdN
b3JlIHNwZWNpZmljIGVudHJ5IGZvciAlcyBvbiBsaW5lICVzOiVkIG92ZXJyaWRlcyBsaW5lICVz
OiVkLicgJSAoZXhwZWN0YXRpb25fbGluZS5uYW1lLAogICAgICAgICAgICAgICAgIHNlbGYuX3No
b3J0ZW5fZmlsZW5hbWUoZXhwZWN0YXRpb25fbGluZS5maWxlbmFtZSksIGV4cGVjdGF0aW9uX2xp
bmUubGluZV9udW1iZXIsCiAgICAgICAgICAgICAgICAgc2VsZi5fc2hvcnRlbl9maWxlbmFtZShw
cmV2X2V4cGVjdGF0aW9uX2xpbmUuZmlsZW5hbWUpLCBwcmV2X2V4cGVjdGF0aW9uX2xpbmUubGlu
ZV9udW1iZXIpKQotICAgICAgICAgICAgcmV0dXJuIFRydWUKIAotICAgICAgICBpZiBwcmV2X2V4
cGVjdGF0aW9uX2xpbmUubWF0Y2hpbmdfY29uZmlndXJhdGlvbnMgJiBleHBlY3RhdGlvbl9saW5l
Lm1hdGNoaW5nX2NvbmZpZ3VyYXRpb25zOgorICAgICAgICBlbGlmIHByZXZfZXhwZWN0YXRpb25f
bGluZS5tYXRjaGluZ19jb25maWd1cmF0aW9ucyAmIGV4cGVjdGF0aW9uX2xpbmUubWF0Y2hpbmdf
Y29uZmlndXJhdGlvbnM6CiAgICAgICAgICAgICBleHBlY3RhdGlvbl9saW5lLndhcm5pbmdzLmFw
cGVuZCgnRW50cmllcyBmb3IgJXMgb24gbGluZXMgJXM6JWQgYW5kICVzOiVkIG1hdGNoIG92ZXJs
YXBwaW5nIHNldHMgb2YgY29uZmlndXJhdGlvbnMuJyAlIChleHBlY3RhdGlvbl9saW5lLm5hbWUs
CiAgICAgICAgICAgICAgICAgc2VsZi5fc2hvcnRlbl9maWxlbmFtZShwcmV2X2V4cGVjdGF0aW9u
X2xpbmUuZmlsZW5hbWUpLCBwcmV2X2V4cGVjdGF0aW9uX2xpbmUubGluZV9udW1iZXIsCiAgICAg
ICAgICAgICAgICAgc2VsZi5fc2hvcnRlbl9maWxlbmFtZShleHBlY3RhdGlvbl9saW5lLmZpbGVu
YW1lKSwgZXhwZWN0YXRpb25fbGluZS5saW5lX251bWJlcikpCi0gICAgICAgICAgICByZXR1cm4g
VHJ1ZQogCi0gICAgICAgICMgQ29uZmlndXJhdGlvbiBzZXRzIGFyZSBkaXNqb2ludCwgdGhlbi4K
LSAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIENvbmZp
Z3VyYXRpb24gc2V0cyBhcmUgZGlzam9pbnQuCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKwor
ICAgICAgICBpZiBleHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXMuZ2V0KHNlbGYuX3Nob3J0
ZW5fZmlsZW5hbWUocHJldl9leHBlY3RhdGlvbl9saW5lLmZpbGVuYW1lKSwgTm9uZSkgaXMgTm9u
ZToKKyAgICAgICAgICAgIGV4cGVjdGF0aW9uX2xpbmUucmVsYXRlZF9maWxlc1tzZWxmLl9zaG9y
dGVuX2ZpbGVuYW1lKHByZXZfZXhwZWN0YXRpb25fbGluZS5maWxlbmFtZSldID0gW10KKyAgICAg
ICAgZXhwZWN0YXRpb25fbGluZS5yZWxhdGVkX2ZpbGVzW3NlbGYuX3Nob3J0ZW5fZmlsZW5hbWUo
cHJldl9leHBlY3RhdGlvbl9saW5lLmZpbGVuYW1lKV0uYXBwZW5kKHByZXZfZXhwZWN0YXRpb25f
bGluZS5saW5lX251bWJlcikKKworICAgICAgICBpZiBwcmV2X2V4cGVjdGF0aW9uX2xpbmUucmVs
YXRlZF9maWxlcy5nZXQoc2VsZi5fc2hvcnRlbl9maWxlbmFtZShleHBlY3RhdGlvbl9saW5lLmZp
bGVuYW1lKSwgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgIHByZXZfZXhwZWN0YXRpb25fbGlu
ZS5yZWxhdGVkX2ZpbGVzW3NlbGYuX3Nob3J0ZW5fZmlsZW5hbWUoZXhwZWN0YXRpb25fbGluZS5m
aWxlbmFtZSldID0gW10KKyAgICAgICAgcHJldl9leHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmls
ZXNbc2VsZi5fc2hvcnRlbl9maWxlbmFtZShleHBlY3RhdGlvbl9saW5lLmZpbGVuYW1lKV0uYXBw
ZW5kKHByZXZfZXhwZWN0YXRpb25fbGluZS5saW5lX251bWJlcikKKworICAgICAgICByZXR1cm4g
VHJ1ZQogCiAKIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnMob2JqZWN0KToKQEAgLTg1Myw3ICs4Nzgs
NyBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3Rlc3Rf
Y29uZmlnID0gcG9ydC50ZXN0X2NvbmZpZ3VyYXRpb24oKQogICAgICAgICBzZWxmLl9pc19saW50
X21vZGUgPSBleHBlY3RhdGlvbnNfdG9fbGludCBpcyBub3QgTm9uZQogICAgICAgICBzZWxmLl9t
b2RlbCA9IFRlc3RFeHBlY3RhdGlvbnNNb2RlbChzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKQotICAg
ICAgICBzZWxmLl9wYXJzZXIgPSBUZXN0RXhwZWN0YXRpb25QYXJzZXIocG9ydCwgdGVzdHMsIHNl
bGYuX2lzX2xpbnRfbW9kZSkKKyAgICAgICAgc2VsZi5fcGFyc2VyID0gVGVzdEV4cGVjdGF0aW9u
UGFyc2VyKHBvcnQsIHRlc3RzLCBzZWxmLl9pc19saW50X21vZGUsIHNlbGYuX3Nob3J0ZW5fZmls
ZW5hbWUpCiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX3NraXBwZWRf
dGVzdHNfd2FybmluZ3MgPSBbXQogICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMgPSBbXQpAQCAt
OTM4LDggKzk2MywxNCBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zKG9iamVjdCk6CiAgICAgICAg
IHdhcm5pbmdzID0gW10KICAgICAgICAgZm9yIGV4cGVjdGF0aW9uIGluIHNlbGYuX2V4cGVjdGF0
aW9uczoKICAgICAgICAgICAgIGZvciB3YXJuaW5nIGluIGV4cGVjdGF0aW9uLndhcm5pbmdzOgot
ICAgICAgICAgICAgICAgIHdhcm5pbmdzLmFwcGVuZCgnJXM6JWQgJXMgJXMnICUgKHNlbGYuX3No
b3J0ZW5fZmlsZW5hbWUoZXhwZWN0YXRpb24uZmlsZW5hbWUpLCBleHBlY3RhdGlvbi5saW5lX251
bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZywgZXhwZWN0YXRp
b24ubmFtZSBpZiBleHBlY3RhdGlvbi5leHBlY3RhdGlvbnMgZWxzZSBleHBlY3RhdGlvbi5vcmln
aW5hbF9zdHJpbmcpKQorICAgICAgICAgICAgICAgIHdhcm5pbmcgPSBUZXN0RXhwZWN0YXRpb25X
YXJuaW5nKAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKGV4cGVj
dGF0aW9uLmZpbGVuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0YXRpb24ubGluZV9u
dW1iZXIsCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9uLm9yaWdpbmFsX3N0cmluZywK
KyAgICAgICAgICAgICAgICAgICAgd2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0
YXRpb24ubmFtZSBpZiBleHBlY3RhdGlvbi5leHBlY3RhdGlvbnMgZWxzZSBOb25lKQorICAgICAg
ICAgICAgICAgIHdhcm5pbmcucmVsYXRlZF9maWxlcyA9IGV4cGVjdGF0aW9uLnJlbGF0ZWRfZmls
ZXMKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5hcHBlbmQod2FybmluZykKIAogICAgICAgICBp
ZiB3YXJuaW5nczoKICAgICAgICAgICAgIHNlbGYuX2hhc193YXJuaW5ncyA9IFRydWUKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQkocmV2aXNpb24gMjE5NjQyKQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDks
NyBAQCB0cnk6CiAgICAgaW1wb3J0IF93aW5yZWcKICAgICBpbXBvcnQgd2luMzJjb20uY2xpZW50
CiBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgX2xvZy53YXJuKCJOb3QgcnVubmluZyBvbiBuYXRp
dmUgV2luZG93cy4iKQorICAgIF9sb2cuZGVidWcoIk5vdCBydW5uaW5nIG9uIG5hdGl2ZSBXaW5k
b3dzLiIpCiAKIAogY2xhc3MgV2luUG9ydChBcHBsZVBvcnQpOgpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQkocmV2aXNpb24gMjE5NjQyKQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2
MCw3IEBAIGZyb20gZXJyb3JfaGFuZGxlcnMgaW1wb3J0IERlZmF1bHRTdHlsZUUKIGZyb20gZmls
dGVyIGltcG9ydCBGaWx0ZXJDb25maWd1cmF0aW9uCiBmcm9tIG9wdHBhcnNlciBpbXBvcnQgQXJn
dW1lbnRQYXJzZXIKIGZyb20gb3B0cGFyc2VyIGltcG9ydCBEZWZhdWx0Q29tbWFuZE9wdGlvblZh
bHVlcworZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdCBpbXBvcnQgSG9zdAogZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLmxvZ3V0aWxzIGltcG9ydCBjb25maWd1cmVfbG9nZ2luZyBhcyBfY29u
ZmlndXJlX2xvZ2dpbmcKIGZyb20gd2Via2l0cHkucG9ydC5jb25maWcgaW1wb3J0IGFwcGxlX2Fk
ZGl0aW9ucwogCkBAIC04MTEsNiArODEyLDIyIEBAIGNsYXNzIFByb2Nlc3NvckJhc2Uob2JqZWN0
KToKICAgICAgICAgIiIiCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1N1YmNs
YXNzZXMgc2hvdWxkIGltcGxlbWVudC4nKQogCisgICAgZGVmIGRvX2Fzc29jaWF0aW9uX2NoZWNr
KHNlbGYsIGZpbGVzLCBjd2QsIGhvc3Q9SG9zdCgpKToKKyAgICAgICAgIiIiSXQgbWF5IGJlIHRo
ZSBjYXNlIHRoYXQgY2hhbmdlcyBpbiBhIGZpbGUgY2F1c2Ugc3R5bGUgZXJyb3JzIHRvCisgICAg
ICAgIG9jY3VyIGVsc2V3aGVyZSBpbiB0aGUgbW9kaWZpZWQgZmlsZSBvciBpbiBvdGhlciBmaWxl
cyAobW9zdCBub3RhYmx5LAorICAgICAgICB0aGlzIGlzIHRoZSBjYXNlIGZvciB0aGUgdGVzdCBl
eHBlY3RhdGlvbnMgbGludGVyKS4gVGhlIGFzc29jaWF0aW9uIGNoZWNrCisgICAgICAgIGlzIGRl
c2lnbmVkIHRvIHRha2UgZmluZCBpc3N1ZXMgd2hpY2ggcmVxdWlyZSBwYXJzaW5nIG9mIGZpbGVz
IG91dHNpZGUKKyAgICAgICAgdGhvc2UgcHJvdmlkZWQgdG8gdGhlIHByb2Nlc3Nvci4KKworICAg
ICAgICBBcmdzOgorICAgICAgICAgICAgZmlsZXM6IEEgZGljdGlvbmFyeSBvZiBmaWxlIG5hbWVz
IHRvIGxpc3RzIG9mIGxpbmVzIG1vZGlmaWVkIGluIHRoZSBwcm92aWRlZAorICAgICAgICAgICAg
ZmlsZS4gIEZpbGVzIHdoaWNoIGhhdmUgYmVlbiByZW1vdmVkIHdpbGwgYWxzbyBiZSBpbiB0aGUg
ZGljdGlvbmFyeSwgdGhleQorICAgICAgICAgICAgd2lsbCBtYXAgdG8gJ05vbmUnCisgICAgICAg
ICAgICBjd2Q6IEN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksIGFzc3VtZWQgdG8gYmUgdGhlIHJv
b3Qgb2YgdGhlIHNjbSByZXBvc2l0b3J5CisgICAgICAgICAgICBob3N0OiBDdXJyZW50IGhvc3Qg
Zm9yIHRlc3RpbmcKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJy
b3IoJ1N1YmNsYXNzZXMgc2hvdWxkIGltcGxlbWVudC4nKQorCiAKIGNsYXNzIFN0eWxlUHJvY2Vz
c29yKFByb2Nlc3NvckJhc2UpOgogCkBAIC05MTgsMyArOTM1LDcgQEAgY2xhc3MgU3R5bGVQcm9j
ZXNzb3IoUHJvY2Vzc29yQmFzZSk6CiAgICAgICAgIF9sb2cuZGVidWcoIlVzaW5nIGNsYXNzOiAi
ICsgY2hlY2tlci5fX2NsYXNzX18uX19uYW1lX18pCiAKICAgICAgICAgY2hlY2tlci5jaGVjayhs
aW5lcykKKworICAgIGRlZiBkb19hc3NvY2lhdGlvbl9jaGVjayhzZWxmLCBmaWxlcywgY3dkLCBo
b3N0PUhvc3QoKSk6CisgICAgICAgIF9sb2cuZGVidWcoIlJ1bm5pbmcgVGVzdEV4cGVjdGF0aW9u
cyBsaW50ZXIiKQorICAgICAgICBUZXN0RXhwZWN0YXRpb25zQ2hlY2tlci5saW50X3Rlc3RfZXhw
ZWN0YXRpb25zKGZpbGVzLCBzZWxmLl9jb25maWd1cmF0aW9uLCBjd2QsIHNlbGYuX2luY3JlbWVu
dF9lcnJvcl9jb3VudCwgaG9zdD1ob3N0KQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9maWxlcmVhZGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3R5bGUvZmlsZXJlYWRlci5weQkocmV2aXNpb24gMjE5NjQyKQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9maWxlcmVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw4
IEBACiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHN5cwogCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5o
b3N0IGltcG9ydCBIb3N0CisKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQog
CkBAIC02Miw5ICs2NCwxMyBAQCBjbGFzcyBUZXh0RmlsZVJlYWRlcihvYmplY3QpOgogCiAgICAg
ICAgIHNlbGYuZmlsZXN5c3RlbSA9IGZpbGVzeXN0ZW0KICAgICAgICAgc2VsZi5fcHJvY2Vzc29y
ID0gcHJvY2Vzc29yCi0gICAgICAgIHNlbGYuZmlsZV9jb3VudCA9IDAKKyAgICAgICAgc2VsZi5f
ZmlsZXMgPSB7fQogICAgICAgICBzZWxmLmRlbGV0ZV9vbmx5X2ZpbGVfY291bnQgPSAwCiAKKyAg
ICBAcHJvcGVydHkKKyAgICBkZWYgZmlsZV9jb3VudChzZWxmKToKKyAgICAgICAgcmV0dXJuIGxl
bihzZWxmLl9maWxlcykgLSBzZWxmLmRlbGV0ZV9vbmx5X2ZpbGVfY291bnQKKwogICAgIGRlZiBf
cmVhZF9saW5lcyhzZWxmLCBmaWxlX3BhdGgpOgogICAgICAgICAiIiJSZWFkIHRoZSBmaWxlIGF0
IGEgcGF0aCwgYW5kIHJldHVybiBpdHMgbGluZXMuCiAKQEAgLTEwMyw3ICsxMDksMTMgQEAgY2xh
c3MgVGV4dEZpbGVSZWFkZXIob2JqZWN0KToKICAgICAgICAgICBTeXN0ZW1FeGl0OiBJZiBubyBm
aWxlIGF0IGZpbGVfcGF0aCBleGlzdHMuCiAKICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuZmls
ZV9jb3VudCArPSAxCisgICAgICAgIGFic19maWxlX3BhdGggPSBzZWxmLmZpbGVzeXN0ZW0uYWJz
cGF0aChmaWxlX3BhdGgpCisgICAgICAgIGlmIGFic19maWxlX3BhdGggbm90IGluIHNlbGYuX2Zp
bGVzOgorICAgICAgICAgICAgc2VsZi5fZmlsZXNbYWJzX2ZpbGVfcGF0aF0gPSBOb25lCisgICAg
ICAgIGlmICdsaW5lX251bWJlcnMnIGluIGt3YXJnczoKKyAgICAgICAgICAgIGlmIHNlbGYuX2Zp
bGVzW2Fic19maWxlX3BhdGhdIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5fZmlsZXNb
YWJzX2ZpbGVfcGF0aF0gPSBbXQorICAgICAgICAgICAgc2VsZi5fZmlsZXNbYWJzX2ZpbGVfcGF0
aF0gPSBzZWxmLl9maWxlc1thYnNfZmlsZV9wYXRoXSArIGt3YXJnc1snbGluZV9udW1iZXJzJ10K
IAogICAgICAgICBpZiBub3Qgc2VsZi5maWxlc3lzdGVtLmV4aXN0cyhmaWxlX3BhdGgpIGFuZCBm
aWxlX3BhdGggIT0gIi0iOgogICAgICAgICAgICAgX2xvZy5lcnJvcigiRmlsZSBkb2VzIG5vdCBl
eGlzdDogJyVzJyIgJSBmaWxlX3BhdGgpCkBAIC0xMzUsMTEgKzE0NywxNiBAQCBjbGFzcyBUZXh0
RmlsZVJlYWRlcihvYmplY3QpOgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBz
ZWxmLnByb2Nlc3NfZmlsZShwYXRoKQogCi0gICAgZGVmIGNvdW50X2RlbGV0ZV9vbmx5X2ZpbGUo
c2VsZik6CisgICAgZGVmIGRvX2Fzc29jaWF0aW9uX2NoZWNrKHNlbGYsIGN3ZCwgaG9zdD1Ib3N0
KCkpOgorICAgICAgICBzZWxmLl9wcm9jZXNzb3IuZG9fYXNzb2NpYXRpb25fY2hlY2soc2VsZi5f
ZmlsZXMsIGN3ZCwgaG9zdD1ob3N0KQorCisgICAgZGVmIGRlbGV0ZV9maWxlKHNlbGYsIGZpbGVf
cGF0aD1Ob25lKToKICAgICAgICAgIiIiQ291bnQgdXAgZmlsZXMgdGhhdCBjb250YWlucyBvbmx5
IGRlbGV0ZWQgbGluZXMuCiAKICAgICAgICAgRmlsZXMgd2hpY2ggaGFzIG5vIG1vZGlmaWVkIG9y
IG5ld2x5LWFkZGVkIGxpbmVzIGRvbid0IG5lZWQKICAgICAgICAgdG8gY2hlY2sgc3R5bGUsIGJ1
dCBzaG91bGQgYmUgdHJlYXRlZCBhcyBjaGVja2VkLiBGb3IgdGhhdAogICAgICAgICBwdXJwb3Nl
LCB3ZSBqdXN0IGNvdW50IHVwIHRoZSBudW1iZXIgb2Ygc3VjaCBmaWxlcy4KICAgICAgICAgIiIi
CisgICAgICAgIGlmIGZpbGVfcGF0aDoKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzW3NlbGYuZmls
ZXN5c3RlbS5hYnNwYXRoKGZpbGVfcGF0aCldID0gTm9uZQogICAgICAgICBzZWxmLmRlbGV0ZV9v
bmx5X2ZpbGVfY291bnQgKz0gMQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9m
aWxlcmVhZGVyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvc3R5bGUvZmlsZXJlYWRlcl91bml0dGVzdC5weQkocmV2aXNpb24gMjE5NjQyKQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9maWxlcmVhZGVyX3VuaXR0ZXN0LnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0xNTAsOCArMTUwLDggQEAgY2xhc3MgVGV4dEZpbGVSZWFkZXJUZXN0KExvZ2dp
bmdUZXN0Q2FzZQogICAgICAgICAgICAgICAgICAgICAgKFsnZm9vJ10sIGZpbGVfcGF0aDEsIE5v
bmUpXQogICAgICAgICBzZWxmLl9hc3NlcnRfZmlsZV9yZWFkZXIocHJvY2Vzc2VkLCAyKQogCi0g
ICAgZGVmIHRlc3RfY291bnRfZGVsZXRlX29ubHlfZmlsZShzZWxmKToKLSAgICAgICAgc2VsZi5f
ZmlsZV9yZWFkZXIuY291bnRfZGVsZXRlX29ubHlfZmlsZSgpCisgICAgZGVmIHRlc3RfZGVsZXRl
X2ZpbGUoc2VsZik6CisgICAgICAgIHNlbGYuX2ZpbGVfcmVhZGVyLmRlbGV0ZV9maWxlKCkKICAg
ICAgICAgZGVsZXRlX29ubHlfZmlsZV9jb3VudCA9IHNlbGYuX2ZpbGVfcmVhZGVyLmRlbGV0ZV9v
bmx5X2ZpbGVfY291bnQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWxldGVfb25seV9maWxl
X2NvdW50LCAxKQogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL21haW4ucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9tYWluLnB5CShyZXZp
c2lvbiAyMTk2NDIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL21haW4ucHkJKHdv
cmtpbmcgY29weSkKQEAgLTE0Nyw2ICsxNDcsNyBAQCBjbGFzcyBDaGVja1dlYktpdFN0eWxlKG9i
amVjdCk6CiAKICAgICAgICAgaWYgcGF0aHMgYW5kIG5vdCBvcHRpb25zLmRpZmZfZmlsZXM6CiAg
ICAgICAgICAgICBmaWxlX3JlYWRlci5wcm9jZXNzX3BhdGhzKHBhdGhzKQorICAgICAgICAgICAg
ZmlsZV9yZWFkZXIuZG9fYXNzb2NpYXRpb25fY2hlY2soaG9zdC5zY20oKS5jaGVja291dF9yb290
KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgY2hhbmdlZF9maWxlcyA9IHBhdGhzIGlmIG9w
dGlvbnMuZGlmZl9maWxlcyBlbHNlIE5vbmUKICAgICAgICAgICAgIHBhdGNoID0gaG9zdC5zY20o
KS5jcmVhdGVfcGF0Y2gob3B0aW9ucy5naXRfY29tbWl0LCBjaGFuZ2VkX2ZpbGVzPWNoYW5nZWRf
ZmlsZXMsIGdpdF9pbmRleD1vcHRpb25zLmdpdF9pbmRleCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvbWFpbl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL21haW5fdW5pdHRlc3QucHkJKHJldmlzaW9uIDIxOTY0MikKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvbWFpbl91bml0dGVzdC5weQkod29ya2luZyBj
b3B5KQpAQCAtMjAsMTEgKzIwLDE4IEBACiAjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAKK2ltcG9ydCBvcHRwYXJzZQogaW1wb3J0IHVuaXR0ZXN0CiAKK2ltcG9ydCB3ZWJr
aXRweS5zdHlsZS5jaGVja2VyIGFzIGNoZWNrZXIKKwogZnJvbSBtYWluIGltcG9ydCBjaGFuZ2Vf
ZGlyZWN0b3J5Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0CiBmcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbV9tb2NrIGltcG9ydCBNb2NrRmlsZVN5c3Rl
bQorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1
dENhcHR1cmVTY29wZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmxvZ3Rlc3RpbmcgaW1w
b3J0IExvZ1Rlc3RpbmcKK2Zyb20gd2Via2l0cHkuc3R5bGUuY2hlY2tlciBpbXBvcnQgU3R5bGVQ
cm9jZXNzb3IKK2Zyb20gd2Via2l0cHkuc3R5bGUuZmlsZXJlYWRlciBpbXBvcnQgVGV4dEZpbGVS
ZWFkZXIKIAogCiBjbGFzcyBDaGFuZ2VEaXJlY3RvcnlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
QEAgLTczLDMgKzgwLDEwMCBAQCBjbGFzcyBDaGFuZ2VEaXJlY3RvcnlUZXN0KHVuaXR0ZXN0LlRl
c3RDCiAKICIiIl0KICAgICAgICAgc2VsZi5fYXNzZXJ0X3Jlc3VsdChwYXRocywgcGF0aHMsIGxv
Z19tZXNzYWdlcywgc2VsZi5fb3JpZ2luYWxfZGlyZWN0b3J5KQorCisKK2NsYXNzIEV4cGVjdGF0
aW9uTGludGVySW5TdHlsZUNoZWNrZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRl
ZiBzZXRVcChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gY2hlY2tlci5jaGVja193ZWJraXRfc3R5
bGVfcGFyc2VyKCkKKyAgICAgICAgKF8sIG9wdGlvbnMpID0gcGFyc2VyLnBhcnNlKFtdKQorICAg
ICAgICBzZWxmLl9zdHlsZV9jaGVja2VyX2NvbmZpZ3VyYXRpb24gPSBjaGVja2VyLmNoZWNrX3dl
YmtpdF9zdHlsZV9jb25maWd1cmF0aW9uKG9wdGlvbnMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Zp
bGVfcmVhZGVyKHNlbGYsIGZpbGVfc3lzdGVtKToKKyAgICAgICAgc3R5bGVfcHJvY2Vzc29yID0g
U3R5bGVQcm9jZXNzb3Ioc2VsZi5fc3R5bGVfY2hlY2tlcl9jb25maWd1cmF0aW9uKQorICAgICAg
ICByZXR1cm4gVGV4dEZpbGVSZWFkZXIoZmlsZV9zeXN0ZW0sIHN0eWxlX3Byb2Nlc3NvcikKKwor
ICAgIGRlZiBfZ2VuZXJhdGVfdGVzdGluZ19ob3N0KHNlbGYsIGZpbGVzPXt9KToKKyAgICAgICAg
aG9zdCA9IEhvc3QoKQorICAgICAgICBleHBlY3RhdGlvbl9maWxlcyA9IGZpbGVzCisKKyAgICAg
ICAgaG9zdC5maWxlc3lzdGVtID0gTW9ja0ZpbGVTeXN0ZW0oZGlycz1bJy9tb2NrLWNoZWNrb3V0
L0xheW91dFRlc3RzJ10pCisgICAgICAgIG9wdGlvbnMgPSBvcHRwYXJzZS5WYWx1ZXMoKQorICAg
ICAgICBzZXRhdHRyKG9wdGlvbnMsICdsYXlvdXRfdGVzdHNfZGlyJywgJy9tb2NrLWNoZWNrb3V0
L0xheW91dFRlc3RzJykKKworICAgICAgICBhbGxfcG9ydHMgPSBbaG9zdC5wb3J0X2ZhY3Rvcnku
Z2V0KG5hbWUsIG9wdGlvbnM9b3B0aW9ucykgZm9yIG5hbWUgaW4gaG9zdC5wb3J0X2ZhY3Rvcnku
YWxsX3BvcnRfbmFtZXMoKV0KKyAgICAgICAgZm9yIHBvcnQgaW4gYWxsX3BvcnRzOgorICAgICAg
ICAgICAgZm9yIHBhdGggaW4gcG9ydC5leHBlY3RhdGlvbnNfZmlsZXMoKToKKyAgICAgICAgICAg
ICAgICBpZiBwYXRoIG5vdCBpbiBleHBlY3RhdGlvbl9maWxlczoKKyAgICAgICAgICAgICAgICAg
ICAgZXhwZWN0YXRpb25fZmlsZXNbcGF0aF0gPSAnIyBFbXB0eSBleHBlY3RhdGlvbiBmaWxlXG4n
CisKKyAgICAgICAgZXhwZWN0YXRpb25fZmlsZXNbJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3Rz
L2NzczEvdGVzdC5odG1sJ10gPSAnVGVzdCcKKyAgICAgICAgZXhwZWN0YXRpb25fZmlsZXNbJy9t
b2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL2NzczEvdGVzdC1leHBlY3RlZC50eHQnXSA9ICdUZXN0
IEV4cGVjdGF0aW9uJworICAgICAgICBob3N0LmZpbGVzeXN0ZW0gPSBNb2NrRmlsZVN5c3RlbShm
aWxlcz1leHBlY3RhdGlvbl9maWxlcykKKyAgICAgICAgcmV0dXJuIGhvc3QKKworICAgIGRlZiB0
ZXN0X25vX2xpbnRlcl9lcnJvcnMoc2VsZik6CisgICAgICAgIGhvc3QgPSBzZWxmLl9nZW5lcmF0
ZV90ZXN0aW5nX2hvc3QoKQorCisgICAgICAgIHNjb3BlID0gT3V0cHV0Q2FwdHVyZVNjb3BlKCkK
KyAgICAgICAgd2l0aCBzY29wZToKKyAgICAgICAgICAgIGZpbGVfcmVhZGVyID0gc2VsZi5fZ2Vu
ZXJhdGVfZmlsZV9yZWFkZXIoaG9zdC5maWxlc3lzdGVtKQorICAgICAgICAgICAgZmlsZV9yZWFk
ZXIuZG9fYXNzb2NpYXRpb25fY2hlY2soJy9tb2NrLWNoZWNrb3V0JywgaG9zdCkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzY29wZS5jYXB0dXJlZF9vdXRwdXQsICgnJywgJycsICcnKSkKKwor
ICAgIGRlZiB0ZXN0X2xpbnRlcl9kdXBsaWNhdGVfbGluZShzZWxmKToKKyAgICAgICAgZmlsZXMg
PSB7CisgICAgICAgICAgICAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0
aW9ucyc6CisgICAgICAgICAgICAnIyBUZXN0RXhwZWN0YXRpb25zXG5jc3MxL3Rlc3QuaHRtbCBb
IEZhaWx1cmUgXVxuY3NzMS90ZXN0Lmh0bWwgWyBGYWlsdXJlIF1cbid9CisgICAgICAgIGhvc3Qg
PSBzZWxmLl9nZW5lcmF0ZV90ZXN0aW5nX2hvc3QoZmlsZXMpCisKKyAgICAgICAgc2NvcGUgPSBP
dXRwdXRDYXB0dXJlU2NvcGUoKQorICAgICAgICB3aXRoIHNjb3BlOgorICAgICAgICAgICAgZmls
ZV9yZWFkZXIgPSBzZWxmLl9nZW5lcmF0ZV9maWxlX3JlYWRlcihob3N0LmZpbGVzeXN0ZW0pCisg
ICAgICAgICAgICBmaWxlX3JlYWRlci5wcm9jZXNzX3BhdGhzKHsnL21vY2stY2hlY2tvdXQvTGF5
b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucyd9KQorICAgICAgICAgICAgZmlsZV9yZWFkZXIuZG9f
YXNzb2NpYXRpb25fY2hlY2soJy9tb2NrLWNoZWNrb3V0JywgaG9zdCkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNjb3BlLmNhcHR1cmVkX291dHB1dCwKKyAgICAgICAg
ICAgICgnJywgJycsICcvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25z
OjM6ICBEdXBsaWNhdGUgb3IgYW1iaWd1b3VzIGVudHJ5IGxpbmVzIExheW91dFRlc3RzL1Rlc3RF
eHBlY3RhdGlvbnM6MiBhbmQgTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9uczozLiAgW3Rlc3Qv
ZXhwZWN0YXRpb25zXSBbNV1cbicpKQorCisgICAgZGVmIHRlc3RfbGludGVyX2R1cGxpY2F0ZV9s
aW5lX25vX2VkaXQoc2VsZik6CisgICAgICAgIGZpbGVzID0geworICAgICAgICAgICAgJy9tb2Nr
LWNoZWNrb3V0L0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMnOgorICAgICAgICAgICAgJyMg
VGVzdEV4cGVjdGF0aW9uc1xuY3NzMS90ZXN0Lmh0bWwgWyBGYWlsdXJlIF1cbmNzczEvdGVzdC5o
dG1sIFsgRmFpbHVyZSBdXG4nfQorICAgICAgICBob3N0ID0gc2VsZi5fZ2VuZXJhdGVfdGVzdGlu
Z19ob3N0KGZpbGVzKQorCisgICAgICAgIHNjb3BlID0gT3V0cHV0Q2FwdHVyZVNjb3BlKCkKKyAg
ICAgICAgd2l0aCBzY29wZToKKyAgICAgICAgICAgIGZpbGVfcmVhZGVyID0gc2VsZi5fZ2VuZXJh
dGVfZmlsZV9yZWFkZXIoaG9zdC5maWxlc3lzdGVtKQorICAgICAgICAgICAgZmlsZV9yZWFkZXIu
cHJvY2Vzc19wYXRocyhbJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy9U
ZXN0RXhwZWN0YXRpb25zJ10pCisgICAgICAgICAgICBmaWxlX3JlYWRlci5kb19hc3NvY2lhdGlv
bl9jaGVjaygnL21vY2stY2hlY2tvdXQnLCBob3N0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNjb3BlLmNhcHR1cmVkX291dHB1dCwgKCcnLCAnJywgJycpKQorCisgICAgZGVmIHRlc3RfbGlu
dGVyX2RlbGV0ZWRfZmlsZShzZWxmKToKKyAgICAgICAgZmlsZXMgPSB7CisgICAgICAgICAgICAn
L21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucyc6CisgICAgICAgICAg
ICAnIyBUZXN0RXhwZWN0YXRpb25zXG5jc3MxL2RlbGV0ZWQtdGVzdC5odG1sIFsgRmFpbHVyZSBd
XG4nfQorICAgICAgICBob3N0ID0gc2VsZi5fZ2VuZXJhdGVfdGVzdGluZ19ob3N0KGZpbGVzKQor
ICAgICAgICBob3N0ID0gc2VsZi5fZ2VuZXJhdGVfdGVzdGluZ19ob3N0KGZpbGVzKQorCisgICAg
ICAgIHNjb3BlID0gT3V0cHV0Q2FwdHVyZVNjb3BlKCkKKyAgICAgICAgd2l0aCBzY29wZToKKyAg
ICAgICAgICAgIGZpbGVfcmVhZGVyID0gc2VsZi5fZ2VuZXJhdGVfZmlsZV9yZWFkZXIoaG9zdC5m
aWxlc3lzdGVtKQorICAgICAgICAgICAgZmlsZV9yZWFkZXIuZGVsZXRlX2ZpbGUoJy9tb2NrLWNo
ZWNrb3V0L0xheW91dFRlc3RzL2NzczEvZGVsZXRlZC10ZXN0Lmh0bWwnKQorICAgICAgICAgICAg
ZmlsZV9yZWFkZXIuZG9fYXNzb2NpYXRpb25fY2hlY2soJy9tb2NrLWNoZWNrb3V0JywgaG9zdCkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNjb3BlLmNhcHR1cmVkX291
dHB1dCwKKyAgICAgICAgICAgICgnJywgJycsICcvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9U
ZXN0RXhwZWN0YXRpb25zOjI6ICBQYXRoIGRvZXMgbm90IGV4aXN0LiAgW3Rlc3QvZXhwZWN0YXRp
b25zXSBbNV1cbicpKQorCisgICAgZGVmIHRlc3RfbGludGVyX2RlbGV0ZWRfZmlsZV9ub19lZGl0
KHNlbGYpOgorICAgICAgICBmaWxlcyA9IHsKKyAgICAgICAgICAgICcvbW9jay1jaGVja291dC9M
YXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zJzoKKyAgICAgICAgICAgICcjIFRlc3RFeHBlY3Rh
dGlvbnNcbmNzczEvZGVsZXRlZC10ZXN0Lmh0bWwgWyBGYWlsdXJlIF1cbid9CisgICAgICAgIGhv
c3QgPSBzZWxmLl9nZW5lcmF0ZV90ZXN0aW5nX2hvc3QoZmlsZXMpCisKKyAgICAgICAgc2NvcGUg
PSBPdXRwdXRDYXB0dXJlU2NvcGUoKQorICAgICAgICB3aXRoIHNjb3BlOgorICAgICAgICAgICAg
ZmlsZV9yZWFkZXIgPSBzZWxmLl9nZW5lcmF0ZV9maWxlX3JlYWRlcihob3N0LmZpbGVzeXN0ZW0p
CisgICAgICAgICAgICBmaWxlX3JlYWRlci5kZWxldGVfZmlsZSgnL21vY2stY2hlY2tvdXQvTGF5
b3V0VGVzdHMvY3NzMS9vdGhlci1kZWxldGVkLXRlc3QuaHRtbCcpCisgICAgICAgICAgICBmaWxl
X3JlYWRlci5kb19hc3NvY2lhdGlvbl9jaGVjaygnL21vY2stY2hlY2tvdXQnLCBob3N0KQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHNjb3BlLmNhcHR1cmVkX291dHB1dCwgKCcnLCAnJywgJycp
KQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9wYXRjaHJlYWRlci5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL3BhdGNocmVhZGVyLnB5CShy
ZXZpc2lvbiAyMTk2NDIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL3BhdGNocmVh
ZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw4IEBAIGNsYXNzIFBhdGNoUmVhZGVy
KG9iamVjdCk6CiAgICAgICAgICAgICAgICAgIyBEb24ndCBjaGVjayBmaWxlcyB3aGljaCBjb250
YWluIG9ubHkgZGVsZXRlZCBsaW5lcwogICAgICAgICAgICAgICAgICMgYXMgdGhleSBjYW4gbmV2
ZXIgYWRkIHN0eWxlIGVycm9ycy4gSG93ZXZlciwgbWFyayB0aGVtIGFzCiAgICAgICAgICAgICAg
ICAgIyBwcm9jZXNzZWQgc28gdGhhdCB3ZSBjb3VudCB1cCBudW1iZXIgb2Ygc3VjaCBmaWxlcy4K
LSAgICAgICAgICAgICAgICBzZWxmLl90ZXh0X2ZpbGVfcmVhZGVyLmNvdW50X2RlbGV0ZV9vbmx5
X2ZpbGUoKQorICAgICAgICAgICAgICAgIHNlbGYuX3RleHRfZmlsZV9yZWFkZXIuZGVsZXRlX2Zp
bGUocGF0aCkKICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICBzZWxmLl90
ZXh0X2ZpbGVfcmVhZGVyLnByb2Nlc3NfZmlsZShmaWxlX3BhdGg9cGF0aCwgbGluZV9udW1iZXJz
PWxpbmVfbnVtYmVycykKKyAgICAgICAgc2VsZi5fdGV4dF9maWxlX3JlYWRlci5kb19hc3NvY2lh
dGlvbl9jaGVjayhmcy5nZXRjd2QoKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5
bGUvcGF0Y2hyZWFkZXJfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9wYXRjaHJlYWRlcl91bml0dGVzdC5weQkocmV2aXNpb24gMjE5NjQyKQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9wYXRjaHJlYWRlcl91bml0dGVzdC5weQko
d29ya2luZyBjb3B5KQpAQCAtNDUsMTQgKzQ1LDE3IEBAIGNsYXNzIFBhdGNoUmVhZGVyVGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSkKICAgICAgICAgICAgIHNlbGYucGFzc2VkX3RvX3Byb2Nlc3NfZmls
ZSA9IFtdCiAgICAgICAgICAgICAiIiJBIGxpc3Qgb2YgKGZpbGVfcGF0aCwgbGluZV9udW1iZXJz
KSBwYWlycy4iIiIKICAgICAgICAgICAgIHNlbGYuZGVsZXRlX29ubHlfZmlsZV9jb3VudCA9IDAK
LSAgICAgICAgICAgICIiIkEgbnVtYmVyIG9mIHRpbWVzIGNvdW50X2RlbGV0ZV9vbmx5X2ZpbGUo
KSBjYWxsZWQiIiIKKyAgICAgICAgICAgICIiIkEgbnVtYmVyIG9mIHRpbWVzIGRlbGV0ZV9maWxl
KCkgY2FsbGVkIiIiCiAKICAgICAgICAgZGVmIHByb2Nlc3NfZmlsZShzZWxmLCBmaWxlX3BhdGgs
IGxpbmVfbnVtYmVycyk6CiAgICAgICAgICAgICBzZWxmLnBhc3NlZF90b19wcm9jZXNzX2ZpbGUu
YXBwZW5kKChmaWxlX3BhdGgsIGxpbmVfbnVtYmVycykpCiAKLSAgICAgICAgZGVmIGNvdW50X2Rl
bGV0ZV9vbmx5X2ZpbGUoc2VsZik6CisgICAgICAgIGRlZiBkZWxldGVfZmlsZShzZWxmLCBmaWxl
X3BhdGg9Tm9uZSk6CiAgICAgICAgICAgICBzZWxmLmRlbGV0ZV9vbmx5X2ZpbGVfY291bnQgKz0g
MQogCisgICAgICAgIGRlZiBkb19hc3NvY2lhdGlvbl9jaGVjayhzZWxmLCBjd2QpOgorICAgICAg
ICAgICAgcGFzcworCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBmaWxlX3JlYWRlciA9
IHNlbGYuTW9ja1RleHRGaWxlUmVhZGVyKCkKICAgICAgICAgc2VsZi5fZmlsZV9yZWFkZXIgPSBm
aWxlX3JlYWRlcgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy90
ZXN0X2V4cGVjdGF0aW9ucy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXJzL3Rlc3RfZXhwZWN0YXRpb25zLnB5CShyZXZpc2lvbiAyMTk2NDIpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL3Rlc3RfZXhwZWN0YXRpb25z
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw4IEBAIGltcG9ydCBzeXMKIAogZnJvbSBj
b21tb24gaW1wb3J0IFRhYkNoZWNrZXIKIGZyb20gd2Via2l0cHkuY29tbW9uLmhvc3QgaW1wb3J0
IEhvc3QKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2V4cGVjdGF0aW9u
cyBpbXBvcnQgVGVzdEV4cGVjdGF0aW9uUGFyc2VyCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy5tb2RlbHMgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCitmcm9tIHdlYmtpdHB5LnN0eWxlLmVy
cm9yX2hhbmRsZXJzIGltcG9ydCBEZWZhdWx0U3R5bGVFcnJvckhhbmRsZXIKIAogCiBfbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCkBAIC03OCw3ICs3OSw3IEBAIGNsYXNzIFRlc3RF
eHBlY3RhdGlvbnNDaGVja2VyKG9iamVjdCk6CiAgICAgICAgIHBhc3MKIAogICAgIGRlZiBjaGVj
a190ZXN0X2V4cGVjdGF0aW9ucyhzZWxmLCBleHBlY3RhdGlvbnNfc3RyLCB0ZXN0cz1Ob25lKToK
LSAgICAgICAgcGFyc2VyID0gVGVzdEV4cGVjdGF0aW9uUGFyc2VyKHNlbGYuX3BvcnRfb2JqLCB0
ZXN0cywgYWxsb3dfcmViYXNlbGluZV9tb2RpZmllcj1GYWxzZSkKKyAgICAgICAgcGFyc2VyID0g
dGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4cGVjdGF0aW9uUGFyc2VyKHNlbGYuX3BvcnRfb2JqLCB0
ZXN0cywgYWxsb3dfcmViYXNlbGluZV9tb2RpZmllcj1GYWxzZSkKICAgICAgICAgZXhwZWN0YXRp
b25zID0gcGFyc2VyLnBhcnNlKCdleHBlY3RhdGlvbnMnLCBleHBlY3RhdGlvbnNfc3RyKQogCiAg
ICAgICAgIGxldmVsID0gNQpAQCAtOTYsMyArOTcsNTIgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9u
c0NoZWNrZXIob2JqZWN0KToKIAogICAgICAgICAjIFdhcm4gdGFicyBpbiBsaW5lcyBhcyB3ZWxs
CiAgICAgICAgIHNlbGYuY2hlY2tfdGFicyhsaW5lcykKKworICAgIEBzdGF0aWNtZXRob2QKKyAg
ICBkZWYgX3Nob3VsZF9sb2dfbGludGVyX3dhcm5pbmcod2FybmluZywgZmlsZXMsIGN3ZCwgaG9z
dCk6CisgICAgICAgICMgQ2FzZSAxLCB0aGUgbGluZSB0aGUgd2FybmluZyB3YXMgdGllZCB0byBp
cyBpbiBvdXIgcGF0Y2guCisgICAgICAgIGFic19maWxlbmFtZSA9IGhvc3QuZmlsZXN5c3RlbS5q
b2luKGN3ZCwgd2FybmluZy5maWxlbmFtZSkKKyAgICAgICAgaWYgYWJzX2ZpbGVuYW1lIGluIGZp
bGVzIGFuZCAoZmlsZXNbYWJzX2ZpbGVuYW1lXSBpcyBOb25lIG9yIHdhcm5pbmcubGluZV9udW1i
ZXIgaW4gZmlsZXNbYWJzX2ZpbGVuYW1lXSk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisg
ICAgICAgIGZvciBmaWxlLCBsaW5lcyBpbiB3YXJuaW5nLnJlbGF0ZWRfZmlsZXMuaXRlcml0ZW1z
KCk6CisgICAgICAgICAgICBhYnNfZmlsZW5hbWUgPSBob3N0LmZpbGVzeXN0ZW0uam9pbihjd2Qs
IGZpbGUpCisgICAgICAgICAgICBpZiBhYnNfZmlsZW5hbWUgaW4gZmlsZXM6CisgICAgICAgICAg
ICAgICAgIyBDYXNlIDIsIGEgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhlIHdhcm5pbmcgaXMgaW4g
b3VyIHBhdGNoCisgICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyB3aWxsIHJlYWxseSBv
bmx5IGhhcHBlbiBpZiB5b3UgZGVsZXRlIGEgdGVzdC4KKyAgICAgICAgICAgICAgICBpZiBsaW5l
cyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICAg
ICAgICAgIyBDYXNlIDMsIGEgbGluZSBhc3NvY2lhdGVkIHdpdGggdGhlIHdhcm5pbmcgaXMgaW4g
b3VyIHBhdGNoLgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAg
ICAgICAgICAgICBpZiBsaW5lIGluIGZpbGVzW2Fic19maWxlbmFtZV06CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBzdGF0
aWNtZXRob2QKKyAgICBkZWYgbGludF90ZXN0X2V4cGVjdGF0aW9ucyhmaWxlcywgY29uZmlndXJh
dGlvbiwgY3dkLCBpbmNyZW1lbnRfZXJyb3JfY291bnQ9bGFtYmRhOiAwLCBsaW5lX251bWJlcnM9
Tm9uZSwgaG9zdD1Ib3N0KCkpOgorICAgICAgICBlcnJvcl9jb3VudCA9IDAKKyAgICAgICAgZmls
ZXNfbGludGVkID0gc2V0KCkKKyAgICAgICAgcG9ydHNfdG9fbGludCA9IFtob3N0LnBvcnRfZmFj
dG9yeS5nZXQobmFtZSkgZm9yIG5hbWUgaW4gaG9zdC5wb3J0X2ZhY3RvcnkuYWxsX3BvcnRfbmFt
ZXMoKV0KKyAgICAgICAgZm9yIHBvcnQgaW4gcG9ydHNfdG9fbGludDoKKyAgICAgICAgICAgIGZv
ciBleHBlY3RhdGlvbnNfZmlsZSBpbiBwb3J0LmV4cGVjdGF0aW9uc19kaWN0KCkua2V5cygpOgor
ICAgICAgICAgICAgICAgIHN0eWxlX2Vycm9yX2hhbmRsZXIgPSBEZWZhdWx0U3R5bGVFcnJvckhh
bmRsZXIoCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9uc19maWxlLAorICAgICAgICAg
ICAgICAgICAgICBjb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRf
ZXJyb3JfY291bnQsCisgICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtYmVycykKKworICAgICAg
ICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaWYgZXhwZWN0YXRpb25zX2ZpbGUg
aW4gZmlsZXNfbGludGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAg
ICAgICAgICAgICAgICAgZXhwZWN0YXRpb25zID0gdGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4cGVj
dGF0aW9ucygKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICBleHBlY3RhdGlvbnNfdG9fbGludD17ZXhwZWN0YXRpb25zX2ZpbGU6IHBvcnQuZXhw
ZWN0YXRpb25zX2RpY3QoKVtleHBlY3RhdGlvbnNfZmlsZV19KQorICAgICAgICAgICAgICAgICAg
ICBleHBlY3RhdGlvbnMucGFyc2VfYWxsX2V4cGVjdGF0aW9ucygpCisgICAgICAgICAgICAgICAg
ZXhjZXB0IHRlc3RfZXhwZWN0YXRpb25zLlBhcnNlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIHdhcm5pbmcgaW4gZS53YXJuaW5nczoKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIFRlc3RFeHBlY3RhdGlvbnNDaGVja2VyLl9zaG91bGRfbG9nX2xpbnRlcl93YXJuaW5nKHdh
cm5pbmcsIGZpbGVzLCBjd2QsIGhvc3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
eWxlX2Vycm9yX2hhbmRsZXIod2FybmluZy5saW5lX251bWJlciwgJ3Rlc3QvZXhwZWN0YXRpb25z
JywgNSwgd2FybmluZy5lcnJvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9j
b3VudCArPSAxCisgICAgICAgICAgICAgICAgZmlsZXNfbGludGVkLmFkZChleHBlY3RhdGlvbnNf
ZmlsZSkKKyAgICAgICAgcmV0dXJuIGVycm9yX2NvdW50Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315946</attachid>
            <date>2017-07-19 11:53:57 -0700</date>
            <delta_ts>2017-07-19 13:38:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173559-20170719115356.patch</filename>
            <type>text/plain</type>
            <size>10116</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxOTY2MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI1IEBACisyMDE3LTA3LTE5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBsaW50LXRlc3QtZXhwZWN0YXRpb25zIHNob3VsZCBiZSBydW4gZHVyaW5n
IHN0eWxlIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzM1NTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMyODU0OTQxPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZvbGxvdyB1cCBmaXgg
YWRkcmVzc2luZyBzdHlsZSBhbmQgYSBmZXcgbWlub3IgYnVncy4KKworICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9ucy5weToKKyAg
ICAgICAgKFRlc3RFeHBlY3RhdGlvblBhcnNlci5fX2luaXRfXyk6IFVzZSBsYW1iZGEgeDogeCBp
bnN0ZWFkIG9mIHN0cgorICAgICAgICAoVGVzdEV4cGVjdGF0aW9uc01vZGVsLl9faW5pdF9fKTog
TWFrZSBsYW1iZGEgeDogeCB0aGUgZGVmYXVsdCBhcmd1bWVudC4KKyAgICAgICAgKFRlc3RFeHBl
Y3RhdGlvbnNNb2RlbC5fYWxyZWFkeV9zZWVuX2JldHRlcl9tYXRjaCk6IFVzZSBhIHRlbXBvcmFy
eSB2YXJpYWJsZSB0bworICAgICAgICByZWR1Y2UgdGhlIGNhbGxzIG9mIF9zaG9ydGVuX2ZpbGVu
YW1lLCBmaXggbWlub3IgYnVnIGluIGFwcGVuZGluZyB0aGUgY3VycmVudAorICAgICAgICBleHBl
Y3RhdGlvbidzIGxpbmUgbnVtYmVyIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzIG9uZXMuCisgICAg
ICAgIChUZXN0RXhwZWN0YXRpb25zLl9yZXBvcnRfd2FybmluZ3MpOiBDb2xsYXBzZSBjYWxsLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvdGVzdF9leHBlY3RhdGlv
bnMucHk6CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25zQ2hlY2tlci5saW50X3Rlc3RfZXhwZWN0
YXRpb25zKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2ZpbGVyZWFkZXIucHk6
IFJlLXdyaXRlIGNvbW1lbnQuCisgICAgICAgIChUZXh0RmlsZVJlYWRlci5kZWxldGVfZmlsZSk6
IENvbGxhcHNlIGNhbGwuCisKIDIwMTctMDctMTkgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRA
YXBwbGUuY29tPgogCiAgICAgICAgIGxpbnQtdGVzdC1leHBlY3RhdGlvbnMgc2hvdWxkIGJlIHJ1
biBkdXJpbmcgc3R5bGUgY2hlY2tpbmcKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9ucy5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9leHBlY3RhdGlvbnMu
cHkJKHJldmlzaW9uIDIxOTY1OCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9ucy5weQkod29ya2luZyBjb3B5KQpAQCAtOTIsNyAr
OTIsNyBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25QYXJzZXIob2JqZWN0KToKIAogICAgIE1JU1NJ
TkdfQlVHX1dBUk5JTkcgPSAnVGVzdCBsYWNrcyBCVUcgbW9kaWZpZXIuJwogCi0gICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnQsIGZ1bGxfdGVzdF9saXN0LCBhbGxvd19yZWJhc2VsaW5lX21vZGlm
aWVyLCBzaG9ydGVuX2ZpbGVuYW1lPXN0cik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQs
IGZ1bGxfdGVzdF9saXN0LCBhbGxvd19yZWJhc2VsaW5lX21vZGlmaWVyLCBzaG9ydGVuX2ZpbGVu
YW1lPWxhbWJkYSB4OiB4KToKICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2Vs
Zi5fdGVzdF9jb25maWd1cmF0aW9uX2NvbnZlcnRlciA9IFRlc3RDb25maWd1cmF0aW9uQ29udmVy
dGVyKHNldChwb3J0LmFsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKCkpLCBwb3J0LmNvbmZpZ3VyYXRp
b25fc3BlY2lmaWVyX21hY3JvcygpKQogICAgICAgICBpZiBmdWxsX3Rlc3RfbGlzdCBpcyBOb25l
OgpAQCAtNTEyLDcgKzUxMiw3IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbkxpbmUob2JqZWN0KToK
IGNsYXNzIFRlc3RFeHBlY3RhdGlvbnNNb2RlbChvYmplY3QpOgogICAgICIiIlJlcHJlc2VudHMg
cmVsYXRpb25hbCBzdG9yZSBvZiBhbGwgZXhwZWN0YXRpb25zIGFuZCBwcm92aWRlcyBDUlVEIHNl
bWFudGljcyB0byBtYW5hZ2UgaXQuIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc2hvcnRl
bl9maWxlbmFtZT1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2hvcnRlbl9maWxlbmFt
ZT1sYW1iZGEgeDogeCk6CiAgICAgICAgICMgTWFwcyBhIHRlc3QgdG8gaXRzIGxpc3Qgb2YgZXhw
ZWN0YXRpb25zLgogICAgICAgICBzZWxmLl90ZXN0X3RvX2V4cGVjdGF0aW9ucyA9IHt9CiAKQEAg
LTUyNyw3ICs1MjcsNyBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zTW9kZWwob2JqZWN0KToKICAg
ICAgICAgc2VsZi5fdGltZWxpbmVfdG9fdGVzdHMgPSBzZWxmLl9kaWN0X29mX3NldHMoVGVzdEV4
cGVjdGF0aW9ucy5USU1FTElORVMpCiAgICAgICAgIHNlbGYuX3Jlc3VsdF90eXBlX3RvX3Rlc3Rz
ID0gc2VsZi5fZGljdF9vZl9zZXRzKFRlc3RFeHBlY3RhdGlvbnMuUkVTVUxUX1RZUEVTKQogCi0g
ICAgICAgIHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUgPSBzaG9ydGVuX2ZpbGVuYW1lIG9yIChsYW1i
ZGEgeDogeCkKKyAgICAgICAgc2VsZi5fc2hvcnRlbl9maWxlbmFtZSA9IHNob3J0ZW5fZmlsZW5h
bWUKIAogICAgIGRlZiBfZGljdF9vZl9zZXRzKHNlbGYsIHN0cmluZ3NfdG9fY29uc3RhbnRzKToK
ICAgICAgICAgIiIiVGFrZXMgYSBkaWN0IG9mIHN0cmluZ3MtPmNvbnN0YW50cyBhbmQgcmV0dXJu
cyBhIGRpY3QgbWFwcGluZwpAQCAtNzE0LDM5ICs3MTQsNDEgQEAgY2xhc3MgVGVzdEV4cGVjdGF0
aW9uc01vZGVsKG9iamVjdCk6CiAgICAgICAgICMKICAgICAgICAgIyBUbyB1c2UgdGhlICJtb3Jl
IG1vZGlmaWVycyB3aW5zIiBwb2xpY3ksIGNoYW5nZSB0aGUgZXJyb3JzIGZvciBvdmVycmlkZXMK
ICAgICAgICAgIyB0byBiZSB3YXJuaW5ncyBhbmQgcmV0dXJuIEZhbHNlIi4KKyAgICAgICAgc2hv
cnRlbmVkX2V4cGVjdGF0aW9uX2ZpbGUgPSBzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKGV4cGVjdGF0
aW9uX2xpbmUuZmlsZW5hbWUpCisgICAgICAgIHNob3J0ZW5lZF9wcmV2aW91c19leHBlY3RhdGlv
bl9maWxlID0gc2VsZi5fc2hvcnRlbl9maWxlbmFtZShwcmV2X2V4cGVjdGF0aW9uX2xpbmUuZmls
ZW5hbWUpCiAKICAgICAgICAgaWYgcHJldl9leHBlY3RhdGlvbl9saW5lLm1hdGNoaW5nX2NvbmZp
Z3VyYXRpb25zID09IGV4cGVjdGF0aW9uX2xpbmUubWF0Y2hpbmdfY29uZmlndXJhdGlvbnM6CiAg
ICAgICAgICAgICBleHBlY3RhdGlvbl9saW5lLndhcm5pbmdzLmFwcGVuZCgnRHVwbGljYXRlIG9y
IGFtYmlndW91cyBlbnRyeSBsaW5lcyAlczolZCBhbmQgJXM6JWQuJyAlICgKLSAgICAgICAgICAg
ICAgICBzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKHByZXZfZXhwZWN0YXRpb25fbGluZS5maWxlbmFt
ZSksIHByZXZfZXhwZWN0YXRpb25fbGluZS5saW5lX251bWJlciwKLSAgICAgICAgICAgICAgICBz
ZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKGV4cGVjdGF0aW9uX2xpbmUuZmlsZW5hbWUpLCBleHBlY3Rh
dGlvbl9saW5lLmxpbmVfbnVtYmVyKSkKKyAgICAgICAgICAgICAgICBzaG9ydGVuZWRfcHJldmlv
dXNfZXhwZWN0YXRpb25fZmlsZSwgcHJldl9leHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyLAor
ICAgICAgICAgICAgICAgIHNob3J0ZW5lZF9leHBlY3RhdGlvbl9maWxlLCBleHBlY3RhdGlvbl9s
aW5lLmxpbmVfbnVtYmVyKSkKIAogICAgICAgICBlbGlmIHByZXZfZXhwZWN0YXRpb25fbGluZS5t
YXRjaGluZ19jb25maWd1cmF0aW9ucyA+PSBleHBlY3RhdGlvbl9saW5lLm1hdGNoaW5nX2NvbmZp
Z3VyYXRpb25zOgogICAgICAgICAgICAgZXhwZWN0YXRpb25fbGluZS53YXJuaW5ncy5hcHBlbmQo
J01vcmUgc3BlY2lmaWMgZW50cnkgZm9yICVzIG9uIGxpbmUgJXM6JWQgb3ZlcnJpZGVzIGxpbmUg
JXM6JWQuJyAlIChleHBlY3RhdGlvbl9saW5lLm5hbWUsCi0gICAgICAgICAgICAgICAgc2VsZi5f
c2hvcnRlbl9maWxlbmFtZShwcmV2X2V4cGVjdGF0aW9uX2xpbmUuZmlsZW5hbWUpLCBwcmV2X2V4
cGVjdGF0aW9uX2xpbmUubGluZV9udW1iZXIsCi0gICAgICAgICAgICAgICAgc2VsZi5fc2hvcnRl
bl9maWxlbmFtZShleHBlY3RhdGlvbl9saW5lLmZpbGVuYW1lKSwgZXhwZWN0YXRpb25fbGluZS5s
aW5lX251bWJlcikpCisgICAgICAgICAgICAgICAgc2hvcnRlbmVkX3ByZXZpb3VzX2V4cGVjdGF0
aW9uX2ZpbGUsIHByZXZfZXhwZWN0YXRpb25fbGluZS5saW5lX251bWJlciwKKyAgICAgICAgICAg
ICAgICBzaG9ydGVuZWRfZXhwZWN0YXRpb25fZmlsZSwgZXhwZWN0YXRpb25fbGluZS5saW5lX251
bWJlcikpCiAgICAgICAgICAgICAjIEZJWE1FOiByZXR1cm4gRmFsc2UgaWYgd2Ugd2FudCBtb3Jl
IHNwZWNpZmljIHRvIHdpbi4KIAogICAgICAgICBlbGlmIHByZXZfZXhwZWN0YXRpb25fbGluZS5t
YXRjaGluZ19jb25maWd1cmF0aW9ucyA8PSBleHBlY3RhdGlvbl9saW5lLm1hdGNoaW5nX2NvbmZp
Z3VyYXRpb25zOgogICAgICAgICAgICAgZXhwZWN0YXRpb25fbGluZS53YXJuaW5ncy5hcHBlbmQo
J01vcmUgc3BlY2lmaWMgZW50cnkgZm9yICVzIG9uIGxpbmUgJXM6JWQgb3ZlcnJpZGVzIGxpbmUg
JXM6JWQuJyAlIChleHBlY3RhdGlvbl9saW5lLm5hbWUsCi0gICAgICAgICAgICAgICAgc2VsZi5f
c2hvcnRlbl9maWxlbmFtZShleHBlY3RhdGlvbl9saW5lLmZpbGVuYW1lKSwgZXhwZWN0YXRpb25f
bGluZS5saW5lX251bWJlciwKLSAgICAgICAgICAgICAgICBzZWxmLl9zaG9ydGVuX2ZpbGVuYW1l
KHByZXZfZXhwZWN0YXRpb25fbGluZS5maWxlbmFtZSksIHByZXZfZXhwZWN0YXRpb25fbGluZS5s
aW5lX251bWJlcikpCisgICAgICAgICAgICAgICAgc2hvcnRlbmVkX3ByZXZpb3VzX2V4cGVjdGF0
aW9uX2ZpbGUsIGV4cGVjdGF0aW9uX2xpbmUubGluZV9udW1iZXIsCisgICAgICAgICAgICAgICAg
c2hvcnRlbmVkX2V4cGVjdGF0aW9uX2ZpbGUsIHByZXZfZXhwZWN0YXRpb25fbGluZS5saW5lX251
bWJlcikpCiAKICAgICAgICAgZWxpZiBwcmV2X2V4cGVjdGF0aW9uX2xpbmUubWF0Y2hpbmdfY29u
ZmlndXJhdGlvbnMgJiBleHBlY3RhdGlvbl9saW5lLm1hdGNoaW5nX2NvbmZpZ3VyYXRpb25zOgog
ICAgICAgICAgICAgZXhwZWN0YXRpb25fbGluZS53YXJuaW5ncy5hcHBlbmQoJ0VudHJpZXMgZm9y
ICVzIG9uIGxpbmVzICVzOiVkIGFuZCAlczolZCBtYXRjaCBvdmVybGFwcGluZyBzZXRzIG9mIGNv
bmZpZ3VyYXRpb25zLicgJSAoZXhwZWN0YXRpb25fbGluZS5uYW1lLAotICAgICAgICAgICAgICAg
IHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUocHJldl9leHBlY3RhdGlvbl9saW5lLmZpbGVuYW1lKSwg
cHJldl9leHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyLAotICAgICAgICAgICAgICAgIHNlbGYu
X3Nob3J0ZW5fZmlsZW5hbWUoZXhwZWN0YXRpb25fbGluZS5maWxlbmFtZSksIGV4cGVjdGF0aW9u
X2xpbmUubGluZV9udW1iZXIpKQorICAgICAgICAgICAgICAgIHNob3J0ZW5lZF9wcmV2aW91c19l
eHBlY3RhdGlvbl9maWxlLCBwcmV2X2V4cGVjdGF0aW9uX2xpbmUubGluZV9udW1iZXIsCisgICAg
ICAgICAgICAgICAgc2hvcnRlbmVkX2V4cGVjdGF0aW9uX2ZpbGUsIGV4cGVjdGF0aW9uX2xpbmUu
bGluZV9udW1iZXIpKQogCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIENvbmZpZ3VyYXRp
b24gc2V0cyBhcmUgZGlzam9pbnQuCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgICAg
ICBpZiBleHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXMuZ2V0KHNlbGYuX3Nob3J0ZW5fZmls
ZW5hbWUocHJldl9leHBlY3RhdGlvbl9saW5lLmZpbGVuYW1lKSwgTm9uZSkgaXMgTm9uZToKLSAg
ICAgICAgICAgIGV4cGVjdGF0aW9uX2xpbmUucmVsYXRlZF9maWxlc1tzZWxmLl9zaG9ydGVuX2Zp
bGVuYW1lKHByZXZfZXhwZWN0YXRpb25fbGluZS5maWxlbmFtZSldID0gW10KLSAgICAgICAgZXhw
ZWN0YXRpb25fbGluZS5yZWxhdGVkX2ZpbGVzW3NlbGYuX3Nob3J0ZW5fZmlsZW5hbWUocHJldl9l
eHBlY3RhdGlvbl9saW5lLmZpbGVuYW1lKV0uYXBwZW5kKHByZXZfZXhwZWN0YXRpb25fbGluZS5s
aW5lX251bWJlcikKLQotICAgICAgICBpZiBwcmV2X2V4cGVjdGF0aW9uX2xpbmUucmVsYXRlZF9m
aWxlcy5nZXQoc2VsZi5fc2hvcnRlbl9maWxlbmFtZShleHBlY3RhdGlvbl9saW5lLmZpbGVuYW1l
KSwgTm9uZSkgaXMgTm9uZToKLSAgICAgICAgICAgIHByZXZfZXhwZWN0YXRpb25fbGluZS5yZWxh
dGVkX2ZpbGVzW3NlbGYuX3Nob3J0ZW5fZmlsZW5hbWUoZXhwZWN0YXRpb25fbGluZS5maWxlbmFt
ZSldID0gW10KLSAgICAgICAgcHJldl9leHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXNbc2Vs
Zi5fc2hvcnRlbl9maWxlbmFtZShleHBlY3RhdGlvbl9saW5lLmZpbGVuYW1lKV0uYXBwZW5kKHBy
ZXZfZXhwZWN0YXRpb25fbGluZS5saW5lX251bWJlcikKKyAgICAgICAgaWYgZXhwZWN0YXRpb25f
bGluZS5yZWxhdGVkX2ZpbGVzLmdldChzaG9ydGVuZWRfcHJldmlvdXNfZXhwZWN0YXRpb25fZmls
ZSwgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgIGV4cGVjdGF0aW9uX2xpbmUucmVsYXRlZF9m
aWxlc1tzaG9ydGVuZWRfcHJldmlvdXNfZXhwZWN0YXRpb25fZmlsZV0gPSBbXQorICAgICAgICBl
eHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXNbc2hvcnRlbmVkX3ByZXZpb3VzX2V4cGVjdGF0
aW9uX2ZpbGVdLmFwcGVuZChwcmV2X2V4cGVjdGF0aW9uX2xpbmUubGluZV9udW1iZXIpCisKKyAg
ICAgICAgaWYgcHJldl9leHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXMuZ2V0KHNob3J0ZW5l
ZF9leHBlY3RhdGlvbl9maWxlLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgcHJldl9leHBl
Y3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXNbc2hvcnRlbmVkX2V4cGVjdGF0aW9uX2ZpbGVdID0g
W10KKyAgICAgICAgcHJldl9leHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXNbc2hvcnRlbmVk
X2V4cGVjdGF0aW9uX2ZpbGVdLmFwcGVuZChleHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyKQog
CiAgICAgICAgIHJldHVybiBUcnVlCiAKQEAgLTk2NCwxMSArOTY2LDggQEAgY2xhc3MgVGVzdEV4
cGVjdGF0aW9ucyhvYmplY3QpOgogICAgICAgICBmb3IgZXhwZWN0YXRpb24gaW4gc2VsZi5fZXhw
ZWN0YXRpb25zOgogICAgICAgICAgICAgZm9yIHdhcm5pbmcgaW4gZXhwZWN0YXRpb24ud2Fybmlu
Z3M6CiAgICAgICAgICAgICAgICAgd2FybmluZyA9IFRlc3RFeHBlY3RhdGlvbldhcm5pbmcoCi0g
ICAgICAgICAgICAgICAgICAgIHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUoZXhwZWN0YXRpb24uZmls
ZW5hbWUpLAotICAgICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbi5saW5lX251bWJlciwKLSAg
ICAgICAgICAgICAgICAgICAgZXhwZWN0YXRpb24ub3JpZ2luYWxfc3RyaW5nLAotICAgICAgICAg
ICAgICAgICAgICB3YXJuaW5nLAotICAgICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbi5uYW1l
IGlmIGV4cGVjdGF0aW9uLmV4cGVjdGF0aW9ucyBlbHNlIE5vbmUpCisgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUoZXhwZWN0YXRpb24uZmlsZW5hbWUpLCBleHBlY3Rh
dGlvbi5saW5lX251bWJlciwKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0YXRpb24ub3JpZ2lu
YWxfc3RyaW5nLCB3YXJuaW5nLCBleHBlY3RhdGlvbi5uYW1lIGlmIGV4cGVjdGF0aW9uLmV4cGVj
dGF0aW9ucyBlbHNlIE5vbmUpCiAgICAgICAgICAgICAgICAgd2FybmluZy5yZWxhdGVkX2ZpbGVz
ID0gZXhwZWN0YXRpb24ucmVsYXRlZF9maWxlcwogICAgICAgICAgICAgICAgIHdhcm5pbmdzLmFw
cGVuZCh3YXJuaW5nKQogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2ZpbGVy
ZWFkZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9maWxl
cmVhZGVyLnB5CShyZXZpc2lvbiAyMTk2NTgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2ZpbGVyZWFkZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTE1MSwxMSArMTUxLDEwIEBAIGNs
YXNzIFRleHRGaWxlUmVhZGVyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3Byb2Nlc3Nvci5kb19h
c3NvY2lhdGlvbl9jaGVjayhzZWxmLl9maWxlcywgY3dkLCBob3N0PWhvc3QpCiAKICAgICBkZWYg
ZGVsZXRlX2ZpbGUoc2VsZiwgZmlsZV9wYXRoPU5vbmUpOgotICAgICAgICAiIiJDb3VudCB1cCBm
aWxlcyB0aGF0IGNvbnRhaW5zIG9ubHkgZGVsZXRlZCBsaW5lcy4KKyAgICAgICAgIiIiS2VlcCB0
cmFjayBvZiBkZWxldGVkIGZpbGVzLgogCiAgICAgICAgIEZpbGVzIHdoaWNoIGhhcyBubyBtb2Rp
ZmllZCBvciBuZXdseS1hZGRlZCBsaW5lcyBkb24ndCBuZWVkCi0gICAgICAgIHRvIGNoZWNrIHN0
eWxlLCBidXQgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY2hlY2tlZC4gRm9yIHRoYXQKLSAgICAgICAg
cHVycG9zZSwgd2UganVzdCBjb3VudCB1cCB0aGUgbnVtYmVyIG9mIHN1Y2ggZmlsZXMuCisgICAg
ICAgIHRvIGNoZWNrIHN0eWxlLCBidXQgdGhleSBtYXkgZWZmZWN0IHRoZSBhc3NvY2lhdGlvbiBj
aGVjay4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIGZpbGVfcGF0aDoKICAgICAgICAgICAgIHNl
bGYuX2ZpbGVzW3NlbGYuZmlsZXN5c3RlbS5hYnNwYXRoKGZpbGVfcGF0aCldID0gTm9uZQpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy90ZXN0X2V4cGVjdGF0aW9u
cy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJz
L3Rlc3RfZXhwZWN0YXRpb25zLnB5CShyZXZpc2lvbiAyMTk2NTgpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL3Rlc3RfZXhwZWN0YXRpb25zLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0xMjYsMTEgKzEyNiw3IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnNDaGVja2VyKG9i
amVjdCk6CiAgICAgICAgIHBvcnRzX3RvX2xpbnQgPSBbaG9zdC5wb3J0X2ZhY3RvcnkuZ2V0KG5h
bWUpIGZvciBuYW1lIGluIGhvc3QucG9ydF9mYWN0b3J5LmFsbF9wb3J0X25hbWVzKCldCiAgICAg
ICAgIGZvciBwb3J0IGluIHBvcnRzX3RvX2xpbnQ6CiAgICAgICAgICAgICBmb3IgZXhwZWN0YXRp
b25zX2ZpbGUgaW4gcG9ydC5leHBlY3RhdGlvbnNfZGljdCgpLmtleXMoKToKLSAgICAgICAgICAg
ICAgICBzdHlsZV9lcnJvcl9oYW5kbGVyID0gRGVmYXVsdFN0eWxlRXJyb3JIYW5kbGVyKAotICAg
ICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbnNfZmlsZSwKLSAgICAgICAgICAgICAgICAgICAg
Y29uZmlndXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50X2Vycm9yX2NvdW50
LAotICAgICAgICAgICAgICAgICAgICBsaW5lX251bWJlcnMpCisgICAgICAgICAgICAgICAgc3R5
bGVfZXJyb3JfaGFuZGxlciA9IERlZmF1bHRTdHlsZUVycm9ySGFuZGxlcihleHBlY3RhdGlvbnNf
ZmlsZSwgY29uZmlndXJhdGlvbiwgaW5jcmVtZW50X2Vycm9yX2NvdW50LCBsaW5lX251bWJlcnMp
CiAKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGlmIGV4cGVjdGF0
aW9uc19maWxlIGluIGZpbGVzX2xpbnRlZDoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315953</attachid>
            <date>2017-07-19 13:38:41 -0700</date>
            <delta_ts>2017-07-19 16:40:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173559-20170719133841.patch</filename>
            <type>text/plain</type>
            <size>10180</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxOTY2MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI1IEBACisyMDE3LTA3LTE5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBsaW50LXRlc3QtZXhwZWN0YXRpb25zIHNob3VsZCBiZSBydW4gZHVyaW5n
IHN0eWxlIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzM1NTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMyODU0OTQxPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZvbGxvdyB1cCBmaXgg
YWRkcmVzc2luZyBzdHlsZSBhbmQgYSBmZXcgbWlub3IgYnVncy4KKworICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9ucy5weToKKyAg
ICAgICAgKFRlc3RFeHBlY3RhdGlvblBhcnNlci5fX2luaXRfXyk6IFVzZSBsYW1iZGEgeDogeCBp
bnN0ZWFkIG9mIHN0cgorICAgICAgICAoVGVzdEV4cGVjdGF0aW9uc01vZGVsLl9faW5pdF9fKTog
TWFrZSBsYW1iZGEgeDogeCB0aGUgZGVmYXVsdCBhcmd1bWVudC4KKyAgICAgICAgKFRlc3RFeHBl
Y3RhdGlvbnNNb2RlbC5fYWxyZWFkeV9zZWVuX2JldHRlcl9tYXRjaCk6IFVzZSBhIHRlbXBvcmFy
eSB2YXJpYWJsZSB0bworICAgICAgICByZWR1Y2UgdGhlIGNhbGxzIG9mIF9zaG9ydGVuX2ZpbGVu
YW1lLCBmaXggbWlub3IgYnVnIGluIGFwcGVuZGluZyB0aGUgY3VycmVudAorICAgICAgICBleHBl
Y3RhdGlvbidzIGxpbmUgbnVtYmVyIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzIG9uZXMuCisgICAg
ICAgIChUZXN0RXhwZWN0YXRpb25zLl9yZXBvcnRfd2FybmluZ3MpOiBDb2xsYXBzZSBjYWxsLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvdGVzdF9leHBlY3RhdGlv
bnMucHk6CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25zQ2hlY2tlci5saW50X3Rlc3RfZXhwZWN0
YXRpb25zKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2ZpbGVyZWFkZXIucHk6
IFJlLXdyaXRlIGNvbW1lbnQuCisgICAgICAgIChUZXh0RmlsZVJlYWRlci5kZWxldGVfZmlsZSk6
IENvbGxhcHNlIGNhbGwuCisKIDIwMTctMDctMTkgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRA
YXBwbGUuY29tPgogCiAgICAgICAgIGxpbnQtdGVzdC1leHBlY3RhdGlvbnMgc2hvdWxkIGJlIHJ1
biBkdXJpbmcgc3R5bGUgY2hlY2tpbmcKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9ucy5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9leHBlY3RhdGlvbnMu
cHkJKHJldmlzaW9uIDIxOTY1OCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9ucy5weQkod29ya2luZyBjb3B5KQpAQCAtOTIsNyAr
OTIsNyBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25QYXJzZXIob2JqZWN0KToKIAogICAgIE1JU1NJ
TkdfQlVHX1dBUk5JTkcgPSAnVGVzdCBsYWNrcyBCVUcgbW9kaWZpZXIuJwogCi0gICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnQsIGZ1bGxfdGVzdF9saXN0LCBhbGxvd19yZWJhc2VsaW5lX21vZGlm
aWVyLCBzaG9ydGVuX2ZpbGVuYW1lPXN0cik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQs
IGZ1bGxfdGVzdF9saXN0LCBhbGxvd19yZWJhc2VsaW5lX21vZGlmaWVyLCBzaG9ydGVuX2ZpbGVu
YW1lPWxhbWJkYSB4OiB4KToKICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2Vs
Zi5fdGVzdF9jb25maWd1cmF0aW9uX2NvbnZlcnRlciA9IFRlc3RDb25maWd1cmF0aW9uQ29udmVy
dGVyKHNldChwb3J0LmFsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKCkpLCBwb3J0LmNvbmZpZ3VyYXRp
b25fc3BlY2lmaWVyX21hY3JvcygpKQogICAgICAgICBpZiBmdWxsX3Rlc3RfbGlzdCBpcyBOb25l
OgpAQCAtNTEyLDcgKzUxMiw3IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbkxpbmUob2JqZWN0KToK
IGNsYXNzIFRlc3RFeHBlY3RhdGlvbnNNb2RlbChvYmplY3QpOgogICAgICIiIlJlcHJlc2VudHMg
cmVsYXRpb25hbCBzdG9yZSBvZiBhbGwgZXhwZWN0YXRpb25zIGFuZCBwcm92aWRlcyBDUlVEIHNl
bWFudGljcyB0byBtYW5hZ2UgaXQuIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc2hvcnRl
bl9maWxlbmFtZT1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2hvcnRlbl9maWxlbmFt
ZT1sYW1iZGEgeDogeCk6CiAgICAgICAgICMgTWFwcyBhIHRlc3QgdG8gaXRzIGxpc3Qgb2YgZXhw
ZWN0YXRpb25zLgogICAgICAgICBzZWxmLl90ZXN0X3RvX2V4cGVjdGF0aW9ucyA9IHt9CiAKQEAg
LTUyNyw3ICs1MjcsNyBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zTW9kZWwob2JqZWN0KToKICAg
ICAgICAgc2VsZi5fdGltZWxpbmVfdG9fdGVzdHMgPSBzZWxmLl9kaWN0X29mX3NldHMoVGVzdEV4
cGVjdGF0aW9ucy5USU1FTElORVMpCiAgICAgICAgIHNlbGYuX3Jlc3VsdF90eXBlX3RvX3Rlc3Rz
ID0gc2VsZi5fZGljdF9vZl9zZXRzKFRlc3RFeHBlY3RhdGlvbnMuUkVTVUxUX1RZUEVTKQogCi0g
ICAgICAgIHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUgPSBzaG9ydGVuX2ZpbGVuYW1lIG9yIChsYW1i
ZGEgeDogeCkKKyAgICAgICAgc2VsZi5fc2hvcnRlbl9maWxlbmFtZSA9IHNob3J0ZW5fZmlsZW5h
bWUKIAogICAgIGRlZiBfZGljdF9vZl9zZXRzKHNlbGYsIHN0cmluZ3NfdG9fY29uc3RhbnRzKToK
ICAgICAgICAgIiIiVGFrZXMgYSBkaWN0IG9mIHN0cmluZ3MtPmNvbnN0YW50cyBhbmQgcmV0dXJu
cyBhIGRpY3QgbWFwcGluZwpAQCAtNzE0LDM5ICs3MTQsNDEgQEAgY2xhc3MgVGVzdEV4cGVjdGF0
aW9uc01vZGVsKG9iamVjdCk6CiAgICAgICAgICMKICAgICAgICAgIyBUbyB1c2UgdGhlICJtb3Jl
IG1vZGlmaWVycyB3aW5zIiBwb2xpY3ksIGNoYW5nZSB0aGUgZXJyb3JzIGZvciBvdmVycmlkZXMK
ICAgICAgICAgIyB0byBiZSB3YXJuaW5ncyBhbmQgcmV0dXJuIEZhbHNlIi4KKyAgICAgICAgc2hv
cnRlbmVkX2V4cGVjdGF0aW9uX2ZpbGVuYW1lID0gc2VsZi5fc2hvcnRlbl9maWxlbmFtZShleHBl
Y3RhdGlvbl9saW5lLmZpbGVuYW1lKQorICAgICAgICBzaG9ydGVuZWRfcHJldmlvdXNfZXhwZWN0
YXRpb25fZmlsZW5hbWUgPSBzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKHByZXZfZXhwZWN0YXRpb25f
bGluZS5maWxlbmFtZSkKIAogICAgICAgICBpZiBwcmV2X2V4cGVjdGF0aW9uX2xpbmUubWF0Y2hp
bmdfY29uZmlndXJhdGlvbnMgPT0gZXhwZWN0YXRpb25fbGluZS5tYXRjaGluZ19jb25maWd1cmF0
aW9uczoKICAgICAgICAgICAgIGV4cGVjdGF0aW9uX2xpbmUud2FybmluZ3MuYXBwZW5kKCdEdXBs
aWNhdGUgb3IgYW1iaWd1b3VzIGVudHJ5IGxpbmVzICVzOiVkIGFuZCAlczolZC4nICUgKAotICAg
ICAgICAgICAgICAgIHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUocHJldl9leHBlY3RhdGlvbl9saW5l
LmZpbGVuYW1lKSwgcHJldl9leHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyLAotICAgICAgICAg
ICAgICAgIHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUoZXhwZWN0YXRpb25fbGluZS5maWxlbmFtZSks
IGV4cGVjdGF0aW9uX2xpbmUubGluZV9udW1iZXIpKQorICAgICAgICAgICAgICAgIHNob3J0ZW5l
ZF9wcmV2aW91c19leHBlY3RhdGlvbl9maWxlbmFtZSwgcHJldl9leHBlY3RhdGlvbl9saW5lLmxp
bmVfbnVtYmVyLAorICAgICAgICAgICAgICAgIHNob3J0ZW5lZF9leHBlY3RhdGlvbl9maWxlbmFt
ZSwgZXhwZWN0YXRpb25fbGluZS5saW5lX251bWJlcikpCiAKICAgICAgICAgZWxpZiBwcmV2X2V4
cGVjdGF0aW9uX2xpbmUubWF0Y2hpbmdfY29uZmlndXJhdGlvbnMgPj0gZXhwZWN0YXRpb25fbGlu
ZS5tYXRjaGluZ19jb25maWd1cmF0aW9uczoKICAgICAgICAgICAgIGV4cGVjdGF0aW9uX2xpbmUu
d2FybmluZ3MuYXBwZW5kKCdNb3JlIHNwZWNpZmljIGVudHJ5IGZvciAlcyBvbiBsaW5lICVzOiVk
IG92ZXJyaWRlcyBsaW5lICVzOiVkLicgJSAoZXhwZWN0YXRpb25fbGluZS5uYW1lLAotICAgICAg
ICAgICAgICAgIHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUocHJldl9leHBlY3RhdGlvbl9saW5lLmZp
bGVuYW1lKSwgcHJldl9leHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyLAotICAgICAgICAgICAg
ICAgIHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUoZXhwZWN0YXRpb25fbGluZS5maWxlbmFtZSksIGV4
cGVjdGF0aW9uX2xpbmUubGluZV9udW1iZXIpKQorICAgICAgICAgICAgICAgIHNob3J0ZW5lZF9w
cmV2aW91c19leHBlY3RhdGlvbl9maWxlbmFtZSwgcHJldl9leHBlY3RhdGlvbl9saW5lLmxpbmVf
bnVtYmVyLAorICAgICAgICAgICAgICAgIHNob3J0ZW5lZF9leHBlY3RhdGlvbl9maWxlbmFtZSwg
ZXhwZWN0YXRpb25fbGluZS5saW5lX251bWJlcikpCiAgICAgICAgICAgICAjIEZJWE1FOiByZXR1
cm4gRmFsc2UgaWYgd2Ugd2FudCBtb3JlIHNwZWNpZmljIHRvIHdpbi4KIAogICAgICAgICBlbGlm
IHByZXZfZXhwZWN0YXRpb25fbGluZS5tYXRjaGluZ19jb25maWd1cmF0aW9ucyA8PSBleHBlY3Rh
dGlvbl9saW5lLm1hdGNoaW5nX2NvbmZpZ3VyYXRpb25zOgogICAgICAgICAgICAgZXhwZWN0YXRp
b25fbGluZS53YXJuaW5ncy5hcHBlbmQoJ01vcmUgc3BlY2lmaWMgZW50cnkgZm9yICVzIG9uIGxp
bmUgJXM6JWQgb3ZlcnJpZGVzIGxpbmUgJXM6JWQuJyAlIChleHBlY3RhdGlvbl9saW5lLm5hbWUs
Ci0gICAgICAgICAgICAgICAgc2VsZi5fc2hvcnRlbl9maWxlbmFtZShleHBlY3RhdGlvbl9saW5l
LmZpbGVuYW1lKSwgZXhwZWN0YXRpb25fbGluZS5saW5lX251bWJlciwKLSAgICAgICAgICAgICAg
ICBzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKHByZXZfZXhwZWN0YXRpb25fbGluZS5maWxlbmFtZSks
IHByZXZfZXhwZWN0YXRpb25fbGluZS5saW5lX251bWJlcikpCisgICAgICAgICAgICAgICAgc2hv
cnRlbmVkX2V4cGVjdGF0aW9uX2ZpbGVuYW1lLCBleHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVy
LAorICAgICAgICAgICAgICAgIHNob3J0ZW5lZF9wcmV2aW91c19leHBlY3RhdGlvbl9maWxlbmFt
ZSwgcHJldl9leHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyKSkKIAogICAgICAgICBlbGlmIHBy
ZXZfZXhwZWN0YXRpb25fbGluZS5tYXRjaGluZ19jb25maWd1cmF0aW9ucyAmIGV4cGVjdGF0aW9u
X2xpbmUubWF0Y2hpbmdfY29uZmlndXJhdGlvbnM6CiAgICAgICAgICAgICBleHBlY3RhdGlvbl9s
aW5lLndhcm5pbmdzLmFwcGVuZCgnRW50cmllcyBmb3IgJXMgb24gbGluZXMgJXM6JWQgYW5kICVz
OiVkIG1hdGNoIG92ZXJsYXBwaW5nIHNldHMgb2YgY29uZmlndXJhdGlvbnMuJyAlIChleHBlY3Rh
dGlvbl9saW5lLm5hbWUsCi0gICAgICAgICAgICAgICAgc2VsZi5fc2hvcnRlbl9maWxlbmFtZShw
cmV2X2V4cGVjdGF0aW9uX2xpbmUuZmlsZW5hbWUpLCBwcmV2X2V4cGVjdGF0aW9uX2xpbmUubGlu
ZV9udW1iZXIsCi0gICAgICAgICAgICAgICAgc2VsZi5fc2hvcnRlbl9maWxlbmFtZShleHBlY3Rh
dGlvbl9saW5lLmZpbGVuYW1lKSwgZXhwZWN0YXRpb25fbGluZS5saW5lX251bWJlcikpCisgICAg
ICAgICAgICAgICAgc2hvcnRlbmVkX3ByZXZpb3VzX2V4cGVjdGF0aW9uX2ZpbGVuYW1lLCBwcmV2
X2V4cGVjdGF0aW9uX2xpbmUubGluZV9udW1iZXIsCisgICAgICAgICAgICAgICAgc2hvcnRlbmVk
X2V4cGVjdGF0aW9uX2ZpbGVuYW1lLCBleHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyKSkKIAog
ICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBDb25maWd1cmF0aW9uIHNldHMgYXJlIGRpc2pv
aW50LgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICAgICAgaWYgZXhwZWN0YXRpb25f
bGluZS5yZWxhdGVkX2ZpbGVzLmdldChzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKHByZXZfZXhwZWN0
YXRpb25fbGluZS5maWxlbmFtZSksIE5vbmUpIGlzIE5vbmU6Ci0gICAgICAgICAgICBleHBlY3Rh
dGlvbl9saW5lLnJlbGF0ZWRfZmlsZXNbc2VsZi5fc2hvcnRlbl9maWxlbmFtZShwcmV2X2V4cGVj
dGF0aW9uX2xpbmUuZmlsZW5hbWUpXSA9IFtdCi0gICAgICAgIGV4cGVjdGF0aW9uX2xpbmUucmVs
YXRlZF9maWxlc1tzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKHByZXZfZXhwZWN0YXRpb25fbGluZS5m
aWxlbmFtZSldLmFwcGVuZChwcmV2X2V4cGVjdGF0aW9uX2xpbmUubGluZV9udW1iZXIpCi0KLSAg
ICAgICAgaWYgcHJldl9leHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXMuZ2V0KHNlbGYuX3No
b3J0ZW5fZmlsZW5hbWUoZXhwZWN0YXRpb25fbGluZS5maWxlbmFtZSksIE5vbmUpIGlzIE5vbmU6
Ci0gICAgICAgICAgICBwcmV2X2V4cGVjdGF0aW9uX2xpbmUucmVsYXRlZF9maWxlc1tzZWxmLl9z
aG9ydGVuX2ZpbGVuYW1lKGV4cGVjdGF0aW9uX2xpbmUuZmlsZW5hbWUpXSA9IFtdCi0gICAgICAg
IHByZXZfZXhwZWN0YXRpb25fbGluZS5yZWxhdGVkX2ZpbGVzW3NlbGYuX3Nob3J0ZW5fZmlsZW5h
bWUoZXhwZWN0YXRpb25fbGluZS5maWxlbmFtZSldLmFwcGVuZChwcmV2X2V4cGVjdGF0aW9uX2xp
bmUubGluZV9udW1iZXIpCisgICAgICAgIGlmIGV4cGVjdGF0aW9uX2xpbmUucmVsYXRlZF9maWxl
cy5nZXQoc2hvcnRlbmVkX3ByZXZpb3VzX2V4cGVjdGF0aW9uX2ZpbGVuYW1lLCBOb25lKSBpcyBO
b25lOgorICAgICAgICAgICAgZXhwZWN0YXRpb25fbGluZS5yZWxhdGVkX2ZpbGVzW3Nob3J0ZW5l
ZF9wcmV2aW91c19leHBlY3RhdGlvbl9maWxlbmFtZV0gPSBbXQorICAgICAgICBleHBlY3RhdGlv
bl9saW5lLnJlbGF0ZWRfZmlsZXNbc2hvcnRlbmVkX3ByZXZpb3VzX2V4cGVjdGF0aW9uX2ZpbGVu
YW1lXS5hcHBlbmQocHJldl9leHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyKQorCisgICAgICAg
IGlmIHByZXZfZXhwZWN0YXRpb25fbGluZS5yZWxhdGVkX2ZpbGVzLmdldChzaG9ydGVuZWRfZXhw
ZWN0YXRpb25fZmlsZW5hbWUsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICBwcmV2X2V4cGVj
dGF0aW9uX2xpbmUucmVsYXRlZF9maWxlc1tzaG9ydGVuZWRfZXhwZWN0YXRpb25fZmlsZW5hbWVd
ID0gW10KKyAgICAgICAgcHJldl9leHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXNbc2hvcnRl
bmVkX2V4cGVjdGF0aW9uX2ZpbGVuYW1lXS5hcHBlbmQoZXhwZWN0YXRpb25fbGluZS5saW5lX251
bWJlcikKIAogICAgICAgICByZXR1cm4gVHJ1ZQogCkBAIC05NjQsMTEgKzk2Niw4IEBAIGNsYXNz
IFRlc3RFeHBlY3RhdGlvbnMob2JqZWN0KToKICAgICAgICAgZm9yIGV4cGVjdGF0aW9uIGluIHNl
bGYuX2V4cGVjdGF0aW9uczoKICAgICAgICAgICAgIGZvciB3YXJuaW5nIGluIGV4cGVjdGF0aW9u
Lndhcm5pbmdzOgogICAgICAgICAgICAgICAgIHdhcm5pbmcgPSBUZXN0RXhwZWN0YXRpb25XYXJu
aW5nKAotICAgICAgICAgICAgICAgICAgICBzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKGV4cGVjdGF0
aW9uLmZpbGVuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0YXRpb24ubGluZV9udW1i
ZXIsCi0gICAgICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9uLm9yaWdpbmFsX3N0cmluZywKLSAg
ICAgICAgICAgICAgICAgICAgd2FybmluZywKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0YXRp
b24ubmFtZSBpZiBleHBlY3RhdGlvbi5leHBlY3RhdGlvbnMgZWxzZSBOb25lKQorICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKGV4cGVjdGF0aW9uLmZpbGVuYW1lKSwg
ZXhwZWN0YXRpb24ubGluZV9udW1iZXIsCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9u
Lm9yaWdpbmFsX3N0cmluZywgd2FybmluZywgZXhwZWN0YXRpb24ubmFtZSBpZiBleHBlY3RhdGlv
bi5leHBlY3RhdGlvbnMgZWxzZSBOb25lKQogICAgICAgICAgICAgICAgIHdhcm5pbmcucmVsYXRl
ZF9maWxlcyA9IGV4cGVjdGF0aW9uLnJlbGF0ZWRfZmlsZXMKICAgICAgICAgICAgICAgICB3YXJu
aW5ncy5hcHBlbmQod2FybmluZykKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHls
ZS9maWxlcmVhZGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5
bGUvZmlsZXJlYWRlci5weQkocmV2aXNpb24gMjE5NjU4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9maWxlcmVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsMTEgKzE1MSwx
MCBAQCBjbGFzcyBUZXh0RmlsZVJlYWRlcihvYmplY3QpOgogICAgICAgICBzZWxmLl9wcm9jZXNz
b3IuZG9fYXNzb2NpYXRpb25fY2hlY2soc2VsZi5fZmlsZXMsIGN3ZCwgaG9zdD1ob3N0KQogCiAg
ICAgZGVmIGRlbGV0ZV9maWxlKHNlbGYsIGZpbGVfcGF0aD1Ob25lKToKLSAgICAgICAgIiIiQ291
bnQgdXAgZmlsZXMgdGhhdCBjb250YWlucyBvbmx5IGRlbGV0ZWQgbGluZXMuCisgICAgICAgICIi
IktlZXAgdHJhY2sgb2YgZGVsZXRlZCBmaWxlcy4KIAogICAgICAgICBGaWxlcyB3aGljaCBoYXMg
bm8gbW9kaWZpZWQgb3IgbmV3bHktYWRkZWQgbGluZXMgZG9uJ3QgbmVlZAotICAgICAgICB0byBj
aGVjayBzdHlsZSwgYnV0IHNob3VsZCBiZSB0cmVhdGVkIGFzIGNoZWNrZWQuIEZvciB0aGF0Ci0g
ICAgICAgIHB1cnBvc2UsIHdlIGp1c3QgY291bnQgdXAgdGhlIG51bWJlciBvZiBzdWNoIGZpbGVz
LgorICAgICAgICB0byBjaGVjayBzdHlsZSwgYnV0IHRoZXkgbWF5IGVmZmVjdCB0aGUgYXNzb2Np
YXRpb24gY2hlY2suCiAgICAgICAgICIiIgogICAgICAgICBpZiBmaWxlX3BhdGg6CiAgICAgICAg
ICAgICBzZWxmLl9maWxlc1tzZWxmLmZpbGVzeXN0ZW0uYWJzcGF0aChmaWxlX3BhdGgpXSA9IE5v
bmUKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvdGVzdF9leHBl
Y3RhdGlvbnMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9j
aGVja2Vycy90ZXN0X2V4cGVjdGF0aW9ucy5weQkocmV2aXNpb24gMjE5NjU4KQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy90ZXN0X2V4cGVjdGF0aW9ucy5weQkod29y
a2luZyBjb3B5KQpAQCAtMTI2LDExICsxMjYsNyBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zQ2hl
Y2tlcihvYmplY3QpOgogICAgICAgICBwb3J0c190b19saW50ID0gW2hvc3QucG9ydF9mYWN0b3J5
LmdldChuYW1lKSBmb3IgbmFtZSBpbiBob3N0LnBvcnRfZmFjdG9yeS5hbGxfcG9ydF9uYW1lcygp
XQogICAgICAgICBmb3IgcG9ydCBpbiBwb3J0c190b19saW50OgogICAgICAgICAgICAgZm9yIGV4
cGVjdGF0aW9uc19maWxlIGluIHBvcnQuZXhwZWN0YXRpb25zX2RpY3QoKS5rZXlzKCk6Ci0gICAg
ICAgICAgICAgICAgc3R5bGVfZXJyb3JfaGFuZGxlciA9IERlZmF1bHRTdHlsZUVycm9ySGFuZGxl
cigKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0YXRpb25zX2ZpbGUsCi0gICAgICAgICAgICAg
ICAgICAgIGNvbmZpZ3VyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgIGluY3JlbWVudF9lcnJv
cl9jb3VudCwKLSAgICAgICAgICAgICAgICAgICAgbGluZV9udW1iZXJzKQorICAgICAgICAgICAg
ICAgIHN0eWxlX2Vycm9yX2hhbmRsZXIgPSBEZWZhdWx0U3R5bGVFcnJvckhhbmRsZXIoZXhwZWN0
YXRpb25zX2ZpbGUsIGNvbmZpZ3VyYXRpb24sIGluY3JlbWVudF9lcnJvcl9jb3VudCwgbGluZV9u
dW1iZXJzKQogCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBpZiBl
eHBlY3RhdGlvbnNfZmlsZSBpbiBmaWxlc19saW50ZWQ6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315960</attachid>
            <date>2017-07-19 16:40:07 -0700</date>
            <delta_ts>2017-07-20 09:21:44 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-173559-20170719164006.patch</filename>
            <type>text/plain</type>
            <size>11116</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxOTY2NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI4IEBACisyMDE3LTA3LTE5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBsaW50LXRlc3QtZXhwZWN0YXRpb25zIHNob3VsZCBiZSBydW4gZHVyaW5n
IHN0eWxlIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzM1NTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMyODU0OTQxPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IERhbmllbCBCYXRlcy4KKworICAgICAgICBGb2xsb3cgdXAgZml4IGFk
ZHJlc3Npbmcgc3R5bGUgYW5kIGEgZmV3IG1pbm9yIGJ1Z3MuCisKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9leHBlY3RhdGlvbnMucHk6CisgICAg
ICAgIChUZXN0RXhwZWN0YXRpb25QYXJzZXIuX19pbml0X18pOiBVc2UgbGFtYmRhIHg6IHggaW5z
dGVhZCBvZiBzdHIKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnNNb2RlbC5fX2luaXRfXyk6IE1h
a2UgbGFtYmRhIHg6IHggdGhlIGRlZmF1bHQgYXJndW1lbnQuCisgICAgICAgIChUZXN0RXhwZWN0
YXRpb25zTW9kZWwuX2FscmVhZHlfc2Vlbl9iZXR0ZXJfbWF0Y2gpOiBVc2UgYSB0ZW1wb3Jhcnkg
dmFyaWFibGUgdG8KKyAgICAgICAgcmVkdWNlIHRoZSBjYWxscyBvZiBfc2hvcnRlbl9maWxlbmFt
ZSwgZml4IG1pbm9yIGJ1ZyBpbiBhcHBlbmRpbmcgdGhlIGN1cnJlbnQKKyAgICAgICAgZXhwZWN0
YXRpb24ncyBsaW5lIG51bWJlciBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBvbmVzLCBjbGFyaWZ5
IHRyZWF0bWVudCBvZiBOb25lCisgICAgICAgIGluIGZpbGUtdG8tbGluZS1udW1iZXIgbWFwcGlu
Zy4KKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnMuX3JlcG9ydF93YXJuaW5ncyk6IENvbGxhcHNl
IGNhbGwuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy90ZXN0X2V4
cGVjdGF0aW9ucy5weToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnNDaGVja2VyLmxpbnRfdGVz
dF9leHBlY3RhdGlvbnMpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvZmlsZXJl
YWRlci5weTogUmUtd3JpdGUgY29tbWVudC4KKyAgICAgICAgKFRleHRGaWxlUmVhZGVyLnByb2Nl
c3NfZmlsZSk6IEFkZCBjb21tZW50IGV4cGxhaW5pbmcgdHJlYXRtZW50IG9mIE5vbmUgaW4KKyAg
ICAgICAgZmlsZS10by1saW5lLW51bWJlciBtYXBwaW5nLgorICAgICAgICAoVGV4dEZpbGVSZWFk
ZXIuZGVsZXRlX2ZpbGUpOiBDb2xsYXBzZSBjYWxsLgorCiAyMDE3LTA3LTE5ICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBpQm9va3Mgc29tZXRpbWVzIGNyYXNo
ZXMgd2hlbiBjbG9zaW5nIGEgYm9vay4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9ucy5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9leHBlY3RhdGlvbnMu
cHkJKHJldmlzaW9uIDIxOTY2NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9ucy5weQkod29ya2luZyBjb3B5KQpAQCAtOTIsNyAr
OTIsNyBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25QYXJzZXIob2JqZWN0KToKIAogICAgIE1JU1NJ
TkdfQlVHX1dBUk5JTkcgPSAnVGVzdCBsYWNrcyBCVUcgbW9kaWZpZXIuJwogCi0gICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnQsIGZ1bGxfdGVzdF9saXN0LCBhbGxvd19yZWJhc2VsaW5lX21vZGlm
aWVyLCBzaG9ydGVuX2ZpbGVuYW1lPXN0cik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQs
IGZ1bGxfdGVzdF9saXN0LCBhbGxvd19yZWJhc2VsaW5lX21vZGlmaWVyLCBzaG9ydGVuX2ZpbGVu
YW1lPWxhbWJkYSB4OiB4KToKICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2Vs
Zi5fdGVzdF9jb25maWd1cmF0aW9uX2NvbnZlcnRlciA9IFRlc3RDb25maWd1cmF0aW9uQ29udmVy
dGVyKHNldChwb3J0LmFsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKCkpLCBwb3J0LmNvbmZpZ3VyYXRp
b25fc3BlY2lmaWVyX21hY3JvcygpKQogICAgICAgICBpZiBmdWxsX3Rlc3RfbGlzdCBpcyBOb25l
OgpAQCAtNTEyLDcgKzUxMiw3IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbkxpbmUob2JqZWN0KToK
IGNsYXNzIFRlc3RFeHBlY3RhdGlvbnNNb2RlbChvYmplY3QpOgogICAgICIiIlJlcHJlc2VudHMg
cmVsYXRpb25hbCBzdG9yZSBvZiBhbGwgZXhwZWN0YXRpb25zIGFuZCBwcm92aWRlcyBDUlVEIHNl
bWFudGljcyB0byBtYW5hZ2UgaXQuIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc2hvcnRl
bl9maWxlbmFtZT1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2hvcnRlbl9maWxlbmFt
ZT1sYW1iZGEgeDogeCk6CiAgICAgICAgICMgTWFwcyBhIHRlc3QgdG8gaXRzIGxpc3Qgb2YgZXhw
ZWN0YXRpb25zLgogICAgICAgICBzZWxmLl90ZXN0X3RvX2V4cGVjdGF0aW9ucyA9IHt9CiAKQEAg
LTUyNyw3ICs1MjcsNyBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zTW9kZWwob2JqZWN0KToKICAg
ICAgICAgc2VsZi5fdGltZWxpbmVfdG9fdGVzdHMgPSBzZWxmLl9kaWN0X29mX3NldHMoVGVzdEV4
cGVjdGF0aW9ucy5USU1FTElORVMpCiAgICAgICAgIHNlbGYuX3Jlc3VsdF90eXBlX3RvX3Rlc3Rz
ID0gc2VsZi5fZGljdF9vZl9zZXRzKFRlc3RFeHBlY3RhdGlvbnMuUkVTVUxUX1RZUEVTKQogCi0g
ICAgICAgIHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUgPSBzaG9ydGVuX2ZpbGVuYW1lIG9yIChsYW1i
ZGEgeDogeCkKKyAgICAgICAgc2VsZi5fc2hvcnRlbl9maWxlbmFtZSA9IHNob3J0ZW5fZmlsZW5h
bWUKIAogICAgIGRlZiBfZGljdF9vZl9zZXRzKHNlbGYsIHN0cmluZ3NfdG9fY29uc3RhbnRzKToK
ICAgICAgICAgIiIiVGFrZXMgYSBkaWN0IG9mIHN0cmluZ3MtPmNvbnN0YW50cyBhbmQgcmV0dXJu
cyBhIGRpY3QgbWFwcGluZwpAQCAtNzE0LDM5ICs3MTQsNDAgQEAgY2xhc3MgVGVzdEV4cGVjdGF0
aW9uc01vZGVsKG9iamVjdCk6CiAgICAgICAgICMKICAgICAgICAgIyBUbyB1c2UgdGhlICJtb3Jl
IG1vZGlmaWVycyB3aW5zIiBwb2xpY3ksIGNoYW5nZSB0aGUgZXJyb3JzIGZvciBvdmVycmlkZXMK
ICAgICAgICAgIyB0byBiZSB3YXJuaW5ncyBhbmQgcmV0dXJuIEZhbHNlIi4KKyAgICAgICAgc2hv
cnRlbmVkX2V4cGVjdGF0aW9uX2ZpbGVuYW1lID0gc2VsZi5fc2hvcnRlbl9maWxlbmFtZShleHBl
Y3RhdGlvbl9saW5lLmZpbGVuYW1lKQorICAgICAgICBzaG9ydGVuZWRfcHJldmlvdXNfZXhwZWN0
YXRpb25fZmlsZW5hbWUgPSBzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKHByZXZfZXhwZWN0YXRpb25f
bGluZS5maWxlbmFtZSkKIAogICAgICAgICBpZiBwcmV2X2V4cGVjdGF0aW9uX2xpbmUubWF0Y2hp
bmdfY29uZmlndXJhdGlvbnMgPT0gZXhwZWN0YXRpb25fbGluZS5tYXRjaGluZ19jb25maWd1cmF0
aW9uczoKICAgICAgICAgICAgIGV4cGVjdGF0aW9uX2xpbmUud2FybmluZ3MuYXBwZW5kKCdEdXBs
aWNhdGUgb3IgYW1iaWd1b3VzIGVudHJ5IGxpbmVzICVzOiVkIGFuZCAlczolZC4nICUgKAotICAg
ICAgICAgICAgICAgIHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUocHJldl9leHBlY3RhdGlvbl9saW5l
LmZpbGVuYW1lKSwgcHJldl9leHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyLAotICAgICAgICAg
ICAgICAgIHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUoZXhwZWN0YXRpb25fbGluZS5maWxlbmFtZSks
IGV4cGVjdGF0aW9uX2xpbmUubGluZV9udW1iZXIpKQorICAgICAgICAgICAgICAgIHNob3J0ZW5l
ZF9wcmV2aW91c19leHBlY3RhdGlvbl9maWxlbmFtZSwgcHJldl9leHBlY3RhdGlvbl9saW5lLmxp
bmVfbnVtYmVyLAorICAgICAgICAgICAgICAgIHNob3J0ZW5lZF9leHBlY3RhdGlvbl9maWxlbmFt
ZSwgZXhwZWN0YXRpb25fbGluZS5saW5lX251bWJlcikpCiAKICAgICAgICAgZWxpZiBwcmV2X2V4
cGVjdGF0aW9uX2xpbmUubWF0Y2hpbmdfY29uZmlndXJhdGlvbnMgPj0gZXhwZWN0YXRpb25fbGlu
ZS5tYXRjaGluZ19jb25maWd1cmF0aW9uczoKICAgICAgICAgICAgIGV4cGVjdGF0aW9uX2xpbmUu
d2FybmluZ3MuYXBwZW5kKCdNb3JlIHNwZWNpZmljIGVudHJ5IGZvciAlcyBvbiBsaW5lICVzOiVk
IG92ZXJyaWRlcyBsaW5lICVzOiVkLicgJSAoZXhwZWN0YXRpb25fbGluZS5uYW1lLAotICAgICAg
ICAgICAgICAgIHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUocHJldl9leHBlY3RhdGlvbl9saW5lLmZp
bGVuYW1lKSwgcHJldl9leHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyLAotICAgICAgICAgICAg
ICAgIHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUoZXhwZWN0YXRpb25fbGluZS5maWxlbmFtZSksIGV4
cGVjdGF0aW9uX2xpbmUubGluZV9udW1iZXIpKQorICAgICAgICAgICAgICAgIHNob3J0ZW5lZF9w
cmV2aW91c19leHBlY3RhdGlvbl9maWxlbmFtZSwgcHJldl9leHBlY3RhdGlvbl9saW5lLmxpbmVf
bnVtYmVyLAorICAgICAgICAgICAgICAgIHNob3J0ZW5lZF9leHBlY3RhdGlvbl9maWxlbmFtZSwg
ZXhwZWN0YXRpb25fbGluZS5saW5lX251bWJlcikpCiAgICAgICAgICAgICAjIEZJWE1FOiByZXR1
cm4gRmFsc2UgaWYgd2Ugd2FudCBtb3JlIHNwZWNpZmljIHRvIHdpbi4KIAogICAgICAgICBlbGlm
IHByZXZfZXhwZWN0YXRpb25fbGluZS5tYXRjaGluZ19jb25maWd1cmF0aW9ucyA8PSBleHBlY3Rh
dGlvbl9saW5lLm1hdGNoaW5nX2NvbmZpZ3VyYXRpb25zOgogICAgICAgICAgICAgZXhwZWN0YXRp
b25fbGluZS53YXJuaW5ncy5hcHBlbmQoJ01vcmUgc3BlY2lmaWMgZW50cnkgZm9yICVzIG9uIGxp
bmUgJXM6JWQgb3ZlcnJpZGVzIGxpbmUgJXM6JWQuJyAlIChleHBlY3RhdGlvbl9saW5lLm5hbWUs
Ci0gICAgICAgICAgICAgICAgc2VsZi5fc2hvcnRlbl9maWxlbmFtZShleHBlY3RhdGlvbl9saW5l
LmZpbGVuYW1lKSwgZXhwZWN0YXRpb25fbGluZS5saW5lX251bWJlciwKLSAgICAgICAgICAgICAg
ICBzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKHByZXZfZXhwZWN0YXRpb25fbGluZS5maWxlbmFtZSks
IHByZXZfZXhwZWN0YXRpb25fbGluZS5saW5lX251bWJlcikpCisgICAgICAgICAgICAgICAgc2hv
cnRlbmVkX2V4cGVjdGF0aW9uX2ZpbGVuYW1lLCBleHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVy
LAorICAgICAgICAgICAgICAgIHNob3J0ZW5lZF9wcmV2aW91c19leHBlY3RhdGlvbl9maWxlbmFt
ZSwgcHJldl9leHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyKSkKIAogICAgICAgICBlbGlmIHBy
ZXZfZXhwZWN0YXRpb25fbGluZS5tYXRjaGluZ19jb25maWd1cmF0aW9ucyAmIGV4cGVjdGF0aW9u
X2xpbmUubWF0Y2hpbmdfY29uZmlndXJhdGlvbnM6CiAgICAgICAgICAgICBleHBlY3RhdGlvbl9s
aW5lLndhcm5pbmdzLmFwcGVuZCgnRW50cmllcyBmb3IgJXMgb24gbGluZXMgJXM6JWQgYW5kICVz
OiVkIG1hdGNoIG92ZXJsYXBwaW5nIHNldHMgb2YgY29uZmlndXJhdGlvbnMuJyAlIChleHBlY3Rh
dGlvbl9saW5lLm5hbWUsCi0gICAgICAgICAgICAgICAgc2VsZi5fc2hvcnRlbl9maWxlbmFtZShw
cmV2X2V4cGVjdGF0aW9uX2xpbmUuZmlsZW5hbWUpLCBwcmV2X2V4cGVjdGF0aW9uX2xpbmUubGlu
ZV9udW1iZXIsCi0gICAgICAgICAgICAgICAgc2VsZi5fc2hvcnRlbl9maWxlbmFtZShleHBlY3Rh
dGlvbl9saW5lLmZpbGVuYW1lKSwgZXhwZWN0YXRpb25fbGluZS5saW5lX251bWJlcikpCisgICAg
ICAgICAgICAgICAgc2hvcnRlbmVkX3ByZXZpb3VzX2V4cGVjdGF0aW9uX2ZpbGVuYW1lLCBwcmV2
X2V4cGVjdGF0aW9uX2xpbmUubGluZV9udW1iZXIsCisgICAgICAgICAgICAgICAgc2hvcnRlbmVk
X2V4cGVjdGF0aW9uX2ZpbGVuYW1lLCBleHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyKSkKIAog
ICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBDb25maWd1cmF0aW9uIHNldHMgYXJlIGRpc2pv
aW50LgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICAgICAgaWYgZXhwZWN0YXRpb25f
bGluZS5yZWxhdGVkX2ZpbGVzLmdldChzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKHByZXZfZXhwZWN0
YXRpb25fbGluZS5maWxlbmFtZSksIE5vbmUpIGlzIE5vbmU6Ci0gICAgICAgICAgICBleHBlY3Rh
dGlvbl9saW5lLnJlbGF0ZWRfZmlsZXNbc2VsZi5fc2hvcnRlbl9maWxlbmFtZShwcmV2X2V4cGVj
dGF0aW9uX2xpbmUuZmlsZW5hbWUpXSA9IFtdCi0gICAgICAgIGV4cGVjdGF0aW9uX2xpbmUucmVs
YXRlZF9maWxlc1tzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKHByZXZfZXhwZWN0YXRpb25fbGluZS5m
aWxlbmFtZSldLmFwcGVuZChwcmV2X2V4cGVjdGF0aW9uX2xpbmUubGluZV9udW1iZXIpCi0KLSAg
ICAgICAgaWYgcHJldl9leHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXMuZ2V0KHNlbGYuX3No
b3J0ZW5fZmlsZW5hbWUoZXhwZWN0YXRpb25fbGluZS5maWxlbmFtZSksIE5vbmUpIGlzIE5vbmU6
Ci0gICAgICAgICAgICBwcmV2X2V4cGVjdGF0aW9uX2xpbmUucmVsYXRlZF9maWxlc1tzZWxmLl9z
aG9ydGVuX2ZpbGVuYW1lKGV4cGVjdGF0aW9uX2xpbmUuZmlsZW5hbWUpXSA9IFtdCi0gICAgICAg
IHByZXZfZXhwZWN0YXRpb25fbGluZS5yZWxhdGVkX2ZpbGVzW3NlbGYuX3Nob3J0ZW5fZmlsZW5h
bWUoZXhwZWN0YXRpb25fbGluZS5maWxlbmFtZSldLmFwcGVuZChwcmV2X2V4cGVjdGF0aW9uX2xp
bmUubGluZV9udW1iZXIpCisgICAgICAgICMgTWlzc2luZyBmaWxlcyB3aWxsIGJlICdOb25lJy4g
SXQgc2hvdWxkIGJlIGltcG9zc2libGUgdG8gaGF2ZSBhIG1pc3NpbmcgZmlsZSB3aGljaCBhbHNv
IGhhcyBhIGxpbmUgYXNzb2NpYXRlZCB3aXRoIGl0LgorICAgICAgICBhc3NlcnQgc2hvcnRlbmVk
X3ByZXZpb3VzX2V4cGVjdGF0aW9uX2ZpbGVuYW1lIG5vdCBpbiBleHBlY3RhdGlvbl9saW5lLnJl
bGF0ZWRfZmlsZXMgb3IgZXhwZWN0YXRpb25fbGluZS5yZWxhdGVkX2ZpbGVzW3Nob3J0ZW5lZF9w
cmV2aW91c19leHBlY3RhdGlvbl9maWxlbmFtZV0gaXMgbm90IE5vbmUKKyAgICAgICAgZXhwZWN0
YXRpb25fbGluZS5yZWxhdGVkX2ZpbGVzW3Nob3J0ZW5lZF9wcmV2aW91c19leHBlY3RhdGlvbl9m
aWxlbmFtZV0gPSBleHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXMuZ2V0KHNob3J0ZW5lZF9w
cmV2aW91c19leHBlY3RhdGlvbl9maWxlbmFtZSwgW10pLmFwcGVuZChwcmV2X2V4cGVjdGF0aW9u
X2xpbmUubGluZV9udW1iZXIpCisKKyAgICAgICAgYXNzZXJ0IHNob3J0ZW5lZF9leHBlY3RhdGlv
bl9maWxlbmFtZSBub3QgaW4gcHJldl9leHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXMgb3Ig
cHJldl9leHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXNbc2hvcnRlbmVkX2V4cGVjdGF0aW9u
X2ZpbGVuYW1lXSBpcyBub3QgTm9uZQorICAgICAgICBwcmV2X2V4cGVjdGF0aW9uX2xpbmUucmVs
YXRlZF9maWxlc1tzaG9ydGVuZWRfZXhwZWN0YXRpb25fZmlsZW5hbWVdID0gcHJldl9leHBlY3Rh
dGlvbl9saW5lLnJlbGF0ZWRfZmlsZXMuZ2V0KHNob3J0ZW5lZF9leHBlY3RhdGlvbl9maWxlbmFt
ZSwgW10pLmFwcGVuZChleHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyKQogCiAgICAgICAgIHJl
dHVybiBUcnVlCiAKQEAgLTk2NCwxMSArOTY1LDggQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9ucyhv
YmplY3QpOgogICAgICAgICBmb3IgZXhwZWN0YXRpb24gaW4gc2VsZi5fZXhwZWN0YXRpb25zOgog
ICAgICAgICAgICAgZm9yIHdhcm5pbmcgaW4gZXhwZWN0YXRpb24ud2FybmluZ3M6CiAgICAgICAg
ICAgICAgICAgd2FybmluZyA9IFRlc3RFeHBlY3RhdGlvbldhcm5pbmcoCi0gICAgICAgICAgICAg
ICAgICAgIHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUoZXhwZWN0YXRpb24uZmlsZW5hbWUpLAotICAg
ICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbi5saW5lX251bWJlciwKLSAgICAgICAgICAgICAg
ICAgICAgZXhwZWN0YXRpb24ub3JpZ2luYWxfc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICB3
YXJuaW5nLAotICAgICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbi5uYW1lIGlmIGV4cGVjdGF0
aW9uLmV4cGVjdGF0aW9ucyBlbHNlIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3No
b3J0ZW5fZmlsZW5hbWUoZXhwZWN0YXRpb24uZmlsZW5hbWUpLCBleHBlY3RhdGlvbi5saW5lX251
bWJlciwKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0YXRpb24ub3JpZ2luYWxfc3RyaW5nLCB3
YXJuaW5nLCBleHBlY3RhdGlvbi5uYW1lIGlmIGV4cGVjdGF0aW9uLmV4cGVjdGF0aW9ucyBlbHNl
IE5vbmUpCiAgICAgICAgICAgICAgICAgd2FybmluZy5yZWxhdGVkX2ZpbGVzID0gZXhwZWN0YXRp
b24ucmVsYXRlZF9maWxlcwogICAgICAgICAgICAgICAgIHdhcm5pbmdzLmFwcGVuZCh3YXJuaW5n
KQogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2ZpbGVyZWFkZXIucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9maWxlcmVhZGVyLnB5CShy
ZXZpc2lvbiAyMTk2NjQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2ZpbGVyZWFk
ZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTExMyw2ICsxMTMsNyBAQCBjbGFzcyBUZXh0RmlsZVJl
YWRlcihvYmplY3QpOgogICAgICAgICBpZiBhYnNfZmlsZV9wYXRoIG5vdCBpbiBzZWxmLl9maWxl
czoKICAgICAgICAgICAgIHNlbGYuX2ZpbGVzW2Fic19maWxlX3BhdGhdID0gTm9uZQogICAgICAg
ICBpZiAnbGluZV9udW1iZXJzJyBpbiBrd2FyZ3M6CisgICAgICAgICAgICAjIERlbGV0ZWQgZmls
ZXMgd2lsbCBiZSAnTm9uZScsIGJ1dCBpZiBhIGZpbGUgaGFzIG1vZGlmaWVkIGxpbmVzLCB0aGlz
IGluZm9ybWF0aW9uIHNob3VsZCBvdmVycmlkZSB0aGUgJ05vbmUnCiAgICAgICAgICAgICBpZiBz
ZWxmLl9maWxlc1thYnNfZmlsZV9wYXRoXSBpcyBOb25lOgogICAgICAgICAgICAgICAgIHNlbGYu
X2ZpbGVzW2Fic19maWxlX3BhdGhdID0gW10KICAgICAgICAgICAgIHNlbGYuX2ZpbGVzW2Fic19m
aWxlX3BhdGhdID0gc2VsZi5fZmlsZXNbYWJzX2ZpbGVfcGF0aF0gKyBrd2FyZ3NbJ2xpbmVfbnVt
YmVycyddCkBAIC0xNTEsMTEgKzE1MiwxMCBAQCBjbGFzcyBUZXh0RmlsZVJlYWRlcihvYmplY3Qp
OgogICAgICAgICBzZWxmLl9wcm9jZXNzb3IuZG9fYXNzb2NpYXRpb25fY2hlY2soc2VsZi5fZmls
ZXMsIGN3ZCwgaG9zdD1ob3N0KQogCiAgICAgZGVmIGRlbGV0ZV9maWxlKHNlbGYsIGZpbGVfcGF0
aD1Ob25lKToKLSAgICAgICAgIiIiQ291bnQgdXAgZmlsZXMgdGhhdCBjb250YWlucyBvbmx5IGRl
bGV0ZWQgbGluZXMuCisgICAgICAgICIiIktlZXAgdHJhY2sgb2YgZGVsZXRlZCBmaWxlcy4KIAog
ICAgICAgICBGaWxlcyB3aGljaCBoYXMgbm8gbW9kaWZpZWQgb3IgbmV3bHktYWRkZWQgbGluZXMg
ZG9uJ3QgbmVlZAotICAgICAgICB0byBjaGVjayBzdHlsZSwgYnV0IHNob3VsZCBiZSB0cmVhdGVk
IGFzIGNoZWNrZWQuIEZvciB0aGF0Ci0gICAgICAgIHB1cnBvc2UsIHdlIGp1c3QgY291bnQgdXAg
dGhlIG51bWJlciBvZiBzdWNoIGZpbGVzLgorICAgICAgICB0byBjaGVjayBzdHlsZSwgYnV0IHRo
ZXkgbWF5IGVmZmVjdCB0aGUgYXNzb2NpYXRpb24gY2hlY2suCiAgICAgICAgICIiIgogICAgICAg
ICBpZiBmaWxlX3BhdGg6CiAgICAgICAgICAgICBzZWxmLl9maWxlc1tzZWxmLmZpbGVzeXN0ZW0u
YWJzcGF0aChmaWxlX3BhdGgpXSA9IE5vbmUKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3R5bGUvY2hlY2tlcnMvdGVzdF9leHBlY3RhdGlvbnMucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy90ZXN0X2V4cGVjdGF0aW9ucy5weQkocmV2
aXNpb24gMjE5NjY0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy90
ZXN0X2V4cGVjdGF0aW9ucy5weQkod29ya2luZyBjb3B5KQpAQCAtMTI2LDExICsxMjYsNyBAQCBj
bGFzcyBUZXN0RXhwZWN0YXRpb25zQ2hlY2tlcihvYmplY3QpOgogICAgICAgICBwb3J0c190b19s
aW50ID0gW2hvc3QucG9ydF9mYWN0b3J5LmdldChuYW1lKSBmb3IgbmFtZSBpbiBob3N0LnBvcnRf
ZmFjdG9yeS5hbGxfcG9ydF9uYW1lcygpXQogICAgICAgICBmb3IgcG9ydCBpbiBwb3J0c190b19s
aW50OgogICAgICAgICAgICAgZm9yIGV4cGVjdGF0aW9uc19maWxlIGluIHBvcnQuZXhwZWN0YXRp
b25zX2RpY3QoKS5rZXlzKCk6Ci0gICAgICAgICAgICAgICAgc3R5bGVfZXJyb3JfaGFuZGxlciA9
IERlZmF1bHRTdHlsZUVycm9ySGFuZGxlcigKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0YXRp
b25zX2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24sCi0gICAgICAgICAg
ICAgICAgICAgIGluY3JlbWVudF9lcnJvcl9jb3VudCwKLSAgICAgICAgICAgICAgICAgICAgbGlu
ZV9udW1iZXJzKQorICAgICAgICAgICAgICAgIHN0eWxlX2Vycm9yX2hhbmRsZXIgPSBEZWZhdWx0
U3R5bGVFcnJvckhhbmRsZXIoZXhwZWN0YXRpb25zX2ZpbGUsIGNvbmZpZ3VyYXRpb24sIGluY3Jl
bWVudF9lcnJvcl9jb3VudCwgbGluZV9udW1iZXJzKQogCiAgICAgICAgICAgICAgICAgdHJ5Ogog
ICAgICAgICAgICAgICAgICAgICBpZiBleHBlY3RhdGlvbnNfZmlsZSBpbiBmaWxlc19saW50ZWQ6
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315992</attachid>
            <date>2017-07-20 09:21:46 -0700</date>
            <delta_ts>2017-07-20 09:30:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173559-20170720092146.patch</filename>
            <type>text/plain</type>
            <size>4111</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxOTY4OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE5IEBACisyMDE3LTA3LTIwICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBsaW50LXRlc3QtZXhwZWN0YXRpb25zIHNob3VsZCBiZSBydW4gZHVyaW5n
IHN0eWxlIGNoZWNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzM1NTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMyODU0OTQxPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfZXhwZWN0YXRpb25zLnB5OgorICAgICAgICAo
VGVzdEV4cGVjdGF0aW9uc01vZGVsLl9hbHJlYWR5X3NlZW5fYmV0dGVyX21hdGNoKTogQXBwZW5k
IHJldHVybnMgJ05vbmUnIHdoZW4gc3VjY2Vzc2Z1bCwKKyAgICAgICAgcHJldmVudHMgaWRlbnRp
ZnlpbmcgZXJyb3JzIG9uIHNwZWNpZmljIGxpbmVzIGluIGEgZmlsZS4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL21haW5fdW5pdHRlc3QucHk6CisgICAgICAgIChFeHBlY3RhdGlv
bkxpbnRlckluU3R5bGVDaGVja2VyVGVzdC50ZXN0X2xpbnRlcl9kdXBsaWNhdGVfbGluZV9lZGl0
X2luX2ZpbGUpOiBUZXN0IGZvciB0aGUKKyAgICAgICAgY2FzZSB3aGVyZSBhIGxpbnRlciBlcnJv
ciBpcyBpbiB0aGUgZmlsZSBtb2RpZmllZCwgYnV0IHRoZSBsaW5lIG1vZGlmaWVkIGlzIG5vdCBy
ZWxhdGVkIHRvCisgICAgICAgIHRoZSBsaW50ZXIgZXJyb3IuCisKIDIwMTctMDctMjAgIEJyYWR5
IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBXZWJJY29uRGF0
YWJhc2UgZnJvbSBXZWJLaXRMZWdhY3kvd2luLgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfZXhwZWN0YXRpb25zLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVjdGF0
aW9ucy5weQkocmV2aXNpb24gMjE5Njg1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbW9kZWxzL3Rlc3RfZXhwZWN0YXRpb25zLnB5CSh3b3JraW5nIGNvcHkpCkBAIC03
NDQsMTAgKzc0NCwxMiBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zTW9kZWwob2JqZWN0KToKIAog
ICAgICAgICAjIE1pc3NpbmcgZmlsZXMgd2lsbCBiZSAnTm9uZScuIEl0IHNob3VsZCBiZSBpbXBv
c3NpYmxlIHRvIGhhdmUgYSBtaXNzaW5nIGZpbGUgd2hpY2ggYWxzbyBoYXMgYSBsaW5lIGFzc29j
aWF0ZWQgd2l0aCBpdC4KICAgICAgICAgYXNzZXJ0IHNob3J0ZW5lZF9wcmV2aW91c19leHBlY3Rh
dGlvbl9maWxlbmFtZSBub3QgaW4gZXhwZWN0YXRpb25fbGluZS5yZWxhdGVkX2ZpbGVzIG9yIGV4
cGVjdGF0aW9uX2xpbmUucmVsYXRlZF9maWxlc1tzaG9ydGVuZWRfcHJldmlvdXNfZXhwZWN0YXRp
b25fZmlsZW5hbWVdIGlzIG5vdCBOb25lCi0gICAgICAgIGV4cGVjdGF0aW9uX2xpbmUucmVsYXRl
ZF9maWxlc1tzaG9ydGVuZWRfcHJldmlvdXNfZXhwZWN0YXRpb25fZmlsZW5hbWVdID0gZXhwZWN0
YXRpb25fbGluZS5yZWxhdGVkX2ZpbGVzLmdldChzaG9ydGVuZWRfcHJldmlvdXNfZXhwZWN0YXRp
b25fZmlsZW5hbWUsIFtdKS5hcHBlbmQocHJldl9leHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVy
KQorICAgICAgICBleHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXNbc2hvcnRlbmVkX3ByZXZp
b3VzX2V4cGVjdGF0aW9uX2ZpbGVuYW1lXSA9IGV4cGVjdGF0aW9uX2xpbmUucmVsYXRlZF9maWxl
cy5nZXQoc2hvcnRlbmVkX3ByZXZpb3VzX2V4cGVjdGF0aW9uX2ZpbGVuYW1lLCBbXSkKKyAgICAg
ICAgZXhwZWN0YXRpb25fbGluZS5yZWxhdGVkX2ZpbGVzW3Nob3J0ZW5lZF9wcmV2aW91c19leHBl
Y3RhdGlvbl9maWxlbmFtZV0uYXBwZW5kKHByZXZfZXhwZWN0YXRpb25fbGluZS5saW5lX251bWJl
cikKIAogICAgICAgICBhc3NlcnQgc2hvcnRlbmVkX2V4cGVjdGF0aW9uX2ZpbGVuYW1lIG5vdCBp
biBwcmV2X2V4cGVjdGF0aW9uX2xpbmUucmVsYXRlZF9maWxlcyBvciBwcmV2X2V4cGVjdGF0aW9u
X2xpbmUucmVsYXRlZF9maWxlc1tzaG9ydGVuZWRfZXhwZWN0YXRpb25fZmlsZW5hbWVdIGlzIG5v
dCBOb25lCi0gICAgICAgIHByZXZfZXhwZWN0YXRpb25fbGluZS5yZWxhdGVkX2ZpbGVzW3Nob3J0
ZW5lZF9leHBlY3RhdGlvbl9maWxlbmFtZV0gPSBwcmV2X2V4cGVjdGF0aW9uX2xpbmUucmVsYXRl
ZF9maWxlcy5nZXQoc2hvcnRlbmVkX2V4cGVjdGF0aW9uX2ZpbGVuYW1lLCBbXSkuYXBwZW5kKGV4
cGVjdGF0aW9uX2xpbmUubGluZV9udW1iZXIpCisgICAgICAgIHByZXZfZXhwZWN0YXRpb25fbGlu
ZS5yZWxhdGVkX2ZpbGVzW3Nob3J0ZW5lZF9leHBlY3RhdGlvbl9maWxlbmFtZV0gPSBwcmV2X2V4
cGVjdGF0aW9uX2xpbmUucmVsYXRlZF9maWxlcy5nZXQoc2hvcnRlbmVkX2V4cGVjdGF0aW9uX2Zp
bGVuYW1lLCBbXSkKKyAgICAgICAgcHJldl9leHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXNb
c2hvcnRlbmVkX2V4cGVjdGF0aW9uX2ZpbGVuYW1lXS5hcHBlbmQoZXhwZWN0YXRpb25fbGluZS5s
aW5lX251bWJlcikKIAogICAgICAgICByZXR1cm4gVHJ1ZQogCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL21haW5fdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9tYWluX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMTk2ODUpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL21haW5fdW5pdHRlc3QucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTE0OSw2ICsxNDksMTkgQEAgY2xhc3MgRXhwZWN0YXRpb25MaW50ZXJJblN0eWxl
Q2hlY2tlclRlcwogICAgICAgICAgICAgZmlsZV9yZWFkZXIuZG9fYXNzb2NpYXRpb25fY2hlY2so
Jy9tb2NrLWNoZWNrb3V0JywgaG9zdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY29wZS5j
YXB0dXJlZF9vdXRwdXQsICgnJywgJycsICcnKSkKIAorICAgIGRlZiB0ZXN0X2xpbnRlcl9kdXBs
aWNhdGVfbGluZV9lZGl0X2luX2ZpbGUoc2VsZik6CisgICAgICAgIGZpbGVzID0geworICAgICAg
ICAgICAgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMnOgorICAg
ICAgICAgICAgICAgICcjIFRlc3RFeHBlY3RhdGlvbnNcbmNzczEvdGVzdC5odG1sIFsgRmFpbHVy
ZSBdXG5jc3MxL3Rlc3QuaHRtbCBbIEZhaWx1cmUgXVxuJ30KKyAgICAgICAgaG9zdCA9IHNlbGYu
X2dlbmVyYXRlX3Rlc3RpbmdfaG9zdChmaWxlcykKKworICAgICAgICBzY29wZSA9IE91dHB1dENh
cHR1cmVTY29wZSgpCisgICAgICAgIHdpdGggc2NvcGU6CisgICAgICAgICAgICBmaWxlX3JlYWRl
ciA9IHNlbGYuX2dlbmVyYXRlX2ZpbGVfcmVhZGVyKGhvc3QuZmlsZXN5c3RlbSkKKyAgICAgICAg
ICAgIGZpbGVfcmVhZGVyLnByb2Nlc3NfZmlsZSgnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMv
VGVzdEV4cGVjdGF0aW9ucycsIGxpbmVfbnVtYmVycz1bMV0pCisgICAgICAgICAgICBmaWxlX3Jl
YWRlci5kb19hc3NvY2lhdGlvbl9jaGVjaygnL21vY2stY2hlY2tvdXQnLCBob3N0KQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNjb3BlLmNhcHR1cmVkX291dHB1dCwgKCcnLCAnJywgJycpKQor
CiAgICAgZGVmIHRlc3RfbGludGVyX2RlbGV0ZWRfZmlsZShzZWxmKToKICAgICAgICAgZmlsZXMg
PSB7CiAgICAgICAgICAgICAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0
aW9ucyc6Cg==
</data>
<flag name="review"
          id="336725"
          type_id="1"
          status="+"
          setter="aakash_jain"
    />
          </attachment>
      

    </bug>

</bugzilla>