<?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>54068</bug_id>
          
          <creation_ts>2011-02-08 22:50:23 -0800</creation_ts>
          <short_desc>nrwt multiprocessing: implement a full set of stubs for testrunner, worker</short_desc>
          <delta_ts>2011-02-10 19:18:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>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>
          <dependson>54067</dependson>
          <blocked>49566</blocked>
    
    <blocked>54070</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>eric</cc>
    
    <cc>mihaip</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>347996</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-08 22:50:23 -0800</bug_when>
    <thetext>nrwt multiprocessing: implement a full set of stubs for testrunner, worker</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347997</commentid>
    <comment_count>1</comment_count>
      <attachid>81755</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-08 22:56:51 -0800</bug_when>
    <thetext>Created attachment 81755
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348001</commentid>
    <comment_count>2</comment_count>
      <attachid>81756</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-08 23:18:44 -0800</bug_when>
    <thetext>Created attachment 81756
clean up signatures, comments a bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348689</commentid>
    <comment_count>3</comment_count>
      <attachid>81892</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-09 16:22:48 -0800</bug_when>
    <thetext>Created attachment 81892
add interaction diagram, fix signatures, unit tests for _ThreadedManager, _MultiProcessManager</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348696</commentid>
    <comment_count>4</comment_count>
      <attachid>81892</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-02-09 16:45:13 -0800</bug_when>
    <thetext>Comment on attachment 81892
add interaction diagram, fix signatures, unit tests for _ThreadedManager, _MultiProcessManager

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

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:42
&gt; +     |                    \               /              |

Nit: I would get rid of this middle line.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:89
&gt; +        client - object to dispatch replies to. This object must implement
&gt; +            the methods in message_broker2.BrokerClient.

nit: message_broker2.BrokerClient implementation to dispatch replies to

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:168
&gt; +    def start_worker(self, worker_number, **kwargs):
&gt; +        worker_connection = self._make_worker_connection()
&gt; +        worker = self._make_worker(worker_connection, worker_number, **kwargs)
&gt; +        worker_connection.set_client(worker)
&gt; +        return worker_connection

I find this confusing.  I think it&apos;s because I expect the classes that own objects to create the objects they own.  If I understand things correctly, worker_connection owns a worker.  Is it possible to keep worker construction code out of ManagerConnection?  Maybe rather than passing _worker_class around, we can have a worker connection factory that takes the a string (&apos;inline&apos;, &apos;process&apos;, &apos;threads&apos;) and creates the right woker type?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348751</commentid>
    <comment_count>5</comment_count>
      <attachid>81905</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-09 18:01:39 -0800</bug_when>
    <thetext>Created attachment 81905
revise w/ tony&apos;s feedback, shuffle constructors of worker_connection, worker around</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348752</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-09 18:03:03 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 81892 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81892&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:42
&gt; &gt; +     |                    \               /              |
&gt; 
&gt; Nit: I would get rid of this middle line.
&gt; 

Done.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:89
&gt; &gt; +        client - object to dispatch replies to. This object must implement
&gt; &gt; +            the methods in message_broker2.BrokerClient.
&gt; 
&gt; nit: message_broker2.BrokerClient implementation to dispatch replies to
&gt;

Done.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:168
&gt; &gt; +    def start_worker(self, worker_number, **kwargs):
&gt; &gt; +        worker_connection = self._make_worker_connection()
&gt; &gt; +        worker = self._make_worker(worker_connection, worker_number, **kwargs)
&gt; &gt; +        worker_connection.set_client(worker)
&gt; &gt; +        return worker_connection
&gt; 
&gt; I find this confusing.  I think it&apos;s because I expect the classes that own objects to create the objects they own.

I suppose it depends on your definition of own :) The way things are coded now, the ManagerConnection owns both the workers and the worker_connections, and the worker_connection just has a reference to the worker, it doesn&apos;t create things. The concept of ownership is a bit loose here since we rely on garbage collection to destroy the objects, and neither workers nor their connections have a specified lifetime.

That said, I can understand how it is a bit confusing. I think I can restructure it so that the worker_connection does create and own the worker. 

If I understand what you are suggesting properly, though, it would be a bit awkward to create a separate worker_connection factory, since the signatures of the constructors can vary (_InlineWorker has one more argument than either _MultiProcessWorker or _ThreadedWorker, although that could be fixed easily enough).

And, the workers themselves are always created the same way (as you see in start_worker).

I&apos;ve posted a slightly revised patch and you can see if this makes things better or worse. I&apos;m kinda on the fence, because I don&apos;t care for the really long string of arguments that need to be added to the  worker_connection constructor, but it does simplify some other things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348753</commentid>
    <comment_count>7</comment_count>
      <attachid>81906</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-09 18:04:33 -0800</bug_when>
    <thetext>Created attachment 81906
incremental diff of the prior two attachments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349247</commentid>
    <comment_count>8</comment_count>
      <attachid>81905</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-02-10 11:53:17 -0800</bug_when>
    <thetext>Comment on attachment 81905
revise w/ tony&apos;s feedback, shuffle constructors of worker_connection, worker around

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

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:160
&gt; +    def _make_worker_connection(self, worker_class, worker_number, **kwargs):
&gt; +        raise NotImplementedError
&gt; +
&gt; +    def start_worker(self, worker_number, **kwargs):
&gt; +        return self._make_worker_connection(self._worker_class, worker_number, **kwargs)

I&apos;m not sure _make_worker_connection buys you much.  You could just have start_worker be pure virtual.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:172
&gt; +    def _make_worker_connection(self, worker_class, worker_number, **kwargs):
&gt; +        self._inline_worker = _InlineWorker(self._broker, self._port, self._client,
&gt; +            worker_class, worker_number, self._options, **kwargs)
&gt; +        return self._inline_worker

