<?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>63116</bug_id>
          
          <creation_ts>2011-06-21 20:52:44 -0700</creation_ts>
          <short_desc>nrwt: allow for multiple http shards</short_desc>
          <delta_ts>2012-01-10 11:28:52 -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>PC</rep_platform>
          <op_sys>All</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>63112</dependson>
    
    <dependson>64092</dependson>
          <blocked>75958</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>abecsi</cc>
    
    <cc>aroben</cc>
    
    <cc>eric</cc>
    
    <cc>galpeter</cc>
    
    <cc>kkristof</cc>
    
    <cc>ojan</cc>
    
    <cc>ossy</cc>
    
    <cc>rgabor</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>424992</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-21 20:52:44 -0700</bug_when>
    <thetext>nrwt: allow for multiple http shards</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424993</commentid>
    <comment_count>1</comment_count>
      <attachid>98112</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-21 20:55:36 -0700</bug_when>
    <thetext>Created attachment 98112
checkpoint work; needs more testing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424999</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-21 21:10:49 -0700</bug_when>
    <thetext>FYI, the final version of the new sharding logic will probably look something like this, although this needs more tests and I think I can clean it up more.

The basic idea is to limit the # of concurrent HTTP tests to something sane like max(# cpus/4, 1) so that we don&apos;t hammer the server too much and increase flakiness. I think even splitting the HTTP tests up into 4 chunks should be enough to make them not on the critical path, but I haven&apos;t tested the perf improvements yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425347</commentid>
    <comment_count>3</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-06-22 10:39:45 -0700</bug_when>
    <thetext>Are both lighttpd and apache2 configured to handle a reasonable number of concurrent connections (maybe 3 times the number of DRT processes)?  Are there any tests that try to set/get cookies that might start failing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425365</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-22 10:56:49 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Are both lighttpd and apache2 configured to handle a reasonable number of concurrent connections (maybe 3 times the number of DRT processes)?  Are there any tests that try to set/get cookies that might start failing?

Good questions. I don&apos;t yet know the answers. Presumably the answer to the cookie question is yes :).

However, given that we&apos;ve had --experimental-fully-parallel forever and I&apos;ve not noticed any real problems with http specifically, I think we&apos;re probably fine, but definitely more testing is needed before we turn this on by default.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425368</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-22 10:58:58 -0700</bug_when>
    <thetext>There are php-based cookie tests which are known to be flaky in our current setup.  I could forsee them failing in a sharded environment.  Unclear.

See https://bugs.webkit.org/show_bug.cgi?id=51613 for one example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425912</commentid>
    <comment_count>6</comment_count>
      <attachid>98302</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-22 20:04:50 -0700</bug_when>
    <thetext>Created attachment 98302
clean up logic, add tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427192</commentid>
    <comment_count>7</comment_count>
      <attachid>98302</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-06-24 15:16:26 -0700</bug_when>
    <thetext>Comment on attachment 98302
clean up logic, add tests

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

&gt; Tools/ChangeLog:20
&gt; +        nrwt: make sharding tests needing locks less hard-coded
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=63112

Is this ChangeLog entry supposed to be here?

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:543
&gt;          Return:
&gt;              Two lists of lists of TestInput objects. The first list should
&gt;              only be run under the server lock, the second can be run whenever.

This patch might be the right time to make this return type into a small class.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:629
&gt; +    def _resize_shards(self, shards, max_shards):

What is |shards|?

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:633
&gt; +        i = 1
&gt; +        j = 1

Please use more descriptive variable names.  It looks like i is current directory count and j is number of shards.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:637
&gt; +            tests.extend(shard[1])

It&apos;s not clear to me what shard[1].  I assume it&apos;s part of a tuple (so it&apos;s always valid), but I can&apos;t tell.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:640
&gt; +                new_shards.append((&apos;locked_shard_%d&apos; % j, tests))

Can we compute j based on the size of new_shards?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427201</commentid>
    <comment_count>8</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-06-24 15:28:13 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=98302&amp;action=review

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:554
&gt; +        if num_workers == 1:
&gt; +            return self._shard_in_two(test_files)
&gt; +        elif fully_parallel:
&gt; +            return self._shard_every_file(test_files)
&gt; +        else:
&gt; +            return self._shard_by_directory(test_files, num_workers)

No need for the else&apos;s since you&apos;re early returning as per http://www.webkit.org/coding/coding-style.html.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:630
&gt; +        dirs_per_new_shard = math.ceil(len(shards) / max_shards * 1.0)

Why the &quot;* 1.0&quot;?

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:636
&gt; +        while shards:
&gt; +            shard = shards.pop()

Can you just do &quot;for shard in shards:&quot;?

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:640
&gt; +                new_shards.append((&apos;locked_shard_%d&apos; % j, tests))

Instead of manually keeping track of &quot;j&quot;, can you just use len(new_shards)?

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:645
&gt; +        if tests:
&gt; +            new_shards.append((&apos;locked_shard_%d&apos; % j, tests))

I think you could simplify this to not need this last case if you did something like:
for shard in shards:
    if not tests:
        new_shards.append(...)
    tests.extend(...)
    i += 1
    if i == dirs_per_new_shard:
        tests = []</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427229</commentid>
    <comment_count>9</comment_count>
      <attachid>98302</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-24 16:26:08 -0700</bug_when>
    <thetext>Comment on attachment 98302
clean up logic, add tests

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

&gt;&gt; Tools/ChangeLog:20
&gt;&gt; +        https://bugs.webkit.org/show_bug.cgi?id=63112
&gt; 
&gt; Is this ChangeLog entry supposed to be here?

No. I think this maybe crept in in some merge/rebasing effort. I&apos;ll remove it.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:543
&gt;&gt;              only be run under the server lock, the second can be run whenever.
&gt; 
&gt; This patch might be the right time to make this return type into a small class.

I started to do this as part of revising the patch per your feedback, but it turns out that this just makes things more complicated: you end up creating a class that holds two fields, each of which is a list, and really all you want to do is extract each list and then add them together, the calling code gets much worse.

However, I think partially this code looks complex because each shard itself is an anonymous data structure. I&apos;ve changed that so that there is now a TestShard class (a named list of TestInputs) and I think that ends up making things clearer. Let me know what you think.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:629
&gt;&gt; +    def _resize_shards(self, shards, max_shards):
&gt; 
&gt; What is |shards|?

I will rewrite everything to be clearer.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:633
&gt;&gt; +        j = 1
&gt; 
&gt; Please use more descriptive variable names.  It looks like i is current directory count and j is number of shards.

Will do.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:637
&gt;&gt; +            tests.extend(shard[1])
&gt; 
&gt; It&apos;s not clear to me what shard[1].  I assume it&apos;s part of a tuple (so it&apos;s always valid), but I can&apos;t tell.

This should become clearer.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:640
&gt;&gt; +                new_shards.append((&apos;locked_shard_%d&apos; % j, tests))
&gt; 
&gt; Can we compute j based on the size of new_shards?

Yeah.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427231</commentid>
    <comment_count>10</comment_count>
      <attachid>98560</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-24 16:31:12 -0700</bug_when>
    <thetext>Created attachment 98560
update w/ review feedback from tony</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427234</commentid>
    <comment_count>11</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-24 16:36:58 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98302&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:554
&gt; &gt; +        if num_workers == 1:
&gt; &gt; +            return self._shard_in_two(test_files)
&gt; &gt; +        elif fully_parallel:
&gt; &gt; +            return self._shard_every_file(test_files)
&gt; &gt; +        else:
&gt; &gt; +            return self._shard_by_directory(test_files, num_workers)
&gt; 
&gt; No need for the else&apos;s since you&apos;re early returning as per http://www.webkit.org/coding/coding-style.html.
&gt; 

True.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:630
&gt; &gt; +        dirs_per_new_shard = math.ceil(len(shards) / max_shards * 1.0)
&gt; 
&gt; Why the &quot;* 1.0&quot;?
&gt; 

Otherwise you get an integer division and it truncates down, making the ceil() call useless. 

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:636
&gt; &gt; +        while shards:
&gt; &gt; +            shard = shards.pop()
&gt; 
&gt; Can you just do &quot;for shard in shards:&quot;?
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:640
&gt; &gt; +                new_shards.append((&apos;locked_shard_%d&apos; % j, tests))
&gt; 
&gt; Instead of manually keeping track of &quot;j&quot;, can you just use len(new_shards)?
&gt; 

Yeah, I made these two changes in the new patch.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:645
&gt; &gt; +        if tests:
&gt; &gt; +            new_shards.append((&apos;locked_shard_%d&apos; % j, tests))
&gt; 
&gt; I think you could simplify this to not need this last case if you did something like:
&gt; for shard in shards:
&gt;     if not tests:
&gt;         new_shards.append(...)
&gt;     tests.extend(...)
&gt;     i += 1
&gt;     if i == dirs_per_new_shard:
&gt;         tests = []

Hm. I will ponder this one :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427286</commentid>
    <comment_count>12</comment_count>
      <attachid>98571</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-24 19:31:58 -0700</bug_when>
    <thetext>Created attachment 98571
try to make _resize_shards clearer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428007</commentid>
    <comment_count>13</comment_count>
      <attachid>98571</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-06-27 09:41:08 -0700</bug_when>
    <thetext>Comment on attachment 98571
try to make _resize_shards clearer

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

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:241
&gt; +    # FIXME: make this class visible, used by workers as well.

Nit: make -&gt; Make

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:244
&gt; +    def __init__(self, name, test_inputs):
&gt; +        self.name = name
&gt; +        self.test_inputs = test_inputs

Nit: Maybe document that test_inputs is a list of TestInputs?

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:610
&gt; +        locked_shards = []
&gt; +        unlocked_shards = []

Nit: I would move these lines between the for loop to so it&apos;s closer to where it&apos;s first used.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:629
&gt; +        locked_shards.sort(key=lambda shard: shard.name)
&gt; +        unlocked_shards.sort(key=lambda shard: shard.name)

Should we implement __cmp__ for TestShard?

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:657
&gt; +            return int(math.ceil(numerator * 1.0 / divisor))

Nit: I think float(numerator) is more explicit than * 1.0.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:759
&gt; +            # FIXME: change &apos;test_list&apos; to &apos;shard&apos;, make sharding public

Nit: change -&gt; Change and public -&gt; public.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428386</commentid>
    <comment_count>14</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-27 15:33:06 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 98571 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98571&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:241
&gt; &gt; +    # FIXME: make this class visible, used by workers as well.
&gt; 
&gt; Nit: make -&gt; Make
&gt; 

Done.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:244
&gt; &gt; +    def __init__(self, name, test_inputs):
&gt; &gt; +        self.name = name
&gt; &gt; +        self.test_inputs = test_inputs
&gt; 
&gt; Nit: Maybe document that test_inputs is a list of TestInputs?
&gt;

There&apos;s a class-level docstring right above the __init__ that says that the object is a named list of TestInputs; between that and the variable/field names that seemed to cover things well enough, I thought.
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:610
&gt; &gt; +        locked_shards = []
&gt; &gt; +        unlocked_shards = []
&gt; 
&gt; Nit: I would move these lines between the for loop to so it&apos;s closer to where it&apos;s first used.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:629
&gt; &gt; +        locked_shards.sort(key=lambda shard: shard.name)
&gt; &gt; +        unlocked_shards.sort(key=lambda shard: shard.name)
&gt; 
&gt; Should we implement __cmp__ for TestShard?
&gt;

I wouldn&apos;t just yet; I&apos;m not sure __cmp__ makes a lot of sense as a generic operation, and there&apos;s no obvious need for it.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:657
&gt; &gt; +            return int(math.ceil(numerator * 1.0 / divisor))
&gt; 
&gt; Nit: I think float(numerator) is more explicit than * 1.0.
&gt; 

Good call. Done

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:759
&gt; &gt; +            # FIXME: change &apos;test_list&apos; to &apos;shard&apos;, make sharding public
&gt; 
&gt; Nit: change -&gt; Change and public -&gt; public.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428388</commentid>
    <comment_count>15</comment_count>
      <attachid>98804</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-27 15:35:54 -0700</bug_when>
    <thetext>Created attachment 98804
update w/ more feedback from tony</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430947</commentid>
    <comment_count>16</comment_count>
      <attachid>99420</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-30 19:55:43 -0700</bug_when>
    <thetext>Created attachment 99420
patch for landing after rebasing to HEAD</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434301</commentid>
    <comment_count>17</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-07-08 14:12:54 -0700</bug_when>
    <thetext>Fixed in r90419.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533177</commentid>
    <comment_count>18</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-10 10:31:12 -0800</bug_when>
    <thetext>IMO the right way to fix all of this http sharding is to use port redirection in the DRT instance, and to start the http server with a custom port.  That&apos;s more work, but is a better long term solution than any of these locks or hacks we&apos;ve added in the past. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533232</commentid>
    <comment_count>19</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-01-10 11:28:52 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; IMO the right way to fix all of this http sharding is to use port redirection in the DRT instance, and to start the http server with a custom port.  That&apos;s more work, but is a better long term solution than any of these locks or hacks we&apos;ve added in the past. :)

Eric, did you mean for this comment to be on bug 75958 instead? 

At any rate, I think you&apos;re conflating two things ... this feature is about being able to run multiple http tests in parallel in a single NRWT run; the reason we don&apos;t do that today is because we&apos;re concerned about overloading the http server and/or inter-test dependencies. I don&apos;t know if running on different http ports would make this better or worse, but it shouldn&apos;t be necessary, regardless.

I think you&apos;re talking about running multiple http servers on different ports so that multiple separate nrwt runs can occur in parallel, right?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98112</attachid>
            <date>2011-06-21 20:55:36 -0700</date>
            <delta_ts>2011-06-22 20:04:47 -0700</delta_ts>
            <desc>checkpoint work; needs more testing</desc>
            <filename>bug-63116-20110621205535.patch</filename>
            <type>text/plain</type>
            <size>8684</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODkzNzMKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiZTFjN2ZiNGU1MGM4MDI3NTVkYTMyM2M2MmU5Y2RlYjc2
ZDVhNjY3Li5iNzQ4ZGNkMjE0OWUxNzYzZTRmNzM5NzZmMTJmZGEyOTk3NGZhZDhlIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMTYg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBucnd0
OiBhbGxvdyBmb3IgbXVsdGlwbGUgaHR0cCBzaGFyZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzMTE2CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyLnB5OgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfdW5pdHRl
c3QucHk6CisKKzIwMTEtMDYtMjEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgbnJ3dDog
bWFrZSBzaGFyZGluZyB0ZXN0cyBuZWVkaW5nIGxvY2tzIGxlc3MgaGFyZC1jb2RlZAogICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjMxMTIKIApkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
bWFuYWdlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL21hbmFnZXIucHkKaW5kZXggOWJjYjU0NDNkY2I3NGQ5ZDQ1NDAyNWIyYzc1ZDNkOWEx
MmY2MDkxNy4uMDZlYjg3ZTM3YjA0ZTBhYjNlMDA5YmNmMDllYzU0N2ZkYWI3NGNhMiAxMDA2NDQK
LS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
bWFuYWdlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9tYW5hZ2VyLnB5CkBAIC01NDcsMzcgKzU0Nyw1NyBAQCBjbGFzcyBNYW5hZ2Vy
OgogICAgICAgICAgICAgVHdvIGxpc3RzIG9mIGxpc3RzIG9mIFRlc3RJbnB1dCBvYmplY3RzLiBU
aGUgZmlyc3QgbGlzdCBzaG91bGQKICAgICAgICAgICAgIG9ubHkgYmUgcnVuIHVuZGVyIHRoZSBz
ZXJ2ZXIgbG9jaywgdGhlIHNlY29uZCBjYW4gYmUgcnVuIHdoZW5ldmVyLgogICAgICAgICAiIiIK
LSAgICAgICAgIyBGSVhNRTogV2Ugc3RpbGwgbmVlZCB0byBzdXBwb3J0IG11bHRpcGxlIGxvY2tl
ZCBzaGFyZHMuCiAgICAgICAgIGxvY2tlZF9zaGFyZHMgPSBbXQogICAgICAgICB1bmxvY2tlZF9z
aGFyZHMgPSBbXQogICAgICAgICB0ZXN0c190b19odHRwX2xvY2sgPSBbXQogICAgICAgICBpZiBu
b3QgdXNlX3JlYWxfc2hhcmRzOgogICAgICAgICAgICAgZm9yIHRlc3RfZmlsZSBpbiB0ZXN0X2Zp
bGVzOgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSA9IHNlbGYuX2dldF9kaXJfZm9yX3Rlc3Rf
ZmlsZSh0ZXN0X2ZpbGUpCiAgICAgICAgICAgICAgICAgdGVzdF9pbnB1dCA9IHNlbGYuX2dldF90
ZXN0X2lucHV0X2Zvcl9maWxlKHRlc3RfZmlsZSkKICAgICAgICAgICAgICAgICBpZiBzZWxmLl90
ZXN0X3JlcXVpcmVzX2xvY2sodGVzdF9maWxlKToKLSAgICAgICAgICAgICAgICAgICAgdGVzdHNf
dG9faHR0cF9sb2NrLmFwcGVuZCh0ZXN0X2lucHV0KQorICAgICAgICAgICAgICAgICAgICBsb2Nr
ZWRfc2hhcmRzLmFwcGVuZCgoZGlyZWN0b3J5LCBbdGVzdF9pbnB1dF0pKQogICAgICAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHVubG9ja2VkX3NoYXJkcy5hcHBlbmQoKCIu
IiwgW3Rlc3RfaW5wdXRdKSkKKyAgICAgICAgICAgICAgICAgICAgdW5sb2NrZWRfc2hhcmRzLmFw
cGVuZCgoZGlyZWN0b3J5LCBbdGVzdF9pbnB1dF0pKQogICAgICAgICBlbHNlOgogICAgICAgICAg
ICAgdGVzdHNfYnlfZGlyID0ge30KICAgICAgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gdGVzdF9m
aWxlczoKICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgPSBzZWxmLl9nZXRfZGlyX2Zvcl90ZXN0
X2ZpbGUodGVzdF9maWxlKQogICAgICAgICAgICAgICAgIHRlc3RfaW5wdXQgPSBzZWxmLl9nZXRf
dGVzdF9pbnB1dF9mb3JfZmlsZSh0ZXN0X2ZpbGUpCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5f
dGVzdF9yZXF1aXJlc19sb2NrKHRlc3RfZmlsZSk6Ci0gICAgICAgICAgICAgICAgICAgIHRlc3Rz
X3RvX2h0dHBfbG9jay5hcHBlbmQodGVzdF9pbnB1dCkKLSAgICAgICAgICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgICAgICAgICB0ZXN0c19ieV9kaXIuc2V0ZGVmYXVsdChkaXJlY3RvcnksIFtd
KQotICAgICAgICAgICAgICAgICAgICB0ZXN0c19ieV9kaXJbZGlyZWN0b3J5XS5hcHBlbmQodGVz
dF9pbnB1dCkKKyAgICAgICAgICAgICAgICB0ZXN0c19ieV9kaXIuc2V0ZGVmYXVsdChkaXJlY3Rv
cnksIFtdKQorICAgICAgICAgICAgICAgIHRlc3RzX2J5X2RpcltkaXJlY3RvcnldLmFwcGVuZCh0
ZXN0X2lucHV0KQogICAgICAgICAgICAgZm9yIGRpcmVjdG9yeSBpbiB0ZXN0c19ieV9kaXI6CiAg
ICAgICAgICAgICAgICAgdGVzdF9saXN0ID0gdGVzdHNfYnlfZGlyW2RpcmVjdG9yeV0KICAgICAg
ICAgICAgICAgICB0ZXN0X2xpc3RfdHVwbGUgPSAoZGlyZWN0b3J5LCB0ZXN0X2xpc3QpCi0gICAg
ICAgICAgICAgICAgdW5sb2NrZWRfc2hhcmRzLmFwcGVuZCh0ZXN0X2xpc3RfdHVwbGUpCisgICAg
ICAgICAgICAgICAgaWYgc2VsZi5fdGVzdF9yZXF1aXJlc19sb2NrKGRpcmVjdG9yeSk6CisgICAg
ICAgICAgICAgICAgICAgIGxvY2tlZF9zaGFyZHMuYXBwZW5kKHRlc3RfbGlzdF90dXBsZSkKKyAg
ICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB1bmxvY2tlZF9zaGFyZHMu
YXBwZW5kKHRlc3RfbGlzdF90dXBsZSkKIAogICAgICAgICAgICAgIyBTb3J0IHRoZSBzaGFyZHMg
YnkgZGlyZWN0b3J5IG5hbWUuCisgICAgICAgICAgICBsb2NrZWRfc2hhcmRzLnNvcnQobGFtYmRh
IGEsIGI6IGNtcChhWzBdLCBiWzBdKSkKICAgICAgICAgICAgIHVubG9ja2VkX3NoYXJkcy5zb3J0
KGxhbWJkYSBhLCBiOiBjbXAoYVswXSwgYlswXSkpCiAKLSAgICAgICAgaWYgdGVzdHNfdG9faHR0
cF9sb2NrOgotICAgICAgICAgICAgbG9ja2VkX3NoYXJkcy5hcHBlbmQoKCJ0ZXN0c190b19odHRw
X2xvY2siLCB0ZXN0c190b19odHRwX2xvY2spKQorICAgICAgICAgICAgIyBQdXQgYSBjZWlsaW5n
IG9uIHRoZSBudW1iZXIgb2YgbG9ja2VkIHNoYXJkcywgc28gdGhhdCB3ZQorICAgICAgICAgICAg
IyBkb24ndCBoYW1tZXIgdGhlIHNlcnZlcnMgdG9vIGJhZGx5LiBGb3Igbm93IHdlIHdpbGwKKyAg
ICAgICAgICAgICMgYXJiaXRyYXJpbHkgbGltaXQgdGhpcyB0byBubyBtb3JlIHRoYW4gYSBxdWFy
dGVyIG9mIGFsbCB3b3JrZXJzLgorICAgICAgICAgICAgbWF4X2xvY2tlZF9zaGFyZHMgPSBtYXgo
bWF0aC5jZWlsKGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykgLyA0LjApLCAxKQor
ICAgICAgICAgICAgZGlyc19wZXJfbmV3X3NoYXJkID0gbWF0aC5jZWlsKGxlbihsb2NrZWRfc2hh
cmRzKSAvIG1heF9sb2NrZWRfc2hhcmRzICogMS4wKQorICAgICAgICAgICAgbmV3X2xvY2tlZF9z
aGFyZHMgPSBbXQorICAgICAgICAgICAgaSA9IDEKKyAgICAgICAgICAgIGogPSAxCisgICAgICAg
ICAgICB0ZXN0cyA9IFtdCisgICAgICAgICAgICB3aGlsZSBsb2NrZWRfc2hhcmRzOgorICAgICAg
ICAgICAgICAgIHNoYXJkID0gbG9ja2VkX3NoYXJkcy5wb3AoKQorICAgICAgICAgICAgICAgIHRl
c3RzLmV4dGVuZChzaGFyZFsxXSkKKyAgICAgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgICAg
ICAgICBpZiBpID4gZGlyc19wZXJfbmV3X3NoYXJkOgorICAgICAgICAgICAgICAgICAgICBuZXdf
bG9ja2VkX3NoYXJkcy5hcHBlbmQoKCdsb2NrZWRfc2hhcmRfJWQnICUgaiwgdGVzdHMpKQorICAg
ICAgICAgICAgICAgICAgICBpID0gMAorICAgICAgICAgICAgICAgICAgICBqICs9IDEKKyAgICAg
ICAgICAgICAgICAgICAgdGVzdHMgPSBbXQorICAgICAgICAgICAgaWYgdGVzdHM6CisgICAgICAg
ICAgICAgICAgbmV3X2xvY2tlZF9zaGFyZHMuYXBwZW5kKCgnbG9ja2VkX3NoYXJkXyVkJyAlIGos
IHRlc3RzKSkKKyAgICAgICAgICAgIGxvY2tlZF9zaGFyZHMgPSBuZXdfbG9ja2VkX3NoYXJkcwog
CiAgICAgICAgIHJldHVybiAobG9ja2VkX3NoYXJkcywgdW5sb2NrZWRfc2hhcmRzKQogCkBAIC01
ODcsMTUgKzYwNywxNSBAQCBjbGFzcyBNYW5hZ2VyOgogICAgICAgICAgICAgICAgIHJldHVybiBU
cnVlCiAgICAgICAgIHJldHVybiBGYWxzZQogCi0gICAgZGVmIF9udW1fd29ya2VycyhzZWxmLCBu
dW1fc2hhcmRzKToKKyAgICBkZWYgX251bV93b3JrZXJzKHNlbGYsIG51bV9zaGFyZHMsIG51bV9s
b2NrZWRfc2hhcmRzKToKICAgICAgICAgbnVtX3dvcmtlcnMgPSBtaW4oaW50KHNlbGYuX29wdGlv
bnMuY2hpbGRfcHJvY2Vzc2VzKSwgbnVtX3NoYXJkcykKICAgICAgICAgZHJpdmVyX25hbWUgPSBz
ZWxmLl9wb3J0LmRyaXZlcl9uYW1lKCkKICAgICAgICAgaWYgbnVtX3dvcmtlcnMgPT0gMToKICAg
ICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfY29uZmlnKCJSdW5uaW5nIDEgJXMgb3ZlciAl
cyIgJQogICAgICAgICAgICAgICAgIChkcml2ZXJfbmFtZSwgZ3JhbW1hci5wbHVyYWxpemUoJ3No
YXJkJywgbnVtX3NoYXJkcykpKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF9jb25maWcoIlJ1bm5pbmcgJWQgJXNzIGluIHBhcmFsbGVsIG92ZXIgJWQgc2hh
cmRzIiAlCi0gICAgICAgICAgICAgICAgKG51bV93b3JrZXJzLCBkcml2ZXJfbmFtZSwgbnVtX3No
YXJkcykpCisgICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2NvbmZpZygiUnVubmluZyAl
ZCAlc3MgaW4gcGFyYWxsZWwgb3ZlciAlZCBzaGFyZHMgKCVkIGxvY2tlZCkiICUKKyAgICAgICAg
ICAgICAgICAobnVtX3dvcmtlcnMsIGRyaXZlcl9uYW1lLCBudW1fc2hhcmRzLCBudW1fbG9ja2Vk
X3NoYXJkcykpCiAgICAgICAgIHJldHVybiBudW1fd29ya2VycwogCiAgICAgZGVmIF9ydW5fdGVz
dHMoc2VsZiwgZmlsZV9saXN0LCByZXN1bHRfc3VtbWFyeSk6CkBAIC02MzIsNyArNjUyLDcgQEAg
Y2xhc3MgTWFuYWdlcjoKIAogICAgICAgICBhbGxfc2hhcmRzID0gc2VsZi5fbG9ja2VkX3NoYXJk
cyArIHNlbGYuX3VubG9ja2VkX3NoYXJkcwogCi0gICAgICAgIG51bV93b3JrZXJzID0gc2VsZi5f
bnVtX3dvcmtlcnMobGVuKGFsbF9zaGFyZHMpKQorICAgICAgICBudW1fd29ya2VycyA9IHNlbGYu
X251bV93b3JrZXJzKGxlbihhbGxfc2hhcmRzKSwgbGVuKHNlbGYuX2xvY2tlZF9zaGFyZHMpKQog
ICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24gPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuZ2V0KHNl
bGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgd29ya2VyLldvcmtlcikKIApkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFu
YWdlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL21hbmFnZXJfdW5pdHRlc3QucHkKaW5kZXggOWMxYWY4ODU5YTBiZTZkMzFk
ODU0ODI0Njk4YTQ2N2RhMGM3YWU2OS4uZjc5OTQ2OWY0NTAwOGQyMTc2MDgyOTM0MGRkZGFjNDVk
Yzk2MWNiZCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvbWFuYWdlcl91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3VuaXR0ZXN0LnB5CkBA
IC00NSw2ICs0NSw5IEBAIGNsYXNzIE1hbmFnZXJXcmFwcGVyKG1hbmFnZXIuTWFuYWdlcik6CiAK
IGNsYXNzIE1hbmFnZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9zaGFy
ZF90ZXN0cyhzZWxmKToKKyAgICAgICAgIyBGSVhNRTogU2hvdWxkIHByb2JhYmx5IHJlcGxhY2Ug
dGhpcyB3aXRoIG1vcmUgaW50ZXJlc3RpbmcgdGVzdHMKKyAgICAgICAgIyBub3cgdGhhdCB0aGUg
c2hhcmRpbmcgbG9naWMgaXMgdG90YWxseSBkaWZmZXJlbnQuCisKICAgICAgICAgIyBUZXN0IHRo
YXQgX3NoYXJkX3Rlc3RzIGluIHRlc3RfcnVubmVyLlRlc3RSdW5uZXIgcmVhbGx5CiAgICAgICAg
ICMgcHV0IHRoZSBodHRwIHRlc3RzIGZpcnN0IGluIHRoZSBxdWV1ZS4KICAgICAgICAgcG9ydCA9
IE1vY2soKQpAQCAtNTIsMTAgKzU1LDEwIEBAIGNsYXNzIE1hbmFnZXJUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICAgICAgbWFuYWdlciA9IE1hbmFnZXJXcmFwcGVyKHBvcnQ9cG9ydCwgb3B0
aW9ucz1Nb2NrKCksIHByaW50ZXI9TW9jaygpKQogCiAgICAgICAgIHRlc3RfbGlzdCA9IFsKLSAg
ICAgICAgICAiTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VuaWNvZGUuaHRtIiwKKyAgICAg
ICAgICAiTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvdW5pY29kZS5odG0i
LAogICAgICAgICAgICJMYXlvdXRUZXN0cy9hbmltYXRpb25zL2tleWZyYW1lcy5odG1sIiwKICAg
ICAgICAgICAiTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS92aWV3LXNvdXJjZS1uby1y
ZWZyZXNoLmh0bWwiLAotICAgICAgICAgICJMYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvd2Vi
c29ja2V0LXByb3RvY29sLWlnbm9yZWQuaHRtbCIsCisgICAgICAgICAgIkxheW91dFRlc3RzL2h0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3dlYnNvY2tldC1wcm90b2NvbC1pZ25vcmVkLmh0bWwi
LAogICAgICAgICAgICJMYXlvdXRUZXN0cy9mYXN0L2Nzcy9kaXNwbGF5LW5vbmUtaW5saW5lLXN0
eWxlLWNoYW5nZS1jcmFzaC5odG1sIiwKICAgICAgICAgICAiTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy94bWxodHRwcmVxdWVzdC9zdXBwb3J0ZWQteG1sLWNvbnRlbnQtdHlwZXMuaHRtbCIsCiAgICAg
ICAgICAgIkxheW91dFRlc3RzL2RvbS9odG1sL2xldmVsMi9odG1sL0hUTUxBbmNob3JFbGVtZW50
MDMuaHRtbCIsCkBAIC02MywyMCArNjYsMTMgQEAgY2xhc3MgTWFuYWdlclRlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgogICAgICAgICAgICJMYXlvdXRUZXN0cy9kb20vaHRtbC9sZXZlbDIvaHRtbC9I
VE1MQW5jaG9yRWxlbWVudDA2Lmh0bWwiLAogICAgICAgICBdCiAKLSAgICAgICAgZXhwZWN0ZWRf
dGVzdHNfdG9faHR0cF9sb2NrID0gc2V0KFsKLSAgICAgICAgICAnTGF5b3V0VGVzdHMvd2Vic29j
a2V0L3Rlc3RzL3VuaWNvZGUuaHRtJywKLSAgICAgICAgICAnTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9zZWN1cml0eS92aWV3LXNvdXJjZS1uby1yZWZyZXNoLmh0bWwnLAotICAgICAgICAgICdMYXlv
dXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvd2Vic29ja2V0LXByb3RvY29sLWlnbm9yZWQuaHRtbCcs
Ci0gICAgICAgICAgJ0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3VwcG9y
dGVkLXhtbC1jb250ZW50LXR5cGVzLmh0bWwnLAotICAgICAgICBdKQotCiAgICAgICAgIHNpbmds
ZV9sb2NrZWQsIHNpbmdsZV91bmxvY2tlZCA9IG1hbmFnZXIuX3NoYXJkX3Rlc3RzKHRlc3RfbGlz
dCwgRmFsc2UpCiAgICAgICAgIG11bHRpX2xvY2tlZCwgbXVsdGlfdW5sb2NrZWQgPSBtYW5hZ2Vy
Ll9zaGFyZF90ZXN0cyh0ZXN0X2xpc3QsIFRydWUpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgidGVzdHNfdG9faHR0cF9sb2NrIiwgc2luZ2xlX2xvY2tlZFswXVswXSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChleHBlY3RlZF90ZXN0c190b19odHRwX2xvY2ssIHNldChzaW5nbGVfbG9j
a2VkWzBdWzFdKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidGVzdHNfdG9faHR0cF9sb2Nr
IiwgbXVsdGlfbG9ja2VkWzBdWzBdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVk
X3Rlc3RzX3RvX2h0dHBfbG9jaywgc2V0KG11bHRpX2xvY2tlZFswXVsxXSkpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoImh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzIiwgc2luZ2xlX2xvY2tl
ZFswXVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoWydMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3dlYnNvY2tldC90ZXN0cy91bmljb2RlLmh0bSddKSwgc2V0KHNpbmdsZV9sb2NrZWRb
MF1bMV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJodHRwL3Rlc3RzL3NlY3VyaXR5Iiwg
bXVsdGlfbG9ja2VkWzBdWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChbJ0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvdmlldy1zb3VyY2Utbm8tcmVmcmVzaC5odG1sJ10p
LCBzZXQobXVsdGlfbG9ja2VkWzBdWzFdKSkKIAogCiBjbGFzcyBOYXR1cmFsQ29tcGFyZVRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98302</attachid>
            <date>2011-06-22 20:04:50 -0700</date>
            <delta_ts>2011-06-24 16:31:08 -0700</delta_ts>
            <desc>clean up logic, add tests</desc>
            <filename>bug-63116-20110622200449.patch</filename>
            <type>text/plain</type>
            <size>17145</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODkzNzMKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiZTFjN2ZiNGU1MGM4MDI3NTVkYTMyM2M2MmU5Y2RlYjc2
