<?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>63112</bug_id>
          
          <creation_ts>2011-06-21 20:07:25 -0700</creation_ts>
          <short_desc>nrwt: make sharding tests needing locks less hard-coded</short_desc>
          <delta_ts>2011-07-05 17:07:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>63103</dependson>
    
    <dependson>63788</dependson>
          <blocked>63116</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>424978</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-21 20:07:25 -0700</bug_when>
    <thetext>nrwt: make sharding tests needing locks less hard-coded</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424979</commentid>
    <comment_count>1</comment_count>
      <attachid>98107</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-21 20:07:53 -0700</bug_when>
    <thetext>Created attachment 98107
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424980</commentid>
    <comment_count>2</comment_count>
      <attachid>98108</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-21 20:09:26 -0700</bug_when>
    <thetext>Created attachment 98108
fix ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425401</commentid>
    <comment_count>3</comment_count>
      <attachid>98108</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-06-22 11:19:04 -0700</bug_when>
    <thetext>Comment on attachment 98108
fix ChangeLog

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

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:269
&gt; +        self._locked_shards = []
&gt; +        self._unlocked_shards = []

It&apos;s not clear from these names that we&apos;re talking about the HTTP lock.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:-580
&gt; -        # Put the http tests first. There are only a couple hundred of them,
&gt; -        # but each http test takes a very long time to run, so sorting by the
&gt; -        # number of tests doesn&apos;t accurately capture how long they take to run.

While this comment is outdated, some comment saying why we put the HTTP tests first seems useful to me.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:1362
&gt; +            i = 0
&gt; +            while i &lt; len(test_lists):
&gt; +                if test_lists[i][0] == name:
&gt; +                    return i
&gt; +                i += 1
&gt; +
&gt; +            return -1

I think you can write this as the following:
for i in range(len(test_lists)):
    if test_lists[i][0] == name:
        return i
return -1

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:1372
&gt; +        index = find(list_name, self._unlocked_shards)
&gt; +        self._unlocked_shards.pop(index)

Is there a reason to remove items from the unlocked_shards list?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425406</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-22 11:24:34 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 98108 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98108&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:269
&gt; &gt; +        self._locked_shards = []
&gt; &gt; +        self._unlocked_shards = []
&gt; 
&gt; It&apos;s not clear from these names that we&apos;re talking about the HTTP lock.
&gt; 

Well, there&apos;s only one lock, and it protects the websocket tests as well as the http tests, so I find the name http_lock cumbersome and somewhat misleading. Do you have a better suggestion?

(I want to rename the _has_http_lock member field as well, but was going to do that in a different patch).

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:-580
&gt; &gt; -        # Put the http tests first. There are only a couple hundred of them,
&gt; &gt; -        # but each http test takes a very long time to run, so sorting by the
&gt; &gt; -        # number of tests doesn&apos;t accurately capture how long they take to run.
&gt; 
&gt; While this comment is outdated, some comment saying why we put the HTTP tests first seems useful to me.
&gt; 

Okay, will add.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:1362
&gt; &gt; +            i = 0
&gt; &gt; +            while i &lt; len(test_lists):
&gt; &gt; +                if test_lists[i][0] == name:
&gt; &gt; +                    return i
&gt; &gt; +                i += 1
&gt; &gt; +
&gt; &gt; +            return -1
&gt; 
&gt; I think you can write this as the following:
&gt; for i in range(len(test_lists)):
&gt;     if test_lists[i][0] == name:
&gt;         return i
&gt; return -1
&gt; 

Makes sense. I always forget about using range() ... too much C/C++ in my blood.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:1372
&gt; &gt; +        index = find(list_name, self._unlocked_shards)
&gt; &gt; +        self._unlocked_shards.pop(index)
&gt; 
&gt; Is there a reason to remove items from the unlocked_shards list?

Only for consistency w/ locked_shards. Arguably this is a much longer list and might be a performance hit, but that could be fixed by switching to hash lookups if it matters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425412</commentid>
    <comment_count>5</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-06-22 11:29:50 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 98108 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98108&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:269
&gt; &gt; &gt; +        self._locked_shards = []
&gt; &gt; &gt; +        self._unlocked_shards = []
&gt; &gt; 
&gt; &gt; It&apos;s not clear from these names that we&apos;re talking about the HTTP lock.
&gt; &gt; 
&gt; 
&gt; Well, there&apos;s only one lock, and it protects the websocket tests as well as the http tests, so I find the name http_lock cumbersome and somewhat misleading. Do you have a better suggestion?
&gt; 
&gt; (I want to rename the _has_http_lock member field as well, but was going to do that in a different patch).

I guess I&apos;m OK with that.

&gt; &gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:1372
&gt; &gt; &gt; +        index = find(list_name, self._unlocked_shards)
&gt; &gt; &gt; +        self._unlocked_shards.pop(index)
&gt; &gt; 
&gt; &gt; Is there a reason to remove items from the unlocked_shards list?
&gt; 
&gt; Only for consistency w/ locked_shards. Arguably this is a much longer list and might be a performance hit, but that could be fixed by switching to hash lookups if it matters.

I&apos;m not really worried about the performance hit. But it adds more code to make sense of and is effectively dead code since removing the items doesn&apos;t affect anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425425</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-22 11:39:22 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; (From update of attachment 98108 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98108&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:269
&gt; &gt; &gt; &gt; +        self._locked_shards = []
&gt; &gt; &gt; &gt; +        self._unlocked_shards = []
&gt; &gt; &gt; 
&gt; &gt; &gt; It&apos;s not clear from these names that we&apos;re talking about the HTTP lock.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; Well, there&apos;s only one lock, and it protects the websocket tests as well as the http tests, so I find the name http_lock cumbersome and somewhat misleading. Do you have a better suggestion?
&gt; &gt; 
&gt; &gt; (I want to rename the _has_http_lock member field as well, but was going to do that in a different patch).
&gt; 
&gt; I guess I&apos;m OK with that.
&gt; 
&gt; &gt; &gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:1372
&gt; &gt; &gt; &gt; +        index = find(list_name, self._unlocked_shards)
&gt; &gt; &gt; &gt; +        self._unlocked_shards.pop(index)
&gt; &gt; &gt; 
&gt; &gt; &gt; Is there a reason to remove items from the unlocked_shards list?
&gt; &gt; 
&gt; &gt; Only for consistency w/ locked_shards. Arguably this is a much longer list and might be a performance hit, but that could be fixed by switching to hash lookups if it matters.
&gt; 
&gt; I&apos;m not really worried about the performance hit. But it adds more code to make sense of and is effectively dead code since removing the items doesn&apos;t affect anything.

Okay, I&apos;ll try to rework it to make it a bit clearer what&apos;s going on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425842</commentid>
    <comment_count>7</comment_count>
      <attachid>98287</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-22 18:35:38 -0700</bug_when>
    <thetext>Created attachment 98287
stop tracking unlocked shards, add better comments about the lock strategy, other cleanup from review feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425926</commentid>
    <comment_count>8</comment_count>
      <attachid>98308</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-22 20:21:42 -0700</bug_when>
    <thetext>Created attachment 98308
fix rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427212</commentid>
    <comment_count>9</comment_count>
      <attachid>98308</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-06-24 15:45:51 -0700</bug_when>
    <thetext>Comment on attachment 98308
fix rebase

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

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:637
&gt; +        self._pending_locked_shards = locked_shards

should this be self._remaining_locked_shards? If so, it would be nice to also add a test that breaks given that we never seem to add anything to _remaining_locked_shards.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:1372
&gt; +            return

don&apos;t need the return statement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427233</commentid>
    <comment_count>10</comment_count>
      <attachid>98308</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-24 16:34:11 -0700</bug_when>
    <thetext>Comment on attachment 98308
fix rebase

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:637
&gt;&gt; +        self._pending_locked_shards = locked_shards
&gt; 
&gt; should this be self._remaining_locked_shards? If so, it would be nice to also add a test that breaks given that we never seem to add anything to _remaining_locked_shards.

Yes, good catch. However, I don&apos;t understand what you want to test here. Could you rephrase this? What do you mean by &quot;a test that breaks&quot;? Breaks what?

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:1372
&gt;&gt; +            return
&gt; 
&gt; don&apos;t need the return statement.

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428006</commentid>
    <comment_count>11</comment_count>
      <attachid>98308</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-06-27 09:40:05 -0700</bug_when>
    <thetext>Comment on attachment 98308
fix rebase

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

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:637
&gt;&gt;&gt; +        self._pending_locked_shards = locked_shards
&gt;&gt; 
&gt;&gt; should this be self._remaining_locked_shards? If so, it would be nice to also add a test that breaks given that we never seem to add anything to _remaining_locked_shards.
&gt; 
&gt; Yes, good catch. However, I don&apos;t understand what you want to test here. Could you rephrase this? What do you mean by &quot;a test that breaks&quot;? Breaks what?

Presumably, the fact that this line is setting _pending_locked_shards and other code expects _remaining_locked_shards to be set means that the code is doing the wrong thing under some circumstance that a test isn&apos;t catching.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428224</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-27 13:29:24 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 98308 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98308&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager.py:637
&gt; &gt;&gt;&gt; +        self._pending_locked_shards = locked_shards
&gt; &gt;&gt; 
&gt; &gt;&gt; should this be self._remaining_locked_shards? If so, it would be nice to also add a test that breaks given that we never seem to add anything to _remaining_locked_shards.
&gt; &gt; 
&gt; &gt; Yes, good catch. However, I don&apos;t understand what you want to test here. Could you rephrase this? What do you mean by &quot;a test that breaks&quot;? Breaks what?
&gt; 
&gt; Presumably, the fact that this line is setting _pending_locked_shards and other code expects _remaining_locked_shards to be set means that the code is doing the wrong thing under some circumstance that a test isn&apos;t catching.

Ah. Excellent point :).

The &quot;broken&quot; code is doing something conservatively wrong, in that it just won&apos;t drop the lock as early as it could. We forcibly drop the lock while exiting _run_tests to be safe, so it&apos;s a fairly harmless bug.

Testing that this is dropped as early as possible is kinda difficult. I&apos;ll have to think about this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429333</commentid>
    <comment_count>13</comment_count>
      <attachid>99016</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-28 18:11:22 -0700</bug_when>
    <thetext>Created attachment 99016
add unit tests to ensure locks are dropped promptly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429336</commentid>
    <comment_count>14</comment_count>
      <attachid>99016</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-28 18:12:47 -0700</bug_when>
    <thetext>Comment on attachment 99016
add unit tests to ensure locks are dropped promptly

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

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/manager_unittest.py:86
&gt; +    def test_http_locking(tester):

Note the non-standard &apos;tester&apos; name for the self, to avoid collisions with the nested class. This seems clunky but every other mechanism I could think of seemed clunkier. Suggestions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430932</commentid>
    <comment_count>15</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-30 19:11:35 -0700</bug_when>
    <thetext>Committed r90192: &lt;http://trac.webkit.org/changeset/90192&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431024</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-01 00:32:03 -0700</bug_when>
    <thetext>I rolled this patch out in http://trac.webkit.org/changeset/90209 and the bot healed, but I&apos;m slightly unsure whether those two events were related.  We can try re-landing this patch if you think the two events were coincidental.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432483</commentid>
    <comment_count>17</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-07-05 17:07:21 -0700</bug_when>
    <thetext>Committed r90417: &lt;http://trac.webkit.org/changeset/90417&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98107</attachid>
            <date>2011-06-21 20:07:53 -0700</date>
            <delta_ts>2011-06-21 20:09:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63112-20110621200752.patch</filename>
            <type>text/plain</type>
            <size>7304</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODkzNzMKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXIucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyLnB5CmluZGV4