And this would become start_worker.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:195
&gt; +    def __init__(self, broker, worker_class, worker_number, options, **kwargs):
&gt; +        self._client = worker_class(self, worker_number, options, **kwargs)
&gt; +        self.name = self._client.name()
&gt; +        message_broker2.BrokerConnection.__init__(self, broker, self._client,

Yes, this is definitely improved.

Do we have to pass around worker_class or will it always be worker.Worker?

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:206
&gt; +class _InlineWorker(_WorkerConnection):
&gt; +    def __init__(self, broker, port, manager_client, worker_class, worker_number, options, **kwargs):

Do we have to pass in options?  Looks like we can get options from port?

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:41
&gt; +from webkitpy.layout_tests.layout_package import worker
&gt; +from webkitpy.layout_tests.layout_package import test_runner

sort

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:67
&gt; +        Return: A tuple (keyboard_interrupted, thread_timings, test_timings,
&gt; +            individual_test_timings)

I would prefer if this returned a class.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:80
&gt; +        test_lists = self._shard_tests(file_list, False)

I would also prefer if this returned a class so below you don&apos;t have to do test_list[0], test_list[1].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349289</commentid>
    <comment_count>9</comment_count>
      <attachid>82029</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-10 12:45:25 -0800</bug_when>
    <thetext>Created attachment 82029
update w/ more review feedback from tony - make start_worker() virtual</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349290</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-10 12:46:27 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 81905 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81905&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:160
&gt; &gt; +    def _make_worker_connection(self, worker_class, worker_number, **kwargs):
&gt; &gt; +        raise NotImplementedError
&gt; &gt; +
&gt; &gt; +    def start_worker(self, worker_number, **kwargs):
&gt; &gt; +        return self._make_worker_connection(self._worker_class, worker_number, **kwargs)
&gt; 
&gt; I&apos;m not sure _make_worker_connection buys you much.  You could just have start_worker be pure virtual.
&gt; 

Yeah, at this point, I&apos;d agree with you. Done. Also, it turns out I don&apos;t actually use the kwargs at this point (I did once), so I&apos;ve removed them.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:172
&gt; &gt; +    def _make_worker_connection(self, worker_class, worker_number, **kwargs):
&gt; &gt; +        self._inline_worker = _InlineWorker(self._broker, self._port, self._client,
&gt; &gt; +            worker_class, worker_number, self._options, **kwargs)
&gt; &gt; +        return self._inline_worker
&gt; 
&gt; And this would become start_worker.
&gt;

Yup.
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:195
&gt; &gt; +    def __init__(self, broker, worker_class, worker_number, options, **kwargs):
&gt; &gt; +        self._client = worker_class(self, worker_number, options, **kwargs)
&gt; &gt; +        self.name = self._client.name()
&gt; &gt; +        message_broker2.BrokerConnection.__init__(self, broker, self._client,
&gt; 
&gt; Yes, this is definitely improved.
&gt; 
&gt; Do we have to pass around worker_class or will it always be worker.Worker?
&gt; 

The unit tests will use a different class, and I&apos;d strongly prefer not to hard-code it.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:206
&gt; &gt; +class _InlineWorker(_WorkerConnection):
&gt; &gt; +    def __init__(self, broker, port, manager_client, worker_class, worker_number, options, **kwargs):
&gt; 
&gt; Do we have to pass in options?  Looks like we can get options from port?
&gt; 

We can, and I&apos;ve made the change, but I&apos;m on the fence about it, since options isn&apos;t technically a public property of the port.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:41
&gt; &gt; +from webkitpy.layout_tests.layout_package import worker
&gt; &gt; +from webkitpy.layout_tests.layout_package import test_runner
&gt; 
&gt; sort
&gt; 

Done.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:67
&gt; &gt; +        Return: A tuple (keyboard_interrupted, thread_timings, test_timings,
&gt; &gt; +            individual_test_timings)
&gt; 
&gt; I would prefer if this returned a class.
&gt; 

This code matches the signature used by test_runner.py as well. I&apos;d prefer not to change this in this patch. I&apos;ll add a fixme.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:80
&gt; &gt; +        test_lists = self._shard_tests(file_list, False)
&gt; 
&gt; I would also prefer if this returned a class so below you don&apos;t have to do test_list[0], test_list[1].

Same thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349329</commentid>
    <comment_count>11</comment_count>
      <attachid>82029</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-02-10 13:34:09 -0800</bug_when>
    <thetext>Comment on attachment 82029
update w/ more review feedback from tony - make start_worker() virtual

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

I think it&apos;s ok to pass around worker_class for testability, but a bit unfortunate.  I wonder if it would be possible to have a function on some object that can be overridden with a sub class during testing.

If there&apos;s only Worker and TestWorker, I&apos;d suggest removing AbstractWorker and just use duck typing for testing.  That seems to be what we do for other mocks.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:204
&gt; +        _WorkerConnection.__init__(self, broker, worker_class, worker_number, port._options)

I would just add a public accessor for options() in base.py.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349499</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-10 16:35:13 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 82029 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=82029&amp;action=review
&gt; 
&gt; I think it&apos;s ok to pass around worker_class for testability, but a bit unfortunate.  I wonder if it would be possible to have a function on some object that can be overridden with a sub class during testing.
&gt; 

Possibly. However, I really don&apos;t want to hard-code the class, because logically this module does not depend on the types of the workers.

&gt; If there&apos;s only Worker and TestWorker, I&apos;d suggest removing AbstractWorker and just use duck typing for testing.  That seems to be what we do for other mocks.
&gt;

I think having Worker inherit from AbstractWorker() makes the interface contract clearer. I suppose this could be considered unpythonic, but I don&apos;t particularly like this aspect of python ;)
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:204
&gt; &gt; +        _WorkerConnection.__init__(self, broker, worker_class, worker_number, port._options)
&gt; 
&gt; I would just add a public accessor for options() in base.py.

Yeah, this is probably what I&apos;ll do eventually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349576</commentid>
    <comment_count>13</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-10 19:18:26 -0800</bug_when>
    <thetext>Committed r78302: &lt;http://trac.webkit.org/changeset/78302&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81755</attachid>
            <date>2011-02-08 22:56:51 -0800</date>
            <delta_ts>2011-02-08 23:18:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54068-20110208225649.patch</filename>
            <type>text/plain</type>
            <size>14936</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzgwMTAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkMWVhMTJkMDFjODM3Yjk0ODBhZmEwOTE1YWQ4YjAxYzQw
NGZlZmJkLi4yNzUxZTA5YmIxYWNhNDI0NmNhZDZkOTQ0YzhiODkyZjBhOGQ3ZmZhIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjgg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBUaGlz
IHBhdGNoIGFkZHMgdGhlIGJ1bGsgb2YgdGhlIHJlbWFpbmluZyBmdW5jdGlvbmFsaXR5IGZvcgor
ICAgICAgICB0aGUgTlJXVCBtZXNzYWdlLXBhc3NpbmcgaW1wbGVtZW50YXRpb24uIFRoZSBwYXRj
aCBhZGRzIGEgbmV3CisgICAgICAgIFdvcmtlciBjbGFzcyB0aGF0IHdpbGwgZXZlbnR1YWxseSBy
ZXBsYWNlIHRoZSBUZXN0U2hlbGxUaHJlYWQKKyAgICAgICAgY2xhc3MgaW4gZHVtcF9yZW5kZXJf
dHJlZV90aHJlYWQucHksIGFuZCBpbXBsZW1lbnRzIGVub3VnaCBvZgorICAgICAgICBUZXN0UnVu
bmVyMiBhbmQgdGhlIGlubGluZSB2ZXJzaW9uIG9mIHRoZSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIK
KyAgICAgICAgdG8gYWN0dWFsbHkgYmUgYWJsZSB0byBzZW5kIGEgZnVsbCBzZXQgb2YgbWVzc2Fn
ZXMgYmFjayBhbmQKKyAgICAgICAgZm9ydGguIFRoZSBXb3JrZXIgc3R1YnMgZG8gbm90IGFjdHVh
bGx5IHJ1biB0ZXN0cywgYW5kIHRoZXJlJ3MKKyAgICAgICAgbG90cyBvZiBlcnJvciBoYW5kbGlu
ZyBhbmQgc3RhdHMgbmVlZGVkLCBidXQgdGhpcyBpcyB0aGUgY29yZQorICAgICAgICBsb2dpYy4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQwNjgK
KworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L21hbmFnZXJfd29ya2VyX2Jyb2tlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXJfdW5pdHRlc3Qu
cHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvdGVzdF9ydW5uZXIyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL3dvcmtlci5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weToKKworMjAx
MS0wMi0wOCAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBucnd0IG11bHRpcHJvY2Vzc2lu
ZzogbWlub3IgY2xlYW51cCBwcmlvciB0byBpbXBsZW1lbnRpbmcgdGhlIG5ldyB3b3JrZXIKIAog
ICAgICAgICBUaGlzIHBhdGNoIHJlbmFtZXMgQWJzdHJhY3RNYW5hZ2VyIHRvIE1hbmFnZXJDb25u
ZWN0aW9uIGFuZApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJv
a2VyLnB5CmluZGV4IDlmYWVjNmU2NTE0NTYxMmZmMWVlOWRkOTJkYzMyOWRmMjc2YWM0MTQuLjFl
ZTVmNDE4OGRkNjUwNGRmODZiYmZiZmNlODM1MTQ5MzI3YzVhM2UgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29y
a2VyX2Jyb2tlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkKQEAgLTE1Miw5ICsxNTIsNjYg
QEAgY2xhc3MgX01hbmFnZXJDb25uZWN0aW9uKG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXJDb25uZWN0
aW9uKToKICAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKICAgICAgICAgc2VsZi5fd29y
a2VyX2NsYXNzID0gd29ya2VyX2NsYXNzCiAKKyAgICBkZWYgX21ha2Vfd29ya2VyX2Nvbm5lY3Rp
b24oc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBf
bWFrZV93b3JrZXIoc2VsZiwgd29ya2VyX2Nvbm5lY3Rpb24sIHdvcmtlcl9udW1iZXIsICoqa3dh
cmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3dvcmtlcl9jbGFzcyh3b3JrZXJfY29ubmVjdGlv
biwgd29ya2VyX251bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9vcHRpb25zLCAqKmt3YXJncykKKworICAgIGRlZiBzdGFydF93b3JrZXIoc2VsZiwgd29ya2Vy
X251bWJlciwgKiprd2FyZ3MpOgorICAgICAgICB3b3JrZXJfY29ubmVjdGlvbiA9IHNlbGYuX21h
a2Vfd29ya2VyX2Nvbm5lY3Rpb24oKQorICAgICAgICB3b3JrZXIgPSBzZWxmLl9tYWtlX3dvcmtl
cih3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX251bWJlciwgKiprd2FyZ3MpCisgICAgICAgIHdv
cmtlcl9jb25uZWN0aW9uLnNldF9jbGllbnQod29ya2VyKQorICAgICAgICByZXR1cm4gd29ya2Vy
X2Nvbm5lY3Rpb24KKwogCiBjbGFzcyBfSW5saW5lTWFuYWdlcihfTWFuYWdlckNvbm5lY3Rpb24p
OgotICAgIHBhc3MKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0LCBvcHRpb25z
LCBjbGllbnQsIHdvcmtlcl9jbGFzcyk6CisgICAgICAgIF9NYW5hZ2VyQ29ubmVjdGlvbi5fX2lu
aXRfXyhzZWxmLCBicm9rZXIsIHBvcnQsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKQor
ICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9pbmxpbmVfd29ya2VyID0g
Tm9uZQorCisgICAgZGVmIF9tYWtlX3dvcmtlcl9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICBz
ZWxmLl9pbmxpbmVfd29ya2VyID0gX0lubGluZVdvcmtlcihzZWxmLl9icm9rZXIsIHNlbGYuX3Bv
cnQsIHNlbGYuX2NsaWVudCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2lubGluZV93b3JrZXIKKwor
ICAgIGRlZiBydW5fbWVzc2FnZV9sb29wKHNlbGYsIGRlbGF5X3NlY3M9Tm9uZSk6CisgICAgICAg
ICMgTm90ZSB0aGF0IGRlbGF5X3NlY3MgaXMgaWdub3JlZCBpbiB0aGlzIGNhc2Ugc2luY2Ugd2Ug
Y2FuJ3QgZWFzaWx5CisgICAgICAgICMgaW1wbGVtZW50IGl0LgorICAgICAgICBzZWxmLl9pbmxp
bmVfd29ya2VyLnJ1bigpCisgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fYWxsX3BlbmRpbmcoTUFO
QUdFUl9UT1BJQywgc2VsZi5fY2xpZW50KQorCisKK2NsYXNzIF9Xb3JrZXJDb25uZWN0aW9uKG1l
c3NhZ2VfYnJva2VyMi5Ccm9rZXJDb25uZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
YnJva2VyKToKKyAgICAgICAgIyBUaGUgY2xpZW50IGdldHMgZmlsbGVkIGluIGFmdGVyIHRoaXMg
b2JqZWN0IGlzIGNvbnN0cnVjdGVkLCB1c2luZyBzZXRfY2xpZW50KCkuCisgICAgICAgIHNlbGYu
X2NsaWVudCA9IE5vbmUKKyAgICAgICAgbWVzc2FnZV9icm9rZXIyLkJyb2tlckNvbm5lY3Rpb24u
X19pbml0X18oc2VsZiwgYnJva2VyLCBzZWxmLl9jbGllbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFOWV9XT1JLRVJfVE9QSUMsIE1BTkFHRVJf
VE9QSUMpCisKKyAgICBkZWYgc2V0X2NsaWVudChzZWxmLCBjbGllbnQpOgorICAgICAgICBzZWxm
Ll9jbGllbnQgPSBjbGllbnQKKyAgICAgICAgc2VsZi5uYW1lID0gY2xpZW50Lm5hbWUoKQorCisg
ICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisg
ICAgZGVmIHlpZWxkX3RvX2Jyb2tlcihzZWxmKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIF9J
bmxpbmVXb3JrZXIoX1dvcmtlckNvbm5lY3Rpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBi
cm9rZXIsIHBvcnQsIG1hbmFnZXJfY2xpZW50KToKKyAgICAgICAgX1dvcmtlckNvbm5lY3Rpb24u
X19pbml0X18oc2VsZiwgYnJva2VyKQorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAg
ICBzZWxmLl9tYW5hZ2VyX2NsaWVudCA9IG1hbmFnZXJfY2xpZW50CisKKyAgICBkZWYgcnVuKHNl
bGYpOgorICAgICAgICBzZWxmLl9jbGllbnQucnVuKHNlbGYuX3BvcnQpCisKKyAgICBkZWYgeWll
bGRfdG9fYnJva2VyKHNlbGYpOgorICAgICAgICBzZWxmLl9icm9rZXIucnVuX2FsbF9wZW5kaW5n
KE1BTkFHRVJfVE9QSUMsIHNlbGYuX21hbmFnZXJfY2xpZW50KQogCiAKIGNsYXNzIF9UaHJlYWRl
ZE1hbmFnZXIoX01hbmFnZXJDb25uZWN0aW9uKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tl
cl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weQppbmRleCAwYTMwYmRk
NDVmYjQxZjk5YWU5NDNhYjRjZWMwNzNjYzg5MjAyNWZhLi45MjE2MTU3MDhmZmI3MzljNjE3NzA2
MmI3YjA2NjQ3NGNkN2VkODMwIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXJfdW5pdHRlc3Qu
cHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvbWFuYWdlcl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5CkBAIC04Miw2ICs4Miw4IEBAIGNs
YXNzIEZ1bmN0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBvcHRpb25zLCBh
cmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoW10pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcHRp
b25zKQogCisjIEZJWE1FOiBBZGQgaW4gdW5pdCB0ZXN0cyBmb3IgdGhlIG1hbmFnZXJzLCBjb3Zl
cmFnZSB0ZXN0cyBmb3IgdGhlIGludGVyZmFjZXMuCisKIAogaWYgX19uYW1lX18gPT0gJ19fbWFp
bl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVyMi5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVy
Mi5weQppbmRleCBlYjc4NzUyNTVjM2MzYzEwY2M2ODFlNWJkMWZlODAxZTM4MThjYmY3Li5jODUz
ZjcyOWJmNTkxNzI0ZGRjZTE4OGFjMWI3YTRjN2FjY2I5MDQ5IDEwMDY0NAotLS0gYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3J1bm5lcjIu
cHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvdGVzdF9ydW5uZXIyLnB5CkBAIC0yOSwyNSArMjksMTAxIEBACiAKICIiIgogVGhlIFRlc3RS
dW5uZXIyIHBhY2thZ2UgaXMgYW4gYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUZXN0
UnVubmVyCi1jbGFzcy4gRm9yIG5vdyBpdCBpcyBqdXN0IGEgc3R1YiwgYnV0IGV2ZW50dWFsbHkg
aXQgd2lsbCB1c2UgdGhlCi1tZXNzYWdlIGJyb2tlciBhYnN0cmFjdGlvbiB0byBwYXNzIG1lc3Nh
Z2VzIHRvIHdvcmtlcnMgdG8gcnVuIHNldHMgb2YKLXRlc3RzIGFuZCB0aGVuIHByb2Nlc3MgdGhl
IGNvbXBsZXRpb24gbWVzc2FnZXMgYWNjb3JkaW5nbHkuCitjbGFzcyB0aGF0IHVzZXMgdGhlIG1h
bmFnZXJfd29ya2VyX2Jyb2tlciBtb2R1bGUgdG8gc2VuZCBzZXRzIG9mIHRlc3RzIHRvCit3b3Jr
ZXJzIGFuZCByZWNlaXZlIHRoZWlyIGNvbXBsZXRpb24gbWVzc2FnZXMgYWNjb3JkaW5nbHkuCiAi
IiIKIAogaW1wb3J0IGxvZ2dpbmcKIAotaW1wb3J0IHRlc3RfcnVubmVyCisKK2Zyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBtYW5hZ2VyX3dvcmtlcl9icm9r
ZXIKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB3b3Jr
ZXIKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0
X3J1bm5lcgogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKIAogY2xhc3Mg
VGVzdFJ1bm5lcjIodGVzdF9ydW5uZXIuVGVzdFJ1bm5lcik6CiAgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpOgotCi0gICAgICAgICMgRklYTUU6IFRoaXMnbGwg
Z2V0IHJlcGxhY2VkIHdpdGggYSByZWFsIGltcGxlbWVudGF0aW9uIHNvb24gZW5vdWdoLgotICAg
ICAgICBpZiBvcHRpb25zLndvcmtlcl9tb2RlbCBpbiAoJ2lubGluZScsICd0aHJlYWRzJyk6Ci0g
ICAgICAgICAgICBvcHRpb25zLndvcmtlcl9tb2RlbCA9ICdvbGQtJyArIG9wdGlvbnMud29ya2Vy
X21vZGVsCi0gICAgICAgIGlmIG9wdGlvbnMud29ya2VyX21vZGVsID09ICdwcm9jZXNzZXMnOgot
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiLS13b3JrZXItbW9kZWw9cHJvY2Vzc2VzIG5v
dCBzdXBwb3J0ZWQgeWV0IikKKyAgICAgICAgaWYgb3B0aW9ucy53b3JrZXJfbW9kZWwgaW4gKCd0
aHJlYWRzJywgJ3Byb2Nlc3NlcycpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignLS13
b3JrZXItbW9kZWw9JXMgbm90IHN1cHBvcnRlZCB5ZXQnICUgb3B0aW9ucy53b3JrZXJfbW9kZWwp
CiAKICAgICAgICAgdGVzdF9ydW5uZXIuVGVzdFJ1bm5lci5fX2luaXRfXyhzZWxmLCBwb3J0LCBv
cHRpb25zLCBwcmludGVyKQorICAgICAgICBzZWxmLl9hbGxfcmVzdWx0cyA9IFtdCisgICAgICAg
IHNlbGYuX2dyb3VwX3N0YXRzID0ge30KKyAgICAgICAgc2VsZi5fY3VycmVudF9yZXN1bHRfc3Vt
bWFyeSA9IE5vbmUKKyAgICAgICAgc2VsZi5fZG9uZSA9IEZhbHNlCisKKyAgICBkZWYgaXNfZG9u
ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbmUKKworICAgIGRlZiBuYW1lKHNlbGYp
OgorICAgICAgICByZXR1cm4gJ1Rlc3RSdW5uZXIyJworCisgICAgZGVmIF9ydW5fdGVzdHMoc2Vs
ZiwgZmlsZV9saXN0LCByZXN1bHRfc3VtbWFyeSk6CisgICAgICAgICIiIlJ1bnMgdGhlIHRlc3Rz
IGluIHRoZSBmaWxlX2xpc3QuCisKKyAgICAgICAgUmV0dXJuOiBBIHR1cGxlIChrZXlib2FyZF9p
bnRlcnJ1cHRlZCwgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywKKyAgICAgICAgICAgIGlu
ZGl2aWR1YWxfdGVzdF90aW1pbmdzKQorICAgICAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQg
aXMgd2hldGhlciBzb21lb25lIHR5cGVkIEN0cmxeQworICAgICAgICAgICAgdGhyZWFkX3RpbWlu
Z3MgaXMgYSBsaXN0IG9mIGRpY3RzIHdpdGggdGhlIHRvdGFsIHJ1bnRpbWUKKyAgICAgICAgICAg
ICAgb2YgZWFjaCB0aHJlYWQgd2l0aCAnbmFtZScsICdudW1fdGVzdHMnLCAndG90YWxfdGltZScg
cHJvcGVydGllcworICAgICAgICAgICAgdGVzdF90aW1pbmdzIGlzIGEgbGlzdCBvZiB0aW1pbmdz
IGZvciBlYWNoIHNoYXJkZWQgc3ViZGlyZWN0b3J5CisgICAgICAgICAgICAgIG9mIHRoZSBmb3Jt
IFt0aW1lLCBkaXJlY3RvcnlfbmFtZSwgbnVtX3Rlc3RzXQorICAgICAgICAgICAgaW5kaXZpZHVh
bF90ZXN0X3RpbWluZ3MgaXMgYSBsaXN0IG9mIHJ1biB0aW1lcyBmb3IgZWFjaCB0ZXN0CisgICAg
ICAgICAgICAgIGluIHRoZSBmb3JtIHtmaWxlbmFtZTpmaWxlbmFtZSwgdGVzdF9ydW5fdGltZTp0
ZXN0X3J1bl90aW1lfQorICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0
IHRvIHBvcHVsYXRlIHdpdGggdGhlIHJlc3VsdHMKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYu
X2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkgPSByZXN1bHRfc3VtbWFyeQorCisgICAgICAgICMgRklY
TUU6IHNoYXJkIHByb3Blcmx5LgorICAgICAgICB0ZXN0X2xpc3RzID0gc2VsZi5fc2hhcmRfdGVz
dHMoZmlsZV9saXN0LCBGYWxzZSkKKworICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24gPSBtYW5h
Z2VyX3dvcmtlcl9icm9rZXIuZ2V0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsIHNlbGYsIHdv
cmtlci5Xb3JrZXIpCisKKyAgICAgICAgIyBGSVhNRTogc3RhcnQgYWxsIG9mIHRoZSB3b3JrZXJz
LgorICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24uc3RhcnRfd29ya2VyKDApCisKKyAgICAgICAg
Zm9yIHRlc3RfbGlzdCBpbiB0ZXN0X2xpc3RzOgorICAgICAgICAgICAgbWFuYWdlcl9jb25uZWN0
aW9uLnBvc3RfbWVzc2FnZSgndGVzdF9saXN0JywgdGVzdF9saXN0WzBdLCB0ZXN0X2xpc3RbMV0p
CisKKyAgICAgICAgbWFuYWdlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnc3RvcCcpCisKKyAg
ICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBGYWxzZQorICAgICAgICBpbnRlcnJ1cHRlZCA9
IEZhbHNlCisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLmRyeV9ydW46CisgICAgICAgICAg
ICB3aGlsZSBub3Qgc2VsZi5fY2hlY2tfaWZfZG9uZSgpOgorICAgICAgICAgICAgICAgIG1hbmFn
ZXJfY29ubmVjdGlvbi5ydW5fbWVzc2FnZV9sb29wKGRlbGF5X3NlY3M9MS4wKQorCisgICAgICAg
ICMgRklYTUU6IGltcGxlbWVudCBzdGF0cy4KKyAgICAgICAgdGhyZWFkX3RpbWluZ3MgPSBbXQor
CisgICAgICAgIHJldHVybiAoa2V5Ym9hcmRfaW50ZXJydXB0ZWQsIGludGVycnVwdGVkLCB0aHJl
YWRfdGltaW5ncywKKyAgICAgICAgICAgICAgICBzZWxmLl9ncm91cF9zdGF0cywgc2VsZi5fYWxs
X3Jlc3VsdHMpCisKKyAgICBkZWYgX2NoZWNrX2lmX2RvbmUoc2VsZik6CisgICAgICAgICIiIlJl
dHVybnMgdHJ1ZSBpZmYgYWxsIHRoZSB3b3JrZXJzIGhhdmUgZWl0aGVyIGNvbXBsZXRlZCBvciB3
ZWRnZWQuIiIiCisgICAgICAgICMgRklYTUU6IGltcGxlbWVudCB0byBjaGVjayBmb3Igd2VkZ2Vk
IHdvcmtlcnMuCisgICAgICAgIHJldHVybiBzZWxmLl9kb25lCisKKyAgICBkZWYgaGFuZGxlX3N0
YXJ0ZWRfdGVzdChzZWxmLCBzcmMsIHRlc3RfaW5mbywgaGFuZ190aW1lb3V0KToKKyAgICAgICAg
IyBGSVhNRTogaW1wbGVtZW50CisgICAgICAgIHBhc3MKKworICAgIGRlZiBoYW5kbGVfZG9uZShz
ZWxmLCBzcmMpOgorICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQgcHJvcGVybHkgdG8gaGFuZGxl
IG11bHRpcGxlIHdvcmtlcnMuCisgICAgICAgIHNlbGYuX2RvbmUgPSBUcnVlCisgICAgICAgIHBh
c3MKKworICAgIGRlZiBoYW5kbGVfZXhjZXB0aW9uKHNlbGYsIHNyYywgZXhjZXB0aW9uX2luZm8p
OgorICAgICAgICByYWlzZSBleGNlcHRpb25faW5mbworCisgICAgZGVmIGhhbmRsZV9maW5pc2hl
ZF9saXN0KHNlbGYsIHNyYywgbGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSk6Cisg
ICAgICAgICMgRklYTUU6IHVwZGF0ZSBzdGF0cworICAgICAgICBwYXNzCisKKyAgICBkZWYgaGFu
ZGxlX2ZpbmlzaGVkX3Rlc3Qoc2VsZiwgc3JjLCByZXN1bHQsIGVsYXBzZWRfdGltZSk6CisgICAg
ICAgIHNlbGYuX3VwZGF0ZV9zdW1tYXJ5X3dpdGhfcmVzdWx0KHNlbGYuX2N1cnJlbnRfcmVzdWx0
X3N1bW1hcnksIHJlc3VsdCkKKworICAgICAgICAjIEZJWE1FOiB1cGRhdGUgc3RhdHMuCisgICAg
ICAgIHNlbGYuX2FsbF9yZXN1bHRzLmFwcGVuZChyZXN1bHQpCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93b3JrZXIucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93b3JrZXIu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDdkNGZiZGJiZTA4Y2U3ZGVlMTM3NTAzYjc0ZmI2ODFjNzc4ZTRhNQot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3dvcmtlci5weQpAQCAtMCwwICsxLDEwNCBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKyIiIkhhbmRsZSBtZXNzYWdlcyBmcm9tIHRoZSBUZXN0UnVubmVyIGFuZCBleGVjdXRlIGFj
dHVhbCB0ZXN0cy4iIiIKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1l
CisKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgc3RhY2tfdXRpbHMKKworZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1hbmFnZXJfd29y
a2VyX2Jyb2tlcgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1w
b3J0IHRlc3RfcmVzdWx0cworCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykK
KworCitjbGFzcyBXb3JrZXIobWFuYWdlcl93b3JrZXJfYnJva2VyLkFic3RyYWN0V29ya2VyKToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgd29ya2VyX2Nvbm5lY3Rpb24sIHdvcmtlcl9udW1iZXIs
IG9wdGlvbnMpOgorICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbiA9IHdvcmtlcl9jb25u
ZWN0aW9uCisgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIgPSB3b3JrZXJfbnVtYmVyCisgICAg
ICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX25hbWUgPSAnd29ya2Vy
LyVkJyAlIHdvcmtlcl9udW1iZXIKKyAgICAgICAgc2VsZi5fZG9uZSA9IEZhbHNlCisgICAgICAg
IHNlbGYuX3BvcnQgPSBOb25lCisKKyAgICBkZWYgX2RlZmVycmVkX2luaXQoc2VsZiwgcG9ydCk6
CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisKKyAgICBkZWYgaXNfZG9uZShzZWxmKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX2RvbmUKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5fbmFtZQorCisgICAgZGVmIHJ1bihzZWxmLCBwb3J0KToKKyAgICAgICAgc2Vs
Zi5fZGVmZXJyZWRfaW5pdChwb3J0KQorCisgICAgICAgIF9sb2cuZGVidWcoIiVzIHN0YXJ0aW5n
IiAlIHNlbGYuX25hbWUpCisKKyAgICAgICAgIyBGSVhNRTogbmVlZCB0byBhZGQgaW4gZXJyb3Ig
aGFuZGxpbmcsIGJldHRlciBsb2dnaW5nLgorICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlv
bi5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9z
dF9tZXNzYWdlKCdkb25lJykKKworICAgIGRlZiBoYW5kbGVfdGVzdF9saXN0KHNlbGYsIHNyYywg
bGlzdF9uYW1lLCB0ZXN0X2xpc3QpOgorICAgICAgICAjIEZJWE1FOiBjaGVjayB0byBzZWUgaWYg
d2UgbmVlZCB0byBnZXQgdGhlIGh0dHAgbG9jay4KKworICAgICAgICBzdGFydF90aW1lID0gdGlt
ZS50aW1lKCkKKyAgICAgICAgbnVtX3Rlc3RzID0gMAorICAgICAgICBmb3IgdGVzdF9pbnB1dCBp
biB0ZXN0X2xpc3Q6CisgICAgICAgICAgICBzZWxmLl9ydW5fdGVzdCh0ZXN0X2lucHV0KQorICAg
ICAgICAgICAgbnVtX3Rlc3RzICs9IDEKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0
aW9uLnlpZWxkX3RvX2Jyb2tlcigpCisKKyAgICAgICAgZWxhcHNlZF90aW1lID0gdGltZS50aW1l
KCkgLSBzdGFydF90aW1lCisgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnBvc3RfbWVz
c2FnZSgnZmluaXNoZWRfbGlzdCcsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUp
CisKKyAgICAgICAgIyBGSVhNRTogcmVsZWFzZSB0aGUgbG9jayBpZiBuZWNlc3NhcnkKKworICAg
IGRlZiBoYW5kbGVfc3RvcChzZWxmLCBzcmMpOgorICAgICAgICBzZWxmLl9kb25lID0gVHJ1ZQor
CisgICAgZGVmIF9ydW5fdGVzdChzZWxmLCB0ZXN0X2lucHV0KToKKworICAgICAgICAjIEZJWE1F
OiBnZXQgcmVhbCB0aW1lb3V0IHZhbHVlIGZyb20gU2luZ2xlVGVzdFJ1bm5lcgorICAgICAgICB0
ZXN0X3RpbWVvdXRfc2VjID0gaW50KHRlc3RfaW5wdXQudGltZW91dCkgLyAxMDAwCisgICAgICAg
IHN0YXJ0ID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9z
dF9tZXNzYWdlKCdzdGFydGVkX3Rlc3QnLCB0ZXN0X2lucHV0LCB0ZXN0X3RpbWVvdXRfc2VjKQor
CisgICAgICAgICMgRklYTUU6IGFjdHVhbGx5IHJ1biB0aGUgdGVzdC4KKyAgICAgICAgcmVzdWx0
ID0gdGVzdF9yZXN1bHRzLlRlc3RSZXN1bHQodGVzdF9pbnB1dC5maWxlbmFtZSwgZmFpbHVyZXM9
W10sCisgICAgICAgICAgICB0ZXN0X3J1bl90aW1lPTAsIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZm
cz0wLCB0aW1lX2Zvcl9kaWZmcz17fSkKKworICAgICAgICBlbGFwc2VkX3RpbWUgPSB0aW1lLnRp
bWUoKSAtIHN0YXJ0CisKKyAgICAgICAgIyBGSVhNRTogdXBkYXRlIHN0YXRzLCBjaGVjayBmb3Ig
ZmFpbHVyZXMuCisKKyAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdl
KCdmaW5pc2hlZF90ZXN0JywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0
c191bml0dGVzdC5weQppbmRleCBmNGU1MzUwZTZmODUzM2JmMzg5M2M0MTU4MjllMjlhYmQzNjhl
NDU1Li44OTE3OTdkNTA1YzQ4ZTE4ZWM5YjQ5NzE2NTkwNzIxNmNmY2U5MWNkIDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3Vu
aXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKQEAgLTQ3MCw3ICs0NzAsNyBAQCBjbGFzcyBNYWluVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJy
b3IsIGxvZ2dpbmdfcnVuLCBbJy0td29ya2VyLW1vZGVsJywgJ3Byb2Nlc3NlcyddKQogCiAgICAg
ZGVmIHRlc3Rfd29ya2VyX21vZGVsX190aHJlYWRzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2Vy
dFRydWUocGFzc2luZ19ydW4oWyctLXdvcmtlci1tb2RlbCcsICd0aHJlYWRzJ10pKQorICAgICAg
ICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb2dnaW5nX3J1biwgWyctLXdvcmtlci1t
b2RlbCcsICd0aHJlYWRzJ10pCiAKICAgICBkZWYgdGVzdF93b3JrZXJfbW9kZWxfX3Vua25vd24o
c2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvZ2dpbmdfcnVu
LAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81756</attachid>
            <date>2011-02-08 23:18:44 -0800</date>
            <delta_ts>2011-02-09 16:22:46 -0800</delta_ts>
            <desc>clean up signatures, comments a bit</desc>
            <filename>bug-54068-20110208231843.patch</filename>
            <type>text/plain</type>
            <size>17241</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzgwMTAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkMWVhMTJkMDFjODM3Yjk0ODBhZmEwOTE1YWQ4YjAxYzQw
NGZlZmJkLi4yNzUxZTA5YmIxYWNhNDI0NmNhZDZkOTQ0YzhiODkyZjBhOGQ3ZmZhIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjgg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBUaGlz
IHBhdGNoIGFkZHMgdGhlIGJ1bGsgb2YgdGhlIHJlbWFpbmluZyBmdW5jdGlvbmFsaXR5IGZvcgor
ICAgICAgICB0aGUgTlJXVCBtZXNzYWdlLXBhc3NpbmcgaW1wbGVtZW50YXRpb24uIFRoZSBwYXRj
aCBhZGRzIGEgbmV3CisgICAgICAgIFdvcmtlciBjbGFzcyB0aGF0IHdpbGwgZXZlbnR1YWxseSBy
ZXBsYWNlIHRoZSBUZXN0U2hlbGxUaHJlYWQKKyAgICAgICAgY2xhc3MgaW4gZHVtcF9yZW5kZXJf
dHJlZV90aHJlYWQucHksIGFuZCBpbXBsZW1lbnRzIGVub3VnaCBvZgorICAgICAgICBUZXN0UnVu
bmVyMiBhbmQgdGhlIGlubGluZSB2ZXJzaW9uIG9mIHRoZSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIK
KyAgICAgICAgdG8gYWN0dWFsbHkgYmUgYWJsZSB0byBzZW5kIGEgZnVsbCBzZXQgb2YgbWVzc2Fn
ZXMgYmFjayBhbmQKKyAgICAgICAgZm9ydGguIFRoZSBXb3JrZXIgc3R1YnMgZG8gbm90IGFjdHVh
bGx5IHJ1biB0ZXN0cywgYW5kIHRoZXJlJ3MKKyAgICAgICAgbG90cyBvZiBlcnJvciBoYW5kbGlu
ZyBhbmQgc3RhdHMgbmVlZGVkLCBidXQgdGhpcyBpcyB0aGUgY29yZQorICAgICAgICBsb2dpYy4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQwNjgK
KworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L21hbmFnZXJfd29ya2VyX2Jyb2tlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXJfdW5pdHRlc3Qu
cHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvdGVzdF9ydW5uZXIyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL3dvcmtlci5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weToKKworMjAx
MS0wMi0wOCAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBucnd0IG11bHRpcHJvY2Vzc2lu
ZzogbWlub3IgY2xlYW51cCBwcmlvciB0byBpbXBsZW1lbnRpbmcgdGhlIG5ldyB3b3JrZXIKIAog
ICAgICAgICBUaGlzIHBhdGNoIHJlbmFtZXMgQWJzdHJhY3RNYW5hZ2VyIHRvIE1hbmFnZXJDb25u
ZWN0aW9uIGFuZApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJv
a2VyLnB5CmluZGV4IDlmYWVjNmU2NTE0NTYxMmZmMWVlOWRkOTJkYzMyOWRmMjc2YWM0MTQuLmFl
ZTM0NzQ2ZDA0NTNlNWJlMWFlYjgwOGRiNzc5NTg1YWY1MmY1NWUgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29y
a2VyX2Jyb2tlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkKQEAgLTI4LDE2ICsyOCwxMSBA
QAogCiAiIiJNb2R1bGUgZm9yIGhhbmRsaW5nIG1lc3NhZ2VzIGFuZCBjb25jdXJyZW5jeSBmb3Ig
cnVuLXdlYmtpdC10ZXN0cy4KIAotVGhpcyBtb2R1bGUgYnVpbGRzIG9uIHRoZSBmdW5jdGlvbmFs
aXR5IG9mIG1lc3NhZ2VfYnJva2VyMiB0byBwcm92aWRlCi1hIHNpbXBsZSBtZXNzYWdlIGJyb2tl
ciBmb3IgYSBtYW5hZ2VyIHNlbmRpbmcgbWVzc2FnZXMgdG8gKGFuZCBnZXR0aW5nCi1yZXBsaWVz
IGZyb20pIGEgcG9vbCBvZiB3b3JrZXJzLiBJbiBhZGRpdGlvbiBpdCBwcm92aWRlcyBhIGNob2lj
ZSBvZgotY29uY3VycmVuY3kgbW9kZWxzIGZvciBjYWxsZXJzIHRvIGNob29zZSBmcm9tIChzaW5n
bGUtdGhyZWFkZWQgaW5saW5lCi1tb2RlbCwgdGhyZWFkcywgb3IgcHJvY2Vzc2VzKS4KLQotRklY
TUU6IEF0IHRoZSBtb21lbnQsIHRoaXMgbW9kdWxlIGlzIGp1c3QgYSBidW5jaCBvZiBzdHVicywg
YnV0IGV2ZW50dWFsbHkKLWl0IHdpbGwgcHJvdmlkZSB0aHJlZSBzZXRzIG9mIG1hbmFnZXIgY2xh
c3NlcyBhbmQgd29ya2VyIGNsYXNzZXMgZm9yCi10aGUgdGhyZWUgY29uY3VycmVuY3kgbW9kZWxz
LiBUaGUgZ2V0KCkgZmFjdG9yeSBtZXRob2Qgc2VsZWN0cyBiZXR3ZWVuCi10aGVtLgorVGhpcyBt
b2R1bGUgaW1wbGVtZW50cyBhIG1lc3NhZ2UgYnJva2VyIHRoYXQgY29ubmVjdHMgdGhlIG1hbmFn
ZXIKKyhUZXN0UnVubmVyMikgdG8gdGhlIHdvcmtlcnM6IGl0IHByb3ZpZGVzIGEgbWVzc2FnaW5n
IGFic3RyYWN0aW9uIGFuZAorbWVzc2FnZSBsb29wcyAoYnVpbGRpbmcgb24gdG9wIG9mIG1lc3Nh
Z2VfYnJva2VyMiksIGFuZCBoYW5kbGVzIHN0YXJ0aW5nCit3b3JrZXJzIGJ5IGxhdW5jaGluZyB0
aHJlYWRzIGFuZC9vciBwcm9jZXNzZXMgZGVwZW5kaW5nIG9uIHRoZQorcmVxdWVzdGVkIGNvbmZp
Z3VyYXRpb24uCiAiIiIKIAogaW1wb3J0IGxvZ2dpbmcKQEAgLTQ1LDkgKzQwLDcgQEAgaW1wb3J0
IG9wdHBhcnNlCiBpbXBvcnQgUXVldWUKIGltcG9ydCB0aHJlYWRpbmcKIAotIwogIyBIYW5kbGUg
UHl0aG9uIDwgMi42IHdoZXJlIG11bHRpcHJvY2Vzc2luZyBpc24ndCBhdmFpbGFibGUuCi0jCiB0
cnk6CiAgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZwogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAt
ODMsNyArNzYsOCBAQCBkZWYgZ2V0KHBvcnQsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNz
KToKICAgICBBcmdzOgogICAgICAgICBwb3J0IC0gaGFuZGxlIHRvIGxheW91dF90ZXN0cy9wb3J0
IG9iamVjdCBmb3IgcG9ydC1zcGVjaWZpYyBzdHVmZgogICAgICAgICBvcHRpb25zIC0gb3B0cGFy
c2UgYXJndW1lbnQgZm9yIGNvbW1hbmQtbGluZSBvcHRpb25zCi0gICAgICAgIGNsaWVudCAtIG9i
amVjdCB0byBkaXNwYXRjaCByZXBsaWVzIHRvCisgICAgICAgIGNsaWVudCAtIG9iamVjdCB0byBk
aXNwYXRjaCByZXBsaWVzIHRvLiBUaGlzIG9iamVjdCBtdXN0IGltcGxlbWVudAorICAgICAgICAg
ICAgdGhlIG1ldGhvZHMgaW4gbWVzc2FnZV9icm9rZXIyLkJyb2tlckNsaWVudC4KICAgICAgICAg
d29ya2VyX2NsYXNzIC0gdHlwZSBvZiB3b3JrZXJzIHRvIGNyZWF0ZS4gVGhpcyBjbGFzcyBtdXN0
IGltcGxlbWVudAogICAgICAgICAgICAgdGhlIG1ldGhvZHMgaW4gQWJzdHJhY3RXb3JrZXIuCiAg
ICAgUmV0dXJuczoKQEAgLTEzNywxMiArMTMxLDExIEBAIGNsYXNzIEFic3RyYWN0V29ya2VyKG1l
c3NhZ2VfYnJva2VyMi5Ccm9rZXJDbGllbnQpOgogCiAKIGNsYXNzIF9NYW5hZ2VyQ29ubmVjdGlv
bihtZXNzYWdlX2Jyb2tlcjIuQnJva2VyQ29ubmVjdGlvbik6Ci0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIGJyb2tlciwgcG9ydCwgb3B0aW9ucywgY2xpZW50LCB3b3JrZXJfY2xhc3MpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKToK
ICAgICAgICAgIiIiQmFzZSBpbml0aWFsaXphdGlvbiBmb3IgYWxsIE1hbmFnZXIgb2JqZWN0cy4K
IAogICAgICAgICBBcmdzOgogICAgICAgICAgICAgYnJva2VyOiBoYW5kbGUgdG8gdGhlIG1lc3Nh
Z2VfYnJva2VyMiBvYmplY3QKLSAgICAgICAgICAgIHBvcnQ6IGhhbmRsZSB0byBwb3J0LXNwZWNp
ZmljIGZ1bmN0aW9uYWxpdHkKICAgICAgICAgICAgIG9wdGlvbnM6IGNvbW1hbmQgbGluZSBvcHRp
b25zIG9iamVjdAogICAgICAgICAgICAgY2xpZW50OiBjYWxsYmFjayBvYmplY3QgKHRoZSBjYWxs
ZXIpCiAgICAgICAgICAgICB3b3JrZXJfY2xhc3M6IGNsYXNzIG9iamVjdCB0byB1c2UgdG8gY3Jl
YXRlIHdvcmtlcnMuCkBAIC0xNTIsOSArMTQ1LDY2IEBAIGNsYXNzIF9NYW5hZ2VyQ29ubmVjdGlv
bihtZXNzYWdlX2Jyb2tlcjIuQnJva2VyQ29ubmVjdGlvbik6CiAgICAgICAgIHNlbGYuX29wdGlv
bnMgPSBvcHRpb25zCiAgICAgICAgIHNlbGYuX3dvcmtlcl9jbGFzcyA9IHdvcmtlcl9jbGFzcwog
CisgICAgZGVmIF9tYWtlX3dvcmtlcl9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICByYWlzZSBO
b3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX21ha2Vfd29ya2VyKHNlbGYsIHdvcmtlcl9j
b25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBzZWxm
Ll93b3JrZXJfY2xhc3Mod29ya2VyX2Nvbm5lY3Rpb24sIHdvcmtlcl9udW1iZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucywgKiprd2FyZ3MpCisKKyAg
ICBkZWYgc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIsICoqa3dhcmdzKToKKyAgICAg
ICAgd29ya2VyX2Nvbm5lY3Rpb24gPSBzZWxmLl9tYWtlX3dvcmtlcl9jb25uZWN0aW9uKCkKKyAg
ICAgICAgd29ya2VyID0gc2VsZi5fbWFrZV93b3JrZXIod29ya2VyX2Nvbm5lY3Rpb24sIHdvcmtl
cl9udW1iZXIsICoqa3dhcmdzKQorICAgICAgICB3b3JrZXJfY29ubmVjdGlvbi5zZXRfY2xpZW50
KHdvcmtlcikKKyAgICAgICAgcmV0dXJuIHdvcmtlcl9jb25uZWN0aW9uCisKIAogY2xhc3MgX0lu
bGluZU1hbmFnZXIoX01hbmFnZXJDb25uZWN0aW9uKToKLSAgICBwYXNzCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGJyb2tlciwgcG9ydCwgb3B0aW9ucywgY2xpZW50LCB3b3JrZXJfY2xhc3MpOgor
ICAgICAgICBfTWFuYWdlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyLCBvcHRpb25z
LCBjbGllbnQsIHdvcmtlcl9jbGFzcykKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAg
ICAgc2VsZi5faW5saW5lX3dvcmtlciA9IE5vbmUKKworICAgIGRlZiBfbWFrZV93b3JrZXJfY29u
bmVjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5faW5saW5lX3dvcmtlciA9IF9JbmxpbmVXb3Jr
ZXIoc2VsZi5fYnJva2VyLCBzZWxmLl9wb3J0LCBzZWxmLl9jbGllbnQpCisgICAgICAgIHJldHVy
biBzZWxmLl9pbmxpbmVfd29ya2VyCisKKyAgICBkZWYgcnVuX21lc3NhZ2VfbG9vcChzZWxmLCBk
ZWxheV9zZWNzPU5vbmUpOgorICAgICAgICAjIE5vdGUgdGhhdCBkZWxheV9zZWNzIGlzIGlnbm9y
ZWQgaW4gdGhpcyBjYXNlIHNpbmNlIHdlIGNhbid0IGVhc2lseQorICAgICAgICAjIGltcGxlbWVu
dCBpdC4KKyAgICAgICAgc2VsZi5faW5saW5lX3dvcmtlci5ydW4oKQorICAgICAgICBzZWxmLl9i
cm9rZXIucnVuX2FsbF9wZW5kaW5nKE1BTkFHRVJfVE9QSUMsIHNlbGYuX2NsaWVudCkKKworCitj
bGFzcyBfV29ya2VyQ29ubmVjdGlvbihtZXNzYWdlX2Jyb2tlcjIuQnJva2VyQ29ubmVjdGlvbik6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlcik6CisgICAgICAgICMgVGhlIGNsaWVudCBn
ZXRzIGZpbGxlZCBpbiBhZnRlciB0aGlzIG9iamVjdCBpcyBjb25zdHJ1Y3RlZCwgdXNpbmcgc2V0
X2NsaWVudCgpLgorICAgICAgICBzZWxmLl9jbGllbnQgPSBOb25lCisgICAgICAgIG1lc3NhZ2Vf
YnJva2VyMi5Ccm9rZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgc2VsZi5fY2xp
ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
TllfV09SS0VSX1RPUElDLCBNQU5BR0VSX1RPUElDKQorCisgICAgZGVmIHNldF9jbGllbnQoc2Vs
ZiwgY2xpZW50KToKKyAgICAgICAgc2VsZi5fY2xpZW50ID0gY2xpZW50CisgICAgICAgIHNlbGYu
bmFtZSA9IGNsaWVudC5uYW1lKCkKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHJhaXNl
IE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiB5aWVsZF90b19icm9rZXIoc2VsZik6Cisg
ICAgICAgIHBhc3MKKworCitjbGFzcyBfSW5saW5lV29ya2VyKF9Xb3JrZXJDb25uZWN0aW9uKToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0LCBtYW5hZ2VyX2NsaWVudCk6Cisg
ICAgICAgIF9Xb3JrZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlcikKKyAgICAgICAg
c2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5fbWFuYWdlcl9jbGllbnQgPSBtYW5hZ2Vy
X2NsaWVudAorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgc2VsZi5fY2xpZW50LnJ1bihz
ZWxmLl9wb3J0KQorCisgICAgZGVmIHlpZWxkX3RvX2Jyb2tlcihzZWxmKToKKyAgICAgICAgc2Vs
Zi5fYnJva2VyLnJ1bl9hbGxfcGVuZGluZyhNQU5BR0VSX1RPUElDLCBzZWxmLl9tYW5hZ2VyX2Ns
aWVudCkKIAogCiBjbGFzcyBfVGhyZWFkZWRNYW5hZ2VyKF9NYW5hZ2VyQ29ubmVjdGlvbik6CmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXJf
dW5pdHRlc3QucHkKaW5kZXggMGEzMGJkZDQ1ZmI0MWY5OWFlOTQzYWI0Y2VjMDczY2M4OTIwMjVm
YS4uOTIxNjE1NzA4ZmZiNzM5YzYxNzcwNjJiN2IwNjY0NzRjZDdlZDgzMCAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdl
cl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVz
dC5weQpAQCAtODIsNiArODIsOCBAQCBjbGFzcyBGdW5jdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RD
YXNlKToKICAgICAgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKFtdKQogICAg
ICAgICBzZWxmLmFzc2VydFRydWUob3B0aW9ucykKIAorIyBGSVhNRTogQWRkIGluIHVuaXQgdGVz
dHMgZm9yIHRoZSBtYW5hZ2VycywgY292ZXJhZ2UgdGVzdHMgZm9yIHRoZSBpbnRlcmZhY2VzLgor
CiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS90ZXN0X3J1bm5lcjIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS90ZXN0X3J1bm5lcjIucHkKaW5kZXggZWI3ODc1MjU1YzNjM2MxMGNjNjgx
ZTViZDFmZTgwMWUzODE4Y2JmNy4uYzg1M2Y3MjliZjU5MTcyNGRkY2UxODhhYzFiN2E0YzdhY2Ni
OTA0OSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVyMi5weQpAQCAtMjksMjUgKzI5
LDEwMSBAQAogCiAiIiIKIFRoZSBUZXN0UnVubmVyMiBwYWNrYWdlIGlzIGFuIGFsdGVybmF0ZSBp
bXBsZW1lbnRhdGlvbiBvZiB0aGUgVGVzdFJ1bm5lcgotY2xhc3MuIEZvciBub3cgaXQgaXMganVz
dCBhIHN0dWIsIGJ1dCBldmVudHVhbGx5IGl0IHdpbGwgdXNlIHRoZQotbWVzc2FnZSBicm9rZXIg
YWJzdHJhY3Rpb24gdG8gcGFzcyBtZXNzYWdlcyB0byB3b3JrZXJzIHRvIHJ1biBzZXRzIG9mCi10
ZXN0cyBhbmQgdGhlbiBwcm9jZXNzIHRoZSBjb21wbGV0aW9uIG1lc3NhZ2VzIGFjY29yZGluZ2x5
LgorY2xhc3MgdGhhdCB1c2VzIHRoZSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIgbW9kdWxlIHRvIHNl
bmQgc2V0cyBvZiB0ZXN0cyB0bword29ya2VycyBhbmQgcmVjZWl2ZSB0aGVpciBjb21wbGV0aW9u
IG1lc3NhZ2VzIGFjY29yZGluZ2x5LgogIiIiCiAKIGltcG9ydCBsb2dnaW5nCiAKLWltcG9ydCB0
ZXN0X3J1bm5lcgorCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBp
bXBvcnQgbWFuYWdlcl93b3JrZXJfYnJva2VyCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5s
YXlvdXRfcGFja2FnZSBpbXBvcnQgd29ya2VyCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5s
YXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9ydW5uZXIKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9n
Z2VyKF9fbmFtZV9fKQogCiAKIGNsYXNzIFRlc3RSdW5uZXIyKHRlc3RfcnVubmVyLlRlc3RSdW5u
ZXIpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmludGVyKToKLQot
ICAgICAgICAjIEZJWE1FOiBUaGlzJ2xsIGdldCByZXBsYWNlZCB3aXRoIGEgcmVhbCBpbXBsZW1l
bnRhdGlvbiBzb29uIGVub3VnaC4KLSAgICAgICAgaWYgb3B0aW9ucy53b3JrZXJfbW9kZWwgaW4g
KCdpbmxpbmUnLCAndGhyZWFkcycpOgotICAgICAgICAgICAgb3B0aW9ucy53b3JrZXJfbW9kZWwg
PSAnb2xkLScgKyBvcHRpb25zLndvcmtlcl9tb2RlbAotICAgICAgICBpZiBvcHRpb25zLndvcmtl
cl9tb2RlbCA9PSAncHJvY2Vzc2VzJzoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIi0t
d29ya2VyLW1vZGVsPXByb2Nlc3NlcyBub3Qgc3VwcG9ydGVkIHlldCIpCisgICAgICAgIGlmIG9w
dGlvbnMud29ya2VyX21vZGVsIGluICgndGhyZWFkcycsICdwcm9jZXNzZXMnKToKKyAgICAgICAg
ICAgIHJhaXNlIFZhbHVlRXJyb3IoJy0td29ya2VyLW1vZGVsPSVzIG5vdCBzdXBwb3J0ZWQgeWV0
JyAlIG9wdGlvbnMud29ya2VyX21vZGVsKQogCiAgICAgICAgIHRlc3RfcnVubmVyLlRlc3RSdW5u
ZXIuX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlcikKKyAgICAgICAgc2VsZi5f
YWxsX3Jlc3VsdHMgPSBbXQorICAgICAgICBzZWxmLl9ncm91cF9zdGF0cyA9IHt9CisgICAgICAg
IHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkgPSBOb25lCisgICAgICAgIHNlbGYuX2RvbmUg
PSBGYWxzZQorCisgICAgZGVmIGlzX2RvbmUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9k
b25lCisKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICdUZXN0UnVubmVyMicK
KworICAgIGRlZiBfcnVuX3Rlc3RzKHNlbGYsIGZpbGVfbGlzdCwgcmVzdWx0X3N1bW1hcnkpOgor
ICAgICAgICAiIiJSdW5zIHRoZSB0ZXN0cyBpbiB0aGUgZmlsZV9saXN0LgorCisgICAgICAgIFJl
dHVybjogQSB0dXBsZSAoa2V5Ym9hcmRfaW50ZXJydXB0ZWQsIHRocmVhZF90aW1pbmdzLCB0ZXN0
X3RpbWluZ3MsCisgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKKyAgICAgICAg
ICAgIGtleWJvYXJkX2ludGVycnVwdGVkIGlzIHdoZXRoZXIgc29tZW9uZSB0eXBlZCBDdHJsXkMK
KyAgICAgICAgICAgIHRocmVhZF90aW1pbmdzIGlzIGEgbGlzdCBvZiBkaWN0cyB3aXRoIHRoZSB0
b3RhbCBydW50aW1lCisgICAgICAgICAgICAgIG9mIGVhY2ggdGhyZWFkIHdpdGggJ25hbWUnLCAn
bnVtX3Rlc3RzJywgJ3RvdGFsX3RpbWUnIHByb3BlcnRpZXMKKyAgICAgICAgICAgIHRlc3RfdGlt
aW5ncyBpcyBhIGxpc3Qgb2YgdGltaW5ncyBmb3IgZWFjaCBzaGFyZGVkIHN1YmRpcmVjdG9yeQor
ICAgICAgICAgICAgICBvZiB0aGUgZm9ybSBbdGltZSwgZGlyZWN0b3J5X25hbWUsIG51bV90ZXN0
c10KKyAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzIGlzIGEgbGlzdCBvZiBydW4g
dGltZXMgZm9yIGVhY2ggdGVzdAorICAgICAgICAgICAgICBpbiB0aGUgZm9ybSB7ZmlsZW5hbWU6
ZmlsZW5hbWUsIHRlc3RfcnVuX3RpbWU6dGVzdF9ydW5fdGltZX0KKyAgICAgICAgICAgIHJlc3Vs
dF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCB0byBwb3B1bGF0ZSB3aXRoIHRoZSByZXN1bHRzCisg
ICAgICAgICIiIgorICAgICAgICBzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5ID0gcmVzdWx0
X3N1bW1hcnkKKworICAgICAgICAjIEZJWE1FOiBzaGFyZCBwcm9wZXJseS4KKyAgICAgICAgdGVz
dF9saXN0cyA9IHNlbGYuX3NoYXJkX3Rlc3RzKGZpbGVfbGlzdCwgRmFsc2UpCisKKyAgICAgICAg
bWFuYWdlcl9jb25uZWN0aW9uID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLmdldChzZWxmLl9wb3J0
LCBzZWxmLl9vcHRpb25zLCBzZWxmLCB3b3JrZXIuV29ya2VyKQorCisgICAgICAgICMgRklYTUU6
IHN0YXJ0IGFsbCBvZiB0aGUgd29ya2Vycy4KKyAgICAgICAgbWFuYWdlcl9jb25uZWN0aW9uLnN0
YXJ0X3dvcmtlcigwKQorCisgICAgICAgIGZvciB0ZXN0X2xpc3QgaW4gdGVzdF9saXN0czoKKyAg
ICAgICAgICAgIG1hbmFnZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ3Rlc3RfbGlzdCcsIHRl
c3RfbGlzdFswXSwgdGVzdF9saXN0WzFdKQorCisgICAgICAgIG1hbmFnZXJfY29ubmVjdGlvbi5w
b3N0X21lc3NhZ2UoJ3N0b3AnKQorCisgICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkID0gRmFs
c2UKKyAgICAgICAgaW50ZXJydXB0ZWQgPSBGYWxzZQorICAgICAgICBpZiBub3Qgc2VsZi5fb3B0
aW9ucy5kcnlfcnVuOgorICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYuX2NoZWNrX2lmX2RvbmUo
KToKKyAgICAgICAgICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24ucnVuX21lc3NhZ2VfbG9vcChk
ZWxheV9zZWNzPTEuMCkKKworICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQgc3RhdHMuCisgICAg
ICAgIHRocmVhZF90aW1pbmdzID0gW10KKworICAgICAgICByZXR1cm4gKGtleWJvYXJkX2ludGVy
cnVwdGVkLCBpbnRlcnJ1cHRlZCwgdGhyZWFkX3RpbWluZ3MsCisgICAgICAgICAgICAgICAgc2Vs
Zi5fZ3JvdXBfc3RhdHMsIHNlbGYuX2FsbF9yZXN1bHRzKQorCisgICAgZGVmIF9jaGVja19pZl9k
b25lKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWZmIGFsbCB0aGUgd29ya2VycyBo
YXZlIGVpdGhlciBjb21wbGV0ZWQgb3Igd2VkZ2VkLiIiIgorICAgICAgICAjIEZJWE1FOiBpbXBs
ZW1lbnQgdG8gY2hlY2sgZm9yIHdlZGdlZCB3b3JrZXJzLgorICAgICAgICByZXR1cm4gc2VsZi5f
ZG9uZQorCisgICAgZGVmIGhhbmRsZV9zdGFydGVkX3Rlc3Qoc2VsZiwgc3JjLCB0ZXN0X2luZm8s
IGhhbmdfdGltZW91dCk6CisgICAgICAgICMgRklYTUU6IGltcGxlbWVudAorICAgICAgICBwYXNz
CisKKyAgICBkZWYgaGFuZGxlX2RvbmUoc2VsZiwgc3JjKToKKyAgICAgICAgIyBGSVhNRTogaW1w
bGVtZW50IHByb3Blcmx5IHRvIGhhbmRsZSBtdWx0aXBsZSB3b3JrZXJzLgorICAgICAgICBzZWxm
Ll9kb25lID0gVHJ1ZQorICAgICAgICBwYXNzCisKKyAgICBkZWYgaGFuZGxlX2V4Y2VwdGlvbihz
ZWxmLCBzcmMsIGV4Y2VwdGlvbl9pbmZvKToKKyAgICAgICAgcmFpc2UgZXhjZXB0aW9uX2luZm8K
KworICAgIGRlZiBoYW5kbGVfZmluaXNoZWRfbGlzdChzZWxmLCBzcmMsIGxpc3RfbmFtZSwgbnVt
X3Rlc3RzLCBlbGFwc2VkX3RpbWUpOgorICAgICAgICAjIEZJWE1FOiB1cGRhdGUgc3RhdHMKKyAg
ICAgICAgcGFzcworCisgICAgZGVmIGhhbmRsZV9maW5pc2hlZF90ZXN0KHNlbGYsIHNyYywgcmVz
dWx0LCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBzZWxmLl91cGRhdGVfc3VtbWFyeV93aXRoX3Jl
c3VsdChzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5LCByZXN1bHQpCisKKyAgICAgICAgIyBG
SVhNRTogdXBkYXRlIHN0YXRzLgorICAgICAgICBzZWxmLl9hbGxfcmVzdWx0cy5hcHBlbmQocmVz
dWx0KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2Uvd29ya2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3ZDRmYmRiYmUwOGNlN2Rl
ZTEzNzUwM2I3NGZiNjgxYzc3OGU0YTUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93b3JrZXIucHkKQEAgLTAsMCAr
MSwxMDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJIYW5kbGUgbWVzc2FnZXMgZnJvbSB0aGUg
VGVzdFJ1bm5lciBhbmQgZXhlY3V0ZSBhY3R1YWwgdGVzdHMuIiIiCisKK2ltcG9ydCBsb2dnaW5n
CitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0g
aW1wb3J0IHN0YWNrX3V0aWxzCisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9w
YWNrYWdlIGltcG9ydCBtYW5hZ2VyX3dvcmtlcl9icm9rZXIKK2Zyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X3Jlc3VsdHMKKworCitfbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgV29ya2VyKG1hbmFnZXJfd29ya2Vy
X2Jyb2tlci5BYnN0cmFjdFdvcmtlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdvcmtlcl9j
b25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyLCBvcHRpb25zKToKKyAgICAgICAgc2VsZi5fd29ya2Vy
X2Nvbm5lY3Rpb24gPSB3b3JrZXJfY29ubmVjdGlvbgorICAgICAgICBzZWxmLl93b3JrZXJfbnVt
YmVyID0gd29ya2VyX251bWJlcgorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAg
ICAgICBzZWxmLl9uYW1lID0gJ3dvcmtlci8lZCcgJSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNl
bGYuX2RvbmUgPSBGYWxzZQorICAgICAgICBzZWxmLl9wb3J0ID0gTm9uZQorCisgICAgZGVmIF9k
ZWZlcnJlZF9pbml0KHNlbGYsIHBvcnQpOgorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorCisg
ICAgZGVmIGlzX2RvbmUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kb25lCisKKyAgICBk
ZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKKworICAgIGRlZiBydW4o
c2VsZiwgcG9ydCk6CisgICAgICAgIHNlbGYuX2RlZmVycmVkX2luaXQocG9ydCkKKworICAgICAg
ICBfbG9nLmRlYnVnKCIlcyBzdGFydGluZyIgJSBzZWxmLl9uYW1lKQorCisgICAgICAgICMgRklY
TUU6IG5lZWQgdG8gYWRkIGluIGVycm9yIGhhbmRsaW5nLCBiZXR0ZXIgbG9nZ2luZy4KKyAgICAg
ICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucnVuX21lc3NhZ2VfbG9vcCgpCisgICAgICAgIHNl
bGYuX3dvcmtlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnZG9uZScpCisKKyAgICBkZWYgaGFu
ZGxlX3Rlc3RfbGlzdChzZWxmLCBzcmMsIGxpc3RfbmFtZSwgdGVzdF9saXN0KToKKyAgICAgICAg
IyBGSVhNRTogY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gZ2V0IHRoZSBodHRwIGxvY2suCisK
KyAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIG51bV90ZXN0cyA9IDAK
KyAgICAgICAgZm9yIHRlc3RfaW5wdXQgaW4gdGVzdF9saXN0OgorICAgICAgICAgICAgc2VsZi5f
cnVuX3Rlc3QodGVzdF9pbnB1dCkKKyAgICAgICAgICAgIG51bV90ZXN0cyArPSAxCisgICAgICAg
ICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi55aWVsZF90b19icm9rZXIoKQorCisgICAgICAg
IGVsYXBzZWRfdGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZQorICAgICAgICBzZWxmLl93
b3JrZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ2ZpbmlzaGVkX2xpc3QnLCBsaXN0X25hbWUs
IG51bV90ZXN0cywgZWxhcHNlZF90aW1lKQorCisgICAgICAgICMgRklYTUU6IHJlbGVhc2UgdGhl
IGxvY2sgaWYgbmVjZXNzYXJ5CisKKyAgICBkZWYgaGFuZGxlX3N0b3Aoc2VsZiwgc3JjKToKKyAg
ICAgICAgc2VsZi5fZG9uZSA9IFRydWUKKworICAgIGRlZiBfcnVuX3Rlc3Qoc2VsZiwgdGVzdF9p
bnB1dCk6CisKKyAgICAgICAgIyBGSVhNRTogZ2V0IHJlYWwgdGltZW91dCB2YWx1ZSBmcm9tIFNp
bmdsZVRlc3RSdW5uZXIKKyAgICAgICAgdGVzdF90aW1lb3V0X3NlYyA9IGludCh0ZXN0X2lucHV0
LnRpbWVvdXQpIC8gMTAwMAorICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCisgICAgICAgIHNl
bGYuX3dvcmtlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnc3RhcnRlZF90ZXN0JywgdGVzdF9p
bnB1dCwgdGVzdF90aW1lb3V0X3NlYykKKworICAgICAgICAjIEZJWE1FOiBhY3R1YWxseSBydW4g
dGhlIHRlc3QuCisgICAgICAgIHJlc3VsdCA9IHRlc3RfcmVzdWx0cy5UZXN0UmVzdWx0KHRlc3Rf
aW5wdXQuZmlsZW5hbWUsIGZhaWx1cmVzPVtdLAorICAgICAgICAgICAgdGVzdF9ydW5fdGltZT0w
LCB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnM9MCwgdGltZV9mb3JfZGlmZnM9e30pCisKKyAgICAg
ICAgZWxhcHNlZF90aW1lID0gdGltZS50aW1lKCkgLSBzdGFydAorCisgICAgICAgICMgRklYTUU6
IHVwZGF0ZSBzdGF0cywgY2hlY2sgZm9yIGZhaWx1cmVzLgorCisgICAgICAgIHNlbGYuX3dvcmtl
cl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnZmluaXNoZWRfdGVzdCcsIHJlc3VsdCwgZWxhcHNl
ZF90aW1lKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKaW5kZXggZjRlNTM1MGU2Zjg1
MzNiZjM4OTNjNDE1ODI5ZTI5YWJkMzY4ZTQ1NS4uODkxNzk3ZDUwNWM0OGUxOGVjOWI0OTcxNjU5
MDcyMTZjZmNlOTFjZCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CkBAIC00NzAs
NyArNDcwLDcgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBz
ZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb2dnaW5nX3J1biwgWyctLXdvcmtlci1tb2Rl
bCcsICdwcm9jZXNzZXMnXSkKIAogICAgIGRlZiB0ZXN0X3dvcmtlcl9tb2RlbF9fdGhyZWFkcyhz
ZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS13b3JrZXItbW9k
ZWwnLCAndGhyZWFkcyddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwg
bG9nZ2luZ19ydW4sIFsnLS13b3JrZXItbW9kZWwnLCAndGhyZWFkcyddKQogCiAgICAgZGVmIHRl
c3Rfd29ya2VyX21vZGVsX191bmtub3duKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNl
cyhWYWx1ZUVycm9yLCBsb2dnaW5nX3J1biwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81892</attachid>
            <date>2011-02-09 16:22:48 -0800</date>
            <delta_ts>2011-02-09 18:01:36 -0800</delta_ts>
            <desc>add interaction diagram, fix signatures, unit tests for _ThreadedManager, _MultiProcessManager</desc>
            <filename>bug-54068-20110209162247.patch</filename>
            <type>text/plain</type>
            <size>18541</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzgxNTkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyNTYxNjE1Y2VjN2Y5NmZjNDI1MThkYTg0NTY5ZWJiZjg3
MDRhNTVmLi41NjExYjM4MWY1OWNiYmI4OGRjZmRjMWFkMzExNGMzN2YwOTU5YjVhIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjcg
QEAKIDIwMTEtMDItMDkgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
ZGRzIHRoZSBidWxrIG9mIHRoZSByZW1haW5pbmcgZnVuY3Rpb25hbGl0eSBmb3IKKyAgICAgICAg
dGhlIE5SV1QgbWVzc2FnZS1wYXNzaW5nIGltcGxlbWVudGF0aW9uLiBUaGUgcGF0Y2ggYWRkcyBh
IG5ldworICAgICAgICBXb3JrZXIgY2xhc3MgdGhhdCB3aWxsIGV2ZW50dWFsbHkgcmVwbGFjZSB0
aGUgVGVzdFNoZWxsVGhyZWFkCisgICAgICAgIGNsYXNzIGluIGR1bXBfcmVuZGVyX3RyZWVfdGhy
ZWFkLnB5LCBhbmQgaW1wbGVtZW50cyBlbm91Z2ggb2YKKyAgICAgICAgVGVzdFJ1bm5lcjIgYW5k
IHRoZSBpbmxpbmUgdmVyc2lvbiBvZiB0aGUgbWFuYWdlcl93b3JrZXJfYnJva2VyCisgICAgICAg
IHRvIGFjdHVhbGx5IGJlIGFibGUgdG8gc2VuZCBhIGZ1bGwgc2V0IG9mIG1lc3NhZ2VzIGJhY2sg
YW5kCisgICAgICAgIGZvcnRoLiBUaGUgV29ya2VyIHN0dWJzIGRvIG5vdCBhY3R1YWxseSBydW4g
dGVzdHMsIGFuZCB0aGVyZSdzCisgICAgICAgIGxvdHMgb2YgZXJyb3IgaGFuZGxpbmcgYW5kIHN0
YXRzIG5lZWRlZCwgYnV0IHRoaXMgaXMgdGhlIGNvcmUKKyAgICAgICAgbG9naWMuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0MDY4CisKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2Vy
X3dvcmtlcl9icm9rZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3Rf
cnVubmVyMi5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS93b3JrZXIucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6CisKKzIwMTEtMDItMDkg
IERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgUmV2aWV3ZWQg
YnkgVG9ueSBDaGFuZy4KIAogICAgICAgICBucnd0IG11bHRpcHJvY2Vzc2luZzogbWlub3IgY2xl
YW51cCBwcmlvciB0byBpbXBsZW1lbnRpbmcgdGhlIG5ldyB3b3JrZXIKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJf
d29ya2VyX2Jyb2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weQppbmRleCA5ZmFlYzZlNjUxNDU2
MTJmZjFlZTlkZDkyZGMzMjlkZjI3NmFjNDE0Li4wYzA0NzQ3ZDYxODY0NzE1ZjU1YTMxMTlmOGUx
Nzc3MmNkYjE0ODk3IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3Jr
ZXJfYnJva2VyLnB5CkBAIC0yOCwxNiArMjgsMjAgQEAKIAogIiIiTW9kdWxlIGZvciBoYW5kbGlu
ZyBtZXNzYWdlcyBhbmQgY29uY3VycmVuY3kgZm9yIHJ1bi13ZWJraXQtdGVzdHMuCiAKLVRoaXMg
bW9kdWxlIGJ1aWxkcyBvbiB0aGUgZnVuY3Rpb25hbGl0eSBvZiBtZXNzYWdlX2Jyb2tlcjIgdG8g
cHJvdmlkZQotYSBzaW1wbGUgbWVzc2FnZSBicm9rZXIgZm9yIGEgbWFuYWdlciBzZW5kaW5nIG1l
c3NhZ2VzIHRvIChhbmQgZ2V0dGluZwotcmVwbGllcyBmcm9tKSBhIHBvb2wgb2Ygd29ya2Vycy4g
SW4gYWRkaXRpb24gaXQgcHJvdmlkZXMgYSBjaG9pY2Ugb2YKLWNvbmN1cnJlbmN5IG1vZGVscyBm
b3IgY2FsbGVycyB0byBjaG9vc2UgZnJvbSAoc2luZ2xlLXRocmVhZGVkIGlubGluZQotbW9kZWws
IHRocmVhZHMsIG9yIHByb2Nlc3NlcykuCi0KLUZJWE1FOiBBdCB0aGUgbW9tZW50LCB0aGlzIG1v
ZHVsZSBpcyBqdXN0IGEgYnVuY2ggb2Ygc3R1YnMsIGJ1dCBldmVudHVhbGx5Ci1pdCB3aWxsIHBy
b3ZpZGUgdGhyZWUgc2V0cyBvZiBtYW5hZ2VyIGNsYXNzZXMgYW5kIHdvcmtlciBjbGFzc2VzIGZv
cgotdGhlIHRocmVlIGNvbmN1cnJlbmN5IG1vZGVscy4gVGhlIGdldCgpIGZhY3RvcnkgbWV0aG9k
IHNlbGVjdHMgYmV0d2VlbgotdGhlbS4KK1RoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBtZXNzYWdl
IGJyb2tlciB0aGF0IGNvbm5lY3RzIHRoZSBtYW5hZ2VyCisoVGVzdFJ1bm5lcjIpIHRvIHRoZSB3
b3JrZXJzOiBpdCBwcm92aWRlcyBhIG1lc3NhZ2luZyBhYnN0cmFjdGlvbiBhbmQKK21lc3NhZ2Ug
bG9vcHMgKGJ1aWxkaW5nIG9uIHRvcCBvZiBtZXNzYWdlX2Jyb2tlcjIpLCBhbmQgaGFuZGxlcyBz
dGFydGluZword29ya2VycyBieSBsYXVuY2hpbmcgdGhyZWFkcyBhbmQvb3IgcHJvY2Vzc2VzIGRl
cGVuZGluZyBvbiB0aGUKK3JlcXVlc3RlZCBjb25maWd1cmF0aW9uLgorCitUaGVyZSBhcmUgYSBs
b3Qgb2YgY2xhc3NlcyBhbmQgb2JqZWN0cyBpbnZvbHZlZCBpbiBhIGZ1bGx5IGNvbm5lY3RlZCBz
eXN0ZW0uCitUaGV5IGludGVyYWN0IG1vcmUgb3IgbGVzcyBsaWtlOgorCitUZXN0UnVubmVyMiAg
LS0+IF9JbmxpbmVNYW5hZ2VyIC0tLT4gX0lubGluZVdvcmtlciA8LT4gV29ya2VyCisgICAgIF4g
ICAgICAgICAgICAgICAgICAgXCAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICBeCisgICAg
IHwgICAgICAgICAgICAgICAgICAgIFwgICAgICAgICAgICAgICAvICAgICAgICAgICAgICB8Cisg
ICAgIHwgICAgICAgICAgICAgICAgICAgICB2ICAgICAgICAgICAgIHYgICAgICAgICAgICAgICB8
CisgICAgIFwtLS0tLS0tLS0tLS0tLS0tLS0tLSAgTWVzc2FnZUJyb2tlciAgIC0tLS0tLS0tLS0t
LS0vCiAiIiIKIAogaW1wb3J0IGxvZ2dpbmcKQEAgLTQ1LDkgKzQ5LDcgQEAgaW1wb3J0IG9wdHBh
cnNlCiBpbXBvcnQgUXVldWUKIGltcG9ydCB0aHJlYWRpbmcKIAotIwogIyBIYW5kbGUgUHl0aG9u
IDwgMi42IHdoZXJlIG11bHRpcHJvY2Vzc2luZyBpc24ndCBhdmFpbGFibGUuCi0jCiB0cnk6CiAg
ICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZwogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtODMsNyAr
ODUsOCBAQCBkZWYgZ2V0KHBvcnQsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKToKICAg
ICBBcmdzOgogICAgICAgICBwb3J0IC0gaGFuZGxlIHRvIGxheW91dF90ZXN0cy9wb3J0IG9iamVj
dCBmb3IgcG9ydC1zcGVjaWZpYyBzdHVmZgogICAgICAgICBvcHRpb25zIC0gb3B0cGFyc2UgYXJn
dW1lbnQgZm9yIGNvbW1hbmQtbGluZSBvcHRpb25zCi0gICAgICAgIGNsaWVudCAtIG9iamVjdCB0
byBkaXNwYXRjaCByZXBsaWVzIHRvCisgICAgICAgIGNsaWVudCAtIG9iamVjdCB0byBkaXNwYXRj
aCByZXBsaWVzIHRvLiBUaGlzIG9iamVjdCBtdXN0IGltcGxlbWVudAorICAgICAgICAgICAgdGhl
IG1ldGhvZHMgaW4gbWVzc2FnZV9icm9rZXIyLkJyb2tlckNsaWVudC4KICAgICAgICAgd29ya2Vy
X2NsYXNzIC0gdHlwZSBvZiB3b3JrZXJzIHRvIGNyZWF0ZS4gVGhpcyBjbGFzcyBtdXN0IGltcGxl
bWVudAogICAgICAgICAgICAgdGhlIG1ldGhvZHMgaW4gQWJzdHJhY3RXb3JrZXIuCiAgICAgUmV0
dXJuczoKQEAgLTEzNywxMiArMTQwLDExIEBAIGNsYXNzIEFic3RyYWN0V29ya2VyKG1lc3NhZ2Vf
YnJva2VyMi5Ccm9rZXJDbGllbnQpOgogCiAKIGNsYXNzIF9NYW5hZ2VyQ29ubmVjdGlvbihtZXNz
YWdlX2Jyb2tlcjIuQnJva2VyQ29ubmVjdGlvbik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJy
b2tlciwgcG9ydCwgb3B0aW9ucywgY2xpZW50LCB3b3JrZXJfY2xhc3MpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBicm9rZXIsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKToKICAgICAg
ICAgIiIiQmFzZSBpbml0aWFsaXphdGlvbiBmb3IgYWxsIE1hbmFnZXIgb2JqZWN0cy4KIAogICAg
ICAgICBBcmdzOgogICAgICAgICAgICAgYnJva2VyOiBoYW5kbGUgdG8gdGhlIG1lc3NhZ2VfYnJv
a2VyMiBvYmplY3QKLSAgICAgICAgICAgIHBvcnQ6IGhhbmRsZSB0byBwb3J0LXNwZWNpZmljIGZ1
bmN0aW9uYWxpdHkKICAgICAgICAgICAgIG9wdGlvbnM6IGNvbW1hbmQgbGluZSBvcHRpb25zIG9i
amVjdAogICAgICAgICAgICAgY2xpZW50OiBjYWxsYmFjayBvYmplY3QgKHRoZSBjYWxsZXIpCiAg
ICAgICAgICAgICB3b3JrZXJfY2xhc3M6IGNsYXNzIG9iamVjdCB0byB1c2UgdG8gY3JlYXRlIHdv
cmtlcnMuCkBAIC0xNTIsMTQgKzE1NCw3MyBAQCBjbGFzcyBfTWFuYWdlckNvbm5lY3Rpb24obWVz
c2FnZV9icm9rZXIyLkJyb2tlckNvbm5lY3Rpb24pOgogICAgICAgICBzZWxmLl9vcHRpb25zID0g
b3B0aW9ucwogICAgICAgICBzZWxmLl93b3JrZXJfY2xhc3MgPSB3b3JrZXJfY2xhc3MKIAorICAg
IGRlZiBfbWFrZV93b3JrZXJfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1w
bGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9tYWtlX3dvcmtlcihzZWxmLCB3b3JrZXJfY29ubmVj
dGlvbiwgd29ya2VyX251bWJlciwgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZi5fd29y
a2VyX2NsYXNzKHdvcmtlcl9jb25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMsICoqa3dhcmdzKQorCisgICAgZGVm
IHN0YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfbnVtYmVyLCAqKmt3YXJncyk6CisgICAgICAgIHdv
cmtlcl9jb25uZWN0aW9uID0gc2VsZi5fbWFrZV93b3JrZXJfY29ubmVjdGlvbigpCisgICAgICAg
IHdvcmtlciA9IHNlbGYuX21ha2Vfd29ya2VyKHdvcmtlcl9jb25uZWN0aW9uLCB3b3JrZXJfbnVt
YmVyLCAqKmt3YXJncykKKyAgICAgICAgd29ya2VyX2Nvbm5lY3Rpb24uc2V0X2NsaWVudCh3b3Jr
ZXIpCisgICAgICAgIHJldHVybiB3b3JrZXJfY29ubmVjdGlvbgorCiAKIGNsYXNzIF9JbmxpbmVN
YW5hZ2VyKF9NYW5hZ2VyQ29ubmVjdGlvbik6Ci0gICAgcGFzcworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBicm9rZXIsIHBvcnQsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKToKKyAgICAg
ICAgX01hbmFnZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgb3B0aW9ucywgY2xp
ZW50LCB3b3JrZXJfY2xhc3MpCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNl
bGYuX2lubGluZV93b3JrZXIgPSBOb25lCisKKyAgICBkZWYgX21ha2Vfd29ya2VyX2Nvbm5lY3Rp
b24oc2VsZik6CisgICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIgPSBfSW5saW5lV29ya2VyKHNl
bGYuX2Jyb2tlciwgc2VsZi5fcG9ydCwgc2VsZi5fY2xpZW50KQorICAgICAgICByZXR1cm4gc2Vs
Zi5faW5saW5lX3dvcmtlcgorCisgICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgZGVsYXlf
c2Vjcz1Ob25lKToKKyAgICAgICAgIyBOb3RlIHRoYXQgZGVsYXlfc2VjcyBpcyBpZ25vcmVkIGlu
IHRoaXMgY2FzZSBzaW5jZSB3ZSBjYW4ndCBlYXNpbHkKKyAgICAgICAgIyBpbXBsZW1lbnQgaXQu
CisgICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIucnVuKCkKKyAgICAgICAgc2VsZi5fYnJva2Vy
LnJ1bl9hbGxfcGVuZGluZyhNQU5BR0VSX1RPUElDLCBzZWxmLl9jbGllbnQpCisKKworY2xhc3Mg
X1dvcmtlckNvbm5lY3Rpb24obWVzc2FnZV9icm9rZXIyLkJyb2tlckNvbm5lY3Rpb24pOgorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIpOgorICAgICAgICAjIFRoZSBjbGllbnQgZ2V0cyBm
aWxsZWQgaW4gYWZ0ZXIgdGhpcyBvYmplY3QgaXMgY29uc3RydWN0ZWQsIHVzaW5nIHNldF9jbGll
bnQoKS4KKyAgICAgICAgc2VsZi5fY2xpZW50ID0gTm9uZQorICAgICAgICBtZXNzYWdlX2Jyb2tl
cjIuQnJva2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIHNlbGYuX2NsaWVudCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5ZX1dP
UktFUl9UT1BJQywgTUFOQUdFUl9UT1BJQykKKworICAgIGRlZiBzZXRfY2xpZW50KHNlbGYsIGNs
aWVudCk6CisgICAgICAgIHNlbGYuX2NsaWVudCA9IGNsaWVudAorICAgICAgICBzZWxmLm5hbWUg
PSBjbGllbnQubmFtZSgpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgeWllbGRfdG9fYnJva2VyKHNlbGYpOgorICAgICAg
ICBwYXNzCisKKworY2xhc3MgX0lubGluZVdvcmtlcihfV29ya2VyQ29ubmVjdGlvbik6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgcG9ydCwgbWFuYWdlcl9jbGllbnQpOgorICAgICAg
ICBfV29ya2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIpCisgICAgICAgIHNlbGYu
X3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX21hbmFnZXJfY2xpZW50ID0gbWFuYWdlcl9jbGll
bnQKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHNlbGYuX2NsaWVudC5ydW4oc2VsZi5f
cG9ydCkKKworICAgIGRlZiB5aWVsZF90b19icm9rZXIoc2VsZik6CisgICAgICAgIHNlbGYuX2Jy
b2tlci5ydW5fYWxsX3BlbmRpbmcoTUFOQUdFUl9UT1BJQywgc2VsZi5fbWFuYWdlcl9jbGllbnQp
CiAKIAogY2xhc3MgX1RocmVhZGVkTWFuYWdlcihfTWFuYWdlckNvbm5lY3Rpb24pOgotICAgIHBh
c3MKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0LCBvcHRpb25zLCBjbGllbnQs
IHdvcmtlcl9jbGFzcyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogCiBj
bGFzcyBfTXVsdGlQcm9jZXNzTWFuYWdlcihfTWFuYWdlckNvbm5lY3Rpb24pOgotICAgIHBhc3MK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0LCBvcHRpb25zLCBjbGllbnQsIHdv
cmtlcl9jbGFzcyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21h
bmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVz
dC5weQppbmRleCAwYTMwYmRkNDVmYjQxZjk5YWU5NDNhYjRjZWMwNzNjYzg5MjAyNWZhLi4xYTQz
MmQ2Yzk0MTU2NmZhMWU4YmUwMDYzMzVkNDE4MjRiOTUzYmFjIDEwMDY0NAotLS0gYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtl
cl9icm9rZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5CkBA
IC02NSwxMSArNjUsMTEgQEAgY2xhc3MgRnVuY3Rpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6
CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYWtlX2Jyb2tlcihzZWxmLCAnaW5saW5lJykgaXMg
bm90IE5vbmUpCiAKICAgICBkZWYgdGVzdF9nZXRfX3RocmVhZHMoc2VsZik6Ci0gICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShtYWtlX2Jyb2tlcihzZWxmLCAndGhyZWFkcycpIGlzIG5vdCBOb25lKQor
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBtYWtlX2Jyb2tl
ciwgc2VsZiwgJ3RocmVhZHMnKQogCiAgICAgZGVmIHRlc3RfZ2V0X19wcm9jZXNzZXMoc2VsZik6
CiAgICAgICAgIGlmIG11bHRpcHJvY2Vzc2luZzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShtYWtlX2Jyb2tlcihzZWxmLCAncHJvY2Vzc2VzJykgaXMgbm90IE5vbmUpCisgICAgICAgICAg
ICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBtYWtlX2Jyb2tlciwgc2Vs
ZiwgJ3Byb2Nlc3NlcycpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJh
aXNlcyhWYWx1ZUVycm9yLCBtYWtlX2Jyb2tlciwgc2VsZiwgJ3Byb2Nlc3NlcycpCiAKQEAgLTgy
LDYgKzgyLDggQEAgY2xhc3MgRnVuY3Rpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAg
ICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhbXSkKICAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKG9wdGlvbnMpCiAKKyMgRklYTUU6IEFkZCBpbiB1bml0IHRlc3RzIGZvciB0aGUg
bWFuYWdlcnMsIGNvdmVyYWdlIHRlc3RzIGZvciB0aGUgaW50ZXJmYWNlcy4KKwogCiBpZiBfX25h
bWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5u
ZXIyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvdGVzdF9ydW5uZXIyLnB5CmluZGV4IGViNzg3NTI1NWMzYzNjMTBjYzY4MWU1YmQxZmU4MDFl
MzgxOGNiZjcuLmM4NTNmNzI5YmY1OTE3MjRkZGNlMTg4YWMxYjdhNGM3YWNjYjkwNDkgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3Rlc3RfcnVubmVyMi5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS90ZXN0X3J1bm5lcjIucHkKQEAgLTI5LDI1ICsyOSwxMDEgQEAKIAog
IiIiCiBUaGUgVGVzdFJ1bm5lcjIgcGFja2FnZSBpcyBhbiBhbHRlcm5hdGUgaW1wbGVtZW50YXRp
b24gb2YgdGhlIFRlc3RSdW5uZXIKLWNsYXNzLiBGb3Igbm93IGl0IGlzIGp1c3QgYSBzdHViLCBi
dXQgZXZlbnR1YWxseSBpdCB3aWxsIHVzZSB0aGUKLW1lc3NhZ2UgYnJva2VyIGFic3RyYWN0aW9u
IHRvIHBhc3MgbWVzc2FnZXMgdG8gd29ya2VycyB0byBydW4gc2V0cyBvZgotdGVzdHMgYW5kIHRo
ZW4gcHJvY2VzcyB0aGUgY29tcGxldGlvbiBtZXNzYWdlcyBhY2NvcmRpbmdseS4KK2NsYXNzIHRo
YXQgdXNlcyB0aGUgbWFuYWdlcl93b3JrZXJfYnJva2VyIG1vZHVsZSB0byBzZW5kIHNldHMgb2Yg
dGVzdHMgdG8KK3dvcmtlcnMgYW5kIHJlY2VpdmUgdGhlaXIgY29tcGxldGlvbiBtZXNzYWdlcyBh
Y2NvcmRpbmdseS4KICIiIgogCiBpbXBvcnQgbG9nZ2luZwogCi1pbXBvcnQgdGVzdF9ydW5uZXIK
KworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1hbmFn
ZXJfd29ya2VyX2Jyb2tlcgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2th
Z2UgaW1wb3J0IHdvcmtlcgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2th
Z2UgaW1wb3J0IHRlc3RfcnVubmVyCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVf
XykKIAogCiBjbGFzcyBUZXN0UnVubmVyMih0ZXN0X3J1bm5lci5UZXN0UnVubmVyKToKICAgICBk
ZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlcik6Ci0KLSAgICAgICAgIyBG
SVhNRTogVGhpcydsbCBnZXQgcmVwbGFjZWQgd2l0aCBhIHJlYWwgaW1wbGVtZW50YXRpb24gc29v
biBlbm91Z2guCi0gICAgICAgIGlmIG9wdGlvbnMud29ya2VyX21vZGVsIGluICgnaW5saW5lJywg
J3RocmVhZHMnKToKLSAgICAgICAgICAgIG9wdGlvbnMud29ya2VyX21vZGVsID0gJ29sZC0nICsg
b3B0aW9ucy53b3JrZXJfbW9kZWwKLSAgICAgICAgaWYgb3B0aW9ucy53b3JrZXJfbW9kZWwgPT0g
J3Byb2Nlc3Nlcyc6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCItLXdvcmtlci1tb2Rl
bD1wcm9jZXNzZXMgbm90IHN1cHBvcnRlZCB5ZXQiKQorICAgICAgICBpZiBvcHRpb25zLndvcmtl
cl9tb2RlbCBpbiAoJ3RocmVhZHMnLCAncHJvY2Vzc2VzJyk6CisgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCctLXdvcmtlci1tb2RlbD0lcyBub3Qgc3VwcG9ydGVkIHlldCcgJSBvcHRpb25z
Lndvcmtlcl9tb2RlbCkKIAogICAgICAgICB0ZXN0X3J1bm5lci5UZXN0UnVubmVyLl9faW5pdF9f
KHNlbGYsIHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpCisgICAgICAgIHNlbGYuX2FsbF9yZXN1bHRz
ID0gW10KKyAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHMgPSB7fQorICAgICAgICBzZWxmLl9jdXJy
ZW50X3Jlc3VsdF9zdW1tYXJ5ID0gTm9uZQorICAgICAgICBzZWxmLl9kb25lID0gRmFsc2UKKwor
ICAgIGRlZiBpc19kb25lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZG9uZQorCisgICAg
ZGVmIG5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAnVGVzdFJ1bm5lcjInCisKKyAgICBkZWYg
X3J1bl90ZXN0cyhzZWxmLCBmaWxlX2xpc3QsIHJlc3VsdF9zdW1tYXJ5KToKKyAgICAgICAgIiIi
UnVucyB0aGUgdGVzdHMgaW4gdGhlIGZpbGVfbGlzdC4KKworICAgICAgICBSZXR1cm46IEEgdHVw
bGUgKGtleWJvYXJkX2ludGVycnVwdGVkLCB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLAor
ICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCisgICAgICAgICAgICBrZXlib2Fy
ZF9pbnRlcnJ1cHRlZCBpcyB3aGV0aGVyIHNvbWVvbmUgdHlwZWQgQ3RybF5DCisgICAgICAgICAg
ICB0aHJlYWRfdGltaW5ncyBpcyBhIGxpc3Qgb2YgZGljdHMgd2l0aCB0aGUgdG90YWwgcnVudGlt
ZQorICAgICAgICAgICAgICBvZiBlYWNoIHRocmVhZCB3aXRoICduYW1lJywgJ251bV90ZXN0cycs
ICd0b3RhbF90aW1lJyBwcm9wZXJ0aWVzCisgICAgICAgICAgICB0ZXN0X3RpbWluZ3MgaXMgYSBs
aXN0IG9mIHRpbWluZ3MgZm9yIGVhY2ggc2hhcmRlZCBzdWJkaXJlY3RvcnkKKyAgICAgICAgICAg
ICAgb2YgdGhlIGZvcm0gW3RpbWUsIGRpcmVjdG9yeV9uYW1lLCBudW1fdGVzdHNdCisgICAgICAg
ICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyBpcyBhIGxpc3Qgb2YgcnVuIHRpbWVzIGZvciBl
YWNoIHRlc3QKKyAgICAgICAgICAgICAgaW4gdGhlIGZvcm0ge2ZpbGVuYW1lOmZpbGVuYW1lLCB0
ZXN0X3J1bl90aW1lOnRlc3RfcnVuX3RpbWV9CisgICAgICAgICAgICByZXN1bHRfc3VtbWFyeTog
c3VtbWFyeSBvYmplY3QgdG8gcG9wdWxhdGUgd2l0aCB0aGUgcmVzdWx0cworICAgICAgICAiIiIK
KyAgICAgICAgc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSA9IHJlc3VsdF9zdW1tYXJ5CisK
KyAgICAgICAgIyBGSVhNRTogc2hhcmQgcHJvcGVybHkuCisgICAgICAgIHRlc3RfbGlzdHMgPSBz
ZWxmLl9zaGFyZF90ZXN0cyhmaWxlX2xpc3QsIEZhbHNlKQorCisgICAgICAgIG1hbmFnZXJfY29u
bmVjdGlvbiA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5nZXQoc2VsZi5fcG9ydCwgc2VsZi5fb3B0
aW9ucywgc2VsZiwgd29ya2VyLldvcmtlcikKKworICAgICAgICAjIEZJWE1FOiBzdGFydCBhbGwg
b2YgdGhlIHdvcmtlcnMuCisgICAgICAgIG1hbmFnZXJfY29ubmVjdGlvbi5zdGFydF93b3JrZXIo
MCkKKworICAgICAgICBmb3IgdGVzdF9saXN0IGluIHRlc3RfbGlzdHM6CisgICAgICAgICAgICBt
YW5hZ2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCd0ZXN0X2xpc3QnLCB0ZXN0X2xpc3RbMF0s
IHRlc3RfbGlzdFsxXSkKKworICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdl
KCdzdG9wJykKKworICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IEZhbHNlCisgICAgICAg
IGludGVycnVwdGVkID0gRmFsc2UKKyAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMuZHJ5X3J1
bjoKKyAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9jaGVja19pZl9kb25lKCk6CisgICAgICAg
ICAgICAgICAgbWFuYWdlcl9jb25uZWN0aW9uLnJ1bl9tZXNzYWdlX2xvb3AoZGVsYXlfc2Vjcz0x
LjApCisKKyAgICAgICAgIyBGSVhNRTogaW1wbGVtZW50IHN0YXRzLgorICAgICAgICB0aHJlYWRf
dGltaW5ncyA9IFtdCisKKyAgICAgICAgcmV0dXJuIChrZXlib2FyZF9pbnRlcnJ1cHRlZCwgaW50
ZXJydXB0ZWQsIHRocmVhZF90aW1pbmdzLAorICAgICAgICAgICAgICAgIHNlbGYuX2dyb3VwX3N0
YXRzLCBzZWxmLl9hbGxfcmVzdWx0cykKKworICAgIGRlZiBfY2hlY2tfaWZfZG9uZShzZWxmKToK
KyAgICAgICAgIiIiUmV0dXJucyB0cnVlIGlmZiBhbGwgdGhlIHdvcmtlcnMgaGF2ZSBlaXRoZXIg
Y29tcGxldGVkIG9yIHdlZGdlZC4iIiIKKyAgICAgICAgIyBGSVhNRTogaW1wbGVtZW50IHRvIGNo
ZWNrIGZvciB3ZWRnZWQgd29ya2Vycy4KKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbmUKKworICAg
IGRlZiBoYW5kbGVfc3RhcnRlZF90ZXN0KHNlbGYsIHNyYywgdGVzdF9pbmZvLCBoYW5nX3RpbWVv
dXQpOgorICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQKKyAgICAgICAgcGFzcworCisgICAgZGVm
IGhhbmRsZV9kb25lKHNlbGYsIHNyYyk6CisgICAgICAgICMgRklYTUU6IGltcGxlbWVudCBwcm9w
ZXJseSB0byBoYW5kbGUgbXVsdGlwbGUgd29ya2Vycy4KKyAgICAgICAgc2VsZi5fZG9uZSA9IFRy
dWUKKyAgICAgICAgcGFzcworCisgICAgZGVmIGhhbmRsZV9leGNlcHRpb24oc2VsZiwgc3JjLCBl
eGNlcHRpb25faW5mbyk6CisgICAgICAgIHJhaXNlIGV4Y2VwdGlvbl9pbmZvCisKKyAgICBkZWYg
aGFuZGxlX2ZpbmlzaGVkX2xpc3Qoc2VsZiwgc3JjLCBsaXN0X25hbWUsIG51bV90ZXN0cywgZWxh
cHNlZF90aW1lKToKKyAgICAgICAgIyBGSVhNRTogdXBkYXRlIHN0YXRzCisgICAgICAgIHBhc3MK
KworICAgIGRlZiBoYW5kbGVfZmluaXNoZWRfdGVzdChzZWxmLCBzcmMsIHJlc3VsdCwgZWxhcHNl
ZF90aW1lKToKKyAgICAgICAgc2VsZi5fdXBkYXRlX3N1bW1hcnlfd2l0aF9yZXN1bHQoc2VsZi5f
Y3VycmVudF9yZXN1bHRfc3VtbWFyeSwgcmVzdWx0KQorCisgICAgICAgICMgRklYTUU6IHVwZGF0
ZSBzdGF0cy4KKyAgICAgICAgc2VsZi5fYWxsX3Jlc3VsdHMuYXBwZW5kKHJlc3VsdCkKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3dvcmtlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL3dvcmtlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40N2Q0ZmJkYmJlMDhjZTdkZWUxMzc1MDNiNzRm
YjY4MWM3NzhlNGE1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyLnB5CkBAIC0wLDAgKzEsMTA0IEBACisj
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgor
IyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworIiIiSGFuZGxlIG1lc3NhZ2VzIGZyb20gdGhlIFRlc3RSdW5uZXIg
YW5kIGV4ZWN1dGUgYWN0dWFsIHRlc3RzLiIiIgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN5
cworaW1wb3J0IHRpbWUKKworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBzdGFj
a191dGlscworCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBv
cnQgbWFuYWdlcl93b3JrZXJfYnJva2VyCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlv
dXRfcGFja2FnZSBpbXBvcnQgdGVzdF9yZXN1bHRzCisKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9n
Z2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIFdvcmtlcihtYW5hZ2VyX3dvcmtlcl9icm9rZXIuQWJz
dHJhY3RXb3JrZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3b3JrZXJfY29ubmVjdGlvbiwg
d29ya2VyX251bWJlciwgb3B0aW9ucyk6CisgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9u
ID0gd29ya2VyX2Nvbm5lY3Rpb24KKyAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciA9IHdvcmtl
cl9udW1iZXIKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5f
bmFtZSA9ICd3b3JrZXIvJWQnICUgd29ya2VyX251bWJlcgorICAgICAgICBzZWxmLl9kb25lID0g
RmFsc2UKKyAgICAgICAgc2VsZi5fcG9ydCA9IE5vbmUKKworICAgIGRlZiBfZGVmZXJyZWRfaW5p
dChzZWxmLCBwb3J0KToKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKworICAgIGRlZiBpc19k
b25lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZG9uZQorCisgICAgZGVmIG5hbWUoc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCisKKyAgICBkZWYgcnVuKHNlbGYsIHBvcnQp
OgorICAgICAgICBzZWxmLl9kZWZlcnJlZF9pbml0KHBvcnQpCisKKyAgICAgICAgX2xvZy5kZWJ1
ZygiJXMgc3RhcnRpbmciICUgc2VsZi5fbmFtZSkKKworICAgICAgICAjIEZJWE1FOiBuZWVkIHRv
IGFkZCBpbiBlcnJvciBoYW5kbGluZywgYmV0dGVyIGxvZ2dpbmcuCisgICAgICAgIHNlbGYuX3dv
cmtlcl9jb25uZWN0aW9uLnJ1bl9tZXNzYWdlX2xvb3AoKQorICAgICAgICBzZWxmLl93b3JrZXJf
Y29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ2RvbmUnKQorCisgICAgZGVmIGhhbmRsZV90ZXN0X2xp
c3Qoc2VsZiwgc3JjLCBsaXN0X25hbWUsIHRlc3RfbGlzdCk6CisgICAgICAgICMgRklYTUU6IGNo
ZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGdldCB0aGUgaHR0cCBsb2NrLgorCisgICAgICAgIHN0
YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBudW1fdGVzdHMgPSAwCisgICAgICAgIGZv
ciB0ZXN0X2lucHV0IGluIHRlc3RfbGlzdDoKKyAgICAgICAgICAgIHNlbGYuX3J1bl90ZXN0KHRl
c3RfaW5wdXQpCisgICAgICAgICAgICBudW1fdGVzdHMgKz0gMQorICAgICAgICAgICAgc2VsZi5f
d29ya2VyX2Nvbm5lY3Rpb24ueWllbGRfdG9fYnJva2VyKCkKKworICAgICAgICBlbGFwc2VkX3Rp
bWUgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUKKyAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5l
Y3Rpb24ucG9zdF9tZXNzYWdlKCdmaW5pc2hlZF9saXN0JywgbGlzdF9uYW1lLCBudW1fdGVzdHMs
IGVsYXBzZWRfdGltZSkKKworICAgICAgICAjIEZJWE1FOiByZWxlYXNlIHRoZSBsb2NrIGlmIG5l
Y2Vzc2FyeQorCisgICAgZGVmIGhhbmRsZV9zdG9wKHNlbGYsIHNyYyk6CisgICAgICAgIHNlbGYu
X2RvbmUgPSBUcnVlCisKKyAgICBkZWYgX3J1bl90ZXN0KHNlbGYsIHRlc3RfaW5wdXQpOgorCisg
ICAgICAgICMgRklYTUU6IGdldCByZWFsIHRpbWVvdXQgdmFsdWUgZnJvbSBTaW5nbGVUZXN0UnVu
bmVyCisgICAgICAgIHRlc3RfdGltZW91dF9zZWMgPSBpbnQodGVzdF9pbnB1dC50aW1lb3V0KSAv
IDEwMDAKKyAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLl93b3JrZXJf
Y29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ3N0YXJ0ZWRfdGVzdCcsIHRlc3RfaW5wdXQsIHRlc3Rf
dGltZW91dF9zZWMpCisKKyAgICAgICAgIyBGSVhNRTogYWN0dWFsbHkgcnVuIHRoZSB0ZXN0Lgor
ICAgICAgICByZXN1bHQgPSB0ZXN0X3Jlc3VsdHMuVGVzdFJlc3VsdCh0ZXN0X2lucHV0LmZpbGVu
YW1lLCBmYWlsdXJlcz1bXSwKKyAgICAgICAgICAgIHRlc3RfcnVuX3RpbWU9MCwgdG90YWxfdGlt
ZV9mb3JfYWxsX2RpZmZzPTAsIHRpbWVfZm9yX2RpZmZzPXt9KQorCisgICAgICAgIGVsYXBzZWRf
dGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnQKKworICAgICAgICAjIEZJWE1FOiB1cGRhdGUgc3Rh
dHMsIGNoZWNrIGZvciBmYWlsdXJlcy4KKworICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlv
bi5wb3N0X21lc3NhZ2UoJ2ZpbmlzaGVkX3Rlc3QnLCByZXN1bHQsIGVsYXBzZWRfdGltZSkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRf
dGVzdHNfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CmluZGV4IGY0ZTUzNTBlNmY4NTMzYmYzODkzYzQx
NTgyOWUyOWFiZDM2OGU0NTUuLjg5MTc5N2Q1MDVjNDhlMThlYzliNDk3MTY1OTA3MjE2Y2ZjZTkx
Y2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQpAQCAtNDcwLDcgKzQ3MCw3IEBA
IGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRS
YWlzZXMoVmFsdWVFcnJvciwgbG9nZ2luZ19ydW4sIFsnLS13b3JrZXItbW9kZWwnLCAncHJvY2Vz
c2VzJ10pCiAKICAgICBkZWYgdGVzdF93b3JrZXJfbW9kZWxfX3RocmVhZHMoc2VsZik6Ci0gICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0td29ya2VyLW1vZGVsJywgJ3RocmVh
ZHMnXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvZ2dpbmdfcnVu
LCBbJy0td29ya2VyLW1vZGVsJywgJ3RocmVhZHMnXSkKIAogICAgIGRlZiB0ZXN0X3dvcmtlcl9t
b2RlbF9fdW5rbm93bihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJv
ciwgbG9nZ2luZ19ydW4sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81905</attachid>
            <date>2011-02-09 18:01:39 -0800</date>
            <delta_ts>2011-02-10 12:45:19 -0800</delta_ts>
            <desc>revise w/ tony&apos;s feedback, shuffle constructors of worker_connection, worker around</desc>
            <filename>bug-54068-20110209180138.patch</filename>
            <type>text/plain</type>
            <size>18296</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzgxNTkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyNTYxNjE1Y2VjN2Y5NmZjNDI1MThkYTg0NTY5ZWJiZjg3
MDRhNTVmLi41NjExYjM4MWY1OWNiYmI4OGRjZmRjMWFkMzExNGMzN2YwOTU5YjVhIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjcg
QEAKIDIwMTEtMDItMDkgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
ZGRzIHRoZSBidWxrIG9mIHRoZSByZW1haW5pbmcgZnVuY3Rpb25hbGl0eSBmb3IKKyAgICAgICAg
dGhlIE5SV1QgbWVzc2FnZS1wYXNzaW5nIGltcGxlbWVudGF0aW9uLiBUaGUgcGF0Y2ggYWRkcyBh
IG5ldworICAgICAgICBXb3JrZXIgY2xhc3MgdGhhdCB3aWxsIGV2ZW50dWFsbHkgcmVwbGFjZSB0
aGUgVGVzdFNoZWxsVGhyZWFkCisgICAgICAgIGNsYXNzIGluIGR1bXBfcmVuZGVyX3RyZWVfdGhy
ZWFkLnB5LCBhbmQgaW1wbGVtZW50cyBlbm91Z2ggb2YKKyAgICAgICAgVGVzdFJ1bm5lcjIgYW5k
IHRoZSBpbmxpbmUgdmVyc2lvbiBvZiB0aGUgbWFuYWdlcl93b3JrZXJfYnJva2VyCisgICAgICAg
IHRvIGFjdHVhbGx5IGJlIGFibGUgdG8gc2VuZCBhIGZ1bGwgc2V0IG9mIG1lc3NhZ2VzIGJhY2sg
YW5kCisgICAgICAgIGZvcnRoLiBUaGUgV29ya2VyIHN0dWJzIGRvIG5vdCBhY3R1YWxseSBydW4g
dGVzdHMsIGFuZCB0aGVyZSdzCisgICAgICAgIGxvdHMgb2YgZXJyb3IgaGFuZGxpbmcgYW5kIHN0
YXRzIG5lZWRlZCwgYnV0IHRoaXMgaXMgdGhlIGNvcmUKKyAgICAgICAgbG9naWMuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0MDY4CisKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2Vy
X3dvcmtlcl9icm9rZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3Rf
cnVubmVyMi5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS93b3JrZXIucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6CisKKzIwMTEtMDItMDkg
IERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgUmV2aWV3ZWQg
YnkgVG9ueSBDaGFuZy4KIAogICAgICAgICBucnd0IG11bHRpcHJvY2Vzc2luZzogbWlub3IgY2xl
YW51cCBwcmlvciB0byBpbXBsZW1lbnRpbmcgdGhlIG5ldyB3b3JrZXIKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJf
d29ya2VyX2Jyb2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weQppbmRleCA5ZmFlYzZlNjUxNDU2
MTJmZjFlZTlkZDkyZGMzMjlkZjI3NmFjNDE0Li4xNDg0Njk0MTA0N2E4YTUyMWJiMGRkMzVjZWUy
NTE3Y2U3NDRmMjEzIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3Jr
ZXJfYnJva2VyLnB5CkBAIC0yOCwxNiArMjgsMTkgQEAKIAogIiIiTW9kdWxlIGZvciBoYW5kbGlu
ZyBtZXNzYWdlcyBhbmQgY29uY3VycmVuY3kgZm9yIHJ1bi13ZWJraXQtdGVzdHMuCiAKLVRoaXMg
bW9kdWxlIGJ1aWxkcyBvbiB0aGUgZnVuY3Rpb25hbGl0eSBvZiBtZXNzYWdlX2Jyb2tlcjIgdG8g
cHJvdmlkZQotYSBzaW1wbGUgbWVzc2FnZSBicm9rZXIgZm9yIGEgbWFuYWdlciBzZW5kaW5nIG1l
c3NhZ2VzIHRvIChhbmQgZ2V0dGluZwotcmVwbGllcyBmcm9tKSBhIHBvb2wgb2Ygd29ya2Vycy4g
SW4gYWRkaXRpb24gaXQgcHJvdmlkZXMgYSBjaG9pY2Ugb2YKLWNvbmN1cnJlbmN5IG1vZGVscyBm
b3IgY2FsbGVycyB0byBjaG9vc2UgZnJvbSAoc2luZ2xlLXRocmVhZGVkIGlubGluZQotbW9kZWws
IHRocmVhZHMsIG9yIHByb2Nlc3NlcykuCi0KLUZJWE1FOiBBdCB0aGUgbW9tZW50LCB0aGlzIG1v
ZHVsZSBpcyBqdXN0IGEgYnVuY2ggb2Ygc3R1YnMsIGJ1dCBldmVudHVhbGx5Ci1pdCB3aWxsIHBy
b3ZpZGUgdGhyZWUgc2V0cyBvZiBtYW5hZ2VyIGNsYXNzZXMgYW5kIHdvcmtlciBjbGFzc2VzIGZv
cgotdGhlIHRocmVlIGNvbmN1cnJlbmN5IG1vZGVscy4gVGhlIGdldCgpIGZhY3RvcnkgbWV0aG9k
IHNlbGVjdHMgYmV0d2VlbgotdGhlbS4KK1RoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBtZXNzYWdl
IGJyb2tlciB0aGF0IGNvbm5lY3RzIHRoZSBtYW5hZ2VyCisoVGVzdFJ1bm5lcjIpIHRvIHRoZSB3
b3JrZXJzOiBpdCBwcm92aWRlcyBhIG1lc3NhZ2luZyBhYnN0cmFjdGlvbiBhbmQKK21lc3NhZ2Ug
bG9vcHMgKGJ1aWxkaW5nIG9uIHRvcCBvZiBtZXNzYWdlX2Jyb2tlcjIpLCBhbmQgaGFuZGxlcyBz
dGFydGluZword29ya2VycyBieSBsYXVuY2hpbmcgdGhyZWFkcyBhbmQvb3IgcHJvY2Vzc2VzIGRl
cGVuZGluZyBvbiB0aGUKK3JlcXVlc3RlZCBjb25maWd1cmF0aW9uLgorCitUaGVyZSBhcmUgYSBs
b3Qgb2YgY2xhc3NlcyBhbmQgb2JqZWN0cyBpbnZvbHZlZCBpbiBhIGZ1bGx5IGNvbm5lY3RlZCBz
eXN0ZW0uCitUaGV5IGludGVyYWN0IG1vcmUgb3IgbGVzcyBsaWtlOgorCitUZXN0UnVubmVyMiAg
LS0+IF9JbmxpbmVNYW5hZ2VyIC0tLT4gX0lubGluZVdvcmtlciA8LT4gV29ya2VyCisgICAgIF4g
ICAgICAgICAgICAgICAgICAgIFwgICAgICAgICAgICAgICAvICAgICAgICAgICAgICBeCisgICAg
IHwgICAgICAgICAgICAgICAgICAgICB2ICAgICAgICAgICAgIHYgICAgICAgICAgICAgICB8Cisg
ICAgIFwtLS0tLS0tLS0tLS0tLS0tLS0tLSAgTWVzc2FnZUJyb2tlciAgIC0tLS0tLS0tLS0tLS0v
CiAiIiIKIAogaW1wb3J0IGxvZ2dpbmcKQEAgLTQ1LDkgKzQ4LDcgQEAgaW1wb3J0IG9wdHBhcnNl
CiBpbXBvcnQgUXVldWUKIGltcG9ydCB0aHJlYWRpbmcKIAotIwogIyBIYW5kbGUgUHl0aG9uIDwg
Mi42IHdoZXJlIG11bHRpcHJvY2Vzc2luZyBpc24ndCBhdmFpbGFibGUuCi0jCiB0cnk6CiAgICAg
aW1wb3J0IG11bHRpcHJvY2Vzc2luZwogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtODMsNyArODQs
OCBAQCBkZWYgZ2V0KHBvcnQsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKToKICAgICBB
cmdzOgogICAgICAgICBwb3J0IC0gaGFuZGxlIHRvIGxheW91dF90ZXN0cy9wb3J0IG9iamVjdCBm
b3IgcG9ydC1zcGVjaWZpYyBzdHVmZgogICAgICAgICBvcHRpb25zIC0gb3B0cGFyc2UgYXJndW1l
bnQgZm9yIGNvbW1hbmQtbGluZSBvcHRpb25zCi0gICAgICAgIGNsaWVudCAtIG9iamVjdCB0byBk
aXNwYXRjaCByZXBsaWVzIHRvCisgICAgICAgIGNsaWVudCAtIG1lc3NhZ2VfYnJva2VyMi5Ccm9r
ZXJDbGllbnQgaW1wbGVtZW50YXRpb24gdG8gZGlzcGF0Y2gKKyAgICAgICAgICAgIHJlcGxpZXMg
dG8uCiAgICAgICAgIHdvcmtlcl9jbGFzcyAtIHR5cGUgb2Ygd29ya2VycyB0byBjcmVhdGUuIFRo
aXMgY2xhc3MgbXVzdCBpbXBsZW1lbnQKICAgICAgICAgICAgIHRoZSBtZXRob2RzIGluIEFic3Ry
YWN0V29ya2VyLgogICAgIFJldHVybnM6CkBAIC0xMzcsMTIgKzEzOSwxMSBAQCBjbGFzcyBBYnN0
cmFjdFdvcmtlcihtZXNzYWdlX2Jyb2tlcjIuQnJva2VyQ2xpZW50KToKIAogCiBjbGFzcyBfTWFu
YWdlckNvbm5lY3Rpb24obWVzc2FnZV9icm9rZXIyLkJyb2tlckNvbm5lY3Rpb24pOgotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2Ns
YXNzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBvcHRpb25zLCBjbGllbnQsIHdv
cmtlcl9jbGFzcyk6CiAgICAgICAgICIiIkJhc2UgaW5pdGlhbGl6YXRpb24gZm9yIGFsbCBNYW5h
Z2VyIG9iamVjdHMuCiAKICAgICAgICAgQXJnczoKICAgICAgICAgICAgIGJyb2tlcjogaGFuZGxl
IHRvIHRoZSBtZXNzYWdlX2Jyb2tlcjIgb2JqZWN0Ci0gICAgICAgICAgICBwb3J0OiBoYW5kbGUg
dG8gcG9ydC1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5CiAgICAgICAgICAgICBvcHRpb25zOiBjb21t
YW5kIGxpbmUgb3B0aW9ucyBvYmplY3QKICAgICAgICAgICAgIGNsaWVudDogY2FsbGJhY2sgb2Jq
ZWN0ICh0aGUgY2FsbGVyKQogICAgICAgICAgICAgd29ya2VyX2NsYXNzOiBjbGFzcyBvYmplY3Qg
dG8gdXNlIHRvIGNyZWF0ZSB3b3JrZXJzLgpAQCAtMTUyLDE0ICsxNTMsNjMgQEAgY2xhc3MgX01h
bmFnZXJDb25uZWN0aW9uKG1lc3NhZ2VfYnJva2VyMi5Ccm9rZXJDb25uZWN0aW9uKToKICAgICAg
ICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKICAgICAgICAgc2VsZi5fd29ya2VyX2NsYXNzID0g
d29ya2VyX2NsYXNzCiAKKyAgICBkZWYgX21ha2Vfd29ya2VyX2Nvbm5lY3Rpb24oc2VsZiwgd29y
a2VyX2NsYXNzLCB3b3JrZXJfbnVtYmVyLCAqKmt3YXJncyk6CisgICAgICAgIHJhaXNlIE5vdElt
cGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJl
ciwgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZi5fbWFrZV93b3JrZXJfY29ubmVjdGlv
bihzZWxmLl93b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIsICoqa3dhcmdzKQorCiAKIGNsYXNz
IF9JbmxpbmVNYW5hZ2VyKF9NYW5hZ2VyQ29ubmVjdGlvbik6Ci0gICAgcGFzcworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNz
KToKKyAgICAgICAgX01hbmFnZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgb3B0
aW9ucywgY2xpZW50LCB3b3JrZXJfY2xhc3MpCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0Cisg
ICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIgPSBOb25lCisKKyAgICBkZWYgX21ha2Vfd29ya2Vy
X2Nvbm5lY3Rpb24oc2VsZiwgd29ya2VyX2NsYXNzLCB3b3JrZXJfbnVtYmVyLCAqKmt3YXJncyk6
CisgICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIgPSBfSW5saW5lV29ya2VyKHNlbGYuX2Jyb2tl
ciwgc2VsZi5fcG9ydCwgc2VsZi5fY2xpZW50LAorICAgICAgICAgICAgd29ya2VyX2NsYXNzLCB3
b3JrZXJfbnVtYmVyLCBzZWxmLl9vcHRpb25zLCAqKmt3YXJncykKKyAgICAgICAgcmV0dXJuIHNl
bGYuX2lubGluZV93b3JrZXIKKworICAgIGRlZiBydW5fbWVzc2FnZV9sb29wKHNlbGYsIGRlbGF5
X3NlY3M9Tm9uZSk6CisgICAgICAgICMgTm90ZSB0aGF0IGRlbGF5X3NlY3MgaXMgaWdub3JlZCBp
biB0aGlzIGNhc2Ugc2luY2Ugd2UgY2FuJ3QgZWFzaWx5CisgICAgICAgICMgaW1wbGVtZW50IGl0
LgorICAgICAgICBzZWxmLl9pbmxpbmVfd29ya2VyLnJ1bigpCisgICAgICAgIHNlbGYuX2Jyb2tl
ci5ydW5fYWxsX3BlbmRpbmcoTUFOQUdFUl9UT1BJQywgc2VsZi5fY2xpZW50KQogCiAKIGNsYXNz
IF9UaHJlYWRlZE1hbmFnZXIoX01hbmFnZXJDb25uZWN0aW9uKToKLSAgICBwYXNzCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIGJyb2tlciwgcG9ydCwgb3B0aW9ucywgY2xpZW50LCB3b3JrZXJfY2xh
c3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKIAogY2xhc3MgX011bHRp
UHJvY2Vzc01hbmFnZXIoX01hbmFnZXJDb25uZWN0aW9uKToKLSAgICBwYXNzCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGJyb2tlciwgcG9ydCwgb3B0aW9ucywgY2xpZW50LCB3b3JrZXJfY2xhc3Mp
OgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgX1dvcmtlckNv
bm5lY3Rpb24obWVzc2FnZV9icm9rZXIyLkJyb2tlckNvbm5lY3Rpb24pOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBicm9rZXIsIHdvcmtlcl9jbGFzcywgd29ya2VyX251bWJlciwgb3B0aW9ucywg
Kiprd2FyZ3MpOgorICAgICAgICBzZWxmLl9jbGllbnQgPSB3b3JrZXJfY2xhc3Moc2VsZiwgd29y
a2VyX251bWJlciwgb3B0aW9ucywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYubmFtZSA9IHNlbGYu
X2NsaWVudC5uYW1lKCkKKyAgICAgICAgbWVzc2FnZV9icm9rZXIyLkJyb2tlckNvbm5lY3Rpb24u
X19pbml0X18oc2VsZiwgYnJva2VyLCBzZWxmLl9jbGllbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFOWV9XT1JLRVJfVE9QSUMsIE1BTkFHRVJf
VE9QSUMpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRl
ZEVycm9yCisKKyAgICBkZWYgeWllbGRfdG9fYnJva2VyKHNlbGYpOgorICAgICAgICBwYXNzCisK
KworY2xhc3MgX0lubGluZVdvcmtlcihfV29ya2VyQ29ubmVjdGlvbik6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGJyb2tlciwgcG9ydCwgbWFuYWdlcl9jbGllbnQsIHdvcmtlcl9jbGFzcywgd29y
a2VyX251bWJlciwgb3B0aW9ucywgKiprd2FyZ3MpOgorICAgICAgICBfV29ya2VyQ29ubmVjdGlv
bi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIHdvcmtlcl9jbGFzcywgd29ya2VyX251bWJlciwgb3B0
aW9ucywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYu
X21hbmFnZXJfY2xpZW50ID0gbWFuYWdlcl9jbGllbnQKKworICAgIGRlZiBydW4oc2VsZik6Cisg
ICAgICAgIHNlbGYuX2NsaWVudC5ydW4oc2VsZi5fcG9ydCkKKworICAgIGRlZiB5aWVsZF90b19i
cm9rZXIoc2VsZik6CisgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fYWxsX3BlbmRpbmcoTUFOQUdF
Ul9UT1BJQywgc2VsZi5fbWFuYWdlcl9jbGllbnQpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9r
ZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXJfdW5pdHRlc3QucHkKaW5kZXggMGEzMGJk
ZDQ1ZmI0MWY5OWFlOTQzYWI0Y2VjMDczY2M4OTIwMjVmYS4uMWE0MzJkNmM5NDE1NjZmYTFlOGJl
MDA2MzM1ZDQxODI0Yjk1M2JhYyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weQpAQCAtNjUsMTEgKzY1LDExIEBA
IGNsYXNzIEZ1bmN0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFz
c2VydFRydWUobWFrZV9icm9rZXIoc2VsZiwgJ2lubGluZScpIGlzIG5vdCBOb25lKQogCiAgICAg
ZGVmIHRlc3RfZ2V0X190aHJlYWRzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUobWFr
ZV9icm9rZXIoc2VsZiwgJ3RocmVhZHMnKSBpcyBub3QgTm9uZSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbWFrZV9icm9rZXIsIHNlbGYsICd0aHJlYWRz
JykKIAogICAgIGRlZiB0ZXN0X2dldF9fcHJvY2Vzc2VzKHNlbGYpOgogICAgICAgICBpZiBtdWx0
aXByb2Nlc3Npbmc6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWFrZV9icm9rZXIoc2Vs
ZiwgJ3Byb2Nlc3NlcycpIGlzIG5vdCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlz
ZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbWFrZV9icm9rZXIsIHNlbGYsICdwcm9jZXNzZXMnKQog
ICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwg
bWFrZV9icm9rZXIsIHNlbGYsICdwcm9jZXNzZXMnKQogCkBAIC04Miw2ICs4Miw4IEBAIGNsYXNz
IEZ1bmN0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBvcHRpb25zLCBhcmdz
ID0gcGFyc2VyLnBhcnNlX2FyZ3MoW10pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcHRpb25z
KQogCisjIEZJWE1FOiBBZGQgaW4gdW5pdCB0ZXN0cyBmb3IgdGhlIG1hbmFnZXJzLCBjb3ZlcmFn
ZSB0ZXN0cyBmb3IgdGhlIGludGVyZmFjZXMuCisKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9f
JzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVyMi5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVyMi5w
eQppbmRleCBlYjc4NzUyNTVjM2MzYzEwY2M2ODFlNWJkMWZlODAxZTM4MThjYmY3Li5jODUzZjcy
OWJmNTkxNzI0ZGRjZTE4OGFjMWI3YTRjN2FjY2I5MDQ5IDEwMDY0NAotLS0gYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3J1bm5lcjIucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
dGVzdF9ydW5uZXIyLnB5CkBAIC0yOSwyNSArMjksMTAxIEBACiAKICIiIgogVGhlIFRlc3RSdW5u
ZXIyIHBhY2thZ2UgaXMgYW4gYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUZXN0UnVu
bmVyCi1jbGFzcy4gRm9yIG5vdyBpdCBpcyBqdXN0IGEgc3R1YiwgYnV0IGV2ZW50dWFsbHkgaXQg
d2lsbCB1c2UgdGhlCi1tZXNzYWdlIGJyb2tlciBhYnN0cmFjdGlvbiB0byBwYXNzIG1lc3NhZ2Vz
IHRvIHdvcmtlcnMgdG8gcnVuIHNldHMgb2YKLXRlc3RzIGFuZCB0aGVuIHByb2Nlc3MgdGhlIGNv
bXBsZXRpb24gbWVzc2FnZXMgYWNjb3JkaW5nbHkuCitjbGFzcyB0aGF0IHVzZXMgdGhlIG1hbmFn
ZXJfd29ya2VyX2Jyb2tlciBtb2R1bGUgdG8gc2VuZCBzZXRzIG9mIHRlc3RzIHRvCit3b3JrZXJz
IGFuZCByZWNlaXZlIHRoZWlyIGNvbXBsZXRpb24gbWVzc2FnZXMgYWNjb3JkaW5nbHkuCiAiIiIK
IAogaW1wb3J0IGxvZ2dpbmcKIAotaW1wb3J0IHRlc3RfcnVubmVyCisKK2Zyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBtYW5hZ2VyX3dvcmtlcl9icm9rZXIK
K2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB3b3JrZXIK
K2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X3J1
bm5lcgogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKIAogY2xhc3MgVGVz
dFJ1bm5lcjIodGVzdF9ydW5uZXIuVGVzdFJ1bm5lcik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpOgotCi0gICAgICAgICMgRklYTUU6IFRoaXMnbGwgZ2V0
IHJlcGxhY2VkIHdpdGggYSByZWFsIGltcGxlbWVudGF0aW9uIHNvb24gZW5vdWdoLgotICAgICAg
ICBpZiBvcHRpb25zLndvcmtlcl9tb2RlbCBpbiAoJ2lubGluZScsICd0aHJlYWRzJyk6Ci0gICAg
ICAgICAgICBvcHRpb25zLndvcmtlcl9tb2RlbCA9ICdvbGQtJyArIG9wdGlvbnMud29ya2VyX21v
ZGVsCi0gICAgICAgIGlmIG9wdGlvbnMud29ya2VyX21vZGVsID09ICdwcm9jZXNzZXMnOgotICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiLS13b3JrZXItbW9kZWw9cHJvY2Vzc2VzIG5vdCBz
dXBwb3J0ZWQgeWV0IikKKyAgICAgICAgaWYgb3B0aW9ucy53b3JrZXJfbW9kZWwgaW4gKCd0aHJl
YWRzJywgJ3Byb2Nlc3NlcycpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignLS13b3Jr
ZXItbW9kZWw9JXMgbm90IHN1cHBvcnRlZCB5ZXQnICUgb3B0aW9ucy53b3JrZXJfbW9kZWwpCiAK
ICAgICAgICAgdGVzdF9ydW5uZXIuVGVzdFJ1bm5lci5fX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRp
b25zLCBwcmludGVyKQorICAgICAgICBzZWxmLl9hbGxfcmVzdWx0cyA9IFtdCisgICAgICAgIHNl
bGYuX2dyb3VwX3N0YXRzID0ge30KKyAgICAgICAgc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFy
eSA9IE5vbmUKKyAgICAgICAgc2VsZi5fZG9uZSA9IEZhbHNlCisKKyAgICBkZWYgaXNfZG9uZShz
ZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbmUKKworICAgIGRlZiBuYW1lKHNlbGYpOgor
ICAgICAgICByZXR1cm4gJ1Rlc3RSdW5uZXIyJworCisgICAgZGVmIF9ydW5fdGVzdHMoc2VsZiwg
ZmlsZV9saXN0LCByZXN1bHRfc3VtbWFyeSk6CisgICAgICAgICIiIlJ1bnMgdGhlIHRlc3RzIGlu
IHRoZSBmaWxlX2xpc3QuCisKKyAgICAgICAgUmV0dXJuOiBBIHR1cGxlIChrZXlib2FyZF9pbnRl
cnJ1cHRlZCwgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywKKyAgICAgICAgICAgIGluZGl2
aWR1YWxfdGVzdF90aW1pbmdzKQorICAgICAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgaXMg
d2hldGhlciBzb21lb25lIHR5cGVkIEN0cmxeQworICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3Mg
aXMgYSBsaXN0IG9mIGRpY3RzIHdpdGggdGhlIHRvdGFsIHJ1bnRpbWUKKyAgICAgICAgICAgICAg
b2YgZWFjaCB0aHJlYWQgd2l0aCAnbmFtZScsICdudW1fdGVzdHMnLCAndG90YWxfdGltZScgcHJv
cGVydGllcworICAgICAgICAgICAgdGVzdF90aW1pbmdzIGlzIGEgbGlzdCBvZiB0aW1pbmdzIGZv
ciBlYWNoIHNoYXJkZWQgc3ViZGlyZWN0b3J5CisgICAgICAgICAgICAgIG9mIHRoZSBmb3JtIFt0
aW1lLCBkaXJlY3RvcnlfbmFtZSwgbnVtX3Rlc3RzXQorICAgICAgICAgICAgaW5kaXZpZHVhbF90
ZXN0X3RpbWluZ3MgaXMgYSBsaXN0IG9mIHJ1biB0aW1lcyBmb3IgZWFjaCB0ZXN0CisgICAgICAg
ICAgICAgIGluIHRoZSBmb3JtIHtmaWxlbmFtZTpmaWxlbmFtZSwgdGVzdF9ydW5fdGltZTp0ZXN0
X3J1bl90aW1lfQorICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IHRv
IHBvcHVsYXRlIHdpdGggdGhlIHJlc3VsdHMKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2N1
cnJlbnRfcmVzdWx0X3N1bW1hcnkgPSByZXN1bHRfc3VtbWFyeQorCisgICAgICAgICMgRklYTUU6
IHNoYXJkIHByb3Blcmx5LgorICAgICAgICB0ZXN0X2xpc3RzID0gc2VsZi5fc2hhcmRfdGVzdHMo
ZmlsZV9saXN0LCBGYWxzZSkKKworICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24gPSBtYW5hZ2Vy
X3dvcmtlcl9icm9rZXIuZ2V0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsIHNlbGYsIHdvcmtl
ci5Xb3JrZXIpCisKKyAgICAgICAgIyBGSVhNRTogc3RhcnQgYWxsIG9mIHRoZSB3b3JrZXJzLgor
ICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24uc3RhcnRfd29ya2VyKDApCisKKyAgICAgICAgZm9y
IHRlc3RfbGlzdCBpbiB0ZXN0X2xpc3RzOgorICAgICAgICAgICAgbWFuYWdlcl9jb25uZWN0aW9u
LnBvc3RfbWVzc2FnZSgndGVzdF9saXN0JywgdGVzdF9saXN0WzBdLCB0ZXN0X2xpc3RbMV0pCisK
KyAgICAgICAgbWFuYWdlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnc3RvcCcpCisKKyAgICAg
ICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBGYWxzZQorICAgICAgICBpbnRlcnJ1cHRlZCA9IEZh
bHNlCisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLmRyeV9ydW46CisgICAgICAgICAgICB3
aGlsZSBub3Qgc2VsZi5fY2hlY2tfaWZfZG9uZSgpOgorICAgICAgICAgICAgICAgIG1hbmFnZXJf
Y29ubmVjdGlvbi5ydW5fbWVzc2FnZV9sb29wKGRlbGF5X3NlY3M9MS4wKQorCisgICAgICAgICMg
RklYTUU6IGltcGxlbWVudCBzdGF0cy4KKyAgICAgICAgdGhyZWFkX3RpbWluZ3MgPSBbXQorCisg
ICAgICAgIHJldHVybiAoa2V5Ym9hcmRfaW50ZXJydXB0ZWQsIGludGVycnVwdGVkLCB0aHJlYWRf
dGltaW5ncywKKyAgICAgICAgICAgICAgICBzZWxmLl9ncm91cF9zdGF0cywgc2VsZi5fYWxsX3Jl
c3VsdHMpCisKKyAgICBkZWYgX2NoZWNrX2lmX2RvbmUoc2VsZik6CisgICAgICAgICIiIlJldHVy
bnMgdHJ1ZSBpZmYgYWxsIHRoZSB3b3JrZXJzIGhhdmUgZWl0aGVyIGNvbXBsZXRlZCBvciB3ZWRn
ZWQuIiIiCisgICAgICAgICMgRklYTUU6IGltcGxlbWVudCB0byBjaGVjayBmb3Igd2VkZ2VkIHdv
cmtlcnMuCisgICAgICAgIHJldHVybiBzZWxmLl9kb25lCisKKyAgICBkZWYgaGFuZGxlX3N0YXJ0
ZWRfdGVzdChzZWxmLCBzcmMsIHRlc3RfaW5mbywgaGFuZ190aW1lb3V0KToKKyAgICAgICAgIyBG
SVhNRTogaW1wbGVtZW50CisgICAgICAgIHBhc3MKKworICAgIGRlZiBoYW5kbGVfZG9uZShzZWxm
LCBzcmMpOgorICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQgcHJvcGVybHkgdG8gaGFuZGxlIG11
bHRpcGxlIHdvcmtlcnMuCisgICAgICAgIHNlbGYuX2RvbmUgPSBUcnVlCisgICAgICAgIHBhc3MK
KworICAgIGRlZiBoYW5kbGVfZXhjZXB0aW9uKHNlbGYsIHNyYywgZXhjZXB0aW9uX2luZm8pOgor
ICAgICAgICByYWlzZSBleGNlcHRpb25faW5mbworCisgICAgZGVmIGhhbmRsZV9maW5pc2hlZF9s
aXN0KHNlbGYsIHNyYywgbGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSk6CisgICAg
ICAgICMgRklYTUU6IHVwZGF0ZSBzdGF0cworICAgICAgICBwYXNzCisKKyAgICBkZWYgaGFuZGxl
X2ZpbmlzaGVkX3Rlc3Qoc2VsZiwgc3JjLCByZXN1bHQsIGVsYXBzZWRfdGltZSk6CisgICAgICAg
IHNlbGYuX3VwZGF0ZV9zdW1tYXJ5X3dpdGhfcmVzdWx0KHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1
bW1hcnksIHJlc3VsdCkKKworICAgICAgICAjIEZJWE1FOiB1cGRhdGUgc3RhdHMuCisgICAgICAg
IHNlbGYuX2FsbF9yZXN1bHRzLmFwcGVuZChyZXN1bHQpCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93b3JrZXIucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93b3JrZXIucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNDdkNGZiZGJiZTA4Y2U3ZGVlMTM3NTAzYjc0ZmI2ODFjNzc4ZTRhNQotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL3dvcmtlci5weQpAQCAtMCwwICsxLDEwNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KyIiIkhhbmRsZSBtZXNzYWdlcyBmcm9tIHRoZSBUZXN0UnVubmVyIGFuZCBleGVjdXRlIGFjdHVh
bCB0ZXN0cy4iIiIKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCisK
K2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgc3RhY2tfdXRpbHMKKworZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1hbmFnZXJfd29ya2Vy
X2Jyb2tlcgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0
IHRlc3RfcmVzdWx0cworCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKwor
CitjbGFzcyBXb3JrZXIobWFuYWdlcl93b3JrZXJfYnJva2VyLkFic3RyYWN0V29ya2VyKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgd29ya2VyX2Nvbm5lY3Rpb24sIHdvcmtlcl9udW1iZXIsIG9w
dGlvbnMpOgorICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbiA9IHdvcmtlcl9jb25uZWN0
aW9uCisgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIgPSB3b3JrZXJfbnVtYmVyCisgICAgICAg
IHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX25hbWUgPSAnd29ya2VyLyVk
JyAlIHdvcmtlcl9udW1iZXIKKyAgICAgICAgc2VsZi5fZG9uZSA9IEZhbHNlCisgICAgICAgIHNl
bGYuX3BvcnQgPSBOb25lCisKKyAgICBkZWYgX2RlZmVycmVkX2luaXQoc2VsZiwgcG9ydCk6Cisg
ICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisKKyAgICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2RvbmUKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi5fbmFtZQorCisgICAgZGVmIHJ1bihzZWxmLCBwb3J0KToKKyAgICAgICAgc2VsZi5f
ZGVmZXJyZWRfaW5pdChwb3J0KQorCisgICAgICAgIF9sb2cuZGVidWcoIiVzIHN0YXJ0aW5nIiAl
IHNlbGYuX25hbWUpCisKKyAgICAgICAgIyBGSVhNRTogbmVlZCB0byBhZGQgaW4gZXJyb3IgaGFu
ZGxpbmcsIGJldHRlciBsb2dnaW5nLgorICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5y
dW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9zdF9t
ZXNzYWdlKCdkb25lJykKKworICAgIGRlZiBoYW5kbGVfdGVzdF9saXN0KHNlbGYsIHNyYywgbGlz
dF9uYW1lLCB0ZXN0X2xpc3QpOgorICAgICAgICAjIEZJWE1FOiBjaGVjayB0byBzZWUgaWYgd2Ug
bmVlZCB0byBnZXQgdGhlIGh0dHAgbG9jay4KKworICAgICAgICBzdGFydF90aW1lID0gdGltZS50
aW1lKCkKKyAgICAgICAgbnVtX3Rlc3RzID0gMAorICAgICAgICBmb3IgdGVzdF9pbnB1dCBpbiB0
ZXN0X2xpc3Q6CisgICAgICAgICAgICBzZWxmLl9ydW5fdGVzdCh0ZXN0X2lucHV0KQorICAgICAg
ICAgICAgbnVtX3Rlc3RzICs9IDEKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9u
LnlpZWxkX3RvX2Jyb2tlcigpCisKKyAgICAgICAgZWxhcHNlZF90aW1lID0gdGltZS50aW1lKCkg
LSBzdGFydF90aW1lCisgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2Fn
ZSgnZmluaXNoZWRfbGlzdCcsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpCisK
KyAgICAgICAgIyBGSVhNRTogcmVsZWFzZSB0aGUgbG9jayBpZiBuZWNlc3NhcnkKKworICAgIGRl
ZiBoYW5kbGVfc3RvcChzZWxmLCBzcmMpOgorICAgICAgICBzZWxmLl9kb25lID0gVHJ1ZQorCisg
ICAgZGVmIF9ydW5fdGVzdChzZWxmLCB0ZXN0X2lucHV0KToKKworICAgICAgICAjIEZJWE1FOiBn
ZXQgcmVhbCB0aW1lb3V0IHZhbHVlIGZyb20gU2luZ2xlVGVzdFJ1bm5lcgorICAgICAgICB0ZXN0
X3RpbWVvdXRfc2VjID0gaW50KHRlc3RfaW5wdXQudGltZW91dCkgLyAxMDAwCisgICAgICAgIHN0
YXJ0ID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9zdF9t
ZXNzYWdlKCdzdGFydGVkX3Rlc3QnLCB0ZXN0X2lucHV0LCB0ZXN0X3RpbWVvdXRfc2VjKQorCisg
ICAgICAgICMgRklYTUU6IGFjdHVhbGx5IHJ1biB0aGUgdGVzdC4KKyAgICAgICAgcmVzdWx0ID0g
dGVzdF9yZXN1bHRzLlRlc3RSZXN1bHQodGVzdF9pbnB1dC5maWxlbmFtZSwgZmFpbHVyZXM9W10s
CisgICAgICAgICAgICB0ZXN0X3J1bl90aW1lPTAsIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcz0w
LCB0aW1lX2Zvcl9kaWZmcz17fSkKKworICAgICAgICBlbGFwc2VkX3RpbWUgPSB0aW1lLnRpbWUo
KSAtIHN0YXJ0CisKKyAgICAgICAgIyBGSVhNRTogdXBkYXRlIHN0YXRzLCBjaGVjayBmb3IgZmFp
bHVyZXMuCisKKyAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdm
aW5pc2hlZF90ZXN0JywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191
bml0dGVzdC5weQppbmRleCBmNGU1MzUwZTZmODUzM2JmMzg5M2M0MTU4MjllMjlhYmQzNjhlNDU1
Li44OTE3OTdkNTA1YzQ4ZTE4ZWM5YjQ5NzE2NTkwNzIxNmNmY2U5MWNkIDEwMDY0NAotLS0gYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0
ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJr
aXRfdGVzdHNfdW5pdHRlc3QucHkKQEAgLTQ3MCw3ICs0NzAsNyBAQCBjbGFzcyBNYWluVGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3Is
IGxvZ2dpbmdfcnVuLCBbJy0td29ya2VyLW1vZGVsJywgJ3Byb2Nlc3NlcyddKQogCiAgICAgZGVm
IHRlc3Rfd29ya2VyX21vZGVsX190aHJlYWRzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRy
dWUocGFzc2luZ19ydW4oWyctLXdvcmtlci1tb2RlbCcsICd0aHJlYWRzJ10pKQorICAgICAgICBz
ZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb2dnaW5nX3J1biwgWyctLXdvcmtlci1tb2Rl
bCcsICd0aHJlYWRzJ10pCiAKICAgICBkZWYgdGVzdF93b3JrZXJfbW9kZWxfX3Vua25vd24oc2Vs
Zik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvZ2dpbmdfcnVuLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81906</attachid>
            <date>2011-02-09 18:04:33 -0800</date>
            <delta_ts>2011-02-10 12:45:21 -0800</delta_ts>
            <desc>incremental diff of the prior two attachments</desc>
            <filename>diff_of_81892_to_81905.patch</filename>
            <type>text/plain</type>
            <size>5114</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weQppbmRl
eCAwYzA0NzQ3Li4xNDg0Njk0IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdl
cl93b3JrZXJfYnJva2VyLnB5CkBAIC0zOCw4ICszOCw3IEBAIFRoZXJlIGFyZSBhIGxvdCBvZiBj
bGFzc2VzIGFuZCBvYmplY3RzIGludm9sdmVkIGluIGEgZnVsbHkgY29ubmVjdGVkIHN5c3RlbS4K
IFRoZXkgaW50ZXJhY3QgbW9yZSBvciBsZXNzIGxpa2U6CiAKIFRlc3RSdW5uZXIyICAtLT4gX0lu
bGluZU1hbmFnZXIgLS0tPiBfSW5saW5lV29ya2VyIDwtPiBXb3JrZXIKLSAgICAgXiAgICAgICAg
ICAgICAgICAgICBcICAgICAgICAgICAgICAgICAvICAgICAgICAgICAgIF4KLSAgICAgfCAgICAg
ICAgICAgICAgICAgICAgXCAgICAgICAgICAgICAgIC8gICAgICAgICAgICAgIHwKKyAgICAgXiAg
ICAgICAgICAgICAgICAgICAgXCAgICAgICAgICAgICAgIC8gICAgICAgICAgICAgIF4KICAgICAg
fCAgICAgICAgICAgICAgICAgICAgIHYgICAgICAgICAgICAgdiAgICAgICAgICAgICAgIHwKICAg
ICAgXC0tLS0tLS0tLS0tLS0tLS0tLS0tICBNZXNzYWdlQnJva2VyICAgLS0tLS0tLS0tLS0tLS8K
ICIiIgpAQCAtODUsOCArODQsOCBAQCBkZWYgZ2V0KHBvcnQsIG9wdGlvbnMsIGNsaWVudCwgd29y
a2VyX2NsYXNzKToKICAgICBBcmdzOgogICAgICAgICBwb3J0IC0gaGFuZGxlIHRvIGxheW91dF90
ZXN0cy9wb3J0IG9iamVjdCBmb3IgcG9ydC1zcGVjaWZpYyBzdHVmZgogICAgICAgICBvcHRpb25z
IC0gb3B0cGFyc2UgYXJndW1lbnQgZm9yIGNvbW1hbmQtbGluZSBvcHRpb25zCi0gICAgICAgIGNs
aWVudCAtIG9iamVjdCB0byBkaXNwYXRjaCByZXBsaWVzIHRvLiBUaGlzIG9iamVjdCBtdXN0IGlt
cGxlbWVudAotICAgICAgICAgICAgdGhlIG1ldGhvZHMgaW4gbWVzc2FnZV9icm9rZXIyLkJyb2tl
ckNsaWVudC4KKyAgICAgICAgY2xpZW50IC0gbWVzc2FnZV9icm9rZXIyLkJyb2tlckNsaWVudCBp
bXBsZW1lbnRhdGlvbiB0byBkaXNwYXRjaAorICAgICAgICAgICAgcmVwbGllcyB0by4KICAgICAg
ICAgd29ya2VyX2NsYXNzIC0gdHlwZSBvZiB3b3JrZXJzIHRvIGNyZWF0ZS4gVGhpcyBjbGFzcyBt
dXN0IGltcGxlbWVudAogICAgICAgICAgICAgdGhlIG1ldGhvZHMgaW4gQWJzdHJhY3RXb3JrZXIu
CiAgICAgUmV0dXJuczoKQEAgLTE1NCwxOCArMTUzLDExIEBAIGNsYXNzIF9NYW5hZ2VyQ29ubmVj
dGlvbihtZXNzYWdlX2Jyb2tlcjIuQnJva2VyQ29ubmVjdGlvbik6CiAgICAgICAgIHNlbGYuX29w
dGlvbnMgPSBvcHRpb25zCiAgICAgICAgIHNlbGYuX3dvcmtlcl9jbGFzcyA9IHdvcmtlcl9jbGFz
cwogCi0gICAgZGVmIF9tYWtlX3dvcmtlcl9jb25uZWN0aW9uKHNlbGYpOgorICAgIGRlZiBfbWFr
ZV93b3JrZXJfY29ubmVjdGlvbihzZWxmLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIsICoq
a3dhcmdzKToKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCi0gICAgZGVmIF9t
YWtlX3dvcmtlcihzZWxmLCB3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX251bWJlciwgKiprd2Fy
Z3MpOgotICAgICAgICByZXR1cm4gc2VsZi5fd29ya2VyX2NsYXNzKHdvcmtlcl9jb25uZWN0aW9u
LCB3b3JrZXJfbnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X29wdGlvbnMsICoqa3dhcmdzKQotCiAgICAgZGVmIHN0YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJf
bnVtYmVyLCAqKmt3YXJncyk6Ci0gICAgICAgIHdvcmtlcl9jb25uZWN0aW9uID0gc2VsZi5fbWFr
ZV93b3JrZXJfY29ubmVjdGlvbigpCi0gICAgICAgIHdvcmtlciA9IHNlbGYuX21ha2Vfd29ya2Vy
KHdvcmtlcl9jb25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyLCAqKmt3YXJncykKLSAgICAgICAgd29y
a2VyX2Nvbm5lY3Rpb24uc2V0X2NsaWVudCh3b3JrZXIpCi0gICAgICAgIHJldHVybiB3b3JrZXJf
Y29ubmVjdGlvbgorICAgICAgICByZXR1cm4gc2VsZi5fbWFrZV93b3JrZXJfY29ubmVjdGlvbihz
ZWxmLl93b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIsICoqa3dhcmdzKQogCiAKIGNsYXNzIF9J
bmxpbmVNYW5hZ2VyKF9NYW5hZ2VyQ29ubmVjdGlvbik6CkBAIC0xNzQsOCArMTY2LDkgQEAgY2xh
c3MgX0lubGluZU1hbmFnZXIoX01hbmFnZXJDb25uZWN0aW9uKToKICAgICAgICAgc2VsZi5fcG9y
dCA9IHBvcnQKICAgICAgICAgc2VsZi5faW5saW5lX3dvcmtlciA9IE5vbmUKIAotICAgIGRlZiBf
bWFrZV93b3JrZXJfY29ubmVjdGlvbihzZWxmKToKLSAgICAgICAgc2VsZi5faW5saW5lX3dvcmtl
ciA9IF9JbmxpbmVXb3JrZXIoc2VsZi5fYnJva2VyLCBzZWxmLl9wb3J0LCBzZWxmLl9jbGllbnQp
CisgICAgZGVmIF9tYWtlX3dvcmtlcl9jb25uZWN0aW9uKHNlbGYsIHdvcmtlcl9jbGFzcywgd29y
a2VyX251bWJlciwgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLl9pbmxpbmVfd29ya2VyID0gX0lu
bGluZVdvcmtlcihzZWxmLl9icm9rZXIsIHNlbGYuX3BvcnQsIHNlbGYuX2NsaWVudCwKKyAgICAg
ICAgICAgIHdvcmtlcl9jbGFzcywgd29ya2VyX251bWJlciwgc2VsZi5fb3B0aW9ucywgKiprd2Fy
Z3MpCiAgICAgICAgIHJldHVybiBzZWxmLl9pbmxpbmVfd29ya2VyCiAKICAgICBkZWYgcnVuX21l
c3NhZ2VfbG9vcChzZWxmLCBkZWxheV9zZWNzPU5vbmUpOgpAQCAtMTg1LDE3ICsxNzgsMjMgQEAg
Y2xhc3MgX0lubGluZU1hbmFnZXIoX01hbmFnZXJDb25uZWN0aW9uKToKICAgICAgICAgc2VsZi5f
YnJva2VyLnJ1bl9hbGxfcGVuZGluZyhNQU5BR0VSX1RPUElDLCBzZWxmLl9jbGllbnQpCiAKIAor
Y2xhc3MgX1RocmVhZGVkTWFuYWdlcihfTWFuYWdlckNvbm5lY3Rpb24pOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBicm9rZXIsIHBvcnQsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKToK
KyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIF9NdWx0aVByb2Nl
c3NNYW5hZ2VyKF9NYW5hZ2VyQ29ubmVjdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJy
b2tlciwgcG9ydCwgb3B0aW9ucywgY2xpZW50LCB3b3JrZXJfY2xhc3MpOgorICAgICAgICByYWlz
ZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKwogY2xhc3MgX1dvcmtlckNvbm5lY3Rpb24obWVzc2Fn
ZV9icm9rZXIyLkJyb2tlckNvbm5lY3Rpb24pOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9r
ZXIpOgotICAgICAgICAjIFRoZSBjbGllbnQgZ2V0cyBmaWxsZWQgaW4gYWZ0ZXIgdGhpcyBvYmpl
Y3QgaXMgY29uc3RydWN0ZWQsIHVzaW5nIHNldF9jbGllbnQoKS4KLSAgICAgICAgc2VsZi5fY2xp
ZW50ID0gTm9uZQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHdvcmtlcl9jbGFzcywg
d29ya2VyX251bWJlciwgb3B0aW9ucywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLl9jbGllbnQg
PSB3b3JrZXJfY2xhc3Moc2VsZiwgd29ya2VyX251bWJlciwgb3B0aW9ucywgKiprd2FyZ3MpCisg
ICAgICAgIHNlbGYubmFtZSA9IHNlbGYuX2NsaWVudC5uYW1lKCkKICAgICAgICAgbWVzc2FnZV9i
cm9rZXIyLkJyb2tlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJva2VyLCBzZWxmLl9jbGll
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFO
WV9XT1JLRVJfVE9QSUMsIE1BTkFHRVJfVE9QSUMpCiAKLSAgICBkZWYgc2V0X2NsaWVudChzZWxm
LCBjbGllbnQpOgotICAgICAgICBzZWxmLl9jbGllbnQgPSBjbGllbnQKLSAgICAgICAgc2VsZi5u
YW1lID0gY2xpZW50Lm5hbWUoKQotCiAgICAgZGVmIHJ1bihzZWxmKToKICAgICAgICAgcmFpc2Ug
Tm90SW1wbGVtZW50ZWRFcnJvcgogCkBAIC0yMDQsOCArMjAzLDggQEAgY2xhc3MgX1dvcmtlckNv
bm5lY3Rpb24obWVzc2FnZV9icm9rZXIyLkJyb2tlckNvbm5lY3Rpb24pOgogCiAKIGNsYXNzIF9J
bmxpbmVXb3JrZXIoX1dvcmtlckNvbm5lY3Rpb24pOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBi
cm9rZXIsIHBvcnQsIG1hbmFnZXJfY2xpZW50KToKLSAgICAgICAgX1dvcmtlckNvbm5lY3Rpb24u
X19pbml0X18oc2VsZiwgYnJva2VyKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBv
cnQsIG1hbmFnZXJfY2xpZW50LCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIsIG9wdGlvbnMs
ICoqa3dhcmdzKToKKyAgICAgICAgX1dvcmtlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgYnJv
a2VyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIsIG9wdGlvbnMsICoqa3dhcmdzKQogICAg
ICAgICBzZWxmLl9wb3J0ID0gcG9ydAogICAgICAgICBzZWxmLl9tYW5hZ2VyX2NsaWVudCA9IG1h
bmFnZXJfY2xpZW50CiAKQEAgLTIxNCwxMyArMjEzLDMgQEAgY2xhc3MgX0lubGluZVdvcmtlcihf
V29ya2VyQ29ubmVjdGlvbik6CiAKICAgICBkZWYgeWllbGRfdG9fYnJva2VyKHNlbGYpOgogICAg
ICAgICBzZWxmLl9icm9rZXIucnVuX2FsbF9wZW5kaW5nKE1BTkFHRVJfVE9QSUMsIHNlbGYuX21h
bmFnZXJfY2xpZW50KQotCi0KLWNsYXNzIF9UaHJlYWRlZE1hbmFnZXIoX01hbmFnZXJDb25uZWN0
aW9uKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0LCBvcHRpb25zLCBjbGll
bnQsIHdvcmtlcl9jbGFzcyk6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQot
Ci1jbGFzcyBfTXVsdGlQcm9jZXNzTWFuYWdlcihfTWFuYWdlckNvbm5lY3Rpb24pOgotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2Ns
YXNzKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82029</attachid>
            <date>2011-02-10 12:45:25 -0800</date>
            <delta_ts>2011-02-10 13:34:08 -0800</delta_ts>
            <desc>update w/ more review feedback from tony - make start_worker() virtual</desc>
            <filename>bug-54068-20110210124524.patch</filename>
            <type>text/plain</type>
            <size>18654</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzgxNTkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyNTYxNjE1Y2VjN2Y5NmZjNDI1MThkYTg0NTY5ZWJiZjg3
MDRhNTVmLi41NjExYjM4MWY1OWNiYmI4OGRjZmRjMWFkMzExNGMzN2YwOTU5YjVhIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjcg
QEAKIDIwMTEtMDItMDkgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
ZGRzIHRoZSBidWxrIG9mIHRoZSByZW1haW5pbmcgZnVuY3Rpb25hbGl0eSBmb3IKKyAgICAgICAg
dGhlIE5SV1QgbWVzc2FnZS1wYXNzaW5nIGltcGxlbWVudGF0aW9uLiBUaGUgcGF0Y2ggYWRkcyBh
IG5ldworICAgICAgICBXb3JrZXIgY2xhc3MgdGhhdCB3aWxsIGV2ZW50dWFsbHkgcmVwbGFjZSB0
aGUgVGVzdFNoZWxsVGhyZWFkCisgICAgICAgIGNsYXNzIGluIGR1bXBfcmVuZGVyX3RyZWVfdGhy
ZWFkLnB5LCBhbmQgaW1wbGVtZW50cyBlbm91Z2ggb2YKKyAgICAgICAgVGVzdFJ1bm5lcjIgYW5k
IHRoZSBpbmxpbmUgdmVyc2lvbiBvZiB0aGUgbWFuYWdlcl93b3JrZXJfYnJva2VyCisgICAgICAg
IHRvIGFjdHVhbGx5IGJlIGFibGUgdG8gc2VuZCBhIGZ1bGwgc2V0IG9mIG1lc3NhZ2VzIGJhY2sg
YW5kCisgICAgICAgIGZvcnRoLiBUaGUgV29ya2VyIHN0dWJzIGRvIG5vdCBhY3R1YWxseSBydW4g
dGVzdHMsIGFuZCB0aGVyZSdzCisgICAgICAgIGxvdHMgb2YgZXJyb3IgaGFuZGxpbmcgYW5kIHN0
YXRzIG5lZWRlZCwgYnV0IHRoaXMgaXMgdGhlIGNvcmUKKyAgICAgICAgbG9naWMuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0MDY4CisKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2Vy
X3dvcmtlcl9icm9rZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3Rf
cnVubmVyMi5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS93b3JrZXIucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6CisKKzIwMTEtMDItMDkg
IERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgUmV2aWV3ZWQg
YnkgVG9ueSBDaGFuZy4KIAogICAgICAgICBucnd0IG11bHRpcHJvY2Vzc2luZzogbWlub3IgY2xl
YW51cCBwcmlvciB0byBpbXBsZW1lbnRpbmcgdGhlIG5ldyB3b3JrZXIKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJf
d29ya2VyX2Jyb2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weQppbmRleCA5ZmFlYzZlNjUxNDU2
MTJmZjFlZTlkZDkyZGMzMjlkZjI3NmFjNDE0Li5jNDdlOWQ3ZGM2ZWIzZDNhNTU2YjU4OGJjMDUz
OGVlZDZmYTcxNjlkIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl93b3Jr
ZXJfYnJva2VyLnB5CkBAIC0yOCwxNiArMjgsMTkgQEAKIAogIiIiTW9kdWxlIGZvciBoYW5kbGlu
ZyBtZXNzYWdlcyBhbmQgY29uY3VycmVuY3kgZm9yIHJ1bi13ZWJraXQtdGVzdHMuCiAKLVRoaXMg
bW9kdWxlIGJ1aWxkcyBvbiB0aGUgZnVuY3Rpb25hbGl0eSBvZiBtZXNzYWdlX2Jyb2tlcjIgdG8g
cHJvdmlkZQotYSBzaW1wbGUgbWVzc2FnZSBicm9rZXIgZm9yIGEgbWFuYWdlciBzZW5kaW5nIG1l
c3NhZ2VzIHRvIChhbmQgZ2V0dGluZwotcmVwbGllcyBmcm9tKSBhIHBvb2wgb2Ygd29ya2Vycy4g
SW4gYWRkaXRpb24gaXQgcHJvdmlkZXMgYSBjaG9pY2Ugb2YKLWNvbmN1cnJlbmN5IG1vZGVscyBm
b3IgY2FsbGVycyB0byBjaG9vc2UgZnJvbSAoc2luZ2xlLXRocmVhZGVkIGlubGluZQotbW9kZWws
IHRocmVhZHMsIG9yIHByb2Nlc3NlcykuCi0KLUZJWE1FOiBBdCB0aGUgbW9tZW50LCB0aGlzIG1v
ZHVsZSBpcyBqdXN0IGEgYnVuY2ggb2Ygc3R1YnMsIGJ1dCBldmVudHVhbGx5Ci1pdCB3aWxsIHBy
b3ZpZGUgdGhyZWUgc2V0cyBvZiBtYW5hZ2VyIGNsYXNzZXMgYW5kIHdvcmtlciBjbGFzc2VzIGZv
cgotdGhlIHRocmVlIGNvbmN1cnJlbmN5IG1vZGVscy4gVGhlIGdldCgpIGZhY3RvcnkgbWV0aG9k
IHNlbGVjdHMgYmV0d2VlbgotdGhlbS4KK1RoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBtZXNzYWdl
IGJyb2tlciB0aGF0IGNvbm5lY3RzIHRoZSBtYW5hZ2VyCisoVGVzdFJ1bm5lcjIpIHRvIHRoZSB3
b3JrZXJzOiBpdCBwcm92aWRlcyBhIG1lc3NhZ2luZyBhYnN0cmFjdGlvbiBhbmQKK21lc3NhZ2Ug
bG9vcHMgKGJ1aWxkaW5nIG9uIHRvcCBvZiBtZXNzYWdlX2Jyb2tlcjIpLCBhbmQgaGFuZGxlcyBz
dGFydGluZword29ya2VycyBieSBsYXVuY2hpbmcgdGhyZWFkcyBhbmQvb3IgcHJvY2Vzc2VzIGRl
cGVuZGluZyBvbiB0aGUKK3JlcXVlc3RlZCBjb25maWd1cmF0aW9uLgorCitUaGVyZSBhcmUgYSBs
b3Qgb2YgY2xhc3NlcyBhbmQgb2JqZWN0cyBpbnZvbHZlZCBpbiBhIGZ1bGx5IGNvbm5lY3RlZCBz
eXN0ZW0uCitUaGV5IGludGVyYWN0IG1vcmUgb3IgbGVzcyBsaWtlOgorCitUZXN0UnVubmVyMiAg
LS0+IF9JbmxpbmVNYW5hZ2VyIC0tLT4gX0lubGluZVdvcmtlciA8LT4gV29ya2VyCisgICAgIF4g
ICAgICAgICAgICAgICAgICAgIFwgICAgICAgICAgICAgICAvICAgICAgICAgICAgICBeCisgICAg
IHwgICAgICAgICAgICAgICAgICAgICB2ICAgICAgICAgICAgIHYgICAgICAgICAgICAgICB8Cisg
ICAgIFwtLS0tLS0tLS0tLS0tLS0tLS0tLSAgTWVzc2FnZUJyb2tlciAgIC0tLS0tLS0tLS0tLS0v
CiAiIiIKIAogaW1wb3J0IGxvZ2dpbmcKQEAgLTQ1LDkgKzQ4LDcgQEAgaW1wb3J0IG9wdHBhcnNl
CiBpbXBvcnQgUXVldWUKIGltcG9ydCB0aHJlYWRpbmcKIAotIwogIyBIYW5kbGUgUHl0aG9uIDwg
Mi42IHdoZXJlIG11bHRpcHJvY2Vzc2luZyBpc24ndCBhdmFpbGFibGUuCi0jCiB0cnk6CiAgICAg
aW1wb3J0IG11bHRpcHJvY2Vzc2luZwogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtODMsNyArODQs
OCBAQCBkZWYgZ2V0KHBvcnQsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKToKICAgICBB
cmdzOgogICAgICAgICBwb3J0IC0gaGFuZGxlIHRvIGxheW91dF90ZXN0cy9wb3J0IG9iamVjdCBm
b3IgcG9ydC1zcGVjaWZpYyBzdHVmZgogICAgICAgICBvcHRpb25zIC0gb3B0cGFyc2UgYXJndW1l
bnQgZm9yIGNvbW1hbmQtbGluZSBvcHRpb25zCi0gICAgICAgIGNsaWVudCAtIG9iamVjdCB0byBk
aXNwYXRjaCByZXBsaWVzIHRvCisgICAgICAgIGNsaWVudCAtIG1lc3NhZ2VfYnJva2VyMi5Ccm9r
ZXJDbGllbnQgaW1wbGVtZW50YXRpb24gdG8gZGlzcGF0Y2gKKyAgICAgICAgICAgIHJlcGxpZXMg
dG8uCiAgICAgICAgIHdvcmtlcl9jbGFzcyAtIHR5cGUgb2Ygd29ya2VycyB0byBjcmVhdGUuIFRo
aXMgY2xhc3MgbXVzdCBpbXBsZW1lbnQKICAgICAgICAgICAgIHRoZSBtZXRob2RzIGluIEFic3Ry
YWN0V29ya2VyLgogICAgIFJldHVybnM6CkBAIC0xMDksNyArMTExLDcgQEAgZGVmIGdldChwb3J0
LCBvcHRpb25zLCBjbGllbnQsIHdvcmtlcl9jbGFzcyk6CiAKIAogY2xhc3MgQWJzdHJhY3RXb3Jr
ZXIobWVzc2FnZV9icm9rZXIyLkJyb2tlckNsaWVudCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYs
IGJyb2tlcl9jb25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyLCBvcHRpb25zLCAqKmt3YXJncyk6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlcl9jb25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyLCBv
cHRpb25zKToKICAgICAgICAgIiIiVGhlIGNvbnN0cnVjdG9yIHNob3VsZCBiZSB1c2VkIHRvIGRv
IGFueSBzaW1wbGUgaW5pdGlhbGl6YXRpb24KICAgICAgICAgbmVjZXNzYXJ5LCBidXQgc2hvdWxk
IG5vdCBkbyBhbnl0aGluZyB0aGF0IGNyZWF0ZXMgZGF0YSBzdHJ1Y3R1cmVzCiAgICAgICAgIHRo
YXQgY2Fubm90IGJlIFBpY2tsZWQgb3Igc2VudCBhY3Jvc3MgcHJvY2Vzc2VzIChsaWtlIG9wZW5p
bmcKQEAgLTEzNywxMiArMTM5LDExIEBAIGNsYXNzIEFic3RyYWN0V29ya2VyKG1lc3NhZ2VfYnJv
a2VyMi5Ccm9rZXJDbGllbnQpOgogCiAKIGNsYXNzIF9NYW5hZ2VyQ29ubmVjdGlvbihtZXNzYWdl
X2Jyb2tlcjIuQnJva2VyQ29ubmVjdGlvbik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tl
ciwgcG9ydCwgb3B0aW9ucywgY2xpZW50LCB3b3JrZXJfY2xhc3MpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBicm9rZXIsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKToKICAgICAgICAg
IiIiQmFzZSBpbml0aWFsaXphdGlvbiBmb3IgYWxsIE1hbmFnZXIgb2JqZWN0cy4KIAogICAgICAg
ICBBcmdzOgogICAgICAgICAgICAgYnJva2VyOiBoYW5kbGUgdG8gdGhlIG1lc3NhZ2VfYnJva2Vy
MiBvYmplY3QKLSAgICAgICAgICAgIHBvcnQ6IGhhbmRsZSB0byBwb3J0LXNwZWNpZmljIGZ1bmN0
aW9uYWxpdHkKICAgICAgICAgICAgIG9wdGlvbnM6IGNvbW1hbmQgbGluZSBvcHRpb25zIG9iamVj
dAogICAgICAgICAgICAgY2xpZW50OiBjYWxsYmFjayBvYmplY3QgKHRoZSBjYWxsZXIpCiAgICAg
ICAgICAgICB3b3JrZXJfY2xhc3M6IGNsYXNzIG9iamVjdCB0byB1c2UgdG8gY3JlYXRlIHdvcmtl
cnMuCkBAIC0xNTIsMTQgKzE1Myw2MCBAQCBjbGFzcyBfTWFuYWdlckNvbm5lY3Rpb24obWVzc2Fn
ZV9icm9rZXIyLkJyb2tlckNvbm5lY3Rpb24pOgogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0
aW9ucwogICAgICAgICBzZWxmLl93b3JrZXJfY2xhc3MgPSB3b3JrZXJfY2xhc3MKIAorICAgIGRl
ZiBzdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlcik6CisgICAgICAgIHJhaXNlIE5vdElt
cGxlbWVudGVkRXJyb3IKKwogCiBjbGFzcyBfSW5saW5lTWFuYWdlcihfTWFuYWdlckNvbm5lY3Rp
b24pOgotICAgIHBhc3MKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0LCBvcHRp
b25zLCBjbGllbnQsIHdvcmtlcl9jbGFzcyk6CisgICAgICAgIF9NYW5hZ2VyQ29ubmVjdGlvbi5f
X2luaXRfXyhzZWxmLCBicm9rZXIsIG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKQorICAg
ICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9pbmxpbmVfd29ya2VyID0gTm9u
ZQorCisgICAgZGVmIHN0YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAg
c2VsZi5faW5saW5lX3dvcmtlciA9IF9JbmxpbmVXb3JrZXIoc2VsZi5fYnJva2VyLCBzZWxmLl9w
b3J0LCBzZWxmLl9jbGllbnQsCisgICAgICAgICAgICBzZWxmLl93b3JrZXJfY2xhc3MsIHdvcmtl
cl9udW1iZXIpCisgICAgICAgIHJldHVybiBzZWxmLl9pbmxpbmVfd29ya2VyCisKKyAgICBkZWYg
cnVuX21lc3NhZ2VfbG9vcChzZWxmLCBkZWxheV9zZWNzPU5vbmUpOgorICAgICAgICAjIE5vdGUg
dGhhdCBkZWxheV9zZWNzIGlzIGlnbm9yZWQgaW4gdGhpcyBjYXNlIHNpbmNlIHdlIGNhbid0IGVh
c2lseQorICAgICAgICAjIGltcGxlbWVudCBpdC4KKyAgICAgICAgc2VsZi5faW5saW5lX3dvcmtl
ci5ydW4oKQorICAgICAgICBzZWxmLl9icm9rZXIucnVuX2FsbF9wZW5kaW5nKE1BTkFHRVJfVE9Q
SUMsIHNlbGYuX2NsaWVudCkKIAogCiBjbGFzcyBfVGhyZWFkZWRNYW5hZ2VyKF9NYW5hZ2VyQ29u
bmVjdGlvbik6Ci0gICAgcGFzcworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQs
IG9wdGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcgogCiAKIGNsYXNzIF9NdWx0aVByb2Nlc3NNYW5hZ2VyKF9NYW5hZ2VyQ29ubmVj
dGlvbik6Ci0gICAgcGFzcworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHBvcnQsIG9w
dGlvbnMsIGNsaWVudCwgd29ya2VyX2NsYXNzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvcgorCisKK2NsYXNzIF9Xb3JrZXJDb25uZWN0aW9uKG1lc3NhZ2VfYnJva2VyMi5Ccm9r
ZXJDb25uZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCB3b3JrZXJfY2xh
c3MsIHdvcmtlcl9udW1iZXIsIG9wdGlvbnMpOgorICAgICAgICBzZWxmLl9jbGllbnQgPSB3b3Jr
ZXJfY2xhc3Moc2VsZiwgd29ya2VyX251bWJlciwgb3B0aW9ucykKKyAgICAgICAgc2VsZi5uYW1l
ID0gc2VsZi5fY2xpZW50Lm5hbWUoKQorICAgICAgICBtZXNzYWdlX2Jyb2tlcjIuQnJva2VyQ29u
bmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIHNlbGYuX2NsaWVudCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5ZX1dPUktFUl9UT1BJQywg
TUFOQUdFUl9UT1BJQykKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHJhaXNlIE5vdElt
cGxlbWVudGVkRXJyb3IKKworICAgIGRlZiB5aWVsZF90b19icm9rZXIoc2VsZik6CisgICAgICAg
IHBhc3MKKworCitjbGFzcyBfSW5saW5lV29ya2VyKF9Xb3JrZXJDb25uZWN0aW9uKToKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0LCBtYW5hZ2VyX2NsaWVudCwgd29ya2VyX2Ns
YXNzLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgX1dvcmtlckNvbm5lY3Rpb24uX19pbml0X18o
c2VsZiwgYnJva2VyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIsIHBvcnQuX29wdGlvbnMp
CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX21hbmFnZXJfY2xpZW50
ID0gbWFuYWdlcl9jbGllbnQKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHNlbGYuX2Ns
aWVudC5ydW4oc2VsZi5fcG9ydCkKKworICAgIGRlZiB5aWVsZF90b19icm9rZXIoc2VsZik6Cisg
ICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fYWxsX3BlbmRpbmcoTUFOQUdFUl9UT1BJQywgc2VsZi5f
bWFuYWdlcl9jbGllbnQpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3dvcmtlcl9icm9rZXJfdW5pdHRlc3QucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5h
Z2VyX3dvcmtlcl9icm9rZXJfdW5pdHRlc3QucHkKaW5kZXggMGEzMGJkZDQ1ZmI0MWY5OWFlOTQz
YWI0Y2VjMDczY2M4OTIwMjVmYS4uMWE0MzJkNmM5NDE1NjZmYTFlOGJlMDA2MzM1ZDQxODI0Yjk1
M2JhYyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvbWFuYWdlcl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfd29y
a2VyX2Jyb2tlcl91bml0dGVzdC5weQpAQCAtNjUsMTEgKzY1LDExIEBAIGNsYXNzIEZ1bmN0aW9u
VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUobWFrZV9i
cm9rZXIoc2VsZiwgJ2lubGluZScpIGlzIG5vdCBOb25lKQogCiAgICAgZGVmIHRlc3RfZ2V0X190
aHJlYWRzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUobWFrZV9icm9rZXIoc2VsZiwg
J3RocmVhZHMnKSBpcyBub3QgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1w
bGVtZW50ZWRFcnJvciwgbWFrZV9icm9rZXIsIHNlbGYsICd0aHJlYWRzJykKIAogICAgIGRlZiB0
ZXN0X2dldF9fcHJvY2Vzc2VzKHNlbGYpOgogICAgICAgICBpZiBtdWx0aXByb2Nlc3Npbmc6Ci0g
ICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWFrZV9icm9rZXIoc2VsZiwgJ3Byb2Nlc3Nlcycp
IGlzIG5vdCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50
ZWRFcnJvciwgbWFrZV9icm9rZXIsIHNlbGYsICdwcm9jZXNzZXMnKQogICAgICAgICBlbHNlOgog
ICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWFrZV9icm9rZXIsIHNl
bGYsICdwcm9jZXNzZXMnKQogCkBAIC04Miw2ICs4Miw4IEBAIGNsYXNzIEZ1bmN0aW9uVGVzdHMo
dW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNl
X2FyZ3MoW10pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcHRpb25zKQogCisjIEZJWE1FOiBB
ZGQgaW4gdW5pdCB0ZXN0cyBmb3IgdGhlIG1hbmFnZXJzLCBjb3ZlcmFnZSB0ZXN0cyBmb3IgdGhl
IGludGVyZmFjZXMuCisKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVz
dC5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVyMi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVyMi5weQppbmRleCBlYjc4NzUy
NTVjM2MzYzEwY2M2ODFlNWJkMWZlODAxZTM4MThjYmY3Li43NWI5ZGRhNzUwZTdlYTdlYTAxODE0
MDEyNTNjYjIwNGIyZWExYzgxIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3J1bm5lcjIucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5
CkBAIC0yOSwyNSArMjksMTA0IEBACiAKICIiIgogVGhlIFRlc3RSdW5uZXIyIHBhY2thZ2UgaXMg
YW4gYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUZXN0UnVubmVyCi1jbGFzcy4gRm9y
IG5vdyBpdCBpcyBqdXN0IGEgc3R1YiwgYnV0IGV2ZW50dWFsbHkgaXQgd2lsbCB1c2UgdGhlCi1t
ZXNzYWdlIGJyb2tlciBhYnN0cmFjdGlvbiB0byBwYXNzIG1lc3NhZ2VzIHRvIHdvcmtlcnMgdG8g
cnVuIHNldHMgb2YKLXRlc3RzIGFuZCB0aGVuIHByb2Nlc3MgdGhlIGNvbXBsZXRpb24gbWVzc2Fn
ZXMgYWNjb3JkaW5nbHkuCitjbGFzcyB0aGF0IHVzZXMgdGhlIG1hbmFnZXJfd29ya2VyX2Jyb2tl
ciBtb2R1bGUgdG8gc2VuZCBzZXRzIG9mIHRlc3RzIHRvCit3b3JrZXJzIGFuZCByZWNlaXZlIHRo
ZWlyIGNvbXBsZXRpb24gbWVzc2FnZXMgYWNjb3JkaW5nbHkuCiAiIiIKIAogaW1wb3J0IGxvZ2dp
bmcKIAotaW1wb3J0IHRlc3RfcnVubmVyCisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxh
eW91dF9wYWNrYWdlIGltcG9ydCBtYW5hZ2VyX3dvcmtlcl9icm9rZXIKK2Zyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X3J1bm5lcgorZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHdvcmtlcgogCiBfbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKIAogY2xhc3MgVGVzdFJ1bm5lcjIodGVzdF9y
dW5uZXIuVGVzdFJ1bm5lcik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMs
IHByaW50ZXIpOgotCi0gICAgICAgICMgRklYTUU6IFRoaXMnbGwgZ2V0IHJlcGxhY2VkIHdpdGgg
YSByZWFsIGltcGxlbWVudGF0aW9uIHNvb24gZW5vdWdoLgotICAgICAgICBpZiBvcHRpb25zLndv
cmtlcl9tb2RlbCBpbiAoJ2lubGluZScsICd0aHJlYWRzJyk6Ci0gICAgICAgICAgICBvcHRpb25z
Lndvcmtlcl9tb2RlbCA9ICdvbGQtJyArIG9wdGlvbnMud29ya2VyX21vZGVsCi0gICAgICAgIGlm
IG9wdGlvbnMud29ya2VyX21vZGVsID09ICdwcm9jZXNzZXMnOgotICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcigiLS13b3JrZXItbW9kZWw9cHJvY2Vzc2VzIG5vdCBzdXBwb3J0ZWQgeWV0IikK
KyAgICAgICAgaWYgb3B0aW9ucy53b3JrZXJfbW9kZWwgaW4gKCd0aHJlYWRzJywgJ3Byb2Nlc3Nl
cycpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignLS13b3JrZXItbW9kZWw9JXMgbm90
IHN1cHBvcnRlZCB5ZXQnICUgb3B0aW9ucy53b3JrZXJfbW9kZWwpCiAKICAgICAgICAgdGVzdF9y
dW5uZXIuVGVzdFJ1bm5lci5fX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmludGVyKQor
ICAgICAgICBzZWxmLl9hbGxfcmVzdWx0cyA9IFtdCisgICAgICAgIHNlbGYuX2dyb3VwX3N0YXRz
ID0ge30KKyAgICAgICAgc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSA9IE5vbmUKKyAgICAg
ICAgc2VsZi5fZG9uZSA9IEZhbHNlCisKKyAgICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAgICAg
cmV0dXJuIHNlbGYuX2RvbmUKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4g
J1Rlc3RSdW5uZXIyJworCisgICAgZGVmIF9ydW5fdGVzdHMoc2VsZiwgZmlsZV9saXN0LCByZXN1
bHRfc3VtbWFyeSk6CisgICAgICAgICIiIlJ1bnMgdGhlIHRlc3RzIGluIHRoZSBmaWxlX2xpc3Qu
CisKKyAgICAgICAgUmV0dXJuOiBBIHR1cGxlIChrZXlib2FyZF9pbnRlcnJ1cHRlZCwgdGhyZWFk
X3RpbWluZ3MsIHRlc3RfdGltaW5ncywKKyAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1p
bmdzKQorICAgICAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgaXMgd2hldGhlciBzb21lb25l
IHR5cGVkIEN0cmxeQworICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3MgaXMgYSBsaXN0IG9mIGRp
Y3RzIHdpdGggdGhlIHRvdGFsIHJ1bnRpbWUKKyAgICAgICAgICAgICAgb2YgZWFjaCB0aHJlYWQg
d2l0aCAnbmFtZScsICdudW1fdGVzdHMnLCAndG90YWxfdGltZScgcHJvcGVydGllcworICAgICAg
ICAgICAgdGVzdF90aW1pbmdzIGlzIGEgbGlzdCBvZiB0aW1pbmdzIGZvciBlYWNoIHNoYXJkZWQg
c3ViZGlyZWN0b3J5CisgICAgICAgICAgICAgIG9mIHRoZSBmb3JtIFt0aW1lLCBkaXJlY3Rvcnlf
bmFtZSwgbnVtX3Rlc3RzXQorICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MgaXMg
YSBsaXN0IG9mIHJ1biB0aW1lcyBmb3IgZWFjaCB0ZXN0CisgICAgICAgICAgICAgIGluIHRoZSBm
b3JtIHtmaWxlbmFtZTpmaWxlbmFtZSwgdGVzdF9ydW5fdGltZTp0ZXN0X3J1bl90aW1lfQorICAg
ICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IHRvIHBvcHVsYXRlIHdpdGgg
dGhlIHJlc3VsdHMKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1
bW1hcnkgPSByZXN1bHRfc3VtbWFyeQorCisgICAgICAgICMgRklYTUU6IHNoYXJkIHByb3Blcmx5
LgorCisgICAgICAgICMgRklYTUU6IHNob3VsZCBzaGFyZF90ZXN0cyByZXR1cm4gYSBsaXN0IG9m
IG9iamVjdHMgcmF0aGVyIHRoYW4gdHVwbGVzPworICAgICAgICB0ZXN0X2xpc3RzID0gc2VsZi5f
c2hhcmRfdGVzdHMoZmlsZV9saXN0LCBGYWxzZSkKKworICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rp
b24gPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuZ2V0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMs
IHNlbGYsIHdvcmtlci5Xb3JrZXIpCisKKyAgICAgICAgIyBGSVhNRTogc3RhcnQgYWxsIG9mIHRo
ZSB3b3JrZXJzLgorICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24uc3RhcnRfd29ya2VyKDApCisK
KyAgICAgICAgZm9yIHRlc3RfbGlzdCBpbiB0ZXN0X2xpc3RzOgorICAgICAgICAgICAgbWFuYWdl
cl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgndGVzdF9saXN0JywgdGVzdF9saXN0WzBdLCB0ZXN0
X2xpc3RbMV0pCisKKyAgICAgICAgbWFuYWdlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnc3Rv
cCcpCisKKyAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBGYWxzZQorICAgICAgICBpbnRl
cnJ1cHRlZCA9IEZhbHNlCisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLmRyeV9ydW46Cisg
ICAgICAgICAgICB3aGlsZSBub3Qgc2VsZi5fY2hlY2tfaWZfZG9uZSgpOgorICAgICAgICAgICAg
ICAgIG1hbmFnZXJfY29ubmVjdGlvbi5ydW5fbWVzc2FnZV9sb29wKGRlbGF5X3NlY3M9MS4wKQor
CisgICAgICAgICMgRklYTUU6IGltcGxlbWVudCBzdGF0cy4KKyAgICAgICAgdGhyZWFkX3RpbWlu
Z3MgPSBbXQorCisgICAgICAgICMgRklYTUU6IHNob3VsZCB0aGlzIGJlIGEgY2xhc3MgaW5zdGVh
ZCBvZiBhIHR1cGxlPworICAgICAgICByZXR1cm4gKGtleWJvYXJkX2ludGVycnVwdGVkLCBpbnRl
cnJ1cHRlZCwgdGhyZWFkX3RpbWluZ3MsCisgICAgICAgICAgICAgICAgc2VsZi5fZ3JvdXBfc3Rh
dHMsIHNlbGYuX2FsbF9yZXN1bHRzKQorCisgICAgZGVmIF9jaGVja19pZl9kb25lKHNlbGYpOgor
ICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWZmIGFsbCB0aGUgd29ya2VycyBoYXZlIGVpdGhlciBj
b21wbGV0ZWQgb3Igd2VkZ2VkLiIiIgorICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQgdG8gY2hl
Y2sgZm9yIHdlZGdlZCB3b3JrZXJzLgorICAgICAgICByZXR1cm4gc2VsZi5fZG9uZQorCisgICAg
ZGVmIGhhbmRsZV9zdGFydGVkX3Rlc3Qoc2VsZiwgc3JjLCB0ZXN0X2luZm8sIGhhbmdfdGltZW91
dCk6CisgICAgICAgICMgRklYTUU6IGltcGxlbWVudAorICAgICAgICBwYXNzCisKKyAgICBkZWYg
aGFuZGxlX2RvbmUoc2VsZiwgc3JjKToKKyAgICAgICAgIyBGSVhNRTogaW1wbGVtZW50IHByb3Bl
cmx5IHRvIGhhbmRsZSBtdWx0aXBsZSB3b3JrZXJzLgorICAgICAgICBzZWxmLl9kb25lID0gVHJ1
ZQorICAgICAgICBwYXNzCisKKyAgICBkZWYgaGFuZGxlX2V4Y2VwdGlvbihzZWxmLCBzcmMsIGV4
Y2VwdGlvbl9pbmZvKToKKyAgICAgICAgcmFpc2UgZXhjZXB0aW9uX2luZm8KKworICAgIGRlZiBo
YW5kbGVfZmluaXNoZWRfbGlzdChzZWxmLCBzcmMsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLCBlbGFw
c2VkX3RpbWUpOgorICAgICAgICAjIEZJWE1FOiB1cGRhdGUgc3RhdHMKKyAgICAgICAgcGFzcwor
CisgICAgZGVmIGhhbmRsZV9maW5pc2hlZF90ZXN0KHNlbGYsIHNyYywgcmVzdWx0LCBlbGFwc2Vk
X3RpbWUpOgorICAgICAgICBzZWxmLl91cGRhdGVfc3VtbWFyeV93aXRoX3Jlc3VsdChzZWxmLl9j
dXJyZW50X3Jlc3VsdF9zdW1tYXJ5LCByZXN1bHQpCisKKyAgICAgICAgIyBGSVhNRTogdXBkYXRl
IHN0YXRzLgorICAgICAgICBzZWxmLl9hbGxfcmVzdWx0cy5hcHBlbmQocmVzdWx0KQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
d29ya2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2Uvd29ya2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3ZDRmYmRiYmUwOGNlN2RlZTEzNzUwM2I3NGZi
NjgxYzc3OGU0YTUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93b3JrZXIucHkKQEAgLTAsMCArMSwxMDQgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisj
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisiIiJIYW5kbGUgbWVzc2FnZXMgZnJvbSB0aGUgVGVzdFJ1bm5lciBh
bmQgZXhlY3V0ZSBhY3R1YWwgdGVzdHMuIiIiCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3lz
CitpbXBvcnQgdGltZQorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHN0YWNr
X3V0aWxzCisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9y
dCBtYW5hZ2VyX3dvcmtlcl9icm9rZXIKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91
dF9wYWNrYWdlIGltcG9ydCB0ZXN0X3Jlc3VsdHMKKworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoX19uYW1lX18pCisKKworY2xhc3MgV29ya2VyKG1hbmFnZXJfd29ya2VyX2Jyb2tlci5BYnN0
cmFjdFdvcmtlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdvcmtlcl9jb25uZWN0aW9uLCB3
b3JrZXJfbnVtYmVyLCBvcHRpb25zKToKKyAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24g
PSB3b3JrZXJfY29ubmVjdGlvbgorICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29ya2Vy
X251bWJlcgorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9u
YW1lID0gJ3dvcmtlci8lZCcgJSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX2RvbmUgPSBG
YWxzZQorICAgICAgICBzZWxmLl9wb3J0ID0gTm9uZQorCisgICAgZGVmIF9kZWZlcnJlZF9pbml0
KHNlbGYsIHBvcnQpOgorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorCisgICAgZGVmIGlzX2Rv
bmUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kb25lCisKKyAgICBkZWYgbmFtZShzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKKworICAgIGRlZiBydW4oc2VsZiwgcG9ydCk6
CisgICAgICAgIHNlbGYuX2RlZmVycmVkX2luaXQocG9ydCkKKworICAgICAgICBfbG9nLmRlYnVn
KCIlcyBzdGFydGluZyIgJSBzZWxmLl9uYW1lKQorCisgICAgICAgICMgRklYTUU6IG5lZWQgdG8g
YWRkIGluIGVycm9yIGhhbmRsaW5nLCBiZXR0ZXIgbG9nZ2luZy4KKyAgICAgICAgc2VsZi5fd29y
a2VyX2Nvbm5lY3Rpb24ucnVuX21lc3NhZ2VfbG9vcCgpCisgICAgICAgIHNlbGYuX3dvcmtlcl9j
b25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnZG9uZScpCisKKyAgICBkZWYgaGFuZGxlX3Rlc3RfbGlz
dChzZWxmLCBzcmMsIGxpc3RfbmFtZSwgdGVzdF9saXN0KToKKyAgICAgICAgIyBGSVhNRTogY2hl
Y2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gZ2V0IHRoZSBodHRwIGxvY2suCisKKyAgICAgICAgc3Rh
cnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIG51bV90ZXN0cyA9IDAKKyAgICAgICAgZm9y
IHRlc3RfaW5wdXQgaW4gdGVzdF9saXN0OgorICAgICAgICAgICAgc2VsZi5fcnVuX3Rlc3QodGVz
dF9pbnB1dCkKKyAgICAgICAgICAgIG51bV90ZXN0cyArPSAxCisgICAgICAgICAgICBzZWxmLl93
b3JrZXJfY29ubmVjdGlvbi55aWVsZF90b19icm9rZXIoKQorCisgICAgICAgIGVsYXBzZWRfdGlt
ZSA9IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZQorICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVj
dGlvbi5wb3N0X21lc3NhZ2UoJ2ZpbmlzaGVkX2xpc3QnLCBsaXN0X25hbWUsIG51bV90ZXN0cywg
ZWxhcHNlZF90aW1lKQorCisgICAgICAgICMgRklYTUU6IHJlbGVhc2UgdGhlIGxvY2sgaWYgbmVj
ZXNzYXJ5CisKKyAgICBkZWYgaGFuZGxlX3N0b3Aoc2VsZiwgc3JjKToKKyAgICAgICAgc2VsZi5f
ZG9uZSA9IFRydWUKKworICAgIGRlZiBfcnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6CisKKyAg
ICAgICAgIyBGSVhNRTogZ2V0IHJlYWwgdGltZW91dCB2YWx1ZSBmcm9tIFNpbmdsZVRlc3RSdW5u
ZXIKKyAgICAgICAgdGVzdF90aW1lb3V0X3NlYyA9IGludCh0ZXN0X2lucHV0LnRpbWVvdXQpIC8g
MTAwMAorICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuX3dvcmtlcl9j
b25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnc3RhcnRlZF90ZXN0JywgdGVzdF9pbnB1dCwgdGVzdF90
aW1lb3V0X3NlYykKKworICAgICAgICAjIEZJWE1FOiBhY3R1YWxseSBydW4gdGhlIHRlc3QuCisg
ICAgICAgIHJlc3VsdCA9IHRlc3RfcmVzdWx0cy5UZXN0UmVzdWx0KHRlc3RfaW5wdXQuZmlsZW5h
bWUsIGZhaWx1cmVzPVtdLAorICAgICAgICAgICAgdGVzdF9ydW5fdGltZT0wLCB0b3RhbF90aW1l
X2Zvcl9hbGxfZGlmZnM9MCwgdGltZV9mb3JfZGlmZnM9e30pCisKKyAgICAgICAgZWxhcHNlZF90
aW1lID0gdGltZS50aW1lKCkgLSBzdGFydAorCisgICAgICAgICMgRklYTUU6IHVwZGF0ZSBzdGF0
cywgY2hlY2sgZm9yIGZhaWx1cmVzLgorCisgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9u
LnBvc3RfbWVzc2FnZSgnZmluaXNoZWRfdGVzdCcsIHJlc3VsdCwgZWxhcHNlZF90aW1lKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90
ZXN0c191bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKaW5kZXggZjRlNTM1MGU2Zjg1MzNiZjM4OTNjNDE1
ODI5ZTI5YWJkMzY4ZTQ1NS4uODkxNzk3ZDUwNWM0OGUxOGVjOWI0OTcxNjU5MDcyMTZjZmNlOTFj
ZCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dl
YmtpdF90ZXN0c191bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CkBAIC00NzAsNyArNDcwLDcgQEAg
Y2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydFJh
aXNlcyhWYWx1ZUVycm9yLCBsb2dnaW5nX3J1biwgWyctLXdvcmtlci1tb2RlbCcsICdwcm9jZXNz
ZXMnXSkKIAogICAgIGRlZiB0ZXN0X3dvcmtlcl9tb2RlbF9fdGhyZWFkcyhzZWxmKToKLSAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS13b3JrZXItbW9kZWwnLCAndGhyZWFk
cyddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9nZ2luZ19ydW4s
IFsnLS13b3JrZXItbW9kZWwnLCAndGhyZWFkcyddKQogCiAgICAgZGVmIHRlc3Rfd29ya2VyX21v
ZGVsX191bmtub3duKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9y
LCBsb2dnaW5nX3J1biwK
</data>
<flag name="review"
          id="73659"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>