<?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>64564</bug_id>
          
          <creation_ts>2011-07-14 15:10:33 -0700</creation_ts>
          <short_desc>[NRWT] Add support for --no-http</short_desc>
          <delta_ts>2011-07-15 18:13:34 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</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>
          
          <blocked>34984</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Julien Chaffraix">jchaffraix</reporter>
          <assigned_to name="Julien Chaffraix">jchaffraix</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>437353</commentid>
    <comment_count>0</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-07-14 15:10:33 -0700</bug_when>
    <thetext>This is a missing option from old-run-webkit-test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437360</commentid>
    <comment_count>1</comment_count>
      <attachid>100872</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-07-14 15:19:01 -0700</bug_when>
    <thetext>Created attachment 100872
Proposed implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437575</commentid>
    <comment_count>2</comment_count>
      <attachid>100872</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-14 23:07:36 -0700</bug_when>
    <thetext>Comment on attachment 100872
Proposed implementation

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

This looks great except for the web socket server issue!

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:356
&gt; +        httpTests = set()

httpTests =&gt; http_tests (Python PEP8 style uses unix_hacke style names)

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:358
&gt; +            if test.find(self.HTTP_SUBDIR, 0) is not -1:

This looks like a really elaborate &quot;test.startswith(self.HTTP_SUBDIR)&quot;

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:394
&gt; +        # Remove HTTP test if option set up.

This comment can be removed.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:956
&gt; +            self._printer.print_update(&apos;Starting WebSocket server ...&apos;)
&gt; +            self._port.start_websocket_server()

Presumably we should still start the web socket server even if we&apos;re not going to run HTTP tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437801</commentid>
    <comment_count>3</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-07-15 09:46:16 -0700</bug_when>
    <thetext>&gt; &gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:358
&gt; &gt; +            if test.find(self.HTTP_SUBDIR, 0) is not -1:
&gt; 
&gt; This looks like a really elaborate &quot;test.startswith(self.HTTP_SUBDIR)&quot;

It is not. It started as such but if you look at the test case, we make sure to ignore any test in platform/test/http/ (chromium has some of those).

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:956
&gt; &gt; +            self._printer.print_update(&apos;Starting WebSocket server ...&apos;)
&gt; &gt; +            self._port.start_websocket_server()
&gt; 
&gt; Presumably we should still start the web socket server even if we&apos;re not going to run HTTP tests.

Good catch, the problem with that is that you would have to also grab the HTTP lock too to serialize 2 instances of NRWT running at the same time. ORWT did not make any difference between websockets and HTTP tests as they would live inside the http/ directory. Also we would not run the websockets tests in http/ with this change anyway so better IMHO to just add those tests to the skipped list too and not start the server. Any objections?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437868</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-07-15 11:52:04 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; &gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:358
&gt; &gt; &gt; +            if test.find(self.HTTP_SUBDIR, 0) is not -1:
&gt; &gt; 
&gt; &gt; This looks like a really elaborate &quot;test.startswith(self.HTTP_SUBDIR)&quot;
&gt; 
&gt; It is not. It started as such but if you look at the test case, we make sure to ignore any test in platform/test/http/ (chromium has some of those).

There is also always re.search(self.http_subdir, test) of course.  Not sure if that helps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437881</commentid>
    <comment_count>5</comment_count>
      <attachid>101021</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-07-15 12:01:52 -0700</bug_when>
    <thetext>Created attachment 101021
Proposed fix 2: Also don&apos;t run websocket tests and take Adam&apos;s comments into account.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437890</commentid>
    <comment_count>6</comment_count>
      <attachid>101021</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-07-15 12:11:42 -0700</bug_when>
    <thetext>Comment on attachment 101021
Proposed fix 2: Also don&apos;t run websocket tests and take Adam&apos;s comments into account.

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

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:283
&gt; +        self.HTTP_SUBDIR = &apos;http&apos; + port.TEST_PATH_SEPARATOR
&gt; +        self.WEBSOCKET_SUBDIR = &apos;websocket&apos; + port.TEST_PATH_SEPARATOR

I&apos;ve never understood why these need separartors in their names at all.  I&apos;m not sure why the original author added them that way.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:359
&gt; +    def _get_http_tests(self):

We don&apos;t use _get_ in names (like our c++ style).  Some of the other code from this file is inherited from chromium and doesn&apos;t match our python style correctly.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:361
&gt; +        &quot;&quot;&quot; Returns all the HTTP tests of HTTP. Returns a set containing
&gt; +        them. &quot;&quot;&quot;

This doens&apos;t actually add anything and should be removed.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:367
&gt; +        http_tests = set()
&gt; +        for test in self._test_files:
&gt; +            if self.HTTP_SUBDIR in test or self.WEBSOCKET_SUBDIR in test:
&gt; +                http_tests.add(test)
&gt; +
&gt; +        return http_tests

This can easily be written as:

return set([test for test in self._test_files if self.HTTP_SUBDIR in test or self.WEBSOCKET_SUBDIR in test])

You could even use filter/lambda if you wanted to shorten the line:

is_http_test = lamdba test: self.WEBSOCKET_SUBDIR in test or self.WEBSOCKET_SUBDIR in test
return set(filter(is_http_test, self._test_files))

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:401
&gt; +            skipped = self._get_http_tests()

Seems you should add/union here for future-proofness of your code.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:405
&gt; +            skipped = skipped.union(self._expectations.get_tests_with_result_type(
&gt; +                           test_expectations.SKIP))

Like webkit C++ code, our python doesn&apos;t follow any wrapping rule.  We only wrap to aid in readability. :)  Which for better or worse 80c doen&apos;st count as doing. :)

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:412
&gt; +        if len(skipped):
&gt; +            self._test_files -= skipped

This can also be if skipped: since bool([]) is false.  But it doesn&apos;t really matter.  I&apos;m also surprised you even need to test. Why doesn&apos;t self._test_files -= set() just work?

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:955
&gt; +        if self._options.http:

Better to early-return instead of indenting the whole function.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:201
&gt; +        port = layout_tests.port.get(port_name=options.platform, options=options)

You should be sure to pass a MockFileSystem and MockExectuive to the get() method.  It&apos;s sadly confusing, but otherwise you&apos;ll end up talking to the real filesystem which is bad. :)  Maybe we need a make_port() helper for this class?

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:204
&gt; +        printer = printing.Printer(port, options, StringIO.StringIO(), StringIO.StringIO(),
&gt; +                                   configure_logging=True)

No need to wrap.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:240
&gt; +        manager.clean_up_run()
&gt; +        printer.cleanup()

I guess manager/printer don&apos;t understand __entered__, __exited__ so can&apos;t we used with &apos;with&apos; for auto-cleanup?

&gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:158
&gt; +    if not options.http and options.force:
&gt; +        warnings.append(&quot;--no-http is ignored since --force is also provided&quot;)
&gt; +        options.http = True

What does --force do?  I&apos;m confused by this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437981</commentid>
    <comment_count>7</comment_count>
      <attachid>101021</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-07-15 14:25:46 -0700</bug_when>
    <thetext>Comment on attachment 101021
Proposed fix 2: Also don&apos;t run websocket tests and take Adam&apos;s comments into account.

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:283
&gt;&gt; +        self.WEBSOCKET_SUBDIR = &apos;websocket&apos; + port.TEST_PATH_SEPARATOR
&gt; 
&gt; I&apos;ve never understood why these need separartors in their names at all.  I&apos;m not sure why the original author added them that way.

This code as originally written was looking for &quot;LayoutTests/http/&quot;. I removed the &quot;LayoutTests&quot; part when I converted to &quot;test_names&quot;. I thought I had deleted the first separator as well, but I must&apos;ve missed that.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:367
&gt;&gt; +        return http_tests
&gt; 
&gt; This can easily be written as:
&gt; 
&gt; return set([test for test in self._test_files if self.HTTP_SUBDIR in test or self.WEBSOCKET_SUBDIR in test])
&gt; 
&gt; You could even use filter/lambda if you wanted to shorten the line:
&gt; 
&gt; is_http_test = lamdba test: self.WEBSOCKET_SUBDIR in test or self.WEBSOCKET_SUBDIR in test
&gt; return set(filter(is_http_test, self._test_files))

see the code on line 541, which tests the string &apos;http&apos; instead of the constants. Can you update that code in this patch as well, to be consistent? It might be best to rewrite test_requires_http_lock() as is_http_test() or is_websocket_test().

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:955
&gt;&gt; +        if self._options.http:
&gt; 
&gt; Better to early-return instead of indenting the whole function.

You shouldn&apos;t need this check at all. start_servers_with_lock() shouldn&apos;t be called if you don&apos;t have any http or websocket tests.

&gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:655
&gt; +        self.assertTrue(passing_run([&apos;--http&apos;]))

Look at test_dryrun or another test in this file that calls get_tests_run().

