<?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>38561</bug_id>
          
          <creation_ts>2010-05-04 20:44:38 -0700</creation_ts>
          <short_desc>new-run-webkit-tests should check each thread for exceptions instead of just the first one</short_desc>
          <delta_ts>2010-08-13 18:20:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>220951</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-04 20:44:38 -0700</bug_when>
    <thetext>new-run-webkit-tests should check each thread for exceptions instead of just the first one</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220952</commentid>
    <comment_count>1</comment_count>
      <attachid>55087</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-04 20:48:41 -0700</bug_when>
    <thetext>Created attachment 55087
work in progress patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221106</commentid>
    <comment_count>2</comment_count>
      <attachid>55087</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-05-05 08:08:12 -0700</bug_when>
    <thetext>Comment on attachment 55087
work in progress patch

WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:246
 +  class ThreadTimings(object):
I really like that you&apos;ve made this a class. I&apos;m a bit sad that you&apos;ve deleted the comments explaining what each of the member variables are. I had to go read the old comments to confirm this code is  correct.

WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:675
 +              print &quot;\nlogging._lock: %s\n&quot; % logging._lock
Probably should use logging.debug?

WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:705
 +                      # and any not-yet-run tests should cannot be assumed to pass.
should cannot?

WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:706
 +                      thread.reraise_exception()
This is a change in behavior. It means we fail early if a thread has an error. I think that&apos;s better though.

WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:712
 +                  # If we got any exception, tear down all threads.
We&apos;re in a finally clause here. We don&apos;t know that we got an exception. I think you mean this to be an except clause?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221153</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-05 09:50:29 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; I really like that you&apos;ve made this a class. I&apos;m a bit sad that you&apos;ve deleted
&gt; the comments explaining what each of the member variables are. I had to go read
&gt; the old comments to confirm this code is  correct.

Agreed.  Will add them back.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:675
&gt;  +              print &quot;\nlogging._lock: %s\n&quot; % logging._lock
&gt; Probably should use logging.debug?

No.  I intentionally use print here.  1.  To match the other thread dumping code, and 2.  to avoid hitting the taking the logging lock which could be held by some other thread.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:705
&gt;  +                      # and any not-yet-run tests should cannot be assumed to
&gt; pass.
&gt; should cannot?

Will fix.  Was trying to re-write the comment to be fewer lines.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:706
&gt;  +                      thread.reraise_exception()
&gt; This is a change in behavior. It means we fail early if a thread has an error.
&gt; I think that&apos;s better though.

Yup.  That one line is the whole point of the patch. :)

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:712
&gt;  +                  # If we got any exception, tear down all threads.
&gt; We&apos;re in a finally clause here. We don&apos;t know that we got an exception. I think
&gt; you mean this to be an except clause?

No, this is also intentional.  Basically if you ever leave that while loop, all threads should be canceled.  That code makes sure that&apos;s the case.  I could except, cancel and then re raise, that would be equivalent since thread.cancel() on a completed thread does nothing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221156</commentid>
    <comment_count>4</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-05-05 09:55:07 -0700</bug_when>
    <thetext>&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:712
&gt; &gt;  +                  # If we got any exception, tear down all threads.
&gt; &gt; We&apos;re in a finally clause here. We don&apos;t know that we got an exception. I think
&gt; &gt; you mean this to be an except clause?
&gt; 
&gt; No, this is also intentional.  Basically if you ever leave that while loop, all
&gt; threads should be canceled.  That code makes sure that&apos;s the case.  I could
&gt; except, cancel and then re raise, that would be equivalent since
&gt; thread.cancel() on a completed thread does nothing.

Maybe I&apos;m missing something. For this to work right, doesn&apos;t the while loop itself need to be inside the try instead of the try being in the while loop?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221182</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-05 10:33:30 -0700</bug_when>
    <thetext>
&gt; Maybe I&apos;m missing something. For this to work right, doesn&apos;t the while loop
&gt; itself need to be inside the try instead of the try being in the while loop?

Yes.  There are several other typos in the first patch. A working one coming shortly. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221368</commentid>
    <comment_count>6</comment_count>
      <attachid>55177</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-05 17:18:08 -0700</bug_when>
    <thetext>Created attachment 55177
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221374</commentid>
    <comment_count>7</comment_count>
      <attachid>55177</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-05-05 17:32:58 -0700</bug_when>
    <thetext>Comment on attachment 55177
Patch

WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:703
 +              # and any not-yet-run tests should cannot be assumed to pass.
Still have this non-sensical comment. Please fix grammar.

WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:708
 +              thread_finished_callback=_thread_finished)
Did you really write this patch? Wrapping at 80 columns ==&gt; imposter Eric. :)

Code all looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221379</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-05 17:35:40 -0700</bug_when>
    <thetext>Oh, I wrap to 80c when it makes the code more readable.  I just hate having the blanket rule which produces crap wrapping so often. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221405</commentid>
    <comment_count>9</comment_count>
      <attachid>55177</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-05-05 18:10:40 -0700</bug_when>
    <thetext>Comment on attachment 55177
Patch

There are a couple of seemingly unrelated changes in this patch. Several lines have been changed because you declared command line arguments as int; that&apos;s a good change, but please note it in the ChangeLog.

Also, there seems to be an unrelated change in websocket_server.py; while it&apos;s good to fix bugs, it might be better to put this into a different patch in case we have to roll one or the other of these things back.

ThreadTimings should probably be moved (along with TestResult and ResultSummary) into a separate module soonish.

Also, ThreadTimings is a bad name, since two of the three parameters (directory_test_tiings and individual_test_timings) have nothing to do with threads. Maybe TimingSummary() to match ResultSummary() or something?

I wonder if we&apos;d be better off calling time.sleep() rather than thread.join() during the main loop, and just doing thread.join() when we know all the tests have been executed. I guess you&apos;d need some other way to figure out if the thread had bailed out with an exception.

I also think having ThreadWatcher extract and raise the exception information directly would be clearer rather than hiding that in methods in dump_render_tree_thread. Somehow reading thread.reraise_exception() makes me think you&apos;re raising an exception on a different thread, rather than pulling the exception info off of the other thread and raising it on the current thread.

Note that the &quot;starting testing...&quot; print statement on line 710 is inaccurate - testing may have already started in other threads, and in fact will be complete if you are running single-threaded. In my latest printing patch I changed this to &quot;all threads started&quot; which is slightly more accurate.

On line 713 of run_webkit_tests.py you deleted the call to self.update_summary() that happens right before we return. you previously had the comment that calls were made from the individual threads themselves. That is only true in the case where we&apos;re running single-threaded and we call run_in_main_thread(). I think that whole code path might be clearer if we moved the run_in_main_thread() code out of _instantiate_test_shell_threads and into _run(), and then explicitly call update_summary() after run_in_main_thread (although this could probably all be deferred to a later patch).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221439</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-05 19:28:33 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 55177 [details])
&gt; There are a couple of seemingly unrelated changes in this patch. Several lines
&gt; have been changed because you declared command line arguments as int; that&apos;s a
&gt; good change, but please note it in the ChangeLog.

I&apos;m happy to split them out or talk about them in the ChangeLog, or both. :)

&gt; Also, there seems to be an unrelated change in websocket_server.py; while it&apos;s
&gt; good to fix bugs, it might be better to put this into a different patch in case
&gt; we have to roll one or the other of these things back.

Yeah, I just hit the exception while trying to run new-run-webkit-tests.  Again, happy to do it in a separate change.

&gt; ThreadTimings should probably be moved (along with TestResult and
&gt; ResultSummary) into a separate module soonish.

Agreed.

&gt; Also, ThreadTimings is a bad name, since two of the three parameters
&gt; (directory_test_tiings and individual_test_timings) have nothing to do with
&gt; threads. Maybe TimingSummary() to match ResultSummary() or something?

However you like.  It&apos;s not a very good class.  It&apos;s just marginally better than the tuple we were passing around.

&gt; I wonder if we&apos;d be better off calling time.sleep() rather than thread.join()
&gt; during the main loop, and just doing thread.join() when we know all the tests
&gt; have been executed. I guess you&apos;d need some other way to figure out if the
&gt; thread had bailed out with an exception.

Yeah that wouldn&apos;t work. This is re: the comment that join() will fail if the thread hasn&apos;t been started?  That shouldn&apos;t be an issue in practice, but I did hit it when running the tests as they tested main-thread mode (which, btw is a total grotesque hack).

&gt; I also think having ThreadWatcher extract and raise the exception information
&gt; directly would be clearer rather than hiding that in methods in
&gt; dump_render_tree_thread. Somehow reading thread.reraise_exception() makes me
&gt; think you&apos;re raising an exception on a different thread, rather than pulling
&gt; the exception info off of the other thread and raising it on the current
&gt; thread.

ThreadWatcher doesn&apos;t (and shoudn&apos;t) know about DumpRenderTreeThread (which seems poorly named now that I know what it does).  The thread has to know how to store off the exception info, so it seemed fitting that it know how to raise it (since it can&apos;t return it in any condensed form as raise requires 3 distinct arguments).  We could abstract the exception saving into some thread subclass which DRTThread inherited from?  But I think we could do that in a separate change.

&gt; Note that the &quot;starting testing...&quot; print statement on line 710 is inaccurate -
&gt; testing may have already started in other threads, and in fact will be complete
&gt; if you are running single-threaded. In my latest printing patch I changed this
&gt; to &quot;all threads started&quot; which is slightly more accurate.

True.  I added that log statement to help better explain to the user which states we were in.  It also made clear that we have some strange delay after starting the threads before any of them return any data (we don&apos;t get any updates until about 2% testing is done).

You&apos;re right that it&apos;s wrong for single-threaded, but again that&apos;s because single-threaded hacks in at a bad place IMO.

I&apos;ll change the log to match whatever you changed it to in your other patch.

&gt; On line 713 of run_webkit_tests.py you deleted the call to
&gt; self.update_summary() that happens right before we return. you previously had
&gt; the comment that calls were made from the individual threads themselves. That
&gt; is only true in the case where we&apos;re running single-threaded and we call
&gt; run_in_main_thread().

Correct, that comment was partially wrong.  We definitely don&apos;t need that update.  ThreadWatcher will always call the thread_finished callback when a thread finishes, so we will always update after a thread is done (including the last thread).

&gt; I think that whole code path might be clearer if we moved
&gt; the run_in_main_thread() code out of _instantiate_test_shell_threads and into
&gt; _run(), and then explicitly call update_summary() after run_in_main_thread
&gt; (although this could probably all be deferred to a later patch).

YES!  I totally agree.  run_in_main_thread is a $DIETY-forsaken hack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221445</commentid>
    <comment_count>11</comment_count>
      <attachid>55197</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-05 19:39:18 -0700</bug_when>
    <thetext>Created attachment 55197
fix ungrammar and ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229204</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-05-21 18:45:43 -0700</bug_when>
    <thetext>I have a patch that modifies this slightly. I will upload it, and then Eric can review it and this can go away ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230044</commentid>
    <comment_count>13</comment_count>
      <attachid>56960</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-05-24 19:24:21 -0700</bug_when>
    <thetext>Created attachment 56960
alternate approach at reading status from all of the threads

I&apos;m uploading an alternate approach to fixing this bug for comparison.

Some notes:

- I didn&apos;t create either a ThreadTimings class or a ThreadWatcher class, but I did abstract the thread watching loop into a separate standalone function (w/o unit tests as yet).

- I didn&apos;t fix the bugs in websocket_server or the command line parsing argument handling

The major difference (and contribution of this patch) is that this patch explicitly watches for progress on each thread, and logs a stack trace if it looks like the thread is hung. Arguably, we should also raise an assertion and bail out at this point (or figure out a way to kill and restart the thread).

I think the &quot;right&quot; solution is to merge this patch with Eric&apos;s in some way, but I&apos;m not sure what the best way to do that is so I&apos;m posting this as-is so that we can compare and contrast the two approaches. I will submit more feedback on Eric&apos;s patch in a separate comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230054</commentid>
    <comment_count>14</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-05-24 19:45:07 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Created an attachment (id=55197) [details]
&gt; fix ungrammar and ChangeLog

So, more comments on this latest patch.

(1) You didn&apos;t address my comment that &quot;ThreadTimings&quot; was a misleading name; something like &quot;TimingStatistics&quot; or &quot;ResultTimings&quot; would be better. I also think that introducing this class to replace the tuple doesn&apos;t really help that much - you add ~20 lines of code to replace something that is used once. Would replacing the tuple with a hash be an acceptable solution?

(2) Regarding my comment on time.sleep() instead of thread.join() - I think an important point is that we don&apos;t really care about doing a join() - essentially I think we&apos;re using join as a stand-in for sleep. 

Your patch, because it&apos;s &quot;round-robin sleeping&quot; through the list of threads, does help us detect exceptions faster than the original code, but still not as fast as it could. Best case it takes us O( # of threads * amount of wake_every) time to detect that the last thread immediately raised an exception. Given that wake_every is small, this isn&apos;t a big deal.

In contrast, the patch I just uploaded checks every thread for exceptions after a single join/sleep. There may be some locking issues with my patch, but I think the usage pattern is probably safe enough (we could put a lock on it to be sure).

(3) Regarding &quot;having ThreadWatcher extract and raise the exception information&quot;, I think I failed to get my point across and was unnecessarily confusing. My point was intended to be about what we&apos;re doing in reraise_exception() and the calling routine, not in ThreadWatcher. I agree that ThreadWatcher shouldn&apos;t know anything about the other class and that part of the code is fine.

What I meant to say is that in the thread_finished callback, I think it is clearer to write that as (pseudocode):

def thread_finished(thread):
  exc = thread.exception_info()
  if exc:
    raise exc

because that makes it clear(er) what is being done on which thread. I found the reraise_exception() routine to be confusing because the name makes it sound like it will always raise an exception. Also, the docstring is confusing at best, and you shouldn&apos;t do a _log.info() for the normal termination case (_log.debug() would be better).

If you did want to keep that logic in the dump_render_thread class, can we at least change the name to something (admittedly awkward) like reraise_exception_if_necessary() ?

(4) The major advantage of creating a separate ThreadWatcher class seems to be that you can more easily test it with Mock objects (since it&apos;s not like this code is being reused anywhere). I have to admit that I&apos;m somewhat uneasy with using Mock objects here for the way you&apos;re testing this, since you&apos;re not actually creating threads and that seems to me to introduce a fundamental uncertainty into whether or not you&apos;re really testing the behavior that we&apos;ll see in the real world. I&apos;m also not sure that the increased testability offsets the decrease in readability caused by the new abstraction, but I&apos;m definitely on the fence here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241041</commentid>
    <comment_count>15</comment_count>
      <attachid>55197</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-21 18:23:46 -0700</bug_when>
    <thetext>Comment on attachment 55197
fix ungrammar and ChangeLog

Eric says this patch probably doesn&apos;t even apply any more.  If you&apos;d like a more detailed review, please rebase this patch to top-of-tree.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241603</commentid>
    <comment_count>16</comment_count>
      <attachid>59461</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-06-22 19:09:09 -0700</bug_when>
    <thetext>Created attachment 59461
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241604</commentid>
    <comment_count>17</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-06-22 19:10:25 -0700</bug_when>
    <thetext>I just uploaded a new version of my patch that applies against (current) ToT. It still doesn&apos;t have unit tests, but is otherwise okay. Please review and, if we like this approach better than Eric&apos;s, I can write some tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255094</commentid>
    <comment_count>18</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-07-22 17:20:34 -0700</bug_when>
    <thetext>Eric, I think this is waiting on feedback from you. I don&apos;t have strong opinions about either approach. I&apos;d be OK with r+&apos;ing either patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255102</commentid>
    <comment_count>19</comment_count>
      <attachid>59461</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-22 17:32:55 -0700</bug_when>
    <thetext>Comment on attachment 59461
Patch

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:253
 +      def get_timeout_padding(self, timeout):
Do we really use get_ in webkit?  Does PEP8 suggest it?

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:271
 +          self._thread_id = thread.get_ident()
No clue if this will work correctly on Win32.

WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:638
 +              if thread_id == id:
Do we expect this compare to work correctly on win32?

WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:644
 +          _log.error(&quot;&quot;)
Should we assert here?  That we never found a thread? Maybe we should have the &quot;find the right thread from this list&quot; function be separate?

WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:684
 +                      exception_info = thread.get_exception_info()
It&apos;s a bit strange to have this information outside of the DRT thread.  Seems a raise_if_needed() method would be &quot;cleaner&quot;, but OK.

WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:698
 +                              thread.clear_next_timeout()
Do we need to kill the thread? make a new one?  Does clear_next_timeout do that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256325</commentid>
    <comment_count>20</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-07-26 16:31:02 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 59461 [details])
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:253
&gt;  +      def get_timeout_padding(self, timeout):
&gt; Do we really use get_ in webkit?  Does PEP8 suggest it?
&gt; 

no, not often. PEP8 would suggest making this an attribute and/or hiding it under __getattr__. I can make that change if desired.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:271
&gt;  +          self._thread_id = thread.get_ident()
&gt; No clue if this will work correctly on Win32.
&gt; 

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:638
&gt;  +              if thread_id == id:
&gt; Do we expect this compare to work correctly on win32?
&gt;

I believe these work on win32, but I can retest. It&apos;s now been quite a while since I tried this patch.
 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:644
&gt;  +          _log.error(&quot;&quot;)
&gt; Should we assert here?  That we never found a thread? Maybe we should have the &quot;find the right thread from this list&quot; function be separate?
&gt; 

You mean, assert if we didn&apos;t find the thread? (Currently, we print nothing). I can make that change but I don&apos;t feel strongly about it.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:684
&gt;  +                      exception_info = thread.get_exception_info()
&gt; It&apos;s a bit strange to have this information outside of the DRT thread.  Seems a raise_if_needed() method would be &quot;cleaner&quot;, but OK.
&gt;

Yeah, that was what your patch did. I felt it was cleaner to pull the information across into the caller and raise the thread in the caller, rather than make something in the DRT class raise an exception that wasn&apos;t on the DRT thread.
 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:698
&gt;  +                              thread.clear_next_timeout()
&gt; Do we need to kill the thread? make a new one?  Does clear_next_timeout do that?

It&apos;s unclear if you can actually kill the thread (portably), since it&apos;s wedged. All clear_next_timeout does is take it out of the list of threads we&apos;re watching, so that we don&apos;t keep repeating the thread stacks.

It would be possible to extend this patch (or do a follow-on one) that actually killed and restarted the tests to unwedge things. I would prefer to fix the code so that we don&apos;t get wedged in the first place, whicih is why I haven&apos;t written this code. Of course, I also thought I would&apos;ve had time to fix the code months ago ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256333</commentid>
    <comment_count>21</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-26 16:44:36 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; (From update of attachment 59461 [details] [details])
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:253
&gt; &gt;  +      def get_timeout_padding(self, timeout):
&gt; &gt; Do we really use get_ in webkit?  Does PEP8 suggest it?
&gt; &gt; 
&gt; no, not often. PEP8 would suggest making this an attribute and/or hiding it under __getattr__. I can make that change if desired.

I think we should avoid naming things with get_ since that matches other code.  I&apos;ve never used __getattr__, but if that&apos;s the clean-python-way, then more power to you!

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:271
&gt; &gt;  +          self._thread_id = thread.get_ident()
&gt; &gt; No clue if this will work correctly on Win32.
&gt; &gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:638
&gt; &gt;  +              if thread_id == id:
&gt; &gt; Do we expect this compare to work correctly on win32?
&gt; &gt;
&gt; I believe these work on win32, but I can retest. It&apos;s now been quite a while since I tried this patch.

If it doesn&apos;t, we can fix it later.  Just checking.  I know thread ids are not x-platform.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:644
&gt; &gt;  +          _log.error(&quot;&quot;)
&gt; &gt; Should we assert here?  That we never found a thread? Maybe we should have the &quot;find the right thread from this list&quot; function be separate?
&gt; &gt; 
&gt; 
&gt; You mean, assert if we didn&apos;t find the thread? (Currently, we print nothing). I can make that change but I don&apos;t feel strongly about it.

Yeah, I think that we should separate this out into a separate function and we can ASSERT in the caller that the function returned a thread (since it should always assuming our thread_id stuff is working on all relevant platforms, right?).

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:684
&gt; &gt;  +                      exception_info = thread.get_exception_info()
&gt; &gt; It&apos;s a bit strange to have this information outside of the DRT thread.  Seems a raise_if_needed() method would be &quot;cleaner&quot;, but OK.
&gt; &gt;
&gt; Yeah, that was what your patch did. I felt it was cleaner to pull the information across into the caller and raise the thread in the caller, rather than make something in the DRT class raise an exception that wasn&apos;t on the DRT thread.

Yeah.  It&apos;s not a big deal.  The tradeoff I was going for was trying to contain the knowledge of how to save and rebuild an exception inside the DRTThread.  Another way to do it would be to have the DRTThread expose a saved_exception object and then that object could have a reraise method or similar.  I think it&apos;s kinda poor design of this (relatively low-level) python API to make you use tuples like they do.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:698
&gt; &gt;  +                              thread.clear_next_timeout()
&gt; &gt; Do we need to kill the thread? make a new one?  Does clear_next_timeout do that?
&gt; 
&gt; It&apos;s unclear if you can actually kill the thread (portably), since it&apos;s wedged. All clear_next_timeout does is take it out of the list of threads we&apos;re watching, so that we don&apos;t keep repeating the thread stacks.
&gt; 
&gt; It would be possible to extend this patch (or do a follow-on one) that actually killed and restarted the tests to unwedge things. I would prefer to fix the code so that we don&apos;t get wedged in the first place, whicih is why I haven&apos;t written this code. Of course, I also thought I would&apos;ve had time to fix the code months ago ;)

Sounds good. :)  We can always do that in a later patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256336</commentid>
    <comment_count>22</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-07-26 16:53:30 -0700</bug_when>
    <thetext>Okay, I will update the patch, re-verify on windows, and resubmit. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262455</commentid>
    <comment_count>23</comment_count>
      <attachid>63965</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-08-09 19:12:01 -0700</bug_when>
    <thetext>Created attachment 63965
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263520</commentid>
    <comment_count>24</comment_count>
      <attachid>63965</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-11 16:54:06 -0700</bug_when>
    <thetext>Comment on attachment 63965
Patch

I&apos;m confused as to why WatchableThread defines _thread_id but never sets it.  And then TestShellThread does?  Isn&apos;t that sorta an abstraction violation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263527</commentid>
    <comment_count>25</comment_count>
      <attachid>63965</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-11 17:15:01 -0700</bug_when>
    <thetext>Comment on attachment 63965
Patch

WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:229
 +          else:
No need for else after return.

WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:1675
 +      found_stack = None
This local seems unneeded.

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:278
 +          return float(timeout) * 3 / 1000
Huh?

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:272
 +      def timeout_padding(self, timeout):
Seems like a strange name for what this does.
it&apos;s giving you a hung_test_timeout or similar?  Why a function? isn&apos;t this operating on a constant?

Why do we want .003 * timeout there?


I&apos;m confused by the .003 timeout stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263567</commentid>
    <comment_count>26</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-08-11 19:04:50 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 63965 [details])
&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:229
&gt;  +          else:
&gt; No need for else after return.
&gt; 

Fixed.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:1675
&gt;  +      found_stack = None
&gt; This local seems unneeded.
&gt;

I&apos;m not sure what you mean by this. You could rewrite the function as:

def _find_thread_stack(id):
    for thread_id, stack in ...:
        if thread_id == id:
            return stack
    return None
 
 is that what you were suggesting? I did it this way to enable myself to get 100% line coverage with a single test; arguably I should really have two tests, but given that you should never really hit the &quot;return None&quot; case in real life, it seemed like an artificial sort of test and I thought this might be better.

WDYT?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:278
&gt;  +          return float(timeout) * 3 / 1000
&gt; Huh?
&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:272
&gt;  +      def timeout_padding(self, timeout):
&gt; Seems like a strange name for what this does.
&gt; it&apos;s giving you a hung_test_timeout or similar?  Why a function? isn&apos;t this operating on a constant?
&gt; 
&gt; Why do we want .003 * timeout there?
&gt; 
&gt; 
&gt; I&apos;m confused by the .003 timeout stuff.


Which part of this was confusing? The * 3, or the / 1000 ? We multiple by three in order to make sure we don&apos;t timeout earlier than DRT itself. We divide by 1000 because python uses floating point seconds and DRT uses integer milliseconds. 

Should I add a comment explaining the divide, or do you want a different way of rounding up to give DRT a little headroom?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264480</commentid>
    <comment_count>27</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-13 13:18:23 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; (From update of attachment 63965 [details] [details])
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:229
&gt; &gt;  +          else:
&gt; &gt; No need for else after return.
&gt; &gt; 
&gt; 
&gt; Fixed.
&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:1675
&gt; &gt;  +      found_stack = None
&gt; &gt; This local seems unneeded.
&gt; &gt;
&gt; 
&gt; I&apos;m not sure what you mean by this. You could rewrite the function as:
&gt; 
&gt; def _find_thread_stack(id):
&gt;     for thread_id, stack in ...:
&gt;         if thread_id == id:
&gt;             return stack
&gt;     return None

Yes, that&apos;s what I meant.

&gt;  is that what you were suggesting? I did it this way to enable myself to get 100% line coverage with a single test; arguably I should really have two tests, but given that you should never really hit the &quot;return None&quot; case in real life, it seemed like an artificial sort of test and I thought this might be better.

I guess I don&apos;t understand how those differ in line coverage.

&gt; WDYT?
&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:278
&gt; &gt;  +          return float(timeout) * 3 / 1000
&gt; &gt; Huh?
&gt; &gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:272
&gt; &gt;  +      def timeout_padding(self, timeout):
&gt; &gt; Seems like a strange name for what this does.
&gt; &gt; it&apos;s giving you a hung_test_timeout or similar?  Why a function? isn&apos;t this operating on a constant?
&gt; &gt; 
&gt; &gt; Why do we want .003 * timeout there?
&gt; &gt; 
&gt; &gt; 
&gt; &gt; I&apos;m confused by the .003 timeout stuff.
&gt; 
&gt; 
&gt; Which part of this was confusing? The * 3, or the / 1000 ? We multiple by three in order to make sure we don&apos;t timeout earlier than DRT itself. We divide by 1000 because python uses floating point seconds and DRT uses integer milliseconds. 

Yes, this just want&apos;s clear.  Maybe named constants is what&apos; you&apos;re looking for?  debugTimeoutMultiplier and millisecondsToSeconds?  I was confused by the line, yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264483</commentid>
    <comment_count>28</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-08-13 13:24:39 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #26)
&gt; &gt; (In reply to comment #25)
&gt; &gt; &gt; (From update of attachment 63965 [details] [details] [details])
&gt; &gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:229
&gt; &gt; &gt;  +          else:
&gt; &gt; &gt; No need for else after return.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; Fixed.
&gt; &gt; 
&gt; &gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:1675
&gt; &gt; &gt;  +      found_stack = None
&gt; &gt; &gt; This local seems unneeded.
&gt; &gt; &gt;
&gt; &gt; 
&gt; &gt; I&apos;m not sure what you mean by this. You could rewrite the function as:
&gt; &gt; 
&gt; &gt; def _find_thread_stack(id):
&gt; &gt;     for thread_id, stack in ...:
&gt; &gt;         if thread_id == id:
&gt; &gt;             return stack
&gt; &gt;     return None
&gt; 
&gt; Yes, that&apos;s what I meant.
&gt; 
&gt; &gt;  is that what you were suggesting? I did it this way to enable myself to get 100% line coverage with a single test; arguably I should really have two tests, but given that you should never really hit the &quot;return None&quot; case in real life, it seemed like an artificial sort of test and I thought this might be better.
&gt; 
&gt; I guess I don&apos;t understand how those differ in line coverage.
&gt; 

In the code in the patch, every line is executed. In the code above, in the normal case, the &quot;return None&quot; line doesn&apos;t execute. There are two different paths in both cases, and only one is executed. 

I guess I&apos;ll change it to reflect reality better and stop being lazy :)

&gt; &gt; WDYT?
&gt; &gt; 
&gt; &gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:278
&gt; &gt; &gt;  +          return float(timeout) * 3 / 1000
&gt; &gt; &gt; Huh?
&gt; &gt; &gt; 
&gt; &gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:272
&gt; &gt; &gt;  +      def timeout_padding(self, timeout):
&gt; &gt; &gt; Seems like a strange name for what this does.
&gt; &gt; &gt; it&apos;s giving you a hung_test_timeout or similar?  Why a function? isn&apos;t this operating on a constant?
&gt; &gt; &gt; 
&gt; &gt; &gt; Why do we want .003 * timeout there?
&gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;m confused by the .003 timeout stuff.
&gt; &gt; 
&gt; &gt; 
&gt; &gt; Which part of this was confusing? The * 3, or the / 1000 ? We multiple by three in order to make sure we don&apos;t timeout earlier than DRT itself. We divide by 1000 because python uses floating point seconds and DRT uses integer milliseconds. 
&gt; 
&gt; Yes, this just want&apos;s clear.  Maybe named constants is what&apos; you&apos;re looking for?  debugTimeoutMultiplier and millisecondsToSeconds?  I was confused by the line, yes.

Okay, I will try to clarify this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264490</commentid>
    <comment_count>29</comment_count>
      <attachid>64373</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-08-13 13:52:05 -0700</bug_when>
    <thetext>Created attachment 64373
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264495</commentid>
    <comment_count>30</comment_count>
      <attachid>64373</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-13 14:06:37 -0700</bug_when>
    <thetext>Comment on attachment 64373
Patch

rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264557</commentid>
    <comment_count>31</comment_count>
      <attachid>64373</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-08-13 17:34:24 -0700</bug_when>
    <thetext>Comment on attachment 64373
Patch

Clearing flags on attachment: 64373

Committed r65343: &lt;http://trac.webkit.org/changeset/65343&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264558</commentid>
    <comment_count>32</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-08-13 17:34:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264572</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-13 18:20:27 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/65343 might have broken SnowLeopard Intel Release (Tests)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55087</attachid>
            <date>2010-05-04 20:48:41 -0700</date>
            <delta_ts>2010-05-05 17:17:58 -0700</delta_ts>
            <desc>work in progress patch</desc>
            <filename>bug-38561-20100504204838.patch</filename>
            <type>text/plain</type>
            <size>12746</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA5MGNhYmE2NjdiOWM4MDIyOGMzMzEyMmFlNmVkNDc1MDU3NTI0OGJiLi42YjY5ZDA0
