<?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>50367</bug_id>
          
          <creation_ts>2010-12-01 19:46:45 -0800</creation_ts>
          <short_desc>nrwt multiprocessing - clean up dump_render_tree_thread.py</short_desc>
          <delta_ts>2011-01-11 19:00:29 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>
          <dependson>50450</dependson>
          <blocked>50372</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>eric</cc>
    
    <cc>hayato</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
    
    <cc>yutak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>315994</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-12-01 19:46:45 -0800</bug_when>
    <thetext>new-run-webkit-tests: clean up dump_render_tree_thread.py</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315995</commentid>
    <comment_count>1</comment_count>
      <attachid>75347</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-12-01 19:48:56 -0800</bug_when>
    <thetext>Created attachment 75347
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316417</commentid>
    <comment_count>2</comment_count>
      <attachid>75347</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-12-02 14:26:05 -0800</bug_when>
    <thetext>Comment on attachment 75347
Patch

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

These refactorings all seem reasonable.  I would have been able to review this faster if it were in smaller parts.  In its current form, there was lots of scrolling up and down.  Please fix the comments before committing.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:71
&gt; -        self._canceled = False
&gt; +        self._cancelled = False

According to the internet, cancelled is the British spelling and canceled is the American spelling.  Doesn&apos;t seem worthwhile to change it here.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:244
&gt; +    def _cleanup(self):

Should __del__ call _cleanup?  Looks like self._tests_run_file won&apos;t get cleaned up if you don&apos;t call run().

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:270
&gt; +        self._test_list_timing_stats[list_name] = \
&gt; +           (num_tests, elapsed_time)

Nit: If you put the opening ( on the previous line, you don&apos;t need the line continuation \.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:285
&gt; +        driver_timeout = 3.0 * float(test_input.timeout) / 1000.0
&gt; +        thread_padding = 1.0
&gt; +        thread_timeout = driver_timeout + thread_padding

Nit: It would be nice if the variables had time units in their name (e.g., driver_timeout_sec and thread_timeout_sec).

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:333
&gt; +            def run(self):
&gt; +                result = worker._run_single_test(driver, test_input)

I think you can do:
def run(self, worker=self):

And avoid having to set worker = self above.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:471
&gt; +        if self._batch_size &gt; 0 and self._batch_count &gt;= self._batch_size:

Nit: self._batch_count &gt;= self._batch_size &gt; 0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316433</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-12-02 15:00:53 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 75347 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75347&amp;action=review
&gt; 
&gt; These refactorings all seem reasonable.  I would have been able to review this faster if it were in smaller parts.  In its current form, there was lots of scrolling up and down.  Please fix the comments before committing.
&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:71
&gt; &gt; -        self._canceled = False
&gt; &gt; +        self._cancelled = False
&gt; 
&gt; According to the internet, cancelled is the British spelling and canceled is the American spelling.  Doesn&apos;t seem worthwhile to change it here.
&gt; 

Okay. I thought it was just misspelled. I guess I must be British. I&apos;ll change it back.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:244
&gt; &gt; +    def _cleanup(self):
&gt; 
&gt; Should __del__ call _cleanup?  Looks like self._tests_run_file won&apos;t get cleaned up if you don&apos;t call run().
&gt;

Good idea.
 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:270
&gt; &gt; +        self._test_list_timing_stats[list_name] = \
&gt; &gt; +           (num_tests, elapsed_time)
&gt; 
&gt; Nit: If you put the opening ( on the previous line, you don&apos;t need the line continuation \.
&gt;

Hm. I would fear that it would confuse using () for breaking up expressions with using () for creating tuples. Maybe I&apos;ll just go over 80 cols ;)
 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:285
&gt; &gt; +        driver_timeout = 3.0 * float(test_input.timeout) / 1000.0
&gt; &gt; +        thread_padding = 1.0
&gt; &gt; +        thread_timeout = driver_timeout + thread_padding
&gt; 
&gt; Nit: It would be nice if the variables had time units in their name (e.g., driver_timeout_sec and thread_timeout_sec).
&gt;

Will do.
 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:333
&gt; &gt; +            def run(self):
&gt; &gt; +                result = worker._run_single_test(driver, test_input)
&gt; 
&gt; I think you can do:
&gt; def run(self, worker=self):
&gt; 
&gt; And avoid having to set worker = self above.
&gt; 

Interesting. I had to think about that for quite a while to see why that would work. I think I&apos;ll leave the convention of run() not taking any arguments alone and rely on lexical scoping.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:471
&gt; &gt; +        if self._batch_size &gt; 0 and self._batch_count &gt;= self._batch_size:
&gt; 
&gt; Nit: self._batch_count &gt;= self._batch_size &gt; 0

Aaah. My eyes! I didn&apos;t know you could do that w/ Python.

Apparently 1 &gt; 2 &gt; 3 evaluates to False but 1 &gt; (2 &gt; 3) evaluates to True (not too surprising, but still something of a obscurity). Given that no other language that people are commonly used to works this way, I think I&apos;ll avoid this construct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316435</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-12-02 15:02:31 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 75347 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75347&amp;action=review
&gt; 
&gt; These refactorings all seem reasonable.  I would have been able to review this faster if it were in smaller parts.  In its current form, there was lots of scrolling up and down.  Please fix the comments before committing.
&gt; 

Yes, this is true. On the other hand, having five patches in flight at once was enough for one day ;)

In retrospect, a lot of this cleanup should&apos;ve been completely outside of the rest of this set of patches, so I will try to to better in the future.

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316453</commentid>
    <comment_count>5</comment_count>
      <attachid>75421</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-12-02 15:26:32 -0800</bug_when>
    <thetext>Created attachment 75421
update w/ review feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316480</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-12-02 15:55:45 -0800</bug_when>
    <thetext>Committed r73211: &lt;http://trac.webkit.org/changeset/73211&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316773</commentid>
    <comment_count>7</comment_count>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2010-12-03 03:42:35 -0800</bug_when>
    <thetext>Hi,

This change seemed to break Chromium &quot;Webkit Win (dbg)(2)&quot; bot, so I rolled it out.

After this patch was merged, the bot&apos;s output started to contain a LOT of messages such as:

2010-12-03 03:17:20,342 14092 message_broker.py:134 ERROR worker/3 (tid 7996) is wedged
2010-12-03 03:17:20,342 14092 message_broker.py:149 ERROR File: &quot;e:\b\depot_tools\python_bin\lib\threading.py&quot;, line 499, in __bootstrap
2010-12-03 03:17:20,342 14092 message_broker.py:151 ERROR   self.__bootstrap_inner()
2010-12-03 03:17:20,342 14092 message_broker.py:149 ERROR File: &quot;e:\b\depot_tools\python_bin\lib\threading.py&quot;, line 527, in __bootstrap_inner
2010-12-03 03:17:20,342 14092 message_broker.py:151 ERROR   self.run()
2010-12-03 03:17:20,342 14092 message_broker.py:149 ERROR File: &quot;e:\b\build\slave\Webkit_Win__dbg__2_\build\src\third_party\WebKit\WebKitTools\Scripts\webkitpy\layout_tests\layout_package\dump_render_tree_thread.py&quot;, line 198, in run
2010-12-03 03:17:20,342 14092 message_broker.py:151 ERROR   self._covered_run()
2010-12-03 03:17:20,342 14092 message_broker.py:149 ERROR File: &quot;e:\b\build\slave\Webkit_Win__dbg__2_\build\src\third_party\WebKit\WebKitTools\Scripts\webkitpy\layout_tests\layout_package\dump_render_tree_thread.py&quot;, line 207, in _covered_run
2010-12-03 03:17:20,342 14092 message_broker.py:151 ERROR   self._run(test_runner=None, result_summary=None)
2010-12-03 03:17:20,342 14092 message_broker.py:149 ERROR File: &quot;e:\b\build\slave\Webkit_Win__dbg__2_\build\src\third_party\WebKit\WebKitTools\Scripts\webkitpy\layout_tests\layout_package\dump_render_tree_thread.py&quot;, line 240, in _run
2010-12-03 03:17:20,342 14092 message_broker.py:151 ERROR   self.handle_test_list(current_group, filename_list)
2010-12-03 03:17:20,342 14092 message_broker.py:149 ERROR File: &quot;e:\b\build\slave\Webkit_Win__dbg__2_\build\src\third_party\WebKit\WebKitTools\Scripts\webkitpy\layout_tests\layout_package\dump_render_tree_thread.py&quot;, line 264, in handle_test_list
2010-12-03 03:17:20,342 14092 message_broker.py:151 ERROR   self._run_test(test_input)
2010-12-03 03:17:20,342 14092 message_broker.py:149 ERROR File: &quot;e:\b\build\slave\Webkit_Win__dbg__2_\build\src\third_party\WebKit\WebKitTools\Scripts\webkitpy\layout_tests\layout_package\dump_render_tree_thread.py&quot;, line 303, in _run_test
2010-12-03 03:17:20,342 14092 message_broker.py:151 ERROR   result = self._run_test_in_this_thread(test_input)
2010-12-03 03:17:20,342 14092 message_broker.py:149 ERROR File: &quot;e:\b\build\slave\Webkit_Win__dbg__2_\build\src\third_party\WebKit\WebKitTools\Scripts\webkitpy\layout_tests\layout_package\dump_render_tree_thread.py&quot;, line 376, in _run_test_in_this_thread
2010-12-03 03:17:20,342 14092 message_broker.py:151 ERROR   test_result = self._run_single_test(test_input, self._driver)
2010-12-03 03:17:20,342 14092 message_broker.py:149 ERROR File: &quot;e:\b\build\slave\Webkit_Win__dbg__2_\build\src\third_party\WebKit\WebKitTools\Scripts\webkitpy\layout_tests\layout_package\dump_render_tree_thread.py&quot;, line 388, in _run_single_test
2010-12-03 03:17:20,342 14092 message_broker.py:151 ERROR   test_output = driver.run_test(test_input)
2010-12-03 03:17:20,342 14092 message_broker.py:149 ERROR File: &quot;e:\b\build\slave\Webkit_Win__dbg__2_\build\src\third_party\WebKit\WebKitTools\Scripts\webkitpy\layout_tests\port\chromium.py&quot;, line 525, in run_test
2010-12-03 03:17:20,342 14092 message_broker.py:151 ERROR   (line, crash) = self._write_command_and_read_line(input=None)
2010-12-03 03:17:20,342 14092 message_broker.py:149 ERROR File: &quot;e:\b\build\slave\Webkit_Win__dbg__2_\build\src\third_party\WebKit\WebKitTools\Scripts\webkitpy\layout_tests\port\chromium.py&quot;, line 434, in _write_command_and_read_line
2010-12-03 03:17:20,342 14092 message_broker.py:151 ERROR   line = self._proc.stdout.readline()


To roll out this patch, I had to roll out r73222, r73228 and r73231 because there was some conflict and I did not understand how to resolve. Sorry for all the mess I caused, and I deeply appreciate your understandings to keep our bots in a healthy state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316792</commentid>
    <comment_count>8</comment_count>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2010-12-03 05:45:23 -0800</bug_when>
    <thetext>After this change was reverted, the bot recovered and became stable for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316929</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-12-03 11:39:36 -0800</bug_when>
    <thetext>Interesting. This patch shouldn&apos;t have changed any functionality. I will look into it.

As for rolling back the others, no problem. You had to roll them all out if you need to roll out this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319885</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-12-09 19:58:13 -0800</bug_when>
    <thetext>This patch landed downstream in r68127, and yutak rolled it back in r68163. The buildbot logs for this bot can be found on this page:

http://build.chromium.org/p/chromium/waterfall?builder=Webkit%20Win%20(dbg)(2)&amp;ast_time=1291393636

this corresponds to builds 2182 - 2197 on that bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319912</commentid>
    <comment_count>11</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-12-09 21:11:36 -0800</bug_when>
    <thetext>all of the debug windows bots seem to wedge far more consistently with this patch. Win Release may be slightly more frequent. Linux doesn&apos;t wedge at all, and Mac won&apos;t since we only run 1 thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332864</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-11 19:00:29 -0800</bug_when>
    <thetext>closing ... the new patches will be different.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75347</attachid>
            <date>2010-12-01 19:48:56 -0800</date>
            <delta_ts>2010-12-02 15:26:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50367-20101201194854.patch</filename>
            <type>text/plain</type>
            <size>29892</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAwZThlYTZlNTdiM2Y4YzQ2M2ZkMDE3MTA3YjRhZTkzZDY0ODNkOGE0Li4zZWIzYWNh