Personally, I would write tests here that actually test whether the http/* tests are run, and skip the unit tests in manager_unittest.py . The reason is that tests here are integration/functional tests, and it&apos;s much clearer what the test is doing and what the correct response would be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438036</commentid>
    <comment_count>8</comment_count>
      <attachid>101060</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-07-15 15:50:34 -0700</bug_when>
    <thetext>Created attachment 101060
Proposed fix 3: With more python-ness thanks to Eric &amp; Dirk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438039</commentid>
    <comment_count>9</comment_count>
      <attachid>101060</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-07-15 15:58:03 -0700</bug_when>
    <thetext>Comment on attachment 101060
Proposed fix 3: With more python-ness thanks to Eric &amp; Dirk.

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

Looks great; just a few nits. Thanks for fixing this!

&gt; Tools/Scripts/webkitpy/layout_tests/port/test.py:181
&gt; +    # For --no-http tests.

Nit: I might be a bit more verbose and note that we test to make sure platform-specific http tests are skipped as well.

&gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:654
&gt; +        self.assertTrue(passing_run([&apos;--no-http&apos;]))

Nit: I wouldn&apos;t bother with this since you have test_no_http(), below.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438050</commentid>
    <comment_count>10</comment_count>
      <attachid>101066</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-07-15 16:23:33 -0700</bug_when>
    <thetext>Created attachment 101066
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438091</commentid>
    <comment_count>11</comment_count>
      <attachid>101066</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-15 18:11:13 -0700</bug_when>
    <thetext>Comment on attachment 101066
Patch for landing

Clearing flags on attachment: 101066

Committed r91136: &lt;http://trac.webkit.org/changeset/91136&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438092</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-15 18:11:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438094</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-07-15 18:13:34 -0700</bug_when>
    <thetext>Thank you!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100872</attachid>
            <date>2011-07-14 15:19:01 -0700</date>
            <delta_ts>2011-07-15 12:01:49 -0700</delta_ts>
            <desc>Proposed implementation</desc>
            <filename>bug-64564-20110714151900.patch</filename>
            <type>text/plain</type>
            <size>11094</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA5MjcKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiYzE4OWY0Y2M4MTg4NjY4N2Y3YjY2NjAwYmZlNGU0OTVi
MmRlNjI5Li4xNGRlNDY5MjhhNjU4OTJkYmQ0NDhhMmMyYzFmYjkxMWU2NGM5ZmQ2IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMTEtMDctMTQgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+
CisKKyAgICAgICAgW05SV1RdIEFkZCBzdXBwb3J0IGZvciAtLW5vLWh0dHAKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NTY0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgLS1u
by1odHRwLiBJdCBtYXRjaGVzIHRoZSBvbGQtcnVuLXdlYmtpdC10ZXN0cworICAgICAgICBiZWhh
dmlvciBpZiAtLWZvcmNlIGlzIHVzZWQuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5OgorICAgICAgICBGaXhlZCBIVFRQX1NV
QkRJUiBhbmQgV0VCU09DS0VUX1NVQkRJUiBhcyB0ZXN0cyBkbyBub3Qgc3RhcnQgd2l0aCBhIGxl
YWRpbmcgc2VwYXJhdG9yLgorICAgICAgICBXZSBjaGVjayBpZiAtLW5vLWh0dHAgaXMgc2V0IGFu
ZCBhZGQgdGhlIEhUVFAgdGVzdHMgdG8gdGhlIHNraXBwZWQgbGlzdCBwcmlvciB0byBsb29raW5n
CisgICAgICAgIGF0IHRoZSBleHBlY3RhdGlvbiBmaWxlLiBJZiB3ZSBkb24ndCBydW4gSFRUUCwg
d2UgZG9uJ3QgZ3JhYiB0aGUgZGlmZmVyZW50IGxvY2tzLgorCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl91bml0dGVzdC5weTogQWRk
ZWQgdGVzdCBmb3IgdGhlIG5ldyBiZWhhdmlvcgorICAgICAgICAobm90IGdyYWJpbmcgdGhlIGxv
Y2sgYW5kIG5vdCBhZGRpbmcgdGhlIHRlc3RzIHRvIHRoZSBsb2NrZWRfc2hhcmRzIGlmIC0tbm8t
aHR0cCBpcyB1c2VkKS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3J1bl93ZWJraXRfdGVzdHMucHk6IEFkZGVkIHRoZSAtLW5vLWh0dHAgYW5kIC0taHR0cCBvcHRp
b25zIGFzCisgICAgICAgIHdlbGwgYXMgdGhlIGludGVyYWN0aW9uIHdpdGggLS1mb3JjZSB0byBt
YWtlIG9sZC1ydW4td2Via2l0LXRlc3RzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHk6IENoZWNrIHRo
YXQgdGhlIG5ldyBvcHRpb25zCisgICAgICAgIGFyZSBhY2NlcHRlZC4KKwogMjAxMS0wNy0xMiAg
UGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10g
bWVkaWEvbWVkaWEtYmxvY2tlZC1ieS13aWxsc2VuZHJlcXVlc3QuaHRtbCBmYWlscwpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFu
YWdlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJz
L21hbmFnZXIucHkKaW5kZXggNWZkZjJiMDVhZGMwMzU3ODY2ZjU3NmM0Y2ExZjZmMzFhYjU2ZWRl
NC4uZmFlYjdkNDQ2NGQyMzZlMjE3ODIxMWI1MGU4YmI4NTM2OTZkMmJkYSAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9t
YW5hZ2VyLnB5CkBAIC0yNzMsOCArMjczLDggQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAg
ICAgICBzZWxmLl9tZXNzYWdlX2Jyb2tlciA9IE5vbmUKICAgICAgICAgc2VsZi5fZXhwZWN0YXRp
b25zID0gTm9uZQogCi0gICAgICAgIHNlbGYuSFRUUF9TVUJESVIgPSBwb3J0LlRFU1RfUEFUSF9T
RVBBUkFUT1IgKyAnaHR0cCcgKyBwb3J0LlRFU1RfUEFUSF9TRVBBUkFUT1IKLSAgICAgICAgc2Vs
Zi5XRUJTT0NLRVRfU1VCRElSID0gcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SICsgJ3dlYnNvY2tl
dCcgKyBwb3J0LlRFU1RfUEFUSF9TRVBBUkFUT1IKKyAgICAgICAgc2VsZi5IVFRQX1NVQkRJUiA9
ICdodHRwJyArIHBvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUgorICAgICAgICBzZWxmLldFQlNPQ0tF
VF9TVUJESVIgPSAnd2Vic29ja2V0JyArIHBvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUgogICAgICAg
ICBzZWxmLkxBWU9VVF9URVNUU19ESVJFQ1RPUlkgPSAnTGF5b3V0VGVzdHMnCiAgICAgICAgIHNl
bGYuX2hhc19odHRwX2xvY2sgPSBGYWxzZQogCkBAIC0zNTAsNiArMzUwLDE3IEBAIGNsYXNzIE1h
bmFnZXIob2JqZWN0KToKICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMubGludF90ZXN0X2ZpbGVz
LAogICAgICAgICAgICAgcG9ydC50ZXN0X2V4cGVjdGF0aW9uc19vdmVycmlkZXMoKSkKIAorICAg
IGRlZiBfZ2V0X2h0dHBfdGVzdHMoc2VsZik6CisgICAgICAgICIiIiBSZXR1cm5zIGFsbCB0aGUg
SFRUUCB0ZXN0cyBvZiBIVFRQLiBSZXR1cm5zIGEgc2V0IGNvbnRhaW5pbmcKKyAgICAgICAgdGhl
bS4gIiIiCisgICAgICAgIGh0dHBUZXN0cyA9IHNldCgpCisgICAgICAgIGZvciB0ZXN0IGluIHNl
bGYuX3Rlc3RfZmlsZXM6CisgICAgICAgICAgICBpZiB0ZXN0LmZpbmQoc2VsZi5IVFRQX1NVQkRJ
UiwgMCkgaXMgbm90IC0xOgorICAgICAgICAgICAgICAgIGh0dHBUZXN0cy5hZGQodGVzdCkKKwor
ICAgICAgICByZXR1cm4gaHR0cFRlc3RzCisKKwogICAgIGRlZiBwYXJzZV9leHBlY3RhdGlvbnMo
c2VsZik6CiAgICAgICAgICIiIlBhcnNlIHRoZSBleHBlY3RhdGlvbnMgZnJvbSB0aGUgdGVzdF9s
aXN0IGZpbGVzIGFuZCByZXR1cm4gYSBkYXRhCiAgICAgICAgIHN0cnVjdHVyZSBob2xkaW5nIHRo
ZW0uIFRocm93cyBhbiBlcnJvciBpZiB0aGUgdGVzdF9saXN0IGZpbGVzIGhhdmUKQEAgLTM3OSwx
NSArMzkwLDIyIEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgICAgIHJldHVybiBO
b25lCiAKICAgICAgICAgc2tpcHBlZCA9IHNldCgpCisKKyAgICAgICAgIyBSZW1vdmUgSFRUUCB0
ZXN0IGlmIG9wdGlvbiBzZXQgdXAuCisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLmh0dHA6
CisgICAgICAgICAgICBza2lwcGVkID0gc2VsZi5fZ2V0X2h0dHBfdGVzdHMoKQorCiAgICAgICAg
IGlmIG51bV9hbGxfdGVzdF9maWxlcyA+IDEgYW5kIG5vdCBzZWxmLl9vcHRpb25zLmZvcmNlOgot
ICAgICAgICAgICAgc2tpcHBlZCA9IHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfdGVzdHNfd2l0aF9y
ZXN1bHRfdHlwZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25z
LlNLSVApCi0gICAgICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzIC09IHNraXBwZWQKKyAgICAgICAg
ICAgIHNraXBwZWQgPSBza2lwcGVkLnVuaW9uKHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfdGVzdHNf
d2l0aF9yZXN1bHRfdHlwZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0
YXRpb25zLlNLSVApKQogICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5za2lwX2ZhaWxpbmdf
dGVzdHM6CiAgICAgICAgICAgICAgICAgZmFpbGluZyA9IHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRf
dGVzdHNfd2l0aF9yZXN1bHRfdHlwZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZXN0X2V4cGVjdGF0aW9ucy5GQUlMKQogICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXMg
LT0gZmFpbGluZwogCisgICAgICAgIGlmIGxlbihza2lwcGVkKToKKyAgICAgICAgICAgIHNlbGYu
X3Rlc3RfZmlsZXMgLT0gc2tpcHBlZAorCiAgICAgICAgICMgQ3JlYXRlIGEgc29ydGVkIGxpc3Qg
b2YgdGVzdCBmaWxlcyBzbyB0aGUgc3Vic2V0IGNodW5rLAogICAgICAgICAjIGlmIHVzZWQsIGNv
bnRhaW5zIGFscGhhYmV0aWNhbGx5IGNvbnNlY3V0aXZlIHRlc3RzLgogICAgICAgICBzZWxmLl90
ZXN0X2ZpbGVzX2xpc3QgPSBsaXN0KHNlbGYuX3Rlc3RfZmlsZXMpCkBAIC05MjksMTMgKzk0Nywx
NCBAQCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgIHJldHVybiB1bmV4cGVjdGVkX3Jl
c3VsdHNbJ251bV9yZWdyZXNzaW9ucyddCiAKICAgICBkZWYgc3RhcnRfc2VydmVyc193aXRoX2xv
Y2soc2VsZik6Ci0gICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdBY3F1aXJpbmcg
aHR0cCBsb2NrIC4uLicpCi0gICAgICAgIHNlbGYuX3BvcnQuYWNxdWlyZV9odHRwX2xvY2soKQot
ICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgSFRUUCBzZXJ2ZXIg
Li4uJykKLSAgICAgICAgc2VsZi5fcG9ydC5zdGFydF9odHRwX3NlcnZlcigpCi0gICAgICAgIHNl
bGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyBXZWJTb2NrZXQgc2VydmVyIC4uLicp
Ci0gICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfd2Vic29ja2V0X3NlcnZlcigpCi0gICAgICAgIHNl
bGYuX2hhc19odHRwX2xvY2sgPSBUcnVlCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuaHR0cDoK
KyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdBY3F1aXJpbmcgaHR0cCBs
b2NrIC4uLicpCisgICAgICAgICAgICBzZWxmLl9wb3J0LmFjcXVpcmVfaHR0cF9sb2NrKCkKKyAg
ICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyBIVFRQIHNlcnZl
ciAuLi4nKQorICAgICAgICAgICAgc2VsZi5fcG9ydC5zdGFydF9odHRwX3NlcnZlcigpCisgICAg
ICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgV2ViU29ja2V0IHNl
cnZlciAuLi4nKQorICAgICAgICAgICAgc2VsZi5fcG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVy
KCkKKyAgICAgICAgICAgIHNlbGYuX2hhc19odHRwX2xvY2sgPSBUcnVlCiAKICAgICBkZWYgc3Rv
cF9zZXJ2ZXJzX3dpdGhfbG9jayhzZWxmKToKICAgICAgICAgaWYgc2VsZi5faGFzX2h0dHBfbG9j
azoKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRy
b2xsZXJzL21hbmFnZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5CmluZGV4IGMxYTMxZDMxZWE2
YTg5MTA3MTY3NzY0Y2M4NjJjYWEyNzgyNmZhMzIuLjZlNDM2NjgyNGI5NGQ1MDk2N2NmYTM1MzBi
ZDA3Y2E0MThhYzgxMDEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl91bml0dGVzdC5weQpA
QCAtMTc0LDYgKzE3NCw1MCBAQCBjbGFzcyBNYW5hZ2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6
CiAgICAgICAgIHByaW50ZXIuY2xlYW51cCgpCiAgICAgICAgIHRlc3Rlci5hc3NlcnRFcXVhbHMo
bnVtX3VuZXhwZWN0ZWRfcmVzdWx0cywgMCkKIAorICAgIGRlZiBub19odHRwX3NraXAodGVzdGVy
KToKKyAgICAgICAgb3B0aW9ucywgYXJncyA9IHJ1bl93ZWJraXRfdGVzdHMucGFyc2VfYXJncyhb
Jy0tcGxhdGZvcm09dGVzdCcsICctLXByaW50PW5vdGhpbmcnLCAnLS1uby1odHRwJywgJ2h0dHAv
dGVzdHMvcGFzc2VzJywgJ3BsYXRmb3JtL3Rlc3QvaHR0cC8nXSkKKyAgICAgICAgcG9ydCA9IGxh
eW91dF90ZXN0cy5wb3J0LmdldChwb3J0X25hbWU9b3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucz1v
cHRpb25zKQorICAgICAgICBydW5fd2Via2l0X3Rlc3RzLl9zZXRfdXBfZGVyaXZlZF9vcHRpb25z
KHBvcnQsIG9wdGlvbnMpCisgICAgICAgIHByaW50ZXIgPSBwcmludGluZy5QcmludGVyKHBvcnQs
IG9wdGlvbnMsIFN0cmluZ0lPLlN0cmluZ0lPKCksIFN0cmluZ0lPLlN0cmluZ0lPKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZV9sb2dnaW5nPVRydWUpCisg
ICAgICAgIG1hbmFnZXIgPSBNYW5hZ2VyKHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpCisgICAgICAg
IG1hbmFnZXIuY29sbGVjdF90ZXN0cyhhcmdzKQorICAgICAgICBtYW5hZ2VyLnBhcnNlX2V4cGVj
dGF0aW9ucygpCisgICAgICAgIHJlc3VsdF9zdW1tYXJ5ID0gbWFuYWdlci5zZXRfdXBfcnVuKCkK
KyAgICAgICAgIyBBbGwgb3VyIHRlc3RzIGFyZSBIVFRQIGJhc2VkIHNvIHRoZXJlIHNob3VsZCBi
ZSBubyB0ZXN0cyBsZWZ0IHRvIHJ1bi4KKyAgICAgICAgdGVzdGVyLmFzc2VydEVxdWFscyhsZW4o
bWFuYWdlci5fdGVzdF9maWxlcyksIDApCisgICAgICAgIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMg
PSBtYW5hZ2VyLnJ1bihyZXN1bHRfc3VtbWFyeSkKKyAgICAgICAgbWFuYWdlci5jbGVhbl91cF9y
dW4oKQorICAgICAgICBwcmludGVyLmNsZWFudXAoKQorICAgICAgICB0ZXN0ZXIuYXNzZXJ0RXF1
YWxzKG51bV91bmV4cGVjdGVkX3Jlc3VsdHMsIDApCisKKyAgICBkZWYgdGVzdF9ub19odHRwX2xv
Y2tpbmcodGVzdGVyKToKKyAgICAgICAgY2xhc3MgTm9Mb2NrQ2hlY2tpbmdNYW5hZ2VyKE1hbmFn
ZXIpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHByaW50
ZXIpOgorICAgICAgICAgICAgICAgIHN1cGVyKE5vTG9ja0NoZWNraW5nTWFuYWdlciwgc2VsZiku
X19pbml0X18ocG9ydCwgb3B0aW9ucywgcHJpbnRlcikKKworICAgICAgICAgICAgZGVmIGhhbmRs
ZV9maW5pc2hlZF9saXN0KHNlbGYsIHNvdXJjZSwgbGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBz
ZWRfdGltZSk6CisgICAgICAgICAgICAgICAgIyBJbiB0aGlzIGV4YW1wbGUsIHdlIHNob3VsZG4n
dCBoYXZlIGFueSBsb2NrZWQgc2hhcmRzIGFzIEhUVFAgdGVzdHMgYXJlIGRpc2FibGVkLgorICAg
ICAgICAgICAgICAgIHRlc3Rlci5hc3NlcnRFcXVhbHMobGlzdF9uYW1lLCAndW5sb2NrZWRfdGVz
dHMnKQorICAgICAgICAgICAgICAgIHRlc3Rlci5hc3NlcnRFcXVhbHMoc2VsZi5fcmVtYWluaW5n
X2xvY2tlZF9zaGFyZHMsIFtdKQorICAgICAgICAgICAgICAgIHRlc3Rlci5hc3NlcnRGYWxzZShz
ZWxmLl9oYXNfaHR0cF9sb2NrKQorICAgICAgICAgICAgICAgIHN1cGVyKE5vTG9ja0NoZWNraW5n
TWFuYWdlciwgc2VsZikuaGFuZGxlX2ZpbmlzaGVkX2xpc3Qoc291cmNlLCBsaXN0X25hbWUsIG51
bV90ZXN0cywgZWxhcHNlZF90aW1lKQorICAgICAgICAgICAgICAgIHRlc3Rlci5hc3NlcnRGYWxz
ZShzZWxmLl9oYXNfaHR0cF9sb2NrKQorCisgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBydW5fd2Vi
a2l0X3Rlc3RzLnBhcnNlX2FyZ3MoWyctLXBsYXRmb3JtPXRlc3QnLCAnLS1wcmludD1ub3RoaW5n
JywgJy0tbm8taHR0cCcsICdodHRwL3Rlc3RzL3Bhc3NlcycsICdwYXNzZXMnXSkKKyAgICAgICAg
cG9ydCA9IGxheW91dF90ZXN0cy5wb3J0LmdldChwb3J0X25hbWU9b3B0aW9ucy5wbGF0Zm9ybSwg
b3B0aW9ucz1vcHRpb25zKQorICAgICAgICBydW5fd2Via2l0X3Rlc3RzLl9zZXRfdXBfZGVyaXZl
ZF9vcHRpb25zKHBvcnQsIG9wdGlvbnMpCisgICAgICAgIHByaW50ZXIgPSBwcmludGluZy5Qcmlu
dGVyKHBvcnQsIG9wdGlvbnMsIFN0cmluZ0lPLlN0cmluZ0lPKCksIFN0cmluZ0lPLlN0cmluZ0lP
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZV9sb2dnaW5n
PVRydWUpCisgICAgICAgIG1hbmFnZXIgPSBOb0xvY2tDaGVja2luZ01hbmFnZXIocG9ydCwgb3B0
aW9ucywgcHJpbnRlcikKKyAgICAgICAgbWFuYWdlci5jb2xsZWN0X3Rlc3RzKGFyZ3MpCisgICAg
ICAgIG1hbmFnZXIucGFyc2VfZXhwZWN0YXRpb25zKCkKKyAgICAgICAgcmVzdWx0X3N1bW1hcnkg
PSBtYW5hZ2VyLnNldF91cF9ydW4oKQorICAgICAgICBudW1fdW5leHBlY3RlZF9yZXN1bHRzID0g
bWFuYWdlci5ydW4ocmVzdWx0X3N1bW1hcnkpCisgICAgICAgIG1hbmFnZXIuY2xlYW5fdXBfcnVu
KCkKKyAgICAgICAgcHJpbnRlci5jbGVhbnVwKCkKKyAgICAgICAgdGVzdGVyLmFzc2VydEVxdWFs
cyhudW1fdW5leHBlY3RlZF9yZXN1bHRzLCAwKQorCiAgICAgZGVmIHRlc3RfaW50ZXJydXB0X2lm
X2F0X2ZhaWx1cmVfbGltaXRzKHNlbGYpOgogICAgICAgICBwb3J0ID0gTW9jaygpCiAgICAgICAg
IHBvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUiA9ICcvJwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKaW5kZXggOWQ4M2Zm
ZTJjNDgzNThhMzk3NzI2ZGZkZjA5YjVhN2NhODYzY2Y3Yy4uODBhMTViMmNiYTQxMzgzZWQwYWYx
YmUzYWIwYjk1ZWRmY2UxMDlkMCAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC0xNTMsNiArMTUzLDEwIEBA
IGRlZiBfc2V0X3VwX2Rlcml2ZWRfb3B0aW9ucyhwb3J0LCBvcHRpb25zKToKICAgICAgICAgICAg
IG5vcm1hbGl6ZWRfcGxhdGZvcm1fZGlyZWN0b3JpZXMuYXBwZW5kKHBvcnQuZmlsZXN5c3RlbS5u
b3JtcGF0aChwYXRoKSkKICAgICAgICAgb3B0aW9ucy5hZGRpdGlvbmFsX3BsYXRmb3JtX2RpcmVj
dG9yeSA9IG5vcm1hbGl6ZWRfcGxhdGZvcm1fZGlyZWN0b3JpZXMKIAorICAgIGlmIG5vdCBvcHRp
b25zLmh0dHAgYW5kIG9wdGlvbnMuZm9yY2U6CisgICAgICAgIHdhcm5pbmdzLmFwcGVuZCgiLS1u
by1odHRwIGlzIGlnbm9yZWQgc2luY2UgLS1mb3JjZSBpcyBhbHNvIHByb3ZpZGVkIikKKyAgICAg
ICAgb3B0aW9ucy5odHRwID0gVHJ1ZQorCiAgICAgcmV0dXJuIHdhcm5pbmdzCiAKIApAQCAtMzE3
LDkgKzMyMSwxMCBAQCBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgogICAgICAgICBvcHRwYXJz
ZS5tYWtlX29wdGlvbigiLS1uby1yZWNvcmQtcmVzdWx0cyIsIGFjdGlvbj0ic3RvcmVfZmFsc2Ui
LAogICAgICAgICAgICAgZGVmYXVsdD1UcnVlLCBkZXN0PSJyZWNvcmRfcmVzdWx0cyIsCiAgICAg
ICAgICAgICBoZWxwPSJEb24ndCByZWNvcmQgdGhlIHJlc3VsdHMuIiksCi0gICAgICAgICMgb2xk
LXJ1bi13ZWJraXQtdGVzdHMgYWxzbyBoYXMgSFRUUCB0b2dnbGUgb3B0aW9uczoKLSAgICAgICAg
IyAtLVtuby1daHR0cCAgICAgICAgICAgICAgICAgICAgIFJ1biAob3IgZG8gbm90IHJ1bikgaHR0
cCB0ZXN0cwotICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1
bHQ6IHJ1bikKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0taHR0cCIsIGFjdGlvbj0i
c3RvcmVfdHJ1ZSIsIGRlc3Q9Imh0dHAiLAorICAgICAgICAgICAgZGVmYXVsdD1UcnVlLCBoZWxw
PSJSdW4gSFRUUCBhbmQgV2ViU29ja2V0IHRlc3RzIChkZWZhdWx0KSIpLAorICAgICAgICBvcHRw
YXJzZS5tYWtlX29wdGlvbigiLS1uby1odHRwIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9
Imh0dHAiLAorICAgICAgICAgICAgaGVscD0iRG9uJ3QgcnVuIEhUVFAgYW5kIFdlYlNvY2tldCB0
ZXN0cyIpLAogICAgIF0KIAogICAgIHRlc3Rfb3B0aW9ucyA9IFsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRp
b250ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkKaW5kZXggMTQ3ZDVkZGZkOWJjMzAzZmNjNGZmMmE4
ZGE4Y2I2YTU3NmZkMzRmMi4uYjY1ZmMxOGNhMDllYzU0YTkxNTk0MmY4ZTYyODcxZDU2N2Y5YTQx
NiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dl
YmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkKQEAgLTY1
Nyw2ICs2NTcsMTQgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAg
ICByZXMsIGJ1aWxkYm90X291dHB1dCwgcmVndWxhcl9vdXRwdXQsIHVzZXIgPSBsb2dnaW5nX3J1
bihbJy0tYWRkaXRpb25hbC1wbGF0Zm9ybS1kaXJlY3RvcnknLCAnZm9vJ10pCiAgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZSgnLS1hZGRpdGlvbmFsLXBsYXRmb3JtLWRpcmVjdG9yeT1mb28gaXMgaWdu
b3JlZCBzaW5jZSBpdCBpcyBub3QgYWJzb2x1dGVcbicgaW4gcmVndWxhcl9vdXRwdXQuZ2V0KCkp
CiAKKyAgICBkZWYgdGVzdF9odHRwX3BhcmFtZXRlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1uby1odHRwJ10pKQorICAgICAgICBzZWxmLmFzc2VydFRy
dWUocGFzc2luZ19ydW4oWyctLWh0dHAnXSkpCisKKyAgICBkZWYgdGVzdF9ub19odHRwX2FuZF9m
b3JjZShzZWxmKToKKyAgICAgICAgIyBTZWUgdGVzdF9ydW5fZm9yY2UsIHVzaW5nIC0tZm9yY2Ug
cmFpc2VzIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgIyBGSVhNRTogV2Ugd291bGQgbGlrZSB0byBj
aGVjayB0aGUgd2FybmluZ3MgZ2VuZXJhdGVkLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhW
YWx1ZUVycm9yLCBsb2dnaW5nX3J1biwgWyctLWZvcmNlJywgJy0tbm8taHR0cCddKQogCiBNYWlu
VGVzdCA9IHNraXBfaWYoTWFpblRlc3QsIHN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJyBhbmQgY29t
cGFyZV92ZXJzaW9uKHN5cywgJzIuNicpWzBdIDwgMCwgJ25ldy1ydW4td2Via2l0LXRlc3RzIHRl
c3RzIGhhbmcgb24gQ3lnd2luIFB5dGhvbiAyLjUuMicpCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101021</attachid>
            <date>2011-07-15 12:01:52 -0700</date>
            <delta_ts>2011-07-15 15:50:28 -0700</delta_ts>
            <desc>Proposed fix 2: Also don&apos;t run websocket tests and take Adam&apos;s comments into account.</desc>
            <filename>bug-64564-20110715120151.patch</filename>
            <type>text/plain</type>
            <size>11190</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTEwNzQKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhZWQ5MDg3ZTQ1NWU1OTk3ZGI4NmM5OWYxMDk0YjkyMmQ3
NTUzYTFlLi5lODg4MGM2ZmNjOTY2NjFkMDZmNTg0ZDJiODMyYWExYWFjZWU0YzBmIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMTEtMDctMTUgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+
CisKKyAgICAgICAgW05SV1RdIEFkZCBzdXBwb3J0IGZvciAtLW5vLWh0dHAKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NTY0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgLS1u
by1odHRwLCB3aGljaCBkaXNhYmxlcyBib3RoIEhUVFAgYW5kIHdlYnNvY2tldHMgdGVzdHMuCisg
ICAgICAgIEl0IGFsc28gbWF0Y2hlcyB0aGUgb2xkLXJ1bi13ZWJraXQtdGVzdHMgYmVoYXZpb3Ig
aWYgLS1mb3JjZSBpcyB1c2VkLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weToKKyAgICAgICAgRml4ZWQgSFRUUF9TVUJESVIg
YW5kIFdFQlNPQ0tFVF9TVUJESVIgYXMgdGVzdHMgZG8gbm90IHN0YXJ0IHdpdGggYSBsZWFkaW5n
IHNlcGFyYXRvci4KKyAgICAgICAgV2UgY2hlY2sgaWYgLS1uby1odHRwIGlzIHNldCBhbmQgYWRk
IHRoZSBIVFRQIC8gd2Vic29ja2V0cyB0ZXN0cyB0byB0aGUgc2tpcHBlZCBsaXN0IHByaW9yCisg
ICAgICAgIHRvIGxvb2tpbmcgYXQgdGhlIGV4cGVjdGF0aW9uIGZpbGUuIElmIHdlIGRvbid0IHJ1
biB0aG9zZSB0ZXN0cywgd2UgZG9uJ3QgZ3JhYiB0aGUgZGlmZmVyZW50IGxvY2tzLgorCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl91
bml0dGVzdC5weTogQWRkZWQgdGVzdCBmb3IgdGhlIG5ldyBiZWhhdmlvcgorICAgICAgICAobm90
IGdyYWJpbmcgdGhlIGxvY2sgYW5kIG5vdCBhZGRpbmcgdGhlIHRlc3RzIHRvIHRoZSBsb2NrZWRf
c2hhcmRzIGlmIC0tbm8taHR0cCBpcyB1c2VkKS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHk6IEFkZGVkIHRoZSAtLW5vLWh0dHAg
YW5kIC0taHR0cCBvcHRpb25zIGFzCisgICAgICAgIHdlbGwgYXMgdGhlIGludGVyYWN0aW9uIHdp
dGggLS1mb3JjZSB0byBtYWtlIG9sZC1ydW4td2Via2l0LXRlc3RzLgorCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRl
c3QucHk6IENoZWNrIHRoYXQgdGhlIG5ldyBvcHRpb25zCisgICAgICAgIGFyZSBhY2NlcHRlZC4K
KwogMjAxMS0wNy0xNSAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFN0b3JlIGVycm9yIGFuZCB3YXJuaW5nIGluZm9ybWF0aW9uIG9uIFRlc3RFeHBl
Y3RhdGlvbkxpbmUuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weQppbmRleCBkNjI5MDBmZThiMjIxODYxMmMw
Yjk5MjJhYTlhODM1YzgzNDJmZmI2Li44MzcwYjUwMWViNDI4MjkyNWVkOTRjMGJkNzFiM2VlY2Iy
OWIwYmRkIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9j
b250cm9sbGVycy9tYW5hZ2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkKQEAgLTI3OSw4ICsyNzksOCBAQCBjbGFzcyBN
YW5hZ2VyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX21lc3NhZ2VfYnJva2VyID0gTm9uZQogICAg
ICAgICBzZWxmLl9leHBlY3RhdGlvbnMgPSBOb25lCiAKLSAgICAgICAgc2VsZi5IVFRQX1NVQkRJ
UiA9IHBvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUiArICdodHRwJyArIHBvcnQuVEVTVF9QQVRIX1NF
UEFSQVRPUgotICAgICAgICBzZWxmLldFQlNPQ0tFVF9TVUJESVIgPSBwb3J0LlRFU1RfUEFUSF9T
RVBBUkFUT1IgKyAnd2Vic29ja2V0JyArIHBvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUgorICAgICAg
ICBzZWxmLkhUVFBfU1VCRElSID0gJ2h0dHAnICsgcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SCisg
ICAgICAgIHNlbGYuV0VCU09DS0VUX1NVQkRJUiA9ICd3ZWJzb2NrZXQnICsgcG9ydC5URVNUX1BB
VEhfU0VQQVJBVE9SCiAgICAgICAgIHNlbGYuTEFZT1VUX1RFU1RTX0RJUkVDVE9SWSA9ICdMYXlv
dXRUZXN0cycKICAgICAgICAgc2VsZi5faGFzX2h0dHBfbG9jayA9IEZhbHNlCiAKQEAgLTM1Niw2
ICszNTYsMTcgQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAgICAgICAgICAgc2VsZi5fb3B0
aW9ucy5saW50X3Rlc3RfZmlsZXMsCiAgICAgICAgICAgICBwb3J0LnRlc3RfZXhwZWN0YXRpb25z
X292ZXJyaWRlcygpKQogCisgICAgZGVmIF9nZXRfaHR0cF90ZXN0cyhzZWxmKToKKyAgICAgICAg
IiIiIFJldHVybnMgYWxsIHRoZSBIVFRQIHRlc3RzIG9mIEhUVFAuIFJldHVybnMgYSBzZXQgY29u
dGFpbmluZworICAgICAgICB0aGVtLiAiIiIKKyAgICAgICAgaHR0cF90ZXN0cyA9IHNldCgpCisg
ICAgICAgIGZvciB0ZXN0IGluIHNlbGYuX3Rlc3RfZmlsZXM6CisgICAgICAgICAgICBpZiBzZWxm
LkhUVFBfU1VCRElSIGluIHRlc3Qgb3Igc2VsZi5XRUJTT0NLRVRfU1VCRElSIGluIHRlc3Q6Cisg
ICAgICAgICAgICAgICAgaHR0cF90ZXN0cy5hZGQodGVzdCkKKworICAgICAgICByZXR1cm4gaHR0
cF90ZXN0cworCisKICAgICBkZWYgcGFyc2VfZXhwZWN0YXRpb25zKHNlbGYpOgogICAgICAgICAi
IiJQYXJzZSB0aGUgZXhwZWN0YXRpb25zIGZyb20gdGhlIHRlc3RfbGlzdCBmaWxlcyBhbmQgcmV0
dXJuIGEgZGF0YQogICAgICAgICBzdHJ1Y3R1cmUgaG9sZGluZyB0aGVtLiBUaHJvd3MgYW4gZXJy
b3IgaWYgdGhlIHRlc3RfbGlzdCBmaWxlcyBoYXZlCkBAIC0zODUsMTUgKzM5NiwyMSBAQCBjbGFz
cyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgICAgIHNr
aXBwZWQgPSBzZXQoKQorCisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLmh0dHA6CisgICAg
ICAgICAgICBza2lwcGVkID0gc2VsZi5fZ2V0X2h0dHBfdGVzdHMoKQorCiAgICAgICAgIGlmIG51
bV9hbGxfdGVzdF9maWxlcyA+IDEgYW5kIG5vdCBzZWxmLl9vcHRpb25zLmZvcmNlOgotICAgICAg
ICAgICAgc2tpcHBlZCA9IHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfdGVzdHNfd2l0aF9yZXN1bHRf
dHlwZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLlNLSVAp
Ci0gICAgICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzIC09IHNraXBwZWQKKyAgICAgICAgICAgIHNr
aXBwZWQgPSBza2lwcGVkLnVuaW9uKHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfdGVzdHNfd2l0aF9y
ZXN1bHRfdHlwZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25z
LlNLSVApKQogICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5za2lwX2ZhaWxpbmdfdGVzdHM6
CiAgICAgICAgICAgICAgICAgZmFpbGluZyA9IHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfdGVzdHNf
d2l0aF9yZXN1bHRfdHlwZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4
cGVjdGF0aW9ucy5GQUlMKQogICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXMgLT0gZmFp
bGluZwogCisgICAgICAgIGlmIGxlbihza2lwcGVkKToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3Rf
ZmlsZXMgLT0gc2tpcHBlZAorCiAgICAgICAgICMgQ3JlYXRlIGEgc29ydGVkIGxpc3Qgb2YgdGVz
dCBmaWxlcyBzbyB0aGUgc3Vic2V0IGNodW5rLAogICAgICAgICAjIGlmIHVzZWQsIGNvbnRhaW5z
IGFscGhhYmV0aWNhbGx5IGNvbnNlY3V0aXZlIHRlc3RzLgogICAgICAgICBzZWxmLl90ZXN0X2Zp
bGVzX2xpc3QgPSBsaXN0KHNlbGYuX3Rlc3RfZmlsZXMpCkBAIC05MzUsMTMgKzk1MiwxNCBAQCBj
bGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgIHJldHVybiB1bmV4cGVjdGVkX3Jlc3VsdHNb
J251bV9yZWdyZXNzaW9ucyddCiAKICAgICBkZWYgc3RhcnRfc2VydmVyc193aXRoX2xvY2soc2Vs
Zik6Ci0gICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdBY3F1aXJpbmcgaHR0cCBs
b2NrIC4uLicpCi0gICAgICAgIHNlbGYuX3BvcnQuYWNxdWlyZV9odHRwX2xvY2soKQotICAgICAg
ICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgSFRUUCBzZXJ2ZXIgLi4uJykK
LSAgICAgICAgc2VsZi5fcG9ydC5zdGFydF9odHRwX3NlcnZlcigpCi0gICAgICAgIHNlbGYuX3By
aW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyBXZWJTb2NrZXQgc2VydmVyIC4uLicpCi0gICAg
ICAgIHNlbGYuX3BvcnQuc3RhcnRfd2Vic29ja2V0X3NlcnZlcigpCi0gICAgICAgIHNlbGYuX2hh
c19odHRwX2xvY2sgPSBUcnVlCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuaHR0cDoKKyAgICAg
ICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdBY3F1aXJpbmcgaHR0cCBsb2NrIC4u
LicpCisgICAgICAgICAgICBzZWxmLl9wb3J0LmFjcXVpcmVfaHR0cF9sb2NrKCkKKyAgICAgICAg
ICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyBIVFRQIHNlcnZlciAuLi4n
KQorICAgICAgICAgICAgc2VsZi5fcG9ydC5zdGFydF9odHRwX3NlcnZlcigpCisgICAgICAgICAg
ICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgV2ViU29ja2V0IHNlcnZlciAu
Li4nKQorICAgICAgICAgICAgc2VsZi5fcG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVyKCkKKyAg
ICAgICAgICAgIHNlbGYuX2hhc19odHRwX2xvY2sgPSBUcnVlCiAKICAgICBkZWYgc3RvcF9zZXJ2
ZXJzX3dpdGhfbG9jayhzZWxmKToKICAgICAgICAgaWYgc2VsZi5faGFzX2h0dHBfbG9jazoKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJz
L21hbmFnZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9jb250cm9sbGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5CmluZGV4IGYyODAxNjRiNGVkNTIyYzJj
YjI5YTkyY2MwZDE3NWY5MDk1MThiNjUuLmYwNzIzZmVmYThhY2U3M2ViYmUzY2YyZTlmYzgwZDU0
NTZhZTY4ODcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2NvbnRyb2xsZXJzL21hbmFnZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl91bml0dGVzdC5weQpAQCAtMTk2
LDYgKzE5Niw1MCBAQCBjbGFzcyBNYW5hZ2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAg
ICAgIHByaW50ZXIuY2xlYW51cCgpCiAgICAgICAgIHRlc3Rlci5hc3NlcnRFcXVhbHMobnVtX3Vu
ZXhwZWN0ZWRfcmVzdWx0cywgMCkKIAorICAgIGRlZiBub19odHRwX3NraXAodGVzdGVyKToKKyAg
ICAgICAgb3B0aW9ucywgYXJncyA9IHJ1bl93ZWJraXRfdGVzdHMucGFyc2VfYXJncyhbJy0tcGxh
dGZvcm09dGVzdCcsICctLXByaW50PW5vdGhpbmcnLCAnLS1uby1odHRwJywgJ2h0dHAvdGVzdHMv
cGFzc2VzJywgJ3BsYXRmb3JtL3Rlc3QvaHR0cC8nLCAnaHR0cC93ZWJzb2NrZXQnLCAncGxhdGZv
cm0vdGVzdC93ZWJzb2NrZXQnXSkKKyAgICAgICAgcG9ydCA9IGxheW91dF90ZXN0cy5wb3J0Lmdl
dChwb3J0X25hbWU9b3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucz1vcHRpb25zKQorICAgICAgICBy
dW5fd2Via2l0X3Rlc3RzLl9zZXRfdXBfZGVyaXZlZF9vcHRpb25zKHBvcnQsIG9wdGlvbnMpCisg
ICAgICAgIHByaW50ZXIgPSBwcmludGluZy5QcmludGVyKHBvcnQsIG9wdGlvbnMsIFN0cmluZ0lP
LlN0cmluZ0lPKCksIFN0cmluZ0lPLlN0cmluZ0lPKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbmZpZ3VyZV9sb2dnaW5nPVRydWUpCisgICAgICAgIG1hbmFnZXIgPSBN
YW5hZ2VyKHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpCisgICAgICAgIG1hbmFnZXIuY29sbGVjdF90
ZXN0cyhhcmdzKQorICAgICAgICBtYW5hZ2VyLnBhcnNlX2V4cGVjdGF0aW9ucygpCisgICAgICAg
IHJlc3VsdF9zdW1tYXJ5ID0gbWFuYWdlci5zZXRfdXBfcnVuKCkKKyAgICAgICAgIyBBbGwgb3Vy
IHRlc3RzIGFyZSBIVFRQIGJhc2VkIHNvIHRoZXJlIHNob3VsZCBiZSBubyB0ZXN0cyBsZWZ0IHRv
IHJ1bi4KKyAgICAgICAgdGVzdGVyLmFzc2VydEVxdWFscyhsZW4obWFuYWdlci5fdGVzdF9maWxl
cyksIDApCisgICAgICAgIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMgPSBtYW5hZ2VyLnJ1bihyZXN1
bHRfc3VtbWFyeSkKKyAgICAgICAgbWFuYWdlci5jbGVhbl91cF9ydW4oKQorICAgICAgICBwcmlu
dGVyLmNsZWFudXAoKQorICAgICAgICB0ZXN0ZXIuYXNzZXJ0RXF1YWxzKG51bV91bmV4cGVjdGVk
X3Jlc3VsdHMsIDApCisKKyAgICBkZWYgdGVzdF9ub19odHRwX2xvY2tpbmcodGVzdGVyKToKKyAg
ICAgICAgY2xhc3MgTm9Mb2NrQ2hlY2tpbmdNYW5hZ2VyKE1hbmFnZXIpOgorICAgICAgICAgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpOgorICAgICAgICAgICAg
ICAgIHN1cGVyKE5vTG9ja0NoZWNraW5nTWFuYWdlciwgc2VsZikuX19pbml0X18ocG9ydCwgb3B0
aW9ucywgcHJpbnRlcikKKworICAgICAgICAgICAgZGVmIGhhbmRsZV9maW5pc2hlZF9saXN0KHNl
bGYsIHNvdXJjZSwgbGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSk6CisgICAgICAg
ICAgICAgICAgIyBJbiB0aGlzIGV4YW1wbGUsIHdlIHNob3VsZG4ndCBoYXZlIGFueSBsb2NrZWQg
c2hhcmRzIGFzIEhUVFAgdGVzdHMgYXJlIGRpc2FibGVkLgorICAgICAgICAgICAgICAgIHRlc3Rl
ci5hc3NlcnRFcXVhbHMobGlzdF9uYW1lLCAndW5sb2NrZWRfdGVzdHMnKQorICAgICAgICAgICAg
ICAgIHRlc3Rlci5hc3NlcnRFcXVhbHMoc2VsZi5fcmVtYWluaW5nX2xvY2tlZF9zaGFyZHMsIFtd
KQorICAgICAgICAgICAgICAgIHRlc3Rlci5hc3NlcnRGYWxzZShzZWxmLl9oYXNfaHR0cF9sb2Nr
KQorICAgICAgICAgICAgICAgIHN1cGVyKE5vTG9ja0NoZWNraW5nTWFuYWdlciwgc2VsZikuaGFu
ZGxlX2ZpbmlzaGVkX2xpc3Qoc291cmNlLCBsaXN0X25hbWUsIG51bV90ZXN0cywgZWxhcHNlZF90
aW1lKQorICAgICAgICAgICAgICAgIHRlc3Rlci5hc3NlcnRGYWxzZShzZWxmLl9oYXNfaHR0cF9s
b2NrKQorCisgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBydW5fd2Via2l0X3Rlc3RzLnBhcnNlX2Fy
Z3MoWyctLXBsYXRmb3JtPXRlc3QnLCAnLS1wcmludD1ub3RoaW5nJywgJy0tbm8taHR0cCcsICdo
dHRwL3Rlc3RzL3Bhc3NlcycsICdwYXNzZXMnXSkKKyAgICAgICAgcG9ydCA9IGxheW91dF90ZXN0
cy5wb3J0LmdldChwb3J0X25hbWU9b3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucz1vcHRpb25zKQor
ICAgICAgICBydW5fd2Via2l0X3Rlc3RzLl9zZXRfdXBfZGVyaXZlZF9vcHRpb25zKHBvcnQsIG9w
dGlvbnMpCisgICAgICAgIHByaW50ZXIgPSBwcmludGluZy5QcmludGVyKHBvcnQsIG9wdGlvbnMs
IFN0cmluZ0lPLlN0cmluZ0lPKCksIFN0cmluZ0lPLlN0cmluZ0lPKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZV9sb2dnaW5nPVRydWUpCisgICAgICAgIG1h
bmFnZXIgPSBOb0xvY2tDaGVja2luZ01hbmFnZXIocG9ydCwgb3B0aW9ucywgcHJpbnRlcikKKyAg
ICAgICAgbWFuYWdlci5jb2xsZWN0X3Rlc3RzKGFyZ3MpCisgICAgICAgIG1hbmFnZXIucGFyc2Vf
ZXhwZWN0YXRpb25zKCkKKyAgICAgICAgcmVzdWx0X3N1bW1hcnkgPSBtYW5hZ2VyLnNldF91cF9y
dW4oKQorICAgICAgICBudW1fdW5leHBlY3RlZF9yZXN1bHRzID0gbWFuYWdlci5ydW4ocmVzdWx0
X3N1bW1hcnkpCisgICAgICAgIG1hbmFnZXIuY2xlYW5fdXBfcnVuKCkKKyAgICAgICAgcHJpbnRl
ci5jbGVhbnVwKCkKKyAgICAgICAgdGVzdGVyLmFzc2VydEVxdWFscyhudW1fdW5leHBlY3RlZF9y
ZXN1bHRzLCAwKQorCiAgICAgZGVmIHRlc3RfaW50ZXJydXB0X2lmX2F0X2ZhaWx1cmVfbGltaXRz
KHNlbGYpOgogICAgICAgICBwb3J0ID0gTW9jaygpCiAgICAgICAgIHBvcnQuVEVTVF9QQVRIX1NF
UEFSQVRPUiA9ICcvJwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKaW5kZXggOWQ4M2ZmZTJjNDgzNThhMzk3NzI2ZGZk
ZjA5YjVhN2NhODYzY2Y3Yy4uODBhMTViMmNiYTQxMzgzZWQwYWYxYmUzYWIwYjk1ZWRmY2UxMDlk
MCAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dl
YmtpdF90ZXN0cy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzLnB5CkBAIC0xNTMsNiArMTUzLDEwIEBAIGRlZiBfc2V0X3VwX2Rlcml2
ZWRfb3B0aW9ucyhwb3J0LCBvcHRpb25zKToKICAgICAgICAgICAgIG5vcm1hbGl6ZWRfcGxhdGZv
cm1fZGlyZWN0b3JpZXMuYXBwZW5kKHBvcnQuZmlsZXN5c3RlbS5ub3JtcGF0aChwYXRoKSkKICAg
ICAgICAgb3B0aW9ucy5hZGRpdGlvbmFsX3BsYXRmb3JtX2RpcmVjdG9yeSA9IG5vcm1hbGl6ZWRf
cGxhdGZvcm1fZGlyZWN0b3JpZXMKIAorICAgIGlmIG5vdCBvcHRpb25zLmh0dHAgYW5kIG9wdGlv
bnMuZm9yY2U6CisgICAgICAgIHdhcm5pbmdzLmFwcGVuZCgiLS1uby1odHRwIGlzIGlnbm9yZWQg
c2luY2UgLS1mb3JjZSBpcyBhbHNvIHByb3ZpZGVkIikKKyAgICAgICAgb3B0aW9ucy5odHRwID0g
VHJ1ZQorCiAgICAgcmV0dXJuIHdhcm5pbmdzCiAKIApAQCAtMzE3LDkgKzMyMSwxMCBAQCBkZWYg
cGFyc2VfYXJncyhhcmdzPU5vbmUpOgogICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1u
by1yZWNvcmQtcmVzdWx0cyIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLAogICAgICAgICAgICAgZGVm
YXVsdD1UcnVlLCBkZXN0PSJyZWNvcmRfcmVzdWx0cyIsCiAgICAgICAgICAgICBoZWxwPSJEb24n
dCByZWNvcmQgdGhlIHJlc3VsdHMuIiksCi0gICAgICAgICMgb2xkLXJ1bi13ZWJraXQtdGVzdHMg
YWxzbyBoYXMgSFRUUCB0b2dnbGUgb3B0aW9uczoKLSAgICAgICAgIyAtLVtuby1daHR0cCAgICAg
ICAgICAgICAgICAgICAgIFJ1biAob3IgZG8gbm90IHJ1bikgaHR0cCB0ZXN0cwotICAgICAgICAj
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQ6IHJ1bikKKyAgICAgICAg
b3B0cGFyc2UubWFrZV9vcHRpb24oIi0taHR0cCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9
Imh0dHAiLAorICAgICAgICAgICAgZGVmYXVsdD1UcnVlLCBoZWxwPSJSdW4gSFRUUCBhbmQgV2Vi
U29ja2V0IHRlc3RzIChkZWZhdWx0KSIpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigi
LS1uby1odHRwIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9Imh0dHAiLAorICAgICAgICAg
ICAgaGVscD0iRG9uJ3QgcnVuIEhUVFAgYW5kIFdlYlNvY2tldCB0ZXN0cyIpLAogICAgIF0KIAog
ICAgIHRlc3Rfb3B0aW9ucyA9IFsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlv
bnRlc3QucHkKaW5kZXggYmUyNjc1ZmQ0NjY0NWRhNjc0ZjNmZjUwOWRmOGM1YTY4OTI1NzY4YS4u
YWY4ZWU1MmZiYzk2OWY4OGE1ZWY3NzA3YjQ4YWVjM2JjNDM2NmI5ZSAxMDA3NTUKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3Jh
dGlvbnRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVu
X3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkKQEAgLTY1MCw2ICs2NTAsMTQgQEAgY2xh
c3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICByZXMsIGJ1aWxkYm90X291
dHB1dCwgcmVndWxhcl9vdXRwdXQsIHVzZXIgPSBsb2dnaW5nX3J1bihbJy0tYWRkaXRpb25hbC1w
bGF0Zm9ybS1kaXJlY3RvcnknLCAnZm9vJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnLS1h
ZGRpdGlvbmFsLXBsYXRmb3JtLWRpcmVjdG9yeT1mb28gaXMgaWdub3JlZCBzaW5jZSBpdCBpcyBu
b3QgYWJzb2x1dGVcbicgaW4gcmVndWxhcl9vdXRwdXQuZ2V0KCkpCiAKKyAgICBkZWYgdGVzdF9o
dHRwX3BhcmFtZXRlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVu
KFsnLS1uby1odHRwJ10pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyct
LWh0dHAnXSkpCisKKyAgICBkZWYgdGVzdF9ub19odHRwX2FuZF9mb3JjZShzZWxmKToKKyAgICAg
ICAgIyBTZWUgdGVzdF9ydW5fZm9yY2UsIHVzaW5nIC0tZm9yY2UgcmFpc2VzIGFuIGV4Y2VwdGlv
bi4KKyAgICAgICAgIyBGSVhNRTogV2Ugd291bGQgbGlrZSB0byBjaGVjayB0aGUgd2FybmluZ3Mg
Z2VuZXJhdGVkLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb2dnaW5n
X3J1biwgWyctLWZvcmNlJywgJy0tbm8taHR0cCddKQogCiBNYWluVGVzdCA9IHNraXBfaWYoTWFp
blRlc3QsIHN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJyBhbmQgY29tcGFyZV92ZXJzaW9uKHN5cywg
JzIuNicpWzBdIDwgMCwgJ25ldy1ydW4td2Via2l0LXRlc3RzIHRlc3RzIGhhbmcgb24gQ3lnd2lu
IFB5dGhvbiAyLjUuMicpCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101060</attachid>
            <date>2011-07-15 15:50:34 -0700</date>
            <delta_ts>2011-07-15 16:23:30 -0700</delta_ts>
            <desc>Proposed fix 3: With more python-ness thanks to Eric &amp; Dirk.</desc>
            <filename>bug-64564-20110715155033.patch</filename>
            <type>text/plain</type>
            <size>9368</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTEwNzQKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhZWQ5MDg3ZTQ1NWU1OTk3ZGI4NmM5OWYxMDk0YjkyMmQ3
NTUzYTFlLi5iNjIxODliODk4MjZlNmZmY2E5YWY2NjRlMzFlZDQyMDhjMTkzMjFjIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTEtMDctMTUgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+
CisKKyAgICAgICAgW05SV1RdIEFkZCBzdXBwb3J0IGZvciAtLW5vLWh0dHAKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NTY0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgLS1u
by1odHRwLCB3aGljaCBkaXNhYmxlcyBib3RoIEhUVFAgYW5kIHdlYnNvY2tldHMgdGVzdHMuCisg
ICAgICAgIEl0IGFsc28gbWF0Y2hlcyB0aGUgb2xkLXJ1bi13ZWJraXQtdGVzdHMgYmVoYXZpb3Ig
aWYgLS1mb3JjZSBpcyB1c2VkLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weToKKyAgICAgICAgRml4ZWQgSFRUUF9TVUJESVIg
YW5kIFdFQlNPQ0tFVF9TVUJESVIgYXMgdGVzdHMgZG8gbm90IHN0YXJ0IHdpdGggYSBsZWFkaW5n
IHNlcGFyYXRvci4KKyAgICAgICAgV2UgY2hlY2sgaWYgLS1uby1odHRwIGlzIHNldCBhbmQgYWRk
IHRoZSBIVFRQIC8gd2Vic29ja2V0cyB0ZXN0cyB0byB0aGUgc2tpcHBlZCBsaXN0IHByaW9yIHRv
IGxvb2tpbmcKKyAgICAgICAgYXQgdGhlIGV4cGVjdGF0aW9uIGZpbGUuIEZpeGVkIHRoZSAgX3Rl
c3RfcmVxdWlyZXNfbG9jayBmdW5jdGlvbiB0byB1c2UgdGhlIHNhbWUgY29kZSBwYXRoIHRvIGRl
dGVybWluZQorICAgICAgICB3aGF0IGlzIHdvcnRoIGhhdmUgYW4gSFRUUCBsb2NrIGFzIC0tbm8t
aHR0cCB0byBhdm9pZCBiYWRuZXNzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC90ZXN0LnB5OiBBZGRlZCAyIG5ldyB0ZXN0cyB0byBvdXIgbW9jayBmaWxl
c3lzdGVtIHRvIHZhbGlkYXRlIHRoYXQKKyAgICAgICAgd2UgZG8gc2tpcCBwcm9wZXJseSBIVFRQ
IC8gd2Vic29ja2V0IHRlc3RzIGluc2lkZSBwbGF0Zm9ybS8uCisKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5OgorICAgICAgICBBZGRl
ZCB0ZXN0cyB0aGF0IHdlIHByb3Blcmx5IHNraXAgYWxsIHRoZSB0ZXN0cy4KKworICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRp
b250ZXN0LnB5OgorICAgICAgICBBZGRlZCBjaGVja3MgZm9yIHRoZSBjb21tYW5kIGxpbmUgYXJn
dW1lbnRzLgorCiAyMDExLTA3LTE1ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgU3RvcmUgZXJyb3IgYW5kIHdhcm5pbmcgaW5mb3JtYXRpb24gb24g
VGVzdEV4cGVjdGF0aW9uTGluZS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5CmluZGV4IGQ2MjkwMGZlOGIy
MjE4NjEyYzBiOTkyMmFhOWE4MzVjODM0MmZmYjYuLmEyODVlMzY5ZWNjODUyNDgyNTU5ZDFiYWY0
YzBhN2NjN2M5ZjU0NTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weQpAQCAtMjc5LDggKzI3OSw4IEBA
IGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgc2VsZi5fbWVzc2FnZV9icm9rZXIgPSBO
b25lCiAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucyA9IE5vbmUKIAotICAgICAgICBzZWxmLkhU
VFBfU1VCRElSID0gcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SICsgJ2h0dHAnICsgcG9ydC5URVNU
X1BBVEhfU0VQQVJBVE9SCi0gICAgICAgIHNlbGYuV0VCU09DS0VUX1NVQkRJUiA9IHBvcnQuVEVT
VF9QQVRIX1NFUEFSQVRPUiArICd3ZWJzb2NrZXQnICsgcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9S
CisgICAgICAgIHNlbGYuSFRUUF9TVUJESVIgPSAnaHR0cCcgKyBwb3J0LlRFU1RfUEFUSF9TRVBB
UkFUT1IKKyAgICAgICAgc2VsZi5XRUJTT0NLRVRfU1VCRElSID0gJ3dlYnNvY2tldCcgKyBwb3J0
LlRFU1RfUEFUSF9TRVBBUkFUT1IKICAgICAgICAgc2VsZi5MQVlPVVRfVEVTVFNfRElSRUNUT1JZ
ID0gJ0xheW91dFRlc3RzJwogICAgICAgICBzZWxmLl9oYXNfaHR0cF9sb2NrID0gRmFsc2UKIApA
QCAtMzU2LDYgKzM1NiwxMiBAQCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgICAgICBz
ZWxmLl9vcHRpb25zLmxpbnRfdGVzdF9maWxlcywKICAgICAgICAgICAgIHBvcnQudGVzdF9leHBl
Y3RhdGlvbnNfb3ZlcnJpZGVzKCkpCiAKKyAgICBkZWYgX2lzX2h0dHBfdGVzdChzZWxmLCB0ZXN0
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuSFRUUF9TVUJESVIgaW4gdGVzdCBvciBzZWxmLldFQlNP
Q0tFVF9TVUJESVIgaW4gdGVzdAorCisgICAgZGVmIF9odHRwX3Rlc3RzKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2V0KHRlc3QgZm9yIHRlc3QgaW4gc2VsZi5fdGVzdF9maWxlcyBpZiBzZWxmLl9p
c19odHRwX3Rlc3QodGVzdCkpCisKICAgICBkZWYgcGFyc2VfZXhwZWN0YXRpb25zKHNlbGYpOgog
ICAgICAgICAiIiJQYXJzZSB0aGUgZXhwZWN0YXRpb25zIGZyb20gdGhlIHRlc3RfbGlzdCBmaWxl
cyBhbmQgcmV0dXJuIGEgZGF0YQogICAgICAgICBzdHJ1Y3R1cmUgaG9sZGluZyB0aGVtLiBUaHJv
d3MgYW4gZXJyb3IgaWYgdGhlIHRlc3RfbGlzdCBmaWxlcyBoYXZlCkBAIC0zODUsMTUgKzM5MSwx
OCBAQCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogCiAg
ICAgICAgIHNraXBwZWQgPSBzZXQoKQorCisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLmh0
dHA6CisgICAgICAgICAgICBza2lwcGVkID0gc2tpcHBlZC51bmlvbihzZWxmLl9odHRwX3Rlc3Rz
KCkpCisKICAgICAgICAgaWYgbnVtX2FsbF90ZXN0X2ZpbGVzID4gMSBhbmQgbm90IHNlbGYuX29w
dGlvbnMuZm9yY2U6Ci0gICAgICAgICAgICBza2lwcGVkID0gc2VsZi5fZXhwZWN0YXRpb25zLmdl
dF90ZXN0c193aXRoX3Jlc3VsdF90eXBlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVz
dF9leHBlY3RhdGlvbnMuU0tJUCkKLSAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXMgLT0gc2tp
cHBlZAorICAgICAgICAgICAgc2tpcHBlZCA9IHNraXBwZWQudW5pb24oc2VsZi5fZXhwZWN0YXRp
b25zLmdldF90ZXN0c193aXRoX3Jlc3VsdF90eXBlKHRlc3RfZXhwZWN0YXRpb25zLlNLSVApKQog
ICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5za2lwX2ZhaWxpbmdfdGVzdHM6Ci0gICAgICAg
ICAgICAgICAgZmFpbGluZyA9IHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfdGVzdHNfd2l0aF9yZXN1
bHRfdHlwZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9u
cy5GQUlMKQorICAgICAgICAgICAgICAgIGZhaWxpbmcgPSBzZWxmLl9leHBlY3RhdGlvbnMuZ2V0
X3Rlc3RzX3dpdGhfcmVzdWx0X3R5cGUodGVzdF9leHBlY3RhdGlvbnMuRkFJTCkKICAgICAgICAg
ICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzIC09IGZhaWxpbmcKIAorICAgICAgICBzZWxmLl90ZXN0
X2ZpbGVzIC09IHNraXBwZWQKKwogICAgICAgICAjIENyZWF0ZSBhIHNvcnRlZCBsaXN0IG9mIHRl
c3QgZmlsZXMgc28gdGhlIHN1YnNldCBjaHVuaywKICAgICAgICAgIyBpZiB1c2VkLCBjb250YWlu
cyBhbHBoYWJldGljYWxseSBjb25zZWN1dGl2ZSB0ZXN0cy4KICAgICAgICAgc2VsZi5fdGVzdF9m
aWxlc19saXN0ID0gbGlzdChzZWxmLl90ZXN0X2ZpbGVzKQpAQCAtNTM3LDggKzU0Niw3IEBAIGNs
YXNzIE1hbmFnZXIob2JqZWN0KToKICAgICBkZWYgX3Rlc3RfcmVxdWlyZXNfbG9jayhzZWxmLCB0
ZXN0X2ZpbGUpOgogICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgdGVzdCBuZWVkcyB0byBi
ZSBsb2NrZWQgd2hlbgogICAgICAgICBydW5uaW5nIG11bHRpcGxlIGNvcGllcyBvZiBOUldUcy4i
IiIKLSAgICAgICAgc3BsaXRfcGF0aCA9IHRlc3RfZmlsZS5zcGxpdChzZWxmLl9wb3J0LlRFU1Rf
UEFUSF9TRVBBUkFUT1IpCi0gICAgICAgIHJldHVybiAnaHR0cCcgaW4gc3BsaXRfcGF0aCBvciAn
d2Vic29ja2V0JyBpbiBzcGxpdF9wYXRoCisgICAgICAgIHJldHVybiBzZWxmLl9pc19odHRwX3Rl
c3QodGVzdF9maWxlKQogCiAgICAgZGVmIF90ZXN0X2lzX3Nsb3coc2VsZiwgdGVzdF9maWxlKToK
ICAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdGF0aW9ucy5oYXNfbW9kaWZpZXIodGVzdF9maWxl
LCB0ZXN0X2V4cGVjdGF0aW9ucy5TTE9XKQpAQCAtOTM1LDYgKzk0Myw3IEBAIGNsYXNzIE1hbmFn
ZXIob2JqZWN0KToKICAgICAgICAgcmV0dXJuIHVuZXhwZWN0ZWRfcmVzdWx0c1snbnVtX3JlZ3Jl
c3Npb25zJ10KIAogICAgIGRlZiBzdGFydF9zZXJ2ZXJzX3dpdGhfbG9jayhzZWxmKToKKyAgICAg
ICAgYXNzZXJ0KHNlbGYuX29wdGlvbnMuaHR0cCkKICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmlu
dF91cGRhdGUoJ0FjcXVpcmluZyBodHRwIGxvY2sgLi4uJykKICAgICAgICAgc2VsZi5fcG9ydC5h
Y3F1aXJlX2h0dHBfbG9jaygpCiAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdT
dGFydGluZyBIVFRQIHNlcnZlciAuLi4nKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CmluZGV4IDMyY2JjOWFmZmMzYjVlNGY0NTlmMWRkZTU4
MjYyMWM1MmE1M2YyYWEuLjlhMmM1ZDEzYzMzMjg2Njc4NTgxYWUzZmUyYjAxZGQzZDllZGVhNGMg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVz
dC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3Qu
cHkKQEAgLTE3Nyw2ICsxNzcsMTEgQEAgZGVmIHVuaXRfdGVzdF9saXN0KCk6CiAgICAgIyBGSVhN
RTogQWRkIGEgcmVmdGVzdCB3aGljaCBjcmFzaGVzLgogCiAgICAgdGVzdHMuYWRkKCd3ZWJzb2Nr
ZXQvdGVzdHMvcGFzc2VzL3RleHQuaHRtbCcpCisKKyAgICAjIEZvciAtLW5vLWh0dHAgdGVzdHMu
CisgICAgdGVzdHMuYWRkKCdwbGF0Zm9ybS90ZXN0LXNub3ctbGVvcGFyZC9odHRwL3Rlc3QuaHRt
bCcpCisgICAgdGVzdHMuYWRkKCdwbGF0Zm9ybS90ZXN0LXNub3ctbGVvcGFyZC93ZWJzb2NrZXQv
dGVzdC5odG1sJykKKwogICAgIHJldHVybiB0ZXN0cwogCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4IDlk
ODNmZmUyYzQ4MzU4YTM5NzcyNmRmZGYwOWI1YTdjYTg2M2NmN2MuLjgwYTE1YjJjYmE0MTM4M2Vk
MGFmMWJlM2FiMGI5NWVkZmNlMTA5ZDAgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtMTUzLDYgKzE1Mywx
MCBAQCBkZWYgX3NldF91cF9kZXJpdmVkX29wdGlvbnMocG9ydCwgb3B0aW9ucyk6CiAgICAgICAg
ICAgICBub3JtYWxpemVkX3BsYXRmb3JtX2RpcmVjdG9yaWVzLmFwcGVuZChwb3J0LmZpbGVzeXN0
ZW0ubm9ybXBhdGgocGF0aCkpCiAgICAgICAgIG9wdGlvbnMuYWRkaXRpb25hbF9wbGF0Zm9ybV9k
aXJlY3RvcnkgPSBub3JtYWxpemVkX3BsYXRmb3JtX2RpcmVjdG9yaWVzCiAKKyAgICBpZiBub3Qg
b3B0aW9ucy5odHRwIGFuZCBvcHRpb25zLmZvcmNlOgorICAgICAgICB3YXJuaW5ncy5hcHBlbmQo
Ii0tbm8taHR0cCBpcyBpZ25vcmVkIHNpbmNlIC0tZm9yY2UgaXMgYWxzbyBwcm92aWRlZCIpCisg
ICAgICAgIG9wdGlvbnMuaHR0cCA9IFRydWUKKwogICAgIHJldHVybiB3YXJuaW5ncwogCiAKQEAg
LTMxNyw5ICszMjEsMTAgQEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKICAgICAgICAgb3B0
cGFyc2UubWFrZV9vcHRpb24oIi0tbm8tcmVjb3JkLXJlc3VsdHMiLCBhY3Rpb249InN0b3JlX2Zh
bHNlIiwKICAgICAgICAgICAgIGRlZmF1bHQ9VHJ1ZSwgZGVzdD0icmVjb3JkX3Jlc3VsdHMiLAog
ICAgICAgICAgICAgaGVscD0iRG9uJ3QgcmVjb3JkIHRoZSByZXN1bHRzLiIpLAotICAgICAgICAj
IG9sZC1ydW4td2Via2l0LXRlc3RzIGFsc28gaGFzIEhUVFAgdG9nZ2xlIG9wdGlvbnM6Ci0gICAg
ICAgICMgLS1bbm8tXWh0dHAgICAgICAgICAgICAgICAgICAgICBSdW4gKG9yIGRvIG5vdCBydW4p
IGh0dHAgdGVzdHMKLSAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChk
ZWZhdWx0OiBydW4pCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWh0dHAiLCBhY3Rp
b249InN0b3JlX3RydWUiLCBkZXN0PSJodHRwIiwKKyAgICAgICAgICAgIGRlZmF1bHQ9VHJ1ZSwg
aGVscD0iUnVuIEhUVFAgYW5kIFdlYlNvY2tldCB0ZXN0cyAoZGVmYXVsdCkiKSwKKyAgICAgICAg
b3B0cGFyc2UubWFrZV9vcHRpb24oIi0tbm8taHR0cCIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLCBk
ZXN0PSJodHRwIiwKKyAgICAgICAgICAgIGhlbHA9IkRvbid0IHJ1biBIVFRQIGFuZCBXZWJTb2Nr
ZXQgdGVzdHMiKSwKICAgICBdCiAKICAgICB0ZXN0X29wdGlvbnMgPSBbCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVn
cmF0aW9udGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5CmluZGV4IGJlMjY3NWZkNDY2NDVkYTY3NGYz
ZmY1MDlkZjhjNWE2ODkyNTc2OGEuLjZjZTlkMzc3OTc3YmRlYzg3MWEyNWVlZTY4N2RmNzQ0YWVk
NDFmZjIgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5CkBA
IC02NTAsNiArNjUwLDMxIEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAg
ICAgICAgcmVzLCBidWlsZGJvdF9vdXRwdXQsIHJlZ3VsYXJfb3V0cHV0LCB1c2VyID0gbG9nZ2lu
Z19ydW4oWyctLWFkZGl0aW9uYWwtcGxhdGZvcm0tZGlyZWN0b3J5JywgJ2ZvbyddKQogICAgICAg
ICBzZWxmLmFzc2VydFRydWUoJy0tYWRkaXRpb25hbC1wbGF0Zm9ybS1kaXJlY3Rvcnk9Zm9vIGlz
IGlnbm9yZWQgc2luY2UgaXQgaXMgbm90IGFic29sdXRlXG4nIGluIHJlZ3VsYXJfb3V0cHV0Lmdl
dCgpKQogCisgICAgZGVmIHRlc3RfaHR0cF9wYXJhbWV0ZXIoc2VsZik6CisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tbm8taHR0cCddKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1odHRwJ10pKQorCisgICAgZGVmIHRlc3Rfbm9faHR0cF9h
bmRfZm9yY2Uoc2VsZik6CisgICAgICAgICMgU2VlIHRlc3RfcnVuX2ZvcmNlLCB1c2luZyAtLWZv
cmNlIHJhaXNlcyBhbiBleGNlcHRpb24uCisgICAgICAgICMgRklYTUU6IFdlIHdvdWxkIGxpa2Ug
dG8gY2hlY2sgdGhlIHdhcm5pbmdzIGdlbmVyYXRlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlz
ZXMoVmFsdWVFcnJvciwgbG9nZ2luZ19ydW4sIFsnLS1mb3JjZScsICctLW5vLWh0dHAnXSkKKwor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgaGFzX3Rlc3Rfb2ZfdHlwZSh0ZXN0cywgdHlwZSk6
CisgICAgICAgIHJldHVybiBbdGVzdCBmb3IgdGVzdCBpbiB0ZXN0cyBpZiB0eXBlIGluIHRlc3Rd
CisKKyAgICBkZWYgdGVzdF9ub19odHRwX3Rlc3RzKHNlbGYpOgorICAgICAgICBiYXRjaF90ZXN0
c19kcnlydW4gPSBnZXRfdGVzdHNfcnVuKFsnTGF5b3V0VGVzdHMvaHR0cCcsICd3ZWJzb2NrZXQv
J10sIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoTWFpblRl
c3QuaGFzX3Rlc3Rfb2ZfdHlwZShiYXRjaF90ZXN0c19kcnlydW4sICdodHRwJykpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShNYWluVGVzdC5oYXNfdGVzdF9vZl90eXBlKGJhdGNoX3Rlc3RzX2Ry
eXJ1biwgJ3dlYnNvY2tldCcpKQorCisgICAgICAgIGJhdGNoX3Rlc3RzX3J1bl9ub19odHRwID0g
Z2V0X3Rlc3RzX3J1bihbJy0tbm8taHR0cCcsICdMYXlvdXRUZXN0cy9odHRwJywgJ3dlYnNvY2tl
dC8nXSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoTWFp
blRlc3QuaGFzX3Rlc3Rfb2ZfdHlwZShiYXRjaF90ZXN0c19ydW5fbm9faHR0cCwgJ2h0dHAnKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShNYWluVGVzdC5oYXNfdGVzdF9vZl90eXBlKGJhdGNo
X3Rlc3RzX3J1bl9ub19odHRwLCAnd2Vic29ja2V0JykpCisKKyAgICAgICAgYmF0Y2hfdGVzdHNf
cnVuX2h0dHAgPSBnZXRfdGVzdHNfcnVuKFsnLS1odHRwJywgJ0xheW91dFRlc3RzL2h0dHAnLCAn
d2Vic29ja2V0LyddLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKE1haW5UZXN0Lmhhc190ZXN0X29mX3R5cGUoYmF0Y2hfdGVzdHNfcnVuX2h0dHAsICdodHRw
JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShNYWluVGVzdC5oYXNfdGVzdF9vZl90eXBlKGJh
dGNoX3Rlc3RzX3J1bl9odHRwLCAnd2Vic29ja2V0JykpCiAKIE1haW5UZXN0ID0gc2tpcF9pZihN
YWluVGVzdCwgc3lzLnBsYXRmb3JtID09ICdjeWd3aW4nIGFuZCBjb21wYXJlX3ZlcnNpb24oc3lz
LCAnMi42JylbMF0gPCAwLCAnbmV3LXJ1bi13ZWJraXQtdGVzdHMgdGVzdHMgaGFuZyBvbiBDeWd3
aW4gUHl0aG9uIDIuNS4yJykKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101066</attachid>
            <date>2011-07-15 16:23:33 -0700</date>
            <delta_ts>2011-07-15 18:11:13 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-64564-20110715162332.patch</filename>
            <type>text/plain</type>
            <size>9285</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTEwNzQKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhZWQ5MDg3ZTQ1NWU1OTk3ZGI4NmM5OWYxMDk0YjkyMmQ3
NTUzYTFlLi4yNWZiN2NhOTBlZWM0NzQwNWJkMTRlMTljY2MxMWExMTExZTc5N2ZhIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTEtMDctMTUgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+
CisKKyAgICAgICAgW05SV1RdIEFkZCBzdXBwb3J0IGZvciAtLW5vLWh0dHAKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NTY0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgRGlyayBQcmFua2UuCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgLS1uby1o
dHRwLCB3aGljaCBkaXNhYmxlcyBib3RoIEhUVFAgYW5kIHdlYnNvY2tldHMgdGVzdHMuCisgICAg
ICAgIEl0IGFsc28gbWF0Y2hlcyB0aGUgb2xkLXJ1bi13ZWJraXQtdGVzdHMgYmVoYXZpb3IgaWYg
LS1mb3JjZSBpcyB1c2VkLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvY29udHJvbGxlcnMvbWFuYWdlci5weToKKyAgICAgICAgRml4ZWQgSFRUUF9TVUJESVIgYW5k
IFdFQlNPQ0tFVF9TVUJESVIgYXMgdGVzdHMgZG8gbm90IHN0YXJ0IHdpdGggYSBsZWFkaW5nIHNl
cGFyYXRvci4KKyAgICAgICAgV2UgY2hlY2sgaWYgLS1uby1odHRwIGlzIHNldCBhbmQgYWRkIHRo
ZSBIVFRQIC8gd2Vic29ja2V0cyB0ZXN0cyB0byB0aGUgc2tpcHBlZCBsaXN0IHByaW9yIHRvIGxv
b2tpbmcKKyAgICAgICAgYXQgdGhlIGV4cGVjdGF0aW9uIGZpbGUuIEZpeGVkIHRoZSAgX3Rlc3Rf
cmVxdWlyZXNfbG9jayBmdW5jdGlvbiB0byB1c2UgdGhlIHNhbWUgY29kZSBwYXRoIHRvIGRldGVy
bWluZQorICAgICAgICB3aGF0IGlzIHdvcnRoIGhhdmUgYW4gSFRUUCBsb2NrIGFzIC0tbm8taHR0
cCB0byBhdm9pZCBiYWRuZXNzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC90ZXN0LnB5OiBBZGRlZCAyIG5ldyB0ZXN0cyB0byBvdXIgbW9jayBmaWxlc3lz
dGVtIHRvIHZhbGlkYXRlIHRoYXQKKyAgICAgICAgd2UgZG8gc2tpcCBwcm9wZXJseSBIVFRQIC8g
d2Vic29ja2V0IHRlc3RzIGluc2lkZSBwbGF0Zm9ybS8uCisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5OgorICAgICAgICBBZGRlZCB0
ZXN0cyB0aGF0IHdlIHByb3Blcmx5IHNraXAgYWxsIHRoZSB0ZXN0cy4KKworICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250
ZXN0LnB5OgorICAgICAgICBBZGRlZCBjaGVja3MgZm9yIHRoZSBjb21tYW5kIGxpbmUgYXJndW1l
bnRzLgorCiAyMDExLTA3LTE1ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgU3RvcmUgZXJyb3IgYW5kIHdhcm5pbmcgaW5mb3JtYXRpb24gb24gVGVz
dEV4cGVjdGF0aW9uTGluZS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5CmluZGV4IGQ2MjkwMGZlOGIyMjE4
NjEyYzBiOTkyMmFhOWE4MzVjODM0MmZmYjYuLmEyODVlMzY5ZWNjODUyNDgyNTU5ZDFiYWY0YzBh
N2NjN2M5ZjU0NTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weQpAQCAtMjc5LDggKzI3OSw4IEBAIGNs
YXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgc2VsZi5fbWVzc2FnZV9icm9rZXIgPSBOb25l
CiAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucyA9IE5vbmUKIAotICAgICAgICBzZWxmLkhUVFBf
U1VCRElSID0gcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SICsgJ2h0dHAnICsgcG9ydC5URVNUX1BB
VEhfU0VQQVJBVE9SCi0gICAgICAgIHNlbGYuV0VCU09DS0VUX1NVQkRJUiA9IHBvcnQuVEVTVF9Q
QVRIX1NFUEFSQVRPUiArICd3ZWJzb2NrZXQnICsgcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SCisg
ICAgICAgIHNlbGYuSFRUUF9TVUJESVIgPSAnaHR0cCcgKyBwb3J0LlRFU1RfUEFUSF9TRVBBUkFU
T1IKKyAgICAgICAgc2VsZi5XRUJTT0NLRVRfU1VCRElSID0gJ3dlYnNvY2tldCcgKyBwb3J0LlRF
U1RfUEFUSF9TRVBBUkFUT1IKICAgICAgICAgc2VsZi5MQVlPVVRfVEVTVFNfRElSRUNUT1JZID0g
J0xheW91dFRlc3RzJwogICAgICAgICBzZWxmLl9oYXNfaHR0cF9sb2NrID0gRmFsc2UKIApAQCAt
MzU2LDYgKzM1NiwxMiBAQCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgICAgICBzZWxm
Ll9vcHRpb25zLmxpbnRfdGVzdF9maWxlcywKICAgICAgICAgICAgIHBvcnQudGVzdF9leHBlY3Rh
dGlvbnNfb3ZlcnJpZGVzKCkpCiAKKyAgICBkZWYgX2lzX2h0dHBfdGVzdChzZWxmLCB0ZXN0KToK
KyAgICAgICAgcmV0dXJuIHNlbGYuSFRUUF9TVUJESVIgaW4gdGVzdCBvciBzZWxmLldFQlNPQ0tF
VF9TVUJESVIgaW4gdGVzdAorCisgICAgZGVmIF9odHRwX3Rlc3RzKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2V0KHRlc3QgZm9yIHRlc3QgaW4gc2VsZi5fdGVzdF9maWxlcyBpZiBzZWxmLl9pc19o
dHRwX3Rlc3QodGVzdCkpCisKICAgICBkZWYgcGFyc2VfZXhwZWN0YXRpb25zKHNlbGYpOgogICAg
ICAgICAiIiJQYXJzZSB0aGUgZXhwZWN0YXRpb25zIGZyb20gdGhlIHRlc3RfbGlzdCBmaWxlcyBh
bmQgcmV0dXJuIGEgZGF0YQogICAgICAgICBzdHJ1Y3R1cmUgaG9sZGluZyB0aGVtLiBUaHJvd3Mg
YW4gZXJyb3IgaWYgdGhlIHRlc3RfbGlzdCBmaWxlcyBoYXZlCkBAIC0zODUsMTUgKzM5MSwxOCBA
QCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogCiAgICAg
ICAgIHNraXBwZWQgPSBzZXQoKQorCisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLmh0dHA6
CisgICAgICAgICAgICBza2lwcGVkID0gc2tpcHBlZC51bmlvbihzZWxmLl9odHRwX3Rlc3RzKCkp
CisKICAgICAgICAgaWYgbnVtX2FsbF90ZXN0X2ZpbGVzID4gMSBhbmQgbm90IHNlbGYuX29wdGlv
bnMuZm9yY2U6Ci0gICAgICAgICAgICBza2lwcGVkID0gc2VsZi5fZXhwZWN0YXRpb25zLmdldF90
ZXN0c193aXRoX3Jlc3VsdF90eXBlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9l
eHBlY3RhdGlvbnMuU0tJUCkKLSAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXMgLT0gc2tpcHBl
ZAorICAgICAgICAgICAgc2tpcHBlZCA9IHNraXBwZWQudW5pb24oc2VsZi5fZXhwZWN0YXRpb25z
LmdldF90ZXN0c193aXRoX3Jlc3VsdF90eXBlKHRlc3RfZXhwZWN0YXRpb25zLlNLSVApKQogICAg
ICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5za2lwX2ZhaWxpbmdfdGVzdHM6Ci0gICAgICAgICAg
ICAgICAgZmFpbGluZyA9IHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfdGVzdHNfd2l0aF9yZXN1bHRf
dHlwZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5G
QUlMKQorICAgICAgICAgICAgICAgIGZhaWxpbmcgPSBzZWxmLl9leHBlY3RhdGlvbnMuZ2V0X3Rl
c3RzX3dpdGhfcmVzdWx0X3R5cGUodGVzdF9leHBlY3RhdGlvbnMuRkFJTCkKICAgICAgICAgICAg
ICAgICBzZWxmLl90ZXN0X2ZpbGVzIC09IGZhaWxpbmcKIAorICAgICAgICBzZWxmLl90ZXN0X2Zp
bGVzIC09IHNraXBwZWQKKwogICAgICAgICAjIENyZWF0ZSBhIHNvcnRlZCBsaXN0IG9mIHRlc3Qg
ZmlsZXMgc28gdGhlIHN1YnNldCBjaHVuaywKICAgICAgICAgIyBpZiB1c2VkLCBjb250YWlucyBh
bHBoYWJldGljYWxseSBjb25zZWN1dGl2ZSB0ZXN0cy4KICAgICAgICAgc2VsZi5fdGVzdF9maWxl
c19saXN0ID0gbGlzdChzZWxmLl90ZXN0X2ZpbGVzKQpAQCAtNTM3LDggKzU0Niw3IEBAIGNsYXNz
IE1hbmFnZXIob2JqZWN0KToKICAgICBkZWYgX3Rlc3RfcmVxdWlyZXNfbG9jayhzZWxmLCB0ZXN0
X2ZpbGUpOgogICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgdGVzdCBuZWVkcyB0byBiZSBs
b2NrZWQgd2hlbgogICAgICAgICBydW5uaW5nIG11bHRpcGxlIGNvcGllcyBvZiBOUldUcy4iIiIK
LSAgICAgICAgc3BsaXRfcGF0aCA9IHRlc3RfZmlsZS5zcGxpdChzZWxmLl9wb3J0LlRFU1RfUEFU
SF9TRVBBUkFUT1IpCi0gICAgICAgIHJldHVybiAnaHR0cCcgaW4gc3BsaXRfcGF0aCBvciAnd2Vi
c29ja2V0JyBpbiBzcGxpdF9wYXRoCisgICAgICAgIHJldHVybiBzZWxmLl9pc19odHRwX3Rlc3Qo
dGVzdF9maWxlKQogCiAgICAgZGVmIF90ZXN0X2lzX3Nsb3coc2VsZiwgdGVzdF9maWxlKToKICAg
ICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdGF0aW9ucy5oYXNfbW9kaWZpZXIodGVzdF9maWxlLCB0
ZXN0X2V4cGVjdGF0aW9ucy5TTE9XKQpAQCAtOTM1LDYgKzk0Myw3IEBAIGNsYXNzIE1hbmFnZXIo
b2JqZWN0KToKICAgICAgICAgcmV0dXJuIHVuZXhwZWN0ZWRfcmVzdWx0c1snbnVtX3JlZ3Jlc3Np
b25zJ10KIAogICAgIGRlZiBzdGFydF9zZXJ2ZXJzX3dpdGhfbG9jayhzZWxmKToKKyAgICAgICAg
YXNzZXJ0KHNlbGYuX29wdGlvbnMuaHR0cCkKICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91
cGRhdGUoJ0FjcXVpcmluZyBodHRwIGxvY2sgLi4uJykKICAgICAgICAgc2VsZi5fcG9ydC5hY3F1
aXJlX2h0dHBfbG9jaygpCiAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFy
dGluZyBIVFRQIHNlcnZlciAuLi4nKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC90ZXN0LnB5CmluZGV4IDMyY2JjOWFmZmMzYjVlNGY0NTlmMWRkZTU4MjYy
MWM1MmE1M2YyYWEuLjJkMmQ0YmEzZmYzNWI1NmRjNTdlZGQ5ZDEwNmI4YTQwMmJmNTIxZDAgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkK
QEAgLTE3Nyw2ICsxNzcsMTEgQEAgZGVmIHVuaXRfdGVzdF9saXN0KCk6CiAgICAgIyBGSVhNRTog
QWRkIGEgcmVmdGVzdCB3aGljaCBjcmFzaGVzLgogCiAgICAgdGVzdHMuYWRkKCd3ZWJzb2NrZXQv
dGVzdHMvcGFzc2VzL3RleHQuaHRtbCcpCisKKyAgICAjIEZvciAtLW5vLWh0dHAgdGVzdHMsIHRl
c3QgdGhhdCBwbGF0Zm9ybSBzcGVjaWZpYyBIVFRQIHRlc3RzIGFyZSBwcm9wZXJseSBza2lwcGVk
LgorICAgIHRlc3RzLmFkZCgncGxhdGZvcm0vdGVzdC1zbm93LWxlb3BhcmQvaHR0cC90ZXN0Lmh0
bWwnKQorICAgIHRlc3RzLmFkZCgncGxhdGZvcm0vdGVzdC1zbm93LWxlb3BhcmQvd2Vic29ja2V0
L3Rlc3QuaHRtbCcpCisKICAgICByZXR1cm4gdGVzdHMKIAogCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQppbmRleCA5
ZDgzZmZlMmM0ODM1OGEzOTc3MjZkZmRmMDliNWE3Y2E4NjNjZjdjLi44MGExNWIyY2JhNDEzODNl
ZDBhZjFiZTNhYjBiOTVlZGZjZTEwOWQwIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKQEAgLTE1Myw2ICsxNTMs
MTAgQEAgZGVmIF9zZXRfdXBfZGVyaXZlZF9vcHRpb25zKHBvcnQsIG9wdGlvbnMpOgogICAgICAg
ICAgICAgbm9ybWFsaXplZF9wbGF0Zm9ybV9kaXJlY3Rvcmllcy5hcHBlbmQocG9ydC5maWxlc3lz
dGVtLm5vcm1wYXRoKHBhdGgpKQogICAgICAgICBvcHRpb25zLmFkZGl0aW9uYWxfcGxhdGZvcm1f
ZGlyZWN0b3J5ID0gbm9ybWFsaXplZF9wbGF0Zm9ybV9kaXJlY3RvcmllcwogCisgICAgaWYgbm90
IG9wdGlvbnMuaHR0cCBhbmQgb3B0aW9ucy5mb3JjZToKKyAgICAgICAgd2FybmluZ3MuYXBwZW5k
KCItLW5vLWh0dHAgaXMgaWdub3JlZCBzaW5jZSAtLWZvcmNlIGlzIGFsc28gcHJvdmlkZWQiKQor
ICAgICAgICBvcHRpb25zLmh0dHAgPSBUcnVlCisKICAgICByZXR1cm4gd2FybmluZ3MKIAogCkBA
IC0zMTcsOSArMzIxLDEwIEBAIGRlZiBwYXJzZV9hcmdzKGFyZ3M9Tm9uZSk6CiAgICAgICAgIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKCItLW5vLXJlY29yZC1yZXN1bHRzIiwgYWN0aW9uPSJzdG9yZV9m
YWxzZSIsCiAgICAgICAgICAgICBkZWZhdWx0PVRydWUsIGRlc3Q9InJlY29yZF9yZXN1bHRzIiwK
ICAgICAgICAgICAgIGhlbHA9IkRvbid0IHJlY29yZCB0aGUgcmVzdWx0cy4iKSwKLSAgICAgICAg
IyBvbGQtcnVuLXdlYmtpdC10ZXN0cyBhbHNvIGhhcyBIVFRQIHRvZ2dsZSBvcHRpb25zOgotICAg
ICAgICAjIC0tW25vLV1odHRwICAgICAgICAgICAgICAgICAgICAgUnVuIChvciBkbyBub3QgcnVu
KSBodHRwIHRlc3RzCi0gICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
ZGVmYXVsdDogcnVuKQorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1odHRwIiwgYWN0
aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0iaHR0cCIsCisgICAgICAgICAgICBkZWZhdWx0PVRydWUs
IGhlbHA9IlJ1biBIVFRQIGFuZCBXZWJTb2NrZXQgdGVzdHMgKGRlZmF1bHQpIiksCisgICAgICAg
IG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLW5vLWh0dHAiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwg
ZGVzdD0iaHR0cCIsCisgICAgICAgICAgICBoZWxwPSJEb24ndCBydW4gSFRUUCBhbmQgV2ViU29j
a2V0IHRlc3RzIiksCiAgICAgXQogCiAgICAgdGVzdF9vcHRpb25zID0gWwpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRl
Z3JhdGlvbnRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5f
d2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQppbmRleCBiZTI2NzVmZDQ2NjQ1ZGE2NzRm
M2ZmNTA5ZGY4YzVhNjg5MjU3NjhhLi5kY2M0YTYzZjY2ZjIzZDYxZmIwNTIxY2U0ZTkyODVlNmU1
ZTRkNTE0IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQpA
QCAtNjUwLDYgKzY1MCwyNyBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAg
ICAgICAgIHJlcywgYnVpbGRib3Rfb3V0cHV0LCByZWd1bGFyX291dHB1dCwgdXNlciA9IGxvZ2dp
bmdfcnVuKFsnLS1hZGRpdGlvbmFsLXBsYXRmb3JtLWRpcmVjdG9yeScsICdmb28nXSkKICAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKCctLWFkZGl0aW9uYWwtcGxhdGZvcm0tZGlyZWN0b3J5PWZvbyBp
cyBpZ25vcmVkIHNpbmNlIGl0IGlzIG5vdCBhYnNvbHV0ZVxuJyBpbiByZWd1bGFyX291dHB1dC5n
ZXQoKSkKIAorICAgIGRlZiB0ZXN0X25vX2h0dHBfYW5kX2ZvcmNlKHNlbGYpOgorICAgICAgICAj
IFNlZSB0ZXN0X3J1bl9mb3JjZSwgdXNpbmcgLS1mb3JjZSByYWlzZXMgYW4gZXhjZXB0aW9uLgor
ICAgICAgICAjIEZJWE1FOiBXZSB3b3VsZCBsaWtlIHRvIGNoZWNrIHRoZSB3YXJuaW5ncyBnZW5l
cmF0ZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvZ2dpbmdfcnVu
LCBbJy0tZm9yY2UnLCAnLS1uby1odHRwJ10pCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IGhhc190ZXN0X29mX3R5cGUodGVzdHMsIHR5cGUpOgorICAgICAgICByZXR1cm4gW3Rlc3QgZm9y
IHRlc3QgaW4gdGVzdHMgaWYgdHlwZSBpbiB0ZXN0XQorCisgICAgZGVmIHRlc3Rfbm9faHR0cF90
ZXN0cyhzZWxmKToKKyAgICAgICAgYmF0Y2hfdGVzdHNfZHJ5cnVuID0gZ2V0X3Rlc3RzX3J1bihb
J0xheW91dFRlc3RzL2h0dHAnLCAnd2Vic29ja2V0LyddLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKE1haW5UZXN0Lmhhc190ZXN0X29mX3R5cGUoYmF0Y2hf
dGVzdHNfZHJ5cnVuLCAnaHR0cCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoTWFpblRlc3Qu
aGFzX3Rlc3Rfb2ZfdHlwZShiYXRjaF90ZXN0c19kcnlydW4sICd3ZWJzb2NrZXQnKSkKKworICAg
ICAgICBiYXRjaF90ZXN0c19ydW5fbm9faHR0cCA9IGdldF90ZXN0c19ydW4oWyctLW5vLWh0dHAn
LCAnTGF5b3V0VGVzdHMvaHR0cCcsICd3ZWJzb2NrZXQvJ10sIGZsYXR0ZW5fYmF0Y2hlcz1UcnVl
KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKE1haW5UZXN0Lmhhc190ZXN0X29mX3R5cGUoYmF0
Y2hfdGVzdHNfcnVuX25vX2h0dHAsICdodHRwJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
TWFpblRlc3QuaGFzX3Rlc3Rfb2ZfdHlwZShiYXRjaF90ZXN0c19ydW5fbm9faHR0cCwgJ3dlYnNv
Y2tldCcpKQorCisgICAgICAgIGJhdGNoX3Rlc3RzX3J1bl9odHRwID0gZ2V0X3Rlc3RzX3J1bihb
Jy0taHR0cCcsICdMYXlvdXRUZXN0cy9odHRwJywgJ3dlYnNvY2tldC8nXSwgZmxhdHRlbl9iYXRj
aGVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShNYWluVGVzdC5oYXNfdGVzdF9vZl90
eXBlKGJhdGNoX3Rlc3RzX3J1bl9odHRwLCAnaHR0cCcpKQorICAgICAgICBzZWxmLmFzc2VydFRy
dWUoTWFpblRlc3QuaGFzX3Rlc3Rfb2ZfdHlwZShiYXRjaF90ZXN0c19ydW5faHR0cCwgJ3dlYnNv
Y2tldCcpKQogCiBNYWluVGVzdCA9IHNraXBfaWYoTWFpblRlc3QsIHN5cy5wbGF0Zm9ybSA9PSAn
Y3lnd2luJyBhbmQgY29tcGFyZV92ZXJzaW9uKHN5cywgJzIuNicpWzBdIDwgMCwgJ25ldy1ydW4t
d2Via2l0LXRlc3RzIHRlc3RzIGhhbmcgb24gQ3lnd2luIFB5dGhvbiAyLjUuMicpCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>