ZDVhNjY3Li5iNjY1NDA5YTYwOTExMDE5OGJlNDVhYzk5MGM1OWRhMjIyNmNjNTcwIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMzQg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBucnd0
OiBhbGxvdyBmb3IgbXVsdGlwbGUgaHR0cCBzaGFyZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzMTE2CisKKyAgICAgICAgVGhpcyBtb2RpZmllcyB0
aGUgc2hhcmRpbmcgbG9naWMgdG8gc3VwcG9ydCBtdWx0aXBsZSBodHRwCisgICAgICAgIHNoYXJk
cywgYnV0IGZvciBub3cgd2UgY2xhbXAgdG8gb25lIHNoYXJkIHVudGlsIHdlIGNhbiB0ZXN0Cisg
ICAgICAgIHBlcmYgaW1wYWN0IGFuZCBmbGFraW5lc3MgaW1wYWN0LgorCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlci5weToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5h
Z2VyX3VuaXR0ZXN0LnB5OgorCisyMDExLTA2LTIxICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIG5yd3Q6IG1ha2Ugc2hhcmRpbmcgdGVzdHMgbmVlZGluZyBsb2NrcyBsZXNzIGhhcmQtY29k
ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzMTEy
CisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxzbyBjaGFuZ2VzIHRoZSBtYW5hZ2VyIGxvZ2ljIHNv
IHRoYXQgaXQgd2lsbAorICAgICAgICBkcm9wIHRoZSBzZXJ2ZXIgbG9jayBhcyBzb29uIGFzIGFs
bCBvZiB0aGUgc2hhcmRzIHJlcXVpcmluZworICAgICAgICB0aGUgbG9jayBoYXZlIGNvbXBsZXRl
ZC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL21hbmFnZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvbWFuYWdlcl91bml0dGVzdC5weToKKworMjAxMS0wNi0yMSAgRGlyayBQ
cmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKwogICAgICAgICBucnd0OiBtYWtlIHNoYXJkaW5nIHRlc3RzIG5lZWRpbmcg
bG9ja3MgbGVzcyBoYXJkLWNvZGVkCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02MzExMgogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlci5weQppbmRleCBlNTZj
YTVhYWYzZWE5ZDg0YmExMjlkZjc2NDIyYjc0NTBkN2Y4NWUyLi5mMTljM2ZkY2NmMDM2MTc3OGE2
ZjJmNzQxZjlhOWI3MTAyYjc5MGYzIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyLnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXIucHkKQEAgLTUz
Myw1MSArNTMzLDExNyBAQCBjbGFzcyBNYW5hZ2VyOgogICAgICAgICByZXR1cm4gc2VsZi5fZXhw
ZWN0YXRpb25zLmhhc19tb2RpZmllcih0ZXN0X2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLlNMT1cpCiAKLSAgICBk
ZWYgX3NoYXJkX3Rlc3RzKHNlbGYsIHRlc3RfZmlsZXMsIHVzZV9yZWFsX3NoYXJkcyk6CisgICAg
ZGVmIF9zaGFyZF90ZXN0cyhzZWxmLCB0ZXN0X2ZpbGVzLCBudW1fd29ya2VycywgZnVsbHlfcGFy
YWxsZWwpOgogICAgICAgICAiIiJHcm91cHMgdGVzdHMgaW50byBiYXRjaGVzLgogICAgICAgICBU
aGlzIGhlbHBzIGVuc3VyZSB0aGF0IHRlc3RzIHRoYXQgZGVwZW5kIG9uIGVhY2ggb3RoZXIgKGFr
YSBiYWQgdGVzdHMhKQogICAgICAgICBjb250aW51ZSB0byBydW4gdG9nZXRoZXIgYXMgbW9zdCBj
cm9zcy10ZXN0cyBkZXBlbmRlbmNpZXMgdGVuZCB0bwotICAgICAgICBvY2N1ciB3aXRoaW4gdGhl
IHNhbWUgZGlyZWN0b3J5LiBJZiB1c2VfcmVhbF9zaGFyZHMgaXMgRmFsc2UsIHdlCi0gICAgICAg
IHB1dCBlYWNoIChub24tSFRUUC93ZWJzb2NrZXQpIHRlc3QgaW50byBpdHMgb3duIHNoYXJkIGZv
ciBtYXhpbXVtCi0gICAgICAgIGNvbmN1cnJlbmN5IGluc3RlYWQgb2YgdHJ5aW5nIHRvIGRvIGFu
eSBzb3J0IG9mIHJlYWwgc2hhcmRpbmcuCi0KKyAgICAgICAgb2NjdXIgd2l0aGluIHRoZSBzYW1l
IGRpcmVjdG9yeS4KICAgICAgICAgUmV0dXJuOgogICAgICAgICAgICAgVHdvIGxpc3RzIG9mIGxp
c3RzIG9mIFRlc3RJbnB1dCBvYmplY3RzLiBUaGUgZmlyc3QgbGlzdCBzaG91bGQKICAgICAgICAg
ICAgIG9ubHkgYmUgcnVuIHVuZGVyIHRoZSBzZXJ2ZXIgbG9jaywgdGhlIHNlY29uZCBjYW4gYmUg
cnVuIHdoZW5ldmVyLgogICAgICAgICAiIiIKLSAgICAgICAgIyBGSVhNRTogV2Ugc3RpbGwgbmVl
ZCB0byBzdXBwb3J0IG11bHRpcGxlIGxvY2tlZCBzaGFyZHMuCisKKyAgICAgICAgIyBGSVhNRTog
TW92ZSBhbGwgb2YgdGhlIHNoYXJkaW5nIGxvZ2ljIG91dCBvZiBtYW5hZ2VyIGludG8gaXRzCisg
ICAgICAgICMgb3duIGNsYXNzIG9yIG1vZHVsZS4gQ29uc2lkZXIgZ3JvdXBpbmcgaXQgd2l0aCB0
aGUgY2h1bmtpbmcgbG9naWMKKyAgICAgICAgIyBpbiBwcmVwYXJlX2xpc3RzIGFzIHdlbGwuCisg
ICAgICAgIGlmIG51bV93b3JrZXJzID09IDE6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc2hh
cmRfaW5fdHdvKHRlc3RfZmlsZXMpCisgICAgICAgIGVsaWYgZnVsbHlfcGFyYWxsZWw6CisgICAg
ICAgICAgICByZXR1cm4gc2VsZi5fc2hhcmRfZXZlcnlfZmlsZSh0ZXN0X2ZpbGVzKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NoYXJkX2J5X2RpcmVjdG9yeSh0ZXN0
X2ZpbGVzLCBudW1fd29ya2VycykKKworICAgIGRlZiBfc2hhcmRfaW5fdHdvKHNlbGYsIHRlc3Rf
ZmlsZXMpOgorICAgICAgICAiIiJSZXR1cm5zIHR3byBzaGFyZHMsIG9uZSB3aXRoIGFsbCB0aGUg
dGVzdHMgcmVxdWlyaW5nIGEgbG9jayBhbmQgb25lIHdpdGggdGhlIHJlc3QuCisKKyAgICAgICAg
VGhpcyBpcyB1c2VkIHdoZW4gdGhlcmUncyBvbmx5IG9uZSB3b3JrZXIsIHRvIG1pbmltaXplIHRo
ZSBwZXItc2hhcmQgb3ZlcmhlYWQuIiIiCisgICAgICAgIGxvY2tlZF9pbnB1dHMgPSBbXQorICAg
ICAgICB1bmxvY2tlZF9pbnB1dHMgPSBbXQorICAgICAgICBmb3IgdGVzdF9maWxlIGluIHRlc3Rf
ZmlsZXM6CisgICAgICAgICAgICB0ZXN0X2lucHV0ID0gc2VsZi5fZ2V0X3Rlc3RfaW5wdXRfZm9y
X2ZpbGUodGVzdF9maWxlKQorICAgICAgICAgICAgaWYgc2VsZi5fdGVzdF9yZXF1aXJlc19sb2Nr
KHRlc3RfZmlsZSk6CisgICAgICAgICAgICAgICAgbG9ja2VkX2lucHV0cy5hcHBlbmQodGVzdF9p
bnB1dCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdW5sb2NrZWRfaW5wdXRz
LmFwcGVuZCh0ZXN0X2lucHV0KQorICAgICAgICByZXR1cm4gKFsoJ2xvY2tlZF90ZXN0cycsIGxv
Y2tlZF9pbnB1dHMpXSwgWygndW5sb2NrZWRfdGVzdHMnLCB1bmxvY2tlZF9pbnB1dHMpXSkKKwor
ICAgIGRlZiBfc2hhcmRfZXZlcnlfZmlsZShzZWxmLCB0ZXN0X2ZpbGVzKToKKyAgICAgICAgIiIi
UmV0dXJucyB0d28gbGlzdHMgb2Ygc2hhcmRzLCBlYWNoIHNoYXJkIGNvbnRhaW5pbmcgYSBzaW5n
bGUgdGVzdCBmaWxlLgorCisgICAgICAgIFRoaXMgbW9kZSBnZXRzIG1heGltYWwgcGFyYWxsZWxp
c20gYXQgdGhlIGNvc3Qgb2YgbXVjaCBoaWdoZXIgZmxha2luZXNzLiIiIgogICAgICAgICBsb2Nr
ZWRfc2hhcmRzID0gW10KICAgICAgICAgdW5sb2NrZWRfc2hhcmRzID0gW10KLSAgICAgICAgdGVz
dHNfdG9faHR0cF9sb2NrID0gW10KLSAgICAgICAgaWYgbm90IHVzZV9yZWFsX3NoYXJkczoKLSAg
ICAgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gdGVzdF9maWxlczoKLSAgICAgICAgICAgICAgICB0
ZXN0X2lucHV0ID0gc2VsZi5fZ2V0X3Rlc3RfaW5wdXRfZm9yX2ZpbGUodGVzdF9maWxlKQotICAg
ICAgICAgICAgICAgIGlmIHNlbGYuX3Rlc3RfcmVxdWlyZXNfbG9jayh0ZXN0X2ZpbGUpOgotICAg
ICAgICAgICAgICAgICAgICB0ZXN0c190b19odHRwX2xvY2suYXBwZW5kKHRlc3RfaW5wdXQpCi0g
ICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgdW5sb2NrZWRfc2hhcmRz
LmFwcGVuZCgoIi4iLCBbdGVzdF9pbnB1dF0pKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAg
dGVzdHNfYnlfZGlyID0ge30KLSAgICAgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gdGVzdF9maWxl
czoKLSAgICAgICAgICAgICAgICBkaXJlY3RvcnkgPSBzZWxmLl9nZXRfZGlyX2Zvcl90ZXN0X2Zp
bGUodGVzdF9maWxlKQotICAgICAgICAgICAgICAgIHRlc3RfaW5wdXQgPSBzZWxmLl9nZXRfdGVz
dF9pbnB1dF9mb3JfZmlsZSh0ZXN0X2ZpbGUpCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5fdGVz
dF9yZXF1aXJlc19sb2NrKHRlc3RfZmlsZSk6Ci0gICAgICAgICAgICAgICAgICAgIHRlc3RzX3Rv
X2h0dHBfbG9jay5hcHBlbmQodGVzdF9pbnB1dCkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgICAgICB0ZXN0c19ieV9kaXIuc2V0ZGVmYXVsdChkaXJlY3RvcnksIFtdKQot
ICAgICAgICAgICAgICAgICAgICB0ZXN0c19ieV9kaXJbZGlyZWN0b3J5XS5hcHBlbmQodGVzdF9p
bnB1dCkKLSAgICAgICAgICAgIGZvciBkaXJlY3RvcnkgaW4gdGVzdHNfYnlfZGlyOgotICAgICAg
ICAgICAgICAgIHRlc3RfbGlzdCA9IHRlc3RzX2J5X2RpcltkaXJlY3RvcnldCi0gICAgICAgICAg
ICAgICAgdGVzdF9saXN0X3R1cGxlID0gKGRpcmVjdG9yeSwgdGVzdF9saXN0KQotICAgICAgICAg
ICAgICAgIHVubG9ja2VkX3NoYXJkcy5hcHBlbmQodGVzdF9saXN0X3R1cGxlKQorICAgICAgICBm
b3IgdGVzdF9maWxlIGluIHRlc3RfZmlsZXM6CisgICAgICAgICAgICB0ZXN0X2lucHV0ID0gc2Vs
Zi5fZ2V0X3Rlc3RfaW5wdXRfZm9yX2ZpbGUodGVzdF9maWxlKQorCisgICAgICAgICAgICAjIE5v
dGUgdGhhdCB3ZSB1c2UgYSAnLicgZm9yIHRoZSBzaGFyZCBuYW1lOyB0aGUgbmFtZSBkb2Vzbid0
IHJlYWxseQorICAgICAgICAgICAgIyBtYXR0ZXIsIGFuZCB0aGUgb25seSBvdGhlciBtZWFuaW5n
ZnVsIHZhbHVlIHdvdWxkIGJlIHRoZSBmaWxlbmFtZSwKKyAgICAgICAgICAgICMgd2hpY2ggd291
bGQgYmUgcmVhbGx5IHJlZHVuZGFudC4KKyAgICAgICAgICAgIGlmIHNlbGYuX3Rlc3RfcmVxdWly
ZXNfbG9jayh0ZXN0X2ZpbGUpOgorICAgICAgICAgICAgICAgIGxvY2tlZF9zaGFyZHMuYXBwZW5k
KCgnLicsIFt0ZXN0X2lucHV0XSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IHVubG9ja2VkX3NoYXJkcy5hcHBlbmQoKCcuJywgW3Rlc3RfaW5wdXRdKSkKIAotICAgICAgICAg
ICAgIyBTb3J0IHRoZSBzaGFyZHMgYnkgZGlyZWN0b3J5IG5hbWUuCi0gICAgICAgICAgICB1bmxv
Y2tlZF9zaGFyZHMuc29ydChsYW1iZGEgYSwgYjogY21wKGFbMF0sIGJbMF0pKQorICAgICAgICBy
ZXR1cm4gbG9ja2VkX3NoYXJkcywgdW5sb2NrZWRfc2hhcmRzCiAKLSAgICAgICAgaWYgdGVzdHNf
dG9faHR0cF9sb2NrOgotICAgICAgICAgICAgbG9ja2VkX3NoYXJkcyA9IFsoInRlc3RzX3RvX2h0
dHBfbG9jayIsIHRlc3RzX3RvX2h0dHBfbG9jayldCisgICAgZGVmIF9zaGFyZF9ieV9kaXJlY3Rv
cnkoc2VsZiwgdGVzdF9maWxlcywgbnVtX3dvcmtlcnMpOgorICAgICAgICAiIiJSZXR1cm5zIHR3
byBsaXN0cyBvZiBzaGFyZHMsIGVhY2ggc2hhcmQgY29udGFpbmluZyBhbGwgdGhlIGZpbGVzIGlu
IGEgZGlyZWN0b3J5LgogCi0gICAgICAgIHJldHVybiAobG9ja2VkX3NoYXJkcywgdW5sb2NrZWRf
c2hhcmRzKQorICAgICAgICBUaGlzIGlzIHRoZSBkZWZhdWx0IG1vZGUsIGFuZCBnZXRzIGFzIG11
Y2ggcGFyYWxsZWxpc20gYXMgd2UgY2FuIHdoaWxlCisgICAgICAgIG1pbmltaXppbmcgZmxha2lu
ZXNzIGNhdXNlZCBieSBpbnRlci10ZXN0IGRlcGVuZGVuY2llcy4iIiIKKyAgICAgICAgbG9ja2Vk
X3NoYXJkcyA9IFtdCisgICAgICAgIHVubG9ja2VkX3NoYXJkcyA9IFtdCisgICAgICAgIHRlc3Rz
X2J5X2RpciA9IHt9CisgICAgICAgICMgRklYTUU6IEdpdmVuIHRoYXQgdGhlIHRlc3RzIGFyZSBh
bHJlYWR5IHNvcnRlZCBieSBkaXJlY3RvcnksCisgICAgICAgICMgd2UgY2FuIHByb2JhYmx5IHJl
d3JpdGUgdGhpcyB0byBiZSBjbGVhcmVyIGFuZCBmYXN0ZXIuCisgICAgICAgIGZvciB0ZXN0X2Zp
bGUgaW4gdGVzdF9maWxlczoKKyAgICAgICAgICAgIGRpcmVjdG9yeSA9IHNlbGYuX2dldF9kaXJf
Zm9yX3Rlc3RfZmlsZSh0ZXN0X2ZpbGUpCisgICAgICAgICAgICB0ZXN0X2lucHV0ID0gc2VsZi5f
Z2V0X3Rlc3RfaW5wdXRfZm9yX2ZpbGUodGVzdF9maWxlKQorICAgICAgICAgICAgdGVzdHNfYnlf
ZGlyLnNldGRlZmF1bHQoZGlyZWN0b3J5LCBbXSkKKyAgICAgICAgICAgIHRlc3RzX2J5X2Rpcltk
aXJlY3RvcnldLmFwcGVuZCh0ZXN0X2lucHV0KQorCisgICAgICAgIGZvciBkaXJlY3RvcnkgaW4g
dGVzdHNfYnlfZGlyOgorICAgICAgICAgICAgdGVzdF9saXN0ID0gdGVzdHNfYnlfZGlyW2RpcmVj
dG9yeV0KKyAgICAgICAgICAgIHRlc3RfbGlzdF90dXBsZSA9IChkaXJlY3RvcnksIHRlc3RfbGlz
dCkKKyAgICAgICAgICAgIGlmIHNlbGYuX3Rlc3RfcmVxdWlyZXNfbG9jayhkaXJlY3RvcnkpOgor
ICAgICAgICAgICAgICAgIGxvY2tlZF9zaGFyZHMuYXBwZW5kKHRlc3RfbGlzdF90dXBsZSkKKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdW5sb2NrZWRfc2hhcmRzLmFwcGVuZCh0
ZXN0X2xpc3RfdHVwbGUpCisKKyAgICAgICAgIyBTb3J0IHRoZSBzaGFyZHMgYnkgZGlyZWN0b3J5
IG5hbWUuCisgICAgICAgIGxvY2tlZF9zaGFyZHMuc29ydChsYW1iZGEgYSwgYjogY21wKGFbMF0s
IGJbMF0pKQorICAgICAgICB1bmxvY2tlZF9zaGFyZHMuc29ydChsYW1iZGEgYSwgYjogY21wKGFb
MF0sIGJbMF0pKQorCisgICAgICAgIHJldHVybiAoc2VsZi5fcmVzaXplX3NoYXJkcyhsb2NrZWRf
c2hhcmRzLCBzZWxmLl9tYXhfbG9ja2VkX3NoYXJkcyhudW1fd29ya2VycykpLCB1bmxvY2tlZF9z
aGFyZHMpCisKKyAgICBkZWYgX21heF9sb2NrZWRfc2hhcmRzKHNlbGYsIG51bV93b3JrZXJzKToK
KyAgICAgICAgIyBQdXQgYSBjZWlsaW5nIG9uIHRoZSBudW1iZXIgb2YgbG9ja2VkIHNoYXJkcywg
c28gdGhhdCB3ZQorICAgICAgICAjIGRvbid0IGhhbW1lciB0aGUgc2VydmVycyB0b28gYmFkbHku
CisKKyAgICAgICAgIyBGSVhNRTogRm9yIG5vdywgbGltaXQgdG8gb25lIHNoYXJkLiBBZnRlciB0
ZXN0aW5nIHRvIG1ha2Ugc3VyZSB3ZQorICAgICAgICAjIGNhbiBoYW5kbGUgbXVsdGlwbGUgc2hh
cmRzLCB3ZSBzaG91bGQgcHJvYmFibHkgZG8gc29tZXRoaW5nIGxpa2UKKyAgICAgICAgIyBsaW1p
dCB0aGlzIHRvIG5vIG1vcmUgdGhhbiBhIHF1YXJ0ZXIgb2YgYWxsIHdvcmtlcnMsIGUuZy46Cisg
ICAgICAgICMgcmV0dXJuIG1heChtYXRoLmNlaWwobnVtX3dvcmtlcnMgLyA0LjApLCAxKQorICAg
ICAgICByZXR1cm4gMQorCisgICAgZGVmIF9yZXNpemVfc2hhcmRzKHNlbGYsIHNoYXJkcywgbWF4
X3NoYXJkcyk6CisgICAgICAgIGRpcnNfcGVyX25ld19zaGFyZCA9IG1hdGguY2VpbChsZW4oc2hh
cmRzKSAvIG1heF9zaGFyZHMgKiAxLjApCisgICAgICAgIG5ld19zaGFyZHMgPSBbXQorICAgICAg
ICBpID0gMQorICAgICAgICBqID0gMQorICAgICAgICB0ZXN0cyA9IFtdCisgICAgICAgIHdoaWxl
IHNoYXJkczoKKyAgICAgICAgICAgIHNoYXJkID0gc2hhcmRzLnBvcCgpCisgICAgICAgICAgICB0
ZXN0cy5leHRlbmQoc2hhcmRbMV0pCisgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgICAgIGlm
IGkgPiBkaXJzX3Blcl9uZXdfc2hhcmQ6CisgICAgICAgICAgICAgICAgbmV3X3NoYXJkcy5hcHBl
bmQoKCdsb2NrZWRfc2hhcmRfJWQnICUgaiwgdGVzdHMpKQorICAgICAgICAgICAgICAgIGkgPSAw
CisgICAgICAgICAgICAgICAgaiArPSAxCisgICAgICAgICAgICAgICAgdGVzdHMgPSBbXQorICAg
ICAgICBpZiB0ZXN0czoKKyAgICAgICAgICAgIG5ld19zaGFyZHMuYXBwZW5kKCgnbG9ja2VkX3No
YXJkXyVkJyAlIGosIHRlc3RzKSkKKyAgICAgICAgcmV0dXJuIG5ld19zaGFyZHMKIAogICAgIGRl
ZiBfY29udGFpbnNfdGVzdHMoc2VsZiwgc3ViZGlyKToKICAgICAgICAgZm9yIHRlc3RfZmlsZSBp
biBzZWxmLl90ZXN0X2ZpbGVzOgpAQCAtNTg1LDE2ICs2NTEsMTQgQEAgY2xhc3MgTWFuYWdlcjoK
ICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICByZXR1cm4gRmFsc2UKIAotICAg
IGRlZiBfbnVtX3dvcmtlcnMoc2VsZiwgbnVtX3NoYXJkcyk6Ci0gICAgICAgIG51bV93b3JrZXJz
ID0gbWluKGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyksIG51bV9zaGFyZHMpCisg
ICAgZGVmIF9sb2dfbnVtX3dvcmtlcnMoc2VsZiwgbnVtX3dvcmtlcnMsIG51bV9zaGFyZHMsIG51
bV9sb2NrZWRfc2hhcmRzKToKICAgICAgICAgZHJpdmVyX25hbWUgPSBzZWxmLl9wb3J0LmRyaXZl
cl9uYW1lKCkKICAgICAgICAgaWYgbnVtX3dvcmtlcnMgPT0gMToKICAgICAgICAgICAgIHNlbGYu
X3ByaW50ZXIucHJpbnRfY29uZmlnKCJSdW5uaW5nIDEgJXMgb3ZlciAlcyIgJQogICAgICAgICAg
ICAgICAgIChkcml2ZXJfbmFtZSwgZ3JhbW1hci5wbHVyYWxpemUoJ3NoYXJkJywgbnVtX3NoYXJk
cykpKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9jb25m
aWcoIlJ1bm5pbmcgJWQgJXNzIGluIHBhcmFsbGVsIG92ZXIgJWQgc2hhcmRzIiAlCi0gICAgICAg
ICAgICAgICAgKG51bV93b3JrZXJzLCBkcml2ZXJfbmFtZSwgbnVtX3NoYXJkcykpCi0gICAgICAg
IHJldHVybiBudW1fd29ya2VycworICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9jb25m
aWcoIlJ1bm5pbmcgJWQgJXNzIGluIHBhcmFsbGVsIG92ZXIgJWQgc2hhcmRzICglZCBsb2NrZWQp
IiAlCisgICAgICAgICAgICAgICAgKG51bV93b3JrZXJzLCBkcml2ZXJfbmFtZSwgbnVtX3NoYXJk
cywgbnVtX2xvY2tlZF9zaGFyZHMpKQogCiAgICAgZGVmIF9ydW5fdGVzdHMoc2VsZiwgZmlsZV9s
aXN0LCByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgICIiIlJ1bnMgdGhlIHRlc3RzIGluIHRoZSBm
aWxlX2xpc3QuCkBAIC02MjMsNyArNjg3LDcgQEAgY2xhc3MgTWFuYWdlcjoKIAogICAgICAgICBz
ZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU2hhcmRpbmcgdGVzdHMgLi4uJykKICAgICAgICAg
bG9ja2VkX3NoYXJkcywgdW5sb2NrZWRfc2hhcmRzID0gc2VsZi5fc2hhcmRfdGVzdHMoZmlsZV9s
aXN0LAotICAgICAgICAgICAgaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSA+IDEg
YW5kIG5vdCBzZWxmLl9vcHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCkKKyAgICAg
ICAgICAgaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSwgc2VsZi5fb3B0aW9ucy5l
eHBlcmltZW50YWxfZnVsbHlfcGFyYWxsZWwpCiAKICAgICAgICAgIyBGSVhNRTogV2UgZG9uJ3Qg
aGF2ZSBhIGdvb2Qgd2F5IHRvIGNvb3JkaW5hdGUgdGhlIHdvcmtlcnMgc28gdGhhdAogICAgICAg
ICAjIHRoZXkgZG9uJ3QgdHJ5IHRvIHJ1biB0aGUgc2hhcmRzIHRoYXQgbmVlZCBhIGxvY2sgaWYg
d2UgZG9uJ3QgYWN0dWFsbHkKQEAgLTYzOCw3ICs3MDIsOSBAQCBjbGFzcyBNYW5hZ2VyOgogICAg
ICAgICBpZiBsb2NrZWRfc2hhcmRzOgogICAgICAgICAgICAgc2VsZi5zdGFydF9zZXJ2ZXJzX3dp
dGhfbG9jaygpCiAKLSAgICAgICAgbnVtX3dvcmtlcnMgPSBzZWxmLl9udW1fd29ya2VycyhsZW4o
YWxsX3NoYXJkcykpCisgICAgICAgIG51bV93b3JrZXJzID0gbWluKGludChzZWxmLl9vcHRpb25z
LmNoaWxkX3Byb2Nlc3NlcyksIGxlbihhbGxfc2hhcmRzKSkKKyAgICAgICAgc2VsZi5fbG9nX251
bV93b3JrZXJzKG51bV93b3JrZXJzLCBsZW4oYWxsX3NoYXJkcyksIGxlbihsb2NrZWRfc2hhcmRz
KSkKKwogICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24gPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIu
Z2V0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgd29ya2VyLldvcmtlcikKIApkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvbWFuYWdlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfdW5pdHRlc3QucHkKaW5kZXggOWMxYWY4ODU5YTBi
ZTZkMzFkODU0ODI0Njk4YTQ2N2RhMGM3YWU2OS4uZmM2MmU4ZGY2NjJiYjNiZGJhYzdiZmM0NDZj
OTg3ZDIxOGYyZDA5ZiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3VuaXR0ZXN0
LnB5CkBAIC00Myw0MCArNDMsNzcgQEAgY2xhc3MgTWFuYWdlcldyYXBwZXIobWFuYWdlci5NYW5h
Z2VyKToKICAgICAgICAgcmV0dXJuIHRlc3RfZmlsZQogCiAKLWNsYXNzIE1hbmFnZXJUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9zaGFyZF90ZXN0cyhzZWxmKToKLSAgICAg
ICAgIyBUZXN0IHRoYXQgX3NoYXJkX3Rlc3RzIGluIHRlc3RfcnVubmVyLlRlc3RSdW5uZXIgcmVh
bGx5Ci0gICAgICAgICMgcHV0IHRoZSBodHRwIHRlc3RzIGZpcnN0IGluIHRoZSBxdWV1ZS4KK2Ns
YXNzIFNoYXJkaW5nVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHRlc3RfbGlzdCA9IFsK
KyAgICAgICAgIkxheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VuaWNvZGUu
aHRtIiwKKyAgICAgICAgIkxheW91dFRlc3RzL2FuaW1hdGlvbnMva2V5ZnJhbWVzLmh0bWwiLAor
ICAgICAgICAiTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS92aWV3LXNvdXJjZS1uby1y
ZWZyZXNoLmh0bWwiLAorICAgICAgICAiTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQv
dGVzdHMvd2Vic29ja2V0LXByb3RvY29sLWlnbm9yZWQuaHRtbCIsCisgICAgICAgICJMYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9kaXNwbGF5LW5vbmUtaW5saW5lLXN0eWxlLWNoYW5nZS1jcmFzaC5odG1s
IiwKKyAgICAgICAgIkxheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3VwcG9y
dGVkLXhtbC1jb250ZW50LXR5cGVzLmh0bWwiLAorICAgICAgICAiTGF5b3V0VGVzdHMvZG9tL2h0
bWwvbGV2ZWwyL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQwMy5odG1sIiwKKyAgICAgICAgIkxheW91
dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzExLjEuNV80LTQtYy0xLmh0bWwiLAorICAg
ICAgICAiTGF5b3V0VGVzdHMvZG9tL2h0bWwvbGV2ZWwyL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQw
Ni5odG1sIiwKKyAgICBdCisKKyAgICBkZWYgZ2V0X3NoYXJkcyhzZWxmLCBudW1fd29ya2Vycywg
ZnVsbHlfcGFyYWxsZWwpOgogICAgICAgICBwb3J0ID0gTW9jaygpCiAgICAgICAgIHBvcnQuX2Zp
bGVzeXN0ZW0gPSBmaWxlc3lzdGVtX21vY2suTW9ja0ZpbGVTeXN0ZW0oKQotICAgICAgICBtYW5h
Z2VyID0gTWFuYWdlcldyYXBwZXIocG9ydD1wb3J0LCBvcHRpb25zPU1vY2soKSwgcHJpbnRlcj1N
b2NrKCkpCi0KLSAgICAgICAgdGVzdF9saXN0ID0gWwotICAgICAgICAgICJMYXlvdXRUZXN0cy93
ZWJzb2NrZXQvdGVzdHMvdW5pY29kZS5odG0iLAotICAgICAgICAgICJMYXlvdXRUZXN0cy9hbmlt
YXRpb25zL2tleWZyYW1lcy5odG1sIiwKLSAgICAgICAgICAiTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9zZWN1cml0eS92aWV3LXNvdXJjZS1uby1yZWZyZXNoLmh0bWwiLAotICAgICAgICAgICJMYXlv
dXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvd2Vic29ja2V0LXByb3RvY29sLWlnbm9yZWQuaHRtbCIs
Ci0gICAgICAgICAgIkxheW91dFRlc3RzL2Zhc3QvY3NzL2Rpc3BsYXktbm9uZS1pbmxpbmUtc3R5
bGUtY2hhbmdlLWNyYXNoLmh0bWwiLAotICAgICAgICAgICJMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L3N1cHBvcnRlZC14bWwtY29udGVudC10eXBlcy5odG1sIiwKLSAgICAg
ICAgICAiTGF5b3V0VGVzdHMvZG9tL2h0bWwvbGV2ZWwyL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQw
My5odG1sIiwKLSAgICAgICAgICAiTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQv
MTEuMS41XzQtNC1jLTEuaHRtbCIsCi0gICAgICAgICAgIkxheW91dFRlc3RzL2RvbS9odG1sL2xl
dmVsMi9odG1sL0hUTUxBbmNob3JFbGVtZW50MDYuaHRtbCIsCi0gICAgICAgIF0KLQotICAgICAg
ICBleHBlY3RlZF90ZXN0c190b19odHRwX2xvY2sgPSBzZXQoWwotICAgICAgICAgICdMYXlvdXRU
ZXN0cy93ZWJzb2NrZXQvdGVzdHMvdW5pY29kZS5odG0nLAotICAgICAgICAgICdMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3ZpZXctc291cmNlLW5vLXJlZnJlc2guaHRtbCcsCi0gICAg
ICAgICAgJ0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy93ZWJzb2NrZXQtcHJvdG9jb2wtaWdu
b3JlZC5odG1sJywKLSAgICAgICAgICAnTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC9zdXBwb3J0ZWQteG1sLWNvbnRlbnQtdHlwZXMuaHRtbCcsCi0gICAgICAgIF0pCi0KLSAg
ICAgICAgc2luZ2xlX2xvY2tlZCwgc2luZ2xlX3VubG9ja2VkID0gbWFuYWdlci5fc2hhcmRfdGVz
dHModGVzdF9saXN0LCBGYWxzZSkKLSAgICAgICAgbXVsdGlfbG9ja2VkLCBtdWx0aV91bmxvY2tl
ZCA9IG1hbmFnZXIuX3NoYXJkX3Rlc3RzKHRlc3RfbGlzdCwgVHJ1ZSkKLQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCJ0ZXN0c190b19odHRwX2xvY2siLCBzaW5nbGVfbG9ja2VkWzBdWzBdKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3Rlc3RzX3RvX2h0dHBfbG9jaywgc2V0
KHNpbmdsZV9sb2NrZWRbMF1bMV0pKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0ZXN0c190
b19odHRwX2xvY2siLCBtdWx0aV9sb2NrZWRbMF1bMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoZXhwZWN0ZWRfdGVzdHNfdG9faHR0cF9sb2NrLCBzZXQobXVsdGlfbG9ja2VkWzBdWzFdKSkK
KyAgICAgICAgc2VsZi5tYW5hZ2VyID0gTWFuYWdlcldyYXBwZXIocG9ydD1wb3J0LCBvcHRpb25z
PU1vY2soKSwgcHJpbnRlcj1Nb2NrKCkpCisgICAgICAgIHJldHVybiBzZWxmLm1hbmFnZXIuX3No
YXJkX3Rlc3RzKHNlbGYudGVzdF9saXN0LCBudW1fd29ya2VycywgZnVsbHlfcGFyYWxsZWwpCisK
KyAgICBkZWYgdGVzdF9zaGFyZF9ieV9kaXIoc2VsZik6CisgICAgICAgIGxvY2tlZCwgdW5sb2Nr
ZWQgPSBzZWxmLmdldF9zaGFyZHMobnVtX3dvcmtlcnM9MiwgZnVsbHlfcGFyYWxsZWw9RmFsc2Up
CisKKyAgICAgICAgIyBOb3RlIHRoYXQgYWx0aG91Z2ggdGhlcmUgYXJlIHRlc3RzIGluIG11bHRp
cGxlIGRpcnMgdGhhdCBuZWVkIGxvY2tzLAorICAgICAgICAjIHRoZXkgYXJlIGNyYW1tZWQgaW50
byBhIHNpbmdsZSBzaGFyZCBpbiBvcmRlciB0byByZWR1Y2UgdGhlICMgb2YKKyAgICAgICAgIyB3
b3JrZXJzIGhpdHRpbmcgdGhlIHNlcnZlciBhdCBvbmNlLgorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhsb2NrZWQsCisgICAgICAgICAgICBbKCdsb2NrZWRfc2hhcmRfMScsCisgICAgICAgICAg
ICAgIFsnTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9zdXBwb3J0ZWQteG1s
LWNvbnRlbnQtdHlwZXMuaHRtbCcsCisgICAgICAgICAgICAgICAnTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy93ZWJzb2NrZXQvdGVzdHMvdW5pY29kZS5odG0nLAorICAgICAgICAgICAgICAgJ0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3dlYnNvY2tldC1wcm90b2NvbC1pZ25v
cmVkLmh0bWwnLAorICAgICAgICAgICAgICAgJ0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJp
dHkvdmlldy1zb3VyY2Utbm8tcmVmcmVzaC5odG1sJ10pXSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHModW5sb2NrZWQsCisgICAgICAgICAgICBbKCdhbmltYXRpb25zJywKKyAgICAgICAgICAg
ICAgWydMYXlvdXRUZXN0cy9hbmltYXRpb25zL2tleWZyYW1lcy5odG1sJ10pLAorICAgICAgICAg
ICAgICgnZG9tL2h0bWwvbGV2ZWwyL2h0bWwnLAorICAgICAgICAgICAgICBbJ0xheW91dFRlc3Rz
L2RvbS9odG1sL2xldmVsMi9odG1sL0hUTUxBbmNob3JFbGVtZW50MDMuaHRtbCcsCisgICAgICAg
ICAgICAgICAnTGF5b3V0VGVzdHMvZG9tL2h0bWwvbGV2ZWwyL2h0bWwvSFRNTEFuY2hvckVsZW1l
bnQwNi5odG1sJ10pLAorICAgICAgICAgICAgICgnZmFzdC9jc3MnLAorICAgICAgICAgICAgICBb
J0xheW91dFRlc3RzL2Zhc3QvY3NzL2Rpc3BsYXktbm9uZS1pbmxpbmUtc3R5bGUtY2hhbmdlLWNy
YXNoLmh0bWwnXSksCisgICAgICAgICAgICAgKCdpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdCcsCisg
ICAgICAgICAgICAgIFsnTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTEuMS41
XzQtNC1jLTEuaHRtbCddKV0pCisKKyAgICBkZWYgdGVzdF9zaGFyZF9ldmVyeV9maWxlKHNlbGYp
OgorICAgICAgICBsb2NrZWQsIHVubG9ja2VkID0gc2VsZi5nZXRfc2hhcmRzKG51bV93b3JrZXJz
PTIsIGZ1bGx5X3BhcmFsbGVsPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxvY2tl
ZCwKKyAgICAgICAgICAgIFsoJy4nLCBbJ0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0
L3Rlc3RzL3VuaWNvZGUuaHRtJ10pLAorICAgICAgICAgICAgICgnLicsIFsnTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS92aWV3LXNvdXJjZS1uby1yZWZyZXNoLmh0bWwnXSksCisgICAg
ICAgICAgICAgKCcuJywgWydMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy93
ZWJzb2NrZXQtcHJvdG9jb2wtaWdub3JlZC5odG1sJ10pLAorICAgICAgICAgICAgICgnLicsIFsn
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9zdXBwb3J0ZWQteG1sLWNvbnRl
bnQtdHlwZXMuaHRtbCddKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHVubG9ja2VkLAor
ICAgICAgICAgICAgWygnLicsIFsnTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9rZXlmcmFtZXMuaHRt
bCddKSwKKyAgICAgICAgICAgICAoJy4nLCBbJ0xheW91dFRlc3RzL2Zhc3QvY3NzL2Rpc3BsYXkt
bm9uZS1pbmxpbmUtc3R5bGUtY2hhbmdlLWNyYXNoLmh0bWwnXSksCisgICAgICAgICAgICAgKCcu
JywgWydMYXlvdXRUZXN0cy9kb20vaHRtbC9sZXZlbDIvaHRtbC9IVE1MQW5jaG9yRWxlbWVudDAz
Lmh0bWwnXSksCisgICAgICAgICAgICAgKCcuJywgWydMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIv
SmF2YXNjcmlwdC8xMS4xLjVfNC00LWMtMS5odG1sJ10pLAorICAgICAgICAgICAgICgnLicsIFsn
TGF5b3V0VGVzdHMvZG9tL2h0bWwvbGV2ZWwyL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQwNi5odG1s
J10pXSkKKworICAgIGRlZiB0ZXN0X3NoYXJkX2luX3R3byhzZWxmKToKKyAgICAgICAgbG9ja2Vk
LCB1bmxvY2tlZCA9IHNlbGYuZ2V0X3NoYXJkcyhudW1fd29ya2Vycz0xLCBmdWxseV9wYXJhbGxl
bD1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobG9ja2VkLAorICAgICAgICAgICAg
WygnbG9ja2VkX3Rlc3RzJywKKyAgICAgICAgICAgICAgWydMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy91bmljb2RlLmh0bScsCisgICAgICAgICAgICAgICAnTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS92aWV3LXNvdXJjZS1uby1yZWZyZXNoLmh0bWwnLAorICAg
ICAgICAgICAgICAgJ0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3dlYnNv
Y2tldC1wcm90b2NvbC1pZ25vcmVkLmh0bWwnLAorICAgICAgICAgICAgICAgJ0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3VwcG9ydGVkLXhtbC1jb250ZW50LXR5cGVzLmh0
bWwnXSldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh1bmxvY2tlZCwKKyAgICAgICAgICAg
IFsoJ3VubG9ja2VkX3Rlc3RzJywKKyAgICAgICAgICAgICAgWydMYXlvdXRUZXN0cy9hbmltYXRp
b25zL2tleWZyYW1lcy5odG1sJywKKyAgICAgICAgICAgICAgICdMYXlvdXRUZXN0cy9mYXN0L2Nz
cy9kaXNwbGF5LW5vbmUtaW5saW5lLXN0eWxlLWNoYW5nZS1jcmFzaC5odG1sJywKKyAgICAgICAg
ICAgICAgICdMYXlvdXRUZXN0cy9kb20vaHRtbC9sZXZlbDIvaHRtbC9IVE1MQW5jaG9yRWxlbWVu
dDAzLmh0bWwnLAorICAgICAgICAgICAgICAgJ0xheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZh
c2NyaXB0LzExLjEuNV80LTQtYy0xLmh0bWwnLAorICAgICAgICAgICAgICAgJ0xheW91dFRlc3Rz
L2RvbS9odG1sL2xldmVsMi9odG1sL0hUTUxBbmNob3JFbGVtZW50MDYuaHRtbCddKV0pCiAKIAog
Y2xhc3MgTmF0dXJhbENvbXBhcmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98560</attachid>
            <date>2011-06-24 16:31:12 -0700</date>
            <delta_ts>2011-06-24 19:31:54 -0700</delta_ts>
            <desc>update w/ review feedback from tony</desc>
            <filename>bug-63116-20110624163111.patch</filename>
            <type>text/plain</type>
            <size>19574</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODkzNzMKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiZTFjN2ZiNGU1MGM4MDI3NTVkYTMyM2M2MmU5Y2RlYjc2
