<?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>49779</bug_id>
          
          <creation_ts>2010-11-18 19:14:48 -0800</creation_ts>
          <short_desc>nrwt multiprocessing - implement first part of broker object</short_desc>
          <delta_ts>2010-11-24 13:57:28 -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>49768</dependson>
          <blocked>49566</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>hayato</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>311239</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-18 19:14:48 -0800</bug_when>
    <thetext>nrwt multiprocessing - implement first part of broker object</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311243</commentid>
    <comment_count>1</comment_count>
      <attachid>74341</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-18 19:16:56 -0800</bug_when>
    <thetext>Created attachment 74341
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311246</commentid>
    <comment_count>2</comment_count>
      <attachid>74343</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-18 19:22:48 -0800</bug_when>
    <thetext>Created attachment 74343
fix missing import</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311247</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-18 19:23:59 -0800</bug_when>
    <thetext>Note that this patch depends on bug 49768 landing first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311272</commentid>
    <comment_count>4</comment_count>
      <attachid>74351</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-18 20:43:54 -0800</bug_when>
    <thetext>Created attachment 74351
yet more cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311629</commentid>
    <comment_count>5</comment_count>
      <attachid>74351</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-11-19 12:37:43 -0800</bug_when>
    <thetext>Comment on attachment 74351
yet more cleanup

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

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:48
&gt; +    if options.workers_are == &apos;inline&apos;:
&gt; +        return SingleThreadedBroker(port, options)

Where is the workers_are flag declared?  I think workers_are is a poor name.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:56
&gt; +class _WorkerState(object):
&gt; +    def __init__(self):

Maybe this class should be declared in AbstractBroker?  Do other classes need to instantiate it?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:62
&gt; +class AbstractBroker(object):
&gt; +    def __init__(self, port, options):

Can you add a docstring describing AbstractBroker?  The name is very vague (could be named better?).

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:76
&gt; +            worker = _WorkerState()
&gt; +            worker.thread = self._start_worker(worker_number)
&gt; +            worker.name = &apos;worker-%d&apos; % worker_number

Wouldn&apos;t it be better to put this in __init__?  Also, isn&apos;t this name generation a duplicate with code from bug 49768?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:81
&gt; +    def _start_worker(self, worker_number):
&gt; +        raise NotImplementedError

Please document what implementations should go here and what the return type should be.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:85
&gt; +    def loop(self):
&gt; +        &quot;&quot;&quot;Loop waiting for threads to finish.&quot;&quot;&quot;
&gt; +        raise NotImplementedError

Based on the docstring, it&apos;s not clear to me what the implementation is supposed to do.  Looking at SingleThreadedBroker, it looks like this is the run_loop() command.  What should be returned?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:101
&gt; +        # Note: Don&apos;t start() the thread!

Fill this comment out and say why.  It&apos;s not obvious to me why this method doesn&apos;t start the thread and MultiThreadedBroker does.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:141
&gt; +                    if (next_timeout and t &gt; next_timeout):

Nit: remove the ()

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py:109
&gt; +        # FIXME: implement
&gt; +        return

Why do these tests no longer work?  Can we make it work in this patch?  It&apos;s nice to have each step of the code landing be in a working state.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:253
&gt; +        self._broker = broker

I think this variable should be named more specifically than broker.  The name broker doesn&apos;t tell you anything about what it does.  A broker for what?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:629
&gt; +        (thread_timings, test_timings, individual_test_timings) = \

Nit: Not () on the left side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311674</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-19 13:53:55 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 74351 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=74351&amp;action=review
&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:48
&gt; &gt; +    if options.workers_are == &apos;inline&apos;:
&gt; &gt; +        return SingleThreadedBroker(port, options)
&gt; 
&gt; Where is the workers_are flag declared?  I think workers_are is a poor name.
&gt; 

It&apos;s declared in run_webkit_teste.parse_args, along with all the other options fields. It&apos;s an enum, with valid values &apos;inline&apos;, &apos;threads&apos;, and &apos;processes&apos;, i.e., --workers-are=threads . Which reads nicely. But I grant your point about it being awkward without seeing the value of the field. Do you have any suggestions you like better?

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:56
&gt; &gt; +class _WorkerState(object):
&gt; &gt; +    def __init__(self):
&gt; 
&gt; Maybe this class should be declared in AbstractBroker?  Do other classes need to instantiate it?
&gt;

It could be in AbstractBroker, and only AbstractBroker creates them, but I&apos;m not generally a fan of nested classes.
 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:62
&gt; &gt; +class AbstractBroker(object):
&gt; &gt; +    def __init__(self, port, options):
&gt; 
&gt; Can you add a docstring describing AbstractBroker?  The name is very vague (could be named better?).
&gt; 

Will do. It&apos;s an abstract base class for the other broker classes - would you prefer just Broker, or BrokerBase, or BaseBroker, or something else?

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:76
&gt; &gt; +            worker = _WorkerState()
&gt; &gt; +            worker.thread = self._start_worker(worker_number)
&gt; &gt; +            worker.name = &apos;worker-%d&apos; % worker_number
&gt; 
&gt; Wouldn&apos;t it be better to put this in __init__?  Also, isn&apos;t this name generation a duplicate with code from bug 49768?

It could go in init(); It&apos;s just a struct, so I don&apos;t feel strongly about needing to use constructors (but I will add it, because there&apos;s also no particular reason not to). 

Yes, the name generation is duplicated with bug 49768. That code goes away in favor of this code. The downside of breaking up a single patch into multiple patches :(

&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:81
&gt; &gt; +    def _start_worker(self, worker_number):
&gt; &gt; +        raise NotImplementedError
&gt; 
&gt; Please document what implementations should go here and what the return type should be.
&gt;

Will do.
 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:85
&gt; &gt; +    def loop(self):
&gt; &gt; +        &quot;&quot;&quot;Loop waiting for threads to finish.&quot;&quot;&quot;
&gt; &gt; +        raise NotImplementedError
&gt; 
&gt; Based on the docstring, it&apos;s not clear to me what the implementation is supposed to do.  Looking at SingleThreadedBroker, it looks like this is the run_loop() command.  What should be returned?
&gt;

I will add comments. Nothing is returned.
 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:101
&gt; &gt; +        # Note: Don&apos;t start() the thread!
&gt; 
&gt; Fill this comment out and say why.  It&apos;s not obvious to me why this method doesn&apos;t start the thread and MultiThreadedBroker does.
&gt;

I will add more comments. If we called start(), then the function would be run in the other thread, and it would no longer be a SingleThreadedBroker ;) As the FIXME above indicates, this really shouldn&apos;t be using threads at all, but that gets fixed later when we can do more surgery on dump_render_tree_thread.
 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:141
&gt; &gt; +                    if (next_timeout and t &gt; next_timeout):
&gt; 
&gt; Nit: remove the ()
&gt;

Will do.
 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py:109
&gt; &gt; +        # FIXME: implement
&gt; &gt; +        return
&gt; 
&gt; Why do these tests no longer work?  Can we make it work in this patch?  It&apos;s nice to have each step of the code landing be in a working state.
&gt;

I think the threads actually still work in this particular patch, but they break and become irrelevant in subsequent patches. I can make them work in this version, and then delete them later (which is what I will do unless I hear otherwise), or I can just delete them now if you think that would also be okay.

The code that lands is actually working, we just get slightly worse test coverage temporarily.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:253
&gt; &gt; +        self._broker = broker
&gt; 
&gt; I think this variable should be named more specifically than broker.  The name broker doesn&apos;t tell you anything about what it does.  A broker for what?
&gt;

We only have message brokers in these packages, so if something needed to be more specific than &quot;broker&quot; it could be &quot;message_broker&quot;, or perhaps something else. However, the &quot;broker&quot; concept is pretty fundamental to the new design of the code, so it doesn&apos;t seem like much to ask for the reader to be able to grok this pretty quickly, and &quot;message_broker&quot; then feels very verbose and cumbersome. 

But then, I almost always prefer things to be terser than the general webkit/python style we seem to use. Given the above, what do you think? Would you prefer &quot;message_broker&quot;? Do you have a better suggestion?
  
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:629
&gt; &gt; +        (thread_timings, test_timings, individual_test_timings) = \
&gt; 
&gt; Nit: Not () on the left side.

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311741</commentid>
    <comment_count>7</comment_count>
      <attachid>74351</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-11-19 16:09:56 -0800</bug_when>
    <thetext>Comment on attachment 74351
yet more cleanup

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

&gt;&gt;&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:48
&gt;&gt;&gt; +        return SingleThreadedBroker(port, options)
&gt;&gt; 
&gt;&gt; Where is the workers_are flag declared?  I think workers_are is a poor name.
&gt; 
&gt; It&apos;s declared in run_webkit_teste.parse_args, along with all the other options fields. It&apos;s an enum, with valid values &apos;inline&apos;, &apos;threads&apos;, and &apos;processes&apos;, i.e., --workers-are=threads . Which reads nicely. But I grant your point about it being awkward without seeing the value of the field. Do you have any suggestions you like better?

I mean it&apos;s not declared in ToT and I don&apos;t see it in bug 49768 which you said this patch depends on.  It looks like an undeclared option at this point.

&gt;&gt;&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:62
&gt;&gt;&gt; +    def __init__(self, port, options):
&gt;&gt; 
&gt;&gt; Can you add a docstring describing AbstractBroker?  The name is very vague (could be named better?).
&gt; 
&gt; Will do. It&apos;s an abstract base class for the other broker classes - would you prefer just Broker, or BrokerBase, or BaseBroker, or something else?

Broker is a poor name for a class since it&apos;s just a pattern.  It would be better to name the type of broker like MessageBroker or WorkerQueueBroker or something.  It should be obvious to someone not familiar with the code what the broker is responsible for brokering.

&gt;&gt;&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:76
&gt;&gt;&gt; +            worker.name = &apos;worker-%d&apos; % worker_number
&gt;&gt; 
&gt;&gt; Wouldn&apos;t it be better to put this in __init__?  Also, isn&apos;t this name generation a duplicate with code from bug 49768?
&gt; 
&gt; It could go in init(); It&apos;s just a struct, so I don&apos;t feel strongly about needing to use constructors (but I will add it, because there&apos;s also no particular reason not to). 
&gt; 
&gt; Yes, the name generation is duplicated with bug 49768. That code goes away in favor of this code. The downside of breaking up a single patch into multiple patches :(

When breaking up a large patch into smaller patches, I think the goal should be for each additional patch to stand on its own, not on some future patch.  It&apos;s ok to add code that is used only for an intermediate state that gets removed as you go along.

Please add the logic to the constructor to avoid forgetting to initialize properly.

&gt;&gt;&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:85
&gt;&gt;&gt; +        raise NotImplementedError
&gt;&gt; 
&gt;&gt; Based on the docstring, it&apos;s not clear to me what the implementation is supposed to do.  Looking at SingleThreadedBroker, it looks like this is the run_loop() command.  What should be returned?
&gt; 
&gt; I will add comments. Nothing is returned.

SingleThreadedBroker returns False.  I think run_loop would be a better name than just loop.

&gt;&gt;&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py:109
&gt;&gt;&gt; +        return
&gt;&gt; 
&gt;&gt; Why do these tests no longer work?  Can we make it work in this patch?  It&apos;s nice to have each step of the code landing be in a working state.
&gt; 
&gt; I think the threads actually still work in this particular patch, but they break and become irrelevant in subsequent patches. I can make them work in this version, and then delete them later (which is what I will do unless I hear otherwise), or I can just delete them now if you think that would also be okay.
&gt; 
&gt; The code that lands is actually working, we just get slightly worse test coverage temporarily.

If they still work, then let&apos;s not disable them.  We can delete them when they&apos;re no longer relevant.

&gt;&gt;&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:253
&gt;&gt;&gt; +        self._broker = broker
&gt;&gt; 
&gt;&gt; I think this variable should be named more specifically than broker.  The name broker doesn&apos;t tell you anything about what it does.  A broker for what?
&gt; 
&gt; We only have message brokers in these packages, so if something needed to be more specific than &quot;broker&quot; it could be &quot;message_broker&quot;, or perhaps something else. However, the &quot;broker&quot; concept is pretty fundamental to the new design of the code, so it doesn&apos;t seem like much to ask for the reader to be able to grok this pretty quickly, and &quot;message_broker&quot; then feels very verbose and cumbersome. 
&gt; 
&gt; But then, I almost always prefer things to be terser than the general webkit/python style we seem to use. Given the above, what do you think? Would you prefer &quot;message_broker&quot;? Do you have a better suggestion?

See above comment.  I would prefer message_broker.  Naming it broker is like naming a class Factory instead of FooBarFactory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311809</commentid>
    <comment_count>8</comment_count>
      <attachid>74455</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-19 18:46:27 -0800</bug_when>
    <thetext>Created attachment 74455
update w/ review feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311810</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-19 18:47:24 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=74455) [details]
&gt; update w/ review feedback

Tony, I think the latest patch covers everything we talked about over IM. Can you take another look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311817</commentid>
    <comment_count>10</comment_count>
      <attachid>74455</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-11-19 19:07:39 -0800</bug_when>
    <thetext>Comment on attachment 74455
update w/ review feedback

r- only because it seems like we should resolve the workers-are naming issue in bug 49773 first.

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

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:65
&gt; +        self.name = None

self.name = name

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:74
&gt; +        self._workers = {}

Nit: maybe a comment saying this maps worker names to _WorkerState?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:77
&gt; +        return [w.thread for w in self._workers.values()]

Nit: Should this return a tuple instead of a list?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:98
&gt; +        &quot;&quot;&quot;Loop processing messages until done. Returns nothing.&quot;&quot;&quot;

I don&apos;t think you need to say the method returns nothing.  I was just confused before because of the implementation returning false.  Same with cancel_workers and cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313043</commentid>
    <comment_count>11</comment_count>
      <attachid>74702</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-23 15:35:57 -0800</bug_when>
    <thetext>Created attachment 74702
update w/ more review feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313083</commentid>
    <comment_count>12</comment_count>
      <attachid>74702</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-11-23 16:45:50 -0800</bug_when>
    <thetext>Comment on attachment 74702
update w/ more review feedback.

r- for self.name typo.

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

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:65
&gt; +        self.name = None

self.name = name?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:110
&gt; +class SingleThreadedBroker(WorkerMessageBroker):

Nit: Should this be an InlineBroker to match the flag name?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313088</commentid>
    <comment_count>13</comment_count>
      <attachid>74707</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-23 17:09:45 -0800</bug_when>
    <thetext>Created attachment 74707
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313094</commentid>
    <comment_count>14</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-23 17:35:44 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 74702 [details])
&gt; r- for self.name typo.
&gt; 
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=74702&amp;action=review
&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:65
&gt; &gt; +        self.name = None
&gt; 
&gt; self.name = name?
&gt; 

Good catch. Done.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py:110
&gt; &gt; +class SingleThreadedBroker(WorkerMessageBroker):
&gt; 
&gt; Nit: Should this be an InlineBroker to match the flag name?

Sure, why not. Done. Thanks for the feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313095</commentid>
    <comment_count>15</comment_count>
      <attachid>74711</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-23 17:38:25 -0800</bug_when>
    <thetext>Created attachment 74711
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313107</commentid>
    <comment_count>16</comment_count>
      <attachid>74716</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-23 18:36:44 -0800</bug_when>
    <thetext>Created attachment 74716
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313452</commentid>
    <comment_count>17</comment_count>
      <attachid>74716</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-24 13:57:22 -0800</bug_when>
    <thetext>Comment on attachment 74716
Patch

Clearing flags on attachment: 74716

Committed r72698: &lt;http://trac.webkit.org/changeset/72698&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313453</commentid>
    <comment_count>18</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-24 13:57:28 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74341</attachid>
            <date>2010-11-18 19:16:56 -0800</date>
            <delta_ts>2010-11-18 19:22:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49779-20101118191654.patch</filename>
            <type>text/plain</type>
            <size>14910</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAwYjQ4ZWJiMmVmY2RmYmQ1ZGRiYThlOTBlMzhiMGJkYTZjMzExOGY1Li5lNjRiY2E0
NGEzNzc3ZjM4MjE4NjZhODAxMjMwYTNkNGIxMGViNGRmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjAgQEAK
IDIwMTAtMTEtMTggIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBs
ZW1lbnRzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBtYW5hZ2VyIHNpZGUgb2YgdGhlCisgICAgICAg
IEJyb2tlciBvYmplY3RzIC0gaXQgaGFuZGxlcyBjcmVhdGluZyB0aHJlYWRzLCB3YWl0aW5nIGZv
ciB0aGVtCisgICAgICAgIHRvIGNvbXBsZXRlLCBhbmQgcnVubmluZyBhIHNpbmdsZS10aHJlYWRl
ZCBsb29wIGFzIHdlbGwuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ5Nzc5CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcl91bml0dGVz
dC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0
X3Rlc3RzLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6CisKKzIwMTAtMTEtMTggIERpcmsgUHJhbmtlICA8ZHBy
YW5rZUBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KIAog
ICAgICAgICBuZXctcnVuLXdlYmtpdC10ZXN0czogY3JlYXRlIGZpcnN0IHBhcnQgb2YgJ21lc3Nh
Z2VfYnJva2VyJyBjbGFzcyBmb3IgbXVsdGlwcm9jZXNzaW5nIGZpeGVzCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9t
ZXNzYWdlX2Jyb2tlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5CmluZGV4IDEzOTUxYzAyZWYzZDE3
MmEzOWU3MzY5Y2ViMjE5N2YxY2JjYjliOTguLjFhYTk0ZDhjYzNiZWJiMDM3MTM0ODdlODgzODRi
NmY3YWE5ODY2NzAgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5CisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2Vf
YnJva2VyLnB5CkBAIC0zNSwxMiArMzUsMTEwIEBAIGRlcGVuZGluZyBvbiB0aGUgcmVxdWVzdGVk
IGNvbmZpZ3VyYXRpb24uCiAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3lzCitpbXBvcnQgdGlt
ZQogaW1wb3J0IHRyYWNlYmFjawogCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVf
XykKIAogCitkZWYgZ2V0KHBvcnQsIG9wdGlvbnMpOgorICAgIGlmIG9wdGlvbnMud29ya2Vyc19h
cmUgPT0gJ2lubGluZSc6CisgICAgICAgIHJldHVybiBTaW5nbGVUaHJlYWRlZEJyb2tlcihwb3J0
LCBvcHRpb25zKQorICAgIGlmIG9wdGlvbnMud29ya2Vyc19hcmUgPT0gJ3RocmVhZHMnOgorICAg
ICAgICByZXR1cm4gTXVsdGlUaHJlYWRlZEJyb2tlcihwb3J0LCBvcHRpb25zKQorICAgIHJhaXNl
IFZhbHVlRXJyb3IoJ2lsbGVnYWwgdmFsdWUgZm9yIC0td29ya2Vycy1hcmU6ICVzJyAlCisgICAg
ICAgICAgICAgICAgICAgICBvcHRpb25zLndvcmtlcnNfYXJlKQorCisKK2NsYXNzIEFic3RyYWN0
QnJva2VyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMpOgor
ICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9u
cworICAgICAgICBzZWxmLl9udW1fd29ya2VycyA9IGludChzZWxmLl9vcHRpb25zLmNoaWxkX3By
b2Nlc3NlcykKKyAgICAgICAgc2VsZi5fd29ya2VycyA9IFtdCisKKyAgICBkZWYgc3RhcnRfd29y
a2VycyhzZWxmLCB0ZXN0X3J1bm5lcik6CisgICAgICAgICIiIkluc3RhbnRpYXRlcyBhbmQgc3Rh
cnRzIHRoZSBXb3JrZXJzL1Rlc3RTaGVsbFRocmVhZChzKS4KKworICAgICAgICBSZXR1cm46Cisg
ICAgICAgICAgVGhlIGxpc3Qgb2Ygd29ya2Vycy90aHJlYWRzLgorICAgICAgICAiIiIKKyAgICAg
ICAgIyBJbnN0YW50aWF0ZSBUZXN0U2hlbGxUaHJlYWRzIGFuZCBzdGFydCB0aGVtLgorICAgICAg
ICBzZWxmLl90ZXN0X3J1bm5lciA9IHRlc3RfcnVubmVyCisgICAgICAgIHNlbGYuX3dvcmtlcnMg
PSBbXQorICAgICAgICBmb3Igd29ya2VyX251bWJlciBpbiB4cmFuZ2Uoc2VsZi5fbnVtX3dvcmtl
cnMpOgorICAgICAgICAgICAgd29ya2VyID0gc2VsZi5fc3RhcnRfd29ya2VyKHdvcmtlcl9udW1i
ZXIpCisgICAgICAgICAgICBzZWxmLl93b3JrZXJzLmFwcGVuZCh3b3JrZXIpCisgICAgICAgIHJl
dHVybiBzZWxmLl93b3JrZXJzCisKKyAgICBkZWYgX3N0YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJf
bnVtYmVyKToKKyAgICAgICAgcmV0dXJuIGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLlRlc3RTaGVs
bFRocmVhZChzZWxmLl9wb3J0LAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucywgd29ya2VyX251
bWJlciwKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyLl9jdXJyZW50X2ZpbGVuYW1lX3F1
ZXVlLAorICAgICAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXIuX3Jlc3VsdF9xdWV1ZSkKKworICAg
IGRlZiBsb29wKHNlbGYpOgorICAgICAgICAiIiJMb29wIHdhaXRpbmcgZm9yIHRocmVhZHMgdG8g
ZmluaXNoLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYg
Y2xlYW51cChzZWxmKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIFNpbmdsZVRocmVhZGVkQnJv
a2VyKEFic3RyYWN0QnJva2VyKToKKyAgICBkZWYgbG9vcChzZWxmKToKKyAgICAgICAgc2VsZi5f
d29ya2Vyc1swXS5ydW5faW5fbWFpbl90aHJlYWQoc2VsZi5fdGVzdF9ydW5uZXIsCisgICAgICAg
ICAgICBzZWxmLl90ZXN0X3J1bm5lci5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSkKKyAgICAgICAg
c2VsZi5fdGVzdF9ydW5uZXIudXBkYXRlKCkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworY2xh
c3MgTXVsdGlUaHJlYWRlZEJyb2tlcihBYnN0cmFjdEJyb2tlcik6CisgICAgZGVmIHN0YXJ0X3dv
cmtlcnMoc2VsZiwgdGVzdF9ydW5uZXIpOgorICAgICAgICB0aHJlYWRzID0gQWJzdHJhY3RCcm9r
ZXIuc3RhcnRfd29ya2VycyhzZWxmLCB0ZXN0X3J1bm5lcikKKyAgICAgICAgZm9yIHQgaW4gdGhy
ZWFkczoKKyAgICAgICAgICAgIHQuc3RhcnQoKQorICAgICAgICByZXR1cm4gdGhyZWFkcworCisg
ICAgZGVmIGxvb3Aoc2VsZik6CisgICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkID0gRmFsc2UK
KyAgICAgICAgdGhyZWFkcyA9IHNlbGYuX3dvcmtlcnMKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgIyBMb29wIHRocm91Z2ggYWxsIHRoZSB0aHJlYWRzIHdhaXRpbmcgZm9yIHRoZW0gdG8gZmlu
aXNoLgorICAgICAgICAgICAgc29tZV90aHJlYWRfaXNfYWxpdmUgPSBUcnVlCisgICAgICAgICAg
ICB3aGlsZSBzb21lX3RocmVhZF9pc19hbGl2ZToKKyAgICAgICAgICAgICAgICBzb21lX3RocmVh
ZF9pc19hbGl2ZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgdCA9IHRpbWUudGltZSgpCisgICAg
ICAgICAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgICAgICAgICBl
eGNlcHRpb25faW5mbyA9IHRocmVhZC5leGNlcHRpb25faW5mbygpCisgICAgICAgICAgICAgICAg
ICAgIGlmIGV4Y2VwdGlvbl9pbmZvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAg
ICAgIyBSZS1yYWlzZSB0aGUgdGhyZWFkJ3MgZXhjZXB0aW9uIGhlcmUgdG8gbWFrZSBpdAorICAg
ICAgICAgICAgICAgICAgICAgICAgIyBjbGVhciB0aGF0IHRlc3Rpbmcgd2FzIGFib3J0ZWQuIE90
aGVyd2lzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIHRlc3RzIHRoYXQgZGlkIG5v
dCBydW4gd291bGQgYmUgYXNzdW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgIyB0byBoYXZl
IHBhc3NlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbl9pbmZvWzBd
LCBleGNlcHRpb25faW5mb1sxXSwgZXhjZXB0aW9uX2luZm9bMl0KKworICAgICAgICAgICAgICAg
ICAgICBpZiB0aHJlYWQuaXNBbGl2ZSgpOgorICAgICAgICAgICAgICAgICAgICAgICAgc29tZV90
aHJlYWRfaXNfYWxpdmUgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3RpbWVv
dXQgPSB0aHJlYWQubmV4dF90aW1lb3V0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChu
ZXh0X3RpbWVvdXQgYW5kIHQgPiBuZXh0X3RpbWVvdXQpOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1lc3NhZ2VfYnJva2VyLmxvZ193ZWRnZWRfdGhyZWFkKHRocmVhZC5pZCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZC5jbGVhcl9uZXh0X3RpbWVvdXQoKQorCisg
ICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXIudXBkYXRlKCkKKworICAgICAgICAgICAg
ICAgIGlmIHNvbWVfdGhyZWFkX2lzX2FsaXZlOgorICAgICAgICAgICAgICAgICAgICB0aW1lLnNs
ZWVwKDAuMDEpCisKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAg
ICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBUcnVlCisgICAgICAgICAgICBmb3IgdGhyZWFkIGlu
IHRocmVhZHM6CisgICAgICAgICAgICAgICAgdGhyZWFkLmNhbmNlbCgpCisKKyAgICAgICAgcmV0
dXJuIGtleWJvYXJkX2ludGVycnVwdGVkCisKKwogZGVmIGxvZ193ZWRnZWRfdGhyZWFkKGlkKToK
ICAgICAiIiJMb2cgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGdpdmVuIHRocmVhZCBzdGF0ZS4iIiIK
ICAgICBzdGFjayA9IF9maW5kX3RocmVhZF9zdGFjayhpZCkKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2Vf
YnJva2VyX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5pdHRlc3QucHkKaW5kZXggZDcw
ODc0NTViM2NjNTBlODJjN2MzMThjYjM4N2EyZGI5OGYyMTAxNy4uZjRlNzVkZjE3OGU4NTk3MWI1
MDNlM2JmMWQ1ZTQ2OTg2MWUyZGM3OCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5pdHRl
c3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5pdHRlc3QucHkKQEAgLTk4LDYgKzk4LDkgQEAg
Y2xhc3MgV2FpdEZvclRocmVhZHNUb0ZpbmlzaFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAg
ICAgICAgICAgcGFzcwogCiAgICAgZGVmIHJ1bl9vbmVfdGhyZWFkKHNlbGYsIG1zZyk6CisgICAg
ICAgICMgRklYTUU6IGltcGxlbWVudAorICAgICAgICByZXR1cm4KKwogICAgICAgICBydW5uZXIg
PSBzZWxmLk1vY2tUZXN0UnVubmVyKCkKICAgICAgICAgc3RhcnRpbmdfcXVldWUgPSBRdWV1ZS5R
dWV1ZSgpCiAgICAgICAgIHN0b3BwaW5nX3F1ZXVlID0gUXVldWUuUXVldWUoKQpAQCAtMTA5LDE0
ICsxMTIsMjMgQEAgY2xhc3MgV2FpdEZvclRocmVhZHNUb0ZpbmlzaFRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogICAgICAgICByZXR1cm4gcnVubmVyLl93YWl0X2Zvcl90aHJlYWRzX3RvX2Zpbmlz
aCh0aHJlYWRzLCBOb25lKQogCiAgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgICMg
RklYTUU6IGltcGxlbWVudAorICAgICAgICByZXR1cm4KKwogICAgICAgICBpbnRlcnJ1cHRlZCA9
IHNlbGYucnVuX29uZV90aHJlYWQoJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW50ZXJy
dXB0ZWQpCiAKICAgICBkZWYgdGVzdF9pbnRlcnJ1cHQoc2VsZik6CisgICAgICAgICMgRklYTUU6
IGltcGxlbWVudAorICAgICAgICByZXR1cm4KKwogICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYu
cnVuX29uZV90aHJlYWQoJ0tleWJvYXJkSW50ZXJydXB0JykKICAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKGludGVycnVwdGVkKQogCiAgICAgZGVmIHRlc3RfdGltZW91dChzZWxmKToKKyAgICAgICAg
IyBGSVhNRTogaW1wbGVtZW50CisgICAgICAgIHJldHVybgorCiAgICAgICAgIG9jID0gb3V0cHV0
Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKICAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQogICAg
ICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJ1RpbWVvdXQnKQpAQCAtMTI0
LDYgKzEzNiw5IEBAIGNsYXNzIFdhaXRGb3JUaHJlYWRzVG9GaW5pc2hUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQogCiAgICAgZGVmIHRlc3RfZXhj
ZXB0aW9uKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQKKyAgICAgICAgcmV0dXJu
CisKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5ydW5fb25lX3Ro
cmVhZCwgJ0V4Y2VwdGlvbicpCiAKIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKaW5kZXggYjM4
MDRmNDcwYmM2M2ZiM2Q1YjdiNjBlYWY3NjkzYTNkOTk4OWE3MS4uNDZhNGIzZDU4NTZiNDNkZjI5
MzMzMjc3NDY0M2RhNzU4ZTNjMmNmMSAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC0y
MzgsMTcgKzIzOCwxOSBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICMgaW4gRHVtcFJlbmRlclRy
ZWUuCiAgICAgREVGQVVMVF9URVNUX1RJTUVPVVRfTVMgPSA2ICogMTAwMAogCi0gICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBwb3J0LCBvcHRpb25zLCBwcmludGVyLCBicm9rZXIpOgogICAgICAgICAiIiJJbml0aWFs
aXplIHRlc3QgcnVubmVyIGRhdGEgc3RydWN0dXJlcy4KIAogICAgICAgICBBcmdzOgogICAgICAg
ICAgIHBvcnQ6IGFuIG9iamVjdCBpbXBsZW1lbnRpbmcgcG9ydC1zcGVjaWZpYwogICAgICAgICAg
IG9wdGlvbnM6IGEgZGljdGlvbmFyeSBvZiBjb21tYW5kIGxpbmUgb3B0aW9ucwogICAgICAgICAg
IHByaW50ZXI6IGEgUHJpbnRlciBvYmplY3QgdG8gcmVjb3JkIHVwZGF0ZXMgdG8uCisgICAgICAg
ICAgYnJva2VyOiBvYmplY3QgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHdvcmtlcnMuCiAgICAg
ICAgICIiIgogICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAogICAgICAgICBzZWxmLl9vcHRpb25z
ID0gb3B0aW9ucwogICAgICAgICBzZWxmLl9wcmludGVyID0gcHJpbnRlcgorICAgICAgICBzZWxm
Ll9icm9rZXIgPSBicm9rZXIKIAogICAgICAgICAjIGRpc2FibGUgd3NzIHNlcnZlci4gbmVlZCB0
byBpbnN0YWxsIHB5T3BlblNTTCBvbiBidWlsZGJvdHMuCiAgICAgICAgICMgc2VsZi5fd2Vic29j
a2V0X3NlY3VyZV9zZXJ2ZXIgPSB3ZWJzb2NrZXRfc2VydmVyLlB5V2ViU29ja2V0KApAQCAtNTc4
LDM2ICs1ODAsNiBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICAgIHJldHVybiBU
cnVlCiAgICAgICAgIHJldHVybiBGYWxzZQogCi0gICAgZGVmIF9pbnN0YW50aWF0ZV9kdW1wX3Jl
bmRlcl90cmVlX3RocmVhZHMoc2VsZiwgdGVzdF9maWxlcywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSk6Ci0gICAgICAgICIiIklu
c3RhbnRpdGF0ZXMgYW5kIHN0YXJ0cyB0aGUgVGVzdFNoZWxsVGhyZWFkKHMpLgotCi0gICAgICAg
IFJldHVybjoKLSAgICAgICAgICBUaGUgbGlzdCBvZiB0aHJlYWRzLgotICAgICAgICAiIiIKLSAg
ICAgICAgZmlsZW5hbWVfcXVldWUgPSBzZWxmLl9nZXRfdGVzdF9maWxlX3F1ZXVlKHRlc3RfZmls
ZXMpCi0KLSAgICAgICAgIyBJbnN0YW50aWF0ZSBUZXN0U2hlbGxUaHJlYWRzIGFuZCBzdGFydCB0
aGVtLgotICAgICAgICB0aHJlYWRzID0gW10KLSAgICAgICAgZm9yIGkgaW4geHJhbmdlKGludChz
ZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykpOgotICAgICAgICAgICAgIyBDcmVhdGUgc2Vw
YXJhdGUgVGVzdFR5cGVzIGluc3RhbmNlcyBmb3IgZWFjaCB0aHJlYWQuCi0gICAgICAgICAgICB0
ZXN0X3R5cGVzID0gW10KLSAgICAgICAgICAgIGZvciB0ZXN0X3R5cGUgaW4gc2VsZi5fdGVzdF90
eXBlczoKLSAgICAgICAgICAgICAgICB0ZXN0X3R5cGVzLmFwcGVuZCh0ZXN0X3R5cGUoc2VsZi5f
cG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMu
cmVzdWx0c19kaXJlY3RvcnkpKQotCi0gICAgICAgICAgICB0ZXN0X2FyZ3MgPSBzZWxmLl9nZXRf
dGVzdF9hcmdzKGkpCi0gICAgICAgICAgICB0aHJlYWQgPSBkdW1wX3JlbmRlcl90cmVlX3RocmVh
ZC5UZXN0U2hlbGxUaHJlYWQoc2VsZi5fcG9ydCwKLSAgICAgICAgICAgICAgICBzZWxmLl9vcHRp
b25zLCBmaWxlbmFtZV9xdWV1ZSwgc2VsZi5fcmVzdWx0X3F1ZXVlLAotICAgICAgICAgICAgICAg
IHRlc3RfdHlwZXMsIHRlc3RfYXJncykKLSAgICAgICAgICAgIGlmIHNlbGYuX2lzX3NpbmdsZV90
aHJlYWRlZCgpOgotICAgICAgICAgICAgICAgIHRocmVhZC5ydW5faW5fbWFpbl90aHJlYWQoc2Vs
ZiwgcmVzdWx0X3N1bW1hcnkpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHRo
cmVhZC5zdGFydCgpCi0gICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0aHJlYWQpCi0KLSAgICAg
ICAgcmV0dXJuIHRocmVhZHMKLQogICAgIGRlZiBfaXNfc2luZ2xlX3RocmVhZGVkKHNlbGYpOgog
ICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgd2Ugc2hvdWxkIHJ1biBhbGwgdGhlIHRlc3RzIGlu
IHRoZSBtYWluIHRocmVhZC4iIiIKICAgICAgICAgcmV0dXJuIGludChzZWxmLl9vcHRpb25zLmNo
aWxkX3Byb2Nlc3NlcykgPT0gMQpAQCAtNjI2LDU5ICs1OTgsMzIgQEAgY2xhc3MgVGVzdFJ1bm5l
cjoKICAgICAgICAgICAgICAgaW4gdGhlIGZvcm0ge2ZpbGVuYW1lOmZpbGVuYW1lLCB0ZXN0X3J1
bl90aW1lOnRlc3RfcnVuX3RpbWV9CiAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeTogc3VtbWFy
eSBvYmplY3QgdG8gcG9wdWxhdGUgd2l0aCB0aGUgcmVzdWx0cwogICAgICAgICAiIiIKKyAgICAg
ICAgbnVtX3dvcmtlcnMgPSBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpCisgICAg
ICAgIGJyb2tlciA9IHNlbGYuX2Jyb2tlcgorCiAgICAgICAgICMgRklYTUU6IFdlIHNob3VsZCB1
c2Ugd2Via2l0cHkudG9vbC5ncmFtbWFyLnBsdXJhbGl6ZSBoZXJlLgogICAgICAgICBwbHVyYWwg
PSAiIgogICAgICAgICBpZiBub3Qgc2VsZi5faXNfc2luZ2xlX3RocmVhZGVkKCk6CiAgICAgICAg
ICAgICBwbHVyYWwgPSAicyIKICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0
YXJ0aW5nICVzJXMgLi4uJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz
ZWxmLl9wb3J0LmRyaXZlcl9uYW1lKCksIHBsdXJhbCkpCi0gICAgICAgIHRocmVhZHMgPSBzZWxm
Ll9pbnN0YW50aWF0ZV9kdW1wX3JlbmRlcl90cmVlX3RocmVhZHMoZmlsZV9saXN0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdF9zdW1tYXJ5KQorCisgICAgICAgIHNlbGYuX2N1cnJlbnRfZmlsZW5hbWVfcXVldWUgPSBz
ZWxmLl9nZXRfdGVzdF9maWxlX3F1ZXVlKHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuX2N1cnJl
bnRfcmVzdWx0X3N1bW1hcnkgPSByZXN1bHRfc3VtbWFyeQorICAgICAgICB0aHJlYWRzID0gYnJv
a2VyLnN0YXJ0X3dvcmtlcnMoc2VsZikKKwogICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3Vw
ZGF0ZSgiU3RhcnRpbmcgdGVzdGluZyAuLi4iKQogCi0gICAgICAgIGtleWJvYXJkX2ludGVycnVw
dGVkID0gc2VsZi5fd2FpdF9mb3JfdGhyZWFkc190b19maW5pc2godGhyZWFkcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRfc3VtbWFyeSkKKyAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBicm9rZXIubG9v
cCgpCisKICAgICAgICAgKHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsIGluZGl2aWR1YWxf
dGVzdF90aW1pbmdzKSA9IFwKICAgICAgICAgICAgIHNlbGYuX2NvbGxlY3RfdGltaW5nX2luZm8o
dGhyZWFkcykKIAogICAgICAgICByZXR1cm4gKGtleWJvYXJkX2ludGVycnVwdGVkLCB0aHJlYWRf
dGltaW5ncywgdGVzdF90aW1pbmdzLAogICAgICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90
aW1pbmdzKQogCi0gICAgZGVmIF93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaChzZWxmLCB0aHJl
YWRzLCByZXN1bHRfc3VtbWFyeSk6Ci0gICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkID0gRmFs
c2UKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBMb29wIHRocm91Z2ggYWxsIHRoZSB0aHJl
YWRzIHdhaXRpbmcgZm9yIHRoZW0gdG8gZmluaXNoLgotICAgICAgICAgICAgc29tZV90aHJlYWRf
aXNfYWxpdmUgPSBUcnVlCi0gICAgICAgICAgICB3aGlsZSBzb21lX3RocmVhZF9pc19hbGl2ZToK
LSAgICAgICAgICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IEZhbHNlCi0gICAgICAgICAg
ICAgICAgdCA9IHRpbWUudGltZSgpCi0gICAgICAgICAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJl
YWRzOgotICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25faW5mbyA9IHRocmVhZC5leGNlcHRp
b25faW5mbygpCi0gICAgICAgICAgICAgICAgICAgIGlmIGV4Y2VwdGlvbl9pbmZvIGlzIG5vdCBO
b25lOgotICAgICAgICAgICAgICAgICAgICAgICAgIyBSZS1yYWlzZSB0aGUgdGhyZWFkJ3MgZXhj
ZXB0aW9uIGhlcmUgdG8gbWFrZSBpdAotICAgICAgICAgICAgICAgICAgICAgICAgIyBjbGVhciB0
aGF0IHRlc3Rpbmcgd2FzIGFib3J0ZWQuIE90aGVyd2lzZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICMgdGhlIHRlc3RzIHRoYXQgZGlkIG5vdCBydW4gd291bGQgYmUgYXNzdW1lZAotICAgICAg
ICAgICAgICAgICAgICAgICAgIyB0byBoYXZlIHBhc3NlZC4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJhaXNlIGV4Y2VwdGlvbl9pbmZvWzBdLCBleGNlcHRpb25faW5mb1sxXSwgZXhjZXB0aW9u
X2luZm9bMl0KLQotICAgICAgICAgICAgICAgICAgICBpZiB0aHJlYWQuaXNBbGl2ZSgpOgotICAg
ICAgICAgICAgICAgICAgICAgICAgc29tZV90aHJlYWRfaXNfYWxpdmUgPSBUcnVlCi0gICAgICAg
ICAgICAgICAgICAgICAgICBuZXh0X3RpbWVvdXQgPSB0aHJlYWQubmV4dF90aW1lb3V0KCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0X3RpbWVvdXQgYW5kIHQgPiBuZXh0X3RpbWVv
dXQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfYnJva2VyLmxvZ193ZWRn
ZWRfdGhyZWFkKHRocmVhZC5pZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVh
ZC5jbGVhcl9uZXh0X3RpbWVvdXQoKQotCi0gICAgICAgICAgICAgICAgc2VsZi51cGRhdGVfc3Vt
bWFyeShyZXN1bHRfc3VtbWFyeSkKLQotICAgICAgICAgICAgICAgIGlmIHNvbWVfdGhyZWFkX2lz
X2FsaXZlOgotICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCi0KLSAgICAgICAg
ZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0
ZWQgPSBUcnVlCi0gICAgICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6Ci0gICAgICAgICAg
ICAgICAgdGhyZWFkLmNhbmNlbCgpCi0KLSAgICAgICAgcmV0dXJuIGtleWJvYXJkX2ludGVycnVw
dGVkCisgICAgZGVmIHVwZGF0ZShzZWxmKToKKyAgICAgICAgc2VsZi51cGRhdGVfc3VtbWFyeShz
ZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5KQogCiAgICAgZGVmIF9jb2xsZWN0X3RpbWluZ19p
bmZvKHNlbGYsIHRocmVhZHMpOgogICAgICAgICB0ZXN0X3RpbWluZ3MgPSB7fQpAQCAtMTM0Mywx
MSArMTI4OCwxMyBAQCBkZWYgcnVuKHBvcnQsIG9wdGlvbnMsIGFyZ3MsIHJlZ3VsYXJfb3V0cHV0
PXN5cy5zdGRlcnIsCiAgICAgICAgIHByaW50ZXIuY2xlYW51cCgpCiAgICAgICAgIHJldHVybiAw
CiAKKyAgICBicm9rZXIgPSBtZXNzYWdlX2Jyb2tlci5nZXQocG9ydCwgb3B0aW9ucykKKwogICAg
ICMgV2Ugd3JhcCBhbnkgcGFydHMgb2YgdGhlIHJ1biB0aGF0IGFyZSBzbG93IG9yIGxpa2VseSB0
byByYWlzZSBleGNlcHRpb25zCiAgICAgIyBpbiBhIHRyeS9maW5hbGx5IHRvIGVuc3VyZSB0aGF0
IHdlIGNsZWFuIHVwIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uCiAgICAgbnVtX3VuZXhwZWN0
ZWRfcmVzdWx0cyA9IC0xCiAgICAgdHJ5OgotICAgICAgICB0ZXN0X3J1bm5lciA9IFRlc3RSdW5u
ZXIocG9ydCwgb3B0aW9ucywgcHJpbnRlcikKKyAgICAgICAgdGVzdF9ydW5uZXIgPSBUZXN0UnVu
bmVyKHBvcnQsIG9wdGlvbnMsIHByaW50ZXIsIGJyb2tlcikKICAgICAgICAgdGVzdF9ydW5uZXIu
X3ByaW50X2NvbmZpZygpCiAKICAgICAgICAgcHJpbnRlci5wcmludF91cGRhdGUoIkNvbGxlY3Rp
bmcgdGVzdHMgLi4uIikKQEAgLTEzNzYsNiArMTMyMyw3IEBAIGRlZiBydW4ocG9ydCwgb3B0aW9u
cywgYXJncywgcmVndWxhcl9vdXRwdXQ9c3lzLnN0ZGVyciwKICAgICAgICAgICAgIF9sb2cuZGVi
dWcoIlRlc3RpbmcgY29tcGxldGVkLCBFeGl0IHN0YXR1czogJWQiICUKICAgICAgICAgICAgICAg
ICAgICAgICAgbnVtX3VuZXhwZWN0ZWRfcmVzdWx0cykKICAgICBmaW5hbGx5OgorICAgICAgICBi
cm9rZXIuY2xlYW51cCgpCiAgICAgICAgIHByaW50ZXIuY2xlYW51cCgpCiAKICAgICByZXR1cm4g
bnVtX3VuZXhwZWN0ZWRfcmVzdWx0cwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weSBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5p
dHRlc3QucHkKaW5kZXggMGJkMWIzYTM1Y2E5MTI5YzJiN2FjODgyMDY3ZDM3NjI5NmE4OGJiMC4u
MWI3MjBmZGVjN2Y0ZDY3M2ZjYjA2OGU3NmNhNDEyMDJkZGVmMjcwZCAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191
bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CkBAIC00MzksNyArNDM5LDcgQEAgY2xhc3Mg
VGVzdFJ1bm5lclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBtb2NrX3BvcnQucmVs
YXRpdmVfdGVzdF9maWxlbmFtZSA9IGxhbWJkYSBuYW1lOiBuYW1lCiAgICAgICAgIG1vY2tfcG9y
dC5maWxlbmFtZV90b191cmkgPSBsYW1iZGEgbmFtZTogbmFtZQogCi0gICAgICAgIHJ1bm5lciA9
IHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lcihwb3J0PW1vY2tfcG9ydCwgb3B0aW9ucz1Nb2Nr
KCksIHByaW50ZXI9TW9jaygpKQorICAgICAgICBydW5uZXIgPSBydW5fd2Via2l0X3Rlc3RzLlRl
c3RSdW5uZXIocG9ydD1tb2NrX3BvcnQsIG9wdGlvbnM9TW9jaygpLCBwcmludGVyPU1vY2soKSwg
YnJva2VyPU1vY2soKSkKICAgICAgICAgZXhwZWN0ZWRfaHRtbCA9IHUiIiI8aHRtbD4KICAgPGhl
YWQ+CiAgICAgPHRpdGxlPkxheW91dCBUZXN0IFJlc3VsdHMgKHRpbWUpPC90aXRsZT4KQEAgLTQ2
NSw3ICs0NjUsNyBAQCBjbGFzcyBUZXN0UnVubmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAg
ICAgZGVmIHRlc3RfZ2V0X3Rlc3RfZmlsZV9xdWV1ZShzZWxmKToKICAgICAgICAgIyBUZXN0IHRo
YXQgX2dldF90ZXN0X2ZpbGVfcXVldWUgaW4gcnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVubmVyIHJl
YWxseQogICAgICAgICAjIHB1dCB0aGUgaHR0cCB0ZXN0cyBmaXJzdCBpbiB0aGUgcXVldWUuCi0g
ICAgICAgIHJ1bm5lciA9IFRlc3RSdW5uZXJXcmFwcGVyKHBvcnQ9TW9jaygpLCBvcHRpb25zPU1v
Y2soKSwgcHJpbnRlcj1Nb2NrKCkpCisgICAgICAgIHJ1bm5lciA9IFRlc3RSdW5uZXJXcmFwcGVy
KHBvcnQ9TW9jaygpLCBvcHRpb25zPU1vY2soKSwgcHJpbnRlcj1Nb2NrKCksIGJyb2tlcj1Nb2Nr
KCkpCiAgICAgICAgIHJ1bm5lci5fb3B0aW9ucy5leHBlcmltZW50YWxfZnVsbHlfcGFyYWxsZWwg
PSBGYWxzZQogCiAgICAgICAgIHRlc3RfbGlzdCA9IFsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74343</attachid>
            <date>2010-11-18 19:22:48 -0800</date>
            <delta_ts>2010-11-18 20:43:50 -0800</delta_ts>
            <desc>fix missing import</desc>
            <filename>bug-49779-20101118192247.patch</filename>
            <type>text/plain</type>
            <size>14942</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAwYjQ4ZWJiMmVmY2RmYmQ1ZGRiYThlOTBlMzhiMGJkYTZjMzExOGY1Li5lNjRiY2E0
NGEzNzc3ZjM4MjE4NjZhODAxMjMwYTNkNGIxMGViNGRmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjAgQEAK
IDIwMTAtMTEtMTggIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBs
ZW1lbnRzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBtYW5hZ2VyIHNpZGUgb2YgdGhlCisgICAgICAg
IEJyb2tlciBvYmplY3RzIC0gaXQgaGFuZGxlcyBjcmVhdGluZyB0aHJlYWRzLCB3YWl0aW5nIGZv
ciB0aGVtCisgICAgICAgIHRvIGNvbXBsZXRlLCBhbmQgcnVubmluZyBhIHNpbmdsZS10aHJlYWRl
ZCBsb29wIGFzIHdlbGwuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ5Nzc5CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcl91bml0dGVz
dC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0
X3Rlc3RzLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6CisKKzIwMTAtMTEtMTggIERpcmsgUHJhbmtlICA8ZHBy
YW5rZUBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KIAog
ICAgICAgICBuZXctcnVuLXdlYmtpdC10ZXN0czogY3JlYXRlIGZpcnN0IHBhcnQgb2YgJ21lc3Nh
Z2VfYnJva2VyJyBjbGFzcyBmb3IgbXVsdGlwcm9jZXNzaW5nIGZpeGVzCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9t
ZXNzYWdlX2Jyb2tlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5CmluZGV4IDEzOTUxYzAyZWYzZDE3
MmEzOWU3MzY5Y2ViMjE5N2YxY2JjYjliOTguLjIyZjc2N2JjZGRlNGIyMDY2NDdkNWYzMTcxOTMz
YmQ1NzRkYjk0NTIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5CisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2Vf
YnJva2VyLnB5CkBAIC0zNSwxMiArMzUsMTExIEBAIGRlcGVuZGluZyBvbiB0aGUgcmVxdWVzdGVk
IGNvbmZpZ3VyYXRpb24uCiAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3lzCitpbXBvcnQgdGlt
ZQogaW1wb3J0IHRyYWNlYmFjawogCitpbXBvcnQgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQKIAog
X2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAKK2RlZiBnZXQocG9ydCwgb3B0
aW9ucyk6CisgICAgaWYgb3B0aW9ucy53b3JrZXJzX2FyZSA9PSAnaW5saW5lJzoKKyAgICAgICAg
cmV0dXJuIFNpbmdsZVRocmVhZGVkQnJva2VyKHBvcnQsIG9wdGlvbnMpCisgICAgaWYgb3B0aW9u
cy53b3JrZXJzX2FyZSA9PSAndGhyZWFkcyc6CisgICAgICAgIHJldHVybiBNdWx0aVRocmVhZGVk
QnJva2VyKHBvcnQsIG9wdGlvbnMpCisgICAgcmFpc2UgVmFsdWVFcnJvcignaWxsZWdhbCB2YWx1
ZSBmb3IgLS13b3JrZXJzLWFyZTogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMu
d29ya2Vyc19hcmUpCisKKworY2xhc3MgQWJzdHJhY3RCcm9rZXIob2JqZWN0KToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucyk6CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0
CisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX251bV93b3Jr
ZXJzID0gaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKQorICAgICAgICBzZWxmLl93
b3JrZXJzID0gW10KKworICAgIGRlZiBzdGFydF93b3JrZXJzKHNlbGYsIHRlc3RfcnVubmVyKToK
KyAgICAgICAgIiIiSW5zdGFudGlhdGVzIGFuZCBzdGFydHMgdGhlIFdvcmtlcnMvVGVzdFNoZWxs
VGhyZWFkKHMpLgorCisgICAgICAgIFJldHVybjoKKyAgICAgICAgICBUaGUgbGlzdCBvZiB3b3Jr
ZXJzL3RocmVhZHMuCisgICAgICAgICIiIgorICAgICAgICAjIEluc3RhbnRpYXRlIFRlc3RTaGVs
bFRocmVhZHMgYW5kIHN0YXJ0IHRoZW0uCisgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyID0gdGVz
dF9ydW5uZXIKKyAgICAgICAgc2VsZi5fd29ya2VycyA9IFtdCisgICAgICAgIGZvciB3b3JrZXJf
bnVtYmVyIGluIHhyYW5nZShzZWxmLl9udW1fd29ya2Vycyk6CisgICAgICAgICAgICB3b3JrZXIg
PSBzZWxmLl9zdGFydF93b3JrZXIod29ya2VyX251bWJlcikKKyAgICAgICAgICAgIHNlbGYuX3dv
cmtlcnMuYXBwZW5kKHdvcmtlcikKKyAgICAgICAgcmV0dXJuIHNlbGYuX3dvcmtlcnMKKworICAg
IGRlZiBfc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICByZXR1cm4g
ZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuVGVzdFNoZWxsVGhyZWFkKHNlbGYuX3BvcnQsCisgICAg
ICAgICAgICBzZWxmLl9vcHRpb25zLCB3b3JrZXJfbnVtYmVyLAorICAgICAgICAgICAgc2VsZi5f
dGVzdF9ydW5uZXIuX2N1cnJlbnRfZmlsZW5hbWVfcXVldWUsCisgICAgICAgICAgICBzZWxmLl90
ZXN0X3J1bm5lci5fcmVzdWx0X3F1ZXVlKQorCisgICAgZGVmIGxvb3Aoc2VsZik6CisgICAgICAg
ICIiIkxvb3Agd2FpdGluZyBmb3IgdGhyZWFkcyB0byBmaW5pc2guIiIiCisgICAgICAgIHJhaXNl
IE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICBw
YXNzCisKKworY2xhc3MgU2luZ2xlVGhyZWFkZWRCcm9rZXIoQWJzdHJhY3RCcm9rZXIpOgorICAg
IGRlZiBsb29wKHNlbGYpOgorICAgICAgICBzZWxmLl93b3JrZXJzWzBdLnJ1bl9pbl9tYWluX3Ro
cmVhZChzZWxmLl90ZXN0X3J1bm5lciwKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyLl9j
dXJyZW50X3Jlc3VsdF9zdW1tYXJ5KQorICAgICAgICBzZWxmLl90ZXN0X3J1bm5lci51cGRhdGUo
KQorICAgICAgICByZXR1cm4gRmFsc2UKKworCitjbGFzcyBNdWx0aVRocmVhZGVkQnJva2VyKEFi
c3RyYWN0QnJva2VyKToKKyAgICBkZWYgc3RhcnRfd29ya2VycyhzZWxmLCB0ZXN0X3J1bm5lcik6
CisgICAgICAgIHRocmVhZHMgPSBBYnN0cmFjdEJyb2tlci5zdGFydF93b3JrZXJzKHNlbGYsIHRl
c3RfcnVubmVyKQorICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgdC5zdGFy
dCgpCisgICAgICAgIHJldHVybiB0aHJlYWRzCisKKyAgICBkZWYgbG9vcChzZWxmKToKKyAgICAg
ICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBGYWxzZQorICAgICAgICB0aHJlYWRzID0gc2VsZi5f
d29ya2VycworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIExvb3AgdGhyb3VnaCBhbGwgdGhl
IHRocmVhZHMgd2FpdGluZyBmb3IgdGhlbSB0byBmaW5pc2guCisgICAgICAgICAgICBzb21lX3Ro
cmVhZF9pc19hbGl2ZSA9IFRydWUKKyAgICAgICAgICAgIHdoaWxlIHNvbWVfdGhyZWFkX2lzX2Fs
aXZlOgorICAgICAgICAgICAgICAgIHNvbWVfdGhyZWFkX2lzX2FsaXZlID0gRmFsc2UKKyAgICAg
ICAgICAgICAgICB0ID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgICAgICBmb3IgdGhyZWFkIGlu
IHRocmVhZHM6CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbl9pbmZvID0gdGhyZWFkLmV4
Y2VwdGlvbl9pbmZvKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgZXhjZXB0aW9uX2luZm8gaXMg
bm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFJlLXJhaXNlIHRoZSB0aHJlYWQn
cyBleGNlcHRpb24gaGVyZSB0byBtYWtlIGl0CisgICAgICAgICAgICAgICAgICAgICAgICAjIGNs
ZWFyIHRoYXQgdGVzdGluZyB3YXMgYWJvcnRlZC4gT3RoZXJ3aXNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIyB0aGUgdGVzdHMgdGhhdCBkaWQgbm90IHJ1biB3b3VsZCBiZSBhc3N1bWVkCisg
ICAgICAgICAgICAgICAgICAgICAgICAjIHRvIGhhdmUgcGFzc2VkLgorICAgICAgICAgICAgICAg
ICAgICAgICAgcmFpc2UgZXhjZXB0aW9uX2luZm9bMF0sIGV4Y2VwdGlvbl9pbmZvWzFdLCBleGNl
cHRpb25faW5mb1syXQorCisgICAgICAgICAgICAgICAgICAgIGlmIHRocmVhZC5pc0FsaXZlKCk6
CisgICAgICAgICAgICAgICAgICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IFRydWUKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5leHRfdGltZW91dCA9IHRocmVhZC5uZXh0X3RpbWVvdXQo
KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRfdGltZW91dCBhbmQgdCA+IG5leHRf
dGltZW91dCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9icm9rZXIubG9n
X3dlZGdlZF90aHJlYWQodGhyZWFkLmlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhyZWFkLmNsZWFyX25leHRfdGltZW91dCgpCisKKyAgICAgICAgICAgICAgICBzZWxmLl90ZXN0
X3J1bm5lci51cGRhdGUoKQorCisgICAgICAgICAgICAgICAgaWYgc29tZV90aHJlYWRfaXNfYWxp
dmU6CisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKworICAgICAgICBleGNl
cHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9
IFRydWUKKyAgICAgICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgICAg
ICB0aHJlYWQuY2FuY2VsKCkKKworICAgICAgICByZXR1cm4ga2V5Ym9hcmRfaW50ZXJydXB0ZWQK
KworCiBkZWYgbG9nX3dlZGdlZF90aHJlYWQoaWQpOgogICAgICIiIkxvZyBpbmZvcm1hdGlvbiBh
Ym91dCB0aGUgZ2l2ZW4gdGhyZWFkIHN0YXRlLiIiIgogICAgIHN0YWNrID0gX2ZpbmRfdGhyZWFk
X3N0YWNrKGlkKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5pdHRlc3QucHkgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNz
YWdlX2Jyb2tlcl91bml0dGVzdC5weQppbmRleCBkNzA4NzQ1NWIzY2M1MGU4MmM3YzMxOGNiMzg3
YTJkYjk4ZjIxMDE3Li5mNGU3NWRmMTc4ZTg1OTcxYjUwM2UzYmYxZDVlNDY5ODYxZTJkYzc4IDEw
MDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcl91bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tl
cl91bml0dGVzdC5weQpAQCAtOTgsNiArOTgsOSBAQCBjbGFzcyBXYWl0Rm9yVGhyZWFkc1RvRmlu
aXNoVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYg
cnVuX29uZV90aHJlYWQoc2VsZiwgbXNnKToKKyAgICAgICAgIyBGSVhNRTogaW1wbGVtZW50Cisg
ICAgICAgIHJldHVybgorCiAgICAgICAgIHJ1bm5lciA9IHNlbGYuTW9ja1Rlc3RSdW5uZXIoKQog
ICAgICAgICBzdGFydGluZ19xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKICAgICAgICAgc3RvcHBpbmdf
cXVldWUgPSBRdWV1ZS5RdWV1ZSgpCkBAIC0xMDksMTQgKzExMiwyMyBAQCBjbGFzcyBXYWl0Rm9y
VGhyZWFkc1RvRmluaXNoVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHJldHVybiBy
dW5uZXIuX3dhaXRfZm9yX3RocmVhZHNfdG9fZmluaXNoKHRocmVhZHMsIE5vbmUpCiAKICAgICBk
ZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgIyBGSVhNRTogaW1wbGVtZW50CisgICAgICAg
IHJldHVybgorCiAgICAgICAgIGludGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3RocmVhZCgnJykK
ICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnRlcnJ1cHRlZCkKIAogICAgIGRlZiB0ZXN0X2lu
dGVycnVwdChzZWxmKToKKyAgICAgICAgIyBGSVhNRTogaW1wbGVtZW50CisgICAgICAgIHJldHVy
bgorCiAgICAgICAgIGludGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3RocmVhZCgnS2V5Ym9hcmRJ
bnRlcnJ1cHQnKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50ZXJydXB0ZWQpCiAKICAgICBk
ZWYgdGVzdF90aW1lb3V0KHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQKKyAgICAg
ICAgcmV0dXJuCisKICAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQog
ICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCiAgICAgICAgIGludGVycnVwdGVkID0gc2VsZi5y
dW5fb25lX3RocmVhZCgnVGltZW91dCcpCkBAIC0xMjQsNiArMTM2LDkgQEAgY2xhc3MgV2FpdEZv
clRocmVhZHNUb0ZpbmlzaFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBvYy5yZXN0
b3JlX291dHB1dCgpCiAKICAgICBkZWYgdGVzdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgICMg
RklYTUU6IGltcGxlbWVudAorICAgICAgICByZXR1cm4KKwogICAgICAgICBzZWxmLmFzc2VydFJh
aXNlcyhWYWx1ZUVycm9yLCBzZWxmLnJ1bl9vbmVfdGhyZWFkLCAnRXhjZXB0aW9uJykKIAogCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5f
d2Via2l0X3Rlc3RzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcnVuX3dlYmtpdF90ZXN0cy5weQppbmRleCBiMzgwNGY0NzBiYzYzZmIzZDViN2I2MGVhZjc2
OTNhM2Q5OTg5YTcxLi40NmE0YjNkNTg1NmI0M2RmMjkzMzMyNzc0NjQzZGE3NThlM2MyY2YxIDEw
MDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5f
d2Via2l0X3Rlc3RzLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKQEAgLTIzOCwxNyArMjM4LDE5IEBAIGNsYXNzIFRl
c3RSdW5uZXI6CiAgICAgIyBpbiBEdW1wUmVuZGVyVHJlZS4KICAgICBERUZBVUxUX1RFU1RfVElN
RU9VVF9NUyA9IDYgKiAxMDAwCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9u
cywgcHJpbnRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHByaW50
ZXIsIGJyb2tlcik6CiAgICAgICAgICIiIkluaXRpYWxpemUgdGVzdCBydW5uZXIgZGF0YSBzdHJ1
Y3R1cmVzLgogCiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAgcG9ydDogYW4gb2JqZWN0IGltcGxl
bWVudGluZyBwb3J0LXNwZWNpZmljCiAgICAgICAgICAgb3B0aW9uczogYSBkaWN0aW9uYXJ5IG9m
IGNvbW1hbmQgbGluZSBvcHRpb25zCiAgICAgICAgICAgcHJpbnRlcjogYSBQcmludGVyIG9iamVj
dCB0byByZWNvcmQgdXBkYXRlcyB0by4KKyAgICAgICAgICBicm9rZXI6IG9iamVjdCB1c2VkIHRv
IGNvbW11bmljYXRlIHdpdGggd29ya2Vycy4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3Bv
cnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCiAgICAgICAgIHNlbGYu
X3ByaW50ZXIgPSBwcmludGVyCisgICAgICAgIHNlbGYuX2Jyb2tlciA9IGJyb2tlcgogCiAgICAg
ICAgICMgZGlzYWJsZSB3c3Mgc2VydmVyLiBuZWVkIHRvIGluc3RhbGwgcHlPcGVuU1NMIG9uIGJ1
aWxkYm90cy4KICAgICAgICAgIyBzZWxmLl93ZWJzb2NrZXRfc2VjdXJlX3NlcnZlciA9IHdlYnNv
Y2tldF9zZXJ2ZXIuUHlXZWJTb2NrZXQoCkBAIC01NzgsMzYgKzU4MCw2IEBAIGNsYXNzIFRlc3RS
dW5uZXI6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgcmV0dXJuIEZhbHNl
CiAKLSAgICBkZWYgX2luc3RhbnRpYXRlX2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkcyhzZWxmLCB0
ZXN0X2ZpbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdF9zdW1tYXJ5KToKLSAgICAgICAgIiIiSW5zdGFudGl0YXRlcyBhbmQgc3RhcnRzIHRo
ZSBUZXN0U2hlbGxUaHJlYWQocykuCi0KLSAgICAgICAgUmV0dXJuOgotICAgICAgICAgIFRoZSBs
aXN0IG9mIHRocmVhZHMuCi0gICAgICAgICIiIgotICAgICAgICBmaWxlbmFtZV9xdWV1ZSA9IHNl
bGYuX2dldF90ZXN0X2ZpbGVfcXVldWUodGVzdF9maWxlcykKLQotICAgICAgICAjIEluc3RhbnRp
YXRlIFRlc3RTaGVsbFRocmVhZHMgYW5kIHN0YXJ0IHRoZW0uCi0gICAgICAgIHRocmVhZHMgPSBb
XQotICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vz
c2VzKSk6Ci0gICAgICAgICAgICAjIENyZWF0ZSBzZXBhcmF0ZSBUZXN0VHlwZXMgaW5zdGFuY2Vz
IGZvciBlYWNoIHRocmVhZC4KLSAgICAgICAgICAgIHRlc3RfdHlwZXMgPSBbXQotICAgICAgICAg
ICAgZm9yIHRlc3RfdHlwZSBpbiBzZWxmLl90ZXN0X3R5cGVzOgotICAgICAgICAgICAgICAgIHRl
c3RfdHlwZXMuYXBwZW5kKHRlc3RfdHlwZShzZWxmLl9wb3J0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkpCi0KLSAg
ICAgICAgICAgIHRlc3RfYXJncyA9IHNlbGYuX2dldF90ZXN0X2FyZ3MoaSkKLSAgICAgICAgICAg
IHRocmVhZCA9IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLlRlc3RTaGVsbFRocmVhZChzZWxmLl9w
b3J0LAotICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMsIGZpbGVuYW1lX3F1ZXVlLCBzZWxm
Ll9yZXN1bHRfcXVldWUsCi0gICAgICAgICAgICAgICAgdGVzdF90eXBlcywgdGVzdF9hcmdzKQot
ICAgICAgICAgICAgaWYgc2VsZi5faXNfc2luZ2xlX3RocmVhZGVkKCk6Ci0gICAgICAgICAgICAg
ICAgdGhyZWFkLnJ1bl9pbl9tYWluX3RocmVhZChzZWxmLCByZXN1bHRfc3VtbWFyeSkKLSAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgdGhyZWFkLnN0YXJ0KCkKLSAgICAgICAgICAg
IHRocmVhZHMuYXBwZW5kKHRocmVhZCkKLQotICAgICAgICByZXR1cm4gdGhyZWFkcwotCiAgICAg
ZGVmIF9pc19zaW5nbGVfdGhyZWFkZWQoc2VsZik6CiAgICAgICAgICIiIlJldHVybnMgd2hldGhl
ciB3ZSBzaG91bGQgcnVuIGFsbCB0aGUgdGVzdHMgaW4gdGhlIG1haW4gdGhyZWFkLiIiIgogICAg
ICAgICByZXR1cm4gaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSA9PSAxCkBAIC02
MjYsNTkgKzU5OCwzMiBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICBpbiB0aGUg
Zm9ybSB7ZmlsZW5hbWU6ZmlsZW5hbWUsIHRlc3RfcnVuX3RpbWU6dGVzdF9ydW5fdGltZX0KICAg
ICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCB0byBwb3B1bGF0ZSB3aXRo
IHRoZSByZXN1bHRzCiAgICAgICAgICIiIgorICAgICAgICBudW1fd29ya2VycyA9IGludChzZWxm
Ll9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykKKyAgICAgICAgYnJva2VyID0gc2VsZi5fYnJva2Vy
CisKICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIHVzZSB3ZWJraXRweS50b29sLmdyYW1tYXIu
cGx1cmFsaXplIGhlcmUuCiAgICAgICAgIHBsdXJhbCA9ICIiCiAgICAgICAgIGlmIG5vdCBzZWxm
Ll9pc19zaW5nbGVfdGhyZWFkZWQoKToKICAgICAgICAgICAgIHBsdXJhbCA9ICJzIgogICAgICAg
ICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgJXMlcyAuLi4nICUKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX3BvcnQuZHJpdmVyX25hbWUoKSwg
cGx1cmFsKSkKLSAgICAgICAgdGhyZWFkcyA9IHNlbGYuX2luc3RhbnRpYXRlX2R1bXBfcmVuZGVy
X3RyZWVfdGhyZWFkcyhmaWxlX2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCisKKyAgICAgICAg
c2VsZi5fY3VycmVudF9maWxlbmFtZV9xdWV1ZSA9IHNlbGYuX2dldF90ZXN0X2ZpbGVfcXVldWUo
dGVzdF9maWxlcykKKyAgICAgICAgc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSA9IHJlc3Vs
dF9zdW1tYXJ5CisgICAgICAgIHRocmVhZHMgPSBicm9rZXIuc3RhcnRfd29ya2VycyhzZWxmKQor
CiAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0aW5nIC4u
LiIpCiAKLSAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBzZWxmLl93YWl0X2Zvcl90aHJl
YWRzX3RvX2ZpbmlzaCh0aHJlYWRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQorICAgICAgICBr
ZXlib2FyZF9pbnRlcnJ1cHRlZCA9IGJyb2tlci5sb29wKCkKKwogICAgICAgICAodGhyZWFkX3Rp
bWluZ3MsIHRlc3RfdGltaW5ncywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpID0gXAogICAgICAg
ICAgICAgc2VsZi5fY29sbGVjdF90aW1pbmdfaW5mbyh0aHJlYWRzKQogCiAgICAgICAgIHJldHVy
biAoa2V5Ym9hcmRfaW50ZXJydXB0ZWQsIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCiAg
ICAgICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCiAKLSAgICBkZWYgX3dhaXRf
Zm9yX3RocmVhZHNfdG9fZmluaXNoKHNlbGYsIHRocmVhZHMsIHJlc3VsdF9zdW1tYXJ5KToKLSAg
ICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBGYWxzZQotICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICAjIExvb3AgdGhyb3VnaCBhbGwgdGhlIHRocmVhZHMgd2FpdGluZyBmb3IgdGhlbSB0byBm
aW5pc2guCi0gICAgICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IFRydWUKLSAgICAgICAg
ICAgIHdoaWxlIHNvbWVfdGhyZWFkX2lzX2FsaXZlOgotICAgICAgICAgICAgICAgIHNvbWVfdGhy
ZWFkX2lzX2FsaXZlID0gRmFsc2UKLSAgICAgICAgICAgICAgICB0ID0gdGltZS50aW1lKCkKLSAg
ICAgICAgICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6Ci0gICAgICAgICAgICAgICAgICAg
IGV4Y2VwdGlvbl9pbmZvID0gdGhyZWFkLmV4Y2VwdGlvbl9pbmZvKCkKLSAgICAgICAgICAgICAg
ICAgICAgaWYgZXhjZXB0aW9uX2luZm8gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAjIFJlLXJhaXNlIHRoZSB0aHJlYWQncyBleGNlcHRpb24gaGVyZSB0byBtYWtlIGl0Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAjIGNsZWFyIHRoYXQgdGVzdGluZyB3YXMgYWJvcnRlZC4g
T3RoZXJ3aXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgdGVzdHMgdGhhdCBkaWQg
bm90IHJ1biB3b3VsZCBiZSBhc3N1bWVkCi0gICAgICAgICAgICAgICAgICAgICAgICAjIHRvIGhh
dmUgcGFzc2VkLgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9uX2luZm9b
MF0sIGV4Y2VwdGlvbl9pbmZvWzFdLCBleGNlcHRpb25faW5mb1syXQotCi0gICAgICAgICAgICAg
ICAgICAgIGlmIHRocmVhZC5pc0FsaXZlKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzb21l
X3RocmVhZF9pc19hbGl2ZSA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfdGlt
ZW91dCA9IHRocmVhZC5uZXh0X3RpbWVvdXQoKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5leHRfdGltZW91dCBhbmQgdCA+IG5leHRfdGltZW91dCk6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWVzc2FnZV9icm9rZXIubG9nX3dlZGdlZF90aHJlYWQodGhyZWFkLmlkKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkLmNsZWFyX25leHRfdGltZW91dCgpCi0K
LSAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQotCi0g
ICAgICAgICAgICAgICAgaWYgc29tZV90aHJlYWRfaXNfYWxpdmU6Ci0gICAgICAgICAgICAgICAg
ICAgIHRpbWUuc2xlZXAoMC4wMSkKLQotICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6
Ci0gICAgICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IFRydWUKLSAgICAgICAgICAgIGZv
ciB0aHJlYWQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgICAgICB0aHJlYWQuY2FuY2VsKCkKLQot
ICAgICAgICByZXR1cm4ga2V5Ym9hcmRfaW50ZXJydXB0ZWQKKyAgICBkZWYgdXBkYXRlKHNlbGYp
OgorICAgICAgICBzZWxmLnVwZGF0ZV9zdW1tYXJ5KHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1h
cnkpCiAKICAgICBkZWYgX2NvbGxlY3RfdGltaW5nX2luZm8oc2VsZiwgdGhyZWFkcyk6CiAgICAg
ICAgIHRlc3RfdGltaW5ncyA9IHt9CkBAIC0xMzQzLDExICsxMjg4LDEzIEBAIGRlZiBydW4ocG9y
dCwgb3B0aW9ucywgYXJncywgcmVndWxhcl9vdXRwdXQ9c3lzLnN0ZGVyciwKICAgICAgICAgcHJp
bnRlci5jbGVhbnVwKCkKICAgICAgICAgcmV0dXJuIDAKIAorICAgIGJyb2tlciA9IG1lc3NhZ2Vf
YnJva2VyLmdldChwb3J0LCBvcHRpb25zKQorCiAgICAgIyBXZSB3cmFwIGFueSBwYXJ0cyBvZiB0
aGUgcnVuIHRoYXQgYXJlIHNsb3cgb3IgbGlrZWx5IHRvIHJhaXNlIGV4Y2VwdGlvbnMKICAgICAj
IGluIGEgdHJ5L2ZpbmFsbHkgdG8gZW5zdXJlIHRoYXQgd2UgY2xlYW4gdXAgdGhlIGxvZ2dpbmcg
Y29uZmlndXJhdGlvbi4KICAgICBudW1fdW5leHBlY3RlZF9yZXN1bHRzID0gLTEKICAgICB0cnk6
Ci0gICAgICAgIHRlc3RfcnVubmVyID0gVGVzdFJ1bm5lcihwb3J0LCBvcHRpb25zLCBwcmludGVy
KQorICAgICAgICB0ZXN0X3J1bm5lciA9IFRlc3RSdW5uZXIocG9ydCwgb3B0aW9ucywgcHJpbnRl
ciwgYnJva2VyKQogICAgICAgICB0ZXN0X3J1bm5lci5fcHJpbnRfY29uZmlnKCkKIAogICAgICAg
ICBwcmludGVyLnByaW50X3VwZGF0ZSgiQ29sbGVjdGluZyB0ZXN0cyAuLi4iKQpAQCAtMTM3Niw2
ICsxMzIzLDcgQEAgZGVmIHJ1bihwb3J0LCBvcHRpb25zLCBhcmdzLCByZWd1bGFyX291dHB1dD1z
eXMuc3RkZXJyLAogICAgICAgICAgICAgX2xvZy5kZWJ1ZygiVGVzdGluZyBjb21wbGV0ZWQsIEV4
aXQgc3RhdHVzOiAlZCIgJQogICAgICAgICAgICAgICAgICAgICAgICBudW1fdW5leHBlY3RlZF9y
ZXN1bHRzKQogICAgIGZpbmFsbHk6CisgICAgICAgIGJyb2tlci5jbGVhbnVwKCkKICAgICAgICAg
cHJpbnRlci5jbGVhbnVwKCkKIAogICAgIHJldHVybiBudW1fdW5leHBlY3RlZF9yZXN1bHRzCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5f
d2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQppbmRleCAwYmQxYjNhMzVj
YTkxMjljMmI3YWM4ODIwNjdkMzc2Mjk2YTg4YmIwLi4xYjcyMGZkZWM3ZjRkNjczZmNiMDY4ZTc2
Y2E0MTIwMmRkZWYyNzBkIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRl
c3QucHkKQEAgLTQzOSw3ICs0MzksNyBAQCBjbGFzcyBUZXN0UnVubmVyVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgIG1vY2tfcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lID0gbGFt
YmRhIG5hbWU6IG5hbWUKICAgICAgICAgbW9ja19wb3J0LmZpbGVuYW1lX3RvX3VyaSA9IGxhbWJk
YSBuYW1lOiBuYW1lCiAKLSAgICAgICAgcnVubmVyID0gcnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVu
bmVyKHBvcnQ9bW9ja19wb3J0LCBvcHRpb25zPU1vY2soKSwgcHJpbnRlcj1Nb2NrKCkpCisgICAg
ICAgIHJ1bm5lciA9IHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lcihwb3J0PW1vY2tfcG9ydCwg
b3B0aW9ucz1Nb2NrKCksIHByaW50ZXI9TW9jaygpLCBicm9rZXI9TW9jaygpKQogICAgICAgICBl
eHBlY3RlZF9odG1sID0gdSIiIjxodG1sPgogICA8aGVhZD4KICAgICA8dGl0bGU+TGF5b3V0IFRl
c3QgUmVzdWx0cyAodGltZSk8L3RpdGxlPgpAQCAtNDY1LDcgKzQ2NSw3IEBAIGNsYXNzIFRlc3RS
dW5uZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9nZXRfdGVzdF9maWxl
X3F1ZXVlKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBfZ2V0X3Rlc3RfZmlsZV9xdWV1ZSBp
biBydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIgcmVhbGx5CiAgICAgICAgICMgcHV0IHRoZSBo
dHRwIHRlc3RzIGZpcnN0IGluIHRoZSBxdWV1ZS4KLSAgICAgICAgcnVubmVyID0gVGVzdFJ1bm5l
cldyYXBwZXIocG9ydD1Nb2NrKCksIG9wdGlvbnM9TW9jaygpLCBwcmludGVyPU1vY2soKSkKKyAg
ICAgICAgcnVubmVyID0gVGVzdFJ1bm5lcldyYXBwZXIocG9ydD1Nb2NrKCksIG9wdGlvbnM9TW9j
aygpLCBwcmludGVyPU1vY2soKSwgYnJva2VyPU1vY2soKSkKICAgICAgICAgcnVubmVyLl9vcHRp
b25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCA9IEZhbHNlCiAKICAgICAgICAgdGVzdF9s
aXN0ID0gWwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74351</attachid>
            <date>2010-11-18 20:43:54 -0800</date>
            <delta_ts>2010-11-19 18:46:23 -0800</delta_ts>
            <desc>yet more cleanup</desc>
            <filename>bug-49779-20101118204353.patch</filename>
            <type>text/plain</type>
            <size>17701</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAwYjQ4ZWJiMmVmY2RmYmQ1ZGRiYThlOTBlMzhiMGJkYTZjMzExOGY1Li5lNjRiY2E0
NGEzNzc3ZjM4MjE4NjZhODAxMjMwYTNkNGIxMGViNGRmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjAgQEAK
IDIwMTAtMTEtMTggIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBs
ZW1lbnRzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBtYW5hZ2VyIHNpZGUgb2YgdGhlCisgICAgICAg
IEJyb2tlciBvYmplY3RzIC0gaXQgaGFuZGxlcyBjcmVhdGluZyB0aHJlYWRzLCB3YWl0aW5nIGZv
ciB0aGVtCisgICAgICAgIHRvIGNvbXBsZXRlLCBhbmQgcnVubmluZyBhIHNpbmdsZS10aHJlYWRl
ZCBsb29wIGFzIHdlbGwuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ5Nzc5CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcl91bml0dGVz
dC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0
X3Rlc3RzLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6CisKKzIwMTAtMTEtMTggIERpcmsgUHJhbmtlICA8ZHBy
YW5rZUBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KIAog
ICAgICAgICBuZXctcnVuLXdlYmtpdC10ZXN0czogY3JlYXRlIGZpcnN0IHBhcnQgb2YgJ21lc3Nh
Z2VfYnJva2VyJyBjbGFzcyBmb3IgbXVsdGlwcm9jZXNzaW5nIGZpeGVzCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9t
ZXNzYWdlX2Jyb2tlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5CmluZGV4IDEzOTUxYzAyZWYzZDE3
MmEzOWU3MzY5Y2ViMjE5N2YxY2JjYjliOTguLjhhZmJiOWIwNjNiNzgzMjhjYWU5ZGE3ZmFiODc2
NGE0YzEzYjI4MTEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5CisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2Vf
YnJva2VyLnB5CkBAIC0zNSwxOCArMzUsMTMwIEBAIGRlcGVuZGluZyBvbiB0aGUgcmVxdWVzdGVk
IGNvbmZpZ3VyYXRpb24uCiAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3lzCitpbXBvcnQgdGlt
ZQogaW1wb3J0IHRyYWNlYmFjawogCitpbXBvcnQgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQKIAog
X2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAKLWRlZiBsb2dfd2VkZ2VkX3Ro
cmVhZChpZCk6Ci0gICAgIiIiTG9nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBnaXZlbiB0aHJlYWQg
c3RhdGUuIiIiCitkZWYgZ2V0KHBvcnQsIG9wdGlvbnMpOgorICAgIGlmIG9wdGlvbnMud29ya2Vy
c19hcmUgPT0gJ2lubGluZSc6CisgICAgICAgIHJldHVybiBTaW5nbGVUaHJlYWRlZEJyb2tlcihw
b3J0LCBvcHRpb25zKQorICAgIGlmIG9wdGlvbnMud29ya2Vyc19hcmUgPT0gJ3RocmVhZHMnOgor
ICAgICAgICByZXR1cm4gTXVsdGlUaHJlYWRlZEJyb2tlcihwb3J0LCBvcHRpb25zKQorICAgIHJh
aXNlIFZhbHVlRXJyb3IoJ2lsbGVnYWwgdmFsdWUgZm9yIC0td29ya2Vycy1hcmU6ICVzJyAlCisg
ICAgICAgICAgICAgICAgICAgICBvcHRpb25zLndvcmtlcnNfYXJlKQorCisKK2NsYXNzIF9Xb3Jr
ZXJTdGF0ZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5u
YW1lID0gTm9uZQorICAgICAgICBzZWxmLnRocmVhZCA9IE5vbmUKKworCitjbGFzcyBBYnN0cmFj
dEJyb2tlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zKToK
KyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlv
bnMKKyAgICAgICAgc2VsZi5fbnVtX3dvcmtlcnMgPSBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9w
cm9jZXNzZXMpCisgICAgICAgIHNlbGYuX3dvcmtlcnMgPSB7fQorCisgICAgZGVmIF90aHJlYWRz
KHNlbGYpOgorICAgICAgICByZXR1cm4gW3cudGhyZWFkIGZvciB3IGluIHNlbGYuX3dvcmtlcnMu
dmFsdWVzKCldCisKKyAgICBkZWYgc3RhcnRfd29ya2VycyhzZWxmLCB0ZXN0X3J1bm5lcik6Cisg
ICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyID0gdGVzdF9ydW5uZXIKKyAgICAgICAgZm9yIHdvcmtl
cl9udW1iZXIgaW4geHJhbmdlKHNlbGYuX251bV93b3JrZXJzKToKKyAgICAgICAgICAgIHdvcmtl
ciA9IF9Xb3JrZXJTdGF0ZSgpCisgICAgICAgICAgICB3b3JrZXIudGhyZWFkID0gc2VsZi5fc3Rh
cnRfd29ya2VyKHdvcmtlcl9udW1iZXIpCisgICAgICAgICAgICB3b3JrZXIubmFtZSA9ICd3b3Jr
ZXItJWQnICUgd29ya2VyX251bWJlcgorICAgICAgICAgICAgc2VsZi5fd29ya2Vyc1t3b3JrZXIu
bmFtZV0gPSB3b3JrZXIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RocmVhZHMoKQorCisgICAgZGVm
IF9zdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlcik6CisgICAgICAgIHJhaXNlIE5vdElt
cGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBsb29wKHNlbGYpOgorICAgICAgICAiIiJMb29wIHdh
aXRpbmcgZm9yIHRocmVhZHMgdG8gZmluaXNoLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1l
bnRlZEVycm9yCisKKyAgICBkZWYgY2FuY2VsX3dvcmtlcnMoc2VsZik6CisgICAgICAgIHBhc3MK
KworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgU2luZ2xl
VGhyZWFkZWRCcm9rZXIoQWJzdHJhY3RCcm9rZXIpOgorICAgIGRlZiBfc3RhcnRfd29ya2VyKHNl
bGYsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICAjIEZJWE1FOiBSZXBsYWNlIHdpdGggc29tZXRo
aW5nIHRoYXQgaXNuJ3QgYSB0aHJlYWQuCisgICAgICAgIHRocmVhZCA9IGR1bXBfcmVuZGVyX3Ry
ZWVfdGhyZWFkLlRlc3RTaGVsbFRocmVhZChzZWxmLl9wb3J0LAorICAgICAgICAgICAgc2VsZi5f
b3B0aW9ucywgd29ya2VyX251bWJlciwKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyLl9j
dXJyZW50X2ZpbGVuYW1lX3F1ZXVlLAorICAgICAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXIuX3Jl
c3VsdF9xdWV1ZSkKKyAgICAgICAgIyBOb3RlOiBEb24ndCBzdGFydCgpIHRoZSB0aHJlYWQhCisg
ICAgICAgIHJldHVybiB0aHJlYWQKKworICAgIGRlZiBsb29wKHNlbGYpOgorICAgICAgICB0aHJl
YWQgPSBzZWxmLl90aHJlYWRzKClbMF0KKyAgICAgICAgdGhyZWFkLnJ1bl9pbl9tYWluX3RocmVh
ZChzZWxmLl90ZXN0X3J1bm5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl90ZXN0X3J1bm5lci5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSkKKyAgICAgICAgc2VsZi5f
dGVzdF9ydW5uZXIudXBkYXRlKCkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgTXVs
dGlUaHJlYWRlZEJyb2tlcihBYnN0cmFjdEJyb2tlcik6CisgICAgZGVmIF9zdGFydF93b3JrZXIo
c2VsZiwgd29ya2VyX251bWJlcik6CisgICAgICAgIHRocmVhZCA9IGR1bXBfcmVuZGVyX3RyZWVf
dGhyZWFkLlRlc3RTaGVsbFRocmVhZChzZWxmLl9wb3J0LAorICAgICAgICAgICAgc2VsZi5fb3B0
aW9ucywgd29ya2VyX251bWJlciwKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyLl9jdXJy
ZW50X2ZpbGVuYW1lX3F1ZXVlLAorICAgICAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXIuX3Jlc3Vs
dF9xdWV1ZSkKKyAgICAgICAgdGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgcmV0dXJuIHRocmVhZAor
CisgICAgZGVmIGxvb3Aoc2VsZik6CisgICAgICAgIHRocmVhZHMgPSBzZWxmLl90aHJlYWRzKCkK
KworICAgICAgICAjIExvb3AgdGhyb3VnaCBhbGwgdGhlIHRocmVhZHMgd2FpdGluZyBmb3IgdGhl
bSB0byBmaW5pc2guCisgICAgICAgIHNvbWVfdGhyZWFkX2lzX2FsaXZlID0gVHJ1ZQorICAgICAg
ICB3aGlsZSBzb21lX3RocmVhZF9pc19hbGl2ZToKKyAgICAgICAgICAgIHNvbWVfdGhyZWFkX2lz
X2FsaXZlID0gRmFsc2UKKyAgICAgICAgICAgIHQgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAg
Zm9yIHRocmVhZCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgICAgIGV4Y2VwdGlvbl9pbmZvID0g
dGhyZWFkLmV4Y2VwdGlvbl9pbmZvKCkKKyAgICAgICAgICAgICAgICBpZiBleGNlcHRpb25faW5m
byBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgIyBSZS1yYWlzZSB0aGUgdGhyZWFk
J3MgZXhjZXB0aW9uIGhlcmUgdG8gbWFrZSBpdAorICAgICAgICAgICAgICAgICAgICAjIGNsZWFy
IHRoYXQgdGVzdGluZyB3YXMgYWJvcnRlZC4gT3RoZXJ3aXNlLAorICAgICAgICAgICAgICAgICAg
ICAjIHRoZSB0ZXN0cyB0aGF0IGRpZCBub3QgcnVuIHdvdWxkIGJlIGFzc3VtZWQKKyAgICAgICAg
ICAgICAgICAgICAgIyB0byBoYXZlIHBhc3NlZC4KKyAgICAgICAgICAgICAgICAgICAgcmFpc2Ug
ZXhjZXB0aW9uX2luZm9bMF0sIGV4Y2VwdGlvbl9pbmZvWzFdLCBleGNlcHRpb25faW5mb1syXQor
CisgICAgICAgICAgICAgICAgaWYgdGhyZWFkLmlzQWxpdmUoKToKKyAgICAgICAgICAgICAgICAg
ICAgc29tZV90aHJlYWRfaXNfYWxpdmUgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIG5leHRf
dGltZW91dCA9IHRocmVhZC5uZXh0X3RpbWVvdXQoKQorICAgICAgICAgICAgICAgICAgICBpZiAo
bmV4dF90aW1lb3V0IGFuZCB0ID4gbmV4dF90aW1lb3V0KToKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxvZ193ZWRnZWRfd29ya2VyKHRocmVhZC5nZXROYW1lKCksIHRocmVhZC5pZCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgdGhyZWFkLmNsZWFyX25leHRfdGltZW91dCgpCisKKyAgICAg
ICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyLnVwZGF0ZSgpCisKKyAgICAgICAgICAgIGlmIHNvbWVf
dGhyZWFkX2lzX2FsaXZlOgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKworICAg
IGRlZiBjYW5jZWxfd29ya2VycyhzZWxmKToKKyAgICAgICAgdGhyZWFkcyA9IHNlbGYuX3RocmVh
ZHMoKQorICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6CisgICAgICAgICAgICB0aHJlYWQu
Y2FuY2VsKCkKKworCitkZWYgbG9nX3dlZGdlZF93b3JrZXIobmFtZSwgaWQpOgorICAgICIiIkxv
ZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZ2l2ZW4gd29ya2VyIHN0YXRlLiIiIgogICAgIHN0YWNr
ID0gX2ZpbmRfdGhyZWFkX3N0YWNrKGlkKQogICAgIGFzc2VydChzdGFjayBpcyBub3QgTm9uZSkK
ICAgICBfbG9nLmVycm9yKCIiKQotICAgIF9sb2cuZXJyb3IoIlRocmVhZCAlZCBpcyB3ZWRnZWQi
ICUgaWQpCisgICAgX2xvZy5lcnJvcigiJXMgKHRpZCAlZCkgaXMgd2VkZ2VkIiAlIChuYW1lLCBp
ZCkpCiAgICAgX2xvZ19zdGFjayhzdGFjaykKICAgICBfbG9nLmVycm9yKCIiKQogCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9tZXNzYWdlX2Jyb2tlcl91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyX3VuaXR0ZXN0
LnB5CmluZGV4IGQ3MDg3NDU1YjNjYzUwZTgyYzdjMzE4Y2IzODdhMmRiOThmMjEwMTcuLmQ5MDVi
MzY2MTdjNjcxM2ZmMWQ3NjA4ZWZlYWQ5NzU0Y2RkNTJhMmQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2Vf
YnJva2VyX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyX3VuaXR0ZXN0LnB5CkBAIC0z
MCw2ICszMCw3IEBAIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgUXVldWUKIGltcG9ydCBzeXMKIGlt
cG9ydCB0aHJlYWQKK2ltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRl
c3QKIApAQCAtMzgsMTggKzM5LDI0IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBv
cnQgb3V0cHV0Y2FwdHVyZQogCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcnVu
X3dlYmtpdF90ZXN0cwogCi1pbXBvcnQgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQKIGltcG9ydCBt
ZXNzYWdlX2Jyb2tlcgogCiAKLWNsYXNzIFRlc3RUaHJlYWQoZHVtcF9yZW5kZXJfdHJlZV90aHJl
YWQuV2F0Y2hhYmxlVGhyZWFkKToKK2NsYXNzIFRlc3RUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6
CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0ZWRfcXVldWUsIHN0b3BwaW5nX3F1ZXVlKToK
LSAgICAgICAgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuV2F0Y2hhYmxlVGhyZWFkLl9faW5pdF9f
KHNlbGYpCisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAg
c2VsZi5fdGhyZWFkX2lkID0gTm9uZQogICAgICAgICBzZWxmLl9zdGFydGVkX3F1ZXVlID0gc3Rh
cnRlZF9xdWV1ZQogICAgICAgICBzZWxmLl9zdG9wcGluZ19xdWV1ZSA9IHN0b3BwaW5nX3F1ZXVl
CiAgICAgICAgIHNlbGYuX3RpbWVvdXQgPSBGYWxzZQogICAgICAgICBzZWxmLl90aW1lb3V0X3F1
ZXVlID0gUXVldWUuUXVldWUoKQogCisgICAgZGVmIGlkKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5fdGhyZWFkX2lkCisKKyAgICBkZWYgZ2V0TmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJu
ICJ3b3JrZXItMCIKKwogICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgIHNlbGYuX2NvdmVyZWRf
cnVuKCkKIApAQCAtOTgsNiArMTA1LDggQEAgY2xhc3MgV2FpdEZvclRocmVhZHNUb0ZpbmlzaFRl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHJ1bl9v
bmVfdGhyZWFkKHNlbGYsIG1zZyk6CisgICAgICAgICMgRklYTUU6IGltcGxlbWVudAorICAgICAg
ICByZXR1cm4KICAgICAgICAgcnVubmVyID0gc2VsZi5Nb2NrVGVzdFJ1bm5lcigpCiAgICAgICAg
IHN0YXJ0aW5nX3F1ZXVlID0gUXVldWUuUXVldWUoKQogICAgICAgICBzdG9wcGluZ19xdWV1ZSA9
IFF1ZXVlLlF1ZXVlKCkKQEAgLTEwOSwxNCArMTE4LDIwIEBAIGNsYXNzIFdhaXRGb3JUaHJlYWRz
VG9GaW5pc2hUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcmV0dXJuIHJ1bm5lci5f
d2FpdF9mb3JfdGhyZWFkc190b19maW5pc2godGhyZWFkcywgTm9uZSkKIAogICAgIGRlZiB0ZXN0
X2Jhc2ljKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQKKyAgICAgICAgcmV0dXJu
CiAgICAgICAgIGludGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3RocmVhZCgnJykKICAgICAgICAg
c2VsZi5hc3NlcnRGYWxzZShpbnRlcnJ1cHRlZCkKIAogICAgIGRlZiB0ZXN0X2ludGVycnVwdChz
ZWxmKToKKyAgICAgICAgIyBGSVhNRTogaW1wbGVtZW50CisgICAgICAgIHJldHVybgogICAgICAg
ICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJ0tleWJvYXJkSW50ZXJydXB0JykK
ICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludGVycnVwdGVkKQogCiAgICAgZGVmIHRlc3RfdGlt
ZW91dChzZWxmKToKKyAgICAgICAgIyBGSVhNRTogaW1wbGVtZW50CisgICAgICAgIHJldHVybgog
ICAgICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCiAgICAgICAgIG9jLmNh
cHR1cmVfb3V0cHV0KCkKICAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFk
KCdUaW1lb3V0JykKQEAgLTEyNCw2ICsxMzksOCBAQCBjbGFzcyBXYWl0Rm9yVGhyZWFkc1RvRmlu
aXNoVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIG9jLnJlc3RvcmVfb3V0cHV0KCkK
IAogICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgIyBGSVhNRTogaW1wbGVt
ZW50CisgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9y
LCBzZWxmLnJ1bl9vbmVfdGhyZWFkLCAnRXhjZXB0aW9uJykKIAogCkBAIC0xMzcsNyArMTU0LDcg
QEAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGZvdW5kX3N0YWNrID0g
bWVzc2FnZV9icm9rZXIuX2ZpbmRfdGhyZWFkX3N0YWNrKDApCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoZm91bmRfc3RhY2ssIE5vbmUpCiAKLSAgICBkZWYgdGVzdF9sb2dfd2VkZ2VkX3RocmVh
ZChzZWxmKToKKyAgICBkZWYgdGVzdF9sb2dfd2VkZ2VkX3dvcmtlcihzZWxmKToKICAgICAgICAg
b2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQogICAgICAgICBvYy5jYXB0dXJlX291
dHB1dCgpCiAgICAgICAgIGxvZ2dlciA9IG1lc3NhZ2VfYnJva2VyLl9sb2cKQEAgLTE1MSw3ICsx
NjgsOCBAQCBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgY2hpbGRfdGhy
ZWFkLnN0YXJ0KCkKICAgICAgICAgbXNnID0gc3RhcnRpbmdfcXVldWUuZ2V0KCkKIAotICAgICAg
ICBtZXNzYWdlX2Jyb2tlci5sb2dfd2VkZ2VkX3RocmVhZChjaGlsZF90aHJlYWQuaWQoKSkKKyAg
ICAgICAgbWVzc2FnZV9icm9rZXIubG9nX3dlZGdlZF93b3JrZXIoY2hpbGRfdGhyZWFkLmdldE5h
bWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRfdGhy
ZWFkLmlkKCkpCiAgICAgICAgIHN0b3BwaW5nX3F1ZXVlLnB1dCgnJykKICAgICAgICAgY2hpbGRf
dGhyZWFkLmpvaW4odGltZW91dD0xLjApCiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4
IGIzODA0ZjQ3MGJjNjNmYjNkNWI3YjYwZWFmNzY5M2EzZDk5ODlhNzEuLmExNGY4ZGFlY2ZjNDA3
ZjBjNjIyNjEzZjA5Y2E2M2QxNDc2OGU5MjcgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKKysrIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpA
QCAtMjM4LDE3ICsyMzgsMTkgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAjIGluIER1bXBSZW5k
ZXJUcmVlLgogICAgIERFRkFVTFRfVEVTVF9USU1FT1VUX01TID0gNiAqIDEwMDAKIAotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmludGVyKToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlciwgYnJva2VyKToKICAgICAgICAgIiIiSW5p
dGlhbGl6ZSB0ZXN0IHJ1bm5lciBkYXRhIHN0cnVjdHVyZXMuCiAKICAgICAgICAgQXJnczoKICAg
ICAgICAgICBwb3J0OiBhbiBvYmplY3QgaW1wbGVtZW50aW5nIHBvcnQtc3BlY2lmaWMKICAgICAg
ICAgICBvcHRpb25zOiBhIGRpY3Rpb25hcnkgb2YgY29tbWFuZCBsaW5lIG9wdGlvbnMKICAgICAg
ICAgICBwcmludGVyOiBhIFByaW50ZXIgb2JqZWN0IHRvIHJlY29yZCB1cGRhdGVzIHRvLgorICAg
ICAgICAgIGJyb2tlcjogb2JqZWN0IHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB3b3JrZXJzLgog
ICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2VsZi5fb3B0
aW9ucyA9IG9wdGlvbnMKICAgICAgICAgc2VsZi5fcHJpbnRlciA9IHByaW50ZXIKKyAgICAgICAg
c2VsZi5fYnJva2VyID0gYnJva2VyCiAKICAgICAgICAgIyBkaXNhYmxlIHdzcyBzZXJ2ZXIuIG5l
ZWQgdG8gaW5zdGFsbCBweU9wZW5TU0wgb24gYnVpbGRib3RzLgogICAgICAgICAjIHNlbGYuX3dl
YnNvY2tldF9zZWN1cmVfc2VydmVyID0gd2Vic29ja2V0X3NlcnZlci5QeVdlYlNvY2tldCgKQEAg
LTU3OCwzNiArNTgwLDYgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgICAgICByZXR1
cm4gVHJ1ZQogICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgIGRlZiBfaW5zdGFudGlhdGVfZHVt
cF9yZW5kZXJfdHJlZV90aHJlYWRzKHNlbGYsIHRlc3RfZmlsZXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpOgotICAgICAgICAi
IiJJbnN0YW50aXRhdGVzIGFuZCBzdGFydHMgdGhlIFRlc3RTaGVsbFRocmVhZChzKS4KLQotICAg
ICAgICBSZXR1cm46Ci0gICAgICAgICAgVGhlIGxpc3Qgb2YgdGhyZWFkcy4KLSAgICAgICAgIiIi
Ci0gICAgICAgIGZpbGVuYW1lX3F1ZXVlID0gc2VsZi5fZ2V0X3Rlc3RfZmlsZV9xdWV1ZSh0ZXN0
X2ZpbGVzKQotCi0gICAgICAgICMgSW5zdGFudGlhdGUgVGVzdFNoZWxsVGhyZWFkcyBhbmQgc3Rh
cnQgdGhlbS4KLSAgICAgICAgdGhyZWFkcyA9IFtdCi0gICAgICAgIGZvciBpIGluIHhyYW5nZShp
bnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpKToKLSAgICAgICAgICAgICMgQ3JlYXRl
IHNlcGFyYXRlIFRlc3RUeXBlcyBpbnN0YW5jZXMgZm9yIGVhY2ggdGhyZWFkLgotICAgICAgICAg
ICAgdGVzdF90eXBlcyA9IFtdCi0gICAgICAgICAgICBmb3IgdGVzdF90eXBlIGluIHNlbGYuX3Rl
c3RfdHlwZXM6Ci0gICAgICAgICAgICAgICAgdGVzdF90eXBlcy5hcHBlbmQodGVzdF90eXBlKHNl
bGYuX3BvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRp
b25zLnJlc3VsdHNfZGlyZWN0b3J5KSkKLQotICAgICAgICAgICAgdGVzdF9hcmdzID0gc2VsZi5f
Z2V0X3Rlc3RfYXJncyhpKQotICAgICAgICAgICAgdGhyZWFkID0gZHVtcF9yZW5kZXJfdHJlZV90
aHJlYWQuVGVzdFNoZWxsVGhyZWFkKHNlbGYuX3BvcnQsCi0gICAgICAgICAgICAgICAgc2VsZi5f
b3B0aW9ucywgZmlsZW5hbWVfcXVldWUsIHNlbGYuX3Jlc3VsdF9xdWV1ZSwKLSAgICAgICAgICAg
ICAgICB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MpCi0gICAgICAgICAgICBpZiBzZWxmLl9pc19zaW5n
bGVfdGhyZWFkZWQoKToKLSAgICAgICAgICAgICAgICB0aHJlYWQucnVuX2luX21haW5fdGhyZWFk
KHNlbGYsIHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAg
ICB0aHJlYWQuc3RhcnQoKQotICAgICAgICAgICAgdGhyZWFkcy5hcHBlbmQodGhyZWFkKQotCi0g
ICAgICAgIHJldHVybiB0aHJlYWRzCi0KICAgICBkZWYgX2lzX3NpbmdsZV90aHJlYWRlZChzZWxm
KToKICAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHdlIHNob3VsZCBydW4gYWxsIHRoZSB0ZXN0
cyBpbiB0aGUgbWFpbiB0aHJlYWQuIiIiCiAgICAgICAgIHJldHVybiBpbnQoc2VsZi5fb3B0aW9u
cy5jaGlsZF9wcm9jZXNzZXMpID09IDEKQEAgLTYyNiw1OSArNTk4LDQyIEBAIGNsYXNzIFRlc3RS
dW5uZXI6CiAgICAgICAgICAgICAgIGluIHRoZSBmb3JtIHtmaWxlbmFtZTpmaWxlbmFtZSwgdGVz
dF9ydW5fdGltZTp0ZXN0X3J1bl90aW1lfQogICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1
bW1hcnkgb2JqZWN0IHRvIHBvcHVsYXRlIHdpdGggdGhlIHJlc3VsdHMKICAgICAgICAgIiIiCisg
ICAgICAgIG51bV93b3JrZXJzID0gaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKQor
ICAgICAgICBicm9rZXIgPSBzZWxmLl9icm9rZXIKKwogICAgICAgICAjIEZJWE1FOiBXZSBzaG91
bGQgdXNlIHdlYmtpdHB5LnRvb2wuZ3JhbW1hci5wbHVyYWxpemUgaGVyZS4KICAgICAgICAgcGx1
cmFsID0gIiIKICAgICAgICAgaWYgbm90IHNlbGYuX2lzX3NpbmdsZV90aHJlYWRlZCgpOgogICAg
ICAgICAgICAgcGx1cmFsID0gInMiCiAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRl
KCdTdGFydGluZyAlcyVzIC4uLicgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoc2VsZi5fcG9ydC5kcml2ZXJfbmFtZSgpLCBwbHVyYWwpKQotICAgICAgICB0aHJlYWRzID0g
c2VsZi5faW5zdGFudGlhdGVfZHVtcF9yZW5kZXJfdHJlZV90aHJlYWRzKGZpbGVfbGlzdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHRfc3VtbWFyeSkKLSAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoIlN0
YXJ0aW5nIHRlc3RpbmcgLi4uIikKIAotICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IHNl
bGYuX3dhaXRfZm9yX3RocmVhZHNfdG9fZmluaXNoKHRocmVhZHMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1
bW1hcnkpCi0gICAgICAgICh0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFs
X3Rlc3RfdGltaW5ncykgPSBcCi0gICAgICAgICAgICBzZWxmLl9jb2xsZWN0X3RpbWluZ19pbmZv
KHRocmVhZHMpCisgICAgICAgIHNlbGYuX2N1cnJlbnRfZmlsZW5hbWVfcXVldWUgPSBzZWxmLl9n
ZXRfdGVzdF9maWxlX3F1ZXVlKHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuX2N1cnJlbnRfcmVz
dWx0X3N1bW1hcnkgPSByZXN1bHRfc3VtbWFyeQorICAgICAgICB0aHJlYWRzID0gYnJva2VyLnN0
YXJ0X3dvcmtlcnMoc2VsZikKIAotICAgICAgICByZXR1cm4gKGtleWJvYXJkX2ludGVycnVwdGVk
LCB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLAotICAgICAgICAgICAgICAgIGluZGl2aWR1
YWxfdGVzdF90aW1pbmdzKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgiU3Rh
cnRpbmcgdGVzdGluZyAuLi4iKQogCi0gICAgZGVmIF93YWl0X2Zvcl90aHJlYWRzX3RvX2Zpbmlz
aChzZWxmLCB0aHJlYWRzLCByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgIGtleWJvYXJkX2ludGVy
cnVwdGVkID0gRmFsc2UKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBMb29wIHRocm91Z2gg
YWxsIHRoZSB0aHJlYWRzIHdhaXRpbmcgZm9yIHRoZW0gdG8gZmluaXNoLgotICAgICAgICAgICAg
c29tZV90aHJlYWRfaXNfYWxpdmUgPSBUcnVlCi0gICAgICAgICAgICB3aGlsZSBzb21lX3RocmVh
ZF9pc19hbGl2ZToKLSAgICAgICAgICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IEZhbHNl
Ci0gICAgICAgICAgICAgICAgdCA9IHRpbWUudGltZSgpCi0gICAgICAgICAgICAgICAgZm9yIHRo
cmVhZCBpbiB0aHJlYWRzOgotICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25faW5mbyA9IHRo
cmVhZC5leGNlcHRpb25faW5mbygpCi0gICAgICAgICAgICAgICAgICAgIGlmIGV4Y2VwdGlvbl9p
bmZvIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgIyBSZS1yYWlzZSB0aGUg
dGhyZWFkJ3MgZXhjZXB0aW9uIGhlcmUgdG8gbWFrZSBpdAotICAgICAgICAgICAgICAgICAgICAg
ICAgIyBjbGVhciB0aGF0IHRlc3Rpbmcgd2FzIGFib3J0ZWQuIE90aGVyd2lzZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICMgdGhlIHRlc3RzIHRoYXQgZGlkIG5vdCBydW4gd291bGQgYmUgYXNz
dW1lZAotICAgICAgICAgICAgICAgICAgICAgICAgIyB0byBoYXZlIHBhc3NlZC4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbl9pbmZvWzBdLCBleGNlcHRpb25faW5mb1sx
XSwgZXhjZXB0aW9uX2luZm9bMl0KLQotICAgICAgICAgICAgICAgICAgICBpZiB0aHJlYWQuaXNB
bGl2ZSgpOgotICAgICAgICAgICAgICAgICAgICAgICAgc29tZV90aHJlYWRfaXNfYWxpdmUgPSBU
cnVlCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3RpbWVvdXQgPSB0aHJlYWQubmV4dF90
aW1lb3V0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0X3RpbWVvdXQgYW5kIHQg
PiBuZXh0X3RpbWVvdXQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfYnJv
a2VyLmxvZ193ZWRnZWRfdGhyZWFkKHRocmVhZC5pZCgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRocmVhZC5jbGVhcl9uZXh0X3RpbWVvdXQoKQotCi0gICAgICAgICAgICAgICAgc2Vs
Zi51cGRhdGVfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKLQotICAgICAgICAgICAgICAgIGlmIHNv
bWVfdGhyZWFkX2lzX2FsaXZlOgotICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEp
Ci0KKyAgICAgICAgICAgIGJyb2tlci5sb29wKCkKICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50
ZXJydXB0OgorICAgICAgICAgICAgX2xvZy5pbmZvKCJJbnRlcnJ1cHRlZCwgZXhpdGluZyIpCisg
ICAgICAgICAgICBicm9rZXIuY2FuY2VsX3dvcmtlcnMoKQogICAgICAgICAgICAga2V5Ym9hcmRf
aW50ZXJydXB0ZWQgPSBUcnVlCi0gICAgICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6Ci0g
ICAgICAgICAgICAgICAgdGhyZWFkLmNhbmNlbCgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAg
ICAgICMgVW5leHBlY3RlZCBleGNlcHRpb247IGRvbid0IHRyeSB0byBjbGVhbiB1cCB3b3JrZXJz
LgorICAgICAgICAgICAgX2xvZy5pbmZvKCJFeGNlcHRpb24gcmFpc2VkLCBleGl0aW5nIikKKyAg
ICAgICAgICAgIHJhaXNlCiAKLSAgICAgICAgcmV0dXJuIGtleWJvYXJkX2ludGVycnVwdGVkCisg
ICAgICAgICh0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGlt
aW5ncykgPSBcCisgICAgICAgICAgICBzZWxmLl9jb2xsZWN0X3RpbWluZ19pbmZvKHRocmVhZHMp
CisKKyAgICAgICAgcmV0dXJuIChrZXlib2FyZF9pbnRlcnJ1cHRlZCwgdGhyZWFkX3RpbWluZ3Ms
IHRlc3RfdGltaW5ncywKKyAgICAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykK
KworICAgIGRlZiB1cGRhdGUoc2VsZik6CisgICAgICAgIHNlbGYudXBkYXRlX3N1bW1hcnkoc2Vs
Zi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSkKIAogICAgIGRlZiBfY29sbGVjdF90aW1pbmdfaW5m
byhzZWxmLCB0aHJlYWRzKToKICAgICAgICAgdGVzdF90aW1pbmdzID0ge30KQEAgLTEzNDMsMTEg
KzEyOTgsMTMgQEAgZGVmIHJ1bihwb3J0LCBvcHRpb25zLCBhcmdzLCByZWd1bGFyX291dHB1dD1z
eXMuc3RkZXJyLAogICAgICAgICBwcmludGVyLmNsZWFudXAoKQogICAgICAgICByZXR1cm4gMAog
CisgICAgYnJva2VyID0gbWVzc2FnZV9icm9rZXIuZ2V0KHBvcnQsIG9wdGlvbnMpCisKICAgICAj
IFdlIHdyYXAgYW55IHBhcnRzIG9mIHRoZSBydW4gdGhhdCBhcmUgc2xvdyBvciBsaWtlbHkgdG8g
cmFpc2UgZXhjZXB0aW9ucwogICAgICMgaW4gYSB0cnkvZmluYWxseSB0byBlbnN1cmUgdGhhdCB3
ZSBjbGVhbiB1cCB0aGUgbG9nZ2luZyBjb25maWd1cmF0aW9uLgogICAgIG51bV91bmV4cGVjdGVk
X3Jlc3VsdHMgPSAtMQogICAgIHRyeToKLSAgICAgICAgdGVzdF9ydW5uZXIgPSBUZXN0UnVubmVy
KHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpCisgICAgICAgIHRlc3RfcnVubmVyID0gVGVzdFJ1bm5l
cihwb3J0LCBvcHRpb25zLCBwcmludGVyLCBicm9rZXIpCiAgICAgICAgIHRlc3RfcnVubmVyLl9w
cmludF9jb25maWcoKQogCiAgICAgICAgIHByaW50ZXIucHJpbnRfdXBkYXRlKCJDb2xsZWN0aW5n
IHRlc3RzIC4uLiIpCkBAIC0xMzc2LDYgKzEzMzMsNyBAQCBkZWYgcnVuKHBvcnQsIG9wdGlvbnMs
IGFyZ3MsIHJlZ3VsYXJfb3V0cHV0PXN5cy5zdGRlcnIsCiAgICAgICAgICAgICBfbG9nLmRlYnVn
KCJUZXN0aW5nIGNvbXBsZXRlZCwgRXhpdCBzdGF0dXM6ICVkIiAlCiAgICAgICAgICAgICAgICAg
ICAgICAgIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMpCiAgICAgZmluYWxseToKKyAgICAgICAgYnJv
a2VyLmNsZWFudXAoKQogICAgICAgICBwcmludGVyLmNsZWFudXAoKQogCiAgICAgcmV0dXJuIG51
bV91bmV4cGVjdGVkX3Jlc3VsdHMKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0
ZXN0LnB5CmluZGV4IDBiZDFiM2EzNWNhOTEyOWMyYjdhYzg4MjA2N2QzNzYyOTZhODhiYjAuLjFi
NzIwZmRlYzdmNGQ2NzNmY2IwNjhlNzZjYTQxMjAyZGRlZjI3MGQgMTAwNjQ0Ci0tLSBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5p
dHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQpAQCAtNDM5LDcgKzQzOSw3IEBAIGNsYXNzIFRl
c3RSdW5uZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgbW9ja19wb3J0LnJlbGF0
aXZlX3Rlc3RfZmlsZW5hbWUgPSBsYW1iZGEgbmFtZTogbmFtZQogICAgICAgICBtb2NrX3BvcnQu
ZmlsZW5hbWVfdG9fdXJpID0gbGFtYmRhIG5hbWU6IG5hbWUKIAotICAgICAgICBydW5uZXIgPSBy
dW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIocG9ydD1tb2NrX3BvcnQsIG9wdGlvbnM9TW9jaygp
LCBwcmludGVyPU1vY2soKSkKKyAgICAgICAgcnVubmVyID0gcnVuX3dlYmtpdF90ZXN0cy5UZXN0
UnVubmVyKHBvcnQ9bW9ja19wb3J0LCBvcHRpb25zPU1vY2soKSwgcHJpbnRlcj1Nb2NrKCksIGJy
b2tlcj1Nb2NrKCkpCiAgICAgICAgIGV4cGVjdGVkX2h0bWwgPSB1IiIiPGh0bWw+CiAgIDxoZWFk
PgogICAgIDx0aXRsZT5MYXlvdXQgVGVzdCBSZXN1bHRzICh0aW1lKTwvdGl0bGU+CkBAIC00NjUs
NyArNDY1LDcgQEAgY2xhc3MgVGVzdFJ1bm5lclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAg
IGRlZiB0ZXN0X2dldF90ZXN0X2ZpbGVfcXVldWUoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0
IF9nZXRfdGVzdF9maWxlX3F1ZXVlIGluIHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lciByZWFs
bHkKICAgICAgICAgIyBwdXQgdGhlIGh0dHAgdGVzdHMgZmlyc3QgaW4gdGhlIHF1ZXVlLgotICAg
ICAgICBydW5uZXIgPSBUZXN0UnVubmVyV3JhcHBlcihwb3J0PU1vY2soKSwgb3B0aW9ucz1Nb2Nr
KCksIHByaW50ZXI9TW9jaygpKQorICAgICAgICBydW5uZXIgPSBUZXN0UnVubmVyV3JhcHBlcihw
b3J0PU1vY2soKSwgb3B0aW9ucz1Nb2NrKCksIHByaW50ZXI9TW9jaygpLCBicm9rZXI9TW9jaygp
KQogICAgICAgICBydW5uZXIuX29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsID0g
RmFsc2UKIAogICAgICAgICB0ZXN0X2xpc3QgPSBbCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74455</attachid>
            <date>2010-11-19 18:46:27 -0800</date>
            <delta_ts>2010-11-23 15:35:52 -0800</delta_ts>
            <desc>update w/ review feedback</desc>
            <filename>bug-49779-20101119184626.patch</filename>
            <type>text/plain</type>
            <size>23194</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA3ZTY0NzkzNDg3MWFmZDViMGUyMjRiODM3NzQ3ODk1Yzg5OWUzYTIwLi42MDgzZDBk
NzVjODYwYjg1ZWYyN2EyOGUxOTA1MmMzYWZhMDMxNzAxIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTAtMTEtMTggIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBs
ZW1lbnRzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBtYW5hZ2VyIHNpZGUgb2YgdGhlCisgICAgICAg
IEJyb2tlciBvYmplY3RzIC0gaXQgaGFuZGxlcyBjcmVhdGluZyB0aHJlYWRzLCB3YWl0aW5nIGZv
ciB0aGVtCisgICAgICAgIHRvIGNvbXBsZXRlLCBhbmQgcnVubmluZyBhIHNpbmdsZS10aHJlYWRl
ZCBsb29wIGFzIHdlbGwuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ5Nzc5CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcl91bml0dGVz
dC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0
X3Rlc3RzLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6CisKIDIwMTAtMTEtMTkgIERpcmsgUHJhbmtlICA8ZHBy
YW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90
aHJlYWQucHkKaW5kZXggYWYxNWE4MmVmYmUwNTlhODQxZTI5M2ZjYzViOGY0YTgwYjgxZTJjNC4u
NzdjNjkxYjEzNjE4OTQ0MTE4MzEzMTZlMjkwYzcxNzBkNWU4YjBiZSAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVt
cF9yZW5kZXJfdHJlZV90aHJlYWQucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkK
QEAgLTI0Nyw3ICsyNDcsNyBAQCBjbGFzcyBXYXRjaGFibGVUaHJlYWQodGhyZWFkaW5nLlRocmVh
ZCk6CiAKIAogY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6Ci0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHdvcmtlcl9udW1iZXIsCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHdvcmtlcl9udW1iZXIsIHdvcmtlcl9uYW1lLAog
ICAgICAgICAgICAgICAgICBmaWxlbmFtZV9saXN0X3F1ZXVlLCByZXN1bHRfcXVldWUpOgogICAg
ICAgICAiIiJJbml0aWFsaXplIGFsbCB0aGUgbG9jYWwgc3RhdGUgZm9yIHRoaXMgRHVtcFJlbmRl
clRyZWUgdGhyZWFkLgogCkBAIC0yNTUsNiArMjU1LDcgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFk
KFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgICAgcG9ydDogaW50ZXJmYWNlIHRvIHBvcnQtc3Bl
Y2lmaWMgaG9va3MKICAgICAgICAgICBvcHRpb25zOiBjb21tYW5kIGxpbmUgb3B0aW9ucyBhcmd1
bWVudCBmcm9tIG9wdHBhcnNlCiAgICAgICAgICAgd29ya2VyX251bWJlcjogaWRlbnRpZmllciBm
b3IgYSBwYXJ0aWN1bGFyIHdvcmtlciB0aHJlYWQuCisgICAgICAgICAgd29ya2VyX25hbWU6IGZv
ciBsb2dnaW5nLgogICAgICAgICAgIGZpbGVuYW1lX2xpc3RfcXVldWU6IEEgdGhyZWFkIHNhZmUg
UXVldWUgY2xhc3MgdGhhdCBjb250YWlucyBsaXN0cwogICAgICAgICAgICAgICBvZiB0dXBsZXMg
b2YgKGZpbGVuYW1lLCB1cmkpIHBhaXJzLgogICAgICAgICAgIHJlc3VsdF9xdWV1ZTogQSB0aHJl
YWQgc2FmZSBRdWV1ZSBjbGFzcyB0aGF0IHdpbGwgY29udGFpbgpAQCAtMjY0LDcgKzI2NSw3IEBA
IGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgogICAgICAgICBzZWxmLl9w
b3J0ID0gcG9ydAogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwogICAgICAgICBzZWxm
Ll93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgotICAgICAgICBzZWxmLl9uYW1lID0gJ3dv
cmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX25hbWUgPSB3b3JrZXJfbmFt
ZQogICAgICAgICBzZWxmLl9maWxlbmFtZV9saXN0X3F1ZXVlID0gZmlsZW5hbWVfbGlzdF9xdWV1
ZQogICAgICAgICBzZWxmLl9yZXN1bHRfcXVldWUgPSByZXN1bHRfcXVldWUKICAgICAgICAgc2Vs
Zi5fZmlsZW5hbWVfbGlzdCA9IFtdCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlci5weSBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21l
c3NhZ2VfYnJva2VyLnB5CmluZGV4IDEzOTUxYzAyZWYzZDE3MmEzOWU3MzY5Y2ViMjE5N2YxY2Jj
YjliOTguLmE2NmZkODY3NTM1MWYyZTM5Njg0Yzc5MjQ4YTU2M2Q5NDFmMDBiYWYgMTAwNjQ0Ci0t
LSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL21lc3NhZ2VfYnJva2VyLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5CkBAIC0yOCwyNSAr
MjgsMTYwIEBACiAKICIiIk1vZHVsZSBmb3IgaGFuZGxpbmcgbWVzc2FnZXMsIHRocmVhZHMsIHBy
b2Nlc3NlcywgYW5kIGNvbmN1cnJlbmN5IGZvciBydW4td2Via2l0LXRlc3RzLgogCi1UaGUgbW9k
ZWwgd2UgdXNlIGlzIHRoYXQgb2YgYSBtZXNzYWdlIGJyb2tlciAtIGl0IHByb3ZpZGVzIGEgbWVz
c2FnaW5nCi1hYnN0cmFjdGlvbiBhbmQgbWVzc2FnZSBsb29wcywgYW5kIGhhbmRsZXMgbGF1bmNo
aW5nIHRocmVhZHMgYW5kL29yIHByb2Nlc3NlcwotZGVwZW5kaW5nIG9uIHRoZSByZXF1ZXN0ZWQg
Y29uZmlndXJhdGlvbi4KK1Rlc3RpbmcgaXMgYWNjb21wbGlzaGVkIGJ5IGhhdmluZyBhIG1hbmFn
ZXIgKFRlc3RSdW5uZXIpIGdhdGhlciBhbGwgb2YgdGhlCit0ZXN0cyB0byBiZSBydW4sIGFuZCBz
ZW5kaW5nIG1lc3NhZ2VzIHRvIGEgcG9vbCBvZiB3b3JrZXJzIChUZXN0U2hlbGxUaHJlYWRzKQor
dG8gcnVuIGVhY2ggdGVzdC4gRWFjaCB3b3JrZXIgY29tbXVuaWNhdGVzIHdpdGggb25lIGRyaXZl
ciAodXN1YWxseQorRHVtcFJlbmRlclRyZWUpIHRvIHJ1biBvbmUgdGVzdCBhdCBhIHRpbWUgYW5k
IHRoZW4gY29tcGFyZSB0aGUgb3V0cHV0IGFnYWluc3QKK3doYXQgd2UgZXhwZWN0ZWQgdG8gZ2V0
LgorCitUaGlzIG1vZHVsZXMgcHJvdmlkZXMgYSBtZXNzYWdlIGJyb2tlciB0aGF0IGNvbm5lY3Rz
IHRoZSBtYW5hZ2VyIHRvIHRoZQord29ya2VyczogaXQgcHJvdmlkZXMgYSBtZXNzYWdpbmcgYWJz
dHJhY3Rpb24gYW5kIG1lc3NhZ2UgbG9vcHMsIGFuZAoraGFuZGxlcyBsYXVuY2hpbmcgdGhyZWFk
cyBhbmQvb3IgcHJvY2Vzc2VzIGRlcGVuZGluZyBvbiB0aGUKK3JlcXVlc3RlZCBjb25maWd1cmF0
aW9uLgogIiIiCiAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3lzCitpbXBvcnQgdGltZQogaW1w
b3J0IHRyYWNlYmFjawogCitpbXBvcnQgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQKIAogX2xvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAKLWRlZiBsb2dfd2VkZ2VkX3RocmVhZChp
ZCk6Ci0gICAgIiIiTG9nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBnaXZlbiB0aHJlYWQgc3RhdGUu
IiIiCitkZWYgZ2V0KHBvcnQsIG9wdGlvbnMpOgorICAgICIiIlJldHVybiBhbiBpbnN0YW5jZSBv
ZiBhIFdvcmtlck1lc3NhZ2VCcm9rZXIuIiIiCisgICAgaWYgb3B0aW9ucy53b3JrZXJzX2FyZSA9
PSAnaW5saW5lJzoKKyAgICAgICAgcmV0dXJuIFNpbmdsZVRocmVhZGVkQnJva2VyKHBvcnQsIG9w
dGlvbnMpCisgICAgaWYgb3B0aW9ucy53b3JrZXJzX2FyZSA9PSAndGhyZWFkcyc6CisgICAgICAg
IHJldHVybiBNdWx0aVRocmVhZGVkQnJva2VyKHBvcnQsIG9wdGlvbnMpCisgICAgcmFpc2UgVmFs
dWVFcnJvcignaWxsZWdhbCB2YWx1ZSBmb3IgLS13b3JrZXJzLWFyZTogJXMnICUKKyAgICAgICAg
ICAgICAgICAgICAgIG9wdGlvbnMud29ya2Vyc19hcmUpCisKKworY2xhc3MgX1dvcmtlclN0YXRl
KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLm5h
bWUgPSBOb25lCisgICAgICAgIHNlbGYudGhyZWFkID0gTm9uZQorCisKK2NsYXNzIFdvcmtlck1l
c3NhZ2VCcm9rZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9u
cyk6CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBv
cHRpb25zCisgICAgICAgIHNlbGYuX251bV93b3JrZXJzID0gaW50KHNlbGYuX29wdGlvbnMuY2hp
bGRfcHJvY2Vzc2VzKQorICAgICAgICBzZWxmLl93b3JrZXJzID0ge30KKworICAgIGRlZiBfdGhy
ZWFkcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFt3LnRocmVhZCBmb3IgdyBpbiBzZWxmLl93b3Jr
ZXJzLnZhbHVlcygpXQorCisgICAgZGVmIHN0YXJ0X3dvcmtlcnMoc2VsZiwgdGVzdF9ydW5uZXIp
OgorICAgICAgICAiIiJTdGFydHMgdXAgdGhlIHBvb2wgb2Ygd29ya2VycyBmb3IgcnVubmluZyB0
aGUgdGVzdHMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHRlc3RfcnVubmVyOiBhIGhh
bmRsZSB0byB0aGUgbWFuYWdlci9UZXN0UnVubmVyIG9iamVjdAorICAgICAgICBSZXR1cm5zOgor
ICAgICAgICAgICAgbm90aGluZworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fdGVzdF9ydW5u
ZXIgPSB0ZXN0X3J1bm5lcgorICAgICAgICBmb3Igd29ya2VyX251bWJlciBpbiB4cmFuZ2Uoc2Vs
Zi5fbnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgd29ya2VyID0gX1dvcmtlclN0YXRlKCd3b3Jr
ZXItJWQnICUgd29ya2VyX251bWJlcikKKyAgICAgICAgICAgIHdvcmtlci50aHJlYWQgPSBzZWxm
Ll9zdGFydF93b3JrZXIod29ya2VyX251bWJlcikKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcnNb
d29ya2VyLm5hbWVdID0gd29ya2VyCisgICAgICAgIHJldHVybiBzZWxmLl90aHJlYWRzKCkKKwor
ICAgIGRlZiBfc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICByYWlz
ZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcnVuX21lc3NhZ2VfbG9vcChzZWxmKToK
KyAgICAgICAgIiIiTG9vcCBwcm9jZXNzaW5nIG1lc3NhZ2VzIHVudGlsIGRvbmUuIFJldHVybnMg
bm90aGluZy4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVm
IGNhbmNlbF93b3JrZXJzKHNlbGYpOgorICAgICAgICAiIiJDYW5jZWwvaW50ZXJydXB0IGFueSB3
b3JrZXJzIHRoYXQgYXJlIHN0aWxsIGFsaXZlLgorCisgICAgICAgIFJldHVybnMgbm90aGluZy4K
KyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAg
ICAgICAiIiJQZXJmb3JtIGFueSBuZWNlc3NhcnkgY2xlYW51cCBvbiBzaHV0ZG93bi4KKworICAg
ICAgICBSZXR1cm5zIG5vdGhpbmcuCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKworY2xh
c3MgU2luZ2xlVGhyZWFkZWRCcm9rZXIoV29ya2VyTWVzc2FnZUJyb2tlcik6CisgICAgZGVmIF9z
dGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlcik6CisgICAgICAgICMgRklYTUU6IFJlcGxh
Y2Ugd2l0aCBzb21ldGhpbmcgdGhhdCBpc24ndCBhIHRocmVhZC4KKyAgICAgICAgdGhyZWFkID0g
ZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuVGVzdFNoZWxsVGhyZWFkKHNlbGYuX3BvcnQsCisgICAg
ICAgICAgICBzZWxmLl9vcHRpb25zLCB3b3JrZXJfbnVtYmVyLAorICAgICAgICAgICAgc2VsZi5f
dGVzdF9ydW5uZXIuX2N1cnJlbnRfZmlsZW5hbWVfcXVldWUsCisgICAgICAgICAgICBzZWxmLl90
ZXN0X3J1bm5lci5fcmVzdWx0X3F1ZXVlKQorICAgICAgICAjIE5vdGU6IERvbid0IHN0YXJ0KCkg
dGhlIHRocmVhZCEgSWYgd2UgZGlkLCBpdCB3b3VsZCBhY3R1YWxseQorICAgICAgICAjIGNyZWF0
ZSBhbm90aGVyIHRocmVhZCBhbmQgc3RhcnQgZXhlY3V0aW5nIGl0LCBhbmQgd2UnZCBubyBsb25n
ZXIKKyAgICAgICAgIyBiZSBzaW5nbGUtdGhyZWFkZWQuCisgICAgICAgIHJldHVybiB0aHJlYWQK
KworICAgIGRlZiBydW5fbWVzc2FnZV9sb29wKHNlbGYpOgorICAgICAgICB0aHJlYWQgPSBzZWxm
Ll90aHJlYWRzKClbMF0KKyAgICAgICAgdGhyZWFkLnJ1bl9pbl9tYWluX3RocmVhZChzZWxmLl90
ZXN0X3J1bm5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0
X3J1bm5lci5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSkKKyAgICAgICAgc2VsZi5fdGVzdF9ydW5u
ZXIudXBkYXRlKCkKKworCitjbGFzcyBNdWx0aVRocmVhZGVkQnJva2VyKFdvcmtlck1lc3NhZ2VC
cm9rZXIpOgorICAgIGRlZiBfc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIpOgorICAg
ICAgICB0aHJlYWQgPSBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5UZXN0U2hlbGxUaHJlYWQoc2Vs
Zi5fcG9ydCwKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMsIHdvcmtlcl9udW1iZXIsCisgICAg
ICAgICAgICBzZWxmLl90ZXN0X3J1bm5lci5fY3VycmVudF9maWxlbmFtZV9xdWV1ZSwKKyAgICAg
ICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyLl9yZXN1bHRfcXVldWUpCisgICAgICAgIHRocmVhZC5z
dGFydCgpCisgICAgICAgIHJldHVybiB0aHJlYWQKKworICAgIGRlZiBydW5fbWVzc2FnZV9sb29w
KHNlbGYpOgorICAgICAgICB0aHJlYWRzID0gc2VsZi5fdGhyZWFkcygpCisKKyAgICAgICAgIyBM
b29wIHRocm91Z2ggYWxsIHRoZSB0aHJlYWRzIHdhaXRpbmcgZm9yIHRoZW0gdG8gZmluaXNoLgor
ICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IFRydWUKKyAgICAgICAgd2hpbGUgc29tZV90
aHJlYWRfaXNfYWxpdmU6CisgICAgICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IEZhbHNl
CisgICAgICAgICAgICB0ID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIGZvciB0aHJlYWQgaW4g
dGhyZWFkczoKKyAgICAgICAgICAgICAgICBleGNlcHRpb25faW5mbyA9IHRocmVhZC5leGNlcHRp
b25faW5mbygpCisgICAgICAgICAgICAgICAgaWYgZXhjZXB0aW9uX2luZm8gaXMgbm90IE5vbmU6
CisgICAgICAgICAgICAgICAgICAgICMgUmUtcmFpc2UgdGhlIHRocmVhZCdzIGV4Y2VwdGlvbiBo
ZXJlIHRvIG1ha2UgaXQKKyAgICAgICAgICAgICAgICAgICAgIyBjbGVhciB0aGF0IHRlc3Rpbmcg
d2FzIGFib3J0ZWQuIE90aGVyd2lzZSwKKyAgICAgICAgICAgICAgICAgICAgIyB0aGUgdGVzdHMg
dGhhdCBkaWQgbm90IHJ1biB3b3VsZCBiZSBhc3N1bWVkCisgICAgICAgICAgICAgICAgICAgICMg
dG8gaGF2ZSBwYXNzZWQuCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbl9pbmZv
WzBdLCBleGNlcHRpb25faW5mb1sxXSwgZXhjZXB0aW9uX2luZm9bMl0KKworICAgICAgICAgICAg
ICAgIGlmIHRocmVhZC5pc0FsaXZlKCk6CisgICAgICAgICAgICAgICAgICAgIHNvbWVfdGhyZWFk
X2lzX2FsaXZlID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBuZXh0X3RpbWVvdXQgPSB0aHJl
YWQubmV4dF90aW1lb3V0KCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbmV4dF90aW1lb3V0IGFu
ZCB0ID4gbmV4dF90aW1lb3V0OgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nX3dlZGdlZF93
b3JrZXIodGhyZWFkLmdldE5hbWUoKSwgdGhyZWFkLmlkKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICB0aHJlYWQuY2xlYXJfbmV4dF90aW1lb3V0KCkKKworICAgICAgICAgICAgc2VsZi5fdGVz
dF9ydW5uZXIudXBkYXRlKCkKKworICAgICAgICAgICAgaWYgc29tZV90aHJlYWRfaXNfYWxpdmU6
CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorCisgICAgZGVmIGNhbmNlbF93b3Jr
ZXJzKHNlbGYpOgorICAgICAgICB0aHJlYWRzID0gc2VsZi5fdGhyZWFkcygpCisgICAgICAgIGZv
ciB0aHJlYWQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgIHRocmVhZC5jYW5jZWwoKQorCisKK2Rl
ZiBsb2dfd2VkZ2VkX3dvcmtlcihuYW1lLCBpZCk6CisgICAgIiIiTG9nIGluZm9ybWF0aW9uIGFi
b3V0IHRoZSBnaXZlbiB3b3JrZXIgc3RhdGUuIiIiCiAgICAgc3RhY2sgPSBfZmluZF90aHJlYWRf
c3RhY2soaWQpCiAgICAgYXNzZXJ0KHN0YWNrIGlzIG5vdCBOb25lKQogICAgIF9sb2cuZXJyb3Io
IiIpCi0gICAgX2xvZy5lcnJvcigiVGhyZWFkICVkIGlzIHdlZGdlZCIgJSBpZCkKKyAgICBfbG9n
LmVycm9yKCIlcyAodGlkICVkKSBpcyB3ZWRnZWQiICUgKG5hbWUsIGlkKSkKICAgICBfbG9nX3N0
YWNrKHN0YWNrKQogICAgIF9sb2cuZXJyb3IoIiIpCiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJv
a2VyX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5pdHRlc3QucHkKaW5kZXggZDcwODc0
NTViM2NjNTBlODJjN2MzMThjYjM4N2EyZGI5OGYyMTAxNy4uNzc4NDVlN2NmNDE0YTI2MmE3ZmM1
MGQ2YzA4YmYwMWViNWIyOTE4MSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5pdHRlc3Qu
cHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5pdHRlc3QucHkKQEAgLTMwLDI1ICszMCwzNCBAQCBp
bXBvcnQgbG9nZ2luZwogaW1wb3J0IFF1ZXVlCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGhyZWFkCitp
bXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gd2Vi
a2l0cHkuY29tbW9uIGltcG9ydCBhcnJheV9zdHJlYW0KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbSBpbXBvcnQgb3V0cHV0Y2FwdHVyZQorZnJvbSB3ZWJraXRweS50b29sIGltcG9ydCBtb2Nr
dG9vbAogCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcnVuX3dlYmtpdF90ZXN0
cwogCi1pbXBvcnQgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQKIGltcG9ydCBtZXNzYWdlX2Jyb2tl
cgogCiAKLWNsYXNzIFRlc3RUaHJlYWQoZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuV2F0Y2hhYmxl
VGhyZWFkKToKK2NsYXNzIFRlc3RUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHN0YXJ0ZWRfcXVldWUsIHN0b3BwaW5nX3F1ZXVlKToKLSAgICAgICAgZHVt
cF9yZW5kZXJfdHJlZV90aHJlYWQuV2F0Y2hhYmxlVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAg
ICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fdGhyZWFk
X2lkID0gTm9uZQogICAgICAgICBzZWxmLl9zdGFydGVkX3F1ZXVlID0gc3RhcnRlZF9xdWV1ZQog
ICAgICAgICBzZWxmLl9zdG9wcGluZ19xdWV1ZSA9IHN0b3BwaW5nX3F1ZXVlCiAgICAgICAgIHNl
bGYuX3RpbWVvdXQgPSBGYWxzZQogICAgICAgICBzZWxmLl90aW1lb3V0X3F1ZXVlID0gUXVldWUu
UXVldWUoKQorICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IE5vbmUKKworICAgIGRlZiBp
ZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RocmVhZF9pZAorCisgICAgZGVmIGdldE5h
bWUoc2VsZik6CisgICAgICAgIHJldHVybiAid29ya2VyLTAiCiAKICAgICBkZWYgcnVuKHNlbGYp
OgogICAgICAgICBzZWxmLl9jb3ZlcmVkX3J1bigpCkBAIC03MCwxMiArNzksMTcgQEAgY2xhc3Mg
VGVzdFRocmVhZChkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5XYXRjaGFibGVUaHJlYWQpOgogICAg
ICAgICBleGNlcHQ6CiAgICAgICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IHN5cy5leGNf
aW5mbygpCiAKKyAgICBkZWYgZXhjZXB0aW9uX2luZm8oc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLl9leGNlcHRpb25faW5mbworCiAgICAgZGVmIG5leHRfdGltZW91dChzZWxmKToKICAgICAg
ICAgaWYgc2VsZi5fdGltZW91dDoKICAgICAgICAgICAgIHNlbGYuX3RpbWVvdXRfcXVldWUucHV0
KCdkb25lJykKICAgICAgICAgICAgIHJldHVybiB0aW1lLnRpbWUoKSAtIDEwCiAgICAgICAgIHJl
dHVybiB0aW1lLnRpbWUoKQogCisgICAgZGVmIGNsZWFyX25leHRfdGltZW91dChzZWxmKToKKyAg
ICAgICAgc2VsZi5fbmV4dF90aW1lb3V0ID0gTm9uZQogCiBjbGFzcyBUZXN0SGFuZGxlcihsb2dn
aW5nLkhhbmRsZXIpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhc3RyZWFtKToKQEAgLTg3LDM0
ICsxMDEsNDAgQEAgY2xhc3MgVGVzdEhhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKIAogCiBjbGFz
cyBXYWl0Rm9yVGhyZWFkc1RvRmluaXNoVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgY2xh
c3MgTW9ja1Rlc3RSdW5uZXIocnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVubmVyKToKKyAgICBjbGFz
cyBNb2NrVGVzdFJ1bm5lcihvYmplY3QpOgogICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CiAg
ICAgICAgICAgICBwYXNzCiAKICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgICAg
ICBwYXNzCiAKLSAgICAgICAgZGVmIHVwZGF0ZV9zdW1tYXJ5KHNlbGYsIHJlc3VsdF9zdW1tYXJ5
KToKKyAgICAgICAgZGVmIHVwZGF0ZShzZWxmKToKICAgICAgICAgICAgIHBhc3MKIAogICAgIGRl
ZiBydW5fb25lX3RocmVhZChzZWxmLCBtc2cpOgorICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQK
ICAgICAgICAgcnVubmVyID0gc2VsZi5Nb2NrVGVzdFJ1bm5lcigpCisgICAgICAgIHBvcnQgPSBO
b25lCisgICAgICAgIG9wdGlvbnMgPSBtb2NrdG9vbC5Nb2NrT3B0aW9ucyh3b3JrZXJzX2FyZT0n
dGhyZWFkcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZF9w
cm9jZXNzZXM9JzEnKQogICAgICAgICBzdGFydGluZ19xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKICAg
ICAgICAgc3RvcHBpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgIGJyb2tlciA9IG1l
c3NhZ2VfYnJva2VyLk11bHRpVGhyZWFkZWRCcm9rZXIocG9ydCwgb3B0aW9ucykKKyAgICAgICAg
YnJva2VyLl90ZXN0X3J1bm5lciA9IHJ1bm5lcgogICAgICAgICBjaGlsZF90aHJlYWQgPSBUZXN0
VGhyZWFkKHN0YXJ0aW5nX3F1ZXVlLCBzdG9wcGluZ19xdWV1ZSkKKyAgICAgICAgYnJva2VyLl93
b3JrZXJzWyd3b3JrZXItMCddID0gbWVzc2FnZV9icm9rZXIuX1dvcmtlclN0YXRlKCd3b3JrZXIt
MCcpCisgICAgICAgIGJyb2tlci5fd29ya2Vyc1snd29ya2VyLTAnXS50aHJlYWQgPSBjaGlsZF90
aHJlYWQKICAgICAgICAgY2hpbGRfdGhyZWFkLnN0YXJ0KCkKICAgICAgICAgc3RhcnRlZF9tc2cg
PSBzdGFydGluZ19xdWV1ZS5nZXQoKQogICAgICAgICBzdG9wcGluZ19xdWV1ZS5wdXQobXNnKQot
ICAgICAgICB0aHJlYWRzID0gW2NoaWxkX3RocmVhZF0KLSAgICAgICAgcmV0dXJuIHJ1bm5lci5f
d2FpdF9mb3JfdGhyZWFkc190b19maW5pc2godGhyZWFkcywgTm9uZSkKKyAgICAgICAgcmV0dXJu
IGJyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKIAogICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgog
ICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJycpCiAgICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2UoaW50ZXJydXB0ZWQpCiAKICAgICBkZWYgdGVzdF9pbnRlcnJ1cHQoc2Vs
Zik6Ci0gICAgICAgIGludGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3RocmVhZCgnS2V5Ym9hcmRJ
bnRlcnJ1cHQnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50ZXJydXB0ZWQpCisgICAgICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKEtleWJvYXJkSW50ZXJydXB0LCBzZWxmLnJ1bl9vbmVfdGhyZWFk
LCAnS2V5Ym9hcmRJbnRlcnJ1cHQnKQogCiAgICAgZGVmIHRlc3RfdGltZW91dChzZWxmKToKICAg
ICAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQpAQCAtMTM3LDcgKzE1Nyw3
IEBAIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBmb3VuZF9zdGFjayA9
IG1lc3NhZ2VfYnJva2VyLl9maW5kX3RocmVhZF9zdGFjaygwKQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGZvdW5kX3N0YWNrLCBOb25lKQogCi0gICAgZGVmIHRlc3RfbG9nX3dlZGdlZF90aHJl
YWQoc2VsZik6CisgICAgZGVmIHRlc3RfbG9nX3dlZGdlZF93b3JrZXIoc2VsZik6CiAgICAgICAg
IG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKICAgICAgICAgb2MuY2FwdHVyZV9v
dXRwdXQoKQogICAgICAgICBsb2dnZXIgPSBtZXNzYWdlX2Jyb2tlci5fbG9nCkBAIC0xNTEsNyAr
MTcxLDggQEAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGNoaWxkX3Ro
cmVhZC5zdGFydCgpCiAgICAgICAgIG1zZyA9IHN0YXJ0aW5nX3F1ZXVlLmdldCgpCiAKLSAgICAg
ICAgbWVzc2FnZV9icm9rZXIubG9nX3dlZGdlZF90aHJlYWQoY2hpbGRfdGhyZWFkLmlkKCkpCisg
ICAgICAgIG1lc3NhZ2VfYnJva2VyLmxvZ193ZWRnZWRfd29ya2VyKGNoaWxkX3RocmVhZC5nZXRO
YW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkX3Ro
cmVhZC5pZCgpKQogICAgICAgICBzdG9wcGluZ19xdWV1ZS5wdXQoJycpCiAgICAgICAgIGNoaWxk
X3RocmVhZC5qb2luKHRpbWVvdXQ9MS4wKQogCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQppbmRl
eCA5MTI4YWU4NTQyYmI0Y2JkNGM5ZDlhNWU5Nzk5ZWZmMmI0MmI0OGQ5Li5kZDU5ZTEzODdkNWNh
OTJmMGY0M2I3ZmM2YTRkNDgxNWQwNDYxZTBjIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CisrKyBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkK
QEAgLTIzNSwxNyArMjM1LDE5IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgIyBpbiBEdW1wUmVu
ZGVyVHJlZS4KICAgICBERUZBVUxUX1RFU1RfVElNRU9VVF9NUyA9IDYgKiAxMDAwCiAKLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlcik6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHByaW50ZXIsIG1lc3NhZ2VfYnJva2VyKToKICAgICAg
ICAgIiIiSW5pdGlhbGl6ZSB0ZXN0IHJ1bm5lciBkYXRhIHN0cnVjdHVyZXMuCiAKICAgICAgICAg
QXJnczoKICAgICAgICAgICBwb3J0OiBhbiBvYmplY3QgaW1wbGVtZW50aW5nIHBvcnQtc3BlY2lm
aWMKICAgICAgICAgICBvcHRpb25zOiBhIGRpY3Rpb25hcnkgb2YgY29tbWFuZCBsaW5lIG9wdGlv
bnMKICAgICAgICAgICBwcmludGVyOiBhIFByaW50ZXIgb2JqZWN0IHRvIHJlY29yZCB1cGRhdGVz
IHRvLgorICAgICAgICAgIG1lc3NhZ2VfYnJva2VyOiBvYmplY3QgdXNlZCB0byBjb21tdW5pY2F0
ZSB3aXRoIHdvcmtlcnMuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAog
ICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwogICAgICAgICBzZWxmLl9wcmludGVyID0g
cHJpbnRlcgorICAgICAgICBzZWxmLl9tZXNzYWdlX2Jyb2tlciA9IG1lc3NhZ2VfYnJva2VyCiAK
ICAgICAgICAgIyBkaXNhYmxlIHdzcyBzZXJ2ZXIuIG5lZWQgdG8gaW5zdGFsbCBweU9wZW5TU0wg
b24gYnVpbGRib3RzLgogICAgICAgICAjIHNlbGYuX3dlYnNvY2tldF9zZWN1cmVfc2VydmVyID0g
d2Vic29ja2V0X3NlcnZlci5QeVdlYlNvY2tldCgKQEAgLTU1NywyOSArNTU5LDYgQEAgY2xhc3Mg
VGVzdFJ1bm5lcjoKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICByZXR1cm4g
RmFsc2UKIAotICAgIGRlZiBfaW5zdGFudGlhdGVfZHVtcF9yZW5kZXJfdHJlZV90aHJlYWRzKHNl
bGYsIHRlc3RfZmlsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0X3N1bW1hcnkpOgotICAgICAgICAiIiJJbnN0YW50aXRhdGVzIGFuZCBzdGFy
dHMgdGhlIFRlc3RTaGVsbFRocmVhZChzKS4KLQotICAgICAgICBSZXR1cm46Ci0gICAgICAgICAg
VGhlIGxpc3Qgb2YgdGhyZWFkcy4KLSAgICAgICAgIiIiCi0gICAgICAgIGZpbGVuYW1lX3F1ZXVl
ID0gc2VsZi5fZ2V0X3Rlc3RfZmlsZV9xdWV1ZSh0ZXN0X2ZpbGVzKQotCi0gICAgICAgICMgSW5z
dGFudGlhdGUgVGVzdFNoZWxsVGhyZWFkcyBhbmQgc3RhcnQgdGhlbS4KLSAgICAgICAgdGhyZWFk
cyA9IFtdCi0gICAgICAgIGZvciB3b3JrZXJfbnVtYmVyIGluIHhyYW5nZShpbnQoc2VsZi5fb3B0
aW9ucy5jaGlsZF9wcm9jZXNzZXMpKToKLSAgICAgICAgICAgIHRocmVhZCA9IGR1bXBfcmVuZGVy
X3RyZWVfdGhyZWFkLlRlc3RTaGVsbFRocmVhZChzZWxmLl9wb3J0LAotICAgICAgICAgICAgICAg
IHNlbGYuX29wdGlvbnMsIHdvcmtlcl9udW1iZXIsCi0gICAgICAgICAgICAgICAgZmlsZW5hbWVf
cXVldWUsIHNlbGYuX3Jlc3VsdF9xdWV1ZSkKLSAgICAgICAgICAgIGlmIHNlbGYuX2lzX3Npbmds
ZV90aHJlYWRlZCgpOgotICAgICAgICAgICAgICAgIHRocmVhZC5ydW5faW5fbWFpbl90aHJlYWQo
c2VsZiwgcmVzdWx0X3N1bW1hcnkpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAg
IHRocmVhZC5zdGFydCgpCi0gICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0aHJlYWQpCi0KLSAg
ICAgICAgcmV0dXJuIHRocmVhZHMKLQogICAgIGRlZiBfaXNfc2luZ2xlX3RocmVhZGVkKHNlbGYp
OgogICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgd2Ugc2hvdWxkIHJ1biBhbGwgdGhlIHRlc3Rz
IGluIHRoZSBtYWluIHRocmVhZC4iIiIKICAgICAgICAgcmV0dXJuIGludChzZWxmLl9vcHRpb25z
LmNoaWxkX3Byb2Nlc3NlcykgPT0gMQpAQCAtNTk4LDU5ICs1NzcsNDIgQEAgY2xhc3MgVGVzdFJ1
bm5lcjoKICAgICAgICAgICAgICAgaW4gdGhlIGZvcm0ge2ZpbGVuYW1lOmZpbGVuYW1lLCB0ZXN0
X3J1bl90aW1lOnRlc3RfcnVuX3RpbWV9CiAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeTogc3Vt
bWFyeSBvYmplY3QgdG8gcG9wdWxhdGUgd2l0aCB0aGUgcmVzdWx0cwogICAgICAgICAiIiIKKyAg
ICAgICAgbnVtX3dvcmtlcnMgPSBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpCisg
ICAgICAgIG1lc3NhZ2VfYnJva2VyID0gc2VsZi5fbWVzc2FnZV9icm9rZXIKKwogICAgICAgICAj
IEZJWE1FOiBXZSBzaG91bGQgdXNlIHdlYmtpdHB5LnRvb2wuZ3JhbW1hci5wbHVyYWxpemUgaGVy
ZS4KICAgICAgICAgcGx1cmFsID0gIiIKICAgICAgICAgaWYgbm90IHNlbGYuX2lzX3NpbmdsZV90
aHJlYWRlZCgpOgogICAgICAgICAgICAgcGx1cmFsID0gInMiCiAgICAgICAgIHNlbGYuX3ByaW50
ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyAlcyVzIC4uLicgJQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoc2VsZi5fcG9ydC5kcml2ZXJfbmFtZSgpLCBwbHVyYWwpKQotICAg
ICAgICB0aHJlYWRzID0gc2VsZi5faW5zdGFudGlhdGVfZHVtcF9yZW5kZXJfdHJlZV90aHJlYWRz
KGZpbGVfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKLSAgICAgICAgc2VsZi5fcHJpbnRlci5w
cmludF91cGRhdGUoIlN0YXJ0aW5nIHRlc3RpbmcgLi4uIikKIAotICAgICAgICBrZXlib2FyZF9p
bnRlcnJ1cHRlZCA9IHNlbGYuX3dhaXRfZm9yX3RocmVhZHNfdG9fZmluaXNoKHRocmVhZHMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0X3N1bW1hcnkpCi0gICAgICAgICh0aHJlYWRfdGltaW5ncywgdGVzdF90aW1p
bmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykgPSBcCi0gICAgICAgICAgICBzZWxmLl9jb2xs
ZWN0X3RpbWluZ19pbmZvKHRocmVhZHMpCisgICAgICAgIHNlbGYuX2N1cnJlbnRfZmlsZW5hbWVf
cXVldWUgPSBzZWxmLl9nZXRfdGVzdF9maWxlX3F1ZXVlKGZpbGVfbGlzdCkKKyAgICAgICAgc2Vs
Zi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSA9IHJlc3VsdF9zdW1tYXJ5CisgICAgICAgIHRocmVh
ZHMgPSBicm9rZXIuc3RhcnRfd29ya2VycyhzZWxmKQogCi0gICAgICAgIHJldHVybiAoa2V5Ym9h
cmRfaW50ZXJydXB0ZWQsIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCi0gICAgICAgICAg
ICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJp
bnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0aW5nIC4uLiIpCiAKLSAgICBkZWYgX3dhaXRfZm9yX3Ro
cmVhZHNfdG9fZmluaXNoKHNlbGYsIHRocmVhZHMsIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAg
a2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBGYWxzZQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICAj
IExvb3AgdGhyb3VnaCBhbGwgdGhlIHRocmVhZHMgd2FpdGluZyBmb3IgdGhlbSB0byBmaW5pc2gu
Ci0gICAgICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IFRydWUKLSAgICAgICAgICAgIHdo
aWxlIHNvbWVfdGhyZWFkX2lzX2FsaXZlOgotICAgICAgICAgICAgICAgIHNvbWVfdGhyZWFkX2lz
X2FsaXZlID0gRmFsc2UKLSAgICAgICAgICAgICAgICB0ID0gdGltZS50aW1lKCkKLSAgICAgICAg
ICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2Vw
dGlvbl9pbmZvID0gdGhyZWFkLmV4Y2VwdGlvbl9pbmZvKCkKLSAgICAgICAgICAgICAgICAgICAg
aWYgZXhjZXB0aW9uX2luZm8gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAj
IFJlLXJhaXNlIHRoZSB0aHJlYWQncyBleGNlcHRpb24gaGVyZSB0byBtYWtlIGl0Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAjIGNsZWFyIHRoYXQgdGVzdGluZyB3YXMgYWJvcnRlZC4gT3RoZXJ3
aXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgdGVzdHMgdGhhdCBkaWQgbm90IHJ1
biB3b3VsZCBiZSBhc3N1bWVkCi0gICAgICAgICAgICAgICAgICAgICAgICAjIHRvIGhhdmUgcGFz
c2VkLgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9uX2luZm9bMF0sIGV4
Y2VwdGlvbl9pbmZvWzFdLCBleGNlcHRpb25faW5mb1syXQotCi0gICAgICAgICAgICAgICAgICAg
IGlmIHRocmVhZC5pc0FsaXZlKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzb21lX3RocmVh
ZF9pc19hbGl2ZSA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfdGltZW91dCA9
IHRocmVhZC5uZXh0X3RpbWVvdXQoKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRf
dGltZW91dCBhbmQgdCA+IG5leHRfdGltZW91dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWVzc2FnZV9icm9rZXIubG9nX3dlZGdlZF90aHJlYWQodGhyZWFkLmlkKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhyZWFkLmNsZWFyX25leHRfdGltZW91dCgpCi0KLSAgICAg
ICAgICAgICAgICBzZWxmLnVwZGF0ZV9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQotCi0gICAgICAg
ICAgICAgICAgaWYgc29tZV90aHJlYWRfaXNfYWxpdmU6Ci0gICAgICAgICAgICAgICAgICAgIHRp
bWUuc2xlZXAoMC4wMSkKLQorICAgICAgICAgICAgbWVzc2FnZV9icm9rZXIuX3J1bl9tZXNzYWdl
X2xvb3AoKQogICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBf
bG9nLmluZm8oIkludGVycnVwdGVkLCBleGl0aW5nIikKKyAgICAgICAgICAgIGJyb2tlci5jYW5j
ZWxfd29ya2VycygpCiAgICAgICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IFRydWUKLSAg
ICAgICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgICAgICB0aHJlYWQu
Y2FuY2VsKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyBVbmV4cGVjdGVkIGV4Y2Vw
dGlvbjsgZG9uJ3QgdHJ5IHRvIGNsZWFuIHVwIHdvcmtlcnMuCisgICAgICAgICAgICBfbG9nLmlu
Zm8oIkV4Y2VwdGlvbiByYWlzZWQsIGV4aXRpbmciKQorICAgICAgICAgICAgcmFpc2UKKworICAg
ICAgICB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5n
cyA9IFwKKyAgICAgICAgICAgIHNlbGYuX2NvbGxlY3RfdGltaW5nX2luZm8odGhyZWFkcykKIAot
ICAgICAgICByZXR1cm4ga2V5Ym9hcmRfaW50ZXJydXB0ZWQKKyAgICAgICAgcmV0dXJuIChrZXli
b2FyZF9pbnRlcnJ1cHRlZCwgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywKKyAgICAgICAg
ICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKKworICAgIGRlZiB1cGRhdGUoc2VsZik6
CisgICAgICAgIHNlbGYudXBkYXRlX3N1bW1hcnkoc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFy
eSkKIAogICAgIGRlZiBfY29sbGVjdF90aW1pbmdfaW5mbyhzZWxmLCB0aHJlYWRzKToKICAgICAg
ICAgdGVzdF90aW1pbmdzID0ge30KQEAgLTkyNiw2ICs4ODgsNyBAQCBjbGFzcyBUZXN0UnVubmVy
OgogICAgICAgICAgICAgcC5wcmludF9jb25maWcoIlJ1bm5pbmcgJXMgJXNzIGluIHBhcmFsbGVs
IiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9j
ZXNzZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5kcml2ZXJfbmFt
ZSgpKSkKKyAgICAgICAgcC5wcmludF9jb25maWcoIldvcmtlcnMgYXJlICVzIiAlIHNlbGYuX29w
dGlvbnMud29ya2Vyc19hcmUpCiAgICAgICAgIHAucHJpbnRfY29uZmlnKCIiKQogCiAgICAgZGVm
IF9wcmludF9leHBlY3RlZF9yZXN1bHRzX29mX3R5cGUoc2VsZiwgcmVzdWx0X3N1bW1hcnksCkBA
IC0xMzE1LDExICsxMjc4LDEzIEBAIGRlZiBydW4ocG9ydCwgb3B0aW9ucywgYXJncywgcmVndWxh
cl9vdXRwdXQ9c3lzLnN0ZGVyciwKICAgICAgICAgcHJpbnRlci5jbGVhbnVwKCkKICAgICAgICAg
cmV0dXJuIDAKIAorICAgIGJyb2tlciA9IG1lc3NhZ2VfYnJva2VyLmdldChwb3J0LCBvcHRpb25z
KQorCiAgICAgIyBXZSB3cmFwIGFueSBwYXJ0cyBvZiB0aGUgcnVuIHRoYXQgYXJlIHNsb3cgb3Ig
bGlrZWx5IHRvIHJhaXNlIGV4Y2VwdGlvbnMKICAgICAjIGluIGEgdHJ5L2ZpbmFsbHkgdG8gZW5z
dXJlIHRoYXQgd2UgY2xlYW4gdXAgdGhlIGxvZ2dpbmcgY29uZmlndXJhdGlvbi4KICAgICBudW1f
dW5leHBlY3RlZF9yZXN1bHRzID0gLTEKICAgICB0cnk6Ci0gICAgICAgIHRlc3RfcnVubmVyID0g
VGVzdFJ1bm5lcihwb3J0LCBvcHRpb25zLCBwcmludGVyKQorICAgICAgICB0ZXN0X3J1bm5lciA9
IFRlc3RSdW5uZXIocG9ydCwgb3B0aW9ucywgcHJpbnRlciwgYnJva2VyKQogICAgICAgICB0ZXN0
X3J1bm5lci5fcHJpbnRfY29uZmlnKCkKIAogICAgICAgICBwcmludGVyLnByaW50X3VwZGF0ZSgi
Q29sbGVjdGluZyB0ZXN0cyAuLi4iKQpAQCAtMTM0OCw2ICsxMzEzLDcgQEAgZGVmIHJ1bihwb3J0
LCBvcHRpb25zLCBhcmdzLCByZWd1bGFyX291dHB1dD1zeXMuc3RkZXJyLAogICAgICAgICAgICAg
X2xvZy5kZWJ1ZygiVGVzdGluZyBjb21wbGV0ZWQsIEV4aXQgc3RhdHVzOiAlZCIgJQogICAgICAg
ICAgICAgICAgICAgICAgICBudW1fdW5leHBlY3RlZF9yZXN1bHRzKQogICAgIGZpbmFsbHk6Cisg
ICAgICAgIGJyb2tlci5jbGVhbnVwKCkKICAgICAgICAgcHJpbnRlci5jbGVhbnVwKCkKIAogICAg
IHJldHVybiBudW1fdW5leHBlY3RlZF9yZXN1bHRzCkBAIC0xMzU2LDYgKzEzMjIsMTAgQEAgZGVm
IHJ1bihwb3J0LCBvcHRpb25zLCBhcmdzLCByZWd1bGFyX291dHB1dD1zeXMuc3RkZXJyLAogZGVm
IF9zZXRfdXBfZGVyaXZlZF9vcHRpb25zKHBvcnRfb2JqLCBvcHRpb25zKToKICAgICAiIiJTZXRz
IHRoZSBvcHRpb25zIHZhbHVlcyB0aGF0IGRlcGVuZCBvbiBvdGhlciBvcHRpb25zIHZhbHVlcy4i
IiIKIAorICAgIGlmIG9wdGlvbnMud29ya2Vyc19hcmUgPT0gJ2lubGluZSc6CisgICAgICAgIGlm
IG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzIGFuZCBpbnQob3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMp
ID4gMToKKyAgICAgICAgICAgIF9sb2cud2FybmluZygiLS13b3JrZXJzLWFyZT1pbmxpbmUgb3Zl
cnJpZGVzIC0tY2hpbGQtcHJvY2Vzc2VzIikKKyAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNz
ZXMgPSAiMSIKICAgICBpZiBub3Qgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXM6CiAgICAgICAgICMg
RklYTUU6IEludmVzdGlnYXRlIHBlcmYvZmxha2luZXNzIGltcGFjdCBvZiB1c2luZyBjcHVfY291
bnQgKyAxLgogICAgICAgICBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyA9IG9zLmVudmlyb24uZ2V0
KCJXRUJLSVRfVEVTVF9DSElMRF9QUk9DRVNTRVMiLApAQCAtMTU3OSw2ICsxNTQ5LDkgQEAgZGVm
IHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGhlbHA9
InJ1biBhIHNlcGFyYXRlIER1bXBSZW5kZXJUcmVlIGZvciBlYWNoIHRlc3QiKSwKICAgICAgICAg
b3B0cGFyc2UubWFrZV9vcHRpb24oIi0tY2hpbGQtcHJvY2Vzc2VzIiwKICAgICAgICAgICAgIGhl
bHA9Ik51bWJlciBvZiBEdW1wUmVuZGVyVHJlZXMgdG8gcnVuIGluIHBhcmFsbGVsLiIpLAorICAg
ICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS13b3JrZXJzLWFyZSIsIGFjdGlvbj0ic3RvcmUi
LAorICAgICAgICAgICAgZGVmYXVsdD0idGhyZWFkcyIsIGhlbHA9KCJjb250cm9scyB3b3JrZXIg
bW9kZWwuIFZhbGlkIHZhbHVlcyBhcmUgIgorICAgICAgICAgICAgICAgICAiJ2lubGluZScgYW5k
ICd0aHJlYWRzJyAoZGVmYXVsdCkuIikpLAogICAgICAgICAjIEZJWE1FOiBEaXNwbGF5IGRlZmF1
bHQgbnVtYmVyIG9mIGNoaWxkIHByb2Nlc3NlcyB0aGF0IHdpbGwgcnVuLgogICAgICAgICBvcHRw
YXJzZS5tYWtlX29wdGlvbigiLS1leHBlcmltZW50YWwtZnVsbHktcGFyYWxsZWwiLAogICAgICAg
ICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNf
dW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CmluZGV4IDNkZmMzZTYxMjYxNGM1YjhiZDNhMzBk
ZjFjZWY5NTU2YTUwZmE0YzUuLjZlOTYyYjUyN2QwMzNlMTNhZDUyNjNiZThlNmNmZGEzYjQ2YmNj
ZmUgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQpAQCAtNDM5
LDcgKzQzOSw3IEBAIGNsYXNzIFRlc3RSdW5uZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAg
ICAgICAgbW9ja19wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUgPSBsYW1iZGEgbmFtZTogbmFt
ZQogICAgICAgICBtb2NrX3BvcnQuZmlsZW5hbWVfdG9fdXJpID0gbGFtYmRhIG5hbWU6IG5hbWUK
IAotICAgICAgICBydW5uZXIgPSBydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIocG9ydD1tb2Nr
X3BvcnQsIG9wdGlvbnM9TW9jaygpLCBwcmludGVyPU1vY2soKSkKKyAgICAgICAgcnVubmVyID0g
cnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVubmVyKHBvcnQ9bW9ja19wb3J0LCBvcHRpb25zPU1vY2so
KSwgcHJpbnRlcj1Nb2NrKCksIGJyb2tlcj1Nb2NrKCkpCiAgICAgICAgIGV4cGVjdGVkX2h0bWwg
PSB1IiIiPGh0bWw+CiAgIDxoZWFkPgogICAgIDx0aXRsZT5MYXlvdXQgVGVzdCBSZXN1bHRzICh0
aW1lKTwvdGl0bGU+CkBAIC00NjUsNyArNDY1LDcgQEAgY2xhc3MgVGVzdFJ1bm5lclRlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2dldF90ZXN0X2ZpbGVfcXVldWUoc2VsZik6
CiAgICAgICAgICMgVGVzdCB0aGF0IF9nZXRfdGVzdF9maWxlX3F1ZXVlIGluIHJ1bl93ZWJraXRf
dGVzdHMuVGVzdFJ1bm5lciByZWFsbHkKICAgICAgICAgIyBwdXQgdGhlIGh0dHAgdGVzdHMgZmly
c3QgaW4gdGhlIHF1ZXVlLgotICAgICAgICBydW5uZXIgPSBUZXN0UnVubmVyV3JhcHBlcihwb3J0
PU1vY2soKSwgb3B0aW9ucz1Nb2NrKCksIHByaW50ZXI9TW9jaygpKQorICAgICAgICBydW5uZXIg
PSBUZXN0UnVubmVyV3JhcHBlcihwb3J0PU1vY2soKSwgb3B0aW9ucz1Nb2NrKCksIHByaW50ZXI9
TW9jaygpLCBicm9rZXI9TW9jaygpKQogICAgICAgICBydW5uZXIuX29wdGlvbnMuZXhwZXJpbWVu
dGFsX2Z1bGx5X3BhcmFsbGVsID0gRmFsc2UKIAogICAgICAgICB0ZXN0X2xpc3QgPSBbCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74702</attachid>
            <date>2010-11-23 15:35:57 -0800</date>
            <delta_ts>2010-11-23 17:09:41 -0800</delta_ts>
            <desc>update w/ more review feedback.</desc>
            <filename>bug-49779-20101123153556.patch</filename>
            <type>text/plain</type>
            <size>27616</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBiYzE3ZTgxMGFiMTE5MmM5YjIyNjI5MjdlZTlkOGQwNjYwZWJhMWI1Li5mMTgxOTU1
ZTYzZDcwNTFiMzVhMGViODM5MDMwY2QzMDU5YTkxODRkIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTAtMTEtMTggIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBs
ZW1lbnRzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBtYW5hZ2VyIHNpZGUgb2YgdGhlCisgICAgICAg
IEJyb2tlciBvYmplY3RzIC0gaXQgaGFuZGxlcyBjcmVhdGluZyB0aHJlYWRzLCB3YWl0aW5nIGZv
ciB0aGVtCisgICAgICAgIHRvIGNvbXBsZXRlLCBhbmQgcnVubmluZyBhIHNpbmdsZS10aHJlYWRl
ZCBsb29wIGFzIHdlbGwuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ5Nzc5CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcl91bml0dGVz
dC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0
X3Rlc3RzLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6CisKIDIwMTAtMTEtMjIgIERpcmsgUHJhbmtlICA8ZHBy
YW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90
aHJlYWQucHkKaW5kZXggMWJhYzdlZjE4ZTNlMmVhN2E2ZGNmNWZhMzc0MDI2NzhlN2FlMmEyYi4u
MzhjZjZjMzUyMzc3YjM5NmMwYzk1OTFlN2E1YjViOTc0NWQ3YTg3YSAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVt
cF9yZW5kZXJfdHJlZV90aHJlYWQucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkK
QEAgLTI0NCw3ICsyNDQsNyBAQCBjbGFzcyBXYXRjaGFibGVUaHJlYWQodGhyZWFkaW5nLlRocmVh
ZCk6CiAKIAogY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6Ci0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHdvcmtlcl9udW1iZXIsCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHdvcmtlcl9udW1iZXIsIHdvcmtlcl9uYW1lLAog
ICAgICAgICAgICAgICAgICBmaWxlbmFtZV9saXN0X3F1ZXVlLCByZXN1bHRfcXVldWUpOgogICAg
ICAgICAiIiJJbml0aWFsaXplIGFsbCB0aGUgbG9jYWwgc3RhdGUgZm9yIHRoaXMgRHVtcFJlbmRl
clRyZWUgdGhyZWFkLgogCkBAIC0yNTIsNiArMjUyLDcgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFk
KFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgICAgcG9ydDogaW50ZXJmYWNlIHRvIHBvcnQtc3Bl
Y2lmaWMgaG9va3MKICAgICAgICAgICBvcHRpb25zOiBjb21tYW5kIGxpbmUgb3B0aW9ucyBhcmd1
bWVudCBmcm9tIG9wdHBhcnNlCiAgICAgICAgICAgd29ya2VyX251bWJlcjogaWRlbnRpZmllciBm
b3IgYSBwYXJ0aWN1bGFyIHdvcmtlciB0aHJlYWQuCisgICAgICAgICAgd29ya2VyX25hbWU6IGZv
ciBsb2dnaW5nLgogICAgICAgICAgIGZpbGVuYW1lX2xpc3RfcXVldWU6IEEgdGhyZWFkIHNhZmUg
UXVldWUgY2xhc3MgdGhhdCBjb250YWlucyBsaXN0cwogICAgICAgICAgICAgICBvZiB0dXBsZXMg
b2YgKGZpbGVuYW1lLCB1cmkpIHBhaXJzLgogICAgICAgICAgIHJlc3VsdF9xdWV1ZTogQSB0aHJl
YWQgc2FmZSBRdWV1ZSBjbGFzcyB0aGF0IHdpbGwgY29udGFpbgpAQCAtMjYxLDcgKzI2Miw3IEBA
IGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgogICAgICAgICBzZWxmLl9w
b3J0ID0gcG9ydAogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwogICAgICAgICBzZWxm
Ll93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgotICAgICAgICBzZWxmLl9uYW1lID0gJ3dv
cmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX25hbWUgPSB3b3JrZXJfbmFt
ZQogICAgICAgICBzZWxmLl9maWxlbmFtZV9saXN0X3F1ZXVlID0gZmlsZW5hbWVfbGlzdF9xdWV1
ZQogICAgICAgICBzZWxmLl9yZXN1bHRfcXVldWUgPSByZXN1bHRfcXVldWUKICAgICAgICAgc2Vs
Zi5fZmlsZW5hbWVfbGlzdCA9IFtdCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlci5weSBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21l
c3NhZ2VfYnJva2VyLnB5CmluZGV4IDEzOTUxYzAyZWYzZDE3MmEzOWU3MzY5Y2ViMjE5N2YxY2Jj
YjliOTguLjdjNzI3YzJhODA1NzFlZTY0MWY3YTZlNGJmYzQ0ZGZkMjU3YTBlZWUgMTAwNjQ0Ci0t
LSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL21lc3NhZ2VfYnJva2VyLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5CkBAIC0yOCwyNSAr
MjgsMTU0IEBACiAKICIiIk1vZHVsZSBmb3IgaGFuZGxpbmcgbWVzc2FnZXMsIHRocmVhZHMsIHBy
b2Nlc3NlcywgYW5kIGNvbmN1cnJlbmN5IGZvciBydW4td2Via2l0LXRlc3RzLgogCi1UaGUgbW9k
ZWwgd2UgdXNlIGlzIHRoYXQgb2YgYSBtZXNzYWdlIGJyb2tlciAtIGl0IHByb3ZpZGVzIGEgbWVz
c2FnaW5nCi1hYnN0cmFjdGlvbiBhbmQgbWVzc2FnZSBsb29wcywgYW5kIGhhbmRsZXMgbGF1bmNo
aW5nIHRocmVhZHMgYW5kL29yIHByb2Nlc3NlcwotZGVwZW5kaW5nIG9uIHRoZSByZXF1ZXN0ZWQg
Y29uZmlndXJhdGlvbi4KK1Rlc3RpbmcgaXMgYWNjb21wbGlzaGVkIGJ5IGhhdmluZyBhIG1hbmFn
ZXIgKFRlc3RSdW5uZXIpIGdhdGhlciBhbGwgb2YgdGhlCit0ZXN0cyB0byBiZSBydW4sIGFuZCBz
ZW5kaW5nIG1lc3NhZ2VzIHRvIGEgcG9vbCBvZiB3b3JrZXJzIChUZXN0U2hlbGxUaHJlYWRzKQor
dG8gcnVuIGVhY2ggdGVzdC4gRWFjaCB3b3JrZXIgY29tbXVuaWNhdGVzIHdpdGggb25lIGRyaXZl
ciAodXN1YWxseQorRHVtcFJlbmRlclRyZWUpIHRvIHJ1biBvbmUgdGVzdCBhdCBhIHRpbWUgYW5k
IHRoZW4gY29tcGFyZSB0aGUgb3V0cHV0IGFnYWluc3QKK3doYXQgd2UgZXhwZWN0ZWQgdG8gZ2V0
LgorCitUaGlzIG1vZHVsZXMgcHJvdmlkZXMgYSBtZXNzYWdlIGJyb2tlciB0aGF0IGNvbm5lY3Rz
IHRoZSBtYW5hZ2VyIHRvIHRoZQord29ya2VyczogaXQgcHJvdmlkZXMgYSBtZXNzYWdpbmcgYWJz
dHJhY3Rpb24gYW5kIG1lc3NhZ2UgbG9vcHMsIGFuZAoraGFuZGxlcyBsYXVuY2hpbmcgdGhyZWFk
cyBhbmQvb3IgcHJvY2Vzc2VzIGRlcGVuZGluZyBvbiB0aGUKK3JlcXVlc3RlZCBjb25maWd1cmF0
aW9uLgogIiIiCiAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3lzCitpbXBvcnQgdGltZQogaW1w
b3J0IHRyYWNlYmFjawogCitpbXBvcnQgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQKIAogX2xvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAKLWRlZiBsb2dfd2VkZ2VkX3RocmVhZChp
ZCk6Ci0gICAgIiIiTG9nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBnaXZlbiB0aHJlYWQgc3RhdGUu
IiIiCitkZWYgZ2V0KHBvcnQsIG9wdGlvbnMpOgorICAgICIiIlJldHVybiBhbiBpbnN0YW5jZSBv
ZiBhIFdvcmtlck1lc3NhZ2VCcm9rZXIuIiIiCisgICAgd29ya2VyX21vZGVsID0gb3B0aW9ucy53
b3JrZXJfbW9kZWwKKyAgICBpZiB3b3JrZXJfbW9kZWwgPT0gJ2lubGluZSc6CisgICAgICAgIHJl
dHVybiBTaW5nbGVUaHJlYWRlZEJyb2tlcihwb3J0LCBvcHRpb25zKQorICAgIGlmIHdvcmtlcl9t
b2RlbCA9PSAndGhyZWFkcyc6CisgICAgICAgIHJldHVybiBNdWx0aVRocmVhZGVkQnJva2VyKHBv
cnQsIG9wdGlvbnMpCisgICAgcmFpc2UgVmFsdWVFcnJvcigndW5zdXBwb3J0ZWQgdmFsdWUgZm9y
IC0td29ya2VyLW1vZGVsOiAlcycgJSB3b3JrZXJfbW9kZWwpCisKKworY2xhc3MgX1dvcmtlclN0
YXRlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxm
Lm5hbWUgPSBOb25lCisgICAgICAgIHNlbGYudGhyZWFkID0gTm9uZQorCisKK2NsYXNzIFdvcmtl
ck1lc3NhZ2VCcm9rZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0
aW9ucyk6CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX29wdGlvbnMg
PSBvcHRpb25zCisgICAgICAgIHNlbGYuX251bV93b3JrZXJzID0gaW50KHNlbGYuX29wdGlvbnMu
Y2hpbGRfcHJvY2Vzc2VzKQorCisgICAgICAgICMgVGhpcyBtYXBzIHdvcmtlciBuYW1lcyB0byB0
aGVpciBfV29ya2VyU3RhdGUgdmFsdWVzLgorICAgICAgICBzZWxmLl93b3JrZXJzID0ge30KKwor
ICAgIGRlZiBfdGhyZWFkcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHR1cGxlKFt3LnRocmVhZCBm
b3IgdyBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpXSkKKworICAgIGRlZiBzdGFydF93b3JrZXJz
KHNlbGYsIHRlc3RfcnVubmVyKToKKyAgICAgICAgIiIiU3RhcnRzIHVwIHRoZSBwb29sIG9mIHdv
cmtlcnMgZm9yIHJ1bm5pbmcgdGhlIHRlc3RzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg
ICB0ZXN0X3J1bm5lcjogYSBoYW5kbGUgdG8gdGhlIG1hbmFnZXIvVGVzdFJ1bm5lciBvYmplY3QK
KyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyID0gdGVzdF9ydW5uZXIKKyAg
ICAgICAgZm9yIHdvcmtlcl9udW1iZXIgaW4geHJhbmdlKHNlbGYuX251bV93b3JrZXJzKToKKyAg
ICAgICAgICAgIHdvcmtlciA9IF9Xb3JrZXJTdGF0ZSgnd29ya2VyLSVkJyAlIHdvcmtlcl9udW1i
ZXIpCisgICAgICAgICAgICB3b3JrZXIudGhyZWFkID0gc2VsZi5fc3RhcnRfd29ya2VyKHdvcmtl
cl9udW1iZXIsIHdvcmtlci5uYW1lKQorICAgICAgICAgICAgc2VsZi5fd29ya2Vyc1t3b3JrZXIu
bmFtZV0gPSB3b3JrZXIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RocmVhZHMoKQorCisgICAgZGVm
IF9zdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlciwgd29ya2VyX25hbWUpOgorICAgICAg
ICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcnVuX21lc3NhZ2VfbG9vcChz
ZWxmKToKKyAgICAgICAgIiIiTG9vcCBwcm9jZXNzaW5nIG1lc3NhZ2VzIHVudGlsIGRvbmUuIiIi
CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjYW5jZWxfd29y
a2VycyhzZWxmKToKKyAgICAgICAgIiIiQ2FuY2VsL2ludGVycnVwdCBhbnkgd29ya2VycyB0aGF0
IGFyZSBzdGlsbCBhbGl2ZS4iIiIKKyAgICAgICAgcGFzcworCisgICAgZGVmIGNsZWFudXAoc2Vs
Zik6CisgICAgICAgICIiIlBlcmZvcm0gYW55IG5lY2Vzc2FyeSBjbGVhbnVwIG9uIHNodXRkb3du
LiIiIgorICAgICAgICBwYXNzCisKKworY2xhc3MgU2luZ2xlVGhyZWFkZWRCcm9rZXIoV29ya2Vy
TWVzc2FnZUJyb2tlcik6CisgICAgZGVmIF9zdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJl
ciwgd29ya2VyX25hbWUpOgorICAgICAgICAjIEZJWE1FOiBSZXBsYWNlIHdpdGggc29tZXRoaW5n
IHRoYXQgaXNuJ3QgYSB0aHJlYWQuCisgICAgICAgIHRocmVhZCA9IGR1bXBfcmVuZGVyX3RyZWVf
dGhyZWFkLlRlc3RTaGVsbFRocmVhZChzZWxmLl9wb3J0LAorICAgICAgICAgICAgc2VsZi5fb3B0
aW9ucywgd29ya2VyX251bWJlciwgd29ya2VyX25hbWUsCisgICAgICAgICAgICBzZWxmLl90ZXN0
X3J1bm5lci5fY3VycmVudF9maWxlbmFtZV9xdWV1ZSwKKyAgICAgICAgICAgIHNlbGYuX3Rlc3Rf
cnVubmVyLl9yZXN1bHRfcXVldWUpCisgICAgICAgICMgTm90ZTogRG9uJ3Qgc3RhcnQoKSB0aGUg
dGhyZWFkISBJZiB3ZSBkaWQsIGl0IHdvdWxkIGFjdHVhbGx5CisgICAgICAgICMgY3JlYXRlIGFu
b3RoZXIgdGhyZWFkIGFuZCBzdGFydCBleGVjdXRpbmcgaXQsIGFuZCB3ZSdkIG5vIGxvbmdlcgor
ICAgICAgICAjIGJlIHNpbmdsZS10aHJlYWRlZC4KKyAgICAgICAgcmV0dXJuIHRocmVhZAorCisg
ICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZik6CisgICAgICAgIHRocmVhZCA9IHNlbGYuX3Ro
cmVhZHMoKVswXQorICAgICAgICB0aHJlYWQucnVuX2luX21haW5fdGhyZWFkKHNlbGYuX3Rlc3Rf
cnVubmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfcnVu
bmVyLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5KQorICAgICAgICBzZWxmLl90ZXN0X3J1bm5lci51
cGRhdGUoKQorCisKK2NsYXNzIE11bHRpVGhyZWFkZWRCcm9rZXIoV29ya2VyTWVzc2FnZUJyb2tl
cik6CisgICAgZGVmIF9zdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlciwgd29ya2VyX25h
bWUpOgorICAgICAgICB0aHJlYWQgPSBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5UZXN0U2hlbGxU
aHJlYWQoc2VsZi5fcG9ydCwKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMsIHdvcmtlcl9udW1i
ZXIsIHdvcmtlcl9uYW1lLAorICAgICAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXIuX2N1cnJlbnRf
ZmlsZW5hbWVfcXVldWUsCisgICAgICAgICAgICBzZWxmLl90ZXN0X3J1bm5lci5fcmVzdWx0X3F1
ZXVlKQorICAgICAgICB0aHJlYWQuc3RhcnQoKQorICAgICAgICByZXR1cm4gdGhyZWFkCisKKyAg
ICBkZWYgcnVuX21lc3NhZ2VfbG9vcChzZWxmKToKKyAgICAgICAgdGhyZWFkcyA9IHNlbGYuX3Ro
cmVhZHMoKQorCisgICAgICAgICMgTG9vcCB0aHJvdWdoIGFsbCB0aGUgdGhyZWFkcyB3YWl0aW5n
IGZvciB0aGVtIHRvIGZpbmlzaC4KKyAgICAgICAgc29tZV90aHJlYWRfaXNfYWxpdmUgPSBUcnVl
CisgICAgICAgIHdoaWxlIHNvbWVfdGhyZWFkX2lzX2FsaXZlOgorICAgICAgICAgICAgc29tZV90
aHJlYWRfaXNfYWxpdmUgPSBGYWxzZQorICAgICAgICAgICAgdCA9IHRpbWUudGltZSgpCisgICAg
ICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6CisgICAgICAgICAgICAgICAgZXhjZXB0aW9u
X2luZm8gPSB0aHJlYWQuZXhjZXB0aW9uX2luZm8oKQorICAgICAgICAgICAgICAgIGlmIGV4Y2Vw
dGlvbl9pbmZvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAjIFJlLXJhaXNlIHRo
ZSB0aHJlYWQncyBleGNlcHRpb24gaGVyZSB0byBtYWtlIGl0CisgICAgICAgICAgICAgICAgICAg
ICMgY2xlYXIgdGhhdCB0ZXN0aW5nIHdhcyBhYm9ydGVkLiBPdGhlcndpc2UsCisgICAgICAgICAg
ICAgICAgICAgICMgdGhlIHRlc3RzIHRoYXQgZGlkIG5vdCBydW4gd291bGQgYmUgYXNzdW1lZAor
ICAgICAgICAgICAgICAgICAgICAjIHRvIGhhdmUgcGFzc2VkLgorICAgICAgICAgICAgICAgICAg
ICByYWlzZSBleGNlcHRpb25faW5mb1swXSwgZXhjZXB0aW9uX2luZm9bMV0sIGV4Y2VwdGlvbl9p
bmZvWzJdCisKKyAgICAgICAgICAgICAgICBpZiB0aHJlYWQuaXNBbGl2ZSgpOgorICAgICAgICAg
ICAgICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IFRydWUKKyAgICAgICAgICAgICAgICAg
ICAgbmV4dF90aW1lb3V0ID0gdGhyZWFkLm5leHRfdGltZW91dCgpCisgICAgICAgICAgICAgICAg
ICAgIGlmIG5leHRfdGltZW91dCBhbmQgdCA+IG5leHRfdGltZW91dDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxvZ193ZWRnZWRfd29ya2VyKHRocmVhZC5nZXROYW1lKCksIHRocmVhZC5pZCgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkLmNsZWFyX25leHRfdGltZW91dCgpCisK
KyAgICAgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyLnVwZGF0ZSgpCisKKyAgICAgICAgICAgIGlm
IHNvbWVfdGhyZWFkX2lzX2FsaXZlOgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkK
KworICAgIGRlZiBjYW5jZWxfd29ya2VycyhzZWxmKToKKyAgICAgICAgdGhyZWFkcyA9IHNlbGYu
X3RocmVhZHMoKQorICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6CisgICAgICAgICAgICB0
aHJlYWQuY2FuY2VsKCkKKworCitkZWYgbG9nX3dlZGdlZF93b3JrZXIobmFtZSwgaWQpOgorICAg
ICIiIkxvZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZ2l2ZW4gd29ya2VyIHN0YXRlLiIiIgogICAg
IHN0YWNrID0gX2ZpbmRfdGhyZWFkX3N0YWNrKGlkKQogICAgIGFzc2VydChzdGFjayBpcyBub3Qg
Tm9uZSkKICAgICBfbG9nLmVycm9yKCIiKQotICAgIF9sb2cuZXJyb3IoIlRocmVhZCAlZCBpcyB3
ZWRnZWQiICUgaWQpCisgICAgX2xvZy5lcnJvcigiJXMgKHRpZCAlZCkgaXMgd2VkZ2VkIiAlIChu
YW1lLCBpZCkpCiAgICAgX2xvZ19zdGFjayhzdGFjaykKICAgICBfbG9nLmVycm9yKCIiKQogCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcl91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyX3Vu
aXR0ZXN0LnB5CmluZGV4IGQ3MDg3NDU1YjNjYzUwZTgyYzdjMzE4Y2IzODdhMmRiOThmMjEwMTcu
Ljc3ODQ1ZTdjZjQxNGEyNjJhN2ZjNTBkNmMwOGJmMDFlYjViMjkxODEgMTAwNjQ0Ci0tLSBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21l
c3NhZ2VfYnJva2VyX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyX3VuaXR0ZXN0LnB5
CkBAIC0zMCwyNSArMzAsMzQgQEAgaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBRdWV1ZQogaW1wb3J0
IHN5cwogaW1wb3J0IHRocmVhZAoraW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHRpbWUKIGltcG9y
dCB1bml0dGVzdAogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgYXJyYXlfc3RyZWFtCiBm
cm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IG91dHB1dGNhcHR1cmUKK2Zyb20gd2Vi
a2l0cHkudG9vbCBpbXBvcnQgbW9ja3Rvb2wKIAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMg
aW1wb3J0IHJ1bl93ZWJraXRfdGVzdHMKIAotaW1wb3J0IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
CiBpbXBvcnQgbWVzc2FnZV9icm9rZXIKIAogCi1jbGFzcyBUZXN0VGhyZWFkKGR1bXBfcmVuZGVy
X3RyZWVfdGhyZWFkLldhdGNoYWJsZVRocmVhZCk6CitjbGFzcyBUZXN0VGhyZWFkKHRocmVhZGlu
Zy5UaHJlYWQpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGFydGVkX3F1ZXVlLCBzdG9wcGlu
Z19xdWV1ZSk6Ci0gICAgICAgIGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLldhdGNoYWJsZVRocmVh
ZC5fX2luaXRfXyhzZWxmKQorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYp
CisgICAgICAgIHNlbGYuX3RocmVhZF9pZCA9IE5vbmUKICAgICAgICAgc2VsZi5fc3RhcnRlZF9x
dWV1ZSA9IHN0YXJ0ZWRfcXVldWUKICAgICAgICAgc2VsZi5fc3RvcHBpbmdfcXVldWUgPSBzdG9w
cGluZ19xdWV1ZQogICAgICAgICBzZWxmLl90aW1lb3V0ID0gRmFsc2UKICAgICAgICAgc2VsZi5f
dGltZW91dF9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2lu
Zm8gPSBOb25lCisKKyAgICBkZWYgaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90aHJl
YWRfaWQKKworICAgIGRlZiBnZXROYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIndvcmtlci0w
IgogCiAgICAgZGVmIHJ1bihzZWxmKToKICAgICAgICAgc2VsZi5fY292ZXJlZF9ydW4oKQpAQCAt
NzAsMTIgKzc5LDE3IEBAIGNsYXNzIFRlc3RUaHJlYWQoZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQu
V2F0Y2hhYmxlVGhyZWFkKToKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgc2VsZi5fZXhj
ZXB0aW9uX2luZm8gPSBzeXMuZXhjX2luZm8oKQogCisgICAgZGVmIGV4Y2VwdGlvbl9pbmZvKHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZXhjZXB0aW9uX2luZm8KKwogICAgIGRlZiBuZXh0
X3RpbWVvdXQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX3RpbWVvdXQ6CiAgICAgICAgICAgICBz
ZWxmLl90aW1lb3V0X3F1ZXVlLnB1dCgnZG9uZScpCiAgICAgICAgICAgICByZXR1cm4gdGltZS50
aW1lKCkgLSAxMAogICAgICAgICByZXR1cm4gdGltZS50aW1lKCkKIAorICAgIGRlZiBjbGVhcl9u
ZXh0X3RpbWVvdXQoc2VsZik6CisgICAgICAgIHNlbGYuX25leHRfdGltZW91dCA9IE5vbmUKIAog
Y2xhc3MgVGVzdEhhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKICAgICBkZWYgX19pbml0X18oc2Vs
ZiwgYXN0cmVhbSk6CkBAIC04NywzNCArMTAxLDQwIEBAIGNsYXNzIFRlc3RIYW5kbGVyKGxvZ2dp
bmcuSGFuZGxlcik6CiAKIAogY2xhc3MgV2FpdEZvclRocmVhZHNUb0ZpbmlzaFRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgotICAgIGNsYXNzIE1vY2tUZXN0UnVubmVyKHJ1bl93ZWJraXRfdGVzdHMu
VGVzdFJ1bm5lcik6CisgICAgY2xhc3MgTW9ja1Rlc3RSdW5uZXIob2JqZWN0KToKICAgICAgICAg
ZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGRlZiBfX2Rl
bF9fKHNlbGYpOgogICAgICAgICAgICAgcGFzcwogCi0gICAgICAgIGRlZiB1cGRhdGVfc3VtbWFy
eShzZWxmLCByZXN1bHRfc3VtbWFyeSk6CisgICAgICAgIGRlZiB1cGRhdGUoc2VsZik6CiAgICAg
ICAgICAgICBwYXNzCiAKICAgICBkZWYgcnVuX29uZV90aHJlYWQoc2VsZiwgbXNnKToKKyAgICAg
ICAgIyBGSVhNRTogaW1wbGVtZW50CiAgICAgICAgIHJ1bm5lciA9IHNlbGYuTW9ja1Rlc3RSdW5u
ZXIoKQorICAgICAgICBwb3J0ID0gTm9uZQorICAgICAgICBvcHRpb25zID0gbW9ja3Rvb2wuTW9j
a09wdGlvbnMod29ya2Vyc19hcmU9J3RocmVhZHMnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hpbGRfcHJvY2Vzc2VzPScxJykKICAgICAgICAgc3RhcnRpbmdfcXVl
dWUgPSBRdWV1ZS5RdWV1ZSgpCiAgICAgICAgIHN0b3BwaW5nX3F1ZXVlID0gUXVldWUuUXVldWUo
KQorICAgICAgICBicm9rZXIgPSBtZXNzYWdlX2Jyb2tlci5NdWx0aVRocmVhZGVkQnJva2VyKHBv
cnQsIG9wdGlvbnMpCisgICAgICAgIGJyb2tlci5fdGVzdF9ydW5uZXIgPSBydW5uZXIKICAgICAg
ICAgY2hpbGRfdGhyZWFkID0gVGVzdFRocmVhZChzdGFydGluZ19xdWV1ZSwgc3RvcHBpbmdfcXVl
dWUpCisgICAgICAgIGJyb2tlci5fd29ya2Vyc1snd29ya2VyLTAnXSA9IG1lc3NhZ2VfYnJva2Vy
Ll9Xb3JrZXJTdGF0ZSgnd29ya2VyLTAnKQorICAgICAgICBicm9rZXIuX3dvcmtlcnNbJ3dvcmtl
ci0wJ10udGhyZWFkID0gY2hpbGRfdGhyZWFkCiAgICAgICAgIGNoaWxkX3RocmVhZC5zdGFydCgp
CiAgICAgICAgIHN0YXJ0ZWRfbXNnID0gc3RhcnRpbmdfcXVldWUuZ2V0KCkKICAgICAgICAgc3Rv
cHBpbmdfcXVldWUucHV0KG1zZykKLSAgICAgICAgdGhyZWFkcyA9IFtjaGlsZF90aHJlYWRdCi0g
ICAgICAgIHJldHVybiBydW5uZXIuX3dhaXRfZm9yX3RocmVhZHNfdG9fZmluaXNoKHRocmVhZHMs
IE5vbmUpCisgICAgICAgIHJldHVybiBicm9rZXIucnVuX21lc3NhZ2VfbG9vcCgpCiAKICAgICBk
ZWYgdGVzdF9iYXNpYyhzZWxmKToKICAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVf
dGhyZWFkKCcnKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGludGVycnVwdGVkKQogCiAgICAg
ZGVmIHRlc3RfaW50ZXJydXB0KHNlbGYpOgotICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVu
X29uZV90aHJlYWQoJ0tleWJvYXJkSW50ZXJydXB0JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KGludGVycnVwdGVkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlib2FyZEludGVycnVw
dCwgc2VsZi5ydW5fb25lX3RocmVhZCwgJ0tleWJvYXJkSW50ZXJydXB0JykKIAogICAgIGRlZiB0
ZXN0X3RpbWVvdXQoc2VsZik6CiAgICAgICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0
dXJlKCkKQEAgLTEzNyw3ICsxNTcsNyBAQCBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
ICAgICAgICAgZm91bmRfc3RhY2sgPSBtZXNzYWdlX2Jyb2tlci5fZmluZF90aHJlYWRfc3RhY2so
MCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZF9zdGFjaywgTm9uZSkKIAotICAgIGRl
ZiB0ZXN0X2xvZ193ZWRnZWRfdGhyZWFkKHNlbGYpOgorICAgIGRlZiB0ZXN0X2xvZ193ZWRnZWRf
d29ya2VyKHNlbGYpOgogICAgICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgp
CiAgICAgICAgIG9jLmNhcHR1cmVfb3V0cHV0KCkKICAgICAgICAgbG9nZ2VyID0gbWVzc2FnZV9i
cm9rZXIuX2xvZwpAQCAtMTUxLDcgKzE3MSw4IEBAIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgogICAgICAgICBjaGlsZF90aHJlYWQuc3RhcnQoKQogICAgICAgICBtc2cgPSBzdGFydGlu
Z19xdWV1ZS5nZXQoKQogCi0gICAgICAgIG1lc3NhZ2VfYnJva2VyLmxvZ193ZWRnZWRfdGhyZWFk
KGNoaWxkX3RocmVhZC5pZCgpKQorICAgICAgICBtZXNzYWdlX2Jyb2tlci5sb2dfd2VkZ2VkX3dv
cmtlcihjaGlsZF90aHJlYWQuZ2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGlsZF90aHJlYWQuaWQoKSkKICAgICAgICAgc3RvcHBpbmdfcXVldWUu
cHV0KCcnKQogICAgICAgICBjaGlsZF90aHJlYWQuam9pbih0aW1lb3V0PTEuMCkKIApkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0cy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHMucHkKaW5kZXggOWJiNzYwNDdmNzI5MjhiNGY2MzJhY2Y0Y2NhM2JlMmM4
NGFiNDU4ZS4uMGYzYmI1MjdjNjdjMDg5N2NlMjI0M2I3YTBmNjc2MzZlOWI2NjY1MCAxMDA3NTUK
LS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0cy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC0yMzksMTcgKzIzOSwxOSBAQCBjbGFzcyBUZXN0UnVu
bmVyOgogICAgICMgaW4gRHVtcFJlbmRlclRyZWUuCiAgICAgREVGQVVMVF9URVNUX1RJTUVPVVRf
TVMgPSA2ICogMTAwMAogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHBy
aW50ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmludGVyLCBt
ZXNzYWdlX2Jyb2tlcik6CiAgICAgICAgICIiIkluaXRpYWxpemUgdGVzdCBydW5uZXIgZGF0YSBz
dHJ1Y3R1cmVzLgogCiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAgcG9ydDogYW4gb2JqZWN0IGlt
cGxlbWVudGluZyBwb3J0LXNwZWNpZmljCiAgICAgICAgICAgb3B0aW9uczogYSBkaWN0aW9uYXJ5
IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zCiAgICAgICAgICAgcHJpbnRlcjogYSBQcmludGVyIG9i
amVjdCB0byByZWNvcmQgdXBkYXRlcyB0by4KKyAgICAgICAgICBtZXNzYWdlX2Jyb2tlcjogb2Jq
ZWN0IHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB3b3JrZXJzLgogICAgICAgICAiIiIKICAgICAg
ICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKICAg
ICAgICAgc2VsZi5fcHJpbnRlciA9IHByaW50ZXIKKyAgICAgICAgc2VsZi5fbWVzc2FnZV9icm9r
ZXIgPSBtZXNzYWdlX2Jyb2tlcgogCiAgICAgICAgICMgZGlzYWJsZSB3c3Mgc2VydmVyLiBuZWVk
IHRvIGluc3RhbGwgcHlPcGVuU1NMIG9uIGJ1aWxkYm90cy4KICAgICAgICAgIyBzZWxmLl93ZWJz
b2NrZXRfc2VjdXJlX3NlcnZlciA9IHdlYnNvY2tldF9zZXJ2ZXIuUHlXZWJTb2NrZXQoCkBAIC01
NjEsMjkgKzU2Myw2IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IFRydWUKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICBkZWYgX2luc3RhbnRpYXRlX2R1bXBf
cmVuZGVyX3RyZWVfdGhyZWFkcyhzZWxmLCB0ZXN0X2ZpbGVzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KToKLSAgICAgICAgIiIi
SW5zdGFudGl0YXRlcyBhbmQgc3RhcnRzIHRoZSBUZXN0U2hlbGxUaHJlYWQocykuCi0KLSAgICAg
ICAgUmV0dXJuOgotICAgICAgICAgIFRoZSBsaXN0IG9mIHRocmVhZHMuCi0gICAgICAgICIiIgot
ICAgICAgICBmaWxlbmFtZV9xdWV1ZSA9IHNlbGYuX2dldF90ZXN0X2ZpbGVfcXVldWUodGVzdF9m
aWxlcykKLQotICAgICAgICAjIEluc3RhbnRpYXRlIFRlc3RTaGVsbFRocmVhZHMgYW5kIHN0YXJ0
IHRoZW0uCi0gICAgICAgIHRocmVhZHMgPSBbXQotICAgICAgICBmb3Igd29ya2VyX251bWJlciBp
biB4cmFuZ2UoaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSk6Ci0gICAgICAgICAg
ICB0aHJlYWQgPSBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5UZXN0U2hlbGxUaHJlYWQoc2VsZi5f
cG9ydCwKLSAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLCB3b3JrZXJfbnVtYmVyLAotICAg
ICAgICAgICAgICAgIGZpbGVuYW1lX3F1ZXVlLCBzZWxmLl9yZXN1bHRfcXVldWUpCi0gICAgICAg
ICAgICBpZiBzZWxmLl9pc19zaW5nbGVfdGhyZWFkZWQoKToKLSAgICAgICAgICAgICAgICB0aHJl
YWQucnVuX2luX21haW5fdGhyZWFkKHNlbGYsIHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgICAgICB0aHJlYWQuc3RhcnQoKQotICAgICAgICAgICAgdGhyZWFk
cy5hcHBlbmQodGhyZWFkKQotCi0gICAgICAgIHJldHVybiB0aHJlYWRzCi0KICAgICBkZWYgX2lz
X3NpbmdsZV90aHJlYWRlZChzZWxmKToKICAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHdlIHNo
b3VsZCBydW4gYWxsIHRoZSB0ZXN0cyBpbiB0aGUgbWFpbiB0aHJlYWQuIiIiCiAgICAgICAgIHJl
dHVybiBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpID09IDEKQEAgLTYwMiw1OSAr
NTgxLDQyIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgIGluIHRoZSBmb3JtIHtm
aWxlbmFtZTpmaWxlbmFtZSwgdGVzdF9ydW5fdGltZTp0ZXN0X3J1bl90aW1lfQogICAgICAgICAg
ICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IHRvIHBvcHVsYXRlIHdpdGggdGhlIHJl
c3VsdHMKICAgICAgICAgIiIiCisgICAgICAgIG51bV93b3JrZXJzID0gaW50KHNlbGYuX29wdGlv
bnMuY2hpbGRfcHJvY2Vzc2VzKQorICAgICAgICBtZXNzYWdlX2Jyb2tlciA9IHNlbGYuX21lc3Nh
Z2VfYnJva2VyCisKICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIHVzZSB3ZWJraXRweS50b29s
LmdyYW1tYXIucGx1cmFsaXplIGhlcmUuCiAgICAgICAgIHBsdXJhbCA9ICIiCiAgICAgICAgIGlm
IG5vdCBzZWxmLl9pc19zaW5nbGVfdGhyZWFkZWQoKToKICAgICAgICAgICAgIHBsdXJhbCA9ICJz
IgogICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgJXMlcyAuLi4n
ICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX3BvcnQuZHJpdmVy
X25hbWUoKSwgcGx1cmFsKSkKLSAgICAgICAgdGhyZWFkcyA9IHNlbGYuX2luc3RhbnRpYXRlX2R1
bXBfcmVuZGVyX3RyZWVfdGhyZWFkcyhmaWxlX2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCi0g
ICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0aW5nIC4uLiIp
CiAKLSAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBzZWxmLl93YWl0X2Zvcl90aHJlYWRz
X3RvX2ZpbmlzaCh0aHJlYWRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICAodGhy
ZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpID0gXAot
ICAgICAgICAgICAgc2VsZi5fY29sbGVjdF90aW1pbmdfaW5mbyh0aHJlYWRzKQorICAgICAgICBz
ZWxmLl9jdXJyZW50X2ZpbGVuYW1lX3F1ZXVlID0gc2VsZi5fZ2V0X3Rlc3RfZmlsZV9xdWV1ZShm
aWxlX2xpc3QpCisgICAgICAgIHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkgPSByZXN1bHRf
c3VtbWFyeQorICAgICAgICB0aHJlYWRzID0gbWVzc2FnZV9icm9rZXIuc3RhcnRfd29ya2Vycyhz
ZWxmKQogCi0gICAgICAgIHJldHVybiAoa2V5Ym9hcmRfaW50ZXJydXB0ZWQsIHRocmVhZF90aW1p
bmdzLCB0ZXN0X3RpbWluZ3MsCi0gICAgICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWlu
Z3MpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0aW5n
IC4uLiIpCiAKLSAgICBkZWYgX3dhaXRfZm9yX3RocmVhZHNfdG9fZmluaXNoKHNlbGYsIHRocmVh
ZHMsIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBGYWxz
ZQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIExvb3AgdGhyb3VnaCBhbGwgdGhlIHRocmVh
ZHMgd2FpdGluZyBmb3IgdGhlbSB0byBmaW5pc2guCi0gICAgICAgICAgICBzb21lX3RocmVhZF9p
c19hbGl2ZSA9IFRydWUKLSAgICAgICAgICAgIHdoaWxlIHNvbWVfdGhyZWFkX2lzX2FsaXZlOgot
ICAgICAgICAgICAgICAgIHNvbWVfdGhyZWFkX2lzX2FsaXZlID0gRmFsc2UKLSAgICAgICAgICAg
ICAgICB0ID0gdGltZS50aW1lKCkKLSAgICAgICAgICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVh
ZHM6Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbl9pbmZvID0gdGhyZWFkLmV4Y2VwdGlv
bl9pbmZvKCkKLSAgICAgICAgICAgICAgICAgICAgaWYgZXhjZXB0aW9uX2luZm8gaXMgbm90IE5v
bmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIFJlLXJhaXNlIHRoZSB0aHJlYWQncyBleGNl
cHRpb24gaGVyZSB0byBtYWtlIGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIGNsZWFyIHRo
YXQgdGVzdGluZyB3YXMgYWJvcnRlZC4gT3RoZXJ3aXNlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIyB0aGUgdGVzdHMgdGhhdCBkaWQgbm90IHJ1biB3b3VsZCBiZSBhc3N1bWVkCi0gICAgICAg
ICAgICAgICAgICAgICAgICAjIHRvIGhhdmUgcGFzc2VkLgotICAgICAgICAgICAgICAgICAgICAg
ICAgcmFpc2UgZXhjZXB0aW9uX2luZm9bMF0sIGV4Y2VwdGlvbl9pbmZvWzFdLCBleGNlcHRpb25f
aW5mb1syXQotCi0gICAgICAgICAgICAgICAgICAgIGlmIHRocmVhZC5pc0FsaXZlKCk6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IFRydWUKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG5leHRfdGltZW91dCA9IHRocmVhZC5uZXh0X3RpbWVvdXQoKQotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRfdGltZW91dCBhbmQgdCA+IG5leHRfdGltZW91
dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9icm9rZXIubG9nX3dlZGdl
ZF90aHJlYWQodGhyZWFkLmlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFk
LmNsZWFyX25leHRfdGltZW91dCgpCi0KLSAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9zdW1t
YXJ5KHJlc3VsdF9zdW1tYXJ5KQotCi0gICAgICAgICAgICAgICAgaWYgc29tZV90aHJlYWRfaXNf
YWxpdmU6Ci0gICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKLQorICAgICAgICAg
ICAgbWVzc2FnZV9icm9rZXIucnVuX21lc3NhZ2VfbG9vcCgpCiAgICAgICAgIGV4Y2VwdCBLZXli
b2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIF9sb2cuaW5mbygiSW50ZXJydXB0ZWQsIGV4aXRp
bmciKQorICAgICAgICAgICAgbWVzc2FnZV9icm9rZXIuY2FuY2VsX3dvcmtlcnMoKQogICAgICAg
ICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBUcnVlCi0gICAgICAgICAgICBmb3IgdGhyZWFk
IGluIHRocmVhZHM6Ci0gICAgICAgICAgICAgICAgdGhyZWFkLmNhbmNlbCgpCisgICAgICAgIGV4
Y2VwdDoKKyAgICAgICAgICAgICMgVW5leHBlY3RlZCBleGNlcHRpb247IGRvbid0IHRyeSB0byBj
bGVhbiB1cCB3b3JrZXJzLgorICAgICAgICAgICAgX2xvZy5pbmZvKCJFeGNlcHRpb24gcmFpc2Vk
LCBleGl0aW5nIikKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgdGhyZWFkX3RpbWluZ3Ms
IHRlc3RfdGltaW5ncywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MgPSBcCisgICAgICAgICAgICBz
ZWxmLl9jb2xsZWN0X3RpbWluZ19pbmZvKHRocmVhZHMpCiAKLSAgICAgICAgcmV0dXJuIGtleWJv
YXJkX2ludGVycnVwdGVkCisgICAgICAgIHJldHVybiAoa2V5Ym9hcmRfaW50ZXJydXB0ZWQsIHRo
cmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCisgICAgICAgICAgICAgICAgaW5kaXZpZHVhbF90
ZXN0X3RpbWluZ3MpCisKKyAgICBkZWYgdXBkYXRlKHNlbGYpOgorICAgICAgICBzZWxmLnVwZGF0
ZV9zdW1tYXJ5KHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkpCiAKICAgICBkZWYgX2NvbGxl
Y3RfdGltaW5nX2luZm8oc2VsZiwgdGhyZWFkcyk6CiAgICAgICAgIHRlc3RfdGltaW5ncyA9IHt9
CkBAIC05MzAsNiArODkyLDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgIHAucHJp
bnRfY29uZmlnKCJSdW5uaW5nICVzICVzcyBpbiBwYXJhbGxlbCIgJQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuZHJpdmVyX25hbWUoKSkpCisgICAgICAgIHAucHJp
bnRfY29uZmlnKCJXb3JrZXIgbW9kZWw6ICVzIiAlIHNlbGYuX29wdGlvbnMud29ya2VyX21vZGVs
KQogICAgICAgICBwLnByaW50X2NvbmZpZygiIikKIAogICAgIGRlZiBfcHJpbnRfZXhwZWN0ZWRf
cmVzdWx0c19vZl90eXBlKHNlbGYsIHJlc3VsdF9zdW1tYXJ5LApAQCAtMTMxOSwxMSArMTI4Miwx
MyBAQCBkZWYgcnVuKHBvcnQsIG9wdGlvbnMsIGFyZ3MsIHJlZ3VsYXJfb3V0cHV0PXN5cy5zdGRl
cnIsCiAgICAgICAgIHByaW50ZXIuY2xlYW51cCgpCiAgICAgICAgIHJldHVybiAwCiAKKyAgICBi
cm9rZXIgPSBtZXNzYWdlX2Jyb2tlci5nZXQocG9ydCwgb3B0aW9ucykKKwogICAgICMgV2Ugd3Jh
cCBhbnkgcGFydHMgb2YgdGhlIHJ1biB0aGF0IGFyZSBzbG93IG9yIGxpa2VseSB0byByYWlzZSBl
eGNlcHRpb25zCiAgICAgIyBpbiBhIHRyeS9maW5hbGx5IHRvIGVuc3VyZSB0aGF0IHdlIGNsZWFu
IHVwIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uCiAgICAgbnVtX3VuZXhwZWN0ZWRfcmVzdWx0
cyA9IC0xCiAgICAgdHJ5OgotICAgICAgICB0ZXN0X3J1bm5lciA9IFRlc3RSdW5uZXIocG9ydCwg
b3B0aW9ucywgcHJpbnRlcikKKyAgICAgICAgdGVzdF9ydW5uZXIgPSBUZXN0UnVubmVyKHBvcnQs
IG9wdGlvbnMsIHByaW50ZXIsIGJyb2tlcikKICAgICAgICAgdGVzdF9ydW5uZXIuX3ByaW50X2Nv
bmZpZygpCiAKICAgICAgICAgcHJpbnRlci5wcmludF91cGRhdGUoIkNvbGxlY3RpbmcgdGVzdHMg
Li4uIikKQEAgLTEzNTIsNiArMTMxNyw3IEBAIGRlZiBydW4ocG9ydCwgb3B0aW9ucywgYXJncywg
cmVndWxhcl9vdXRwdXQ9c3lzLnN0ZGVyciwKICAgICAgICAgICAgIF9sb2cuZGVidWcoIlRlc3Rp
bmcgY29tcGxldGVkLCBFeGl0IHN0YXR1czogJWQiICUKICAgICAgICAgICAgICAgICAgICAgICAg
bnVtX3VuZXhwZWN0ZWRfcmVzdWx0cykKICAgICBmaW5hbGx5OgorICAgICAgICBicm9rZXIuY2xl
YW51cCgpCiAgICAgICAgIHByaW50ZXIuY2xlYW51cCgpCiAKICAgICByZXR1cm4gbnVtX3VuZXhw
ZWN0ZWRfcmVzdWx0cwpAQCAtMTM2MCw2ICsxMzI2LDEwIEBAIGRlZiBydW4ocG9ydCwgb3B0aW9u
cywgYXJncywgcmVndWxhcl9vdXRwdXQ9c3lzLnN0ZGVyciwKIGRlZiBfc2V0X3VwX2Rlcml2ZWRf
b3B0aW9ucyhwb3J0X29iaiwgb3B0aW9ucyk6CiAgICAgIiIiU2V0cyB0aGUgb3B0aW9ucyB2YWx1
ZXMgdGhhdCBkZXBlbmQgb24gb3RoZXIgb3B0aW9ucyB2YWx1ZXMuIiIiCiAKKyAgICBpZiBvcHRp
b25zLndvcmtlcl9tb2RlbCA9PSAnaW5saW5lJzoKKyAgICAgICAgaWYgb3B0aW9ucy5jaGlsZF9w
cm9jZXNzZXMgYW5kIGludChvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykgPiAxOgorICAgICAgICAg
ICAgX2xvZy53YXJuaW5nKCItLXdvcmtlci1tb2RlbD1pbmxpbmUgb3ZlcnJpZGVzIC0tY2hpbGQt
cHJvY2Vzc2VzIikKKyAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSAiMSIKICAgICBp
ZiBub3Qgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXM6CiAgICAgICAgICMgRklYTUU6IEludmVzdGln
YXRlIHBlcmYvZmxha2luZXNzIGltcGFjdCBvZiB1c2luZyBjcHVfY291bnQgKyAxLgogICAgICAg
ICBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyA9IG9zLmVudmlyb24uZ2V0KCJXRUJLSVRfVEVTVF9D
SElMRF9QUk9DRVNTRVMiLApAQCAtMTU4Myw2ICsxNTUzLDkgQEAgZGVmIHBhcnNlX2FyZ3MoYXJn
cz1Ob25lKToKICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGhlbHA9InJ1biBhIHNlcGFyYXRl
IER1bXBSZW5kZXJUcmVlIGZvciBlYWNoIHRlc3QiKSwKICAgICAgICAgb3B0cGFyc2UubWFrZV9v
cHRpb24oIi0tY2hpbGQtcHJvY2Vzc2VzIiwKICAgICAgICAgICAgIGhlbHA9Ik51bWJlciBvZiBE
dW1wUmVuZGVyVHJlZXMgdG8gcnVuIGluIHBhcmFsbGVsLiIpLAorICAgICAgICBvcHRwYXJzZS5t
YWtlX29wdGlvbigiLS13b3JrZXItbW9kZWwiLCBhY3Rpb249InN0b3JlIiwKKyAgICAgICAgICAg
IGRlZmF1bHQ9InRocmVhZHMiLCBoZWxwPSgiY29udHJvbHMgd29ya2VyIG1vZGVsLiBWYWxpZCB2
YWx1ZXMgYXJlICIKKyAgICAgICAgICAgICAgICAgIidpbmxpbmUnIGFuZCAndGhyZWFkcycgKGRl
ZmF1bHQpLiIpKSwKICAgICAgICAgIyBGSVhNRTogRGlzcGxheSBkZWZhdWx0IG51bWJlciBvZiBj
aGlsZCBwcm9jZXNzZXMgdGhhdCB3aWxsIHJ1bi4KICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRp
b24oIi0tZXhwZXJpbWVudGFsLWZ1bGx5LXBhcmFsbGVsIiwKICAgICAgICAgICAgIGFjdGlvbj0i
c3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5IGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0
c191bml0dGVzdC5weQppbmRleCBiZjFmMGFhOTZjMTZmODdlOGU5OTM3YjBkNWE0N2Q2YWE5NjYy
ZjkwLi5mZjVkMWEyNjU0Mzk1NzJiZGI5ZTliN2U1MWNkNDQ4MjM2N2VhM2RlIDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rl
c3RzX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKQEAgLTcyLDYgKzcyLDggQEAgZGVm
IHBhc3NpbmdfcnVuKGV4dHJhX2FyZ3M9Tm9uZSwgcG9ydF9vYmo9Tm9uZSwgcmVjb3JkX3Jlc3Vs
dHM9RmFsc2UsCiAgICAgICAgIGFyZ3MuZXh0ZW5kKFsnLS1wbGF0Zm9ybScsICd0ZXN0J10pCiAg
ICAgaWYgbm90IHJlY29yZF9yZXN1bHRzOgogICAgICAgICBhcmdzLmFwcGVuZCgnLS1uby1yZWNv
cmQtcmVzdWx0cycpCisgICAgaWYgbm90ICctLWNoaWxkLXByb2Nlc3NlcycgaW4gZXh0cmFfYXJn
czoKKyAgICAgICAgYXJncy5leHRlbmQoWyctLXdvcmtlci1tb2RlbCcsICdpbmxpbmUnXSkKICAg
ICBhcmdzLmV4dGVuZChleHRyYV9hcmdzKQogICAgIGlmIG5vdCB0ZXN0c19pbmNsdWRlZDoKICAg
ICAgICAgIyBXZSB1c2UgdGhlIGdsb2IgdG8gdGVzdCB0aGF0IGdsb2JiaW5nIHdvcmtzLgpAQCAt
ODAsNiArODIsOCBAQCBkZWYgcGFzc2luZ19ydW4oZXh0cmFfYXJncz1Ob25lLCBwb3J0X29iaj1O
b25lLCByZWNvcmRfcmVzdWx0cz1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICd3ZWJzb2Nr
ZXQvdGVzdHMnLAogICAgICAgICAgICAgICAgICAgICAgJ2ZhaWx1cmVzL2V4cGVjdGVkLyonXSkK
ICAgICBvcHRpb25zLCBwYXJzZWRfYXJncyA9IHJ1bl93ZWJraXRfdGVzdHMucGFyc2VfYXJncyhh
cmdzKQorICAgIGlmIG5vdCAnLS1jaGlsZC1wcm9jZXNzZXMnIGluIGV4dHJhX2FyZ3M6CisgICAg
ICAgIGFyZ3MuZXh0ZW5kKFsnLS13b3JrZXItbW9kZWwnLCAnaW5saW5lJ10pCiAgICAgaWYgbm90
IHBvcnRfb2JqOgogICAgICAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KHBvcnRfbmFtZT1vcHRpb25z
LnBsYXRmb3JtLCBvcHRpb25zPW9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dXNlcj1Nb2NrVXNlcigpKQpAQCAtOTIsMjEgKzk2LDMwIEBAIGRlZiBsb2dnaW5nX3J1bihleHRy
YV9hcmdzPU5vbmUsIHBvcnRfb2JqPU5vbmUsIHRlc3RzX2luY2x1ZGVkPUZhbHNlKToKICAgICBh
cmdzID0gWyctLW5vLXJlY29yZC1yZXN1bHRzJ10KICAgICBpZiBub3QgJy0tcGxhdGZvcm0nIGlu
IGV4dHJhX2FyZ3M6CiAgICAgICAgIGFyZ3MuZXh0ZW5kKFsnLS1wbGF0Zm9ybScsICd0ZXN0J10p
CisgICAgaWYgbm90ICctLWNoaWxkLXByb2Nlc3NlcycgaW4gZXh0cmFfYXJnczoKKyAgICAgICAg
YXJncy5leHRlbmQoWyctLXdvcmtlci1tb2RlbCcsICdpbmxpbmUnXSkKICAgICBhcmdzLmV4dGVu
ZChleHRyYV9hcmdzKQogICAgIGlmIG5vdCB0ZXN0c19pbmNsdWRlZDoKICAgICAgICAgYXJncy5l
eHRlbmQoWydwYXNzZXMnLAogICAgICAgICAgICAgICAgICAgICAgJ2h0dHAvdGVzdHMnLAogICAg
ICAgICAgICAgICAgICAgICAgJ3dlYnNvY2tldC90ZXN0cycsCiAgICAgICAgICAgICAgICAgICAg
ICAnZmFpbHVyZXMvZXhwZWN0ZWQvKiddKQotICAgIG9wdGlvbnMsIHBhcnNlZF9hcmdzID0gcnVu
X3dlYmtpdF90ZXN0cy5wYXJzZV9hcmdzKGFyZ3MpCi0gICAgdXNlciA9IE1vY2tVc2VyKCkKLSAg
ICBpZiBub3QgcG9ydF9vYmo6Ci0gICAgICAgIHBvcnRfb2JqID0gcG9ydC5nZXQocG9ydF9uYW1l
PW9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnM9b3B0aW9ucywgdXNlcj11c2VyKQotICAgIGJ1aWxk
Ym90X291dHB1dCA9IGFycmF5X3N0cmVhbS5BcnJheVN0cmVhbSgpCi0gICAgcmVndWxhcl9vdXRw
dXQgPSBhcnJheV9zdHJlYW0uQXJyYXlTdHJlYW0oKQotICAgIHJlcyA9IHJ1bl93ZWJraXRfdGVz
dHMucnVuKHBvcnRfb2JqLCBvcHRpb25zLCBwYXJzZWRfYXJncywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBidWlsZGJvdF9vdXRwdXQ9YnVpbGRib3Rfb3V0cHV0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlZ3VsYXJfb3V0cHV0PXJlZ3VsYXJfb3V0cHV0KQorCisg
ICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQorICAgIHRyeToKKyAgICAgICAg
b2MuY2FwdHVyZV9vdXRwdXQoKQorICAgICAgICBvcHRpb25zLCBwYXJzZWRfYXJncyA9IHJ1bl93
ZWJraXRfdGVzdHMucGFyc2VfYXJncyhhcmdzKQorICAgICAgICB1c2VyID0gTW9ja1VzZXIoKQor
ICAgICAgICBpZiBub3QgcG9ydF9vYmo6CisgICAgICAgICAgICBwb3J0X29iaiA9IHBvcnQuZ2V0
KHBvcnRfbmFtZT1vcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zPW9wdGlvbnMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVzZXI9dXNlcikKKyAgICAgICAgYnVpbGRib3Rfb3V0cHV0
ID0gYXJyYXlfc3RyZWFtLkFycmF5U3RyZWFtKCkKKyAgICAgICAgcmVndWxhcl9vdXRwdXQgPSBh
cnJheV9zdHJlYW0uQXJyYXlTdHJlYW0oKQorICAgICAgICByZXMgPSBydW5fd2Via2l0X3Rlc3Rz
LnJ1bihwb3J0X29iaiwgb3B0aW9ucywgcGFyc2VkX2FyZ3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJ1aWxkYm90X291dHB1dD1idWlsZGJvdF9vdXRwdXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3VsYXJfb3V0cHV0PXJlZ3VsYXJfb3V0cHV0
KQorICAgIGZpbmFsbHk6CisgICAgICAgIG9jLnJlc3RvcmVfb3V0cHV0KCkKICAgICByZXR1cm4g
KHJlcywgYnVpbGRib3Rfb3V0cHV0LCByZWd1bGFyX291dHB1dCwgdXNlcikKIAogCkBAIC0xMTYs
NyArMTI5LDcgQEAgZGVmIGdldF90ZXN0c19ydW4oZXh0cmFfYXJncz1Ob25lLCB0ZXN0c19pbmNs
dWRlZD1GYWxzZSwgZmxhdHRlbl9iYXRjaGVzPUZhbHNlKToKICAgICAgICAgJy0tcHJpbnQnLCAn
bm90aGluZycsCiAgICAgICAgICctLXBsYXRmb3JtJywgJ3Rlc3QnLAogICAgICAgICAnLS1uby1y
ZWNvcmQtcmVzdWx0cycsCi0gICAgICAgICctLWNoaWxkLXByb2Nlc3NlcycsICcxJ10KKyAgICAg
ICAgJy0td29ya2VyLW1vZGVsJywgJ2lubGluZSddCiAgICAgYXJncy5leHRlbmQoZXh0cmFfYXJn
cykKICAgICBpZiBub3QgdGVzdHNfaW5jbHVkZWQ6CiAgICAgICAgICMgTm90IGluY2x1ZGluZyBo
dHRwIHRlc3RzIHNpbmNlIHRoZXkgZ2V0IHJ1biBvdXQgb2Ygb3JkZXIgKHRoYXQKQEAgLTIxNSw3
ICsyMjgsNyBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRl
c3Rfa2V5Ym9hcmRfaW50ZXJydXB0KHNlbGYpOgogICAgICAgICAjIE5vdGUgdGhhdCB0aGlzIGFs
c28gdGVzdHMgcnVubmluZyBhIHRlc3QgbWFya2VkIGFzIFNLSVAgaWYKICAgICAgICAgIyB5b3Ug
c3BlY2lmeSBpdCBleHBsaWNpdGx5LgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlib2Fy
ZEludGVycnVwdCwgcGFzc2luZ19ydW4sCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleWJv
YXJkSW50ZXJydXB0LCBsb2dnaW5nX3J1biwKICAgICAgICAgICAgIFsnZmFpbHVyZXMvZXhwZWN0
ZWQva2V5Ym9hcmQuaHRtbCddLCB0ZXN0c19pbmNsdWRlZD1UcnVlKQogCiAgICAgZGVmIHRlc3Rf
bGFzdF9yZXN1bHRzKHNlbGYpOgpAQCAtMzYwLDYgKzM3MywyMCBAQCBjbGFzcyBNYWluVGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHRlc3RfcG9ydCA9IGdldF9wb3J0X2Zvcl9ydW4o
YmFzZV9hcmdzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHRlc3RfcG9ydC50b2xl
cmFuY2VfdXNlZF9mb3JfZGlmZl9pbWFnZSkKIAorICAgIGRlZiB0ZXN0X3dvcmtlcl9tb2RlbF9f
aW5saW5lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXdv
cmtlci1tb2RlbCcsICdpbmxpbmUnXSkpCisKKyAgICBkZWYgdGVzdF93b3JrZXJfbW9kZWxfX3Ro
cmVhZHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0td29y
a2VyLW1vZGVsJywgJ3RocmVhZHMnXSkpCisKKyAgICBkZWYgdGVzdF93b3JrZXJfbW9kZWxfX3By
b2Nlc3NlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9n
Z2luZ19ydW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsnLS13b3JrZXItbW9kZWwnLCAn
cHJvY2Vzc2VzJ10pCisKKyAgICBkZWYgdGVzdF93b3JrZXJfbW9kZWxfX3Vua25vd24oc2VsZik6
CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvZ2dpbmdfcnVuLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBbJy0td29ya2VyLW1vZGVsJywgJ3Vua25vd24nXSkKKwog
TWFpblRlc3QgPSBza2lwX2lmKE1haW5UZXN0LCBzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbicgYW5k
IGNvbXBhcmVfdmVyc2lvbihzeXMsICcyLjYnKVswXSA8IDAsICduZXctcnVuLXdlYmtpdC10ZXN0
cyB0ZXN0cyBoYW5nIG9uIEN5Z3dpbiBQeXRob24gMi41LjInKQogCiAKQEAgLTQ0MCw3ICs0Njcs
OCBAQCBjbGFzcyBUZXN0UnVubmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIG1v
Y2tfcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lID0gbGFtYmRhIG5hbWU6IG5hbWUKICAgICAg
ICAgbW9ja19wb3J0LmZpbGVuYW1lX3RvX3VyaSA9IGxhbWJkYSBuYW1lOiBuYW1lCiAKLSAgICAg
ICAgcnVubmVyID0gcnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVubmVyKHBvcnQ9bW9ja19wb3J0LCBv
cHRpb25zPU1vY2soKSwgcHJpbnRlcj1Nb2NrKCkpCisgICAgICAgIHJ1bm5lciA9IHJ1bl93ZWJr
aXRfdGVzdHMuVGVzdFJ1bm5lcihwb3J0PW1vY2tfcG9ydCwgb3B0aW9ucz1Nb2NrKCksCisgICAg
ICAgICAgIHByaW50ZXI9TW9jaygpLCBtZXNzYWdlX2Jyb2tlcj1Nb2NrKCkpCiAgICAgICAgIGV4
cGVjdGVkX2h0bWwgPSB1IiIiPGh0bWw+CiAgIDxoZWFkPgogICAgIDx0aXRsZT5MYXlvdXQgVGVz
dCBSZXN1bHRzICh0aW1lKTwvdGl0bGU+CkBAIC00NjYsNyArNDk0LDggQEAgY2xhc3MgVGVzdFJ1
bm5lclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2dldF90ZXN0X2ZpbGVf
cXVldWUoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IF9nZXRfdGVzdF9maWxlX3F1ZXVlIGlu
IHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lciByZWFsbHkKICAgICAgICAgIyBwdXQgdGhlIGh0
dHAgdGVzdHMgZmlyc3QgaW4gdGhlIHF1ZXVlLgotICAgICAgICBydW5uZXIgPSBUZXN0UnVubmVy
V3JhcHBlcihwb3J0PU1vY2soKSwgb3B0aW9ucz1Nb2NrKCksIHByaW50ZXI9TW9jaygpKQorICAg
ICAgICBydW5uZXIgPSBUZXN0UnVubmVyV3JhcHBlcihwb3J0PU1vY2soKSwgb3B0aW9ucz1Nb2Nr
KCksCisgICAgICAgICAgICBwcmludGVyPU1vY2soKSwgbWVzc2FnZV9icm9rZXI9TW9jaygpKQog
ICAgICAgICBydW5uZXIuX29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsID0gRmFs
c2UKIAogICAgICAgICB0ZXN0X2xpc3QgPSBbCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74707</attachid>
            <date>2010-11-23 17:09:45 -0800</date>
            <delta_ts>2010-11-23 17:38:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49779-20101123170943.patch</filename>
            <type>text/plain</type>
            <size>25531</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA2YTU2Zjc5M2I4MzE4YWRiZjZiZjFkNmIyN2E5ZGQ3YzAzY2UwMTAzLi4wMzdmZTBm
YWEwZTkzM2I5ZDk5YzAxYThiMWYyOTA0NDVmMWFkN2QwIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTAtMTEtMTggIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBs
ZW1lbnRzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBtYW5hZ2VyIHNpZGUgb2YgdGhlCisgICAgICAg
IEJyb2tlciBvYmplY3RzIC0gaXQgaGFuZGxlcyBjcmVhdGluZyB0aHJlYWRzLCB3YWl0aW5nIGZv
ciB0aGVtCisgICAgICAgIHRvIGNvbXBsZXRlLCBhbmQgcnVubmluZyBhIHNpbmdsZS10aHJlYWRl
ZCBsb29wIGFzIHdlbGwuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ5Nzc5CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcl91bml0dGVz
dC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0
X3Rlc3RzLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6CisKIDIwMTAtMTEtMjMgIERpcmsgUHJhbmtlICA8ZHBy
YW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90
aHJlYWQucHkKaW5kZXggMWJhYzdlZjE4ZTNlMmVhN2E2ZGNmNWZhMzc0MDI2NzhlN2FlMmEyYi4u
MzhjZjZjMzUyMzc3YjM5NmMwYzk1OTFlN2E1YjViOTc0NWQ3YTg3YSAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVt
cF9yZW5kZXJfdHJlZV90aHJlYWQucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkK
QEAgLTI0NCw3ICsyNDQsNyBAQCBjbGFzcyBXYXRjaGFibGVUaHJlYWQodGhyZWFkaW5nLlRocmVh
ZCk6CiAKIAogY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6Ci0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHdvcmtlcl9udW1iZXIsCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHdvcmtlcl9udW1iZXIsIHdvcmtlcl9uYW1lLAog
ICAgICAgICAgICAgICAgICBmaWxlbmFtZV9saXN0X3F1ZXVlLCByZXN1bHRfcXVldWUpOgogICAg
ICAgICAiIiJJbml0aWFsaXplIGFsbCB0aGUgbG9jYWwgc3RhdGUgZm9yIHRoaXMgRHVtcFJlbmRl
clRyZWUgdGhyZWFkLgogCkBAIC0yNTIsNiArMjUyLDcgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFk
KFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgICAgcG9ydDogaW50ZXJmYWNlIHRvIHBvcnQtc3Bl
Y2lmaWMgaG9va3MKICAgICAgICAgICBvcHRpb25zOiBjb21tYW5kIGxpbmUgb3B0aW9ucyBhcmd1
bWVudCBmcm9tIG9wdHBhcnNlCiAgICAgICAgICAgd29ya2VyX251bWJlcjogaWRlbnRpZmllciBm
b3IgYSBwYXJ0aWN1bGFyIHdvcmtlciB0aHJlYWQuCisgICAgICAgICAgd29ya2VyX25hbWU6IGZv
ciBsb2dnaW5nLgogICAgICAgICAgIGZpbGVuYW1lX2xpc3RfcXVldWU6IEEgdGhyZWFkIHNhZmUg
UXVldWUgY2xhc3MgdGhhdCBjb250YWlucyBsaXN0cwogICAgICAgICAgICAgICBvZiB0dXBsZXMg
b2YgKGZpbGVuYW1lLCB1cmkpIHBhaXJzLgogICAgICAgICAgIHJlc3VsdF9xdWV1ZTogQSB0aHJl
YWQgc2FmZSBRdWV1ZSBjbGFzcyB0aGF0IHdpbGwgY29udGFpbgpAQCAtMjYxLDcgKzI2Miw3IEBA
IGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgogICAgICAgICBzZWxmLl9w
b3J0ID0gcG9ydAogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwogICAgICAgICBzZWxm
Ll93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgotICAgICAgICBzZWxmLl9uYW1lID0gJ3dv
cmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX25hbWUgPSB3b3JrZXJfbmFt
ZQogICAgICAgICBzZWxmLl9maWxlbmFtZV9saXN0X3F1ZXVlID0gZmlsZW5hbWVfbGlzdF9xdWV1
ZQogICAgICAgICBzZWxmLl9yZXN1bHRfcXVldWUgPSByZXN1bHRfcXVldWUKICAgICAgICAgc2Vs
Zi5fZmlsZW5hbWVfbGlzdCA9IFtdCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlci5weSBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21l
c3NhZ2VfYnJva2VyLnB5CmluZGV4IDEzOTUxYzAyZWYzZDE3MmEzOWU3MzY5Y2ViMjE5N2YxY2Jj
YjliOTguLjdjNzI3YzJhODA1NzFlZTY0MWY3YTZlNGJmYzQ0ZGZkMjU3YTBlZWUgMTAwNjQ0Ci0t
LSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL21lc3NhZ2VfYnJva2VyLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5CkBAIC0yOCwyNSAr
MjgsMTU0IEBACiAKICIiIk1vZHVsZSBmb3IgaGFuZGxpbmcgbWVzc2FnZXMsIHRocmVhZHMsIHBy
b2Nlc3NlcywgYW5kIGNvbmN1cnJlbmN5IGZvciBydW4td2Via2l0LXRlc3RzLgogCi1UaGUgbW9k
ZWwgd2UgdXNlIGlzIHRoYXQgb2YgYSBtZXNzYWdlIGJyb2tlciAtIGl0IHByb3ZpZGVzIGEgbWVz
c2FnaW5nCi1hYnN0cmFjdGlvbiBhbmQgbWVzc2FnZSBsb29wcywgYW5kIGhhbmRsZXMgbGF1bmNo
aW5nIHRocmVhZHMgYW5kL29yIHByb2Nlc3NlcwotZGVwZW5kaW5nIG9uIHRoZSByZXF1ZXN0ZWQg
Y29uZmlndXJhdGlvbi4KK1Rlc3RpbmcgaXMgYWNjb21wbGlzaGVkIGJ5IGhhdmluZyBhIG1hbmFn
ZXIgKFRlc3RSdW5uZXIpIGdhdGhlciBhbGwgb2YgdGhlCit0ZXN0cyB0byBiZSBydW4sIGFuZCBz
ZW5kaW5nIG1lc3NhZ2VzIHRvIGEgcG9vbCBvZiB3b3JrZXJzIChUZXN0U2hlbGxUaHJlYWRzKQor
dG8gcnVuIGVhY2ggdGVzdC4gRWFjaCB3b3JrZXIgY29tbXVuaWNhdGVzIHdpdGggb25lIGRyaXZl
ciAodXN1YWxseQorRHVtcFJlbmRlclRyZWUpIHRvIHJ1biBvbmUgdGVzdCBhdCBhIHRpbWUgYW5k
IHRoZW4gY29tcGFyZSB0aGUgb3V0cHV0IGFnYWluc3QKK3doYXQgd2UgZXhwZWN0ZWQgdG8gZ2V0
LgorCitUaGlzIG1vZHVsZXMgcHJvdmlkZXMgYSBtZXNzYWdlIGJyb2tlciB0aGF0IGNvbm5lY3Rz
IHRoZSBtYW5hZ2VyIHRvIHRoZQord29ya2VyczogaXQgcHJvdmlkZXMgYSBtZXNzYWdpbmcgYWJz
dHJhY3Rpb24gYW5kIG1lc3NhZ2UgbG9vcHMsIGFuZAoraGFuZGxlcyBsYXVuY2hpbmcgdGhyZWFk
cyBhbmQvb3IgcHJvY2Vzc2VzIGRlcGVuZGluZyBvbiB0aGUKK3JlcXVlc3RlZCBjb25maWd1cmF0
aW9uLgogIiIiCiAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3lzCitpbXBvcnQgdGltZQogaW1w
b3J0IHRyYWNlYmFjawogCitpbXBvcnQgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQKIAogX2xvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAKLWRlZiBsb2dfd2VkZ2VkX3RocmVhZChp
ZCk6Ci0gICAgIiIiTG9nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBnaXZlbiB0aHJlYWQgc3RhdGUu
IiIiCitkZWYgZ2V0KHBvcnQsIG9wdGlvbnMpOgorICAgICIiIlJldHVybiBhbiBpbnN0YW5jZSBv
ZiBhIFdvcmtlck1lc3NhZ2VCcm9rZXIuIiIiCisgICAgd29ya2VyX21vZGVsID0gb3B0aW9ucy53
b3JrZXJfbW9kZWwKKyAgICBpZiB3b3JrZXJfbW9kZWwgPT0gJ2lubGluZSc6CisgICAgICAgIHJl
dHVybiBTaW5nbGVUaHJlYWRlZEJyb2tlcihwb3J0LCBvcHRpb25zKQorICAgIGlmIHdvcmtlcl9t
b2RlbCA9PSAndGhyZWFkcyc6CisgICAgICAgIHJldHVybiBNdWx0aVRocmVhZGVkQnJva2VyKHBv
cnQsIG9wdGlvbnMpCisgICAgcmFpc2UgVmFsdWVFcnJvcigndW5zdXBwb3J0ZWQgdmFsdWUgZm9y
IC0td29ya2VyLW1vZGVsOiAlcycgJSB3b3JrZXJfbW9kZWwpCisKKworY2xhc3MgX1dvcmtlclN0
YXRlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxm
Lm5hbWUgPSBOb25lCisgICAgICAgIHNlbGYudGhyZWFkID0gTm9uZQorCisKK2NsYXNzIFdvcmtl
ck1lc3NhZ2VCcm9rZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0
aW9ucyk6CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX29wdGlvbnMg
PSBvcHRpb25zCisgICAgICAgIHNlbGYuX251bV93b3JrZXJzID0gaW50KHNlbGYuX29wdGlvbnMu
Y2hpbGRfcHJvY2Vzc2VzKQorCisgICAgICAgICMgVGhpcyBtYXBzIHdvcmtlciBuYW1lcyB0byB0
aGVpciBfV29ya2VyU3RhdGUgdmFsdWVzLgorICAgICAgICBzZWxmLl93b3JrZXJzID0ge30KKwor
ICAgIGRlZiBfdGhyZWFkcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHR1cGxlKFt3LnRocmVhZCBm
b3IgdyBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpXSkKKworICAgIGRlZiBzdGFydF93b3JrZXJz
KHNlbGYsIHRlc3RfcnVubmVyKToKKyAgICAgICAgIiIiU3RhcnRzIHVwIHRoZSBwb29sIG9mIHdv
cmtlcnMgZm9yIHJ1bm5pbmcgdGhlIHRlc3RzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg
ICB0ZXN0X3J1bm5lcjogYSBoYW5kbGUgdG8gdGhlIG1hbmFnZXIvVGVzdFJ1bm5lciBvYmplY3QK
KyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyID0gdGVzdF9ydW5uZXIKKyAg
ICAgICAgZm9yIHdvcmtlcl9udW1iZXIgaW4geHJhbmdlKHNlbGYuX251bV93b3JrZXJzKToKKyAg
ICAgICAgICAgIHdvcmtlciA9IF9Xb3JrZXJTdGF0ZSgnd29ya2VyLSVkJyAlIHdvcmtlcl9udW1i
ZXIpCisgICAgICAgICAgICB3b3JrZXIudGhyZWFkID0gc2VsZi5fc3RhcnRfd29ya2VyKHdvcmtl
cl9udW1iZXIsIHdvcmtlci5uYW1lKQorICAgICAgICAgICAgc2VsZi5fd29ya2Vyc1t3b3JrZXIu
bmFtZV0gPSB3b3JrZXIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RocmVhZHMoKQorCisgICAgZGVm
IF9zdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlciwgd29ya2VyX25hbWUpOgorICAgICAg
ICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcnVuX21lc3NhZ2VfbG9vcChz
ZWxmKToKKyAgICAgICAgIiIiTG9vcCBwcm9jZXNzaW5nIG1lc3NhZ2VzIHVudGlsIGRvbmUuIiIi
CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjYW5jZWxfd29y
a2VycyhzZWxmKToKKyAgICAgICAgIiIiQ2FuY2VsL2ludGVycnVwdCBhbnkgd29ya2VycyB0aGF0
IGFyZSBzdGlsbCBhbGl2ZS4iIiIKKyAgICAgICAgcGFzcworCisgICAgZGVmIGNsZWFudXAoc2Vs
Zik6CisgICAgICAgICIiIlBlcmZvcm0gYW55IG5lY2Vzc2FyeSBjbGVhbnVwIG9uIHNodXRkb3du
LiIiIgorICAgICAgICBwYXNzCisKKworY2xhc3MgU2luZ2xlVGhyZWFkZWRCcm9rZXIoV29ya2Vy
TWVzc2FnZUJyb2tlcik6CisgICAgZGVmIF9zdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJl
ciwgd29ya2VyX25hbWUpOgorICAgICAgICAjIEZJWE1FOiBSZXBsYWNlIHdpdGggc29tZXRoaW5n
IHRoYXQgaXNuJ3QgYSB0aHJlYWQuCisgICAgICAgIHRocmVhZCA9IGR1bXBfcmVuZGVyX3RyZWVf
dGhyZWFkLlRlc3RTaGVsbFRocmVhZChzZWxmLl9wb3J0LAorICAgICAgICAgICAgc2VsZi5fb3B0
aW9ucywgd29ya2VyX251bWJlciwgd29ya2VyX25hbWUsCisgICAgICAgICAgICBzZWxmLl90ZXN0
X3J1bm5lci5fY3VycmVudF9maWxlbmFtZV9xdWV1ZSwKKyAgICAgICAgICAgIHNlbGYuX3Rlc3Rf
cnVubmVyLl9yZXN1bHRfcXVldWUpCisgICAgICAgICMgTm90ZTogRG9uJ3Qgc3RhcnQoKSB0aGUg
dGhyZWFkISBJZiB3ZSBkaWQsIGl0IHdvdWxkIGFjdHVhbGx5CisgICAgICAgICMgY3JlYXRlIGFu
b3RoZXIgdGhyZWFkIGFuZCBzdGFydCBleGVjdXRpbmcgaXQsIGFuZCB3ZSdkIG5vIGxvbmdlcgor
ICAgICAgICAjIGJlIHNpbmdsZS10aHJlYWRlZC4KKyAgICAgICAgcmV0dXJuIHRocmVhZAorCisg
ICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZik6CisgICAgICAgIHRocmVhZCA9IHNlbGYuX3Ro
cmVhZHMoKVswXQorICAgICAgICB0aHJlYWQucnVuX2luX21haW5fdGhyZWFkKHNlbGYuX3Rlc3Rf
cnVubmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfcnVu
bmVyLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5KQorICAgICAgICBzZWxmLl90ZXN0X3J1bm5lci51
cGRhdGUoKQorCisKK2NsYXNzIE11bHRpVGhyZWFkZWRCcm9rZXIoV29ya2VyTWVzc2FnZUJyb2tl
cik6CisgICAgZGVmIF9zdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlciwgd29ya2VyX25h
bWUpOgorICAgICAgICB0aHJlYWQgPSBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5UZXN0U2hlbGxU
aHJlYWQoc2VsZi5fcG9ydCwKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMsIHdvcmtlcl9udW1i
ZXIsIHdvcmtlcl9uYW1lLAorICAgICAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXIuX2N1cnJlbnRf
ZmlsZW5hbWVfcXVldWUsCisgICAgICAgICAgICBzZWxmLl90ZXN0X3J1bm5lci5fcmVzdWx0X3F1
ZXVlKQorICAgICAgICB0aHJlYWQuc3RhcnQoKQorICAgICAgICByZXR1cm4gdGhyZWFkCisKKyAg
ICBkZWYgcnVuX21lc3NhZ2VfbG9vcChzZWxmKToKKyAgICAgICAgdGhyZWFkcyA9IHNlbGYuX3Ro
cmVhZHMoKQorCisgICAgICAgICMgTG9vcCB0aHJvdWdoIGFsbCB0aGUgdGhyZWFkcyB3YWl0aW5n
IGZvciB0aGVtIHRvIGZpbmlzaC4KKyAgICAgICAgc29tZV90aHJlYWRfaXNfYWxpdmUgPSBUcnVl
CisgICAgICAgIHdoaWxlIHNvbWVfdGhyZWFkX2lzX2FsaXZlOgorICAgICAgICAgICAgc29tZV90
aHJlYWRfaXNfYWxpdmUgPSBGYWxzZQorICAgICAgICAgICAgdCA9IHRpbWUudGltZSgpCisgICAg
ICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6CisgICAgICAgICAgICAgICAgZXhjZXB0aW9u
X2luZm8gPSB0aHJlYWQuZXhjZXB0aW9uX2luZm8oKQorICAgICAgICAgICAgICAgIGlmIGV4Y2Vw
dGlvbl9pbmZvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAjIFJlLXJhaXNlIHRo
ZSB0aHJlYWQncyBleGNlcHRpb24gaGVyZSB0byBtYWtlIGl0CisgICAgICAgICAgICAgICAgICAg
ICMgY2xlYXIgdGhhdCB0ZXN0aW5nIHdhcyBhYm9ydGVkLiBPdGhlcndpc2UsCisgICAgICAgICAg
ICAgICAgICAgICMgdGhlIHRlc3RzIHRoYXQgZGlkIG5vdCBydW4gd291bGQgYmUgYXNzdW1lZAor
ICAgICAgICAgICAgICAgICAgICAjIHRvIGhhdmUgcGFzc2VkLgorICAgICAgICAgICAgICAgICAg
ICByYWlzZSBleGNlcHRpb25faW5mb1swXSwgZXhjZXB0aW9uX2luZm9bMV0sIGV4Y2VwdGlvbl9p
bmZvWzJdCisKKyAgICAgICAgICAgICAgICBpZiB0aHJlYWQuaXNBbGl2ZSgpOgorICAgICAgICAg
ICAgICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IFRydWUKKyAgICAgICAgICAgICAgICAg
ICAgbmV4dF90aW1lb3V0ID0gdGhyZWFkLm5leHRfdGltZW91dCgpCisgICAgICAgICAgICAgICAg
ICAgIGlmIG5leHRfdGltZW91dCBhbmQgdCA+IG5leHRfdGltZW91dDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxvZ193ZWRnZWRfd29ya2VyKHRocmVhZC5nZXROYW1lKCksIHRocmVhZC5pZCgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkLmNsZWFyX25leHRfdGltZW91dCgpCisK
KyAgICAgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyLnVwZGF0ZSgpCisKKyAgICAgICAgICAgIGlm
IHNvbWVfdGhyZWFkX2lzX2FsaXZlOgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkK
KworICAgIGRlZiBjYW5jZWxfd29ya2VycyhzZWxmKToKKyAgICAgICAgdGhyZWFkcyA9IHNlbGYu
X3RocmVhZHMoKQorICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6CisgICAgICAgICAgICB0
aHJlYWQuY2FuY2VsKCkKKworCitkZWYgbG9nX3dlZGdlZF93b3JrZXIobmFtZSwgaWQpOgorICAg
ICIiIkxvZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZ2l2ZW4gd29ya2VyIHN0YXRlLiIiIgogICAg
IHN0YWNrID0gX2ZpbmRfdGhyZWFkX3N0YWNrKGlkKQogICAgIGFzc2VydChzdGFjayBpcyBub3Qg
Tm9uZSkKICAgICBfbG9nLmVycm9yKCIiKQotICAgIF9sb2cuZXJyb3IoIlRocmVhZCAlZCBpcyB3
ZWRnZWQiICUgaWQpCisgICAgX2xvZy5lcnJvcigiJXMgKHRpZCAlZCkgaXMgd2VkZ2VkIiAlIChu
YW1lLCBpZCkpCiAgICAgX2xvZ19zdGFjayhzdGFjaykKICAgICBfbG9nLmVycm9yKCIiKQogCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcl91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyX3Vu
aXR0ZXN0LnB5CmluZGV4IGQ3MDg3NDU1YjNjYzUwZTgyYzdjMzE4Y2IzODdhMmRiOThmMjEwMTcu
Ljc3ODQ1ZTdjZjQxNGEyNjJhN2ZjNTBkNmMwOGJmMDFlYjViMjkxODEgMTAwNjQ0Ci0tLSBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21l
c3NhZ2VfYnJva2VyX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyX3VuaXR0ZXN0LnB5
CkBAIC0zMCwyNSArMzAsMzQgQEAgaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBRdWV1ZQogaW1wb3J0
IHN5cwogaW1wb3J0IHRocmVhZAoraW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHRpbWUKIGltcG9y
dCB1bml0dGVzdAogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgYXJyYXlfc3RyZWFtCiBm
cm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IG91dHB1dGNhcHR1cmUKK2Zyb20gd2Vi
a2l0cHkudG9vbCBpbXBvcnQgbW9ja3Rvb2wKIAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMg
aW1wb3J0IHJ1bl93ZWJraXRfdGVzdHMKIAotaW1wb3J0IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
CiBpbXBvcnQgbWVzc2FnZV9icm9rZXIKIAogCi1jbGFzcyBUZXN0VGhyZWFkKGR1bXBfcmVuZGVy
X3RyZWVfdGhyZWFkLldhdGNoYWJsZVRocmVhZCk6CitjbGFzcyBUZXN0VGhyZWFkKHRocmVhZGlu
Zy5UaHJlYWQpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGFydGVkX3F1ZXVlLCBzdG9wcGlu
Z19xdWV1ZSk6Ci0gICAgICAgIGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLldhdGNoYWJsZVRocmVh
ZC5fX2luaXRfXyhzZWxmKQorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYp
CisgICAgICAgIHNlbGYuX3RocmVhZF9pZCA9IE5vbmUKICAgICAgICAgc2VsZi5fc3RhcnRlZF9x
dWV1ZSA9IHN0YXJ0ZWRfcXVldWUKICAgICAgICAgc2VsZi5fc3RvcHBpbmdfcXVldWUgPSBzdG9w
cGluZ19xdWV1ZQogICAgICAgICBzZWxmLl90aW1lb3V0ID0gRmFsc2UKICAgICAgICAgc2VsZi5f
dGltZW91dF9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2lu
Zm8gPSBOb25lCisKKyAgICBkZWYgaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90aHJl
YWRfaWQKKworICAgIGRlZiBnZXROYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIndvcmtlci0w
IgogCiAgICAgZGVmIHJ1bihzZWxmKToKICAgICAgICAgc2VsZi5fY292ZXJlZF9ydW4oKQpAQCAt
NzAsMTIgKzc5LDE3IEBAIGNsYXNzIFRlc3RUaHJlYWQoZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQu
V2F0Y2hhYmxlVGhyZWFkKToKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgc2VsZi5fZXhj
ZXB0aW9uX2luZm8gPSBzeXMuZXhjX2luZm8oKQogCisgICAgZGVmIGV4Y2VwdGlvbl9pbmZvKHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZXhjZXB0aW9uX2luZm8KKwogICAgIGRlZiBuZXh0
X3RpbWVvdXQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX3RpbWVvdXQ6CiAgICAgICAgICAgICBz
ZWxmLl90aW1lb3V0X3F1ZXVlLnB1dCgnZG9uZScpCiAgICAgICAgICAgICByZXR1cm4gdGltZS50
aW1lKCkgLSAxMAogICAgICAgICByZXR1cm4gdGltZS50aW1lKCkKIAorICAgIGRlZiBjbGVhcl9u
ZXh0X3RpbWVvdXQoc2VsZik6CisgICAgICAgIHNlbGYuX25leHRfdGltZW91dCA9IE5vbmUKIAog
Y2xhc3MgVGVzdEhhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKICAgICBkZWYgX19pbml0X18oc2Vs
ZiwgYXN0cmVhbSk6CkBAIC04NywzNCArMTAxLDQwIEBAIGNsYXNzIFRlc3RIYW5kbGVyKGxvZ2dp
bmcuSGFuZGxlcik6CiAKIAogY2xhc3MgV2FpdEZvclRocmVhZHNUb0ZpbmlzaFRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgotICAgIGNsYXNzIE1vY2tUZXN0UnVubmVyKHJ1bl93ZWJraXRfdGVzdHMu
VGVzdFJ1bm5lcik6CisgICAgY2xhc3MgTW9ja1Rlc3RSdW5uZXIob2JqZWN0KToKICAgICAgICAg
ZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGRlZiBfX2Rl
bF9fKHNlbGYpOgogICAgICAgICAgICAgcGFzcwogCi0gICAgICAgIGRlZiB1cGRhdGVfc3VtbWFy
eShzZWxmLCByZXN1bHRfc3VtbWFyeSk6CisgICAgICAgIGRlZiB1cGRhdGUoc2VsZik6CiAgICAg
ICAgICAgICBwYXNzCiAKICAgICBkZWYgcnVuX29uZV90aHJlYWQoc2VsZiwgbXNnKToKKyAgICAg
ICAgIyBGSVhNRTogaW1wbGVtZW50CiAgICAgICAgIHJ1bm5lciA9IHNlbGYuTW9ja1Rlc3RSdW5u
ZXIoKQorICAgICAgICBwb3J0ID0gTm9uZQorICAgICAgICBvcHRpb25zID0gbW9ja3Rvb2wuTW9j
a09wdGlvbnMod29ya2Vyc19hcmU9J3RocmVhZHMnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hpbGRfcHJvY2Vzc2VzPScxJykKICAgICAgICAgc3RhcnRpbmdfcXVl
dWUgPSBRdWV1ZS5RdWV1ZSgpCiAgICAgICAgIHN0b3BwaW5nX3F1ZXVlID0gUXVldWUuUXVldWUo
KQorICAgICAgICBicm9rZXIgPSBtZXNzYWdlX2Jyb2tlci5NdWx0aVRocmVhZGVkQnJva2VyKHBv
cnQsIG9wdGlvbnMpCisgICAgICAgIGJyb2tlci5fdGVzdF9ydW5uZXIgPSBydW5uZXIKICAgICAg
ICAgY2hpbGRfdGhyZWFkID0gVGVzdFRocmVhZChzdGFydGluZ19xdWV1ZSwgc3RvcHBpbmdfcXVl
dWUpCisgICAgICAgIGJyb2tlci5fd29ya2Vyc1snd29ya2VyLTAnXSA9IG1lc3NhZ2VfYnJva2Vy
Ll9Xb3JrZXJTdGF0ZSgnd29ya2VyLTAnKQorICAgICAgICBicm9rZXIuX3dvcmtlcnNbJ3dvcmtl
ci0wJ10udGhyZWFkID0gY2hpbGRfdGhyZWFkCiAgICAgICAgIGNoaWxkX3RocmVhZC5zdGFydCgp
CiAgICAgICAgIHN0YXJ0ZWRfbXNnID0gc3RhcnRpbmdfcXVldWUuZ2V0KCkKICAgICAgICAgc3Rv
cHBpbmdfcXVldWUucHV0KG1zZykKLSAgICAgICAgdGhyZWFkcyA9IFtjaGlsZF90aHJlYWRdCi0g
ICAgICAgIHJldHVybiBydW5uZXIuX3dhaXRfZm9yX3RocmVhZHNfdG9fZmluaXNoKHRocmVhZHMs
IE5vbmUpCisgICAgICAgIHJldHVybiBicm9rZXIucnVuX21lc3NhZ2VfbG9vcCgpCiAKICAgICBk
ZWYgdGVzdF9iYXNpYyhzZWxmKToKICAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVf
dGhyZWFkKCcnKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGludGVycnVwdGVkKQogCiAgICAg
ZGVmIHRlc3RfaW50ZXJydXB0KHNlbGYpOgotICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVu
X29uZV90aHJlYWQoJ0tleWJvYXJkSW50ZXJydXB0JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KGludGVycnVwdGVkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlib2FyZEludGVycnVw
dCwgc2VsZi5ydW5fb25lX3RocmVhZCwgJ0tleWJvYXJkSW50ZXJydXB0JykKIAogICAgIGRlZiB0
ZXN0X3RpbWVvdXQoc2VsZik6CiAgICAgICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0
dXJlKCkKQEAgLTEzNyw3ICsxNTcsNyBAQCBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
ICAgICAgICAgZm91bmRfc3RhY2sgPSBtZXNzYWdlX2Jyb2tlci5fZmluZF90aHJlYWRfc3RhY2so
MCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZF9zdGFjaywgTm9uZSkKIAotICAgIGRl
ZiB0ZXN0X2xvZ193ZWRnZWRfdGhyZWFkKHNlbGYpOgorICAgIGRlZiB0ZXN0X2xvZ193ZWRnZWRf
d29ya2VyKHNlbGYpOgogICAgICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgp
CiAgICAgICAgIG9jLmNhcHR1cmVfb3V0cHV0KCkKICAgICAgICAgbG9nZ2VyID0gbWVzc2FnZV9i
cm9rZXIuX2xvZwpAQCAtMTUxLDcgKzE3MSw4IEBAIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgogICAgICAgICBjaGlsZF90aHJlYWQuc3RhcnQoKQogICAgICAgICBtc2cgPSBzdGFydGlu
Z19xdWV1ZS5nZXQoKQogCi0gICAgICAgIG1lc3NhZ2VfYnJva2VyLmxvZ193ZWRnZWRfdGhyZWFk
KGNoaWxkX3RocmVhZC5pZCgpKQorICAgICAgICBtZXNzYWdlX2Jyb2tlci5sb2dfd2VkZ2VkX3dv
cmtlcihjaGlsZF90aHJlYWQuZ2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGlsZF90aHJlYWQuaWQoKSkKICAgICAgICAgc3RvcHBpbmdfcXVldWUu
cHV0KCcnKQogICAgICAgICBjaGlsZF90aHJlYWQuam9pbih0aW1lb3V0PTEuMCkKIApkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0cy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHMucHkKaW5kZXggMWNlYWVlOTIzNjdjMzgyZDQ3YzcxZmI5Y2VlOTVlNDdh
YmNlM2ZkZC4uZDc4ZTQ1Mjk5ZmQ0ZWQyZjEzYzE1YzRlZTA5YzNhZTIzNGQ3MzlmZSAxMDA3NTUK
LS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0cy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC03NSw2ICs3NSw3IEBAIGZyb20gbGF5b3V0X3BhY2th
Z2UgaW1wb3J0IHRlc3RfcmVzdWx0c191cGxvYWRlcgogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0gaW1wb3J0IHVzZXIKIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0eSBpbXBvcnQgc2ltcGxl
anNvbgorZnJvbSB3ZWJraXRweS50b29sIGltcG9ydCBncmFtbWFyCiAKIGltcG9ydCBwb3J0CiAK
QEAgLTIzOSwxNyArMjQwLDE5IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgIyBpbiBEdW1wUmVu
ZGVyVHJlZS4KICAgICBERUZBVUxUX1RFU1RfVElNRU9VVF9NUyA9IDYgKiAxMDAwCiAKLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlcik6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHByaW50ZXIsIG1lc3NhZ2VfYnJva2VyKToKICAgICAg
ICAgIiIiSW5pdGlhbGl6ZSB0ZXN0IHJ1bm5lciBkYXRhIHN0cnVjdHVyZXMuCiAKICAgICAgICAg
QXJnczoKICAgICAgICAgICBwb3J0OiBhbiBvYmplY3QgaW1wbGVtZW50aW5nIHBvcnQtc3BlY2lm
aWMKICAgICAgICAgICBvcHRpb25zOiBhIGRpY3Rpb25hcnkgb2YgY29tbWFuZCBsaW5lIG9wdGlv
bnMKICAgICAgICAgICBwcmludGVyOiBhIFByaW50ZXIgb2JqZWN0IHRvIHJlY29yZCB1cGRhdGVz
IHRvLgorICAgICAgICAgIG1lc3NhZ2VfYnJva2VyOiBvYmplY3QgdXNlZCB0byBjb21tdW5pY2F0
ZSB3aXRoIHdvcmtlcnMuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAog
ICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwogICAgICAgICBzZWxmLl9wcmludGVyID0g
cHJpbnRlcgorICAgICAgICBzZWxmLl9tZXNzYWdlX2Jyb2tlciA9IG1lc3NhZ2VfYnJva2VyCiAK
ICAgICAgICAgIyBkaXNhYmxlIHdzcyBzZXJ2ZXIuIG5lZWQgdG8gaW5zdGFsbCBweU9wZW5TU0wg
b24gYnVpbGRib3RzLgogICAgICAgICAjIHNlbGYuX3dlYnNvY2tldF9zZWN1cmVfc2VydmVyID0g
d2Vic29ja2V0X3NlcnZlci5QeVdlYlNvY2tldCgKQEAgLTU2NSwzNCArNTY4LDYgQEAgY2xhc3Mg
VGVzdFJ1bm5lcjoKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICByZXR1cm4g
RmFsc2UKIAotICAgIGRlZiBfaW5zdGFudGlhdGVfZHVtcF9yZW5kZXJfdHJlZV90aHJlYWRzKHNl
bGYsIHRlc3RfZmlsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0X3N1bW1hcnkpOgotICAgICAgICAiIiJJbnN0YW50aXRhdGVzIGFuZCBzdGFy
dHMgdGhlIFRlc3RTaGVsbFRocmVhZChzKS4KLQotICAgICAgICBSZXR1cm46Ci0gICAgICAgICAg
VGhlIGxpc3Qgb2YgdGhyZWFkcy4KLSAgICAgICAgIiIiCi0gICAgICAgIG51bV93b3JrZXJzID0g
c2VsZi5fbnVtX3dvcmtlcnMoKQotICAgICAgICB0ZXN0X2xpc3RzID0gc2VsZi5fc2hhcmRfdGVz
dHModGVzdF9maWxlcywKLSAgICAgICAgICAgIG51bV93b3JrZXJzID4gMSBhbmQgbm90IHNlbGYu
X29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsKQotICAgICAgICBmaWxlbmFtZV9x
dWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKLSAgICAgICAgZm9yIGl0ZW0gaW4gdGVzdF9saXN0czoKLSAg
ICAgICAgICAgIGZpbGVuYW1lX3F1ZXVlLnB1dChpdGVtKQotCi0gICAgICAgICMgSW5zdGFudGlh
dGUgVGVzdFNoZWxsVGhyZWFkcyBhbmQgc3RhcnQgdGhlbS4KLSAgICAgICAgdGhyZWFkcyA9IFtd
Ci0gICAgICAgIGZvciB3b3JrZXJfbnVtYmVyIGluIHhyYW5nZShudW1fd29ya2Vycyk6Ci0gICAg
ICAgICAgICB0aHJlYWQgPSBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5UZXN0U2hlbGxUaHJlYWQo
c2VsZi5fcG9ydCwKLSAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLCB3b3JrZXJfbnVtYmVy
LAotICAgICAgICAgICAgICAgIGZpbGVuYW1lX3F1ZXVlLCBzZWxmLl9yZXN1bHRfcXVldWUpCi0g
ICAgICAgICAgICBpZiBudW1fd29ya2VycyA+IDE6Ci0gICAgICAgICAgICAgICAgdGhyZWFkLnN0
YXJ0KCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgdGhyZWFkLnJ1bl9pbl9t
YWluX3RocmVhZChzZWxmLCByZXN1bHRfc3VtbWFyeSkKLSAgICAgICAgICAgIHRocmVhZHMuYXBw
ZW5kKHRocmVhZCkKLQotICAgICAgICByZXR1cm4gdGhyZWFkcwotCiAgICAgZGVmIF9udW1fd29y
a2VycyhzZWxmKToKICAgICAgICAgcmV0dXJuIGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nl
c3NlcykKIApAQCAtNjEwLDU4ICs1ODUsNDMgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAg
ICAgICAgaW4gdGhlIGZvcm0ge2ZpbGVuYW1lOmZpbGVuYW1lLCB0ZXN0X3J1bl90aW1lOnRlc3Rf
cnVuX3RpbWV9CiAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgdG8g
cG9wdWxhdGUgd2l0aCB0aGUgcmVzdWx0cwogICAgICAgICAiIiIKLSAgICAgICAgcGx1cmFsID0g
IiIKLSAgICAgICAgaWYgc2VsZi5fbnVtX3dvcmtlcnMoKSA+IDE6Ci0gICAgICAgICAgICBwbHVy
YWwgPSAicyIKLSAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0aW5nICVz
JXMgLi4uJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9wb3J0
LmRyaXZlcl9uYW1lKCksIHBsdXJhbCkpCi0gICAgICAgIHRocmVhZHMgPSBzZWxmLl9pbnN0YW50
aWF0ZV9kdW1wX3JlbmRlcl90cmVlX3RocmVhZHMoZmlsZV9saXN0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1t
YXJ5KQotICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgiU3RhcnRpbmcgdGVzdGlu
ZyAuLi4iKQogCi0gICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkID0gc2VsZi5fd2FpdF9mb3Jf
dGhyZWFkc190b19maW5pc2godGhyZWFkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKLSAgICAg
ICAgKHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdz
KSA9IFwKLSAgICAgICAgICAgIHNlbGYuX2NvbGxlY3RfdGltaW5nX2luZm8odGhyZWFkcykKKyAg
ICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1NoYXJkaW5nIHRlc3RzIC4uLicpCisg
ICAgICAgIG51bV93b3JrZXJzID0gc2VsZi5fbnVtX3dvcmtlcnMoKQorICAgICAgICB0ZXN0X2xp
c3RzID0gc2VsZi5fc2hhcmRfdGVzdHMoZmlsZV9saXN0LAorICAgICAgICAgICAgbnVtX3dvcmtl
cnMgPiAxIGFuZCBub3Qgc2VsZi5fb3B0aW9ucy5leHBlcmltZW50YWxfZnVsbHlfcGFyYWxsZWwp
CisgICAgICAgIGZpbGVuYW1lX3F1ZXVlID0gUXVldWUuUXVldWUoKQorICAgICAgICBmb3IgaXRl
bSBpbiB0ZXN0X2xpc3RzOgorICAgICAgICAgICAgZmlsZW5hbWVfcXVldWUucHV0KGl0ZW0pCiAK
LSAgICAgICAgcmV0dXJuIChrZXlib2FyZF9pbnRlcnJ1cHRlZCwgdGhyZWFkX3RpbWluZ3MsIHRl
c3RfdGltaW5ncywKLSAgICAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKKyAg
ICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0aW5nICVzIC4uLicgJQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyLnBsdXJhbGl6ZSgnd29ya2Vy
JywgbnVtX3dvcmtlcnMpKQorICAgICAgICBtZXNzYWdlX2Jyb2tlciA9IHNlbGYuX21lc3NhZ2Vf
YnJva2VyCisgICAgICAgIHNlbGYuX2N1cnJlbnRfZmlsZW5hbWVfcXVldWUgPSBmaWxlbmFtZV9x
dWV1ZQorICAgICAgICBzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5ID0gcmVzdWx0X3N1bW1h
cnkKKyAgICAgICAgdGhyZWFkcyA9IG1lc3NhZ2VfYnJva2VyLnN0YXJ0X3dvcmtlcnMoc2VsZikK
IAotICAgIGRlZiBfd2FpdF9mb3JfdGhyZWFkc190b19maW5pc2goc2VsZiwgdGhyZWFkcywgcmVz
dWx0X3N1bW1hcnkpOgorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgiU3RhcnRp
bmcgdGVzdGluZyAuLi4iKQogICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IEZhbHNlCiAg
ICAgICAgIHRyeToKLSAgICAgICAgICAgICMgTG9vcCB0aHJvdWdoIGFsbCB0aGUgdGhyZWFkcyB3
YWl0aW5nIGZvciB0aGVtIHRvIGZpbmlzaC4KLSAgICAgICAgICAgIHNvbWVfdGhyZWFkX2lzX2Fs
aXZlID0gVHJ1ZQotICAgICAgICAgICAgd2hpbGUgc29tZV90aHJlYWRfaXNfYWxpdmU6Ci0gICAg
ICAgICAgICAgICAgc29tZV90aHJlYWRfaXNfYWxpdmUgPSBGYWxzZQotICAgICAgICAgICAgICAg
IHQgPSB0aW1lLnRpbWUoKQotICAgICAgICAgICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoK
LSAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uX2luZm8gPSB0aHJlYWQuZXhjZXB0aW9uX2lu
Zm8oKQotICAgICAgICAgICAgICAgICAgICBpZiBleGNlcHRpb25faW5mbyBpcyBub3QgTm9uZToK
LSAgICAgICAgICAgICAgICAgICAgICAgICMgUmUtcmFpc2UgdGhlIHRocmVhZCdzIGV4Y2VwdGlv
biBoZXJlIHRvIG1ha2UgaXQKLSAgICAgICAgICAgICAgICAgICAgICAgICMgY2xlYXIgdGhhdCB0
ZXN0aW5nIHdhcyBhYm9ydGVkLiBPdGhlcndpc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAj
IHRoZSB0ZXN0cyB0aGF0IGRpZCBub3QgcnVuIHdvdWxkIGJlIGFzc3VtZWQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICMgdG8gaGF2ZSBwYXNzZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICBy
YWlzZSBleGNlcHRpb25faW5mb1swXSwgZXhjZXB0aW9uX2luZm9bMV0sIGV4Y2VwdGlvbl9pbmZv
WzJdCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgdGhyZWFkLmlzQWxpdmUoKToKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHNvbWVfdGhyZWFkX2lzX2FsaXZlID0gVHJ1ZQotICAgICAgICAgICAg
ICAgICAgICAgICAgbmV4dF90aW1lb3V0ID0gdGhyZWFkLm5leHRfdGltZW91dCgpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobmV4dF90aW1lb3V0IGFuZCB0ID4gbmV4dF90aW1lb3V0KToK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2Jyb2tlci5sb2dfd2VkZ2VkX3Ro
cmVhZCh0aHJlYWQuaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQuY2xl
YXJfbmV4dF90aW1lb3V0KCkKLQotICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlX3N1bW1hcnko
cmVzdWx0X3N1bW1hcnkpCi0KLSAgICAgICAgICAgICAgICBpZiBzb21lX3RocmVhZF9pc19hbGl2
ZToKLSAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQotCisgICAgICAgICAgICBt
ZXNzYWdlX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKICAgICAgICAgZXhjZXB0IEtleWJvYXJk
SW50ZXJydXB0OgorICAgICAgICAgICAgX2xvZy5pbmZvKCJJbnRlcnJ1cHRlZCwgZXhpdGluZyIp
CisgICAgICAgICAgICBtZXNzYWdlX2Jyb2tlci5jYW5jZWxfd29ya2VycygpCiAgICAgICAgICAg
ICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IFRydWUKLSAgICAgICAgICAgIGZvciB0aHJlYWQgaW4g
dGhyZWFkczoKLSAgICAgICAgICAgICAgICB0aHJlYWQuY2FuY2VsKCkKKyAgICAgICAgZXhjZXB0
OgorICAgICAgICAgICAgIyBVbmV4cGVjdGVkIGV4Y2VwdGlvbjsgZG9uJ3QgdHJ5IHRvIGNsZWFu
IHVwIHdvcmtlcnMuCisgICAgICAgICAgICBfbG9nLmluZm8oIkV4Y2VwdGlvbiByYWlzZWQsIGV4
aXRpbmciKQorICAgICAgICAgICAgcmFpc2UKIAotICAgICAgICByZXR1cm4ga2V5Ym9hcmRfaW50
ZXJydXB0ZWQKKyAgICAgICAgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywgaW5kaXZpZHVh
bF90ZXN0X3RpbWluZ3MgPSBcCisgICAgICAgICAgICBzZWxmLl9jb2xsZWN0X3RpbWluZ19pbmZv
KHRocmVhZHMpCisKKyAgICAgICAgcmV0dXJuIChrZXlib2FyZF9pbnRlcnJ1cHRlZCwgdGhyZWFk
X3RpbWluZ3MsIHRlc3RfdGltaW5ncywKKyAgICAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3Rf
dGltaW5ncykKKworICAgIGRlZiB1cGRhdGUoc2VsZik6CisgICAgICAgIHNlbGYudXBkYXRlX3N1
bW1hcnkoc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSkKIAogICAgIGRlZiBfY29sbGVjdF90
aW1pbmdfaW5mbyhzZWxmLCB0aHJlYWRzKToKICAgICAgICAgdGVzdF90aW1pbmdzID0ge30KQEAg
LTEzMjYsMTEgKzEyODYsMTMgQEAgZGVmIHJ1bihwb3J0LCBvcHRpb25zLCBhcmdzLCByZWd1bGFy
X291dHB1dD1zeXMuc3RkZXJyLAogICAgICAgICBwcmludGVyLmNsZWFudXAoKQogICAgICAgICBy
ZXR1cm4gMAogCisgICAgYnJva2VyID0gbWVzc2FnZV9icm9rZXIuZ2V0KHBvcnQsIG9wdGlvbnMp
CisKICAgICAjIFdlIHdyYXAgYW55IHBhcnRzIG9mIHRoZSBydW4gdGhhdCBhcmUgc2xvdyBvciBs
aWtlbHkgdG8gcmFpc2UgZXhjZXB0aW9ucwogICAgICMgaW4gYSB0cnkvZmluYWxseSB0byBlbnN1
cmUgdGhhdCB3ZSBjbGVhbiB1cCB0aGUgbG9nZ2luZyBjb25maWd1cmF0aW9uLgogICAgIG51bV91
bmV4cGVjdGVkX3Jlc3VsdHMgPSAtMQogICAgIHRyeToKLSAgICAgICAgdGVzdF9ydW5uZXIgPSBU
ZXN0UnVubmVyKHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpCisgICAgICAgIHRlc3RfcnVubmVyID0g
VGVzdFJ1bm5lcihwb3J0LCBvcHRpb25zLCBwcmludGVyLCBicm9rZXIpCiAgICAgICAgIHRlc3Rf
cnVubmVyLl9wcmludF9jb25maWcoKQogCiAgICAgICAgIHByaW50ZXIucHJpbnRfdXBkYXRlKCJD
b2xsZWN0aW5nIHRlc3RzIC4uLiIpCkBAIC0xMzU5LDYgKzEzMjEsNyBAQCBkZWYgcnVuKHBvcnQs
IG9wdGlvbnMsIGFyZ3MsIHJlZ3VsYXJfb3V0cHV0PXN5cy5zdGRlcnIsCiAgICAgICAgICAgICBf
bG9nLmRlYnVnKCJUZXN0aW5nIGNvbXBsZXRlZCwgRXhpdCBzdGF0dXM6ICVkIiAlCiAgICAgICAg
ICAgICAgICAgICAgICAgIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMpCiAgICAgZmluYWxseToKKyAg
ICAgICAgYnJva2VyLmNsZWFudXAoKQogICAgICAgICBwcmludGVyLmNsZWFudXAoKQogCiAgICAg
cmV0dXJuIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMKQEAgLTE1OTUsOSArMTU1OCw4IEBAIGRlZiBw
YXJzZV9hcmdzKGFyZ3M9Tm9uZSk6CiAgICAgICAgICAgICBoZWxwPSJOdW1iZXIgb2YgRHVtcFJl
bmRlclRyZWVzIHRvIHJ1biBpbiBwYXJhbGxlbC4iKSwKICAgICAgICAgIyBGSVhNRTogRGlzcGxh
eSBkZWZhdWx0IG51bWJlciBvZiBjaGlsZCBwcm9jZXNzZXMgdGhhdCB3aWxsIHJ1bi4KICAgICAg
ICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0td29ya2VyLW1vZGVsIiwgYWN0aW9uPSJzdG9yZSIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9InRocmVhZHMiLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJjb250cm9scyB3b3JrZXIgbW9kZWwuIFZhbGlk
IHZhbHVlcyBhcmUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ2lubGluZScgYW5k
ICd0aHJlYWRzJyAoZGVmYXVsdCkuIiksCisgICAgICAgICAgICBkZWZhdWx0PSJ0aHJlYWRzIiwg
aGVscD0oImNvbnRyb2xzIHdvcmtlciBtb2RlbC4gVmFsaWQgdmFsdWVzIGFyZSAiCisgICAgICAg
ICAgICAiJ2lubGluZScgYW5kICd0aHJlYWRzJyAoZGVmYXVsdCkuIikpLAogICAgICAgICBvcHRw
YXJzZS5tYWtlX29wdGlvbigiLS1leHBlcmltZW50YWwtZnVsbHktcGFyYWxsZWwiLAogICAgICAg
ICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKICAgICAgICAgICAgIGhl
bHA9InJ1biBhbGwgdGVzdHMgaW4gcGFyYWxsZWwiKSwKQEAgLTE2NTMsMTMgKzE2MTUsNyBAQCBk
ZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgogICAgICAgICAgICAgICAgICAgIG9sZF9ydW5fd2Vi
a2l0X3Rlc3RzX2NvbXBhdCkKICAgICBvcHRpb25fcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFy
c2VyKG9wdGlvbl9saXN0PW9wdGlvbl9saXN0KQogCi0gICAgb3B0aW9ucywgYXJncyA9IG9wdGlv
bl9wYXJzZXIucGFyc2VfYXJncyhhcmdzKQotCi0gICAgaWYgb3B0aW9ucy53b3JrZXJfbW9kZWwg
bm90IGluICgnaW5saW5lJywgJ3RocmVhZHMnKToKLSAgICAgICAgb3B0aW9uX3BhcnNlci5lcnJv
cigidW5zdXBwb3J0ZWQgdmFsdWUgZm9yIC0td29ya2VyLW1vZGVsOiAlcyIgJQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9wdGlvbnMud29ya2VyX21vZGVsKQotCi0gICAgcmV0dXJuIG9w
dGlvbnMsIGFyZ3MKKyAgICByZXR1cm4gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCiAK
IAogZGVmIG1haW4oKToKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5
CmluZGV4IDA5YTBjNzE5MzNhMDRjODQwNTc1MzhjZTg4OWNiOTBhMzdlNzMxODQuLjAxYzY1Y2E5
MjViOTViODRkMzMxZTcyMDBiM2QzNGUyODZhNmVlNzggMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3Qu
cHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dl
YmtpdF90ZXN0c191bml0dGVzdC5weQpAQCAtODIsNiArODIsOCBAQCBkZWYgcGFzc2luZ19ydW4o
ZXh0cmFfYXJncz1Ob25lLCBwb3J0X29iaj1Ob25lLCByZWNvcmRfcmVzdWx0cz1GYWxzZSwKICAg
ICAgICAgICAgICAgICAgICAgICd3ZWJzb2NrZXQvdGVzdHMnLAogICAgICAgICAgICAgICAgICAg
ICAgJ2ZhaWx1cmVzL2V4cGVjdGVkLyonXSkKICAgICBvcHRpb25zLCBwYXJzZWRfYXJncyA9IHJ1
bl93ZWJraXRfdGVzdHMucGFyc2VfYXJncyhhcmdzKQorICAgIGlmIG5vdCAnLS1jaGlsZC1wcm9j
ZXNzZXMnIGluIGV4dHJhX2FyZ3M6CisgICAgICAgIGFyZ3MuZXh0ZW5kKFsnLS13b3JrZXItbW9k
ZWwnLCAnaW5saW5lJ10pCiAgICAgaWYgbm90IHBvcnRfb2JqOgogICAgICAgICBwb3J0X29iaiA9
IHBvcnQuZ2V0KHBvcnRfbmFtZT1vcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zPW9wdGlvbnMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj1Nb2NrVXNlcigpKQpAQCAtMTAzLDggKzEw
NSw4IEBAIGRlZiBsb2dnaW5nX3J1bihleHRyYV9hcmdzPU5vbmUsIHBvcnRfb2JqPU5vbmUsIHRl
c3RzX2luY2x1ZGVkPUZhbHNlKToKICAgICAgICAgICAgICAgICAgICAgICd3ZWJzb2NrZXQvdGVz
dHMnLAogICAgICAgICAgICAgICAgICAgICAgJ2ZhaWx1cmVzL2V4cGVjdGVkLyonXSkKIAorICAg
IG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKICAgICB0cnk6Ci0gICAgICAgIG9j
ID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKICAgICAgICAgb2MuY2FwdHVyZV9vdXRw
dXQoKQogICAgICAgICBvcHRpb25zLCBwYXJzZWRfYXJncyA9IHJ1bl93ZWJraXRfdGVzdHMucGFy
c2VfYXJncyhhcmdzKQogICAgICAgICB1c2VyID0gTW9ja1VzZXIoKQpAQCAtMjI2LDcgKzIyOCw3
IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9rZXli
b2FyZF9pbnRlcnJ1cHQoc2VsZik6CiAgICAgICAgICMgTm90ZSB0aGF0IHRoaXMgYWxzbyB0ZXN0
cyBydW5uaW5nIGEgdGVzdCBtYXJrZWQgYXMgU0tJUCBpZgogICAgICAgICAjIHlvdSBzcGVjaWZ5
IGl0IGV4cGxpY2l0bHkuCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleWJvYXJkSW50ZXJy
dXB0LCBwYXNzaW5nX3J1biwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5Ym9hcmRJbnRl
cnJ1cHQsIGxvZ2dpbmdfcnVuLAogICAgICAgICAgICAgWydmYWlsdXJlcy9leHBlY3RlZC9rZXli
b2FyZC5odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUpCiAKICAgICBkZWYgdGVzdF9sYXN0X3Jl
c3VsdHMoc2VsZik6CkBAIC0zNzgsMTEgKzM4MCwxMSBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0td29y
a2VyLW1vZGVsJywgJ3RocmVhZHMnXSkpCiAKICAgICBkZWYgdGVzdF93b3JrZXJfbW9kZWxfX3By
b2Nlc3NlcyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCwgbG9n
Z2luZ19ydW4sCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvZ2dpbmdf
cnVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICBbJy0td29ya2VyLW1vZGVsJywgJ3Byb2Nl
c3NlcyddKQogCiAgICAgZGVmIHRlc3Rfd29ya2VyX21vZGVsX191bmtub3duKHNlbGYpOgotICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBsb2dnaW5nX3J1biwKKyAgICAgICAg
c2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9nZ2luZ19ydW4sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFsnLS13b3JrZXItbW9kZWwnLCAndW5rbm93biddKQogCiBNYWluVGVzdCA9
IHNraXBfaWYoTWFpblRlc3QsIHN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJyBhbmQgY29tcGFyZV92
ZXJzaW9uKHN5cywgJzIuNicpWzBdIDwgMCwgJ25ldy1ydW4td2Via2l0LXRlc3RzIHRlc3RzIGhh
bmcgb24gQ3lnd2luIFB5dGhvbiAyLjUuMicpCkBAIC00NjYsNyArNDY4LDggQEAgY2xhc3MgVGVz
dFJ1bm5lclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBtb2NrX3BvcnQucmVsYXRp
dmVfdGVzdF9maWxlbmFtZSA9IGxhbWJkYSBuYW1lOiBuYW1lCiAgICAgICAgIG1vY2tfcG9ydC5m
aWxlbmFtZV90b191cmkgPSBsYW1iZGEgbmFtZTogbmFtZQogCi0gICAgICAgIHJ1bm5lciA9IHJ1
bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lcihwb3J0PW1vY2tfcG9ydCwgb3B0aW9ucz1Nb2NrKCks
IHByaW50ZXI9TW9jaygpKQorICAgICAgICBydW5uZXIgPSBydW5fd2Via2l0X3Rlc3RzLlRlc3RS
dW5uZXIocG9ydD1tb2NrX3BvcnQsIG9wdGlvbnM9TW9jaygpLAorICAgICAgICAgICBwcmludGVy
PU1vY2soKSwgbWVzc2FnZV9icm9rZXI9TW9jaygpKQogICAgICAgICBleHBlY3RlZF9odG1sID0g
dSIiIjxodG1sPgogICA8aGVhZD4KICAgICA8dGl0bGU+TGF5b3V0IFRlc3QgUmVzdWx0cyAodGlt
ZSk8L3RpdGxlPgpAQCAtNDgzLDcgKzQ4Niw5IEBAIGNsYXNzIFRlc3RSdW5uZXJUZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9zaGFyZF90ZXN0cyhzZWxmKToKICAgICAgICAg
IyBUZXN0IHRoYXQgX3NoYXJkX3Rlc3RzIGluIHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lciBy
ZWFsbHkKICAgICAgICAgIyBwdXQgdGhlIGh0dHAgdGVzdHMgZmlyc3QgaW4gdGhlIHF1ZXVlLgot
ICAgICAgICBydW5uZXIgPSBUZXN0UnVubmVyV3JhcHBlcihwb3J0PU1vY2soKSwgb3B0aW9ucz1N
b2NrKCksIHByaW50ZXI9TW9jaygpKQorICAgICAgICBydW5uZXIgPSBUZXN0UnVubmVyV3JhcHBl
cihwb3J0PU1vY2soKSwgb3B0aW9ucz1Nb2NrKCksCisgICAgICAgICAgICBwcmludGVyPU1vY2so
KSwgbWVzc2FnZV9icm9rZXI9TW9jaygpKQorICAgICAgICBydW5uZXIuX29wdGlvbnMuZXhwZXJp
bWVudGFsX2Z1bGx5X3BhcmFsbGVsID0gRmFsc2UKIAogICAgICAgICB0ZXN0X2xpc3QgPSBbCiAg
ICAgICAgICAgIkxheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91bmljb2RlLmh0bSIsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74711</attachid>
            <date>2010-11-23 17:38:25 -0800</date>
            <delta_ts>2010-11-23 18:36:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49779-20101123173824.patch</filename>
            <type>text/plain</type>
            <size>25515</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA2YTU2Zjc5M2I4MzE4YWRiZjZiZjFkNmIyN2E5ZGQ3YzAzY2UwMTAzLi4wMzdmZTBm
YWEwZTkzM2I5ZDk5YzAxYThiMWYyOTA0NDVmMWFkN2QwIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTAtMTEtMTggIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBs
ZW1lbnRzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBtYW5hZ2VyIHNpZGUgb2YgdGhlCisgICAgICAg
IEJyb2tlciBvYmplY3RzIC0gaXQgaGFuZGxlcyBjcmVhdGluZyB0aHJlYWRzLCB3YWl0aW5nIGZv
ciB0aGVtCisgICAgICAgIHRvIGNvbXBsZXRlLCBhbmQgcnVubmluZyBhIHNpbmdsZS10aHJlYWRl
ZCBsb29wIGFzIHdlbGwuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ5Nzc5CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcl91bml0dGVz
dC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0
X3Rlc3RzLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6CisKIDIwMTAtMTEtMjMgIERpcmsgUHJhbmtlICA8ZHBy
YW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90
aHJlYWQucHkKaW5kZXggMWJhYzdlZjE4ZTNlMmVhN2E2ZGNmNWZhMzc0MDI2NzhlN2FlMmEyYi4u
MzhjZjZjMzUyMzc3YjM5NmMwYzk1OTFlN2E1YjViOTc0NWQ3YTg3YSAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVt
cF9yZW5kZXJfdHJlZV90aHJlYWQucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkK
QEAgLTI0NCw3ICsyNDQsNyBAQCBjbGFzcyBXYXRjaGFibGVUaHJlYWQodGhyZWFkaW5nLlRocmVh
ZCk6CiAKIAogY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6Ci0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHdvcmtlcl9udW1iZXIsCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHdvcmtlcl9udW1iZXIsIHdvcmtlcl9uYW1lLAog
ICAgICAgICAgICAgICAgICBmaWxlbmFtZV9saXN0X3F1ZXVlLCByZXN1bHRfcXVldWUpOgogICAg
ICAgICAiIiJJbml0aWFsaXplIGFsbCB0aGUgbG9jYWwgc3RhdGUgZm9yIHRoaXMgRHVtcFJlbmRl
clRyZWUgdGhyZWFkLgogCkBAIC0yNTIsNiArMjUyLDcgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFk
KFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgICAgcG9ydDogaW50ZXJmYWNlIHRvIHBvcnQtc3Bl
Y2lmaWMgaG9va3MKICAgICAgICAgICBvcHRpb25zOiBjb21tYW5kIGxpbmUgb3B0aW9ucyBhcmd1
bWVudCBmcm9tIG9wdHBhcnNlCiAgICAgICAgICAgd29ya2VyX251bWJlcjogaWRlbnRpZmllciBm
b3IgYSBwYXJ0aWN1bGFyIHdvcmtlciB0aHJlYWQuCisgICAgICAgICAgd29ya2VyX25hbWU6IGZv
ciBsb2dnaW5nLgogICAgICAgICAgIGZpbGVuYW1lX2xpc3RfcXVldWU6IEEgdGhyZWFkIHNhZmUg
UXVldWUgY2xhc3MgdGhhdCBjb250YWlucyBsaXN0cwogICAgICAgICAgICAgICBvZiB0dXBsZXMg
b2YgKGZpbGVuYW1lLCB1cmkpIHBhaXJzLgogICAgICAgICAgIHJlc3VsdF9xdWV1ZTogQSB0aHJl
YWQgc2FmZSBRdWV1ZSBjbGFzcyB0aGF0IHdpbGwgY29udGFpbgpAQCAtMjYxLDcgKzI2Miw3IEBA
IGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgogICAgICAgICBzZWxmLl9w
b3J0ID0gcG9ydAogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwogICAgICAgICBzZWxm
Ll93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgotICAgICAgICBzZWxmLl9uYW1lID0gJ3dv
cmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX25hbWUgPSB3b3JrZXJfbmFt
ZQogICAgICAgICBzZWxmLl9maWxlbmFtZV9saXN0X3F1ZXVlID0gZmlsZW5hbWVfbGlzdF9xdWV1
ZQogICAgICAgICBzZWxmLl9yZXN1bHRfcXVldWUgPSByZXN1bHRfcXVldWUKICAgICAgICAgc2Vs
Zi5fZmlsZW5hbWVfbGlzdCA9IFtdCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlci5weSBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21l
c3NhZ2VfYnJva2VyLnB5CmluZGV4IDEzOTUxYzAyZWYzZDE3MmEzOWU3MzY5Y2ViMjE5N2YxY2Jj
YjliOTguLmU1MjBhOWNhYTZiNzY4MmViZmRkMmE5OGJiMjE3ZWI4NWQ3MjUxYmMgMTAwNjQ0Ci0t
LSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL21lc3NhZ2VfYnJva2VyLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5CkBAIC0yOCwyNSAr
MjgsMTU0IEBACiAKICIiIk1vZHVsZSBmb3IgaGFuZGxpbmcgbWVzc2FnZXMsIHRocmVhZHMsIHBy
b2Nlc3NlcywgYW5kIGNvbmN1cnJlbmN5IGZvciBydW4td2Via2l0LXRlc3RzLgogCi1UaGUgbW9k
ZWwgd2UgdXNlIGlzIHRoYXQgb2YgYSBtZXNzYWdlIGJyb2tlciAtIGl0IHByb3ZpZGVzIGEgbWVz
c2FnaW5nCi1hYnN0cmFjdGlvbiBhbmQgbWVzc2FnZSBsb29wcywgYW5kIGhhbmRsZXMgbGF1bmNo
aW5nIHRocmVhZHMgYW5kL29yIHByb2Nlc3NlcwotZGVwZW5kaW5nIG9uIHRoZSByZXF1ZXN0ZWQg
Y29uZmlndXJhdGlvbi4KK1Rlc3RpbmcgaXMgYWNjb21wbGlzaGVkIGJ5IGhhdmluZyBhIG1hbmFn
ZXIgKFRlc3RSdW5uZXIpIGdhdGhlciBhbGwgb2YgdGhlCit0ZXN0cyB0byBiZSBydW4sIGFuZCBz
ZW5kaW5nIG1lc3NhZ2VzIHRvIGEgcG9vbCBvZiB3b3JrZXJzIChUZXN0U2hlbGxUaHJlYWRzKQor
dG8gcnVuIGVhY2ggdGVzdC4gRWFjaCB3b3JrZXIgY29tbXVuaWNhdGVzIHdpdGggb25lIGRyaXZl
ciAodXN1YWxseQorRHVtcFJlbmRlclRyZWUpIHRvIHJ1biBvbmUgdGVzdCBhdCBhIHRpbWUgYW5k
IHRoZW4gY29tcGFyZSB0aGUgb3V0cHV0IGFnYWluc3QKK3doYXQgd2UgZXhwZWN0ZWQgdG8gZ2V0
LgorCitUaGlzIG1vZHVsZXMgcHJvdmlkZXMgYSBtZXNzYWdlIGJyb2tlciB0aGF0IGNvbm5lY3Rz
IHRoZSBtYW5hZ2VyIHRvIHRoZQord29ya2VyczogaXQgcHJvdmlkZXMgYSBtZXNzYWdpbmcgYWJz
dHJhY3Rpb24gYW5kIG1lc3NhZ2UgbG9vcHMsIGFuZAoraGFuZGxlcyBsYXVuY2hpbmcgdGhyZWFk
cyBhbmQvb3IgcHJvY2Vzc2VzIGRlcGVuZGluZyBvbiB0aGUKK3JlcXVlc3RlZCBjb25maWd1cmF0
aW9uLgogIiIiCiAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3lzCitpbXBvcnQgdGltZQogaW1w
b3J0IHRyYWNlYmFjawogCitpbXBvcnQgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQKIAogX2xvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAKLWRlZiBsb2dfd2VkZ2VkX3RocmVhZChp
ZCk6Ci0gICAgIiIiTG9nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBnaXZlbiB0aHJlYWQgc3RhdGUu
IiIiCitkZWYgZ2V0KHBvcnQsIG9wdGlvbnMpOgorICAgICIiIlJldHVybiBhbiBpbnN0YW5jZSBv
ZiBhIFdvcmtlck1lc3NhZ2VCcm9rZXIuIiIiCisgICAgd29ya2VyX21vZGVsID0gb3B0aW9ucy53
b3JrZXJfbW9kZWwKKyAgICBpZiB3b3JrZXJfbW9kZWwgPT0gJ2lubGluZSc6CisgICAgICAgIHJl
dHVybiBJbmxpbmVCcm9rZXIocG9ydCwgb3B0aW9ucykKKyAgICBpZiB3b3JrZXJfbW9kZWwgPT0g
J3RocmVhZHMnOgorICAgICAgICByZXR1cm4gTXVsdGlUaHJlYWRlZEJyb2tlcihwb3J0LCBvcHRp
b25zKQorICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3Vuc3VwcG9ydGVkIHZhbHVlIGZvciAtLXdvcmtl
ci1tb2RlbDogJXMnICUgd29ya2VyX21vZGVsKQorCisKK2NsYXNzIF9Xb3JrZXJTdGF0ZShvYmpl
Y3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5uYW1lID0g
bmFtZQorICAgICAgICBzZWxmLnRocmVhZCA9IE5vbmUKKworCitjbGFzcyBXb3JrZXJNZXNzYWdl
QnJva2VyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMpOgor
ICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9u
cworICAgICAgICBzZWxmLl9udW1fd29ya2VycyA9IGludChzZWxmLl9vcHRpb25zLmNoaWxkX3By
b2Nlc3NlcykKKworICAgICAgICAjIFRoaXMgbWFwcyB3b3JrZXIgbmFtZXMgdG8gdGhlaXIgX1dv
cmtlclN0YXRlIHZhbHVlcy4KKyAgICAgICAgc2VsZi5fd29ya2VycyA9IHt9CisKKyAgICBkZWYg
X3RocmVhZHMoc2VsZik6CisgICAgICAgIHJldHVybiB0dXBsZShbdy50aHJlYWQgZm9yIHcgaW4g
c2VsZi5fd29ya2Vycy52YWx1ZXMoKV0pCisKKyAgICBkZWYgc3RhcnRfd29ya2VycyhzZWxmLCB0
ZXN0X3J1bm5lcik6CisgICAgICAgICIiIlN0YXJ0cyB1cCB0aGUgcG9vbCBvZiB3b3JrZXJzIGZv
ciBydW5uaW5nIHRoZSB0ZXN0cy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgdGVzdF9y
dW5uZXI6IGEgaGFuZGxlIHRvIHRoZSBtYW5hZ2VyL1Rlc3RSdW5uZXIgb2JqZWN0CisgICAgICAg
ICIiIgorICAgICAgICBzZWxmLl90ZXN0X3J1bm5lciA9IHRlc3RfcnVubmVyCisgICAgICAgIGZv
ciB3b3JrZXJfbnVtYmVyIGluIHhyYW5nZShzZWxmLl9udW1fd29ya2Vycyk6CisgICAgICAgICAg
ICB3b3JrZXIgPSBfV29ya2VyU3RhdGUoJ3dvcmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyKQorICAg
ICAgICAgICAgd29ya2VyLnRocmVhZCA9IHNlbGYuX3N0YXJ0X3dvcmtlcih3b3JrZXJfbnVtYmVy
LCB3b3JrZXIubmFtZSkKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcnNbd29ya2VyLm5hbWVdID0g
d29ya2VyCisgICAgICAgIHJldHVybiBzZWxmLl90aHJlYWRzKCkKKworICAgIGRlZiBfc3RhcnRf
d29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIsIHdvcmtlcl9uYW1lKToKKyAgICAgICAgcmFpc2Ug
Tm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZik6Cisg
ICAgICAgICIiIkxvb3AgcHJvY2Vzc2luZyBtZXNzYWdlcyB1bnRpbCBkb25lLiIiIgorICAgICAg
ICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY2FuY2VsX3dvcmtlcnMoc2Vs
Zik6CisgICAgICAgICIiIkNhbmNlbC9pbnRlcnJ1cHQgYW55IHdvcmtlcnMgdGhhdCBhcmUgc3Rp
bGwgYWxpdmUuIiIiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAg
ICAgICAiIiJQZXJmb3JtIGFueSBuZWNlc3NhcnkgY2xlYW51cCBvbiBzaHV0ZG93bi4iIiIKKyAg
ICAgICAgcGFzcworCisKK2NsYXNzIElubGluZUJyb2tlcihXb3JrZXJNZXNzYWdlQnJva2VyKToK
KyAgICBkZWYgX3N0YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfbnVtYmVyLCB3b3JrZXJfbmFtZSk6
CisgICAgICAgICMgRklYTUU6IFJlcGxhY2Ugd2l0aCBzb21ldGhpbmcgdGhhdCBpc24ndCBhIHRo
cmVhZC4KKyAgICAgICAgdGhyZWFkID0gZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuVGVzdFNoZWxs
VGhyZWFkKHNlbGYuX3BvcnQsCisgICAgICAgICAgICBzZWxmLl9vcHRpb25zLCB3b3JrZXJfbnVt
YmVyLCB3b3JrZXJfbmFtZSwKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyLl9jdXJyZW50
X2ZpbGVuYW1lX3F1ZXVlLAorICAgICAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXIuX3Jlc3VsdF9x
dWV1ZSkKKyAgICAgICAgIyBOb3RlOiBEb24ndCBzdGFydCgpIHRoZSB0aHJlYWQhIElmIHdlIGRp
ZCwgaXQgd291bGQgYWN0dWFsbHkKKyAgICAgICAgIyBjcmVhdGUgYW5vdGhlciB0aHJlYWQgYW5k
IHN0YXJ0IGV4ZWN1dGluZyBpdCwgYW5kIHdlJ2Qgbm8gbG9uZ2VyCisgICAgICAgICMgYmUgc2lu
Z2xlLXRocmVhZGVkLgorICAgICAgICByZXR1cm4gdGhyZWFkCisKKyAgICBkZWYgcnVuX21lc3Nh
Z2VfbG9vcChzZWxmKToKKyAgICAgICAgdGhyZWFkID0gc2VsZi5fdGhyZWFkcygpWzBdCisgICAg
ICAgIHRocmVhZC5ydW5faW5fbWFpbl90aHJlYWQoc2VsZi5fdGVzdF9ydW5uZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXIuX2N1cnJlbnRfcmVz
dWx0X3N1bW1hcnkpCisgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyLnVwZGF0ZSgpCisKKworY2xh
c3MgTXVsdGlUaHJlYWRlZEJyb2tlcihXb3JrZXJNZXNzYWdlQnJva2VyKToKKyAgICBkZWYgX3N0
YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfbnVtYmVyLCB3b3JrZXJfbmFtZSk6CisgICAgICAgIHRo
cmVhZCA9IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLlRlc3RTaGVsbFRocmVhZChzZWxmLl9wb3J0
LAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucywgd29ya2VyX251bWJlciwgd29ya2VyX25hbWUs
CisgICAgICAgICAgICBzZWxmLl90ZXN0X3J1bm5lci5fY3VycmVudF9maWxlbmFtZV9xdWV1ZSwK
KyAgICAgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyLl9yZXN1bHRfcXVldWUpCisgICAgICAgIHRo
cmVhZC5zdGFydCgpCisgICAgICAgIHJldHVybiB0aHJlYWQKKworICAgIGRlZiBydW5fbWVzc2Fn
ZV9sb29wKHNlbGYpOgorICAgICAgICB0aHJlYWRzID0gc2VsZi5fdGhyZWFkcygpCisKKyAgICAg
ICAgIyBMb29wIHRocm91Z2ggYWxsIHRoZSB0aHJlYWRzIHdhaXRpbmcgZm9yIHRoZW0gdG8gZmlu
aXNoLgorICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IFRydWUKKyAgICAgICAgd2hpbGUg
c29tZV90aHJlYWRfaXNfYWxpdmU6CisgICAgICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9
IEZhbHNlCisgICAgICAgICAgICB0ID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIGZvciB0aHJl
YWQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgICAgICBleGNlcHRpb25faW5mbyA9IHRocmVhZC5l
eGNlcHRpb25faW5mbygpCisgICAgICAgICAgICAgICAgaWYgZXhjZXB0aW9uX2luZm8gaXMgbm90
IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICMgUmUtcmFpc2UgdGhlIHRocmVhZCdzIGV4Y2Vw
dGlvbiBoZXJlIHRvIG1ha2UgaXQKKyAgICAgICAgICAgICAgICAgICAgIyBjbGVhciB0aGF0IHRl
c3Rpbmcgd2FzIGFib3J0ZWQuIE90aGVyd2lzZSwKKyAgICAgICAgICAgICAgICAgICAgIyB0aGUg
dGVzdHMgdGhhdCBkaWQgbm90IHJ1biB3b3VsZCBiZSBhc3N1bWVkCisgICAgICAgICAgICAgICAg
ICAgICMgdG8gaGF2ZSBwYXNzZWQuCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlv
bl9pbmZvWzBdLCBleGNlcHRpb25faW5mb1sxXSwgZXhjZXB0aW9uX2luZm9bMl0KKworICAgICAg
ICAgICAgICAgIGlmIHRocmVhZC5pc0FsaXZlKCk6CisgICAgICAgICAgICAgICAgICAgIHNvbWVf
dGhyZWFkX2lzX2FsaXZlID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBuZXh0X3RpbWVvdXQg
PSB0aHJlYWQubmV4dF90aW1lb3V0KCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbmV4dF90aW1l
b3V0IGFuZCB0ID4gbmV4dF90aW1lb3V0OgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nX3dl
ZGdlZF93b3JrZXIodGhyZWFkLmdldE5hbWUoKSwgdGhyZWFkLmlkKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICB0aHJlYWQuY2xlYXJfbmV4dF90aW1lb3V0KCkKKworICAgICAgICAgICAgc2Vs
Zi5fdGVzdF9ydW5uZXIudXBkYXRlKCkKKworICAgICAgICAgICAgaWYgc29tZV90aHJlYWRfaXNf
YWxpdmU6CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorCisgICAgZGVmIGNhbmNl
bF93b3JrZXJzKHNlbGYpOgorICAgICAgICB0aHJlYWRzID0gc2VsZi5fdGhyZWFkcygpCisgICAg
ICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgIHRocmVhZC5jYW5jZWwoKQor
CisKK2RlZiBsb2dfd2VkZ2VkX3dvcmtlcihuYW1lLCBpZCk6CisgICAgIiIiTG9nIGluZm9ybWF0
aW9uIGFib3V0IHRoZSBnaXZlbiB3b3JrZXIgc3RhdGUuIiIiCiAgICAgc3RhY2sgPSBfZmluZF90
aHJlYWRfc3RhY2soaWQpCiAgICAgYXNzZXJ0KHN0YWNrIGlzIG5vdCBOb25lKQogICAgIF9sb2cu
ZXJyb3IoIiIpCi0gICAgX2xvZy5lcnJvcigiVGhyZWFkICVkIGlzIHdlZGdlZCIgJSBpZCkKKyAg
ICBfbG9nLmVycm9yKCIlcyAodGlkICVkKSBpcyB3ZWRnZWQiICUgKG5hbWUsIGlkKSkKICAgICBf
bG9nX3N0YWNrKHN0YWNrKQogICAgIF9sb2cuZXJyb3IoIiIpCiAKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3Nh
Z2VfYnJva2VyX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5pdHRlc3QucHkKaW5kZXgg
ZDcwODc0NTViM2NjNTBlODJjN2MzMThjYjM4N2EyZGI5OGYyMTAxNy4uNzc4NDVlN2NmNDE0YTI2
MmE3ZmM1MGQ2YzA4YmYwMWViNWIyOTE4MSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5p
dHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5pdHRlc3QucHkKQEAgLTMwLDI1ICszMCwz
NCBAQCBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IFF1ZXVlCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGhy
ZWFkCitpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiAKIGZy
b20gd2Via2l0cHkuY29tbW9uIGltcG9ydCBhcnJheV9zdHJlYW0KIGZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbSBpbXBvcnQgb3V0cHV0Y2FwdHVyZQorZnJvbSB3ZWJraXRweS50b29sIGltcG9y
dCBtb2NrdG9vbAogCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcnVuX3dlYmtp
dF90ZXN0cwogCi1pbXBvcnQgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQKIGltcG9ydCBtZXNzYWdl
X2Jyb2tlcgogCiAKLWNsYXNzIFRlc3RUaHJlYWQoZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuV2F0
Y2hhYmxlVGhyZWFkKToKK2NsYXNzIFRlc3RUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0ZWRfcXVldWUsIHN0b3BwaW5nX3F1ZXVlKToKLSAgICAg
ICAgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuV2F0Y2hhYmxlVGhyZWFkLl9faW5pdF9fKHNlbGYp
CisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5f
dGhyZWFkX2lkID0gTm9uZQogICAgICAgICBzZWxmLl9zdGFydGVkX3F1ZXVlID0gc3RhcnRlZF9x
dWV1ZQogICAgICAgICBzZWxmLl9zdG9wcGluZ19xdWV1ZSA9IHN0b3BwaW5nX3F1ZXVlCiAgICAg
ICAgIHNlbGYuX3RpbWVvdXQgPSBGYWxzZQogICAgICAgICBzZWxmLl90aW1lb3V0X3F1ZXVlID0g
UXVldWUuUXVldWUoKQorICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IE5vbmUKKworICAg
IGRlZiBpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RocmVhZF9pZAorCisgICAgZGVm
IGdldE5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAid29ya2VyLTAiCiAKICAgICBkZWYgcnVu
KHNlbGYpOgogICAgICAgICBzZWxmLl9jb3ZlcmVkX3J1bigpCkBAIC03MCwxMiArNzksMTcgQEAg
Y2xhc3MgVGVzdFRocmVhZChkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5XYXRjaGFibGVUaHJlYWQp
OgogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IHN5
cy5leGNfaW5mbygpCiAKKyAgICBkZWYgZXhjZXB0aW9uX2luZm8oc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLl9leGNlcHRpb25faW5mbworCiAgICAgZGVmIG5leHRfdGltZW91dChzZWxmKToK
ICAgICAgICAgaWYgc2VsZi5fdGltZW91dDoKICAgICAgICAgICAgIHNlbGYuX3RpbWVvdXRfcXVl
dWUucHV0KCdkb25lJykKICAgICAgICAgICAgIHJldHVybiB0aW1lLnRpbWUoKSAtIDEwCiAgICAg
ICAgIHJldHVybiB0aW1lLnRpbWUoKQogCisgICAgZGVmIGNsZWFyX25leHRfdGltZW91dChzZWxm
KToKKyAgICAgICAgc2VsZi5fbmV4dF90aW1lb3V0ID0gTm9uZQogCiBjbGFzcyBUZXN0SGFuZGxl
cihsb2dnaW5nLkhhbmRsZXIpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhc3RyZWFtKToKQEAg
LTg3LDM0ICsxMDEsNDAgQEAgY2xhc3MgVGVzdEhhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKIAog
CiBjbGFzcyBXYWl0Rm9yVGhyZWFkc1RvRmluaXNoVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0g
ICAgY2xhc3MgTW9ja1Rlc3RSdW5uZXIocnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVubmVyKToKKyAg
ICBjbGFzcyBNb2NrVGVzdFJ1bm5lcihvYmplY3QpOgogICAgICAgICBkZWYgX19pbml0X18oc2Vs
Zik6CiAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAg
ICAgICAgICBwYXNzCiAKLSAgICAgICAgZGVmIHVwZGF0ZV9zdW1tYXJ5KHNlbGYsIHJlc3VsdF9z
dW1tYXJ5KToKKyAgICAgICAgZGVmIHVwZGF0ZShzZWxmKToKICAgICAgICAgICAgIHBhc3MKIAog
ICAgIGRlZiBydW5fb25lX3RocmVhZChzZWxmLCBtc2cpOgorICAgICAgICAjIEZJWE1FOiBpbXBs
ZW1lbnQKICAgICAgICAgcnVubmVyID0gc2VsZi5Nb2NrVGVzdFJ1bm5lcigpCisgICAgICAgIHBv
cnQgPSBOb25lCisgICAgICAgIG9wdGlvbnMgPSBtb2NrdG9vbC5Nb2NrT3B0aW9ucyh3b3JrZXJz
X2FyZT0ndGhyZWFkcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGlsZF9wcm9jZXNzZXM9JzEnKQogICAgICAgICBzdGFydGluZ19xdWV1ZSA9IFF1ZXVlLlF1ZXVl
KCkKICAgICAgICAgc3RvcHBpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgIGJyb2tl
ciA9IG1lc3NhZ2VfYnJva2VyLk11bHRpVGhyZWFkZWRCcm9rZXIocG9ydCwgb3B0aW9ucykKKyAg
ICAgICAgYnJva2VyLl90ZXN0X3J1bm5lciA9IHJ1bm5lcgogICAgICAgICBjaGlsZF90aHJlYWQg
PSBUZXN0VGhyZWFkKHN0YXJ0aW5nX3F1ZXVlLCBzdG9wcGluZ19xdWV1ZSkKKyAgICAgICAgYnJv
a2VyLl93b3JrZXJzWyd3b3JrZXItMCddID0gbWVzc2FnZV9icm9rZXIuX1dvcmtlclN0YXRlKCd3
b3JrZXItMCcpCisgICAgICAgIGJyb2tlci5fd29ya2Vyc1snd29ya2VyLTAnXS50aHJlYWQgPSBj
aGlsZF90aHJlYWQKICAgICAgICAgY2hpbGRfdGhyZWFkLnN0YXJ0KCkKICAgICAgICAgc3RhcnRl
ZF9tc2cgPSBzdGFydGluZ19xdWV1ZS5nZXQoKQogICAgICAgICBzdG9wcGluZ19xdWV1ZS5wdXQo
bXNnKQotICAgICAgICB0aHJlYWRzID0gW2NoaWxkX3RocmVhZF0KLSAgICAgICAgcmV0dXJuIHJ1
bm5lci5fd2FpdF9mb3JfdGhyZWFkc190b19maW5pc2godGhyZWFkcywgTm9uZSkKKyAgICAgICAg
cmV0dXJuIGJyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKIAogICAgIGRlZiB0ZXN0X2Jhc2ljKHNl
bGYpOgogICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJycpCiAgICAg
ICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW50ZXJydXB0ZWQpCiAKICAgICBkZWYgdGVzdF9pbnRlcnJ1
cHQoc2VsZik6Ci0gICAgICAgIGludGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3RocmVhZCgnS2V5
Ym9hcmRJbnRlcnJ1cHQnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50ZXJydXB0ZWQpCisg
ICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleWJvYXJkSW50ZXJydXB0LCBzZWxmLnJ1bl9vbmVf
dGhyZWFkLCAnS2V5Ym9hcmRJbnRlcnJ1cHQnKQogCiAgICAgZGVmIHRlc3RfdGltZW91dChzZWxm
KToKICAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQpAQCAtMTM3LDcg
KzE1Nyw3IEBAIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBmb3VuZF9z
dGFjayA9IG1lc3NhZ2VfYnJva2VyLl9maW5kX3RocmVhZF9zdGFjaygwKQogICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGZvdW5kX3N0YWNrLCBOb25lKQogCi0gICAgZGVmIHRlc3RfbG9nX3dlZGdl
ZF90aHJlYWQoc2VsZik6CisgICAgZGVmIHRlc3RfbG9nX3dlZGdlZF93b3JrZXIoc2VsZik6CiAg
ICAgICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKICAgICAgICAgb2MuY2Fw
dHVyZV9vdXRwdXQoKQogICAgICAgICBsb2dnZXIgPSBtZXNzYWdlX2Jyb2tlci5fbG9nCkBAIC0x
NTEsNyArMTcxLDggQEAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGNo
aWxkX3RocmVhZC5zdGFydCgpCiAgICAgICAgIG1zZyA9IHN0YXJ0aW5nX3F1ZXVlLmdldCgpCiAK
LSAgICAgICAgbWVzc2FnZV9icm9rZXIubG9nX3dlZGdlZF90aHJlYWQoY2hpbGRfdGhyZWFkLmlk
KCkpCisgICAgICAgIG1lc3NhZ2VfYnJva2VyLmxvZ193ZWRnZWRfd29ya2VyKGNoaWxkX3RocmVh
ZC5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
aWxkX3RocmVhZC5pZCgpKQogICAgICAgICBzdG9wcGluZ19xdWV1ZS5wdXQoJycpCiAgICAgICAg
IGNoaWxkX3RocmVhZC5qb2luKHRpbWVvdXQ9MS4wKQogCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5w
eQppbmRleCAxY2VhZWU5MjM2N2MzODJkNDdjNzFmYjljZWU5NWU0N2FiY2UzZmRkLi5kNzhlNDUy
OTlmZDRlZDJmMTNjMTVjNGVlMDljM2FlMjM0ZDczOWZlIDEwMDc1NQotLS0gYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVz
dHMucHkKQEAgLTc1LDYgKzc1LDcgQEAgZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9y
ZXN1bHRzX3VwbG9hZGVyCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgdXNl
cgogZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5IGltcG9ydCBzaW1wbGVqc29uCitmcm9tIHdlYmtp
dHB5LnRvb2wgaW1wb3J0IGdyYW1tYXIKIAogaW1wb3J0IHBvcnQKIApAQCAtMjM5LDE3ICsyNDAs
MTkgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAjIGluIER1bXBSZW5kZXJUcmVlLgogICAgIERF
RkFVTFRfVEVTVF9USU1FT1VUX01TID0gNiAqIDEwMDAKIAotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBwb3J0LCBvcHRpb25zLCBwcmludGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwg
b3B0aW9ucywgcHJpbnRlciwgbWVzc2FnZV9icm9rZXIpOgogICAgICAgICAiIiJJbml0aWFsaXpl
IHRlc3QgcnVubmVyIGRhdGEgc3RydWN0dXJlcy4KIAogICAgICAgICBBcmdzOgogICAgICAgICAg
IHBvcnQ6IGFuIG9iamVjdCBpbXBsZW1lbnRpbmcgcG9ydC1zcGVjaWZpYwogICAgICAgICAgIG9w
dGlvbnM6IGEgZGljdGlvbmFyeSBvZiBjb21tYW5kIGxpbmUgb3B0aW9ucwogICAgICAgICAgIHBy
aW50ZXI6IGEgUHJpbnRlciBvYmplY3QgdG8gcmVjb3JkIHVwZGF0ZXMgdG8uCisgICAgICAgICAg
bWVzc2FnZV9icm9rZXI6IG9iamVjdCB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggd29ya2Vycy4K
ICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX29w
dGlvbnMgPSBvcHRpb25zCiAgICAgICAgIHNlbGYuX3ByaW50ZXIgPSBwcmludGVyCisgICAgICAg
IHNlbGYuX21lc3NhZ2VfYnJva2VyID0gbWVzc2FnZV9icm9rZXIKIAogICAgICAgICAjIGRpc2Fi
bGUgd3NzIHNlcnZlci4gbmVlZCB0byBpbnN0YWxsIHB5T3BlblNTTCBvbiBidWlsZGJvdHMuCiAg
ICAgICAgICMgc2VsZi5fd2Vic29ja2V0X3NlY3VyZV9zZXJ2ZXIgPSB3ZWJzb2NrZXRfc2VydmVy
LlB5V2ViU29ja2V0KApAQCAtNTY1LDM0ICs1NjgsNiBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAg
ICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIHJldHVybiBGYWxzZQogCi0gICAgZGVm
IF9pbnN0YW50aWF0ZV9kdW1wX3JlbmRlcl90cmVlX3RocmVhZHMoc2VsZiwgdGVzdF9maWxlcywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3Vt
bWFyeSk6Ci0gICAgICAgICIiIkluc3RhbnRpdGF0ZXMgYW5kIHN0YXJ0cyB0aGUgVGVzdFNoZWxs
VGhyZWFkKHMpLgotCi0gICAgICAgIFJldHVybjoKLSAgICAgICAgICBUaGUgbGlzdCBvZiB0aHJl
YWRzLgotICAgICAgICAiIiIKLSAgICAgICAgbnVtX3dvcmtlcnMgPSBzZWxmLl9udW1fd29ya2Vy
cygpCi0gICAgICAgIHRlc3RfbGlzdHMgPSBzZWxmLl9zaGFyZF90ZXN0cyh0ZXN0X2ZpbGVzLAot
ICAgICAgICAgICAgbnVtX3dvcmtlcnMgPiAxIGFuZCBub3Qgc2VsZi5fb3B0aW9ucy5leHBlcmlt
ZW50YWxfZnVsbHlfcGFyYWxsZWwpCi0gICAgICAgIGZpbGVuYW1lX3F1ZXVlID0gUXVldWUuUXVl
dWUoKQotICAgICAgICBmb3IgaXRlbSBpbiB0ZXN0X2xpc3RzOgotICAgICAgICAgICAgZmlsZW5h
bWVfcXVldWUucHV0KGl0ZW0pCi0KLSAgICAgICAgIyBJbnN0YW50aWF0ZSBUZXN0U2hlbGxUaHJl
YWRzIGFuZCBzdGFydCB0aGVtLgotICAgICAgICB0aHJlYWRzID0gW10KLSAgICAgICAgZm9yIHdv
cmtlcl9udW1iZXIgaW4geHJhbmdlKG51bV93b3JrZXJzKToKLSAgICAgICAgICAgIHRocmVhZCA9
IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLlRlc3RTaGVsbFRocmVhZChzZWxmLl9wb3J0LAotICAg
ICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMsIHdvcmtlcl9udW1iZXIsCi0gICAgICAgICAgICAg
ICAgZmlsZW5hbWVfcXVldWUsIHNlbGYuX3Jlc3VsdF9xdWV1ZSkKLSAgICAgICAgICAgIGlmIG51
bV93b3JrZXJzID4gMToKLSAgICAgICAgICAgICAgICB0aHJlYWQuc3RhcnQoKQotICAgICAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgICAgICB0aHJlYWQucnVuX2luX21haW5fdGhyZWFkKHNlbGYs
IHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICAgICAgdGhyZWFkcy5hcHBlbmQodGhyZWFkKQotCi0g
ICAgICAgIHJldHVybiB0aHJlYWRzCi0KICAgICBkZWYgX251bV93b3JrZXJzKHNlbGYpOgogICAg
ICAgICByZXR1cm4gaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKQogCkBAIC02MTAs
NTggKzU4NSw0MyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICBpbiB0aGUgZm9y
bSB7ZmlsZW5hbWU6ZmlsZW5hbWUsIHRlc3RfcnVuX3RpbWU6dGVzdF9ydW5fdGltZX0KICAgICAg
ICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCB0byBwb3B1bGF0ZSB3aXRoIHRo
ZSByZXN1bHRzCiAgICAgICAgICIiIgotICAgICAgICBwbHVyYWwgPSAiIgotICAgICAgICBpZiBz
ZWxmLl9udW1fd29ya2VycygpID4gMToKLSAgICAgICAgICAgIHBsdXJhbCA9ICJzIgotICAgICAg
ICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgJXMlcyAuLi4nICUKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX3BvcnQuZHJpdmVyX25hbWUoKSwg
cGx1cmFsKSkKLSAgICAgICAgdGhyZWFkcyA9IHNlbGYuX2luc3RhbnRpYXRlX2R1bXBfcmVuZGVy
X3RyZWVfdGhyZWFkcyhmaWxlX2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCi0gICAgICAgIHNl
bGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0aW5nIC4uLiIpCiAKLSAgICAg
ICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBzZWxmLl93YWl0X2Zvcl90aHJlYWRzX3RvX2Zpbmlz
aCh0aHJlYWRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICAodGhyZWFkX3RpbWlu
Z3MsIHRlc3RfdGltaW5ncywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpID0gXAotICAgICAgICAg
ICAgc2VsZi5fY29sbGVjdF90aW1pbmdfaW5mbyh0aHJlYWRzKQorICAgICAgICBzZWxmLl9wcmlu
dGVyLnByaW50X3VwZGF0ZSgnU2hhcmRpbmcgdGVzdHMgLi4uJykKKyAgICAgICAgbnVtX3dvcmtl
cnMgPSBzZWxmLl9udW1fd29ya2VycygpCisgICAgICAgIHRlc3RfbGlzdHMgPSBzZWxmLl9zaGFy
ZF90ZXN0cyhmaWxlX2xpc3QsCisgICAgICAgICAgICBudW1fd29ya2VycyA+IDEgYW5kIG5vdCBz
ZWxmLl9vcHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCkKKyAgICAgICAgZmlsZW5h
bWVfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgIGZvciBpdGVtIGluIHRlc3RfbGlzdHM6
CisgICAgICAgICAgICBmaWxlbmFtZV9xdWV1ZS5wdXQoaXRlbSkKIAotICAgICAgICByZXR1cm4g
KGtleWJvYXJkX2ludGVycnVwdGVkLCB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLAotICAg
ICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQorICAgICAgICBzZWxmLl9wcmlu
dGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgJXMgLi4uJyAlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdyYW1tYXIucGx1cmFsaXplKCd3b3JrZXInLCBudW1fd29ya2Vycykp
CisgICAgICAgIG1lc3NhZ2VfYnJva2VyID0gc2VsZi5fbWVzc2FnZV9icm9rZXIKKyAgICAgICAg
c2VsZi5fY3VycmVudF9maWxlbmFtZV9xdWV1ZSA9IGZpbGVuYW1lX3F1ZXVlCisgICAgICAgIHNl
bGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkgPSByZXN1bHRfc3VtbWFyeQorICAgICAgICB0aHJl
YWRzID0gbWVzc2FnZV9icm9rZXIuc3RhcnRfd29ya2VycyhzZWxmKQogCi0gICAgZGVmIF93YWl0
X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaChzZWxmLCB0aHJlYWRzLCByZXN1bHRfc3VtbWFyeSk6Cisg
ICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0aW5nIC4uLiIp
CiAgICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkID0gRmFsc2UKICAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgIyBMb29wIHRocm91Z2ggYWxsIHRoZSB0aHJlYWRzIHdhaXRpbmcgZm9yIHRoZW0g
dG8gZmluaXNoLgotICAgICAgICAgICAgc29tZV90aHJlYWRfaXNfYWxpdmUgPSBUcnVlCi0gICAg
ICAgICAgICB3aGlsZSBzb21lX3RocmVhZF9pc19hbGl2ZToKLSAgICAgICAgICAgICAgICBzb21l
X3RocmVhZF9pc19hbGl2ZSA9IEZhbHNlCi0gICAgICAgICAgICAgICAgdCA9IHRpbWUudGltZSgp
Ci0gICAgICAgICAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgotICAgICAgICAgICAgICAg
ICAgICBleGNlcHRpb25faW5mbyA9IHRocmVhZC5leGNlcHRpb25faW5mbygpCi0gICAgICAgICAg
ICAgICAgICAgIGlmIGV4Y2VwdGlvbl9pbmZvIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAg
ICAgICAgICAgIyBSZS1yYWlzZSB0aGUgdGhyZWFkJ3MgZXhjZXB0aW9uIGhlcmUgdG8gbWFrZSBp
dAotICAgICAgICAgICAgICAgICAgICAgICAgIyBjbGVhciB0aGF0IHRlc3Rpbmcgd2FzIGFib3J0
ZWQuIE90aGVyd2lzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIHRlc3RzIHRoYXQg
ZGlkIG5vdCBydW4gd291bGQgYmUgYXNzdW1lZAotICAgICAgICAgICAgICAgICAgICAgICAgIyB0
byBoYXZlIHBhc3NlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbl9p
bmZvWzBdLCBleGNlcHRpb25faW5mb1sxXSwgZXhjZXB0aW9uX2luZm9bMl0KLQotICAgICAgICAg
ICAgICAgICAgICBpZiB0aHJlYWQuaXNBbGl2ZSgpOgotICAgICAgICAgICAgICAgICAgICAgICAg
c29tZV90aHJlYWRfaXNfYWxpdmUgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXh0
X3RpbWVvdXQgPSB0aHJlYWQubmV4dF90aW1lb3V0KCkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChuZXh0X3RpbWVvdXQgYW5kIHQgPiBuZXh0X3RpbWVvdXQpOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1lc3NhZ2VfYnJva2VyLmxvZ193ZWRnZWRfdGhyZWFkKHRocmVhZC5pZCgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZC5jbGVhcl9uZXh0X3RpbWVvdXQo
KQotCi0gICAgICAgICAgICAgICAgc2VsZi51cGRhdGVfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkK
LQotICAgICAgICAgICAgICAgIGlmIHNvbWVfdGhyZWFkX2lzX2FsaXZlOgotICAgICAgICAgICAg
ICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCi0KKyAgICAgICAgICAgIG1lc3NhZ2VfYnJva2VyLnJ1
bl9tZXNzYWdlX2xvb3AoKQogICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAg
ICAgICAgICBfbG9nLmluZm8oIkludGVycnVwdGVkLCBleGl0aW5nIikKKyAgICAgICAgICAgIG1l
c3NhZ2VfYnJva2VyLmNhbmNlbF93b3JrZXJzKCkKICAgICAgICAgICAgIGtleWJvYXJkX2ludGVy
cnVwdGVkID0gVHJ1ZQotICAgICAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgotICAgICAg
ICAgICAgICAgIHRocmVhZC5jYW5jZWwoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAj
IFVuZXhwZWN0ZWQgZXhjZXB0aW9uOyBkb24ndCB0cnkgdG8gY2xlYW4gdXAgd29ya2Vycy4KKyAg
ICAgICAgICAgIF9sb2cuaW5mbygiRXhjZXB0aW9uIHJhaXNlZCwgZXhpdGluZyIpCisgICAgICAg
ICAgICByYWlzZQogCi0gICAgICAgIHJldHVybiBrZXlib2FyZF9pbnRlcnJ1cHRlZAorICAgICAg
ICB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyA9
IFwKKyAgICAgICAgICAgIHNlbGYuX2NvbGxlY3RfdGltaW5nX2luZm8odGhyZWFkcykKKworICAg
ICAgICByZXR1cm4gKGtleWJvYXJkX2ludGVycnVwdGVkLCB0aHJlYWRfdGltaW5ncywgdGVzdF90
aW1pbmdzLAorICAgICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQorCisgICAg
ZGVmIHVwZGF0ZShzZWxmKToKKyAgICAgICAgc2VsZi51cGRhdGVfc3VtbWFyeShzZWxmLl9jdXJy
ZW50X3Jlc3VsdF9zdW1tYXJ5KQogCiAgICAgZGVmIF9jb2xsZWN0X3RpbWluZ19pbmZvKHNlbGYs
IHRocmVhZHMpOgogICAgICAgICB0ZXN0X3RpbWluZ3MgPSB7fQpAQCAtMTMyNiwxMSArMTI4Niwx
MyBAQCBkZWYgcnVuKHBvcnQsIG9wdGlvbnMsIGFyZ3MsIHJlZ3VsYXJfb3V0cHV0PXN5cy5zdGRl
cnIsCiAgICAgICAgIHByaW50ZXIuY2xlYW51cCgpCiAgICAgICAgIHJldHVybiAwCiAKKyAgICBi
cm9rZXIgPSBtZXNzYWdlX2Jyb2tlci5nZXQocG9ydCwgb3B0aW9ucykKKwogICAgICMgV2Ugd3Jh
cCBhbnkgcGFydHMgb2YgdGhlIHJ1biB0aGF0IGFyZSBzbG93IG9yIGxpa2VseSB0byByYWlzZSBl
eGNlcHRpb25zCiAgICAgIyBpbiBhIHRyeS9maW5hbGx5IHRvIGVuc3VyZSB0aGF0IHdlIGNsZWFu
IHVwIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uCiAgICAgbnVtX3VuZXhwZWN0ZWRfcmVzdWx0
cyA9IC0xCiAgICAgdHJ5OgotICAgICAgICB0ZXN0X3J1bm5lciA9IFRlc3RSdW5uZXIocG9ydCwg
b3B0aW9ucywgcHJpbnRlcikKKyAgICAgICAgdGVzdF9ydW5uZXIgPSBUZXN0UnVubmVyKHBvcnQs
IG9wdGlvbnMsIHByaW50ZXIsIGJyb2tlcikKICAgICAgICAgdGVzdF9ydW5uZXIuX3ByaW50X2Nv
bmZpZygpCiAKICAgICAgICAgcHJpbnRlci5wcmludF91cGRhdGUoIkNvbGxlY3RpbmcgdGVzdHMg
Li4uIikKQEAgLTEzNTksNiArMTMyMSw3IEBAIGRlZiBydW4ocG9ydCwgb3B0aW9ucywgYXJncywg
cmVndWxhcl9vdXRwdXQ9c3lzLnN0ZGVyciwKICAgICAgICAgICAgIF9sb2cuZGVidWcoIlRlc3Rp
bmcgY29tcGxldGVkLCBFeGl0IHN0YXR1czogJWQiICUKICAgICAgICAgICAgICAgICAgICAgICAg
bnVtX3VuZXhwZWN0ZWRfcmVzdWx0cykKICAgICBmaW5hbGx5OgorICAgICAgICBicm9rZXIuY2xl
YW51cCgpCiAgICAgICAgIHByaW50ZXIuY2xlYW51cCgpCiAKICAgICByZXR1cm4gbnVtX3VuZXhw
ZWN0ZWRfcmVzdWx0cwpAQCAtMTU5NSw5ICsxNTU4LDggQEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1O
b25lKToKICAgICAgICAgICAgIGhlbHA9Ik51bWJlciBvZiBEdW1wUmVuZGVyVHJlZXMgdG8gcnVu
IGluIHBhcmFsbGVsLiIpLAogICAgICAgICAjIEZJWE1FOiBEaXNwbGF5IGRlZmF1bHQgbnVtYmVy
IG9mIGNoaWxkIHByb2Nlc3NlcyB0aGF0IHdpbGwgcnVuLgogICAgICAgICBvcHRwYXJzZS5tYWtl
X29wdGlvbigiLS13b3JrZXItbW9kZWwiLCBhY3Rpb249InN0b3JlIiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdD0idGhyZWFkcyIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9ImNvbnRyb2xzIHdvcmtlciBtb2RlbC4gVmFsaWQgdmFsdWVzIGFyZSAiCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICInaW5saW5lJyBhbmQgJ3RocmVhZHMnIChkZWZh
dWx0KS4iKSwKKyAgICAgICAgICAgIGRlZmF1bHQ9InRocmVhZHMiLCBoZWxwPSgiY29udHJvbHMg
d29ya2VyIG1vZGVsLiBWYWxpZCB2YWx1ZXMgYXJlICIKKyAgICAgICAgICAgICInaW5saW5lJyBh
bmQgJ3RocmVhZHMnIChkZWZhdWx0KS4iKSksCiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9u
KCItLWV4cGVyaW1lbnRhbC1mdWxseS1wYXJhbGxlbCIsCiAgICAgICAgICAgICBhY3Rpb249InN0
b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAogICAgICAgICAgICAgaGVscD0icnVuIGFsbCB0ZXN0
cyBpbiBwYXJhbGxlbCIpLApAQCAtMTY1MywxMyArMTYxNSw3IEBAIGRlZiBwYXJzZV9hcmdzKGFy
Z3M9Tm9uZSk6CiAgICAgICAgICAgICAgICAgICAgb2xkX3J1bl93ZWJraXRfdGVzdHNfY29tcGF0
KQogICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9
b3B0aW9uX2xpc3QpCiAKLSAgICBvcHRpb25zLCBhcmdzID0gb3B0aW9uX3BhcnNlci5wYXJzZV9h
cmdzKGFyZ3MpCi0KLSAgICBpZiBvcHRpb25zLndvcmtlcl9tb2RlbCBub3QgaW4gKCdpbmxpbmUn
LCAndGhyZWFkcycpOgotICAgICAgICBvcHRpb25fcGFyc2VyLmVycm9yKCJ1bnN1cHBvcnRlZCB2
YWx1ZSBmb3IgLS13b3JrZXItbW9kZWw6ICVzIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3B0aW9ucy53b3JrZXJfbW9kZWwpCi0KLSAgICByZXR1cm4gb3B0aW9ucywgYXJncworICAg
IHJldHVybiBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKIAogCiBkZWYgbWFpbigpOgpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVu
X3dlYmtpdF90ZXN0c191bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKaW5kZXggMDlhMGM3MTkz
M2EwNGM4NDA1NzUzOGNlODg5Y2I5MGEzN2U3MzE4NC4uMDFjNjVjYTkyNWI5NWI4NGQzMzFlNzIw
MGIzZDM0ZTI4NmE2ZWU3OCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQorKysgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0
ZXN0LnB5CkBAIC04Miw2ICs4Miw4IEBAIGRlZiBwYXNzaW5nX3J1bihleHRyYV9hcmdzPU5vbmUs
IHBvcnRfb2JqPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNlLAogICAgICAgICAgICAgICAgICAg
ICAgJ3dlYnNvY2tldC90ZXN0cycsCiAgICAgICAgICAgICAgICAgICAgICAnZmFpbHVyZXMvZXhw
ZWN0ZWQvKiddKQogICAgIG9wdGlvbnMsIHBhcnNlZF9hcmdzID0gcnVuX3dlYmtpdF90ZXN0cy5w
YXJzZV9hcmdzKGFyZ3MpCisgICAgaWYgbm90ICctLWNoaWxkLXByb2Nlc3NlcycgaW4gZXh0cmFf
YXJnczoKKyAgICAgICAgYXJncy5leHRlbmQoWyctLXdvcmtlci1tb2RlbCcsICdpbmxpbmUnXSkK
ICAgICBpZiBub3QgcG9ydF9vYmo6CiAgICAgICAgIHBvcnRfb2JqID0gcG9ydC5nZXQocG9ydF9u
YW1lPW9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnM9b3B0aW9ucywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1c2VyPU1vY2tVc2VyKCkpCkBAIC0xMDMsOCArMTA1LDggQEAgZGVmIGxvZ2dp
bmdfcnVuKGV4dHJhX2FyZ3M9Tm9uZSwgcG9ydF9vYmo9Tm9uZSwgdGVzdHNfaW5jbHVkZWQ9RmFs
c2UpOgogICAgICAgICAgICAgICAgICAgICAgJ3dlYnNvY2tldC90ZXN0cycsCiAgICAgICAgICAg
ICAgICAgICAgICAnZmFpbHVyZXMvZXhwZWN0ZWQvKiddKQogCisgICAgb2MgPSBvdXRwdXRjYXB0
dXJlLk91dHB1dENhcHR1cmUoKQogICAgIHRyeToKLSAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJl
Lk91dHB1dENhcHR1cmUoKQogICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCiAgICAgICAgIG9w
dGlvbnMsIHBhcnNlZF9hcmdzID0gcnVuX3dlYmtpdF90ZXN0cy5wYXJzZV9hcmdzKGFyZ3MpCiAg
ICAgICAgIHVzZXIgPSBNb2NrVXNlcigpCkBAIC0yMjYsNyArMjI4LDcgQEAgY2xhc3MgTWFpblRl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2tleWJvYXJkX2ludGVycnVwdChz
ZWxmKToKICAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyBhbHNvIHRlc3RzIHJ1bm5pbmcgYSB0ZXN0
IG1hcmtlZCBhcyBTS0lQIGlmCiAgICAgICAgICMgeW91IHNwZWNpZnkgaXQgZXhwbGljaXRseS4K
LSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5Ym9hcmRJbnRlcnJ1cHQsIHBhc3NpbmdfcnVu
LAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlib2FyZEludGVycnVwdCwgbG9nZ2luZ19y
dW4sCiAgICAgICAgICAgICBbJ2ZhaWx1cmVzL2V4cGVjdGVkL2tleWJvYXJkLmh0bWwnXSwgdGVz
dHNfaW5jbHVkZWQ9VHJ1ZSkKIAogICAgIGRlZiB0ZXN0X2xhc3RfcmVzdWx0cyhzZWxmKToKQEAg
LTM3OCwxMSArMzgwLDExIEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS13b3JrZXItbW9kZWwnLCAndGhy
ZWFkcyddKSkKIAogICAgIGRlZiB0ZXN0X3dvcmtlcl9tb2RlbF9fcHJvY2Vzc2VzKHNlbGYpOgot
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBsb2dnaW5nX3J1biwKKyAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9nZ2luZ19ydW4sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFsnLS13b3JrZXItbW9kZWwnLCAncHJvY2Vzc2VzJ10pCiAKICAgICBk
ZWYgdGVzdF93b3JrZXJfbW9kZWxfX3Vua25vd24oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0
UmFpc2VzKFN5c3RlbUV4aXQsIGxvZ2dpbmdfcnVuLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNl
cyhWYWx1ZUVycm9yLCBsb2dnaW5nX3J1biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgWyct
LXdvcmtlci1tb2RlbCcsICd1bmtub3duJ10pCiAKIE1haW5UZXN0ID0gc2tpcF9pZihNYWluVGVz
dCwgc3lzLnBsYXRmb3JtID09ICdjeWd3aW4nIGFuZCBjb21wYXJlX3ZlcnNpb24oc3lzLCAnMi42
JylbMF0gPCAwLCAnbmV3LXJ1bi13ZWJraXQtdGVzdHMgdGVzdHMgaGFuZyBvbiBDeWd3aW4gUHl0
aG9uIDIuNS4yJykKQEAgLTQ2Niw3ICs0NjgsOCBAQCBjbGFzcyBUZXN0UnVubmVyVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIG1vY2tfcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1l
ID0gbGFtYmRhIG5hbWU6IG5hbWUKICAgICAgICAgbW9ja19wb3J0LmZpbGVuYW1lX3RvX3VyaSA9
IGxhbWJkYSBuYW1lOiBuYW1lCiAKLSAgICAgICAgcnVubmVyID0gcnVuX3dlYmtpdF90ZXN0cy5U
ZXN0UnVubmVyKHBvcnQ9bW9ja19wb3J0LCBvcHRpb25zPU1vY2soKSwgcHJpbnRlcj1Nb2NrKCkp
CisgICAgICAgIHJ1bm5lciA9IHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lcihwb3J0PW1vY2tf
cG9ydCwgb3B0aW9ucz1Nb2NrKCksCisgICAgICAgICAgIHByaW50ZXI9TW9jaygpLCBtZXNzYWdl
X2Jyb2tlcj1Nb2NrKCkpCiAgICAgICAgIGV4cGVjdGVkX2h0bWwgPSB1IiIiPGh0bWw+CiAgIDxo
ZWFkPgogICAgIDx0aXRsZT5MYXlvdXQgVGVzdCBSZXN1bHRzICh0aW1lKTwvdGl0bGU+CkBAIC00
ODMsNyArNDg2LDkgQEAgY2xhc3MgVGVzdFJ1bm5lclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgog
ICAgIGRlZiB0ZXN0X3NoYXJkX3Rlc3RzKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBfc2hh
cmRfdGVzdHMgaW4gcnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVubmVyIHJlYWxseQogICAgICAgICAj
IHB1dCB0aGUgaHR0cCB0ZXN0cyBmaXJzdCBpbiB0aGUgcXVldWUuCi0gICAgICAgIHJ1bm5lciA9
IFRlc3RSdW5uZXJXcmFwcGVyKHBvcnQ9TW9jaygpLCBvcHRpb25zPU1vY2soKSwgcHJpbnRlcj1N
b2NrKCkpCisgICAgICAgIHJ1bm5lciA9IFRlc3RSdW5uZXJXcmFwcGVyKHBvcnQ9TW9jaygpLCBv
cHRpb25zPU1vY2soKSwKKyAgICAgICAgICAgIHByaW50ZXI9TW9jaygpLCBtZXNzYWdlX2Jyb2tl
cj1Nb2NrKCkpCisgICAgICAgIHJ1bm5lci5fb3B0aW9ucy5leHBlcmltZW50YWxfZnVsbHlfcGFy
YWxsZWwgPSBGYWxzZQogCiAgICAgICAgIHRlc3RfbGlzdCA9IFsKICAgICAgICAgICAiTGF5b3V0
VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VuaWNvZGUuaHRtIiwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74716</attachid>
            <date>2010-11-23 18:36:44 -0800</date>
            <delta_ts>2010-11-24 13:57:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49779-20101123183643.patch</filename>
            <type>text/plain</type>
            <size>24987</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA2YTU2Zjc5M2I4MzE4YWRiZjZiZjFkNmIyN2E5ZGQ3YzAzY2UwMTAzLi4wMzdmZTBm
YWEwZTkzM2I5ZDk5YzAxYThiMWYyOTA0NDVmMWFkN2QwIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTAtMTEtMTggIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBs
ZW1lbnRzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBtYW5hZ2VyIHNpZGUgb2YgdGhlCisgICAgICAg
IEJyb2tlciBvYmplY3RzIC0gaXQgaGFuZGxlcyBjcmVhdGluZyB0aHJlYWRzLCB3YWl0aW5nIGZv
ciB0aGVtCisgICAgICAgIHRvIGNvbXBsZXRlLCBhbmQgcnVubmluZyBhIHNpbmdsZS10aHJlYWRl
ZCBsb29wIGFzIHdlbGwuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ5Nzc5CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcl91bml0dGVz
dC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0
X3Rlc3RzLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6CisKIDIwMTAtMTEtMjMgIERpcmsgUHJhbmtlICA8ZHBy
YW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90
aHJlYWQucHkKaW5kZXggMWJhYzdlZjE4ZTNlMmVhN2E2ZGNmNWZhMzc0MDI2NzhlN2FlMmEyYi4u
MzhjZjZjMzUyMzc3YjM5NmMwYzk1OTFlN2E1YjViOTc0NWQ3YTg3YSAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVt
cF9yZW5kZXJfdHJlZV90aHJlYWQucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkK
QEAgLTI0NCw3ICsyNDQsNyBAQCBjbGFzcyBXYXRjaGFibGVUaHJlYWQodGhyZWFkaW5nLlRocmVh
ZCk6CiAKIAogY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6Ci0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHdvcmtlcl9udW1iZXIsCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHdvcmtlcl9udW1iZXIsIHdvcmtlcl9uYW1lLAog
ICAgICAgICAgICAgICAgICBmaWxlbmFtZV9saXN0X3F1ZXVlLCByZXN1bHRfcXVldWUpOgogICAg
ICAgICAiIiJJbml0aWFsaXplIGFsbCB0aGUgbG9jYWwgc3RhdGUgZm9yIHRoaXMgRHVtcFJlbmRl
clRyZWUgdGhyZWFkLgogCkBAIC0yNTIsNiArMjUyLDcgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFk
KFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgICAgcG9ydDogaW50ZXJmYWNlIHRvIHBvcnQtc3Bl
Y2lmaWMgaG9va3MKICAgICAgICAgICBvcHRpb25zOiBjb21tYW5kIGxpbmUgb3B0aW9ucyBhcmd1
bWVudCBmcm9tIG9wdHBhcnNlCiAgICAgICAgICAgd29ya2VyX251bWJlcjogaWRlbnRpZmllciBm
b3IgYSBwYXJ0aWN1bGFyIHdvcmtlciB0aHJlYWQuCisgICAgICAgICAgd29ya2VyX25hbWU6IGZv
ciBsb2dnaW5nLgogICAgICAgICAgIGZpbGVuYW1lX2xpc3RfcXVldWU6IEEgdGhyZWFkIHNhZmUg
UXVldWUgY2xhc3MgdGhhdCBjb250YWlucyBsaXN0cwogICAgICAgICAgICAgICBvZiB0dXBsZXMg
b2YgKGZpbGVuYW1lLCB1cmkpIHBhaXJzLgogICAgICAgICAgIHJlc3VsdF9xdWV1ZTogQSB0aHJl
YWQgc2FmZSBRdWV1ZSBjbGFzcyB0aGF0IHdpbGwgY29udGFpbgpAQCAtMjYxLDcgKzI2Miw3IEBA
IGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgogICAgICAgICBzZWxmLl9w
b3J0ID0gcG9ydAogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwogICAgICAgICBzZWxm
Ll93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgotICAgICAgICBzZWxmLl9uYW1lID0gJ3dv
cmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX25hbWUgPSB3b3JrZXJfbmFt
ZQogICAgICAgICBzZWxmLl9maWxlbmFtZV9saXN0X3F1ZXVlID0gZmlsZW5hbWVfbGlzdF9xdWV1
ZQogICAgICAgICBzZWxmLl9yZXN1bHRfcXVldWUgPSByZXN1bHRfcXVldWUKICAgICAgICAgc2Vs
Zi5fZmlsZW5hbWVfbGlzdCA9IFtdCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlci5weSBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21l
c3NhZ2VfYnJva2VyLnB5CmluZGV4IDEzOTUxYzAyZWYzZDE3MmEzOWU3MzY5Y2ViMjE5N2YxY2Jj
YjliOTguLmU1MjBhOWNhYTZiNzY4MmViZmRkMmE5OGJiMjE3ZWI4NWQ3MjUxYmMgMTAwNjQ0Ci0t
LSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL21lc3NhZ2VfYnJva2VyLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5CkBAIC0yOCwyNSAr
MjgsMTU0IEBACiAKICIiIk1vZHVsZSBmb3IgaGFuZGxpbmcgbWVzc2FnZXMsIHRocmVhZHMsIHBy
b2Nlc3NlcywgYW5kIGNvbmN1cnJlbmN5IGZvciBydW4td2Via2l0LXRlc3RzLgogCi1UaGUgbW9k
ZWwgd2UgdXNlIGlzIHRoYXQgb2YgYSBtZXNzYWdlIGJyb2tlciAtIGl0IHByb3ZpZGVzIGEgbWVz
c2FnaW5nCi1hYnN0cmFjdGlvbiBhbmQgbWVzc2FnZSBsb29wcywgYW5kIGhhbmRsZXMgbGF1bmNo
aW5nIHRocmVhZHMgYW5kL29yIHByb2Nlc3NlcwotZGVwZW5kaW5nIG9uIHRoZSByZXF1ZXN0ZWQg
Y29uZmlndXJhdGlvbi4KK1Rlc3RpbmcgaXMgYWNjb21wbGlzaGVkIGJ5IGhhdmluZyBhIG1hbmFn
ZXIgKFRlc3RSdW5uZXIpIGdhdGhlciBhbGwgb2YgdGhlCit0ZXN0cyB0byBiZSBydW4sIGFuZCBz
ZW5kaW5nIG1lc3NhZ2VzIHRvIGEgcG9vbCBvZiB3b3JrZXJzIChUZXN0U2hlbGxUaHJlYWRzKQor
dG8gcnVuIGVhY2ggdGVzdC4gRWFjaCB3b3JrZXIgY29tbXVuaWNhdGVzIHdpdGggb25lIGRyaXZl
ciAodXN1YWxseQorRHVtcFJlbmRlclRyZWUpIHRvIHJ1biBvbmUgdGVzdCBhdCBhIHRpbWUgYW5k
IHRoZW4gY29tcGFyZSB0aGUgb3V0cHV0IGFnYWluc3QKK3doYXQgd2UgZXhwZWN0ZWQgdG8gZ2V0
LgorCitUaGlzIG1vZHVsZXMgcHJvdmlkZXMgYSBtZXNzYWdlIGJyb2tlciB0aGF0IGNvbm5lY3Rz
IHRoZSBtYW5hZ2VyIHRvIHRoZQord29ya2VyczogaXQgcHJvdmlkZXMgYSBtZXNzYWdpbmcgYWJz
dHJhY3Rpb24gYW5kIG1lc3NhZ2UgbG9vcHMsIGFuZAoraGFuZGxlcyBsYXVuY2hpbmcgdGhyZWFk
cyBhbmQvb3IgcHJvY2Vzc2VzIGRlcGVuZGluZyBvbiB0aGUKK3JlcXVlc3RlZCBjb25maWd1cmF0
aW9uLgogIiIiCiAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3lzCitpbXBvcnQgdGltZQogaW1w
b3J0IHRyYWNlYmFjawogCitpbXBvcnQgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQKIAogX2xvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAKLWRlZiBsb2dfd2VkZ2VkX3RocmVhZChp
ZCk6Ci0gICAgIiIiTG9nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBnaXZlbiB0aHJlYWQgc3RhdGUu
IiIiCitkZWYgZ2V0KHBvcnQsIG9wdGlvbnMpOgorICAgICIiIlJldHVybiBhbiBpbnN0YW5jZSBv
ZiBhIFdvcmtlck1lc3NhZ2VCcm9rZXIuIiIiCisgICAgd29ya2VyX21vZGVsID0gb3B0aW9ucy53
b3JrZXJfbW9kZWwKKyAgICBpZiB3b3JrZXJfbW9kZWwgPT0gJ2lubGluZSc6CisgICAgICAgIHJl
dHVybiBJbmxpbmVCcm9rZXIocG9ydCwgb3B0aW9ucykKKyAgICBpZiB3b3JrZXJfbW9kZWwgPT0g
J3RocmVhZHMnOgorICAgICAgICByZXR1cm4gTXVsdGlUaHJlYWRlZEJyb2tlcihwb3J0LCBvcHRp
b25zKQorICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3Vuc3VwcG9ydGVkIHZhbHVlIGZvciAtLXdvcmtl
ci1tb2RlbDogJXMnICUgd29ya2VyX21vZGVsKQorCisKK2NsYXNzIF9Xb3JrZXJTdGF0ZShvYmpl
Y3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5uYW1lID0g
bmFtZQorICAgICAgICBzZWxmLnRocmVhZCA9IE5vbmUKKworCitjbGFzcyBXb3JrZXJNZXNzYWdl
QnJva2VyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMpOgor
ICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9u
cworICAgICAgICBzZWxmLl9udW1fd29ya2VycyA9IGludChzZWxmLl9vcHRpb25zLmNoaWxkX3By
b2Nlc3NlcykKKworICAgICAgICAjIFRoaXMgbWFwcyB3b3JrZXIgbmFtZXMgdG8gdGhlaXIgX1dv
cmtlclN0YXRlIHZhbHVlcy4KKyAgICAgICAgc2VsZi5fd29ya2VycyA9IHt9CisKKyAgICBkZWYg
X3RocmVhZHMoc2VsZik6CisgICAgICAgIHJldHVybiB0dXBsZShbdy50aHJlYWQgZm9yIHcgaW4g
c2VsZi5fd29ya2Vycy52YWx1ZXMoKV0pCisKKyAgICBkZWYgc3RhcnRfd29ya2VycyhzZWxmLCB0
ZXN0X3J1bm5lcik6CisgICAgICAgICIiIlN0YXJ0cyB1cCB0aGUgcG9vbCBvZiB3b3JrZXJzIGZv
ciBydW5uaW5nIHRoZSB0ZXN0cy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgdGVzdF9y
dW5uZXI6IGEgaGFuZGxlIHRvIHRoZSBtYW5hZ2VyL1Rlc3RSdW5uZXIgb2JqZWN0CisgICAgICAg
ICIiIgorICAgICAgICBzZWxmLl90ZXN0X3J1bm5lciA9IHRlc3RfcnVubmVyCisgICAgICAgIGZv
ciB3b3JrZXJfbnVtYmVyIGluIHhyYW5nZShzZWxmLl9udW1fd29ya2Vycyk6CisgICAgICAgICAg
ICB3b3JrZXIgPSBfV29ya2VyU3RhdGUoJ3dvcmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyKQorICAg
ICAgICAgICAgd29ya2VyLnRocmVhZCA9IHNlbGYuX3N0YXJ0X3dvcmtlcih3b3JrZXJfbnVtYmVy
LCB3b3JrZXIubmFtZSkKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcnNbd29ya2VyLm5hbWVdID0g
d29ya2VyCisgICAgICAgIHJldHVybiBzZWxmLl90aHJlYWRzKCkKKworICAgIGRlZiBfc3RhcnRf
d29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIsIHdvcmtlcl9uYW1lKToKKyAgICAgICAgcmFpc2Ug
Tm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZik6Cisg
ICAgICAgICIiIkxvb3AgcHJvY2Vzc2luZyBtZXNzYWdlcyB1bnRpbCBkb25lLiIiIgorICAgICAg
ICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY2FuY2VsX3dvcmtlcnMoc2Vs
Zik6CisgICAgICAgICIiIkNhbmNlbC9pbnRlcnJ1cHQgYW55IHdvcmtlcnMgdGhhdCBhcmUgc3Rp
bGwgYWxpdmUuIiIiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAg
ICAgICAiIiJQZXJmb3JtIGFueSBuZWNlc3NhcnkgY2xlYW51cCBvbiBzaHV0ZG93bi4iIiIKKyAg
ICAgICAgcGFzcworCisKK2NsYXNzIElubGluZUJyb2tlcihXb3JrZXJNZXNzYWdlQnJva2VyKToK
KyAgICBkZWYgX3N0YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfbnVtYmVyLCB3b3JrZXJfbmFtZSk6
CisgICAgICAgICMgRklYTUU6IFJlcGxhY2Ugd2l0aCBzb21ldGhpbmcgdGhhdCBpc24ndCBhIHRo
cmVhZC4KKyAgICAgICAgdGhyZWFkID0gZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuVGVzdFNoZWxs
VGhyZWFkKHNlbGYuX3BvcnQsCisgICAgICAgICAgICBzZWxmLl9vcHRpb25zLCB3b3JrZXJfbnVt
YmVyLCB3b3JrZXJfbmFtZSwKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyLl9jdXJyZW50
X2ZpbGVuYW1lX3F1ZXVlLAorICAgICAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXIuX3Jlc3VsdF9x
dWV1ZSkKKyAgICAgICAgIyBOb3RlOiBEb24ndCBzdGFydCgpIHRoZSB0aHJlYWQhIElmIHdlIGRp
ZCwgaXQgd291bGQgYWN0dWFsbHkKKyAgICAgICAgIyBjcmVhdGUgYW5vdGhlciB0aHJlYWQgYW5k
IHN0YXJ0IGV4ZWN1dGluZyBpdCwgYW5kIHdlJ2Qgbm8gbG9uZ2VyCisgICAgICAgICMgYmUgc2lu
Z2xlLXRocmVhZGVkLgorICAgICAgICByZXR1cm4gdGhyZWFkCisKKyAgICBkZWYgcnVuX21lc3Nh
Z2VfbG9vcChzZWxmKToKKyAgICAgICAgdGhyZWFkID0gc2VsZi5fdGhyZWFkcygpWzBdCisgICAg
ICAgIHRocmVhZC5ydW5faW5fbWFpbl90aHJlYWQoc2VsZi5fdGVzdF9ydW5uZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXIuX2N1cnJlbnRfcmVz
dWx0X3N1bW1hcnkpCisgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyLnVwZGF0ZSgpCisKKworY2xh
c3MgTXVsdGlUaHJlYWRlZEJyb2tlcihXb3JrZXJNZXNzYWdlQnJva2VyKToKKyAgICBkZWYgX3N0
YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfbnVtYmVyLCB3b3JrZXJfbmFtZSk6CisgICAgICAgIHRo
cmVhZCA9IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLlRlc3RTaGVsbFRocmVhZChzZWxmLl9wb3J0
LAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucywgd29ya2VyX251bWJlciwgd29ya2VyX25hbWUs
CisgICAgICAgICAgICBzZWxmLl90ZXN0X3J1bm5lci5fY3VycmVudF9maWxlbmFtZV9xdWV1ZSwK
KyAgICAgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyLl9yZXN1bHRfcXVldWUpCisgICAgICAgIHRo
cmVhZC5zdGFydCgpCisgICAgICAgIHJldHVybiB0aHJlYWQKKworICAgIGRlZiBydW5fbWVzc2Fn
ZV9sb29wKHNlbGYpOgorICAgICAgICB0aHJlYWRzID0gc2VsZi5fdGhyZWFkcygpCisKKyAgICAg
ICAgIyBMb29wIHRocm91Z2ggYWxsIHRoZSB0aHJlYWRzIHdhaXRpbmcgZm9yIHRoZW0gdG8gZmlu
aXNoLgorICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IFRydWUKKyAgICAgICAgd2hpbGUg
c29tZV90aHJlYWRfaXNfYWxpdmU6CisgICAgICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9
IEZhbHNlCisgICAgICAgICAgICB0ID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIGZvciB0aHJl
YWQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgICAgICBleGNlcHRpb25faW5mbyA9IHRocmVhZC5l
eGNlcHRpb25faW5mbygpCisgICAgICAgICAgICAgICAgaWYgZXhjZXB0aW9uX2luZm8gaXMgbm90
IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICMgUmUtcmFpc2UgdGhlIHRocmVhZCdzIGV4Y2Vw
dGlvbiBoZXJlIHRvIG1ha2UgaXQKKyAgICAgICAgICAgICAgICAgICAgIyBjbGVhciB0aGF0IHRl
c3Rpbmcgd2FzIGFib3J0ZWQuIE90aGVyd2lzZSwKKyAgICAgICAgICAgICAgICAgICAgIyB0aGUg
dGVzdHMgdGhhdCBkaWQgbm90IHJ1biB3b3VsZCBiZSBhc3N1bWVkCisgICAgICAgICAgICAgICAg
ICAgICMgdG8gaGF2ZSBwYXNzZWQuCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlv
bl9pbmZvWzBdLCBleGNlcHRpb25faW5mb1sxXSwgZXhjZXB0aW9uX2luZm9bMl0KKworICAgICAg
ICAgICAgICAgIGlmIHRocmVhZC5pc0FsaXZlKCk6CisgICAgICAgICAgICAgICAgICAgIHNvbWVf
dGhyZWFkX2lzX2FsaXZlID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBuZXh0X3RpbWVvdXQg
PSB0aHJlYWQubmV4dF90aW1lb3V0KCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbmV4dF90aW1l
b3V0IGFuZCB0ID4gbmV4dF90aW1lb3V0OgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nX3dl
ZGdlZF93b3JrZXIodGhyZWFkLmdldE5hbWUoKSwgdGhyZWFkLmlkKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICB0aHJlYWQuY2xlYXJfbmV4dF90aW1lb3V0KCkKKworICAgICAgICAgICAgc2Vs
Zi5fdGVzdF9ydW5uZXIudXBkYXRlKCkKKworICAgICAgICAgICAgaWYgc29tZV90aHJlYWRfaXNf
YWxpdmU6CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorCisgICAgZGVmIGNhbmNl
bF93b3JrZXJzKHNlbGYpOgorICAgICAgICB0aHJlYWRzID0gc2VsZi5fdGhyZWFkcygpCisgICAg
ICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgIHRocmVhZC5jYW5jZWwoKQor
CisKK2RlZiBsb2dfd2VkZ2VkX3dvcmtlcihuYW1lLCBpZCk6CisgICAgIiIiTG9nIGluZm9ybWF0
aW9uIGFib3V0IHRoZSBnaXZlbiB3b3JrZXIgc3RhdGUuIiIiCiAgICAgc3RhY2sgPSBfZmluZF90
aHJlYWRfc3RhY2soaWQpCiAgICAgYXNzZXJ0KHN0YWNrIGlzIG5vdCBOb25lKQogICAgIF9sb2cu
ZXJyb3IoIiIpCi0gICAgX2xvZy5lcnJvcigiVGhyZWFkICVkIGlzIHdlZGdlZCIgJSBpZCkKKyAg
ICBfbG9nLmVycm9yKCIlcyAodGlkICVkKSBpcyB3ZWRnZWQiICUgKG5hbWUsIGlkKSkKICAgICBf
bG9nX3N0YWNrKHN0YWNrKQogICAgIF9sb2cuZXJyb3IoIiIpCiAKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3Nh
Z2VfYnJva2VyX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5pdHRlc3QucHkKaW5kZXgg
ZDcwODc0NTViM2NjNTBlODJjN2MzMThjYjM4N2EyZGI5OGYyMTAxNy4uNmYwNGZkMzU1MThhMDRl
YmQ2OTE5ZmY4YTk3NjEzY2Y0YzViZTFmNCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5p
dHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5pdHRlc3QucHkKQEAgLTMwLDI1ICszMCwz
NCBAQCBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IFF1ZXVlCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGhy
ZWFkCitpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiAKIGZy
b20gd2Via2l0cHkuY29tbW9uIGltcG9ydCBhcnJheV9zdHJlYW0KIGZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbSBpbXBvcnQgb3V0cHV0Y2FwdHVyZQorZnJvbSB3ZWJraXRweS50b29sIGltcG9y
dCBtb2NrdG9vbAogCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcnVuX3dlYmtp
dF90ZXN0cwogCi1pbXBvcnQgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQKIGltcG9ydCBtZXNzYWdl
X2Jyb2tlcgogCiAKLWNsYXNzIFRlc3RUaHJlYWQoZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuV2F0
Y2hhYmxlVGhyZWFkKToKK2NsYXNzIFRlc3RUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0ZWRfcXVldWUsIHN0b3BwaW5nX3F1ZXVlKToKLSAgICAg
ICAgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuV2F0Y2hhYmxlVGhyZWFkLl9faW5pdF9fKHNlbGYp
CisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5f
dGhyZWFkX2lkID0gTm9uZQogICAgICAgICBzZWxmLl9zdGFydGVkX3F1ZXVlID0gc3RhcnRlZF9x
dWV1ZQogICAgICAgICBzZWxmLl9zdG9wcGluZ19xdWV1ZSA9IHN0b3BwaW5nX3F1ZXVlCiAgICAg
ICAgIHNlbGYuX3RpbWVvdXQgPSBGYWxzZQogICAgICAgICBzZWxmLl90aW1lb3V0X3F1ZXVlID0g
UXVldWUuUXVldWUoKQorICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IE5vbmUKKworICAg
IGRlZiBpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RocmVhZF9pZAorCisgICAgZGVm
IGdldE5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAid29ya2VyLTAiCiAKICAgICBkZWYgcnVu
KHNlbGYpOgogICAgICAgICBzZWxmLl9jb3ZlcmVkX3J1bigpCkBAIC03MCwxMiArNzksMTcgQEAg
Y2xhc3MgVGVzdFRocmVhZChkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5XYXRjaGFibGVUaHJlYWQp
OgogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IHN5
cy5leGNfaW5mbygpCiAKKyAgICBkZWYgZXhjZXB0aW9uX2luZm8oc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLl9leGNlcHRpb25faW5mbworCiAgICAgZGVmIG5leHRfdGltZW91dChzZWxmKToK
ICAgICAgICAgaWYgc2VsZi5fdGltZW91dDoKICAgICAgICAgICAgIHNlbGYuX3RpbWVvdXRfcXVl
dWUucHV0KCdkb25lJykKICAgICAgICAgICAgIHJldHVybiB0aW1lLnRpbWUoKSAtIDEwCiAgICAg
ICAgIHJldHVybiB0aW1lLnRpbWUoKQogCisgICAgZGVmIGNsZWFyX25leHRfdGltZW91dChzZWxm
KToKKyAgICAgICAgc2VsZi5fbmV4dF90aW1lb3V0ID0gTm9uZQogCiBjbGFzcyBUZXN0SGFuZGxl
cihsb2dnaW5nLkhhbmRsZXIpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhc3RyZWFtKToKQEAg
LTg2LDM1ICsxMDAsMzkgQEAgY2xhc3MgVGVzdEhhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKICAg
ICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKHNlbGYuZm9ybWF0KHJlY29yZCkpCiAKIAotY2xhc3Mg
V2FpdEZvclRocmVhZHNUb0ZpbmlzaFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGNsYXNz
IE1vY2tUZXN0UnVubmVyKHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lcik6CitjbGFzcyBNdWx0
aVRocmVhZGVkQnJva2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xhc3MgTW9ja1Rl
c3RSdW5uZXIob2JqZWN0KToKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICAg
ICAgcGFzcwogCiAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICAgICAgcGFzcwog
Ci0gICAgICAgIGRlZiB1cGRhdGVfc3VtbWFyeShzZWxmLCByZXN1bHRfc3VtbWFyeSk6CisgICAg
ICAgIGRlZiB1cGRhdGUoc2VsZik6CiAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgcnVuX29u
ZV90aHJlYWQoc2VsZiwgbXNnKToKICAgICAgICAgcnVubmVyID0gc2VsZi5Nb2NrVGVzdFJ1bm5l
cigpCisgICAgICAgIHBvcnQgPSBOb25lCisgICAgICAgIG9wdGlvbnMgPSBtb2NrdG9vbC5Nb2Nr
T3B0aW9ucyhjaGlsZF9wcm9jZXNzZXM9JzEnKQogICAgICAgICBzdGFydGluZ19xdWV1ZSA9IFF1
ZXVlLlF1ZXVlKCkKICAgICAgICAgc3RvcHBpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAg
ICAgIGJyb2tlciA9IG1lc3NhZ2VfYnJva2VyLk11bHRpVGhyZWFkZWRCcm9rZXIocG9ydCwgb3B0
aW9ucykKKyAgICAgICAgYnJva2VyLl90ZXN0X3J1bm5lciA9IHJ1bm5lcgogICAgICAgICBjaGls
ZF90aHJlYWQgPSBUZXN0VGhyZWFkKHN0YXJ0aW5nX3F1ZXVlLCBzdG9wcGluZ19xdWV1ZSkKKyAg
ICAgICAgYnJva2VyLl93b3JrZXJzWyd3b3JrZXItMCddID0gbWVzc2FnZV9icm9rZXIuX1dvcmtl
clN0YXRlKCd3b3JrZXItMCcpCisgICAgICAgIGJyb2tlci5fd29ya2Vyc1snd29ya2VyLTAnXS50
aHJlYWQgPSBjaGlsZF90aHJlYWQKICAgICAgICAgY2hpbGRfdGhyZWFkLnN0YXJ0KCkKICAgICAg
ICAgc3RhcnRlZF9tc2cgPSBzdGFydGluZ19xdWV1ZS5nZXQoKQogICAgICAgICBzdG9wcGluZ19x
dWV1ZS5wdXQobXNnKQotICAgICAgICB0aHJlYWRzID0gW2NoaWxkX3RocmVhZF0KLSAgICAgICAg
cmV0dXJuIHJ1bm5lci5fd2FpdF9mb3JfdGhyZWFkc190b19maW5pc2godGhyZWFkcywgTm9uZSkK
KyAgICAgICAgcmV0dXJuIGJyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKIAogICAgIGRlZiB0ZXN0
X2Jhc2ljKHNlbGYpOgogICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQo
JycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW50ZXJydXB0ZWQpCiAKICAgICBkZWYgdGVz
dF9pbnRlcnJ1cHQoc2VsZik6Ci0gICAgICAgIGludGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3Ro
cmVhZCgnS2V5Ym9hcmRJbnRlcnJ1cHQnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50ZXJy
dXB0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleWJvYXJkSW50ZXJydXB0LCBzZWxm
LnJ1bl9vbmVfdGhyZWFkLCAnS2V5Ym9hcmRJbnRlcnJ1cHQnKQogCiAgICAgZGVmIHRlc3RfdGlt
ZW91dChzZWxmKToKICAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQpA
QCAtMTM3LDcgKzE1NSw3IEBAIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAg
ICBmb3VuZF9zdGFjayA9IG1lc3NhZ2VfYnJva2VyLl9maW5kX3RocmVhZF9zdGFjaygwKQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kX3N0YWNrLCBOb25lKQogCi0gICAgZGVmIHRlc3Rf
bG9nX3dlZGdlZF90aHJlYWQoc2VsZik6CisgICAgZGVmIHRlc3RfbG9nX3dlZGdlZF93b3JrZXIo
c2VsZik6CiAgICAgICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKICAgICAg
ICAgb2MuY2FwdHVyZV9vdXRwdXQoKQogICAgICAgICBsb2dnZXIgPSBtZXNzYWdlX2Jyb2tlci5f
bG9nCkBAIC0xNTEsNyArMTY5LDggQEAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAg
ICAgICAgIGNoaWxkX3RocmVhZC5zdGFydCgpCiAgICAgICAgIG1zZyA9IHN0YXJ0aW5nX3F1ZXVl
LmdldCgpCiAKLSAgICAgICAgbWVzc2FnZV9icm9rZXIubG9nX3dlZGdlZF90aHJlYWQoY2hpbGRf
dGhyZWFkLmlkKCkpCisgICAgICAgIG1lc3NhZ2VfYnJva2VyLmxvZ193ZWRnZWRfd29ya2VyKGNo
aWxkX3RocmVhZC5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoaWxkX3RocmVhZC5pZCgpKQogICAgICAgICBzdG9wcGluZ19xdWV1ZS5wdXQoJycp
CiAgICAgICAgIGNoaWxkX3RocmVhZC5qb2luKHRpbWVvdXQ9MS4wKQogCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3Rz
LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0cy5weQppbmRleCAxY2VhZWU5MjM2N2MzODJkNDdjNzFmYjljZWU5NWU0N2FiY2UzZmRk
Li5kNzhlNDUyOTlmZDRlZDJmMTNjMTVjNGVlMDljM2FlMjM0ZDczOWZlIDEwMDc1NQotLS0gYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3Rz
LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHMucHkKQEAgLTc1LDYgKzc1LDcgQEAgZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBv
cnQgdGVzdF9yZXN1bHRzX3VwbG9hZGVyCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBp
bXBvcnQgdXNlcgogZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5IGltcG9ydCBzaW1wbGVqc29uCitm
cm9tIHdlYmtpdHB5LnRvb2wgaW1wb3J0IGdyYW1tYXIKIAogaW1wb3J0IHBvcnQKIApAQCAtMjM5
LDE3ICsyNDAsMTkgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAjIGluIER1bXBSZW5kZXJUcmVl
LgogICAgIERFRkFVTFRfVEVTVF9USU1FT1VUX01TID0gNiAqIDEwMDAKIAotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmludGVyKToKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlciwgbWVzc2FnZV9icm9rZXIpOgogICAgICAgICAiIiJJ
bml0aWFsaXplIHRlc3QgcnVubmVyIGRhdGEgc3RydWN0dXJlcy4KIAogICAgICAgICBBcmdzOgog
ICAgICAgICAgIHBvcnQ6IGFuIG9iamVjdCBpbXBsZW1lbnRpbmcgcG9ydC1zcGVjaWZpYwogICAg
ICAgICAgIG9wdGlvbnM6IGEgZGljdGlvbmFyeSBvZiBjb21tYW5kIGxpbmUgb3B0aW9ucwogICAg
ICAgICAgIHByaW50ZXI6IGEgUHJpbnRlciBvYmplY3QgdG8gcmVjb3JkIHVwZGF0ZXMgdG8uCisg
ICAgICAgICAgbWVzc2FnZV9icm9rZXI6IG9iamVjdCB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGgg
d29ya2Vycy4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAg
IHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCiAgICAgICAgIHNlbGYuX3ByaW50ZXIgPSBwcmludGVy
CisgICAgICAgIHNlbGYuX21lc3NhZ2VfYnJva2VyID0gbWVzc2FnZV9icm9rZXIKIAogICAgICAg
ICAjIGRpc2FibGUgd3NzIHNlcnZlci4gbmVlZCB0byBpbnN0YWxsIHB5T3BlblNTTCBvbiBidWls
ZGJvdHMuCiAgICAgICAgICMgc2VsZi5fd2Vic29ja2V0X3NlY3VyZV9zZXJ2ZXIgPSB3ZWJzb2Nr
ZXRfc2VydmVyLlB5V2ViU29ja2V0KApAQCAtNTY1LDM0ICs1NjgsNiBAQCBjbGFzcyBUZXN0UnVu
bmVyOgogICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIHJldHVybiBGYWxzZQog
Ci0gICAgZGVmIF9pbnN0YW50aWF0ZV9kdW1wX3JlbmRlcl90cmVlX3RocmVhZHMoc2VsZiwgdGVz
dF9maWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRfc3VtbWFyeSk6Ci0gICAgICAgICIiIkluc3RhbnRpdGF0ZXMgYW5kIHN0YXJ0cyB0aGUg
VGVzdFNoZWxsVGhyZWFkKHMpLgotCi0gICAgICAgIFJldHVybjoKLSAgICAgICAgICBUaGUgbGlz
dCBvZiB0aHJlYWRzLgotICAgICAgICAiIiIKLSAgICAgICAgbnVtX3dvcmtlcnMgPSBzZWxmLl9u
dW1fd29ya2VycygpCi0gICAgICAgIHRlc3RfbGlzdHMgPSBzZWxmLl9zaGFyZF90ZXN0cyh0ZXN0
X2ZpbGVzLAotICAgICAgICAgICAgbnVtX3dvcmtlcnMgPiAxIGFuZCBub3Qgc2VsZi5fb3B0aW9u
cy5leHBlcmltZW50YWxfZnVsbHlfcGFyYWxsZWwpCi0gICAgICAgIGZpbGVuYW1lX3F1ZXVlID0g
UXVldWUuUXVldWUoKQotICAgICAgICBmb3IgaXRlbSBpbiB0ZXN0X2xpc3RzOgotICAgICAgICAg
ICAgZmlsZW5hbWVfcXVldWUucHV0KGl0ZW0pCi0KLSAgICAgICAgIyBJbnN0YW50aWF0ZSBUZXN0
U2hlbGxUaHJlYWRzIGFuZCBzdGFydCB0aGVtLgotICAgICAgICB0aHJlYWRzID0gW10KLSAgICAg
ICAgZm9yIHdvcmtlcl9udW1iZXIgaW4geHJhbmdlKG51bV93b3JrZXJzKToKLSAgICAgICAgICAg
IHRocmVhZCA9IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLlRlc3RTaGVsbFRocmVhZChzZWxmLl9w
b3J0LAotICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMsIHdvcmtlcl9udW1iZXIsCi0gICAg
ICAgICAgICAgICAgZmlsZW5hbWVfcXVldWUsIHNlbGYuX3Jlc3VsdF9xdWV1ZSkKLSAgICAgICAg
ICAgIGlmIG51bV93b3JrZXJzID4gMToKLSAgICAgICAgICAgICAgICB0aHJlYWQuc3RhcnQoKQot
ICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB0aHJlYWQucnVuX2luX21haW5fdGhy
ZWFkKHNlbGYsIHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICAgICAgdGhyZWFkcy5hcHBlbmQodGhy
ZWFkKQotCi0gICAgICAgIHJldHVybiB0aHJlYWRzCi0KICAgICBkZWYgX251bV93b3JrZXJzKHNl
bGYpOgogICAgICAgICByZXR1cm4gaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKQog
CkBAIC02MTAsNTggKzU4NSw0MyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICBp
biB0aGUgZm9ybSB7ZmlsZW5hbWU6ZmlsZW5hbWUsIHRlc3RfcnVuX3RpbWU6dGVzdF9ydW5fdGlt
ZX0KICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCB0byBwb3B1bGF0
ZSB3aXRoIHRoZSByZXN1bHRzCiAgICAgICAgICIiIgotICAgICAgICBwbHVyYWwgPSAiIgotICAg
ICAgICBpZiBzZWxmLl9udW1fd29ya2VycygpID4gMToKLSAgICAgICAgICAgIHBsdXJhbCA9ICJz
IgotICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgJXMlcyAuLi4n
ICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX3BvcnQuZHJpdmVy
X25hbWUoKSwgcGx1cmFsKSkKLSAgICAgICAgdGhyZWFkcyA9IHNlbGYuX2luc3RhbnRpYXRlX2R1
bXBfcmVuZGVyX3RyZWVfdGhyZWFkcyhmaWxlX2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCi0g
ICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0aW5nIC4uLiIp
CiAKLSAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBzZWxmLl93YWl0X2Zvcl90aHJlYWRz
X3RvX2ZpbmlzaCh0aHJlYWRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICAodGhy
ZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpID0gXAot
ICAgICAgICAgICAgc2VsZi5fY29sbGVjdF90aW1pbmdfaW5mbyh0aHJlYWRzKQorICAgICAgICBz
ZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU2hhcmRpbmcgdGVzdHMgLi4uJykKKyAgICAgICAg
bnVtX3dvcmtlcnMgPSBzZWxmLl9udW1fd29ya2VycygpCisgICAgICAgIHRlc3RfbGlzdHMgPSBz
ZWxmLl9zaGFyZF90ZXN0cyhmaWxlX2xpc3QsCisgICAgICAgICAgICBudW1fd29ya2VycyA+IDEg
YW5kIG5vdCBzZWxmLl9vcHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCkKKyAgICAg
ICAgZmlsZW5hbWVfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgIGZvciBpdGVtIGluIHRl
c3RfbGlzdHM6CisgICAgICAgICAgICBmaWxlbmFtZV9xdWV1ZS5wdXQoaXRlbSkKIAotICAgICAg
ICByZXR1cm4gKGtleWJvYXJkX2ludGVycnVwdGVkLCB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1p
bmdzLAotICAgICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQorICAgICAgICBz
ZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgJXMgLi4uJyAlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXIucGx1cmFsaXplKCd3b3JrZXInLCBudW1f
d29ya2VycykpCisgICAgICAgIG1lc3NhZ2VfYnJva2VyID0gc2VsZi5fbWVzc2FnZV9icm9rZXIK
KyAgICAgICAgc2VsZi5fY3VycmVudF9maWxlbmFtZV9xdWV1ZSA9IGZpbGVuYW1lX3F1ZXVlCisg
ICAgICAgIHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkgPSByZXN1bHRfc3VtbWFyeQorICAg
ICAgICB0aHJlYWRzID0gbWVzc2FnZV9icm9rZXIuc3RhcnRfd29ya2VycyhzZWxmKQogCi0gICAg
ZGVmIF93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaChzZWxmLCB0aHJlYWRzLCByZXN1bHRfc3Vt
bWFyeSk6CisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0
aW5nIC4uLiIpCiAgICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkID0gRmFsc2UKICAgICAgICAg
dHJ5OgotICAgICAgICAgICAgIyBMb29wIHRocm91Z2ggYWxsIHRoZSB0aHJlYWRzIHdhaXRpbmcg
Zm9yIHRoZW0gdG8gZmluaXNoLgotICAgICAgICAgICAgc29tZV90aHJlYWRfaXNfYWxpdmUgPSBU
cnVlCi0gICAgICAgICAgICB3aGlsZSBzb21lX3RocmVhZF9pc19hbGl2ZToKLSAgICAgICAgICAg
ICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IEZhbHNlCi0gICAgICAgICAgICAgICAgdCA9IHRp
bWUudGltZSgpCi0gICAgICAgICAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgotICAgICAg
ICAgICAgICAgICAgICBleGNlcHRpb25faW5mbyA9IHRocmVhZC5leGNlcHRpb25faW5mbygpCi0g
ICAgICAgICAgICAgICAgICAgIGlmIGV4Y2VwdGlvbl9pbmZvIGlzIG5vdCBOb25lOgotICAgICAg
ICAgICAgICAgICAgICAgICAgIyBSZS1yYWlzZSB0aGUgdGhyZWFkJ3MgZXhjZXB0aW9uIGhlcmUg
dG8gbWFrZSBpdAotICAgICAgICAgICAgICAgICAgICAgICAgIyBjbGVhciB0aGF0IHRlc3Rpbmcg
d2FzIGFib3J0ZWQuIE90aGVyd2lzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIHRl
c3RzIHRoYXQgZGlkIG5vdCBydW4gd291bGQgYmUgYXNzdW1lZAotICAgICAgICAgICAgICAgICAg
ICAgICAgIyB0byBoYXZlIHBhc3NlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGV4
Y2VwdGlvbl9pbmZvWzBdLCBleGNlcHRpb25faW5mb1sxXSwgZXhjZXB0aW9uX2luZm9bMl0KLQot
ICAgICAgICAgICAgICAgICAgICBpZiB0aHJlYWQuaXNBbGl2ZSgpOgotICAgICAgICAgICAgICAg
ICAgICAgICAgc29tZV90aHJlYWRfaXNfYWxpdmUgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAg
ICAgICBuZXh0X3RpbWVvdXQgPSB0aHJlYWQubmV4dF90aW1lb3V0KCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChuZXh0X3RpbWVvdXQgYW5kIHQgPiBuZXh0X3RpbWVvdXQpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfYnJva2VyLmxvZ193ZWRnZWRfdGhyZWFkKHRo
cmVhZC5pZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZC5jbGVhcl9uZXh0
X3RpbWVvdXQoKQotCi0gICAgICAgICAgICAgICAgc2VsZi51cGRhdGVfc3VtbWFyeShyZXN1bHRf
c3VtbWFyeSkKLQotICAgICAgICAgICAgICAgIGlmIHNvbWVfdGhyZWFkX2lzX2FsaXZlOgotICAg
ICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCi0KKyAgICAgICAgICAgIG1lc3NhZ2Vf
YnJva2VyLnJ1bl9tZXNzYWdlX2xvb3AoKQogICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1
cHQ6CisgICAgICAgICAgICBfbG9nLmluZm8oIkludGVycnVwdGVkLCBleGl0aW5nIikKKyAgICAg
ICAgICAgIG1lc3NhZ2VfYnJva2VyLmNhbmNlbF93b3JrZXJzKCkKICAgICAgICAgICAgIGtleWJv
YXJkX2ludGVycnVwdGVkID0gVHJ1ZQotICAgICAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRz
OgotICAgICAgICAgICAgICAgIHRocmVhZC5jYW5jZWwoKQorICAgICAgICBleGNlcHQ6CisgICAg
ICAgICAgICAjIFVuZXhwZWN0ZWQgZXhjZXB0aW9uOyBkb24ndCB0cnkgdG8gY2xlYW4gdXAgd29y
a2Vycy4KKyAgICAgICAgICAgIF9sb2cuaW5mbygiRXhjZXB0aW9uIHJhaXNlZCwgZXhpdGluZyIp
CisgICAgICAgICAgICByYWlzZQogCi0gICAgICAgIHJldHVybiBrZXlib2FyZF9pbnRlcnJ1cHRl
ZAorICAgICAgICB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3Rf
dGltaW5ncyA9IFwKKyAgICAgICAgICAgIHNlbGYuX2NvbGxlY3RfdGltaW5nX2luZm8odGhyZWFk
cykKKworICAgICAgICByZXR1cm4gKGtleWJvYXJkX2ludGVycnVwdGVkLCB0aHJlYWRfdGltaW5n
cywgdGVzdF90aW1pbmdzLAorICAgICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdz
KQorCisgICAgZGVmIHVwZGF0ZShzZWxmKToKKyAgICAgICAgc2VsZi51cGRhdGVfc3VtbWFyeShz
ZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5KQogCiAgICAgZGVmIF9jb2xsZWN0X3RpbWluZ19p
bmZvKHNlbGYsIHRocmVhZHMpOgogICAgICAgICB0ZXN0X3RpbWluZ3MgPSB7fQpAQCAtMTMyNiwx
MSArMTI4NiwxMyBAQCBkZWYgcnVuKHBvcnQsIG9wdGlvbnMsIGFyZ3MsIHJlZ3VsYXJfb3V0cHV0
PXN5cy5zdGRlcnIsCiAgICAgICAgIHByaW50ZXIuY2xlYW51cCgpCiAgICAgICAgIHJldHVybiAw
CiAKKyAgICBicm9rZXIgPSBtZXNzYWdlX2Jyb2tlci5nZXQocG9ydCwgb3B0aW9ucykKKwogICAg
ICMgV2Ugd3JhcCBhbnkgcGFydHMgb2YgdGhlIHJ1biB0aGF0IGFyZSBzbG93IG9yIGxpa2VseSB0
byByYWlzZSBleGNlcHRpb25zCiAgICAgIyBpbiBhIHRyeS9maW5hbGx5IHRvIGVuc3VyZSB0aGF0
IHdlIGNsZWFuIHVwIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uCiAgICAgbnVtX3VuZXhwZWN0
ZWRfcmVzdWx0cyA9IC0xCiAgICAgdHJ5OgotICAgICAgICB0ZXN0X3J1bm5lciA9IFRlc3RSdW5u
ZXIocG9ydCwgb3B0aW9ucywgcHJpbnRlcikKKyAgICAgICAgdGVzdF9ydW5uZXIgPSBUZXN0UnVu
bmVyKHBvcnQsIG9wdGlvbnMsIHByaW50ZXIsIGJyb2tlcikKICAgICAgICAgdGVzdF9ydW5uZXIu
X3ByaW50X2NvbmZpZygpCiAKICAgICAgICAgcHJpbnRlci5wcmludF91cGRhdGUoIkNvbGxlY3Rp
bmcgdGVzdHMgLi4uIikKQEAgLTEzNTksNiArMTMyMSw3IEBAIGRlZiBydW4ocG9ydCwgb3B0aW9u
cywgYXJncywgcmVndWxhcl9vdXRwdXQ9c3lzLnN0ZGVyciwKICAgICAgICAgICAgIF9sb2cuZGVi
dWcoIlRlc3RpbmcgY29tcGxldGVkLCBFeGl0IHN0YXR1czogJWQiICUKICAgICAgICAgICAgICAg
ICAgICAgICAgbnVtX3VuZXhwZWN0ZWRfcmVzdWx0cykKICAgICBmaW5hbGx5OgorICAgICAgICBi
cm9rZXIuY2xlYW51cCgpCiAgICAgICAgIHByaW50ZXIuY2xlYW51cCgpCiAKICAgICByZXR1cm4g
bnVtX3VuZXhwZWN0ZWRfcmVzdWx0cwpAQCAtMTU5NSw5ICsxNTU4LDggQEAgZGVmIHBhcnNlX2Fy
Z3MoYXJncz1Ob25lKToKICAgICAgICAgICAgIGhlbHA9Ik51bWJlciBvZiBEdW1wUmVuZGVyVHJl
ZXMgdG8gcnVuIGluIHBhcmFsbGVsLiIpLAogICAgICAgICAjIEZJWE1FOiBEaXNwbGF5IGRlZmF1
bHQgbnVtYmVyIG9mIGNoaWxkIHByb2Nlc3NlcyB0aGF0IHdpbGwgcnVuLgogICAgICAgICBvcHRw
YXJzZS5tYWtlX29wdGlvbigiLS13b3JrZXItbW9kZWwiLCBhY3Rpb249InN0b3JlIiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0idGhyZWFkcyIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9ImNvbnRyb2xzIHdvcmtlciBtb2RlbC4gVmFsaWQgdmFsdWVz
IGFyZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICInaW5saW5lJyBhbmQgJ3RocmVh
ZHMnIChkZWZhdWx0KS4iKSwKKyAgICAgICAgICAgIGRlZmF1bHQ9InRocmVhZHMiLCBoZWxwPSgi
Y29udHJvbHMgd29ya2VyIG1vZGVsLiBWYWxpZCB2YWx1ZXMgYXJlICIKKyAgICAgICAgICAgICIn
aW5saW5lJyBhbmQgJ3RocmVhZHMnIChkZWZhdWx0KS4iKSksCiAgICAgICAgIG9wdHBhcnNlLm1h
a2Vfb3B0aW9uKCItLWV4cGVyaW1lbnRhbC1mdWxseS1wYXJhbGxlbCIsCiAgICAgICAgICAgICBh
Y3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAogICAgICAgICAgICAgaGVscD0icnVu
IGFsbCB0ZXN0cyBpbiBwYXJhbGxlbCIpLApAQCAtMTY1MywxMyArMTYxNSw3IEBAIGRlZiBwYXJz
ZV9hcmdzKGFyZ3M9Tm9uZSk6CiAgICAgICAgICAgICAgICAgICAgb2xkX3J1bl93ZWJraXRfdGVz
dHNfY29tcGF0KQogICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIob3B0
aW9uX2xpc3Q9b3B0aW9uX2xpc3QpCiAKLSAgICBvcHRpb25zLCBhcmdzID0gb3B0aW9uX3BhcnNl
ci5wYXJzZV9hcmdzKGFyZ3MpCi0KLSAgICBpZiBvcHRpb25zLndvcmtlcl9tb2RlbCBub3QgaW4g
KCdpbmxpbmUnLCAndGhyZWFkcycpOgotICAgICAgICBvcHRpb25fcGFyc2VyLmVycm9yKCJ1bnN1
cHBvcnRlZCB2YWx1ZSBmb3IgLS13b3JrZXItbW9kZWw6ICVzIiAlCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3B0aW9ucy53b3JrZXJfbW9kZWwpCi0KLSAgICByZXR1cm4gb3B0aW9ucywg
YXJncworICAgIHJldHVybiBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKIAogCiBkZWYg
bWFpbigpOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKaW5kZXgg
MDlhMGM3MTkzM2EwNGM4NDA1NzUzOGNlODg5Y2I5MGEzN2U3MzE4NC4uYjNjODg2MTAzYzhhYjcx
NWIzNzY5NWJkYjY1MDYxZjlkYTlkNmQ0OCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQorKysg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rl
c3RzX3VuaXR0ZXN0LnB5CkBAIC0xMDMsOCArMTAzLDggQEAgZGVmIGxvZ2dpbmdfcnVuKGV4dHJh
X2FyZ3M9Tm9uZSwgcG9ydF9vYmo9Tm9uZSwgdGVzdHNfaW5jbHVkZWQ9RmFsc2UpOgogICAgICAg
ICAgICAgICAgICAgICAgJ3dlYnNvY2tldC90ZXN0cycsCiAgICAgICAgICAgICAgICAgICAgICAn
ZmFpbHVyZXMvZXhwZWN0ZWQvKiddKQogCisgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENh
cHR1cmUoKQogICAgIHRyeToKLSAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1
cmUoKQogICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCiAgICAgICAgIG9wdGlvbnMsIHBhcnNl
ZF9hcmdzID0gcnVuX3dlYmtpdF90ZXN0cy5wYXJzZV9hcmdzKGFyZ3MpCiAgICAgICAgIHVzZXIg
PSBNb2NrVXNlcigpCkBAIC0yMjYsNyArMjI2LDcgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2tleWJvYXJkX2ludGVycnVwdChzZWxmKToKICAgICAg
ICAgIyBOb3RlIHRoYXQgdGhpcyBhbHNvIHRlc3RzIHJ1bm5pbmcgYSB0ZXN0IG1hcmtlZCBhcyBT
S0lQIGlmCiAgICAgICAgICMgeW91IHNwZWNpZnkgaXQgZXhwbGljaXRseS4KLSAgICAgICAgc2Vs
Zi5hc3NlcnRSYWlzZXMoS2V5Ym9hcmRJbnRlcnJ1cHQsIHBhc3NpbmdfcnVuLAorICAgICAgICBz
ZWxmLmFzc2VydFJhaXNlcyhLZXlib2FyZEludGVycnVwdCwgbG9nZ2luZ19ydW4sCiAgICAgICAg
ICAgICBbJ2ZhaWx1cmVzL2V4cGVjdGVkL2tleWJvYXJkLmh0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9
VHJ1ZSkKIAogICAgIGRlZiB0ZXN0X2xhc3RfcmVzdWx0cyhzZWxmKToKQEAgLTM3OCwxMSArMzc4
LDExIEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS13b3JrZXItbW9kZWwnLCAndGhyZWFkcyddKSkKIAog
ICAgIGRlZiB0ZXN0X3dvcmtlcl9tb2RlbF9fcHJvY2Vzc2VzKHNlbGYpOgotICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBsb2dnaW5nX3J1biwKKyAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoVmFsdWVFcnJvciwgbG9nZ2luZ19ydW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFsnLS13b3JrZXItbW9kZWwnLCAncHJvY2Vzc2VzJ10pCiAKICAgICBkZWYgdGVzdF93b3Jr
ZXJfbW9kZWxfX3Vua25vd24oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3Rl
bUV4aXQsIGxvZ2dpbmdfcnVuLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9y
LCBsb2dnaW5nX3J1biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgWyctLXdvcmtlci1tb2Rl
bCcsICd1bmtub3duJ10pCiAKIE1haW5UZXN0ID0gc2tpcF9pZihNYWluVGVzdCwgc3lzLnBsYXRm
b3JtID09ICdjeWd3aW4nIGFuZCBjb21wYXJlX3ZlcnNpb24oc3lzLCAnMi42JylbMF0gPCAwLCAn
bmV3LXJ1bi13ZWJraXQtdGVzdHMgdGVzdHMgaGFuZyBvbiBDeWd3aW4gUHl0aG9uIDIuNS4yJykK
QEAgLTQ2Niw3ICs0NjYsOCBAQCBjbGFzcyBUZXN0UnVubmVyVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CiAgICAgICAgIG1vY2tfcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lID0gbGFtYmRhIG5h
bWU6IG5hbWUKICAgICAgICAgbW9ja19wb3J0LmZpbGVuYW1lX3RvX3VyaSA9IGxhbWJkYSBuYW1l
OiBuYW1lCiAKLSAgICAgICAgcnVubmVyID0gcnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVubmVyKHBv
cnQ9bW9ja19wb3J0LCBvcHRpb25zPU1vY2soKSwgcHJpbnRlcj1Nb2NrKCkpCisgICAgICAgIHJ1
bm5lciA9IHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lcihwb3J0PW1vY2tfcG9ydCwgb3B0aW9u
cz1Nb2NrKCksCisgICAgICAgICAgICBwcmludGVyPU1vY2soKSwgbWVzc2FnZV9icm9rZXI9TW9j
aygpKQogICAgICAgICBleHBlY3RlZF9odG1sID0gdSIiIjxodG1sPgogICA8aGVhZD4KICAgICA8
dGl0bGU+TGF5b3V0IFRlc3QgUmVzdWx0cyAodGltZSk8L3RpdGxlPgpAQCAtNDgzLDcgKzQ4NCw4
IEBAIGNsYXNzIFRlc3RSdW5uZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVz
dF9zaGFyZF90ZXN0cyhzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgX3NoYXJkX3Rlc3RzIGlu
IHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lciByZWFsbHkKICAgICAgICAgIyBwdXQgdGhlIGh0
dHAgdGVzdHMgZmlyc3QgaW4gdGhlIHF1ZXVlLgotICAgICAgICBydW5uZXIgPSBUZXN0UnVubmVy
V3JhcHBlcihwb3J0PU1vY2soKSwgb3B0aW9ucz1Nb2NrKCksIHByaW50ZXI9TW9jaygpKQorICAg
ICAgICBydW5uZXIgPSBUZXN0UnVubmVyV3JhcHBlcihwb3J0PU1vY2soKSwgb3B0aW9ucz1Nb2Nr
KCksCisgICAgICAgICAgICBwcmludGVyPU1vY2soKSwgbWVzc2FnZV9icm9rZXI9TW9jaygpKQog
CiAgICAgICAgIHRlc3RfbGlzdCA9IFsKICAgICAgICAgICAiTGF5b3V0VGVzdHMvd2Vic29ja2V0
L3Rlc3RzL3VuaWNvZGUuaHRtIiwK
</data>

          </attachment>
      

    </bug>

</bugzilla>