YzM1MmY0NWM2MDYyNGYwMGVjZmUxY2I2N2ViYzJmMWJiIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAK
KzIwMTAtMDUtMDQgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIG5ldy1ydW4td2Via2l0LXRlc3Rz
IHNob3VsZCBjaGVjayBlYWNoIHRocmVhZCBmb3IgZXhjZXB0aW9ucyBpbnN0ZWFkIG9mIGp1c3Qg
dGhlIGZpcnN0IG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Mzg1NjEKKworICAgICAgICBPdXIgb2xkIGJlaGF2aW9yIHdhcyB0byBjYWxsIGpvaW4g
b25seSBvbiB0aGUgZmlyc3QgdGhyZWFkIGluIHRoZSBsaXN0CisgICAgICAgIHdoaWNoIG1lYW50
IHRoYXQgaWYgYSBsYXRlciB0aHJlYWQgdGhyZXcgYW4gZXhjZXB0aW9uIG9yIGZpbmlzaGVkIGZp
cnN0CisgICAgICAgIHdlIHdvdWxkIG5vdCBub3RpY2UgdW50aWwgdGhlIGZpcnN0IHRocmVhZCBo
YWQgZmluaXNoZWQuCisKKyAgICAgICAgVGhpcyBjb2RlIG5vdyBsb29rcyBhdCBlYWNoIHRocmVh
ZCBpbiB0dXJuLCBhbGxvd2luZyB0aGUgVUkgdG8gdXMgdG8gY2F0Y2gKKyAgICAgICAgRXhjZXB0
aW9ucyBmcm9tIHRocmVhZHMgbXVjaCBxdWlja2VyLgorCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQu
cHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90
ZXN0cy5weToKKwogMjAxMC0wNS0wMyAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkLCBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3Jl
bmRlcl90cmVlX3RocmVhZC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CmluZGV4IDY5
NTdmY2Q5OGU1YWMwZGE4ZGRlYTM5MGM4ODk0ZDc3NTM1NmJjOWUuLjNjYjQzMTI1YWMxYmMyYTk5
ZWM4NTE3MzY3NWMzYmZlZjA5M2NkNWUgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhy
ZWFkLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CkBAIC0yMzUsMTIgKzIzNSwx
MiBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgICAgICIi
IlNldCBhIGZsYWcgdGVsbGluZyB0aGlzIHRocmVhZCB0byBxdWl0LiIiIgogICAgICAgICBzZWxm
Ll9jYW5jZWxlZCA9IFRydWUKIAotICAgIGRlZiBnZXRfZXhjZXB0aW9uX2luZm8oc2VsZik6Ci0g
ICAgICAgICIiIklmIHJ1bigpIHRlcm1pbmF0ZWQgb24gYW4gdW5jYXVnaHQgZXhjZXB0aW9uLCBy
ZXR1cm4gaXQgaGVyZQotICAgICAgICAoKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spIHR1cGxlKS4K
LSAgICAgICAgUmV0dXJucyBOb25lIGlmIHJ1bigpIHRlcm1pbmF0ZWQgbm9ybWFsbHkuIE1lYW50
IHRvIGJlIGNhbGxlZCBhZnRlcgotICAgICAgICBqb2luaW5nIHRoaXMgdGhyZWFkLiIiIgotICAg
ICAgICByZXR1cm4gc2VsZi5fZXhjZXB0aW9uX2luZm8KKyAgICBkZWYgcmVyYWlzZV9leGNlcHRp
b24oc2VsZik6CisgICAgICAgICIiIklmIHJ1bigpIHRlcm1pbmF0ZWQgb24gYW4gdW5jYXVnaHQg
ZXhjZXB0aW9uLCBzZWxmLl9leGNlcHRpb25faW5mbworICAgICAgICBpcyBhICh0eXBlLCB2YWx1
ZSwgdHJhY2ViYWNrKSB0dXBsZS4KKyAgICAgICAgTWVhbnQgdG8gYmUgY2FsbGVkIGFmdGVyIGpv
aW5pbmcgdGhpcyB0aHJlYWQuIiIiCisgICAgICAgIGlmIHNlbGYuX2V4Y2VwdGlvbl9pbmZvOgor
ICAgICAgICAgICAgcmFpc2Ugc2VsZi5fZXhjZXB0aW9uX2luZm9bMF0sIHNlbGYuX2V4Y2VwdGlv
bl9pbmZvWzFdLCBzZWxmLl9leGNlcHRpb25faW5mb1syXQogCiAgICAgZGVmIGdldF90b3RhbF90
aW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gbWF4KHNlbGYuX3N0b3BfdGltZSAtIHNlbGYuX3N0
YXJ0X3RpbWUsIDAuMCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4IDY1YWYzMDAxMjE1
YTc4Y2VlZTNjZmUxZTZkMjlhMDYzYzk4ZmVmNmMuLjNiNzQ3OGNlZTIwOTQ1Y2YwMmY1M2IyNzc1
Y2ExN2U4ZDc5NzU4M2UgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtNzUsNiArNzUs
NyBAQCBmcm9tIHRlc3RfdHlwZXMgaW1wb3J0IHRleHRfZGlmZgogCiBmcm9tIHdlYmtpdHB5LmNv
bW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUKIGZyb20gd2Via2l0cHkudGhp
cmRwYXJ0eSBpbXBvcnQgc2ltcGxlanNvbgorZnJvbSB3ZWJraXRweS50b29sLmdyYW1tYXIgaW1w
b3J0IHBsdXJhbGl6ZQogCiBpbXBvcnQgcG9ydAogCkBAIC0yNDIsNiArMjQzLDI3IEBAIGRlZiBz
dW1tYXJpemVfdW5leHBlY3RlZF9yZXN1bHRzKHBvcnRfb2JqLCBleHBlY3RhdGlvbnMsIHJlc3Vs
dF9zdW1tYXJ5LAogICAgIHJldHVybiByZXN1bHRzCiAKIAorY2xhc3MgVGhyZWFkVGltaW5ncyhv
YmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgIyBGSVhNRTogVGhpcyBv
YmplY3QgaXMgcmVwbGFjaW5nIGEgdHVwbGUuCisgICAgICAgICMgVG8gbWFrZSB0aGluZ3MgZWFz
eSwgSSd2ZSBsZWZ0IHRoZSBtZW1iZXIgbmFtZXMgdGhlCisgICAgICAgICMgc2FtZSBhcyB0aGUg
dHVwbGUgbmFtZXMsIGJ1dCB3ZSBtYXkgd2lzaCB0byBwdXNoCisgICAgICAgICMgbW9yZSBsb2dp
YyBpbnRvIHRoaXMgY2xhc3MgYW5kIG1ha2UgdGhlc2UgbWVtYmVycyBwcml2YXRlLgorICAgICAg
ICBzZWxmLnRlc3RfdGltaW5ncyA9IHt9CisgICAgICAgIHNlbGYuaW5kaXZpZHVhbF90ZXN0X3Rp
bWluZ3MgPSBbXQorICAgICAgICBzZWxmLnRocmVhZF90aW1pbmdzID0gW10KKworICAgIGRlZiB1
cGRhdGVfZnJvbV90aHJlYWQoc2VsZiwgdGhyZWFkKToKKyAgICAgICAgdGhyZWFkX3RpbWluZyA9
IHsKKyAgICAgICAgICAgICJuYW1lIjogdGhyZWFkLmdldE5hbWUoKSwKKyAgICAgICAgICAgICJu
dW1fdGVzdHMiOiB0aHJlYWQuZ2V0X251bV90ZXN0cygpLAorICAgICAgICAgICAgInRvdGFsX3Rp
bWUiOiB0aHJlYWQuZ2V0X3RvdGFsX3RpbWUoKSwKKyAgICAgICAgfQorICAgICAgICBzZWxmLnRo
cmVhZF90aW1pbmdzLmFwcGVuZCh0aHJlYWRfdGltaW5nKQorICAgICAgICBzZWxmLnRlc3RfdGlt
aW5ncy51cGRhdGUodGhyZWFkLmdldF9kaXJlY3RvcnlfdGltaW5nX3N0YXRzKCkpCisgICAgICAg
IHNlbGYuaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MuZXh0ZW5kKHRocmVhZC5nZXRfdGVzdF9yZXN1
bHRzKCkpCisKKwogY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAiIiJBIGNsYXNzIGZvciBtYW5hZ2lu
ZyBydW5uaW5nIGEgc2VyaWVzIG9mIHRlc3RzIG9uIGEgc2VyaWVzIG9mIGxheW91dAogICAgIHRl
c3QgZmlsZXMuIiIiCkBAIC02NDcsNzggKzY2OSw1MSBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAg
ICAgICB0aW1lX3NpbmNlX2xhc3RfZHVtcCA9IHRpbWUudGltZSgpIC0gc2VsZi5fbGFzdF90aHJl
YWRfZHVtcAogICAgICAgICBpZiAgdGltZV9zaW5jZV9sYXN0X2R1bXAgPiBkdW1wX3RocmVhZHNf
ZXZlcnk6CiAgICAgICAgICAgICBzZWxmLl9kdW1wX3RocmVhZF9zdGF0ZXMoKQorICAgICAgICAg
ICAgIyBXZSd2ZSBzZWVuIGhhbmdzIHdoZXJlIGFsbCB0aHJlYWRzIGFyZSBodW5nIHdhaXRpbmcg
b24KKyAgICAgICAgICAgICMgbG9nZ2luZy5fbG9jay4gIEl0IGlzIHVzZWZ1bCB0byBrbm93IHdo
byBpcyBob2xkaW5nIHRoZQorICAgICAgICAgICAgIyBsb2NrIGluIHRoYXQgY2FzZS4KKyAgICAg
ICAgICAgIHByaW50ICJcbmxvZ2dpbmcuX2xvY2s6ICVzXG4iICUgbG9nZ2luZy5fbG9jawogICAg
ICAgICAgICAgc2VsZi5fbGFzdF90aHJlYWRfZHVtcCA9IHRpbWUudGltZSgpCiAKICAgICBkZWYg
X3J1bl90ZXN0cyhzZWxmLCBmaWxlX2xpc3QsIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAgIiIi
UnVucyB0aGUgdGVzdHMgaW4gdGhlIGZpbGVfbGlzdC4KLQotICAgICAgICBSZXR1cm46IEEgdHVw
bGUgKGZhaWx1cmVzLCB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLAotICAgICAgICAgICAg
aW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCi0gICAgICAgICAgICBmYWlsdXJlcyBpcyBhIG1hcCBm
cm9tIHRlc3QgdG8gbGlzdCBvZiBmYWlsdXJlIHR5cGVzCi0gICAgICAgICAgICB0aHJlYWRfdGlt
aW5ncyBpcyBhIGxpc3Qgb2YgZGljdHMgd2l0aCB0aGUgdG90YWwgcnVudGltZQotICAgICAgICAg
ICAgICBvZiBlYWNoIHRocmVhZCB3aXRoICduYW1lJywgJ251bV90ZXN0cycsICd0b3RhbF90aW1l
JyBwcm9wZXJ0aWVzCi0gICAgICAgICAgICB0ZXN0X3RpbWluZ3MgaXMgYSBsaXN0IG9mIHRpbWlu
Z3MgZm9yIGVhY2ggc2hhcmRlZCBzdWJkaXJlY3RvcnkKLSAgICAgICAgICAgICAgb2YgdGhlIGZv
cm0gW3RpbWUsIGRpcmVjdG9yeV9uYW1lLCBudW1fdGVzdHNdCi0gICAgICAgICAgICBpbmRpdmlk
dWFsX3Rlc3RfdGltaW5ncyBpcyBhIGxpc3Qgb2YgcnVuIHRpbWVzIGZvciBlYWNoIHRlc3QKLSAg
ICAgICAgICAgICAgaW4gdGhlIGZvcm0ge2ZpbGVuYW1lOmZpbGVuYW1lLCB0ZXN0X3J1bl90aW1l
OnRlc3RfcnVuX3RpbWV9Ci0gICAgICAgICAgICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSBvYmpl
Y3QgdG8gcG9wdWxhdGUgd2l0aCB0aGUgcmVzdWx0cworICAgICAgICBBZGRzIHJlc3VsdHMgaW50
byByZXN1bHRfc3VtbWFyeS4KKyAgICAgICAgUmV0dXJucyBhIFRocmVhZFRpbWluZ3Mgb2JqZWN0
LgogICAgICAgICAiIiIKLSAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIHVzZSB3ZWJraXRweS50
b29sLmdyYW1tYXIucGx1cmFsaXplIGhlcmUuCi0gICAgICAgIHBsdXJhbCA9ICIiCi0gICAgICAg
IGlmIHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzID4gMToKLSAgICAgICAgICAgIHBsdXJh
bCA9ICJzIgotICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgJXMl
cyAuLi4nICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX3BvcnQu
ZHJpdmVyX25hbWUoKSwgcGx1cmFsKSkKLSAgICAgICAgdGhyZWFkcyA9IHNlbGYuX2luc3RhbnRp
YXRlX2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkcyhmaWxlX2xpc3QsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1h
cnkpCisgICAgICAgIGRyaXZlcl9jb3VudCA9IHBsdXJhbGl6ZShzZWxmLl9wb3J0LmRyaXZlcl9u
YW1lKCksIHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKQorICAgICAgICBzZWxmLl9wcmlu
dGVyLnByaW50X3VwZGF0ZSgiU3RhcnRpbmcgJXMgLi4uIiAlIGRyaXZlcl9jb3VudCkKKyAgICAg
ICAgdGhyZWFkcyA9IHNlbGYuX2luc3RhbnRpYXRlX2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkcyhm
aWxlX2xpc3QsIHJlc3VsdF9zdW1tYXJ5KQorCiAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRf
dXBkYXRlKCJTdGFydGluZyB0ZXN0aW5nIC4uLiIpCisgICAgICAgIHRocmVhZF90aW1pbmdzID0g
VGhyZWFkVGltaW5ncygpCisgICAgICAgIGFjdGl2ZV90aHJlYWRzID0gdGhyZWFkcy5jb3B5KCkK
IAotICAgICAgICAjIFdhaXQgZm9yIHRoZSB0aHJlYWRzIHRvIGZpbmlzaCBhbmQgY29sbGVjdCB0
ZXN0IGZhaWx1cmVzLgotICAgICAgICBmYWlsdXJlcyA9IHt9Ci0gICAgICAgIHRlc3RfdGltaW5n
cyA9IHt9Ci0gICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzID0gW10KLSAgICAgICAgdGhy
ZWFkX3RpbWluZ3MgPSBbXQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIExvb3AgdGhyb3Vn
aCBhbGwgdGhlIHRocmVhZHMgd2FpdGluZyBmb3IgdGhlbSB0byBmaW5pc2guCi0gICAgICAgICAg
ICBmb3IgdGhyZWFkIGluIHRocmVhZHM6Ci0gICAgICAgICAgICAgICAgIyBGSVhNRTogV2UnbGwg
ZW5kIHVwIHdhaXRpbmcgb24gdGhlIGZpcnN0IHRocmVhZCB0aGUgd2hvbGUKLSAgICAgICAgICAg
ICAgICAjIHRpbWUuICBUaGF0IG1lYW5zIHdlIHdvbid0IG5vdGljZSBleGNlcHRpb25zIG9uIG90
aGVyCi0gICAgICAgICAgICAgICAgIyB0aHJlYWRzIHVudGlsIHRoZSBmaXJzdCBvbmUgZXhpdHMu
Ci0gICAgICAgICAgICAgICAgIyBXZSBzaG91bGQgaW5zdGVhZCB3aGlsZSBUcnVlOiBpbiB0aGUg
b3V0ZXIgbG9vcAotICAgICAgICAgICAgICAgICMgYW5kIHRoZW4gbG9vcCB0aHJvdWdoIHRocmVh
ZHMgam9pbmluZyBhbmQgY2hlY2tpbmcKLSAgICAgICAgICAgICAgICAjIGlzQWxpdmUgYW5kIGdl
dF9leGNlcHRpb25faW5mby4gIEV4aXRpbmcgb24gYW55IGV4Y2VwdGlvbi4KLSAgICAgICAgICAg
ICAgICB3aGlsZSB0aHJlYWQuaXNBbGl2ZSgpOgotICAgICAgICAgICAgICAgICAgICAjIFdha2Ug
dGhlIG1haW4gdGhyZWFkIGV2ZXJ5IDAuMSBzZWNvbmRzIHNvIHdlCi0gICAgICAgICAgICAgICAg
ICAgICMgY2FuIGNhbGwgdXBkYXRlX3N1bW1hcnkgaW4gYSB0aW1lbHkgZmFzaGlvbi4KKyAgICAg
ICAgd2hpbGUgYWN0aXZlX3RocmVhZHM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAg
ICAgZm9yIHRocmVhZCBpbiBhY3RpdmVfdGhyZWFkcy5jb3B5KCk6CisgICAgICAgICAgICAgICAg
ICAgICMgV2FpdCBvbiBlYWNoIHRocmVhZCBpbiB0dXJuIHNvIHdlIGV4aXQgaW1tZWRpYXRlbHkK
KyAgICAgICAgICAgICAgICAgICAgIyBpZiBhbnkgb25lIHJhaXNlcyBhbiBleGNlcHRpb24uCiAg
ICAgICAgICAgICAgICAgICAgIHRocmVhZC5qb2luKDAuMSkKKwogICAgICAgICAgICAgICAgICAg
ICAjIEhBQ0s6IFVzZWQgZm9yIGRlYnVnZ2luZyB0aHJlYWRzIG9uIHRoZSBib3RzLgogICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9kdW1wX3RocmVhZF9zdGF0ZXNfaWZfbmVjZXNzYXJ5KCkKICAg
ICAgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKIAot
ICAgICAgICAgICAgICAgICMgVGhpcyB0aHJlYWQgaXMgZG9uZSwgc2F2ZSBvZmYgdGhlIHRpbWlu
ZyBpbmZvcm1hdGlvbi4KLSAgICAgICAgICAgICAgICB0aHJlYWRfdGltaW5ncy5hcHBlbmQoeydu
YW1lJzogdGhyZWFkLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdudW1fdGVzdHMnOiB0aHJlYWQuZ2V0X251bV90ZXN0cygpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvdGFsX3RpbWUnOiB0aHJlYWQuZ2V0X3RvdGFs
X3RpbWUoKX0pCi0gICAgICAgICAgICAgICAgdGVzdF90aW1pbmdzLnVwZGF0ZSh0aHJlYWQuZ2V0
X2RpcmVjdG9yeV90aW1pbmdfc3RhdHMoKSkKLSAgICAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rl
c3RfdGltaW5ncy5leHRlbmQodGhyZWFkLmdldF90ZXN0X3Jlc3VsdHMoKSkKLSAgICAgICAgZXhj
ZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRz
OgotICAgICAgICAgICAgICAgIHRocmVhZC5jYW5jZWwoKQotICAgICAgICAgICAgcmFpc2UKLSAg
ICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgotICAgICAgICAgICAgIyBDaGVjayB3aGV0aGVy
IGEgVGVzdFNoZWxsVGhyZWFkIGRpZWQgYmVmb3JlIG5vcm1hbCBjb21wbGV0aW9uLgotICAgICAg
ICAgICAgZXhjZXB0aW9uX2luZm8gPSB0aHJlYWQuZ2V0X2V4Y2VwdGlvbl9pbmZvKCkKLSAgICAg
ICAgICAgIGlmIGV4Y2VwdGlvbl9pbmZvIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICMg
UmUtcmFpc2UgdGhlIHRocmVhZCdzIGV4Y2VwdGlvbiBoZXJlIHRvIG1ha2UgaXQgY2xlYXIgdGhh
dAotICAgICAgICAgICAgICAgICMgdGVzdGluZyB3YXMgYWJvcnRlZC4gT3RoZXJ3aXNlLCB0aGUg
dGVzdHMgdGhhdCBkaWQgbm90IHJ1bgotICAgICAgICAgICAgICAgICMgd291bGQgYmUgYXNzdW1l
ZCB0byBoYXZlIHBhc3NlZC4KLSAgICAgICAgICAgICAgICByYWlzZSBleGNlcHRpb25faW5mb1sw
XSwgZXhjZXB0aW9uX2luZm9bMV0sIGV4Y2VwdGlvbl9pbmZvWzJdCi0KLSAgICAgICAgIyBGSVhN
RTogVGhpcyB1cGRhdGVfc3VtbWFyeSBjYWxsIHNlZW1zIHVuZWNlc3NhcnkuCi0gICAgICAgICMg
Q2FsbHMgYXJlIGFscmVhZHkgbWFkZSByaWdodCBhZnRlciBqb2luKCkgYWJvdmUsCi0gICAgICAg
ICMgYXMgd2VsbCBhcyBmcm9tIHRoZSBpbmRpdmlkdWFsIHRocmVhZHMgdGhlbXNlbHZlcy4KLSAg
ICAgICAgc2VsZi51cGRhdGVfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKLSAgICAgICAgcmV0dXJu
ICh0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykK
KyAgICAgICAgICAgICAgICAgICAgaWYgdGhyZWFkLmlzQWxpdmUoKToKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICMgUmUtcmFpc2UgYW55IGV4
Y2VwdGlvbiB0byBtYWtlIGNsZWFyIHRoYXQgYSB0aHJlYWQgYWJvcnRlZAorICAgICAgICAgICAg
ICAgICAgICAjIGFuZCBhbnkgbm90LXlldC1ydW4gdGVzdHMgc2hvdWxkIGNhbm5vdCBiZSBhc3N1
bWVkIHRvIHBhc3MuCisgICAgICAgICAgICAgICAgICAgIHRocmVhZC5yZXJhaXNlX2V4Y2VwdGlv
bigpCisKKyAgICAgICAgICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3MudXBkYXRlX2Zyb21fdGhy
ZWFkKHRocmVhZCkKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIHRocmVhZCBpcyBkb25lLCBz
dG9wIHdhaXRpbmcgZm9yIGl0LgorICAgICAgICAgICAgICAgICAgICBhY3RpdmVfdGhyZWFkcy5y
ZW1vdmUodGhyZWFkKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAjIElm
IHdlIGdvdCBhbnkgZXhjZXB0aW9uLCB0ZWFyIGRvd24gYWxsIHRocmVhZHMuCisgICAgICAgICAg
ICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgICAgICAgICB0aHJlYWQu
Y2FuY2VsKCkKKworICAgICAgICByZXR1cm4gdGhyZWFkX3RpbWluZ3MKIAogICAgIGRlZiBuZWVk
c19odHRwKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIHRlc3QgcnVubmVy
IG5lZWRzIGFuIEhUVFAgc2VydmVyLiIiIgpAQCAtNzUwLDggKzc0NSw3IEBAIGNsYXNzIFRlc3RS
dW5uZXI6CiAgICAgICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQog
ICAgICAgICAgICAgIyBzZWxmLl93ZWJzb2NrZXRfc2VjdXJlX3NlcnZlci5TdGFydCgpCiAKLSAg
ICAgICAgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywgaW5kaXZpZHVhbF90ZXN0X3RpbWlu
Z3MgPSAoCi0gICAgICAgICAgICBzZWxmLl9ydW5fdGVzdHMoc2VsZi5fdGVzdF9maWxlc19saXN0
LCByZXN1bHRfc3VtbWFyeSkpCisgICAgICAgIHRocmVhZF90aW1pbmdzID0gc2VsZi5fcnVuX3Rl
c3RzKHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCwgcmVzdWx0X3N1bW1hcnkpCiAKICAgICAgICAgIyBX
ZSBleGNsdWRlIHRoZSBjcmFzaGVzIGZyb20gdGhlIGxpc3Qgb2YgcmVzdWx0cyB0byByZXRyeSwg
YmVjYXVzZQogICAgICAgICAjIHdlIHdhbnQgdG8gdHJlYXQgZXZlbiBhIHBvdGVudGlhbGx5IGZs
YWt5IGNyYXNoIGFzIGFuIGVycm9yLgpAQCAtNzcwLDggKzc2NCw3IEBAIGNsYXNzIFRlc3RSdW5u
ZXI6CiAgICAgICAgIGVuZF90aW1lID0gdGltZS50aW1lKCkKIAogICAgICAgICBzZWxmLl9wcmlu
dF90aW1pbmdfc3RhdGlzdGljcyhlbmRfdGltZSAtIHN0YXJ0X3RpbWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1p
bmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRfdGltaW5n
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkp
CiAKICAgICAgICAgc2VsZi5fcHJpbnRfcmVzdWx0X3N1bW1hcnkocmVzdWx0X3N1bW1hcnkpCkBA
IC05MTAsMTUgKzkwMywxMiBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICByZXR1cm4gbmRp
Z2l0cwogCiAgICAgZGVmIF9wcmludF90aW1pbmdfc3RhdGlzdGljcyhzZWxmLCB0b3RhbF90aW1l
LCB0aHJlYWRfdGltaW5ncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rv
cnlfdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgICIiIlJlY29yZCB0aW1p
bmctc3BlY2lmaWMgaW5mb3JtYXRpb24gZm9yIHRoZSB0ZXN0IHJ1bi4KIAogICAgICAgICBBcmdz
OgogICAgICAgICAgIHRvdGFsX3RpbWU6IHRvdGFsIGVsYXBzZWQgdGltZSAoaW4gc2Vjb25kcykg
Zm9yIHRoZSB0ZXN0IHJ1bgotICAgICAgICAgIHRocmVhZF90aW1pbmdzOiB3YWxsIGNsb2NrIHRp
bWUgZWFjaCB0aHJlYWQgcmFuIGZvcgotICAgICAgICAgIGRpcmVjdG9yeV90ZXN0X3RpbWluZ3M6
IHRpbWluZyBieSBkaXJlY3RvcnkKLSAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5nczog
dGltaW5nIGJ5IGZpbGUKKyAgICAgICAgICB0aHJlYWRfdGltaW5nczogb2JqZWN0IGNvbnRhaW5p
bmcgcGVyIHRocmVhZCB0aW1pbmcgaW5mb3JtYXRpb24KICAgICAgICAgICByZXN1bHRfc3VtbWFy
eTogc3VtbWFyeSBvYmplY3QgZm9yIHRoZSB0ZXN0IHJ1bgogICAgICAgICAiIiIKICAgICAgICAg
c2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIlRlc3QgdGltaW5nOiIpCkBAIC05MjYsNyArOTE2
LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1p
bmcoIiIpCiAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCJUaHJlYWQgdGltaW5n
OiIpCiAgICAgICAgIGN1bWxfdGltZSA9IDAKLSAgICAgICAgZm9yIHQgaW4gdGhyZWFkX3RpbWlu
Z3M6CisgICAgICAgIGZvciB0IGluIHRocmVhZF90aW1pbmdzLnRocmVhZF90aW1pbmdzOgogICAg
ICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiAgICAlMTBzOiAlNWQgdGVzdHMs
ICU2LjJmIHNlY3MiICUKICAgICAgICAgICAgICAgICAgICh0WyduYW1lJ10sIHRbJ251bV90ZXN0
cyddLCB0Wyd0b3RhbF90aW1lJ10pKQogICAgICAgICAgICAgY3VtbF90aW1lICs9IHRbJ3RvdGFs
X3RpbWUnXQpAQCAtOTM0LDEwICs5MjQsMTAgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAg
ICAgICAgKGN1bWxfdGltZSwgY3VtbF90aW1lIC8gaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJv
Y2Vzc2VzKSkpCiAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIiKQogCi0gICAg
ICAgIHNlbGYuX3ByaW50X2FnZ3JlZ2F0ZV90ZXN0X3N0YXRpc3RpY3MoaW5kaXZpZHVhbF90ZXN0
X3RpbWluZ3MpCi0gICAgICAgIHNlbGYuX3ByaW50X2luZGl2aWR1YWxfdGVzdF90aW1lcyhpbmRp
dmlkdWFsX3Rlc3RfdGltaW5ncywKKyAgICAgICAgc2VsZi5fcHJpbnRfYWdncmVnYXRlX3Rlc3Rf
c3RhdGlzdGljcyh0aHJlYWRfdGltaW5ncy5pbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKKyAgICAg
ICAgc2VsZi5fcHJpbnRfaW5kaXZpZHVhbF90ZXN0X3RpbWVzKHRocmVhZF90aW1pbmdzLmluZGl2
aWR1YWxfdGVzdF90aW1pbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0X3N1bW1hcnkpCi0gICAgICAgIHNlbGYuX3ByaW50X2RpcmVjdG9yeV90aW1p
bmdzKGRpcmVjdG9yeV90ZXN0X3RpbWluZ3MpCisgICAgICAgIHNlbGYuX3ByaW50X2RpcmVjdG9y
eV90aW1pbmdzKHRocmVhZF90aW1pbmdzLmRpcmVjdG9yeV90ZXN0X3RpbWluZ3MpCiAKICAgICBk
ZWYgX3ByaW50X2FnZ3JlZ2F0ZV90ZXN0X3N0YXRpc3RpY3Moc2VsZiwgaW5kaXZpZHVhbF90ZXN0
X3RpbWluZ3MpOgogICAgICAgICAiIiJQcmludHMgYWdncmVnYXRlIHN0YXRpc3RpY3MgKGUuZy4g
bWVkaWFuLCBtZWFuLCBldGMuKSBmb3IgYWxsIHRlc3RzLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55177</attachid>
            <date>2010-05-05 17:18:08 -0700</date>
            <delta_ts>2010-05-05 19:39:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38561-20100505171805.patch</filename>
            <type>text/plain</type>
            <size>26503</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAwY2UyNTM1ZWE1ZmUxOWY3ZjAwMmEwYTUwZTc0ZWNhMTc3N2EwZWJiLi40YTQzOTJl