IDQ4Yjg5MjVhNmUzZTIwZjU2YzJkMGE4YWZkNWNhM2RmZTNkMDIxMmUuLjliY2I1NDQzZGNiNzRk
OWQ0NTQwMjViMmM3NWQzZDlhMTJmNjA5MTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXIucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlci5weQpA
QCAtMjY0LDYgKzI2NCwxMCBAQCBjbGFzcyBNYW5hZ2VyOgogICAgICAgICBzZWxmLkxBWU9VVF9U
RVNUU19ESVJFQ1RPUlkgPSAiTGF5b3V0VGVzdHMiICsgc2VsZi5fZnMuc2VwCiAgICAgICAgIHNl
bGYuX2hhc19odHRwX2xvY2sgPSBGYWxzZQogCisgICAgICAgICMgVGhlc2UgYXJlIGxpc3RzIG9m
IHBlbmRpbmcgc2hhcmRzIChuYW1lZCBsaXN0cyBvZiB0ZXN0cykgdG8gcnVuLgorICAgICAgICBz
ZWxmLl9sb2NrZWRfc2hhcmRzID0gW10KKyAgICAgICAgc2VsZi5fdW5sb2NrZWRfc2hhcmRzID0g
W10KKwogICAgICAgICAjIGRpc2FibGUgd3NzIHNlcnZlci4gbmVlZCB0byBpbnN0YWxsIHB5T3Bl
blNTTCBvbiBidWlsZGJvdHMuCiAgICAgICAgICMgc2VsZi5fd2Vic29ja2V0X3NlY3VyZV9zZXJ2
ZXIgPSB3ZWJzb2NrZXRfc2VydmVyLlB5V2ViU29ja2V0KAogICAgICAgICAjICAgICAgICBvcHRp
b25zLnJlc3VsdHNfZGlyZWN0b3J5LCB1c2VfdGxzPVRydWUsIHBvcnQ9OTMyMykKQEAgLTU0MCwx
NSArNTQ0LDEyIEBAIGNsYXNzIE1hbmFnZXI6CiAgICAgICAgIGNvbmN1cnJlbmN5IGluc3RlYWQg
b2YgdHJ5aW5nIHRvIGRvIGFueSBzb3J0IG9mIHJlYWwgc2hhcmRpbmcuCiAKICAgICAgICAgUmV0
dXJuOgotICAgICAgICAgICAgQSBsaXN0IG9mIGxpc3RzIG9mIFRlc3RJbnB1dCBvYmplY3RzLgor
ICAgICAgICAgICAgVHdvIGxpc3RzIG9mIGxpc3RzIG9mIFRlc3RJbnB1dCBvYmplY3RzLiBUaGUg
Zmlyc3QgbGlzdCBzaG91bGQKKyAgICAgICAgICAgIG9ubHkgYmUgcnVuIHVuZGVyIHRoZSBzZXJ2
ZXIgbG9jaywgdGhlIHNlY29uZCBjYW4gYmUgcnVuIHdoZW5ldmVyLgogICAgICAgICAiIiIKLSAg
ICAgICAgIyBGSVhNRTogd2hlbiB3ZSBhZGRlZCBodHRwIGxvY2tpbmcsIHdlIGNoYW5nZWQgaG93
IHRoaXMgd29ya3Mgc3VjaAotICAgICAgICAjIHRoYXQgd2UgYWx3YXlzIGx1bXAgYWxsIG9mIHRo
ZSBIVFRQIHRocmVhZHMgaW50byBhIHNpbmdsZSBzaGFyZC4KLSAgICAgICAgIyBUaGF0IHdpbGwg
c2xvdyBkb3duIGV4cGVyaW1lbnRhbC1mdWxseS1wYXJhbGxlbCwgYnV0IGl0J3MgdW5jbGVhcgot
ICAgICAgICAjIHdoYXQgdGhlIGJlc3QgYWx0ZXJuYXRpdmUgaXMgY29tcGxldGVseSByZXZhbXBp
bmcgaG93IHdlIHRyYWNrCi0gICAgICAgICMgd2hlbiB0byBncmFiIHRoZSBsb2NrLgotCi0gICAg
ICAgIHRlc3RfbGlzdHMgPSBbXQorICAgICAgICAjIEZJWE1FOiBXZSBzdGlsbCBuZWVkIHRvIHN1
cHBvcnQgbXVsdGlwbGUgbG9ja2VkIHNoYXJkcy4KKyAgICAgICAgbG9ja2VkX3NoYXJkcyA9IFtd
CisgICAgICAgIHVubG9ja2VkX3NoYXJkcyA9IFtdCiAgICAgICAgIHRlc3RzX3RvX2h0dHBfbG9j
ayA9IFtdCiAgICAgICAgIGlmIG5vdCB1c2VfcmVhbF9zaGFyZHM6CiAgICAgICAgICAgICBmb3Ig
dGVzdF9maWxlIGluIHRlc3RfZmlsZXM6CkBAIC01NTYsNyArNTU3LDcgQEAgY2xhc3MgTWFuYWdl
cjoKICAgICAgICAgICAgICAgICBpZiBzZWxmLl90ZXN0X3JlcXVpcmVzX2xvY2sodGVzdF9maWxl
KToKICAgICAgICAgICAgICAgICAgICAgdGVzdHNfdG9faHR0cF9sb2NrLmFwcGVuZCh0ZXN0X2lu
cHV0KQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHRlc3RfbGlz
dHMuYXBwZW5kKCgiLiIsIFt0ZXN0X2lucHV0XSkpCisgICAgICAgICAgICAgICAgICAgIHVubG9j
a2VkX3NoYXJkcy5hcHBlbmQoKCIuIiwgW3Rlc3RfaW5wdXRdKSkKICAgICAgICAgZWxzZToKICAg
ICAgICAgICAgIHRlc3RzX2J5X2RpciA9IHt9CiAgICAgICAgICAgICBmb3IgdGVzdF9maWxlIGlu
IHRlc3RfZmlsZXM6CkBAIC01NzAsMTggKzU3MSwxNSBAQCBjbGFzcyBNYW5hZ2VyOgogICAgICAg
ICAgICAgZm9yIGRpcmVjdG9yeSBpbiB0ZXN0c19ieV9kaXI6CiAgICAgICAgICAgICAgICAgdGVz
dF9saXN0ID0gdGVzdHNfYnlfZGlyW2RpcmVjdG9yeV0KICAgICAgICAgICAgICAgICB0ZXN0X2xp
c3RfdHVwbGUgPSAoZGlyZWN0b3J5LCB0ZXN0X2xpc3QpCi0gICAgICAgICAgICAgICAgdGVzdF9s
aXN0cy5hcHBlbmQodGVzdF9saXN0X3R1cGxlKQorICAgICAgICAgICAgICAgIHVubG9ja2VkX3No
YXJkcy5hcHBlbmQodGVzdF9saXN0X3R1cGxlKQogCiAgICAgICAgICAgICAjIFNvcnQgdGhlIHNo
YXJkcyBieSBkaXJlY3RvcnkgbmFtZS4KLSAgICAgICAgICAgIHRlc3RfbGlzdHMuc29ydChsYW1i
ZGEgYSwgYjogY21wKGFbMF0sIGJbMF0pKQorICAgICAgICAgICAgdW5sb2NrZWRfc2hhcmRzLnNv
cnQobGFtYmRhIGEsIGI6IGNtcChhWzBdLCBiWzBdKSkKIAotICAgICAgICAjIFB1dCB0aGUgaHR0
cCB0ZXN0cyBmaXJzdC4gVGhlcmUgYXJlIG9ubHkgYSBjb3VwbGUgaHVuZHJlZCBvZiB0aGVtLAot
ICAgICAgICAjIGJ1dCBlYWNoIGh0dHAgdGVzdCB0YWtlcyBhIHZlcnkgbG9uZyB0aW1lIHRvIHJ1
biwgc28gc29ydGluZyBieSB0aGUKLSAgICAgICAgIyBudW1iZXIgb2YgdGVzdHMgZG9lc24ndCBh
Y2N1cmF0ZWx5IGNhcHR1cmUgaG93IGxvbmcgdGhleSB0YWtlIHRvIHJ1bi4KICAgICAgICAgaWYg
dGVzdHNfdG9faHR0cF9sb2NrOgotICAgICAgICAgICAgdGVzdF9saXN0cy5pbnNlcnQoMCwgKCJ0
ZXN0c190b19odHRwX2xvY2siLCB0ZXN0c190b19odHRwX2xvY2spKQorICAgICAgICAgICAgbG9j
a2VkX3NoYXJkcy5hcHBlbmQoKCJ0ZXN0c190b19odHRwX2xvY2siLCB0ZXN0c190b19odHRwX2xv
Y2spKQogCi0gICAgICAgIHJldHVybiB0ZXN0X2xpc3RzCisgICAgICAgIHJldHVybiAobG9ja2Vk
X3NoYXJkcywgdW5sb2NrZWRfc2hhcmRzKQogCiAgICAgZGVmIF9jb250YWluc190ZXN0cyhzZWxm
LCBzdWJkaXIpOgogICAgICAgICBmb3IgdGVzdF9maWxlIGluIHNlbGYuX3Rlc3RfZmlsZXM6CkBA
IC02MjYsMTUgKzYyNCwxNSBAQCBjbGFzcyBNYW5hZ2VyOgogICAgICAgICB0aHJlYWRfdGltaW5n
cyA9IFtdCiAKICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1NoYXJkaW5nIHRl
c3RzIC4uLicpCi0gICAgICAgIHRlc3RfbGlzdHMgPSBzZWxmLl9zaGFyZF90ZXN0cyhmaWxlX2xp
c3QsCisgICAgICAgIHNlbGYuX2xvY2tlZF9zaGFyZHMsIHNlbGYuX3VubG9ja2VkX3NoYXJkcyA9
IHNlbGYuX3NoYXJkX3Rlc3RzKGZpbGVfbGlzdCwKICAgICAgICAgICAgIGludChzZWxmLl9vcHRp
b25zLmNoaWxkX3Byb2Nlc3NlcykgPiAxIGFuZCBub3Qgc2VsZi5fb3B0aW9ucy5leHBlcmltZW50
YWxfZnVsbHlfcGFyYWxsZWwpCiAKLSAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhIGxlc3MgaGFy
ZC1jb2RlZCB3YXkgb2YgZmlndXJpbmcgb3V0IGlmIHdlIG5lZWQgdG8KLSAgICAgICAgIyBzdGFy
dCB0aGUgc2VydmVycy4KLSAgICAgICAgaWYgdGVzdF9saXN0c1swXVswXSA9PSAndGVzdHNfdG9f
aHR0cF9sb2NrJzoKKyAgICAgICAgaWYgc2VsZi5fbG9ja2VkX3NoYXJkczoKICAgICAgICAgICAg
IHNlbGYuc3RhcnRfc2VydmVyc193aXRoX2xvY2soKQogCi0gICAgICAgIG51bV93b3JrZXJzID0g
c2VsZi5fbnVtX3dvcmtlcnMobGVuKHRlc3RfbGlzdHMpKQorICAgICAgICBhbGxfc2hhcmRzID0g
c2VsZi5fbG9ja2VkX3NoYXJkcyArIHNlbGYuX3VubG9ja2VkX3NoYXJkcworCisgICAgICAgIG51
bV93b3JrZXJzID0gc2VsZi5fbnVtX3dvcmtlcnMobGVuKGFsbF9zaGFyZHMpKQogICAgICAgICBt
YW5hZ2VyX2Nvbm5lY3Rpb24gPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuZ2V0KHNlbGYuX3BvcnQs
IHNlbGYuX29wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZiwgd29ya2VyLldvcmtlcikKIApAQCAtNjU2LDggKzY1NCw4IEBA
IGNsYXNzIE1hbmFnZXI6CiAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKIAogICAgICAgICBz
ZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgiU3RhcnRpbmcgdGVzdGluZyAuLi4iKQotICAgICAg
ICBmb3IgdGVzdF9saXN0IGluIHRlc3RfbGlzdHM6Ci0gICAgICAgICAgICBtYW5hZ2VyX2Nvbm5l
Y3Rpb24ucG9zdF9tZXNzYWdlKCd0ZXN0X2xpc3QnLCB0ZXN0X2xpc3RbMF0sIHRlc3RfbGlzdFsx
XSkKKyAgICAgICAgZm9yIHNoYXJkIGluIGFsbF9zaGFyZHM6CisgICAgICAgICAgICBtYW5hZ2Vy
X2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCd0ZXN0X2xpc3QnLCBzaGFyZFswXSwgc2hhcmRbMV0p
CiAKICAgICAgICAgIyBXZSBwb3N0IG9uZSAnc3RvcCcgbWVzc2FnZSBmb3IgZWFjaCB3b3JrZXIu
IEJlY2F1c2UgdGhlIHN0b3AgbWVzc2FnZQogICAgICAgICAjIGFyZSBzZW50IGFmdGVyIGFsbCBv
ZiB0aGUgdGVzdHMsIGFuZCBiZWNhdXNlIGVhY2ggd29ya2VyIHdpbGwgc3RvcApAQCAtMTM1NCw2
ICsxMzUyLDI1IEBAIGNsYXNzIE1hbmFnZXI6CiAgICAgZGVmIGhhbmRsZV9maW5pc2hlZF9saXN0
KHNlbGYsIHNvdXJjZSwgbGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSk6CiAgICAg
ICAgIHNlbGYuX2dyb3VwX3N0YXRzW2xpc3RfbmFtZV0gPSAobnVtX3Rlc3RzLCBlbGFwc2VkX3Rp
bWUpCiAKKyAgICAgICAgZGVmIGZpbmQobmFtZSwgdGVzdF9saXN0cyk6CisgICAgICAgICAgICBp
ID0gMAorICAgICAgICAgICAgd2hpbGUgaSA8IGxlbih0ZXN0X2xpc3RzKToKKyAgICAgICAgICAg
ICAgICBpZiB0ZXN0X2xpc3RzW2ldWzBdID09IG5hbWU6CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBpCisgICAgICAgICAgICAgICAgaSArPSAxCisKKyAgICAgICAgICAgIHJldHVybiAtMQor
CisgICAgICAgIGluZGV4ID0gZmluZChsaXN0X25hbWUsIHNlbGYuX2xvY2tlZF9zaGFyZHMpCisg
ICAgICAgIGlmIGluZGV4ID49IDA6CisgICAgICAgICAgICBzZWxmLl9sb2NrZWRfc2hhcmRzLnBv
cChpbmRleCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9sb2NrZWRfc2hhcmRzOgorICAgICAg
ICAgICAgICAgIHNlbGYuc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCisgICAgICAgICAgICByZXR1
cm4KKworICAgICAgICBpbmRleCA9IGZpbmQobGlzdF9uYW1lLCBzZWxmLl91bmxvY2tlZF9zaGFy
ZHMpCisgICAgICAgIHNlbGYuX3VubG9ja2VkX3NoYXJkcy5wb3AoaW5kZXgpCisKICAgICBkZWYg
aGFuZGxlX2ZpbmlzaGVkX3Rlc3Qoc2VsZiwgc291cmNlLCByZXN1bHQsIGVsYXBzZWRfdGltZSk6
CiAgICAgICAgIHdvcmtlcl9zdGF0ZSA9IHNlbGYuX3dvcmtlcl9zdGF0ZXNbc291cmNlXQogICAg
ICAgICB3b3JrZXJfc3RhdGUubmV4dF90aW1lb3V0ID0gTm9uZQpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl91bml0
dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL21hbmFnZXJfdW5pdHRlc3QucHkKaW5kZXggNGQxMTQyNjM0Njc2OTIxMmM2MTc2NjYyYTFm
YzUzYjkxYjg3M2MwMC4uOWMxYWY4ODU5YTBiZTZkMzFkODU0ODI0Njk4YTQ2N2RhMGM3YWU2OSAx
MDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvbWFuYWdlcl91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3VuaXR0ZXN0LnB5CkBAIC03MCwxNCAr
NzAsMTMgQEAgY2xhc3MgTWFuYWdlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAg
ICdMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3N1cHBvcnRlZC14bWwtY29u
dGVudC10eXBlcy5odG1sJywKICAgICAgICAgXSkKIAotICAgICAgICAjIEZJWE1FOiBJZGVhbGx5
IHRoZSBIVFRQIHRlc3RzIGRvbid0IGhhdmUgdG8gYWxsIGJlIGluIG9uZSBzaGFyZC4KLSAgICAg
ICAgc2luZ2xlX3RocmVhZF9yZXN1bHRzID0gbWFuYWdlci5fc2hhcmRfdGVzdHModGVzdF9saXN0
LCBGYWxzZSkKLSAgICAgICAgbXVsdGlfdGhyZWFkX3Jlc3VsdHMgPSBtYW5hZ2VyLl9zaGFyZF90
ZXN0cyh0ZXN0X2xpc3QsIFRydWUpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidGVzdHNf
dG9faHR0cF9sb2NrIiwgc2luZ2xlX3RocmVhZF9yZXN1bHRzWzBdWzBdKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGV4cGVjdGVkX3Rlc3RzX3RvX2h0dHBfbG9jaywgc2V0KHNpbmdsZV90aHJl
YWRfcmVzdWx0c1swXVsxXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInRlc3RzX3RvX2h0
dHBfbG9jayIsIG11bHRpX3RocmVhZF9yZXN1bHRzWzBdWzBdKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGV4cGVjdGVkX3Rlc3RzX3RvX2h0dHBfbG9jaywgc2V0KG11bHRpX3RocmVhZF9yZXN1
bHRzWzBdWzFdKSkKKyAgICAgICAgc2luZ2xlX2xvY2tlZCwgc2luZ2xlX3VubG9ja2VkID0gbWFu
YWdlci5fc2hhcmRfdGVzdHModGVzdF9saXN0LCBGYWxzZSkKKyAgICAgICAgbXVsdGlfbG9ja2Vk
LCBtdWx0aV91bmxvY2tlZCA9IG1hbmFnZXIuX3NoYXJkX3Rlc3RzKHRlc3RfbGlzdCwgVHJ1ZSkK
KworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0ZXN0c190b19odHRwX2xvY2siLCBzaW5nbGVf
bG9ja2VkWzBdWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3Rlc3RzX3Rv
X2h0dHBfbG9jaywgc2V0KHNpbmdsZV9sb2NrZWRbMF1bMV0pKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCJ0ZXN0c190b19odHRwX2xvY2siLCBtdWx0aV9sb2NrZWRbMF1bMF0pCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdGVzdHNfdG9faHR0cF9sb2NrLCBzZXQobXVsdGlf
bG9ja2VkWzBdWzFdKSkKIAogCiBjbGFzcyBOYXR1cmFsQ29tcGFyZVRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98108</attachid>
            <date>2011-06-21 20:09:26 -0700</date>
            <delta_ts>2011-06-22 18:35:35 -0700</delta_ts>
            <desc>fix ChangeLog</desc>
            <filename>bug-63112-20110621200925.patch</filename>
            <type>text/plain</type>
            <size>8189</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODkzNzMKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA1N2I0Zjc2ZTQ1MWQ0ZGNkY2Y3Y2I2ZmMxNmY0NDIzMTVi