ZDVhNjY3Li5hZDcwMTFlZDgxMGQxZTdmNGQwZTI0YTRlMzU3YTM4ZWFkNTIxMGY4IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjAg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBucnd0
OiBhbGxvdyBmb3IgbXVsdGlwbGUgaHR0cCBzaGFyZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzMTE2CisKKyAgICAgICAgVGhpcyBtb2RpZmllcyB0
aGUgc2hhcmRpbmcgbG9naWMgdG8gc3VwcG9ydCBtdWx0aXBsZSBodHRwCisgICAgICAgIHNoYXJk
cywgYnV0IGZvciBub3cgd2UgY2xhbXAgdG8gb25lIHNoYXJkIHVudGlsIHdlIGNhbiB0ZXN0Cisg
ICAgICAgIHBlcmYgaW1wYWN0IGFuZCBmbGFraW5lc3MgaW1wYWN0LgorCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlci5weToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5h
Z2VyX3VuaXR0ZXN0LnB5OgorCisyMDExLTA2LTIxICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAg
ICAgIG5yd3Q6IG1ha2Ugc2hhcmRpbmcgdGVzdHMgbmVlZGluZyBsb2NrcyBsZXNzIGhhcmQtY29k
ZWQKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzMTEy
CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21hbmFnZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyLnB5CmluZGV4IGU1NmNhNWFhZjNlYTlkODRiYTEyOWRm
NzY0MjJiNzQ1MGQ3Zjg1ZTIuLjhhZDRjNmVlNjlhYmJmY2IyYzIzZDk4YzcwMzBlNWE3YTQ3MmY2
ZDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21hbmFnZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlci5weQpAQCAtMjM1LDYgKzIzNSwyMSBAQCBjbGFz
cyBXb3JrZXJFeGNlcHRpb24oRXhjZXB0aW9uKToKICAgICBwYXNzCiAKIAorY2xhc3MgVGVzdFNo
YXJkKG9iamVjdCk6CisgICAgIiIiQSB0ZXN0IHNoYXJkIGlzIGEgbmFtZWQgbGlzdCBvZiBUZXN0
SW5wdXRzLiIiIgorCisgICAgIyBGSVhNRTogbWFrZSB0aGlzIGNsYXNzIHZpc2libGUsIHVzZWQg
Ynkgd29ya2VycyBhcyB3ZWxsLgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB0ZXN0X2lu
cHV0cyk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi50ZXN0X2lucHV0
cyA9IHRlc3RfaW5wdXRzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVy
biAiVGVzdFNoYXJkKG5hbWU9JyVzJywgdGVzdF9pbnB1dHM9JXMnIiAlIChzZWxmLm5hbWUsIHNl
bGYudGVzdF9pbnB1dHMpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAg
cmV0dXJuIHNlbGYubmFtZSA9PSBvdGhlci5uYW1lIGFuZCBzZWxmLnRlc3RfaW5wdXRzID09IG90
aGVyLnRlc3RfaW5wdXRzCisKKwogY2xhc3MgTWFuYWdlcjoKICAgICAiIiJBIGNsYXNzIGZvciBt
YW5hZ2luZyBydW5uaW5nIGEgc2VyaWVzIG9mIHRlc3RzIG9uIGEgc2VyaWVzIG9mIGxheW91dAog
ICAgIHRlc3QgZmlsZXMuIiIiCkBAIC01MzMsNTEgKzU0OCwxMjMgQEAgY2xhc3MgTWFuYWdlcjoK
ICAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdGF0aW9ucy5oYXNfbW9kaWZpZXIodGVzdF9maWxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4
cGVjdGF0aW9ucy5TTE9XKQogCi0gICAgZGVmIF9zaGFyZF90ZXN0cyhzZWxmLCB0ZXN0X2ZpbGVz
LCB1c2VfcmVhbF9zaGFyZHMpOgorICAgIGRlZiBfc2hhcmRfdGVzdHMoc2VsZiwgdGVzdF9maWxl
cywgbnVtX3dvcmtlcnMsIGZ1bGx5X3BhcmFsbGVsKToKICAgICAgICAgIiIiR3JvdXBzIHRlc3Rz
IGludG8gYmF0Y2hlcy4KICAgICAgICAgVGhpcyBoZWxwcyBlbnN1cmUgdGhhdCB0ZXN0cyB0aGF0
IGRlcGVuZCBvbiBlYWNoIG90aGVyIChha2EgYmFkIHRlc3RzISkKICAgICAgICAgY29udGludWUg
dG8gcnVuIHRvZ2V0aGVyIGFzIG1vc3QgY3Jvc3MtdGVzdHMgZGVwZW5kZW5jaWVzIHRlbmQgdG8K
LSAgICAgICAgb2NjdXIgd2l0aGluIHRoZSBzYW1lIGRpcmVjdG9yeS4gSWYgdXNlX3JlYWxfc2hh
cmRzIGlzIEZhbHNlLCB3ZQotICAgICAgICBwdXQgZWFjaCAobm9uLUhUVFAvd2Vic29ja2V0KSB0
ZXN0IGludG8gaXRzIG93biBzaGFyZCBmb3IgbWF4aW11bQotICAgICAgICBjb25jdXJyZW5jeSBp
bnN0ZWFkIG9mIHRyeWluZyB0byBkbyBhbnkgc29ydCBvZiByZWFsIHNoYXJkaW5nLgotCisgICAg
ICAgIG9jY3VyIHdpdGhpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCiAgICAgICAgIFJldHVybjoKLSAg
ICAgICAgICAgIFR3byBsaXN0cyBvZiBsaXN0cyBvZiBUZXN0SW5wdXQgb2JqZWN0cy4gVGhlIGZp
cnN0IGxpc3Qgc2hvdWxkCi0gICAgICAgICAgICBvbmx5IGJlIHJ1biB1bmRlciB0aGUgc2VydmVy
IGxvY2ssIHRoZSBzZWNvbmQgY2FuIGJlIHJ1biB3aGVuZXZlci4KKyAgICAgICAgICAgIFR3byBs
aXN0IG9mIFRlc3RTaGFyZHMuIFRoZSBmaXJzdCBjb250YWlucyB0ZXN0cyB0aGF0IG11c3Qgb25s
eSBiZQorICAgICAgICAgICAgcnVuIHVuZGVyIHRoZSBzZXJ2ZXIgbG9jaywgdGhlIHNlY29uZCBj
YW4gYmUgcnVuIHdoZW5ldmVyLgogICAgICAgICAiIiIKLSAgICAgICAgIyBGSVhNRTogV2Ugc3Rp
bGwgbmVlZCB0byBzdXBwb3J0IG11bHRpcGxlIGxvY2tlZCBzaGFyZHMuCisKKyAgICAgICAgIyBG
SVhNRTogTW92ZSBhbGwgb2YgdGhlIHNoYXJkaW5nIGxvZ2ljIG91dCBvZiBtYW5hZ2VyIGludG8g
aXRzCisgICAgICAgICMgb3duIGNsYXNzIG9yIG1vZHVsZS4gQ29uc2lkZXIgZ3JvdXBpbmcgaXQg
d2l0aCB0aGUgY2h1bmtpbmcgbG9naWMKKyAgICAgICAgIyBpbiBwcmVwYXJlX2xpc3RzIGFzIHdl
bGwuCisgICAgICAgIGlmIG51bV93b3JrZXJzID09IDE6CisgICAgICAgICAgICByZXR1cm4gc2Vs
Zi5fc2hhcmRfaW5fdHdvKHRlc3RfZmlsZXMpCisgICAgICAgIGVsaWYgZnVsbHlfcGFyYWxsZWw6
CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc2hhcmRfZXZlcnlfZmlsZSh0ZXN0X2ZpbGVzKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NoYXJkX2J5X2RpcmVjdG9y
eSh0ZXN0X2ZpbGVzLCBudW1fd29ya2VycykKKworICAgIGRlZiBfc2hhcmRfaW5fdHdvKHNlbGYs
IHRlc3RfZmlsZXMpOgorICAgICAgICAiIiJSZXR1cm5zIHR3byBsaXN0cyBvZiBzaGFyZHMsIG9u
ZSB3aXRoIGFsbCB0aGUgdGVzdHMgcmVxdWlyaW5nIGEgbG9jayBhbmQgb25lIHdpdGggdGhlIHJl
c3QuCisKKyAgICAgICAgVGhpcyBpcyB1c2VkIHdoZW4gdGhlcmUncyBvbmx5IG9uZSB3b3JrZXIs
IHRvIG1pbmltaXplIHRoZSBwZXItc2hhcmQgb3ZlcmhlYWQuIiIiCisgICAgICAgIGxvY2tlZF9p
bnB1dHMgPSBbXQorICAgICAgICB1bmxvY2tlZF9pbnB1dHMgPSBbXQorICAgICAgICBmb3IgdGVz
dF9maWxlIGluIHRlc3RfZmlsZXM6CisgICAgICAgICAgICB0ZXN0X2lucHV0ID0gc2VsZi5fZ2V0
X3Rlc3RfaW5wdXRfZm9yX2ZpbGUodGVzdF9maWxlKQorICAgICAgICAgICAgaWYgc2VsZi5fdGVz
dF9yZXF1aXJlc19sb2NrKHRlc3RfZmlsZSk6CisgICAgICAgICAgICAgICAgbG9ja2VkX2lucHV0
cy5hcHBlbmQodGVzdF9pbnB1dCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
dW5sb2NrZWRfaW5wdXRzLmFwcGVuZCh0ZXN0X2lucHV0KQorICAgICAgICByZXR1cm4gW1Rlc3RT
aGFyZCgnbG9ja2VkX3Rlc3RzJywgbG9ja2VkX2lucHV0cyldLCBbVGVzdFNoYXJkKCd1bmxvY2tl
ZF90ZXN0cycsIHVubG9ja2VkX2lucHV0cyldCisKKyAgICBkZWYgX3NoYXJkX2V2ZXJ5X2ZpbGUo
c2VsZiwgdGVzdF9maWxlcyk6CisgICAgICAgICIiIlJldHVybnMgdHdvIGxpc3RzIG9mIHNoYXJk
cywgZWFjaCBzaGFyZCBjb250YWluaW5nIGEgc2luZ2xlIHRlc3QgZmlsZS4KKworICAgICAgICBU
aGlzIG1vZGUgZ2V0cyBtYXhpbWFsIHBhcmFsbGVsaXNtIGF0IHRoZSBjb3N0IG9mIG11Y2ggaGln
aGVyIGZsYWtpbmVzcy4iIiIKICAgICAgICAgbG9ja2VkX3NoYXJkcyA9IFtdCiAgICAgICAgIHVu
bG9ja2VkX3NoYXJkcyA9IFtdCi0gICAgICAgIHRlc3RzX3RvX2h0dHBfbG9jayA9IFtdCi0gICAg
ICAgIGlmIG5vdCB1c2VfcmVhbF9zaGFyZHM6Ci0gICAgICAgICAgICBmb3IgdGVzdF9maWxlIGlu
IHRlc3RfZmlsZXM6Ci0gICAgICAgICAgICAgICAgdGVzdF9pbnB1dCA9IHNlbGYuX2dldF90ZXN0
X2lucHV0X2Zvcl9maWxlKHRlc3RfZmlsZSkKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl90ZXN0
X3JlcXVpcmVzX2xvY2sodGVzdF9maWxlKToKLSAgICAgICAgICAgICAgICAgICAgdGVzdHNfdG9f
aHR0cF9sb2NrLmFwcGVuZCh0ZXN0X2lucHV0KQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICAgICAgICAgIHVubG9ja2VkX3NoYXJkcy5hcHBlbmQoKCIuIiwgW3Rlc3RfaW5wdXRd
KSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRlc3RzX2J5X2RpciA9IHt9Ci0gICAgICAg
ICAgICBmb3IgdGVzdF9maWxlIGluIHRlc3RfZmlsZXM6Ci0gICAgICAgICAgICAgICAgZGlyZWN0
b3J5ID0gc2VsZi5fZ2V0X2Rpcl9mb3JfdGVzdF9maWxlKHRlc3RfZmlsZSkKLSAgICAgICAgICAg
ICAgICB0ZXN0X2lucHV0ID0gc2VsZi5fZ2V0X3Rlc3RfaW5wdXRfZm9yX2ZpbGUodGVzdF9maWxl
KQotICAgICAgICAgICAgICAgIGlmIHNlbGYuX3Rlc3RfcmVxdWlyZXNfbG9jayh0ZXN0X2ZpbGUp
OgotICAgICAgICAgICAgICAgICAgICB0ZXN0c190b19odHRwX2xvY2suYXBwZW5kKHRlc3RfaW5w
dXQpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgdGVzdHNfYnlf
ZGlyLnNldGRlZmF1bHQoZGlyZWN0b3J5LCBbXSkKLSAgICAgICAgICAgICAgICAgICAgdGVzdHNf
YnlfZGlyW2RpcmVjdG9yeV0uYXBwZW5kKHRlc3RfaW5wdXQpCi0gICAgICAgICAgICBmb3IgZGly
ZWN0b3J5IGluIHRlc3RzX2J5X2RpcjoKLSAgICAgICAgICAgICAgICB0ZXN0X2xpc3QgPSB0ZXN0
c19ieV9kaXJbZGlyZWN0b3J5XQotICAgICAgICAgICAgICAgIHRlc3RfbGlzdF90dXBsZSA9IChk
aXJlY3RvcnksIHRlc3RfbGlzdCkKLSAgICAgICAgICAgICAgICB1bmxvY2tlZF9zaGFyZHMuYXBw
ZW5kKHRlc3RfbGlzdF90dXBsZSkKKyAgICAgICAgZm9yIHRlc3RfZmlsZSBpbiB0ZXN0X2ZpbGVz
OgorICAgICAgICAgICAgdGVzdF9pbnB1dCA9IHNlbGYuX2dldF90ZXN0X2lucHV0X2Zvcl9maWxl
KHRlc3RfZmlsZSkKKworICAgICAgICAgICAgIyBOb3RlIHRoYXQgd2UgdXNlIGEgJy4nIGZvciB0
aGUgc2hhcmQgbmFtZTsgdGhlIG5hbWUgZG9lc24ndCByZWFsbHkKKyAgICAgICAgICAgICMgbWF0
dGVyLCBhbmQgdGhlIG9ubHkgb3RoZXIgbWVhbmluZ2Z1bCB2YWx1ZSB3b3VsZCBiZSB0aGUgZmls
ZW5hbWUsCisgICAgICAgICAgICAjIHdoaWNoIHdvdWxkIGJlIHJlYWxseSByZWR1bmRhbnQuCisg
ICAgICAgICAgICBpZiBzZWxmLl90ZXN0X3JlcXVpcmVzX2xvY2sodGVzdF9maWxlKToKKyAgICAg
ICAgICAgICAgICBsb2NrZWRfc2hhcmRzLmFwcGVuZChUZXN0U2hhcmQoJy4nLCBbdGVzdF9pbnB1
dF0pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB1bmxvY2tlZF9zaGFyZHMu
YXBwZW5kKFRlc3RTaGFyZCgnLicsIFt0ZXN0X2lucHV0XSkpCiAKLSAgICAgICAgICAgICMgU29y
dCB0aGUgc2hhcmRzIGJ5IGRpcmVjdG9yeSBuYW1lLgotICAgICAgICAgICAgdW5sb2NrZWRfc2hh
cmRzLnNvcnQobGFtYmRhIGEsIGI6IGNtcChhWzBdLCBiWzBdKSkKKyAgICAgICAgcmV0dXJuIGxv
Y2tlZF9zaGFyZHMsIHVubG9ja2VkX3NoYXJkcwogCi0gICAgICAgIGlmIHRlc3RzX3RvX2h0dHBf
bG9jazoKLSAgICAgICAgICAgIGxvY2tlZF9zaGFyZHMgPSBbKCJ0ZXN0c190b19odHRwX2xvY2si
LCB0ZXN0c190b19odHRwX2xvY2spXQorICAgIGRlZiBfc2hhcmRfYnlfZGlyZWN0b3J5KHNlbGYs
IHRlc3RfZmlsZXMsIG51bV93b3JrZXJzKToKKyAgICAgICAgIiIiUmV0dXJucyB0d28gbGlzdHMg
b2Ygc2hhcmRzLCBlYWNoIHNoYXJkIGNvbnRhaW5pbmcgYWxsIHRoZSBmaWxlcyBpbiBhIGRpcmVj
dG9yeS4KIAotICAgICAgICByZXR1cm4gKGxvY2tlZF9zaGFyZHMsIHVubG9ja2VkX3NoYXJkcykK
KyAgICAgICAgVGhpcyBpcyB0aGUgZGVmYXVsdCBtb2RlLCBhbmQgZ2V0cyBhcyBtdWNoIHBhcmFs
bGVsaXNtIGFzIHdlIGNhbiB3aGlsZQorICAgICAgICBtaW5pbWl6aW5nIGZsYWtpbmVzcyBjYXVz
ZWQgYnkgaW50ZXItdGVzdCBkZXBlbmRlbmNpZXMuIiIiCisgICAgICAgIGxvY2tlZF9zaGFyZHMg
PSBbXQorICAgICAgICB1bmxvY2tlZF9zaGFyZHMgPSBbXQorICAgICAgICB0ZXN0c19ieV9kaXIg
PSB7fQorICAgICAgICAjIEZJWE1FOiBHaXZlbiB0aGF0IHRoZSB0ZXN0cyBhcmUgYWxyZWFkeSBz
b3J0ZWQgYnkgZGlyZWN0b3J5LAorICAgICAgICAjIHdlIGNhbiBwcm9iYWJseSByZXdyaXRlIHRo
aXMgdG8gYmUgY2xlYXJlciBhbmQgZmFzdGVyLgorICAgICAgICBmb3IgdGVzdF9maWxlIGluIHRl
c3RfZmlsZXM6CisgICAgICAgICAgICBkaXJlY3RvcnkgPSBzZWxmLl9nZXRfZGlyX2Zvcl90ZXN0
X2ZpbGUodGVzdF9maWxlKQorICAgICAgICAgICAgdGVzdF9pbnB1dCA9IHNlbGYuX2dldF90ZXN0
X2lucHV0X2Zvcl9maWxlKHRlc3RfZmlsZSkKKyAgICAgICAgICAgIHRlc3RzX2J5X2Rpci5zZXRk
ZWZhdWx0KGRpcmVjdG9yeSwgW10pCisgICAgICAgICAgICB0ZXN0c19ieV9kaXJbZGlyZWN0b3J5
XS5hcHBlbmQodGVzdF9pbnB1dCkKKworICAgICAgICBmb3IgZGlyZWN0b3J5LCB0ZXN0X2lucHV0
cyBpbiB0ZXN0c19ieV9kaXIuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBzaGFyZCA9IFRlc3RT
aGFyZChkaXJlY3RvcnksIHRlc3RfaW5wdXRzKQorICAgICAgICAgICAgaWYgc2VsZi5fdGVzdF9y
ZXF1aXJlc19sb2NrKGRpcmVjdG9yeSk6CisgICAgICAgICAgICAgICAgbG9ja2VkX3NoYXJkcy5h
cHBlbmQoc2hhcmQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHVubG9ja2Vk
X3NoYXJkcy5hcHBlbmQoc2hhcmQpCisKKyAgICAgICAgIyBTb3J0IHRoZSBzaGFyZHMgYnkgZGly
ZWN0b3J5IG5hbWUuCisgICAgICAgIGxvY2tlZF9zaGFyZHMuc29ydChsYW1iZGEgYSwgYjogY21w
KGEubmFtZSwgYi5uYW1lKSkKKyAgICAgICAgdW5sb2NrZWRfc2hhcmRzLnNvcnQobGFtYmRhIGEs
IGI6IGNtcChhLm5hbWUsIGIubmFtZSkpCisKKyAgICAgICAgcmV0dXJuIChzZWxmLl9yZXNpemVf
c2hhcmRzKGxvY2tlZF9zaGFyZHMsIHNlbGYuX21heF9sb2NrZWRfc2hhcmRzKG51bV93b3JrZXJz
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsb2NrZWRfc2hhcmQnKSwK
KyAgICAgICAgICAgICAgICB1bmxvY2tlZF9zaGFyZHMpCisKKyAgICBkZWYgX21heF9sb2NrZWRf
c2hhcmRzKHNlbGYsIG51bV93b3JrZXJzKToKKyAgICAgICAgIyBQdXQgYSBjZWlsaW5nIG9uIHRo
ZSBudW1iZXIgb2YgbG9ja2VkIHNoYXJkcywgc28gdGhhdCB3ZQorICAgICAgICAjIGRvbid0IGhh
bW1lciB0aGUgc2VydmVycyB0b28gYmFkbHkuCisKKyAgICAgICAgIyBGSVhNRTogRm9yIG5vdywg
bGltaXQgdG8gb25lIHNoYXJkLiBBZnRlciB0ZXN0aW5nIHRvIG1ha2Ugc3VyZSB3ZQorICAgICAg
ICAjIGNhbiBoYW5kbGUgbXVsdGlwbGUgc2hhcmRzLCB3ZSBzaG91bGQgcHJvYmFibHkgZG8gc29t
ZXRoaW5nIGxpa2UKKyAgICAgICAgIyBsaW1pdCB0aGlzIHRvIG5vIG1vcmUgdGhhbiBhIHF1YXJ0
ZXIgb2YgYWxsIHdvcmtlcnMsIGUuZy46CisgICAgICAgICMgcmV0dXJuIG1heChtYXRoLmNlaWwo
bnVtX3dvcmtlcnMgLyA0LjApLCAxKQorICAgICAgICByZXR1cm4gMQorCisgICAgZGVmIF9yZXNp
emVfc2hhcmRzKHNlbGYsIG9sZF9zaGFyZHMsIG1heF9uZXdfc2hhcmRzLCBzaGFyZF9uYW1lX3By
ZWZpeCk6CisgICAgICAgICIiIlRha2VzIGEgbGlzdCBvZiB0ZXN0IHNoYXJkcyBhbmQgcmVkaXN0
cmlidXRlcyB0aGUgdGVzdHMgaW50byBubyBtb3JlCisgICAgICAgIHRoYW4gfG1heF9uZXdfc2hh
cmRzfCBuZXcgc2hhcmRzLiIiIgorCisgICAgICAgICMgVGhpcyBpbXBsZW1lbnRhdGlvbiByZXF1
aXJlcyBlYWNoIGlucHV0IHNoYXJkIHRvIG9ubHkgY29udGFpbnMgdGVzdHMgZnJvbSBhCisgICAg
ICAgICMgc2luZ2xlIGRpcmVjdG9yeSwgYW5kIGFzc3VtZXMgdGhhdCB0ZXN0cyBpbiBlYWNoIHNo
YXJkIG11c3QgcmVtYWluIHRvZ2V0aGVyLgorICAgICAgICAjIEhvd2V2ZXIsIHRoZSBvdXRwdXQg
c2hhcmRzIG1heSBjb250YWluIHRlc3RzIGZyb20gbXVsdGlwbGUgZGlyZWN0b3JpZXMuCisgICAg
ICAgIG1heF9kaXJzX3Blcl9uZXdfc2hhcmQgPSBtYXRoLmNlaWwobGVuKG9sZF9zaGFyZHMpIC8g
bWF4X25ld19zaGFyZHMgKiAxLjApCisgICAgICAgIG5ld19zaGFyZHMgPSBbXQorICAgICAgICBk
aXJzX2luX25ld19zaGFyZCA9IDAKKyAgICAgICAgbmV3X3Rlc3RfaW5wdXRzID0gW10KKyAgICAg
ICAgZm9yIG9sZF9zaGFyZCBpbiBvbGRfc2hhcmRzOgorICAgICAgICAgICAgbmV3X3Rlc3RfaW5w
dXRzLmV4dGVuZChvbGRfc2hhcmQudGVzdF9pbnB1dHMpCisgICAgICAgICAgICBkaXJzX2luX25l
d19zaGFyZCArPSAxCisgICAgICAgICAgICBpZiBkaXJzX2luX25ld19zaGFyZCA9PSBtYXhfZGly
c19wZXJfbmV3X3NoYXJkOgorICAgICAgICAgICAgICAgIG5ld19zaGFyZHMuYXBwZW5kKFRlc3RT
aGFyZCgnJXNfJWQnICUgKHNoYXJkX25hbWVfcHJlZml4LCBsZW4obmV3X3NoYXJkcykgKyAxKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3Rlc3RfaW5w
dXRzKSkKKyAgICAgICAgICAgICAgICBkaXJzX2luX25ld19zaGFyZCA9IDAKKyAgICAgICAgICAg
ICAgICBuZXdfdGVzdF9pbnB1dHMgPSBbXQorICAgICAgICBpZiBuZXdfdGVzdF9pbnB1dHM6Cisg
ICAgICAgICAgICBuZXdfc2hhcmRzLmFwcGVuZChUZXN0U2hhcmQoJyVzXyVkJyAlIChzaGFyZF9u
YW1lX3ByZWZpeCwgbGVuKG5ld19zaGFyZHMpICsgMSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3X3Rlc3RfaW5wdXRzKSkKKyAgICAgICAgcmV0dXJuIG5ld19z
aGFyZHMKIAogICAgIGRlZiBfY29udGFpbnNfdGVzdHMoc2VsZiwgc3ViZGlyKToKICAgICAgICAg
Zm9yIHRlc3RfZmlsZSBpbiBzZWxmLl90ZXN0X2ZpbGVzOgpAQCAtNTg1LDE2ICs2NzIsMTQgQEAg
Y2xhc3MgTWFuYWdlcjoKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICByZXR1
cm4gRmFsc2UKIAotICAgIGRlZiBfbnVtX3dvcmtlcnMoc2VsZiwgbnVtX3NoYXJkcyk6Ci0gICAg
ICAgIG51bV93b3JrZXJzID0gbWluKGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3Nlcyks
IG51bV9zaGFyZHMpCisgICAgZGVmIF9sb2dfbnVtX3dvcmtlcnMoc2VsZiwgbnVtX3dvcmtlcnMs
IG51bV9zaGFyZHMsIG51bV9sb2NrZWRfc2hhcmRzKToKICAgICAgICAgZHJpdmVyX25hbWUgPSBz
ZWxmLl9wb3J0LmRyaXZlcl9uYW1lKCkKICAgICAgICAgaWYgbnVtX3dvcmtlcnMgPT0gMToKICAg
ICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfY29uZmlnKCJSdW5uaW5nIDEgJXMgb3ZlciAl
cyIgJQogICAgICAgICAgICAgICAgIChkcml2ZXJfbmFtZSwgZ3JhbW1hci5wbHVyYWxpemUoJ3No
YXJkJywgbnVtX3NoYXJkcykpKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF9jb25maWcoIlJ1bm5pbmcgJWQgJXNzIGluIHBhcmFsbGVsIG92ZXIgJWQgc2hh
cmRzIiAlCi0gICAgICAgICAgICAgICAgKG51bV93b3JrZXJzLCBkcml2ZXJfbmFtZSwgbnVtX3No
YXJkcykpCi0gICAgICAgIHJldHVybiBudW1fd29ya2VycworICAgICAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF9jb25maWcoIlJ1bm5pbmcgJWQgJXNzIGluIHBhcmFsbGVsIG92ZXIgJWQgc2hh
cmRzICglZCBsb2NrZWQpIiAlCisgICAgICAgICAgICAgICAgKG51bV93b3JrZXJzLCBkcml2ZXJf
bmFtZSwgbnVtX3NoYXJkcywgbnVtX2xvY2tlZF9zaGFyZHMpKQogCiAgICAgZGVmIF9ydW5fdGVz
dHMoc2VsZiwgZmlsZV9saXN0LCByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgICIiIlJ1bnMgdGhl
IHRlc3RzIGluIHRoZSBmaWxlX2xpc3QuCkBAIC02MjMsNyArNzA4LDcgQEAgY2xhc3MgTWFuYWdl
cjoKIAogICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU2hhcmRpbmcgdGVzdHMg
Li4uJykKICAgICAgICAgbG9ja2VkX3NoYXJkcywgdW5sb2NrZWRfc2hhcmRzID0gc2VsZi5fc2hh
cmRfdGVzdHMoZmlsZV9saXN0LAotICAgICAgICAgICAgaW50KHNlbGYuX29wdGlvbnMuY2hpbGRf
cHJvY2Vzc2VzKSA+IDEgYW5kIG5vdCBzZWxmLl9vcHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9w
YXJhbGxlbCkKKyAgICAgICAgICAgIGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3Nlcyks
IHNlbGYuX29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsKQogCiAgICAgICAgICMg
RklYTUU6IFdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byBjb29yZGluYXRlIHRoZSB3b3JrZXJz
IHNvIHRoYXQKICAgICAgICAgIyB0aGV5IGRvbid0IHRyeSB0byBydW4gdGhlIHNoYXJkcyB0aGF0
IG5lZWQgYSBsb2NrIGlmIHdlIGRvbid0IGFjdHVhbGx5CkBAIC02MzgsNyArNzIzLDkgQEAgY2xh
c3MgTWFuYWdlcjoKICAgICAgICAgaWYgbG9ja2VkX3NoYXJkczoKICAgICAgICAgICAgIHNlbGYu
c3RhcnRfc2VydmVyc193aXRoX2xvY2soKQogCi0gICAgICAgIG51bV93b3JrZXJzID0gc2VsZi5f
bnVtX3dvcmtlcnMobGVuKGFsbF9zaGFyZHMpKQorICAgICAgICBudW1fd29ya2VycyA9IG1pbihp
bnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpLCBsZW4oYWxsX3NoYXJkcykpCisgICAg
ICAgIHNlbGYuX2xvZ19udW1fd29ya2VycyhudW1fd29ya2VycywgbGVuKGFsbF9zaGFyZHMpLCBs
ZW4obG9ja2VkX3NoYXJkcykpCisKICAgICAgICAgbWFuYWdlcl9jb25uZWN0aW9uID0gbWFuYWdl
cl93b3JrZXJfYnJva2VyLmdldChzZWxmLl9wb3J0LCBzZWxmLl9vcHRpb25zLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIHdvcmtl
ci5Xb3JrZXIpCiAKQEAgLTY2MSw3ICs3NDgsOCBAQCBjbGFzcyBNYW5hZ2VyOgogCiAgICAgICAg
IHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0aW5nIC4uLiIpCiAgICAg
ICAgIGZvciBzaGFyZCBpbiBhbGxfc2hhcmRzOgotICAgICAgICAgICAgbWFuYWdlcl9jb25uZWN0
aW9uLnBvc3RfbWVzc2FnZSgndGVzdF9saXN0Jywgc2hhcmRbMF0sIHNoYXJkWzFdKQorICAgICAg
ICAgICAgIyBGSVhNRTogY2hhbmdlICd0ZXN0X2xpc3QnIHRvICdzaGFyZCcsIG1ha2Ugc2hhcmRp
bmcgcHVibGljCisgICAgICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCd0
ZXN0X2xpc3QnLCBzaGFyZC5uYW1lLCBzaGFyZC50ZXN0X2lucHV0cykKIAogICAgICAgICAjIFdl
IHBvc3Qgb25lICdzdG9wJyBtZXNzYWdlIGZvciBlYWNoIHdvcmtlci4gQmVjYXVzZSB0aGUgc3Rv
cCBtZXNzYWdlCiAgICAgICAgICMgYXJlIHNlbnQgYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cywgYW5k
IGJlY2F1c2UgZWFjaCB3b3JrZXIgd2lsbCBzdG9wCkBAIC0xMzYwLDcgKzE0NDgsNyBAQCBjbGFz
cyBNYW5hZ2VyOgogCiAgICAgICAgIGRlZiBmaW5kKG5hbWUsIHRlc3RfbGlzdHMpOgogICAgICAg
ICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHRlc3RfbGlzdHMpKToKLSAgICAgICAgICAgICAgICBp
ZiB0ZXN0X2xpc3RzW2ldWzBdID09IG5hbWU6CisgICAgICAgICAgICAgICAgaWYgdGVzdF9saXN0
c1tpXS5uYW1lID09IG5hbWU6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpCiAgICAgICAg
ICAgICByZXR1cm4gLTEKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl91bml0dGVzdC5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfdW5pdHRlc3Qu
cHkKaW5kZXggOWMxYWY4ODU5YTBiZTZkMzFkODU0ODI0Njk4YTQ2N2RhMGM3YWU2OS4uYzg0MjFl
YTVhNjc2N2ViZjVkYjBlYjg5NTgzNWM1YmZlOWU4N2M2YyAxMDA2NDQKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl91bml0dGVz
dC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9tYW5hZ2VyX3VuaXR0ZXN0LnB5CkBAIC0zNyw0NiArMzcsODcgQEAgZnJvbSB3ZWJraXRw
eS50aGlyZHBhcnR5Lm1vY2sgaW1wb3J0IE1vY2sKIAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1hbmFnZXIKIAorVGVzdFNoYXJkID0gbWFuYWdlci5U
ZXN0U2hhcmQKKwogCiBjbGFzcyBNYW5hZ2VyV3JhcHBlcihtYW5hZ2VyLk1hbmFnZXIpOgogICAg
IGRlZiBfZ2V0X3Rlc3RfaW5wdXRfZm9yX2ZpbGUoc2VsZiwgdGVzdF9maWxlKToKICAgICAgICAg
cmV0dXJuIHRlc3RfZmlsZQogCiAKLWNsYXNzIE1hbmFnZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKLSAgICBkZWYgdGVzdF9zaGFyZF90ZXN0cyhzZWxmKToKLSAgICAgICAgIyBUZXN0IHRoYXQg
X3NoYXJkX3Rlc3RzIGluIHRlc3RfcnVubmVyLlRlc3RSdW5uZXIgcmVhbGx5Ci0gICAgICAgICMg
cHV0IHRoZSBodHRwIHRlc3RzIGZpcnN0IGluIHRoZSBxdWV1ZS4KK2NsYXNzIFNoYXJkaW5nVGVz
dHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgRklYTUU6IFJlbW92ZSAiTGF5b3V0VGVzdHMi
IGZyb20gdGhpcyBpZiB3ZSBjYW4gZXZlciBjb252ZXJ0IHRoZSBnZW5lcmljCisgICAgIyBjb2Rl
IGZyb20gZmlsZW5hbWVzIHRvIHRlc3QgbmFtZXMuCisgICAgdGVzdF9saXN0ID0gWworICAgICAg
ICAiTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvdW5pY29kZS5odG0iLAor
ICAgICAgICAiTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9rZXlmcmFtZXMuaHRtbCIsCisgICAgICAg
ICJMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3ZpZXctc291cmNlLW5vLXJlZnJlc2gu
aHRtbCIsCisgICAgICAgICJMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy93
ZWJzb2NrZXQtcHJvdG9jb2wtaWdub3JlZC5odG1sIiwKKyAgICAgICAgIkxheW91dFRlc3RzL2Zh
c3QvY3NzL2Rpc3BsYXktbm9uZS1pbmxpbmUtc3R5bGUtY2hhbmdlLWNyYXNoLmh0bWwiLAorICAg
ICAgICAiTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9zdXBwb3J0ZWQteG1s
LWNvbnRlbnQtdHlwZXMuaHRtbCIsCisgICAgICAgICJMYXlvdXRUZXN0cy9kb20vaHRtbC9sZXZl
bDIvaHRtbC9IVE1MQW5jaG9yRWxlbWVudDAzLmh0bWwiLAorICAgICAgICAiTGF5b3V0VGVzdHMv
aWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTEuMS41XzQtNC1jLTEuaHRtbCIsCisgICAgICAgICJM
YXlvdXRUZXN0cy9kb20vaHRtbC9sZXZlbDIvaHRtbC9IVE1MQW5jaG9yRWxlbWVudDA2Lmh0bWwi
LAorICAgIF0KKworICAgIGRlZiBnZXRfc2hhcmRzKHNlbGYsIG51bV93b3JrZXJzLCBmdWxseV9w
YXJhbGxlbCk6CiAgICAgICAgIHBvcnQgPSBNb2NrKCkKICAgICAgICAgcG9ydC5fZmlsZXN5c3Rl
bSA9IGZpbGVzeXN0ZW1fbW9jay5Nb2NrRmlsZVN5c3RlbSgpCi0gICAgICAgIG1hbmFnZXIgPSBN
YW5hZ2VyV3JhcHBlcihwb3J0PXBvcnQsIG9wdGlvbnM9TW9jaygpLCBwcmludGVyPU1vY2soKSkK
LQotICAgICAgICB0ZXN0X2xpc3QgPSBbCi0gICAgICAgICAgIkxheW91dFRlc3RzL3dlYnNvY2tl
dC90ZXN0cy91bmljb2RlLmh0bSIsCi0gICAgICAgICAgIkxheW91dFRlc3RzL2FuaW1hdGlvbnMv
a2V5ZnJhbWVzLmh0bWwiLAotICAgICAgICAgICJMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3Vy
aXR5L3ZpZXctc291cmNlLW5vLXJlZnJlc2guaHRtbCIsCi0gICAgICAgICAgIkxheW91dFRlc3Rz
L3dlYnNvY2tldC90ZXN0cy93ZWJzb2NrZXQtcHJvdG9jb2wtaWdub3JlZC5odG1sIiwKLSAgICAg
ICAgICAiTGF5b3V0VGVzdHMvZmFzdC9jc3MvZGlzcGxheS1ub25lLWlubGluZS1zdHlsZS1jaGFu
Z2UtY3Jhc2guaHRtbCIsCi0gICAgICAgICAgIkxheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0
cHJlcXVlc3Qvc3VwcG9ydGVkLXhtbC1jb250ZW50LXR5cGVzLmh0bWwiLAotICAgICAgICAgICJM
YXlvdXRUZXN0cy9kb20vaHRtbC9sZXZlbDIvaHRtbC9IVE1MQW5jaG9yRWxlbWVudDAzLmh0bWwi
LAotICAgICAgICAgICJMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xMS4xLjVf
NC00LWMtMS5odG1sIiwKLSAgICAgICAgICAiTGF5b3V0VGVzdHMvZG9tL2h0bWwvbGV2ZWwyL2h0
bWwvSFRNTEFuY2hvckVsZW1lbnQwNi5odG1sIiwKLSAgICAgICAgXQotCi0gICAgICAgIGV4cGVj
dGVkX3Rlc3RzX3RvX2h0dHBfbG9jayA9IHNldChbCi0gICAgICAgICAgJ0xheW91dFRlc3RzL3dl
YnNvY2tldC90ZXN0cy91bmljb2RlLmh0bScsCi0gICAgICAgICAgJ0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkvdmlldy1zb3VyY2Utbm8tcmVmcmVzaC5odG1sJywKLSAgICAgICAgICAn
TGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3dlYnNvY2tldC1wcm90b2NvbC1pZ25vcmVkLmh0
bWwnLAotICAgICAgICAgICdMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3N1
cHBvcnRlZC14bWwtY29udGVudC10eXBlcy5odG1sJywKLSAgICAgICAgXSkKLQotICAgICAgICBz
aW5nbGVfbG9ja2VkLCBzaW5nbGVfdW5sb2NrZWQgPSBtYW5hZ2VyLl9zaGFyZF90ZXN0cyh0ZXN0
X2xpc3QsIEZhbHNlKQotICAgICAgICBtdWx0aV9sb2NrZWQsIG11bHRpX3VubG9ja2VkID0gbWFu
YWdlci5fc2hhcmRfdGVzdHModGVzdF9saXN0LCBUcnVlKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoInRlc3RzX3RvX2h0dHBfbG9jayIsIHNpbmdsZV9sb2NrZWRbMF1bMF0pCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdGVzdHNfdG9faHR0cF9sb2NrLCBzZXQoc2luZ2xl
X2xvY2tlZFswXVsxXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInRlc3RzX3RvX2h0dHBf
bG9jayIsIG11bHRpX2xvY2tlZFswXVswXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBl
Y3RlZF90ZXN0c190b19odHRwX2xvY2ssIHNldChtdWx0aV9sb2NrZWRbMF1bMV0pKQorICAgICAg
ICBzZWxmLm1hbmFnZXIgPSBNYW5hZ2VyV3JhcHBlcihwb3J0PXBvcnQsIG9wdGlvbnM9TW9jaygp
LCBwcmludGVyPU1vY2soKSkKKyAgICAgICAgcmV0dXJuIHNlbGYubWFuYWdlci5fc2hhcmRfdGVz
dHMoc2VsZi50ZXN0X2xpc3QsIG51bV93b3JrZXJzLCBmdWxseV9wYXJhbGxlbCkKKworICAgIGRl
ZiB0ZXN0X3NoYXJkX2J5X2RpcihzZWxmKToKKyAgICAgICAgbG9ja2VkLCB1bmxvY2tlZCA9IHNl
bGYuZ2V0X3NoYXJkcyhudW1fd29ya2Vycz0yLCBmdWxseV9wYXJhbGxlbD1GYWxzZSkKKworICAg
ICAgICAjIE5vdGUgdGhhdCBhbHRob3VnaCB0aGVyZSBhcmUgdGVzdHMgaW4gbXVsdGlwbGUgZGly
cyB0aGF0IG5lZWQgbG9ja3MsCisgICAgICAgICMgdGhleSBhcmUgY3JhbW1lZCBpbnRvIGEgc2lu
Z2xlIHNoYXJkIGluIG9yZGVyIHRvIHJlZHVjZSB0aGUgIyBvZgorICAgICAgICAjIHdvcmtlcnMg
aGl0dGluZyB0aGUgc2VydmVyIGF0IG9uY2UuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxv
Y2tlZCwKKyAgICAgICAgICAgIFtUZXN0U2hhcmQoJ2xvY2tlZF9zaGFyZF8xJywKKyAgICAgICAg
ICAgICAgWydMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3ZpZXctc291cmNlLW5vLXJl
ZnJlc2guaHRtbCcsCisgICAgICAgICAgICAgICAnTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJz
b2NrZXQvdGVzdHMvdW5pY29kZS5odG0nLAorICAgICAgICAgICAgICAgJ0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3dlYnNvY2tldC1wcm90b2NvbC1pZ25vcmVkLmh0bWwn
LAorICAgICAgICAgICAgICAgJ0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qv
c3VwcG9ydGVkLXhtbC1jb250ZW50LXR5cGVzLmh0bWwnXSldKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyh1bmxvY2tlZCwKKyAgICAgICAgICAgIFtUZXN0U2hhcmQoJ2FuaW1hdGlvbnMnLAor
ICAgICAgICAgICAgICAgICAgICAgICBbJ0xheW91dFRlc3RzL2FuaW1hdGlvbnMva2V5ZnJhbWVz
Lmh0bWwnXSksCisgICAgICAgICAgICAgVGVzdFNoYXJkKCdkb20vaHRtbC9sZXZlbDIvaHRtbCcs
CisgICAgICAgICAgICAgICAgICAgICAgIFsnTGF5b3V0VGVzdHMvZG9tL2h0bWwvbGV2ZWwyL2h0
bWwvSFRNTEFuY2hvckVsZW1lbnQwMy5odG1sJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdM
YXlvdXRUZXN0cy9kb20vaHRtbC9sZXZlbDIvaHRtbC9IVE1MQW5jaG9yRWxlbWVudDA2Lmh0bWwn
XSksCisgICAgICAgICAgICAgVGVzdFNoYXJkKCdmYXN0L2NzcycsCisgICAgICAgICAgICAgICAg
ICAgICAgIFsnTGF5b3V0VGVzdHMvZmFzdC9jc3MvZGlzcGxheS1ub25lLWlubGluZS1zdHlsZS1j
aGFuZ2UtY3Jhc2guaHRtbCddKSwKKyAgICAgICAgICAgICBUZXN0U2hhcmQoJ2lldGVzdGNlbnRl
ci9KYXZhc2NyaXB0JywKKyAgICAgICAgICAgICAgICAgICAgICAgWydMYXlvdXRUZXN0cy9pZXRl
c3RjZW50ZXIvSmF2YXNjcmlwdC8xMS4xLjVfNC00LWMtMS5odG1sJ10pXSkKKworICAgIGRlZiB0
ZXN0X3NoYXJkX2V2ZXJ5X2ZpbGUoc2VsZik6CisgICAgICAgIGxvY2tlZCwgdW5sb2NrZWQgPSBz
ZWxmLmdldF9zaGFyZHMobnVtX3dvcmtlcnM9MiwgZnVsbHlfcGFyYWxsZWw9VHJ1ZSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMobG9ja2VkLAorICAgICAgICAgICAgW1Rlc3RTaGFyZCgnLics
IFsnTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvdW5pY29kZS5odG0nXSks
CisgICAgICAgICAgICAgVGVzdFNoYXJkKCcuJywgWydMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Nl
Y3VyaXR5L3ZpZXctc291cmNlLW5vLXJlZnJlc2guaHRtbCddKSwKKyAgICAgICAgICAgICBUZXN0
U2hhcmQoJy4nLCBbJ0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3dlYnNv
Y2tldC1wcm90b2NvbC1pZ25vcmVkLmh0bWwnXSksCisgICAgICAgICAgICAgVGVzdFNoYXJkKCcu
JywgWydMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3N1cHBvcnRlZC14bWwt
Y29udGVudC10eXBlcy5odG1sJ10pXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModW5sb2Nr
ZWQsCisgICAgICAgICAgICBbVGVzdFNoYXJkKCcuJywgWydMYXlvdXRUZXN0cy9hbmltYXRpb25z
L2tleWZyYW1lcy5odG1sJ10pLAorICAgICAgICAgICAgIFRlc3RTaGFyZCgnLicsIFsnTGF5b3V0
VGVzdHMvZmFzdC9jc3MvZGlzcGxheS1ub25lLWlubGluZS1zdHlsZS1jaGFuZ2UtY3Jhc2guaHRt
bCddKSwKKyAgICAgICAgICAgICBUZXN0U2hhcmQoJy4nLCBbJ0xheW91dFRlc3RzL2RvbS9odG1s
L2xldmVsMi9odG1sL0hUTUxBbmNob3JFbGVtZW50MDMuaHRtbCddKSwKKyAgICAgICAgICAgICBU
ZXN0U2hhcmQoJy4nLCBbJ0xheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzExLjEu
NV80LTQtYy0xLmh0bWwnXSksCisgICAgICAgICAgICAgVGVzdFNoYXJkKCcuJywgWydMYXlvdXRU
ZXN0cy9kb20vaHRtbC9sZXZlbDIvaHRtbC9IVE1MQW5jaG9yRWxlbWVudDA2Lmh0bWwnXSldKQor
CisgICAgZGVmIHRlc3Rfc2hhcmRfaW5fdHdvKHNlbGYpOgorICAgICAgICBsb2NrZWQsIHVubG9j
a2VkID0gc2VsZi5nZXRfc2hhcmRzKG51bV93b3JrZXJzPTEsIGZ1bGx5X3BhcmFsbGVsPUZhbHNl
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsb2NrZWQsCisgICAgICAgICAgICBbVGVzdFNo
YXJkKCdsb2NrZWRfdGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAgICBbJ0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VuaWNvZGUuaHRtJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICdMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3ZpZXctc291cmNlLW5v
LXJlZnJlc2guaHRtbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvd2Vic29ja2V0LXByb3RvY29sLWlnbm9yZWQuaHRtbCcs
CisgICAgICAgICAgICAgICAgICAgICAgICAnTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRw
cmVxdWVzdC9zdXBwb3J0ZWQteG1sLWNvbnRlbnQtdHlwZXMuaHRtbCddKV0pCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKHVubG9ja2VkLAorICAgICAgICAgICAgW1Rlc3RTaGFyZCgndW5sb2Nr
ZWRfdGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAgICBbJ0xheW91dFRlc3RzL2FuaW1hdGlv
bnMva2V5ZnJhbWVzLmh0bWwnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ0xheW91dFRlc3Rz
L2Zhc3QvY3NzL2Rpc3BsYXktbm9uZS1pbmxpbmUtc3R5bGUtY2hhbmdlLWNyYXNoLmh0bWwnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgJ0xheW91dFRlc3RzL2RvbS9odG1sL2xldmVsMi9odG1s
L0hUTUxBbmNob3JFbGVtZW50MDMuaHRtbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnTGF5
b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTEuMS41XzQtNC1jLTEuaHRtbCcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAnTGF5b3V0VGVzdHMvZG9tL2h0bWwvbGV2ZWwyL2h0bWwv
SFRNTEFuY2hvckVsZW1lbnQwNi5odG1sJ10pXSkKIAogCiBjbGFzcyBOYXR1cmFsQ29tcGFyZVRl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98571</attachid>
            <date>2011-06-24 19:31:58 -0700</date>
            <delta_ts>2011-06-27 15:35:49 -0700</delta_ts>
            <desc>try to make _resize_shards clearer</desc>
            <filename>bug-63116-20110624193157.patch</filename>
            <type>text/plain</type>
            <size>19760</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODkzNzMKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiZTFjN2ZiNGU1MGM4MDI3NTVkYTMyM2M2MmU5Y2RlYjc2