YTg5ZWFiYjlmODg5YjYzZjI2MzA5ODAzNzE5MWMyOWFjIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzYgQEAK
IDIwMTAtMDUtMDQgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIG5ldy1ydW4td2Via2l0LXRlc3Rz
IHNob3VsZCBjaGVjayBlYWNoIHRocmVhZCBmb3IgZXhjZXB0aW9ucyBpbnN0ZWFkIG9mIGp1c3Qg
dGhlIGZpcnN0IG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Mzg1NjEKKworICAgICAgICBPdXIgb2xkIGJlaGF2aW9yIHdhcyB0byBjYWxsIGpvaW4g
b25seSBvbiB0aGUgZmlyc3QgdGhyZWFkIGluIHRoZSBsaXN0CisgICAgICAgIHdoaWNoIG1lYW50
IHRoYXQgaWYgYSBsYXRlciB0aHJlYWQgdGhyZXcgYW4gZXhjZXB0aW9uIG9yIGZpbmlzaGVkIGZp
cnN0CisgICAgICAgIHdlIHdvdWxkIG5vdCBub3RpY2UgdW50aWwgdGhlIGZpcnN0IHRocmVhZCBo
YWQgZmluaXNoZWQuCisKKyAgICAgICAgVGhpcyBjb2RlIG5vdyBsb29rcyBhdCBlYWNoIHRocmVh
ZCBpbiB0dXJuLCBhbGxvd2luZyB0aGUgVUkgdG8gdXMgdG8gY2F0Y2gKKyAgICAgICAgRXhjZXB0
aW9ucyBmcm9tIHRocmVhZHMgbXVjaCBxdWlja2VyLgorCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQu
cHk6CisgICAgICAgICAtIENoYW5nZSBnZXRfZXhjZXB0aW9uX2luZm8gdG8gcmVyYWlzZV9leGNl
cHRpb24gc28gdGhhdAorICAgICAgICAgICB0aGUgY2FsbGVyIGRvZXNuJ3QgaGF2ZSB0byBkZWFs
IHdpdGggY3Jhenkgb2J0dXNlIHR1cGxlcy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L3dlYnNvY2tldF9zZXJ2ZXIucHk6CisgICAgICAgICAtIEFkZCBtaXNz
aW5nIGZpbGVtb2RlIHBhcmFtZXRlciB0byBvcGVuKCkgZGlzY292ZXJlZCBkdXJpbmcgdGVzdGlu
Zy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rl
c3RzLnB5OgorICAgICAgICAgLSBBZGQgYSBuZXcgVGhyZWFkVGltaW5ncyBjbGFzcyB0byBnZXQg
cmlkIG9mIGFub3RoZXIgb2J0dXNlIHR1cGxlIHJldHVybiB2YWx1ZS4KKyAgICAgICAgIC0gV2Ug
ZG9uJ3QgbmVlZCB0byBjYWxsIGludCgpIHdoZW4gYWNjZXNzaW5nIG9wdGlvbnMuY2hpbGRfcHJv
Y2Vzc2VzCisgICAgICAgICAgIGlmIHdlIGp1c3QgdGVsbCBvcHRwYXJzZSB0aGF0IHdlIGV4cGVj
dCBhbiBpbnQuCisgICAgICAgICAtIExvZyB3aG8gaG9sZHMgdGhlIGxvZ2dpbmcuX2xvY2sgaW4g
Y2FzZSB3ZSBzZWUgdGhhdCBoYW5nIG9uIHRoZSBib3RzIGFnYWluLgorICAgICAgICAgLSBVc2Ug
b3VyIG5ldyBUaHJlYWRXYXRjaGVyIGNsYXNzIHRvIHNpbXBsaWZ5IHRoZSB0aHJlYWQgd2F0Y2hp
bmcgY29kZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90aHJlYWR3
YXRjaGVyLnB5OiBBZGRlZC4KKyAgICAgICAgIC0gUHVzaCB0aGUgbG9naWMgb2Ygd2F0Y2hpbmcg
YSBzZXQgb2YgdGhyZWFkcyBmb3IgdGVybWluYXRpb24KKyAgICAgICAgICAgaW50byBpdHMgb3du
IGNsYXNzIHNvIGl0IGNhbiBiZSBiZXR0ZXIgdGVzdGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3RocmVhZHdhdGNoZXJfdW5pdHRlc3QucHk6IEFkZGVkLgorICAg
ICAgICAgLSBUZXN0IHRvIG1ha2Ugc3VyZSBUaHJlYWRXYXRjaGVyIGJlaGF2ZXMgYXMgYWR2ZXJ0
aXNlZC4KKworMjAxMC0wNS0wNCAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CisKICAg
ICAgICAgUmV2aWV3ZWQgYnkgU2hpbmljaGlybyBIYW1hamkuCiAKICAgICAgICAgUHJldHR5UGF0
Y2gucHJldHR5X2RpZmYoIiIpIHNob3VsZCBub3QgaGFuZwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5k
ZXJfdHJlZV90aHJlYWQucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weQppbmRleCA2OTU3
ZmNkOThlNWFjMGRhOGRkZWEzOTBjODg5NGQ3NzUzNTZiYzllLi5mMzczZGFkNjA3OTA0ZmRmMGEy
ODg2NGQ0MmFkMzFjN2I5ZjlmY2M5IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVh
ZC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weQpAQCAtMjM1LDEyICsyMzUsMTQg
QEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgICAgICAiIiJT
ZXQgYSBmbGFnIHRlbGxpbmcgdGhpcyB0aHJlYWQgdG8gcXVpdC4iIiIKICAgICAgICAgc2VsZi5f
Y2FuY2VsZWQgPSBUcnVlCiAKLSAgICBkZWYgZ2V0X2V4Y2VwdGlvbl9pbmZvKHNlbGYpOgotICAg
ICAgICAiIiJJZiBydW4oKSB0ZXJtaW5hdGVkIG9uIGFuIHVuY2F1Z2h0IGV4Y2VwdGlvbiwgcmV0
dXJuIGl0IGhlcmUKLSAgICAgICAgKCh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKSB0dXBsZSkuCi0g
ICAgICAgIFJldHVybnMgTm9uZSBpZiBydW4oKSB0ZXJtaW5hdGVkIG5vcm1hbGx5LiBNZWFudCB0
byBiZSBjYWxsZWQgYWZ0ZXIKLSAgICAgICAgam9pbmluZyB0aGlzIHRocmVhZC4iIiIKLSAgICAg
ICAgcmV0dXJuIHNlbGYuX2V4Y2VwdGlvbl9pbmZvCisgICAgZGVmIHJlcmFpc2VfZXhjZXB0aW9u
KHNlbGYpOgorICAgICAgICAiIiJJZiBydW4oKSB0ZXJtaW5hdGVkIG9uIGFuIHVuY2F1Z2h0IGV4
Y2VwdGlvbiwgc2VsZi5fZXhjZXB0aW9uX2luZm8KKyAgICAgICAgaXMgYSAodHlwZSwgdmFsdWUs
IHRyYWNlYmFjaykgdHVwbGUuCisgICAgICAgIE1lYW50IHRvIGJlIGNhbGxlZCBhZnRlciBqb2lu
aW5nIHRoaXMgdGhyZWFkLiIiIgorICAgICAgICBpZiBub3Qgc2VsZi5fZXhjZXB0aW9uX2luZm86
CisgICAgICAgICAgICBfbG9nLmluZm8oIiVzIHRlcm1pbmF0ZWQgbm9ybWFsbHkiICUgc2VsZi5n
ZXROYW1lKCkpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcmFpc2Ugc2VsZi5fZXhjZXB0
aW9uX2luZm9bMF0sIHNlbGYuX2V4Y2VwdGlvbl9pbmZvWzFdLCBzZWxmLl9leGNlcHRpb25faW5m
b1syXQogCiAgICAgZGVmIGdldF90b3RhbF90aW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gbWF4
KHNlbGYuX3N0b3BfdGltZSAtIHNlbGYuX3N0YXJ0X3RpbWUsIDAuMCkKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3Nl
cnZlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
d2Vic29ja2V0X3NlcnZlci5weQppbmRleCBhZDU1N2JkZTljZmJkOWNjZWQwNzM5MmMyYTA1YmY0
YzI3MTQzMzJhLi45N2Q4Njg2NmFmZWJlNmE3M2Q2ODY5MzBiNGY2MTkzOTc0ZTBhYWJmIDEwMDY0
NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dl
YnNvY2tldF9zZXJ2ZXIucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5CkBAIC0yMjAsNyArMjIwLDcgQEAgY2xh
c3MgUHlXZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgogICAgICAgICAgICAgdXJsID0g
J2h0dHAnCiAgICAgICAgIHVybCA9IHVybCArICc6Ly8xMjcuMC4wLjE6JWQvJyAlIHNlbGYuX3Bv
cnQKICAgICAgICAgaWYgbm90IHVybF9pc19hbGl2ZSh1cmwpOgotICAgICAgICAgICAgZnAgPSBj
b2RlY3Mub3BlbihvdXRwdXRfbG9nLCAidXRmLTgiKQorICAgICAgICAgICAgZnAgPSBjb2RlY3Mu
b3BlbihvdXRwdXRfbG9nLCAiciIsICJ1dGYtOCIpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAg
ICAgICAgICAgZm9yIGxpbmUgaW4gZnA6CiAgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJyb3Io
bGluZSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3J1bl93ZWJraXRfdGVzdHMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4IDc3ZmRhNzJlYjk2ZmJkNWYyZjY0
YzQwY2NlMmMwMTJiOTRhMjYxOTcuLjZhYWM4NGQwMTMxOWQ3OTAyNjRhNGIxZDcwOTYxMjVhYzQ3
YzRlZTUgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3J1bl93ZWJraXRfdGVzdHMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtNzQsNyArNzQsOSBAQCBmcm9t
IHRlc3RfdHlwZXMgaW1wb3J0IHRlc3RfdHlwZV9iYXNlCiBmcm9tIHRlc3RfdHlwZXMgaW1wb3J0
IHRleHRfZGlmZgogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9y
dCBFeGVjdXRpdmUKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnRocmVhZHdhdGNoZXIgaW1w
b3J0IFRocmVhZFdhdGNoZXIKIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0eSBpbXBvcnQgc2ltcGxl
anNvbgorZnJvbSB3ZWJraXRweS50b29sLmdyYW1tYXIgaW1wb3J0IHBsdXJhbGl6ZQogCiBpbXBv
cnQgcG9ydAogCkBAIC0yNDIsNiArMjQ0LDMyIEBAIGRlZiBzdW1tYXJpemVfdW5leHBlY3RlZF9y
ZXN1bHRzKHBvcnRfb2JqLCBleHBlY3RhdGlvbnMsIHJlc3VsdF9zdW1tYXJ5LAogICAgIHJldHVy
biByZXN1bHRzCiAKIAorY2xhc3MgVGhyZWFkVGltaW5ncyhvYmplY3QpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmKToKKyAgICAgICAgIyBGSVhNRTogVGhpcyBvYmplY3QgaXMgcmVwbGFjaW5nIGEg
dHVwbGUuCisgICAgICAgICMgVG8gbWFrZSB0aGluZ3MgZWFzeSwgSSd2ZSBsZWZ0IHRoZSBtZW1i
ZXIgbmFtZXMgdGhlCisgICAgICAgICMgc2FtZSBhcyB0aGUgdHVwbGUgbmFtZXMsIGJ1dCB3ZSBt
YXkgd2lzaCB0byBwdXNoCisgICAgICAgICMgbW9yZSBsb2dpYyBpbnRvIHRoaXMgY2xhc3MgYW5k
IG1ha2UgdGhlc2UgbWVtYmVycyBwcml2YXRlLgorICAgICAgICAiIiIKKyAgICAgICAgdGhyZWFk
X3RpbWluZ3M6IHdhbGwgY2xvY2sgdGltZSBlYWNoIHRocmVhZCByYW4gZm9yCisgICAgICAgIGRp
cmVjdG9yeV90ZXN0X3RpbWluZ3M6IHRpbWluZ3MgYnkgZGlyZWN0b3J5CisgICAgICAgIGluZGl2
aWR1YWxfdGVzdF90aW1pbmdzOiB0aW1pbmdzIGJ5IGZpbGUKKyAgICAgICAgIiIiCisgICAgICAg
IHNlbGYudGhyZWFkX3RpbWluZ3MgPSBbXQorICAgICAgICBzZWxmLmRpcmVjdG9yeV90ZXN0X3Rp
bWluZ3MgPSB7fQorICAgICAgICBzZWxmLmluZGl2aWR1YWxfdGVzdF90aW1pbmdzID0gW10KKwor
ICAgIGRlZiB1cGRhdGVfZnJvbV90aHJlYWQoc2VsZiwgdGhyZWFkKToKKyAgICAgICAgdGhyZWFk
X3RpbWluZyA9IHsKKyAgICAgICAgICAgICJuYW1lIjogdGhyZWFkLmdldE5hbWUoKSwKKyAgICAg
ICAgICAgICJudW1fdGVzdHMiOiB0aHJlYWQuZ2V0X251bV90ZXN0cygpLAorICAgICAgICAgICAg
InRvdGFsX3RpbWUiOiB0aHJlYWQuZ2V0X3RvdGFsX3RpbWUoKSwKKyAgICAgICAgfQorICAgICAg
ICBzZWxmLnRocmVhZF90aW1pbmdzLmFwcGVuZCh0aHJlYWRfdGltaW5nKQorICAgICAgICBzZWxm
LmRpcmVjdG9yeV90ZXN0X3RpbWluZ3MudXBkYXRlKHRocmVhZC5nZXRfZGlyZWN0b3J5X3RpbWlu
Z19zdGF0cygpKQorICAgICAgICBzZWxmLmluZGl2aWR1YWxfdGVzdF90aW1pbmdzLmV4dGVuZCh0
aHJlYWQuZ2V0X3Rlc3RfcmVzdWx0cygpKQorCisKIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgIiIi
QSBjbGFzcyBmb3IgbWFuYWdpbmcgcnVubmluZyBhIHNlcmllcyBvZiB0ZXN0cyBvbiBhIHNlcmll
cyBvZiBsYXlvdXQKICAgICB0ZXN0IGZpbGVzLiIiIgpAQCAtNjAyLDcgKzYzMCw3IEBAIGNsYXNz
IFRlc3RSdW5uZXI6CiAKICAgICAgICAgIyBJbnN0YW50aWF0ZSBUZXN0U2hlbGxUaHJlYWRzIGFu
ZCBzdGFydCB0aGVtLgogICAgICAgICB0aHJlYWRzID0gW10KLSAgICAgICAgZm9yIGkgaW4geHJh
bmdlKGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykpOgorICAgICAgICBmb3IgaSBp
biB4cmFuZ2Uoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpOgogICAgICAgICAgICAgIyBD
cmVhdGUgc2VwYXJhdGUgVGVzdFR5cGVzIGluc3RhbmNlcyBmb3IgZWFjaCB0aHJlYWQuCiAgICAg
ICAgICAgICB0ZXN0X3R5cGVzID0gW10KICAgICAgICAgICAgIGZvciB0ZXN0X3R5cGUgaW4gc2Vs
Zi5fdGVzdF90eXBlczoKQEAgLTYxNSw3ICs2NDMsOSBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAg
ICAgICAgICAgICAgIGZpbGVuYW1lX3F1ZXVlLCBzZWxmLl9yZXN1bHRfcXVldWUsIHRlc3RfdHlw
ZXMsIHRlc3RfYXJncywKICAgICAgICAgICAgICAgICBwbmdfcGF0aCwgc2hlbGxfYXJncywgc2Vs
Zi5fb3B0aW9ucykKICAgICAgICAgICAgIGlmIHNlbGYuX2lzX3NpbmdsZV90aHJlYWRlZCgpOgor
ICAgICAgICAgICAgICAgICMgRklYTUU6IFRoaXMgaXMgYSBob3JyaWJsZSBoYWNrIGFuZCBzaG91
bGQgYmUgbW92ZWQvcmVtb3ZlZC4KICAgICAgICAgICAgICAgICB0aHJlYWQucnVuX2luX21haW5f
dGhyZWFkKHNlbGYsIHJlc3VsdF9zdW1tYXJ5KQorICAgICAgICAgICAgICAgIHJldHVybiBbXQog
ICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0aHJlYWQuc3RhcnQoKQogICAgICAg
ICAgICAgdGhyZWFkcy5hcHBlbmQodGhyZWFkKQpAQCAtNjI0LDcgKzY1NCw3IEBAIGNsYXNzIFRl
c3RSdW5uZXI6CiAKICAgICBkZWYgX2lzX3NpbmdsZV90aHJlYWRlZChzZWxmKToKICAgICAgICAg
IiIiUmV0dXJucyB3aGV0aGVyIHdlIHNob3VsZCBydW4gYWxsIHRoZSB0ZXN0cyBpbiB0aGUgbWFp
biB0aHJlYWQuIiIiCi0gICAgICAgIHJldHVybiBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9j
ZXNzZXMpID09IDEKKyAgICAgICAgcmV0dXJuIHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2Vz
ID09IDEKIAogICAgIGRlZiBfZHVtcF90aHJlYWRfc3RhdGVzKHNlbGYpOgogICAgICAgICBmb3Ig
dGhyZWFkX2lkLCBzdGFjayBpbiBzeXMuX2N1cnJlbnRfZnJhbWVzKCkuaXRlbXMoKToKQEAgLTY0
Nyw3OCArNjc3LDQwIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIHRpbWVfc2luY2VfbGFz
dF9kdW1wID0gdGltZS50aW1lKCkgLSBzZWxmLl9sYXN0X3RocmVhZF9kdW1wCiAgICAgICAgIGlm
ICB0aW1lX3NpbmNlX2xhc3RfZHVtcCA+IGR1bXBfdGhyZWFkc19ldmVyeToKICAgICAgICAgICAg
IHNlbGYuX2R1bXBfdGhyZWFkX3N0YXRlcygpCisgICAgICAgICAgICAjIFdlJ3ZlIHNlZW4gaGFu
Z3Mgd2hlcmUgYWxsIHRocmVhZHMgYXJlIGh1bmcgd2FpdGluZyBvbgorICAgICAgICAgICAgIyBs
b2dnaW5nLl9sb2NrLiAgSXQgaXMgdXNlZnVsIHRvIGtub3cgd2hvIGlzIGhvbGRpbmcgdGhlCisg
ICAgICAgICAgICAjIGxvY2sgaW4gdGhhdCBjYXNlLgorICAgICAgICAgICAgcHJpbnQgIlxubG9n
Z2luZy5fbG9jazogJXNcbiIgJSBsb2dnaW5nLl9sb2NrCiAgICAgICAgICAgICBzZWxmLl9sYXN0
X3RocmVhZF9kdW1wID0gdGltZS50aW1lKCkKIAogICAgIGRlZiBfcnVuX3Rlc3RzKHNlbGYsIGZp
bGVfbGlzdCwgcmVzdWx0X3N1bW1hcnkpOgogICAgICAgICAiIiJSdW5zIHRoZSB0ZXN0cyBpbiB0
aGUgZmlsZV9saXN0LgotCi0gICAgICAgIFJldHVybjogQSB0dXBsZSAoZmFpbHVyZXMsIHRocmVh
ZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCi0gICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGlt
aW5ncykKLSAgICAgICAgICAgIGZhaWx1cmVzIGlzIGEgbWFwIGZyb20gdGVzdCB0byBsaXN0IG9m
IGZhaWx1cmUgdHlwZXMKLSAgICAgICAgICAgIHRocmVhZF90aW1pbmdzIGlzIGEgbGlzdCBvZiBk
aWN0cyB3aXRoIHRoZSB0b3RhbCBydW50aW1lCi0gICAgICAgICAgICAgIG9mIGVhY2ggdGhyZWFk
IHdpdGggJ25hbWUnLCAnbnVtX3Rlc3RzJywgJ3RvdGFsX3RpbWUnIHByb3BlcnRpZXMKLSAgICAg
ICAgICAgIHRlc3RfdGltaW5ncyBpcyBhIGxpc3Qgb2YgdGltaW5ncyBmb3IgZWFjaCBzaGFyZGVk
IHN1YmRpcmVjdG9yeQotICAgICAgICAgICAgICBvZiB0aGUgZm9ybSBbdGltZSwgZGlyZWN0b3J5
X25hbWUsIG51bV90ZXN0c10KLSAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzIGlz
IGEgbGlzdCBvZiBydW4gdGltZXMgZm9yIGVhY2ggdGVzdAotICAgICAgICAgICAgICBpbiB0aGUg
Zm9ybSB7ZmlsZW5hbWU6ZmlsZW5hbWUsIHRlc3RfcnVuX3RpbWU6dGVzdF9ydW5fdGltZX0KLSAg
ICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCB0byBwb3B1bGF0ZSB3aXRo
IHRoZSByZXN1bHRzCisgICAgICAgIEFkZHMgcmVzdWx0cyBpbnRvIHJlc3VsdF9zdW1tYXJ5Lgor
ICAgICAgICBSZXR1cm5zIGEgVGhyZWFkVGltaW5ncyBvYmplY3QuCiAgICAgICAgICIiIgotICAg
ICAgICAjIEZJWE1FOiBXZSBzaG91bGQgdXNlIHdlYmtpdHB5LnRvb2wuZ3JhbW1hci5wbHVyYWxp
emUgaGVyZS4KLSAgICAgICAgcGx1cmFsID0gIiIKLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5j
aGlsZF9wcm9jZXNzZXMgPiAxOgotICAgICAgICAgICAgcGx1cmFsID0gInMiCi0gICAgICAgIHNl
bGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyAlcyVzIC4uLicgJQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fcG9ydC5kcml2ZXJfbmFtZSgpLCBwbHVy
YWwpKQotICAgICAgICB0aHJlYWRzID0gc2VsZi5faW5zdGFudGlhdGVfZHVtcF9yZW5kZXJfdHJl
ZV90aHJlYWRzKGZpbGVfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKKyAgICAgICAgZHJpdmVy
X2NvdW50ID0gcGx1cmFsaXplKHNlbGYuX3BvcnQuZHJpdmVyX25hbWUoKSwgc2VsZi5fb3B0aW9u
cy5jaGlsZF9wcm9jZXNzZXMpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJT
dGFydGluZyAlcyAuLi4iICUgZHJpdmVyX2NvdW50KQorICAgICAgICB0aHJlYWRzID0gc2VsZi5f
aW5zdGFudGlhdGVfZHVtcF9yZW5kZXJfdHJlZV90aHJlYWRzKGZpbGVfbGlzdCwgcmVzdWx0X3N1
bW1hcnkpCisgICAgICAgIHRocmVhZF90aW1pbmdzID0gVGhyZWFkVGltaW5ncygpCisKKyAgICAg
ICAgZGVmIF9kaWRfd2FrZSgpOgorICAgICAgICAgICAgIyBIQUNLOiBVc2VkIGZvciBkZWJ1Z2dp
bmcgdGhyZWFkcyBvbiB0aGUgYm90cy4KKyAgICAgICAgICAgIHNlbGYuX2R1bXBfdGhyZWFkX3N0
YXRlc19pZl9uZWNlc3NhcnkoKQorICAgICAgICAgICAgc2VsZi51cGRhdGVfc3VtbWFyeShyZXN1
bHRfc3VtbWFyeSkKKworICAgICAgICBkZWYgX3RocmVhZF9maW5pc2hlZCh0aHJlYWQpOgorICAg
ICAgICAgICAgIyBSZS1yYWlzZSBhbnkgZXhjZXB0aW9uIHRvIG1ha2UgY2xlYXIgdGhhdCBhIHRo
cmVhZCBhYm9ydGVkCisgICAgICAgICAgICAjIGFuZCBhbnkgbm90LXlldC1ydW4gdGVzdHMgc2hv
dWxkIGNhbm5vdCBiZSBhc3N1bWVkIHRvIHBhc3MuCisgICAgICAgICAgICB0aHJlYWQucmVyYWlz
ZV9leGNlcHRpb24oKQorICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3MudXBkYXRlX2Zyb21fdGhy
ZWFkKHRocmVhZCkKKworICAgICAgICB3YXRjaGVyID0gVGhyZWFkV2F0Y2hlcih3YWtlX2NhbGxi
YWNrPV9kaWRfd2FrZSwKKyAgICAgICAgICAgIHRocmVhZF9maW5pc2hlZF9jYWxsYmFjaz1fdGhy
ZWFkX2ZpbmlzaGVkKQorCiAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFy
dGluZyB0ZXN0aW5nIC4uLiIpCisgICAgICAgIHdhdGNoZXIud2F0Y2hfdGhyZWFkcyh0aHJlYWRz
KQogCi0gICAgICAgICMgV2FpdCBmb3IgdGhlIHRocmVhZHMgdG8gZmluaXNoIGFuZCBjb2xsZWN0
IHRlc3QgZmFpbHVyZXMuCi0gICAgICAgIGZhaWx1cmVzID0ge30KLSAgICAgICAgdGVzdF90aW1p
bmdzID0ge30KLSAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MgPSBbXQotICAgICAgICB0
aHJlYWRfdGltaW5ncyA9IFtdCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgTG9vcCB0aHJv
dWdoIGFsbCB0aGUgdGhyZWFkcyB3YWl0aW5nIGZvciB0aGVtIHRvIGZpbmlzaC4KLSAgICAgICAg
ICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgICAgICAjIEZJWE1FOiBXZSds
bCBlbmQgdXAgd2FpdGluZyBvbiB0aGUgZmlyc3QgdGhyZWFkIHRoZSB3aG9sZQotICAgICAgICAg
ICAgICAgICMgdGltZS4gIFRoYXQgbWVhbnMgd2Ugd29uJ3Qgbm90aWNlIGV4Y2VwdGlvbnMgb24g
b3RoZXIKLSAgICAgICAgICAgICAgICAjIHRocmVhZHMgdW50aWwgdGhlIGZpcnN0IG9uZSBleGl0
cy4KLSAgICAgICAgICAgICAgICAjIFdlIHNob3VsZCBpbnN0ZWFkIHdoaWxlIFRydWU6IGluIHRo
ZSBvdXRlciBsb29wCi0gICAgICAgICAgICAgICAgIyBhbmQgdGhlbiBsb29wIHRocm91Z2ggdGhy
ZWFkcyBqb2luaW5nIGFuZCBjaGVja2luZwotICAgICAgICAgICAgICAgICMgaXNBbGl2ZSBhbmQg
Z2V0X2V4Y2VwdGlvbl9pbmZvLiAgRXhpdGluZyBvbiBhbnkgZXhjZXB0aW9uLgotICAgICAgICAg
ICAgICAgIHdoaWxlIHRocmVhZC5pc0FsaXZlKCk6Ci0gICAgICAgICAgICAgICAgICAgICMgV2Fr
ZSB0aGUgbWFpbiB0aHJlYWQgZXZlcnkgMC4xIHNlY29uZHMgc28gd2UKLSAgICAgICAgICAgICAg
ICAgICAgIyBjYW4gY2FsbCB1cGRhdGVfc3VtbWFyeSBpbiBhIHRpbWVseSBmYXNoaW9uLgotICAg
ICAgICAgICAgICAgICAgICB0aHJlYWQuam9pbigwLjEpCi0gICAgICAgICAgICAgICAgICAgICMg
SEFDSzogVXNlZCBmb3IgZGVidWdnaW5nIHRocmVhZHMgb24gdGhlIGJvdHMuCi0gICAgICAgICAg
ICAgICAgICAgIHNlbGYuX2R1bXBfdGhyZWFkX3N0YXRlc19pZl9uZWNlc3NhcnkoKQotICAgICAg
ICAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQotCi0gICAg
ICAgICAgICAgICAgIyBUaGlzIHRocmVhZCBpcyBkb25lLCBzYXZlIG9mZiB0aGUgdGltaW5nIGlu
Zm9ybWF0aW9uLgotICAgICAgICAgICAgICAgIHRocmVhZF90aW1pbmdzLmFwcGVuZCh7J25hbWUn
OiB0aHJlYWQuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ251bV90ZXN0cyc6IHRocmVhZC5nZXRfbnVtX3Rlc3RzKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAndG90YWxfdGltZSc6IHRocmVhZC5nZXRfdG90YWxfdGlt
ZSgpfSkKLSAgICAgICAgICAgICAgICB0ZXN0X3RpbWluZ3MudXBkYXRlKHRocmVhZC5nZXRfZGly
ZWN0b3J5X3RpbWluZ19zdGF0cygpKQotICAgICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90
aW1pbmdzLmV4dGVuZCh0aHJlYWQuZ2V0X3Rlc3RfcmVzdWx0cygpKQotICAgICAgICBleGNlcHQg
S2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6Ci0g
ICAgICAgICAgICAgICAgdGhyZWFkLmNhbmNlbCgpCi0gICAgICAgICAgICByYWlzZQotICAgICAg
ICBmb3IgdGhyZWFkIGluIHRocmVhZHM6Ci0gICAgICAgICAgICAjIENoZWNrIHdoZXRoZXIgYSBU
ZXN0U2hlbGxUaHJlYWQgZGllZCBiZWZvcmUgbm9ybWFsIGNvbXBsZXRpb24uCi0gICAgICAgICAg
ICBleGNlcHRpb25faW5mbyA9IHRocmVhZC5nZXRfZXhjZXB0aW9uX2luZm8oKQotICAgICAgICAg
ICAgaWYgZXhjZXB0aW9uX2luZm8gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgIyBSZS1y
YWlzZSB0aGUgdGhyZWFkJ3MgZXhjZXB0aW9uIGhlcmUgdG8gbWFrZSBpdCBjbGVhciB0aGF0Ci0g
ICAgICAgICAgICAgICAgIyB0ZXN0aW5nIHdhcyBhYm9ydGVkLiBPdGhlcndpc2UsIHRoZSB0ZXN0
cyB0aGF0IGRpZCBub3QgcnVuCi0gICAgICAgICAgICAgICAgIyB3b3VsZCBiZSBhc3N1bWVkIHRv
IGhhdmUgcGFzc2VkLgotICAgICAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbl9pbmZvWzBdLCBl
eGNlcHRpb25faW5mb1sxXSwgZXhjZXB0aW9uX2luZm9bMl0KLQotICAgICAgICAjIEZJWE1FOiBU
aGlzIHVwZGF0ZV9zdW1tYXJ5IGNhbGwgc2VlbXMgdW5lY2Vzc2FyeS4KLSAgICAgICAgIyBDYWxs
cyBhcmUgYWxyZWFkeSBtYWRlIHJpZ2h0IGFmdGVyIGpvaW4oKSBhYm92ZSwKLSAgICAgICAgIyBh
cyB3ZWxsIGFzIGZyb20gdGhlIGluZGl2aWR1YWwgdGhyZWFkcyB0aGVtc2VsdmVzLgotICAgICAg
ICBzZWxmLnVwZGF0ZV9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICByZXR1cm4gKHRo
cmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQorICAg
ICAgICByZXR1cm4gdGhyZWFkX3RpbWluZ3MKIAogICAgIGRlZiBuZWVkc19odHRwKHNlbGYpOgog
ICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIHRlc3QgcnVubmVyIG5lZWRzIGFuIEhUVFAg
c2VydmVyLiIiIgpAQCAtNzUwLDggKzc0Miw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAg
ICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQogICAgICAgICAgICAgIyBz
ZWxmLl93ZWJzb2NrZXRfc2VjdXJlX3NlcnZlci5TdGFydCgpCiAKLSAgICAgICAgdGhyZWFkX3Rp
bWluZ3MsIHRlc3RfdGltaW5ncywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MgPSAoCi0gICAgICAg
ICAgICBzZWxmLl9ydW5fdGVzdHMoc2VsZi5fdGVzdF9maWxlc19saXN0LCByZXN1bHRfc3VtbWFy
eSkpCisgICAgICAgIHRocmVhZF90aW1pbmdzID0gc2VsZi5fcnVuX3Rlc3RzKHNlbGYuX3Rlc3Rf
ZmlsZXNfbGlzdCwgcmVzdWx0X3N1bW1hcnkpCiAKICAgICAgICAgIyBXZSBleGNsdWRlIHRoZSBj
cmFzaGVzIGZyb20gdGhlIGxpc3Qgb2YgcmVzdWx0cyB0byByZXRyeSwgYmVjYXVzZQogICAgICAg
ICAjIHdlIHdhbnQgdG8gdHJlYXQgZXZlbiBhIHBvdGVudGlhbGx5IGZsYWt5IGNyYXNoIGFzIGFu
IGVycm9yLgpAQCAtNzcwLDggKzc2MSw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIGVu
ZF90aW1lID0gdGltZS50aW1lKCkKIAogICAgICAgICBzZWxmLl9wcmludF90aW1pbmdfc3RhdGlz
dGljcyhlbmRfdGltZSAtIHN0YXJ0X3RpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRfdGltaW5ncywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCiAKICAgICAgICAgc2Vs
Zi5fcHJpbnRfcmVzdWx0X3N1bW1hcnkocmVzdWx0X3N1bW1hcnkpCkBAIC03ODgsNyArNzc4LDcg
QEAgY2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICAjIFdyaXRlIHRoZSBzYW1lIGRhdGEgdG8g
bG9nIGZpbGVzLgogICAgICAgICBzZWxmLl93cml0ZV9qc29uX2ZpbGVzKHVuZXhwZWN0ZWRfcmVz
dWx0cywgcmVzdWx0X3N1bW1hcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGl2
aWR1YWxfdGVzdF90aW1pbmdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRf
dGltaW5ncy5pbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKIAogICAgICAgICAjIFdyaXRlIHRoZSBz
dW1tYXJ5IHRvIGRpc2sgKHJlc3VsdHMuaHRtbCkgYW5kIGRpc3BsYXkgaXQgaWYgcmVxdWVzdGVk
LgogICAgICAgICB3cm90ZV9yZXN1bHRzID0gc2VsZi5fd3JpdGVfcmVzdWx0c19odG1sX2ZpbGUo
cmVzdWx0X3N1bW1hcnkpCkBAIC05MTAsMTUgKzkwMCwxMiBAQCBjbGFzcyBUZXN0UnVubmVyOgog
ICAgICAgICByZXR1cm4gbmRpZ2l0cwogCiAgICAgZGVmIF9wcmludF90aW1pbmdfc3RhdGlzdGlj
cyhzZWxmLCB0b3RhbF90aW1lLCB0aHJlYWRfdGltaW5ncywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkaXJlY3RvcnlfdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5n
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSk6CiAgICAg
ICAgICIiIlJlY29yZCB0aW1pbmctc3BlY2lmaWMgaW5mb3JtYXRpb24gZm9yIHRoZSB0ZXN0IHJ1
bi4KIAogICAgICAgICBBcmdzOgogICAgICAgICAgIHRvdGFsX3RpbWU6IHRvdGFsIGVsYXBzZWQg
dGltZSAoaW4gc2Vjb25kcykgZm9yIHRoZSB0ZXN0IHJ1bgotICAgICAgICAgIHRocmVhZF90aW1p
bmdzOiB3YWxsIGNsb2NrIHRpbWUgZWFjaCB0aHJlYWQgcmFuIGZvcgotICAgICAgICAgIGRpcmVj
dG9yeV90ZXN0X3RpbWluZ3M6IHRpbWluZyBieSBkaXJlY3RvcnkKLSAgICAgICAgICBpbmRpdmlk
dWFsX3Rlc3RfdGltaW5nczogdGltaW5nIGJ5IGZpbGUKKyAgICAgICAgICB0aHJlYWRfdGltaW5n
czogb2JqZWN0IGNvbnRhaW5pbmcgcGVyIHRocmVhZCB0aW1pbmcgaW5mb3JtYXRpb24KICAgICAg
ICAgICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgZm9yIHRoZSB0ZXN0IHJ1bgogICAg
ICAgICAiIiIKICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIlRlc3QgdGltaW5n
OiIpCkBAIC05MjYsMTggKzkxMywxOCBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBzZWxm
Ll9wcmludGVyLnByaW50X3RpbWluZygiIikKICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90
aW1pbmcoIlRocmVhZCB0aW1pbmc6IikKICAgICAgICAgY3VtbF90aW1lID0gMAotICAgICAgICBm
b3IgdCBpbiB0aHJlYWRfdGltaW5nczoKKyAgICAgICAgZm9yIHQgaW4gdGhyZWFkX3RpbWluZ3Mu
dGhyZWFkX3RpbWluZ3M6CiAgICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygi
ICAgICUxMHM6ICU1ZCB0ZXN0cywgJTYuMmYgc2VjcyIgJQogICAgICAgICAgICAgICAgICAgKHRb
J25hbWUnXSwgdFsnbnVtX3Rlc3RzJ10sIHRbJ3RvdGFsX3RpbWUnXSkpCiAgICAgICAgICAgICBj
dW1sX3RpbWUgKz0gdFsndG90YWxfdGltZSddCiAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRf
dGltaW5nKCIgICAlNi4yZiBjdW11bGF0aXZlLCAlNi4yZiBvcHRpbWFsIiAlCi0gICAgICAgICAg
ICAgIChjdW1sX3RpbWUsIGN1bWxfdGltZSAvIGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nl
c3NlcykpKQorICAgICAgICAgICAgICAoY3VtbF90aW1lLCBjdW1sX3RpbWUgLyBzZWxmLl9vcHRp
b25zLmNoaWxkX3Byb2Nlc3NlcykpCiAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5n
KCIiKQogCi0gICAgICAgIHNlbGYuX3ByaW50X2FnZ3JlZ2F0ZV90ZXN0X3N0YXRpc3RpY3MoaW5k
aXZpZHVhbF90ZXN0X3RpbWluZ3MpCi0gICAgICAgIHNlbGYuX3ByaW50X2luZGl2aWR1YWxfdGVz
dF90aW1lcyhpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywKKyAgICAgICAgc2VsZi5fcHJpbnRfYWdn
cmVnYXRlX3Rlc3Rfc3RhdGlzdGljcyh0aHJlYWRfdGltaW5ncy5pbmRpdmlkdWFsX3Rlc3RfdGlt
aW5ncykKKyAgICAgICAgc2VsZi5fcHJpbnRfaW5kaXZpZHVhbF90ZXN0X3RpbWVzKHRocmVhZF90
aW1pbmdzLmluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCi0gICAgICAgIHNlbGYuX3ByaW50X2Rp
cmVjdG9yeV90aW1pbmdzKGRpcmVjdG9yeV90ZXN0X3RpbWluZ3MpCisgICAgICAgIHNlbGYuX3By
aW50X2RpcmVjdG9yeV90aW1pbmdzKHRocmVhZF90aW1pbmdzLmRpcmVjdG9yeV90ZXN0X3RpbWlu
Z3MpCiAKICAgICBkZWYgX3ByaW50X2FnZ3JlZ2F0ZV90ZXN0X3N0YXRpc3RpY3Moc2VsZiwgaW5k
aXZpZHVhbF90ZXN0X3RpbWluZ3MpOgogICAgICAgICAiIiJQcmludHMgYWdncmVnYXRlIHN0YXRp
c3RpY3MgKGUuZy4gbWVkaWFuLCBtZWFuLCBldGMuKSBmb3IgYWxsIHRlc3RzLgpAQCAtMTI1OCw3
ICsxMjQ1LDcgQEAgZGVmIHJ1bihwb3J0X29iaiwgb3B0aW9ucywgYXJncywgcmVndWxhcl9vdXRw
dXQ9c3lzLnN0ZGVyciwKIAogICAgIHByaW50ZXIgPSBwcmludGluZy5QcmludGVyKHBvcnRfb2Jq
LCBvcHRpb25zLCByZWd1bGFyX291dHB1dD1yZWd1bGFyX291dHB1dCwKICAgICAgICAgYnVpbGRi
b3Rfb3V0cHV0PWJ1aWxkYm90X291dHB1dCwKLSAgICAgICAgY2hpbGRfcHJvY2Vzc2VzPWludChv
cHRpb25zLmNoaWxkX3Byb2Nlc3NlcyksCisgICAgICAgIGNoaWxkX3Byb2Nlc3Nlcz1vcHRpb25z
LmNoaWxkX3Byb2Nlc3NlcywKICAgICAgICAgaXNfZnVsbHlfcGFyYWxsZWw9b3B0aW9ucy5leHBl
cmltZW50YWxfZnVsbHlfcGFyYWxsZWwpCiAgICAgaWYgb3B0aW9ucy5oZWxwX3ByaW50aW5nOgog
ICAgICAgICBwcmludGVyLmhlbHBfcHJpbnRpbmcoKQpAQCAtMTMxNCwxMSArMTMwMSwxMSBAQCBk
ZWYgcnVuKHBvcnRfb2JqLCBvcHRpb25zLCBhcmdzLCByZWd1bGFyX291dHB1dD1zeXMuc3RkZXJy
LAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgb3B0aW9ucy50aW1lX291dF9tcyA9IHN0cihU
ZXN0UnVubmVyLkRFRkFVTFRfVEVTVF9USU1FT1VUX01TKQogCi0gICAgb3B0aW9ucy5zbG93X3Rp
bWVfb3V0X21zID0gc3RyKDUgKiBpbnQob3B0aW9ucy50aW1lX291dF9tcykpCisgICAgb3B0aW9u
cy5zbG93X3RpbWVfb3V0X21zID0gc3RyKDUgKiBvcHRpb25zLnRpbWVfb3V0X21zKQogICAgIHBy
aW50ZXIucHJpbnRfY29uZmlnKCJSZWd1bGFyIHRpbWVvdXQ6ICVzLCBzbG93IHRlc3QgdGltZW91
dDogJXMiICUKICAgICAgICAgICAgICAgICAgICAob3B0aW9ucy50aW1lX291dF9tcywgb3B0aW9u
cy5zbG93X3RpbWVfb3V0X21zKSkKIAotICAgIGlmIGludChvcHRpb25zLmNoaWxkX3Byb2Nlc3Nl
cykgPT0gMToKKyAgICBpZiBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyA9PSAxOgogICAgICAgICBw
cmludGVyLnByaW50X2NvbmZpZygiUnVubmluZyBvbmUgJXMiICUgcG9ydF9vYmouZHJpdmVyX25h
bWUoKSkKICAgICBlbHNlOgogICAgICAgICBwcmludGVyLnByaW50X2NvbmZpZygiUnVubmluZyAl
cyAlc3MgaW4gcGFyYWxsZWwiICUgKApAQCAtMTU0Nyw3ICsxNTM0LDcgQEAgZGVmIHBhcnNlX2Fy
Z3MoYXJncz1Ob25lKToKICAgICAgICAgICAgIGhlbHA9IlJ1biBhbGwgdGVzdHMsIGV2ZW4gdGhv
c2UgbWFya2VkIFNLSVAgaW4gdGhlIHRlc3QgbGlzdCIpLAogICAgICAgICBvcHRwYXJzZS5tYWtl
X29wdGlvbigiLS11c2UtYXBhY2hlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKICAgICAgICAgICAg
IGRlZmF1bHQ9RmFsc2UsIGhlbHA9IldoZXRoZXIgdG8gdXNlIGFwYWNoZSBpbnN0ZWFkIG9mIGxp
Z2h0dHBkLiIpLAotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS10aW1lLW91dC1tcyIs
CisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXRpbWUtb3V0LW1zIiwgdHlwZT0iaW50
IiwKICAgICAgICAgICAgIGhlbHA9IlNldCB0aGUgdGltZW91dCBmb3IgZWFjaCB0ZXN0IiksCiAg
ICAgICAgICMgb2xkLXJ1bi13ZWJraXQtdGVzdHMgY2FsbHMgLS1yYW5kb21pemUtb3JkZXIgLS1y
YW5kb206CiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXJhbmRvbWl6ZS1vcmRlciIs
IGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCkBAIC0xNTY3LDcgKzE1NTQsNyBAQCBkZWYgcGFyc2VfYXJn
cyhhcmdzPU5vbmUpOgogICAgICAgICAjIElzb2xhdGUgZWFjaCB0ZXN0IGNhc2UgcnVuIChpbXBs
aWVzIC0tbnRobHkgMSAtLXZlcmJvc2UpCiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCIt
LXJ1bi1zaW5nbHkiLCBhY3Rpb249InN0b3JlX3RydWUiLAogICAgICAgICAgICAgZGVmYXVsdD1G
YWxzZSwgaGVscD0icnVuIGEgc2VwYXJhdGUgRHVtcFJlbmRlclRyZWUgZm9yIGVhY2ggdGVzdCIp
LAotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1jaGlsZC1wcm9jZXNzZXMiLAorICAg
ICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1jaGlsZC1wcm9jZXNzZXMiLCB0eXBlPSJpbnQi
LAogICAgICAgICAgICAgaGVscD0iTnVtYmVyIG9mIER1bXBSZW5kZXJUcmVlcyB0byBydW4gaW4g
cGFyYWxsZWwuIiksCiAgICAgICAgICMgRklYTUU6IERpc3BsYXkgZGVmYXVsdCBudW1iZXIgb2Yg
Y2hpbGQgcHJvY2Vzc2VzIHRoYXQgd2lsbCBydW4uCiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0
aW9uKCItLWV4cGVyaW1lbnRhbC1mdWxseS1wYXJhbGxlbCIsCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90aHJlYWR3YXRjaGVyLnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGhyZWFkd2F0Y2hlci5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hOTM4MGM0OTNiMGY3MjVmYjFmZjViZGMxNmYxNTYzYTA4MmE1ODQwCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
dGhyZWFkd2F0Y2hlci5weQpAQCAtMCwwICsxLDY0IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisj
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitj
bGFzcyBUaHJlYWRXYXRjaGVyKG9iamVjdCk6CisgICAgIyBJZiB3ZSBuZWVkIHRvIGFkZCBtb3Jl
IGNhbGxiYWNrcyB3ZSBzaG91bGQgbW92ZSB0byB1c2luZyBhIGRlbGVnYXRlIG9iamVjdCBpbnN0
ZWFkLgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3YWtlX2V2ZXJ5PTAuMSwgd2FrZV9jYWxsYmFj
az1Ob25lLCB0aHJlYWRfZmluaXNoZWRfY2FsbGJhY2s9Tm9uZSk6CisgICAgICAgICIiIgorICAg
ICAgICB3YWtlX2NhbGxiYWNrKCkgPSBjYWxsZWQgZXZlcnkgd2FrZV9ldmVyeSBzZWNvbmRzCisg
ICAgICAgIHRocmVhZF9maW5pc2hlZF9jYWxsYmFjayh0aHJlYWQpID0gY2FsbGVkIHdoZW4gYSB0
aHJlYWQgaGFzIHRlcm1pbmF0ZWQKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3dha2VfZXZl
cnkgPSB3YWtlX2V2ZXJ5CisgICAgICAgIHNlbGYuX3dha2VfY2FsbGJhY2sgPSB3YWtlX2NhbGxi
YWNrCisgICAgICAgIHNlbGYuX3RocmVhZF9maW5pc2hlZF9jYWxsYmFjayA9IHRocmVhZF9maW5p
c2hlZF9jYWxsYmFjaworCisgICAgZGVmIHdhdGNoX3RocmVhZHMoc2VsZiwgdGhyZWFkcyk6Cisg
ICAgICAgICIiIldhdGNoZXMgdGhyZWFkcyB1bnRpbCB0ZXJtaW5hdGlvbi4KKyAgICAgICAgQ2Fs
bGVycyBhcmUgZXhwZWN0ZWQgdG8gcmUtdGhyb3cgZXhjZXB0aW9ucyBmcm9tIHRocmVhZHMgaW4K
KyAgICAgICAgdGhyZWFkX2ZpbmlzaGVkX2NhbGxiYWNrIGlmIGRlc2lyZWQuIiIiCisgICAgICAg
IGFjdGl2ZV90aHJlYWRzID0gdGhyZWFkc1s6XQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3
aGlsZSBhY3RpdmVfdGhyZWFkczoKKyAgICAgICAgICAgICAgICAjIFdhaXQgb24gZWFjaCB0aHJl
YWQgaW4gdHVybiBzbyB3ZSBleGl0IGltbWVkaWF0ZWx5CisgICAgICAgICAgICAgICAgIyBpZiBh
bnkgb25lIHJhaXNlcyBhbiBleGNlcHRpb24uCisgICAgICAgICAgICAgICAgZm9yIHRocmVhZCBp
biBhY3RpdmVfdGhyZWFkc1s6XToKKyAgICAgICAgICAgICAgICAgICAgIyBOb3RlOiAuam9pbiB3
aWxsIHJhaXNlIGlmIHRoZSB0aHJlYWQgd2FzIG5ldmVyIHN0YXJ0ZWQuCisgICAgICAgICAgICAg
ICAgICAgIHRocmVhZC5qb2luKHNlbGYuX3dha2VfZXZlcnkpCisgICAgICAgICAgICAgICAgICAg
IGlmIHNlbGYuX3dha2VfY2FsbGJhY2s6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93
YWtlX2NhbGxiYWNrKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGhyZWFkLmlzQWxpdmUoKToK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGlm
IHNlbGYuX3RocmVhZF9maW5pc2hlZF9jYWxsYmFjazoKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX3RocmVhZF9maW5pc2hlZF9jYWxsYmFjayh0aHJlYWQpCisgICAgICAgICAgICAgICAg
ICAgICMgVGhpcyB0aHJlYWQgaXMgZG9uZSwgc3RvcCB3YWl0aW5nIGZvciBpdC4KKyAgICAgICAg
ICAgICAgICAgICAgYWN0aXZlX3RocmVhZHMucmVtb3ZlKHRocmVhZCkKKyAgICAgICAgZmluYWxs
eToKKyAgICAgICAgICAgICMgTWFrZSBzdXJlIGFsbCB0aHJlYWRzIGFyZSBzdG9wcGVkIGJlZm9y
ZSB3ZSBsZWF2ZSB0aGlzIGZ1bmN0aW9uLgorICAgICAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJl
YWRzOgorICAgICAgICAgICAgICAgIHRocmVhZC5jYW5jZWwoKQpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGhyZWFkd2F0Y2hlcl91bml0dGVz
dC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3RocmVhZHdh
dGNoZXJfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjZlMjcwOTM3YzNmYWY2MDNhYTI5MTU0YzU1
ZmJiNDFjZjEwMWY3MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3RocmVhZHdhdGNoZXJfdW5pdHRlc3QucHkKQEAgLTAsMCArMSw4
NSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1
dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHRocmVhZHdh
dGNoZXIgaW1wb3J0IFRocmVhZFdhdGNoZXIKK2Zyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5tb2Nr
IGltcG9ydCBNb2NrCisKKworY2xhc3MgVGhyZWFkV2F0Y2hlclRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLndha2VfbW9jayA9IE1v
Y2soKQorICAgICAgICBzZWxmLmZpbmlzaGVkX21vY2sgPSBNb2NrKCkKKyAgICAgICAgc2VsZi53
YXRjaGVyID0gVGhyZWFkV2F0Y2hlcih3YWtlX2NhbGxiYWNrPXNlbGYud2FrZV9tb2NrLCB0aHJl
YWRfZmluaXNoZWRfY2FsbGJhY2s9c2VsZi5maW5pc2hlZF9tb2NrKQorCisgICAgZGVmIHRlc3Rf
bnVsbF93YXRjaGVyKHNlbGYpOgorICAgICAgICAjIFRoZSBudWxsIHdhdGNoZXIgc2hvdWxkIGRv
IG5vdGhpbmcuCisgICAgICAgIHNlbGYud2F0Y2hlci53YXRjaF90aHJlYWRzKFtdKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2FrZV9tb2NrLmNhbGxfY291bnQsIDApCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maW5pc2hlZF9tb2NrLmNhbGxfY291bnQsIDApCisKKyAg
ICBkZWYgX21vY2tfdGhyZWFkKHNlbGYsIHN0b3BzX2FmdGVyPTEpOgorICAgICAgICBzdG9wcGlu
Z190aHJlYWQgPSBNb2NrKCkKKyAgICAgICAgc3RvcHBpbmdfdGhyZWFkLmlzQWxpdmVfY2FsbF9j
b3VudCA9IDAKKworICAgICAgICBkZWYgX21vY2tfaXNBbGl2ZSh0aHJlYWQpOgorICAgICAgICAg
ICAgc3RvcHBpbmdfdGhyZWFkLmlzQWxpdmVfY2FsbF9jb3VudCArPSAxCisgICAgICAgICAgICBy
ZXR1cm4gc3RvcHBpbmdfdGhyZWFkLmlzQWxpdmVfY2FsbF9jb3VudCA8PSBzdG9wc19hZnRlcgor
ICAgICAgICBzdG9wcGluZ190aHJlYWQuaXNBbGl2ZSA9IGxhbWJkYTogX21vY2tfaXNBbGl2ZShz
dG9wcGluZ190aHJlYWQpCisgICAgICAgIHJldHVybiBzdG9wcGluZ190aHJlYWQKKworICAgIGRl
ZiB0ZXN0X2FscmVhZHlfc3RvcHBlZF90aHJlYWRzKHNlbGYpOgorICAgICAgICB0aHJlYWQgPSBz
ZWxmLl9tb2NrX3RocmVhZChzdG9wc19hZnRlcj0wKQorICAgICAgICBzZWxmLndhdGNoZXIud2F0
Y2hfdGhyZWFkcyhbdGhyZWFkXSkKKyAgICAgICAgIyBGb3Igbm93IHdlIGFsd2F5cyBjYWxsIGNh
bmNlbCwgZXZlbiBpZiB3ZSBkb24ndCBoYXZlIHRvLgorICAgICAgICBzZWxmLmFzc2VydFRydWUo
dGhyZWFkLmNhbmNlbC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53YWtl
X21vY2suY2FsbF9jb3VudCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZpbmlz
aGVkX21vY2suY2FsbF9jb3VudCwgMSkKKworICAgIGRlZiB0ZXN0X3J1bm5pbmdfdGhyZWFkKHNl
bGYpOgorICAgICAgICB0aHJlYWQgPSBzZWxmLl9tb2NrX3RocmVhZChzdG9wc19hZnRlcj0xKQor
ICAgICAgICBzZWxmLndhdGNoZXIud2F0Y2hfdGhyZWFkcyhbdGhyZWFkXSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCh0aHJlYWQuaXNBbGl2ZV9jYWxsX2NvdW50LCAyKQorICAgICAgICBzZWxm
LmFzc2VydFRydWUodGhyZWFkLmNhbmNlbC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi53YWtlX21vY2suY2FsbF9jb3VudCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzZWxmLmZpbmlzaGVkX21vY2suY2FsbF9jb3VudCwgMSkKKworICAgIGRlZiB0ZXN0X2pvaW5f
ZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB0aHJlYWQgPSBzZWxmLl9tb2NrX3RocmVhZChzdG9w
c19hZnRlcj0xMCkKKyAgICAgICAgdGhyZWFkMiA9IHNlbGYuX21vY2tfdGhyZWFkKHN0b3BzX2Fm
dGVyPTEwKQorCisgICAgICAgIGRlZiBfbW9ja19qb2luKCk6CisgICAgICAgICAgICByYWlzZSBF
eGNlcHRpb24KKyAgICAgICAgdGhyZWFkMi5qb2luID0gX21vY2tfam9pbgorICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIHNlbGYud2F0Y2hlci53YXRjaF90aHJlYWRzLCBbdGhy
ZWFkLCB0aHJlYWQyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRocmVhZC5jYW5jZWwuY2Fs
bGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGhyZWFkMi5jYW5jZWwuY2FsbGVkKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2FrZV9tb2NrLmNhbGxfY291bnQsIDEpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maW5pc2hlZF9tb2NrLmNhbGxfY291bnQsIDApCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55197</attachid>
            <date>2010-05-05 19:39:18 -0700</date>
            <delta_ts>2010-06-22 19:09:01 -0700</delta_ts>
            <desc>fix ungrammar and ChangeLog</desc>
            <filename>bug-38561-20100505193915.patch</filename>
            <type>text/plain</type>
            <size>27183</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAwY2UyNTM1ZWE1ZmUxOWY3ZjAwMmEwYTUwZTc0ZWNhMTc3N2EwZWJiLi41YjNjMTky