OTM0MjkyZTY4NzdlNDk5NWZlMGFmYmJkNTBiZWE3ZGViIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjUgQEAK
IDIwMTAtMTItMDEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgaXMg
YSBidW5jaCBvZiBjbGVhbnVwIC8gcmVmYWN0b3Jpbmcgb2YgdGhlIGZpbGUKKyAgICAgICAgYmVs
b3cuIEl0IG1vdmVzIGEgYnVuY2ggb2YgZnJlZSBmdW5jdGlvbnMgdG8gbWV0aG9kcyBvbiB0aGUK
KyAgICAgICAgVGVzdFNoZWxsVGhyZWFkIGNsYXNzLCBhbmQgcmVzdHJ1Y3R1cmVzIG90aGVyIG1l
dGhvZHMgdG8gYmUKKyAgICAgICAgY2xvc2VyIHRvIHRoZSBzdHJ1Y3R1cmUgd2UnbGwgbmVlZCBm
b3IgdGhlIG11bHRpcHJvY2Vzc2luZworICAgICAgICByZXdyaXRlLgorCisgICAgICAgIEl0IGFs
c28gbWFrZXMgdGhlIGxvZ2ljIG9mIC0tcnVuLXNpbmdseSBhICpsb3QqIGVhc2llciB0byBmb2xs
b3cKKyAgICAgICAgYnkgbmVzdGxpbmcgYWxsIG9mIHRoZSBzZXBhcmF0ZS10aHJlYWQgbG9naWMg
aW50byBhIHNpbmdsZQorICAgICAgICByb3V0aW5lLgorCisgICAgICAgIFRoZXJlIHNob3VsZCBi
ZSBubyBzZW1hbnRpYyBjaGFuZ2VzIGluIHRoaXMgcGF0Y2gsIGp1c3QgY2xlYW51cC4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAzNjcKKworICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBf
cmVuZGVyX3RyZWVfdGhyZWFkLnB5OgorCisyMDEwLTEyLTAxICBEaXJrIFByYW5rZSAgPGRwcmFu
a2VAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCiAKICAg
ICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IGFkZCBhIC0tZHJ5LXJ1biAvIC1uIGZsYWcKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90
aHJlYWQucHkKaW5kZXggZmRiOGRhNmNjODBiNzNlZTdkZmI3ZDYxZDlkYmJjYmJhYmJjYjQ3OC4u
YzY4Y2E1NDI3NDY5Yzk2NmI4MDY4MjYwNmRkNzYxMjUxYzY5MzFjOCAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVt
cF9yZW5kZXJfdHJlZV90aHJlYWQucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkK
QEAgLTYyLDE2NCArNjIsMjAgQEAgX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5s
YXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UuIgogICAgICAgICAgICAgICAgICAgICAgICAgICJk
dW1wX3JlbmRlcl90cmVlX3RocmVhZCIpCiAKIAotZGVmIF9leHBlY3RlZF90ZXN0X291dHB1dChw
b3J0LCBmaWxlbmFtZSk6Ci0gICAgIiIiUmV0dXJucyBhbiBleHBlY3RlZCBUZXN0T3V0cHV0IG9i
amVjdC4iIiIKLSAgICByZXR1cm4gdGVzdF9vdXRwdXQuVGVzdE91dHB1dChwb3J0LmV4cGVjdGVk
X3RleHQoZmlsZW5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQu
ZXhwZWN0ZWRfaW1hZ2UoZmlsZW5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBvcnQuZXhwZWN0ZWRfY2hlY2tzdW0oZmlsZW5hbWUpKQotCi1kZWYgX3Byb2Nlc3Nfb3V0
cHV0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5wdXQsIHRlc3RfdHlwZXMsIHRlc3RfYXJncywKLSAg
ICAgICAgICAgICAgICAgICAgdGVzdF9vdXRwdXQsIHdvcmtlcl9uYW1lKToKLSAgICAiIiJSZWNl
aXZlcyB0aGUgb3V0cHV0IGZyb20gYSBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzLCBzdWJqZWN0cyBp
dCB0byBhCi0gICAgbnVtYmVyIG9mIHRlc3RzLCBhbmQgcmV0dXJucyBhIGxpc3Qgb2YgZmFpbHVy
ZSB0eXBlcyB0aGUgdGVzdCBwcm9kdWNlZC4KLQotICAgIEFyZ3M6Ci0gICAgICBwb3J0OiBwb3J0
LXNwZWNpZmljIGhvb2tzCi0gICAgICBvcHRpb25zOiBjb21tYW5kIGxpbmUgb3B0aW9ucyBhcmd1
bWVudCBmcm9tIG9wdHBhcnNlCi0gICAgICBwcm9jOiBhbiBhY3RpdmUgRHVtcFJlbmRlclRyZWUg
cHJvY2VzcwotICAgICAgdGVzdF9pbnB1dDogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmls
ZW5hbWUgYW5kIHRpbWVvdXQKLSAgICAgIHRlc3RfdHlwZXM6IGxpc3Qgb2YgdGVzdCB0eXBlcyB0
byBzdWJqZWN0IHRoZSBvdXRwdXQgdG8KLSAgICAgIHRlc3RfYXJnczogYXJndW1lbnRzIHRvIGJl
IHBhc3NlZCB0byBlYWNoIHRlc3QKLSAgICAgIHRlc3Rfb3V0cHV0OiBhIFRlc3RPdXRwdXQgb2Jq
ZWN0IGNvbnRhaW5pbmcgdGhlIG91dHB1dCBvZiB0aGUgdGVzdAotICAgICAgd29ya2VyX25hbWU6
IHdvcmtlciBuYW1lIGZvciBsb2dnaW5nCi0KLSAgICBSZXR1cm5zOiBhIFRlc3RSZXN1bHQgb2Jq
ZWN0Ci0gICAgIiIiCi0gICAgZmFpbHVyZXMgPSBbXQotCi0gICAgaWYgdGVzdF9vdXRwdXQuY3Jh
c2g6Ci0gICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVDcmFzaCgp
KQotICAgIGlmIHRlc3Rfb3V0cHV0LnRpbWVvdXQ6Ci0gICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0
ZXN0X2ZhaWx1cmVzLkZhaWx1cmVUaW1lb3V0KCkpCi0KLSAgICB0ZXN0X25hbWUgPSBwb3J0LnJl
bGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9pbnB1dC5maWxlbmFtZSkKLSAgICBpZiB0ZXN0X291
dHB1dC5jcmFzaDoKLSAgICAgICAgX2xvZy5kZWJ1ZygiJXMgU3RhY2t0cmFjZSBmb3IgJXM6XG4l
cyIgJSAod29ya2VyX25hbWUsIHRlc3RfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9vdXRwdXQuZXJyb3IpKQotICAgICAgICBmaWxl
bmFtZSA9IG9zLnBhdGguam9pbihvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LCB0ZXN0X25hbWUp
Ci0gICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0gKyAiLXN0
YWNrLnR4dCIKLSAgICAgICAgcG9ydC5tYXliZV9tYWtlX2RpcmVjdG9yeShvcy5wYXRoLnNwbGl0
KGZpbGVuYW1lKVswXSkKLSAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihmaWxlbmFtZSwgIndiIiwg
InV0Zi04IikgYXMgZmlsZToKLSAgICAgICAgICAgIGZpbGUud3JpdGUodGVzdF9vdXRwdXQuZXJy
b3IpCi0gICAgZWxpZiB0ZXN0X291dHB1dC5lcnJvcjoKLSAgICAgICAgX2xvZy5kZWJ1ZygiJXMg
JXMgb3V0cHV0IHN0ZGVyciBsaW5lczpcbiVzIiAlICh3b3JrZXJfbmFtZSwgdGVzdF9uYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
c3Rfb3V0cHV0LmVycm9yKSkKLQotICAgIGV4cGVjdGVkX3Rlc3Rfb3V0cHV0ID0gX2V4cGVjdGVk
X3Rlc3Rfb3V0cHV0KHBvcnQsIHRlc3RfaW5wdXQuZmlsZW5hbWUpCi0KLSAgICAjIENoZWNrIHRo
ZSBvdXRwdXQgYW5kIHNhdmUgdGhlIHJlc3VsdHMuCi0gICAgc3RhcnRfdGltZSA9IHRpbWUudGlt
ZSgpCi0gICAgdGltZV9mb3JfZGlmZnMgPSB7fQotICAgIGZvciB0ZXN0X3R5cGUgaW4gdGVzdF90
eXBlczoKLSAgICAgICAgc3RhcnRfZGlmZl90aW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgbmV3
X2ZhaWx1cmVzID0gdGVzdF90eXBlLmNvbXBhcmVfb3V0cHV0KHBvcnQsIHRlc3RfaW5wdXQuZmls
ZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZXN0X2FyZ3MsIHRlc3Rfb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXhwZWN0ZWRfdGVzdF9vdXRwdXQpCi0gICAgICAgICMgRG9uJ3QgYWRk
IGFueSBtb3JlIGZhaWx1cmVzIGlmIHdlIGFscmVhZHkgaGF2ZSBhIGNyYXNoLCBzbyB3ZSBkb24n
dAotICAgICAgICAjIGRvdWJsZS1yZXBvcnQgdGhvc2UgdGVzdHMuIFdlIGRvIGRvdWJsZS1yZXBv
cnQgZm9yIHRpbWVvdXRzIHNpbmNlCi0gICAgICAgICMgd2Ugc3RpbGwgd2FudCB0byBzZWUgdGhl
IHRleHQgYW5kIGltYWdlIG91dHB1dC4KLSAgICAgICAgaWYgbm90IHRlc3Rfb3V0cHV0LmNyYXNo
OgotICAgICAgICAgICAgZmFpbHVyZXMuZXh0ZW5kKG5ld19mYWlsdXJlcykKLSAgICAgICAgdGlt
ZV9mb3JfZGlmZnNbdGVzdF90eXBlLl9fY2xhc3NfXy5fX25hbWVfX10gPSAoCi0gICAgICAgICAg
ICB0aW1lLnRpbWUoKSAtIHN0YXJ0X2RpZmZfdGltZSkKLQotICAgIHRvdGFsX3RpbWVfZm9yX2Fs
bF9kaWZmcyA9IHRpbWUudGltZSgpIC0gc3RhcnRfZGlmZl90aW1lCi0gICAgcmV0dXJuIHRlc3Rf
cmVzdWx0cy5UZXN0UmVzdWx0KHRlc3RfaW5wdXQuZmlsZW5hbWUsIGZhaWx1cmVzLCB0ZXN0X291
dHB1dC50ZXN0X3RpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFs
X3RpbWVfZm9yX2FsbF9kaWZmcywgdGltZV9mb3JfZGlmZnMpCi0KLQotZGVmIF9wYWRfdGltZW91
dCh0aW1lb3V0KToKLSAgICAiIiJSZXR1cm5zIGEgc2FmZSBtdWx0aXBsZSBvZiB0aGUgcGVyLXRl
c3QgdGltZW91dCB2YWx1ZSB0byB1c2UKLSAgICB0byBkZXRlY3QgaHVuZyB0ZXN0IHRocmVhZHMu
Ci0KLSAgICAiIiIKLSAgICAjIFdoZW4gd2UncmUgcnVubmluZyBvbmUgdGVzdCBwZXIgRHVtcFJl
bmRlclRyZWUgcHJvY2Vzcywgd2UgY2FuCi0gICAgIyBlbmZvcmNlIGEgaGFyZCB0aW1lb3V0LiAg
VGhlIER1bXBSZW5kZXJUcmVlIHdhdGNoZG9nIHVzZXMgMi41eAotICAgICMgdGhlIHRpbWVvdXQ7
IHdlIHdhbnQgdG8gYmUgbGFyZ2VyIHRoYW4gdGhhdC4KLSAgICByZXR1cm4gdGltZW91dCAqIDMK
LQotCi1kZWYgX21pbGxpc2Vjb25kc190b19zZWNvbmRzKG1zZWNzKToKLSAgICByZXR1cm4gZmxv
YXQobXNlY3MpIC8gMTAwMC4wCi0KLQotZGVmIF9zaG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hlY2tz
dW0ob3B0aW9ucyk6Ci0gICAgcmV0dXJuIG9wdGlvbnMucGl4ZWxfdGVzdHMgYW5kIG5vdCAob3B0
aW9ucy5uZXdfYmFzZWxpbmUgb3Igb3B0aW9ucy5yZXNldF9yZXN1bHRzKQotCi0KLWRlZiBfcnVu
X3NpbmdsZV90ZXN0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5wdXQsIHRlc3RfdHlwZXMsIHRlc3Rf
YXJncywgZHJpdmVyLCB3b3JrZXJfbmFtZSk6Ci0gICAgIyBGSVhNRTogUHVsbCB0aGlzIGludG8g
VGVzdFNoZWxsVGhyZWFkLl9ydW4oKS4KLQotICAgICMgVGhlIGltYWdlIGhhc2ggaXMgdXNlZCB0
byBhdm9pZCBkb2luZyBhbiBpbWFnZSBkdW1wIGlmIHRoZQotICAgICMgY2hlY2tzdW1zIG1hdGNo
LCBzbyBpdCBzaG91bGQgYmUgc2V0IHRvIGEgYmxhbmsgdmFsdWUgaWYgd2UKLSAgICAjIGFyZSBn
ZW5lcmF0aW5nIGEgbmV3IGJhc2VsaW5lLiAgKE90aGVyd2lzZSwgYW4gaW1hZ2UgZnJvbSBhCi0g
ICAgIyBwcmV2aW91cyBydW4gd2lsbCBiZSBjb3BpZWQgaW50byB0aGUgYmFzZWxpbmUuIiIiCi0g
ICAgaWYgX3Nob3VsZF9mZXRjaF9leHBlY3RlZF9jaGVja3N1bShvcHRpb25zKToKLSAgICAgICAg
dGVzdF9pbnB1dC5pbWFnZV9oYXNoID0gcG9ydC5leHBlY3RlZF9jaGVja3N1bSh0ZXN0X2lucHV0
LmZpbGVuYW1lKQotICAgIHRlc3Rfb3V0cHV0ID0gZHJpdmVyLnJ1bl90ZXN0KHRlc3RfaW5wdXQp
Ci0gICAgcmV0dXJuIF9wcm9jZXNzX291dHB1dChwb3J0LCBvcHRpb25zLCB0ZXN0X2lucHV0LCB0
ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X291
dHB1dCwgd29ya2VyX25hbWUpCi0KLQotY2xhc3MgU2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcu
VGhyZWFkKToKLSAgICAiIiJUaHJlYWQgd3JhcHBlciBmb3IgcnVubmluZyBhIHNpbmdsZSB0ZXN0
IGZpbGUuIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgd29ya2Vy
X251bWJlciwgd29ya2VyX25hbWUsCi0gICAgICAgICAgICAgICAgIHRlc3RfaW5wdXQsIHRlc3Rf
dHlwZXMsIHRlc3RfYXJncyk6Ci0gICAgICAgICIiIgotICAgICAgICBBcmdzOgotICAgICAgICAg
IHBvcnQ6IG9iamVjdCBpbXBsZW1lbnRpbmcgcG9ydC1zcGVjaWZpYyBob29rcwotICAgICAgICAg
IG9wdGlvbnM6IGNvbW1hbmQgbGluZSBhcmd1bWVudCBvYmplY3QgZnJvbSBvcHRwYXJzZQotICAg
ICAgICAgIHdvcmtlcl9udW1iZXI6IHdvcmtlciBudW1iZXIgZm9yIHRlc3RzCi0gICAgICAgICAg
d29ya2VyX25hbWU6IGZvciBsb2dnaW5nCi0gICAgICAgICAgdGVzdF9pbnB1dDogT2JqZWN0IGNv
bnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUgYW5kIHRpbWVvdXQKLSAgICAgICAgICB0ZXN0X3R5
cGVzOiBBIGxpc3Qgb2YgVGVzdFR5cGUgb2JqZWN0cyB0byBydW4gdGhlIHRlc3Qgb3V0cHV0Ci0g
ICAgICAgICAgICAgIGFnYWluc3QuCi0gICAgICAgICAgdGVzdF9hcmdzOiBBIFRlc3RBcmd1bWVu
dHMgb2JqZWN0IHRvIHBhc3MgdG8gZWFjaCBUZXN0VHlwZS4KLSAgICAgICAgIiIiCi0KLSAgICAg
ICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLl9wb3J0ID0g
cG9ydAotICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwotICAgICAgICBzZWxmLl90ZXN0
X2lucHV0ID0gdGVzdF9pbnB1dAotICAgICAgICBzZWxmLl90ZXN0X3R5cGVzID0gdGVzdF90eXBl
cwotICAgICAgICBzZWxmLl90ZXN0X2FyZ3MgPSB0ZXN0X2FyZ3MKLSAgICAgICAgc2VsZi5fZHJp
dmVyID0gTm9uZQotICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgot
ICAgICAgICBzZWxmLl9uYW1lID0gd29ya2VyX25hbWUKLQotICAgIGRlZiBydW4oc2VsZik6Ci0g
ICAgICAgIHNlbGYuX2NvdmVyZWRfcnVuKCkKLQotICAgIGRlZiBfY292ZXJlZF9ydW4oc2VsZik6
Ci0gICAgICAgICMgRklYTUU6IHRoaXMgaXMgYSBzZXBhcmF0ZSByb3V0aW5lIHRvIHdvcmsgYXJv
dW5kIGEgYnVnCi0gICAgICAgICMgaW4gY292ZXJhZ2U6IHNlZSBodHRwOi8vYml0YnVja2V0Lm9y
Zy9uZWQvY292ZXJhZ2VweS9pc3N1ZS84NS4KLSAgICAgICAgc2VsZi5fZHJpdmVyID0gc2VsZi5f
cG9ydC5jcmVhdGVfZHJpdmVyKHNlbGYuX3dvcmtlcl9udW1iZXIpCi0gICAgICAgIHNlbGYuX2Ry
aXZlci5zdGFydCgpCi0gICAgICAgIHNlbGYuX3Rlc3RfcmVzdWx0ID0gX3J1bl9zaW5nbGVfdGVz
dChzZWxmLl9wb3J0LCBzZWxmLl9vcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9pbnB1dCwgc2VsZi5fdGVzdF90eXBlcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfYXJn
cywgc2VsZi5fZHJpdmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fbmFtZSkKLSAgICAgICAgc2VsZi5fZHJpdmVyLnN0b3AoKQotCi0gICAgZGVm
IGdldF90ZXN0X3Jlc3VsdChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RfcmVzdWx0
Ci0KLQogY2xhc3MgV2F0Y2hhYmxlVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgICIiIlRo
aXMgY2xhc3MgYWJzdHJhY3RzIGFuIGludGVyZmFjZSB1c2VkIGJ5CiAgICAgcnVuX3dlYmtpdF90
ZXN0cy5UZXN0UnVubmVyLl93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaCBmb3IgdGhyZWFkCiAg
ICAgbWFuYWdlbWVudC4iIiIKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIHRocmVh
ZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBGYWxz
ZQorICAgICAgICBzZWxmLl9jYW5jZWxsZWQgPSBGYWxzZQogICAgICAgICBzZWxmLl9leGNlcHRp
b25faW5mbyA9IE5vbmUKICAgICAgICAgc2VsZi5fbmV4dF90aW1lb3V0ID0gTm9uZQogICAgICAg
ICBzZWxmLl90aHJlYWRfaWQgPSBOb25lCiAKICAgICBkZWYgY2FuY2VsKHNlbGYpOgogICAgICAg
ICAiIiJTZXQgYSBmbGFnIHRlbGxpbmcgdGhpcyB0aHJlYWQgdG8gcXVpdC4iIiIKLSAgICAgICAg
c2VsZi5fY2FuY2VsZWQgPSBUcnVlCisgICAgICAgIHNlbGYuX2NhbmNlbGxlZCA9IFRydWUKIAog
ICAgIGRlZiBjbGVhcl9uZXh0X3RpbWVvdXQoc2VsZik6CiAgICAgICAgICIiIk1hcmsgYSBmbGFn
IHRlbGxpbmcgdGhpcyB0aHJlYWQgdG8gc3RvcCBzZXR0aW5nIHRpbWVvdXRzLiIiIgpAQCAtMjYz
LDE0ICsxMTksMTkgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAg
ICAgICAgIHNlbGYuX25hbWUgPSB3b3JrZXJfbmFtZQogICAgICAgICBzZWxmLl9maWxlbmFtZV9s
aXN0X3F1ZXVlID0gZmlsZW5hbWVfbGlzdF9xdWV1ZQogICAgICAgICBzZWxmLl9yZXN1bHRfcXVl
dWUgPSByZXN1bHRfcXVldWUKLSAgICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdCA9IFtdCisKKyAg
ICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisgICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSBz
ZWxmLl9vcHRpb25zLmJhdGNoX3NpemUKICAgICAgICAgc2VsZi5fZHJpdmVyID0gTm9uZQotICAg
ICAgICBzZWxmLl90ZXN0X2dyb3VwX3RpbWluZ19zdGF0cyA9IHt9CisgICAgICAgIHNlbGYuX2hh
dmVfaHR0cF9sb2NrID0gRmFsc2UKKworICAgICAgICBzZWxmLl90ZXN0X3J1bm5lciA9IE5vbmUK
KyAgICAgICAgc2VsZi5fcmVzdWx0X3N1bW1hcnkgPSBOb25lCisgICAgICAgIHNlbGYuX3Rlc3Rf
bGlzdF90aW1pbmdfc3RhdHMgPSB7fQogICAgICAgICBzZWxmLl90ZXN0X3Jlc3VsdHMgPSBbXQog
ICAgICAgICBzZWxmLl9udW1fdGVzdHMgPSAwCiAgICAgICAgIHNlbGYuX3N0YXJ0X3RpbWUgPSAw
CiAgICAgICAgIHNlbGYuX3N0b3BfdGltZSA9IDAKLSAgICAgICAgc2VsZi5faGF2ZV9odHRwX2xv
Y2sgPSBGYWxzZQogICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF9iZWdpbiA9IDAKICAgICAg
ICAgc2VsZi5faHR0cF9sb2NrX3dhaXRfZW5kID0gMAogCkBAIC0yODAsMTIgKzE0MSwxMSBAQCBj
bGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KSkK
ICAgICAgICAgc2VsZi5fdGVzdF9hcmdzID0gc2VsZi5fZ2V0X3Rlc3RfYXJncyh3b3JrZXJfbnVt
YmVyKQogCi0gICAgICAgICMgQ3VycmVudCBncm91cCBvZiB0ZXN0cyB3ZSdyZSBydW5uaW5nLgot
ICAgICAgICBzZWxmLl9jdXJyZW50X2dyb3VwID0gTm9uZQotICAgICAgICAjIE51bWJlciBvZiB0
ZXN0cyBpbiBzZWxmLl9jdXJyZW50X2dyb3VwLgotICAgICAgICBzZWxmLl9udW1fdGVzdHNfaW5f
Y3VycmVudF9ncm91cCA9IE5vbmUKLSAgICAgICAgIyBUaW1lIGF0IHdoaWNoIHdlIHN0YXJ0ZWQg
cnVubmluZyB0ZXN0cyBmcm9tIHNlbGYuX2N1cnJlbnRfZ3JvdXAuCi0gICAgICAgIHNlbGYuX2N1
cnJlbnRfZ3JvdXBfc3RhcnRfdGltZSA9IE5vbmUKKyAgICAgICAgIyBBcHBlbmQgdGVzdHMgd2Un
cmUgcnVubmluZyB0byB0aGUgZXhpc3RpbmcgdGVzdHNfcnVuLnR4dCBmaWxlLgorICAgICAgICAj
IFRoaXMgaXMgY3JlYXRlZCBpbiBydW5fd2Via2l0X3Rlc3RzLnB5Ol9QcmVwYXJlTGlzdHNBbmRQ
cmludE91dHB1dC4KKyAgICAgICAgdGVzdHNfcnVuX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHNl
bGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAidGVzdHNfcnVuLnR4dCIpCisgICAgICAgIHNlbGYuX3Rlc3RzX3J1
bl9maWxlID0gY29kZWNzLm9wZW4odGVzdHNfcnVuX2ZpbGVuYW1lLCAiYSIsICJ1dGYtOCIpCiAK
ICAgICBkZWYgX2dldF90ZXN0X2FyZ3Moc2VsZiwgd29ya2VyX251bWJlcik6CiAgICAgICAgICIi
IlJldHVybnMgdGhlIHR1cGxlIG9mIGFyZ3VtZW50cyBmb3IgdGVzdHMgYW5kIGZvciBEdW1wUmVu
ZGVyVHJlZS4iIiIKQEAgLTMwNCw3ICsxNjQsNyBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0
Y2hhYmxlVGhyZWFkKToKICAgICBkZWYgZ2V0X3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRzKHNlbGYp
OgogICAgICAgICAiIiJSZXR1cm5zIGEgZGljdGlvbmFyeSBtYXBwaW5nIHRlc3QgZ3JvdXAgdG8g
YSB0dXBsZSBvZgogICAgICAgICAobnVtYmVyIG9mIHRlc3RzIGluIHRoYXQgZ3JvdXAsIHRpbWUg
dG8gcnVuIHRoZSB0ZXN0cykiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RfZ3JvdXBfdGlt
aW5nX3N0YXRzCisgICAgICAgIHJldHVybiBzZWxmLl90ZXN0X2xpc3RfdGltaW5nX3N0YXRzCiAK
ICAgICBkZWYgZ2V0X3Rlc3RfcmVzdWx0cyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBs
aXN0IG9mIGFsbCB0ZXN0cyBydW4gb24gdGhpcyB0aHJlYWQuCkBAIC0zMjEsNiArMTgxLDEyIEBA
IGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgogICAgIGRlZiBnZXRfbnVt
X3Rlc3RzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fbnVtX3Rlc3RzCiAKKyAgICBkZWYg
bmV4dF90aW1lb3V0KHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHRpbWUgdGhlIHRlc3Qg
aXMgc3VwcG9zZWQgdG8gZmluaXNoIGJ5LiIiIgorICAgICAgICBpZiBzZWxmLl9uZXh0X3RpbWVv
dXQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fbmV4dF90aW1lb3V0ICsgc2VsZi5faHR0cF9s
b2NrX3dhaXRfdGltZSgpCisgICAgICAgIHJldHVybiBzZWxmLl9uZXh0X3RpbWVvdXQKKwogICAg
IGRlZiBydW4oc2VsZik6CiAgICAgICAgICIiIkRlbGVnYXRlIG1haW4gd29yayB0byBhIGhlbHBl
ciBtZXRob2QgYW5kIHdhdGNoIGZvciB1bmNhdWdodAogICAgICAgICBleGNlcHRpb25zLiIiIgpA
QCAtMzMxLDIwICsxOTcsMTggQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVh
ZCk6CiAgICAgICAgICMgaW4gY292ZXJhZ2U6IHNlZSBodHRwOi8vYml0YnVja2V0Lm9yZy9uZWQv
Y292ZXJhZ2VweS9pc3N1ZS84NS4KICAgICAgICAgc2VsZi5fdGhyZWFkX2lkID0gdGhyZWFkLmdl
dF9pZGVudCgpCiAgICAgICAgIHNlbGYuX3N0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAg
ICBzZWxmLl9udW1fdGVzdHMgPSAwCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIF9sb2cuZGVi
dWcoJyVzIHN0YXJ0aW5nJyAlIChzZWxmLmdldE5hbWUoKSkpCisgICAgICAgICAgICBfbG9nLmRl
YnVnKCclcyBzdGFydGluZycgJSAoc2VsZi5fbmFtZSkpCiAgICAgICAgICAgICBzZWxmLl9ydW4o
dGVzdF9ydW5uZXI9Tm9uZSwgcmVzdWx0X3N1bW1hcnk9Tm9uZSkKLSAgICAgICAgICAgIF9sb2cu
ZGVidWcoJyVzIGRvbmUgKCVkIHRlc3RzKScgJSAoc2VsZi5nZXROYW1lKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuZ2V0X251bV90ZXN0cygpKSkKKyAgICAgICAgICAgIF9sb2cuZGVi
dWcoJyVzIGRvbmUgKCVkIHRlc3RzKScgJSAoc2VsZi5fbmFtZSwgc2VsZi5fbnVtX3Rlc3RzKSkK
ICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICAgICAgc2VsZi5fZXhj
ZXB0aW9uX2luZm8gPSBzeXMuZXhjX2luZm8oKQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMg
aW50ZXJydXB0ZWQiICUgc2VsZi5nZXROYW1lKCkpCisgICAgICAgICAgICBfbG9nLmRlYnVnKCIl
cyBpbnRlcnJ1cHRlZCIgJSBzZWxmLl9uYW1lKQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAg
ICAjIFNhdmUgdGhlIGV4Y2VwdGlvbiBmb3Igb3VyIGNhbGxlciB0byBzZWUuCiAgICAgICAgICAg
ICBzZWxmLl9leGNlcHRpb25faW5mbyA9IHN5cy5leGNfaW5mbygpCiAgICAgICAgICAgICBzZWxm
Ll9zdG9wX3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICAgICAgX2xvZy5lcnJvcignJXMgZHlp
bmcsIGV4Y2VwdGlvbiByYWlzZWQnICUgc2VsZi5nZXROYW1lKCkpCisgICAgICAgICAgICBfbG9n
LmVycm9yKCclcyBkeWluZywgZXhjZXB0aW9uIHJhaXNlZCcgJSBzZWxmLl9uYW1lKQogCiAgICAg
ICAgIHNlbGYuX3N0b3BfdGltZSA9IHRpbWUudGltZSgpCiAKQEAgLTM1NSwxMDggKzIxOSw5NyBA
QCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKICAgICAgICAgZG8gbXVs
dGktdGhyZWFkZWQgZGVidWdnaW5nLiIiIgogICAgICAgICBzZWxmLl9ydW4odGVzdF9ydW5uZXIs
IHJlc3VsdF9zdW1tYXJ5KQogCi0gICAgZGVmIGNhbmNlbChzZWxmKToKLSAgICAgICAgIiIiQ2xl
YW4gdXAgaHR0cCBsb2NrIGFuZCBzZXQgYSBmbGFnIHRlbGxpbmcgdGhpcyB0aHJlYWQgdG8gcXVp
dC4iIiIKLSAgICAgICAgc2VsZi5fc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCi0gICAgICAgIFdh
dGNoYWJsZVRocmVhZC5jYW5jZWwoc2VsZikKLQotICAgIGRlZiBuZXh0X3RpbWVvdXQoc2VsZik6
Ci0gICAgICAgICIiIlJldHVybiB0aGUgdGltZSB0aGUgdGVzdCBpcyBzdXBwb3NlZCB0byBmaW5p
c2ggYnkuIiIiCi0gICAgICAgIGlmIHNlbGYuX25leHRfdGltZW91dDoKLSAgICAgICAgICAgIHJl
dHVybiBzZWxmLl9uZXh0X3RpbWVvdXQgKyBzZWxmLl9odHRwX2xvY2tfd2FpdF90aW1lKCkKLSAg
ICAgICAgcmV0dXJuIHNlbGYuX25leHRfdGltZW91dAotCi0gICAgZGVmIF9odHRwX2xvY2tfd2Fp
dF90aW1lKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIHRpbWUgd2hhdCBodHRwIGxvY2tp
bmcgdGFrZXMuIiIiCi0gICAgICAgIGlmIHNlbGYuX2h0dHBfbG9ja193YWl0X2JlZ2luID09IDA6
Ci0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBpZiBzZWxmLl9odHRwX2xvY2tfd2FpdF9l
bmQgPT0gMDoKLSAgICAgICAgICAgIHJldHVybiB0aW1lLnRpbWUoKSAtIHNlbGYuX2h0dHBfbG9j
a193YWl0X2JlZ2luCi0gICAgICAgIHJldHVybiBzZWxmLl9odHRwX2xvY2tfd2FpdF9lbmQgLSBz
ZWxmLl9odHRwX2xvY2tfd2FpdF9iZWdpbgotCiAgICAgZGVmIF9ydW4oc2VsZiwgdGVzdF9ydW5u
ZXIsIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAgIiIiTWFpbiB3b3JrIGVudHJ5IHBvaW50IG9m
IHRoZSB0aHJlYWQuIEJhc2ljYWxseSB3ZSBwdWxsIHVybHMgZnJvbSB0aGUKICAgICAgICAgZmls
ZW5hbWUgcXVldWUgYW5kIHJ1biB0aGUgdGVzdHMgdW50aWwgd2UgcnVuIG91dCBvZiB1cmxzLgog
CiAgICAgICAgIElmIHRlc3RfcnVubmVyIGlzIG5vdCBOb25lLCB0aGVuIHdlIGNhbGwgdGVzdF9y
dW5uZXIuVXBkYXRlU3VtbWFyeSgpCi0gICAgICAgIHdpdGggdGhlIHJlc3VsdHMgb2YgZWFjaCB0
ZXN0LiIiIgotICAgICAgICBiYXRjaF9zaXplID0gc2VsZi5fb3B0aW9ucy5iYXRjaF9zaXplCi0g
ICAgICAgIGJhdGNoX2NvdW50ID0gMAorICAgICAgICB3aXRoIHRoZSByZXN1bHRzIG9mIGVhY2gg
dGVzdCBkdXJpbmcgX3RlYXJfZG93bl90ZXN0KCksIGJlbG93LiIiIgorICAgICAgICBzZWxmLl90
ZXN0X3J1bm5lciA9IHRlc3RfcnVubmVyCisgICAgICAgIHNlbGYuX3Jlc3VsdF9zdW1tYXJ5ID0g
cmVzdWx0X3N1bW1hcnkKIAotICAgICAgICAjIEFwcGVuZCB0ZXN0cyB3ZSdyZSBydW5uaW5nIHRv
IHRoZSBleGlzdGluZyB0ZXN0c19ydW4udHh0IGZpbGUuCi0gICAgICAgICMgVGhpcyBpcyBjcmVh
dGVkIGluIHJ1bl93ZWJraXRfdGVzdHMucHk6X1ByZXBhcmVMaXN0c0FuZFByaW50T3V0cHV0Lgot
ICAgICAgICB0ZXN0c19ydW5fZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3B0aW9ucy5y
ZXN1bHRzX2RpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJ0ZXN0c19ydW4udHh0IikKLSAgICAgICAgdGVzdHNfcnVuX2ZpbGUgPSBjb2RlY3Mub3Bl
bih0ZXN0c19ydW5fZmlsZW5hbWUsICJhIiwgInV0Zi04IikKLQotICAgICAgICB3aGlsZSBUcnVl
OgotICAgICAgICAgICAgaWYgc2VsZi5fY2FuY2VsZWQ6Ci0gICAgICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygnVGVzdGluZyBjYW5jZWxsZWQnKQotICAgICAgICAgICAgICAgIHRlc3RzX3J1bl9maWxl
LmNsb3NlKCkKLSAgICAgICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAgICAgaWYgbGVuKHNl
bGYuX2ZpbGVuYW1lX2xpc3QpIGlzIDA6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5fY3VycmVu
dF9ncm91cCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9ncm91
cF90aW1pbmdfc3RhdHNbc2VsZi5fY3VycmVudF9ncm91cF0gPSBcCi0gICAgICAgICAgICAgICAg
ICAgICAgICAoc2VsZi5fbnVtX3Rlc3RzX2luX2N1cnJlbnRfZ3JvdXAsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgdGltZS50aW1lKCkgLSBzZWxmLl9jdXJyZW50X2dyb3VwX3N0YXJ0X3RpbWUp
Ci0KLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJl
bnRfZ3JvdXAsIHNlbGYuX2ZpbGVuYW1lX2xpc3QgPSBcCi0gICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9maWxlbmFtZV9saXN0X3F1ZXVlLmdldF9ub3dhaXQoKQotICAgICAgICAgICAgICAg
IGV4Y2VwdCBRdWV1ZS5FbXB0eToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RvcF9zZXJ2
ZXJzX3dpdGhfbG9jaygpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5k
ZXJfdHJlZSgpCi0gICAgICAgICAgICAgICAgICAgIHRlc3RzX3J1bl9maWxlLmNsb3NlKCkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgICAgICAgICBpZiBzZWxmLl9jdXJy
ZW50X2dyb3VwID09ICJ0ZXN0c190b19odHRwX2xvY2siOgotICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9zdGFydF9zZXJ2ZXJzX3dpdGhfbG9jaygpCi0gICAgICAgICAgICAgICAgZWxpZiBzZWxm
Ll9oYXZlX2h0dHBfbG9jazoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RvcF9zZXJ2ZXJz
X3dpdGhfbG9jaygpCi0KLSAgICAgICAgICAgICAgICBzZWxmLl9udW1fdGVzdHNfaW5fY3VycmVu
dF9ncm91cCA9IGxlbihzZWxmLl9maWxlbmFtZV9saXN0KQotICAgICAgICAgICAgICAgIHNlbGYu
X2N1cnJlbnRfZ3JvdXBfc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCi0KLSAgICAgICAgICAgIHRl
c3RfaW5wdXQgPSBzZWxmLl9maWxlbmFtZV9saXN0LnBvcCgpCi0KLSAgICAgICAgICAgICMgV2Ug
aGF2ZSBhIHVybCwgcnVuIHRlc3RzLgotICAgICAgICAgICAgYmF0Y2hfY291bnQgKz0gMQotICAg
ICAgICAgICAgc2VsZi5fbnVtX3Rlc3RzICs9IDEKLSAgICAgICAgICAgIGlmIHNlbGYuX29wdGlv
bnMucnVuX3NpbmdseToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9ydW5fdGVzdF9p
bl9hbm90aGVyX3RocmVhZCh0ZXN0X2lucHV0KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgICAgICByZXN1bHQgPSBzZWxmLl9ydW5fdGVzdF9pbl90aGlzX3RocmVhZCh0ZXN0X2lucHV0
KQotCi0gICAgICAgICAgICBmaWxlbmFtZSA9IHRlc3RfaW5wdXQuZmlsZW5hbWUKLSAgICAgICAg
ICAgIHRlc3RzX3J1bl9maWxlLndyaXRlKGZpbGVuYW1lICsgIlxuIikKLSAgICAgICAgICAgIGlm
IHJlc3VsdC5mYWlsdXJlczoKLSAgICAgICAgICAgICAgICAjIENoZWNrIGFuZCBraWxsIER1bXBS
ZW5kZXJUcmVlIGlmIHdlIG5lZWQgdG8uCi0gICAgICAgICAgICAgICAgaWYgbGVuKFsxIGZvciBm
IGluIHJlc3VsdC5mYWlsdXJlcwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgZi5zaG91bGRf
a2lsbF9kdW1wX3JlbmRlcl90cmVlKCldKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fa2ls
bF9kdW1wX3JlbmRlcl90cmVlKCkKLSAgICAgICAgICAgICAgICAgICAgIyBSZXNldCB0aGUgYmF0
Y2ggY291bnQgc2luY2UgdGhlIHNoZWxsIGp1c3QgYm91bmNlZC4KLSAgICAgICAgICAgICAgICAg
ICAgYmF0Y2hfY291bnQgPSAwCi0gICAgICAgICAgICAgICAgIyBQcmludCB0aGUgZXJyb3IgbWVz
c2FnZShzKS4KLSAgICAgICAgICAgICAgICBlcnJvcl9zdHIgPSAnXG4nLmpvaW4oWycgICcgKyBm
Lm1lc3NhZ2UoKSBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYg
aW4gcmVzdWx0LmZhaWx1cmVzXSkKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBm
YWlsZWQ6XG4lcyIgJSAoc2VsZi5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXJyb3Jfc3RyKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgcGFzc2VkIiAlIChzZWxmLmdldE5hbWUoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFt
ZShmaWxlbmFtZSkpKQotICAgICAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlLnB1dChyZXN1bHQu
ZHVtcHMoKSkKLQotICAgICAgICAgICAgaWYgYmF0Y2hfc2l6ZSA+IDAgYW5kIGJhdGNoX2NvdW50
ID49IGJhdGNoX3NpemU6Ci0gICAgICAgICAgICAgICAgIyBCb3VuY2UgdGhlIHNoZWxsIGFuZCBy
ZXNldCBjb3VudC4KLSAgICAgICAgICAgICAgICBzZWxmLl9raWxsX2R1bXBfcmVuZGVyX3RyZWUo
KQotICAgICAgICAgICAgICAgIGJhdGNoX2NvdW50ID0gMAorICAgICAgICB3aGlsZSBub3Qgc2Vs
Zi5fY2FuY2VsbGVkOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGN1cnJlbnRf
Z3JvdXAsIGZpbGVuYW1lX2xpc3QgPSBcCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVu
YW1lX2xpc3RfcXVldWUuZ2V0X25vd2FpdCgpCisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVf
dGVzdF9saXN0KGN1cnJlbnRfZ3JvdXAsIGZpbGVuYW1lX2xpc3QpCisgICAgICAgICAgICBleGNl
cHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBpZiBzZWxm
Ll9jYW5jZWxsZWQ6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCdUZXN0aW5nIGNhbmNlbGxlZCcp
CiAKLSAgICAgICAgICAgIGlmIHRlc3RfcnVubmVyOgotICAgICAgICAgICAgICAgIHRlc3RfcnVu
bmVyLnVwZGF0ZV9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQorICAgICAgICBzZWxmLl9jbGVhbnVw
KCkKIAotICAgIGRlZiBfcnVuX3Rlc3RfaW5fYW5vdGhlcl90aHJlYWQoc2VsZiwgdGVzdF9pbnB1
dCk6CisgICAgZGVmIF9jbGVhbnVwKHNlbGYpOgorICAgICAgICBzZWxmLl9raWxsX2R1bXBfcmVu
ZGVyX3RyZWUoKQorICAgICAgICBpZiBzZWxmLl9oYXZlX2h0dHBfbG9jazoKKyAgICAgICAgICAg
IHNlbGYuX3N0b3Bfc2VydmVyc193aXRoX2xvY2soKQorICAgICAgICBpZiBzZWxmLl90ZXN0c19y
dW5fZmlsZToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLmNsb3NlKCkKKyAgICAg
ICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlID0gTm9uZQorCisgICAgZGVmIGhhbmRsZV90ZXN0
X2xpc3Qoc2VsZiwgbGlzdF9uYW1lLCB0ZXN0X2xpc3QpOgorICAgICAgICBpZiBsaXN0X25hbWUg
PT0gInRlc3RzX3RvX2h0dHBfbG9jayI6CisgICAgICAgICAgICBzZWxmLl9zdGFydF9zZXJ2ZXJz
X3dpdGhfbG9jaygpCisKKyAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAg
IG51bV90ZXN0cyA9IDAKKyAgICAgICAgZm9yIHRlc3RfaW5wdXQgaW4gdGVzdF9saXN0OgorICAg
ICAgICAgICAgc2VsZi5fcnVuX3Rlc3QodGVzdF9pbnB1dCkKKyAgICAgICAgICAgIGlmIHNlbGYu
X2NhbmNlbGxlZDoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgbnVtX3Rlc3Rz
ICs9IDEKKworICAgICAgICBlbGFwc2VkX3RpbWUgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUK
KworICAgICAgICBpZiBzZWxmLl9oYXZlX2h0dHBfbG9jazoKKyAgICAgICAgICAgIHNlbGYuX3N0
b3Bfc2VydmVyc193aXRoX2xvY2soKQorCisgICAgICAgIHNlbGYuX3Rlc3RfbGlzdF90aW1pbmdf
c3RhdHNbbGlzdF9uYW1lXSA9IFwKKyAgICAgICAgICAgKG51bV90ZXN0cywgZWxhcHNlZF90aW1l
KQorCisgICAgZGVmIF9ydW5fdGVzdChzZWxmLCB0ZXN0X2lucHV0KToKKyAgICAgICAgc2VsZi5f
c2V0X3VwX3Rlc3QodGVzdF9pbnB1dCkKKworICAgICAgICAjIFdlIGNhbGN1bGF0ZSBob3cgbG9u
ZyB3ZSBleHBlY3QgdGhlIHRlc3QgdG8gdGFrZS4KKyAgICAgICAgIworICAgICAgICAjIFRoZSBE
dW1wUmVuZGVyVHJlZSB3YXRjaGRvZyB1c2VzIDIuNXggdGhlIHRpbWVvdXQ7IHdlIHdhbnQgdG8g
YmUKKyAgICAgICAgIyBsYXJnZXIgdGhhbiB0aGF0LiBXZSBhbHNvIGFkZCBhIGxpdHRsZSBtb3Jl
IHBhZGRpbmcgaWYgd2UncmUKKyAgICAgICAgIyBydW5uaW5nIHRlc3RzIGluIGEgc2VwYXJhdGUg
dGhyZWFkLgorICAgICAgICAjCisgICAgICAgICMgTm90ZSB0aGF0IHdlIG5lZWQgdG8gY29udmVy
dCB0aGUgdGVzdCB0aW1lb3V0IGZyb20gYQorICAgICAgICAjIHN0cmluZyB2YWx1ZSBpbiBtaWxs
aXNlY29uZHMgdG8gYSBmbG9hdCBmb3IgUHl0aG9uLgorICAgICAgICBkcml2ZXJfdGltZW91dCA9
IDMuMCAqIGZsb2F0KHRlc3RfaW5wdXQudGltZW91dCkgLyAxMDAwLjAKKyAgICAgICAgdGhyZWFk
X3BhZGRpbmcgPSAxLjAKKyAgICAgICAgdGhyZWFkX3RpbWVvdXQgPSBkcml2ZXJfdGltZW91dCAr
IHRocmVhZF9wYWRkaW5nCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucnVuX3NpbmdseToKKyAg
ICAgICAgICAgIHRlc3RfdGltZW91dCA9IHRocmVhZF90aW1lb3V0CisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICB0ZXN0X3RpbWVvdXQgPSBkcml2ZXJfdGltZW91dAorCisgICAgICAgIHN0YXJ0
ID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5fbmV4dF90aW1lb3V0ID0gc3RhcnQgKyB0ZXN0
X3RpbWVvdXQKKworICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6CisgICAgICAg
ICAgICByZXN1bHQgPSBzZWxmLl9ydW5fdGVzdF9pbl9hbm90aGVyX3RocmVhZCh0ZXN0X2lucHV0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhyZWFkX3RpbWVvdXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxm
Ll9ydW5fdGVzdF9pbl90aGlzX3RocmVhZCh0ZXN0X2lucHV0KQorCisgICAgICAgIHNlbGYuX3Rl
YXJfZG93bl90ZXN0KHRlc3RfaW5wdXQsIHJlc3VsdCkKKworICAgIGRlZiBfc2V0X3VwX3Rlc3Qo
c2VsZiwgdGVzdF9pbnB1dCk6CisgICAgICAgIHRlc3RfaW5wdXQudXJpID0gc2VsZi5fcG9ydC5m
aWxlbmFtZV90b191cmkodGVzdF9pbnB1dC5maWxlbmFtZSkKKyAgICAgICAgaWYgc2VsZi5fc2hv
dWxkX2ZldGNoX2V4cGVjdGVkX2NoZWNrc3VtKCk6CisgICAgICAgICAgICB0ZXN0X2lucHV0Lmlt
YWdlX2NoZWNrc3VtID0gc2VsZi5fcG9ydC5leHBlY3RlZF9jaGVja3N1bSgKKyAgICAgICAgICAg
ICAgICB0ZXN0X2lucHV0LmZpbGVuYW1lKQorCisgICAgZGVmIF9zaG91bGRfZmV0Y2hfZXhwZWN0
ZWRfY2hlY2tzdW0oc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5fb3B0aW9ucy5waXhlbF90
ZXN0cyBhbmQgbm90CisgICAgICAgICAgICAgICAgKHNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5l
IG9yIHNlbGYuX29wdGlvbnMucmVzZXRfcmVzdWx0cykpCisKKyAgICBkZWYgX3J1bl90ZXN0X2lu
X2Fub3RoZXJfdGhyZWFkKHNlbGYsIHRlc3RfaW5wdXQsIHRocmVhZF90aW1lb3V0KToKICAgICAg
ICAgIiIiUnVuIGEgdGVzdCBpbiBhIHNlcGFyYXRlIHRocmVhZCwgZW5mb3JjaW5nIGEgaGFyZCB0
aW1lIGxpbWl0LgogCiAgICAgICAgIFNpbmNlIHdlIGNhbiBvbmx5IGRldGVjdCB0aGUgdGVybWlu
YXRpb24gb2YgYSB0aHJlYWQsIG5vdCBhbnkgaW50ZXJuYWwKQEAgLTQ2OSwyMSArMzIyLDIwIEBA
IGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgogICAgICAgICBSZXR1cm5z
OgogICAgICAgICAgIEEgVGVzdFJlc3VsdAogICAgICAgICAiIiIKLSAgICAgICAgd29ya2VyID0g
U2luZ2xlVGVzdFRocmVhZChzZWxmLl9wb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX29wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5fd29ya2VyX251bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfaW5wdXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBlcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X2FyZ3MpCi0KLSAgICAg
ICAgd29ya2VyLnN0YXJ0KCkKLQotICAgICAgICB0aHJlYWRfdGltZW91dCA9IF9taWxsaXNlY29u
ZHNfdG9fc2Vjb25kcygKLSAgICAgICAgICAgIF9wYWRfdGltZW91dChpbnQodGVzdF9pbnB1dC50
aW1lb3V0KSkpCi0gICAgICAgIHRocmVhZC5fbmV4dF90aW1lb3V0ID0gdGltZS50aW1lKCkgKyB0
aHJlYWRfdGltZW91dAotICAgICAgICB3b3JrZXIuam9pbih0aHJlYWRfdGltZW91dCkKLSAgICAg
ICAgaWYgd29ya2VyLmlzQWxpdmUoKToKKyAgICAgICAgd29ya2VyID0gc2VsZgorICAgICAgICBy
ZXN1bHQgPSBOb25lCisKKyAgICAgICAgZHJpdmVyID0gd29ya2VyLl9wb3J0LmNyZWF0ZV9kcml2
ZXIod29ya2VyLl93b3JrZXJfbnVtYmVyKQorICAgICAgICBkcml2ZXIuc3RhcnQoKQorCisgICAg
ICAgIGNsYXNzIFNpbmdsZVRlc3RUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CisgICAgICAgICAg
ICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHdvcmtlci5fcnVuX3Np
bmdsZV90ZXN0KGRyaXZlciwgdGVzdF9pbnB1dCkKKworICAgICAgICB0aHJlYWQgPSBTaW5nbGVU
ZXN0VGhyZWFkKCkKKyAgICAgICAgdGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgdGhyZWFkLmpvaW4o
dGhyZWFkX3RpbWVvdXQpCisgICAgICAgIGlmIHRocmVhZC5pc0FsaXZlKCk6CiAgICAgICAgICAg
ICAjIElmIGpvaW4oKSByZXR1cm5lZCB3aXRoIHRoZSB0aHJlYWQgc3RpbGwgcnVubmluZywgdGhl
CiAgICAgICAgICAgICAjIER1bXBSZW5kZXJUcmVlIGlzIGNvbXBsZXRlbHkgaHVuZyBhbmQgdGhl
cmUncyBub3RoaW5nCiAgICAgICAgICAgICAjIG1vcmUgd2UgY2FuIGRvIHdpdGggaXQuICBXZSBo
YXZlIHRvIGtpbGwgYWxsIHRoZQpAQCAtNDkzLDE2ICszNDUsMTAgQEAgY2xhc3MgVGVzdFNoZWxs
VGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgICAgICAjIHRoYXQgdHJhZGVvZmYgaW4g
b3JkZXIgdG8gYXZvaWQgbG9zaW5nIHRoZSByZXN0IG9mIHRoaXMKICAgICAgICAgICAgICMgdGhy
ZWFkJ3MgcmVzdWx0cy4KICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1Rlc3QgdGhyZWFkIGh1bmc6
IGtpbGxpbmcgYWxsIER1bXBSZW5kZXJUcmVlcycpCi0gICAgICAgICAgICBpZiB3b3JrZXIuX2Ry
aXZlcjoKLSAgICAgICAgICAgICAgICB3b3JrZXIuX2RyaXZlci5zdG9wKCkKIAotICAgICAgICB0
cnk6Ci0gICAgICAgICAgICByZXN1bHQgPSB3b3JrZXIuZ2V0X3Rlc3RfcmVzdWx0KCkKLSAgICAg
ICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBlOgotICAgICAgICAgICAgIyBUaGlzIGdldHMgcmFp
c2VkIGlmIHRoZSB3b3JrZXIgdGhyZWFkIGhhcyBhbHJlYWR5IGV4aXRlZC4KLSAgICAgICAgICAg
IGZhaWx1cmVzID0gW10KLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0Nhbm5vdCBnZXQgcmVzdWx0
cyBvZiB0ZXN0OiAlcycgJQotICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2lucHV0LmZpbGVu
YW1lKQorICAgICAgICBkcml2ZXIuc3RvcCgpCisKKyAgICAgICAgaWYgbm90IHJlc3VsdDoKICAg
ICAgICAgICAgIHJlc3VsdCA9IHRlc3RfcmVzdWx0cy5UZXN0UmVzdWx0KHRlc3RfaW5wdXQuZmls
ZW5hbWUsIGZhaWx1cmVzPVtdLAogICAgICAgICAgICAgICAgIHRlc3RfcnVuX3RpbWU9MCwgdG90
YWxfdGltZV9mb3JfYWxsX2RpZmZzPTAsIHRpbWVfZm9yX2RpZmZzPXt9KQogCkBAIC01MTYsMzMg
KzM2MiwxMjMgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAKICAg
ICAgICAgUmV0dXJuczogYSBUZXN0UmVzdWx0IG9iamVjdC4KICAgICAgICAgIiIiCi0gICAgICAg
IHNlbGYuX2Vuc3VyZV9kdW1wX3JlbmRlcl90cmVlX2lzX3J1bm5pbmcoKQotICAgICAgICB0aHJl
YWRfdGltZW91dCA9IF9taWxsaXNlY29uZHNfdG9fc2Vjb25kcygKLSAgICAgICAgICAgICBfcGFk
X3RpbWVvdXQoaW50KHRlc3RfaW5wdXQudGltZW91dCkpKQotICAgICAgICBzZWxmLl9uZXh0X3Rp
bWVvdXQgPSB0aW1lLnRpbWUoKSArIHRocmVhZF90aW1lb3V0Ci0gICAgICAgIHRlc3RfcmVzdWx0
ID0gX3J1bl9zaW5nbGVfdGVzdChzZWxmLl9wb3J0LCBzZWxmLl9vcHRpb25zLCB0ZXN0X2lucHV0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBl
cywgc2VsZi5fdGVzdF9hcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fZHJpdmVyLCBzZWxmLl9uYW1lKQorICAgICAgICAjIHBvbGwoKSBpcyBub3QgdGhy
ZWFkc2FmZSBhbmQgY2FuIHRocm93IE9TRXJyb3IgZHVlIHRvOgorICAgICAgICAjIGh0dHA6Ly9i
dWdzLnB5dGhvbi5vcmcvaXNzdWUxNzMxNzE3CisgICAgICAgIGlmIG5vdCBzZWxmLl9kcml2ZXIg
b3Igc2VsZi5fZHJpdmVyLnBvbGwoKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2Ry
aXZlciA9IHNlbGYuX3BvcnQuY3JlYXRlX2RyaXZlcihzZWxmLl93b3JrZXJfbnVtYmVyKQorICAg
ICAgICAgICAgc2VsZi5fZHJpdmVyLnN0YXJ0KCkKKworICAgICAgICB0ZXN0X3Jlc3VsdCA9IHNl
bGYuX3J1bl9zaW5nbGVfdGVzdCh0ZXN0X2lucHV0LCBzZWxmLl9kcml2ZXIpCiAgICAgICAgIHNl
bGYuX3Rlc3RfcmVzdWx0cy5hcHBlbmQodGVzdF9yZXN1bHQpCiAgICAgICAgIHJldHVybiB0ZXN0
X3Jlc3VsdAogCi0gICAgZGVmIF9lbnN1cmVfZHVtcF9yZW5kZXJfdHJlZV9pc19ydW5uaW5nKHNl
bGYpOgotICAgICAgICAiIiJTdGFydCB0aGUgc2hhcmVkIER1bXBSZW5kZXJUcmVlLCBpZiBpdCdz
IG5vdCBydW5uaW5nLgorICAgIGRlZiBfcnVuX3NpbmdsZV90ZXN0KHNlbGYsIHRlc3RfaW5wdXQs
IGRyaXZlcik6CisgICAgICAgICMgVGhlIGltYWdlIGhhc2ggaXMgdXNlZCB0byBhdm9pZCBkb2lu
ZyBhbiBpbWFnZSBkdW1wIGlmIHRoZQorICAgICAgICAjIGNoZWNrc3VtcyBtYXRjaCwgc28gaXQg
c2hvdWxkIGJlIHNldCB0byBhIGJsYW5rIHZhbHVlIGlmIHdlCisgICAgICAgICMgYXJlIGdlbmVy
YXRpbmcgYSBuZXcgYmFzZWxpbmUuICAoT3RoZXJ3aXNlLCBhbiBpbWFnZSBmcm9tIGEKKyAgICAg
ICAgIyBwcmV2aW91cyBydW4gd2lsbCBiZSBjb3BpZWQgaW50byB0aGUgYmFzZWxpbmUuIiIiCisg
ICAgICAgIGlmIHNlbGYuX3Nob3VsZF9mZXRjaF9leHBlY3RlZF9jaGVja3N1bSgpOgorICAgICAg
ICAgICAgdGVzdF9pbnB1dC5pbWFnZV9oYXNoID0gc2VsZi5fcG9ydC5leHBlY3RlZF9jaGVja3N1
bSgKKyAgICAgICAgICAgICAgICB0ZXN0X2lucHV0LmZpbGVuYW1lKQorICAgICAgICB0ZXN0X291
dHB1dCA9IGRyaXZlci5ydW5fdGVzdCh0ZXN0X2lucHV0KQorICAgICAgICByZXR1cm4gc2VsZi5f
cHJvY2Vzc19vdXRwdXQodGVzdF9pbnB1dC5maWxlbmFtZSwgdGVzdF9vdXRwdXQpCisKKyAgICBk
ZWYgX3Byb2Nlc3Nfb3V0cHV0KHNlbGYsIHRlc3RfZmlsZW5hbWUsIHRlc3Rfb3V0cHV0KToKKyAg
ICAgICAgIiIiUmVjZWl2ZXMgdGhlIG91dHB1dCBmcm9tIGEgRHVtcFJlbmRlclRyZWUgcHJvY2Vz
cywgc3ViamVjdHMgaXQgdG8gYQorICAgICAgICBudW1iZXIgb2YgdGVzdHMsIGFuZCByZXR1cm5z
IGEgbGlzdCBvZiBmYWlsdXJlIHR5cGVzIHRoZSB0ZXN0IHByb2R1Y2VkLgogCi0gICAgICAgIFRo
aXMgaXMgbm90IGZvciB1c2Ugd2hlbiBydW5uaW5nIHRlc3RzIHNpbmdseSwgc2luY2UgdGhvc2Ug
ZWFjaCBzdGFydAotICAgICAgICBhIHNlcGFyYXRlIER1bXBSZW5kZXJUcmVlIGluIHRoZWlyIG93
biB0aHJlYWQuCisgICAgICAgIEFyZ3M6CisgICAgICAgIHRlc3RfZmlsZW5hbWU6IGZ1bGwgcGF0
aCB0byB0aGUgdGVzdCBpbiBxdWVzdGlvbi4KKyAgICAgICAgdGVzdF9vdXRwdXQ6IGEgVGVzdE91
dHB1dCBvYmplY3QgY29udGFpbmluZyB0aGUgb3V0cHV0IG9mIHRoZSB0ZXN0CiAKKyAgICAgICAg
UmV0dXJuczogYSBUZXN0UmVzdWx0IG9iamVjdAogICAgICAgICAiIiIKLSAgICAgICAgIyBwb2xs
KCkgaXMgbm90IHRocmVhZHNhZmUgYW5kIGNhbiB0aHJvdyBPU0Vycm9yIGR1ZSB0bzoKLSAgICAg
ICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTczMTcxNwotICAgICAgICBpZiBub3Qg
c2VsZi5fZHJpdmVyIG9yIHNlbGYuX2RyaXZlci5wb2xsKCkgaXMgbm90IE5vbmU6Ci0gICAgICAg
ICAgICBzZWxmLl9kcml2ZXIgPSBzZWxmLl9wb3J0LmNyZWF0ZV9kcml2ZXIoc2VsZi5fd29ya2Vy
X251bWJlcikKLSAgICAgICAgICAgIHNlbGYuX2RyaXZlci5zdGFydCgpCisgICAgICAgIGZhaWx1
cmVzID0gW10KKworICAgICAgICBpZiB0ZXN0X291dHB1dC5jcmFzaDoKKyAgICAgICAgICAgIGZh
aWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVDcmFzaCgpKQorICAgICAgICBpZiB0
ZXN0X291dHB1dC50aW1lb3V0OgorICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFp
bHVyZXMuRmFpbHVyZVRpbWVvdXQoKSkKKworICAgICAgICB0ZXN0X25hbWUgPSBzZWxmLl9wb3J0
LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9maWxlbmFtZSkKKyAgICAgICAgaWYgdGVzdF9v
dXRwdXQuY3Jhc2g6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBTdGFja3RyYWNlIGZvciAl
czpcbiVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9uYW1lLCB0ZXN0X25hbWUs
IHRlc3Rfb3V0cHV0LmVycm9yKSkKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2lu
KHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksIHRlc3RfbmFtZSkKKyAgICAgICAgICAg
IGZpbGVuYW1lID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0gKyAiLXN0YWNrLnR4dCIK
KyAgICAgICAgICAgIHNlbGYuX3BvcnQubWF5YmVfbWFrZV9kaXJlY3Rvcnkob3MucGF0aC5zcGxp
dChmaWxlbmFtZSlbMF0pCisgICAgICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKGZpbGVuYW1lLCAi
d2IiLCAidXRmLTgiKSBhcyBmaWxlOgorICAgICAgICAgICAgICAgIGZpbGUud3JpdGUodGVzdF9v
dXRwdXQuZXJyb3IpCisgICAgICAgIGVsaWYgdGVzdF9vdXRwdXQuZXJyb3I6CisgICAgICAgICAg
ICBfbG9nLmRlYnVnKCIlcyAlcyBvdXRwdXQgc3RkZXJyIGxpbmVzOlxuJXMiICUKKyAgICAgICAg
ICAgICAgICAgICAgICAgKHNlbGYuX25hbWUsIHRlc3RfbmFtZSwgdGVzdF9vdXRwdXQuZXJyb3Ip
KQorCisgICAgICAgIGV4cGVjdGVkX3Rlc3Rfb3V0cHV0ID0gc2VsZi5fZXhwZWN0ZWRfdGVzdF9v
dXRwdXQodGVzdF9maWxlbmFtZSkKKworICAgICAgICAjIENoZWNrIHRoZSBvdXRwdXQgYW5kIHNh
dmUgdGhlIHJlc3VsdHMuCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAg
ICB0aW1lX2Zvcl9kaWZmcyA9IHt9CisgICAgICAgIGZvciB0ZXN0X3R5cGUgaW4gc2VsZi5fdGVz
dF90eXBlczoKKyAgICAgICAgICAgIHN0YXJ0X2RpZmZfdGltZSA9IHRpbWUudGltZSgpCisgICAg
ICAgICAgICBuZXdfZmFpbHVyZXMgPSB0ZXN0X3R5cGUuY29tcGFyZV9vdXRwdXQoc2VsZi5fcG9y
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZXN0X2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX3Rlc3RfYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF90ZXN0X291dHB1dCkKKyAg
ICAgICAgICAgICMgRG9uJ3QgYWRkIGFueSBtb3JlIGZhaWx1cmVzIGlmIHdlIGFscmVhZHkgaGF2
ZSBhIGNyYXNoLCBzbyB3ZQorICAgICAgICAgICAgIyBkb24ndCBkb3VibGUtcmVwb3J0IHRob3Nl
IHRlc3RzLiBXZSBkbyBkb3VibGUtcmVwb3J0IGZvciB0aW1lb3V0cworICAgICAgICAgICAgIyBz
aW5jZSB3ZSBzdGlsbCB3YW50IHRvIHNlZSB0aGUgdGV4dCBhbmQgaW1hZ2Ugb3V0cHV0LgorICAg
ICAgICAgICAgaWYgbm90IHRlc3Rfb3V0cHV0LmNyYXNoOgorICAgICAgICAgICAgICAgIGZhaWx1
cmVzLmV4dGVuZChuZXdfZmFpbHVyZXMpCisgICAgICAgICAgICB0aW1lX2Zvcl9kaWZmc1t0ZXN0
X3R5cGUuX19jbGFzc19fLl9fbmFtZV9fXSA9ICgKKyAgICAgICAgICAgICAgICB0aW1lLnRpbWUo
KSAtIHN0YXJ0X2RpZmZfdGltZSkKKworICAgICAgICB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnMg
PSB0aW1lLnRpbWUoKSAtIHN0YXJ0X2RpZmZfdGltZQorICAgICAgICByZXR1cm4gdGVzdF9yZXN1
bHRzLlRlc3RSZXN1bHQodGVzdF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZhaWx1cmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGVzdF9vdXRwdXQudGVzdF90aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGltZV9mb3JfZGlmZnMpCisKKyAgICBkZWYgX2V4cGVjdGVk
X3Rlc3Rfb3V0cHV0KHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgIiIiUmV0dXJucyBhbiBleHBl
Y3RlZCBUZXN0T3V0cHV0IG9iamVjdC4iIiIKKyAgICAgICAgcmV0dXJuIHRlc3Rfb3V0cHV0LlRl
c3RPdXRwdXQoc2VsZi5fcG9ydC5leHBlY3RlZF90ZXh0KGZpbGVuYW1lKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuZXhwZWN0ZWRfaW1hZ2UoZmlsZW5h
bWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5leHBl
Y3RlZF9jaGVja3N1bShmaWxlbmFtZSkpCisKKyAgICBkZWYgX3RlYXJfZG93bl90ZXN0KHNlbGYs
IHRlc3RfaW5wdXQsIHJlc3VsdCk6CisgICAgICAgIHNlbGYuX251bV90ZXN0cyArPSAxCisgICAg
ICAgIHNlbGYuX2JhdGNoX2NvdW50ICs9IDEKKyAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUu
d3JpdGUodGVzdF9pbnB1dC5maWxlbmFtZSArICJcbiIpCisgICAgICAgIHRlc3RfbmFtZSA9IHNl
bGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2lucHV0LmZpbGVuYW1lKQorCisg
ICAgICAgIGlmIHJlc3VsdC5mYWlsdXJlczoKKyAgICAgICAgICAgICMgQ2hlY2sgYW5kIGtpbGwg
RHVtcFJlbmRlclRyZWUgaWYgd2UgbmVlZCB0by4KKyAgICAgICAgICAgIGlmIGFueShbZi5zaG91
bGRfa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkgZm9yIGYgaW4gcmVzdWx0LmZhaWx1cmVzXSk6Cisg
ICAgICAgICAgICAgICAgc2VsZi5fa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKKyAgICAgICAgICAg
ICAgICAjIFJlc2V0IHRoZSBiYXRjaCBjb3VudCBzaW5jZSB0aGUgc2hlbGwganVzdCBib3VuY2Vk
LgorICAgICAgICAgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0gMAorCisgICAgICAgICAgICAj
IFByaW50IHRoZSBlcnJvciBtZXNzYWdlKHMpLgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMg
JXMgZmFpbGVkOiIgJSAoc2VsZi5fbmFtZSwgdGVzdF9uYW1lKSkKKyAgICAgICAgICAgIGZvciBm
IGluIHJlc3VsdC5mYWlsdXJlczoKKyAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAgJXMi
ICUgKHNlbGYuX25hbWUsIGYubWVzc2FnZSgpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IF9sb2cuZGVidWcoIiVzICVzIHBhc3NlZCIgJSAoc2VsZi5fbmFtZSwgdGVzdF9uYW1lKSkKKwor
ICAgICAgICBzZWxmLl9yZXN1bHRfcXVldWUucHV0KHJlc3VsdC5kdW1wcygpKQorCisgICAgICAg
IGlmIHNlbGYuX2JhdGNoX3NpemUgPiAwIGFuZCBzZWxmLl9iYXRjaF9jb3VudCA+PSBzZWxmLl9i
YXRjaF9zaXplOgorICAgICAgICAgICAgIyBCb3VuY2UgdGhlIHNoZWxsIGFuZCByZXNldCBjb3Vu
dC4KKyAgICAgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpCisgICAgICAgICAg
ICBzZWxmLl9iYXRjaF9jb3VudCA9IDAKKworICAgICAgICBpZiBzZWxmLl90ZXN0X3J1bm5lcjoK
KyAgICAgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyLnVwZGF0ZV9zdW1tYXJ5KHNlbGYuX3Jlc3Vs
dF9zdW1tYXJ5KQogCiAgICAgZGVmIF9zdGFydF9zZXJ2ZXJzX3dpdGhfbG9jayhzZWxmKToKLSAg
ICAgICAgIiIiQWNxdWlyZSBodHRwIGxvY2sgYW5kIHN0YXJ0IHRoZSBzZXJ2ZXJzLiIiIgogICAg
ICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF9iZWdpbiA9IHRpbWUudGltZSgpCi0gICAgICAgIF9s
b2cuZGVidWcoJ0FjcXVpcmUgaHR0cCBsb2NrIC4uLicpCisgICAgICAgIF9sb2cuZGVidWcoJ0Fj
cXVpcmluZyBodHRwIGxvY2sgLi4uJykKICAgICAgICAgc2VsZi5fcG9ydC5hY3F1aXJlX2h0dHBf
bG9jaygpCiAgICAgICAgIF9sb2cuZGVidWcoJ1N0YXJ0aW5nIEhUVFAgc2VydmVyIC4uLicpCiAg
ICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIoKQpAQCAtNTUxLDYgKzQ4NywxNCBA
QCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKICAgICAgICAgc2VsZi5f
aHR0cF9sb2NrX3dhaXRfZW5kID0gdGltZS50aW1lKCkKICAgICAgICAgc2VsZi5faGF2ZV9odHRw
X2xvY2sgPSBUcnVlCiAKKyAgICBkZWYgX2h0dHBfbG9ja193YWl0X3RpbWUoc2VsZik6CisgICAg
ICAgICIiIlJldHVybiB0aGUgdGltZSB3aGF0IGh0dHAgbG9ja2luZyB0YWtlcy4iIiIKKyAgICAg
ICAgaWYgc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVnaW4gPT0gMDoKKyAgICAgICAgICAgIHJldHVy
biAwCisgICAgICAgIGlmIHNlbGYuX2h0dHBfbG9ja193YWl0X2VuZCA9PSAwOgorICAgICAgICAg
ICAgcmV0dXJuIHRpbWUudGltZSgpIC0gc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVnaW4KKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2h0dHBfbG9ja193YWl0X2VuZCAtIHNlbGYuX2h0dHBfbG9ja193YWl0
X2JlZ2luCisKICAgICBkZWYgX3N0b3Bfc2VydmVyc193aXRoX2xvY2soc2VsZik6CiAgICAgICAg
ICIiIlN0b3AgdGhlIHNlcnZlcnMgYW5kIHJlbGVhc2UgaHR0cCBsb2NrLiIiIgogICAgICAgICBp
ZiBzZWxmLl9oYXZlX2h0dHBfbG9jazoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75421</attachid>
            <date>2010-12-02 15:26:32 -0800</date>
            <delta_ts>2010-12-02 15:26:32 -0800</delta_ts>
            <desc>update w/ review feedback</desc>
            <filename>bug-50367-20101202152631.patch</filename>
            <type>text/plain</type>
            <size>29621</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAwZThlYTZlNTdiM2Y4YzQ2M2ZkMDE3MTA3YjRhZTkzZDY0ODNkOGE0Li42ZjEzZmI1