ZDVhNjY3Li5hZDcwMTFlZDgxMGQxZTdmNGQwZTI0YTRlMzU3YTM4ZWFkNTIxMGY4IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjAg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBucnd0
OiBhbGxvdyBmb3IgbXVsdGlwbGUgaHR0cCBzaGFyZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzMTE2CisKKyAgICAgICAgVGhpcyBtb2RpZmllcyB0
aGUgc2hhcmRpbmcgbG9naWMgdG8gc3VwcG9ydCBtdWx0aXBsZSBodHRwCisgICAgICAgIHNoYXJk
cywgYnV0IGZvciBub3cgd2UgY2xhbXAgdG8gb25lIHNoYXJkIHVudGlsIHdlIGNhbiB0ZXN0Cisg
ICAgICAgIHBlcmYgaW1wYWN0IGFuZCBmbGFraW5lc3MgaW1wYWN0LgorCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlci5weToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5h
Z2VyX3VuaXR0ZXN0LnB5OgorCisyMDExLTA2LTIxICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAg
ICAgIG5yd3Q6IG1ha2Ugc2hhcmRpbmcgdGVzdHMgbmVlZGluZyBsb2NrcyBsZXNzIGhhcmQtY29k
ZWQKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzMTEy
CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21hbmFnZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyLnB5CmluZGV4IGU1NmNhNWFhZjNlYTlkODRiYTEyOWRm
NzY0MjJiNzQ1MGQ3Zjg1ZTIuLmFhN2JkMTBjZjNkN2U4MjNiMjU0YjE5NzE3Zjc2OGQxNDc0YTc2
ZTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21hbmFnZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlci5weQpAQCAtMjM1LDYgKzIzNSwyMSBAQCBjbGFz
cyBXb3JrZXJFeGNlcHRpb24oRXhjZXB0aW9uKToKICAgICBwYXNzCiAKIAorY2xhc3MgVGVzdFNo
YXJkKG9iamVjdCk6CisgICAgIiIiQSB0ZXN0IHNoYXJkIGlzIGEgbmFtZWQgbGlzdCBvZiBUZXN0
SW5wdXRzLiIiIgorCisgICAgIyBGSVhNRTogbWFrZSB0aGlzIGNsYXNzIHZpc2libGUsIHVzZWQg
Ynkgd29ya2VycyBhcyB3ZWxsLgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB0ZXN0X2lu
cHV0cyk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi50ZXN0X2lucHV0
cyA9IHRlc3RfaW5wdXRzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVy
biAiVGVzdFNoYXJkKG5hbWU9JyVzJywgdGVzdF9pbnB1dHM9JXMnIiAlIChzZWxmLm5hbWUsIHNl
bGYudGVzdF9pbnB1dHMpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAg
cmV0dXJuIHNlbGYubmFtZSA9PSBvdGhlci5uYW1lIGFuZCBzZWxmLnRlc3RfaW5wdXRzID09IG90
aGVyLnRlc3RfaW5wdXRzCisKKwogY2xhc3MgTWFuYWdlcjoKICAgICAiIiJBIGNsYXNzIGZvciBt
YW5hZ2luZyBydW5uaW5nIGEgc2VyaWVzIG9mIHRlc3RzIG9uIGEgc2VyaWVzIG9mIGxheW91dAog
ICAgIHRlc3QgZmlsZXMuIiIiCkBAIC01MzMsNTEgKzU0OCwxMzEgQEAgY2xhc3MgTWFuYWdlcjoK
ICAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdGF0aW9ucy5oYXNfbW9kaWZpZXIodGVzdF9maWxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4
cGVjdGF0aW9ucy5TTE9XKQogCi0gICAgZGVmIF9zaGFyZF90ZXN0cyhzZWxmLCB0ZXN0X2ZpbGVz
LCB1c2VfcmVhbF9zaGFyZHMpOgorICAgIGRlZiBfc2hhcmRfdGVzdHMoc2VsZiwgdGVzdF9maWxl
cywgbnVtX3dvcmtlcnMsIGZ1bGx5X3BhcmFsbGVsKToKICAgICAgICAgIiIiR3JvdXBzIHRlc3Rz
IGludG8gYmF0Y2hlcy4KICAgICAgICAgVGhpcyBoZWxwcyBlbnN1cmUgdGhhdCB0ZXN0cyB0aGF0
IGRlcGVuZCBvbiBlYWNoIG90aGVyIChha2EgYmFkIHRlc3RzISkKICAgICAgICAgY29udGludWUg
dG8gcnVuIHRvZ2V0aGVyIGFzIG1vc3QgY3Jvc3MtdGVzdHMgZGVwZW5kZW5jaWVzIHRlbmQgdG8K
LSAgICAgICAgb2NjdXIgd2l0aGluIHRoZSBzYW1lIGRpcmVjdG9yeS4gSWYgdXNlX3JlYWxfc2hh
cmRzIGlzIEZhbHNlLCB3ZQotICAgICAgICBwdXQgZWFjaCAobm9uLUhUVFAvd2Vic29ja2V0KSB0
ZXN0IGludG8gaXRzIG93biBzaGFyZCBmb3IgbWF4aW11bQotICAgICAgICBjb25jdXJyZW5jeSBp
bnN0ZWFkIG9mIHRyeWluZyB0byBkbyBhbnkgc29ydCBvZiByZWFsIHNoYXJkaW5nLgotCisgICAg
ICAgIG9jY3VyIHdpdGhpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCiAgICAgICAgIFJldHVybjoKLSAg
ICAgICAgICAgIFR3byBsaXN0cyBvZiBsaXN0cyBvZiBUZXN0SW5wdXQgb2JqZWN0cy4gVGhlIGZp
cnN0IGxpc3Qgc2hvdWxkCi0gICAgICAgICAgICBvbmx5IGJlIHJ1biB1bmRlciB0aGUgc2VydmVy
IGxvY2ssIHRoZSBzZWNvbmQgY2FuIGJlIHJ1biB3aGVuZXZlci4KKyAgICAgICAgICAgIFR3byBs
aXN0IG9mIFRlc3RTaGFyZHMuIFRoZSBmaXJzdCBjb250YWlucyB0ZXN0cyB0aGF0IG11c3Qgb25s
eSBiZQorICAgICAgICAgICAgcnVuIHVuZGVyIHRoZSBzZXJ2ZXIgbG9jaywgdGhlIHNlY29uZCBj
YW4gYmUgcnVuIHdoZW5ldmVyLgogICAgICAgICAiIiIKLSAgICAgICAgIyBGSVhNRTogV2Ugc3Rp
bGwgbmVlZCB0byBzdXBwb3J0IG11bHRpcGxlIGxvY2tlZCBzaGFyZHMuCisKKyAgICAgICAgIyBG
SVhNRTogTW92ZSBhbGwgb2YgdGhlIHNoYXJkaW5nIGxvZ2ljIG91dCBvZiBtYW5hZ2VyIGludG8g
aXRzCisgICAgICAgICMgb3duIGNsYXNzIG9yIG1vZHVsZS4gQ29uc2lkZXIgZ3JvdXBpbmcgaXQg
d2l0aCB0aGUgY2h1bmtpbmcgbG9naWMKKyAgICAgICAgIyBpbiBwcmVwYXJlX2xpc3RzIGFzIHdl
bGwuCisgICAgICAgIGlmIG51bV93b3JrZXJzID09IDE6CisgICAgICAgICAgICByZXR1cm4gc2Vs
Zi5fc2hhcmRfaW5fdHdvKHRlc3RfZmlsZXMpCisgICAgICAgIGVsaWYgZnVsbHlfcGFyYWxsZWw6
CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc2hhcmRfZXZlcnlfZmlsZSh0ZXN0X2ZpbGVzKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NoYXJkX2J5X2RpcmVjdG9y
eSh0ZXN0X2ZpbGVzLCBudW1fd29ya2VycykKKworICAgIGRlZiBfc2hhcmRfaW5fdHdvKHNlbGYs
IHRlc3RfZmlsZXMpOgorICAgICAgICAiIiJSZXR1cm5zIHR3byBsaXN0cyBvZiBzaGFyZHMsIG9u
ZSB3aXRoIGFsbCB0aGUgdGVzdHMgcmVxdWlyaW5nIGEgbG9jayBhbmQgb25lIHdpdGggdGhlIHJl
c3QuCisKKyAgICAgICAgVGhpcyBpcyB1c2VkIHdoZW4gdGhlcmUncyBvbmx5IG9uZSB3b3JrZXIs
IHRvIG1pbmltaXplIHRoZSBwZXItc2hhcmQgb3ZlcmhlYWQuIiIiCisgICAgICAgIGxvY2tlZF9p
bnB1dHMgPSBbXQorICAgICAgICB1bmxvY2tlZF9pbnB1dHMgPSBbXQorICAgICAgICBmb3IgdGVz
dF9maWxlIGluIHRlc3RfZmlsZXM6CisgICAgICAgICAgICB0ZXN0X2lucHV0ID0gc2VsZi5fZ2V0
X3Rlc3RfaW5wdXRfZm9yX2ZpbGUodGVzdF9maWxlKQorICAgICAgICAgICAgaWYgc2VsZi5fdGVz
dF9yZXF1aXJlc19sb2NrKHRlc3RfZmlsZSk6CisgICAgICAgICAgICAgICAgbG9ja2VkX2lucHV0
cy5hcHBlbmQodGVzdF9pbnB1dCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
dW5sb2NrZWRfaW5wdXRzLmFwcGVuZCh0ZXN0X2lucHV0KQorICAgICAgICByZXR1cm4gW1Rlc3RT
aGFyZCgnbG9ja2VkX3Rlc3RzJywgbG9ja2VkX2lucHV0cyldLCBbVGVzdFNoYXJkKCd1bmxvY2tl
ZF90ZXN0cycsIHVubG9ja2VkX2lucHV0cyldCisKKyAgICBkZWYgX3NoYXJkX2V2ZXJ5X2ZpbGUo
c2VsZiwgdGVzdF9maWxlcyk6CisgICAgICAgICIiIlJldHVybnMgdHdvIGxpc3RzIG9mIHNoYXJk
cywgZWFjaCBzaGFyZCBjb250YWluaW5nIGEgc2luZ2xlIHRlc3QgZmlsZS4KKworICAgICAgICBU
aGlzIG1vZGUgZ2V0cyBtYXhpbWFsIHBhcmFsbGVsaXNtIGF0IHRoZSBjb3N0IG9mIG11Y2ggaGln
aGVyIGZsYWtpbmVzcy4iIiIKICAgICAgICAgbG9ja2VkX3NoYXJkcyA9IFtdCiAgICAgICAgIHVu
bG9ja2VkX3NoYXJkcyA9IFtdCi0gICAgICAgIHRlc3RzX3RvX2h0dHBfbG9jayA9IFtdCi0gICAg
ICAgIGlmIG5vdCB1c2VfcmVhbF9zaGFyZHM6Ci0gICAgICAgICAgICBmb3IgdGVzdF9maWxlIGlu
IHRlc3RfZmlsZXM6Ci0gICAgICAgICAgICAgICAgdGVzdF9pbnB1dCA9IHNlbGYuX2dldF90ZXN0
X2lucHV0X2Zvcl9maWxlKHRlc3RfZmlsZSkKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl90ZXN0
X3JlcXVpcmVzX2xvY2sodGVzdF9maWxlKToKLSAgICAgICAgICAgICAgICAgICAgdGVzdHNfdG9f
aHR0cF9sb2NrLmFwcGVuZCh0ZXN0X2lucHV0KQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICAgICAgICAgIHVubG9ja2VkX3NoYXJkcy5hcHBlbmQoKCIuIiwgW3Rlc3RfaW5wdXRd
KSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRlc3RzX2J5X2RpciA9IHt9Ci0gICAgICAg
ICAgICBmb3IgdGVzdF9maWxlIGluIHRlc3RfZmlsZXM6Ci0gICAgICAgICAgICAgICAgZGlyZWN0
b3J5ID0gc2VsZi5fZ2V0X2Rpcl9mb3JfdGVzdF9maWxlKHRlc3RfZmlsZSkKLSAgICAgICAgICAg
ICAgICB0ZXN0X2lucHV0ID0gc2VsZi5fZ2V0X3Rlc3RfaW5wdXRfZm9yX2ZpbGUodGVzdF9maWxl
KQotICAgICAgICAgICAgICAgIGlmIHNlbGYuX3Rlc3RfcmVxdWlyZXNfbG9jayh0ZXN0X2ZpbGUp
OgotICAgICAgICAgICAgICAgICAgICB0ZXN0c190b19odHRwX2xvY2suYXBwZW5kKHRlc3RfaW5w
dXQpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgdGVzdHNfYnlf
ZGlyLnNldGRlZmF1bHQoZGlyZWN0b3J5LCBbXSkKLSAgICAgICAgICAgICAgICAgICAgdGVzdHNf
YnlfZGlyW2RpcmVjdG9yeV0uYXBwZW5kKHRlc3RfaW5wdXQpCi0gICAgICAgICAgICBmb3IgZGly
ZWN0b3J5IGluIHRlc3RzX2J5X2RpcjoKLSAgICAgICAgICAgICAgICB0ZXN0X2xpc3QgPSB0ZXN0
c19ieV9kaXJbZGlyZWN0b3J5XQotICAgICAgICAgICAgICAgIHRlc3RfbGlzdF90dXBsZSA9IChk
aXJlY3RvcnksIHRlc3RfbGlzdCkKLSAgICAgICAgICAgICAgICB1bmxvY2tlZF9zaGFyZHMuYXBw
ZW5kKHRlc3RfbGlzdF90dXBsZSkKKyAgICAgICAgZm9yIHRlc3RfZmlsZSBpbiB0ZXN0X2ZpbGVz
OgorICAgICAgICAgICAgdGVzdF9pbnB1dCA9IHNlbGYuX2dldF90ZXN0X2lucHV0X2Zvcl9maWxl
KHRlc3RfZmlsZSkKKworICAgICAgICAgICAgIyBOb3RlIHRoYXQgd2UgdXNlIGEgJy4nIGZvciB0
aGUgc2hhcmQgbmFtZTsgdGhlIG5hbWUgZG9lc24ndCByZWFsbHkKKyAgICAgICAgICAgICMgbWF0
dGVyLCBhbmQgdGhlIG9ubHkgb3RoZXIgbWVhbmluZ2Z1bCB2YWx1ZSB3b3VsZCBiZSB0aGUgZmls
ZW5hbWUsCisgICAgICAgICAgICAjIHdoaWNoIHdvdWxkIGJlIHJlYWxseSByZWR1bmRhbnQuCisg
ICAgICAgICAgICBpZiBzZWxmLl90ZXN0X3JlcXVpcmVzX2xvY2sodGVzdF9maWxlKToKKyAgICAg
ICAgICAgICAgICBsb2NrZWRfc2hhcmRzLmFwcGVuZChUZXN0U2hhcmQoJy4nLCBbdGVzdF9pbnB1
dF0pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB1bmxvY2tlZF9zaGFyZHMu
YXBwZW5kKFRlc3RTaGFyZCgnLicsIFt0ZXN0X2lucHV0XSkpCisKKyAgICAgICAgcmV0dXJuIGxv
Y2tlZF9zaGFyZHMsIHVubG9ja2VkX3NoYXJkcworCisgICAgZGVmIF9zaGFyZF9ieV9kaXJlY3Rv
cnkoc2VsZiwgdGVzdF9maWxlcywgbnVtX3dvcmtlcnMpOgorICAgICAgICAiIiJSZXR1cm5zIHR3
byBsaXN0cyBvZiBzaGFyZHMsIGVhY2ggc2hhcmQgY29udGFpbmluZyBhbGwgdGhlIGZpbGVzIGlu
IGEgZGlyZWN0b3J5LgorCisgICAgICAgIFRoaXMgaXMgdGhlIGRlZmF1bHQgbW9kZSwgYW5kIGdl
dHMgYXMgbXVjaCBwYXJhbGxlbGlzbSBhcyB3ZSBjYW4gd2hpbGUKKyAgICAgICAgbWluaW1pemlu
ZyBmbGFraW5lc3MgY2F1c2VkIGJ5IGludGVyLXRlc3QgZGVwZW5kZW5jaWVzLiIiIgorICAgICAg
ICBsb2NrZWRfc2hhcmRzID0gW10KKyAgICAgICAgdW5sb2NrZWRfc2hhcmRzID0gW10KKyAgICAg
ICAgdGVzdHNfYnlfZGlyID0ge30KKyAgICAgICAgIyBGSVhNRTogR2l2ZW4gdGhhdCB0aGUgdGVz
dHMgYXJlIGFscmVhZHkgc29ydGVkIGJ5IGRpcmVjdG9yeSwKKyAgICAgICAgIyB3ZSBjYW4gcHJv
YmFibHkgcmV3cml0ZSB0aGlzIHRvIGJlIGNsZWFyZXIgYW5kIGZhc3Rlci4KKyAgICAgICAgZm9y
IHRlc3RfZmlsZSBpbiB0ZXN0X2ZpbGVzOgorICAgICAgICAgICAgZGlyZWN0b3J5ID0gc2VsZi5f
Z2V0X2Rpcl9mb3JfdGVzdF9maWxlKHRlc3RfZmlsZSkKKyAgICAgICAgICAgIHRlc3RfaW5wdXQg
PSBzZWxmLl9nZXRfdGVzdF9pbnB1dF9mb3JfZmlsZSh0ZXN0X2ZpbGUpCisgICAgICAgICAgICB0
ZXN0c19ieV9kaXIuc2V0ZGVmYXVsdChkaXJlY3RvcnksIFtdKQorICAgICAgICAgICAgdGVzdHNf
YnlfZGlyW2RpcmVjdG9yeV0uYXBwZW5kKHRlc3RfaW5wdXQpCisKKyAgICAgICAgZm9yIGRpcmVj
dG9yeSwgdGVzdF9pbnB1dHMgaW4gdGVzdHNfYnlfZGlyLml0ZXJpdGVtcygpOgorICAgICAgICAg
ICAgc2hhcmQgPSBUZXN0U2hhcmQoZGlyZWN0b3J5LCB0ZXN0X2lucHV0cykKKyAgICAgICAgICAg
IGlmIHNlbGYuX3Rlc3RfcmVxdWlyZXNfbG9jayhkaXJlY3RvcnkpOgorICAgICAgICAgICAgICAg
IGxvY2tlZF9zaGFyZHMuYXBwZW5kKHNoYXJkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICB1bmxvY2tlZF9zaGFyZHMuYXBwZW5kKHNoYXJkKQorCisgICAgICAgICMgU29ydCB0
aGUgc2hhcmRzIGJ5IGRpcmVjdG9yeSBuYW1lLgorICAgICAgICBsb2NrZWRfc2hhcmRzLnNvcnQo
a2V5PWxhbWJkYSBzaGFyZDogc2hhcmQubmFtZSkKKyAgICAgICAgdW5sb2NrZWRfc2hhcmRzLnNv
cnQoa2V5PWxhbWJkYSBzaGFyZDogc2hhcmQubmFtZSkKKworICAgICAgICByZXR1cm4gKHNlbGYu
X3Jlc2l6ZV9zaGFyZHMobG9ja2VkX3NoYXJkcywgc2VsZi5fbWF4X2xvY2tlZF9zaGFyZHMobnVt
X3dvcmtlcnMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xvY2tlZF9z
aGFyZCcpLAorICAgICAgICAgICAgICAgIHVubG9ja2VkX3NoYXJkcykKIAotICAgICAgICAgICAg
IyBTb3J0IHRoZSBzaGFyZHMgYnkgZGlyZWN0b3J5IG5hbWUuCi0gICAgICAgICAgICB1bmxvY2tl
ZF9zaGFyZHMuc29ydChsYW1iZGEgYSwgYjogY21wKGFbMF0sIGJbMF0pKQorICAgIGRlZiBfbWF4
X2xvY2tlZF9zaGFyZHMoc2VsZiwgbnVtX3dvcmtlcnMpOgorICAgICAgICAjIFB1dCBhIGNlaWxp
bmcgb24gdGhlIG51bWJlciBvZiBsb2NrZWQgc2hhcmRzLCBzbyB0aGF0IHdlCisgICAgICAgICMg
ZG9uJ3QgaGFtbWVyIHRoZSBzZXJ2ZXJzIHRvbyBiYWRseS4KIAotICAgICAgICBpZiB0ZXN0c190
b19odHRwX2xvY2s6Ci0gICAgICAgICAgICBsb2NrZWRfc2hhcmRzID0gWygidGVzdHNfdG9faHR0
cF9sb2NrIiwgdGVzdHNfdG9faHR0cF9sb2NrKV0KKyAgICAgICAgIyBGSVhNRTogRm9yIG5vdywg
bGltaXQgdG8gb25lIHNoYXJkLiBBZnRlciB0ZXN0aW5nIHRvIG1ha2Ugc3VyZSB3ZQorICAgICAg
ICAjIGNhbiBoYW5kbGUgbXVsdGlwbGUgc2hhcmRzLCB3ZSBzaG91bGQgcHJvYmFibHkgZG8gc29t
ZXRoaW5nIGxpa2UKKyAgICAgICAgIyBsaW1pdCB0aGlzIHRvIG5vIG1vcmUgdGhhbiBhIHF1YXJ0
ZXIgb2YgYWxsIHdvcmtlcnMsIGUuZy46CisgICAgICAgICMgcmV0dXJuIG1heChtYXRoLmNlaWwo
bnVtX3dvcmtlcnMgLyA0LjApLCAxKQorICAgICAgICByZXR1cm4gMQogCi0gICAgICAgIHJldHVy
biAobG9ja2VkX3NoYXJkcywgdW5sb2NrZWRfc2hhcmRzKQorICAgIGRlZiBfcmVzaXplX3NoYXJk
cyhzZWxmLCBvbGRfc2hhcmRzLCBtYXhfbmV3X3NoYXJkcywgc2hhcmRfbmFtZV9wcmVmaXgpOgor
ICAgICAgICAiIiJUYWtlcyBhIGxpc3Qgb2Ygc2hhcmRzIGFuZCByZWRpc3RyaWJ1dGVzIHRoZSB0
ZXN0cyBpbnRvIG5vIG1vcmUKKyAgICAgICAgdGhhbiB8bWF4X25ld19zaGFyZHN8IG5ldyBzaGFy
ZHMuIiIiCisKKyAgICAgICAgIyBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCBlYWNo
IGlucHV0IHNoYXJkIG9ubHkgY29udGFpbnMgdGVzdHMgZnJvbSBhCisgICAgICAgICMgc2luZ2xl
IGRpcmVjdG9yeSwgYW5kIHRoYXQgdGVzdHMgaW4gZWFjaCBzaGFyZCBtdXN0IHJlbWFpbiB0b2dl
dGhlcjsgYXMgYQorICAgICAgICAjIHJlc3VsdCwgYSBnaXZlbiBpbnB1dCBzaGFyZCBpcyBuZXZl
ciBzcGxpdCBiZXR3ZWVuIG91dHB1dCBzaGFyZHMuCisgICAgICAgICMKKyAgICAgICAgIyBFYWNo
IG91dHB1dCBzaGFyZCBjb250YWlucyB0aGUgdGVzdHMgZnJvbSBvbmUgb3IgbW9yZSBpbnB1dCBz
aGFyZHMgYW5kCisgICAgICAgICMgaGVuY2UgbWF5IGNvbnRhaW4gdGVzdHMgZnJvbSBtdWx0aXBs
ZSBkaXJlY3Rvcmllcy4KKworICAgICAgICBkZWYgZGl2aWRlX2FuZF9yb3VuZF91cChudW1lcmF0
b3IsIGRpdmlzb3IpOgorICAgICAgICAgICAgcmV0dXJuIGludChtYXRoLmNlaWwobnVtZXJhdG9y
ICogMS4wIC8gZGl2aXNvcikpCisKKyAgICAgICAgZGVmIGV4dHJhY3RfYW5kX2ZsYXR0ZW4oc2hh
cmRzKToKKyAgICAgICAgICAgIHRlc3RfaW5wdXRzID0gW10KKyAgICAgICAgICAgIGZvciBzaGFy
ZCBpbiBzaGFyZHM6CisgICAgICAgICAgICAgICAgdGVzdF9pbnB1dHMuZXh0ZW5kKHNoYXJkLnRl
c3RfaW5wdXRzKQorICAgICAgICAgICAgcmV0dXJuIHRlc3RfaW5wdXRzCisKKyAgICAgICAgZGVm
IHNwbGl0X2F0KHNlcSwgaW5kZXgpOgorICAgICAgICAgICAgcmV0dXJuIChzZXFbOmluZGV4XSwg
c2VxW2luZGV4Ol0pCisKKyAgICAgICAgbnVtX29sZF9wZXJfbmV3ID0gZGl2aWRlX2FuZF9yb3Vu
ZF91cChsZW4ob2xkX3NoYXJkcyksIG1heF9uZXdfc2hhcmRzKQorICAgICAgICBuZXdfc2hhcmRz
ID0gW10KKyAgICAgICAgcmVtYWluaW5nX3NoYXJkcyA9IG9sZF9zaGFyZHMKKyAgICAgICAgd2hp
bGUgcmVtYWluaW5nX3NoYXJkczoKKyAgICAgICAgICAgIHNvbWVfc2hhcmRzLCByZW1haW5pbmdf
c2hhcmRzID0gc3BsaXRfYXQocmVtYWluaW5nX3NoYXJkcywgbnVtX29sZF9wZXJfbmV3KQorICAg
ICAgICAgICAgbmV3X3NoYXJkcy5hcHBlbmQoVGVzdFNoYXJkKCclc18lZCcgJSAoc2hhcmRfbmFt
ZV9wcmVmaXgsIGxlbihuZXdfc2hhcmRzKSArIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4dHJhY3RfYW5kX2ZsYXR0ZW4oc29tZV9zaGFyZHMpKSkKKyAgICAg
ICAgcmV0dXJuIG5ld19zaGFyZHMKIAogICAgIGRlZiBfY29udGFpbnNfdGVzdHMoc2VsZiwgc3Vi
ZGlyKToKICAgICAgICAgZm9yIHRlc3RfZmlsZSBpbiBzZWxmLl90ZXN0X2ZpbGVzOgpAQCAtNTg1
LDE2ICs2ODAsMTQgQEAgY2xhc3MgTWFuYWdlcjoKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1
ZQogICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgIGRlZiBfbnVtX3dvcmtlcnMoc2VsZiwgbnVt
X3NoYXJkcyk6Ci0gICAgICAgIG51bV93b3JrZXJzID0gbWluKGludChzZWxmLl9vcHRpb25zLmNo
aWxkX3Byb2Nlc3NlcyksIG51bV9zaGFyZHMpCisgICAgZGVmIF9sb2dfbnVtX3dvcmtlcnMoc2Vs
ZiwgbnVtX3dvcmtlcnMsIG51bV9zaGFyZHMsIG51bV9sb2NrZWRfc2hhcmRzKToKICAgICAgICAg
ZHJpdmVyX25hbWUgPSBzZWxmLl9wb3J0LmRyaXZlcl9uYW1lKCkKICAgICAgICAgaWYgbnVtX3dv
cmtlcnMgPT0gMToKICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfY29uZmlnKCJSdW5u
aW5nIDEgJXMgb3ZlciAlcyIgJQogICAgICAgICAgICAgICAgIChkcml2ZXJfbmFtZSwgZ3JhbW1h
ci5wbHVyYWxpemUoJ3NoYXJkJywgbnVtX3NoYXJkcykpKQogICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9jb25maWcoIlJ1bm5pbmcgJWQgJXNzIGluIHBhcmFs
bGVsIG92ZXIgJWQgc2hhcmRzIiAlCi0gICAgICAgICAgICAgICAgKG51bV93b3JrZXJzLCBkcml2
ZXJfbmFtZSwgbnVtX3NoYXJkcykpCi0gICAgICAgIHJldHVybiBudW1fd29ya2VycworICAgICAg
ICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9jb25maWcoIlJ1bm5pbmcgJWQgJXNzIGluIHBhcmFs
bGVsIG92ZXIgJWQgc2hhcmRzICglZCBsb2NrZWQpIiAlCisgICAgICAgICAgICAgICAgKG51bV93
b3JrZXJzLCBkcml2ZXJfbmFtZSwgbnVtX3NoYXJkcywgbnVtX2xvY2tlZF9zaGFyZHMpKQogCiAg
ICAgZGVmIF9ydW5fdGVzdHMoc2VsZiwgZmlsZV9saXN0LCByZXN1bHRfc3VtbWFyeSk6CiAgICAg
ICAgICIiIlJ1bnMgdGhlIHRlc3RzIGluIHRoZSBmaWxlX2xpc3QuCkBAIC02MjMsNyArNzE2LDcg
QEAgY2xhc3MgTWFuYWdlcjoKIAogICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgn
U2hhcmRpbmcgdGVzdHMgLi4uJykKICAgICAgICAgbG9ja2VkX3NoYXJkcywgdW5sb2NrZWRfc2hh
cmRzID0gc2VsZi5fc2hhcmRfdGVzdHMoZmlsZV9saXN0LAotICAgICAgICAgICAgaW50KHNlbGYu
X29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSA+IDEgYW5kIG5vdCBzZWxmLl9vcHRpb25zLmV4cGVy
aW1lbnRhbF9mdWxseV9wYXJhbGxlbCkKKyAgICAgICAgICAgIGludChzZWxmLl9vcHRpb25zLmNo
aWxkX3Byb2Nlc3NlcyksIHNlbGYuX29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVs
KQogCiAgICAgICAgICMgRklYTUU6IFdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byBjb29yZGlu
YXRlIHRoZSB3b3JrZXJzIHNvIHRoYXQKICAgICAgICAgIyB0aGV5IGRvbid0IHRyeSB0byBydW4g
dGhlIHNoYXJkcyB0aGF0IG5lZWQgYSBsb2NrIGlmIHdlIGRvbid0IGFjdHVhbGx5CkBAIC02Mzgs
NyArNzMxLDkgQEAgY2xhc3MgTWFuYWdlcjoKICAgICAgICAgaWYgbG9ja2VkX3NoYXJkczoKICAg
ICAgICAgICAgIHNlbGYuc3RhcnRfc2VydmVyc193aXRoX2xvY2soKQogCi0gICAgICAgIG51bV93
b3JrZXJzID0gc2VsZi5fbnVtX3dvcmtlcnMobGVuKGFsbF9zaGFyZHMpKQorICAgICAgICBudW1f
d29ya2VycyA9IG1pbihpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpLCBsZW4oYWxs
X3NoYXJkcykpCisgICAgICAgIHNlbGYuX2xvZ19udW1fd29ya2VycyhudW1fd29ya2VycywgbGVu
KGFsbF9zaGFyZHMpLCBsZW4obG9ja2VkX3NoYXJkcykpCisKICAgICAgICAgbWFuYWdlcl9jb25u
ZWN0aW9uID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLmdldChzZWxmLl9wb3J0LCBzZWxmLl9vcHRp
b25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYsIHdvcmtlci5Xb3JrZXIpCiAKQEAgLTY2MSw3ICs3NTYsOCBAQCBjbGFzcyBNYW5h
Z2VyOgogCiAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0
aW5nIC4uLiIpCiAgICAgICAgIGZvciBzaGFyZCBpbiBhbGxfc2hhcmRzOgotICAgICAgICAgICAg
bWFuYWdlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgndGVzdF9saXN0Jywgc2hhcmRbMF0sIHNo
YXJkWzFdKQorICAgICAgICAgICAgIyBGSVhNRTogY2hhbmdlICd0ZXN0X2xpc3QnIHRvICdzaGFy
ZCcsIG1ha2Ugc2hhcmRpbmcgcHVibGljCisgICAgICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24u
cG9zdF9tZXNzYWdlKCd0ZXN0X2xpc3QnLCBzaGFyZC5uYW1lLCBzaGFyZC50ZXN0X2lucHV0cykK
IAogICAgICAgICAjIFdlIHBvc3Qgb25lICdzdG9wJyBtZXNzYWdlIGZvciBlYWNoIHdvcmtlci4g
QmVjYXVzZSB0aGUgc3RvcCBtZXNzYWdlCiAgICAgICAgICMgYXJlIHNlbnQgYWZ0ZXIgYWxsIG9m
IHRoZSB0ZXN0cywgYW5kIGJlY2F1c2UgZWFjaCB3b3JrZXIgd2lsbCBzdG9wCkBAIC0xMzYwLDcg
KzE0NTYsNyBAQCBjbGFzcyBNYW5hZ2VyOgogCiAgICAgICAgIGRlZiBmaW5kKG5hbWUsIHRlc3Rf
bGlzdHMpOgogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHRlc3RfbGlzdHMpKToKLSAg
ICAgICAgICAgICAgICBpZiB0ZXN0X2xpc3RzW2ldWzBdID09IG5hbWU6CisgICAgICAgICAgICAg
ICAgaWYgdGVzdF9saXN0c1tpXS5uYW1lID09IG5hbWU6CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBpCiAgICAgICAgICAgICByZXR1cm4gLTEKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl91bml0dGVzdC5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21h
bmFnZXJfdW5pdHRlc3QucHkKaW5kZXggOWMxYWY4ODU5YTBiZTZkMzFkODU0ODI0Njk4YTQ2N2Rh
MGM3YWU2OS4uYzg0MjFlYTVhNjc2N2ViZjVkYjBlYjg5NTgzNWM1YmZlOWU4N2M2YyAxMDA2NDQK
LS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
bWFuYWdlcl91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3VuaXR0ZXN0LnB5CkBAIC0zNyw0NiArMzcsODcg
QEAgZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5Lm1vY2sgaW1wb3J0IE1vY2sKIAogZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1hbmFnZXIKIAorVGVzdFNo
YXJkID0gbWFuYWdlci5UZXN0U2hhcmQKKwogCiBjbGFzcyBNYW5hZ2VyV3JhcHBlcihtYW5hZ2Vy
Lk1hbmFnZXIpOgogICAgIGRlZiBfZ2V0X3Rlc3RfaW5wdXRfZm9yX2ZpbGUoc2VsZiwgdGVzdF9m
aWxlKToKICAgICAgICAgcmV0dXJuIHRlc3RfZmlsZQogCiAKLWNsYXNzIE1hbmFnZXJUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9zaGFyZF90ZXN0cyhzZWxmKToKLSAgICAg
ICAgIyBUZXN0IHRoYXQgX3NoYXJkX3Rlc3RzIGluIHRlc3RfcnVubmVyLlRlc3RSdW5uZXIgcmVh
bGx5Ci0gICAgICAgICMgcHV0IHRoZSBodHRwIHRlc3RzIGZpcnN0IGluIHRoZSBxdWV1ZS4KK2Ns
YXNzIFNoYXJkaW5nVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgRklYTUU6IFJlbW92
ZSAiTGF5b3V0VGVzdHMiIGZyb20gdGhpcyBpZiB3ZSBjYW4gZXZlciBjb252ZXJ0IHRoZSBnZW5l
cmljCisgICAgIyBjb2RlIGZyb20gZmlsZW5hbWVzIHRvIHRlc3QgbmFtZXMuCisgICAgdGVzdF9s
aXN0ID0gWworICAgICAgICAiTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMv
dW5pY29kZS5odG0iLAorICAgICAgICAiTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9rZXlmcmFtZXMu
aHRtbCIsCisgICAgICAgICJMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3ZpZXctc291
cmNlLW5vLXJlZnJlc2guaHRtbCIsCisgICAgICAgICJMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dl
YnNvY2tldC90ZXN0cy93ZWJzb2NrZXQtcHJvdG9jb2wtaWdub3JlZC5odG1sIiwKKyAgICAgICAg
IkxheW91dFRlc3RzL2Zhc3QvY3NzL2Rpc3BsYXktbm9uZS1pbmxpbmUtc3R5bGUtY2hhbmdlLWNy
YXNoLmh0bWwiLAorICAgICAgICAiTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVz
dC9zdXBwb3J0ZWQteG1sLWNvbnRlbnQtdHlwZXMuaHRtbCIsCisgICAgICAgICJMYXlvdXRUZXN0
cy9kb20vaHRtbC9sZXZlbDIvaHRtbC9IVE1MQW5jaG9yRWxlbWVudDAzLmh0bWwiLAorICAgICAg
ICAiTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTEuMS41XzQtNC1jLTEuaHRt
bCIsCisgICAgICAgICJMYXlvdXRUZXN0cy9kb20vaHRtbC9sZXZlbDIvaHRtbC9IVE1MQW5jaG9y
RWxlbWVudDA2Lmh0bWwiLAorICAgIF0KKworICAgIGRlZiBnZXRfc2hhcmRzKHNlbGYsIG51bV93
b3JrZXJzLCBmdWxseV9wYXJhbGxlbCk6CiAgICAgICAgIHBvcnQgPSBNb2NrKCkKICAgICAgICAg
cG9ydC5fZmlsZXN5c3RlbSA9IGZpbGVzeXN0ZW1fbW9jay5Nb2NrRmlsZVN5c3RlbSgpCi0gICAg
ICAgIG1hbmFnZXIgPSBNYW5hZ2VyV3JhcHBlcihwb3J0PXBvcnQsIG9wdGlvbnM9TW9jaygpLCBw
cmludGVyPU1vY2soKSkKLQotICAgICAgICB0ZXN0X2xpc3QgPSBbCi0gICAgICAgICAgIkxheW91
dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91bmljb2RlLmh0bSIsCi0gICAgICAgICAgIkxheW91dFRl
c3RzL2FuaW1hdGlvbnMva2V5ZnJhbWVzLmh0bWwiLAotICAgICAgICAgICJMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3NlY3VyaXR5L3ZpZXctc291cmNlLW5vLXJlZnJlc2guaHRtbCIsCi0gICAgICAg
ICAgIkxheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy93ZWJzb2NrZXQtcHJvdG9jb2wtaWdub3Jl
ZC5odG1sIiwKLSAgICAgICAgICAiTGF5b3V0VGVzdHMvZmFzdC9jc3MvZGlzcGxheS1ub25lLWlu
bGluZS1zdHlsZS1jaGFuZ2UtY3Jhc2guaHRtbCIsCi0gICAgICAgICAgIkxheW91dFRlc3RzL2h0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3VwcG9ydGVkLXhtbC1jb250ZW50LXR5cGVzLmh0bWwi
LAotICAgICAgICAgICJMYXlvdXRUZXN0cy9kb20vaHRtbC9sZXZlbDIvaHRtbC9IVE1MQW5jaG9y
RWxlbWVudDAzLmh0bWwiLAotICAgICAgICAgICJMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2
YXNjcmlwdC8xMS4xLjVfNC00LWMtMS5odG1sIiwKLSAgICAgICAgICAiTGF5b3V0VGVzdHMvZG9t
L2h0bWwvbGV2ZWwyL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQwNi5odG1sIiwKLSAgICAgICAgXQot
Ci0gICAgICAgIGV4cGVjdGVkX3Rlc3RzX3RvX2h0dHBfbG9jayA9IHNldChbCi0gICAgICAgICAg
J0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91bmljb2RlLmh0bScsCi0gICAgICAgICAgJ0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvdmlldy1zb3VyY2Utbm8tcmVmcmVzaC5odG1s
JywKLSAgICAgICAgICAnTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3dlYnNvY2tldC1wcm90
b2NvbC1pZ25vcmVkLmh0bWwnLAotICAgICAgICAgICdMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3ht
bGh0dHByZXF1ZXN0L3N1cHBvcnRlZC14bWwtY29udGVudC10eXBlcy5odG1sJywKLSAgICAgICAg
XSkKLQotICAgICAgICBzaW5nbGVfbG9ja2VkLCBzaW5nbGVfdW5sb2NrZWQgPSBtYW5hZ2VyLl9z
aGFyZF90ZXN0cyh0ZXN0X2xpc3QsIEZhbHNlKQotICAgICAgICBtdWx0aV9sb2NrZWQsIG11bHRp
X3VubG9ja2VkID0gbWFuYWdlci5fc2hhcmRfdGVzdHModGVzdF9saXN0LCBUcnVlKQotCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoInRlc3RzX3RvX2h0dHBfbG9jayIsIHNpbmdsZV9sb2NrZWRb
MF1bMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdGVzdHNfdG9faHR0cF9s
b2NrLCBzZXQoc2luZ2xlX2xvY2tlZFswXVsxXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
InRlc3RzX3RvX2h0dHBfbG9jayIsIG11bHRpX2xvY2tlZFswXVswXSkKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChleHBlY3RlZF90ZXN0c190b19odHRwX2xvY2ssIHNldChtdWx0aV9sb2NrZWRb
MF1bMV0pKQorICAgICAgICBzZWxmLm1hbmFnZXIgPSBNYW5hZ2VyV3JhcHBlcihwb3J0PXBvcnQs
IG9wdGlvbnM9TW9jaygpLCBwcmludGVyPU1vY2soKSkKKyAgICAgICAgcmV0dXJuIHNlbGYubWFu
YWdlci5fc2hhcmRfdGVzdHMoc2VsZi50ZXN0X2xpc3QsIG51bV93b3JrZXJzLCBmdWxseV9wYXJh
bGxlbCkKKworICAgIGRlZiB0ZXN0X3NoYXJkX2J5X2RpcihzZWxmKToKKyAgICAgICAgbG9ja2Vk
LCB1bmxvY2tlZCA9IHNlbGYuZ2V0X3NoYXJkcyhudW1fd29ya2Vycz0yLCBmdWxseV9wYXJhbGxl
bD1GYWxzZSkKKworICAgICAgICAjIE5vdGUgdGhhdCBhbHRob3VnaCB0aGVyZSBhcmUgdGVzdHMg
aW4gbXVsdGlwbGUgZGlycyB0aGF0IG5lZWQgbG9ja3MsCisgICAgICAgICMgdGhleSBhcmUgY3Jh
bW1lZCBpbnRvIGEgc2luZ2xlIHNoYXJkIGluIG9yZGVyIHRvIHJlZHVjZSB0aGUgIyBvZgorICAg
ICAgICAjIHdvcmtlcnMgaGl0dGluZyB0aGUgc2VydmVyIGF0IG9uY2UuCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKGxvY2tlZCwKKyAgICAgICAgICAgIFtUZXN0U2hhcmQoJ2xvY2tlZF9zaGFy
ZF8xJywKKyAgICAgICAgICAgICAgWydMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Zp
ZXctc291cmNlLW5vLXJlZnJlc2guaHRtbCcsCisgICAgICAgICAgICAgICAnTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvdW5pY29kZS5odG0nLAorICAgICAgICAgICAgICAg
J0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3dlYnNvY2tldC1wcm90b2Nv
bC1pZ25vcmVkLmh0bWwnLAorICAgICAgICAgICAgICAgJ0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3Qvc3VwcG9ydGVkLXhtbC1jb250ZW50LXR5cGVzLmh0bWwnXSldKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyh1bmxvY2tlZCwKKyAgICAgICAgICAgIFtUZXN0U2hhcmQo
J2FuaW1hdGlvbnMnLAorICAgICAgICAgICAgICAgICAgICAgICBbJ0xheW91dFRlc3RzL2FuaW1h
dGlvbnMva2V5ZnJhbWVzLmh0bWwnXSksCisgICAgICAgICAgICAgVGVzdFNoYXJkKCdkb20vaHRt
bC9sZXZlbDIvaHRtbCcsCisgICAgICAgICAgICAgICAgICAgICAgIFsnTGF5b3V0VGVzdHMvZG9t
L2h0bWwvbGV2ZWwyL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQwMy5odG1sJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICdMYXlvdXRUZXN0cy9kb20vaHRtbC9sZXZlbDIvaHRtbC9IVE1MQW5jaG9y
RWxlbWVudDA2Lmh0bWwnXSksCisgICAgICAgICAgICAgVGVzdFNoYXJkKCdmYXN0L2NzcycsCisg
ICAgICAgICAgICAgICAgICAgICAgIFsnTGF5b3V0VGVzdHMvZmFzdC9jc3MvZGlzcGxheS1ub25l
LWlubGluZS1zdHlsZS1jaGFuZ2UtY3Jhc2guaHRtbCddKSwKKyAgICAgICAgICAgICBUZXN0U2hh
cmQoJ2lldGVzdGNlbnRlci9KYXZhc2NyaXB0JywKKyAgICAgICAgICAgICAgICAgICAgICAgWydM
YXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xMS4xLjVfNC00LWMtMS5odG1sJ10p
XSkKKworICAgIGRlZiB0ZXN0X3NoYXJkX2V2ZXJ5X2ZpbGUoc2VsZik6CisgICAgICAgIGxvY2tl
ZCwgdW5sb2NrZWQgPSBzZWxmLmdldF9zaGFyZHMobnVtX3dvcmtlcnM9MiwgZnVsbHlfcGFyYWxs
ZWw9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobG9ja2VkLAorICAgICAgICAgICAg
W1Rlc3RTaGFyZCgnLicsIFsnTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMv
dW5pY29kZS5odG0nXSksCisgICAgICAgICAgICAgVGVzdFNoYXJkKCcuJywgWydMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3ZpZXctc291cmNlLW5vLXJlZnJlc2guaHRtbCddKSwKKyAg
ICAgICAgICAgICBUZXN0U2hhcmQoJy4nLCBbJ0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29j
a2V0L3Rlc3RzL3dlYnNvY2tldC1wcm90b2NvbC1pZ25vcmVkLmh0bWwnXSksCisgICAgICAgICAg
ICAgVGVzdFNoYXJkKCcuJywgWydMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L3N1cHBvcnRlZC14bWwtY29udGVudC10eXBlcy5odG1sJ10pXSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHModW5sb2NrZWQsCisgICAgICAgICAgICBbVGVzdFNoYXJkKCcuJywgWydMYXlvdXRU
ZXN0cy9hbmltYXRpb25zL2tleWZyYW1lcy5odG1sJ10pLAorICAgICAgICAgICAgIFRlc3RTaGFy
ZCgnLicsIFsnTGF5b3V0VGVzdHMvZmFzdC9jc3MvZGlzcGxheS1ub25lLWlubGluZS1zdHlsZS1j
aGFuZ2UtY3Jhc2guaHRtbCddKSwKKyAgICAgICAgICAgICBUZXN0U2hhcmQoJy4nLCBbJ0xheW91
dFRlc3RzL2RvbS9odG1sL2xldmVsMi9odG1sL0hUTUxBbmNob3JFbGVtZW50MDMuaHRtbCddKSwK
KyAgICAgICAgICAgICBUZXN0U2hhcmQoJy4nLCBbJ0xheW91dFRlc3RzL2lldGVzdGNlbnRlci9K
YXZhc2NyaXB0LzExLjEuNV80LTQtYy0xLmh0bWwnXSksCisgICAgICAgICAgICAgVGVzdFNoYXJk
KCcuJywgWydMYXlvdXRUZXN0cy9kb20vaHRtbC9sZXZlbDIvaHRtbC9IVE1MQW5jaG9yRWxlbWVu
dDA2Lmh0bWwnXSldKQorCisgICAgZGVmIHRlc3Rfc2hhcmRfaW5fdHdvKHNlbGYpOgorICAgICAg
ICBsb2NrZWQsIHVubG9ja2VkID0gc2VsZi5nZXRfc2hhcmRzKG51bV93b3JrZXJzPTEsIGZ1bGx5
X3BhcmFsbGVsPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsb2NrZWQsCisgICAg
ICAgICAgICBbVGVzdFNoYXJkKCdsb2NrZWRfdGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAg
ICBbJ0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VuaWNvZGUuaHRtJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICdMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L3ZpZXctc291cmNlLW5vLXJlZnJlc2guaHRtbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAn
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvd2Vic29ja2V0LXByb3RvY29s
LWlnbm9yZWQuaHRtbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy94bWxodHRwcmVxdWVzdC9zdXBwb3J0ZWQteG1sLWNvbnRlbnQtdHlwZXMuaHRtbCdd
KV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHVubG9ja2VkLAorICAgICAgICAgICAgW1Rl
c3RTaGFyZCgndW5sb2NrZWRfdGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAgICBbJ0xheW91
dFRlc3RzL2FuaW1hdGlvbnMva2V5ZnJhbWVzLmh0bWwnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgJ0xheW91dFRlc3RzL2Zhc3QvY3NzL2Rpc3BsYXktbm9uZS1pbmxpbmUtc3R5bGUtY2hhbmdl
LWNyYXNoLmh0bWwnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ0xheW91dFRlc3RzL2RvbS9o
dG1sL2xldmVsMi9odG1sL0hUTUxBbmNob3JFbGVtZW50MDMuaHRtbCcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAnTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTEuMS41XzQt
NC1jLTEuaHRtbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnTGF5b3V0VGVzdHMvZG9tL2h0
bWwvbGV2ZWwyL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQwNi5odG1sJ10pXSkKIAogCiBjbGFzcyBO
YXR1cmFsQ29tcGFyZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98804</attachid>
            <date>2011-06-27 15:35:54 -0700</date>
            <delta_ts>2011-06-30 19:55:38 -0700</delta_ts>
            <desc>update w/ more feedback from tony</desc>
            <filename>bug-63116-20110627153552.patch</filename>
            <type>text/plain</type>
            <size>19743</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODkzNzMKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiZTFjN2ZiNGU1MGM4MDI3NTVkYTMyM2M2MmU5Y2RlYjc2