MzVmNTAyLi5iZTFjN2ZiNGU1MGM4MDI3NTVkYTMyM2M2MmU5Y2RlYjc2ZDVhNjY3IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjAg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBucnd0
OiBtYWtlIHNoYXJkaW5nIHRlc3RzIG5lZWRpbmcgbG9ja3MgbGVzcyBoYXJkLWNvZGVkCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzExMgorCisgICAg
ICAgIFRoaXMgY2hhbmdlIGFsc28gY2hhbmdlcyB0aGUgbWFuYWdlciBsb2dpYyBzbyB0aGF0IGl0
IHdpbGwKKyAgICAgICAgZHJvcCB0aGUgc2VydmVyIGxvY2sgYXMgc29vbiBhcyBhbGwgb2YgdGhl
IHNoYXJkcyByZXF1aXJpbmcKKyAgICAgICAgdGhlIGxvY2sgaGF2ZSBjb21wbGV0ZWQuCisKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5h
Z2VyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL21hbmFnZXJfdW5pdHRlc3QucHk6CisKKzIwMTEtMDYtMjEgIERpcmsgUHJhbmtlICA8
ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKICAgICAgICAgbnJ3dDogbW92ZSBodHRwIGxvY2tpbmcgY29kZSBpbnRvIG1hbmFnZXIK
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzMTAzCiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL21hbmFnZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9tYW5hZ2VyLnB5CmluZGV4IDQ4Yjg5MjVhNmUzZTIwZjU2YzJkMGE4YWZk
NWNhM2RmZTNkMDIxMmUuLjliY2I1NDQzZGNiNzRkOWQ0NTQwMjViMmM3NWQzZDlhMTJmNjA5MTcg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL21hbmFnZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlci5weQpAQCAtMjY0LDYgKzI2NCwxMCBAQCBjbGFzcyBN
YW5hZ2VyOgogICAgICAgICBzZWxmLkxBWU9VVF9URVNUU19ESVJFQ1RPUlkgPSAiTGF5b3V0VGVz
dHMiICsgc2VsZi5fZnMuc2VwCiAgICAgICAgIHNlbGYuX2hhc19odHRwX2xvY2sgPSBGYWxzZQog
CisgICAgICAgICMgVGhlc2UgYXJlIGxpc3RzIG9mIHBlbmRpbmcgc2hhcmRzIChuYW1lZCBsaXN0
cyBvZiB0ZXN0cykgdG8gcnVuLgorICAgICAgICBzZWxmLl9sb2NrZWRfc2hhcmRzID0gW10KKyAg
ICAgICAgc2VsZi5fdW5sb2NrZWRfc2hhcmRzID0gW10KKwogICAgICAgICAjIGRpc2FibGUgd3Nz
IHNlcnZlci4gbmVlZCB0byBpbnN0YWxsIHB5T3BlblNTTCBvbiBidWlsZGJvdHMuCiAgICAgICAg
ICMgc2VsZi5fd2Vic29ja2V0X3NlY3VyZV9zZXJ2ZXIgPSB3ZWJzb2NrZXRfc2VydmVyLlB5V2Vi
U29ja2V0KAogICAgICAgICAjICAgICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LCB1c2Vf
dGxzPVRydWUsIHBvcnQ9OTMyMykKQEAgLTU0MCwxNSArNTQ0LDEyIEBAIGNsYXNzIE1hbmFnZXI6
CiAgICAgICAgIGNvbmN1cnJlbmN5IGluc3RlYWQgb2YgdHJ5aW5nIHRvIGRvIGFueSBzb3J0IG9m
IHJlYWwgc2hhcmRpbmcuCiAKICAgICAgICAgUmV0dXJuOgotICAgICAgICAgICAgQSBsaXN0IG9m
IGxpc3RzIG9mIFRlc3RJbnB1dCBvYmplY3RzLgorICAgICAgICAgICAgVHdvIGxpc3RzIG9mIGxp
c3RzIG9mIFRlc3RJbnB1dCBvYmplY3RzLiBUaGUgZmlyc3QgbGlzdCBzaG91bGQKKyAgICAgICAg
ICAgIG9ubHkgYmUgcnVuIHVuZGVyIHRoZSBzZXJ2ZXIgbG9jaywgdGhlIHNlY29uZCBjYW4gYmUg
cnVuIHdoZW5ldmVyLgogICAgICAgICAiIiIKLSAgICAgICAgIyBGSVhNRTogd2hlbiB3ZSBhZGRl
ZCBodHRwIGxvY2tpbmcsIHdlIGNoYW5nZWQgaG93IHRoaXMgd29ya3Mgc3VjaAotICAgICAgICAj
IHRoYXQgd2UgYWx3YXlzIGx1bXAgYWxsIG9mIHRoZSBIVFRQIHRocmVhZHMgaW50byBhIHNpbmds
ZSBzaGFyZC4KLSAgICAgICAgIyBUaGF0IHdpbGwgc2xvdyBkb3duIGV4cGVyaW1lbnRhbC1mdWxs
eS1wYXJhbGxlbCwgYnV0IGl0J3MgdW5jbGVhcgotICAgICAgICAjIHdoYXQgdGhlIGJlc3QgYWx0
ZXJuYXRpdmUgaXMgY29tcGxldGVseSByZXZhbXBpbmcgaG93IHdlIHRyYWNrCi0gICAgICAgICMg
d2hlbiB0byBncmFiIHRoZSBsb2NrLgotCi0gICAgICAgIHRlc3RfbGlzdHMgPSBbXQorICAgICAg
ICAjIEZJWE1FOiBXZSBzdGlsbCBuZWVkIHRvIHN1cHBvcnQgbXVsdGlwbGUgbG9ja2VkIHNoYXJk
cy4KKyAgICAgICAgbG9ja2VkX3NoYXJkcyA9IFtdCisgICAgICAgIHVubG9ja2VkX3NoYXJkcyA9
IFtdCiAgICAgICAgIHRlc3RzX3RvX2h0dHBfbG9jayA9IFtdCiAgICAgICAgIGlmIG5vdCB1c2Vf
cmVhbF9zaGFyZHM6CiAgICAgICAgICAgICBmb3IgdGVzdF9maWxlIGluIHRlc3RfZmlsZXM6CkBA
IC01NTYsNyArNTU3LDcgQEAgY2xhc3MgTWFuYWdlcjoKICAgICAgICAgICAgICAgICBpZiBzZWxm
Ll90ZXN0X3JlcXVpcmVzX2xvY2sodGVzdF9maWxlKToKICAgICAgICAgICAgICAgICAgICAgdGVz
dHNfdG9faHR0cF9sb2NrLmFwcGVuZCh0ZXN0X2lucHV0KQogICAgICAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgICAgIHRlc3RfbGlzdHMuYXBwZW5kKCgiLiIsIFt0ZXN0X2lucHV0
XSkpCisgICAgICAgICAgICAgICAgICAgIHVubG9ja2VkX3NoYXJkcy5hcHBlbmQoKCIuIiwgW3Rl
c3RfaW5wdXRdKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRlc3RzX2J5X2RpciA9IHt9
CiAgICAgICAgICAgICBmb3IgdGVzdF9maWxlIGluIHRlc3RfZmlsZXM6CkBAIC01NzAsMTggKzU3
MSwxNSBAQCBjbGFzcyBNYW5hZ2VyOgogICAgICAgICAgICAgZm9yIGRpcmVjdG9yeSBpbiB0ZXN0
c19ieV9kaXI6CiAgICAgICAgICAgICAgICAgdGVzdF9saXN0ID0gdGVzdHNfYnlfZGlyW2RpcmVj
dG9yeV0KICAgICAgICAgICAgICAgICB0ZXN0X2xpc3RfdHVwbGUgPSAoZGlyZWN0b3J5LCB0ZXN0
X2xpc3QpCi0gICAgICAgICAgICAgICAgdGVzdF9saXN0cy5hcHBlbmQodGVzdF9saXN0X3R1cGxl
KQorICAgICAgICAgICAgICAgIHVubG9ja2VkX3NoYXJkcy5hcHBlbmQodGVzdF9saXN0X3R1cGxl
KQogCiAgICAgICAgICAgICAjIFNvcnQgdGhlIHNoYXJkcyBieSBkaXJlY3RvcnkgbmFtZS4KLSAg
ICAgICAgICAgIHRlc3RfbGlzdHMuc29ydChsYW1iZGEgYSwgYjogY21wKGFbMF0sIGJbMF0pKQor
ICAgICAgICAgICAgdW5sb2NrZWRfc2hhcmRzLnNvcnQobGFtYmRhIGEsIGI6IGNtcChhWzBdLCBi
WzBdKSkKIAotICAgICAgICAjIFB1dCB0aGUgaHR0cCB0ZXN0cyBmaXJzdC4gVGhlcmUgYXJlIG9u
bHkgYSBjb3VwbGUgaHVuZHJlZCBvZiB0aGVtLAotICAgICAgICAjIGJ1dCBlYWNoIGh0dHAgdGVz
dCB0YWtlcyBhIHZlcnkgbG9uZyB0aW1lIHRvIHJ1biwgc28gc29ydGluZyBieSB0aGUKLSAgICAg
ICAgIyBudW1iZXIgb2YgdGVzdHMgZG9lc24ndCBhY2N1cmF0ZWx5IGNhcHR1cmUgaG93IGxvbmcg
dGhleSB0YWtlIHRvIHJ1bi4KICAgICAgICAgaWYgdGVzdHNfdG9faHR0cF9sb2NrOgotICAgICAg
ICAgICAgdGVzdF9saXN0cy5pbnNlcnQoMCwgKCJ0ZXN0c190b19odHRwX2xvY2siLCB0ZXN0c190
b19odHRwX2xvY2spKQorICAgICAgICAgICAgbG9ja2VkX3NoYXJkcy5hcHBlbmQoKCJ0ZXN0c190
b19odHRwX2xvY2siLCB0ZXN0c190b19odHRwX2xvY2spKQogCi0gICAgICAgIHJldHVybiB0ZXN0
X2xpc3RzCisgICAgICAgIHJldHVybiAobG9ja2VkX3NoYXJkcywgdW5sb2NrZWRfc2hhcmRzKQog
CiAgICAgZGVmIF9jb250YWluc190ZXN0cyhzZWxmLCBzdWJkaXIpOgogICAgICAgICBmb3IgdGVz
dF9maWxlIGluIHNlbGYuX3Rlc3RfZmlsZXM6CkBAIC02MjYsMTUgKzYyNCwxNSBAQCBjbGFzcyBN
YW5hZ2VyOgogICAgICAgICB0aHJlYWRfdGltaW5ncyA9IFtdCiAKICAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF91cGRhdGUoJ1NoYXJkaW5nIHRlc3RzIC4uLicpCi0gICAgICAgIHRlc3RfbGlz
dHMgPSBzZWxmLl9zaGFyZF90ZXN0cyhmaWxlX2xpc3QsCisgICAgICAgIHNlbGYuX2xvY2tlZF9z
aGFyZHMsIHNlbGYuX3VubG9ja2VkX3NoYXJkcyA9IHNlbGYuX3NoYXJkX3Rlc3RzKGZpbGVfbGlz
dCwKICAgICAgICAgICAgIGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykgPiAxIGFu
ZCBub3Qgc2VsZi5fb3B0aW9ucy5leHBlcmltZW50YWxfZnVsbHlfcGFyYWxsZWwpCiAKLSAgICAg
ICAgIyBGSVhNRTogd2UgbmVlZCBhIGxlc3MgaGFyZC1jb2RlZCB3YXkgb2YgZmlndXJpbmcgb3V0
IGlmIHdlIG5lZWQgdG8KLSAgICAgICAgIyBzdGFydCB0aGUgc2VydmVycy4KLSAgICAgICAgaWYg
dGVzdF9saXN0c1swXVswXSA9PSAndGVzdHNfdG9faHR0cF9sb2NrJzoKKyAgICAgICAgaWYgc2Vs
Zi5fbG9ja2VkX3NoYXJkczoKICAgICAgICAgICAgIHNlbGYuc3RhcnRfc2VydmVyc193aXRoX2xv
Y2soKQogCi0gICAgICAgIG51bV93b3JrZXJzID0gc2VsZi5fbnVtX3dvcmtlcnMobGVuKHRlc3Rf
bGlzdHMpKQorICAgICAgICBhbGxfc2hhcmRzID0gc2VsZi5fbG9ja2VkX3NoYXJkcyArIHNlbGYu
X3VubG9ja2VkX3NoYXJkcworCisgICAgICAgIG51bV93b3JrZXJzID0gc2VsZi5fbnVtX3dvcmtl
cnMobGVuKGFsbF9zaGFyZHMpKQogICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24gPSBtYW5hZ2Vy
X3dvcmtlcl9icm9rZXIuZ2V0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgd29ya2Vy
LldvcmtlcikKIApAQCAtNjU2LDggKzY1NCw4IEBAIGNsYXNzIE1hbmFnZXI6CiAgICAgICAgICAg
ICB0aW1lLnNsZWVwKDAuMSkKIAogICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgi
U3RhcnRpbmcgdGVzdGluZyAuLi4iKQotICAgICAgICBmb3IgdGVzdF9saXN0IGluIHRlc3RfbGlz
dHM6Ci0gICAgICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCd0ZXN0X2xp
c3QnLCB0ZXN0X2xpc3RbMF0sIHRlc3RfbGlzdFsxXSkKKyAgICAgICAgZm9yIHNoYXJkIGluIGFs
bF9zaGFyZHM6CisgICAgICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCd0
ZXN0X2xpc3QnLCBzaGFyZFswXSwgc2hhcmRbMV0pCiAKICAgICAgICAgIyBXZSBwb3N0IG9uZSAn
c3RvcCcgbWVzc2FnZSBmb3IgZWFjaCB3b3JrZXIuIEJlY2F1c2UgdGhlIHN0b3AgbWVzc2FnZQog
ICAgICAgICAjIGFyZSBzZW50IGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMsIGFuZCBiZWNhdXNlIGVh
Y2ggd29ya2VyIHdpbGwgc3RvcApAQCAtMTM1NCw2ICsxMzUyLDI1IEBAIGNsYXNzIE1hbmFnZXI6
CiAgICAgZGVmIGhhbmRsZV9maW5pc2hlZF9saXN0KHNlbGYsIHNvdXJjZSwgbGlzdF9uYW1lLCBu
dW1fdGVzdHMsIGVsYXBzZWRfdGltZSk6CiAgICAgICAgIHNlbGYuX2dyb3VwX3N0YXRzW2xpc3Rf
bmFtZV0gPSAobnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpCiAKKyAgICAgICAgZGVmIGZpbmQobmFt
ZSwgdGVzdF9saXN0cyk6CisgICAgICAgICAgICBpID0gMAorICAgICAgICAgICAgd2hpbGUgaSA8
IGxlbih0ZXN0X2xpc3RzKToKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X2xpc3RzW2ldWzBdID09
IG5hbWU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpCisgICAgICAgICAgICAgICAgaSAr
PSAxCisKKyAgICAgICAgICAgIHJldHVybiAtMQorCisgICAgICAgIGluZGV4ID0gZmluZChsaXN0
X25hbWUsIHNlbGYuX2xvY2tlZF9zaGFyZHMpCisgICAgICAgIGlmIGluZGV4ID49IDA6CisgICAg
ICAgICAgICBzZWxmLl9sb2NrZWRfc2hhcmRzLnBvcChpbmRleCkKKyAgICAgICAgICAgIGlmIG5v
dCBzZWxmLl9sb2NrZWRfc2hhcmRzOgorICAgICAgICAgICAgICAgIHNlbGYuc3RvcF9zZXJ2ZXJz
X3dpdGhfbG9jaygpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpbmRleCA9IGZpbmQo
bGlzdF9uYW1lLCBzZWxmLl91bmxvY2tlZF9zaGFyZHMpCisgICAgICAgIHNlbGYuX3VubG9ja2Vk
X3NoYXJkcy5wb3AoaW5kZXgpCisKICAgICBkZWYgaGFuZGxlX2ZpbmlzaGVkX3Rlc3Qoc2VsZiwg
c291cmNlLCByZXN1bHQsIGVsYXBzZWRfdGltZSk6CiAgICAgICAgIHdvcmtlcl9zdGF0ZSA9IHNl
bGYuX3dvcmtlcl9zdGF0ZXNbc291cmNlXQogICAgICAgICB3b3JrZXJfc3RhdGUubmV4dF90aW1l
b3V0ID0gTm9uZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfdW5pdHRlc3QucHkKaW5k
ZXggNGQxMTQyNjM0Njc2OTIxMmM2MTc2NjYyYTFmYzUzYjkxYjg3M2MwMC4uOWMxYWY4ODU5YTBi
ZTZkMzFkODU0ODI0Njk4YTQ2N2RhMGM3YWU2OSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl91bml0dGVzdC5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9t
YW5hZ2VyX3VuaXR0ZXN0LnB5CkBAIC03MCwxNCArNzAsMTMgQEAgY2xhc3MgTWFuYWdlclRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICdMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3ht
bGh0dHByZXF1ZXN0L3N1cHBvcnRlZC14bWwtY29udGVudC10eXBlcy5odG1sJywKICAgICAgICAg
XSkKIAotICAgICAgICAjIEZJWE1FOiBJZGVhbGx5IHRoZSBIVFRQIHRlc3RzIGRvbid0IGhhdmUg
dG8gYWxsIGJlIGluIG9uZSBzaGFyZC4KLSAgICAgICAgc2luZ2xlX3RocmVhZF9yZXN1bHRzID0g
bWFuYWdlci5fc2hhcmRfdGVzdHModGVzdF9saXN0LCBGYWxzZSkKLSAgICAgICAgbXVsdGlfdGhy
ZWFkX3Jlc3VsdHMgPSBtYW5hZ2VyLl9zaGFyZF90ZXN0cyh0ZXN0X2xpc3QsIFRydWUpCi0KLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidGVzdHNfdG9faHR0cF9sb2NrIiwgc2luZ2xlX3RocmVh
ZF9yZXN1bHRzWzBdWzBdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3Rlc3Rz
X3RvX2h0dHBfbG9jaywgc2V0KHNpbmdsZV90aHJlYWRfcmVzdWx0c1swXVsxXSkpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoInRlc3RzX3RvX2h0dHBfbG9jayIsIG11bHRpX3RocmVhZF9yZXN1
bHRzWzBdWzBdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3Rlc3RzX3RvX2h0
dHBfbG9jaywgc2V0KG11bHRpX3RocmVhZF9yZXN1bHRzWzBdWzFdKSkKKyAgICAgICAgc2luZ2xl
X2xvY2tlZCwgc2luZ2xlX3VubG9ja2VkID0gbWFuYWdlci5fc2hhcmRfdGVzdHModGVzdF9saXN0
LCBGYWxzZSkKKyAgICAgICAgbXVsdGlfbG9ja2VkLCBtdWx0aV91bmxvY2tlZCA9IG1hbmFnZXIu
X3NoYXJkX3Rlc3RzKHRlc3RfbGlzdCwgVHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCJ0ZXN0c190b19odHRwX2xvY2siLCBzaW5nbGVfbG9ja2VkWzBdWzBdKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGV4cGVjdGVkX3Rlc3RzX3RvX2h0dHBfbG9jaywgc2V0KHNpbmdsZV9sb2Nr
ZWRbMF1bMV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0ZXN0c190b19odHRwX2xvY2si
LCBtdWx0aV9sb2NrZWRbMF1bMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRf
dGVzdHNfdG9faHR0cF9sb2NrLCBzZXQobXVsdGlfbG9ja2VkWzBdWzFdKSkKIAogCiBjbGFzcyBO
YXR1cmFsQ29tcGFyZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98287</attachid>
            <date>2011-06-22 18:35:38 -0700</date>
            <delta_ts>2011-06-22 20:21:38 -0700</delta_ts>
            <desc>stop tracking unlocked shards, add better comments about the lock strategy, other cleanup from review feedback</desc>
            <filename>bug-63112-20110622183537.patch</filename>
            <type>text/plain</type>
            <size>13499</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODkzNzMKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkYmEyNWY0NGRlYzhhNzhiNzg0MGExYTM5M2YwOWNkN2U5