M2NmNmJjODgxOWU2NTVmNDZlNDFhYjRhMDI3Y2I1MGNmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjYgQEAK
IAogICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgogCisgICAgICAgIFRoaXMgY2hhbmdl
IGlzIGEgYnVuY2ggb2YgY2xlYW51cCAvIHJlZmFjdG9yaW5nIG9mIHRoZSBmaWxlCisgICAgICAg
IGJlbG93LiBJdCBtb3ZlcyBhIGJ1bmNoIG9mIGZyZWUgZnVuY3Rpb25zIHRvIG1ldGhvZHMgb24g
dGhlCisgICAgICAgIFRlc3RTaGVsbFRocmVhZCBjbGFzcywgYW5kIHJlc3RydWN0dXJlcyBvdGhl
ciBtZXRob2RzIHRvIGJlCisgICAgICAgIGNsb3NlciB0byB0aGUgc3RydWN0dXJlIHdlJ2xsIG5l
ZWQgZm9yIHRoZSBtdWx0aXByb2Nlc3NpbmcKKyAgICAgICAgcmV3cml0ZS4KKworICAgICAgICBJ
dCBhbHNvIG1ha2VzIHRoZSBsb2dpYyBvZiAtLXJ1bi1zaW5nbHkgYSAqbG90KiBlYXNpZXIgdG8g
Zm9sbG93CisgICAgICAgIGJ5IG5lc3RsaW5nIGFsbCBvZiB0aGUgc2VwYXJhdGUtdGhyZWFkIGxv
Z2ljIGludG8gYSBzaW5nbGUKKyAgICAgICAgcm91dGluZS4KKworICAgICAgICBUaGVyZSBzaG91
bGQgYmUgbm8gc2VtYW50aWMgY2hhbmdlcyBpbiB0aGlzIHBhdGNoLCBqdXN0IGNsZWFudXAuCisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwMzY3CisK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9k
dW1wX3JlbmRlcl90cmVlX3RocmVhZC5weToKKworMjAxMC0xMi0wMSAgRGlyayBQcmFua2UgIDxk
cHJhbmtlQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgor
CiAgICAgICAgIG5ldy1ydW4td2Via2l0LXRlc3RzOiBhZGQgYSAtLWRyeS1ydW4gLyAtbiBmbGFn
CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDA0NQog
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3Ry
ZWVfdGhyZWFkLnB5CmluZGV4IGZkYjhkYTZjYzgwYjczZWU3ZGZiN2Q2MWQ5ZGJiY2JiYWJiY2I0
NzguLjY1ZDBiMDkxMmU5NWQ4OGNhNjI3ZWIyNzA5ZDlhNTc1NjBkZGJmYmYgMTAwNjQ0Ci0tLSBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
LnB5CkBAIC02MiwxNTAgKzYyLDYgQEAgX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRw
eS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UuIgogICAgICAgICAgICAgICAgICAgICAgICAg
ICJkdW1wX3JlbmRlcl90cmVlX3RocmVhZCIpCiAKIAotZGVmIF9leHBlY3RlZF90ZXN0X291dHB1
dChwb3J0LCBmaWxlbmFtZSk6Ci0gICAgIiIiUmV0dXJucyBhbiBleHBlY3RlZCBUZXN0T3V0cHV0
IG9iamVjdC4iIiIKLSAgICByZXR1cm4gdGVzdF9vdXRwdXQuVGVzdE91dHB1dChwb3J0LmV4cGVj
dGVkX3RleHQoZmlsZW5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBv
cnQuZXhwZWN0ZWRfaW1hZ2UoZmlsZW5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBvcnQuZXhwZWN0ZWRfY2hlY2tzdW0oZmlsZW5hbWUpKQotCi1kZWYgX3Byb2Nlc3Nf
b3V0cHV0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5wdXQsIHRlc3RfdHlwZXMsIHRlc3RfYXJncywK
LSAgICAgICAgICAgICAgICAgICAgdGVzdF9vdXRwdXQsIHdvcmtlcl9uYW1lKToKLSAgICAiIiJS
ZWNlaXZlcyB0aGUgb3V0cHV0IGZyb20gYSBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzLCBzdWJqZWN0
cyBpdCB0byBhCi0gICAgbnVtYmVyIG9mIHRlc3RzLCBhbmQgcmV0dXJucyBhIGxpc3Qgb2YgZmFp
bHVyZSB0eXBlcyB0aGUgdGVzdCBwcm9kdWNlZC4KLQotICAgIEFyZ3M6Ci0gICAgICBwb3J0OiBw
b3J0LXNwZWNpZmljIGhvb2tzCi0gICAgICBvcHRpb25zOiBjb21tYW5kIGxpbmUgb3B0aW9ucyBh
cmd1bWVudCBmcm9tIG9wdHBhcnNlCi0gICAgICBwcm9jOiBhbiBhY3RpdmUgRHVtcFJlbmRlclRy
ZWUgcHJvY2VzcwotICAgICAgdGVzdF9pbnB1dDogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3Qg
ZmlsZW5hbWUgYW5kIHRpbWVvdXQKLSAgICAgIHRlc3RfdHlwZXM6IGxpc3Qgb2YgdGVzdCB0eXBl
cyB0byBzdWJqZWN0IHRoZSBvdXRwdXQgdG8KLSAgICAgIHRlc3RfYXJnczogYXJndW1lbnRzIHRv
IGJlIHBhc3NlZCB0byBlYWNoIHRlc3QKLSAgICAgIHRlc3Rfb3V0cHV0OiBhIFRlc3RPdXRwdXQg
b2JqZWN0IGNvbnRhaW5pbmcgdGhlIG91dHB1dCBvZiB0aGUgdGVzdAotICAgICAgd29ya2VyX25h
bWU6IHdvcmtlciBuYW1lIGZvciBsb2dnaW5nCi0KLSAgICBSZXR1cm5zOiBhIFRlc3RSZXN1bHQg
b2JqZWN0Ci0gICAgIiIiCi0gICAgZmFpbHVyZXMgPSBbXQotCi0gICAgaWYgdGVzdF9vdXRwdXQu
Y3Jhc2g6Ci0gICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVDcmFz
aCgpKQotICAgIGlmIHRlc3Rfb3V0cHV0LnRpbWVvdXQ6Ci0gICAgICAgIGZhaWx1cmVzLmFwcGVu
ZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVUaW1lb3V0KCkpCi0KLSAgICB0ZXN0X25hbWUgPSBwb3J0
LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9pbnB1dC5maWxlbmFtZSkKLSAgICBpZiB0ZXN0
X291dHB1dC5jcmFzaDoKLSAgICAgICAgX2xvZy5kZWJ1ZygiJXMgU3RhY2t0cmFjZSBmb3IgJXM6
XG4lcyIgJSAod29ya2VyX25hbWUsIHRlc3RfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9vdXRwdXQuZXJyb3IpKQotICAgICAgICBm
aWxlbmFtZSA9IG9zLnBhdGguam9pbihvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LCB0ZXN0X25h
bWUpCi0gICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0gKyAi
LXN0YWNrLnR4dCIKLSAgICAgICAgcG9ydC5tYXliZV9tYWtlX2RpcmVjdG9yeShvcy5wYXRoLnNw
bGl0KGZpbGVuYW1lKVswXSkKLSAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihmaWxlbmFtZSwgIndi
IiwgInV0Zi04IikgYXMgZmlsZToKLSAgICAgICAgICAgIGZpbGUud3JpdGUodGVzdF9vdXRwdXQu
ZXJyb3IpCi0gICAgZWxpZiB0ZXN0X291dHB1dC5lcnJvcjoKLSAgICAgICAgX2xvZy5kZWJ1Zygi
JXMgJXMgb3V0cHV0IHN0ZGVyciBsaW5lczpcbiVzIiAlICh3b3JrZXJfbmFtZSwgdGVzdF9uYW1l
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRlc3Rfb3V0cHV0LmVycm9yKSkKLQotICAgIGV4cGVjdGVkX3Rlc3Rfb3V0cHV0ID0gX2V4cGVj
dGVkX3Rlc3Rfb3V0cHV0KHBvcnQsIHRlc3RfaW5wdXQuZmlsZW5hbWUpCi0KLSAgICAjIENoZWNr
IHRoZSBvdXRwdXQgYW5kIHNhdmUgdGhlIHJlc3VsdHMuCi0gICAgc3RhcnRfdGltZSA9IHRpbWUu
dGltZSgpCi0gICAgdGltZV9mb3JfZGlmZnMgPSB7fQotICAgIGZvciB0ZXN0X3R5cGUgaW4gdGVz
dF90eXBlczoKLSAgICAgICAgc3RhcnRfZGlmZl90aW1lID0gdGltZS50aW1lKCkKLSAgICAgICAg
bmV3X2ZhaWx1cmVzID0gdGVzdF90eXBlLmNvbXBhcmVfb3V0cHV0KHBvcnQsIHRlc3RfaW5wdXQu
ZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXN0X2FyZ3MsIHRlc3Rfb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfdGVzdF9vdXRwdXQpCi0gICAgICAgICMgRG9uJ3Qg
YWRkIGFueSBtb3JlIGZhaWx1cmVzIGlmIHdlIGFscmVhZHkgaGF2ZSBhIGNyYXNoLCBzbyB3ZSBk
b24ndAotICAgICAgICAjIGRvdWJsZS1yZXBvcnQgdGhvc2UgdGVzdHMuIFdlIGRvIGRvdWJsZS1y
ZXBvcnQgZm9yIHRpbWVvdXRzIHNpbmNlCi0gICAgICAgICMgd2Ugc3RpbGwgd2FudCB0byBzZWUg
dGhlIHRleHQgYW5kIGltYWdlIG91dHB1dC4KLSAgICAgICAgaWYgbm90IHRlc3Rfb3V0cHV0LmNy
YXNoOgotICAgICAgICAgICAgZmFpbHVyZXMuZXh0ZW5kKG5ld19mYWlsdXJlcykKLSAgICAgICAg
dGltZV9mb3JfZGlmZnNbdGVzdF90eXBlLl9fY2xhc3NfXy5fX25hbWVfX10gPSAoCi0gICAgICAg
ICAgICB0aW1lLnRpbWUoKSAtIHN0YXJ0X2RpZmZfdGltZSkKLQotICAgIHRvdGFsX3RpbWVfZm9y
X2FsbF9kaWZmcyA9IHRpbWUudGltZSgpIC0gc3RhcnRfZGlmZl90aW1lCi0gICAgcmV0dXJuIHRl
c3RfcmVzdWx0cy5UZXN0UmVzdWx0KHRlc3RfaW5wdXQuZmlsZW5hbWUsIGZhaWx1cmVzLCB0ZXN0
X291dHB1dC50ZXN0X3RpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
dGFsX3RpbWVfZm9yX2FsbF9kaWZmcywgdGltZV9mb3JfZGlmZnMpCi0KLQotZGVmIF9wYWRfdGlt
ZW91dCh0aW1lb3V0KToKLSAgICAiIiJSZXR1cm5zIGEgc2FmZSBtdWx0aXBsZSBvZiB0aGUgcGVy
LXRlc3QgdGltZW91dCB2YWx1ZSB0byB1c2UKLSAgICB0byBkZXRlY3QgaHVuZyB0ZXN0IHRocmVh
ZHMuCi0KLSAgICAiIiIKLSAgICAjIFdoZW4gd2UncmUgcnVubmluZyBvbmUgdGVzdCBwZXIgRHVt
cFJlbmRlclRyZWUgcHJvY2Vzcywgd2UgY2FuCi0gICAgIyBlbmZvcmNlIGEgaGFyZCB0aW1lb3V0
LiAgVGhlIER1bXBSZW5kZXJUcmVlIHdhdGNoZG9nIHVzZXMgMi41eAotICAgICMgdGhlIHRpbWVv
dXQ7IHdlIHdhbnQgdG8gYmUgbGFyZ2VyIHRoYW4gdGhhdC4KLSAgICByZXR1cm4gdGltZW91dCAq
IDMKLQotCi1kZWYgX21pbGxpc2Vjb25kc190b19zZWNvbmRzKG1zZWNzKToKLSAgICByZXR1cm4g
ZmxvYXQobXNlY3MpIC8gMTAwMC4wCi0KLQotZGVmIF9zaG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hl
Y2tzdW0ob3B0aW9ucyk6Ci0gICAgcmV0dXJuIG9wdGlvbnMucGl4ZWxfdGVzdHMgYW5kIG5vdCAo
b3B0aW9ucy5uZXdfYmFzZWxpbmUgb3Igb3B0aW9ucy5yZXNldF9yZXN1bHRzKQotCi0KLWRlZiBf
cnVuX3NpbmdsZV90ZXN0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5wdXQsIHRlc3RfdHlwZXMsIHRl
c3RfYXJncywgZHJpdmVyLCB3b3JrZXJfbmFtZSk6Ci0gICAgIyBGSVhNRTogUHVsbCB0aGlzIGlu
dG8gVGVzdFNoZWxsVGhyZWFkLl9ydW4oKS4KLQotICAgICMgVGhlIGltYWdlIGhhc2ggaXMgdXNl
ZCB0byBhdm9pZCBkb2luZyBhbiBpbWFnZSBkdW1wIGlmIHRoZQotICAgICMgY2hlY2tzdW1zIG1h
dGNoLCBzbyBpdCBzaG91bGQgYmUgc2V0IHRvIGEgYmxhbmsgdmFsdWUgaWYgd2UKLSAgICAjIGFy
ZSBnZW5lcmF0aW5nIGEgbmV3IGJhc2VsaW5lLiAgKE90aGVyd2lzZSwgYW4gaW1hZ2UgZnJvbSBh
Ci0gICAgIyBwcmV2aW91cyBydW4gd2lsbCBiZSBjb3BpZWQgaW50byB0aGUgYmFzZWxpbmUuIiIi
Ci0gICAgaWYgX3Nob3VsZF9mZXRjaF9leHBlY3RlZF9jaGVja3N1bShvcHRpb25zKToKLSAgICAg
ICAgdGVzdF9pbnB1dC5pbWFnZV9oYXNoID0gcG9ydC5leHBlY3RlZF9jaGVja3N1bSh0ZXN0X2lu
cHV0LmZpbGVuYW1lKQotICAgIHRlc3Rfb3V0cHV0ID0gZHJpdmVyLnJ1bl90ZXN0KHRlc3RfaW5w
dXQpCi0gICAgcmV0dXJuIF9wcm9jZXNzX291dHB1dChwb3J0LCBvcHRpb25zLCB0ZXN0X2lucHV0
LCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0
X291dHB1dCwgd29ya2VyX25hbWUpCi0KLQotY2xhc3MgU2luZ2xlVGVzdFRocmVhZCh0aHJlYWRp
bmcuVGhyZWFkKToKLSAgICAiIiJUaHJlYWQgd3JhcHBlciBmb3IgcnVubmluZyBhIHNpbmdsZSB0
ZXN0IGZpbGUuIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgd29y
a2VyX251bWJlciwgd29ya2VyX25hbWUsCi0gICAgICAgICAgICAgICAgIHRlc3RfaW5wdXQsIHRl
c3RfdHlwZXMsIHRlc3RfYXJncyk6Ci0gICAgICAgICIiIgotICAgICAgICBBcmdzOgotICAgICAg
ICAgIHBvcnQ6IG9iamVjdCBpbXBsZW1lbnRpbmcgcG9ydC1zcGVjaWZpYyBob29rcwotICAgICAg
ICAgIG9wdGlvbnM6IGNvbW1hbmQgbGluZSBhcmd1bWVudCBvYmplY3QgZnJvbSBvcHRwYXJzZQot
ICAgICAgICAgIHdvcmtlcl9udW1iZXI6IHdvcmtlciBudW1iZXIgZm9yIHRlc3RzCi0gICAgICAg
ICAgd29ya2VyX25hbWU6IGZvciBsb2dnaW5nCi0gICAgICAgICAgdGVzdF9pbnB1dDogT2JqZWN0
IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUgYW5kIHRpbWVvdXQKLSAgICAgICAgICB0ZXN0
X3R5cGVzOiBBIGxpc3Qgb2YgVGVzdFR5cGUgb2JqZWN0cyB0byBydW4gdGhlIHRlc3Qgb3V0cHV0
Ci0gICAgICAgICAgICAgIGFnYWluc3QuCi0gICAgICAgICAgdGVzdF9hcmdzOiBBIFRlc3RBcmd1
bWVudHMgb2JqZWN0IHRvIHBhc3MgdG8gZWFjaCBUZXN0VHlwZS4KLSAgICAgICAgIiIiCi0KLSAg
ICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLl9wb3J0
ID0gcG9ydAotICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwotICAgICAgICBzZWxmLl90
ZXN0X2lucHV0ID0gdGVzdF9pbnB1dAotICAgICAgICBzZWxmLl90ZXN0X3R5cGVzID0gdGVzdF90
eXBlcwotICAgICAgICBzZWxmLl90ZXN0X2FyZ3MgPSB0ZXN0X2FyZ3MKLSAgICAgICAgc2VsZi5f
ZHJpdmVyID0gTm9uZQotICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJl
cgotICAgICAgICBzZWxmLl9uYW1lID0gd29ya2VyX25hbWUKLQotICAgIGRlZiBydW4oc2VsZik6
Ci0gICAgICAgIHNlbGYuX2NvdmVyZWRfcnVuKCkKLQotICAgIGRlZiBfY292ZXJlZF9ydW4oc2Vs
Zik6Ci0gICAgICAgICMgRklYTUU6IHRoaXMgaXMgYSBzZXBhcmF0ZSByb3V0aW5lIHRvIHdvcmsg
YXJvdW5kIGEgYnVnCi0gICAgICAgICMgaW4gY292ZXJhZ2U6IHNlZSBodHRwOi8vYml0YnVja2V0
Lm9yZy9uZWQvY292ZXJhZ2VweS9pc3N1ZS84NS4KLSAgICAgICAgc2VsZi5fZHJpdmVyID0gc2Vs
Zi5fcG9ydC5jcmVhdGVfZHJpdmVyKHNlbGYuX3dvcmtlcl9udW1iZXIpCi0gICAgICAgIHNlbGYu
X2RyaXZlci5zdGFydCgpCi0gICAgICAgIHNlbGYuX3Rlc3RfcmVzdWx0ID0gX3J1bl9zaW5nbGVf
dGVzdChzZWxmLl9wb3J0LCBzZWxmLl9vcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9pbnB1dCwgc2VsZi5fdGVzdF90eXBlcywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3Rf
YXJncywgc2VsZi5fZHJpdmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fbmFtZSkKLSAgICAgICAgc2VsZi5fZHJpdmVyLnN0b3AoKQotCi0gICAg
ZGVmIGdldF90ZXN0X3Jlc3VsdChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RfcmVz
dWx0Ci0KLQogY2xhc3MgV2F0Y2hhYmxlVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgICIi
IlRoaXMgY2xhc3MgYWJzdHJhY3RzIGFuIGludGVyZmFjZSB1c2VkIGJ5CiAgICAgcnVuX3dlYmtp
dF90ZXN0cy5UZXN0UnVubmVyLl93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaCBmb3IgdGhyZWFk
CkBAIC0yNjMsMTQgKzExOSwxOSBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhy
ZWFkKToKICAgICAgICAgc2VsZi5fbmFtZSA9IHdvcmtlcl9uYW1lCiAgICAgICAgIHNlbGYuX2Zp
bGVuYW1lX2xpc3RfcXVldWUgPSBmaWxlbmFtZV9saXN0X3F1ZXVlCiAgICAgICAgIHNlbGYuX3Jl
c3VsdF9xdWV1ZSA9IHJlc3VsdF9xdWV1ZQotICAgICAgICBzZWxmLl9maWxlbmFtZV9saXN0ID0g
W10KKworICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCA9IDAKKyAgICAgICAgc2VsZi5fYmF0Y2hf
c2l6ZSA9IHNlbGYuX29wdGlvbnMuYmF0Y2hfc2l6ZQogICAgICAgICBzZWxmLl9kcml2ZXIgPSBO
b25lCi0gICAgICAgIHNlbGYuX3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRzID0ge30KKyAgICAgICAg
c2VsZi5faGF2ZV9odHRwX2xvY2sgPSBGYWxzZQorCisgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVy
ID0gTm9uZQorICAgICAgICBzZWxmLl9yZXN1bHRfc3VtbWFyeSA9IE5vbmUKKyAgICAgICAgc2Vs
Zi5fdGVzdF9saXN0X3RpbWluZ19zdGF0cyA9IHt9CiAgICAgICAgIHNlbGYuX3Rlc3RfcmVzdWx0
cyA9IFtdCiAgICAgICAgIHNlbGYuX251bV90ZXN0cyA9IDAKICAgICAgICAgc2VsZi5fc3RhcnRf
dGltZSA9IDAKICAgICAgICAgc2VsZi5fc3RvcF90aW1lID0gMAotICAgICAgICBzZWxmLl9oYXZl
X2h0dHBfbG9jayA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2h0dHBfbG9ja193YWl0X2JlZ2luID0g
MAogICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF9lbmQgPSAwCiAKQEAgLTI4MCwxMiArMTQx
LDE0IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJl
Y3RvcnkpKQogICAgICAgICBzZWxmLl90ZXN0X2FyZ3MgPSBzZWxmLl9nZXRfdGVzdF9hcmdzKHdv
cmtlcl9udW1iZXIpCiAKLSAgICAgICAgIyBDdXJyZW50IGdyb3VwIG9mIHRlc3RzIHdlJ3JlIHJ1
bm5pbmcuCi0gICAgICAgIHNlbGYuX2N1cnJlbnRfZ3JvdXAgPSBOb25lCi0gICAgICAgICMgTnVt
YmVyIG9mIHRlc3RzIGluIHNlbGYuX2N1cnJlbnRfZ3JvdXAuCi0gICAgICAgIHNlbGYuX251bV90
ZXN0c19pbl9jdXJyZW50X2dyb3VwID0gTm9uZQotICAgICAgICAjIFRpbWUgYXQgd2hpY2ggd2Ug
c3RhcnRlZCBydW5uaW5nIHRlc3RzIGZyb20gc2VsZi5fY3VycmVudF9ncm91cC4KLSAgICAgICAg
c2VsZi5fY3VycmVudF9ncm91cF9zdGFydF90aW1lID0gTm9uZQorICAgICAgICAjIEFwcGVuZCB0
ZXN0cyB3ZSdyZSBydW5uaW5nIHRvIHRoZSBleGlzdGluZyB0ZXN0c19ydW4udHh0IGZpbGUuCisg
ICAgICAgICMgVGhpcyBpcyBjcmVhdGVkIGluIHJ1bl93ZWJraXRfdGVzdHMucHk6X1ByZXBhcmVM
aXN0c0FuZFByaW50T3V0cHV0LgorICAgICAgICB0ZXN0c19ydW5fZmlsZW5hbWUgPSBvcy5wYXRo
LmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0c19ydW4udHh0IikKKyAgICAgICAgc2VsZi5f
dGVzdHNfcnVuX2ZpbGUgPSBjb2RlY3Mub3Blbih0ZXN0c19ydW5fZmlsZW5hbWUsICJhIiwgInV0
Zi04IikKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9jbGVhbnVwKCkK
IAogICAgIGRlZiBfZ2V0X3Rlc3RfYXJncyhzZWxmLCB3b3JrZXJfbnVtYmVyKToKICAgICAgICAg
IiIiUmV0dXJucyB0aGUgdHVwbGUgb2YgYXJndW1lbnRzIGZvciB0ZXN0cyBhbmQgZm9yIER1bXBS
ZW5kZXJUcmVlLiIiIgpAQCAtMzA0LDcgKzE2Nyw3IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChX
YXRjaGFibGVUaHJlYWQpOgogICAgIGRlZiBnZXRfdGVzdF9ncm91cF90aW1pbmdfc3RhdHMoc2Vs
Zik6CiAgICAgICAgICIiIlJldHVybnMgYSBkaWN0aW9uYXJ5IG1hcHBpbmcgdGVzdCBncm91cCB0
byBhIHR1cGxlIG9mCiAgICAgICAgIChudW1iZXIgb2YgdGVzdHMgaW4gdGhhdCBncm91cCwgdGlt
ZSB0byBydW4gdGhlIHRlc3RzKSIiIgotICAgICAgICByZXR1cm4gc2VsZi5fdGVzdF9ncm91cF90
aW1pbmdfc3RhdHMKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RfbGlzdF90aW1pbmdfc3RhdHMK
IAogICAgIGRlZiBnZXRfdGVzdF9yZXN1bHRzKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhl
IGxpc3Qgb2YgYWxsIHRlc3RzIHJ1biBvbiB0aGlzIHRocmVhZC4KQEAgLTMyMSw2ICsxODQsMTIg
QEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAgICAgZGVmIGdldF9u
dW1fdGVzdHMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9udW1fdGVzdHMKIAorICAgIGRl
ZiBuZXh0X3RpbWVvdXQoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgdGltZSB0aGUgdGVz
dCBpcyBzdXBwb3NlZCB0byBmaW5pc2ggYnkuIiIiCisgICAgICAgIGlmIHNlbGYuX25leHRfdGlt
ZW91dDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9uZXh0X3RpbWVvdXQgKyBzZWxmLl9odHRw
X2xvY2tfd2FpdF90aW1lKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX25leHRfdGltZW91dAorCiAg
ICAgZGVmIHJ1bihzZWxmKToKICAgICAgICAgIiIiRGVsZWdhdGUgbWFpbiB3b3JrIHRvIGEgaGVs
cGVyIG1ldGhvZCBhbmQgd2F0Y2ggZm9yIHVuY2F1Z2h0CiAgICAgICAgIGV4Y2VwdGlvbnMuIiIi
CkBAIC0zMzEsMjAgKzIwMCwxOCBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhy
ZWFkKToKICAgICAgICAgIyBpbiBjb3ZlcmFnZTogc2VlIGh0dHA6Ly9iaXRidWNrZXQub3JnL25l
ZC9jb3ZlcmFnZXB5L2lzc3VlLzg1LgogICAgICAgICBzZWxmLl90aHJlYWRfaWQgPSB0aHJlYWQu
Z2V0X2lkZW50KCkKICAgICAgICAgc2VsZi5fc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCi0gICAg
ICAgIHNlbGYuX251bV90ZXN0cyA9IDAKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygnJXMgc3RhcnRpbmcnICUgKHNlbGYuZ2V0TmFtZSgpKSkKKyAgICAgICAgICAgIF9sb2cu
ZGVidWcoJyVzIHN0YXJ0aW5nJyAlIChzZWxmLl9uYW1lKSkKICAgICAgICAgICAgIHNlbGYuX3J1
bih0ZXN0X3J1bm5lcj1Ob25lLCByZXN1bHRfc3VtbWFyeT1Ob25lKQotICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygnJXMgZG9uZSAoJWQgdGVzdHMpJyAlIChzZWxmLmdldE5hbWUoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5nZXRfbnVtX3Rlc3RzKCkpKQorICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygnJXMgZG9uZSAoJWQgdGVzdHMpJyAlIChzZWxmLl9uYW1lLCBzZWxmLl9udW1fdGVzdHMp
KQogICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgICAgICBzZWxmLl9l
eGNlcHRpb25faW5mbyA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgICAgICBfbG9nLmRlYnVnKCIl
cyBpbnRlcnJ1cHRlZCIgJSBzZWxmLmdldE5hbWUoKSkKKyAgICAgICAgICAgIF9sb2cuZGVidWco
IiVzIGludGVycnVwdGVkIiAlIHNlbGYuX25hbWUpCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAg
ICAgICMgU2F2ZSB0aGUgZXhjZXB0aW9uIGZvciBvdXIgY2FsbGVyIHRvIHNlZS4KICAgICAgICAg
ICAgIHNlbGYuX2V4Y2VwdGlvbl9pbmZvID0gc3lzLmV4Y19pbmZvKCkKICAgICAgICAgICAgIHNl
bGYuX3N0b3BfdGltZSA9IHRpbWUudGltZSgpCi0gICAgICAgICAgICBfbG9nLmVycm9yKCclcyBk
eWluZywgZXhjZXB0aW9uIHJhaXNlZCcgJSBzZWxmLmdldE5hbWUoKSkKKyAgICAgICAgICAgIF9s
b2cuZXJyb3IoJyVzIGR5aW5nLCBleGNlcHRpb24gcmFpc2VkJyAlIHNlbGYuX25hbWUpCiAKICAg
ICAgICAgc2VsZi5fc3RvcF90aW1lID0gdGltZS50aW1lKCkKIApAQCAtMzU1LDEwOCArMjIyLDk3
IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgogICAgICAgICBkbyBt
dWx0aS10aHJlYWRlZCBkZWJ1Z2dpbmcuIiIiCiAgICAgICAgIHNlbGYuX3J1bih0ZXN0X3J1bm5l
ciwgcmVzdWx0X3N1bW1hcnkpCiAKLSAgICBkZWYgY2FuY2VsKHNlbGYpOgotICAgICAgICAiIiJD
bGVhbiB1cCBodHRwIGxvY2sgYW5kIHNldCBhIGZsYWcgdGVsbGluZyB0aGlzIHRocmVhZCB0byBx
dWl0LiIiIgotICAgICAgICBzZWxmLl9zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKCkKLSAgICAgICAg
V2F0Y2hhYmxlVGhyZWFkLmNhbmNlbChzZWxmKQotCi0gICAgZGVmIG5leHRfdGltZW91dChzZWxm
KToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSB0aW1lIHRoZSB0ZXN0IGlzIHN1cHBvc2VkIHRvIGZp
bmlzaCBieS4iIiIKLSAgICAgICAgaWYgc2VsZi5fbmV4dF90aW1lb3V0OgotICAgICAgICAgICAg
cmV0dXJuIHNlbGYuX25leHRfdGltZW91dCArIHNlbGYuX2h0dHBfbG9ja193YWl0X3RpbWUoKQot
ICAgICAgICByZXR1cm4gc2VsZi5fbmV4dF90aW1lb3V0Ci0KLSAgICBkZWYgX2h0dHBfbG9ja193
YWl0X3RpbWUoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgdGltZSB3aGF0IGh0dHAgbG9j
a2luZyB0YWtlcy4iIiIKLSAgICAgICAgaWYgc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVnaW4gPT0g
MDoKLSAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIGlmIHNlbGYuX2h0dHBfbG9ja193YWl0
X2VuZCA9PSAwOgotICAgICAgICAgICAgcmV0dXJuIHRpbWUudGltZSgpIC0gc2VsZi5faHR0cF9s
b2NrX3dhaXRfYmVnaW4KLSAgICAgICAgcmV0dXJuIHNlbGYuX2h0dHBfbG9ja193YWl0X2VuZCAt
IHNlbGYuX2h0dHBfbG9ja193YWl0X2JlZ2luCi0KICAgICBkZWYgX3J1bihzZWxmLCB0ZXN0X3J1
bm5lciwgcmVzdWx0X3N1bW1hcnkpOgogICAgICAgICAiIiJNYWluIHdvcmsgZW50cnkgcG9pbnQg
b2YgdGhlIHRocmVhZC4gQmFzaWNhbGx5IHdlIHB1bGwgdXJscyBmcm9tIHRoZQogICAgICAgICBm
aWxlbmFtZSBxdWV1ZSBhbmQgcnVuIHRoZSB0ZXN0cyB1bnRpbCB3ZSBydW4gb3V0IG9mIHVybHMu
CiAKICAgICAgICAgSWYgdGVzdF9ydW5uZXIgaXMgbm90IE5vbmUsIHRoZW4gd2UgY2FsbCB0ZXN0
X3J1bm5lci5VcGRhdGVTdW1tYXJ5KCkKLSAgICAgICAgd2l0aCB0aGUgcmVzdWx0cyBvZiBlYWNo
IHRlc3QuIiIiCi0gICAgICAgIGJhdGNoX3NpemUgPSBzZWxmLl9vcHRpb25zLmJhdGNoX3NpemUK
LSAgICAgICAgYmF0Y2hfY291bnQgPSAwCisgICAgICAgIHdpdGggdGhlIHJlc3VsdHMgb2YgZWFj
aCB0ZXN0IGR1cmluZyBfdGVhcl9kb3duX3Rlc3QoKSwgYmVsb3cuIiIiCisgICAgICAgIHNlbGYu
X3Rlc3RfcnVubmVyID0gdGVzdF9ydW5uZXIKKyAgICAgICAgc2VsZi5fcmVzdWx0X3N1bW1hcnkg
PSByZXN1bHRfc3VtbWFyeQogCi0gICAgICAgICMgQXBwZW5kIHRlc3RzIHdlJ3JlIHJ1bm5pbmcg
dG8gdGhlIGV4aXN0aW5nIHRlc3RzX3J1bi50eHQgZmlsZS4KLSAgICAgICAgIyBUaGlzIGlzIGNy
ZWF0ZWQgaW4gcnVuX3dlYmtpdF90ZXN0cy5weTpfUHJlcGFyZUxpc3RzQW5kUHJpbnRPdXRwdXQu
Ci0gICAgICAgIHRlc3RzX3J1bl9maWxlbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLl9vcHRpb25z
LnJlc3VsdHNfZGlyZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInRlc3RzX3J1bi50eHQiKQotICAgICAgICB0ZXN0c19ydW5fZmlsZSA9IGNvZGVjcy5v
cGVuKHRlc3RzX3J1bl9maWxlbmFtZSwgImEiLCAidXRmLTgiKQorICAgICAgICB3aGlsZSBub3Qg
c2VsZi5fY2FuY2VsZWQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY3VycmVu
dF9ncm91cCwgZmlsZW5hbWVfbGlzdCA9IFwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmls
ZW5hbWVfbGlzdF9xdWV1ZS5nZXRfbm93YWl0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRs
ZV90ZXN0X2xpc3QoY3VycmVudF9ncm91cCwgZmlsZW5hbWVfbGlzdCkKKyAgICAgICAgICAgIGV4
Y2VwdCBRdWV1ZS5FbXB0eToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIHNl
bGYuX2NhbmNlbGVkOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVGVzdGluZyBjYW5jZWxlZCcp
CiAKLSAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgc2VsZi5fY2xlYW51cCgpCisKKyAgICBk
ZWYgX2NsZWFudXAoc2VsZik6CisgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgp
CisgICAgICAgIGlmIHNlbGYuX2hhdmVfaHR0cF9sb2NrOgorICAgICAgICAgICAgc2VsZi5fc3Rv
cF9zZXJ2ZXJzX3dpdGhfbG9jaygpCisgICAgICAgIGlmIHNlbGYuX3Rlc3RzX3J1bl9maWxlOgor
ICAgICAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgc2Vs
Zi5fdGVzdHNfcnVuX2ZpbGUgPSBOb25lCisKKyAgICBkZWYgaGFuZGxlX3Rlc3RfbGlzdChzZWxm
LCBsaXN0X25hbWUsIHRlc3RfbGlzdCk6CisgICAgICAgIGlmIGxpc3RfbmFtZSA9PSAidGVzdHNf
dG9faHR0cF9sb2NrIjoKKyAgICAgICAgICAgIHNlbGYuX3N0YXJ0X3NlcnZlcnNfd2l0aF9sb2Nr
KCkKKworICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgbnVtX3Rlc3Rz
ID0gMAorICAgICAgICBmb3IgdGVzdF9pbnB1dCBpbiB0ZXN0X2xpc3Q6CisgICAgICAgICAgICBz
ZWxmLl9ydW5fdGVzdCh0ZXN0X2lucHV0KQogICAgICAgICAgICAgaWYgc2VsZi5fY2FuY2VsZWQ6
Ci0gICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVGVzdGluZyBjYW5jZWxsZWQnKQotICAgICAg
ICAgICAgICAgIHRlc3RzX3J1bl9maWxlLmNsb3NlKCkKLSAgICAgICAgICAgICAgICByZXR1cm4K
LQotICAgICAgICAgICAgaWYgbGVuKHNlbGYuX2ZpbGVuYW1lX2xpc3QpIGlzIDA6Ci0gICAgICAg
ICAgICAgICAgaWYgc2VsZi5fY3VycmVudF9ncm91cCBpcyBub3QgTm9uZToKLSAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fdGVzdF9ncm91cF90aW1pbmdfc3RhdHNbc2VsZi5fY3VycmVudF9ncm91
cF0gPSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fbnVtX3Rlc3RzX2luX2N1cnJl
bnRfZ3JvdXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGltZS50aW1lKCkgLSBzZWxmLl9j
dXJyZW50X2dyb3VwX3N0YXJ0X3RpbWUpCi0KLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfZ3JvdXAsIHNlbGYuX2ZpbGVuYW1lX2xpc3QgPSBc
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlbmFtZV9saXN0X3F1ZXVlLmdldF9u
b3dhaXQoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKLSAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCi0gICAgICAgICAgICAgICAg
ICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpCi0gICAgICAgICAgICAgICAgICAgIHRl
c3RzX3J1bl9maWxlLmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAg
ICAgICAgICAgICBpZiBzZWxmLl9jdXJyZW50X2dyb3VwID09ICJ0ZXN0c190b19odHRwX2xvY2si
OgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGFydF9zZXJ2ZXJzX3dpdGhfbG9jaygpCi0g
ICAgICAgICAgICAgICAgZWxpZiBzZWxmLl9oYXZlX2h0dHBfbG9jazoKLSAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCi0KLSAgICAgICAgICAgICAgICBz
ZWxmLl9udW1fdGVzdHNfaW5fY3VycmVudF9ncm91cCA9IGxlbihzZWxmLl9maWxlbmFtZV9saXN0
KQotICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfZ3JvdXBfc3RhcnRfdGltZSA9IHRpbWUu
dGltZSgpCi0KLSAgICAgICAgICAgIHRlc3RfaW5wdXQgPSBzZWxmLl9maWxlbmFtZV9saXN0LnBv
cCgpCi0KLSAgICAgICAgICAgICMgV2UgaGF2ZSBhIHVybCwgcnVuIHRlc3RzLgotICAgICAgICAg
ICAgYmF0Y2hfY291bnQgKz0gMQotICAgICAgICAgICAgc2VsZi5fbnVtX3Rlc3RzICs9IDEKLSAg
ICAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucnVuX3NpbmdseToKLSAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBzZWxmLl9ydW5fdGVzdF9pbl9hbm90aGVyX3RocmVhZCh0ZXN0X2lucHV0KQotICAg
ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9ydW5fdGVzdF9p
bl90aGlzX3RocmVhZCh0ZXN0X2lucHV0KQotCi0gICAgICAgICAgICBmaWxlbmFtZSA9IHRlc3Rf
aW5wdXQuZmlsZW5hbWUKLSAgICAgICAgICAgIHRlc3RzX3J1bl9maWxlLndyaXRlKGZpbGVuYW1l
ICsgIlxuIikKLSAgICAgICAgICAgIGlmIHJlc3VsdC5mYWlsdXJlczoKLSAgICAgICAgICAgICAg
ICAjIENoZWNrIGFuZCBraWxsIER1bXBSZW5kZXJUcmVlIGlmIHdlIG5lZWQgdG8uCi0gICAgICAg
ICAgICAgICAgaWYgbGVuKFsxIGZvciBmIGluIHJlc3VsdC5mYWlsdXJlcwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgZi5zaG91bGRfa2lsbF9kdW1wX3JlbmRlcl90cmVlKCldKToKLSAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKLSAgICAgICAgICAg
ICAgICAgICAgIyBSZXNldCB0aGUgYmF0Y2ggY291bnQgc2luY2UgdGhlIHNoZWxsIGp1c3QgYm91
bmNlZC4KLSAgICAgICAgICAgICAgICAgICAgYmF0Y2hfY291bnQgPSAwCi0gICAgICAgICAgICAg
ICAgIyBQcmludCB0aGUgZXJyb3IgbWVzc2FnZShzKS4KLSAgICAgICAgICAgICAgICBlcnJvcl9z
dHIgPSAnXG4nLmpvaW4oWycgICcgKyBmLm1lc3NhZ2UoKSBmb3IKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGYgaW4gcmVzdWx0LmZhaWx1cmVzXSkKLSAgICAgICAgICAg
ICAgICBfbG9nLmRlYnVnKCIlcyAlcyBmYWlsZWQ6XG4lcyIgJSAoc2VsZi5nZXROYW1lKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5h
bWUoZmlsZW5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jfc3RyKSkKLSAg
ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgcGFzc2Vk
IiAlIChzZWxmLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Bv
cnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkpKQotICAgICAgICAgICAgc2VsZi5f
cmVzdWx0X3F1ZXVlLnB1dChyZXN1bHQuZHVtcHMoKSkKLQotICAgICAgICAgICAgaWYgYmF0Y2hf
c2l6ZSA+IDAgYW5kIGJhdGNoX2NvdW50ID49IGJhdGNoX3NpemU6Ci0gICAgICAgICAgICAgICAg
IyBCb3VuY2UgdGhlIHNoZWxsIGFuZCByZXNldCBjb3VudC4KLSAgICAgICAgICAgICAgICBzZWxm
Ll9raWxsX2R1bXBfcmVuZGVyX3RyZWUoKQotICAgICAgICAgICAgICAgIGJhdGNoX2NvdW50ID0g
MAorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBudW1fdGVzdHMgKz0gMQogCi0g
ICAgICAgICAgICBpZiB0ZXN0X3J1bm5lcjoKLSAgICAgICAgICAgICAgICB0ZXN0X3J1bm5lci51
cGRhdGVfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKKyAgICAgICAgZWxhcHNlZF90aW1lID0gdGlt
ZS50aW1lKCkgLSBzdGFydF90aW1lCiAKLSAgICBkZWYgX3J1bl90ZXN0X2luX2Fub3RoZXJfdGhy
ZWFkKHNlbGYsIHRlc3RfaW5wdXQpOgorICAgICAgICBpZiBzZWxmLl9oYXZlX2h0dHBfbG9jazoK
KyAgICAgICAgICAgIHNlbGYuX3N0b3Bfc2VydmVyc193aXRoX2xvY2soKQorCisgICAgICAgIHNl
bGYuX3Rlc3RfbGlzdF90aW1pbmdfc3RhdHNbbGlzdF9uYW1lXSA9IFwKKyAgICAgICAgICAgKG51
bV90ZXN0cywgZWxhcHNlZF90aW1lKQorCisgICAgZGVmIF9ydW5fdGVzdChzZWxmLCB0ZXN0X2lu
cHV0KToKKyAgICAgICAgc2VsZi5fc2V0X3VwX3Rlc3QodGVzdF9pbnB1dCkKKworICAgICAgICAj
IFdlIGNhbGN1bGF0ZSBob3cgbG9uZyB3ZSBleHBlY3QgdGhlIHRlc3QgdG8gdGFrZS4KKyAgICAg
ICAgIworICAgICAgICAjIFRoZSBEdW1wUmVuZGVyVHJlZSB3YXRjaGRvZyB1c2VzIDIuNXggdGhl
IHRpbWVvdXQ7IHdlIHdhbnQgdG8gYmUKKyAgICAgICAgIyBsYXJnZXIgdGhhbiB0aGF0LiBXZSBh
bHNvIGFkZCBhIGxpdHRsZSBtb3JlIHBhZGRpbmcgaWYgd2UncmUKKyAgICAgICAgIyBydW5uaW5n
IHRlc3RzIGluIGEgc2VwYXJhdGUgdGhyZWFkLgorICAgICAgICAjCisgICAgICAgICMgTm90ZSB0
aGF0IHdlIG5lZWQgdG8gY29udmVydCB0aGUgdGVzdCB0aW1lb3V0IGZyb20gYQorICAgICAgICAj
IHN0cmluZyB2YWx1ZSBpbiBtaWxsaXNlY29uZHMgdG8gYSBmbG9hdCBmb3IgUHl0aG9uLgorICAg
ICAgICBkcml2ZXJfdGltZW91dF9zZWMgPSAzLjAgKiBmbG9hdCh0ZXN0X2lucHV0LnRpbWVvdXQp
IC8gMTAwMC4wCisgICAgICAgIHRocmVhZF9wYWRkaW5nX3NlYyA9IDEuMAorICAgICAgICB0aHJl
YWRfdGltZW91dF9zZWMgPSBkcml2ZXJfdGltZW91dF9zZWMgKyB0aHJlYWRfcGFkZGluZ19zZWMK
KyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5ydW5fc2luZ2x5OgorICAgICAgICAgICAgdGVzdF90
aW1lb3V0X3NlYyA9IHRocmVhZF90aW1lb3V0X3NlYworICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgdGVzdF90aW1lb3V0X3NlYyA9IGRyaXZlcl90aW1lb3V0X3NlYworCisgICAgICAgIHN0YXJ0
ID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5fbmV4dF90aW1lb3V0ID0gc3RhcnQgKyB0ZXN0
X3RpbWVvdXRfc2VjCisKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5ydW5fc2luZ2x5OgorICAg
ICAgICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX3Rlc3RfaW5fYW5vdGhlcl90aHJlYWQodGVzdF9p
bnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRocmVhZF90aW1lb3V0X3NlYykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHNlbGYuX3J1bl90ZXN0X2luX3RoaXNfdGhyZWFkKHRlc3RfaW5wdXQpCisKKyAgICAgICAg
c2VsZi5fdGVhcl9kb3duX3Rlc3QodGVzdF9pbnB1dCwgcmVzdWx0KQorCisgICAgZGVmIF9zZXRf
dXBfdGVzdChzZWxmLCB0ZXN0X2lucHV0KToKKyAgICAgICAgdGVzdF9pbnB1dC51cmkgPSBzZWxm
Ll9wb3J0LmZpbGVuYW1lX3RvX3VyaSh0ZXN0X2lucHV0LmZpbGVuYW1lKQorICAgICAgICBpZiBz
ZWxmLl9zaG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hlY2tzdW0oKToKKyAgICAgICAgICAgIHRlc3Rf
aW5wdXQuaW1hZ2VfY2hlY2tzdW0gPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2NoZWNrc3VtKAorICAg
ICAgICAgICAgICAgIHRlc3RfaW5wdXQuZmlsZW5hbWUpCisKKyAgICBkZWYgX3Nob3VsZF9mZXRj
aF9leHBlY3RlZF9jaGVja3N1bShzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl9vcHRpb25z
LnBpeGVsX3Rlc3RzIGFuZCBub3QKKyAgICAgICAgICAgICAgICAoc2VsZi5fb3B0aW9ucy5uZXdf
YmFzZWxpbmUgb3Igc2VsZi5fb3B0aW9ucy5yZXNldF9yZXN1bHRzKSkKKworICAgIGRlZiBfcnVu
X3Rlc3RfaW5fYW5vdGhlcl90aHJlYWQoc2VsZiwgdGVzdF9pbnB1dCwgdGhyZWFkX3RpbWVvdXRf
c2VjKToKICAgICAgICAgIiIiUnVuIGEgdGVzdCBpbiBhIHNlcGFyYXRlIHRocmVhZCwgZW5mb3Jj
aW5nIGEgaGFyZCB0aW1lIGxpbWl0LgogCiAgICAgICAgIFNpbmNlIHdlIGNhbiBvbmx5IGRldGVj
dCB0aGUgdGVybWluYXRpb24gb2YgYSB0aHJlYWQsIG5vdCBhbnkgaW50ZXJuYWwKQEAgLTQ2NSwy
NSArMzIxLDI0IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgogCiAg
ICAgICAgIEFyZ3M6CiAgICAgICAgICAgdGVzdF9pbnB1dDogT2JqZWN0IGNvbnRhaW5pbmcgdGhl
IHRlc3QgZmlsZW5hbWUgYW5kIHRpbWVvdXQKLQorICAgICAgICAgIHRocmVhZF90aW1lb3V0X3Nl
YzogdGltZSB0byB3YWl0IGJlZm9yZSBraWxsaW5nIHRoZSBkcml2ZXIgcHJvY2Vzcy4KICAgICAg
ICAgUmV0dXJuczoKICAgICAgICAgICBBIFRlc3RSZXN1bHQKICAgICAgICAgIiIiCi0gICAgICAg
IHdvcmtlciA9IFNpbmdsZVRlc3RUaHJlYWQoc2VsZi5fcG9ydCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZXN0X2lucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3Rf
dHlwZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9hcmdz
KQotCi0gICAgICAgIHdvcmtlci5zdGFydCgpCi0KLSAgICAgICAgdGhyZWFkX3RpbWVvdXQgPSBf
bWlsbGlzZWNvbmRzX3RvX3NlY29uZHMoCi0gICAgICAgICAgICBfcGFkX3RpbWVvdXQoaW50KHRl
c3RfaW5wdXQudGltZW91dCkpKQotICAgICAgICB0aHJlYWQuX25leHRfdGltZW91dCA9IHRpbWUu
dGltZSgpICsgdGhyZWFkX3RpbWVvdXQKLSAgICAgICAgd29ya2VyLmpvaW4odGhyZWFkX3RpbWVv
dXQpCi0gICAgICAgIGlmIHdvcmtlci5pc0FsaXZlKCk6CisgICAgICAgIHdvcmtlciA9IHNlbGYK
KyAgICAgICAgcmVzdWx0ID0gTm9uZQorCisgICAgICAgIGRyaXZlciA9IHdvcmtlci5fcG9ydC5j
cmVhdGVfZHJpdmVyKHdvcmtlci5fd29ya2VyX251bWJlcikKKyAgICAgICAgZHJpdmVyLnN0YXJ0
KCkKKworICAgICAgICBjbGFzcyBTaW5nbGVUZXN0VGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgor
ICAgICAgICAgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB3b3Jr
ZXIuX3J1bl9zaW5nbGVfdGVzdChkcml2ZXIsIHRlc3RfaW5wdXQpCisKKyAgICAgICAgdGhyZWFk
ID0gU2luZ2xlVGVzdFRocmVhZCgpCisgICAgICAgIHRocmVhZC5zdGFydCgpCisgICAgICAgIHRo
cmVhZC5qb2luKHRocmVhZF90aW1lb3V0X3NlYykKKyAgICAgICAgaWYgdGhyZWFkLmlzQWxpdmUo
KToKICAgICAgICAgICAgICMgSWYgam9pbigpIHJldHVybmVkIHdpdGggdGhlIHRocmVhZCBzdGls
bCBydW5uaW5nLCB0aGUKICAgICAgICAgICAgICMgRHVtcFJlbmRlclRyZWUgaXMgY29tcGxldGVs
eSBodW5nIGFuZCB0aGVyZSdzIG5vdGhpbmcKICAgICAgICAgICAgICMgbW9yZSB3ZSBjYW4gZG8g
d2l0aCBpdC4gIFdlIGhhdmUgdG8ga2lsbCBhbGwgdGhlCkBAIC00OTMsMTYgKzM0OCwxMCBAQCBj
bGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKICAgICAgICAgICAgICMgdGhh
dCB0cmFkZW9mZiBpbiBvcmRlciB0byBhdm9pZCBsb3NpbmcgdGhlIHJlc3Qgb2YgdGhpcwogICAg
ICAgICAgICAgIyB0aHJlYWQncyByZXN1bHRzLgogICAgICAgICAgICAgX2xvZy5lcnJvcignVGVz
dCB0aHJlYWQgaHVuZzoga2lsbGluZyBhbGwgRHVtcFJlbmRlclRyZWVzJykKLSAgICAgICAgICAg
IGlmIHdvcmtlci5fZHJpdmVyOgotICAgICAgICAgICAgICAgIHdvcmtlci5fZHJpdmVyLnN0b3Ao
KQogCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJlc3VsdCA9IHdvcmtlci5nZXRfdGVzdF9y
ZXN1bHQoKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6Ci0gICAgICAgICAgICAj
IFRoaXMgZ2V0cyByYWlzZWQgaWYgdGhlIHdvcmtlciB0aHJlYWQgaGFzIGFscmVhZHkgZXhpdGVk
LgotICAgICAgICAgICAgZmFpbHVyZXMgPSBbXQotICAgICAgICAgICAgX2xvZy5lcnJvcignQ2Fu
bm90IGdldCByZXN1bHRzIG9mIHRlc3Q6ICVzJyAlCi0gICAgICAgICAgICAgICAgICAgICAgIHRl
c3RfaW5wdXQuZmlsZW5hbWUpCisgICAgICAgIGRyaXZlci5zdG9wKCkKKworICAgICAgICBpZiBu
b3QgcmVzdWx0OgogICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9yZXN1bHRzLlRlc3RSZXN1bHQo
dGVzdF9pbnB1dC5maWxlbmFtZSwgZmFpbHVyZXM9W10sCiAgICAgICAgICAgICAgICAgdGVzdF9y
dW5fdGltZT0wLCB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnM9MCwgdGltZV9mb3JfZGlmZnM9e30p
CiAKQEAgLTUxNiwzMyArMzY1LDEyMyBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxl
VGhyZWFkKToKIAogICAgICAgICBSZXR1cm5zOiBhIFRlc3RSZXN1bHQgb2JqZWN0LgogICAgICAg
ICAiIiIKLSAgICAgICAgc2VsZi5fZW5zdXJlX2R1bXBfcmVuZGVyX3RyZWVfaXNfcnVubmluZygp
Ci0gICAgICAgIHRocmVhZF90aW1lb3V0ID0gX21pbGxpc2Vjb25kc190b19zZWNvbmRzKAotICAg
ICAgICAgICAgIF9wYWRfdGltZW91dChpbnQodGVzdF9pbnB1dC50aW1lb3V0KSkpCi0gICAgICAg
IHNlbGYuX25leHRfdGltZW91dCA9IHRpbWUudGltZSgpICsgdGhyZWFkX3RpbWVvdXQKLSAgICAg
ICAgdGVzdF9yZXN1bHQgPSBfcnVuX3NpbmdsZV90ZXN0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlv
bnMsIHRlc3RfaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl90ZXN0X3R5cGVzLCBzZWxmLl90ZXN0X2FyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9kcml2ZXIsIHNlbGYuX25hbWUpCisgICAgICAgICMgcG9s
bCgpIGlzIG5vdCB0aHJlYWRzYWZlIGFuZCBjYW4gdGhyb3cgT1NFcnJvciBkdWUgdG86CisgICAg
ICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE3MzE3MTcKKyAgICAgICAgaWYgbm90
IHNlbGYuX2RyaXZlciBvciBzZWxmLl9kcml2ZXIucG9sbCgpIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgc2VsZi5fZHJpdmVyID0gc2VsZi5fcG9ydC5jcmVhdGVfZHJpdmVyKHNlbGYuX3dvcmtl
cl9udW1iZXIpCisgICAgICAgICAgICBzZWxmLl9kcml2ZXIuc3RhcnQoKQorCisgICAgICAgIHRl
c3RfcmVzdWx0ID0gc2VsZi5fcnVuX3NpbmdsZV90ZXN0KHRlc3RfaW5wdXQsIHNlbGYuX2RyaXZl
cikKICAgICAgICAgc2VsZi5fdGVzdF9yZXN1bHRzLmFwcGVuZCh0ZXN0X3Jlc3VsdCkKICAgICAg
ICAgcmV0dXJuIHRlc3RfcmVzdWx0CiAKLSAgICBkZWYgX2Vuc3VyZV9kdW1wX3JlbmRlcl90cmVl
X2lzX3J1bm5pbmcoc2VsZik6Ci0gICAgICAgICIiIlN0YXJ0IHRoZSBzaGFyZWQgRHVtcFJlbmRl
clRyZWUsIGlmIGl0J3Mgbm90IHJ1bm5pbmcuCisgICAgZGVmIF9ydW5fc2luZ2xlX3Rlc3Qoc2Vs
ZiwgdGVzdF9pbnB1dCwgZHJpdmVyKToKKyAgICAgICAgIyBUaGUgaW1hZ2UgaGFzaCBpcyB1c2Vk
IHRvIGF2b2lkIGRvaW5nIGFuIGltYWdlIGR1bXAgaWYgdGhlCisgICAgICAgICMgY2hlY2tzdW1z
IG1hdGNoLCBzbyBpdCBzaG91bGQgYmUgc2V0IHRvIGEgYmxhbmsgdmFsdWUgaWYgd2UKKyAgICAg
ICAgIyBhcmUgZ2VuZXJhdGluZyBhIG5ldyBiYXNlbGluZS4gIChPdGhlcndpc2UsIGFuIGltYWdl
IGZyb20gYQorICAgICAgICAjIHByZXZpb3VzIHJ1biB3aWxsIGJlIGNvcGllZCBpbnRvIHRoZSBi
YXNlbGluZS4iIiIKKyAgICAgICAgaWYgc2VsZi5fc2hvdWxkX2ZldGNoX2V4cGVjdGVkX2NoZWNr
c3VtKCk6CisgICAgICAgICAgICB0ZXN0X2lucHV0LmltYWdlX2hhc2ggPSBzZWxmLl9wb3J0LmV4
cGVjdGVkX2NoZWNrc3VtKAorICAgICAgICAgICAgICAgIHRlc3RfaW5wdXQuZmlsZW5hbWUpCisg
ICAgICAgIHRlc3Rfb3V0cHV0ID0gZHJpdmVyLnJ1bl90ZXN0KHRlc3RfaW5wdXQpCisgICAgICAg
IHJldHVybiBzZWxmLl9wcm9jZXNzX291dHB1dCh0ZXN0X2lucHV0LmZpbGVuYW1lLCB0ZXN0X291
dHB1dCkKKworICAgIGRlZiBfcHJvY2Vzc19vdXRwdXQoc2VsZiwgdGVzdF9maWxlbmFtZSwgdGVz
dF9vdXRwdXQpOgorICAgICAgICAiIiJSZWNlaXZlcyB0aGUgb3V0cHV0IGZyb20gYSBEdW1wUmVu
ZGVyVHJlZSBwcm9jZXNzLCBzdWJqZWN0cyBpdCB0byBhCisgICAgICAgIG51bWJlciBvZiB0ZXN0
cywgYW5kIHJldHVybnMgYSBsaXN0IG9mIGZhaWx1cmUgdHlwZXMgdGhlIHRlc3QgcHJvZHVjZWQu
CiAKLSAgICAgICAgVGhpcyBpcyBub3QgZm9yIHVzZSB3aGVuIHJ1bm5pbmcgdGVzdHMgc2luZ2x5
LCBzaW5jZSB0aG9zZSBlYWNoIHN0YXJ0Ci0gICAgICAgIGEgc2VwYXJhdGUgRHVtcFJlbmRlclRy
ZWUgaW4gdGhlaXIgb3duIHRocmVhZC4KKyAgICAgICAgQXJnczoKKyAgICAgICAgdGVzdF9maWxl
bmFtZTogZnVsbCBwYXRoIHRvIHRoZSB0ZXN0IGluIHF1ZXN0aW9uLgorICAgICAgICB0ZXN0X291
dHB1dDogYSBUZXN0T3V0cHV0IG9iamVjdCBjb250YWluaW5nIHRoZSBvdXRwdXQgb2YgdGhlIHRl
c3QKIAorICAgICAgICBSZXR1cm5zOiBhIFRlc3RSZXN1bHQgb2JqZWN0CiAgICAgICAgICIiIgot
ICAgICAgICAjIHBvbGwoKSBpcyBub3QgdGhyZWFkc2FmZSBhbmQgY2FuIHRocm93IE9TRXJyb3Ig
ZHVlIHRvOgotICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNzMxNzE3Ci0g
ICAgICAgIGlmIG5vdCBzZWxmLl9kcml2ZXIgb3Igc2VsZi5fZHJpdmVyLnBvbGwoKSBpcyBub3Qg
Tm9uZToKLSAgICAgICAgICAgIHNlbGYuX2RyaXZlciA9IHNlbGYuX3BvcnQuY3JlYXRlX2RyaXZl
cihzZWxmLl93b3JrZXJfbnVtYmVyKQotICAgICAgICAgICAgc2VsZi5fZHJpdmVyLnN0YXJ0KCkK
KyAgICAgICAgZmFpbHVyZXMgPSBbXQorCisgICAgICAgIGlmIHRlc3Rfb3V0cHV0LmNyYXNoOgor
ICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUNyYXNoKCkp
CisgICAgICAgIGlmIHRlc3Rfb3V0cHV0LnRpbWVvdXQ6CisgICAgICAgICAgICBmYWlsdXJlcy5h
cHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlVGltZW91dCgpKQorCisgICAgICAgIHRlc3RfbmFt
ZSA9IHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2ZpbGVuYW1lKQorICAg
ICAgICBpZiB0ZXN0X291dHB1dC5jcmFzaDoKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzIFN0
YWNrdHJhY2UgZm9yICVzOlxuJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX25h
bWUsIHRlc3RfbmFtZSwgdGVzdF9vdXRwdXQuZXJyb3IpKQorICAgICAgICAgICAgZmlsZW5hbWUg
PSBvcy5wYXRoLmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwgdGVzdF9uYW1l
KQorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXSAr
ICItc3RhY2sudHh0IgorICAgICAgICAgICAgc2VsZi5fcG9ydC5tYXliZV9tYWtlX2RpcmVjdG9y
eShvcy5wYXRoLnNwbGl0KGZpbGVuYW1lKVswXSkKKyAgICAgICAgICAgIHdpdGggY29kZWNzLm9w
ZW4oZmlsZW5hbWUsICJ3YiIsICJ1dGYtOCIpIGFzIGZpbGU6CisgICAgICAgICAgICAgICAgZmls
ZS53cml0ZSh0ZXN0X291dHB1dC5lcnJvcikKKyAgICAgICAgZWxpZiB0ZXN0X291dHB1dC5lcnJv
cjoKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICVzIG91dHB1dCBzdGRlcnIgbGluZXM6XG4l
cyIgJQorICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fbmFtZSwgdGVzdF9uYW1lLCB0ZXN0
X291dHB1dC5lcnJvcikpCisKKyAgICAgICAgZXhwZWN0ZWRfdGVzdF9vdXRwdXQgPSBzZWxmLl9l
eHBlY3RlZF90ZXN0X291dHB1dCh0ZXN0X2ZpbGVuYW1lKQorCisgICAgICAgICMgQ2hlY2sgdGhl
IG91dHB1dCBhbmQgc2F2ZSB0aGUgcmVzdWx0cy4KKyAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUu
dGltZSgpCisgICAgICAgIHRpbWVfZm9yX2RpZmZzID0ge30KKyAgICAgICAgZm9yIHRlc3RfdHlw
ZSBpbiBzZWxmLl90ZXN0X3R5cGVzOgorICAgICAgICAgICAgc3RhcnRfZGlmZl90aW1lID0gdGlt
ZS50aW1lKCkKKyAgICAgICAgICAgIG5ld19mYWlsdXJlcyA9IHRlc3RfdHlwZS5jb21wYXJlX291
dHB1dChzZWxmLl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRlc3RfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9hcmdzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfb3V0cHV0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3Rl
c3Rfb3V0cHV0KQorICAgICAgICAgICAgIyBEb24ndCBhZGQgYW55IG1vcmUgZmFpbHVyZXMgaWYg
d2UgYWxyZWFkeSBoYXZlIGEgY3Jhc2gsIHNvIHdlCisgICAgICAgICAgICAjIGRvbid0IGRvdWJs
ZS1yZXBvcnQgdGhvc2UgdGVzdHMuIFdlIGRvIGRvdWJsZS1yZXBvcnQgZm9yIHRpbWVvdXRzCisg
ICAgICAgICAgICAjIHNpbmNlIHdlIHN0aWxsIHdhbnQgdG8gc2VlIHRoZSB0ZXh0IGFuZCBpbWFn
ZSBvdXRwdXQuCisgICAgICAgICAgICBpZiBub3QgdGVzdF9vdXRwdXQuY3Jhc2g6CisgICAgICAg
ICAgICAgICAgZmFpbHVyZXMuZXh0ZW5kKG5ld19mYWlsdXJlcykKKyAgICAgICAgICAgIHRpbWVf
Zm9yX2RpZmZzW3Rlc3RfdHlwZS5fX2NsYXNzX18uX19uYW1lX19dID0gKAorICAgICAgICAgICAg
ICAgIHRpbWUudGltZSgpIC0gc3RhcnRfZGlmZl90aW1lKQorCisgICAgICAgIHRvdGFsX3RpbWVf
Zm9yX2FsbF9kaWZmcyA9IHRpbWUudGltZSgpIC0gc3RhcnRfZGlmZl90aW1lCisgICAgICAgIHJl
dHVybiB0ZXN0X3Jlc3VsdHMuVGVzdFJlc3VsdCh0ZXN0X2ZpbGVuYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHVyZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXN0X291dHB1dC50ZXN0X3RpbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lX2Zvcl9kaWZmcykKKworICAg
IGRlZiBfZXhwZWN0ZWRfdGVzdF9vdXRwdXQoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICAiIiJS
ZXR1cm5zIGFuIGV4cGVjdGVkIFRlc3RPdXRwdXQgb2JqZWN0LiIiIgorICAgICAgICByZXR1cm4g
dGVzdF9vdXRwdXQuVGVzdE91dHB1dChzZWxmLl9wb3J0LmV4cGVjdGVkX3RleHQoZmlsZW5hbWUp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5leHBlY3Rl
ZF9pbWFnZShmaWxlbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9wb3J0LmV4cGVjdGVkX2NoZWNrc3VtKGZpbGVuYW1lKSkKKworICAgIGRlZiBfdGVhcl9k
b3duX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCwgcmVzdWx0KToKKyAgICAgICAgc2VsZi5fbnVtX3Rl
c3RzICs9IDEKKyAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgKz0gMQorICAgICAgICBzZWxmLl90
ZXN0c19ydW5fZmlsZS53cml0ZSh0ZXN0X2lucHV0LmZpbGVuYW1lICsgIlxuIikKKyAgICAgICAg
dGVzdF9uYW1lID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfaW5wdXQu
ZmlsZW5hbWUpCisKKyAgICAgICAgaWYgcmVzdWx0LmZhaWx1cmVzOgorICAgICAgICAgICAgIyBD
aGVjayBhbmQga2lsbCBEdW1wUmVuZGVyVHJlZSBpZiB3ZSBuZWVkIHRvLgorICAgICAgICAgICAg
aWYgYW55KFtmLnNob3VsZF9raWxsX2R1bXBfcmVuZGVyX3RyZWUoKSBmb3IgZiBpbiByZXN1bHQu
ZmFpbHVyZXNdKToKKyAgICAgICAgICAgICAgICBzZWxmLl9raWxsX2R1bXBfcmVuZGVyX3RyZWUo
KQorICAgICAgICAgICAgICAgICMgUmVzZXQgdGhlIGJhdGNoIGNvdW50IHNpbmNlIHRoZSBzaGVs
bCBqdXN0IGJvdW5jZWQuCisgICAgICAgICAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisK
KyAgICAgICAgICAgICMgUHJpbnQgdGhlIGVycm9yIG1lc3NhZ2UocykuCisgICAgICAgICAgICBf
bG9nLmRlYnVnKCIlcyAlcyBmYWlsZWQ6IiAlIChzZWxmLl9uYW1lLCB0ZXN0X25hbWUpKQorICAg
ICAgICAgICAgZm9yIGYgaW4gcmVzdWx0LmZhaWx1cmVzOgorICAgICAgICAgICAgICAgIF9sb2cu
ZGVidWcoIiVzICAlcyIgJSAoc2VsZi5fbmFtZSwgZi5tZXNzYWdlKCkpKQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgcGFzc2VkIiAlIChzZWxmLl9uYW1lLCB0
ZXN0X25hbWUpKQorCisgICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZS5wdXQocmVzdWx0LmR1bXBz
KCkpCisKKyAgICAgICAgaWYgc2VsZi5fYmF0Y2hfc2l6ZSA+IDAgYW5kIHNlbGYuX2JhdGNoX2Nv
dW50ID49IHNlbGYuX2JhdGNoX3NpemU6CisgICAgICAgICAgICAjIEJvdW5jZSB0aGUgc2hlbGwg
YW5kIHJlc2V0IGNvdW50LgorICAgICAgICAgICAgc2VsZi5fa2lsbF9kdW1wX3JlbmRlcl90cmVl
KCkKKyAgICAgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0gMAorCisgICAgICAgIGlmIHNlbGYu
X3Rlc3RfcnVubmVyOgorICAgICAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXIudXBkYXRlX3N1bW1h
cnkoc2VsZi5fcmVzdWx0X3N1bW1hcnkpCiAKICAgICBkZWYgX3N0YXJ0X3NlcnZlcnNfd2l0aF9s
b2NrKHNlbGYpOgotICAgICAgICAiIiJBY3F1aXJlIGh0dHAgbG9jayBhbmQgc3RhcnQgdGhlIHNl
cnZlcnMuIiIiCiAgICAgICAgIHNlbGYuX2h0dHBfbG9ja193YWl0X2JlZ2luID0gdGltZS50aW1l
KCkKLSAgICAgICAgX2xvZy5kZWJ1ZygnQWNxdWlyZSBodHRwIGxvY2sgLi4uJykKKyAgICAgICAg
X2xvZy5kZWJ1ZygnQWNxdWlyaW5nIGh0dHAgbG9jayAuLi4nKQogICAgICAgICBzZWxmLl9wb3J0
LmFjcXVpcmVfaHR0cF9sb2NrKCkKICAgICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRpbmcgSFRUUCBz
ZXJ2ZXIgLi4uJykKICAgICAgICAgc2VsZi5fcG9ydC5zdGFydF9odHRwX3NlcnZlcigpCkBAIC01
NTEsNiArNDkwLDE0IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgog
ICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF9lbmQgPSB0aW1lLnRpbWUoKQogICAgICAgICBz
ZWxmLl9oYXZlX2h0dHBfbG9jayA9IFRydWUKIAorICAgIGRlZiBfaHR0cF9sb2NrX3dhaXRfdGlt
ZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSB0aW1lIHdoYXQgaHR0cCBsb2NraW5nIHRh
a2VzLiIiIgorICAgICAgICBpZiBzZWxmLl9odHRwX2xvY2tfd2FpdF9iZWdpbiA9PSAwOgorICAg
ICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgaWYgc2VsZi5faHR0cF9sb2NrX3dhaXRfZW5kID09
IDA6CisgICAgICAgICAgICByZXR1cm4gdGltZS50aW1lKCkgLSBzZWxmLl9odHRwX2xvY2tfd2Fp
dF9iZWdpbgorICAgICAgICByZXR1cm4gc2VsZi5faHR0cF9sb2NrX3dhaXRfZW5kIC0gc2VsZi5f
aHR0cF9sb2NrX3dhaXRfYmVnaW4KKwogICAgIGRlZiBfc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jayhz
ZWxmKToKICAgICAgICAgIiIiU3RvcCB0aGUgc2VydmVycyBhbmQgcmVsZWFzZSBodHRwIGxvY2su
IiIiCiAgICAgICAgIGlmIHNlbGYuX2hhdmVfaHR0cF9sb2NrOgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>