MjE0YmJlNzYxY2QyMmI0YzdhMTE5YjAwYzQ5NDlmMmQ3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDMgQEAK
IDIwMTAtMDUtMDQgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIG5ldy1ydW4td2Via2l0LXRlc3Rz
IHNob3VsZCBjaGVjayBlYWNoIHRocmVhZCBmb3IgZXhjZXB0aW9ucyBpbnN0ZWFkIG9mIGp1c3Qg
dGhlIGZpcnN0IG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Mzg1NjEKKworICAgICAgICBPdXIgb2xkIGJlaGF2aW9yIHdhcyB0byBjYWxsIGpvaW4g
b25seSBvbiB0aGUgZmlyc3QgdGhyZWFkIGluIHRoZSBsaXN0CisgICAgICAgIHdoaWNoIG1lYW50
IHRoYXQgaWYgYSBsYXRlciB0aHJlYWQgdGhyZXcgYW4gZXhjZXB0aW9uIG9yIGZpbmlzaGVkIGZp
cnN0CisgICAgICAgIHdlIHdvdWxkIG5vdCBub3RpY2UgdW50aWwgdGhlIGZpcnN0IHRocmVhZCBo
YWQgZmluaXNoZWQuCisKKyAgICAgICAgVGhpcyBjb2RlIG5vdyBsb29rcyBhdCBlYWNoIHRocmVh
ZCBpbiB0dXJuLCBhbGxvd2luZyB0aGUgVUkgdG8gdXMgdG8gY2F0Y2gKKyAgICAgICAgRXhjZXB0
aW9ucyBmcm9tIHRocmVhZHMgbXVjaCBxdWlja2VyLgorCisgICAgICAgIEluIHRlc3RpbmcgSSBh
bHNvIG5vdGljZWQgdGhhdCBzZXZlcmFsIGFyZ3VtZW50cyB3ZXJlIG5vdCBwcm9wZXJseQorICAg
ICAgICB0eXBlZCBpbiB0aGVpciBvcHRwYXJzZSBkZWNsYXJhdGlvbnMuICBUaGlzIHdhcyBjYXVz
aW5nIG9uZSBvZiBteQorICAgICAgICB0ZXN0cyB0byBmYWlsIGJlY2F1c2UgSSBleHBlY3RlZCBv
cHRpb25zLmNoaWxkX3Byb2Nlc3NlcyB0byBiZSBhbiBpbnQuCisgICAgICAgIEkgZml4ZWQgb3B0
aW9ucy5jaGlsZF9wcm9jZXNzZXMgdG8gYmUgaW50IHR5cGVkIGFuZCBhbGwgYWNjZXNzZXMgb2YK
KyAgICAgICAgdGhhdCBvcHRpb24gdG8gbm90IG5lZWQgaW50KCkuICBUaGVyZSBhcmUgbWFueSBt
b3JlIG9wdGlvbnMgdG8gZml4LCBidXQKKyAgICAgICAgdGhhdCdzIGZvZGRlciBmb3IgYW5vdGhl
ciBzZXBhcmF0ZSBjaGFuZ2UuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weToKKyAgICAgICAg
IC0gQ2hhbmdlIGdldF9leGNlcHRpb25faW5mbyB0byByZXJhaXNlX2V4Y2VwdGlvbiBzbyB0aGF0
CisgICAgICAgICAgIHRoZSBjYWxsZXIgZG9lc24ndCBoYXZlIHRvIGRlYWwgd2l0aCBjcmF6eSBv
YnR1c2UgdHVwbGVzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvd2Vic29ja2V0X3NlcnZlci5weToKKyAgICAgICAgIC0gQWRkIG1pc3NpbmcgZmlsZW1vZGUg
cGFyYW1ldGVyIHRvIG9wZW4oKSBkaXNjb3ZlcmVkIGR1cmluZyB0ZXN0aW5nLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHk6CisgICAg
ICAgICAtIEFkZCBhIG5ldyBUaHJlYWRUaW1pbmdzIGNsYXNzIHRvIGdldCByaWQgb2YgYW5vdGhl
ciBvYnR1c2UgdHVwbGUgcmV0dXJuIHZhbHVlLgorICAgICAgICAgLSBXZSBkb24ndCBuZWVkIHRv
IGNhbGwgaW50KCkgd2hlbiBhY2Nlc3Npbmcgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMKKyAgICAg
ICAgICAgaWYgd2UganVzdCB0ZWxsIG9wdHBhcnNlIHRoYXQgd2UgZXhwZWN0IGFuIGludC4KKyAg
ICAgICAgIC0gTG9nIHdobyBob2xkcyB0aGUgbG9nZ2luZy5fbG9jayBpbiBjYXNlIHdlIHNlZSB0
aGF0IGhhbmcgb24gdGhlIGJvdHMgYWdhaW4uCisgICAgICAgICAtIFVzZSBvdXIgbmV3IFRocmVh
ZFdhdGNoZXIgY2xhc3MgdG8gc2ltcGxpZnkgdGhlIHRocmVhZCB3YXRjaGluZyBjb2RlLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3RocmVhZHdhdGNoZXIucHk6IEFk
ZGVkLgorICAgICAgICAgLSBQdXNoIHRoZSBsb2dpYyBvZiB3YXRjaGluZyBhIHNldCBvZiB0aHJl
YWRzIGZvciB0ZXJtaW5hdGlvbgorICAgICAgICAgICBpbnRvIGl0cyBvd24gY2xhc3Mgc28gaXQg
Y2FuIGJlIGJldHRlciB0ZXN0ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvdGhyZWFkd2F0Y2hlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgICAtIFRlc3Qg
dG8gbWFrZSBzdXJlIFRocmVhZFdhdGNoZXIgYmVoYXZlcyBhcyBhZHZlcnRpc2VkLgorCisyMDEw
LTA1LTA0ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKwogICAgICAgICBSZXZpZXdl
ZCBieSBTaGluaWNoaXJvIEhhbWFqaS4KIAogICAgICAgICBQcmV0dHlQYXRjaC5wcmV0dHlfZGlm
ZigiIikgc2hvdWxkIG5vdCBoYW5nCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVh
ZC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CmluZGV4IDY5NTdmY2Q5OGU1YWMwZGE4
ZGRlYTM5MGM4ODk0ZDc3NTM1NmJjOWUuLmYzNzNkYWQ2MDc5MDRmZGYwYTI4ODY0ZDQyYWQzMWM3
YjlmOWZjYzkgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CisrKyBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1
bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CkBAIC0yMzUsMTIgKzIzNSwxNCBAQCBjbGFzcyBUZXN0
U2hlbGxUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgICAgICIiIlNldCBhIGZsYWcgdGVs
bGluZyB0aGlzIHRocmVhZCB0byBxdWl0LiIiIgogICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IFRy
dWUKIAotICAgIGRlZiBnZXRfZXhjZXB0aW9uX2luZm8oc2VsZik6Ci0gICAgICAgICIiIklmIHJ1
bigpIHRlcm1pbmF0ZWQgb24gYW4gdW5jYXVnaHQgZXhjZXB0aW9uLCByZXR1cm4gaXQgaGVyZQot
ICAgICAgICAoKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spIHR1cGxlKS4KLSAgICAgICAgUmV0dXJu
cyBOb25lIGlmIHJ1bigpIHRlcm1pbmF0ZWQgbm9ybWFsbHkuIE1lYW50IHRvIGJlIGNhbGxlZCBh
ZnRlcgotICAgICAgICBqb2luaW5nIHRoaXMgdGhyZWFkLiIiIgotICAgICAgICByZXR1cm4gc2Vs
Zi5fZXhjZXB0aW9uX2luZm8KKyAgICBkZWYgcmVyYWlzZV9leGNlcHRpb24oc2VsZik6CisgICAg
ICAgICIiIklmIHJ1bigpIHRlcm1pbmF0ZWQgb24gYW4gdW5jYXVnaHQgZXhjZXB0aW9uLCBzZWxm
Ll9leGNlcHRpb25faW5mbworICAgICAgICBpcyBhICh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKSB0
dXBsZS4KKyAgICAgICAgTWVhbnQgdG8gYmUgY2FsbGVkIGFmdGVyIGpvaW5pbmcgdGhpcyB0aHJl
YWQuIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl9leGNlcHRpb25faW5mbzoKKyAgICAgICAgICAg
IF9sb2cuaW5mbygiJXMgdGVybWluYXRlZCBub3JtYWxseSIgJSBzZWxmLmdldE5hbWUoKSkKKyAg
ICAgICAgICAgIHJldHVybgorICAgICAgICByYWlzZSBzZWxmLl9leGNlcHRpb25faW5mb1swXSwg
c2VsZi5fZXhjZXB0aW9uX2luZm9bMV0sIHNlbGYuX2V4Y2VwdGlvbl9pbmZvWzJdCiAKICAgICBk
ZWYgZ2V0X3RvdGFsX3RpbWUoc2VsZik6CiAgICAgICAgIHJldHVybiBtYXgoc2VsZi5fc3RvcF90
aW1lIC0gc2VsZi5fc3RhcnRfdGltZSwgMC4wKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2Vy
dmVyLnB5CmluZGV4IGFkNTU3YmRlOWNmYmQ5Y2NlZDA3MzkyYzJhMDViZjRjMjcxNDMzMmEuLjk3
ZDg2ODY2YWZlYmU2YTczZDY4NjkzMGI0ZjYxOTM5NzRlMGFhYmYgMTAwNjQ0Ci0tLSBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZl
ci5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L3dlYnNvY2tldF9zZXJ2ZXIucHkKQEAgLTIyMCw3ICsyMjAsNyBAQCBjbGFzcyBQeVdlYlNvY2tl
dChodHRwX3NlcnZlci5MaWdodHRwZCk6CiAgICAgICAgICAgICB1cmwgPSAnaHR0cCcKICAgICAg
ICAgdXJsID0gdXJsICsgJzovLzEyNy4wLjAuMTolZC8nICUgc2VsZi5fcG9ydAogICAgICAgICBp
ZiBub3QgdXJsX2lzX2FsaXZlKHVybCk6Ci0gICAgICAgICAgICBmcCA9IGNvZGVjcy5vcGVuKG91
dHB1dF9sb2csICJ1dGYtOCIpCisgICAgICAgICAgICBmcCA9IGNvZGVjcy5vcGVuKG91dHB1dF9s
b2csICJyIiwgInV0Zi04IikKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmb3Ig
bGluZSBpbiBmcDoKICAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcihsaW5lKQpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0cy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHMucHkKaW5kZXggNzdmZGE3MmViOTZmYmQ1ZjJmNjRjNDBjY2UyYzAxMmI5
NGEyNjE5Ny4uZDM1MjY4MWRmYTczOGQ1M2Y3YTA0NDIyMTk1NjgzNTkzNWRjNDUzYiAxMDA3NTUK
LS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0cy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC03NCw3ICs3NCw5IEBAIGZyb20gdGVzdF90eXBlcyBp
bXBvcnQgdGVzdF90eXBlX2Jhc2UKIGZyb20gdGVzdF90eXBlcyBpbXBvcnQgdGV4dF9kaWZmCiAK
IGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZQor
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudGhyZWFkd2F0Y2hlciBpbXBvcnQgVGhyZWFkV2F0
Y2hlcgogZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5IGltcG9ydCBzaW1wbGVqc29uCitmcm9tIHdl
YmtpdHB5LnRvb2wuZ3JhbW1hciBpbXBvcnQgcGx1cmFsaXplCiAKIGltcG9ydCBwb3J0CiAKQEAg
LTI0Miw2ICsyNDQsMzIgQEAgZGVmIHN1bW1hcml6ZV91bmV4cGVjdGVkX3Jlc3VsdHMocG9ydF9v
YmosIGV4cGVjdGF0aW9ucywgcmVzdWx0X3N1bW1hcnksCiAgICAgcmV0dXJuIHJlc3VsdHMKIAog
CitjbGFzcyBUaHJlYWRUaW1pbmdzKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgor
ICAgICAgICAjIEZJWE1FOiBUaGlzIG9iamVjdCBpcyByZXBsYWNpbmcgYSB0dXBsZS4KKyAgICAg
ICAgIyBUbyBtYWtlIHRoaW5ncyBlYXN5LCBJJ3ZlIGxlZnQgdGhlIG1lbWJlciBuYW1lcyB0aGUK
KyAgICAgICAgIyBzYW1lIGFzIHRoZSB0dXBsZSBuYW1lcywgYnV0IHdlIG1heSB3aXNoIHRvIHB1
c2gKKyAgICAgICAgIyBtb3JlIGxvZ2ljIGludG8gdGhpcyBjbGFzcyBhbmQgbWFrZSB0aGVzZSBt
ZW1iZXJzIHByaXZhdGUuCisgICAgICAgICIiIgorICAgICAgICB0aHJlYWRfdGltaW5nczogd2Fs
bCBjbG9jayB0aW1lIGVhY2ggdGhyZWFkIHJhbiBmb3IKKyAgICAgICAgZGlyZWN0b3J5X3Rlc3Rf
dGltaW5nczogdGltaW5ncyBieSBkaXJlY3RvcnkKKyAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3Rp
bWluZ3M6IHRpbWluZ3MgYnkgZmlsZQorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi50aHJlYWRf
dGltaW5ncyA9IFtdCisgICAgICAgIHNlbGYuZGlyZWN0b3J5X3Rlc3RfdGltaW5ncyA9IHt9Cisg
ICAgICAgIHNlbGYuaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MgPSBbXQorCisgICAgZGVmIHVwZGF0
ZV9mcm9tX3RocmVhZChzZWxmLCB0aHJlYWQpOgorICAgICAgICB0aHJlYWRfdGltaW5nID0gewor
ICAgICAgICAgICAgIm5hbWUiOiB0aHJlYWQuZ2V0TmFtZSgpLAorICAgICAgICAgICAgIm51bV90
ZXN0cyI6IHRocmVhZC5nZXRfbnVtX3Rlc3RzKCksCisgICAgICAgICAgICAidG90YWxfdGltZSI6
IHRocmVhZC5nZXRfdG90YWxfdGltZSgpLAorICAgICAgICB9CisgICAgICAgIHNlbGYudGhyZWFk
X3RpbWluZ3MuYXBwZW5kKHRocmVhZF90aW1pbmcpCisgICAgICAgIHNlbGYuZGlyZWN0b3J5X3Rl
c3RfdGltaW5ncy51cGRhdGUodGhyZWFkLmdldF9kaXJlY3RvcnlfdGltaW5nX3N0YXRzKCkpCisg
ICAgICAgIHNlbGYuaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MuZXh0ZW5kKHRocmVhZC5nZXRfdGVz
dF9yZXN1bHRzKCkpCisKKwogY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAiIiJBIGNsYXNzIGZvciBt
YW5hZ2luZyBydW5uaW5nIGEgc2VyaWVzIG9mIHRlc3RzIG9uIGEgc2VyaWVzIG9mIGxheW91dAog
ICAgIHRlc3QgZmlsZXMuIiIiCkBAIC02MDIsNyArNjMwLDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoK
IAogICAgICAgICAjIEluc3RhbnRpYXRlIFRlc3RTaGVsbFRocmVhZHMgYW5kIHN0YXJ0IHRoZW0u
CiAgICAgICAgIHRocmVhZHMgPSBbXQotICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoaW50KHNlbGYu
X29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSk6CisgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxm
Ll9vcHRpb25zLmNoaWxkX3Byb2Nlc3Nlcyk6CiAgICAgICAgICAgICAjIENyZWF0ZSBzZXBhcmF0
ZSBUZXN0VHlwZXMgaW5zdGFuY2VzIGZvciBlYWNoIHRocmVhZC4KICAgICAgICAgICAgIHRlc3Rf
dHlwZXMgPSBbXQogICAgICAgICAgICAgZm9yIHRlc3RfdHlwZSBpbiBzZWxmLl90ZXN0X3R5cGVz
OgpAQCAtNjE1LDcgKzY0Myw5IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgICAg
ZmlsZW5hbWVfcXVldWUsIHNlbGYuX3Jlc3VsdF9xdWV1ZSwgdGVzdF90eXBlcywgdGVzdF9hcmdz
LAogICAgICAgICAgICAgICAgIHBuZ19wYXRoLCBzaGVsbF9hcmdzLCBzZWxmLl9vcHRpb25zKQog
ICAgICAgICAgICAgaWYgc2VsZi5faXNfc2luZ2xlX3RocmVhZGVkKCk6CisgICAgICAgICAgICAg
ICAgIyBGSVhNRTogVGhpcyBpcyBhIGhvcnJpYmxlIGhhY2sgYW5kIHNob3VsZCBiZSBtb3ZlZC9y
ZW1vdmVkLgogICAgICAgICAgICAgICAgIHRocmVhZC5ydW5faW5fbWFpbl90aHJlYWQoc2VsZiwg
cmVzdWx0X3N1bW1hcnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgICAgICBl
bHNlOgogICAgICAgICAgICAgICAgIHRocmVhZC5zdGFydCgpCiAgICAgICAgICAgICB0aHJlYWRz
LmFwcGVuZCh0aHJlYWQpCkBAIC02MjQsNyArNjU0LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKIAog
ICAgIGRlZiBfaXNfc2luZ2xlX3RocmVhZGVkKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5zIHdo
ZXRoZXIgd2Ugc2hvdWxkIHJ1biBhbGwgdGhlIHRlc3RzIGluIHRoZSBtYWluIHRocmVhZC4iIiIK
LSAgICAgICAgcmV0dXJuIGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykgPT0gMQor
ICAgICAgICByZXR1cm4gc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPT0gMQogCiAgICAg
ZGVmIF9kdW1wX3RocmVhZF9zdGF0ZXMoc2VsZik6CiAgICAgICAgIGZvciB0aHJlYWRfaWQsIHN0
YWNrIGluIHN5cy5fY3VycmVudF9mcmFtZXMoKS5pdGVtcygpOgpAQCAtNjQ3LDc4ICs2NzcsNDIg
QEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgdGltZV9zaW5jZV9sYXN0X2R1bXAgPSB0aW1l
LnRpbWUoKSAtIHNlbGYuX2xhc3RfdGhyZWFkX2R1bXAKICAgICAgICAgaWYgIHRpbWVfc2luY2Vf
bGFzdF9kdW1wID4gZHVtcF90aHJlYWRzX2V2ZXJ5OgogICAgICAgICAgICAgc2VsZi5fZHVtcF90
aHJlYWRfc3RhdGVzKCkKKyAgICAgICAgICAgICMgV2UndmUgc2VlbiBoYW5ncyB3aGVyZSBhbGwg
dGhyZWFkcyBhcmUgaHVuZyB3YWl0aW5nIG9uCisgICAgICAgICAgICAjIGxvZ2dpbmcuX2xvY2su
ICBJdCBpcyB1c2VmdWwgdG8ga25vdyB3aG8gaXMgaG9sZGluZyB0aGUKKyAgICAgICAgICAgICMg
bG9jayBpbiB0aGF0IGNhc2UuCisgICAgICAgICAgICBwcmludCAiXG5sb2dnaW5nLl9sb2NrOiAl
c1xuIiAlIGxvZ2dpbmcuX2xvY2sKICAgICAgICAgICAgIHNlbGYuX2xhc3RfdGhyZWFkX2R1bXAg
PSB0aW1lLnRpbWUoKQogCiAgICAgZGVmIF9ydW5fdGVzdHMoc2VsZiwgZmlsZV9saXN0LCByZXN1
bHRfc3VtbWFyeSk6CiAgICAgICAgICIiIlJ1bnMgdGhlIHRlc3RzIGluIHRoZSBmaWxlX2xpc3Qu
Ci0KLSAgICAgICAgUmV0dXJuOiBBIHR1cGxlIChmYWlsdXJlcywgdGhyZWFkX3RpbWluZ3MsIHRl
c3RfdGltaW5ncywKLSAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQotICAgICAg
ICAgICAgZmFpbHVyZXMgaXMgYSBtYXAgZnJvbSB0ZXN0IHRvIGxpc3Qgb2YgZmFpbHVyZSB0eXBl
cwotICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3MgaXMgYSBsaXN0IG9mIGRpY3RzIHdpdGggdGhl
IHRvdGFsIHJ1bnRpbWUKLSAgICAgICAgICAgICAgb2YgZWFjaCB0aHJlYWQgd2l0aCAnbmFtZScs
ICdudW1fdGVzdHMnLCAndG90YWxfdGltZScgcHJvcGVydGllcwotICAgICAgICAgICAgdGVzdF90
aW1pbmdzIGlzIGEgbGlzdCBvZiB0aW1pbmdzIGZvciBlYWNoIHNoYXJkZWQgc3ViZGlyZWN0b3J5
Ci0gICAgICAgICAgICAgIG9mIHRoZSBmb3JtIFt0aW1lLCBkaXJlY3RvcnlfbmFtZSwgbnVtX3Rl
c3RzXQotICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MgaXMgYSBsaXN0IG9mIHJ1
biB0aW1lcyBmb3IgZWFjaCB0ZXN0Ci0gICAgICAgICAgICAgIGluIHRoZSBmb3JtIHtmaWxlbmFt
ZTpmaWxlbmFtZSwgdGVzdF9ydW5fdGltZTp0ZXN0X3J1bl90aW1lfQotICAgICAgICAgICAgcmVz
dWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IHRvIHBvcHVsYXRlIHdpdGggdGhlIHJlc3VsdHMK
KyAgICAgICAgQWRkcyByZXN1bHRzIGludG8gcmVzdWx0X3N1bW1hcnkuCisgICAgICAgIFJldHVy
bnMgYSBUaHJlYWRUaW1pbmdzIG9iamVjdC4KICAgICAgICAgIiIiCi0gICAgICAgICMgRklYTUU6
IFdlIHNob3VsZCB1c2Ugd2Via2l0cHkudG9vbC5ncmFtbWFyLnBsdXJhbGl6ZSBoZXJlLgotICAg
ICAgICBwbHVyYWwgPSAiIgotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3Nl
cyA+IDE6Ci0gICAgICAgICAgICBwbHVyYWwgPSAicyIKLSAgICAgICAgc2VsZi5fcHJpbnRlci5w
cmludF91cGRhdGUoJ1N0YXJ0aW5nICVzJXMgLi4uJyAlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChzZWxmLl9wb3J0LmRyaXZlcl9uYW1lKCksIHBsdXJhbCkpCi0gICAgICAg
IHRocmVhZHMgPSBzZWxmLl9pbnN0YW50aWF0ZV9kdW1wX3JlbmRlcl90cmVlX3RocmVhZHMoZmls
ZV9saXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICBzZWxmLl9wcmludGVyLnByaW50
X3VwZGF0ZSgiU3RhcnRpbmcgdGVzdGluZyAuLi4iKQotCi0gICAgICAgICMgV2FpdCBmb3IgdGhl
IHRocmVhZHMgdG8gZmluaXNoIGFuZCBjb2xsZWN0IHRlc3QgZmFpbHVyZXMuCi0gICAgICAgIGZh
aWx1cmVzID0ge30KLSAgICAgICAgdGVzdF90aW1pbmdzID0ge30KLSAgICAgICAgaW5kaXZpZHVh
bF90ZXN0X3RpbWluZ3MgPSBbXQotICAgICAgICB0aHJlYWRfdGltaW5ncyA9IFtdCi0gICAgICAg
IHRyeToKLSAgICAgICAgICAgICMgTG9vcCB0aHJvdWdoIGFsbCB0aGUgdGhyZWFkcyB3YWl0aW5n
IGZvciB0aGVtIHRvIGZpbmlzaC4KLSAgICAgICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoK
LSAgICAgICAgICAgICAgICAjIEZJWE1FOiBXZSdsbCBlbmQgdXAgd2FpdGluZyBvbiB0aGUgZmly
c3QgdGhyZWFkIHRoZSB3aG9sZQotICAgICAgICAgICAgICAgICMgdGltZS4gIFRoYXQgbWVhbnMg
d2Ugd29uJ3Qgbm90aWNlIGV4Y2VwdGlvbnMgb24gb3RoZXIKLSAgICAgICAgICAgICAgICAjIHRo
cmVhZHMgdW50aWwgdGhlIGZpcnN0IG9uZSBleGl0cy4KLSAgICAgICAgICAgICAgICAjIFdlIHNo
b3VsZCBpbnN0ZWFkIHdoaWxlIFRydWU6IGluIHRoZSBvdXRlciBsb29wCi0gICAgICAgICAgICAg
ICAgIyBhbmQgdGhlbiBsb29wIHRocm91Z2ggdGhyZWFkcyBqb2luaW5nIGFuZCBjaGVja2luZwot
ICAgICAgICAgICAgICAgICMgaXNBbGl2ZSBhbmQgZ2V0X2V4Y2VwdGlvbl9pbmZvLiAgRXhpdGlu
ZyBvbiBhbnkgZXhjZXB0aW9uLgotICAgICAgICAgICAgICAgIHdoaWxlIHRocmVhZC5pc0FsaXZl
KCk6Ci0gICAgICAgICAgICAgICAgICAgICMgV2FrZSB0aGUgbWFpbiB0aHJlYWQgZXZlcnkgMC4x
IHNlY29uZHMgc28gd2UKLSAgICAgICAgICAgICAgICAgICAgIyBjYW4gY2FsbCB1cGRhdGVfc3Vt
bWFyeSBpbiBhIHRpbWVseSBmYXNoaW9uLgotICAgICAgICAgICAgICAgICAgICB0aHJlYWQuam9p
bigwLjEpCi0gICAgICAgICAgICAgICAgICAgICMgSEFDSzogVXNlZCBmb3IgZGVidWdnaW5nIHRo
cmVhZHMgb24gdGhlIGJvdHMuCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2R1bXBfdGhyZWFk
X3N0YXRlc19pZl9uZWNlc3NhcnkoKQotICAgICAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9z
dW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQotCi0gICAgICAgICAgICAgICAgIyBUaGlzIHRocmVhZCBp
cyBkb25lLCBzYXZlIG9mZiB0aGUgdGltaW5nIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgICAg
IHRocmVhZF90aW1pbmdzLmFwcGVuZCh7J25hbWUnOiB0aHJlYWQuZ2V0TmFtZSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ251bV90ZXN0cyc6IHRocmVhZC5nZXRf
bnVtX3Rlc3RzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG90
YWxfdGltZSc6IHRocmVhZC5nZXRfdG90YWxfdGltZSgpfSkKLSAgICAgICAgICAgICAgICB0ZXN0
X3RpbWluZ3MudXBkYXRlKHRocmVhZC5nZXRfZGlyZWN0b3J5X3RpbWluZ19zdGF0cygpKQotICAg
ICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLmV4dGVuZCh0aHJlYWQuZ2V0X3Rl
c3RfcmVzdWx0cygpKQotICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAg
ICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6Ci0gICAgICAgICAgICAgICAgdGhyZWFkLmNhbmNl
bCgpCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6Ci0g
ICAgICAgICAgICAjIENoZWNrIHdoZXRoZXIgYSBUZXN0U2hlbGxUaHJlYWQgZGllZCBiZWZvcmUg
bm9ybWFsIGNvbXBsZXRpb24uCi0gICAgICAgICAgICBleGNlcHRpb25faW5mbyA9IHRocmVhZC5n
ZXRfZXhjZXB0aW9uX2luZm8oKQotICAgICAgICAgICAgaWYgZXhjZXB0aW9uX2luZm8gaXMgbm90
IE5vbmU6Ci0gICAgICAgICAgICAgICAgIyBSZS1yYWlzZSB0aGUgdGhyZWFkJ3MgZXhjZXB0aW9u
IGhlcmUgdG8gbWFrZSBpdCBjbGVhciB0aGF0Ci0gICAgICAgICAgICAgICAgIyB0ZXN0aW5nIHdh
cyBhYm9ydGVkLiBPdGhlcndpc2UsIHRoZSB0ZXN0cyB0aGF0IGRpZCBub3QgcnVuCi0gICAgICAg
ICAgICAgICAgIyB3b3VsZCBiZSBhc3N1bWVkIHRvIGhhdmUgcGFzc2VkLgotICAgICAgICAgICAg
ICAgIHJhaXNlIGV4Y2VwdGlvbl9pbmZvWzBdLCBleGNlcHRpb25faW5mb1sxXSwgZXhjZXB0aW9u
X2luZm9bMl0KLQotICAgICAgICAjIEZJWE1FOiBUaGlzIHVwZGF0ZV9zdW1tYXJ5IGNhbGwgc2Vl
bXMgdW5lY2Vzc2FyeS4KLSAgICAgICAgIyBDYWxscyBhcmUgYWxyZWFkeSBtYWRlIHJpZ2h0IGFm
dGVyIGpvaW4oKSBhYm92ZSwKLSAgICAgICAgIyBhcyB3ZWxsIGFzIGZyb20gdGhlIGluZGl2aWR1
YWwgdGhyZWFkcyB0aGVtc2VsdmVzLgotICAgICAgICBzZWxmLnVwZGF0ZV9zdW1tYXJ5KHJlc3Vs
dF9zdW1tYXJ5KQotICAgICAgICByZXR1cm4gKHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3Ms
IGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQorICAgICAgICBkcml2ZXJfY291bnQgPSBwbHVyYWxp
emUoc2VsZi5fcG9ydC5kcml2ZXJfbmFtZSgpLCBzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3Nl
cykKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoIlN0YXJ0aW5nICVzIC4uLiIg
JSBkcml2ZXJfY291bnQpCisgICAgICAgIHRocmVhZHMgPSBzZWxmLl9pbnN0YW50aWF0ZV9kdW1w
X3JlbmRlcl90cmVlX3RocmVhZHMoZmlsZV9saXN0LCByZXN1bHRfc3VtbWFyeSkKKyAgICAgICAg
IyBGSVhNRTogVGhpcyBtZXNzYWdlIGlzIHdyb25nIGluIHNpbmdsZS10aHJlYWRlZCBtb2RlLiAg
VGhlbiBhZ2FpbiwgcHJvYmFibHkKKyAgICAgICAgIyBhbGwgdGhpcyBjb2RlIGlzIHdyb25nIGlu
IHNpbmdsZSB0aHJlYWRlZCBtb2RlIHNpbmNlIGl0J3Mgb25lIGdpZ2FudGljIGhhY2suCisgICAg
ICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJBbGwgdGhyZWFkcyBzdGFydGVkIC4uLiIp
CisgICAgICAgIHRocmVhZF90aW1pbmdzID0gVGhyZWFkVGltaW5ncygpCisKKyAgICAgICAgZGVm
IF9kaWRfd2FrZSgpOgorICAgICAgICAgICAgIyBIQUNLOiBVc2VkIGZvciBkZWJ1Z2dpbmcgdGhy
ZWFkcyBvbiB0aGUgYm90cy4KKyAgICAgICAgICAgIHNlbGYuX2R1bXBfdGhyZWFkX3N0YXRlc19p
Zl9uZWNlc3NhcnkoKQorICAgICAgICAgICAgc2VsZi51cGRhdGVfc3VtbWFyeShyZXN1bHRfc3Vt
bWFyeSkKKworICAgICAgICBkZWYgX3RocmVhZF9maW5pc2hlZCh0aHJlYWQpOgorICAgICAgICAg
ICAgIyBSZS1yYWlzZSBhbnkgZXhjZXB0aW9uIHRvIG1ha2UgY2xlYXIgdGhhdCBhIHRocmVhZCBh
Ym9ydGVkCisgICAgICAgICAgICAjIGFuZCBhbnkgbm90LXlldC1ydW4gdGVzdHMgc2hvdWxkIG5v
dCBiZSBhc3N1bWVkIHRvIHBhc3MuCisgICAgICAgICAgICB0aHJlYWQucmVyYWlzZV9leGNlcHRp
b24oKQorICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3MudXBkYXRlX2Zyb21fdGhyZWFkKHRocmVh
ZCkKKworICAgICAgICB3YXRjaGVyID0gVGhyZWFkV2F0Y2hlcih3YWtlX2NhbGxiYWNrPV9kaWRf
d2FrZSwKKyAgICAgICAgICAgIHRocmVhZF9maW5pc2hlZF9jYWxsYmFjaz1fdGhyZWFkX2Zpbmlz
aGVkKQorCisgICAgICAgIHdhdGNoZXIud2F0Y2hfdGhyZWFkcyh0aHJlYWRzKQorCisgICAgICAg
IHJldHVybiB0aHJlYWRfdGltaW5ncwogCiAgICAgZGVmIG5lZWRzX2h0dHAoc2VsZik6CiAgICAg
ICAgICIiIlJldHVybnMgd2hldGhlciB0aGUgdGVzdCBydW5uZXIgbmVlZHMgYW4gSFRUUCBzZXJ2
ZXIuIiIiCkBAIC03NTAsOCArNzQ0LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAg
IHNlbGYuX3BvcnQuc3RhcnRfd2Vic29ja2V0X3NlcnZlcigpCiAgICAgICAgICAgICAjIHNlbGYu
X3dlYnNvY2tldF9zZWN1cmVfc2VydmVyLlN0YXJ0KCkKIAotICAgICAgICB0aHJlYWRfdGltaW5n
cywgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyA9ICgKLSAgICAgICAgICAg
IHNlbGYuX3J1bl90ZXN0cyhzZWxmLl90ZXN0X2ZpbGVzX2xpc3QsIHJlc3VsdF9zdW1tYXJ5KSkK
KyAgICAgICAgdGhyZWFkX3RpbWluZ3MgPSBzZWxmLl9ydW5fdGVzdHMoc2VsZi5fdGVzdF9maWxl
c19saXN0LCByZXN1bHRfc3VtbWFyeSkKIAogICAgICAgICAjIFdlIGV4Y2x1ZGUgdGhlIGNyYXNo
ZXMgZnJvbSB0aGUgbGlzdCBvZiByZXN1bHRzIHRvIHJldHJ5LCBiZWNhdXNlCiAgICAgICAgICMg
d2Ugd2FudCB0byB0cmVhdCBldmVuIGEgcG90ZW50aWFsbHkgZmxha3kgY3Jhc2ggYXMgYW4gZXJy
b3IuCkBAIC03NzAsOCArNzYzLDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgZW5kX3Rp
bWUgPSB0aW1lLnRpbWUoKQogCiAgICAgICAgIHNlbGYuX3ByaW50X3RpbWluZ19zdGF0aXN0aWNz
KGVuZF90aW1lIC0gc3RhcnRfdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZF90aW1pbmdzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKIAogICAgICAgICBzZWxmLl9w
cmludF9yZXN1bHRfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKQEAgLTc4OCw3ICs3ODAsNyBAQCBj
bGFzcyBUZXN0UnVubmVyOgogCiAgICAgICAgICMgV3JpdGUgdGhlIHNhbWUgZGF0YSB0byBsb2cg
ZmlsZXMuCiAgICAgICAgIHNlbGYuX3dyaXRlX2pzb25fZmlsZXModW5leHBlY3RlZF9yZXN1bHRz
LCByZXN1bHRfc3VtbWFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaXZpZHVh
bF90ZXN0X3RpbWluZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZF90aW1p
bmdzLmluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQogCiAgICAgICAgICMgV3JpdGUgdGhlIHN1bW1h
cnkgdG8gZGlzayAocmVzdWx0cy5odG1sKSBhbmQgZGlzcGxheSBpdCBpZiByZXF1ZXN0ZWQuCiAg
ICAgICAgIHdyb3RlX3Jlc3VsdHMgPSBzZWxmLl93cml0ZV9yZXN1bHRzX2h0bWxfZmlsZShyZXN1
bHRfc3VtbWFyeSkKQEAgLTkxMCwxNSArOTAyLDEyIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAg
ICAgIHJldHVybiBuZGlnaXRzCiAKICAgICBkZWYgX3ByaW50X3RpbWluZ19zdGF0aXN0aWNzKHNl
bGYsIHRvdGFsX3RpbWUsIHRocmVhZF90aW1pbmdzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpcmVjdG9yeV90ZXN0X3RpbWluZ3MsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAg
IiIiUmVjb3JkIHRpbWluZy1zcGVjaWZpYyBpbmZvcm1hdGlvbiBmb3IgdGhlIHRlc3QgcnVuLgog
CiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAgdG90YWxfdGltZTogdG90YWwgZWxhcHNlZCB0aW1l
IChpbiBzZWNvbmRzKSBmb3IgdGhlIHRlc3QgcnVuCi0gICAgICAgICAgdGhyZWFkX3RpbWluZ3M6
IHdhbGwgY2xvY2sgdGltZSBlYWNoIHRocmVhZCByYW4gZm9yCi0gICAgICAgICAgZGlyZWN0b3J5
X3Rlc3RfdGltaW5nczogdGltaW5nIGJ5IGRpcmVjdG9yeQotICAgICAgICAgIGluZGl2aWR1YWxf
dGVzdF90aW1pbmdzOiB0aW1pbmcgYnkgZmlsZQorICAgICAgICAgIHRocmVhZF90aW1pbmdzOiBv
YmplY3QgY29udGFpbmluZyBwZXIgdGhyZWFkIHRpbWluZyBpbmZvcm1hdGlvbgogICAgICAgICAg
IHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCBmb3IgdGhlIHRlc3QgcnVuCiAgICAgICAg
ICIiIgogICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiVGVzdCB0aW1pbmc6IikK
QEAgLTkyNiwxOCArOTE1LDE4IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIHNlbGYuX3By
aW50ZXIucHJpbnRfdGltaW5nKCIiKQogICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWlu
ZygiVGhyZWFkIHRpbWluZzoiKQogICAgICAgICBjdW1sX3RpbWUgPSAwCi0gICAgICAgIGZvciB0
IGluIHRocmVhZF90aW1pbmdzOgorICAgICAgICBmb3IgdCBpbiB0aHJlYWRfdGltaW5ncy50aHJl
YWRfdGltaW5nczoKICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIgICAg
JTEwczogJTVkIHRlc3RzLCAlNi4yZiBzZWNzIiAlCiAgICAgICAgICAgICAgICAgICAodFsnbmFt
ZSddLCB0WydudW1fdGVzdHMnXSwgdFsndG90YWxfdGltZSddKSkKICAgICAgICAgICAgIGN1bWxf
dGltZSArPSB0Wyd0b3RhbF90aW1lJ10KICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1p
bmcoIiAgICU2LjJmIGN1bXVsYXRpdmUsICU2LjJmIG9wdGltYWwiICUKLSAgICAgICAgICAgICAg
KGN1bWxfdGltZSwgY3VtbF90aW1lIC8gaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2Vz
KSkpCisgICAgICAgICAgICAgIChjdW1sX3RpbWUsIGN1bWxfdGltZSAvIHNlbGYuX29wdGlvbnMu
Y2hpbGRfcHJvY2Vzc2VzKSkKICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiIp
CiAKLSAgICAgICAgc2VsZi5fcHJpbnRfYWdncmVnYXRlX3Rlc3Rfc3RhdGlzdGljcyhpbmRpdmlk
dWFsX3Rlc3RfdGltaW5ncykKLSAgICAgICAgc2VsZi5fcHJpbnRfaW5kaXZpZHVhbF90ZXN0X3Rp
bWVzKGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAorICAgICAgICBzZWxmLl9wcmludF9hZ2dyZWdh
dGVfdGVzdF9zdGF0aXN0aWNzKHRocmVhZF90aW1pbmdzLmluZGl2aWR1YWxfdGVzdF90aW1pbmdz
KQorICAgICAgICBzZWxmLl9wcmludF9pbmRpdmlkdWFsX3Rlc3RfdGltZXModGhyZWFkX3RpbWlu
Z3MuaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKLSAgICAgICAgc2VsZi5fcHJpbnRfZGlyZWN0
b3J5X3RpbWluZ3MoZGlyZWN0b3J5X3Rlc3RfdGltaW5ncykKKyAgICAgICAgc2VsZi5fcHJpbnRf
ZGlyZWN0b3J5X3RpbWluZ3ModGhyZWFkX3RpbWluZ3MuZGlyZWN0b3J5X3Rlc3RfdGltaW5ncykK
IAogICAgIGRlZiBfcHJpbnRfYWdncmVnYXRlX3Rlc3Rfc3RhdGlzdGljcyhzZWxmLCBpbmRpdmlk
dWFsX3Rlc3RfdGltaW5ncyk6CiAgICAgICAgICIiIlByaW50cyBhZ2dyZWdhdGUgc3RhdGlzdGlj
cyAoZS5nLiBtZWRpYW4sIG1lYW4sIGV0Yy4pIGZvciBhbGwgdGVzdHMuCkBAIC0xMjU4LDcgKzEy
NDcsNyBAQCBkZWYgcnVuKHBvcnRfb2JqLCBvcHRpb25zLCBhcmdzLCByZWd1bGFyX291dHB1dD1z
eXMuc3RkZXJyLAogCiAgICAgcHJpbnRlciA9IHByaW50aW5nLlByaW50ZXIocG9ydF9vYmosIG9w
dGlvbnMsIHJlZ3VsYXJfb3V0cHV0PXJlZ3VsYXJfb3V0cHV0LAogICAgICAgICBidWlsZGJvdF9v
dXRwdXQ9YnVpbGRib3Rfb3V0cHV0LAotICAgICAgICBjaGlsZF9wcm9jZXNzZXM9aW50KG9wdGlv
bnMuY2hpbGRfcHJvY2Vzc2VzKSwKKyAgICAgICAgY2hpbGRfcHJvY2Vzc2VzPW9wdGlvbnMuY2hp
bGRfcHJvY2Vzc2VzLAogICAgICAgICBpc19mdWxseV9wYXJhbGxlbD1vcHRpb25zLmV4cGVyaW1l
bnRhbF9mdWxseV9wYXJhbGxlbCkKICAgICBpZiBvcHRpb25zLmhlbHBfcHJpbnRpbmc6CiAgICAg
ICAgIHByaW50ZXIuaGVscF9wcmludGluZygpCkBAIC0xMzE0LDExICsxMzAzLDExIEBAIGRlZiBy
dW4ocG9ydF9vYmosIG9wdGlvbnMsIGFyZ3MsIHJlZ3VsYXJfb3V0cHV0PXN5cy5zdGRlcnIsCiAg
ICAgICAgIGVsc2U6CiAgICAgICAgICAgICBvcHRpb25zLnRpbWVfb3V0X21zID0gc3RyKFRlc3RS
dW5uZXIuREVGQVVMVF9URVNUX1RJTUVPVVRfTVMpCiAKLSAgICBvcHRpb25zLnNsb3dfdGltZV9v
dXRfbXMgPSBzdHIoNSAqIGludChvcHRpb25zLnRpbWVfb3V0X21zKSkKKyAgICBvcHRpb25zLnNs
b3dfdGltZV9vdXRfbXMgPSBzdHIoNSAqIG9wdGlvbnMudGltZV9vdXRfbXMpCiAgICAgcHJpbnRl
ci5wcmludF9jb25maWcoIlJlZ3VsYXIgdGltZW91dDogJXMsIHNsb3cgdGVzdCB0aW1lb3V0OiAl
cyIgJQogICAgICAgICAgICAgICAgICAgIChvcHRpb25zLnRpbWVfb3V0X21zLCBvcHRpb25zLnNs
b3dfdGltZV9vdXRfbXMpKQogCi0gICAgaWYgaW50KG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSA9
PSAxOgorICAgIGlmIG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzID09IDE6CiAgICAgICAgIHByaW50
ZXIucHJpbnRfY29uZmlnKCJSdW5uaW5nIG9uZSAlcyIgJSBwb3J0X29iai5kcml2ZXJfbmFtZSgp
KQogICAgIGVsc2U6CiAgICAgICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJSdW5uaW5nICVzICVz
cyBpbiBwYXJhbGxlbCIgJSAoCkBAIC0xNTQ3LDcgKzE1MzYsNyBAQCBkZWYgcGFyc2VfYXJncyhh
cmdzPU5vbmUpOgogICAgICAgICAgICAgaGVscD0iUnVuIGFsbCB0ZXN0cywgZXZlbiB0aG9zZSBt
YXJrZWQgU0tJUCBpbiB0aGUgdGVzdCBsaXN0IiksCiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0
aW9uKCItLXVzZS1hcGFjaGUiLCBhY3Rpb249InN0b3JlX3RydWUiLAogICAgICAgICAgICAgZGVm
YXVsdD1GYWxzZSwgaGVscD0iV2hldGhlciB0byB1c2UgYXBhY2hlIGluc3RlYWQgb2YgbGlnaHR0
cGQuIiksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXRpbWUtb3V0LW1zIiwKKyAg
ICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tdGltZS1vdXQtbXMiLCB0eXBlPSJpbnQiLAog
ICAgICAgICAgICAgaGVscD0iU2V0IHRoZSB0aW1lb3V0IGZvciBlYWNoIHRlc3QiKSwKICAgICAg
ICAgIyBvbGQtcnVuLXdlYmtpdC10ZXN0cyBjYWxscyAtLXJhbmRvbWl6ZS1vcmRlciAtLXJhbmRv
bToKICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tcmFuZG9taXplLW9yZGVyIiwgYWN0
aW9uPSJzdG9yZV90cnVlIiwKQEAgLTE1NjcsNyArMTU1Niw3IEBAIGRlZiBwYXJzZV9hcmdzKGFy
Z3M9Tm9uZSk6CiAgICAgICAgICMgSXNvbGF0ZSBlYWNoIHRlc3QgY2FzZSBydW4gKGltcGxpZXMg
LS1udGhseSAxIC0tdmVyYm9zZSkKICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tcnVu
LXNpbmdseSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCiAgICAgICAgICAgICBkZWZhdWx0PUZhbHNl
LCBoZWxwPSJydW4gYSBzZXBhcmF0ZSBEdW1wUmVuZGVyVHJlZSBmb3IgZWFjaCB0ZXN0IiksCi0g
ICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWNoaWxkLXByb2Nlc3NlcyIsCisgICAgICAg
IG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWNoaWxkLXByb2Nlc3NlcyIsIHR5cGU9ImludCIsCiAg
ICAgICAgICAgICBoZWxwPSJOdW1iZXIgb2YgRHVtcFJlbmRlclRyZWVzIHRvIHJ1biBpbiBwYXJh
bGxlbC4iKSwKICAgICAgICAgIyBGSVhNRTogRGlzcGxheSBkZWZhdWx0IG51bWJlciBvZiBjaGls
ZCBwcm9jZXNzZXMgdGhhdCB3aWxsIHJ1bi4KICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24o
Ii0tZXhwZXJpbWVudGFsLWZ1bGx5LXBhcmFsbGVsIiwKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3RocmVhZHdhdGNoZXIucHkgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90aHJlYWR3YXRjaGVyLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmE5MzgwYzQ5M2IwZjcyNWZiMWZmNWJkYzE2ZjE1NjNhMDgyYTU4NDAKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90aHJl
YWR3YXRjaGVyLnB5CkBAIC0wLDAgKzEsNjQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2NsYXNz
IFRocmVhZFdhdGNoZXIob2JqZWN0KToKKyAgICAjIElmIHdlIG5lZWQgdG8gYWRkIG1vcmUgY2Fs
bGJhY2tzIHdlIHNob3VsZCBtb3ZlIHRvIHVzaW5nIGEgZGVsZWdhdGUgb2JqZWN0IGluc3RlYWQu
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdha2VfZXZlcnk9MC4xLCB3YWtlX2NhbGxiYWNrPU5v
bmUsIHRocmVhZF9maW5pc2hlZF9jYWxsYmFjaz1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAg
IHdha2VfY2FsbGJhY2soKSA9IGNhbGxlZCBldmVyeSB3YWtlX2V2ZXJ5IHNlY29uZHMKKyAgICAg
ICAgdGhyZWFkX2ZpbmlzaGVkX2NhbGxiYWNrKHRocmVhZCkgPSBjYWxsZWQgd2hlbiBhIHRocmVh
ZCBoYXMgdGVybWluYXRlZAorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fd2FrZV9ldmVyeSA9
IHdha2VfZXZlcnkKKyAgICAgICAgc2VsZi5fd2FrZV9jYWxsYmFjayA9IHdha2VfY2FsbGJhY2sK
KyAgICAgICAgc2VsZi5fdGhyZWFkX2ZpbmlzaGVkX2NhbGxiYWNrID0gdGhyZWFkX2ZpbmlzaGVk
X2NhbGxiYWNrCisKKyAgICBkZWYgd2F0Y2hfdGhyZWFkcyhzZWxmLCB0aHJlYWRzKToKKyAgICAg
ICAgIiIiV2F0Y2hlcyB0aHJlYWRzIHVudGlsIHRlcm1pbmF0aW9uLgorICAgICAgICBDYWxsZXJz
IGFyZSBleHBlY3RlZCB0byByZS10aHJvdyBleGNlcHRpb25zIGZyb20gdGhyZWFkcyBpbgorICAg
ICAgICB0aHJlYWRfZmluaXNoZWRfY2FsbGJhY2sgaWYgZGVzaXJlZC4iIiIKKyAgICAgICAgYWN0
aXZlX3RocmVhZHMgPSB0aHJlYWRzWzpdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxl
IGFjdGl2ZV90aHJlYWRzOgorICAgICAgICAgICAgICAgICMgV2FpdCBvbiBlYWNoIHRocmVhZCBp
biB0dXJuIHNvIHdlIGV4aXQgaW1tZWRpYXRlbHkKKyAgICAgICAgICAgICAgICAjIGlmIGFueSBv
bmUgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgICAgICBmb3IgdGhyZWFkIGluIGFj
dGl2ZV90aHJlYWRzWzpdOgorICAgICAgICAgICAgICAgICAgICAjIE5vdGU6IC5qb2luIHdpbGwg
cmFpc2UgaWYgdGhlIHRocmVhZCB3YXMgbmV2ZXIgc3RhcnRlZC4KKyAgICAgICAgICAgICAgICAg
ICAgdGhyZWFkLmpvaW4oc2VsZi5fd2FrZV9ldmVyeSkKKyAgICAgICAgICAgICAgICAgICAgaWYg
c2VsZi5fd2FrZV9jYWxsYmFjazoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dha2Vf
Y2FsbGJhY2soKQorICAgICAgICAgICAgICAgICAgICBpZiB0aHJlYWQuaXNBbGl2ZSgpOgorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgaWYgc2Vs
Zi5fdGhyZWFkX2ZpbmlzaGVkX2NhbGxiYWNrOgorICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fdGhyZWFkX2ZpbmlzaGVkX2NhbGxiYWNrKHRocmVhZCkKKyAgICAgICAgICAgICAgICAgICAg
IyBUaGlzIHRocmVhZCBpcyBkb25lLCBzdG9wIHdhaXRpbmcgZm9yIGl0LgorICAgICAgICAgICAg
ICAgICAgICBhY3RpdmVfdGhyZWFkcy5yZW1vdmUodGhyZWFkKQorICAgICAgICBmaW5hbGx5Ogor
ICAgICAgICAgICAgIyBNYWtlIHN1cmUgYWxsIHRocmVhZHMgYXJlIHN0b3BwZWQgYmVmb3JlIHdl
IGxlYXZlIHRoaXMgZnVuY3Rpb24uCisgICAgICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6
CisgICAgICAgICAgICAgICAgdGhyZWFkLmNhbmNlbCgpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90aHJlYWR3YXRjaGVyX3VuaXR0ZXN0LnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGhyZWFkd2F0Y2hl
cl91bml0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNmUyNzA5MzdjM2ZhZjYwM2FhMjkxNTRjNTVmYmI0
MWNmMTAxZjczCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvdGhyZWFkd2F0Y2hlcl91bml0dGVzdC5weQpAQCAtMCwwICsxLDg1IEBA
CisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9u
LgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGhyZWFkd2F0Y2hl
ciBpbXBvcnQgVGhyZWFkV2F0Y2hlcgorZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5Lm1vY2sgaW1w
b3J0IE1vY2sKKworCitjbGFzcyBUaHJlYWRXYXRjaGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6
CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYud2FrZV9tb2NrID0gTW9jaygp
CisgICAgICAgIHNlbGYuZmluaXNoZWRfbW9jayA9IE1vY2soKQorICAgICAgICBzZWxmLndhdGNo
ZXIgPSBUaHJlYWRXYXRjaGVyKHdha2VfY2FsbGJhY2s9c2VsZi53YWtlX21vY2ssIHRocmVhZF9m
aW5pc2hlZF9jYWxsYmFjaz1zZWxmLmZpbmlzaGVkX21vY2spCisKKyAgICBkZWYgdGVzdF9udWxs
X3dhdGNoZXIoc2VsZik6CisgICAgICAgICMgVGhlIG51bGwgd2F0Y2hlciBzaG91bGQgZG8gbm90
aGluZy4KKyAgICAgICAgc2VsZi53YXRjaGVyLndhdGNoX3RocmVhZHMoW10pCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoc2VsZi53YWtlX21vY2suY2FsbF9jb3VudCwgMCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZWxmLmZpbmlzaGVkX21vY2suY2FsbF9jb3VudCwgMCkKKworICAgIGRl
ZiBfbW9ja190aHJlYWQoc2VsZiwgc3RvcHNfYWZ0ZXI9MSk6CisgICAgICAgIHN0b3BwaW5nX3Ro
cmVhZCA9IE1vY2soKQorICAgICAgICBzdG9wcGluZ190aHJlYWQuaXNBbGl2ZV9jYWxsX2NvdW50
ID0gMAorCisgICAgICAgIGRlZiBfbW9ja19pc0FsaXZlKHRocmVhZCk6CisgICAgICAgICAgICBz
dG9wcGluZ190aHJlYWQuaXNBbGl2ZV9jYWxsX2NvdW50ICs9IDEKKyAgICAgICAgICAgIHJldHVy
biBzdG9wcGluZ190aHJlYWQuaXNBbGl2ZV9jYWxsX2NvdW50IDw9IHN0b3BzX2FmdGVyCisgICAg
ICAgIHN0b3BwaW5nX3RocmVhZC5pc0FsaXZlID0gbGFtYmRhOiBfbW9ja19pc0FsaXZlKHN0b3Bw
aW5nX3RocmVhZCkKKyAgICAgICAgcmV0dXJuIHN0b3BwaW5nX3RocmVhZAorCisgICAgZGVmIHRl
c3RfYWxyZWFkeV9zdG9wcGVkX3RocmVhZHMoc2VsZik6CisgICAgICAgIHRocmVhZCA9IHNlbGYu
X21vY2tfdGhyZWFkKHN0b3BzX2FmdGVyPTApCisgICAgICAgIHNlbGYud2F0Y2hlci53YXRjaF90
aHJlYWRzKFt0aHJlYWRdKQorICAgICAgICAjIEZvciBub3cgd2UgYWx3YXlzIGNhbGwgY2FuY2Vs
LCBldmVuIGlmIHdlIGRvbid0IGhhdmUgdG8uCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aHJl
YWQuY2FuY2VsLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndha2VfbW9j
ay5jYWxsX2NvdW50LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmluaXNoZWRf
bW9jay5jYWxsX2NvdW50LCAxKQorCisgICAgZGVmIHRlc3RfcnVubmluZ190aHJlYWQoc2VsZik6
CisgICAgICAgIHRocmVhZCA9IHNlbGYuX21vY2tfdGhyZWFkKHN0b3BzX2FmdGVyPTEpCisgICAg
ICAgIHNlbGYud2F0Y2hlci53YXRjaF90aHJlYWRzKFt0aHJlYWRdKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHRocmVhZC5pc0FsaXZlX2NhbGxfY291bnQsIDIpCisgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZSh0aHJlYWQuY2FuY2VsLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLndha2VfbW9jay5jYWxsX2NvdW50LCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNl
bGYuZmluaXNoZWRfbW9jay5jYWxsX2NvdW50LCAxKQorCisgICAgZGVmIHRlc3Rfam9pbl9leGNl
cHRpb24oc2VsZik6CisgICAgICAgIHRocmVhZCA9IHNlbGYuX21vY2tfdGhyZWFkKHN0b3BzX2Fm
dGVyPTEwKQorICAgICAgICB0aHJlYWQyID0gc2VsZi5fbW9ja190aHJlYWQoc3RvcHNfYWZ0ZXI9
MTApCisKKyAgICAgICAgZGVmIF9tb2NrX2pvaW4oKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2Vw
dGlvbgorICAgICAgICB0aHJlYWQyLmpvaW4gPSBfbW9ja19qb2luCisgICAgICAgIHNlbGYuYXNz
ZXJ0UmFpc2VzKEV4Y2VwdGlvbiwgc2VsZi53YXRjaGVyLndhdGNoX3RocmVhZHMsIFt0aHJlYWQs
IHRocmVhZDJdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGhyZWFkLmNhbmNlbC5jYWxsZWQp
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aHJlYWQyLmNhbmNlbC5jYWxsZWQpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53YWtlX21vY2suY2FsbF9jb3VudCwgMSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzZWxmLmZpbmlzaGVkX21vY2suY2FsbF9jb3VudCwgMCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56960</attachid>
            <date>2010-05-24 19:24:21 -0700</date>
            <delta_ts>2010-06-22 19:09:05 -0700</delta_ts>
            <desc>alternate approach at reading status from all of the threads</desc>
            <filename>wk38561_alternate.diff</filename>
            <type>text/plain</type>
            <size>9638</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5IGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJl
