<?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>73613</bug_id>
          
          <creation_ts>2011-12-01 19:51:12 -0800</creation_ts>
          <short_desc>[NRWT] reftest should support having multiple references per test</short_desc>
          <delta_ts>2011-12-02 14:58:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>66295</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>hayato</cc>
    
    <cc>ojan</cc>
    
    <cc>stearns</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>513415</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-01 19:51:12 -0800</bug_when>
    <thetext>RIght now new-run-webkit-test supports having exactly one reference file per test. However, this isn&apos;t the case for w3c tests, and we need to support having multiple reference files in order to import w3c tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513423</commentid>
    <comment_count>1</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-01 20:10:03 -0800</bug_when>
    <thetext>Example from http://test.csswg.org/suites/css2.1/20110323/html4/reftest.list:

== block-in-inline-insert-003.htm block-in-inline-insert-003-nosplit-ref.htm
== block-in-inline-insert-003.htm block-in-inline-insert-003-ref.htm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513430</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-01 20:16:27 -0800</bug_when>
    <thetext>Quotation from http://wiki.csswg.org/test/reftest:
&quot;If a test has multiple == references then any of the references may match the test. If a test has multiple != references, then none of those references may match the test. The reference file may also have entries in the manifest, in this case, the renderings of the references must match each other as well in order to consider the test as passed.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513573</commentid>
    <comment_count>3</comment_count>
      <attachid>117581</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-01 23:59:57 -0800</bug_when>
    <thetext>Created attachment 117581
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513576</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-12-02 00:03:15 -0800</bug_when>
    <thetext>Really?  Why?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513579</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-02 00:06:41 -0800</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=66295