MTcxY2I1Li5iZTFjN2ZiNGU1MGM4MDI3NTVkYTMyM2M2MmU5Y2RlYjc2ZDVhNjY3IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMTEtMDYtMjEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbnJ3dDogbWFrZSBz
aGFyZGluZyB0ZXN0cyBuZWVkaW5nIGxvY2tzIGxlc3MgaGFyZC1jb2RlZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjMxMTIKKworICAgICAgICBUaGlz
IGNoYW5nZSBhbHNvIGNoYW5nZXMgdGhlIG1hbmFnZXIgbG9naWMgc28gdGhhdCBpdCB3aWxsCisg
ICAgICAgIGRyb3AgdGhlIHNlcnZlciBsb2NrIGFzIHNvb24gYXMgYWxsIG9mIHRoZSBzaGFyZHMg
cmVxdWlyaW5nCisgICAgICAgIHRoZSBsb2NrIGhhdmUgY29tcGxldGVkLgorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlci5weToK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9t
YW5hZ2VyX3VuaXR0ZXN0LnB5OgorCisyMDExLTA2LTIxICBEaXJrIFByYW5rZSAgPGRwcmFua2VA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIG5yd3Q6IG1vdmUgaHR0cCBsb2NraW5nIGNvZGUgaW50byBtYW5hZ2VyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzEwMworCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlci5w
eToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS93b3JrZXIucHk6CisKIDIwMTEtMDYtMjEgIERtaXRyeSBMb21vdiAgPGRzbG9tb3ZAZ29vZ2xl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlci5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21h
bmFnZXIucHkKaW5kZXggOTBmYTA1ODBlMWNhMDM0MzkyMzcxNDgzYzRiZjcwZmMzYWZlNGRlNS4u
ZTU2Y2E1YWFmM2VhOWQ4NGJhMTI5ZGY3NjQyMmI3NDUwZDdmODVlMiAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlci5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9tYW5hZ2VyLnB5CkBAIC0yNjIsNyArMjYyLDkgQEAgY2xhc3MgTWFuYWdlcjoKICAgICAgICAg
c2VsZi5IVFRQX1NVQkRJUiA9IHNlbGYuX2ZzLmpvaW4oJycsICdodHRwJywgJycpCiAgICAgICAg
IHNlbGYuV0VCU09DS0VUX1NVQkRJUiA9IHNlbGYuX2ZzLmpvaW4oJycsICd3ZWJzb2NrZXQnLCAn
JykKICAgICAgICAgc2VsZi5MQVlPVVRfVEVTVFNfRElSRUNUT1JZID0gIkxheW91dFRlc3RzIiAr
IHNlbGYuX2ZzLnNlcAorICAgICAgICBzZWxmLl9oYXNfaHR0cF9sb2NrID0gRmFsc2UKIAorICAg
ICAgICBzZWxmLl9yZW1haW5pbmdfbG9ja2VkX3NoYXJkcyA9IFtdCiAKICAgICAgICAgIyBkaXNh
YmxlIHdzcyBzZXJ2ZXIuIG5lZWQgdG8gaW5zdGFsbCBweU9wZW5TU0wgb24gYnVpbGRib3RzLgog
ICAgICAgICAjIHNlbGYuX3dlYnNvY2tldF9zZWN1cmVfc2VydmVyID0gd2Vic29ja2V0X3NlcnZl
ci5QeVdlYlNvY2tldCgKQEAgLTI4Miw3ICsyODQsNiBAQCBjbGFzcyBNYW5hZ2VyOgogICAgICAg
ICAjIFRoaXMgbWFwcyB3b3JrZXIgbmFtZXMgdG8gdGhlIHN0YXRlIHdlIGFyZSB0cmFja2luZyBm
b3IgZWFjaCBvZiB0aGVtLgogICAgICAgICBzZWxmLl93b3JrZXJfc3RhdGVzID0ge30KIAotCiAg
ICAgZGVmIGNvbGxlY3RfdGVzdHMoc2VsZiwgYXJncywgbGFzdF91bmV4cGVjdGVkX3Jlc3VsdHMp
OgogICAgICAgICAiIiJGaW5kIGFsbCB0aGUgZmlsZXMgdG8gdGVzdC4KIApAQCAtNTQxLDE1ICs1
NDIsMTIgQEAgY2xhc3MgTWFuYWdlcjoKICAgICAgICAgY29uY3VycmVuY3kgaW5zdGVhZCBvZiB0
cnlpbmcgdG8gZG8gYW55IHNvcnQgb2YgcmVhbCBzaGFyZGluZy4KIAogICAgICAgICBSZXR1cm46
Ci0gICAgICAgICAgICBBIGxpc3Qgb2YgbGlzdHMgb2YgVGVzdElucHV0IG9iamVjdHMuCisgICAg
ICAgICAgICBUd28gbGlzdHMgb2YgbGlzdHMgb2YgVGVzdElucHV0IG9iamVjdHMuIFRoZSBmaXJz
dCBsaXN0IHNob3VsZAorICAgICAgICAgICAgb25seSBiZSBydW4gdW5kZXIgdGhlIHNlcnZlciBs
b2NrLCB0aGUgc2Vjb25kIGNhbiBiZSBydW4gd2hlbmV2ZXIuCiAgICAgICAgICIiIgotICAgICAg
ICAjIEZJWE1FOiB3aGVuIHdlIGFkZGVkIGh0dHAgbG9ja2luZywgd2UgY2hhbmdlZCBob3cgdGhp
cyB3b3JrcyBzdWNoCi0gICAgICAgICMgdGhhdCB3ZSBhbHdheXMgbHVtcCBhbGwgb2YgdGhlIEhU
VFAgdGhyZWFkcyBpbnRvIGEgc2luZ2xlIHNoYXJkLgotICAgICAgICAjIFRoYXQgd2lsbCBzbG93
IGRvd24gZXhwZXJpbWVudGFsLWZ1bGx5LXBhcmFsbGVsLCBidXQgaXQncyB1bmNsZWFyCi0gICAg
ICAgICMgd2hhdCB0aGUgYmVzdCBhbHRlcm5hdGl2ZSBpcyBjb21wbGV0ZWx5IHJldmFtcGluZyBo
b3cgd2UgdHJhY2sKLSAgICAgICAgIyB3aGVuIHRvIGdyYWIgdGhlIGxvY2suCi0KLSAgICAgICAg
dGVzdF9saXN0cyA9IFtdCisgICAgICAgICMgRklYTUU6IFdlIHN0aWxsIG5lZWQgdG8gc3VwcG9y
dCBtdWx0aXBsZSBsb2NrZWQgc2hhcmRzLgorICAgICAgICBsb2NrZWRfc2hhcmRzID0gW10KKyAg
ICAgICAgdW5sb2NrZWRfc2hhcmRzID0gW10KICAgICAgICAgdGVzdHNfdG9faHR0cF9sb2NrID0g
W10KICAgICAgICAgaWYgbm90IHVzZV9yZWFsX3NoYXJkczoKICAgICAgICAgICAgIGZvciB0ZXN0
X2ZpbGUgaW4gdGVzdF9maWxlczoKQEAgLTU1Nyw3ICs1NTUsNyBAQCBjbGFzcyBNYW5hZ2VyOgog
ICAgICAgICAgICAgICAgIGlmIHNlbGYuX3Rlc3RfcmVxdWlyZXNfbG9jayh0ZXN0X2ZpbGUpOgog
ICAgICAgICAgICAgICAgICAgICB0ZXN0c190b19odHRwX2xvY2suYXBwZW5kKHRlc3RfaW5wdXQp
CiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgdGVzdF9saXN0cy5h
cHBlbmQoKCIuIiwgW3Rlc3RfaW5wdXRdKSkKKyAgICAgICAgICAgICAgICAgICAgdW5sb2NrZWRf
c2hhcmRzLmFwcGVuZCgoIi4iLCBbdGVzdF9pbnB1dF0pKQogICAgICAgICBlbHNlOgogICAgICAg
ICAgICAgdGVzdHNfYnlfZGlyID0ge30KICAgICAgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gdGVz
dF9maWxlczoKQEAgLTU3MSwxOCArNTY5LDE1IEBAIGNsYXNzIE1hbmFnZXI6CiAgICAgICAgICAg
ICBmb3IgZGlyZWN0b3J5IGluIHRlc3RzX2J5X2RpcjoKICAgICAgICAgICAgICAgICB0ZXN0X2xp
c3QgPSB0ZXN0c19ieV9kaXJbZGlyZWN0b3J5XQogICAgICAgICAgICAgICAgIHRlc3RfbGlzdF90
dXBsZSA9IChkaXJlY3RvcnksIHRlc3RfbGlzdCkKLSAgICAgICAgICAgICAgICB0ZXN0X2xpc3Rz
LmFwcGVuZCh0ZXN0X2xpc3RfdHVwbGUpCisgICAgICAgICAgICAgICAgdW5sb2NrZWRfc2hhcmRz
LmFwcGVuZCh0ZXN0X2xpc3RfdHVwbGUpCiAKICAgICAgICAgICAgICMgU29ydCB0aGUgc2hhcmRz
IGJ5IGRpcmVjdG9yeSBuYW1lLgotICAgICAgICAgICAgdGVzdF9saXN0cy5zb3J0KGxhbWJkYSBh
LCBiOiBjbXAoYVswXSwgYlswXSkpCisgICAgICAgICAgICB1bmxvY2tlZF9zaGFyZHMuc29ydChs
YW1iZGEgYSwgYjogY21wKGFbMF0sIGJbMF0pKQogCi0gICAgICAgICMgUHV0IHRoZSBodHRwIHRl
c3RzIGZpcnN0LiBUaGVyZSBhcmUgb25seSBhIGNvdXBsZSBodW5kcmVkIG9mIHRoZW0sCi0gICAg
ICAgICMgYnV0IGVhY2ggaHR0cCB0ZXN0IHRha2VzIGEgdmVyeSBsb25nIHRpbWUgdG8gcnVuLCBz
byBzb3J0aW5nIGJ5IHRoZQotICAgICAgICAjIG51bWJlciBvZiB0ZXN0cyBkb2Vzbid0IGFjY3Vy
YXRlbHkgY2FwdHVyZSBob3cgbG9uZyB0aGV5IHRha2UgdG8gcnVuLgogICAgICAgICBpZiB0ZXN0
c190b19odHRwX2xvY2s6Ci0gICAgICAgICAgICB0ZXN0X2xpc3RzLmluc2VydCgwLCAoInRlc3Rz
X3RvX2h0dHBfbG9jayIsIHRlc3RzX3RvX2h0dHBfbG9jaykpCisgICAgICAgICAgICBsb2NrZWRf
c2hhcmRzID0gWygidGVzdHNfdG9faHR0cF9sb2NrIiwgdGVzdHNfdG9faHR0cF9sb2NrKV0KIAot
ICAgICAgICByZXR1cm4gdGVzdF9saXN0cworICAgICAgICByZXR1cm4gKGxvY2tlZF9zaGFyZHMs
IHVubG9ja2VkX3NoYXJkcykKIAogICAgIGRlZiBfY29udGFpbnNfdGVzdHMoc2VsZiwgc3ViZGly
KToKICAgICAgICAgZm9yIHRlc3RfZmlsZSBpbiBzZWxmLl90ZXN0X2ZpbGVzOgpAQCAtNjI3LDEw
ICs2MjIsMjMgQEAgY2xhc3MgTWFuYWdlcjoKICAgICAgICAgdGhyZWFkX3RpbWluZ3MgPSBbXQog
CiAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTaGFyZGluZyB0ZXN0cyAuLi4n
KQotICAgICAgICB0ZXN0X2xpc3RzID0gc2VsZi5fc2hhcmRfdGVzdHMoZmlsZV9saXN0LAorICAg
ICAgICBsb2NrZWRfc2hhcmRzLCB1bmxvY2tlZF9zaGFyZHMgPSBzZWxmLl9zaGFyZF90ZXN0cyhm
aWxlX2xpc3QsCiAgICAgICAgICAgICBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMp
ID4gMSBhbmQgbm90IHNlbGYuX29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsKQog
Ci0gICAgICAgIG51bV93b3JrZXJzID0gc2VsZi5fbnVtX3dvcmtlcnMobGVuKHRlc3RfbGlzdHMp
KQorICAgICAgICAjIEZJWE1FOiBXZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gY29vcmRpbmF0
ZSB0aGUgd29ya2VycyBzbyB0aGF0CisgICAgICAgICMgdGhleSBkb24ndCB0cnkgdG8gcnVuIHRo
ZSBzaGFyZHMgdGhhdCBuZWVkIGEgbG9jayBpZiB3ZSBkb24ndCBhY3R1YWxseQorICAgICAgICAj
IGhhdmUgdGhlIGxvY2suIFRoZSBlYXNpZXN0IHNvbHV0aW9uIGF0IHRoZSBtb21lbnQgaXMgdG8g
Z3JhYiB0aGUKKyAgICAgICAgIyBsb2NrIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJ1biwgYW5k
IHRoZW4gcnVuIGFsbCBvZiB0aGUgbG9ja2VkCisgICAgICAgICMgc2hhcmRzIGZpcnN0LiBUaGlz
IG1pbmltaXplcyB0aGUgdGltZSBzcGVudCBob2xkaW5nIHRoZSBsb2NrLCBidXQKKyAgICAgICAg
IyBtZWFucyB0aGF0IHdlIHdvbid0IGJlIHJ1bm5pbmcgdGVzdHMgd2hpbGUgd2UncmUgd2FpdGlu
ZyBmb3IgdGhlIGxvY2suCisgICAgICAgICMgSWYgdGhpcyBiZWNvbWVzIGEgcHJvYmxlbSBpbiBw
cmFjdGljZSB3ZSdsbCBuZWVkIHRvIGNoYW5nZSB0aGlzLgorCisgICAgICAgIGFsbF9zaGFyZHMg
PSBsb2NrZWRfc2hhcmRzICsgdW5sb2NrZWRfc2hhcmRzCisgICAgICAgIHNlbGYuX3BlbmRpbmdf
bG9ja2VkX3NoYXJkcyA9IGxvY2tlZF9zaGFyZHMKKyAgICAgICAgaWYgbG9ja2VkX3NoYXJkczoK
KyAgICAgICAgICAgIHNlbGYuc3RhcnRfc2VydmVyc193aXRoX2xvY2soKQorCisgICAgICAgIG51
bV93b3JrZXJzID0gc2VsZi5fbnVtX3dvcmtlcnMobGVuKGFsbF9zaGFyZHMpKQogICAgICAgICBt
YW5hZ2VyX2Nvbm5lY3Rpb24gPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuZ2V0KHNlbGYuX3BvcnQs
IHNlbGYuX29wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZiwgd29ya2VyLldvcmtlcikKIApAQCAtNjUyLDggKzY2MCw4IEBA
IGNsYXNzIE1hbmFnZXI6CiAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKIAogICAgICAgICBz
ZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgiU3RhcnRpbmcgdGVzdGluZyAuLi4iKQotICAgICAg
ICBmb3IgdGVzdF9saXN0IGluIHRlc3RfbGlzdHM6Ci0gICAgICAgICAgICBtYW5hZ2VyX2Nvbm5l
Y3Rpb24ucG9zdF9tZXNzYWdlKCd0ZXN0X2xpc3QnLCB0ZXN0X2xpc3RbMF0sIHRlc3RfbGlzdFsx
XSkKKyAgICAgICAgZm9yIHNoYXJkIGluIGFsbF9zaGFyZHM6CisgICAgICAgICAgICBtYW5hZ2Vy
X2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCd0ZXN0X2xpc3QnLCBzaGFyZFswXSwgc2hhcmRbMV0p
CiAKICAgICAgICAgIyBXZSBwb3N0IG9uZSAnc3RvcCcgbWVzc2FnZSBmb3IgZWFjaCB3b3JrZXIu
IEJlY2F1c2UgdGhlIHN0b3AgbWVzc2FnZQogICAgICAgICAjIGFyZSBzZW50IGFmdGVyIGFsbCBv
ZiB0aGUgdGVzdHMsIGFuZCBiZWNhdXNlIGVhY2ggd29ya2VyIHdpbGwgc3RvcApAQCAtNjk4LDYg
KzcwNiw4IEBAIGNsYXNzIE1hbmFnZXI6CiAgICAgICAgICAgICBfbG9nLmVycm9yKCJFeGNlcHRp
b24gcmFpc2VkLCBleGl0aW5nIikKICAgICAgICAgICAgIHNlbGYuY2FuY2VsX3dvcmtlcnMoKQog
ICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuc3Rv
cF9zZXJ2ZXJzX3dpdGhfbG9jaygpCiAKICAgICAgICAgdGhyZWFkX3RpbWluZ3MgPSBbd29ya2Vy
X3N0YXRlLnN0YXRzIGZvciB3b3JrZXJfc3RhdGUgaW4gc2VsZi5fd29ya2VyX3N0YXRlcy52YWx1
ZXMoKV0KIApAQCAtODQ4LDYgKzg1OCwyNSBAQCBjbGFzcyBNYW5hZ2VyOgogICAgICAgICAjIGJv
dCByZWQgZm9yIHRob3NlLgogICAgICAgICByZXR1cm4gdW5leHBlY3RlZF9yZXN1bHRzWydudW1f
cmVncmVzc2lvbnMnXQogCisgICAgZGVmIHN0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKHNlbGYpOgor
ICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnQWNxdWlyaW5nIGh0dHAgbG9jayAu
Li4nKQorICAgICAgICBzZWxmLl9wb3J0LmFjcXVpcmVfaHR0cF9sb2NrKCkKKyAgICAgICAgc2Vs
Zi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0aW5nIEhUVFAgc2VydmVyIC4uLicpCisgICAg
ICAgIHNlbGYuX3BvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIoKQorICAgICAgICBzZWxmLl9wcmludGVy
LnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQorICAgICAgICBz
ZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQorICAgICAgICBzZWxmLl9oYXNfaHR0
cF9sb2NrID0gVHJ1ZQorCisgICAgZGVmIHN0b3Bfc2VydmVyc193aXRoX2xvY2soc2VsZik6Cisg
ICAgICAgIGlmIHNlbGYuX2hhc19odHRwX2xvY2s6CisgICAgICAgICAgICBzZWxmLl9wcmludGVy
LnByaW50X3VwZGF0ZSgnU3RvcHBpbmcgSFRUUCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNl
bGYuX3BvcnQuc3RvcF9odHRwX3NlcnZlcigpCisgICAgICAgICAgICBzZWxmLl9wcmludGVyLnBy
aW50X3VwZGF0ZSgnU3RvcHBpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQorICAgICAgICAgICAg
c2VsZi5fcG9ydC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIoKQorICAgICAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF91cGRhdGUoJ1JlbGVhc2luZyBzZXJ2ZXIgbG9jayAuLi4nKQorICAgICAgICAg
ICAgc2VsZi5fcG9ydC5yZWxlYXNlX2h0dHBfbG9jaygpCisgICAgICAgICAgICBzZWxmLl9oYXNf
aHR0cF9sb2NrID0gRmFsc2UKKwogICAgIGRlZiBjbGVhbl91cF9ydW4oc2VsZik6CiAgICAgICAg
ICIiIlJlc3RvcmVzIHRoZSBzeXN0ZW0gYWZ0ZXIgd2UncmUgZG9uZSBydW5uaW5nIHRlc3RzLiIi
IgogCkBAIC0xMzI5LDYgKzEzNTgsMTkgQEAgY2xhc3MgTWFuYWdlcjoKICAgICBkZWYgaGFuZGxl
X2ZpbmlzaGVkX2xpc3Qoc2VsZiwgc291cmNlLCBsaXN0X25hbWUsIG51bV90ZXN0cywgZWxhcHNl
ZF90aW1lKToKICAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHNbbGlzdF9uYW1lXSA9IChudW1fdGVz
dHMsIGVsYXBzZWRfdGltZSkKIAorICAgICAgICBkZWYgZmluZChuYW1lLCB0ZXN0X2xpc3RzKToK
KyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbih0ZXN0X2xpc3RzKSk6CisgICAgICAgICAg
ICAgICAgaWYgdGVzdF9saXN0c1tpXVswXSA9PSBuYW1lOgorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaQorICAgICAgICAgICAgcmV0dXJuIC0xCisKKyAgICAgICAgaW5kZXggPSBmaW5kKGxp
c3RfbmFtZSwgc2VsZi5fcmVtYWluaW5nX2xvY2tlZF9zaGFyZHMpCisgICAgICAgIGlmIGluZGV4
ID49IDA6CisgICAgICAgICAgICBzZWxmLl9yZW1haW5pbmdfbG9ja2VkX3NoYXJkcy5wb3AoaW5k
ZXgpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fcmVtYWluaW5nX2xvY2tlZF9zaGFyZHM6Cisg
ICAgICAgICAgICAgICAgc2VsZi5zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKCkKKyAgICAgICAgICAg
IHJldHVybgorCiAgICAgZGVmIGhhbmRsZV9maW5pc2hlZF90ZXN0KHNlbGYsIHNvdXJjZSwgcmVz
dWx0LCBlbGFwc2VkX3RpbWUpOgogICAgICAgICB3b3JrZXJfc3RhdGUgPSBzZWxmLl93b3JrZXJf
c3RhdGVzW3NvdXJjZV0KICAgICAgICAgd29ya2VyX3N0YXRlLm5leHRfdGltZW91dCA9IE5vbmUK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL21hbmFnZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3VuaXR0ZXN0LnB5CmluZGV4IDRkMTE0MjYz
NDY3NjkyMTJjNjE3NjY2MmExZmM1M2I5MWI4NzNjMDAuLjljMWFmODg1OWEwYmU2ZDMxZDg1NDgy
NDY5OGE0NjdkYTBjN2FlNjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl91bml0
dGVzdC5weQpAQCAtNzAsMTQgKzcwLDEzIEBAIGNsYXNzIE1hbmFnZXJUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICAgICAgICAnTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVz
dC9zdXBwb3J0ZWQteG1sLWNvbnRlbnQtdHlwZXMuaHRtbCcsCiAgICAgICAgIF0pCiAKLSAgICAg
ICAgIyBGSVhNRTogSWRlYWxseSB0aGUgSFRUUCB0ZXN0cyBkb24ndCBoYXZlIHRvIGFsbCBiZSBp
biBvbmUgc2hhcmQuCi0gICAgICAgIHNpbmdsZV90aHJlYWRfcmVzdWx0cyA9IG1hbmFnZXIuX3No
YXJkX3Rlc3RzKHRlc3RfbGlzdCwgRmFsc2UpCi0gICAgICAgIG11bHRpX3RocmVhZF9yZXN1bHRz
ID0gbWFuYWdlci5fc2hhcmRfdGVzdHModGVzdF9saXN0LCBUcnVlKQotCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoInRlc3RzX3RvX2h0dHBfbG9jayIsIHNpbmdsZV90aHJlYWRfcmVzdWx0c1sw
XVswXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF90ZXN0c190b19odHRwX2xv
Y2ssIHNldChzaW5nbGVfdGhyZWFkX3Jlc3VsdHNbMF1bMV0pKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCJ0ZXN0c190b19odHRwX2xvY2siLCBtdWx0aV90aHJlYWRfcmVzdWx0c1swXVswXSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF90ZXN0c190b19odHRwX2xvY2ssIHNl
dChtdWx0aV90aHJlYWRfcmVzdWx0c1swXVsxXSkpCisgICAgICAgIHNpbmdsZV9sb2NrZWQsIHNp
bmdsZV91bmxvY2tlZCA9IG1hbmFnZXIuX3NoYXJkX3Rlc3RzKHRlc3RfbGlzdCwgRmFsc2UpCisg
ICAgICAgIG11bHRpX2xvY2tlZCwgbXVsdGlfdW5sb2NrZWQgPSBtYW5hZ2VyLl9zaGFyZF90ZXN0
cyh0ZXN0X2xpc3QsIFRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidGVzdHNfdG9f
aHR0cF9sb2NrIiwgc2luZ2xlX2xvY2tlZFswXVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChleHBlY3RlZF90ZXN0c190b19odHRwX2xvY2ssIHNldChzaW5nbGVfbG9ja2VkWzBdWzFdKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidGVzdHNfdG9faHR0cF9sb2NrIiwgbXVsdGlfbG9j
a2VkWzBdWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3Rlc3RzX3RvX2h0
dHBfbG9jaywgc2V0KG11bHRpX2xvY2tlZFswXVsxXSkpCiAKIAogY2xhc3MgTmF0dXJhbENvbXBh
cmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtlci5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtlci5weQppbmRleCBj
Yzg3MGFlMGZjNDcxMzY1OTI2NTgyMjg1YzQyYjQ0YWQ0YTNmYjNmLi4xZjU0YTg4ZmI0ZDRjNzM1
YjI4MmQzNzA2NjNjNGFiZmQ4ZWI0YTYzIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93b3JrZXIucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyLnB5CkBAIC03
MSwxMiArNzEsNiBAQCBjbGFzcyBXb3JrZXIobWFuYWdlcl93b3JrZXJfYnJva2VyLkFic3RyYWN0
V29ya2VyKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJ0ZXN0c19ydW4lZC50eHQiICUgc2VsZi5fd29ya2VyX251bWJlcikKICAgICAgICAgc2Vs
Zi5fdGVzdHNfcnVuX2ZpbGUgPSBzZWxmLl9maWxlc3lzdGVtLm9wZW5fdGV4dF9maWxlX2Zvcl93
cml0aW5nKHRlc3RzX3J1bl9maWxlbmFtZSkKIAotICAgICAgICAjIEZJWE1FOiBpdCdzIGdvb2Z5
IHRoYXQgd2UgaGF2ZSB0byB0cmFjayB0aGlzIGF0IGFsbCwgYnV0IGl0J3MgZHVlIHRvCi0gICAg
ICAgICMgdGhlIGF3a3dhcmQgbG9naWMgaW4gVGVzdFNoZWxsVGhyZWFkLl9ydW4oKS4gV2hlbiB3
ZSByZW1vdmUgdGhhdAotICAgICAgICAjIGZpbGUsIHdlIHNob3VsZCByZXdyaXRlIHRoaXMgY29k
ZSBzbyB0aGF0IGNhbGxlciBrZWVwcyB0cmFjayBvZiB3aGV0aGVyCi0gICAgICAgICMgdGhlIGxv
Y2sgaXMgaGVsZC4KLSAgICAgICAgc2VsZi5faGFzX2h0dHBfbG9jayA9IEZhbHNlCi0KICAgICBk
ZWYgY2FuY2VsKHNlbGYpOgogICAgICAgICAiIiJBdHRlbXB0IHRvIGFib3J0IHByb2Nlc3Npbmcg
KGJlc3QgZWZmb3J0KS4iIiIKICAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBUcnVlCkBAIC0xMTgs
OSArMTEyLDYgQEAgY2xhc3MgV29ya2VyKG1hbmFnZXJfd29ya2VyX2Jyb2tlci5BYnN0cmFjdFdv
cmtlcik6CiAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnZXhj
ZXB0aW9uJywgZXhjZXB0aW9uX3R5cGUsIGV4Y2VwdGlvbl92YWx1ZSwgc3RhY2spCiAKICAgICBk
ZWYgaGFuZGxlX3Rlc3RfbGlzdChzZWxmLCBzcmMsIGxpc3RfbmFtZSwgdGVzdF9saXN0KToKLSAg
ICAgICAgaWYgbGlzdF9uYW1lID09ICJ0ZXN0c190b19odHRwX2xvY2siOgotICAgICAgICAgICAg
c2VsZi5zdGFydF9zZXJ2ZXJzX3dpdGhfbG9jaygpCi0KICAgICAgICAgc3RhcnRfdGltZSA9IHRp
bWUudGltZSgpCiAgICAgICAgIG51bV90ZXN0cyA9IDAKICAgICAgICAgZm9yIHRlc3RfaW5wdXQg
aW4gdGVzdF9saXN0OgpAQCAtMTMxLDggKzEyMiw2IEBAIGNsYXNzIFdvcmtlcihtYW5hZ2VyX3dv
cmtlcl9icm9rZXIuQWJzdHJhY3RXb3JrZXIpOgogICAgICAgICBlbGFwc2VkX3RpbWUgPSB0aW1l
LnRpbWUoKSAtIHN0YXJ0X3RpbWUKICAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9z
dF9tZXNzYWdlKCdmaW5pc2hlZF9saXN0JywgbGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRf
dGltZSkKIAotICAgICAgICBzZWxmLnN0b3Bfc2VydmVyc193aXRoX2xvY2soKQotCiAgICAgZGVm
IGhhbmRsZV9zdG9wKHNlbGYsIHNyYyk6CiAgICAgICAgIHNlbGYuX2RvbmUgPSBUcnVlCiAKQEAg
LTE1MSw3ICsxNDAsNiBAQCBjbGFzcyBXb3JrZXIobWFuYWdlcl93b3JrZXJfYnJva2VyLkFic3Ry
YWN0V29ya2VyKToKICAgICBkZWYgY2xlYW51cChzZWxmKToKICAgICAgICAgX2xvZy5kZWJ1Zygi
JXMgY2xlYW5pbmcgdXAiICUgc2VsZi5fbmFtZSkKICAgICAgICAgc2VsZi5raWxsX2RyaXZlcigp
Ci0gICAgICAgIHNlbGYuc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCiAgICAgICAgIGlmIHNlbGYu
X3Rlc3RzX3J1bl9maWxlOgogICAgICAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUuY2xvc2Uo
KQogICAgICAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUgPSBOb25lCkBAIC0xNzIsMjUgKzE2
MCw2IEBAIGNsYXNzIFdvcmtlcihtYW5hZ2VyX3dvcmtlcl9icm9rZXIuQWJzdHJhY3RXb3JrZXIp
OgogICAgICAgICB0aHJlYWRfdGltZW91dF9zZWMgPSBkcml2ZXJfdGltZW91dF9zZWMgKyB0aHJl
YWRfcGFkZGluZ19zZWMKICAgICAgICAgcmV0dXJuIHRocmVhZF90aW1lb3V0X3NlYwogCi0gICAg
ZGVmIHN0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKHNlbGYpOgotICAgICAgICBfbG9nLmRlYnVnKCdB
Y3F1aXJpbmcgaHR0cCBsb2NrIC4uLicpCi0gICAgICAgIHNlbGYuX3BvcnQuYWNxdWlyZV9odHRw
X2xvY2soKQotICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyBIVFRQIHNlcnZlciAuLi4nKQot
ICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKLSAgICAgICAgX2xvZy5kZWJ1
ZygnU3RhcnRpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQotICAgICAgICBzZWxmLl9wb3J0LnN0
YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQotICAgICAgICBzZWxmLl9oYXNfaHR0cF9sb2NrID0gVHJ1
ZQotCi0gICAgZGVmIHN0b3Bfc2VydmVyc193aXRoX2xvY2soc2VsZik6Ci0gICAgICAgIGlmIHNl
bGYuX2hhc19odHRwX2xvY2s6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCdTdG9wcGluZyBIVFRQ
IHNlcnZlciAuLi4nKQotICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX2h0dHBfc2VydmVyKCkK
LSAgICAgICAgICAgIF9sb2cuZGVidWcoJ1N0b3BwaW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykK
LSAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyKCkKLSAgICAgICAg
ICAgIF9sb2cuZGVidWcoJ1JlbGVhc2luZyBzZXJ2ZXIgbG9jayAuLi4nKQotICAgICAgICAgICAg
c2VsZi5fcG9ydC5yZWxlYXNlX2h0dHBfbG9jaygpCi0gICAgICAgICAgICBzZWxmLl9oYXNfaHR0
cF9sb2NrID0gRmFsc2UKLQogICAgIGRlZiBraWxsX2RyaXZlcihzZWxmKToKICAgICAgICAgaWYg
c2VsZi5fZHJpdmVyOgogICAgICAgICAgICAgc2VsZi5fZHJpdmVyLnN0b3AoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98308</attachid>
            <date>2011-06-22 20:21:42 -0700</date>
            <delta_ts>2011-06-28 18:11:18 -0700</delta_ts>
            <desc>fix rebase</desc>
            <filename>bug-63112-20110622202141.patch</filename>
            <type>text/plain</type>
            <size>8542</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODkzNzMKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA1N2I0Zjc2ZTQ1MWQ0ZGNkY2Y3Y2I2ZmMxNmY0NDIzMTVi