ZV90aHJlYWQucHkKaW5kZXggMDlmOWFjNy4uZmQyYzI4MCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5k
ZXJfdHJlZV90aHJlYWQucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkKQEAgLTIx
MCw2ICsyMTAsOCBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAg
ICAgICAgIHNlbGYuX251bV90ZXN0cyA9IDAKICAgICAgICAgc2VsZi5fc3RhcnRfdGltZSA9IDAK
ICAgICAgICAgc2VsZi5fc3RvcF90aW1lID0gMAorICAgICAgICBzZWxmLl9uZXh0X3RpbWVvdXQg
PSBOb25lCisgICAgICAgIHNlbGYuX3RocmVhZF9pZCA9IE5vbmUKIAogICAgICAgICAjIEN1cnJl
bnQgZGlyZWN0b3J5IG9mIHRlc3RzIHdlJ3JlIHJ1bm5pbmcuCiAgICAgICAgIHNlbGYuX2N1cnJl
bnRfZGlyID0gTm9uZQpAQCAtMjQ4LDkgKzI1MCwyNSBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQo
dGhyZWFkaW5nLlRocmVhZCk6CiAgICAgZGVmIGdldF9udW1fdGVzdHMoc2VsZik6CiAgICAgICAg
IHJldHVybiBzZWxmLl9udW1fdGVzdHMKIAorICAgIGRlZiBnZXRfdGltZW91dF9wYWRkaW5nKHNl
bGYsIHRpbWVvdXQpOgorICAgICAgICAjIFdoZW4gd2UncmUgcnVubmluZyBvbmUgdGVzdCBwZXIg
RHVtcFJlbmRlclRyZWUgcHJvY2Vzcywgd2UgY2FuCisgICAgICAgICMgZW5mb3JjZSBhIGhhcmQg
dGltZW91dC4gIFRoZSBEdW1wUmVuZGVyVHJlZSB3YXRjaGRvZyB1c2VzIDIuNXgKKyAgICAgICAg
IyB0aGUgdGltZW91dDsgd2Ugd2FudCB0byBiZSBsYXJnZXIgdGhhbiB0aGF0LgorICAgICAgICBy
ZXR1cm4gZmxvYXQodGltZW91dCkgKiAzIC8gMTAwMAorCisgICAgZGVmIGdldF9uZXh0X3RpbWVv
dXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9uZXh0X3RpbWVvdXQKKworICAgIGRlZiBj
bGVhcl9uZXh0X3RpbWVvdXQoc2VsZik6CisgICAgICAgIHNlbGYuX25leHRfdGltZW91dCA9IE5v
bmUKKworICAgIGRlZiBnZXRfaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90aHJlYWRf
aWQKKwogICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgICIiIkRlbGVnYXRlIG1haW4gd29yayB0
byBhIGhlbHBlciBtZXRob2QgYW5kIHdhdGNoIGZvciB1bmNhdWdodAogICAgICAgICBleGNlcHRp
b25zLiIiIgorICAgICAgICBzZWxmLl90aHJlYWRfaWQgPSB0aHJlYWQuZ2V0X2lkZW50KCkKICAg
ICAgICAgc2VsZi5fc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCiAgICAgICAgIHNlbGYuX251bV90
ZXN0cyA9IDAKICAgICAgICAgdHJ5OgpAQCAtMzgxLDEwICszOTksOSBAQCBjbGFzcyBUZXN0U2hl
bGxUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAKICAgICAgICAgd29ya2VyLnN0YXJ0KCkKIAot
ICAgICAgICAjIFdoZW4gd2UncmUgcnVubmluZyBvbmUgdGVzdCBwZXIgRHVtcFJlbmRlclRyZWUg
cHJvY2Vzcywgd2UgY2FuCi0gICAgICAgICMgZW5mb3JjZSBhIGhhcmQgdGltZW91dC4gIFRoZSBE
dW1wUmVuZGVyVHJlZSB3YXRjaGRvZyB1c2VzIDIuNXgKLSAgICAgICAgIyB0aGUgdGltZW91dDsg
d2Ugd2FudCB0byBiZSBsYXJnZXIgdGhhbiB0aGF0LgotICAgICAgICB3b3JrZXIuam9pbihpbnQo
dGVzdF9pbmZvLnRpbWVvdXQpICogMy4wIC8gMTAwMC4wKQorICAgICAgICB0aHJlYWRfdGltZW91
dCA9IHNlbGYuZ2V0X3RpbWVvdXRfcGFkZGluZyh0ZXN0X2luZm8udGltZW91dCkKKyAgICAgICAg
dGhyZWFkLl9uZXh0X3RpbWVvdXQgPSB0aW1lLnRpbWUoKSArIHRocmVhZF90aW1lb3V0CisgICAg
ICAgIHdvcmtlci5qb2luKHRocmVhZF90aW1lb3V0KQogICAgICAgICBpZiB3b3JrZXIuaXNBbGl2
ZSgpOgogICAgICAgICAgICAgIyBJZiBqb2luKCkgcmV0dXJuZWQgd2l0aCB0aGUgdGhyZWFkIHN0
aWxsIHJ1bm5pbmcsIHRoZQogICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJlZSBpcyBjb21wbGV0
ZWx5IGh1bmcgYW5kIHRoZXJlJ3Mgbm90aGluZwpAQCAtNDI5LDYgKzQ0NiwxMCBAQCBjbGFzcyBU
ZXN0U2hlbGxUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgICAgICAgICAoc2VsZi5fdGVz
dF9hcmdzLm5ld19iYXNlbGluZSBvciBzZWxmLl90ZXN0X2FyZ3MucmVzZXRfcmVzdWx0cykpOgog
ICAgICAgICAgICAgaW1hZ2VfaGFzaCA9ICIiCiAgICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkK
KworICAgICAgICB0aHJlYWRfdGltZW91dCA9IHNlbGYuZ2V0X3RpbWVvdXRfcGFkZGluZyh0ZXN0
X2luZm8udGltZW91dCkKKyAgICAgICAgc2VsZi5fbmV4dF90aW1lb3V0ID0gc3RhcnQgKyB0aHJl
YWRfdGltZW91dAorCiAgICAgICAgIGNyYXNoLCB0aW1lb3V0LCBhY3R1YWxfY2hlY2tzdW0sIG91
dHB1dCwgZXJyb3IgPSBcCiAgICAgICAgICAgIHNlbGYuX2RyaXZlci5ydW5fdGVzdCh0ZXN0X2lu
Zm8udXJpLCB0ZXN0X2luZm8udGltZW91dCwgaW1hZ2VfaGFzaCkKICAgICAgICAgZW5kID0gdGlt
ZS50aW1lKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4IDZkNTU0M2QuLmQxZjFjY2Eg
MTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtNTMsNiArNTMsNyBAQCBpbXBvcnQgbG9n
Z2luZwogaW1wb3J0IG1hdGgKIGltcG9ydCBvcHRwYXJzZQogaW1wb3J0IG9zCitpbXBvcnQgcGRi
CiBpbXBvcnQgcGxhdGZvcm0KIGltcG9ydCBRdWV1ZQogaW1wb3J0IHJhbmRvbQpAQCAtNjI4LDI4
ICs2MjksMTkgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVy
IHdlIHNob3VsZCBydW4gYWxsIHRoZSB0ZXN0cyBpbiB0aGUgbWFpbiB0aHJlYWQuIiIiCiAgICAg
ICAgIHJldHVybiBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpID09IDEKIAotICAg
IGRlZiBfZHVtcF90aHJlYWRfc3RhdGVzKHNlbGYpOgorICAgIGRlZiBfZHVtcF93ZWRnZWRfdGhy
ZWFkX3N0YXRlKHNlbGYsIHRocmVhZCk6CisgICAgICAgIGlkID0gdGhyZWFkLmdldF9pZCgpCisg
ICAgICAgIF9sb2cuZXJyb3IoIiIpCisgICAgICAgIF9sb2cuZXJyb3IoInRocmVhZCAlcyAoJWQp
IGlzIHdlZGdlZCIgJSAodGhyZWFkLmdldE5hbWUoKSwgaWQpKQogICAgICAgICBmb3IgdGhyZWFk
X2lkLCBzdGFjayBpbiBzeXMuX2N1cnJlbnRfZnJhbWVzKCkuaXRlbXMoKToKLSAgICAgICAgICAg
ICMgRklYTUU6IFB5dGhvbiAyLjYgaGFzIHRocmVhZC5pZGVudCB3aGljaCB3ZSBjb3VsZAotICAg
ICAgICAgICAgIyB1c2UgdG8gbWFwIGZyb20gdGhyZWFkX2lkIGJhY2sgdG8gdGhyZWFkLm5hbWUK
LSAgICAgICAgICAgIHByaW50ICJcbiMgVGhyZWFkOiAlZCIgJSB0aHJlYWRfaWQKLSAgICAgICAg
ICAgIGZvciBmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lIGluIHRyYWNlYmFjay5leHRyYWN0
X3N0YWNrKHN0YWNrKToKLSAgICAgICAgICAgICAgICBwcmludCAnRmlsZTogIiVzIiwgbGluZSAl
ZCwgaW4gJXMnICUgKGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUpCi0gICAgICAgICAgICAgICAgaWYg
bGluZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiAgJXMiICUgKGxpbmUuc3RyaXAoKSkK
LQotICAgIGRlZiBfZHVtcF90aHJlYWRfc3RhdGVzX2lmX25lY2Vzc2FyeShzZWxmKToKLSAgICAg
ICAgIyBIQUNLOiBEdW1wIHRocmVhZCBzdGF0ZXMgZXZlcnkgbWludXRlIHRvIGZpZ3VyZSBvdXQg
d2hhdCdzCi0gICAgICAgICMgaGFuZ2luZyBvbiB0aGUgYm90cy4KLSAgICAgICAgaWYgbm90IHNl
bGYuX29wdGlvbnMudmVyYm9zZToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBkdW1wX3Ro
cmVhZHNfZXZlcnkgPSA2MCAgIyBEdW1wIGV2ZXJ5IG1pbnV0ZQotICAgICAgICBpZiBub3Qgc2Vs
Zi5fbGFzdF90aHJlYWRfZHVtcDoKLSAgICAgICAgICAgIHNlbGYuX2xhc3RfdGhyZWFkX2R1bXAg
PSB0aW1lLnRpbWUoKQotICAgICAgICB0aW1lX3NpbmNlX2xhc3RfZHVtcCA9IHRpbWUudGltZSgp
IC0gc2VsZi5fbGFzdF90aHJlYWRfZHVtcAotICAgICAgICBpZiAgdGltZV9zaW5jZV9sYXN0X2R1
bXAgPiBkdW1wX3RocmVhZHNfZXZlcnk6Ci0gICAgICAgICAgICBzZWxmLl9kdW1wX3RocmVhZF9z
dGF0ZXMoKQotICAgICAgICAgICAgc2VsZi5fbGFzdF90aHJlYWRfZHVtcCA9IHRpbWUudGltZSgp
CisgICAgICAgICAgICBpZiB0aHJlYWRfaWQgPT0gaWQ6CisgICAgICAgICAgICAgICAgZm9yIGZp
bGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUgaW4gdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soc3Rh
Y2spOgorICAgICAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCdGaWxlOiAiJXMiLCBsaW5lICVk
LCBpbiAlcycgJSAoZmlsZW5hbWUsIGxpbmVubywgbmFtZSkpCisgICAgICAgICAgICAgICAgICAg
IGlmIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCcgICVzJyAlIGxp
bmUuc3RyaXAoKSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBfbG9nLmVycm9yKCIi
KQorCiAKICAgICBkZWYgX3J1bl90ZXN0cyhzZWxmLCBmaWxlX2xpc3QsIHJlc3VsdF9zdW1tYXJ5
KToKICAgICAgICAgIiIiUnVucyB0aGUgdGVzdHMgaW4gdGhlIGZpbGVfbGlzdC4KQEAgLTY3NSw1
MiArNjY3LDU0IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCiAgICAg
ICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0aW5nIC4uLiIpCiAK
LSAgICAgICAgIyBXYWl0IGZvciB0aGUgdGhyZWFkcyB0byBmaW5pc2ggYW5kIGNvbGxlY3QgdGVz
dCBmYWlsdXJlcy4KLSAgICAgICAgZmFpbHVyZXMgPSB7fQorICAgICAgICBzZWxmLl93YWl0X2Zv
cl90aHJlYWRzX3RvX2ZpbmlzaCh0aHJlYWRzLCByZXN1bHRfc3VtbWFyeSkKKwogICAgICAgICB0
ZXN0X3RpbWluZ3MgPSB7fQogICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyA9IFtdCiAg
ICAgICAgIHRocmVhZF90aW1pbmdzID0gW10KKyAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRz
OgorICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3MuYXBwZW5kKHsnbmFtZSc6IHRocmVhZC5nZXRO
YW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdudW1fdGVzdHMnOiB0
aHJlYWQuZ2V0X251bV90ZXN0cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAndG90YWxfdGltZSc6IHRocmVhZC5nZXRfdG90YWxfdGltZSgpfSkKKyAgICAgICAgICAgIHRl
c3RfdGltaW5ncy51cGRhdGUodGhyZWFkLmdldF9kaXJlY3RvcnlfdGltaW5nX3N0YXRzKCkpCisg
ICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncy5leHRlbmQodGhyZWFkLmdldF90ZXN0
X3Jlc3VsdHMoKSkKKworICAgICAgICByZXR1cm4gKHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWlu
Z3MsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQorCisKKyAgICBkZWYgX3dhaXRfZm9yX3RocmVh
ZHNfdG9fZmluaXNoKHNlbGYsIHRocmVhZHMsIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAgdHJ5
OgogICAgICAgICAgICAgIyBMb29wIHRocm91Z2ggYWxsIHRoZSB0aHJlYWRzIHdhaXRpbmcgZm9y
IHRoZW0gdG8gZmluaXNoLgotICAgICAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgotICAg
ICAgICAgICAgICAgICMgRklYTUU6IFdlJ2xsIGVuZCB1cCB3YWl0aW5nIG9uIHRoZSBmaXJzdCB0
aHJlYWQgdGhlIHdob2xlCi0gICAgICAgICAgICAgICAgIyB0aW1lLiAgVGhhdCBtZWFucyB3ZSB3
b24ndCBub3RpY2UgZXhjZXB0aW9ucyBvbiBvdGhlcgotICAgICAgICAgICAgICAgICMgdGhyZWFk
cyB1bnRpbCB0aGUgZmlyc3Qgb25lIGV4aXRzLgotICAgICAgICAgICAgICAgICMgV2Ugc2hvdWxk
IGluc3RlYWQgd2hpbGUgVHJ1ZTogaW4gdGhlIG91dGVyIGxvb3AKLSAgICAgICAgICAgICAgICAj
IGFuZCB0aGVuIGxvb3AgdGhyb3VnaCB0aHJlYWRzIGpvaW5pbmcgYW5kIGNoZWNraW5nCi0gICAg
ICAgICAgICAgICAgIyBpc0FsaXZlIGFuZCBnZXRfZXhjZXB0aW9uX2luZm8uICBFeGl0aW5nIG9u
IGFueSBleGNlcHRpb24uCi0gICAgICAgICAgICAgICAgd2hpbGUgdGhyZWFkLmlzQWxpdmUoKToK
LSAgICAgICAgICAgICAgICAgICAgIyBXYWtlIHRoZSBtYWluIHRocmVhZCBldmVyeSAwLjEgc2Vj
b25kcyBzbyB3ZQotICAgICAgICAgICAgICAgICAgICAjIGNhbiBjYWxsIHVwZGF0ZV9zdW1tYXJ5
IGluIGEgdGltZWx5IGZhc2hpb24uCi0gICAgICAgICAgICAgICAgICAgIHRocmVhZC5qb2luKDAu
MSkKLSAgICAgICAgICAgICAgICAgICAgIyBIQUNLOiBVc2VkIGZvciBkZWJ1Z2dpbmcgdGhyZWFk
cyBvbiB0aGUgYm90cy4KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZHVtcF90aHJlYWRfc3Rh
dGVzX2lmX25lY2Vzc2FyeSgpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlX3N1bW1h
cnkocmVzdWx0X3N1bW1hcnkpCi0KLSAgICAgICAgICAgICAgICAjIFRoaXMgdGhyZWFkIGlzIGRv
bmUsIHNhdmUgb2ZmIHRoZSB0aW1pbmcgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICAgICAgdGhy
ZWFkX3RpbWluZ3MuYXBwZW5kKHsnbmFtZSc6IHRocmVhZC5nZXROYW1lKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnVtX3Rlc3RzJzogdGhyZWFkLmdldF9udW1f
dGVzdHMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0b3RhbF90
aW1lJzogdGhyZWFkLmdldF90b3RhbF90aW1lKCl9KQotICAgICAgICAgICAgICAgIHRlc3RfdGlt
aW5ncy51cGRhdGUodGhyZWFkLmdldF9kaXJlY3RvcnlfdGltaW5nX3N0YXRzKCkpCi0gICAgICAg
ICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MuZXh0ZW5kKHRocmVhZC5nZXRfdGVzdF9y
ZXN1bHRzKCkpCisgICAgICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IFRydWUKKyAgICAg
ICAgICAgIHdoaWxlIHNvbWVfdGhyZWFkX2lzX2FsaXZlOgorICAgICAgICAgICAgICAgIHNvbWVf
dGhyZWFkX2lzX2FsaXZlID0gRmFsc2UKKyAgICAgICAgICAgICAgICB0ID0gdGltZS50aW1lKCkK
KyAgICAgICAgICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6CisgICAgICAgICAgICAgICAg
ICAgIGV4Y2VwdGlvbl9pbmZvID0gdGhyZWFkLmdldF9leGNlcHRpb25faW5mbygpCisgICAgICAg
ICAgICAgICAgICAgIGlmIGV4Y2VwdGlvbl9pbmZvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICMgUmUtcmFpc2UgdGhlIHRocmVhZCdzIGV4Y2VwdGlvbiBoZXJlIHRvIG1h
a2UgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAjIGNsZWFyIHRoYXQgdGVzdGluZyB3YXMg
YWJvcnRlZC4gT3RoZXJ3aXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIHRlc3Rz
IHRoYXQgZGlkIG5vdCBydW4gd291bGQgYmUgYXNzdW1lZAorICAgICAgICAgICAgICAgICAgICAg
ICAgICMgdG8gaGF2ZSBwYXNzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgKGV4
Y2VwdGlvbl9pbmZvWzBdLCBleGNlcHRpb25faW5mb1sxXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXhjZXB0aW9uX2luZm9bMl0pCisKKyAgICAgICAgICAgICAgICAgICAgaWYg
dGhyZWFkLmlzQWxpdmUoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvbWVfdGhyZWFkX2lz
X2FsaXZlID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF90aW1lb3V0ID0gdGhy
ZWFkLmdldF9uZXh0X3RpbWVvdXQoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRf
dGltZW91dCBhbmQgdCA+IG5leHRfdGltZW91dCk6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fZHVtcF93ZWRnZWRfdGhyZWFkX3N0YXRlKHRocmVhZCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aHJlYWQuY2xlYXJfbmV4dF90aW1lb3V0KCkKKworICAgICAgICAgICAg
ICAgIHNlbGYudXBkYXRlX3N1bW1hcnkocmVzdWx0X3N1bW1hcnkpCisKKyAgICAgICAgICAgICAg
ICBpZiBzb21lX3RocmVhZF9pc19hbGl2ZToKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVl
cCgwLjEpCisKICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICAgICAg
Zm9yIHRocmVhZCBpbiB0aHJlYWRzOgogICAgICAgICAgICAgICAgIHRocmVhZC5jYW5jZWwoKQog
ICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgotICAgICAg
ICAgICAgIyBDaGVjayB3aGV0aGVyIGEgVGVzdFNoZWxsVGhyZWFkIGRpZWQgYmVmb3JlIG5vcm1h
bCBjb21wbGV0aW9uLgotICAgICAgICAgICAgZXhjZXB0aW9uX2luZm8gPSB0aHJlYWQuZ2V0X2V4
Y2VwdGlvbl9pbmZvKCkKLSAgICAgICAgICAgIGlmIGV4Y2VwdGlvbl9pbmZvIGlzIG5vdCBOb25l
OgotICAgICAgICAgICAgICAgICMgUmUtcmFpc2UgdGhlIHRocmVhZCdzIGV4Y2VwdGlvbiBoZXJl
IHRvIG1ha2UgaXQgY2xlYXIgdGhhdAotICAgICAgICAgICAgICAgICMgdGVzdGluZyB3YXMgYWJv
cnRlZC4gT3RoZXJ3aXNlLCB0aGUgdGVzdHMgdGhhdCBkaWQgbm90IHJ1bgotICAgICAgICAgICAg
ICAgICMgd291bGQgYmUgYXNzdW1lZCB0byBoYXZlIHBhc3NlZC4KLSAgICAgICAgICAgICAgICBy
YWlzZSBleGNlcHRpb25faW5mb1swXSwgZXhjZXB0aW9uX2luZm9bMV0sIGV4Y2VwdGlvbl9pbmZv
WzJdCi0KLSAgICAgICAgIyBGSVhNRTogVGhpcyB1cGRhdGVfc3VtbWFyeSBjYWxsIHNlZW1zIHVu
ZWNlc3NhcnkuCi0gICAgICAgICMgQ2FsbHMgYXJlIGFscmVhZHkgbWFkZSByaWdodCBhZnRlciBq
b2luKCkgYWJvdmUsCi0gICAgICAgICMgYXMgd2VsbCBhcyBmcm9tIHRoZSBpbmRpdmlkdWFsIHRo
cmVhZHMgdGhlbXNlbHZlcy4KLSAgICAgICAgc2VsZi51cGRhdGVfc3VtbWFyeShyZXN1bHRfc3Vt
bWFyeSkKLSAgICAgICAgcmV0dXJuICh0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLCBpbmRp
dmlkdWFsX3Rlc3RfdGltaW5ncykKIAogICAgIGRlZiBuZWVkc19odHRwKHNlbGYpOgogICAgICAg
ICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIHRlc3QgcnVubmVyIG5lZWRzIGFuIEhUVFAgc2VydmVy
LiIiIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59461</attachid>
            <date>2010-06-22 19:09:09 -0700</date>
            <delta_ts>2010-08-09 19:11:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38561-20100622190907.patch</filename>
            <type>text/plain</type>
            <size>9688</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBiM2YzMzM1MGY1MWI0ZDQwNDNmMDFhZGJjOGNkNzFjZjA2NmYzNzQ5Li43ODNlZmI4