ZDVhNjY3Li5hZDcwMTFlZDgxMGQxZTdmNGQwZTI0YTRlMzU3YTM4ZWFkNTIxMGY4IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjAg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBucnd0
OiBhbGxvdyBmb3IgbXVsdGlwbGUgaHR0cCBzaGFyZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzMTE2CisKKyAgICAgICAgVGhpcyBtb2RpZmllcyB0
aGUgc2hhcmRpbmcgbG9naWMgdG8gc3VwcG9ydCBtdWx0aXBsZSBodHRwCisgICAgICAgIHNoYXJk
cywgYnV0IGZvciBub3cgd2UgY2xhbXAgdG8gb25lIHNoYXJkIHVudGlsIHdlIGNhbiB0ZXN0Cisg
ICAgICAgIHBlcmYgaW1wYWN0IGFuZCBmbGFraW5lc3MgaW1wYWN0LgorCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlci5weToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5h
Z2VyX3VuaXR0ZXN0LnB5OgorCisyMDExLTA2LTIxICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAg
ICAgIG5yd3Q6IG1ha2Ugc2hhcmRpbmcgdGVzdHMgbmVlZGluZyBsb2NrcyBsZXNzIGhhcmQtY29k
ZWQKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzMTEy
CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21hbmFnZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyLnB5CmluZGV4IGU1NmNhNWFhZjNlYTlkODRiYTEyOWRm
NzY0MjJiNzQ1MGQ3Zjg1ZTIuLjI3MmYyOGFlODY5MTU3YTA4ZGY3YWFjOGVkMTY1MzYzMTJjOTA1
ODkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21hbmFnZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlci5weQpAQCAtMjM1LDYgKzIzNSwyMSBAQCBjbGFz
cyBXb3JrZXJFeGNlcHRpb24oRXhjZXB0aW9uKToKICAgICBwYXNzCiAKIAorY2xhc3MgVGVzdFNo
YXJkKG9iamVjdCk6CisgICAgIiIiQSB0ZXN0IHNoYXJkIGlzIGEgbmFtZWQgbGlzdCBvZiBUZXN0
SW5wdXRzLiIiIgorCisgICAgIyBGSVhNRTogTWFrZSB0aGlzIGNsYXNzIHZpc2libGUsIHVzZWQg
Ynkgd29ya2VycyBhcyB3ZWxsLgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB0ZXN0X2lu
cHV0cyk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi50ZXN0X2lucHV0
cyA9IHRlc3RfaW5wdXRzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVy
biAiVGVzdFNoYXJkKG5hbWU9JyVzJywgdGVzdF9pbnB1dHM9JXMnIiAlIChzZWxmLm5hbWUsIHNl
bGYudGVzdF9pbnB1dHMpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAg
cmV0dXJuIHNlbGYubmFtZSA9PSBvdGhlci5uYW1lIGFuZCBzZWxmLnRlc3RfaW5wdXRzID09IG90
aGVyLnRlc3RfaW5wdXRzCisKKwogY2xhc3MgTWFuYWdlcjoKICAgICAiIiJBIGNsYXNzIGZvciBt
YW5hZ2luZyBydW5uaW5nIGEgc2VyaWVzIG9mIHRlc3RzIG9uIGEgc2VyaWVzIG9mIGxheW91dAog
ICAgIHRlc3QgZmlsZXMuIiIiCkBAIC01MzMsNTEgKzU0OCwxMzAgQEAgY2xhc3MgTWFuYWdlcjoK
ICAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdGF0aW9ucy5oYXNfbW9kaWZpZXIodGVzdF9maWxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4
cGVjdGF0aW9ucy5TTE9XKQogCi0gICAgZGVmIF9zaGFyZF90ZXN0cyhzZWxmLCB0ZXN0X2ZpbGVz
LCB1c2VfcmVhbF9zaGFyZHMpOgorICAgIGRlZiBfc2hhcmRfdGVzdHMoc2VsZiwgdGVzdF9maWxl
cywgbnVtX3dvcmtlcnMsIGZ1bGx5X3BhcmFsbGVsKToKICAgICAgICAgIiIiR3JvdXBzIHRlc3Rz
IGludG8gYmF0Y2hlcy4KICAgICAgICAgVGhpcyBoZWxwcyBlbnN1cmUgdGhhdCB0ZXN0cyB0aGF0
IGRlcGVuZCBvbiBlYWNoIG90aGVyIChha2EgYmFkIHRlc3RzISkKICAgICAgICAgY29udGludWUg
dG8gcnVuIHRvZ2V0aGVyIGFzIG1vc3QgY3Jvc3MtdGVzdHMgZGVwZW5kZW5jaWVzIHRlbmQgdG8K
LSAgICAgICAgb2NjdXIgd2l0aGluIHRoZSBzYW1lIGRpcmVjdG9yeS4gSWYgdXNlX3JlYWxfc2hh
cmRzIGlzIEZhbHNlLCB3ZQotICAgICAgICBwdXQgZWFjaCAobm9uLUhUVFAvd2Vic29ja2V0KSB0
ZXN0IGludG8gaXRzIG93biBzaGFyZCBmb3IgbWF4aW11bQotICAgICAgICBjb25jdXJyZW5jeSBp
bnN0ZWFkIG9mIHRyeWluZyB0byBkbyBhbnkgc29ydCBvZiByZWFsIHNoYXJkaW5nLgotCisgICAg
ICAgIG9jY3VyIHdpdGhpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCiAgICAgICAgIFJldHVybjoKLSAg
ICAgICAgICAgIFR3byBsaXN0cyBvZiBsaXN0cyBvZiBUZXN0SW5wdXQgb2JqZWN0cy4gVGhlIGZp
cnN0IGxpc3Qgc2hvdWxkCi0gICAgICAgICAgICBvbmx5IGJlIHJ1biB1bmRlciB0aGUgc2VydmVy
IGxvY2ssIHRoZSBzZWNvbmQgY2FuIGJlIHJ1biB3aGVuZXZlci4KKyAgICAgICAgICAgIFR3byBs
aXN0IG9mIFRlc3RTaGFyZHMuIFRoZSBmaXJzdCBjb250YWlucyB0ZXN0cyB0aGF0IG11c3Qgb25s
eSBiZQorICAgICAgICAgICAgcnVuIHVuZGVyIHRoZSBzZXJ2ZXIgbG9jaywgdGhlIHNlY29uZCBj
YW4gYmUgcnVuIHdoZW5ldmVyLgogICAgICAgICAiIiIKLSAgICAgICAgIyBGSVhNRTogV2Ugc3Rp
bGwgbmVlZCB0byBzdXBwb3J0IG11bHRpcGxlIGxvY2tlZCBzaGFyZHMuCisKKyAgICAgICAgIyBG
SVhNRTogTW92ZSBhbGwgb2YgdGhlIHNoYXJkaW5nIGxvZ2ljIG91dCBvZiBtYW5hZ2VyIGludG8g
aXRzCisgICAgICAgICMgb3duIGNsYXNzIG9yIG1vZHVsZS4gQ29uc2lkZXIgZ3JvdXBpbmcgaXQg
d2l0aCB0aGUgY2h1bmtpbmcgbG9naWMKKyAgICAgICAgIyBpbiBwcmVwYXJlX2xpc3RzIGFzIHdl
bGwuCisgICAgICAgIGlmIG51bV93b3JrZXJzID09IDE6CisgICAgICAgICAgICByZXR1cm4gc2Vs
Zi5fc2hhcmRfaW5fdHdvKHRlc3RfZmlsZXMpCisgICAgICAgIGVsaWYgZnVsbHlfcGFyYWxsZWw6
CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc2hhcmRfZXZlcnlfZmlsZSh0ZXN0X2ZpbGVzKQor
ICAgICAgICByZXR1cm4gc2VsZi5fc2hhcmRfYnlfZGlyZWN0b3J5KHRlc3RfZmlsZXMsIG51bV93
b3JrZXJzKQorCisgICAgZGVmIF9zaGFyZF9pbl90d28oc2VsZiwgdGVzdF9maWxlcyk6CisgICAg
ICAgICIiIlJldHVybnMgdHdvIGxpc3RzIG9mIHNoYXJkcywgb25lIHdpdGggYWxsIHRoZSB0ZXN0
cyByZXF1aXJpbmcgYSBsb2NrIGFuZCBvbmUgd2l0aCB0aGUgcmVzdC4KKworICAgICAgICBUaGlz
IGlzIHVzZWQgd2hlbiB0aGVyZSdzIG9ubHkgb25lIHdvcmtlciwgdG8gbWluaW1pemUgdGhlIHBl
ci1zaGFyZCBvdmVyaGVhZC4iIiIKKyAgICAgICAgbG9ja2VkX2lucHV0cyA9IFtdCisgICAgICAg
IHVubG9ja2VkX2lucHV0cyA9IFtdCisgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gdGVzdF9maWxl
czoKKyAgICAgICAgICAgIHRlc3RfaW5wdXQgPSBzZWxmLl9nZXRfdGVzdF9pbnB1dF9mb3JfZmls
ZSh0ZXN0X2ZpbGUpCisgICAgICAgICAgICBpZiBzZWxmLl90ZXN0X3JlcXVpcmVzX2xvY2sodGVz
dF9maWxlKToKKyAgICAgICAgICAgICAgICBsb2NrZWRfaW5wdXRzLmFwcGVuZCh0ZXN0X2lucHV0
KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB1bmxvY2tlZF9pbnB1dHMuYXBw
ZW5kKHRlc3RfaW5wdXQpCisgICAgICAgIHJldHVybiBbVGVzdFNoYXJkKCdsb2NrZWRfdGVzdHMn
LCBsb2NrZWRfaW5wdXRzKV0sIFtUZXN0U2hhcmQoJ3VubG9ja2VkX3Rlc3RzJywgdW5sb2NrZWRf
aW5wdXRzKV0KKworICAgIGRlZiBfc2hhcmRfZXZlcnlfZmlsZShzZWxmLCB0ZXN0X2ZpbGVzKToK
KyAgICAgICAgIiIiUmV0dXJucyB0d28gbGlzdHMgb2Ygc2hhcmRzLCBlYWNoIHNoYXJkIGNvbnRh
aW5pbmcgYSBzaW5nbGUgdGVzdCBmaWxlLgorCisgICAgICAgIFRoaXMgbW9kZSBnZXRzIG1heGlt
YWwgcGFyYWxsZWxpc20gYXQgdGhlIGNvc3Qgb2YgbXVjaCBoaWdoZXIgZmxha2luZXNzLiIiIgog
ICAgICAgICBsb2NrZWRfc2hhcmRzID0gW10KICAgICAgICAgdW5sb2NrZWRfc2hhcmRzID0gW10K
LSAgICAgICAgdGVzdHNfdG9faHR0cF9sb2NrID0gW10KLSAgICAgICAgaWYgbm90IHVzZV9yZWFs
X3NoYXJkczoKLSAgICAgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gdGVzdF9maWxlczoKLSAgICAg
ICAgICAgICAgICB0ZXN0X2lucHV0ID0gc2VsZi5fZ2V0X3Rlc3RfaW5wdXRfZm9yX2ZpbGUodGVz
dF9maWxlKQotICAgICAgICAgICAgICAgIGlmIHNlbGYuX3Rlc3RfcmVxdWlyZXNfbG9jayh0ZXN0
X2ZpbGUpOgotICAgICAgICAgICAgICAgICAgICB0ZXN0c190b19odHRwX2xvY2suYXBwZW5kKHRl
c3RfaW5wdXQpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgdW5s
b2NrZWRfc2hhcmRzLmFwcGVuZCgoIi4iLCBbdGVzdF9pbnB1dF0pKQotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgdGVzdHNfYnlfZGlyID0ge30KLSAgICAgICAgICAgIGZvciB0ZXN0X2ZpbGUg
aW4gdGVzdF9maWxlczoKLSAgICAgICAgICAgICAgICBkaXJlY3RvcnkgPSBzZWxmLl9nZXRfZGly
X2Zvcl90ZXN0X2ZpbGUodGVzdF9maWxlKQotICAgICAgICAgICAgICAgIHRlc3RfaW5wdXQgPSBz
ZWxmLl9nZXRfdGVzdF9pbnB1dF9mb3JfZmlsZSh0ZXN0X2ZpbGUpCi0gICAgICAgICAgICAgICAg
aWYgc2VsZi5fdGVzdF9yZXF1aXJlc19sb2NrKHRlc3RfZmlsZSk6Ci0gICAgICAgICAgICAgICAg
ICAgIHRlc3RzX3RvX2h0dHBfbG9jay5hcHBlbmQodGVzdF9pbnB1dCkKLSAgICAgICAgICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgICAgICAgICB0ZXN0c19ieV9kaXIuc2V0ZGVmYXVsdChkaXJl
Y3RvcnksIFtdKQotICAgICAgICAgICAgICAgICAgICB0ZXN0c19ieV9kaXJbZGlyZWN0b3J5XS5h
cHBlbmQodGVzdF9pbnB1dCkKLSAgICAgICAgICAgIGZvciBkaXJlY3RvcnkgaW4gdGVzdHNfYnlf
ZGlyOgotICAgICAgICAgICAgICAgIHRlc3RfbGlzdCA9IHRlc3RzX2J5X2RpcltkaXJlY3Rvcnld
Ci0gICAgICAgICAgICAgICAgdGVzdF9saXN0X3R1cGxlID0gKGRpcmVjdG9yeSwgdGVzdF9saXN0
KQotICAgICAgICAgICAgICAgIHVubG9ja2VkX3NoYXJkcy5hcHBlbmQodGVzdF9saXN0X3R1cGxl
KQorICAgICAgICBmb3IgdGVzdF9maWxlIGluIHRlc3RfZmlsZXM6CisgICAgICAgICAgICB0ZXN0
X2lucHV0ID0gc2VsZi5fZ2V0X3Rlc3RfaW5wdXRfZm9yX2ZpbGUodGVzdF9maWxlKQorCisgICAg
ICAgICAgICAjIE5vdGUgdGhhdCB3ZSB1c2UgYSAnLicgZm9yIHRoZSBzaGFyZCBuYW1lOyB0aGUg
bmFtZSBkb2Vzbid0IHJlYWxseQorICAgICAgICAgICAgIyBtYXR0ZXIsIGFuZCB0aGUgb25seSBv
dGhlciBtZWFuaW5nZnVsIHZhbHVlIHdvdWxkIGJlIHRoZSBmaWxlbmFtZSwKKyAgICAgICAgICAg
ICMgd2hpY2ggd291bGQgYmUgcmVhbGx5IHJlZHVuZGFudC4KKyAgICAgICAgICAgIGlmIHNlbGYu
X3Rlc3RfcmVxdWlyZXNfbG9jayh0ZXN0X2ZpbGUpOgorICAgICAgICAgICAgICAgIGxvY2tlZF9z
aGFyZHMuYXBwZW5kKFRlc3RTaGFyZCgnLicsIFt0ZXN0X2lucHV0XSkpCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIHVubG9ja2VkX3NoYXJkcy5hcHBlbmQoVGVzdFNoYXJkKCcu
JywgW3Rlc3RfaW5wdXRdKSkKKworICAgICAgICByZXR1cm4gbG9ja2VkX3NoYXJkcywgdW5sb2Nr
ZWRfc2hhcmRzCisKKyAgICBkZWYgX3NoYXJkX2J5X2RpcmVjdG9yeShzZWxmLCB0ZXN0X2ZpbGVz
LCBudW1fd29ya2Vycyk6CisgICAgICAgICIiIlJldHVybnMgdHdvIGxpc3RzIG9mIHNoYXJkcywg
ZWFjaCBzaGFyZCBjb250YWluaW5nIGFsbCB0aGUgZmlsZXMgaW4gYSBkaXJlY3RvcnkuCiAKLSAg
ICAgICAgICAgICMgU29ydCB0aGUgc2hhcmRzIGJ5IGRpcmVjdG9yeSBuYW1lLgotICAgICAgICAg
ICAgdW5sb2NrZWRfc2hhcmRzLnNvcnQobGFtYmRhIGEsIGI6IGNtcChhWzBdLCBiWzBdKSkKKyAg
ICAgICAgVGhpcyBpcyB0aGUgZGVmYXVsdCBtb2RlLCBhbmQgZ2V0cyBhcyBtdWNoIHBhcmFsbGVs
aXNtIGFzIHdlIGNhbiB3aGlsZQorICAgICAgICBtaW5pbWl6aW5nIGZsYWtpbmVzcyBjYXVzZWQg
YnkgaW50ZXItdGVzdCBkZXBlbmRlbmNpZXMuIiIiCisgICAgICAgIGxvY2tlZF9zaGFyZHMgPSBb
XQorICAgICAgICB1bmxvY2tlZF9zaGFyZHMgPSBbXQorICAgICAgICB0ZXN0c19ieV9kaXIgPSB7
fQorICAgICAgICAjIEZJWE1FOiBHaXZlbiB0aGF0IHRoZSB0ZXN0cyBhcmUgYWxyZWFkeSBzb3J0
ZWQgYnkgZGlyZWN0b3J5LAorICAgICAgICAjIHdlIGNhbiBwcm9iYWJseSByZXdyaXRlIHRoaXMg
dG8gYmUgY2xlYXJlciBhbmQgZmFzdGVyLgorICAgICAgICBmb3IgdGVzdF9maWxlIGluIHRlc3Rf
ZmlsZXM6CisgICAgICAgICAgICBkaXJlY3RvcnkgPSBzZWxmLl9nZXRfZGlyX2Zvcl90ZXN0X2Zp
bGUodGVzdF9maWxlKQorICAgICAgICAgICAgdGVzdF9pbnB1dCA9IHNlbGYuX2dldF90ZXN0X2lu
cHV0X2Zvcl9maWxlKHRlc3RfZmlsZSkKKyAgICAgICAgICAgIHRlc3RzX2J5X2Rpci5zZXRkZWZh
dWx0KGRpcmVjdG9yeSwgW10pCisgICAgICAgICAgICB0ZXN0c19ieV9kaXJbZGlyZWN0b3J5XS5h
cHBlbmQodGVzdF9pbnB1dCkKKworICAgICAgICBmb3IgZGlyZWN0b3J5LCB0ZXN0X2lucHV0cyBp
biB0ZXN0c19ieV9kaXIuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBzaGFyZCA9IFRlc3RTaGFy
ZChkaXJlY3RvcnksIHRlc3RfaW5wdXRzKQorICAgICAgICAgICAgaWYgc2VsZi5fdGVzdF9yZXF1
aXJlc19sb2NrKGRpcmVjdG9yeSk6CisgICAgICAgICAgICAgICAgbG9ja2VkX3NoYXJkcy5hcHBl
bmQoc2hhcmQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHVubG9ja2VkX3No
YXJkcy5hcHBlbmQoc2hhcmQpCiAKLSAgICAgICAgaWYgdGVzdHNfdG9faHR0cF9sb2NrOgotICAg
ICAgICAgICAgbG9ja2VkX3NoYXJkcyA9IFsoInRlc3RzX3RvX2h0dHBfbG9jayIsIHRlc3RzX3Rv
X2h0dHBfbG9jayldCisgICAgICAgICMgU29ydCB0aGUgc2hhcmRzIGJ5IGRpcmVjdG9yeSBuYW1l
LgorICAgICAgICBsb2NrZWRfc2hhcmRzLnNvcnQoa2V5PWxhbWJkYSBzaGFyZDogc2hhcmQubmFt
ZSkKKyAgICAgICAgdW5sb2NrZWRfc2hhcmRzLnNvcnQoa2V5PWxhbWJkYSBzaGFyZDogc2hhcmQu
bmFtZSkKIAotICAgICAgICByZXR1cm4gKGxvY2tlZF9zaGFyZHMsIHVubG9ja2VkX3NoYXJkcykK
KyAgICAgICAgcmV0dXJuIChzZWxmLl9yZXNpemVfc2hhcmRzKGxvY2tlZF9zaGFyZHMsIHNlbGYu
X21heF9sb2NrZWRfc2hhcmRzKG51bV93b3JrZXJzKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdsb2NrZWRfc2hhcmQnKSwKKyAgICAgICAgICAgICAgICB1bmxvY2tlZF9z
aGFyZHMpCisKKyAgICBkZWYgX21heF9sb2NrZWRfc2hhcmRzKHNlbGYsIG51bV93b3JrZXJzKToK
KyAgICAgICAgIyBQdXQgYSBjZWlsaW5nIG9uIHRoZSBudW1iZXIgb2YgbG9ja2VkIHNoYXJkcywg
c28gdGhhdCB3ZQorICAgICAgICAjIGRvbid0IGhhbW1lciB0aGUgc2VydmVycyB0b28gYmFkbHku
CisKKyAgICAgICAgIyBGSVhNRTogRm9yIG5vdywgbGltaXQgdG8gb25lIHNoYXJkLiBBZnRlciB0
ZXN0aW5nIHRvIG1ha2Ugc3VyZSB3ZQorICAgICAgICAjIGNhbiBoYW5kbGUgbXVsdGlwbGUgc2hh
cmRzLCB3ZSBzaG91bGQgcHJvYmFibHkgZG8gc29tZXRoaW5nIGxpa2UKKyAgICAgICAgIyBsaW1p
dCB0aGlzIHRvIG5vIG1vcmUgdGhhbiBhIHF1YXJ0ZXIgb2YgYWxsIHdvcmtlcnMsIGUuZy46Cisg
ICAgICAgICMgcmV0dXJuIG1heChtYXRoLmNlaWwobnVtX3dvcmtlcnMgLyA0LjApLCAxKQorICAg
ICAgICByZXR1cm4gMQorCisgICAgZGVmIF9yZXNpemVfc2hhcmRzKHNlbGYsIG9sZF9zaGFyZHMs
IG1heF9uZXdfc2hhcmRzLCBzaGFyZF9uYW1lX3ByZWZpeCk6CisgICAgICAgICIiIlRha2VzIGEg
bGlzdCBvZiBzaGFyZHMgYW5kIHJlZGlzdHJpYnV0ZXMgdGhlIHRlc3RzIGludG8gbm8gbW9yZQor
ICAgICAgICB0aGFuIHxtYXhfbmV3X3NoYXJkc3wgbmV3IHNoYXJkcy4iIiIKKworICAgICAgICAj
IFRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGF0IGVhY2ggaW5wdXQgc2hhcmQgb25seSBj
b250YWlucyB0ZXN0cyBmcm9tIGEKKyAgICAgICAgIyBzaW5nbGUgZGlyZWN0b3J5LCBhbmQgdGhh
dCB0ZXN0cyBpbiBlYWNoIHNoYXJkIG11c3QgcmVtYWluIHRvZ2V0aGVyOyBhcyBhCisgICAgICAg
ICMgcmVzdWx0LCBhIGdpdmVuIGlucHV0IHNoYXJkIGlzIG5ldmVyIHNwbGl0IGJldHdlZW4gb3V0
cHV0IHNoYXJkcy4KKyAgICAgICAgIworICAgICAgICAjIEVhY2ggb3V0cHV0IHNoYXJkIGNvbnRh
aW5zIHRoZSB0ZXN0cyBmcm9tIG9uZSBvciBtb3JlIGlucHV0IHNoYXJkcyBhbmQKKyAgICAgICAg
IyBoZW5jZSBtYXkgY29udGFpbiB0ZXN0cyBmcm9tIG11bHRpcGxlIGRpcmVjdG9yaWVzLgorCisg
ICAgICAgIGRlZiBkaXZpZGVfYW5kX3JvdW5kX3VwKG51bWVyYXRvciwgZGl2aXNvcik6CisgICAg
ICAgICAgICByZXR1cm4gaW50KG1hdGguY2VpbChmbG9hdChudW1lcmF0b3IpIC8gZGl2aXNvcikp
CisKKyAgICAgICAgZGVmIGV4dHJhY3RfYW5kX2ZsYXR0ZW4oc2hhcmRzKToKKyAgICAgICAgICAg
IHRlc3RfaW5wdXRzID0gW10KKyAgICAgICAgICAgIGZvciBzaGFyZCBpbiBzaGFyZHM6CisgICAg
ICAgICAgICAgICAgdGVzdF9pbnB1dHMuZXh0ZW5kKHNoYXJkLnRlc3RfaW5wdXRzKQorICAgICAg
ICAgICAgcmV0dXJuIHRlc3RfaW5wdXRzCisKKyAgICAgICAgZGVmIHNwbGl0X2F0KHNlcSwgaW5k
ZXgpOgorICAgICAgICAgICAgcmV0dXJuIChzZXFbOmluZGV4XSwgc2VxW2luZGV4Ol0pCisKKyAg
ICAgICAgbnVtX29sZF9wZXJfbmV3ID0gZGl2aWRlX2FuZF9yb3VuZF91cChsZW4ob2xkX3NoYXJk
cyksIG1heF9uZXdfc2hhcmRzKQorICAgICAgICBuZXdfc2hhcmRzID0gW10KKyAgICAgICAgcmVt
YWluaW5nX3NoYXJkcyA9IG9sZF9zaGFyZHMKKyAgICAgICAgd2hpbGUgcmVtYWluaW5nX3NoYXJk
czoKKyAgICAgICAgICAgIHNvbWVfc2hhcmRzLCByZW1haW5pbmdfc2hhcmRzID0gc3BsaXRfYXQo
cmVtYWluaW5nX3NoYXJkcywgbnVtX29sZF9wZXJfbmV3KQorICAgICAgICAgICAgbmV3X3NoYXJk
cy5hcHBlbmQoVGVzdFNoYXJkKCclc18lZCcgJSAoc2hhcmRfbmFtZV9wcmVmaXgsIGxlbihuZXdf
c2hhcmRzKSArIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4
dHJhY3RfYW5kX2ZsYXR0ZW4oc29tZV9zaGFyZHMpKSkKKyAgICAgICAgcmV0dXJuIG5ld19zaGFy
ZHMKIAogICAgIGRlZiBfY29udGFpbnNfdGVzdHMoc2VsZiwgc3ViZGlyKToKICAgICAgICAgZm9y
IHRlc3RfZmlsZSBpbiBzZWxmLl90ZXN0X2ZpbGVzOgpAQCAtNTg1LDE2ICs2NzksMTQgQEAgY2xh
c3MgTWFuYWdlcjoKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICByZXR1cm4g
RmFsc2UKIAotICAgIGRlZiBfbnVtX3dvcmtlcnMoc2VsZiwgbnVtX3NoYXJkcyk6Ci0gICAgICAg
IG51bV93b3JrZXJzID0gbWluKGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyksIG51
bV9zaGFyZHMpCisgICAgZGVmIF9sb2dfbnVtX3dvcmtlcnMoc2VsZiwgbnVtX3dvcmtlcnMsIG51
bV9zaGFyZHMsIG51bV9sb2NrZWRfc2hhcmRzKToKICAgICAgICAgZHJpdmVyX25hbWUgPSBzZWxm
Ll9wb3J0LmRyaXZlcl9uYW1lKCkKICAgICAgICAgaWYgbnVtX3dvcmtlcnMgPT0gMToKICAgICAg
ICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfY29uZmlnKCJSdW5uaW5nIDEgJXMgb3ZlciAlcyIg
JQogICAgICAgICAgICAgICAgIChkcml2ZXJfbmFtZSwgZ3JhbW1hci5wbHVyYWxpemUoJ3NoYXJk
JywgbnVtX3NoYXJkcykpKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fcHJpbnRl
ci5wcmludF9jb25maWcoIlJ1bm5pbmcgJWQgJXNzIGluIHBhcmFsbGVsIG92ZXIgJWQgc2hhcmRz
IiAlCi0gICAgICAgICAgICAgICAgKG51bV93b3JrZXJzLCBkcml2ZXJfbmFtZSwgbnVtX3NoYXJk
cykpCi0gICAgICAgIHJldHVybiBudW1fd29ya2VycworICAgICAgICAgICAgc2VsZi5fcHJpbnRl
ci5wcmludF9jb25maWcoIlJ1bm5pbmcgJWQgJXNzIGluIHBhcmFsbGVsIG92ZXIgJWQgc2hhcmRz
ICglZCBsb2NrZWQpIiAlCisgICAgICAgICAgICAgICAgKG51bV93b3JrZXJzLCBkcml2ZXJfbmFt
ZSwgbnVtX3NoYXJkcywgbnVtX2xvY2tlZF9zaGFyZHMpKQogCiAgICAgZGVmIF9ydW5fdGVzdHMo
c2VsZiwgZmlsZV9saXN0LCByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgICIiIlJ1bnMgdGhlIHRl
c3RzIGluIHRoZSBmaWxlX2xpc3QuCkBAIC02MjMsNyArNzE1LDcgQEAgY2xhc3MgTWFuYWdlcjoK
IAogICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU2hhcmRpbmcgdGVzdHMgLi4u
JykKICAgICAgICAgbG9ja2VkX3NoYXJkcywgdW5sb2NrZWRfc2hhcmRzID0gc2VsZi5fc2hhcmRf
dGVzdHMoZmlsZV9saXN0LAotICAgICAgICAgICAgaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJv
Y2Vzc2VzKSA+IDEgYW5kIG5vdCBzZWxmLl9vcHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJh
bGxlbCkKKyAgICAgICAgICAgIGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyksIHNl
bGYuX29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsKQogCiAgICAgICAgICMgRklY
TUU6IFdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byBjb29yZGluYXRlIHRoZSB3b3JrZXJzIHNv
IHRoYXQKICAgICAgICAgIyB0aGV5IGRvbid0IHRyeSB0byBydW4gdGhlIHNoYXJkcyB0aGF0IG5l
ZWQgYSBsb2NrIGlmIHdlIGRvbid0IGFjdHVhbGx5CkBAIC02MzgsNyArNzMwLDkgQEAgY2xhc3Mg
TWFuYWdlcjoKICAgICAgICAgaWYgbG9ja2VkX3NoYXJkczoKICAgICAgICAgICAgIHNlbGYuc3Rh
cnRfc2VydmVyc193aXRoX2xvY2soKQogCi0gICAgICAgIG51bV93b3JrZXJzID0gc2VsZi5fbnVt
X3dvcmtlcnMobGVuKGFsbF9zaGFyZHMpKQorICAgICAgICBudW1fd29ya2VycyA9IG1pbihpbnQo
c2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpLCBsZW4oYWxsX3NoYXJkcykpCisgICAgICAg
IHNlbGYuX2xvZ19udW1fd29ya2VycyhudW1fd29ya2VycywgbGVuKGFsbF9zaGFyZHMpLCBsZW4o
bG9ja2VkX3NoYXJkcykpCisKICAgICAgICAgbWFuYWdlcl9jb25uZWN0aW9uID0gbWFuYWdlcl93
b3JrZXJfYnJva2VyLmdldChzZWxmLl9wb3J0LCBzZWxmLl9vcHRpb25zLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIHdvcmtlci5X
b3JrZXIpCiAKQEAgLTY2MSw3ICs3NTUsOCBAQCBjbGFzcyBNYW5hZ2VyOgogCiAgICAgICAgIHNl
bGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0aW5nIC4uLiIpCiAgICAgICAg
IGZvciBzaGFyZCBpbiBhbGxfc2hhcmRzOgotICAgICAgICAgICAgbWFuYWdlcl9jb25uZWN0aW9u
LnBvc3RfbWVzc2FnZSgndGVzdF9saXN0Jywgc2hhcmRbMF0sIHNoYXJkWzFdKQorICAgICAgICAg
ICAgIyBGSVhNRTogQ2hhbmdlICd0ZXN0X2xpc3QnIHRvICdzaGFyZCcsIG1ha2Ugc2hhcmRpbmcg
cHVibGljLgorICAgICAgICAgICAgbWFuYWdlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgndGVz
dF9saXN0Jywgc2hhcmQubmFtZSwgc2hhcmQudGVzdF9pbnB1dHMpCiAKICAgICAgICAgIyBXZSBw
b3N0IG9uZSAnc3RvcCcgbWVzc2FnZSBmb3IgZWFjaCB3b3JrZXIuIEJlY2F1c2UgdGhlIHN0b3Ag
bWVzc2FnZQogICAgICAgICAjIGFyZSBzZW50IGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMsIGFuZCBi
ZWNhdXNlIGVhY2ggd29ya2VyIHdpbGwgc3RvcApAQCAtMTM2MCw3ICsxNDU1LDcgQEAgY2xhc3Mg
TWFuYWdlcjoKIAogICAgICAgICBkZWYgZmluZChuYW1lLCB0ZXN0X2xpc3RzKToKICAgICAgICAg
ICAgIGZvciBpIGluIHJhbmdlKGxlbih0ZXN0X2xpc3RzKSk6Ci0gICAgICAgICAgICAgICAgaWYg
dGVzdF9saXN0c1tpXVswXSA9PSBuYW1lOgorICAgICAgICAgICAgICAgIGlmIHRlc3RfbGlzdHNb
aV0ubmFtZSA9PSBuYW1lOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gaQogICAgICAgICAg
ICAgcmV0dXJuIC0xCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3VuaXR0ZXN0LnB5
CmluZGV4IDljMWFmODg1OWEwYmU2ZDMxZDg1NDgyNDY5OGE0NjdkYTBjN2FlNjkuLmM4NDIxZWE1
YTY3NjdlYmY1ZGIwZWI4OTU4MzVjNWJmZTllODdjNmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfdW5pdHRlc3Qu
cHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvbWFuYWdlcl91bml0dGVzdC5weQpAQCAtMzcsNDYgKzM3LDg3IEBAIGZyb20gd2Via2l0cHku
dGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBNb2NrCiAKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LmxheW91dF9wYWNrYWdlIGltcG9ydCBtYW5hZ2VyCiAKK1Rlc3RTaGFyZCA9IG1hbmFnZXIuVGVz
dFNoYXJkCisKIAogY2xhc3MgTWFuYWdlcldyYXBwZXIobWFuYWdlci5NYW5hZ2VyKToKICAgICBk
ZWYgX2dldF90ZXN0X2lucHV0X2Zvcl9maWxlKHNlbGYsIHRlc3RfZmlsZSk6CiAgICAgICAgIHJl
dHVybiB0ZXN0X2ZpbGUKIAogCi1jbGFzcyBNYW5hZ2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6
Ci0gICAgZGVmIHRlc3Rfc2hhcmRfdGVzdHMoc2VsZik6Ci0gICAgICAgICMgVGVzdCB0aGF0IF9z
aGFyZF90ZXN0cyBpbiB0ZXN0X3J1bm5lci5UZXN0UnVubmVyIHJlYWxseQotICAgICAgICAjIHB1
dCB0aGUgaHR0cCB0ZXN0cyBmaXJzdCBpbiB0aGUgcXVldWUuCitjbGFzcyBTaGFyZGluZ1Rlc3Rz
KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIEZJWE1FOiBSZW1vdmUgIkxheW91dFRlc3RzIiBm
cm9tIHRoaXMgaWYgd2UgY2FuIGV2ZXIgY29udmVydCB0aGUgZ2VuZXJpYworICAgICMgY29kZSBm
cm9tIGZpbGVuYW1lcyB0byB0ZXN0IG5hbWVzLgorICAgIHRlc3RfbGlzdCA9IFsKKyAgICAgICAg
IkxheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VuaWNvZGUuaHRtIiwKKyAg
ICAgICAgIkxheW91dFRlc3RzL2FuaW1hdGlvbnMva2V5ZnJhbWVzLmh0bWwiLAorICAgICAgICAi
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS92aWV3LXNvdXJjZS1uby1yZWZyZXNoLmh0
bWwiLAorICAgICAgICAiTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvd2Vi
c29ja2V0LXByb3RvY29sLWlnbm9yZWQuaHRtbCIsCisgICAgICAgICJMYXlvdXRUZXN0cy9mYXN0
L2Nzcy9kaXNwbGF5LW5vbmUtaW5saW5lLXN0eWxlLWNoYW5nZS1jcmFzaC5odG1sIiwKKyAgICAg
ICAgIkxheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3VwcG9ydGVkLXhtbC1j
b250ZW50LXR5cGVzLmh0bWwiLAorICAgICAgICAiTGF5b3V0VGVzdHMvZG9tL2h0bWwvbGV2ZWwy
L2h0bWwvSFRNTEFuY2hvckVsZW1lbnQwMy5odG1sIiwKKyAgICAgICAgIkxheW91dFRlc3RzL2ll
dGVzdGNlbnRlci9KYXZhc2NyaXB0LzExLjEuNV80LTQtYy0xLmh0bWwiLAorICAgICAgICAiTGF5
b3V0VGVzdHMvZG9tL2h0bWwvbGV2ZWwyL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQwNi5odG1sIiwK
KyAgICBdCisKKyAgICBkZWYgZ2V0X3NoYXJkcyhzZWxmLCBudW1fd29ya2VycywgZnVsbHlfcGFy
YWxsZWwpOgogICAgICAgICBwb3J0ID0gTW9jaygpCiAgICAgICAgIHBvcnQuX2ZpbGVzeXN0ZW0g
PSBmaWxlc3lzdGVtX21vY2suTW9ja0ZpbGVTeXN0ZW0oKQotICAgICAgICBtYW5hZ2VyID0gTWFu
YWdlcldyYXBwZXIocG9ydD1wb3J0LCBvcHRpb25zPU1vY2soKSwgcHJpbnRlcj1Nb2NrKCkpCi0K
LSAgICAgICAgdGVzdF9saXN0ID0gWwotICAgICAgICAgICJMYXlvdXRUZXN0cy93ZWJzb2NrZXQv
dGVzdHMvdW5pY29kZS5odG0iLAotICAgICAgICAgICJMYXlvdXRUZXN0cy9hbmltYXRpb25zL2tl
eWZyYW1lcy5odG1sIiwKLSAgICAgICAgICAiTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0
eS92aWV3LXNvdXJjZS1uby1yZWZyZXNoLmh0bWwiLAotICAgICAgICAgICJMYXlvdXRUZXN0cy93
ZWJzb2NrZXQvdGVzdHMvd2Vic29ja2V0LXByb3RvY29sLWlnbm9yZWQuaHRtbCIsCi0gICAgICAg
ICAgIkxheW91dFRlc3RzL2Zhc3QvY3NzL2Rpc3BsYXktbm9uZS1pbmxpbmUtc3R5bGUtY2hhbmdl
LWNyYXNoLmh0bWwiLAotICAgICAgICAgICJMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L3N1cHBvcnRlZC14bWwtY29udGVudC10eXBlcy5odG1sIiwKLSAgICAgICAgICAiTGF5
b3V0VGVzdHMvZG9tL2h0bWwvbGV2ZWwyL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQwMy5odG1sIiwK
LSAgICAgICAgICAiTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTEuMS41XzQt
NC1jLTEuaHRtbCIsCi0gICAgICAgICAgIkxheW91dFRlc3RzL2RvbS9odG1sL2xldmVsMi9odG1s
L0hUTUxBbmNob3JFbGVtZW50MDYuaHRtbCIsCi0gICAgICAgIF0KLQotICAgICAgICBleHBlY3Rl
ZF90ZXN0c190b19odHRwX2xvY2sgPSBzZXQoWwotICAgICAgICAgICdMYXlvdXRUZXN0cy93ZWJz
b2NrZXQvdGVzdHMvdW5pY29kZS5odG0nLAotICAgICAgICAgICdMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L3ZpZXctc291cmNlLW5vLXJlZnJlc2guaHRtbCcsCi0gICAgICAgICAgJ0xh
eW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy93ZWJzb2NrZXQtcHJvdG9jb2wtaWdub3JlZC5odG1s
JywKLSAgICAgICAgICAnTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9zdXBw
b3J0ZWQteG1sLWNvbnRlbnQtdHlwZXMuaHRtbCcsCi0gICAgICAgIF0pCi0KLSAgICAgICAgc2lu
Z2xlX2xvY2tlZCwgc2luZ2xlX3VubG9ja2VkID0gbWFuYWdlci5fc2hhcmRfdGVzdHModGVzdF9s
aXN0LCBGYWxzZSkKLSAgICAgICAgbXVsdGlfbG9ja2VkLCBtdWx0aV91bmxvY2tlZCA9IG1hbmFn
ZXIuX3NoYXJkX3Rlc3RzKHRlc3RfbGlzdCwgVHJ1ZSkKLQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCJ0ZXN0c190b19odHRwX2xvY2siLCBzaW5nbGVfbG9ja2VkWzBdWzBdKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3Rlc3RzX3RvX2h0dHBfbG9jaywgc2V0KHNpbmdsZV9s
b2NrZWRbMF1bMV0pKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0ZXN0c190b19odHRwX2xv
Y2siLCBtdWx0aV9sb2NrZWRbMF1bMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0
ZWRfdGVzdHNfdG9faHR0cF9sb2NrLCBzZXQobXVsdGlfbG9ja2VkWzBdWzFdKSkKKyAgICAgICAg
c2VsZi5tYW5hZ2VyID0gTWFuYWdlcldyYXBwZXIocG9ydD1wb3J0LCBvcHRpb25zPU1vY2soKSwg
cHJpbnRlcj1Nb2NrKCkpCisgICAgICAgIHJldHVybiBzZWxmLm1hbmFnZXIuX3NoYXJkX3Rlc3Rz
KHNlbGYudGVzdF9saXN0LCBudW1fd29ya2VycywgZnVsbHlfcGFyYWxsZWwpCisKKyAgICBkZWYg
dGVzdF9zaGFyZF9ieV9kaXIoc2VsZik6CisgICAgICAgIGxvY2tlZCwgdW5sb2NrZWQgPSBzZWxm
LmdldF9zaGFyZHMobnVtX3dvcmtlcnM9MiwgZnVsbHlfcGFyYWxsZWw9RmFsc2UpCisKKyAgICAg
ICAgIyBOb3RlIHRoYXQgYWx0aG91Z2ggdGhlcmUgYXJlIHRlc3RzIGluIG11bHRpcGxlIGRpcnMg
dGhhdCBuZWVkIGxvY2tzLAorICAgICAgICAjIHRoZXkgYXJlIGNyYW1tZWQgaW50byBhIHNpbmds
ZSBzaGFyZCBpbiBvcmRlciB0byByZWR1Y2UgdGhlICMgb2YKKyAgICAgICAgIyB3b3JrZXJzIGhp
dHRpbmcgdGhlIHNlcnZlciBhdCBvbmNlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsb2Nr
ZWQsCisgICAgICAgICAgICBbVGVzdFNoYXJkKCdsb2NrZWRfc2hhcmRfMScsCisgICAgICAgICAg
ICAgIFsnTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS92aWV3LXNvdXJjZS1uby1yZWZy
ZXNoLmh0bWwnLAorICAgICAgICAgICAgICAgJ0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29j
a2V0L3Rlc3RzL3VuaWNvZGUuaHRtJywKKyAgICAgICAgICAgICAgICdMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3dlYnNvY2tldC90ZXN0cy93ZWJzb2NrZXQtcHJvdG9jb2wtaWdub3JlZC5odG1sJywK
KyAgICAgICAgICAgICAgICdMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3N1
cHBvcnRlZC14bWwtY29udGVudC10eXBlcy5odG1sJ10pXSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHModW5sb2NrZWQsCisgICAgICAgICAgICBbVGVzdFNoYXJkKCdhbmltYXRpb25zJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgWydMYXlvdXRUZXN0cy9hbmltYXRpb25zL2tleWZyYW1lcy5o
dG1sJ10pLAorICAgICAgICAgICAgIFRlc3RTaGFyZCgnZG9tL2h0bWwvbGV2ZWwyL2h0bWwnLAor
ICAgICAgICAgICAgICAgICAgICAgICBbJ0xheW91dFRlc3RzL2RvbS9odG1sL2xldmVsMi9odG1s
L0hUTUxBbmNob3JFbGVtZW50MDMuaHRtbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnTGF5
b3V0VGVzdHMvZG9tL2h0bWwvbGV2ZWwyL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQwNi5odG1sJ10p
LAorICAgICAgICAgICAgIFRlc3RTaGFyZCgnZmFzdC9jc3MnLAorICAgICAgICAgICAgICAgICAg
ICAgICBbJ0xheW91dFRlc3RzL2Zhc3QvY3NzL2Rpc3BsYXktbm9uZS1pbmxpbmUtc3R5bGUtY2hh
bmdlLWNyYXNoLmh0bWwnXSksCisgICAgICAgICAgICAgVGVzdFNoYXJkKCdpZXRlc3RjZW50ZXIv
SmF2YXNjcmlwdCcsCisgICAgICAgICAgICAgICAgICAgICAgIFsnTGF5b3V0VGVzdHMvaWV0ZXN0
Y2VudGVyL0phdmFzY3JpcHQvMTEuMS41XzQtNC1jLTEuaHRtbCddKV0pCisKKyAgICBkZWYgdGVz
dF9zaGFyZF9ldmVyeV9maWxlKHNlbGYpOgorICAgICAgICBsb2NrZWQsIHVubG9ja2VkID0gc2Vs
Zi5nZXRfc2hhcmRzKG51bV93b3JrZXJzPTIsIGZ1bGx5X3BhcmFsbGVsPVRydWUpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKGxvY2tlZCwKKyAgICAgICAgICAgIFtUZXN0U2hhcmQoJy4nLCBb
J0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VuaWNvZGUuaHRtJ10pLAor
ICAgICAgICAgICAgIFRlc3RTaGFyZCgnLicsIFsnTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS92aWV3LXNvdXJjZS1uby1yZWZyZXNoLmh0bWwnXSksCisgICAgICAgICAgICAgVGVzdFNo
YXJkKCcuJywgWydMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy93ZWJzb2Nr
ZXQtcHJvdG9jb2wtaWdub3JlZC5odG1sJ10pLAorICAgICAgICAgICAgIFRlc3RTaGFyZCgnLics
IFsnTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9zdXBwb3J0ZWQteG1sLWNv
bnRlbnQtdHlwZXMuaHRtbCddKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHVubG9ja2Vk
LAorICAgICAgICAgICAgW1Rlc3RTaGFyZCgnLicsIFsnTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9r
ZXlmcmFtZXMuaHRtbCddKSwKKyAgICAgICAgICAgICBUZXN0U2hhcmQoJy4nLCBbJ0xheW91dFRl
c3RzL2Zhc3QvY3NzL2Rpc3BsYXktbm9uZS1pbmxpbmUtc3R5bGUtY2hhbmdlLWNyYXNoLmh0bWwn
XSksCisgICAgICAgICAgICAgVGVzdFNoYXJkKCcuJywgWydMYXlvdXRUZXN0cy9kb20vaHRtbC9s
ZXZlbDIvaHRtbC9IVE1MQW5jaG9yRWxlbWVudDAzLmh0bWwnXSksCisgICAgICAgICAgICAgVGVz
dFNoYXJkKCcuJywgWydMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xMS4xLjVf
NC00LWMtMS5odG1sJ10pLAorICAgICAgICAgICAgIFRlc3RTaGFyZCgnLicsIFsnTGF5b3V0VGVz
dHMvZG9tL2h0bWwvbGV2ZWwyL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQwNi5odG1sJ10pXSkKKwor
ICAgIGRlZiB0ZXN0X3NoYXJkX2luX3R3byhzZWxmKToKKyAgICAgICAgbG9ja2VkLCB1bmxvY2tl
ZCA9IHNlbGYuZ2V0X3NoYXJkcyhudW1fd29ya2Vycz0xLCBmdWxseV9wYXJhbGxlbD1GYWxzZSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobG9ja2VkLAorICAgICAgICAgICAgW1Rlc3RTaGFy
ZCgnbG9ja2VkX3Rlc3RzJywKKyAgICAgICAgICAgICAgICAgICAgICAgWydMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy91bmljb2RlLmh0bScsCisgICAgICAgICAgICAgICAg
ICAgICAgICAnTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS92aWV3LXNvdXJjZS1uby1y
ZWZyZXNoLmh0bWwnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvd2Vic29ja2V0L3Rlc3RzL3dlYnNvY2tldC1wcm90b2NvbC1pZ25vcmVkLmh0bWwnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgJ0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJl
cXVlc3Qvc3VwcG9ydGVkLXhtbC1jb250ZW50LXR5cGVzLmh0bWwnXSldKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyh1bmxvY2tlZCwKKyAgICAgICAgICAgIFtUZXN0U2hhcmQoJ3VubG9ja2Vk
X3Rlc3RzJywKKyAgICAgICAgICAgICAgICAgICAgICAgWydMYXlvdXRUZXN0cy9hbmltYXRpb25z
L2tleWZyYW1lcy5odG1sJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdMYXlvdXRUZXN0cy9m
YXN0L2Nzcy9kaXNwbGF5LW5vbmUtaW5saW5lLXN0eWxlLWNoYW5nZS1jcmFzaC5odG1sJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICdMYXlvdXRUZXN0cy9kb20vaHRtbC9sZXZlbDIvaHRtbC9I
VE1MQW5jaG9yRWxlbWVudDAzLmh0bWwnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ0xheW91
dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzExLjEuNV80LTQtYy0xLmh0bWwnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgJ0xheW91dFRlc3RzL2RvbS9odG1sL2xldmVsMi9odG1sL0hU
TUxBbmNob3JFbGVtZW50MDYuaHRtbCddKV0pCiAKIAogY2xhc3MgTmF0dXJhbENvbXBhcmVUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99420</attachid>
            <date>2011-06-30 19:55:43 -0700</date>
            <delta_ts>2011-06-30 19:55:43 -0700</delta_ts>
            <desc>patch for landing after rebasing to HEAD</desc>
            <filename>bug-63116-20110630195541.patch</filename>
            <type>text/plain</type>
            <size>20438</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTAxOTMKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiN2Y2N2U0YzMzNzI3YmEyMTU4ODhiOTc0OThjZWE5ZjJj