MzVmNTAyLi5iZTFjN2ZiNGU1MGM4MDI3NTVkYTMyM2M2MmU5Y2RlYjc2ZDVhNjY3IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjAg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBucnd0
OiBtYWtlIHNoYXJkaW5nIHRlc3RzIG5lZWRpbmcgbG9ja3MgbGVzcyBoYXJkLWNvZGVkCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzExMgorCisgICAg
ICAgIFRoaXMgY2hhbmdlIGFsc28gY2hhbmdlcyB0aGUgbWFuYWdlciBsb2dpYyBzbyB0aGF0IGl0
IHdpbGwKKyAgICAgICAgZHJvcCB0aGUgc2VydmVyIGxvY2sgYXMgc29vbiBhcyBhbGwgb2YgdGhl
IHNoYXJkcyByZXF1aXJpbmcKKyAgICAgICAgdGhlIGxvY2sgaGF2ZSBjb21wbGV0ZWQuCisKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5h
Z2VyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL21hbmFnZXJfdW5pdHRlc3QucHk6CisKKzIwMTEtMDYtMjEgIERpcmsgUHJhbmtlICA8
ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKICAgICAgICAgbnJ3dDogbW92ZSBodHRwIGxvY2tpbmcgY29kZSBpbnRvIG1hbmFnZXIK
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzMTAzCiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL21hbmFnZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9tYW5hZ2VyLnB5CmluZGV4IDQ4Yjg5MjVhNmUzZTIwZjU2YzJkMGE4YWZk
NWNhM2RmZTNkMDIxMmUuLmU1NmNhNWFhZjNlYTlkODRiYTEyOWRmNzY0MjJiNzQ1MGQ3Zjg1ZTIg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL21hbmFnZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlci5weQpAQCAtMjY0LDYgKzI2NCw4IEBAIGNsYXNzIE1h
bmFnZXI6CiAgICAgICAgIHNlbGYuTEFZT1VUX1RFU1RTX0RJUkVDVE9SWSA9ICJMYXlvdXRUZXN0
cyIgKyBzZWxmLl9mcy5zZXAKICAgICAgICAgc2VsZi5faGFzX2h0dHBfbG9jayA9IEZhbHNlCiAK
KyAgICAgICAgc2VsZi5fcmVtYWluaW5nX2xvY2tlZF9zaGFyZHMgPSBbXQorCiAgICAgICAgICMg
ZGlzYWJsZSB3c3Mgc2VydmVyLiBuZWVkIHRvIGluc3RhbGwgcHlPcGVuU1NMIG9uIGJ1aWxkYm90
cy4KICAgICAgICAgIyBzZWxmLl93ZWJzb2NrZXRfc2VjdXJlX3NlcnZlciA9IHdlYnNvY2tldF9z
ZXJ2ZXIuUHlXZWJTb2NrZXQoCiAgICAgICAgICMgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJl
Y3RvcnksIHVzZV90bHM9VHJ1ZSwgcG9ydD05MzIzKQpAQCAtNTQwLDE1ICs1NDIsMTIgQEAgY2xh
c3MgTWFuYWdlcjoKICAgICAgICAgY29uY3VycmVuY3kgaW5zdGVhZCBvZiB0cnlpbmcgdG8gZG8g
YW55IHNvcnQgb2YgcmVhbCBzaGFyZGluZy4KIAogICAgICAgICBSZXR1cm46Ci0gICAgICAgICAg
ICBBIGxpc3Qgb2YgbGlzdHMgb2YgVGVzdElucHV0IG9iamVjdHMuCisgICAgICAgICAgICBUd28g
bGlzdHMgb2YgbGlzdHMgb2YgVGVzdElucHV0IG9iamVjdHMuIFRoZSBmaXJzdCBsaXN0IHNob3Vs
ZAorICAgICAgICAgICAgb25seSBiZSBydW4gdW5kZXIgdGhlIHNlcnZlciBsb2NrLCB0aGUgc2Vj
b25kIGNhbiBiZSBydW4gd2hlbmV2ZXIuCiAgICAgICAgICIiIgotICAgICAgICAjIEZJWE1FOiB3
aGVuIHdlIGFkZGVkIGh0dHAgbG9ja2luZywgd2UgY2hhbmdlZCBob3cgdGhpcyB3b3JrcyBzdWNo
Ci0gICAgICAgICMgdGhhdCB3ZSBhbHdheXMgbHVtcCBhbGwgb2YgdGhlIEhUVFAgdGhyZWFkcyBp
bnRvIGEgc2luZ2xlIHNoYXJkLgotICAgICAgICAjIFRoYXQgd2lsbCBzbG93IGRvd24gZXhwZXJp
bWVudGFsLWZ1bGx5LXBhcmFsbGVsLCBidXQgaXQncyB1bmNsZWFyCi0gICAgICAgICMgd2hhdCB0
aGUgYmVzdCBhbHRlcm5hdGl2ZSBpcyBjb21wbGV0ZWx5IHJldmFtcGluZyBob3cgd2UgdHJhY2sK
LSAgICAgICAgIyB3aGVuIHRvIGdyYWIgdGhlIGxvY2suCi0KLSAgICAgICAgdGVzdF9saXN0cyA9
IFtdCisgICAgICAgICMgRklYTUU6IFdlIHN0aWxsIG5lZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSBs
b2NrZWQgc2hhcmRzLgorICAgICAgICBsb2NrZWRfc2hhcmRzID0gW10KKyAgICAgICAgdW5sb2Nr
ZWRfc2hhcmRzID0gW10KICAgICAgICAgdGVzdHNfdG9faHR0cF9sb2NrID0gW10KICAgICAgICAg
aWYgbm90IHVzZV9yZWFsX3NoYXJkczoKICAgICAgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gdGVz
dF9maWxlczoKQEAgLTU1Niw3ICs1NTUsNyBAQCBjbGFzcyBNYW5hZ2VyOgogICAgICAgICAgICAg
ICAgIGlmIHNlbGYuX3Rlc3RfcmVxdWlyZXNfbG9jayh0ZXN0X2ZpbGUpOgogICAgICAgICAgICAg
ICAgICAgICB0ZXN0c190b19odHRwX2xvY2suYXBwZW5kKHRlc3RfaW5wdXQpCiAgICAgICAgICAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgdGVzdF9saXN0cy5hcHBlbmQoKCIuIiwg
W3Rlc3RfaW5wdXRdKSkKKyAgICAgICAgICAgICAgICAgICAgdW5sb2NrZWRfc2hhcmRzLmFwcGVu
ZCgoIi4iLCBbdGVzdF9pbnB1dF0pKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdGVzdHNf
YnlfZGlyID0ge30KICAgICAgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gdGVzdF9maWxlczoKQEAg
LTU3MCwxOCArNTY5LDE1IEBAIGNsYXNzIE1hbmFnZXI6CiAgICAgICAgICAgICBmb3IgZGlyZWN0
b3J5IGluIHRlc3RzX2J5X2RpcjoKICAgICAgICAgICAgICAgICB0ZXN0X2xpc3QgPSB0ZXN0c19i
eV9kaXJbZGlyZWN0b3J5XQogICAgICAgICAgICAgICAgIHRlc3RfbGlzdF90dXBsZSA9IChkaXJl
Y3RvcnksIHRlc3RfbGlzdCkKLSAgICAgICAgICAgICAgICB0ZXN0X2xpc3RzLmFwcGVuZCh0ZXN0
X2xpc3RfdHVwbGUpCisgICAgICAgICAgICAgICAgdW5sb2NrZWRfc2hhcmRzLmFwcGVuZCh0ZXN0
X2xpc3RfdHVwbGUpCiAKICAgICAgICAgICAgICMgU29ydCB0aGUgc2hhcmRzIGJ5IGRpcmVjdG9y
eSBuYW1lLgotICAgICAgICAgICAgdGVzdF9saXN0cy5zb3J0KGxhbWJkYSBhLCBiOiBjbXAoYVsw
XSwgYlswXSkpCisgICAgICAgICAgICB1bmxvY2tlZF9zaGFyZHMuc29ydChsYW1iZGEgYSwgYjog
Y21wKGFbMF0sIGJbMF0pKQogCi0gICAgICAgICMgUHV0IHRoZSBodHRwIHRlc3RzIGZpcnN0LiBU
aGVyZSBhcmUgb25seSBhIGNvdXBsZSBodW5kcmVkIG9mIHRoZW0sCi0gICAgICAgICMgYnV0IGVh
Y2ggaHR0cCB0ZXN0IHRha2VzIGEgdmVyeSBsb25nIHRpbWUgdG8gcnVuLCBzbyBzb3J0aW5nIGJ5
IHRoZQotICAgICAgICAjIG51bWJlciBvZiB0ZXN0cyBkb2Vzbid0IGFjY3VyYXRlbHkgY2FwdHVy
ZSBob3cgbG9uZyB0aGV5IHRha2UgdG8gcnVuLgogICAgICAgICBpZiB0ZXN0c190b19odHRwX2xv
Y2s6Ci0gICAgICAgICAgICB0ZXN0X2xpc3RzLmluc2VydCgwLCAoInRlc3RzX3RvX2h0dHBfbG9j
ayIsIHRlc3RzX3RvX2h0dHBfbG9jaykpCisgICAgICAgICAgICBsb2NrZWRfc2hhcmRzID0gWygi
dGVzdHNfdG9faHR0cF9sb2NrIiwgdGVzdHNfdG9faHR0cF9sb2NrKV0KIAotICAgICAgICByZXR1
cm4gdGVzdF9saXN0cworICAgICAgICByZXR1cm4gKGxvY2tlZF9zaGFyZHMsIHVubG9ja2VkX3No
YXJkcykKIAogICAgIGRlZiBfY29udGFpbnNfdGVzdHMoc2VsZiwgc3ViZGlyKToKICAgICAgICAg
Zm9yIHRlc3RfZmlsZSBpbiBzZWxmLl90ZXN0X2ZpbGVzOgpAQCAtNjI2LDE1ICs2MjIsMjMgQEAg
Y2xhc3MgTWFuYWdlcjoKICAgICAgICAgdGhyZWFkX3RpbWluZ3MgPSBbXQogCiAgICAgICAgIHNl
bGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTaGFyZGluZyB0ZXN0cyAuLi4nKQotICAgICAgICB0
ZXN0X2xpc3RzID0gc2VsZi5fc2hhcmRfdGVzdHMoZmlsZV9saXN0LAorICAgICAgICBsb2NrZWRf
c2hhcmRzLCB1bmxvY2tlZF9zaGFyZHMgPSBzZWxmLl9zaGFyZF90ZXN0cyhmaWxlX2xpc3QsCiAg
ICAgICAgICAgICBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpID4gMSBhbmQgbm90
IHNlbGYuX29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsKQogCi0gICAgICAgICMg
RklYTUU6IHdlIG5lZWQgYSBsZXNzIGhhcmQtY29kZWQgd2F5IG9mIGZpZ3VyaW5nIG91dCBpZiB3
ZSBuZWVkIHRvCi0gICAgICAgICMgc3RhcnQgdGhlIHNlcnZlcnMuCi0gICAgICAgIGlmIHRlc3Rf
bGlzdHNbMF1bMF0gPT0gJ3Rlc3RzX3RvX2h0dHBfbG9jayc6CisgICAgICAgICMgRklYTUU6IFdl
IGRvbid0IGhhdmUgYSBnb29kIHdheSB0byBjb29yZGluYXRlIHRoZSB3b3JrZXJzIHNvIHRoYXQK
KyAgICAgICAgIyB0aGV5IGRvbid0IHRyeSB0byBydW4gdGhlIHNoYXJkcyB0aGF0IG5lZWQgYSBs
b2NrIGlmIHdlIGRvbid0IGFjdHVhbGx5CisgICAgICAgICMgaGF2ZSB0aGUgbG9jay4gVGhlIGVh
c2llc3Qgc29sdXRpb24gYXQgdGhlIG1vbWVudCBpcyB0byBncmFiIHRoZQorICAgICAgICAjIGxv
Y2sgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcnVuLCBhbmQgdGhlbiBydW4gYWxsIG9mIHRoZSBs
b2NrZWQKKyAgICAgICAgIyBzaGFyZHMgZmlyc3QuIFRoaXMgbWluaW1pemVzIHRoZSB0aW1lIHNw
ZW50IGhvbGRpbmcgdGhlIGxvY2ssIGJ1dAorICAgICAgICAjIG1lYW5zIHRoYXQgd2Ugd29uJ3Qg
YmUgcnVubmluZyB0ZXN0cyB3aGlsZSB3ZSdyZSB3YWl0aW5nIGZvciB0aGUgbG9jay4KKyAgICAg
ICAgIyBJZiB0aGlzIGJlY29tZXMgYSBwcm9ibGVtIGluIHByYWN0aWNlIHdlJ2xsIG5lZWQgdG8g
Y2hhbmdlIHRoaXMuCisKKyAgICAgICAgYWxsX3NoYXJkcyA9IGxvY2tlZF9zaGFyZHMgKyB1bmxv
Y2tlZF9zaGFyZHMKKyAgICAgICAgc2VsZi5fcGVuZGluZ19sb2NrZWRfc2hhcmRzID0gbG9ja2Vk
X3NoYXJkcworICAgICAgICBpZiBsb2NrZWRfc2hhcmRzOgogICAgICAgICAgICAgc2VsZi5zdGFy
dF9zZXJ2ZXJzX3dpdGhfbG9jaygpCiAKLSAgICAgICAgbnVtX3dvcmtlcnMgPSBzZWxmLl9udW1f
d29ya2VycyhsZW4odGVzdF9saXN0cykpCisgICAgICAgIG51bV93b3JrZXJzID0gc2VsZi5fbnVt
X3dvcmtlcnMobGVuKGFsbF9zaGFyZHMpKQogICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24gPSBt
YW5hZ2VyX3dvcmtlcl9icm9rZXIuZ2V0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwg
d29ya2VyLldvcmtlcikKIApAQCAtNjU2LDggKzY2MCw4IEBAIGNsYXNzIE1hbmFnZXI6CiAgICAg
ICAgICAgICB0aW1lLnNsZWVwKDAuMSkKIAogICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3Vw
ZGF0ZSgiU3RhcnRpbmcgdGVzdGluZyAuLi4iKQotICAgICAgICBmb3IgdGVzdF9saXN0IGluIHRl
c3RfbGlzdHM6Ci0gICAgICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCd0
ZXN0X2xpc3QnLCB0ZXN0X2xpc3RbMF0sIHRlc3RfbGlzdFsxXSkKKyAgICAgICAgZm9yIHNoYXJk
IGluIGFsbF9zaGFyZHM6CisgICAgICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNz
YWdlKCd0ZXN0X2xpc3QnLCBzaGFyZFswXSwgc2hhcmRbMV0pCiAKICAgICAgICAgIyBXZSBwb3N0
IG9uZSAnc3RvcCcgbWVzc2FnZSBmb3IgZWFjaCB3b3JrZXIuIEJlY2F1c2UgdGhlIHN0b3AgbWVz
c2FnZQogICAgICAgICAjIGFyZSBzZW50IGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMsIGFuZCBiZWNh
dXNlIGVhY2ggd29ya2VyIHdpbGwgc3RvcApAQCAtMTM1NCw2ICsxMzU4LDE5IEBAIGNsYXNzIE1h
bmFnZXI6CiAgICAgZGVmIGhhbmRsZV9maW5pc2hlZF9saXN0KHNlbGYsIHNvdXJjZSwgbGlzdF9u
YW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSk6CiAgICAgICAgIHNlbGYuX2dyb3VwX3N0YXRz
W2xpc3RfbmFtZV0gPSAobnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpCiAKKyAgICAgICAgZGVmIGZp
bmQobmFtZSwgdGVzdF9saXN0cyk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4odGVz
dF9saXN0cykpOgorICAgICAgICAgICAgICAgIGlmIHRlc3RfbGlzdHNbaV1bMF0gPT0gbmFtZToK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkKKyAgICAgICAgICAgIHJldHVybiAtMQorCisg
ICAgICAgIGluZGV4ID0gZmluZChsaXN0X25hbWUsIHNlbGYuX3JlbWFpbmluZ19sb2NrZWRfc2hh
cmRzKQorICAgICAgICBpZiBpbmRleCA+PSAwOgorICAgICAgICAgICAgc2VsZi5fcmVtYWluaW5n
X2xvY2tlZF9zaGFyZHMucG9wKGluZGV4KQorICAgICAgICAgICAgaWYgbm90IHNlbGYuX3JlbWFp
bmluZ19sb2NrZWRfc2hhcmRzOgorICAgICAgICAgICAgICAgIHNlbGYuc3RvcF9zZXJ2ZXJzX3dp
dGhfbG9jaygpCisgICAgICAgICAgICByZXR1cm4KKwogICAgIGRlZiBoYW5kbGVfZmluaXNoZWRf
dGVzdChzZWxmLCBzb3VyY2UsIHJlc3VsdCwgZWxhcHNlZF90aW1lKToKICAgICAgICAgd29ya2Vy
X3N0YXRlID0gc2VsZi5fd29ya2VyX3N0YXRlc1tzb3VyY2VdCiAgICAgICAgIHdvcmtlcl9zdGF0
ZS5uZXh0X3RpbWVvdXQgPSBOb25lCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3VuaXR0ZXN0LnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl91bml0
dGVzdC5weQppbmRleCA0ZDExNDI2MzQ2NzY5MjEyYzYxNzY2NjJhMWZjNTNiOTFiODczYzAwLi45
YzFhZjg4NTlhMGJlNmQzMWQ4NTQ4MjQ2OThhNDY3ZGEwYzdhZTY5IDEwMDY0NAotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3Vu
aXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21hbmFnZXJfdW5pdHRlc3QucHkKQEAgLTcwLDE0ICs3MCwxMyBAQCBjbGFzcyBN
YW5hZ2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgJ0xheW91dFRlc3RzL2h0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3VwcG9ydGVkLXhtbC1jb250ZW50LXR5cGVzLmh0bWwn
LAogICAgICAgICBdKQogCi0gICAgICAgICMgRklYTUU6IElkZWFsbHkgdGhlIEhUVFAgdGVzdHMg
ZG9uJ3QgaGF2ZSB0byBhbGwgYmUgaW4gb25lIHNoYXJkLgotICAgICAgICBzaW5nbGVfdGhyZWFk
X3Jlc3VsdHMgPSBtYW5hZ2VyLl9zaGFyZF90ZXN0cyh0ZXN0X2xpc3QsIEZhbHNlKQotICAgICAg
ICBtdWx0aV90aHJlYWRfcmVzdWx0cyA9IG1hbmFnZXIuX3NoYXJkX3Rlc3RzKHRlc3RfbGlzdCwg
VHJ1ZSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0ZXN0c190b19odHRwX2xvY2siLCBz
aW5nbGVfdGhyZWFkX3Jlc3VsdHNbMF1bMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhw
ZWN0ZWRfdGVzdHNfdG9faHR0cF9sb2NrLCBzZXQoc2luZ2xlX3RocmVhZF9yZXN1bHRzWzBdWzFd
KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidGVzdHNfdG9faHR0cF9sb2NrIiwgbXVsdGlf
dGhyZWFkX3Jlc3VsdHNbMF1bMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRf
dGVzdHNfdG9faHR0cF9sb2NrLCBzZXQobXVsdGlfdGhyZWFkX3Jlc3VsdHNbMF1bMV0pKQorICAg
ICAgICBzaW5nbGVfbG9ja2VkLCBzaW5nbGVfdW5sb2NrZWQgPSBtYW5hZ2VyLl9zaGFyZF90ZXN0
cyh0ZXN0X2xpc3QsIEZhbHNlKQorICAgICAgICBtdWx0aV9sb2NrZWQsIG11bHRpX3VubG9ja2Vk
ID0gbWFuYWdlci5fc2hhcmRfdGVzdHModGVzdF9saXN0LCBUcnVlKQorCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoInRlc3RzX3RvX2h0dHBfbG9jayIsIHNpbmdsZV9sb2NrZWRbMF1bMF0pCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdGVzdHNfdG9faHR0cF9sb2NrLCBzZXQo
c2luZ2xlX2xvY2tlZFswXVsxXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInRlc3RzX3Rv
X2h0dHBfbG9jayIsIG11bHRpX2xvY2tlZFswXVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChleHBlY3RlZF90ZXN0c190b19odHRwX2xvY2ssIHNldChtdWx0aV9sb2NrZWRbMF1bMV0pKQog
CiAKIGNsYXNzIE5hdHVyYWxDb21wYXJlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99016</attachid>
            <date>2011-06-28 18:11:22 -0700</date>
            <delta_ts>2011-06-29 16:26:00 -0700</delta_ts>
            <desc>add unit tests to ensure locks are dropped promptly</desc>
            <filename>bug-63112-20110628181120.patch</filename>
            <type>text/plain</type>
            <size>12244</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODkzNzMKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA1N2I0Zjc2ZTQ1MWQ0ZGNkY2Y3Y2I2ZmMxNmY0NDIzMTVi