MzU5ZDdkOWExMDk2NjIwZTJjZThlZDBmOGU4MWZiNTI1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTAtMDYtMjIgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW9kaWZ5IG5ldy1ydW4t
d2Via2l0LXRlc3RzIHRvIGNoZWNrIGVhY2ggdGhyZWFkIGZvciBleGNlcHRpb25zCisgICAgICAg
IGluc3RlYWQgb2YganVzdCB0aGUgZmlyc3Qgb25lIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdG8g
ZGV0ZWN0CisgICAgICAgIHdlZGdlZCB0aHJlYWRzIGFuZCBkdW1wIHRoZWlyIHN0YXRlIHdoZW4g
bmVjZXNzYXJ5LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zODU2MQorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKwogMjAxMC0wNi0y
MSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3Ro
cmVhZC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CmluZGV4IGEyZTIwOTE2N2RjNmQ5
YzRhMjBlOTcyODQwOGY0NGIyOTIzMWIwYTQuLjBhOGZmZDI0MGM3NDMzZDNkNTMzYTQ2YzQyZDFi
NDg1MDNlMDc1YjAgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CkBAIC0yMTAsNiArMjEwLDggQEAgY2xhc3MgVGVz
dFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgICAgICBzZWxmLl9udW1fdGVzdHMg
PSAwCiAgICAgICAgIHNlbGYuX3N0YXJ0X3RpbWUgPSAwCiAgICAgICAgIHNlbGYuX3N0b3BfdGlt
ZSA9IDAKKyAgICAgICAgc2VsZi5fbmV4dF90aW1lb3V0ID0gTm9uZQorICAgICAgICBzZWxmLl90
aHJlYWRfaWQgPSBOb25lCiAKICAgICAgICAgIyBDdXJyZW50IGRpcmVjdG9yeSBvZiB0ZXN0cyB3
ZSdyZSBydW5uaW5nLgogICAgICAgICBzZWxmLl9jdXJyZW50X2RpciA9IE5vbmUKQEAgLTI0OCw5
ICsyNTAsMjUgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAg
IGRlZiBnZXRfbnVtX3Rlc3RzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fbnVtX3Rlc3Rz
CiAKKyAgICBkZWYgZ2V0X3RpbWVvdXRfcGFkZGluZyhzZWxmLCB0aW1lb3V0KToKKyAgICAgICAg
IyBXaGVuIHdlJ3JlIHJ1bm5pbmcgb25lIHRlc3QgcGVyIER1bXBSZW5kZXJUcmVlIHByb2Nlc3Ms
IHdlIGNhbgorICAgICAgICAjIGVuZm9yY2UgYSBoYXJkIHRpbWVvdXQuICBUaGUgRHVtcFJlbmRl
clRyZWUgd2F0Y2hkb2cgdXNlcyAyLjV4CisgICAgICAgICMgdGhlIHRpbWVvdXQ7IHdlIHdhbnQg
dG8gYmUgbGFyZ2VyIHRoYW4gdGhhdC4KKyAgICAgICAgcmV0dXJuIGZsb2F0KHRpbWVvdXQpICog
MyAvIDEwMDAKKworICAgIGRlZiBnZXRfbmV4dF90aW1lb3V0KHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi5fbmV4dF90aW1lb3V0CisKKyAgICBkZWYgY2xlYXJfbmV4dF90aW1lb3V0KHNlbGYp
OgorICAgICAgICBzZWxmLl9uZXh0X3RpbWVvdXQgPSBOb25lCisKKyAgICBkZWYgZ2V0X2lkKHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdGhyZWFkX2lkCisKICAgICBkZWYgcnVuKHNlbGYp
OgogICAgICAgICAiIiJEZWxlZ2F0ZSBtYWluIHdvcmsgdG8gYSBoZWxwZXIgbWV0aG9kIGFuZCB3
YXRjaCBmb3IgdW5jYXVnaHQKICAgICAgICAgZXhjZXB0aW9ucy4iIiIKKyAgICAgICAgc2VsZi5f
dGhyZWFkX2lkID0gdGhyZWFkLmdldF9pZGVudCgpCiAgICAgICAgIHNlbGYuX3N0YXJ0X3RpbWUg
PSB0aW1lLnRpbWUoKQogICAgICAgICBzZWxmLl9udW1fdGVzdHMgPSAwCiAgICAgICAgIHRyeToK
QEAgLTM4NCwxMCArNDAyLDkgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJl
YWQpOgogCiAgICAgICAgIHdvcmtlci5zdGFydCgpCiAKLSAgICAgICAgIyBXaGVuIHdlJ3JlIHJ1
bm5pbmcgb25lIHRlc3QgcGVyIER1bXBSZW5kZXJUcmVlIHByb2Nlc3MsIHdlIGNhbgotICAgICAg
ICAjIGVuZm9yY2UgYSBoYXJkIHRpbWVvdXQuICBUaGUgRHVtcFJlbmRlclRyZWUgd2F0Y2hkb2cg
dXNlcyAyLjV4Ci0gICAgICAgICMgdGhlIHRpbWVvdXQ7IHdlIHdhbnQgdG8gYmUgbGFyZ2VyIHRo
YW4gdGhhdC4KLSAgICAgICAgd29ya2VyLmpvaW4oaW50KHRlc3RfaW5mby50aW1lb3V0KSAqIDMu
MCAvIDEwMDAuMCkKKyAgICAgICAgdGhyZWFkX3RpbWVvdXQgPSBzZWxmLmdldF90aW1lb3V0X3Bh
ZGRpbmcodGVzdF9pbmZvLnRpbWVvdXQpCisgICAgICAgIHRocmVhZC5fbmV4dF90aW1lb3V0ID0g
dGltZS50aW1lKCkgKyB0aHJlYWRfdGltZW91dAorICAgICAgICB3b3JrZXIuam9pbih0aHJlYWRf
dGltZW91dCkKICAgICAgICAgaWYgd29ya2VyLmlzQWxpdmUoKToKICAgICAgICAgICAgICMgSWYg
am9pbigpIHJldHVybmVkIHdpdGggdGhlIHRocmVhZCBzdGlsbCBydW5uaW5nLCB0aGUKICAgICAg
ICAgICAgICMgRHVtcFJlbmRlclRyZWUgaXMgY29tcGxldGVseSBodW5nIGFuZCB0aGVyZSdzIG5v
dGhpbmcKQEAgLTQzMiw2ICs0NDksMTAgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGlu
Zy5UaHJlYWQpOgogICAgICAgICAgICAgKHNlbGYuX3Rlc3RfYXJncy5uZXdfYmFzZWxpbmUgb3Ig
c2VsZi5fdGVzdF9hcmdzLnJlc2V0X3Jlc3VsdHMpKToKICAgICAgICAgICAgIGltYWdlX2hhc2gg
PSAiIgogICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCisKKyAgICAgICAgdGhyZWFkX3RpbWVv
dXQgPSBzZWxmLmdldF90aW1lb3V0X3BhZGRpbmcodGVzdF9pbmZvLnRpbWVvdXQpCisgICAgICAg
IHNlbGYuX25leHRfdGltZW91dCA9IHN0YXJ0ICsgdGhyZWFkX3RpbWVvdXQKKwogICAgICAgICBj
cmFzaCwgdGltZW91dCwgYWN0dWFsX2NoZWNrc3VtLCBvdXRwdXQsIGVycm9yID0gXAogICAgICAg
ICAgICBzZWxmLl9kcml2ZXIucnVuX3Rlc3QodGVzdF9pbmZvLnVyaSwgdGVzdF9pbmZvLnRpbWVv
dXQsIGltYWdlX2hhc2gpCiAgICAgICAgIGVuZCA9IHRpbWUudGltZSgpCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3Rz
LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0cy5weQppbmRleCBhNGE5MmM3ZTgwODgzMWQ5ZWI3MDQ4N2UzNzdkYTFhYjBjMDkzZDky
Li42ZGUzNWY5YTQzMmM3ZjEyZDhhZTEzNzNjOGMzMDcwMWZiMzg0MzdkIDEwMDc1NQotLS0gYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3Rz
LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHMucHkKQEAgLTUzLDYgKzUzLDcgQEAgaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBt
YXRoCiBpbXBvcnQgb3B0cGFyc2UKIGltcG9ydCBvcworaW1wb3J0IHBkYgogaW1wb3J0IHBsYXRm
b3JtCiBpbXBvcnQgUXVldWUKIGltcG9ydCByYW5kb20KQEAgLTYyOSwzNSArNjMwLDI1IEBAIGNs
YXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICIiIlJldHVybnMgd2hldGhlciB3ZSBzaG91bGQgcnVu
IGFsbCB0aGUgdGVzdHMgaW4gdGhlIG1haW4gdGhyZWFkLiIiIgogICAgICAgICByZXR1cm4gaW50
KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSA9PSAxCiAKLSAgICBkZWYgX2R1bXBfdGhy
ZWFkX3N0YXRlcyhzZWxmKToKKyAgICBkZWYgX2R1bXBfd2VkZ2VkX3RocmVhZF9zdGF0ZShzZWxm
LCB0aHJlYWQpOgorICAgICAgICBpZCA9IHRocmVhZC5nZXRfaWQoKQorICAgICAgICBfbG9nLmVy
cm9yKCIiKQorICAgICAgICBfbG9nLmVycm9yKCJ0aHJlYWQgJXMgKCVkKSBpcyB3ZWRnZWQiICUg
KHRocmVhZC5nZXROYW1lKCksIGlkKSkKICAgICAgICAgZm9yIHRocmVhZF9pZCwgc3RhY2sgaW4g
c3lzLl9jdXJyZW50X2ZyYW1lcygpLml0ZW1zKCk6Ci0gICAgICAgICAgICAjIEZJWE1FOiBQeXRo
b24gMi42IGhhcyB0aHJlYWQuaWRlbnQgd2hpY2ggd2UgY291bGQKLSAgICAgICAgICAgICMgdXNl
IHRvIG1hcCBmcm9tIHRocmVhZF9pZCBiYWNrIHRvIHRocmVhZC5uYW1lCi0gICAgICAgICAgICBw
cmludCAiXG4jIFRocmVhZDogJWQiICUgdGhyZWFkX2lkCi0gICAgICAgICAgICBmb3IgZmlsZW5h
bWUsIGxpbmVubywgbmFtZSwgbGluZSBpbiB0cmFjZWJhY2suZXh0cmFjdF9zdGFjayhzdGFjayk6
Ci0gICAgICAgICAgICAgICAgcHJpbnQgJ0ZpbGU6ICIlcyIsIGxpbmUgJWQsIGluICVzJyAlIChm
aWxlbmFtZSwgbGluZW5vLCBuYW1lKQotICAgICAgICAgICAgICAgIGlmIGxpbmU6Ci0gICAgICAg
ICAgICAgICAgICAgIHByaW50ICIgICVzIiAlIChsaW5lLnN0cmlwKCkpCi0KLSAgICBkZWYgX2R1
bXBfdGhyZWFkX3N0YXRlc19pZl9uZWNlc3Nhcnkoc2VsZik6Ci0gICAgICAgICMgSEFDSzogRHVt
cCB0aHJlYWQgc3RhdGVzIGV2ZXJ5IG1pbnV0ZSB0byBmaWd1cmUgb3V0IHdoYXQncwotICAgICAg
ICAjIGhhbmdpbmcgb24gdGhlIGJvdHMuCi0gICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLnZl
cmJvc2U6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZHVtcF90aHJlYWRzX2V2ZXJ5ID0g
NjAgICMgRHVtcCBldmVyeSBtaW51dGUKLSAgICAgICAgaWYgbm90IHNlbGYuX2xhc3RfdGhyZWFk
X2R1bXA6Ci0gICAgICAgICAgICBzZWxmLl9sYXN0X3RocmVhZF9kdW1wID0gdGltZS50aW1lKCkK
LSAgICAgICAgdGltZV9zaW5jZV9sYXN0X2R1bXAgPSB0aW1lLnRpbWUoKSAtIHNlbGYuX2xhc3Rf
dGhyZWFkX2R1bXAKLSAgICAgICAgaWYgIHRpbWVfc2luY2VfbGFzdF9kdW1wID4gZHVtcF90aHJl
YWRzX2V2ZXJ5OgotICAgICAgICAgICAgc2VsZi5fZHVtcF90aHJlYWRfc3RhdGVzKCkKLSAgICAg
ICAgICAgIHNlbGYuX2xhc3RfdGhyZWFkX2R1bXAgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAg
aWYgdGhyZWFkX2lkID09IGlkOgorICAgICAgICAgICAgICAgIGZvciBmaWxlbmFtZSwgbGluZW5v
LCBuYW1lLCBsaW5lIGluIHRyYWNlYmFjay5leHRyYWN0X3N0YWNrKHN0YWNrKToKKyAgICAgICAg
ICAgICAgICAgICAgX2xvZy5lcnJvcignRmlsZTogIiVzIiwgbGluZSAlZCwgaW4gJXMnICUgKGZp
bGVuYW1lLCBsaW5lbm8sIG5hbWUpKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lOgorICAg
ICAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignICAlcycgJSBsaW5lLnN0cmlwKCkpCisg
ICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgX2xvZy5lcnJvcigiIikKIAogICAgIGRlZiBf
cnVuX3Rlc3RzKHNlbGYsIGZpbGVfbGlzdCwgcmVzdWx0X3N1bW1hcnkpOgogICAgICAgICAiIiJS
dW5zIHRoZSB0ZXN0cyBpbiB0aGUgZmlsZV9saXN0LgogCi0gICAgICAgIFJldHVybjogQSB0dXBs
ZSAoZmFpbHVyZXMsIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCisgICAgICAgIFJldHVy
bjogQSB0dXBsZSAoa2V5Ym9hcmRfaW50ZXJydXB0ZWQsIHRocmVhZF90aW1pbmdzLCB0ZXN0X3Rp
bWluZ3MsCiAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKLSAgICAgICAgICAg
IGZhaWx1cmVzIGlzIGEgbWFwIGZyb20gdGVzdCB0byBsaXN0IG9mIGZhaWx1cmUgdHlwZXMKKyAg
ICAgICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkIGlzIHdoZXRoZXIgc29tZW9uZSB0eXBlZCBD
dHJsXkMKICAgICAgICAgICAgIHRocmVhZF90aW1pbmdzIGlzIGEgbGlzdCBvZiBkaWN0cyB3aXRo
IHRoZSB0b3RhbCBydW50aW1lCiAgICAgICAgICAgICAgIG9mIGVhY2ggdGhyZWFkIHdpdGggJ25h
bWUnLCAnbnVtX3Rlc3RzJywgJ3RvdGFsX3RpbWUnIHByb3BlcnRpZXMKICAgICAgICAgICAgIHRl
c3RfdGltaW5ncyBpcyBhIGxpc3Qgb2YgdGltaW5ncyBmb3IgZWFjaCBzaGFyZGVkIHN1YmRpcmVj
dG9yeQpAQCAtNjc2LDI4ICs2NjcsNDAgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRf
c3VtbWFyeSkKICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoIlN0YXJ0aW5nIHRl
c3RpbmcgLi4uIikKIAotICAgICAgICAjIFdhaXQgZm9yIHRoZSB0aHJlYWRzIHRvIGZpbmlzaCBh
bmQgY29sbGVjdCB0ZXN0IGZhaWx1cmVzLgotICAgICAgICBmYWlsdXJlcyA9IHt9CisgICAgICAg
IHJldHVybiBzZWxmLl93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaCh0aHJlYWRzLCByZXN1bHRf
c3VtbWFyeSkKKworICAgIGRlZiBfd2FpdF9mb3JfdGhyZWFkc190b19maW5pc2goc2VsZiwgdGhy
ZWFkcywgcmVzdWx0X3N1bW1hcnkpOgogICAgICAgICB0ZXN0X3RpbWluZ3MgPSB7fQogICAgICAg
ICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyA9IFtdCiAgICAgICAgIHRocmVhZF90aW1pbmdzID0g
W10KICAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBGYWxzZQogICAgICAgICB0cnk6CiAg
ICAgICAgICAgICAjIExvb3AgdGhyb3VnaCBhbGwgdGhlIHRocmVhZHMgd2FpdGluZyBmb3IgdGhl
bSB0byBmaW5pc2guCi0gICAgICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6Ci0gICAgICAg
ICAgICAgICAgIyBGSVhNRTogV2UnbGwgZW5kIHVwIHdhaXRpbmcgb24gdGhlIGZpcnN0IHRocmVh
ZCB0aGUgd2hvbGUKLSAgICAgICAgICAgICAgICAjIHRpbWUuICBUaGF0IG1lYW5zIHdlIHdvbid0
IG5vdGljZSBleGNlcHRpb25zIG9uIG90aGVyCi0gICAgICAgICAgICAgICAgIyB0aHJlYWRzIHVu
dGlsIHRoZSBmaXJzdCBvbmUgZXhpdHMuCi0gICAgICAgICAgICAgICAgIyBXZSBzaG91bGQgaW5z
dGVhZCB3aGlsZSBUcnVlOiBpbiB0aGUgb3V0ZXIgbG9vcAotICAgICAgICAgICAgICAgICMgYW5k
IHRoZW4gbG9vcCB0aHJvdWdoIHRocmVhZHMgam9pbmluZyBhbmQgY2hlY2tpbmcKLSAgICAgICAg
ICAgICAgICAjIGlzQWxpdmUgYW5kIGdldF9leGNlcHRpb25faW5mby4gIEV4aXRpbmcgb24gYW55
IGV4Y2VwdGlvbi4KLSAgICAgICAgICAgICAgICB3aGlsZSB0aHJlYWQuaXNBbGl2ZSgpOgotICAg
ICAgICAgICAgICAgICAgICAjIFdha2UgdGhlIG1haW4gdGhyZWFkIGV2ZXJ5IDAuMSBzZWNvbmRz
IHNvIHdlCi0gICAgICAgICAgICAgICAgICAgICMgY2FuIGNhbGwgdXBkYXRlX3N1bW1hcnkgaW4g
YSB0aW1lbHkgZmFzaGlvbi4KLSAgICAgICAgICAgICAgICAgICAgdGhyZWFkLmpvaW4oMC4xKQot
ICAgICAgICAgICAgICAgICAgICAjIEhBQ0s6IFVzZWQgZm9yIGRlYnVnZ2luZyB0aHJlYWRzIG9u
IHRoZSBib3RzLgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9kdW1wX3RocmVhZF9zdGF0ZXNf
aWZfbmVjZXNzYXJ5KCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVfc3VtbWFyeShy
ZXN1bHRfc3VtbWFyeSkKKyAgICAgICAgICAgIHNvbWVfdGhyZWFkX2lzX2FsaXZlID0gVHJ1ZQor
ICAgICAgICAgICAgd2hpbGUgc29tZV90aHJlYWRfaXNfYWxpdmU6CisgICAgICAgICAgICAgICAg
c29tZV90aHJlYWRfaXNfYWxpdmUgPSBGYWxzZQorICAgICAgICAgICAgICAgIHQgPSB0aW1lLnRp
bWUoKQorICAgICAgICAgICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoKKyAgICAgICAgICAg
ICAgICAgICAgZXhjZXB0aW9uX2luZm8gPSB0aHJlYWQuZ2V0X2V4Y2VwdGlvbl9pbmZvKCkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgZXhjZXB0aW9uX2luZm8gaXMgbm90IE5vbmU6CisgICAgICAg
ICAgICAgICAgICAgICAgICAjIFJlLXJhaXNlIHRoZSB0aHJlYWQncyBleGNlcHRpb24gaGVyZSB0
byBtYWtlIGl0CisgICAgICAgICAgICAgICAgICAgICAgICAjIGNsZWFyIHRoYXQgdGVzdGluZyB3
YXMgYWJvcnRlZC4gT3RoZXJ3aXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgdGVz
dHMgdGhhdCBkaWQgbm90IHJ1biB3b3VsZCBiZSBhc3N1bWVkCisgICAgICAgICAgICAgICAgICAg
ICAgICAjIHRvIGhhdmUgcGFzc2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgKGV4
Y2VwdGlvbl9pbmZvWzBdLCBleGNlcHRpb25faW5mb1sxXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleGNlcHRpb25faW5mb1syXSkKKworICAgICAgICAgICAgICAgICAgICBpZiB0
aHJlYWQuaXNBbGl2ZSgpOgorICAgICAgICAgICAgICAgICAgICAgICAgc29tZV90aHJlYWRfaXNf
YWxpdmUgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3RpbWVvdXQgPSB0aHJl
YWQuZ2V0X25leHRfdGltZW91dCgpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dF90
aW1lb3V0IGFuZCB0ID4gbmV4dF90aW1lb3V0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9kdW1wX3dlZGdlZF90aHJlYWRfc3RhdGUodGhyZWFkKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRocmVhZC5jbGVhcl9uZXh0X3RpbWVvdXQoKQorCisgICAgICAgICAgICAg
ICAgc2VsZi51cGRhdGVfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKKworICAgICAgICAgICAgICAg
IGlmIHNvbWVfdGhyZWFkX2lzX2FsaXZlOgorICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVw
KDAuMSkKIAogICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgICAgICBr
ZXlib2FyZF9pbnRlcnJ1cHRlZCA9IFRydWUKQEAgLTcyMSw2ICs3MjQsNyBAQCBjbGFzcyBUZXN0
UnVubmVyOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG90YWxfdGltZSc6
IHRocmVhZC5nZXRfdG90YWxfdGltZSgpfSkKICAgICAgICAgICAgIHRlc3RfdGltaW5ncy51cGRh
dGUodGhyZWFkLmdldF9kaXJlY3RvcnlfdGltaW5nX3N0YXRzKCkpCiAgICAgICAgICAgICBpbmRp
dmlkdWFsX3Rlc3RfdGltaW5ncy5leHRlbmQodGhyZWFkLmdldF90ZXN0X3Jlc3VsdHMoKSkKKwog
ICAgICAgICByZXR1cm4gKGtleWJvYXJkX2ludGVycnVwdGVkLCB0aHJlYWRfdGltaW5ncywgdGVz
dF90aW1pbmdzLAogICAgICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63965</attachid>
            <date>2010-08-09 19:12:01 -0700</date>
            <delta_ts>2010-08-13 13:52:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38561-20100809191200.patch</filename>
            <type>text/plain</type>
            <size>18990</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA2MTZiZDE0YTQ1ZTQzNDBmMzM0MDA0MDFhMmYzMWJjMDU2MzU5NmZlLi4wMTU4MjVi