MzYyNGRkLi4yNWQ0ZWU0ZmE3NDZiMmFiMGU0YTg2MzQxN2VmZWY2NWI4YTdhNzAwIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMTEtMDYtMjEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbnJ3dDogYWxsb3cg
Zm9yIG11bHRpcGxlIGh0dHAgc2hhcmRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MzExNgorCisgICAgICAgIFRoaXMgbW9kaWZpZXMgdGhlIHNoYXJk
aW5nIGxvZ2ljIHRvIHN1cHBvcnQgbXVsdGlwbGUgaHR0cAorICAgICAgICBzaGFyZHMsIGJ1dCBm
b3Igbm93IHdlIGNsYW1wIHRvIG9uZSBzaGFyZCB1bnRpbCB3ZSBjYW4gdGVzdAorICAgICAgICBw
ZXJmIGltcGFjdCBhbmQgZmxha2luZXNzIGltcGFjdC4KKworICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXIucHk6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl91bml0
dGVzdC5weToKKwogMjAxMS0wNi0zMCAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBPamFuIFZhZmFpLgpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlci5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFn
ZXIucHkKaW5kZXggYWQxMTRiZWQxZTJlMzI0MzUyMGRiNTcyYTU3YmVjNmIzZGJlODc3Yi4uOTVl
ZTNhOWE3YTNmMjU4MDQyNDAzNDQ1ZjQxOWEzMGY2ZDA4MmEzOCAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlci5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9t
YW5hZ2VyLnB5CkBAIC0yMzUsNiArMjM1LDIxIEBAIGNsYXNzIFdvcmtlckV4Y2VwdGlvbihFeGNl
cHRpb24pOgogICAgIHBhc3MKIAogCitjbGFzcyBUZXN0U2hhcmQob2JqZWN0KToKKyAgICAiIiJB
IHRlc3Qgc2hhcmQgaXMgYSBuYW1lZCBsaXN0IG9mIFRlc3RJbnB1dHMuIiIiCisKKyAgICAjIEZJ
WE1FOiBNYWtlIHRoaXMgY2xhc3MgdmlzaWJsZSwgdXNlZCBieSB3b3JrZXJzIGFzIHdlbGwuCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHRlc3RfaW5wdXRzKToKKyAgICAgICAgc2VsZi5u
YW1lID0gbmFtZQorICAgICAgICBzZWxmLnRlc3RfaW5wdXRzID0gdGVzdF9pbnB1dHMKKworICAg
IGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJUZXN0U2hhcmQobmFtZT0nJXMn
LCB0ZXN0X2lucHV0cz0lcyciICUgKHNlbGYubmFtZSwgc2VsZi50ZXN0X2lucHV0cykKKworICAg
IGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5uYW1lID09IG90
aGVyLm5hbWUgYW5kIHNlbGYudGVzdF9pbnB1dHMgPT0gb3RoZXIudGVzdF9pbnB1dHMKKworCiBj
bGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgIiIiQSBjbGFzcyBmb3IgbWFuYWdpbmcgcnVubmlu
ZyBhIHNlcmllcyBvZiB0ZXN0cyBvbiBhIHNlcmllcyBvZiBsYXlvdXQKICAgICB0ZXN0IGZpbGVz
LiIiIgpAQCAtNTMzLDUxICs1NDgsMTMwIEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAg
ICAgcmV0dXJuIHNlbGYuX2V4cGVjdGF0aW9ucy5oYXNfbW9kaWZpZXIodGVzdF9maWxlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0
aW9ucy5TTE9XKQogCi0gICAgZGVmIF9zaGFyZF90ZXN0cyhzZWxmLCB0ZXN0X2ZpbGVzLCB1c2Vf
cmVhbF9zaGFyZHMpOgorICAgIGRlZiBfc2hhcmRfdGVzdHMoc2VsZiwgdGVzdF9maWxlcywgbnVt
X3dvcmtlcnMsIGZ1bGx5X3BhcmFsbGVsKToKICAgICAgICAgIiIiR3JvdXBzIHRlc3RzIGludG8g
YmF0Y2hlcy4KICAgICAgICAgVGhpcyBoZWxwcyBlbnN1cmUgdGhhdCB0ZXN0cyB0aGF0IGRlcGVu
ZCBvbiBlYWNoIG90aGVyIChha2EgYmFkIHRlc3RzISkKICAgICAgICAgY29udGludWUgdG8gcnVu
IHRvZ2V0aGVyIGFzIG1vc3QgY3Jvc3MtdGVzdHMgZGVwZW5kZW5jaWVzIHRlbmQgdG8KLSAgICAg
ICAgb2NjdXIgd2l0aGluIHRoZSBzYW1lIGRpcmVjdG9yeS4gSWYgdXNlX3JlYWxfc2hhcmRzIGlz
IEZhbHNlLCB3ZQotICAgICAgICBwdXQgZWFjaCAobm9uLUhUVFAvd2Vic29ja2V0KSB0ZXN0IGlu
dG8gaXRzIG93biBzaGFyZCBmb3IgbWF4aW11bQotICAgICAgICBjb25jdXJyZW5jeSBpbnN0ZWFk
IG9mIHRyeWluZyB0byBkbyBhbnkgc29ydCBvZiByZWFsIHNoYXJkaW5nLgotCisgICAgICAgIG9j
Y3VyIHdpdGhpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCiAgICAgICAgIFJldHVybjoKLSAgICAgICAg
ICAgIFR3byBsaXN0cyBvZiBsaXN0cyBvZiBUZXN0SW5wdXQgb2JqZWN0cy4gVGhlIGZpcnN0IGxp
c3Qgc2hvdWxkCi0gICAgICAgICAgICBvbmx5IGJlIHJ1biB1bmRlciB0aGUgc2VydmVyIGxvY2ss
IHRoZSBzZWNvbmQgY2FuIGJlIHJ1biB3aGVuZXZlci4KKyAgICAgICAgICAgIFR3byBsaXN0IG9m
IFRlc3RTaGFyZHMuIFRoZSBmaXJzdCBjb250YWlucyB0ZXN0cyB0aGF0IG11c3Qgb25seSBiZQor
ICAgICAgICAgICAgcnVuIHVuZGVyIHRoZSBzZXJ2ZXIgbG9jaywgdGhlIHNlY29uZCBjYW4gYmUg
cnVuIHdoZW5ldmVyLgogICAgICAgICAiIiIKLSAgICAgICAgIyBGSVhNRTogV2Ugc3RpbGwgbmVl
ZCB0byBzdXBwb3J0IG11bHRpcGxlIGxvY2tlZCBzaGFyZHMuCisKKyAgICAgICAgIyBGSVhNRTog
TW92ZSBhbGwgb2YgdGhlIHNoYXJkaW5nIGxvZ2ljIG91dCBvZiBtYW5hZ2VyIGludG8gaXRzCisg
ICAgICAgICMgb3duIGNsYXNzIG9yIG1vZHVsZS4gQ29uc2lkZXIgZ3JvdXBpbmcgaXQgd2l0aCB0
aGUgY2h1bmtpbmcgbG9naWMKKyAgICAgICAgIyBpbiBwcmVwYXJlX2xpc3RzIGFzIHdlbGwuCisg
ICAgICAgIGlmIG51bV93b3JrZXJzID09IDE6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc2hh
cmRfaW5fdHdvKHRlc3RfZmlsZXMpCisgICAgICAgIGVsaWYgZnVsbHlfcGFyYWxsZWw6CisgICAg
ICAgICAgICByZXR1cm4gc2VsZi5fc2hhcmRfZXZlcnlfZmlsZSh0ZXN0X2ZpbGVzKQorICAgICAg
ICByZXR1cm4gc2VsZi5fc2hhcmRfYnlfZGlyZWN0b3J5KHRlc3RfZmlsZXMsIG51bV93b3JrZXJz
KQorCisgICAgZGVmIF9zaGFyZF9pbl90d28oc2VsZiwgdGVzdF9maWxlcyk6CisgICAgICAgICIi
IlJldHVybnMgdHdvIGxpc3RzIG9mIHNoYXJkcywgb25lIHdpdGggYWxsIHRoZSB0ZXN0cyByZXF1
aXJpbmcgYSBsb2NrIGFuZCBvbmUgd2l0aCB0aGUgcmVzdC4KKworICAgICAgICBUaGlzIGlzIHVz
ZWQgd2hlbiB0aGVyZSdzIG9ubHkgb25lIHdvcmtlciwgdG8gbWluaW1pemUgdGhlIHBlci1zaGFy
ZCBvdmVyaGVhZC4iIiIKKyAgICAgICAgbG9ja2VkX2lucHV0cyA9IFtdCisgICAgICAgIHVubG9j
a2VkX2lucHV0cyA9IFtdCisgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gdGVzdF9maWxlczoKKyAg
ICAgICAgICAgIHRlc3RfaW5wdXQgPSBzZWxmLl9nZXRfdGVzdF9pbnB1dF9mb3JfZmlsZSh0ZXN0
X2ZpbGUpCisgICAgICAgICAgICBpZiBzZWxmLl90ZXN0X3JlcXVpcmVzX2xvY2sodGVzdF9maWxl
KToKKyAgICAgICAgICAgICAgICBsb2NrZWRfaW5wdXRzLmFwcGVuZCh0ZXN0X2lucHV0KQorICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB1bmxvY2tlZF9pbnB1dHMuYXBwZW5kKHRl
c3RfaW5wdXQpCisgICAgICAgIHJldHVybiBbVGVzdFNoYXJkKCdsb2NrZWRfdGVzdHMnLCBsb2Nr
ZWRfaW5wdXRzKV0sIFtUZXN0U2hhcmQoJ3VubG9ja2VkX3Rlc3RzJywgdW5sb2NrZWRfaW5wdXRz
KV0KKworICAgIGRlZiBfc2hhcmRfZXZlcnlfZmlsZShzZWxmLCB0ZXN0X2ZpbGVzKToKKyAgICAg
ICAgIiIiUmV0dXJucyB0d28gbGlzdHMgb2Ygc2hhcmRzLCBlYWNoIHNoYXJkIGNvbnRhaW5pbmcg
YSBzaW5nbGUgdGVzdCBmaWxlLgorCisgICAgICAgIFRoaXMgbW9kZSBnZXRzIG1heGltYWwgcGFy
YWxsZWxpc20gYXQgdGhlIGNvc3Qgb2YgbXVjaCBoaWdoZXIgZmxha2luZXNzLiIiIgogICAgICAg
ICBsb2NrZWRfc2hhcmRzID0gW10KICAgICAgICAgdW5sb2NrZWRfc2hhcmRzID0gW10KLSAgICAg
ICAgdGVzdHNfdG9faHR0cF9sb2NrID0gW10KLSAgICAgICAgaWYgbm90IHVzZV9yZWFsX3NoYXJk
czoKLSAgICAgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gdGVzdF9maWxlczoKLSAgICAgICAgICAg
ICAgICB0ZXN0X2lucHV0ID0gc2VsZi5fZ2V0X3Rlc3RfaW5wdXRfZm9yX2ZpbGUodGVzdF9maWxl
KQotICAgICAgICAgICAgICAgIGlmIHNlbGYuX3Rlc3RfcmVxdWlyZXNfbG9jayh0ZXN0X2ZpbGUp
OgotICAgICAgICAgICAgICAgICAgICB0ZXN0c190b19odHRwX2xvY2suYXBwZW5kKHRlc3RfaW5w
dXQpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgdW5sb2NrZWRf
c2hhcmRzLmFwcGVuZCgoIi4iLCBbdGVzdF9pbnB1dF0pKQotICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgdGVzdHNfYnlfZGlyID0ge30KLSAgICAgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gdGVz
dF9maWxlczoKLSAgICAgICAgICAgICAgICBkaXJlY3RvcnkgPSBzZWxmLl9nZXRfZGlyX2Zvcl90
ZXN0X2ZpbGUodGVzdF9maWxlKQotICAgICAgICAgICAgICAgIHRlc3RfaW5wdXQgPSBzZWxmLl9n
ZXRfdGVzdF9pbnB1dF9mb3JfZmlsZSh0ZXN0X2ZpbGUpCi0gICAgICAgICAgICAgICAgaWYgc2Vs
Zi5fdGVzdF9yZXF1aXJlc19sb2NrKHRlc3RfZmlsZSk6Ci0gICAgICAgICAgICAgICAgICAgIHRl
c3RzX3RvX2h0dHBfbG9jay5hcHBlbmQodGVzdF9pbnB1dCkKLSAgICAgICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgICAgICB0ZXN0c19ieV9kaXIuc2V0ZGVmYXVsdChkaXJlY3Rvcnks
IFtdKQotICAgICAgICAgICAgICAgICAgICB0ZXN0c19ieV9kaXJbZGlyZWN0b3J5XS5hcHBlbmQo
dGVzdF9pbnB1dCkKLSAgICAgICAgICAgIGZvciBkaXJlY3RvcnkgaW4gdGVzdHNfYnlfZGlyOgot
ICAgICAgICAgICAgICAgIHRlc3RfbGlzdCA9IHRlc3RzX2J5X2RpcltkaXJlY3RvcnldCi0gICAg
ICAgICAgICAgICAgdGVzdF9saXN0X3R1cGxlID0gKGRpcmVjdG9yeSwgdGVzdF9saXN0KQotICAg
ICAgICAgICAgICAgIHVubG9ja2VkX3NoYXJkcy5hcHBlbmQodGVzdF9saXN0X3R1cGxlKQorICAg
ICAgICBmb3IgdGVzdF9maWxlIGluIHRlc3RfZmlsZXM6CisgICAgICAgICAgICB0ZXN0X2lucHV0
ID0gc2VsZi5fZ2V0X3Rlc3RfaW5wdXRfZm9yX2ZpbGUodGVzdF9maWxlKQorCisgICAgICAgICAg
ICAjIE5vdGUgdGhhdCB3ZSB1c2UgYSAnLicgZm9yIHRoZSBzaGFyZCBuYW1lOyB0aGUgbmFtZSBk
b2Vzbid0IHJlYWxseQorICAgICAgICAgICAgIyBtYXR0ZXIsIGFuZCB0aGUgb25seSBvdGhlciBt
ZWFuaW5nZnVsIHZhbHVlIHdvdWxkIGJlIHRoZSBmaWxlbmFtZSwKKyAgICAgICAgICAgICMgd2hp
Y2ggd291bGQgYmUgcmVhbGx5IHJlZHVuZGFudC4KKyAgICAgICAgICAgIGlmIHNlbGYuX3Rlc3Rf
cmVxdWlyZXNfbG9jayh0ZXN0X2ZpbGUpOgorICAgICAgICAgICAgICAgIGxvY2tlZF9zaGFyZHMu
YXBwZW5kKFRlc3RTaGFyZCgnLicsIFt0ZXN0X2lucHV0XSkpCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIHVubG9ja2VkX3NoYXJkcy5hcHBlbmQoVGVzdFNoYXJkKCcuJywgW3Rl
c3RfaW5wdXRdKSkKKworICAgICAgICByZXR1cm4gbG9ja2VkX3NoYXJkcywgdW5sb2NrZWRfc2hh
cmRzCisKKyAgICBkZWYgX3NoYXJkX2J5X2RpcmVjdG9yeShzZWxmLCB0ZXN0X2ZpbGVzLCBudW1f
d29ya2Vycyk6CisgICAgICAgICIiIlJldHVybnMgdHdvIGxpc3RzIG9mIHNoYXJkcywgZWFjaCBz
aGFyZCBjb250YWluaW5nIGFsbCB0aGUgZmlsZXMgaW4gYSBkaXJlY3RvcnkuCiAKLSAgICAgICAg
ICAgICMgU29ydCB0aGUgc2hhcmRzIGJ5IGRpcmVjdG9yeSBuYW1lLgotICAgICAgICAgICAgdW5s
b2NrZWRfc2hhcmRzLnNvcnQobGFtYmRhIGEsIGI6IGNtcChhWzBdLCBiWzBdKSkKKyAgICAgICAg
VGhpcyBpcyB0aGUgZGVmYXVsdCBtb2RlLCBhbmQgZ2V0cyBhcyBtdWNoIHBhcmFsbGVsaXNtIGFz
IHdlIGNhbiB3aGlsZQorICAgICAgICBtaW5pbWl6aW5nIGZsYWtpbmVzcyBjYXVzZWQgYnkgaW50
ZXItdGVzdCBkZXBlbmRlbmNpZXMuIiIiCisgICAgICAgIGxvY2tlZF9zaGFyZHMgPSBbXQorICAg
ICAgICB1bmxvY2tlZF9zaGFyZHMgPSBbXQorICAgICAgICB0ZXN0c19ieV9kaXIgPSB7fQorICAg
ICAgICAjIEZJWE1FOiBHaXZlbiB0aGF0IHRoZSB0ZXN0cyBhcmUgYWxyZWFkeSBzb3J0ZWQgYnkg
ZGlyZWN0b3J5LAorICAgICAgICAjIHdlIGNhbiBwcm9iYWJseSByZXdyaXRlIHRoaXMgdG8gYmUg
Y2xlYXJlciBhbmQgZmFzdGVyLgorICAgICAgICBmb3IgdGVzdF9maWxlIGluIHRlc3RfZmlsZXM6
CisgICAgICAgICAgICBkaXJlY3RvcnkgPSBzZWxmLl9nZXRfZGlyX2Zvcl90ZXN0X2ZpbGUodGVz
dF9maWxlKQorICAgICAgICAgICAgdGVzdF9pbnB1dCA9IHNlbGYuX2dldF90ZXN0X2lucHV0X2Zv
cl9maWxlKHRlc3RfZmlsZSkKKyAgICAgICAgICAgIHRlc3RzX2J5X2Rpci5zZXRkZWZhdWx0KGRp
cmVjdG9yeSwgW10pCisgICAgICAgICAgICB0ZXN0c19ieV9kaXJbZGlyZWN0b3J5XS5hcHBlbmQo
dGVzdF9pbnB1dCkKKworICAgICAgICBmb3IgZGlyZWN0b3J5LCB0ZXN0X2lucHV0cyBpbiB0ZXN0
c19ieV9kaXIuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBzaGFyZCA9IFRlc3RTaGFyZChkaXJl
Y3RvcnksIHRlc3RfaW5wdXRzKQorICAgICAgICAgICAgaWYgc2VsZi5fdGVzdF9yZXF1aXJlc19s
b2NrKGRpcmVjdG9yeSk6CisgICAgICAgICAgICAgICAgbG9ja2VkX3NoYXJkcy5hcHBlbmQoc2hh
cmQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHVubG9ja2VkX3NoYXJkcy5h
cHBlbmQoc2hhcmQpCiAKLSAgICAgICAgaWYgdGVzdHNfdG9faHR0cF9sb2NrOgotICAgICAgICAg
ICAgbG9ja2VkX3NoYXJkcyA9IFsoInRlc3RzX3RvX2h0dHBfbG9jayIsIHRlc3RzX3RvX2h0dHBf
bG9jayldCisgICAgICAgICMgU29ydCB0aGUgc2hhcmRzIGJ5IGRpcmVjdG9yeSBuYW1lLgorICAg
ICAgICBsb2NrZWRfc2hhcmRzLnNvcnQoa2V5PWxhbWJkYSBzaGFyZDogc2hhcmQubmFtZSkKKyAg
ICAgICAgdW5sb2NrZWRfc2hhcmRzLnNvcnQoa2V5PWxhbWJkYSBzaGFyZDogc2hhcmQubmFtZSkK
IAotICAgICAgICByZXR1cm4gKGxvY2tlZF9zaGFyZHMsIHVubG9ja2VkX3NoYXJkcykKKyAgICAg
ICAgcmV0dXJuIChzZWxmLl9yZXNpemVfc2hhcmRzKGxvY2tlZF9zaGFyZHMsIHNlbGYuX21heF9s
b2NrZWRfc2hhcmRzKG51bV93b3JrZXJzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdsb2NrZWRfc2hhcmQnKSwKKyAgICAgICAgICAgICAgICB1bmxvY2tlZF9zaGFyZHMp
CisKKyAgICBkZWYgX21heF9sb2NrZWRfc2hhcmRzKHNlbGYsIG51bV93b3JrZXJzKToKKyAgICAg
ICAgIyBQdXQgYSBjZWlsaW5nIG9uIHRoZSBudW1iZXIgb2YgbG9ja2VkIHNoYXJkcywgc28gdGhh
dCB3ZQorICAgICAgICAjIGRvbid0IGhhbW1lciB0aGUgc2VydmVycyB0b28gYmFkbHkuCisKKyAg
ICAgICAgIyBGSVhNRTogRm9yIG5vdywgbGltaXQgdG8gb25lIHNoYXJkLiBBZnRlciB0ZXN0aW5n
IHRvIG1ha2Ugc3VyZSB3ZQorICAgICAgICAjIGNhbiBoYW5kbGUgbXVsdGlwbGUgc2hhcmRzLCB3
ZSBzaG91bGQgcHJvYmFibHkgZG8gc29tZXRoaW5nIGxpa2UKKyAgICAgICAgIyBsaW1pdCB0aGlz
IHRvIG5vIG1vcmUgdGhhbiBhIHF1YXJ0ZXIgb2YgYWxsIHdvcmtlcnMsIGUuZy46CisgICAgICAg
ICMgcmV0dXJuIG1heChtYXRoLmNlaWwobnVtX3dvcmtlcnMgLyA0LjApLCAxKQorICAgICAgICBy
ZXR1cm4gMQorCisgICAgZGVmIF9yZXNpemVfc2hhcmRzKHNlbGYsIG9sZF9zaGFyZHMsIG1heF9u
ZXdfc2hhcmRzLCBzaGFyZF9uYW1lX3ByZWZpeCk6CisgICAgICAgICIiIlRha2VzIGEgbGlzdCBv
ZiBzaGFyZHMgYW5kIHJlZGlzdHJpYnV0ZXMgdGhlIHRlc3RzIGludG8gbm8gbW9yZQorICAgICAg
ICB0aGFuIHxtYXhfbmV3X3NoYXJkc3wgbmV3IHNoYXJkcy4iIiIKKworICAgICAgICAjIFRoaXMg
aW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGF0IGVhY2ggaW5wdXQgc2hhcmQgb25seSBjb250YWlu
cyB0ZXN0cyBmcm9tIGEKKyAgICAgICAgIyBzaW5nbGUgZGlyZWN0b3J5LCBhbmQgdGhhdCB0ZXN0
cyBpbiBlYWNoIHNoYXJkIG11c3QgcmVtYWluIHRvZ2V0aGVyOyBhcyBhCisgICAgICAgICMgcmVz
dWx0LCBhIGdpdmVuIGlucHV0IHNoYXJkIGlzIG5ldmVyIHNwbGl0IGJldHdlZW4gb3V0cHV0IHNo
YXJkcy4KKyAgICAgICAgIworICAgICAgICAjIEVhY2ggb3V0cHV0IHNoYXJkIGNvbnRhaW5zIHRo
ZSB0ZXN0cyBmcm9tIG9uZSBvciBtb3JlIGlucHV0IHNoYXJkcyBhbmQKKyAgICAgICAgIyBoZW5j
ZSBtYXkgY29udGFpbiB0ZXN0cyBmcm9tIG11bHRpcGxlIGRpcmVjdG9yaWVzLgorCisgICAgICAg
IGRlZiBkaXZpZGVfYW5kX3JvdW5kX3VwKG51bWVyYXRvciwgZGl2aXNvcik6CisgICAgICAgICAg
ICByZXR1cm4gaW50KG1hdGguY2VpbChmbG9hdChudW1lcmF0b3IpIC8gZGl2aXNvcikpCisKKyAg
ICAgICAgZGVmIGV4dHJhY3RfYW5kX2ZsYXR0ZW4oc2hhcmRzKToKKyAgICAgICAgICAgIHRlc3Rf
aW5wdXRzID0gW10KKyAgICAgICAgICAgIGZvciBzaGFyZCBpbiBzaGFyZHM6CisgICAgICAgICAg
ICAgICAgdGVzdF9pbnB1dHMuZXh0ZW5kKHNoYXJkLnRlc3RfaW5wdXRzKQorICAgICAgICAgICAg
cmV0dXJuIHRlc3RfaW5wdXRzCisKKyAgICAgICAgZGVmIHNwbGl0X2F0KHNlcSwgaW5kZXgpOgor
ICAgICAgICAgICAgcmV0dXJuIChzZXFbOmluZGV4XSwgc2VxW2luZGV4Ol0pCisKKyAgICAgICAg
bnVtX29sZF9wZXJfbmV3ID0gZGl2aWRlX2FuZF9yb3VuZF91cChsZW4ob2xkX3NoYXJkcyksIG1h
eF9uZXdfc2hhcmRzKQorICAgICAgICBuZXdfc2hhcmRzID0gW10KKyAgICAgICAgcmVtYWluaW5n
X3NoYXJkcyA9IG9sZF9zaGFyZHMKKyAgICAgICAgd2hpbGUgcmVtYWluaW5nX3NoYXJkczoKKyAg
ICAgICAgICAgIHNvbWVfc2hhcmRzLCByZW1haW5pbmdfc2hhcmRzID0gc3BsaXRfYXQocmVtYWlu
aW5nX3NoYXJkcywgbnVtX29sZF9wZXJfbmV3KQorICAgICAgICAgICAgbmV3X3NoYXJkcy5hcHBl
bmQoVGVzdFNoYXJkKCclc18lZCcgJSAoc2hhcmRfbmFtZV9wcmVmaXgsIGxlbihuZXdfc2hhcmRz
KSArIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3Rf
YW5kX2ZsYXR0ZW4oc29tZV9zaGFyZHMpKSkKKyAgICAgICAgcmV0dXJuIG5ld19zaGFyZHMKIAog
ICAgIGRlZiBfY29udGFpbnNfdGVzdHMoc2VsZiwgc3ViZGlyKToKICAgICAgICAgZm9yIHRlc3Rf
ZmlsZSBpbiBzZWxmLl90ZXN0X2ZpbGVzOgpAQCAtNTg1LDE2ICs2NzksMTQgQEAgY2xhc3MgTWFu
YWdlcihvYmplY3QpOgogICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIHJldHVy
biBGYWxzZQogCi0gICAgZGVmIF9udW1fd29ya2VycyhzZWxmLCBudW1fc2hhcmRzKToKLSAgICAg
ICAgbnVtX3dvcmtlcnMgPSBtaW4oaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSwg
bnVtX3NoYXJkcykKKyAgICBkZWYgX2xvZ19udW1fd29ya2VycyhzZWxmLCBudW1fd29ya2Vycywg
bnVtX3NoYXJkcywgbnVtX2xvY2tlZF9zaGFyZHMpOgogICAgICAgICBkcml2ZXJfbmFtZSA9IHNl
bGYuX3BvcnQuZHJpdmVyX25hbWUoKQogICAgICAgICBpZiBudW1fd29ya2VycyA9PSAxOgogICAg
ICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9jb25maWcoIlJ1bm5pbmcgMSAlcyBvdmVyICVz
IiAlCiAgICAgICAgICAgICAgICAgKGRyaXZlcl9uYW1lLCBncmFtbWFyLnBsdXJhbGl6ZSgnc2hh
cmQnLCBudW1fc2hhcmRzKSkpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9wcmlu
dGVyLnByaW50X2NvbmZpZygiUnVubmluZyAlZCAlc3MgaW4gcGFyYWxsZWwgb3ZlciAlZCBzaGFy
ZHMiICUKLSAgICAgICAgICAgICAgICAobnVtX3dvcmtlcnMsIGRyaXZlcl9uYW1lLCBudW1fc2hh
cmRzKSkKLSAgICAgICAgcmV0dXJuIG51bV93b3JrZXJzCisgICAgICAgICAgICBzZWxmLl9wcmlu
dGVyLnByaW50X2NvbmZpZygiUnVubmluZyAlZCAlc3MgaW4gcGFyYWxsZWwgb3ZlciAlZCBzaGFy
ZHMgKCVkIGxvY2tlZCkiICUKKyAgICAgICAgICAgICAgICAobnVtX3dvcmtlcnMsIGRyaXZlcl9u
YW1lLCBudW1fc2hhcmRzLCBudW1fbG9ja2VkX3NoYXJkcykpCiAKICAgICBkZWYgX3J1bl90ZXN0
cyhzZWxmLCBmaWxlX2xpc3QsIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAgIiIiUnVucyB0aGUg
dGVzdHMgaW4gdGhlIGZpbGVfbGlzdC4KQEAgLTYyMyw3ICs3MTUsNyBAQCBjbGFzcyBNYW5hZ2Vy
KG9iamVjdCk6CiAKICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1NoYXJkaW5n
IHRlc3RzIC4uLicpCiAgICAgICAgIGxvY2tlZF9zaGFyZHMsIHVubG9ja2VkX3NoYXJkcyA9IHNl
bGYuX3NoYXJkX3Rlc3RzKGZpbGVfbGlzdCwKLSAgICAgICAgICAgIGludChzZWxmLl9vcHRpb25z
LmNoaWxkX3Byb2Nlc3NlcykgPiAxIGFuZCBub3Qgc2VsZi5fb3B0aW9ucy5leHBlcmltZW50YWxf
ZnVsbHlfcGFyYWxsZWwpCisgICAgICAgICAgICBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9j
ZXNzZXMpLCBzZWxmLl9vcHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCkKIAogICAg
ICAgICAjIEZJWE1FOiBXZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gY29vcmRpbmF0ZSB0aGUg
d29ya2VycyBzbyB0aGF0CiAgICAgICAgICMgdGhleSBkb24ndCB0cnkgdG8gcnVuIHRoZSBzaGFy
ZHMgdGhhdCBuZWVkIGEgbG9jayBpZiB3ZSBkb24ndCBhY3R1YWxseQpAQCAtNjM4LDcgKzczMCw5
IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgaWYgbG9ja2VkX3NoYXJkczoKICAg
ICAgICAgICAgIHNlbGYuc3RhcnRfc2VydmVyc193aXRoX2xvY2soKQogCi0gICAgICAgIG51bV93
b3JrZXJzID0gc2VsZi5fbnVtX3dvcmtlcnMobGVuKGFsbF9zaGFyZHMpKQorICAgICAgICBudW1f
d29ya2VycyA9IG1pbihpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpLCBsZW4oYWxs
X3NoYXJkcykpCisgICAgICAgIHNlbGYuX2xvZ19udW1fd29ya2VycyhudW1fd29ya2VycywgbGVu
KGFsbF9zaGFyZHMpLCBsZW4obG9ja2VkX3NoYXJkcykpCisKICAgICAgICAgbWFuYWdlcl9jb25u
ZWN0aW9uID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLmdldChzZWxmLl9wb3J0LCBzZWxmLl9vcHRp
b25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYsIHdvcmtlci5Xb3JrZXIpCiAKQEAgLTY2MSw3ICs3NTUsOCBAQCBjbGFzcyBNYW5h
Z2VyKG9iamVjdCk6CiAKICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoIlN0YXJ0
aW5nIHRlc3RpbmcgLi4uIikKICAgICAgICAgZm9yIHNoYXJkIGluIGFsbF9zaGFyZHM6Ci0gICAg
ICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCd0ZXN0X2xpc3QnLCBzaGFy
ZFswXSwgc2hhcmRbMV0pCisgICAgICAgICAgICAjIEZJWE1FOiBDaGFuZ2UgJ3Rlc3RfbGlzdCcg
dG8gJ3NoYXJkJywgbWFrZSBzaGFyZGluZyBwdWJsaWMuCisgICAgICAgICAgICBtYW5hZ2VyX2Nv
bm5lY3Rpb24ucG9zdF9tZXNzYWdlKCd0ZXN0X2xpc3QnLCBzaGFyZC5uYW1lLCBzaGFyZC50ZXN0
X2lucHV0cykKIAogICAgICAgICAjIFdlIHBvc3Qgb25lICdzdG9wJyBtZXNzYWdlIGZvciBlYWNo
IHdvcmtlci4gQmVjYXVzZSB0aGUgc3RvcCBtZXNzYWdlCiAgICAgICAgICMgYXJlIHNlbnQgYWZ0
ZXIgYWxsIG9mIHRoZSB0ZXN0cywgYW5kIGJlY2F1c2UgZWFjaCB3b3JrZXIgd2lsbCBzdG9wCkBA
IC0xMzYwLDcgKzE0NTUsNyBAQCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAKICAgICAgICAgZGVm
IGZpbmQobmFtZSwgdGVzdF9saXN0cyk6CiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4o
dGVzdF9saXN0cykpOgotICAgICAgICAgICAgICAgIGlmIHRlc3RfbGlzdHNbaV1bMF0gPT0gbmFt
ZToKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X2xpc3RzW2ldLm5hbWUgPT0gbmFtZToKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGkKICAgICAgICAgICAgIHJldHVybiAtMQogCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9t
YW5hZ2VyX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvbWFuYWdlcl91bml0dGVzdC5weQppbmRleCA0MWRlMjViYzRlMjI0NmUx
NThkMDAyOTNhZjRmZmIyMTc5ODE0ZTIyLi41MjVhM2YzZWFhZTk1MGJkZTZmNmY4ZjM2YjVmMjky
N2Y3NjlkODNiIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfdW5pdHRlc3QucHkK
QEAgLTM5LDcgKzM5LDcgQEAgZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5Lm1vY2sgaW1wb3J0IE1v
Y2sKIAogZnJvbSB3ZWJraXRweSBpbXBvcnQgbGF5b3V0X3Rlc3RzCiBmcm9tIHdlYmtpdHB5Lmxh
eW91dF90ZXN0cyBpbXBvcnQgcnVuX3dlYmtpdF90ZXN0cwotZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMubGF5b3V0X3BhY2thZ2UubWFuYWdlciBpbXBvcnQgTWFuYWdlciwgbmF0dXJhbF9zb3J0
X2tleSwgcGF0aF9rZXkKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdl
Lm1hbmFnZXIgaW1wb3J0IE1hbmFnZXIsIFRlc3RTaGFyZCwgbmF0dXJhbF9zb3J0X2tleSwgcGF0
aF9rZXkKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBw
cmludGluZwogCiAKQEAgLTQ4LDQwICs0OCw3OSBAQCBjbGFzcyBNYW5hZ2VyV3JhcHBlcihNYW5h
Z2VyKToKICAgICAgICAgcmV0dXJuIHRlc3RfZmlsZQogCiAKLWNsYXNzIE1hbmFnZXJUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9zaGFyZF90ZXN0cyhzZWxmKToKLSAgICAg
ICAgIyBUZXN0IHRoYXQgX3NoYXJkX3Rlc3RzIGluIHRlc3RfcnVubmVyLlRlc3RSdW5uZXIgcmVh
bGx5Ci0gICAgICAgICMgcHV0IHRoZSBodHRwIHRlc3RzIGZpcnN0IGluIHRoZSBxdWV1ZS4KK2Ns
YXNzIFNoYXJkaW5nVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgRklYTUU6IFJlbW92
ZSAiTGF5b3V0VGVzdHMiIGZyb20gdGhpcyBpZiB3ZSBjYW4gZXZlciBjb252ZXJ0IHRoZSBnZW5l
cmljCisgICAgIyBjb2RlIGZyb20gZmlsZW5hbWVzIHRvIHRlc3QgbmFtZXMuCisgICAgdGVzdF9s
aXN0ID0gWworICAgICAgICAiTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMv
dW5pY29kZS5odG0iLAorICAgICAgICAiTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9rZXlmcmFtZXMu
aHRtbCIsCisgICAgICAgICJMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3ZpZXctc291
cmNlLW5vLXJlZnJlc2guaHRtbCIsCisgICAgICAgICJMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dl
YnNvY2tldC90ZXN0cy93ZWJzb2NrZXQtcHJvdG9jb2wtaWdub3JlZC5odG1sIiwKKyAgICAgICAg
IkxheW91dFRlc3RzL2Zhc3QvY3NzL2Rpc3BsYXktbm9uZS1pbmxpbmUtc3R5bGUtY2hhbmdlLWNy
YXNoLmh0bWwiLAorICAgICAgICAiTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVz
dC9zdXBwb3J0ZWQteG1sLWNvbnRlbnQtdHlwZXMuaHRtbCIsCisgICAgICAgICJMYXlvdXRUZXN0
cy9kb20vaHRtbC9sZXZlbDIvaHRtbC9IVE1MQW5jaG9yRWxlbWVudDAzLmh0bWwiLAorICAgICAg
ICAiTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTEuMS41XzQtNC1jLTEuaHRt
bCIsCisgICAgICAgICJMYXlvdXRUZXN0cy9kb20vaHRtbC9sZXZlbDIvaHRtbC9IVE1MQW5jaG9y
RWxlbWVudDA2Lmh0bWwiLAorICAgIF0KKworICAgIGRlZiBnZXRfc2hhcmRzKHNlbGYsIG51bV93
b3JrZXJzLCBmdWxseV9wYXJhbGxlbCk6CiAgICAgICAgIHBvcnQgPSBNb2NrKCkKICAgICAgICAg
cG9ydC5fZmlsZXN5c3RlbSA9IGZpbGVzeXN0ZW1fbW9jay5Nb2NrRmlsZVN5c3RlbSgpCi0gICAg
ICAgIG1hbmFnZXIgPSBNYW5hZ2VyV3JhcHBlcihwb3J0PXBvcnQsIG9wdGlvbnM9TW9jaygpLCBw
cmludGVyPU1vY2soKSkKLQotICAgICAgICB0ZXN0X2xpc3QgPSBbCi0gICAgICAgICAgIkxheW91
dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91bmljb2RlLmh0bSIsCi0gICAgICAgICAgIkxheW91dFRl
c3RzL2FuaW1hdGlvbnMva2V5ZnJhbWVzLmh0bWwiLAotICAgICAgICAgICJMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3NlY3VyaXR5L3ZpZXctc291cmNlLW5vLXJlZnJlc2guaHRtbCIsCi0gICAgICAg
ICAgIkxheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy93ZWJzb2NrZXQtcHJvdG9jb2wtaWdub3Jl
ZC5odG1sIiwKLSAgICAgICAgICAiTGF5b3V0VGVzdHMvZmFzdC9jc3MvZGlzcGxheS1ub25lLWlu
bGluZS1zdHlsZS1jaGFuZ2UtY3Jhc2guaHRtbCIsCi0gICAgICAgICAgIkxheW91dFRlc3RzL2h0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3VwcG9ydGVkLXhtbC1jb250ZW50LXR5cGVzLmh0bWwi
LAotICAgICAgICAgICJMYXlvdXRUZXN0cy9kb20vaHRtbC9sZXZlbDIvaHRtbC9IVE1MQW5jaG9y
RWxlbWVudDAzLmh0bWwiLAotICAgICAgICAgICJMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2
YXNjcmlwdC8xMS4xLjVfNC00LWMtMS5odG1sIiwKLSAgICAgICAgICAiTGF5b3V0VGVzdHMvZG9t
L2h0bWwvbGV2ZWwyL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQwNi5odG1sIiwKLSAgICAgICAgXQot
Ci0gICAgICAgIGV4cGVjdGVkX3Rlc3RzX3RvX2h0dHBfbG9jayA9IHNldChbCi0gICAgICAgICAg
J0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91bmljb2RlLmh0bScsCi0gICAgICAgICAgJ0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvdmlldy1zb3VyY2Utbm8tcmVmcmVzaC5odG1s
JywKLSAgICAgICAgICAnTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3dlYnNvY2tldC1wcm90
b2NvbC1pZ25vcmVkLmh0bWwnLAotICAgICAgICAgICdMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3ht
bGh0dHByZXF1ZXN0L3N1cHBvcnRlZC14bWwtY29udGVudC10eXBlcy5odG1sJywKLSAgICAgICAg
XSkKLQotICAgICAgICBzaW5nbGVfbG9ja2VkLCBzaW5nbGVfdW5sb2NrZWQgPSBtYW5hZ2VyLl9z
aGFyZF90ZXN0cyh0ZXN0X2xpc3QsIEZhbHNlKQotICAgICAgICBtdWx0aV9sb2NrZWQsIG11bHRp
X3VubG9ja2VkID0gbWFuYWdlci5fc2hhcmRfdGVzdHModGVzdF9saXN0LCBUcnVlKQotCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoInRlc3RzX3RvX2h0dHBfbG9jayIsIHNpbmdsZV9sb2NrZWRb
MF1bMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdGVzdHNfdG9faHR0cF9s
b2NrLCBzZXQoc2luZ2xlX2xvY2tlZFswXVsxXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
InRlc3RzX3RvX2h0dHBfbG9jayIsIG11bHRpX2xvY2tlZFswXVswXSkKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChleHBlY3RlZF90ZXN0c190b19odHRwX2xvY2ssIHNldChtdWx0aV9sb2NrZWRb
MF1bMV0pKQorICAgICAgICBzZWxmLm1hbmFnZXIgPSBNYW5hZ2VyV3JhcHBlcihwb3J0PXBvcnQs
IG9wdGlvbnM9TW9jaygpLCBwcmludGVyPU1vY2soKSkKKyAgICAgICAgcmV0dXJuIHNlbGYubWFu
YWdlci5fc2hhcmRfdGVzdHMoc2VsZi50ZXN0X2xpc3QsIG51bV93b3JrZXJzLCBmdWxseV9wYXJh
bGxlbCkKKworICAgIGRlZiB0ZXN0X3NoYXJkX2J5X2RpcihzZWxmKToKKyAgICAgICAgbG9ja2Vk
LCB1bmxvY2tlZCA9IHNlbGYuZ2V0X3NoYXJkcyhudW1fd29ya2Vycz0yLCBmdWxseV9wYXJhbGxl
bD1GYWxzZSkKKworICAgICAgICAjIE5vdGUgdGhhdCBhbHRob3VnaCB0aGVyZSBhcmUgdGVzdHMg
aW4gbXVsdGlwbGUgZGlycyB0aGF0IG5lZWQgbG9ja3MsCisgICAgICAgICMgdGhleSBhcmUgY3Jh
bW1lZCBpbnRvIGEgc2luZ2xlIHNoYXJkIGluIG9yZGVyIHRvIHJlZHVjZSB0aGUgIyBvZgorICAg
ICAgICAjIHdvcmtlcnMgaGl0dGluZyB0aGUgc2VydmVyIGF0IG9uY2UuCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKGxvY2tlZCwKKyAgICAgICAgICAgIFtUZXN0U2hhcmQoJ2xvY2tlZF9zaGFy
ZF8xJywKKyAgICAgICAgICAgICAgWydMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Zp
ZXctc291cmNlLW5vLXJlZnJlc2guaHRtbCcsCisgICAgICAgICAgICAgICAnTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvdW5pY29kZS5odG0nLAorICAgICAgICAgICAgICAg
J0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3dlYnNvY2tldC1wcm90b2Nv
bC1pZ25vcmVkLmh0bWwnLAorICAgICAgICAgICAgICAgJ0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3Qvc3VwcG9ydGVkLXhtbC1jb250ZW50LXR5cGVzLmh0bWwnXSldKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyh1bmxvY2tlZCwKKyAgICAgICAgICAgIFtUZXN0U2hhcmQo
J2FuaW1hdGlvbnMnLAorICAgICAgICAgICAgICAgICAgICAgICBbJ0xheW91dFRlc3RzL2FuaW1h
dGlvbnMva2V5ZnJhbWVzLmh0bWwnXSksCisgICAgICAgICAgICAgVGVzdFNoYXJkKCdkb20vaHRt
bC9sZXZlbDIvaHRtbCcsCisgICAgICAgICAgICAgICAgICAgICAgIFsnTGF5b3V0VGVzdHMvZG9t
L2h0bWwvbGV2ZWwyL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQwMy5odG1sJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICdMYXlvdXRUZXN0cy9kb20vaHRtbC9sZXZlbDIvaHRtbC9IVE1MQW5jaG9y
RWxlbWVudDA2Lmh0bWwnXSksCisgICAgICAgICAgICAgVGVzdFNoYXJkKCdmYXN0L2NzcycsCisg
ICAgICAgICAgICAgICAgICAgICAgIFsnTGF5b3V0VGVzdHMvZmFzdC9jc3MvZGlzcGxheS1ub25l
LWlubGluZS1zdHlsZS1jaGFuZ2UtY3Jhc2guaHRtbCddKSwKKyAgICAgICAgICAgICBUZXN0U2hh
cmQoJ2lldGVzdGNlbnRlci9KYXZhc2NyaXB0JywKKyAgICAgICAgICAgICAgICAgICAgICAgWydM
YXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xMS4xLjVfNC00LWMtMS5odG1sJ10p
XSkKKworICAgIGRlZiB0ZXN0X3NoYXJkX2V2ZXJ5X2ZpbGUoc2VsZik6CisgICAgICAgIGxvY2tl
ZCwgdW5sb2NrZWQgPSBzZWxmLmdldF9zaGFyZHMobnVtX3dvcmtlcnM9MiwgZnVsbHlfcGFyYWxs
ZWw9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobG9ja2VkLAorICAgICAgICAgICAg
W1Rlc3RTaGFyZCgnLicsIFsnTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMv
dW5pY29kZS5odG0nXSksCisgICAgICAgICAgICAgVGVzdFNoYXJkKCcuJywgWydMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3ZpZXctc291cmNlLW5vLXJlZnJlc2guaHRtbCddKSwKKyAg
ICAgICAgICAgICBUZXN0U2hhcmQoJy4nLCBbJ0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29j
a2V0L3Rlc3RzL3dlYnNvY2tldC1wcm90b2NvbC1pZ25vcmVkLmh0bWwnXSksCisgICAgICAgICAg
ICAgVGVzdFNoYXJkKCcuJywgWydMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L3N1cHBvcnRlZC14bWwtY29udGVudC10eXBlcy5odG1sJ10pXSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHModW5sb2NrZWQsCisgICAgICAgICAgICBbVGVzdFNoYXJkKCcuJywgWydMYXlvdXRU
ZXN0cy9hbmltYXRpb25zL2tleWZyYW1lcy5odG1sJ10pLAorICAgICAgICAgICAgIFRlc3RTaGFy
ZCgnLicsIFsnTGF5b3V0VGVzdHMvZmFzdC9jc3MvZGlzcGxheS1ub25lLWlubGluZS1zdHlsZS1j
aGFuZ2UtY3Jhc2guaHRtbCddKSwKKyAgICAgICAgICAgICBUZXN0U2hhcmQoJy4nLCBbJ0xheW91
dFRlc3RzL2RvbS9odG1sL2xldmVsMi9odG1sL0hUTUxBbmNob3JFbGVtZW50MDMuaHRtbCddKSwK
KyAgICAgICAgICAgICBUZXN0U2hhcmQoJy4nLCBbJ0xheW91dFRlc3RzL2lldGVzdGNlbnRlci9K
YXZhc2NyaXB0LzExLjEuNV80LTQtYy0xLmh0bWwnXSksCisgICAgICAgICAgICAgVGVzdFNoYXJk
KCcuJywgWydMYXlvdXRUZXN0cy9kb20vaHRtbC9sZXZlbDIvaHRtbC9IVE1MQW5jaG9yRWxlbWVu
dDA2Lmh0bWwnXSldKQorCisgICAgZGVmIHRlc3Rfc2hhcmRfaW5fdHdvKHNlbGYpOgorICAgICAg
ICBsb2NrZWQsIHVubG9ja2VkID0gc2VsZi5nZXRfc2hhcmRzKG51bV93b3JrZXJzPTEsIGZ1bGx5
X3BhcmFsbGVsPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsb2NrZWQsCisgICAg
ICAgICAgICBbVGVzdFNoYXJkKCdsb2NrZWRfdGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAg
ICBbJ0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VuaWNvZGUuaHRtJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICdMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L3ZpZXctc291cmNlLW5vLXJlZnJlc2guaHRtbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAn
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvd2Vic29ja2V0LXByb3RvY29s
LWlnbm9yZWQuaHRtbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy94bWxodHRwcmVxdWVzdC9zdXBwb3J0ZWQteG1sLWNvbnRlbnQtdHlwZXMuaHRtbCdd
KV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHVubG9ja2VkLAorICAgICAgICAgICAgW1Rl
c3RTaGFyZCgndW5sb2NrZWRfdGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAgICBbJ0xheW91
dFRlc3RzL2FuaW1hdGlvbnMva2V5ZnJhbWVzLmh0bWwnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgJ0xheW91dFRlc3RzL2Zhc3QvY3NzL2Rpc3BsYXktbm9uZS1pbmxpbmUtc3R5bGUtY2hhbmdl
LWNyYXNoLmh0bWwnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ0xheW91dFRlc3RzL2RvbS9o
dG1sL2xldmVsMi9odG1sL0hUTUxBbmNob3JFbGVtZW50MDMuaHRtbCcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAnTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTEuMS41XzQt
NC1jLTEuaHRtbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnTGF5b3V0VGVzdHMvZG9tL2h0
bWwvbGV2ZWwyL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQwNi5odG1sJ10pXSkKIAogICAgIGRlZiB0
ZXN0X2h0dHBfbG9ja2luZyh0ZXN0ZXIpOgogICAgICAgICBjbGFzcyBMb2NrQ2hlY2tpbmdNYW5h
Z2VyKE1hbmFnZXIpOgpAQCAtOTEsNyArMTMwLDcgQEAgY2xhc3MgTWFuYWdlclRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgogCiAgICAgICAgICAgICBkZWYgaGFuZGxlX2ZpbmlzaGVkX2xpc3Qoc2Vs
Ziwgc291cmNlLCBsaXN0X25hbWUsIG51bV90ZXN0cywgZWxhcHNlZF90aW1lKToKICAgICAgICAg
ICAgICAgICBpZiBub3Qgc2VsZi5fZmluaXNoZWRfbGlzdF9jYWxsZWQ6Ci0gICAgICAgICAgICAg
ICAgICAgIHRlc3Rlci5hc3NlcnRFcXVhbHMobGlzdF9uYW1lLCAndGVzdHNfdG9faHR0cF9sb2Nr
JykKKyAgICAgICAgICAgICAgICAgICAgdGVzdGVyLmFzc2VydEVxdWFscyhsaXN0X25hbWUsICds
b2NrZWRfdGVzdHMnKQogICAgICAgICAgICAgICAgICAgICB0ZXN0ZXIuYXNzZXJ0VHJ1ZShzZWxm
Ll9yZW1haW5pbmdfbG9ja2VkX3NoYXJkcykKICAgICAgICAgICAgICAgICAgICAgdGVzdGVyLmFz
c2VydFRydWUoc2VsZi5faGFzX2h0dHBfbG9jaykKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>