MzVmNTAyLi42OTNiMTdhM2ZjMjMyZGFiZWU1MTQ2YTIyOTEzZGJhNWViYmE4MzEyIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjQg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBucnd0
OiBtYWtlIHNoYXJkaW5nIHRlc3RzIG5lZWRpbmcgbG9ja3MgbGVzcyBoYXJkLWNvZGVkCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzExMgorCisgICAg
ICAgIFRoaXMgY2hhbmdlIGFsc28gY2hhbmdlcyB0aGUgbWFuYWdlciBsb2dpYyBzbyB0aGF0IGl0
IHdpbGwKKyAgICAgICAgZHJvcCB0aGUgc2VydmVyIGxvY2sgYXMgc29vbiBhcyBhbGwgb2YgdGhl
IHNoYXJkcyByZXF1aXJpbmcKKyAgICAgICAgdGhlIGxvY2sgaGF2ZSBjb21wbGV0ZWQuCisKKyAg
ICAgICAgVGhpcyBjaGFuZ2UgaW5jbHVkZXMgc29tZSBtaW5vciBuYW1lc3BhY2UvaW1wb3J0IGNo
YW5nZXMgaW4gdGhlCisgICAgICAgIHVuaXQgdGVzdHMsIGFuZCBhbHNvIG1ha2VzIHRoZSBNYW5h
Z2VyIGEgbmV3LXN0eWxlIG9iamVjdCwgd2hpY2gKKyAgICAgICAgaXQgc2hvdWxkJ3ZlIGJlZW4g
YWxsIGFsb25nLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvbWFuYWdlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3VuaXR0ZXN0LnB5OgorCisyMDExLTA2LTIx
ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIG5yd3Q6IG1vdmUgaHR0cCBsb2NraW5nIGNv
ZGUgaW50byBtYW5hZ2VyCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02MzEwMwogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlci5weQppbmRleCA0OGI4OTI1YTZl
M2UyMGY1NmMyZDBhOGFmZDVjYTNkZmUzZDAyMTJlLi5jZTY2MGEyZTU1NjM5MGQ4MzNhOGEzZTg0
NzRjMGQxOTBhNjRhMTFiIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXIucHkKQEAgLTIzNSw3ICsy
MzUsNyBAQCBjbGFzcyBXb3JrZXJFeGNlcHRpb24oRXhjZXB0aW9uKToKICAgICBwYXNzCiAKIAot
Y2xhc3MgTWFuYWdlcjoKK2NsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAiIiJBIGNsYXNzIGZv
ciBtYW5hZ2luZyBydW5uaW5nIGEgc2VyaWVzIG9mIHRlc3RzIG9uIGEgc2VyaWVzIG9mIGxheW91
dAogICAgIHRlc3QgZmlsZXMuIiIiCiAKQEAgLTI2NCw2ICsyNjQsOCBAQCBjbGFzcyBNYW5hZ2Vy
OgogICAgICAgICBzZWxmLkxBWU9VVF9URVNUU19ESVJFQ1RPUlkgPSAiTGF5b3V0VGVzdHMiICsg
c2VsZi5fZnMuc2VwCiAgICAgICAgIHNlbGYuX2hhc19odHRwX2xvY2sgPSBGYWxzZQogCisgICAg
ICAgIHNlbGYuX3JlbWFpbmluZ19sb2NrZWRfc2hhcmRzID0gW10KKwogICAgICAgICAjIGRpc2Fi
bGUgd3NzIHNlcnZlci4gbmVlZCB0byBpbnN0YWxsIHB5T3BlblNTTCBvbiBidWlsZGJvdHMuCiAg
ICAgICAgICMgc2VsZi5fd2Vic29ja2V0X3NlY3VyZV9zZXJ2ZXIgPSB3ZWJzb2NrZXRfc2VydmVy
LlB5V2ViU29ja2V0KAogICAgICAgICAjICAgICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5
LCB1c2VfdGxzPVRydWUsIHBvcnQ9OTMyMykKQEAgLTU0MCwxNSArNTQyLDEyIEBAIGNsYXNzIE1h
bmFnZXI6CiAgICAgICAgIGNvbmN1cnJlbmN5IGluc3RlYWQgb2YgdHJ5aW5nIHRvIGRvIGFueSBz
b3J0IG9mIHJlYWwgc2hhcmRpbmcuCiAKICAgICAgICAgUmV0dXJuOgotICAgICAgICAgICAgQSBs
aXN0IG9mIGxpc3RzIG9mIFRlc3RJbnB1dCBvYmplY3RzLgorICAgICAgICAgICAgVHdvIGxpc3Rz
IG9mIGxpc3RzIG9mIFRlc3RJbnB1dCBvYmplY3RzLiBUaGUgZmlyc3QgbGlzdCBzaG91bGQKKyAg
ICAgICAgICAgIG9ubHkgYmUgcnVuIHVuZGVyIHRoZSBzZXJ2ZXIgbG9jaywgdGhlIHNlY29uZCBj
YW4gYmUgcnVuIHdoZW5ldmVyLgogICAgICAgICAiIiIKLSAgICAgICAgIyBGSVhNRTogd2hlbiB3
ZSBhZGRlZCBodHRwIGxvY2tpbmcsIHdlIGNoYW5nZWQgaG93IHRoaXMgd29ya3Mgc3VjaAotICAg
ICAgICAjIHRoYXQgd2UgYWx3YXlzIGx1bXAgYWxsIG9mIHRoZSBIVFRQIHRocmVhZHMgaW50byBh
IHNpbmdsZSBzaGFyZC4KLSAgICAgICAgIyBUaGF0IHdpbGwgc2xvdyBkb3duIGV4cGVyaW1lbnRh
bC1mdWxseS1wYXJhbGxlbCwgYnV0IGl0J3MgdW5jbGVhcgotICAgICAgICAjIHdoYXQgdGhlIGJl
c3QgYWx0ZXJuYXRpdmUgaXMgY29tcGxldGVseSByZXZhbXBpbmcgaG93IHdlIHRyYWNrCi0gICAg
ICAgICMgd2hlbiB0byBncmFiIHRoZSBsb2NrLgotCi0gICAgICAgIHRlc3RfbGlzdHMgPSBbXQor
ICAgICAgICAjIEZJWE1FOiBXZSBzdGlsbCBuZWVkIHRvIHN1cHBvcnQgbXVsdGlwbGUgbG9ja2Vk
IHNoYXJkcy4KKyAgICAgICAgbG9ja2VkX3NoYXJkcyA9IFtdCisgICAgICAgIHVubG9ja2VkX3No
YXJkcyA9IFtdCiAgICAgICAgIHRlc3RzX3RvX2h0dHBfbG9jayA9IFtdCiAgICAgICAgIGlmIG5v
dCB1c2VfcmVhbF9zaGFyZHM6CiAgICAgICAgICAgICBmb3IgdGVzdF9maWxlIGluIHRlc3RfZmls
ZXM6CkBAIC01NTYsNyArNTU1LDcgQEAgY2xhc3MgTWFuYWdlcjoKICAgICAgICAgICAgICAgICBp
ZiBzZWxmLl90ZXN0X3JlcXVpcmVzX2xvY2sodGVzdF9maWxlKToKICAgICAgICAgICAgICAgICAg
ICAgdGVzdHNfdG9faHR0cF9sb2NrLmFwcGVuZCh0ZXN0X2lucHV0KQogICAgICAgICAgICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHRlc3RfbGlzdHMuYXBwZW5kKCgiLiIsIFt0ZXN0
X2lucHV0XSkpCisgICAgICAgICAgICAgICAgICAgIHVubG9ja2VkX3NoYXJkcy5hcHBlbmQoKCIu
IiwgW3Rlc3RfaW5wdXRdKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRlc3RzX2J5X2Rp
ciA9IHt9CiAgICAgICAgICAgICBmb3IgdGVzdF9maWxlIGluIHRlc3RfZmlsZXM6CkBAIC01NzAs
MTggKzU2OSwxNSBAQCBjbGFzcyBNYW5hZ2VyOgogICAgICAgICAgICAgZm9yIGRpcmVjdG9yeSBp
biB0ZXN0c19ieV9kaXI6CiAgICAgICAgICAgICAgICAgdGVzdF9saXN0ID0gdGVzdHNfYnlfZGly
W2RpcmVjdG9yeV0KICAgICAgICAgICAgICAgICB0ZXN0X2xpc3RfdHVwbGUgPSAoZGlyZWN0b3J5
LCB0ZXN0X2xpc3QpCi0gICAgICAgICAgICAgICAgdGVzdF9saXN0cy5hcHBlbmQodGVzdF9saXN0
X3R1cGxlKQorICAgICAgICAgICAgICAgIHVubG9ja2VkX3NoYXJkcy5hcHBlbmQodGVzdF9saXN0
X3R1cGxlKQogCiAgICAgICAgICAgICAjIFNvcnQgdGhlIHNoYXJkcyBieSBkaXJlY3RvcnkgbmFt
ZS4KLSAgICAgICAgICAgIHRlc3RfbGlzdHMuc29ydChsYW1iZGEgYSwgYjogY21wKGFbMF0sIGJb
MF0pKQorICAgICAgICAgICAgdW5sb2NrZWRfc2hhcmRzLnNvcnQobGFtYmRhIGEsIGI6IGNtcChh
WzBdLCBiWzBdKSkKIAotICAgICAgICAjIFB1dCB0aGUgaHR0cCB0ZXN0cyBmaXJzdC4gVGhlcmUg
YXJlIG9ubHkgYSBjb3VwbGUgaHVuZHJlZCBvZiB0aGVtLAotICAgICAgICAjIGJ1dCBlYWNoIGh0
dHAgdGVzdCB0YWtlcyBhIHZlcnkgbG9uZyB0aW1lIHRvIHJ1biwgc28gc29ydGluZyBieSB0aGUK
LSAgICAgICAgIyBudW1iZXIgb2YgdGVzdHMgZG9lc24ndCBhY2N1cmF0ZWx5IGNhcHR1cmUgaG93
IGxvbmcgdGhleSB0YWtlIHRvIHJ1bi4KICAgICAgICAgaWYgdGVzdHNfdG9faHR0cF9sb2NrOgot
ICAgICAgICAgICAgdGVzdF9saXN0cy5pbnNlcnQoMCwgKCJ0ZXN0c190b19odHRwX2xvY2siLCB0
ZXN0c190b19odHRwX2xvY2spKQorICAgICAgICAgICAgbG9ja2VkX3NoYXJkcyA9IFsoInRlc3Rz
X3RvX2h0dHBfbG9jayIsIHRlc3RzX3RvX2h0dHBfbG9jayldCiAKLSAgICAgICAgcmV0dXJuIHRl
c3RfbGlzdHMKKyAgICAgICAgcmV0dXJuIChsb2NrZWRfc2hhcmRzLCB1bmxvY2tlZF9zaGFyZHMp
CiAKICAgICBkZWYgX2NvbnRhaW5zX3Rlc3RzKHNlbGYsIHN1YmRpcik6CiAgICAgICAgIGZvciB0
ZXN0X2ZpbGUgaW4gc2VsZi5fdGVzdF9maWxlczoKQEAgLTYyNiwxNSArNjIyLDIzIEBAIGNsYXNz
IE1hbmFnZXI6CiAgICAgICAgIHRocmVhZF90aW1pbmdzID0gW10KIAogICAgICAgICBzZWxmLl9w
cmludGVyLnByaW50X3VwZGF0ZSgnU2hhcmRpbmcgdGVzdHMgLi4uJykKLSAgICAgICAgdGVzdF9s
aXN0cyA9IHNlbGYuX3NoYXJkX3Rlc3RzKGZpbGVfbGlzdCwKKyAgICAgICAgbG9ja2VkX3NoYXJk
cywgdW5sb2NrZWRfc2hhcmRzID0gc2VsZi5fc2hhcmRfdGVzdHMoZmlsZV9saXN0LAogICAgICAg
ICAgICAgaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSA+IDEgYW5kIG5vdCBzZWxm
Ll9vcHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCkKIAotICAgICAgICAjIEZJWE1F
OiB3ZSBuZWVkIGEgbGVzcyBoYXJkLWNvZGVkIHdheSBvZiBmaWd1cmluZyBvdXQgaWYgd2UgbmVl
ZCB0bwotICAgICAgICAjIHN0YXJ0IHRoZSBzZXJ2ZXJzLgotICAgICAgICBpZiB0ZXN0X2xpc3Rz
WzBdWzBdID09ICd0ZXN0c190b19odHRwX2xvY2snOgorICAgICAgICAjIEZJWE1FOiBXZSBkb24n
dCBoYXZlIGEgZ29vZCB3YXkgdG8gY29vcmRpbmF0ZSB0aGUgd29ya2VycyBzbyB0aGF0CisgICAg
ICAgICMgdGhleSBkb24ndCB0cnkgdG8gcnVuIHRoZSBzaGFyZHMgdGhhdCBuZWVkIGEgbG9jayBp
ZiB3ZSBkb24ndCBhY3R1YWxseQorICAgICAgICAjIGhhdmUgdGhlIGxvY2suIFRoZSBlYXNpZXN0
IHNvbHV0aW9uIGF0IHRoZSBtb21lbnQgaXMgdG8gZ3JhYiB0aGUKKyAgICAgICAgIyBsb2NrIGF0
IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJ1biwgYW5kIHRoZW4gcnVuIGFsbCBvZiB0aGUgbG9ja2Vk
CisgICAgICAgICMgc2hhcmRzIGZpcnN0LiBUaGlzIG1pbmltaXplcyB0aGUgdGltZSBzcGVudCBo
b2xkaW5nIHRoZSBsb2NrLCBidXQKKyAgICAgICAgIyBtZWFucyB0aGF0IHdlIHdvbid0IGJlIHJ1
bm5pbmcgdGVzdHMgd2hpbGUgd2UncmUgd2FpdGluZyBmb3IgdGhlIGxvY2suCisgICAgICAgICMg
SWYgdGhpcyBiZWNvbWVzIGEgcHJvYmxlbSBpbiBwcmFjdGljZSB3ZSdsbCBuZWVkIHRvIGNoYW5n
ZSB0aGlzLgorCisgICAgICAgIGFsbF9zaGFyZHMgPSBsb2NrZWRfc2hhcmRzICsgdW5sb2NrZWRf
c2hhcmRzCisgICAgICAgIHNlbGYuX3JlbWFpbmluZ19sb2NrZWRfc2hhcmRzID0gbG9ja2VkX3No
YXJkcworICAgICAgICBpZiBsb2NrZWRfc2hhcmRzOgogICAgICAgICAgICAgc2VsZi5zdGFydF9z
ZXJ2ZXJzX3dpdGhfbG9jaygpCiAKLSAgICAgICAgbnVtX3dvcmtlcnMgPSBzZWxmLl9udW1fd29y
a2VycyhsZW4odGVzdF9saXN0cykpCisgICAgICAgIG51bV93b3JrZXJzID0gc2VsZi5fbnVtX3dv
cmtlcnMobGVuKGFsbF9zaGFyZHMpKQogICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24gPSBtYW5h
Z2VyX3dvcmtlcl9icm9rZXIuZ2V0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgd29y
a2VyLldvcmtlcikKIApAQCAtNjU2LDggKzY2MCw4IEBAIGNsYXNzIE1hbmFnZXI6CiAgICAgICAg
ICAgICB0aW1lLnNsZWVwKDAuMSkKIAogICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0
ZSgiU3RhcnRpbmcgdGVzdGluZyAuLi4iKQotICAgICAgICBmb3IgdGVzdF9saXN0IGluIHRlc3Rf
bGlzdHM6Ci0gICAgICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCd0ZXN0
X2xpc3QnLCB0ZXN0X2xpc3RbMF0sIHRlc3RfbGlzdFsxXSkKKyAgICAgICAgZm9yIHNoYXJkIGlu
IGFsbF9zaGFyZHM6CisgICAgICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdl
KCd0ZXN0X2xpc3QnLCBzaGFyZFswXSwgc2hhcmRbMV0pCiAKICAgICAgICAgIyBXZSBwb3N0IG9u
ZSAnc3RvcCcgbWVzc2FnZSBmb3IgZWFjaCB3b3JrZXIuIEJlY2F1c2UgdGhlIHN0b3AgbWVzc2Fn
ZQogICAgICAgICAjIGFyZSBzZW50IGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMsIGFuZCBiZWNhdXNl
IGVhY2ggd29ya2VyIHdpbGwgc3RvcApAQCAtMTM1NCw2ICsxMzU4LDE4IEBAIGNsYXNzIE1hbmFn
ZXI6CiAgICAgZGVmIGhhbmRsZV9maW5pc2hlZF9saXN0KHNlbGYsIHNvdXJjZSwgbGlzdF9uYW1l
LCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSk6CiAgICAgICAgIHNlbGYuX2dyb3VwX3N0YXRzW2xp
c3RfbmFtZV0gPSAobnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpCiAKKyAgICAgICAgZGVmIGZpbmQo
bmFtZSwgdGVzdF9saXN0cyk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4odGVzdF9s
aXN0cykpOgorICAgICAgICAgICAgICAgIGlmIHRlc3RfbGlzdHNbaV1bMF0gPT0gbmFtZToKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGkKKyAgICAgICAgICAgIHJldHVybiAtMQorCisgICAg
ICAgIGluZGV4ID0gZmluZChsaXN0X25hbWUsIHNlbGYuX3JlbWFpbmluZ19sb2NrZWRfc2hhcmRz
KQorICAgICAgICBpZiBpbmRleCA+PSAwOgorICAgICAgICAgICAgc2VsZi5fcmVtYWluaW5nX2xv
Y2tlZF9zaGFyZHMucG9wKGluZGV4KQorICAgICAgICAgICAgaWYgbm90IHNlbGYuX3JlbWFpbmlu
Z19sb2NrZWRfc2hhcmRzOgorICAgICAgICAgICAgICAgIHNlbGYuc3RvcF9zZXJ2ZXJzX3dpdGhf
bG9jaygpCisKICAgICBkZWYgaGFuZGxlX2ZpbmlzaGVkX3Rlc3Qoc2VsZiwgc291cmNlLCByZXN1
bHQsIGVsYXBzZWRfdGltZSk6CiAgICAgICAgIHdvcmtlcl9zdGF0ZSA9IHNlbGYuX3dvcmtlcl9z
dGF0ZXNbc291cmNlXQogICAgICAgICB3b3JrZXJfc3RhdGUubmV4dF90aW1lb3V0ID0gTm9uZQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvbWFuYWdlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL21hbmFnZXJfdW5pdHRlc3QucHkKaW5kZXggNGQxMTQyNjM0
Njc2OTIxMmM2MTc2NjYyYTFmYzUzYjkxYjg3M2MwMC4uNDFkZTI1YmM0ZTIyNDZlMTU4ZDAwMjkz
YWY0ZmZiMjE3OTgxNGUyMiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWFuYWdlcl91bml0dGVzdC5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tYW5hZ2VyX3VuaXR0
ZXN0LnB5CkBAIC0yOCwxNyArMjgsMjIgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAKLSIiIlVuaXQgdGVzdHMgZm9yIG1hbmFnZXIuTWFuYWdlcigpLiIiIgorIiIiVW5pdCB0ZXN0
cyBmb3IgbWFuYWdlci5weS4iIiIKIAoraW1wb3J0IFN0cmluZ0lPCiBpbXBvcnQgdW5pdHRlc3QK
IAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBmaWxlc3lzdGVtX21vY2sKK2Zy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgb3V0cHV0Y2FwdHVyZQogZnJvbSB3ZWJr
aXRweS50aGlyZHBhcnR5Lm1vY2sgaW1wb3J0IE1vY2sKIAotZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1hbmFnZXIKK2Zyb20gd2Via2l0cHkgaW1wb3J0
IGxheW91dF90ZXN0cworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHJ1bl93ZWJr
aXRfdGVzdHMKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlLm1hbmFn
ZXIgaW1wb3J0IE1hbmFnZXIsIG5hdHVyYWxfc29ydF9rZXksIHBhdGhfa2V5Citmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgcHJpbnRpbmcKIAogCi1jbGFz
cyBNYW5hZ2VyV3JhcHBlcihtYW5hZ2VyLk1hbmFnZXIpOgorY2xhc3MgTWFuYWdlcldyYXBwZXIo
TWFuYWdlcik6CiAgICAgZGVmIF9nZXRfdGVzdF9pbnB1dF9mb3JfZmlsZShzZWxmLCB0ZXN0X2Zp
bGUpOgogICAgICAgICByZXR1cm4gdGVzdF9maWxlCiAKQEAgLTcwLDE5ICs3NSw1MSBAQCBjbGFz
cyBNYW5hZ2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgJ0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3VwcG9ydGVkLXhtbC1jb250ZW50LXR5cGVzLmh0
bWwnLAogICAgICAgICBdKQogCi0gICAgICAgICMgRklYTUU6IElkZWFsbHkgdGhlIEhUVFAgdGVz
dHMgZG9uJ3QgaGF2ZSB0byBhbGwgYmUgaW4gb25lIHNoYXJkLgotICAgICAgICBzaW5nbGVfdGhy
ZWFkX3Jlc3VsdHMgPSBtYW5hZ2VyLl9zaGFyZF90ZXN0cyh0ZXN0X2xpc3QsIEZhbHNlKQotICAg
ICAgICBtdWx0aV90aHJlYWRfcmVzdWx0cyA9IG1hbmFnZXIuX3NoYXJkX3Rlc3RzKHRlc3RfbGlz
dCwgVHJ1ZSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0ZXN0c190b19odHRwX2xvY2si
LCBzaW5nbGVfdGhyZWFkX3Jlc3VsdHNbMF1bMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
ZXhwZWN0ZWRfdGVzdHNfdG9faHR0cF9sb2NrLCBzZXQoc2luZ2xlX3RocmVhZF9yZXN1bHRzWzBd
WzFdKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidGVzdHNfdG9faHR0cF9sb2NrIiwgbXVs
dGlfdGhyZWFkX3Jlc3VsdHNbMF1bMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0
ZWRfdGVzdHNfdG9faHR0cF9sb2NrLCBzZXQobXVsdGlfdGhyZWFkX3Jlc3VsdHNbMF1bMV0pKQor
ICAgICAgICBzaW5nbGVfbG9ja2VkLCBzaW5nbGVfdW5sb2NrZWQgPSBtYW5hZ2VyLl9zaGFyZF90
ZXN0cyh0ZXN0X2xpc3QsIEZhbHNlKQorICAgICAgICBtdWx0aV9sb2NrZWQsIG11bHRpX3VubG9j
a2VkID0gbWFuYWdlci5fc2hhcmRfdGVzdHModGVzdF9saXN0LCBUcnVlKQorCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoInRlc3RzX3RvX2h0dHBfbG9jayIsIHNpbmdsZV9sb2NrZWRbMF1bMF0p
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdGVzdHNfdG9faHR0cF9sb2NrLCBz
ZXQoc2luZ2xlX2xvY2tlZFswXVsxXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInRlc3Rz
X3RvX2h0dHBfbG9jayIsIG11bHRpX2xvY2tlZFswXVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChleHBlY3RlZF90ZXN0c190b19odHRwX2xvY2ssIHNldChtdWx0aV9sb2NrZWRbMF1bMV0p
KQorCisgICAgZGVmIHRlc3RfaHR0cF9sb2NraW5nKHRlc3Rlcik6CisgICAgICAgIGNsYXNzIExv
Y2tDaGVja2luZ01hbmFnZXIoTWFuYWdlcik6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2Vs
ZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlcik6CisgICAgICAgICAgICAgICAgc3VwZXIoTG9ja0No
ZWNraW5nTWFuYWdlciwgc2VsZikuX19pbml0X18ocG9ydCwgb3B0aW9ucywgcHJpbnRlcikKKyAg
ICAgICAgICAgICAgICBzZWxmLl9maW5pc2hlZF9saXN0X2NhbGxlZCA9IEZhbHNlCisKKyAgICAg
ICAgICAgIGRlZiBoYW5kbGVfZmluaXNoZWRfbGlzdChzZWxmLCBzb3VyY2UsIGxpc3RfbmFtZSwg
bnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9m
aW5pc2hlZF9saXN0X2NhbGxlZDoKKyAgICAgICAgICAgICAgICAgICAgdGVzdGVyLmFzc2VydEVx
dWFscyhsaXN0X25hbWUsICd0ZXN0c190b19odHRwX2xvY2snKQorICAgICAgICAgICAgICAgICAg
ICB0ZXN0ZXIuYXNzZXJ0VHJ1ZShzZWxmLl9yZW1haW5pbmdfbG9ja2VkX3NoYXJkcykKKyAgICAg
ICAgICAgICAgICAgICAgdGVzdGVyLmFzc2VydFRydWUoc2VsZi5faGFzX2h0dHBfbG9jaykKKwor
ICAgICAgICAgICAgICAgIHN1cGVyKExvY2tDaGVja2luZ01hbmFnZXIsIHNlbGYpLmhhbmRsZV9m
aW5pc2hlZF9saXN0KHNvdXJjZSwgbGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSkK
KworICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9maW5pc2hlZF9saXN0X2NhbGxlZDoKKyAg
ICAgICAgICAgICAgICAgICAgdGVzdGVyLmFzc2VydEVxdWFscyhzZWxmLl9yZW1haW5pbmdfbG9j
a2VkX3NoYXJkcywgW10pCisgICAgICAgICAgICAgICAgICAgIHRlc3Rlci5hc3NlcnRGYWxzZShz
ZWxmLl9oYXNfaHR0cF9sb2NrKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9maW5pc2hlZF9s
aXN0X2NhbGxlZCA9IFRydWUKKworICAgICAgICBvcHRpb25zLCBhcmdzID0gcnVuX3dlYmtpdF90
ZXN0cy5wYXJzZV9hcmdzKFsnLS1wbGF0Zm9ybT10ZXN0JywgJy0tcHJpbnQ9bm90aGluZycsICdo
dHRwL3Rlc3RzL3Bhc3NlcycsICdwYXNzZXMnXSkKKyAgICAgICAgcG9ydCA9IGxheW91dF90ZXN0
cy5wb3J0LmdldChwb3J0X25hbWU9b3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucz1vcHRpb25zKQor
ICAgICAgICBydW5fd2Via2l0X3Rlc3RzLl9zZXRfdXBfZGVyaXZlZF9vcHRpb25zKHBvcnQsIG9w
dGlvbnMpCisgICAgICAgIHByaW50ZXIgPSBwcmludGluZy5QcmludGVyKHBvcnQsIG9wdGlvbnMs
IFN0cmluZ0lPLlN0cmluZ0lPKCksIFN0cmluZ0lPLlN0cmluZ0lPKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZV9sb2dnaW5nPVRydWUpCisgICAgICAgIG1h
bmFnZXIgPSBMb2NrQ2hlY2tpbmdNYW5hZ2VyKHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpCisgICAg
ICAgIG1hbmFnZXIuY29sbGVjdF90ZXN0cyhhcmdzLCBbXSkKKyAgICAgICAgbWFuYWdlci5wYXJz
ZV9leHBlY3RhdGlvbnMoKQorICAgICAgICByZXN1bHRfc3VtbWFyeSA9IG1hbmFnZXIuc2V0X3Vw
X3J1bigpCisgICAgICAgIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMgPSBtYW5hZ2VyLnJ1bihyZXN1
bHRfc3VtbWFyeSkKKyAgICAgICAgbWFuYWdlci5jbGVhbl91cF9ydW4oKQorICAgICAgICBwcmlu
dGVyLmNsZWFudXAoKQorICAgICAgICB0ZXN0ZXIuYXNzZXJ0RXF1YWxzKG51bV91bmV4cGVjdGVk
X3Jlc3VsdHMsIDApCiAKIAogY2xhc3MgTmF0dXJhbENvbXBhcmVUZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKICAgICBkZWYgYXNzZXJ0X2NtcChzZWxmLCB4LCB5LCByZXN1bHQpOgotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhjbXAobWFuYWdlci5uYXR1cmFsX3NvcnRfa2V5KHgpLCBtYW5hZ2Vy
Lm5hdHVyYWxfc29ydF9rZXkoeSkpLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KGNtcChuYXR1cmFsX3NvcnRfa2V5KHgpLCBuYXR1cmFsX3NvcnRfa2V5KHkpKSwgcmVzdWx0KQog
CiAgICAgZGVmIHRlc3RfbmF0dXJhbF9jb21wYXJlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2Vy
dF9jbXAoJ2EnLCAnYScsIDApCkBAIC0xMDcsNyArMTQ0LDcgQEAgY2xhc3MgUGF0aENvbXBhcmVU
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5maWxlc3lzdGVtID0gZmlsZXN5
c3RlbV9tb2NrLk1vY2tGaWxlU3lzdGVtKCkKIAogICAgIGRlZiBwYXRoX2tleShzZWxmLCBrKToK
LSAgICAgICAgcmV0dXJuIG1hbmFnZXIucGF0aF9rZXkoc2VsZi5maWxlc3lzdGVtLCBrKQorICAg
ICAgICByZXR1cm4gcGF0aF9rZXkoc2VsZi5maWxlc3lzdGVtLCBrKQogCiAgICAgZGVmIGFzc2Vy
dF9jbXAoc2VsZiwgeCwgeSwgcmVzdWx0KToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY21w
KHNlbGYucGF0aF9rZXkoeCksIHNlbGYucGF0aF9rZXkoeSkpLCByZXN1bHQpCg==
</data>
<flag name="review"
          id="93398"
          type_id="1"
          status="+"
          setter="ojan"
    />
          </attachment>
      

    </bug>

</bugzilla>