MWJmNDBkMjcyMTM5NGYwOTJlOTE1NWNiNzZmODQwMzk1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAK
KzIwMTAtMDgtMDkgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmV3cml0ZSBuZXctcnVu
LXdlYmtpdC10ZXN0J3Mgd2FpdF9mb3JfdGhyZWFkc190b19maW5pc2ggbG9vcCB0bworICAgICAg
ICBjaGVjayBmb3IgZXhjZXB0aW9ucyBvbiBhbGwgdGhyZWFkcywgbm90IGp1c3QgdGhlIGZpcnN0
IHRocmVhZC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgY2hhbmdlIGFsc28gY2hhbmdlcyB0aGUg
bG9nZ2luZyBiZWhhdmlvciBmb3Igd2VkZ2VkIHRocmVhZHMKKyAgICAgICAgdG8gb25seSBkdW1w
IHRoZSBzdGFja3Mgb2YgdGhyZWFkcyB0aGF0IGFyZSBhY3R1YWxseSB3ZWRnZWQuCisKKyAgICAg
ICAgUmVmYWN0b3IgdGhlIHRocmVhZCBjbGFzc2VzIGluIHRoZSBkdW1wX3JlbmRlcl90cmVlX3Ro
cmVhZCBtb2R1bGUKKyAgICAgICAgdG8gbWFrZSB0aGUgY29udHJhY3QgYmV0d2VlbiBUZXN0UnVu
bmVyIGFuZCBUZXN0U2hlbGxUaHJlYWQgY2xlYXJlci4KKworICAgICAgICBBZGRlZCBhIGJ1bmNo
IG9mIHVuaXQgdGVzdHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zODU2MQorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0
LnB5OgorCiAyMDEwLTA4LTA5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90
cmVlX3RocmVhZC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CmluZGV4IDYzNjQ1MTFl
NTAwYzhhZTQ4YmY2MjI1ZGEzMWU3MWJjOWM2ZjljNmUuLjgzNDM5ZDYxYWM0ZTZjNDRmYzVjNjE5
ZmMzNzU4NjM2ZTdjYjU4MTEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CkBAIC0xNzIsOCArMTcyLDQyIEBAIGNs
YXNzIFNpbmdsZVRlc3RUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgICAgIHJldHVybiBz
ZWxmLl90ZXN0X3Jlc3VsdAogCiAKLWNsYXNzIFRlc3RTaGVsbFRocmVhZCh0aHJlYWRpbmcuVGhy
ZWFkKToKK2NsYXNzIFdhdGNoYWJsZVRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAiIiJU
aGlzIGNsYXNzIGFic3RyYWN0cyBhbiBpbnRlcmZhY2UgdXNlZCBieQorICAgIHJ1bl93ZWJraXRf
dGVzdHMuVGVzdFJ1bm5lci5fd2FpdF9mb3JfdGhyZWFkc190b19maW5pc2ggZm9yIHRocmVhZAor
ICAgIG1hbmFnZW1lbnQuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICB0aHJl
YWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX2NhbmNlbGVkID0gRmFs
c2UKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBOb25lCisgICAgICAgIHNlbGYuX25l
eHRfdGltZW91dCA9IE5vbmUKKyAgICAgICAgc2VsZi5fdGhyZWFkX2lkID0gTm9uZQorCisgICAg
ZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgIiIiU2V0IGEgZmxhZyB0ZWxsaW5nIHRoaXMgdGhy
ZWFkIHRvIHF1aXQuIiIiCisgICAgICAgIHNlbGYuX2NhbmNlbGVkID0gVHJ1ZQorCisgICAgZGVm
IGNsZWFyX25leHRfdGltZW91dChzZWxmKToKKyAgICAgICAgIiIiTWFyayBhIGZsYWcgdGVsbGlu
ZyB0aGlzIHRocmVhZCB0byBzdG9wIHNldHRpbmcgdGltZW91dHMuIiIiCisgICAgICAgIHNlbGYu
X3RpbWVvdXQgPSAwCisKKyAgICBkZWYgZXhjZXB0aW9uX2luZm8oc2VsZik6CisgICAgICAgICIi
IklmIHJ1bigpIHRlcm1pbmF0ZWQgb24gYW4gdW5jYXVnaHQgZXhjZXB0aW9uLCByZXR1cm4gaXQg
aGVyZQorICAgICAgICAoKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spIHR1cGxlKS4KKyAgICAgICAg
UmV0dXJucyBOb25lIGlmIHJ1bigpIHRlcm1pbmF0ZWQgbm9ybWFsbHkuIE1lYW50IHRvIGJlIGNh
bGxlZCBhZnRlcgorICAgICAgICBqb2luaW5nIHRoaXMgdGhyZWFkLiIiIgorICAgICAgICByZXR1
cm4gc2VsZi5fZXhjZXB0aW9uX2luZm8KKworICAgIGRlZiBpZChzZWxmKToKKyAgICAgICAgIiIi
UmV0dXJuIGEgdGhyZWFkIGlkZW50aWZpZXIuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl90aHJl
YWRfaWQKIAorICAgIGRlZiBuZXh0X3RpbWVvdXQoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0
aGUgdGltZSB0aGUgdGVzdCBpcyBzdXBwb3NlZCB0byBmaW5pc2ggYnkuIiIiCisgICAgICAgIHJl
dHVybiBzZWxmLl9uZXh0X3RpbWVvdXQKKworCitjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hh
YmxlVGhyZWFkKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgZmlsZW5hbWVfbGlzdF9x
dWV1ZSwgcmVzdWx0X3F1ZXVlLAogICAgICAgICAgICAgICAgICB0ZXN0X3R5cGVzLCB0ZXN0X2Fy
Z3MsIGltYWdlX3BhdGgsIHNoZWxsX2FyZ3MsIG9wdGlvbnMpOgogICAgICAgICAiIiJJbml0aWFs
aXplIGFsbCB0aGUgbG9jYWwgc3RhdGUgZm9yIHRoaXMgRHVtcFJlbmRlclRyZWUgdGhyZWFkLgpA
QCAtMTkyLDcgKzIyNiw3IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZCh0aHJlYWRpbmcuVGhyZWFk
KToKICAgICAgICAgICAgICAgY29tbWFuZC1saW5lIG9wdGlvbnMgc2hvdWxkIG1hdGNoIHRob3Nl
IGV4cGVjdGVkIGJ5CiAgICAgICAgICAgICAgIHJ1bl93ZWJraXRfdGVzdHM7IHRoZXkgYXJlIHR5
cGljYWxseSBwYXNzZWQgdmlhIHRoZQogICAgICAgICAgICAgICBydW5fd2Via2l0X3Rlc3RzLlRl
c3RSdW5uZXIgY2xhc3MuIiIiCi0gICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2Vs
ZikKKyAgICAgICAgV2F0Y2hhYmxlVGhyZWFkLl9faW5pdF9fKHNlbGYpCiAgICAgICAgIHNlbGYu
X3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX2ZpbGVuYW1lX2xpc3RfcXVldWUgPSBmaWxlbmFt
ZV9saXN0X3F1ZXVlCiAgICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZSA9IHJlc3VsdF9xdWV1ZQpA
QCAtMjAzLDggKzIzNyw2IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZCh0aHJlYWRpbmcuVGhyZWFk
KToKICAgICAgICAgc2VsZi5faW1hZ2VfcGF0aCA9IGltYWdlX3BhdGgKICAgICAgICAgc2VsZi5f
c2hlbGxfYXJncyA9IHNoZWxsX2FyZ3MKICAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMK
LSAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBGYWxzZQotICAgICAgICBzZWxmLl9leGNlcHRpb25f
aW5mbyA9IE5vbmUKICAgICAgICAgc2VsZi5fZGlyZWN0b3J5X3RpbWluZ19zdGF0cyA9IHt9CiAg
ICAgICAgIHNlbGYuX3Rlc3RfcmVzdWx0cyA9IFtdCiAgICAgICAgIHNlbGYuX251bV90ZXN0cyA9
IDAKQEAgLTIzMSwyNiArMjYzLDI0IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZCh0aHJlYWRpbmcu
VGhyZWFkKToKICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl90ZXN0X3Jlc3VsdHMK
IAotICAgIGRlZiBjYW5jZWwoc2VsZik6Ci0gICAgICAgICIiIlNldCBhIGZsYWcgdGVsbGluZyB0
aGlzIHRocmVhZCB0byBxdWl0LiIiIgotICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IFRydWUKLQot
ICAgIGRlZiBnZXRfZXhjZXB0aW9uX2luZm8oc2VsZik6Ci0gICAgICAgICIiIklmIHJ1bigpIHRl
cm1pbmF0ZWQgb24gYW4gdW5jYXVnaHQgZXhjZXB0aW9uLCByZXR1cm4gaXQgaGVyZQotICAgICAg
ICAoKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spIHR1cGxlKS4KLSAgICAgICAgUmV0dXJucyBOb25l
IGlmIHJ1bigpIHRlcm1pbmF0ZWQgbm9ybWFsbHkuIE1lYW50IHRvIGJlIGNhbGxlZCBhZnRlcgot
ICAgICAgICBqb2luaW5nIHRoaXMgdGhyZWFkLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fZXhj
ZXB0aW9uX2luZm8KLQogICAgIGRlZiBnZXRfdG90YWxfdGltZShzZWxmKToKICAgICAgICAgcmV0
dXJuIG1heChzZWxmLl9zdG9wX3RpbWUgLSBzZWxmLl9zdGFydF90aW1lLCAwLjApCiAKICAgICBk
ZWYgZ2V0X251bV90ZXN0cyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX251bV90ZXN0cwog
CisgICAgZGVmIHRpbWVvdXRfcGFkZGluZyhzZWxmLCB0aW1lb3V0KToKKyAgICAgICAgIiIiUmV0
dXJucyBhIHNhZmUgbXVsdGlwbGUgb2YgdGhlIHBlci10ZXN0IHRpbWVvdXQgdmFsdWUgdG8gdXNl
CisgICAgICAgIHRvIGRldGVjdCBodW5nIHRlc3QgdGhyZWFkcy4iIiIKKyAgICAgICAgIyBXaGVu
IHdlJ3JlIHJ1bm5pbmcgb25lIHRlc3QgcGVyIER1bXBSZW5kZXJUcmVlIHByb2Nlc3MsIHdlIGNh
bgorICAgICAgICAjIGVuZm9yY2UgYSBoYXJkIHRpbWVvdXQuICBUaGUgRHVtcFJlbmRlclRyZWUg
d2F0Y2hkb2cgdXNlcyAyLjV4CisgICAgICAgICMgdGhlIHRpbWVvdXQ7IHdlIHdhbnQgdG8gYmUg
bGFyZ2VyIHRoYW4gdGhhdC4KKyAgICAgICAgcmV0dXJuIGZsb2F0KHRpbWVvdXQpICogMyAvIDEw
MDAKKwogICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgICIiIkRlbGVnYXRlIG1haW4gd29yayB0
byBhIGhlbHBlciBtZXRob2QgYW5kIHdhdGNoIGZvciB1bmNhdWdodAogICAgICAgICBleGNlcHRp
b25zLiIiIgorICAgICAgICBzZWxmLl90aHJlYWRfaWQgPSB0aHJlYWQuZ2V0X2lkZW50KCkKICAg
ICAgICAgc2VsZi5fc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCiAgICAgICAgIHNlbGYuX251bV90
ZXN0cyA9IDAKICAgICAgICAgdHJ5OgpAQCAtMzg0LDEwICs0MTQsOSBAQCBjbGFzcyBUZXN0U2hl
bGxUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAKICAgICAgICAgd29ya2VyLnN0YXJ0KCkKIAot
ICAgICAgICAjIFdoZW4gd2UncmUgcnVubmluZyBvbmUgdGVzdCBwZXIgRHVtcFJlbmRlclRyZWUg
cHJvY2Vzcywgd2UgY2FuCi0gICAgICAgICMgZW5mb3JjZSBhIGhhcmQgdGltZW91dC4gIFRoZSBE
dW1wUmVuZGVyVHJlZSB3YXRjaGRvZyB1c2VzIDIuNXgKLSAgICAgICAgIyB0aGUgdGltZW91dDsg
d2Ugd2FudCB0byBiZSBsYXJnZXIgdGhhbiB0aGF0LgotICAgICAgICB3b3JrZXIuam9pbihpbnQo
dGVzdF9pbmZvLnRpbWVvdXQpICogMy4wIC8gMTAwMC4wKQorICAgICAgICB0aHJlYWRfdGltZW91
dCA9IHNlbGYudGltZW91dF9wYWRkaW5nKHRlc3RfaW5mby50aW1lb3V0KQorICAgICAgICB0aHJl
YWQuX25leHRfdGltZW91dCA9IHRpbWUudGltZSgpICsgdGhyZWFkX3RpbWVvdXQKKyAgICAgICAg
d29ya2VyLmpvaW4odGhyZWFkX3RpbWVvdXQpCiAgICAgICAgIGlmIHdvcmtlci5pc0FsaXZlKCk6
CiAgICAgICAgICAgICAjIElmIGpvaW4oKSByZXR1cm5lZCB3aXRoIHRoZSB0aHJlYWQgc3RpbGwg
cnVubmluZywgdGhlCiAgICAgICAgICAgICAjIER1bXBSZW5kZXJUcmVlIGlzIGNvbXBsZXRlbHkg
aHVuZyBhbmQgdGhlcmUncyBub3RoaW5nCkBAIC00MzMsNiArNDYyLDEwIEBAIGNsYXNzIFRlc3RT
aGVsbFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAgICAgICAgIG5vdCBzZWxmLl9vcHRp
b25zLnBpeGVsX3Rlc3RzKSk6CiAgICAgICAgICAgICBpbWFnZV9oYXNoID0gIiIKICAgICAgICAg
c3RhcnQgPSB0aW1lLnRpbWUoKQorCisgICAgICAgIHRocmVhZF90aW1lb3V0ID0gc2VsZi50aW1l
b3V0X3BhZGRpbmcodGVzdF9pbmZvLnRpbWVvdXQpCisgICAgICAgIHNlbGYuX25leHRfdGltZW91
dCA9IHN0YXJ0ICsgdGhyZWFkX3RpbWVvdXQKKwogICAgICAgICBjcmFzaCwgdGltZW91dCwgYWN0
dWFsX2NoZWNrc3VtLCBvdXRwdXQsIGVycm9yID0gXAogICAgICAgICAgICBzZWxmLl9kcml2ZXIu
cnVuX3Rlc3QodGVzdF9pbmZvLnVyaSwgdGVzdF9pbmZvLnRpbWVvdXQsIGltYWdlX2hhc2gpCiAg
ICAgICAgIGVuZCA9IHRpbWUudGltZSgpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5IGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQppbmRleCA0
OTBhYzNjMjBiMjI2ZTFlZmQ3YTNlOTlkMDkwNTk4YzE3YTUwNzkwLi45ZWI2OTNmMGMzOTUxMjE3
OWM3ZWI3YWQ1NzlhZTcwYjNlYWNhOTUyIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKQEAg
LTUzLDYgKzUzLDcgQEAgaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBtYXRoCiBpbXBvcnQgb3B0cGFy
c2UKIGltcG9ydCBvcworaW1wb3J0IHBkYgogaW1wb3J0IHBsYXRmb3JtCiBpbXBvcnQgUXVldWUK
IGltcG9ydCByYW5kb20KQEAgLTYyOSwzNSArNjMwLDEyIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAg
ICAgICAgICIiIlJldHVybnMgd2hldGhlciB3ZSBzaG91bGQgcnVuIGFsbCB0aGUgdGVzdHMgaW4g
dGhlIG1haW4gdGhyZWFkLiIiIgogICAgICAgICByZXR1cm4gaW50KHNlbGYuX29wdGlvbnMuY2hp
bGRfcHJvY2Vzc2VzKSA9PSAxCiAKLSAgICBkZWYgX2R1bXBfdGhyZWFkX3N0YXRlcyhzZWxmKToK
LSAgICAgICAgZm9yIHRocmVhZF9pZCwgc3RhY2sgaW4gc3lzLl9jdXJyZW50X2ZyYW1lcygpLml0
ZW1zKCk6Ci0gICAgICAgICAgICAjIEZJWE1FOiBQeXRob24gMi42IGhhcyB0aHJlYWQuaWRlbnQg
d2hpY2ggd2UgY291bGQKLSAgICAgICAgICAgICMgdXNlIHRvIG1hcCBmcm9tIHRocmVhZF9pZCBi
YWNrIHRvIHRocmVhZC5uYW1lCi0gICAgICAgICAgICBwcmludCAiXG4jIFRocmVhZDogJWQiICUg
dGhyZWFkX2lkCi0gICAgICAgICAgICBmb3IgZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSBp
biB0cmFjZWJhY2suZXh0cmFjdF9zdGFjayhzdGFjayk6Ci0gICAgICAgICAgICAgICAgcHJpbnQg
J0ZpbGU6ICIlcyIsIGxpbmUgJWQsIGluICVzJyAlIChmaWxlbmFtZSwgbGluZW5vLCBuYW1lKQot
ICAgICAgICAgICAgICAgIGlmIGxpbmU6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ICIgICVz
IiAlIChsaW5lLnN0cmlwKCkpCi0KLSAgICBkZWYgX2R1bXBfdGhyZWFkX3N0YXRlc19pZl9uZWNl
c3Nhcnkoc2VsZik6Ci0gICAgICAgICMgSEFDSzogRHVtcCB0aHJlYWQgc3RhdGVzIGV2ZXJ5IG1p
bnV0ZSB0byBmaWd1cmUgb3V0IHdoYXQncwotICAgICAgICAjIGhhbmdpbmcgb24gdGhlIGJvdHMu
Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLnZlcmJvc2U6Ci0gICAgICAgICAgICByZXR1
cm4KLSAgICAgICAgZHVtcF90aHJlYWRzX2V2ZXJ5ID0gNjAgICMgRHVtcCBldmVyeSBtaW51dGUK
LSAgICAgICAgaWYgbm90IHNlbGYuX2xhc3RfdGhyZWFkX2R1bXA6Ci0gICAgICAgICAgICBzZWxm
Ll9sYXN0X3RocmVhZF9kdW1wID0gdGltZS50aW1lKCkKLSAgICAgICAgdGltZV9zaW5jZV9sYXN0
X2R1bXAgPSB0aW1lLnRpbWUoKSAtIHNlbGYuX2xhc3RfdGhyZWFkX2R1bXAKLSAgICAgICAgaWYg
IHRpbWVfc2luY2VfbGFzdF9kdW1wID4gZHVtcF90aHJlYWRzX2V2ZXJ5OgotICAgICAgICAgICAg
c2VsZi5fZHVtcF90aHJlYWRfc3RhdGVzKCkKLSAgICAgICAgICAgIHNlbGYuX2xhc3RfdGhyZWFk
X2R1bXAgPSB0aW1lLnRpbWUoKQotCiAgICAgZGVmIF9ydW5fdGVzdHMoc2VsZiwgZmlsZV9saXN0
LCByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgICIiIlJ1bnMgdGhlIHRlc3RzIGluIHRoZSBmaWxl
X2xpc3QuCiAKLSAgICAgICAgUmV0dXJuOiBBIHR1cGxlIChmYWlsdXJlcywgdGhyZWFkX3RpbWlu
Z3MsIHRlc3RfdGltaW5ncywKKyAgICAgICAgUmV0dXJuOiBBIHR1cGxlIChrZXlib2FyZF9pbnRl
cnJ1cHRlZCwgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywKICAgICAgICAgICAgIGluZGl2
aWR1YWxfdGVzdF90aW1pbmdzKQotICAgICAgICAgICAgZmFpbHVyZXMgaXMgYSBtYXAgZnJvbSB0
ZXN0IHRvIGxpc3Qgb2YgZmFpbHVyZSB0eXBlcworICAgICAgICAgICAga2V5Ym9hcmRfaW50ZXJy
dXB0ZWQgaXMgd2hldGhlciBzb21lb25lIHR5cGVkIEN0cmxeQwogICAgICAgICAgICAgdGhyZWFk
X3RpbWluZ3MgaXMgYSBsaXN0IG9mIGRpY3RzIHdpdGggdGhlIHRvdGFsIHJ1bnRpbWUKICAgICAg
ICAgICAgICAgb2YgZWFjaCB0aHJlYWQgd2l0aCAnbmFtZScsICdudW1fdGVzdHMnLCAndG90YWxf
dGltZScgcHJvcGVydGllcwogICAgICAgICAgICAgdGVzdF90aW1pbmdzIGlzIGEgbGlzdCBvZiB0
aW1pbmdzIGZvciBlYWNoIHNoYXJkZWQgc3ViZGlyZWN0b3J5CkBAIC02NzYsNDQgKzY1NCw1NSBA
QCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQogICAgICAgICBzZWxmLl9w
cmludGVyLnByaW50X3VwZGF0ZSgiU3RhcnRpbmcgdGVzdGluZyAuLi4iKQogCi0gICAgICAgICMg
V2FpdCBmb3IgdGhlIHRocmVhZHMgdG8gZmluaXNoIGFuZCBjb2xsZWN0IHRlc3QgZmFpbHVyZXMu
Ci0gICAgICAgIGZhaWx1cmVzID0ge30KLSAgICAgICAgdGVzdF90aW1pbmdzID0ge30KLSAgICAg
ICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MgPSBbXQotICAgICAgICB0aHJlYWRfdGltaW5ncyA9
IFtdCisgICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkID0gc2VsZi5fd2FpdF9mb3JfdGhyZWFk
c190b19maW5pc2godGhyZWFkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKKyAgICAgICAgKHRo
cmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKSA9IFwK
KyAgICAgICAgICAgIHNlbGYuX2NvbGxlY3RfdGltaW5nX2luZm8odGhyZWFkcykKKworICAgICAg
ICByZXR1cm4gKGtleWJvYXJkX2ludGVycnVwdGVkLCB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1p
bmdzLAorICAgICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQorCisgICAgZGVm
IF93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaChzZWxmLCB0aHJlYWRzLCByZXN1bHRfc3VtbWFy
eSk6CiAgICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkID0gRmFsc2UKICAgICAgICAgdHJ5Ogog
ICAgICAgICAgICAgIyBMb29wIHRocm91Z2ggYWxsIHRoZSB0aHJlYWRzIHdhaXRpbmcgZm9yIHRo
ZW0gdG8gZmluaXNoLgotICAgICAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgotICAgICAg
ICAgICAgICAgICMgRklYTUU6IFdlJ2xsIGVuZCB1cCB3YWl0aW5nIG9uIHRoZSBmaXJzdCB0aHJl
YWQgdGhlIHdob2xlCi0gICAgICAgICAgICAgICAgIyB0aW1lLiAgVGhhdCBtZWFucyB3ZSB3b24n
dCBub3RpY2UgZXhjZXB0aW9ucyBvbiBvdGhlcgotICAgICAgICAgICAgICAgICMgdGhyZWFkcyB1
bnRpbCB0aGUgZmlyc3Qgb25lIGV4aXRzLgotICAgICAgICAgICAgICAgICMgV2Ugc2hvdWxkIGlu
c3RlYWQgd2hpbGUgVHJ1ZTogaW4gdGhlIG91dGVyIGxvb3AKLSAgICAgICAgICAgICAgICAjIGFu
ZCB0aGVuIGxvb3AgdGhyb3VnaCB0aHJlYWRzIGpvaW5pbmcgYW5kIGNoZWNraW5nCi0gICAgICAg
ICAgICAgICAgIyBpc0FsaXZlIGFuZCBnZXRfZXhjZXB0aW9uX2luZm8uICBFeGl0aW5nIG9uIGFu
eSBleGNlcHRpb24uCi0gICAgICAgICAgICAgICAgd2hpbGUgdGhyZWFkLmlzQWxpdmUoKToKLSAg
ICAgICAgICAgICAgICAgICAgIyBXYWtlIHRoZSBtYWluIHRocmVhZCBldmVyeSAwLjEgc2Vjb25k
cyBzbyB3ZQotICAgICAgICAgICAgICAgICAgICAjIGNhbiBjYWxsIHVwZGF0ZV9zdW1tYXJ5IGlu
IGEgdGltZWx5IGZhc2hpb24uCi0gICAgICAgICAgICAgICAgICAgIHRocmVhZC5qb2luKDAuMSkK
LSAgICAgICAgICAgICAgICAgICAgIyBIQUNLOiBVc2VkIGZvciBkZWJ1Z2dpbmcgdGhyZWFkcyBv
biB0aGUgYm90cy4KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZHVtcF90aHJlYWRfc3RhdGVz
X2lmX25lY2Vzc2FyeSgpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlX3N1bW1hcnko
cmVzdWx0X3N1bW1hcnkpCisgICAgICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IFRydWUK
KyAgICAgICAgICAgIHdoaWxlIHNvbWVfdGhyZWFkX2lzX2FsaXZlOgorICAgICAgICAgICAgICAg
IHNvbWVfdGhyZWFkX2lzX2FsaXZlID0gRmFsc2UKKyAgICAgICAgICAgICAgICB0ID0gdGltZS50
aW1lKCkKKyAgICAgICAgICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6CisgICAgICAgICAg
ICAgICAgICAgIGV4Y2VwdGlvbl9pbmZvID0gdGhyZWFkLmV4Y2VwdGlvbl9pbmZvKCkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgZXhjZXB0aW9uX2luZm8gaXMgbm90IE5vbmU6CisgICAgICAgICAg
ICAgICAgICAgICAgICAjIFJlLXJhaXNlIHRoZSB0aHJlYWQncyBleGNlcHRpb24gaGVyZSB0byBt
YWtlIGl0CisgICAgICAgICAgICAgICAgICAgICAgICAjIGNsZWFyIHRoYXQgdGVzdGluZyB3YXMg
YWJvcnRlZC4gT3RoZXJ3aXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgdGVzdHMg
dGhhdCBkaWQgbm90IHJ1biB3b3VsZCBiZSBhc3N1bWVkCisgICAgICAgICAgICAgICAgICAgICAg
ICAjIHRvIGhhdmUgcGFzc2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgKGV4Y2Vw
dGlvbl9pbmZvWzBdLCBleGNlcHRpb25faW5mb1sxXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleGNlcHRpb25faW5mb1syXSkKKworICAgICAgICAgICAgICAgICAgICBpZiB0aHJl
YWQuaXNBbGl2ZSgpOgorICAgICAgICAgICAgICAgICAgICAgICAgc29tZV90aHJlYWRfaXNfYWxp
dmUgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3RpbWVvdXQgPSB0aHJlYWQu
bmV4dF90aW1lb3V0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0X3RpbWVvdXQg
YW5kIHQgPiBuZXh0X3RpbWVvdXQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9sb2df
d2VkZ2VkX3RocmVhZCh0aHJlYWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFk
LmNsZWFyX25leHRfdGltZW91dCgpCisKKyAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9zdW1t
YXJ5KHJlc3VsdF9zdW1tYXJ5KQorCisgICAgICAgICAgICAgICAgaWYgc29tZV90aHJlYWRfaXNf
YWxpdmU6CisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQogCiAgICAgICAgIGV4
Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVk
ID0gVHJ1ZQogICAgICAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgogICAgICAgICAgICAg
ICAgIHRocmVhZC5jYW5jZWwoKQogCi0gICAgICAgIGlmIG5vdCBrZXlib2FyZF9pbnRlcnJ1cHRl
ZDoKLSAgICAgICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgICAgICAj
IENoZWNrIHdoZXRoZXIgYSB0aHJlYWQgZGllZCBiZWZvcmUgbm9ybWFsIGNvbXBsZXRpb24uCi0g
ICAgICAgICAgICAgICAgZXhjZXB0aW9uX2luZm8gPSB0aHJlYWQuZ2V0X2V4Y2VwdGlvbl9pbmZv
KCkKLSAgICAgICAgICAgICAgICBpZiBleGNlcHRpb25faW5mbyBpcyBub3QgTm9uZToKLSAgICAg
ICAgICAgICAgICAgICAgIyBSZS1yYWlzZSB0aGUgdGhyZWFkJ3MgZXhjZXB0aW9uIGhlcmUgdG8g
bWFrZSBpdCBjbGVhcgotICAgICAgICAgICAgICAgICAgICAjIHNvbWV0aGluZyB3ZW50IHdyb25n
LiBPdGhlcndpc2UsIHRoZSB0ZXN0cyB0aGF0IGRpZCBub3QKLSAgICAgICAgICAgICAgICAgICAg
IyBydW4gd291bGQgYmUgYXNzdW1lZCB0byBoYXZlIHBhc3NlZC4KLSAgICAgICAgICAgICAgICAg
ICAgcmFpc2UgKGV4Y2VwdGlvbl9pbmZvWzBdLCBleGNlcHRpb25faW5mb1sxXSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbl9pbmZvWzJdKQorICAgICAgICByZXR1cm4ga2V5
Ym9hcmRfaW50ZXJydXB0ZWQKKworICAgIGRlZiBfY29sbGVjdF90aW1pbmdfaW5mbyhzZWxmLCB0
aHJlYWRzKToKKyAgICAgICAgdGVzdF90aW1pbmdzID0ge30KKyAgICAgICAgaW5kaXZpZHVhbF90
ZXN0X3RpbWluZ3MgPSBbXQorICAgICAgICB0aHJlYWRfdGltaW5ncyA9IFtdCiAKICAgICAgICAg
Zm9yIHRocmVhZCBpbiB0aHJlYWRzOgogICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3MuYXBwZW5k
KHsnbmFtZSc6IHRocmVhZC5nZXROYW1lKCksCkBAIC03MjEsOCArNzEwLDggQEAgY2xhc3MgVGVz
dFJ1bm5lcjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvdGFsX3RpbWUn
OiB0aHJlYWQuZ2V0X3RvdGFsX3RpbWUoKX0pCiAgICAgICAgICAgICB0ZXN0X3RpbWluZ3MudXBk
YXRlKHRocmVhZC5nZXRfZGlyZWN0b3J5X3RpbWluZ19zdGF0cygpKQogICAgICAgICAgICAgaW5k
aXZpZHVhbF90ZXN0X3RpbWluZ3MuZXh0ZW5kKHRocmVhZC5nZXRfdGVzdF9yZXN1bHRzKCkpCi0g
ICAgICAgIHJldHVybiAoa2V5Ym9hcmRfaW50ZXJydXB0ZWQsIHRocmVhZF90aW1pbmdzLCB0ZXN0
X3RpbWluZ3MsCi0gICAgICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCisKKyAg
ICAgICAgcmV0dXJuICh0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rl
c3RfdGltaW5ncykKIAogICAgIGRlZiBuZWVkc19odHRwKHNlbGYpOgogICAgICAgICAiIiJSZXR1
cm5zIHdoZXRoZXIgdGhlIHRlc3QgcnVubmVyIG5lZWRzIGFuIEhUVFAgc2VydmVyLiIiIgpAQCAt
MTY4MCw2ICsxNjY5LDM2IEBAIGRlZiBwYXJzZV9hcmdzKGFyZ3M9Tm9uZSk6CiAgICAgcmV0dXJu
IG9wdGlvbnMsIGFyZ3MKIAogCitkZWYgX2ZpbmRfdGhyZWFkX3N0YWNrKGlkKToKKyAgICAiIiJS
ZXR1cm5zIGEgc3RhY2sgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gZHVtcCBhIHN0YWNrIHRy
YWNlIGZvcgorICAgIHRoZSBnaXZlbiB0aHJlYWQgaWQgKG9yIE5vbmUgaWYgdGhlIGlkIGlzIG5v
dCBmb3VuZCkuIiIiCisgICAgZm91bmRfc3RhY2sgPSBOb25lCisgICAgZm9yIHRocmVhZF9pZCwg
c3RhY2sgaW4gc3lzLl9jdXJyZW50X2ZyYW1lcygpLml0ZW1zKCk6CisgICAgICAgIGlmIHRocmVh
ZF9pZCA9PSBpZDoKKyAgICAgICAgICAgIGZvdW5kX3N0YWNrID0gc3RhY2sKKyAgICAgICAgICAg
IGJyZWFrCisgICAgcmV0dXJuIGZvdW5kX3N0YWNrCisKKworZGVmIF9sb2dfc3RhY2soc3RhY2sp
OgorICAgICIiIkxvZyBhIHN0YWNrIHRyYWNlIHRvIGxvZy5lcnJvcigpLiIiIgorICAgIGZvciBm
aWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lIGluIHRyYWNlYmFjay5leHRyYWN0X3N0YWNrKHN0
YWNrKToKKyAgICAgICAgX2xvZy5lcnJvcignRmlsZTogIiVzIiwgbGluZSAlZCwgaW4gJXMnICUg
KGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUpKQorICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAg
X2xvZy5lcnJvcignICAlcycgJSBsaW5lLnN0cmlwKCkpCisKKworZGVmIF9sb2dfd2VkZ2VkX3Ro
cmVhZCh0aHJlYWQpOgorICAgICIiIkxvZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZ2l2ZW4gdGhy
ZWFkIHN0YXRlLiIiIgorICAgIGlkID0gdGhyZWFkLmlkKCkKKyAgICBzdGFjayA9IF9maW5kX3Ro
cmVhZF9zdGFjayhpZCkKKyAgICBhc3NlcnQoc3RhY2sgaXMgbm90IE5vbmUpCisgICAgX2xvZy5l
cnJvcigiIikKKyAgICBfbG9nLmVycm9yKCJ0aHJlYWQgJXMgKCVkKSBpcyB3ZWRnZWQiICUgKHRo
cmVhZC5nZXROYW1lKCksIGlkKSkKKyAgICBfbG9nX3N0YWNrKHN0YWNrKQorICAgIF9sb2cuZXJy
b3IoIiIpCisKKwogZGVmIG1haW4oKToKICAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VfYXJncygp
CiAgICAgcG9ydF9vYmogPSBwb3J0LmdldChvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zKQpkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dl
YmtpdF90ZXN0c191bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKaW5kZXggMWM3NTFkNjllMjcy
MDZiYzk1M2QxNDQ5ODNmYzUwODg3ZmZlMDcxNy4uODgxYWMxOTI0MmM1NTI5MDA2MmIyYTk1MDkx
ZTQwM2RiNTk1NDA2ZiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0
LnB5CkBAIC0zMCwxMyArMzAsMjAgQEAKICIiIlVuaXQgdGVzdHMgZm9yIHJ1bl93ZWJraXRfdGVz
dHMuIiIiCiAKIGltcG9ydCBjb2RlY3MKK2ltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKK2ltcG9y
dCBwZGIKK2ltcG9ydCBRdWV1ZQogaW1wb3J0IHN5cworaW1wb3J0IHRocmVhZAoraW1wb3J0IHRp
bWUKK2ltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHdlYmtpdHB5LmNv
bW1vbiBpbXBvcnQgYXJyYXlfc3RyZWFtCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBv
cnQgcG9ydAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHJ1bl93ZWJraXRfdGVz
dHMKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBkdW1w
X3JlbmRlcl90cmVlX3RocmVhZAogCiBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkubW9jayBpbXBv
cnQgTW9jawogCkBAIC05Miw2ICs5OSw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWlsZGJvdF9vdXRwdXQuZ2V0KCksIFtd
KQogCiAKKwogZGVmIF9tb2NrZWRfb3BlbihvcmlnaW5hbF9vcGVuLCBmaWxlX2xpc3QpOgogICAg
IGRlZiBfd3JhcHBlcihuYW1lLCBtb2RlLCBlbmNvZGluZyk6CiAgICAgICAgIGlmIG5hbWUuZmlu
ZCgiLWV4cGVjdGVkLiIpICE9IC0xIGFuZCBtb2RlID09ICJ3IjoKQEAgLTE5MSw1ICsxOTksMTAz
IEBAIGNsYXNzIERyeXJ1blRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdmYXN0L2h0bWwnXSkpCiAKIAorY2xhc3MgVGVzdFRocmVh
ZChkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5XYXRjaGFibGVUaHJlYWQpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBzdGFydGVkX3F1ZXVlLCBzdG9wcGluZ19xdWV1ZSk6CisgICAgICAgIGR1bXBf
cmVuZGVyX3RyZWVfdGhyZWFkLldhdGNoYWJsZVRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAg
ICBzZWxmLl9zdGFydGVkX3F1ZXVlID0gc3RhcnRlZF9xdWV1ZQorICAgICAgICBzZWxmLl9zdG9w
cGluZ19xdWV1ZSA9IHN0b3BwaW5nX3F1ZXVlCisgICAgICAgIHNlbGYuX3RpbWVvdXQgPSBGYWxz
ZQorICAgICAgICBzZWxmLl90aW1lb3V0X3F1ZXVlID0gUXVldWUuUXVldWUoKQorCisgICAgZGVm
IHJ1bihzZWxmKToKKyAgICAgICAgc2VsZi5fdGhyZWFkX2lkID0gdGhyZWFkLmdldF9pZGVudCgp
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3N0YXJ0ZWRfcXVldWUucHV0KCcnKQor
ICAgICAgICAgICAgbXNnID0gc2VsZi5fc3RvcHBpbmdfcXVldWUuZ2V0KCkKKyAgICAgICAgICAg
IGlmIG1zZyA9PSAnS2V5Ym9hcmRJbnRlcnJ1cHQnOgorICAgICAgICAgICAgICAgIHJhaXNlIEtl
eWJvYXJkSW50ZXJydXB0CisgICAgICAgICAgICBlbGlmIG1zZyA9PSAnRXhjZXB0aW9uJzoKKyAg
ICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCkKKyAgICAgICAgICAgIGVsaWYgbXNnID09
ICdUaW1lb3V0JzoKKyAgICAgICAgICAgICAgICBzZWxmLl90aW1lb3V0ID0gVHJ1ZQorICAgICAg
ICAgICAgICAgIHNlbGYuX3RpbWVvdXRfcXVldWUuZ2V0KCkKKyAgICAgICAgZXhjZXB0OgorICAg
ICAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBzeXMuZXhjX2luZm8oKQorCisgICAgZGVm
IG5leHRfdGltZW91dChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fdGltZW91dDoKKyAgICAgICAg
ICAgIHNlbGYuX3RpbWVvdXRfcXVldWUucHV0KCdkb25lJykKKyAgICAgICAgICAgIHJldHVybiB0
aW1lLnRpbWUoKSAtIDEwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gdGltZS50
aW1lKCkKKworCitjbGFzcyBUZXN0SGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBhc3RyZWFtKToKKyAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9f
KHNlbGYpCisgICAgICAgIHNlbGYuX3N0cmVhbSA9IGFzdHJlYW0KKworICAgIGRlZiBlbWl0KHNl
bGYsIHJlY29yZCk6CisgICAgICAgIHNlbGYuX3N0cmVhbS53cml0ZShzZWxmLmZvcm1hdChyZWNv
cmQpKQorCisKK2NsYXNzIFdhaXRGb3JUaHJlYWRzVG9GaW5pc2hUZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKKyAgICBjbGFzcyBNb2NrVGVzdFJ1bm5lcihydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5u
ZXIpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBwYXNzCisKKyAg
ICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZGVm
IHVwZGF0ZV9zdW1tYXJ5KHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToKKyAgICAgICAgICAgIHBhc3MK
KworICAgIGRlZiBydW5fb25lX3RocmVhZChzZWxmLCBtc2cpOgorICAgICAgICBydW5uZXIgPSBz
ZWxmLk1vY2tUZXN0UnVubmVyKCkKKyAgICAgICAgc3RhcnRpbmdfcXVldWUgPSBRdWV1ZS5RdWV1
ZSgpCisgICAgICAgIHN0b3BwaW5nX3F1ZXVlID0gUXVldWUuUXVldWUoKQorICAgICAgICBjaGls
ZF90aHJlYWQgPSBUZXN0VGhyZWFkKHN0YXJ0aW5nX3F1ZXVlLCBzdG9wcGluZ19xdWV1ZSkKKyAg
ICAgICAgY2hpbGRfdGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgc3RhcnRlZF9tc2cgPSBzdGFydGlu
Z19xdWV1ZS5nZXQoKQorICAgICAgICBzdG9wcGluZ19xdWV1ZS5wdXQobXNnKQorICAgICAgICB0
aHJlYWRzID0gW2NoaWxkX3RocmVhZF0KKyAgICAgICAgcmV0dXJuIHJ1bm5lci5fd2FpdF9mb3Jf
dGhyZWFkc190b19maW5pc2godGhyZWFkcywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNl
bGYpOgorICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJycpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW50ZXJydXB0ZWQpCisKKyAgICBkZWYgdGVzdF9pbnRlcnJ1
cHQoc2VsZik6CisgICAgICAgIGludGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3RocmVhZCgnS2V5
Ym9hcmRJbnRlcnJ1cHQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50ZXJydXB0ZWQpCisK
KyAgICBkZWYgdGVzdF90aW1lb3V0KHNlbGYpOgorICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYu
cnVuX29uZV90aHJlYWQoJ1RpbWVvdXQnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGludGVy
cnVwdGVkKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFz
c2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnJ1bl9vbmVfdGhyZWFkLCAnRXhjZXB0aW9uJykK
KworCitjbGFzcyBTdGFuZGFsb25lRnVuY3Rpb25zVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Cisg
ICAgZGVmIHRlc3RfbG9nX3dlZGdlZF90aHJlYWQoc2VsZik6CisgICAgICAgIGxvZ2dlciA9IHJ1
bl93ZWJraXRfdGVzdHMuX2xvZworICAgICAgICBhc3RyZWFtID0gYXJyYXlfc3RyZWFtLkFycmF5
U3RyZWFtKCkKKyAgICAgICAgaGFuZGxlciA9IFRlc3RIYW5kbGVyKGFzdHJlYW0pCisgICAgICAg
IGxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCisKKyAgICAgICAgc3RhcnRpbmdfcXVldWUgPSBR
dWV1ZS5RdWV1ZSgpCisgICAgICAgIHN0b3BwaW5nX3F1ZXVlID0gUXVldWUuUXVldWUoKQorICAg
ICAgICBjaGlsZF90aHJlYWQgPSBUZXN0VGhyZWFkKHN0YXJ0aW5nX3F1ZXVlLCBzdG9wcGluZ19x
dWV1ZSkKKyAgICAgICAgY2hpbGRfdGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgbXNnID0gc3RhcnRp
bmdfcXVldWUuZ2V0KCkKKworICAgICAgICBydW5fd2Via2l0X3Rlc3RzLl9sb2dfd2VkZ2VkX3Ro
cmVhZChjaGlsZF90aHJlYWQpCisgICAgICAgIHN0b3BwaW5nX3F1ZXVlLnB1dCgnJykKKyAgICAg
ICAgY2hpbGRfdGhyZWFkLmpvaW4odGltZW91dD0xLjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRG
YWxzZShhc3RyZWFtLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2hpbGRfdGhy
ZWFkLmlzQWxpdmUoKSkKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVz
dC5tYWluKCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64373</attachid>
            <date>2010-08-13 13:52:05 -0700</date>
            <delta_ts>2010-08-13 17:34:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38561-20100813135204.patch</filename>
            <type>text/plain</type>
            <size>21139</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBmOGQxZDg4YzJiZDhhYzkzY2Y2MjhkMDYyM2M1ODk3ODI3NGMxOTUzLi5lZDYwNDYx