Comment #14 From Ryosuke Niwa 2011-11-03 10:01:31 PST (-) [reply] 
(In reply to comment #13)
&gt; Alternatively, we can give a feedback to W3C that we should have exactly one reference file per test. What&apos;s the purpose of having multiple references anyway?

Answer: &quot;In some cases when creating the reference file, it is necessary to use features that, although different from the tested features, may themselves fail in such a manner as to cause the reference to render identically to a failed test. When this is the case, in order to reduce the possibility of false positive testing outcomes, multiple reference files should be used, each using a different technique to render the reference. One possibility is to create one or more references that must not match the test file, i.e.: a file that renders in the same manner as a failed test.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513991</commentid>
    <comment_count>6</comment_count>
      <attachid>117581</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-12-02 11:56:54 -0800</bug_when>
    <thetext>Comment on attachment 117581
Patch

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

The patch looks basically fine. I found a few places where I&apos;d rework things a bit or add comments to make them clearer (at least to me).

&gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:725
&gt; +    def test_reftest_skipped_if_unlisted(self):

It wasn&apos;t immediately clear to me what &quot;unlisted&quot; meant, so I&apos;d probably add a comment here that you&apos;re testing what happens if there&apos;s an old-style reftest found in a directory containing a manifest file.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:70
&gt; +                    _log.error(&apos;The reftest (%s) can not have an expectation file. Please remove (%s).&apos;,

I would probably log this as:

&quot;%s is both a reftest and has an expected output file: %s&quot;

it may be that the test shouldn&apos;t actually be a reftest, rather than that it shouldn&apos;t have the expected output.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:273
&gt; +            # Reftest fails if any mismatch matches; it succeeds if any match matches

I think it would be clearer if you pull this comment up before the for statement, and combine it with the comment on line 267, something like:

# A reftest can have multiple match references and multiple mismatch references; 
# the test fails if any mismatch matches and all of the matches don&apos;t match. 
# To minimize the number of references we have to check, we run all of the mismatches first, then the matches, and short-circuit out as soon as we can.
# Note that sorting by the expectation sorts &quot;!=&quot; before &quot;==&quot; so this is easy to do.

It&apos;s a bit wordy, but the logic is non-obvious to the  uninitiated, so I think it&apos;s worth it to be wordy here.

And then I would get rid of the &quot;putAllMismatchBeforeMatch&quot; variable (which threw me until I realized you were just aliasing &apos;sorted&apos;.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:275
&gt; +                test_result_writer.write_test_result(self._port, self._test_name, test_output, reference_output, test_result.failures)

can this just be a &quot;break&quot;?

&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:446
&gt; +        return reftest_list[filename]

Nit: these last three lines could be just &quot;return reftest_list.get(filename, [])&quot;.

&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:1064
&gt; +            parsed_list[key] = []

Nit: these three lines can be written as &quot;parsed_list.setdefault(key, filesystem.join(...)&quot;. That returns parsed_list[key] as well, so you can actually chain in the next line, but I don&apos;t know if that would be more or less readable in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514057</commentid>
    <comment_count>7</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-12-02 13:20:11 -0800</bug_when>
    <thetext>I agree with Eric, this use-case does not justify the extra complexity. For example, now the dashboard, garden-o-matic, results.html, etc all need to be updated to handle multiple expected results files. I think, in the cases where the w3c test lists use multiple reference files, we should just grab the first one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514059</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-02 13:21:50 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; I agree with Eric, this use-case does not justify the extra complexity. For example, now the dashboard, garden-o-matic, results.html, etc all need to be updated to handle multiple expected results files. I think, in the cases where the w3c test lists use multiple reference files, we should just grab the first one.

I don&apos;t think we can do that unless we don&apos;t mind losing test coverage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514070</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-02 13:37:37 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; I agree with Eric, this use-case does not justify the extra complexity. For example, now the dashboard, garden-o-matic, results.html, etc all need to be updated to handle multiple expected results files. I think, in the cases where the w3c test lists use multiple reference files, we should just grab the first one.

Also note that they don&apos;t really &quot;need&quot; to be updated. Exiting tools should all work because there will still be exactly one actual result per test.  It&apos;s just &quot;nice&quot; if they did show links for all reference files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514073</commentid>
    <comment_count>10</comment_count>
      <attachid>117581</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-02 13:41:31 -0800</bug_when>
    <thetext>Comment on attachment 117581
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:725
&gt;&gt; +    def test_reftest_skipped_if_unlisted(self):
&gt; 
&gt; It wasn&apos;t immediately clear to me what &quot;unlisted&quot; meant, so I&apos;d probably add a comment here that you&apos;re testing what happens if there&apos;s an old-style reftest found in a directory containing a manifest file.

Renamed the test to test_reftest_should_not_use_naming_convention_if_not_listed_in_reftestlist.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:70
&gt;&gt; +                    _log.error(&apos;The reftest (%s) can not have an expectation file. Please remove (%s).&apos;,
&gt; 
&gt; I would probably log this as:
&gt; 
&gt; &quot;%s is both a reftest and has an expected output file: %s&quot;
&gt; 
&gt; it may be that the test shouldn&apos;t actually be a reftest, rather than that it shouldn&apos;t have the expected output.

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:275
&gt;&gt; +                test_result_writer.write_test_result(self._port, self._test_name, test_output, reference_output, test_result.failures)
&gt; 
&gt; can this just be a &quot;break&quot;?

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:446
&gt;&gt; +        return reftest_list[filename]
&gt; 
&gt; Nit: these last three lines could be just &quot;return reftest_list.get(filename, [])&quot;.

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:1064
&gt;&gt; +            parsed_list[key] = []
&gt; 
&gt; Nit: these three lines can be written as &quot;parsed_list.setdefault(key, filesystem.join(...)&quot;. That returns parsed_list[key] as well, so you can actually chain in the next line, but I don&apos;t know if that would be more or less readable in this case.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514074</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-02 13:42:37 -0800</bug_when>
    <thetext>Committed r101845: &lt;http://trac.webkit.org/changeset/101845&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514101</commentid>
    <comment_count>12</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-12-02 13:57:29 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; I agree with Eric, this use-case does not justify the extra complexity. For example, now the dashboard, garden-o-matic, results.html, etc all need to be updated to handle multiple expected results files. I think, in the cases where the w3c test lists use multiple reference files, we should just grab the first one.
&gt; 
&gt; I don&apos;t think we can do that unless we don&apos;t mind losing test coverage.

It&apos;s only a moderate loss in test coverage. It&apos;s worth the simplification to the test harness.

(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; I agree with Eric, this use-case does not justify the extra complexity. For example, now the dashboard, garden-o-matic, results.html, etc all need to be updated to handle multiple expected results files. I think, in the cases where the w3c test lists use multiple reference files, we should just grab the first one.
&gt; 
&gt; Also note that they don&apos;t really &quot;need&quot; to be updated. Exiting tools should all work because there will still be exactly one actual result per test.  It&apos;s just &quot;nice&quot; if they did show links for all reference files.

But all these tolls also show you the expected result and now they&apos;ll need to be updated to show you multiple expected results and multiple diffs. It&apos;s all doable, but it&apos;s non-trivial and considerably complicates the codebase. It makes understanding test failures more complicated as well. Also, I&apos;m not sure who will actually do the work to make it happen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514107</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-02 14:00:55 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #8)
&gt; &gt; I don&apos;t think we can do that unless we don&apos;t mind losing test coverage.
&gt; 
&gt; It&apos;s only a moderate loss in test coverage. It&apos;s worth the simplification to the test harness.

There are many tests in CSS2.1 with multiple reference files.

&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; I agree with Eric, this use-case does not justify the extra complexity. For example, now the dashboard, garden-o-matic, results.html, etc all need to be updated to handle multiple expected results files. I think, in the cases where the w3c test lists use multiple reference files, we should just grab the first one.
&gt; &gt; 
&gt; &gt; Also note that they don&apos;t really &quot;need&quot; to be updated. Exiting tools should all work because there will still be exactly one actual result per test.  It&apos;s just &quot;nice&quot; if they did show links for all reference files.
&gt; 
&gt; But all these tolls also show you the expected result and now they&apos;ll need to be updated to show you multiple expected results and multiple diffs. It&apos;s all doable, but it&apos;s non-trivial and considerably complicates the codebase. It makes understanding test failures more complicated as well. Also, I&apos;m not sure who will actually do the work to make it happen.

There is exactly one diff per test because we bail out as soon as we find one failure. (the order is stable). And the reference file that caused the failure (i.e. the first one that failed) will be reported as the reference_file in the json file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514172</commentid>
    <comment_count>14</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-12-02 14:42:04 -0800</bug_when>
    <thetext>I think there&apos;s a significant value to supporting the w3c test suites fully and as close to as-is as possible. In particular, I think there&apos;s quite a bit of value in capturing the fact that tests can pass multiple different ways (which we can&apos;t today capture with IMAGE tests, only with text-only/script-based tests.

The additional complexity of handling multiple results, at least in NRWT, is smaller than handling the reftest manifest, and in terms of things I&apos;d remove from NRWT if I wanted to reduce the complexity, this isn&apos;t close to the top of the list.

It is true, though, that supporting multiple references may complicate things ... do we care if a test used to match A and passes and now matches B and passes? Or used to match A when it shouldn&apos;t but now matches B when it shouldn&apos;t? Maybe we should have some way of indicating which reference of the allowed set we do expect to match?

Also, what does it mean for garden-o-matic to handle reftests at all? It&apos;s not like you can meaningfully rebaseline them, unless you were to switch which match was expected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514205</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-02 14:58:59 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; I think there&apos;s a significant value to supporting the w3c test suites fully and as close to as-is as possible. In particular, I think there&apos;s quite a bit of value in capturing the fact that tests can pass multiple different ways (which we can&apos;t today capture with IMAGE tests, only with text-only/script-based tests.

Completely agree. That&apos;s the whole rationale behind my patch. If reducing the complexity was so important, then I wouldn&apos;t even support reftest.list and just convert all tests to use naming convention.

&gt; The additional complexity of handling multiple results, at least in NRWT, is smaller than handling the reftest manifest, and in terms of things I&apos;d remove from NRWT if I wanted to reduce the complexity, this isn&apos;t close to the top of the list.

Which is even less than supporting the embedded link elements. Note embedded link elements can specify multiple reference files as well.

&gt; It is true, though, that supporting multiple references may complicate things ... do we care if a test used to match A and passes and now matches B and passes? Or used to match A when it shouldn&apos;t but now matches B when it shouldn&apos;t? Maybe we should have some way of indicating which reference of the allowed set we do expect to match?

That&apos;s a good point. We probably need to revisit that once we have a large number of reftests imported and it becomes an issue for us. On the other hand, flexible test expectation is one of many benefits of reftests.

&gt; Also, what does it mean for garden-o-matic to handle reftests at all? It&apos;s not like you can meaningfully rebaseline them, unless you were to switch which match was expected.

Probably updating test_expectations.txt?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117581</attachid>
            <date>2011-12-01 23:59:57 -0800</date>
            <delta_ts>2011-12-02 13:41:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73613-20111201235956.patch</filename>
            <type>text/plain</type>
            <size>26843</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEwMTc1MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM5IEBACisyMDExLTEyLTAxICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIFtOUldUXSByZWZ0ZXN0IHNob3VsZCBzdXBwb3J0IGhhdmluZyBtdWx0aXBsZSBy
ZWZlcmVuY2VzIHBlciB0ZXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03MzYxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBhIHN1cHBvcnQgZm9yIGhhdmluZyBtdWx0aXBsZSByZWZlcmVuY2UgZmls
ZXMgZm9yIGEgc2luZ2xlIHRlc3QuCisKKyAgICAgICAgQmVjYXVzZSBhIHJlZnRlc3Qgc3VjY2Vl
ZHMgd2hlbiBpdCBtYXRjaGVzIGF0IGxlYXN0IG9uZSBvZiBleHBlY3RlZCBtYXRjaGVzIGFuZCBm
YWlscyB3aGVuIGl0IG1hdGNoZXMKKyAgICAgICAgYXQgbGVhc3Qgb25lIG9mIGV4cGVjdGVkIG1p
c21hdGNoZXMsIHdlIGNvbXBhcmUgZXhwZWN0ZWQgbWlzbWF0Y2hlcyBmaXJzdCBpbiBvcmRlciB0
byBtaW5pbWl6ZQorICAgICAgICB0aGUgbnVtYmVyIG9mIHJlZmVyZW5jZSBmaWxlcyB0byBvcGVu
IG9uIERSVC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRy
b2xsZXJzL21hbmFnZXIucHk6CisgICAgICAgIChpbnRlcnByZXRfdGVzdF9mYWlsdXJlcyk6IFJl
bW92ZSBjaGVja3Mgbm8gbG9uZ2VyIGFwcGxpY2FibGUuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl91bml0dGVzdC5weToKKyAgICAg
ICAgKFJlc3VsdFN1bW1hcnlUZXN0LnRlc3RfaW50ZXJwcmV0X3Rlc3RfZmFpbHVyZXMpOiBEaXR0
by4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9z
aW5nbGVfdGVzdF9ydW5uZXIucHk6CisgICAgICAgIChTaW5nbGVUZXN0UnVubmVyLl9faW5pdF9f
KTogUmVtb3ZlIGEgYnVuY2ggb2YgY29kZSBhbmQganVzdCBjYWxsIHBvcnQucmVmZXJlbmNlX2Zp
bGVzLgorICAgICAgICAoU2luZ2xlVGVzdFJ1bm5lci5fZHJpdmVyX2lucHV0KToKKyAgICAgICAg
KFNpbmdsZVRlc3RSdW5uZXIucnVuKToKKyAgICAgICAgKFNpbmdsZVRlc3RSdW5uZXIuX3J1bl9y
ZWZ0ZXN0KTogQ29tcGFyZSB0aGUgb3V0cHV0IG9mIHRoZSB0ZXN0IHRvIGVhY2ggcmVmZXJlbmNl
IGZpbGUuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rl
c3RfaW5wdXQucHk6CisgICAgICAgIChUZXN0SW5wdXQuX19pbml0X18pOiBSZW1vdmUgcmVmX2Zp
bGUgYW5kIGlzX21pc21hdGNoX3JlZnRlc3QgYmVjYXVzZSB0aGV5IGFyZSBubyBsb25nZXIgdXNl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6
CisgICAgICAgIChQb3J0LnJlZmVyZW5jZV9maWxlcyk6IFJlbmFtZWQgZnJvbSBfcmVmZXJlbmNl
X2ZpbGVfZm9yLiBSZXR1cm5zIGEgbGlzdCBvZiBleHBlY3RhdGlvbiwgZmlsZW5hbWUgcGFpcnMu
CisgICAgICAgIChfcGFyc2VfcmVmdGVzdF9saXN0KTogTm93IHN1cHBvcnRzIHBhcnNpbmcgbXVs
dGlwbGUgZW50cmllcyBmb3IgYSBzaW5nbGUgdGVzdC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2VfdW5pdHRlc3QucHk6CisgICAgICAgIChQb3J0VGVz
dC50ZXN0X3BhcnNlX3JlZnRlc3RfbGlzdCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5OgorICAgICAgICAo
TWFpblRlc3QudGVzdF91bmV4cGVjdGVkX2ZhaWx1cmVzKToKKyAgICAgICAgKE1haW5UZXN0LnRl
c3RfcmVmdGVzdF9za2lwcGVkX2lmX3VubGlzdGVkKTogUmVuYW1lZCBmcm9tIHRlc3RfbWlzc2lu
Z19hbmRfdW5leHBlY3RlZF9yZXN1bHRzLgorICAgICAgICAoRW5kVG9FbmRUZXN0LnRlc3RfZW5k
X3RvX2VuZCk6CisgICAgICAgIChFbmRUb0VuZFRlc3QudGVzdF9yZWZ0ZXN0X3dpdGhfdHdvX25v
dHJlZnMpOiBBZGRlZC4KKwogMjAxMS0xMi0wMSAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRhQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBKU19JTkxJTkUgYW5kIFdURl9JTkxJTkUgc2hvdWxkIGJl
IHZpc2libGUgZnJvbSBXZWJDb3JlCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2lu
dGVncmF0aW9udGVzdC5weQkocmV2aXNpb24gMTAxNzUwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkJKHdv
cmtpbmcgY29weSkKQEAgLTE4NSw2ICsxODUsMTEgQEAgZGVmIGdldF90ZXN0c19ydW4oZXh0cmFf
YXJncz1Ob25lLCB0ZXN0cwogICAgIHJldHVybiB0ZXN0X2JhdGNoZXMKIAogCisjIFVwZGF0ZSB0
aGlzIG1hZ2ljIG51bWJlciBpZiB5b3UgYWRkIGFuIHVuZXhwZWN0ZWQgdGVzdCB0byB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMucG9ydC50ZXN0CisjIEZJWE1FOiBJdCdzIG5pY2UgdG8gaGF2ZSBhIHJv
dXRpbmUgaW4gcG9ydC90ZXN0LnB5IHRoYXQgcmV0dXJucyB0aGlzIG51bWJlci4KK3VuZXhwZWN0
ZWRfdGVzdHNfY291bnQgPSAxMQorCisKIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKICAgICBkZWYgdGVzdF9hY2NlbGVyYXRlZF9jb21wb3NpdGluZyhzZWxmKToKICAgICAgICAg
IyBUaGlzIGp1c3QgdGVzdHMgdGhhdCB3ZSByZWNvZ25pemUgdGhlIGNvbW1hbmQgbGluZSBhcmdz
CkBAIC00MjYsMTAgKzQzMSw2IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
ICAgICAgICAgc2VsZi5fdXJsX29wZW5lZCA9IE5vbmUKICAgICAgICAgcmVzLCBvdXQsIGVyciwg
dXNlciA9IGxvZ2dpbmdfcnVuKHRlc3RzX2luY2x1ZGVkPVRydWUpCiAKLSAgICAgICAgIyBVcGRh
dGUgdGhpcyBtYWdpYyBudW1iZXIgaWYgeW91IGFkZCBhbiB1bmV4cGVjdGVkIHRlc3QgdG8gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQudGVzdAotICAgICAgICAjIEZJWE1FOiBJdCdzIG5pY2Ug
dG8gaGF2ZSBhIHJvdXRpbmUgaW4gcG9ydC90ZXN0LnB5IHRoYXQgcmV0dXJucyB0aGlzIG51bWJl
ci4KLSAgICAgICAgdW5leHBlY3RlZF90ZXN0c19jb3VudCA9IDgKLQogICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHJlcywgdW5leHBlY3RlZF90ZXN0c19jb3VudCkKICAgICAgICAgc2VsZi5hc3Nl
cnRGYWxzZShvdXQuZW1wdHkoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHko
KSkKQEAgLTQ1NCwyMCArNDU1LDYgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2Up
OgogICAgICAgICBzZWxmLmFzc2VydFRydWUoanNvbl9zdHJpbmcuZmluZCgnIm51bV9mbGFreSI6
MCcpICE9IC0xKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoanNvbl9zdHJpbmcuZmluZCgnIm51
bV9taXNzaW5nIjoxJykgIT0gLTEpCiAKLSAgICBkZWYgdGVzdF9taXNzaW5nX2FuZF91bmV4cGVj
dGVkX3Jlc3VsdHMoc2VsZik6Ci0gICAgICAgICMgVGVzdCB0aGF0IHdlIHVwZGF0ZSBleHBlY3Rh
dGlvbnMgaW4gcGxhY2UuIElmIHRoZSBleHBlY3RhdGlvbgotICAgICAgICAjIGlzIG1pc3Npbmcs
IHVwZGF0ZSB0aGUgZXhwZWN0ZWQgZ2VuZXJpYyBsb2NhdGlvbi4KLSAgICAgICAgZnMgPSB1bml0
X3Rlc3RfZmlsZXN5c3RlbSgpCi0gICAgICAgIHJlcywgb3V0LCBlcnIsIF8gPSBsb2dnaW5nX3J1
bihbJy0tbm8tc2hvdy1yZXN1bHRzJywgJ3JlZnRlc3RzL2Zvby8nXSwgdGVzdHNfaW5jbHVkZWQ9
VHJ1ZSwgZmlsZXN5c3RlbT1mcywgcmVjb3JkX3Jlc3VsdHM9VHJ1ZSkKLSAgICAgICAgZmlsZV9s
aXN0ID0gZnMud3JpdHRlbl9maWxlcy5rZXlzKCkKLSAgICAgICAgZmlsZV9saXN0LnJlbW92ZSgn
L3RtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL3Rlc3RzX3J1bjAudHh0JykKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMocmVzLCAxKQotICAgICAgICBqc29uX3N0cmluZyA9IGZzLnJlYWRfdGV4dF9m
aWxlKCcvdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZnVsbF9yZXN1bHRzLmpzb24nKQotICAgICAg
ICBzZWxmLmFzc2VydFRydWUoanNvbl9zdHJpbmcuZmluZCgnInVubGlzdGVkdGVzdC5odG1sIjp7
ImV4cGVjdGVkIjoiUEFTUyIsImlzX21pc3NpbmdfdGV4dCI6dHJ1ZSwiYWN0dWFsIjoiTUlTU0lO
RyIsImlzX21pc3NpbmdfaW1hZ2UiOnRydWV9JykgIT0gLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShqc29uX3N0cmluZy5maW5kKCcibnVtX3JlZ3Jlc3Npb25zIjoxJykgIT0gLTEpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShqc29uX3N0cmluZy5maW5kKCcibnVtX2ZsYWt5IjowJykgIT0g
LTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShqc29uX3N0cmluZy5maW5kKCcibnVtX21pc3Np
bmciOjEnKSAhPSAtMSkKLQogICAgIGRlZiB0ZXN0X21pc3NpbmdfYW5kX3VuZXhwZWN0ZWRfcmVz
dWx0c193aXRoX2N1c3RvbV9leGl0X2NvZGUoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IHdl
IHVwZGF0ZSBleHBlY3RhdGlvbnMgaW4gcGxhY2UuIElmIHRoZSBleHBlY3RhdGlvbgogICAgICAg
ICAjIGlzIG1pc3NpbmcsIHVwZGF0ZSB0aGUgZXhwZWN0ZWQgZ2VuZXJpYyBsb2NhdGlvbi4KQEAg
LTczNSw2ICs3MjIsMTcgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAg
ICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsncGFzc2VzL21pc21hdGNoLmh0bWwnXSwg
dGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUsIGluY2x1ZGVfcmVmZXJl
bmNlX2h0bWw9VHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWydwYXNzZXMvbWlzbWF0
Y2guaHRtbCcsICdwYXNzZXMvbWlzbWF0Y2gtZXhwZWN0ZWQtbWlzbWF0Y2guaHRtbCddLCB0ZXN0
c19ydW4pCiAKKyAgICBkZWYgdGVzdF9yZWZ0ZXN0X3NraXBwZWRfaWZfdW5saXN0ZWQoc2VsZik6
CisgICAgICAgIGZzID0gdW5pdF90ZXN0X2ZpbGVzeXN0ZW0oKQorICAgICAgICByZXMsIG91dCwg
ZXJyLCBfID0gbG9nZ2luZ19ydW4oWyctLW5vLXNob3ctcmVzdWx0cycsICdyZWZ0ZXN0cy9mb28v
J10sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZpbGVzeXN0ZW09ZnMsIHJlY29yZF9yZXN1bHRzPVRy
dWUpCisgICAgICAgIGZpbGVfbGlzdCA9IGZzLndyaXR0ZW5fZmlsZXMua2V5cygpCisgICAgICAg
IGZpbGVfbGlzdC5yZW1vdmUoJy90bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy90ZXN0c19ydW4wLnR4
dCcpCisgICAgICAgIGpzb25fc3RyaW5nID0gZnMucmVhZF90ZXh0X2ZpbGUoJy90bXAvbGF5b3V0
LXRlc3QtcmVzdWx0cy9mdWxsX3Jlc3VsdHMuanNvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShqc29uX3N0cmluZy5maW5kKCcidW5saXN0ZWR0ZXN0Lmh0bWwiOnsiZXhwZWN0ZWQiOiJQQVNT
IiwiaXNfbWlzc2luZ190ZXh0Ijp0cnVlLCJhY3R1YWwiOiJNSVNTSU5HIiwiaXNfbWlzc2luZ19p
bWFnZSI6dHJ1ZX0nKSAhPSAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGpzb25fc3RyaW5n
LmZpbmQoJyJudW1fcmVncmVzc2lvbnMiOjQnKSAhPSAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKGpzb25fc3RyaW5nLmZpbmQoJyJudW1fZmxha3kiOjAnKSAhPSAtMSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKGpzb25fc3RyaW5nLmZpbmQoJyJudW1fbWlzc2luZyI6MScpICE9IC0xKQor
CiAgICAgZGVmIHRlc3RfYWRkaXRpb25hbF9wbGF0Zm9ybV9kaXJlY3Rvcnkoc2VsZik6CiAgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tYWRkaXRpb25hbC1wbGF0Zm9ybS1k
aXJlY3RvcnknLCAnL3RtcC9mb28nXSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5n
X3J1bihbJy0tYWRkaXRpb25hbC1wbGF0Zm9ybS1kaXJlY3RvcnknLCAnL3RtcC8uLi9mb28nXSkp
CkBAIC03NzgsMTAgKzc3Niw2IEBAIGNsYXNzIEVuZFRvRW5kVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CiAgICAgICAgIGZzID0gdW5pdF90ZXN0X2ZpbGVzeXN0ZW0oKQogICAgICAgICByZXMsIG91
dCwgZXJyLCB1c2VyID0gbG9nZ2luZ19ydW4ocmVjb3JkX3Jlc3VsdHM9VHJ1ZSwgdGVzdHNfaW5j
bHVkZWQ9VHJ1ZSwgZmlsZXN5c3RlbT1mcykKIAotICAgICAgICAjIFVwZGF0ZSB0aGlzIG1hZ2lj
IG51bWJlciBpZiB5b3UgYWRkIGFuIHVuZXhwZWN0ZWQgdGVzdCB0byB3ZWJraXRweS5sYXlvdXRf
dGVzdHMucG9ydC50ZXN0Ci0gICAgICAgICMgRklYTUU6IEl0J3MgbmljZSB0byBoYXZlIGEgcm91
dGluZSBpbiBwb3J0L3Rlc3QucHkgdGhhdCByZXR1cm5zIHRoaXMgbnVtYmVyLgotICAgICAgICB1
bmV4cGVjdGVkX3Rlc3RzX2NvdW50ID0gOAotCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJl
cywgdW5leHBlY3RlZF90ZXN0c19jb3VudCkKICAgICAgICAgcmVzdWx0cyA9IHNlbGYucGFyc2Vf
ZnVsbF9yZXN1bHRzKGZzLmZpbGVzWycvdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZnVsbF9yZXN1
bHRzLmpzb24nXSkKIApAQCAtNzkxLDYgKzc4NSwyNiBAQCBjbGFzcyBFbmRUb0VuZFRlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgogICAgICAgICAjIENoZWNrIHRoYXQgd2UgYXR0ZW1wdGVkIHRvIGRp
c3BsYXkgdGhlIHJlc3VsdHMgcGFnZSBpbiBhIGJyb3dzZXIuCiAgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZSh1c2VyLm9wZW5lZF91cmxzKQogCisgICAgZGVmIHRlc3RfcmVmdGVzdF93aXRoX3R3b19u
b3RyZWZzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB3ZSB1cGRhdGUgZXhwZWN0YXRpb25z
IGluIHBsYWNlLiBJZiB0aGUgZXhwZWN0YXRpb24KKyAgICAgICAgIyBpcyBtaXNzaW5nLCB1cGRh
dGUgdGhlIGV4cGVjdGVkIGdlbmVyaWMgbG9jYXRpb24uCisgICAgICAgIGZzID0gdW5pdF90ZXN0
X2ZpbGVzeXN0ZW0oKQorICAgICAgICByZXMsIG91dCwgZXJyLCBfID0gbG9nZ2luZ19ydW4oWyct
LW5vLXNob3ctcmVzdWx0cycsICdyZWZ0ZXN0cy9mb28vJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUs
IGZpbGVzeXN0ZW09ZnMsIHJlY29yZF9yZXN1bHRzPVRydWUpCisgICAgICAgIGZpbGVfbGlzdCA9
IGZzLndyaXR0ZW5fZmlsZXMua2V5cygpCisgICAgICAgIGZpbGVfbGlzdC5yZW1vdmUoJy90bXAv
bGF5b3V0LXRlc3QtcmVzdWx0cy90ZXN0c19ydW4wLnR4dCcpCisgICAgICAgIGpzb25fc3RyaW5n
ID0gZnMucmVhZF90ZXh0X2ZpbGUoJy90bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mdWxsX3Jlc3Vs
dHMuanNvbicpCisgICAgICAgIGpzb24gPSBzZWxmLnBhcnNlX2Z1bGxfcmVzdWx0cyhqc29uX3N0
cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJtdWx0aXBsZS1tYXRjaC1zdWNjZXNzLmh0
bWwiIG5vdCBpbiBqc29uWyJ0ZXN0cyJdWyJyZWZ0ZXN0cyJdWyJmb28iXSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKCJtdWx0aXBsZS1taXNtYXRjaC1zdWNjZXNzLmh0bWwiIG5vdCBpbiBqc29u
WyJ0ZXN0cyJdWyJyZWZ0ZXN0cyJdWyJmb28iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJt
dWx0aXBsZS1ib3RoLXN1Y2Nlc3MuaHRtbCIgbm90IGluIGpzb25bInRlc3RzIl1bInJlZnRlc3Rz
Il1bImZvbyJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpzb25bInRlc3RzIl1bInJlZnRl
c3RzIl1bImZvbyJdWyJtdWx0aXBsZS1tYXRjaC1mYWlsdXJlLmh0bWwiXSwKKyAgICAgICAgICAg
IHsiZXhwZWN0ZWQiOiAiUEFTUyIsICJyZWZfZmlsZSI6ICJyZWZ0ZXN0cy9mb28vc2Vjb25kLW1p
c21hdGNoaW5nLXJlZi5odG1sIiwgImFjdHVhbCI6ICJJTUFHRSIsICdpc19yZWZ0ZXN0JzogVHJ1
ZX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvblsidGVzdHMiXVsicmVmdGVzdHMiXVsi
Zm9vIl1bIm11bHRpcGxlLW1pc21hdGNoLWZhaWx1cmUuaHRtbCJdLAorICAgICAgICAgICAgeyJl
eHBlY3RlZCI6ICJQQVNTIiwgInJlZl9maWxlIjogInJlZnRlc3RzL2Zvby9tYXRjaGluZy1yZWYu
aHRtbCIsICJhY3R1YWwiOiAiSU1BR0UiLCAiaXNfbWlzbWF0Y2hfcmVmdGVzdCI6IFRydWV9KQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpzb25bInRlc3RzIl1bInJlZnRlc3RzIl1bImZvbyJd
WyJtdWx0aXBsZS1ib3RoLWZhaWx1cmUuaHRtbCJdLAorICAgICAgICAgICAgeyJleHBlY3RlZCI6
ICJQQVNTIiwgInJlZl9maWxlIjogInJlZnRlc3RzL2Zvby9tYXRjaGluZy1yZWYuaHRtbCIsICJh
Y3R1YWwiOiAiSU1BR0UiLCAiaXNfbWlzbWF0Y2hfcmVmdGVzdCI6IFRydWV9KQorCisKIGNsYXNz
IFJlYmFzZWxpbmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgYXNzZXJ0QmFzZWxp
bmVzKHNlbGYsIGZpbGVfbGlzdCwgZmlsZSwgZXh0ZW5zaW9ucywgZXJyKToKICAgICAgICAgImFz
c2VydCB0aGF0IHRoZSBmaWxlX2xpc3QgY29udGFpbnMgdGhlIGJhc2VsaW5lcy4iIiIKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29u
dHJvbGxlcnMvbWFuYWdlci5weQkocmV2aXNpb24gMTAxNzUwKQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weQkod29ya2luZyBjb3B5
KQpAQCAtODksMTIgKzg5LDEwIEBAIGRlZiBpbnRlcnByZXRfdGVzdF9mYWlsdXJlcyhwb3J0LCB0
ZXN0X24KICAgICAgICAgICAgIHRlc3RfZGljdFsnaW1hZ2VfZGlmZl9wZXJjZW50J10gPSBmYWls
dXJlLmRpZmZfcGVyY2VudAogICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZmFpbHVyZSwgdGVzdF9m
YWlsdXJlcy5GYWlsdXJlUmVmdGVzdE1pc21hdGNoKToKICAgICAgICAgICAgIHRlc3RfZGljdFsn
aXNfcmVmdGVzdCddID0gVHJ1ZQotICAgICAgICAgICAgaWYgZmFpbHVyZS5yZWZlcmVuY2VfZmls
ZW5hbWUgIT0gcG9ydC5yZWZ0ZXN0X2V4cGVjdGVkX2ZpbGVuYW1lKHRlc3RfbmFtZSk6Ci0gICAg
ICAgICAgICAgICAgdGVzdF9kaWN0WydyZWZfZmlsZSddID0gcG9ydC5yZWxhdGl2ZV90ZXN0X2Zp
bGVuYW1lKGZhaWx1cmUucmVmZXJlbmNlX2ZpbGVuYW1lKQorICAgICAgICAgICAgdGVzdF9kaWN0
WydyZWZfZmlsZSddID0gcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZhaWx1cmUucmVmZXJl
bmNlX2ZpbGVuYW1lKQogICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZmFpbHVyZSwgdGVzdF9mYWls
dXJlcy5GYWlsdXJlUmVmdGVzdE1pc21hdGNoRGlkTm90T2NjdXIpOgogICAgICAgICAgICAgdGVz
dF9kaWN0Wydpc19taXNtYXRjaF9yZWZ0ZXN0J10gPSBUcnVlCi0gICAgICAgICAgICBpZiBmYWls
dXJlLnJlZmVyZW5jZV9maWxlbmFtZSAhPSBwb3J0LnJlZnRlc3RfZXhwZWN0ZWRfbWlzbWF0Y2hf
ZmlsZW5hbWUodGVzdF9uYW1lKToKLSAgICAgICAgICAgICAgICB0ZXN0X2RpY3RbJ3JlZl9maWxl
J10gPSBwb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmFpbHVyZS5yZWZlcmVuY2VfZmlsZW5h
bWUpCisgICAgICAgICAgICB0ZXN0X2RpY3RbJ3JlZl9maWxlJ10gPSBwb3J0LnJlbGF0aXZlX3Rl
c3RfZmlsZW5hbWUoZmFpbHVyZS5yZWZlcmVuY2VfZmlsZW5hbWUpCiAKICAgICBpZiB0ZXN0X2Zh
aWx1cmVzLkZhaWx1cmVNaXNzaW5nUmVzdWx0IGluIGZhaWx1cmVfdHlwZXM6CiAgICAgICAgIHRl
c3RfZGljdFsnaXNfbWlzc2luZ190ZXh0J10gPSBUcnVlCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJz
L21hbmFnZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDEwMTc1MCkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfdW5pdHRlc3QucHkJKHdv
cmtpbmcgY29weSkKQEAgLTMxNiw3ICszMTYsNiBAQCBjbGFzcyBSZXN1bHRTdW1tYXJ5VGVzdCh1
bml0dGVzdC5UZXN0Q2FzCiAgICAgICAgICAgICBbdGVzdF9mYWlsdXJlcy5GYWlsdXJlUmVmdGVz
dE1pc21hdGNoKHNlbGYucG9ydC5hYnNwYXRoX2Zvcl90ZXN0KCdmb28vcmVmdGVzdC1leHBlY3Rl
ZC5odG1sJykpXSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdpc19yZWZ0ZXN0JyBpbiB0ZXN0
X2RpY3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ2lzX21pc21hdGNoX3JlZnRlc3QnIGlu
IHRlc3RfZGljdCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgncmVmX2ZpbGUnIGluIHRlc3Rf
ZGljdCkKIAogICAgICAgICB0ZXN0X2RpY3QgPSBpbnRlcnByZXRfdGVzdF9mYWlsdXJlcyhzZWxm
LnBvcnQsICdmb28vcmVmdGVzdC5odG1sJywKICAgICAgICAgICAgIFt0ZXN0X2ZhaWx1cmVzLkZh
aWx1cmVSZWZ0ZXN0TWlzbWF0Y2goc2VsZi5wb3J0LmFic3BhdGhfZm9yX3Rlc3QoJ2Zvby9jb21t
b24uaHRtbCcpKV0pCkBAIC0zMjgsNyArMzI3LDYgQEAgY2xhc3MgUmVzdWx0U3VtbWFyeVRlc3Qo
dW5pdHRlc3QuVGVzdENhcwogICAgICAgICAgICAgW3Rlc3RfZmFpbHVyZXMuRmFpbHVyZVJlZnRl
c3RNaXNtYXRjaERpZE5vdE9jY3VyKHNlbGYucG9ydC5hYnNwYXRoX2Zvcl90ZXN0KCdmb28vcmVm
dGVzdC1leHBlY3RlZC1taXNtYXRjaC5odG1sJykpXSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZSgnaXNfcmVmdGVzdCcgaW4gdGVzdF9kaWN0KQogICAgICAgICBzZWxmLmFzc2VydFRydWUodGVz
dF9kaWN0Wydpc19taXNtYXRjaF9yZWZ0ZXN0J10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
J3JlZl9maWxlJyBpbiB0ZXN0X2RpY3QpCiAKICAgICAgICAgdGVzdF9kaWN0ID0gaW50ZXJwcmV0
X3Rlc3RfZmFpbHVyZXMoc2VsZi5wb3J0LCAnZm9vL3JlZnRlc3QuaHRtbCcsCiAgICAgICAgICAg
ICBbdGVzdF9mYWlsdXJlcy5GYWlsdXJlUmVmdGVzdE1pc21hdGNoRGlkTm90T2NjdXIoc2VsZi5w
b3J0LmFic3BhdGhfZm9yX3Rlc3QoJ2Zvby9jb21tb24uaHRtbCcpKV0pCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9zaW5nbGVfdGVzdF9ydW5u
ZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
Y29udHJvbGxlcnMvc2luZ2xlX3Rlc3RfcnVubmVyLnB5CShyZXZpc2lvbiAxMDE3NTApCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9zaW5nbGVfdGVz
dF9ydW5uZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTU3LDQxICs1NywxOCBAQCBjbGFzcyBTaW5n
bGVUZXN0UnVubmVyOgogICAgICAgICBzZWxmLl90ZXN0X25hbWUgPSB0ZXN0X2lucHV0LnRlc3Rf
bmFtZQogCiAgICAgICAgIHNlbGYuX2lzX3JlZnRlc3QgPSBGYWxzZQotICAgICAgICBzZWxmLl9p
c19taXNtYXRjaF9yZWZ0ZXN0ID0gRmFsc2UKLSAgICAgICAgc2VsZi5fcmVmZXJlbmNlX2ZpbGVu
YW1lID0gTm9uZQorICAgICAgICBzZWxmLl9yZWZlcmVuY2VfZmlsZXMgPSBwb3J0LnJlZmVyZW5j
ZV9maWxlcyhzZWxmLl90ZXN0X25hbWUpCiAKLSAgICAgICAgZnMgPSBwb3J0Ll9maWxlc3lzdGVt
Ci0gICAgICAgIGlmIHRlc3RfaW5wdXQucmVmX2ZpbGU6Ci0gICAgICAgICAgICBzZWxmLl9pc19y
ZWZ0ZXN0ID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi5fcmVmZXJlbmNlX2ZpbGVuYW1lID0gZnMu
am9pbihzZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKSwgdGVzdF9pbnB1dC5yZWZfZmlsZSkK
LSAgICAgICAgICAgIHNlbGYuX2lzX21pc21hdGNoX3JlZnRlc3QgPSB0ZXN0X2lucHV0LmlzX21p
c21hdGNoX3JlZnRlc3QKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIHJlZnRlc3RfZXhw
ZWN0ZWRfZmlsZW5hbWUgPSBwb3J0LnJlZnRlc3RfZXhwZWN0ZWRfZmlsZW5hbWUoc2VsZi5fdGVz
dF9uYW1lKQotICAgICAgICBpZiByZWZ0ZXN0X2V4cGVjdGVkX2ZpbGVuYW1lIGFuZCBmcy5leGlz
dHMocmVmdGVzdF9leHBlY3RlZF9maWxlbmFtZSk6Ci0gICAgICAgICAgICBzZWxmLl9pc19yZWZ0
ZXN0ID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi5fcmVmZXJlbmNlX2ZpbGVuYW1lID0gcmVmdGVz
dF9leHBlY3RlZF9maWxlbmFtZQotCi0gICAgICAgIHJlZnRlc3RfZXhwZWN0ZWRfbWlzbWF0Y2hf
ZmlsZW5hbWUgPSBwb3J0LnJlZnRlc3RfZXhwZWN0ZWRfbWlzbWF0Y2hfZmlsZW5hbWUoc2VsZi5f
dGVzdF9uYW1lKQotICAgICAgICBpZiByZWZ0ZXN0X2V4cGVjdGVkX21pc21hdGNoX2ZpbGVuYW1l
IGFuZCBmcy5leGlzdHMocmVmdGVzdF9leHBlY3RlZF9taXNtYXRjaF9maWxlbmFtZSk6Ci0gICAg
ICAgICAgICBpZiBzZWxmLl9pc19yZWZ0ZXN0OgotICAgICAgICAgICAgICAgIF9sb2cuZXJyb3Io
J09uZSB0ZXN0IGZpbGUgY2Fubm90IGhhdmUgYm90aCBtYXRjaCBhbmQgbWlzbWF0Y2ggcmVmZXJl
bmNlcy4gUGxlYXNlIHJlbW92ZSBlaXRoZXIgJXMgb3IgJXMnLAotICAgICAgICAgICAgICAgICAg
ICByZWZ0ZXN0X2V4cGVjdGVkX2ZpbGVuYW1lLCByZWZ0ZXN0X2V4cGVjdGVkX21pc21hdGNoX2Zp
bGVuYW1lKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl9pc19yZWZ0
ZXN0ID0gVHJ1ZQotICAgICAgICAgICAgICAgIHNlbGYuX2lzX21pc21hdGNoX3JlZnRlc3QgPSBU
cnVlCi0gICAgICAgICAgICAgICAgc2VsZi5fcmVmZXJlbmNlX2ZpbGVuYW1lID0gcmVmdGVzdF9l
eHBlY3RlZF9taXNtYXRjaF9maWxlbmFtZQotCi0gICAgICAgIGlmIHNlbGYuX2lzX3JlZnRlc3Q6
CisgICAgICAgIGlmIHNlbGYuX3JlZmVyZW5jZV9maWxlczoKICAgICAgICAgICAgICMgRGV0ZWN0
IGFuZCByZXBvcnQgYSB0ZXN0IHdoaWNoIGhhcyBhIHdyb25nIGNvbWJpbmF0aW9uIG9mIGV4cGVj
dGF0aW9uIGZpbGVzLgogICAgICAgICAgICAgIyBGb3IgZXhhbXBsZSwgaWYgJ2Zvby5odG1sJyBo
YXMgdHdvIGV4cGVjdGF0aW9uIGZpbGVzLCAnZm9vLWV4cGVjdGVkLmh0bWwnIGFuZAogICAgICAg
ICAgICAgIyAnZm9vLWV4cGVjdGVkLnR4dCcsIHdlIHNob3VsZCB3YXJuIHVzZXJzLiBPbmUgdGVz
dCBmaWxlIG11c3QgYmUgdXNlZCBleGNsdXNpdmVseQogICAgICAgICAgICAgIyBpbiBlaXRoZXIg
bGF5b3V0IHRlc3RzIG9yIHJlZnRlc3RzLCBidXQgbm90IGluIGJvdGguCiAgICAgICAgICAgICBm
b3Igc3VmZml4IGluICgnLnR4dCcsICcucG5nJywgJy53YXYnKToKICAgICAgICAgICAgICAgICBl
eHBlY3RlZF9maWxlbmFtZSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfZmlsZW5hbWUoc2VsZi5fdGVz
dF9uYW1lLCBzdWZmaXgpCi0gICAgICAgICAgICAgICAgaWYgZnMuZXhpc3RzKGV4cGVjdGVkX2Zp
bGVuYW1lKToKLSAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignVGhlIHJlZnRlc3QgKCVz
KSBjYW4gbm90IGhhdmUgYW4gZXhwZWN0YXRpb24gZmlsZSAoJXMpLicKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnIFBsZWFzZSByZW1vdmUgdGhhdCBmaWxlLicsIHNlbGYuX3Rlc3Rf
bmFtZSwgZXhwZWN0ZWRfZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgaWYgcG9ydC5ob3N0LmZp
bGVzeXN0ZW0uZXhpc3RzKGV4cGVjdGVkX2ZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICAgICAg
X2xvZy5lcnJvcignVGhlIHJlZnRlc3QgKCVzKSBjYW4gbm90IGhhdmUgYW4gZXhwZWN0YXRpb24g
ZmlsZS4gUGxlYXNlIHJlbW92ZSAoJXMpLicsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
Ll90ZXN0X25hbWUsIGV4cGVjdGVkX2ZpbGVuYW1lKQogCiAgICAgZGVmIF9leHBlY3RlZF9kcml2
ZXJfb3V0cHV0KHNlbGYpOgogICAgICAgICByZXR1cm4gRHJpdmVyT3V0cHV0KHNlbGYuX3BvcnQu
ZXhwZWN0ZWRfdGV4dChzZWxmLl90ZXN0X25hbWUpLApAQCAtMTExLDEwICs4OCwxMCBAQCBjbGFz
cyBTaW5nbGVUZXN0UnVubmVyOgogICAgICAgICBpbWFnZV9oYXNoID0gTm9uZQogICAgICAgICBp
ZiBzZWxmLl9zaG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hlY2tzdW0oKToKICAgICAgICAgICAgIGlt
YWdlX2hhc2ggPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2NoZWNrc3VtKHNlbGYuX3Rlc3RfbmFtZSkK
LSAgICAgICAgcmV0dXJuIERyaXZlcklucHV0KHNlbGYuX3Rlc3RfbmFtZSwgc2VsZi5fdGltZW91
dCwgaW1hZ2VfaGFzaCwgc2VsZi5faXNfcmVmdGVzdCkKKyAgICAgICAgcmV0dXJuIERyaXZlcklu
cHV0KHNlbGYuX3Rlc3RfbmFtZSwgc2VsZi5fdGltZW91dCwgaW1hZ2VfaGFzaCwgYm9vbChzZWxm
Ll9yZWZlcmVuY2VfZmlsZXMpKQogCiAgICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgaWYgc2Vs
Zi5faXNfcmVmdGVzdDoKKyAgICAgICAgaWYgc2VsZi5fcmVmZXJlbmNlX2ZpbGVzOgogICAgICAg
ICAgICAgaWYgc2VsZi5fcG9ydC5nZXRfb3B0aW9uKCdub19yZWZfdGVzdHMnKSBvciBzZWxmLl9v
cHRpb25zLm5ld19iYXNlbGluZSBvciBzZWxmLl9vcHRpb25zLnJlc2V0X3Jlc3VsdHM6CiAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gVGVzdFJlc3VsdChzZWxmLl90ZXN0X25hbWUpCiAgICAgICAg
ICAgICAgICAgcmVzdWx0LnR5cGUgPSB0ZXN0X2V4cGVjdGF0aW9ucy5TS0lQCkBAIC0yODIsMTUg
KzI1OSwyOCBAQCBjbGFzcyBTaW5nbGVUZXN0UnVubmVyOgogICAgICAgICByZXR1cm4gZmFpbHVy
ZXMKIAogICAgIGRlZiBfcnVuX3JlZnRlc3Qoc2VsZik6Ci0gICAgICAgIGRyaXZlcl9vdXRwdXQx
ID0gc2VsZi5fZHJpdmVyLnJ1bl90ZXN0KHNlbGYuX2RyaXZlcl9pbnB1dCgpKQotICAgICAgICBy
ZWZlcmVuY2VfdGVzdF9uYW1lID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHNl
bGYuX3JlZmVyZW5jZV9maWxlbmFtZSkKLSAgICAgICAgZHJpdmVyX291dHB1dDIgPSBzZWxmLl9k
cml2ZXIucnVuX3Rlc3QoRHJpdmVySW5wdXQocmVmZXJlbmNlX3Rlc3RfbmFtZSwgc2VsZi5fdGlt
ZW91dCwgZHJpdmVyX291dHB1dDEuaW1hZ2VfaGFzaCwgc2VsZi5faXNfcmVmdGVzdCkpCi0gICAg
ICAgIHRlc3RfcmVzdWx0ID0gc2VsZi5fY29tcGFyZV9vdXRwdXRfd2l0aF9yZWZlcmVuY2UoZHJp
dmVyX291dHB1dDEsIGRyaXZlcl9vdXRwdXQyKQotCi0gICAgICAgIHRlc3RfcmVzdWx0X3dyaXRl
ci53cml0ZV90ZXN0X3Jlc3VsdChzZWxmLl9wb3J0LCBzZWxmLl90ZXN0X25hbWUsIGRyaXZlcl9v
dXRwdXQxLCBkcml2ZXJfb3V0cHV0MiwgdGVzdF9yZXN1bHQuZmFpbHVyZXMpCi0gICAgICAgIHJl
dHVybiB0ZXN0X3Jlc3VsdAorICAgICAgICB0ZXN0X291dHB1dCA9IHNlbGYuX2RyaXZlci5ydW5f
dGVzdChzZWxmLl9kcml2ZXJfaW5wdXQoKSkKKyAgICAgICAgdG90YWxfdGVzdF90aW1lID0gMAor
ICAgICAgICByZWZlcmVuY2Vfb3V0cHV0ID0gTm9uZQorICAgICAgICB0ZXN0X3Jlc3VsdCA9IE5v
bmUKKworICAgICAgICBwdXRBbGxNaXNtYXRjaEJlZm9yZU1hdGNoID0gc29ydGVkICAjIFdlIG5l
ZWQgdG8gcHJvY2VzcyBhbGwgIiE9IiBiZWZvcmUgIj09IjsgY29udmVuaWVudGx5LCAiIT0iIDwg
Ij09IgorICAgICAgICBmb3IgZXhwZWN0YXRpb24sIHJlZmVyZW5jZV9maWxlbmFtZSBpbiBwdXRB
bGxNaXNtYXRjaEJlZm9yZU1hdGNoKHNlbGYuX3JlZmVyZW5jZV9maWxlcyk6CisgICAgICAgICAg
ICByZWZlcmVuY2VfdGVzdF9uYW1lID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1l
KHJlZmVyZW5jZV9maWxlbmFtZSkKKyAgICAgICAgICAgIHJlZmVyZW5jZV9vdXRwdXQgPSBzZWxm
Ll9kcml2ZXIucnVuX3Rlc3QoRHJpdmVySW5wdXQocmVmZXJlbmNlX3Rlc3RfbmFtZSwgc2VsZi5f
dGltZW91dCwgdGVzdF9vdXRwdXQuaW1hZ2VfaGFzaCwgaXNfcmVmdGVzdD1UcnVlKSkKKyAgICAg
ICAgICAgIHRlc3RfcmVzdWx0ID0gc2VsZi5fY29tcGFyZV9vdXRwdXRfd2l0aF9yZWZlcmVuY2Uo
dGVzdF9vdXRwdXQsIHJlZmVyZW5jZV9vdXRwdXQsIHJlZmVyZW5jZV9maWxlbmFtZSwgZXhwZWN0
YXRpb24gPT0gJyE9JykKKworICAgICAgICAgICAgIyBSZWZ0ZXN0IGZhaWxzIGlmIGFueSBtaXNt
YXRjaCBtYXRjaGVzOyBpdCBzdWNjZWVkcyBpZiBhbnkgbWF0Y2ggbWF0Y2hlcworICAgICAgICAg
ICAgaWYgKGV4cGVjdGF0aW9uID09ICchPScgYW5kIHRlc3RfcmVzdWx0LmZhaWx1cmVzKSBvciAo
ZXhwZWN0YXRpb24gPT0gJz09JyBhbmQgbm90IHRlc3RfcmVzdWx0LmZhaWx1cmVzKToKKyAgICAg
ICAgICAgICAgICB0ZXN0X3Jlc3VsdF93cml0ZXIud3JpdGVfdGVzdF9yZXN1bHQoc2VsZi5fcG9y
dCwgc2VsZi5fdGVzdF9uYW1lLCB0ZXN0X291dHB1dCwgcmVmZXJlbmNlX291dHB1dCwgdGVzdF9y
ZXN1bHQuZmFpbHVyZXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RSZXN1bHQoc2VsZi5f
dGVzdF9uYW1lLCB0ZXN0X3Jlc3VsdC5mYWlsdXJlcywgdG90YWxfdGVzdF90aW1lICsgdGVzdF9y
ZXN1bHQudGVzdF9ydW5fdGltZSwgdGVzdF9yZXN1bHQuaGFzX3N0ZGVycikKKyAgICAgICAgICAg
IHRvdGFsX3Rlc3RfdGltZSArPSB0ZXN0X3Jlc3VsdC50ZXN0X3J1bl90aW1lCisKKyAgICAgICAg
YXNzZXJ0KHJlZmVyZW5jZV9vdXRwdXQpCisgICAgICAgIHRlc3RfcmVzdWx0X3dyaXRlci53cml0
ZV90ZXN0X3Jlc3VsdChzZWxmLl9wb3J0LCBzZWxmLl90ZXN0X25hbWUsIHRlc3Rfb3V0cHV0LCBy
ZWZlcmVuY2Vfb3V0cHV0LCB0ZXN0X3Jlc3VsdC5mYWlsdXJlcykKKyAgICAgICAgcmV0dXJuIFRl
c3RSZXN1bHQoc2VsZi5fdGVzdF9uYW1lLCB0ZXN0X3Jlc3VsdC5mYWlsdXJlcywgdG90YWxfdGVz
dF90aW1lICsgdGVzdF9yZXN1bHQudGVzdF9ydW5fdGltZSwgdGVzdF9yZXN1bHQuaGFzX3N0ZGVy
cikKIAotICAgIGRlZiBfY29tcGFyZV9vdXRwdXRfd2l0aF9yZWZlcmVuY2Uoc2VsZiwgZHJpdmVy
X291dHB1dDEsIGRyaXZlcl9vdXRwdXQyKToKKyAgICBkZWYgX2NvbXBhcmVfb3V0cHV0X3dpdGhf
cmVmZXJlbmNlKHNlbGYsIGRyaXZlcl9vdXRwdXQxLCBkcml2ZXJfb3V0cHV0MiwgcmVmZXJlbmNl
X2ZpbGVuYW1lLCBtaXNtYXRjaCk6CiAgICAgICAgIHRvdGFsX3Rlc3RfdGltZSA9IGRyaXZlcl9v
dXRwdXQxLnRlc3RfdGltZSArIGRyaXZlcl9vdXRwdXQyLnRlc3RfdGltZQogICAgICAgICBoYXNf
c3RkZXJyID0gZHJpdmVyX291dHB1dDEuaGFzX3N0ZGVycigpIG9yIGRyaXZlcl9vdXRwdXQyLmhh
c19zdGRlcnIoKQogICAgICAgICBmYWlsdXJlcyA9IFtdCkBAIC0yOTgsMTUgKzI4OCwxNSBAQCBj
bGFzcyBTaW5nbGVUZXN0UnVubmVyOgogICAgICAgICBpZiBmYWlsdXJlczoKICAgICAgICAgICAg
ICMgRG9uJ3QgY29udGludWUgYW55IG1vcmUgaWYgd2UgYWxyZWFkeSBoYXZlIGNyYXNoIG9yIHRp
bWVvdXQuCiAgICAgICAgICAgICByZXR1cm4gVGVzdFJlc3VsdChzZWxmLl90ZXN0X25hbWUsIGZh
aWx1cmVzLCB0b3RhbF90ZXN0X3RpbWUsIGhhc19zdGRlcnIpCi0gICAgICAgIGZhaWx1cmVzLmV4
dGVuZChzZWxmLl9oYW5kbGVfZXJyb3IoZHJpdmVyX291dHB1dDIsIHJlZmVyZW5jZV9maWxlbmFt
ZT1zZWxmLl9yZWZlcmVuY2VfZmlsZW5hbWUpKQorICAgICAgICBmYWlsdXJlcy5leHRlbmQoc2Vs
Zi5faGFuZGxlX2Vycm9yKGRyaXZlcl9vdXRwdXQyLCByZWZlcmVuY2VfZmlsZW5hbWU9cmVmZXJl
bmNlX2ZpbGVuYW1lKSkKICAgICAgICAgaWYgZmFpbHVyZXM6CiAgICAgICAgICAgICByZXR1cm4g
VGVzdFJlc3VsdChzZWxmLl90ZXN0X25hbWUsIGZhaWx1cmVzLCB0b3RhbF90ZXN0X3RpbWUsIGhh
c19zdGRlcnIpCiAKICAgICAgICAgYXNzZXJ0KGRyaXZlcl9vdXRwdXQxLmltYWdlX2hhc2ggb3Ig
ZHJpdmVyX291dHB1dDIuaW1hZ2VfaGFzaCkKIAotICAgICAgICBpZiBzZWxmLl9pc19taXNtYXRj
aF9yZWZ0ZXN0OgorICAgICAgICBpZiBtaXNtYXRjaDoKICAgICAgICAgICAgIGlmIGRyaXZlcl9v
dXRwdXQxLmltYWdlX2hhc2ggPT0gZHJpdmVyX291dHB1dDIuaW1hZ2VfaGFzaDoKLSAgICAgICAg
ICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlUmVmdGVzdE1pc21h
dGNoRGlkTm90T2NjdXIoc2VsZi5fcmVmZXJlbmNlX2ZpbGVuYW1lKSkKKyAgICAgICAgICAgICAg
ICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlUmVmdGVzdE1pc21hdGNoRGlk
Tm90T2NjdXIocmVmZXJlbmNlX2ZpbGVuYW1lKSkKICAgICAgICAgZWxpZiBkcml2ZXJfb3V0cHV0
MS5pbWFnZV9oYXNoICE9IGRyaXZlcl9vdXRwdXQyLmltYWdlX2hhc2g6Ci0gICAgICAgICAgICBm
YWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlUmVmdGVzdE1pc21hdGNoKHNlbGYu
X3JlZmVyZW5jZV9maWxlbmFtZSkpCisgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9m
YWlsdXJlcy5GYWlsdXJlUmVmdGVzdE1pc21hdGNoKHJlZmVyZW5jZV9maWxlbmFtZSkpCiAgICAg
ICAgIHJldHVybiBUZXN0UmVzdWx0KHNlbGYuX3Rlc3RfbmFtZSwgZmFpbHVyZXMsIHRvdGFsX3Rl
c3RfdGltZSwgaGFzX3N0ZGVycikKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL21vZGVscy90ZXN0X2lucHV0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2lucHV0LnB5CShyZXZpc2lvbiAxMDE3
NTApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9p
bnB1dC5weQkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBUZXN0SW5wdXQ6
CiAgICAgcmVmX2ZpbGUgPSBOb25lCiAgICAgaXNfbWlzbWF0Y2hfcmVmdGVzdCA9IE5vbmUKIAot
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X25hbWUsIHRpbWVvdXQsIHJlZl9maWxlPU5vbmUs
IGlzX21pc21hdGNoX3JlZnRlc3Q9RmFsc2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0
X25hbWUsIHRpbWVvdXQpOgogICAgICAgICAiIiJIb2xkcyB0aGUgaW5wdXQgcGFyYW1ldGVycyBm
b3IgYSB0ZXN0LgogICAgICAgICBBcmdzOgogICAgICAgICAgIHRlc3Q6IG5hbWUgb2YgdGVzdCAo
bm90IGFuIGFic29sdXRlIHBhdGghKQpAQCAtNDYsOSArNDYsNiBAQCBjbGFzcyBUZXN0SW5wdXQ6
CiAgICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYudGVzdF9uYW1lID0gdGVzdF9uYW1lCiAgICAg
ICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKLSAgICAgICAgaWYgcmVmX2ZpbGU6Ci0gICAgICAg
ICAgICBzZWxmLnJlZl9maWxlID0gcmVmX2ZpbGUKLSAgICAgICAgICAgIHNlbGYuaXNfbWlzbWF0
Y2hfcmVmdGVzdCA9IGlzX21pc21hdGNoX3JlZnRlc3QKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxm
KToKICAgICAgICAgcmV0dXJuICJUZXN0SW5wdXQoJyVzJywgJWQpIiAlIChzZWxmLnRlc3RfbmFt
ZSwgc2VsZi50aW1lb3V0KQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9iYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQkocmV2aXNpb24gMTAxNzUwKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00
MzIsMTggKzQzMiwxOCBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgICAgICBzZWxmLl9y
ZWZ0ZXN0X2xpc3RbZGlybmFtZV0gPSBfcGFyc2VfcmVmdGVzdF9saXN0KHNlbGYuX2ZpbGVzeXN0
ZW0sIGRpcm5hbWUpCiAgICAgICAgIHJldHVybiBzZWxmLl9yZWZ0ZXN0X2xpc3RbZGlybmFtZV0K
IAotICAgIGRlZiBfcmVmZXJlbmNlX2ZpbGVfZm9yKHNlbGYsIHRlc3RfbmFtZSwgZXhwZWN0YXRp
b24pOgorICAgIGRlZiByZWZlcmVuY2VfZmlsZXMoc2VsZiwgdGVzdF9uYW1lKToKKyAgICAgICAg
IiIiUmV0dXJuIGEgbGlzdCBvZiBleHBlY3RhdGlvbiAoPT0gb3IgIT0pIGFuZCBmaWxlbmFtZSBw
YWlycyIiIgorICAgICAgICByZXN1bHQgPSBbXQogICAgICAgICByZWZ0ZXN0X2xpc3QgPSBzZWxm
Ll9nZXRfcmVmdGVzdF9saXN0KHRlc3RfbmFtZSkKICAgICAgICAgaWYgbm90IHJlZnRlc3RfbGlz
dDoKLSAgICAgICAgICAgIGlmIGV4cGVjdGF0aW9uID09ICc9PSc6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHNlbGYuZXhwZWN0ZWRfZmlsZW5hbWUodGVzdF9uYW1lLCAnLmh0bWwnKQotICAgICAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5leHBlY3RlZF9maWxlbmFt
ZSh0ZXN0X25hbWUsICctbWlzbWF0Y2guaHRtbCcpCisgICAgICAgICAgICBleHBlY3RlZF9maWxl
bmFtZXMgPSBbKCc9PScsIHNlbGYuZXhwZWN0ZWRfZmlsZW5hbWUodGVzdF9uYW1lLCAnLmh0bWwn
KSksICgnIT0nLCBzZWxmLmV4cGVjdGVkX2ZpbGVuYW1lKHRlc3RfbmFtZSwgJy1taXNtYXRjaC5o
dG1sJykpXQorICAgICAgICAgICAgcmV0dXJuIFsoZXhwZWN0YXRpb24sIGZpbGVuYW1lKSBmb3Ig
ZXhwZWN0YXRpb24sIGZpbGVuYW1lIGluIGV4cGVjdGVkX2ZpbGVuYW1lcyBpZiBzZWxmLl9maWxl
c3lzdGVtLmV4aXN0cyhmaWxlbmFtZSldCiAKICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLl9maWxl
c3lzdGVtLmpvaW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCksIHRlc3RfbmFtZSkKLSAgICAgICAg
aWYgZmlsZW5hbWUgbm90IGluIHJlZnRlc3RfbGlzdCBvciByZWZ0ZXN0X2xpc3RbZmlsZW5hbWVd
WzBdICE9IGV4cGVjdGF0aW9uOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgcmV0
dXJuIHJlZnRlc3RfbGlzdFtmaWxlbmFtZV1bMV0KKyAgICAgICAgaWYgZmlsZW5hbWUgbm90IGlu
IHJlZnRlc3RfbGlzdDoKKyAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICByZXR1cm4gcmVm
dGVzdF9saXN0W2ZpbGVuYW1lXQogCiAgICAgZGVmIGlzX3JlZnRlc3Qoc2VsZiwgdGVzdF9uYW1l
KToKICAgICAgICAgcmVmdGVzdF9saXN0ID0gc2VsZi5fZ2V0X3JlZnRlc3RfbGlzdCh0ZXN0X25h
bWUpCkBAIC00NTMsMTQgKzQ1Myw2IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgZmls
ZW5hbWUgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCksIHRl
c3RfbmFtZSkKICAgICAgICAgcmV0dXJuIGZpbGVuYW1lIGluIHJlZnRlc3RfbGlzdAogCi0gICAg
ZGVmIHJlZnRlc3RfZXhwZWN0ZWRfZmlsZW5hbWUoc2VsZiwgdGVzdF9uYW1lKToKLSAgICAgICAg
IiIiUmV0dXJuIHRoZSBmaWxlbmFtZSBvZiByZWZlcmVuY2Ugd2UgZXhwZWN0IHRoZSB0ZXN0IG1h
dGNoZXMuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9yZWZlcmVuY2VfZmlsZV9mb3IodGVzdF9u
YW1lLCAnPT0nKQotCi0gICAgZGVmIHJlZnRlc3RfZXhwZWN0ZWRfbWlzbWF0Y2hfZmlsZW5hbWUo
c2VsZiwgdGVzdF9uYW1lKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBmaWxlbmFtZSBvZiByZWZl
cmVuY2Ugd2UgZG9uJ3QgZXhwZWN0IHRoZSB0ZXN0IG1hdGNoZXMuIiIiCi0gICAgICAgIHJldHVy
biBzZWxmLl9yZWZlcmVuY2VfZmlsZV9mb3IodGVzdF9uYW1lLCAnIT0nKQotCiAgICAgZGVmIHRl
c3RfdG9fdXJpKHNlbGYsIHRlc3RfbmFtZSk6CiAgICAgICAgICIiIkNvbnZlcnQgYSB0ZXN0IG5h
bWUgdG8gYSBVUkkuIiIiCiAgICAgICAgIExBWU9VVFRFU1RfSFRUUF9ESVIgPSAiaHR0cC90ZXN0
cy8iCkBAIC0xMDY3LDUgKzEwNTksOCBAQCBkZWYgX3BhcnNlX3JlZnRlc3RfbGlzdChmaWxlc3lz
dGVtLCB0ZXN0CiAgICAgICAgIGlmIGxlbihzcGxpdF9saW5lKSA8IDM6CiAgICAgICAgICAgICBj
b250aW51ZQogICAgICAgICBleHBlY3RhdGlvbl90eXBlLCB0ZXN0X2ZpbGUsIHJlZl9maWxlID0g
c3BsaXRfbGluZQotICAgICAgICBwYXJzZWRfbGlzdFtmaWxlc3lzdGVtLmpvaW4odGVzdF9kaXJw
YXRoLCB0ZXN0X2ZpbGUpXSA9IChleHBlY3RhdGlvbl90eXBlLCBmaWxlc3lzdGVtLmpvaW4odGVz
dF9kaXJwYXRoLCByZWZfZmlsZSkpCisgICAgICAgIGtleSA9IGZpbGVzeXN0ZW0uam9pbih0ZXN0
X2RpcnBhdGgsIHRlc3RfZmlsZSkKKyAgICAgICAgaWYga2V5IG5vdCBpbiBwYXJzZWRfbGlzdDoK
KyAgICAgICAgICAgIHBhcnNlZF9saXN0W2tleV0gPSBbXQorICAgICAgICBwYXJzZWRfbGlzdFtr
ZXldLmFwcGVuZCgoZXhwZWN0YXRpb25fdHlwZSwgZmlsZXN5c3RlbS5qb2luKHRlc3RfZGlycGF0
aCwgcmVmX2ZpbGUpKSkKICAgICByZXR1cm4gcGFyc2VkX2xpc3QKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZV91bml0dGVzdC5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2VfdW5pdHRl
c3QucHkJKHJldmlzaW9uIDEwMTc1MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvYmFzZV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzI0LDEyICsz
MjQsMTQgQEAgY2xhc3MgUG9ydFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAiIiwK
ICAgICAgICAgIiMgc29tZSBjb21tZW50IiwKICAgICAgICAgIiE9IHRlc3QtMi5odG1sIHRlc3Qt
bm90cmVmLmh0bWwgIyBtb3JlIGNvbW1lbnRzIiwKLSAgICAgICAgIj09IHRlc3QtMy5odG1sIHRl
c3QtcmVmLmh0bWwiXSkKKyAgICAgICAgIj09IHRlc3QtMy5odG1sIHRlc3QtcmVmLmh0bWwiLAor
ICAgICAgICAiPT0gdGVzdC0zLmh0bWwgdGVzdC1yZWYyLmh0bWwiLAorICAgICAgICAiIT0gdGVz
dC0zLmh0bWwgdGVzdC1ub3RyZWYuaHRtbCJdKQogCiAgICAgICAgIHJlZnRlc3RfbGlzdCA9IF9w
YXJzZV9yZWZ0ZXN0X2xpc3QocG9ydC5ob3N0LmZpbGVzeXN0ZW0sICdiYXInKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHJlZnRlc3RfbGlzdCwgeydiYXIvdGVzdC5odG1sJzogKCc9PScsICdi
YXIvdGVzdC1yZWYuaHRtbCcpLAotICAgICAgICAgICAgJ2Jhci90ZXN0LTIuaHRtbCc6ICgnIT0n
LCAnYmFyL3Rlc3Qtbm90cmVmLmh0bWwnKSwKLSAgICAgICAgICAgICdiYXIvdGVzdC0zLmh0bWwn
OiAoJz09JywgJ2Jhci90ZXN0LXJlZi5odG1sJyl9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHJlZnRlc3RfbGlzdCwgeydiYXIvdGVzdC5odG1sJzogWygnPT0nLCAnYmFyL3Rlc3QtcmVmLmh0
bWwnKV0sCisgICAgICAgICAgICAnYmFyL3Rlc3QtMi5odG1sJzogWygnIT0nLCAnYmFyL3Rlc3Qt
bm90cmVmLmh0bWwnKV0sCisgICAgICAgICAgICAnYmFyL3Rlc3QtMy5odG1sJzogWygnPT0nLCAn
YmFyL3Rlc3QtcmVmLmh0bWwnKSwgKCc9PScsICdiYXIvdGVzdC1yZWYyLmh0bWwnKSwgKCchPScs
ICdiYXIvdGVzdC1ub3RyZWYuaHRtbCcpXX0pCiAKIGNsYXNzIFZpcnR1YWxUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKICAgICAiIiJUZXN0cyB0aGF0IHZhcmlvdXMgbWV0aG9kcyBleHBlY3RlZCB0
byBiZSB2aXJ0dWFsIGFyZS4iIiIKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvdGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkJKHJldmlzaW9uIDEwMTc1MCkKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQkod29ya2luZyBjb3B5KQpA
QCAtMTkwLDYgKzE5MCwxNyBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHgzNAogICAgIHRlc3Rz
LmFkZCgncmVmdGVzdHMvZm9vL3Rlc3QuaHRtbCcpCiAgICAgdGVzdHMuYWRkKCdyZWZ0ZXN0cy9m
b28vdGVzdC1yZWYuaHRtbCcpCiAKKyAgICB0ZXN0cy5hZGQoJ3JlZnRlc3RzL2Zvby9tdWx0aXBs
ZS1tYXRjaC1zdWNjZXNzLmh0bWwnLCBhY3R1YWxfY2hlY2tzdW09J2FiYycsIGFjdHVhbF9pbWFn
ZT0nYWJjJykKKyAgICB0ZXN0cy5hZGQoJ3JlZnRlc3RzL2Zvby9tdWx0aXBsZS1tYXRjaC1mYWls
dXJlLmh0bWwnLCBhY3R1YWxfY2hlY2tzdW09J2FiYycsIGFjdHVhbF9pbWFnZT0nYWJjJykKKyAg
ICB0ZXN0cy5hZGQoJ3JlZnRlc3RzL2Zvby9tdWx0aXBsZS1taXNtYXRjaC1zdWNjZXNzLmh0bWwn
LCBhY3R1YWxfY2hlY2tzdW09J2FiYycsIGFjdHVhbF9pbWFnZT0nYWJjJykKKyAgICB0ZXN0cy5h
ZGQoJ3JlZnRlc3RzL2Zvby9tdWx0aXBsZS1taXNtYXRjaC1mYWlsdXJlLmh0bWwnLCBhY3R1YWxf
Y2hlY2tzdW09J2FiYycsIGFjdHVhbF9pbWFnZT0nYWJjJykKKyAgICB0ZXN0cy5hZGQoJ3JlZnRl
c3RzL2Zvby9tdWx0aXBsZS1ib3RoLXN1Y2Nlc3MuaHRtbCcsIGFjdHVhbF9jaGVja3N1bT0nYWJj
JywgYWN0dWFsX2ltYWdlPSdhYmMnKQorICAgIHRlc3RzLmFkZCgncmVmdGVzdHMvZm9vL211bHRp
cGxlLWJvdGgtZmFpbHVyZS5odG1sJywgYWN0dWFsX2NoZWNrc3VtPSdhYmMnLCBhY3R1YWxfaW1h
Z2U9J2FiYycpCisKKyAgICB0ZXN0cy5hZGQoJ3JlZnRlc3RzL2Zvby9tYXRjaGluZy1yZWYuaHRt
bCcsIGFjdHVhbF9jaGVja3N1bT0nYWJjJywgYWN0dWFsX2ltYWdlPSdhYmMnKQorICAgIHRlc3Rz
LmFkZCgncmVmdGVzdHMvZm9vL21pc21hdGNoaW5nLXJlZi5odG1sJywgYWN0dWFsX2NoZWNrc3Vt
PSdkZWYnLCBhY3R1YWxfaW1hZ2U9J2RlZicpCisgICAgdGVzdHMuYWRkKCdyZWZ0ZXN0cy9mb28v
c2Vjb25kLW1pc21hdGNoaW5nLXJlZi5odG1sJywgYWN0dWFsX2NoZWNrc3VtPSdnaGknLCBhY3R1
YWxfaW1hZ2U9J2doaScpCisKICAgICAjIFRoZSBmb2xsb3dpbmcgZmlsZXMgc2hvdWxkbid0IGJl
IHRyZWF0ZWQgYXMgcmVmdGVzdHMKICAgICB0ZXN0cy5hZGRfcmVmdGVzdCgncmVmdGVzdHMvZm9v
L3VubGlzdGVkdGVzdC5odG1sJywgJ3JlZnRlc3RzL2Zvby91bmxpc3RlZHRlc3QtZXhwZWN0ZWQu
aHRtbCcsIHNhbWVfaW1hZ2U9VHJ1ZSkKICAgICB0ZXN0cy5hZGQoJ3JlZnRlc3RzL2Zvby9yZWZl
cmVuY2UvYmFyL2NvbW1vbi5odG1sJykKQEAgLTI2Niw2ICsyNzcsMjEgQEAgV09OVEZJWCBTS0lQ
IDogZmFpbHVyZXMvZXhwZWN0ZWQvZXhjZXB0aQogCiAgICAgYWRkX2ZpbGUoZmlsZXMsICdyZWZ0
ZXN0cy9mb28vcmVmdGVzdC5saXN0JywgIiIiCiA9PSB0ZXN0Lmh0bWwgdGVzdC1yZWYuaHRtbAor
Cis9PSBtdWx0aXBsZS1tYXRjaC1zdWNjZXNzLmh0bWwgbWlzbWF0Y2hpbmctcmVmLmh0bWwKKz09
IG11bHRpcGxlLW1hdGNoLXN1Y2Nlc3MuaHRtbCBtYXRjaGluZy1yZWYuaHRtbAorPT0gbXVsdGlw
bGUtbWF0Y2gtZmFpbHVyZS5odG1sIG1pc21hdGNoaW5nLXJlZi5odG1sCis9PSBtdWx0aXBsZS1t
YXRjaC1mYWlsdXJlLmh0bWwgc2Vjb25kLW1pc21hdGNoaW5nLXJlZi5odG1sCishPSBtdWx0aXBs
ZS1taXNtYXRjaC1zdWNjZXNzLmh0bWwgbWlzbWF0Y2hpbmctcmVmLmh0bWwKKyE9IG11bHRpcGxl
LW1pc21hdGNoLXN1Y2Nlc3MuaHRtbCBzZWNvbmQtbWlzbWF0Y2hpbmctcmVmLmh0bWwKKyE9IG11
bHRpcGxlLW1pc21hdGNoLWZhaWx1cmUuaHRtbCBtaXNtYXRjaGluZy1yZWYuaHRtbAorIT0gbXVs
dGlwbGUtbWlzbWF0Y2gtZmFpbHVyZS5odG1sIG1hdGNoaW5nLXJlZi5odG1sCis9PSBtdWx0aXBs
ZS1ib3RoLXN1Y2Nlc3MuaHRtbCBtYXRjaGluZy1yZWYuaHRtbAorPT0gbXVsdGlwbGUtYm90aC1z
dWNjZXNzLmh0bWwgbWlzbWF0Y2hpbmctcmVmLmh0bWwKKyE9IG11bHRpcGxlLWJvdGgtc3VjY2Vz
cy5odG1sIHNlY29uZC1taXNtYXRjaGluZy1yZWYuaHRtbAorPT0gbXVsdGlwbGUtYm90aC1mYWls
dXJlLmh0bWwgbWF0Y2hpbmctcmVmLmh0bWwKKyE9IG11bHRpcGxlLWJvdGgtZmFpbHVyZS5odG1s
IHNlY29uZC1taXNtYXRjaGluZy1yZWYuaHRtbAorIT0gbXVsdGlwbGUtYm90aC1mYWlsdXJlLmh0
bWwgbWF0Y2hpbmctcmVmLmh0bWwKICIiIikKIAogICAgICMgRklYTUU6IFRoaXMgdGVzdCB3YXMg
b25seSBiZWluZyBpZ25vcmVkIGJlY2F1c2Ugb2YgbWlzc2luZyBhIGxlYWRpbmcgJy8nLgo=
</data>
<flag name="review"
          id="117060"
          type_id="1"
          status="+"
          setter="dpranke"
    />
    <flag name="commit-queue"
          id="117170"
          type_id="3"
          status="-"
          setter="dpranke"
    />
          </attachment>
      

    </bug>

</bugzilla>