NWVlYjZlOWQxZTA5NjkxNjJkMjNhM2MxMTk1Nzk2NTNhIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAK
KzIwMTAtMDgtMDkgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmV3cml0ZSBuZXctcnVu
LXdlYmtpdC10ZXN0J3Mgd2FpdF9mb3JfdGhyZWFkc190b19maW5pc2ggbG9vcCB0bworICAgICAg
ICBjaGVjayBmb3IgZXhjZXB0aW9ucyBvbiBhbGwgdGhyZWFkcywgbm90IGp1c3QgdGhlIGZpcnN0
IHRocmVhZC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgY2hhbmdlIGFsc28gY2hhbmdlcyB0aGUg
bG9nZ2luZyBiZWhhdmlvciBmb3Igd2VkZ2VkIHRocmVhZHMKKyAgICAgICAgdG8gb25seSBkdW1w
IHRoZSBzdGFja3Mgb2YgdGhyZWFkcyB0aGF0IGFyZSBhY3R1YWxseSB3ZWRnZWQuCisKKyAgICAg
ICAgUmVmYWN0b3IgdGhlIHRocmVhZCBjbGFzc2VzIGluIHRoZSBkdW1wX3JlbmRlcl90cmVlX3Ro
cmVhZCBtb2R1bGUKKyAgICAgICAgdG8gbWFrZSB0aGUgY29udHJhY3QgYmV0d2VlbiBUZXN0UnVu
bmVyIGFuZCBUZXN0U2hlbGxUaHJlYWQgY2xlYXJlci4KKworICAgICAgICBBZGRlZCBhIGJ1bmNo
IG9mIHVuaXQgdGVzdHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zODU2MQorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0
LnB5OgorCiAyMDEwLTA4LTEyICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBCdWlsZCBicmVhayBmaXguCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3Ro
cmVhZC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CmluZGV4IDYzNjQ1MTFlNTAwYzhh
ZTQ4YmY2MjI1ZGEzMWU3MWJjOWM2ZjljNmUuLjYzNDM0MDAxYjUzZGUxY2M0MWFhMTBmN2E4ZTM4
YmU2YjYwYWM5YWIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CkBAIC01NCw5ICs1NCw5IEBAIF9sb2cgPSBsb2dn
aW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlLiIKICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQiKQogCiAKLWRl
ZiBwcm9jZXNzX291dHB1dChwb3J0LCB0ZXN0X2luZm8sIHRlc3RfdHlwZXMsIHRlc3RfYXJncywg
Y29uZmlndXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICBvdXRwdXRfZGlyLCBjcmFzaCwgdGlt
ZW91dCwgdGVzdF9ydW5fdGltZSwgYWN0dWFsX2NoZWNrc3VtLAotICAgICAgICAgICAgICAgICAg
IG91dHB1dCwgZXJyb3IpOgorZGVmIF9wcm9jZXNzX291dHB1dChwb3J0LCB0ZXN0X2luZm8sIHRl
c3RfdHlwZXMsIHRlc3RfYXJncywgY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAg
b3V0cHV0X2RpciwgY3Jhc2gsIHRpbWVvdXQsIHRlc3RfcnVuX3RpbWUsIGFjdHVhbF9jaGVja3N1
bSwKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCBlcnJvcik6CiAgICAgIiIiUmVjZWl2ZXMg
dGhlIG91dHB1dCBmcm9tIGEgRHVtcFJlbmRlclRyZWUgcHJvY2Vzcywgc3ViamVjdHMgaXQgdG8g
YQogICAgIG51bWJlciBvZiB0ZXN0cywgYW5kIHJldHVybnMgYSBsaXN0IG9mIGZhaWx1cmUgdHlw
ZXMgdGhlIHRlc3QgcHJvZHVjZWQuCiAKQEAgLTExOCw2ICsxMTgsMjEgQEAgZGVmIHByb2Nlc3Nf
b3V0cHV0KHBvcnQsIHRlc3RfaW5mbywgdGVzdF90eXBlcywgdGVzdF9hcmdzLCBjb25maWd1cmF0
aW9uLAogICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcywgdGlt
ZV9mb3JfZGlmZnMpCiAKIAorZGVmIF9wYWRfdGltZW91dCh0aW1lb3V0KToKKyAgICAiIiJSZXR1
cm5zIGEgc2FmZSBtdWx0aXBsZSBvZiB0aGUgcGVyLXRlc3QgdGltZW91dCB2YWx1ZSB0byB1c2UK
KyAgICB0byBkZXRlY3QgaHVuZyB0ZXN0IHRocmVhZHMuCisKKyAgICAiIiIKKyAgICAjIFdoZW4g
d2UncmUgcnVubmluZyBvbmUgdGVzdCBwZXIgRHVtcFJlbmRlclRyZWUgcHJvY2Vzcywgd2UgY2Fu
CisgICAgIyBlbmZvcmNlIGEgaGFyZCB0aW1lb3V0LiAgVGhlIER1bXBSZW5kZXJUcmVlIHdhdGNo
ZG9nIHVzZXMgMi41eAorICAgICMgdGhlIHRpbWVvdXQ7IHdlIHdhbnQgdG8gYmUgbGFyZ2VyIHRo
YW4gdGhhdC4KKyAgICByZXR1cm4gdGltZW91dCAqIDMKKworCitkZWYgX21pbGxpc2Vjb25kc190
b19zZWNvbmRzKG1zZWNzKToKKyAgICByZXR1cm4gZmxvYXQobXNlY3MpIC8gMTAwMC4wCisKKwog
Y2xhc3MgVGVzdFJlc3VsdChvYmplY3QpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVu
YW1lLCBmYWlsdXJlcywgdGVzdF9ydW5fdGltZSwKQEAgLTE2Miw3ICsxNzcsNyBAQCBjbGFzcyBT
aW5nbGVUZXN0VGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgICAgICAgICAgZHJpdmVyLnJ1
bl90ZXN0KHRlc3RfaW5mby51cmkuc3RyaXAoKSwgdGVzdF9pbmZvLnRpbWVvdXQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdF9pbmZvLmltYWdlX2hhc2goKSkKICAgICAgICAgZW5k
ID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5fdGVzdF9yZXN1bHQgPSBwcm9jZXNzX291dHB1
dChzZWxmLl9wb3J0LAorICAgICAgICBzZWxmLl90ZXN0X3Jlc3VsdCA9IF9wcm9jZXNzX291dHB1
dChzZWxmLl9wb3J0LAogICAgICAgICAgICAgdGVzdF9pbmZvLCBzZWxmLl90ZXN0X3R5cGVzLCBz
ZWxmLl90ZXN0X2FyZ3MsCiAgICAgICAgICAgICBzZWxmLl9jb25maWd1cmF0aW9uLCBzZWxmLl9v
dXRwdXRfZGlyLCBjcmFzaCwgdGltZW91dCwgZW5kIC0gc3RhcnQsCiAgICAgICAgICAgICBhY3R1
YWxfY2hlY2tzdW0sIG91dHB1dCwgZXJyb3IpCkBAIC0xNzIsOCArMTg3LDQyIEBAIGNsYXNzIFNp
bmdsZVRlc3RUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgICAgIHJldHVybiBzZWxmLl90
ZXN0X3Jlc3VsdAogCiAKLWNsYXNzIFRlc3RTaGVsbFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToK
K2NsYXNzIFdhdGNoYWJsZVRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAiIiJUaGlzIGNs
YXNzIGFic3RyYWN0cyBhbiBpbnRlcmZhY2UgdXNlZCBieQorICAgIHJ1bl93ZWJraXRfdGVzdHMu
VGVzdFJ1bm5lci5fd2FpdF9mb3JfdGhyZWFkc190b19maW5pc2ggZm9yIHRocmVhZAorICAgIG1h
bmFnZW1lbnQuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICB0aHJlYWRpbmcu
VGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX2NhbmNlbGVkID0gRmFsc2UKKyAg
ICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBOb25lCisgICAgICAgIHNlbGYuX25leHRfdGlt
ZW91dCA9IE5vbmUKKyAgICAgICAgc2VsZi5fdGhyZWFkX2lkID0gTm9uZQorCisgICAgZGVmIGNh
bmNlbChzZWxmKToKKyAgICAgICAgIiIiU2V0IGEgZmxhZyB0ZWxsaW5nIHRoaXMgdGhyZWFkIHRv
IHF1aXQuIiIiCisgICAgICAgIHNlbGYuX2NhbmNlbGVkID0gVHJ1ZQorCisgICAgZGVmIGNsZWFy
X25leHRfdGltZW91dChzZWxmKToKKyAgICAgICAgIiIiTWFyayBhIGZsYWcgdGVsbGluZyB0aGlz
IHRocmVhZCB0byBzdG9wIHNldHRpbmcgdGltZW91dHMuIiIiCisgICAgICAgIHNlbGYuX3RpbWVv
dXQgPSAwCisKKyAgICBkZWYgZXhjZXB0aW9uX2luZm8oc2VsZik6CisgICAgICAgICIiIklmIHJ1
bigpIHRlcm1pbmF0ZWQgb24gYW4gdW5jYXVnaHQgZXhjZXB0aW9uLCByZXR1cm4gaXQgaGVyZQor
ICAgICAgICAoKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spIHR1cGxlKS4KKyAgICAgICAgUmV0dXJu
cyBOb25lIGlmIHJ1bigpIHRlcm1pbmF0ZWQgbm9ybWFsbHkuIE1lYW50IHRvIGJlIGNhbGxlZCBh
ZnRlcgorICAgICAgICBqb2luaW5nIHRoaXMgdGhyZWFkLiIiIgorICAgICAgICByZXR1cm4gc2Vs
Zi5fZXhjZXB0aW9uX2luZm8KKworICAgIGRlZiBpZChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJu
IGEgdGhyZWFkIGlkZW50aWZpZXIuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl90aHJlYWRfaWQK
KworICAgIGRlZiBuZXh0X3RpbWVvdXQoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgdGlt
ZSB0aGUgdGVzdCBpcyBzdXBwb3NlZCB0byBmaW5pc2ggYnkuIiIiCisgICAgICAgIHJldHVybiBz
ZWxmLl9uZXh0X3RpbWVvdXQKIAorCitjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhy
ZWFkKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgZmlsZW5hbWVfbGlzdF9xdWV1ZSwg
cmVzdWx0X3F1ZXVlLAogICAgICAgICAgICAgICAgICB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsIGlt
YWdlX3BhdGgsIHNoZWxsX2FyZ3MsIG9wdGlvbnMpOgogICAgICAgICAiIiJJbml0aWFsaXplIGFs
bCB0aGUgbG9jYWwgc3RhdGUgZm9yIHRoaXMgRHVtcFJlbmRlclRyZWUgdGhyZWFkLgpAQCAtMTky
LDcgKzI0MSw3IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAg
ICAgICAgICAgICAgY29tbWFuZC1saW5lIG9wdGlvbnMgc2hvdWxkIG1hdGNoIHRob3NlIGV4cGVj
dGVkIGJ5CiAgICAgICAgICAgICAgIHJ1bl93ZWJraXRfdGVzdHM7IHRoZXkgYXJlIHR5cGljYWxs
eSBwYXNzZWQgdmlhIHRoZQogICAgICAgICAgICAgICBydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5u
ZXIgY2xhc3MuIiIiCi0gICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAg
ICAgICAgV2F0Y2hhYmxlVGhyZWFkLl9faW5pdF9fKHNlbGYpCiAgICAgICAgIHNlbGYuX3BvcnQg
PSBwb3J0CiAgICAgICAgIHNlbGYuX2ZpbGVuYW1lX2xpc3RfcXVldWUgPSBmaWxlbmFtZV9saXN0
X3F1ZXVlCiAgICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZSA9IHJlc3VsdF9xdWV1ZQpAQCAtMjAz
LDggKzI1Miw2IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAg
ICAgICAgc2VsZi5faW1hZ2VfcGF0aCA9IGltYWdlX3BhdGgKICAgICAgICAgc2VsZi5fc2hlbGxf
YXJncyA9IHNoZWxsX2FyZ3MKICAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKLSAgICAg
ICAgc2VsZi5fY2FuY2VsZWQgPSBGYWxzZQotICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9
IE5vbmUKICAgICAgICAgc2VsZi5fZGlyZWN0b3J5X3RpbWluZ19zdGF0cyA9IHt9CiAgICAgICAg
IHNlbGYuX3Rlc3RfcmVzdWx0cyA9IFtdCiAgICAgICAgIHNlbGYuX251bV90ZXN0cyA9IDAKQEAg
LTIzMSwxNyArMjc4LDYgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJlYWQp
OgogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RfcmVzdWx0cwogCi0gICAg
ZGVmIGNhbmNlbChzZWxmKToKLSAgICAgICAgIiIiU2V0IGEgZmxhZyB0ZWxsaW5nIHRoaXMgdGhy
ZWFkIHRvIHF1aXQuIiIiCi0gICAgICAgIHNlbGYuX2NhbmNlbGVkID0gVHJ1ZQotCi0gICAgZGVm
IGdldF9leGNlcHRpb25faW5mbyhzZWxmKToKLSAgICAgICAgIiIiSWYgcnVuKCkgdGVybWluYXRl
ZCBvbiBhbiB1bmNhdWdodCBleGNlcHRpb24sIHJldHVybiBpdCBoZXJlCi0gICAgICAgICgodHlw
ZSwgdmFsdWUsIHRyYWNlYmFjaykgdHVwbGUpLgotICAgICAgICBSZXR1cm5zIE5vbmUgaWYgcnVu
KCkgdGVybWluYXRlZCBub3JtYWxseS4gTWVhbnQgdG8gYmUgY2FsbGVkIGFmdGVyCi0gICAgICAg
IGpvaW5pbmcgdGhpcyB0aHJlYWQuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9leGNlcHRpb25f
aW5mbwotCiAgICAgZGVmIGdldF90b3RhbF90aW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gbWF4
KHNlbGYuX3N0b3BfdGltZSAtIHNlbGYuX3N0YXJ0X3RpbWUsIDAuMCkKIApAQCAtMjUxLDYgKzI4
Nyw3IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICBkZWYg
cnVuKHNlbGYpOgogICAgICAgICAiIiJEZWxlZ2F0ZSBtYWluIHdvcmsgdG8gYSBoZWxwZXIgbWV0
aG9kIGFuZCB3YXRjaCBmb3IgdW5jYXVnaHQKICAgICAgICAgZXhjZXB0aW9ucy4iIiIKKyAgICAg
ICAgc2VsZi5fdGhyZWFkX2lkID0gdGhyZWFkLmdldF9pZGVudCgpCiAgICAgICAgIHNlbGYuX3N0
YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogICAgICAgICBzZWxmLl9udW1fdGVzdHMgPSAwCiAgICAg
ICAgIHRyeToKQEAgLTM4NCwxMCArNDIxLDEwIEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZCh0aHJl
YWRpbmcuVGhyZWFkKToKIAogICAgICAgICB3b3JrZXIuc3RhcnQoKQogCi0gICAgICAgICMgV2hl
biB3ZSdyZSBydW5uaW5nIG9uZSB0ZXN0IHBlciBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzLCB3ZSBj
YW4KLSAgICAgICAgIyBlbmZvcmNlIGEgaGFyZCB0aW1lb3V0LiAgVGhlIER1bXBSZW5kZXJUcmVl
IHdhdGNoZG9nIHVzZXMgMi41eAotICAgICAgICAjIHRoZSB0aW1lb3V0OyB3ZSB3YW50IHRvIGJl
IGxhcmdlciB0aGFuIHRoYXQuCi0gICAgICAgIHdvcmtlci5qb2luKGludCh0ZXN0X2luZm8udGlt
ZW91dCkgKiAzLjAgLyAxMDAwLjApCisgICAgICAgIHRocmVhZF90aW1lb3V0ID0gX21pbGxpc2Vj
b25kc190b19zZWNvbmRzKAorICAgICAgICAgICAgX3BhZF90aW1lb3V0KHRlc3RfaW5mby50aW1l
b3V0KSkKKyAgICAgICAgdGhyZWFkLl9uZXh0X3RpbWVvdXQgPSB0aW1lLnRpbWUoKSArIHRocmVh
ZF90aW1lb3V0CisgICAgICAgIHdvcmtlci5qb2luKHRocmVhZF90aW1lb3V0KQogICAgICAgICBp
ZiB3b3JrZXIuaXNBbGl2ZSgpOgogICAgICAgICAgICAgIyBJZiBqb2luKCkgcmV0dXJuZWQgd2l0
aCB0aGUgdGhyZWFkIHN0aWxsIHJ1bm5pbmcsIHRoZQogICAgICAgICAgICAgIyBEdW1wUmVuZGVy
VHJlZSBpcyBjb21wbGV0ZWx5IGh1bmcgYW5kIHRoZXJlJ3Mgbm90aGluZwpAQCAtNDMzLDExICs0
NzAsMTYgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgICAg
ICAgICAgbm90IHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMpKToKICAgICAgICAgICAgIGltYWdl
X2hhc2ggPSAiIgogICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCisKKyAgICAgICAgdGhyZWFk
X3RpbWVvdXQgPSBfbWlsbGlzZWNvbmRzX3RvX3NlY29uZHMoCisgICAgICAgICAgICAgX3BhZF90
aW1lb3V0KHRlc3RfaW5mby50aW1lb3V0KSkKKyAgICAgICAgc2VsZi5fbmV4dF90aW1lb3V0ID0g
c3RhcnQgKyB0aHJlYWRfdGltZW91dAorCiAgICAgICAgIGNyYXNoLCB0aW1lb3V0LCBhY3R1YWxf
Y2hlY2tzdW0sIG91dHB1dCwgZXJyb3IgPSBcCiAgICAgICAgICAgIHNlbGYuX2RyaXZlci5ydW5f
dGVzdCh0ZXN0X2luZm8udXJpLCB0ZXN0X2luZm8udGltZW91dCwgaW1hZ2VfaGFzaCkKICAgICAg
ICAgZW5kID0gdGltZS50aW1lKCkKIAotICAgICAgICByZXN1bHQgPSBwcm9jZXNzX291dHB1dChz
ZWxmLl9wb3J0LCB0ZXN0X2luZm8sIHNlbGYuX3Rlc3RfdHlwZXMsCisgICAgICAgIHJlc3VsdCA9
IF9wcm9jZXNzX291dHB1dChzZWxmLl9wb3J0LCB0ZXN0X2luZm8sIHNlbGYuX3Rlc3RfdHlwZXMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfYXJncywgc2VsZi5f
b3B0aW9ucy5jb25maWd1cmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LCBjcmFzaCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGltZW91dCwgZW5kIC0gc3RhcnQsIGFjdHVhbF9jaGVja3N1bSwKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9ydW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4IDQ5MGFjM2MyMGIyMjZlMWVmZDdhM2U5OWQwOTA1
OThjMTdhNTA3OTAuLmNiNDUzZjAxODIwMjVkM2I4MGI2MDg2ZjIzZWFiNDhlNmI1ZmJmOWQgMTAw
NzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtNTMsNiArNTMsNyBAQCBpbXBvcnQgbG9nZ2lu
ZwogaW1wb3J0IG1hdGgKIGltcG9ydCBvcHRwYXJzZQogaW1wb3J0IG9zCitpbXBvcnQgcGRiCiBp
bXBvcnQgcGxhdGZvcm0KIGltcG9ydCBRdWV1ZQogaW1wb3J0IHJhbmRvbQpAQCAtNjI5LDM1ICs2
MzAsMTIgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHdl
IHNob3VsZCBydW4gYWxsIHRoZSB0ZXN0cyBpbiB0aGUgbWFpbiB0aHJlYWQuIiIiCiAgICAgICAg
IHJldHVybiBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpID09IDEKIAotICAgIGRl
ZiBfZHVtcF90aHJlYWRfc3RhdGVzKHNlbGYpOgotICAgICAgICBmb3IgdGhyZWFkX2lkLCBzdGFj
ayBpbiBzeXMuX2N1cnJlbnRfZnJhbWVzKCkuaXRlbXMoKToKLSAgICAgICAgICAgICMgRklYTUU6
IFB5dGhvbiAyLjYgaGFzIHRocmVhZC5pZGVudCB3aGljaCB3ZSBjb3VsZAotICAgICAgICAgICAg
IyB1c2UgdG8gbWFwIGZyb20gdGhyZWFkX2lkIGJhY2sgdG8gdGhyZWFkLm5hbWUKLSAgICAgICAg
ICAgIHByaW50ICJcbiMgVGhyZWFkOiAlZCIgJSB0aHJlYWRfaWQKLSAgICAgICAgICAgIGZvciBm
aWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lIGluIHRyYWNlYmFjay5leHRyYWN0X3N0YWNrKHN0
YWNrKToKLSAgICAgICAgICAgICAgICBwcmludCAnRmlsZTogIiVzIiwgbGluZSAlZCwgaW4gJXMn
ICUgKGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUpCi0gICAgICAgICAgICAgICAgaWYgbGluZToKLSAg
ICAgICAgICAgICAgICAgICAgcHJpbnQgIiAgJXMiICUgKGxpbmUuc3RyaXAoKSkKLQotICAgIGRl
ZiBfZHVtcF90aHJlYWRfc3RhdGVzX2lmX25lY2Vzc2FyeShzZWxmKToKLSAgICAgICAgIyBIQUNL
OiBEdW1wIHRocmVhZCBzdGF0ZXMgZXZlcnkgbWludXRlIHRvIGZpZ3VyZSBvdXQgd2hhdCdzCi0g
ICAgICAgICMgaGFuZ2luZyBvbiB0aGUgYm90cy4KLSAgICAgICAgaWYgbm90IHNlbGYuX29wdGlv
bnMudmVyYm9zZToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBkdW1wX3RocmVhZHNfZXZl
cnkgPSA2MCAgIyBEdW1wIGV2ZXJ5IG1pbnV0ZQotICAgICAgICBpZiBub3Qgc2VsZi5fbGFzdF90
aHJlYWRfZHVtcDoKLSAgICAgICAgICAgIHNlbGYuX2xhc3RfdGhyZWFkX2R1bXAgPSB0aW1lLnRp
bWUoKQotICAgICAgICB0aW1lX3NpbmNlX2xhc3RfZHVtcCA9IHRpbWUudGltZSgpIC0gc2VsZi5f
bGFzdF90aHJlYWRfZHVtcAotICAgICAgICBpZiAgdGltZV9zaW5jZV9sYXN0X2R1bXAgPiBkdW1w
X3RocmVhZHNfZXZlcnk6Ci0gICAgICAgICAgICBzZWxmLl9kdW1wX3RocmVhZF9zdGF0ZXMoKQot
ICAgICAgICAgICAgc2VsZi5fbGFzdF90aHJlYWRfZHVtcCA9IHRpbWUudGltZSgpCi0KICAgICBk
ZWYgX3J1bl90ZXN0cyhzZWxmLCBmaWxlX2xpc3QsIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAg
IiIiUnVucyB0aGUgdGVzdHMgaW4gdGhlIGZpbGVfbGlzdC4KIAotICAgICAgICBSZXR1cm46IEEg
dHVwbGUgKGZhaWx1cmVzLCB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLAorICAgICAgICBS
ZXR1cm46IEEgdHVwbGUgKGtleWJvYXJkX2ludGVycnVwdGVkLCB0aHJlYWRfdGltaW5ncywgdGVz
dF90aW1pbmdzLAogICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCi0gICAgICAg
ICAgICBmYWlsdXJlcyBpcyBhIG1hcCBmcm9tIHRlc3QgdG8gbGlzdCBvZiBmYWlsdXJlIHR5cGVz
CisgICAgICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCBpcyB3aGV0aGVyIHNvbWVvbmUgdHlw
ZWQgQ3RybF5DCiAgICAgICAgICAgICB0aHJlYWRfdGltaW5ncyBpcyBhIGxpc3Qgb2YgZGljdHMg
d2l0aCB0aGUgdG90YWwgcnVudGltZQogICAgICAgICAgICAgICBvZiBlYWNoIHRocmVhZCB3aXRo
ICduYW1lJywgJ251bV90ZXN0cycsICd0b3RhbF90aW1lJyBwcm9wZXJ0aWVzCiAgICAgICAgICAg
ICB0ZXN0X3RpbWluZ3MgaXMgYSBsaXN0IG9mIHRpbWluZ3MgZm9yIGVhY2ggc2hhcmRlZCBzdWJk
aXJlY3RvcnkKQEAgLTY3Niw0NCArNjU0LDU1IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0X3N1bW1hcnkpCiAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGlu
ZyB0ZXN0aW5nIC4uLiIpCiAKLSAgICAgICAgIyBXYWl0IGZvciB0aGUgdGhyZWFkcyB0byBmaW5p
c2ggYW5kIGNvbGxlY3QgdGVzdCBmYWlsdXJlcy4KLSAgICAgICAgZmFpbHVyZXMgPSB7fQotICAg
ICAgICB0ZXN0X3RpbWluZ3MgPSB7fQotICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyA9
IFtdCi0gICAgICAgIHRocmVhZF90aW1pbmdzID0gW10KKyAgICAgICAga2V5Ym9hcmRfaW50ZXJy
dXB0ZWQgPSBzZWxmLl93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaCh0aHJlYWRzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdF9zdW1tYXJ5KQorICAgICAgICAodGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywg
aW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpID0gXAorICAgICAgICAgICAgc2VsZi5fY29sbGVjdF90
aW1pbmdfaW5mbyh0aHJlYWRzKQorCisgICAgICAgIHJldHVybiAoa2V5Ym9hcmRfaW50ZXJydXB0
ZWQsIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCisgICAgICAgICAgICAgICAgaW5kaXZp
ZHVhbF90ZXN0X3RpbWluZ3MpCisKKyAgICBkZWYgX3dhaXRfZm9yX3RocmVhZHNfdG9fZmluaXNo
KHNlbGYsIHRocmVhZHMsIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAga2V5Ym9hcmRfaW50ZXJy
dXB0ZWQgPSBGYWxzZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIExvb3AgdGhyb3VnaCBh
bGwgdGhlIHRocmVhZHMgd2FpdGluZyBmb3IgdGhlbSB0byBmaW5pc2guCi0gICAgICAgICAgICBm
b3IgdGhyZWFkIGluIHRocmVhZHM6Ci0gICAgICAgICAgICAgICAgIyBGSVhNRTogV2UnbGwgZW5k
IHVwIHdhaXRpbmcgb24gdGhlIGZpcnN0IHRocmVhZCB0aGUgd2hvbGUKLSAgICAgICAgICAgICAg
ICAjIHRpbWUuICBUaGF0IG1lYW5zIHdlIHdvbid0IG5vdGljZSBleGNlcHRpb25zIG9uIG90aGVy
Ci0gICAgICAgICAgICAgICAgIyB0aHJlYWRzIHVudGlsIHRoZSBmaXJzdCBvbmUgZXhpdHMuCi0g
ICAgICAgICAgICAgICAgIyBXZSBzaG91bGQgaW5zdGVhZCB3aGlsZSBUcnVlOiBpbiB0aGUgb3V0
ZXIgbG9vcAotICAgICAgICAgICAgICAgICMgYW5kIHRoZW4gbG9vcCB0aHJvdWdoIHRocmVhZHMg
am9pbmluZyBhbmQgY2hlY2tpbmcKLSAgICAgICAgICAgICAgICAjIGlzQWxpdmUgYW5kIGdldF9l
eGNlcHRpb25faW5mby4gIEV4aXRpbmcgb24gYW55IGV4Y2VwdGlvbi4KLSAgICAgICAgICAgICAg
ICB3aGlsZSB0aHJlYWQuaXNBbGl2ZSgpOgotICAgICAgICAgICAgICAgICAgICAjIFdha2UgdGhl
IG1haW4gdGhyZWFkIGV2ZXJ5IDAuMSBzZWNvbmRzIHNvIHdlCi0gICAgICAgICAgICAgICAgICAg
ICMgY2FuIGNhbGwgdXBkYXRlX3N1bW1hcnkgaW4gYSB0aW1lbHkgZmFzaGlvbi4KLSAgICAgICAg
ICAgICAgICAgICAgdGhyZWFkLmpvaW4oMC4xKQotICAgICAgICAgICAgICAgICAgICAjIEhBQ0s6
IFVzZWQgZm9yIGRlYnVnZ2luZyB0aHJlYWRzIG9uIHRoZSBib3RzLgotICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9kdW1wX3RocmVhZF9zdGF0ZXNfaWZfbmVjZXNzYXJ5KCkKLSAgICAgICAgICAg
ICAgICAgICAgc2VsZi51cGRhdGVfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKKyAgICAgICAgICAg
IHNvbWVfdGhyZWFkX2lzX2FsaXZlID0gVHJ1ZQorICAgICAgICAgICAgd2hpbGUgc29tZV90aHJl
YWRfaXNfYWxpdmU6CisgICAgICAgICAgICAgICAgc29tZV90aHJlYWRfaXNfYWxpdmUgPSBGYWxz
ZQorICAgICAgICAgICAgICAgIHQgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgICAgIGZvciB0
aHJlYWQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uX2luZm8gPSB0
aHJlYWQuZXhjZXB0aW9uX2luZm8oKQorICAgICAgICAgICAgICAgICAgICBpZiBleGNlcHRpb25f
aW5mbyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgUmUtcmFpc2UgdGhl
IHRocmVhZCdzIGV4Y2VwdGlvbiBoZXJlIHRvIG1ha2UgaXQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICMgY2xlYXIgdGhhdCB0ZXN0aW5nIHdhcyBhYm9ydGVkLiBPdGhlcndpc2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAjIHRoZSB0ZXN0cyB0aGF0IGRpZCBub3QgcnVuIHdvdWxkIGJlIGFz
c3VtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdG8gaGF2ZSBwYXNzZWQuCisgICAgICAg
ICAgICAgICAgICAgICAgICByYWlzZSAoZXhjZXB0aW9uX2luZm9bMF0sIGV4Y2VwdGlvbl9pbmZv
WzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbl9pbmZvWzJdKQor
CisgICAgICAgICAgICAgICAgICAgIGlmIHRocmVhZC5pc0FsaXZlKCk6CisgICAgICAgICAgICAg
ICAgICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IFRydWUKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5leHRfdGltZW91dCA9IHRocmVhZC5uZXh0X3RpbWVvdXQoKQorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG5leHRfdGltZW91dCBhbmQgdCA+IG5leHRfdGltZW91dCk6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX2xvZ193ZWRnZWRfdGhyZWFkKHRocmVhZCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQuY2xlYXJfbmV4dF90aW1lb3V0KCkKKworICAg
ICAgICAgICAgICAgIHNlbGYudXBkYXRlX3N1bW1hcnkocmVzdWx0X3N1bW1hcnkpCisKKyAgICAg
ICAgICAgICAgICBpZiBzb21lX3RocmVhZF9pc19hbGl2ZToKKyAgICAgICAgICAgICAgICAgICAg
dGltZS5zbGVlcCgwLjEpCiAKICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAg
ICAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBUcnVlCiAgICAgICAgICAgICBmb3IgdGhy
ZWFkIGluIHRocmVhZHM6CiAgICAgICAgICAgICAgICAgdGhyZWFkLmNhbmNlbCgpCiAKLSAgICAg
ICAgaWYgbm90IGtleWJvYXJkX2ludGVycnVwdGVkOgotICAgICAgICAgICAgZm9yIHRocmVhZCBp
biB0aHJlYWRzOgotICAgICAgICAgICAgICAgICMgQ2hlY2sgd2hldGhlciBhIHRocmVhZCBkaWVk
IGJlZm9yZSBub3JtYWwgY29tcGxldGlvbi4KLSAgICAgICAgICAgICAgICBleGNlcHRpb25faW5m
byA9IHRocmVhZC5nZXRfZXhjZXB0aW9uX2luZm8oKQotICAgICAgICAgICAgICAgIGlmIGV4Y2Vw
dGlvbl9pbmZvIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAjIFJlLXJhaXNlIHRo
ZSB0aHJlYWQncyBleGNlcHRpb24gaGVyZSB0byBtYWtlIGl0IGNsZWFyCi0gICAgICAgICAgICAg
ICAgICAgICMgc29tZXRoaW5nIHdlbnQgd3JvbmcuIE90aGVyd2lzZSwgdGhlIHRlc3RzIHRoYXQg
ZGlkIG5vdAotICAgICAgICAgICAgICAgICAgICAjIHJ1biB3b3VsZCBiZSBhc3N1bWVkIHRvIGhh
dmUgcGFzc2VkLgotICAgICAgICAgICAgICAgICAgICByYWlzZSAoZXhjZXB0aW9uX2luZm9bMF0s
IGV4Y2VwdGlvbl9pbmZvWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9u
X2luZm9bMl0pCisgICAgICAgIHJldHVybiBrZXlib2FyZF9pbnRlcnJ1cHRlZAorCisgICAgZGVm
IF9jb2xsZWN0X3RpbWluZ19pbmZvKHNlbGYsIHRocmVhZHMpOgorICAgICAgICB0ZXN0X3RpbWlu
Z3MgPSB7fQorICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyA9IFtdCisgICAgICAgIHRo
cmVhZF90aW1pbmdzID0gW10KIAogICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6CiAgICAg
ICAgICAgICB0aHJlYWRfdGltaW5ncy5hcHBlbmQoeyduYW1lJzogdGhyZWFkLmdldE5hbWUoKSwK
QEAgLTcyMSw4ICs3MTAsOCBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAndG90YWxfdGltZSc6IHRocmVhZC5nZXRfdG90YWxfdGltZSgpfSkK
ICAgICAgICAgICAgIHRlc3RfdGltaW5ncy51cGRhdGUodGhyZWFkLmdldF9kaXJlY3RvcnlfdGlt
aW5nX3N0YXRzKCkpCiAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncy5leHRlbmQo
dGhyZWFkLmdldF90ZXN0X3Jlc3VsdHMoKSkKLSAgICAgICAgcmV0dXJuIChrZXlib2FyZF9pbnRl
cnJ1cHRlZCwgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywKLSAgICAgICAgICAgICAgICBp
bmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKKworICAgICAgICByZXR1cm4gKHRocmVhZF90aW1pbmdz
LCB0ZXN0X3RpbWluZ3MsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQogCiAgICAgZGVmIG5lZWRz
X2h0dHAoc2VsZik6CiAgICAgICAgICIiIlJldHVybnMgd2hldGhlciB0aGUgdGVzdCBydW5uZXIg
bmVlZHMgYW4gSFRUUCBzZXJ2ZXIuIiIiCkBAIC0xNjgwLDYgKzE2NjksMzQgQEAgZGVmIHBhcnNl
X2FyZ3MoYXJncz1Ob25lKToKICAgICByZXR1cm4gb3B0aW9ucywgYXJncwogCiAKK2RlZiBfZmlu
ZF90aHJlYWRfc3RhY2soaWQpOgorICAgICIiIlJldHVybnMgYSBzdGFjayBvYmplY3QgdGhhdCBj
YW4gYmUgdXNlZCB0byBkdW1wIGEgc3RhY2sgdHJhY2UgZm9yCisgICAgdGhlIGdpdmVuIHRocmVh
ZCBpZCAob3IgTm9uZSBpZiB0aGUgaWQgaXMgbm90IGZvdW5kKS4iIiIKKyAgICBmb3IgdGhyZWFk
X2lkLCBzdGFjayBpbiBzeXMuX2N1cnJlbnRfZnJhbWVzKCkuaXRlbXMoKToKKyAgICAgICAgaWYg
dGhyZWFkX2lkID09IGlkOgorICAgICAgICAgICAgcmV0dXJuIHN0YWNrCisgICAgcmV0dXJuIE5v
bmUKKworCitkZWYgX2xvZ19zdGFjayhzdGFjayk6CisgICAgIiIiTG9nIGEgc3RhY2sgdHJhY2Ug
dG8gbG9nLmVycm9yKCkuIiIiCisgICAgZm9yIGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUg
aW4gdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soc3RhY2spOgorICAgICAgICBfbG9nLmVycm9yKCdG
aWxlOiAiJXMiLCBsaW5lICVkLCBpbiAlcycgJSAoZmlsZW5hbWUsIGxpbmVubywgbmFtZSkpCisg
ICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICBfbG9nLmVycm9yKCcgICVzJyAlIGxpbmUuc3Ry
aXAoKSkKKworCitkZWYgX2xvZ193ZWRnZWRfdGhyZWFkKHRocmVhZCk6CisgICAgIiIiTG9nIGlu
Zm9ybWF0aW9uIGFib3V0IHRoZSBnaXZlbiB0aHJlYWQgc3RhdGUuIiIiCisgICAgaWQgPSB0aHJl
YWQuaWQoKQorICAgIHN0YWNrID0gX2ZpbmRfdGhyZWFkX3N0YWNrKGlkKQorICAgIGFzc2VydChz
dGFjayBpcyBub3QgTm9uZSkKKyAgICBfbG9nLmVycm9yKCIiKQorICAgIF9sb2cuZXJyb3IoInRo
cmVhZCAlcyAoJWQpIGlzIHdlZGdlZCIgJSAodGhyZWFkLmdldE5hbWUoKSwgaWQpKQorICAgIF9s
b2dfc3RhY2soc3RhY2spCisgICAgX2xvZy5lcnJvcigiIikKKworCiBkZWYgbWFpbigpOgogICAg
IG9wdGlvbnMsIGFyZ3MgPSBwYXJzZV9hcmdzKCkKICAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KG9w
dGlvbnMucGxhdGZvcm0sIG9wdGlvbnMpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191
bml0dGVzdC5weQppbmRleCAxYzc1MWQ2OWUyNzIwNmJjOTUzZDE0NDk4M2ZjNTA4ODdmZmUwNzE3
Li5lMWIzNzQ2M2U5NmVlMjFmMTAzMGQ5ZDAwZDY1YjkwMmVlZGY1MDE4IDEwMDY0NAotLS0gYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3Rz
X3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKQEAgLTMwLDEzICszMCwyMCBAQAogIiIi
VW5pdCB0ZXN0cyBmb3IgcnVuX3dlYmtpdF90ZXN0cy4iIiIKIAogaW1wb3J0IGNvZGVjcworaW1w
b3J0IGxvZ2dpbmcKIGltcG9ydCBvcworaW1wb3J0IHBkYgoraW1wb3J0IFF1ZXVlCiBpbXBvcnQg
c3lzCitpbXBvcnQgdGhyZWFkCitpbXBvcnQgdGltZQoraW1wb3J0IHRocmVhZGluZwogaW1wb3J0
IHVuaXR0ZXN0CiAKIGZyb20gd2Via2l0cHkuY29tbW9uIGltcG9ydCBhcnJheV9zdHJlYW0KIGZy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBwb3J0CiBmcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cyBpbXBvcnQgcnVuX3dlYmtpdF90ZXN0cworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkCiAKIGZyb20g
d2Via2l0cHkudGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBNb2NrCiAKQEAgLTkyLDYgKzk5LDcgQEAg
Y2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGJ1aWxkYm90X291dHB1dC5nZXQoKSwgW10pCiAKIAorCiBkZWYgX21vY2tlZF9vcGVuKG9y
aWdpbmFsX29wZW4sIGZpbGVfbGlzdCk6CiAgICAgZGVmIF93cmFwcGVyKG5hbWUsIG1vZGUsIGVu
Y29kaW5nKToKICAgICAgICAgaWYgbmFtZS5maW5kKCItZXhwZWN0ZWQuIikgIT0gLTEgYW5kIG1v
ZGUgPT0gInciOgpAQCAtMTkxLDUgKzE5OSwxMTAgQEAgY2xhc3MgRHJ5cnVuVGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zhc3Qv
aHRtbCddKSkKIAogCitjbGFzcyBUZXN0VGhyZWFkKGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLldh
dGNoYWJsZVRocmVhZCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0ZWRfcXVldWUsIHN0
b3BwaW5nX3F1ZXVlKToKKyAgICAgICAgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuV2F0Y2hhYmxl
VGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX3N0YXJ0ZWRfcXVldWUgPSBzdGFy
dGVkX3F1ZXVlCisgICAgICAgIHNlbGYuX3N0b3BwaW5nX3F1ZXVlID0gc3RvcHBpbmdfcXVldWUK
KyAgICAgICAgc2VsZi5fdGltZW91dCA9IEZhbHNlCisgICAgICAgIHNlbGYuX3RpbWVvdXRfcXVl
dWUgPSBRdWV1ZS5RdWV1ZSgpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBzZWxmLl90
aHJlYWRfaWQgPSB0aHJlYWQuZ2V0X2lkZW50KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
c2VsZi5fc3RhcnRlZF9xdWV1ZS5wdXQoJycpCisgICAgICAgICAgICBtc2cgPSBzZWxmLl9zdG9w
cGluZ19xdWV1ZS5nZXQoKQorICAgICAgICAgICAgaWYgbXNnID09ICdLZXlib2FyZEludGVycnVw
dCc6CisgICAgICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKKyAgICAgICAgICAg
IGVsaWYgbXNnID09ICdFeGNlcHRpb24nOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoKQorICAgICAgICAgICAgZWxpZiBtc2cgPT0gJ1RpbWVvdXQnOgorICAgICAgICAgICAgICAg
IHNlbGYuX3RpbWVvdXQgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5fdGltZW91dF9xdWV1
ZS5nZXQoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLl9leGNlcHRpb25faW5m
byA9IHN5cy5leGNfaW5mbygpCisKKyAgICBkZWYgbmV4dF90aW1lb3V0KHNlbGYpOgorICAgICAg
ICBpZiBzZWxmLl90aW1lb3V0OgorICAgICAgICAgICAgc2VsZi5fdGltZW91dF9xdWV1ZS5wdXQo
J2RvbmUnKQorICAgICAgICAgICAgcmV0dXJuIHRpbWUudGltZSgpIC0gMTAKKyAgICAgICAgcmV0
dXJuIHRpbWUudGltZSgpCisKKworY2xhc3MgVGVzdEhhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgYXN0cmVhbSk6CisgICAgICAgIGxvZ2dpbmcuSGFuZGxl
ci5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9zdHJlYW0gPSBhc3RyZWFtCisKKyAgICBk
ZWYgZW1pdChzZWxmLCByZWNvcmQpOgorICAgICAgICBzZWxmLl9zdHJlYW0ud3JpdGUoc2VsZi5m
b3JtYXQocmVjb3JkKSkKKworCitjbGFzcyBXYWl0Rm9yVGhyZWFkc1RvRmluaXNoVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xhc3MgTW9ja1Rlc3RSdW5uZXIocnVuX3dlYmtpdF90ZXN0
cy5UZXN0UnVubmVyKToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAg
cGFzcworCisgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgcGFzcworCisg
ICAgICAgIGRlZiB1cGRhdGVfc3VtbWFyeShzZWxmLCByZXN1bHRfc3VtbWFyeSk6CisgICAgICAg
ICAgICBwYXNzCisKKyAgICBkZWYgcnVuX29uZV90aHJlYWQoc2VsZiwgbXNnKToKKyAgICAgICAg
cnVubmVyID0gc2VsZi5Nb2NrVGVzdFJ1bm5lcigpCisgICAgICAgIHN0YXJ0aW5nX3F1ZXVlID0g
UXVldWUuUXVldWUoKQorICAgICAgICBzdG9wcGluZ19xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAg
ICAgICAgY2hpbGRfdGhyZWFkID0gVGVzdFRocmVhZChzdGFydGluZ19xdWV1ZSwgc3RvcHBpbmdf
cXVldWUpCisgICAgICAgIGNoaWxkX3RocmVhZC5zdGFydCgpCisgICAgICAgIHN0YXJ0ZWRfbXNn
ID0gc3RhcnRpbmdfcXVldWUuZ2V0KCkKKyAgICAgICAgc3RvcHBpbmdfcXVldWUucHV0KG1zZykK
KyAgICAgICAgdGhyZWFkcyA9IFtjaGlsZF90aHJlYWRdCisgICAgICAgIHJldHVybiBydW5uZXIu
X3dhaXRfZm9yX3RocmVhZHNfdG9fZmluaXNoKHRocmVhZHMsIE5vbmUpCisKKyAgICBkZWYgdGVz
dF9iYXNpYyhzZWxmKToKKyAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFk
KCcnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGludGVycnVwdGVkKQorCisgICAgZGVmIHRl
c3RfaW50ZXJydXB0KHNlbGYpOgorICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90
aHJlYWQoJ0tleWJvYXJkSW50ZXJydXB0JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludGVy
cnVwdGVkKQorCisgICAgZGVmIHRlc3RfdGltZW91dChzZWxmKToKKyAgICAgICAgaW50ZXJydXB0
ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCdUaW1lb3V0JykKKyAgICAgICAgc2VsZi5hc3NlcnRG
YWxzZShpbnRlcnJ1cHRlZCkKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5ydW5fb25lX3RocmVhZCwgJ0V4
Y2VwdGlvbicpCisKKworY2xhc3MgU3RhbmRhbG9uZUZ1bmN0aW9uc1Rlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgorICAgIGRlZiB0ZXN0X2xvZ193ZWRnZWRfdGhyZWFkKHNlbGYpOgorICAgICAgICBs
b2dnZXIgPSBydW5fd2Via2l0X3Rlc3RzLl9sb2cKKyAgICAgICAgYXN0cmVhbSA9IGFycmF5X3N0
cmVhbS5BcnJheVN0cmVhbSgpCisgICAgICAgIGhhbmRsZXIgPSBUZXN0SGFuZGxlcihhc3RyZWFt
KQorICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihoYW5kbGVyKQorCisgICAgICAgIHN0YXJ0aW5n
X3F1ZXVlID0gUXVldWUuUXVldWUoKQorICAgICAgICBzdG9wcGluZ19xdWV1ZSA9IFF1ZXVlLlF1
ZXVlKCkKKyAgICAgICAgY2hpbGRfdGhyZWFkID0gVGVzdFRocmVhZChzdGFydGluZ19xdWV1ZSwg
c3RvcHBpbmdfcXVldWUpCisgICAgICAgIGNoaWxkX3RocmVhZC5zdGFydCgpCisgICAgICAgIG1z
ZyA9IHN0YXJ0aW5nX3F1ZXVlLmdldCgpCisKKyAgICAgICAgcnVuX3dlYmtpdF90ZXN0cy5fbG9n
X3dlZGdlZF90aHJlYWQoY2hpbGRfdGhyZWFkKQorICAgICAgICBzdG9wcGluZ19xdWV1ZS5wdXQo
JycpCisgICAgICAgIGNoaWxkX3RocmVhZC5qb2luKHRpbWVvdXQ9MS4wKQorCisgICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2UoYXN0cmVhbS5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNl
KGNoaWxkX3RocmVhZC5pc0FsaXZlKCkpCisKKyAgICBkZWYgdGVzdF9maW5kX3RocmVhZF9zdGFj
ayhzZWxmKToKKyAgICAgICAgaWQsIHN0YWNrID0gc3lzLl9jdXJyZW50X2ZyYW1lcygpLml0ZW1z
KClbMF0KKyAgICAgICAgZm91bmRfc3RhY2sgPSBydW5fd2Via2l0X3Rlc3RzLl9maW5kX3RocmVh
ZF9zdGFjayhpZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmb3VuZF9zdGFjaywgTm9u
ZSkKKworICAgICAgICBmb3VuZF9zdGFjayA9IHJ1bl93ZWJraXRfdGVzdHMuX2ZpbmRfdGhyZWFk
X3N0YWNrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmRfc3RhY2ssIE5vbmUpCisK
IGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>