<?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>42832</bug_id>
          
          <creation_ts>2010-07-22 09:21:41 -0700</creation_ts>
          <short_desc>webkit-patch command to find the ports covering a specific layout test</short_desc>
          <delta_ts>2011-11-02 21:53:05 -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>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Philippe Normand">pnormand</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>dbates</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>254842</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-07-22 09:21:41 -0700</bug_when>
    <thetext>I needed such command so maybe some people would be interested too. Will attach the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254843</commentid>
    <comment_count>1</comment_count>
      <attachid>62307</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-07-22 09:24:49 -0700</bug_when>
    <thetext>Created attachment 62307
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254845</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-22 09:26:28 -0700</bug_when>
    <thetext>Attachment 62307 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKitTools/Scripts/webkitpy/tool/commands/queries.py:289:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/Scripts/webkitpy/tool/commands/queries.py:300:  whitespace after &apos;[&apos;  [pep8/E201] [5]
Total errors found: 2 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254848</commentid>
    <comment_count>3</comment_count>
      <attachid>62309</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-07-22 09:30:24 -0700</bug_when>
    <thetext>Created attachment 62309
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254919</commentid>
    <comment_count>4</comment_count>
      <attachid>62309</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-07-22 12:17:08 -0700</bug_when>
    <thetext>Comment on attachment 62309
proposed patch

This seems like a useful command. This patch needs a unittest.

&gt; +        webkit-patch command to find the ports covering a specific layout test

I don&apos;t think using the word &quot;cover&quot; is very clear. How about s/covering/not skipping/?

&gt; +class WhatCovers(AbstractDeclarativeCommand):
&gt; +    name = &quot;what-covers&quot;

This name isn&apos;t very clear. Instead of giving the list of ports that don&apos;t skip the test, how about returning the list of ports that do skip it. Usually, that list will be much shorter. Then this command could be called &quot;skipped-ports&quot; or something like htat.

&gt; +    def execute(self, options, args, tool):
&gt; +        platform_directory = os.path.join(tool.scm().cwd, &quot;LayoutTests&quot;, &quot;platform&quot;)

Ideally this wouldn&apos;t depend on being run from a specific directory. scm.py has some bits to find to root directory of the checkout.

&gt; +        results = dict([(test, []) for test in args])
&gt; +        for port_name in os.listdir(platform_directory):
&gt; +            skipped_file = os.path.join(platform_directory, port_name, &quot;Skipped&quot;)

Can you put a FIXME to also check LayoutTests/platform/chromium/test_expectations.txt? Or, even better, just add the code to parse it. That file has a different syntax. Each test is on it&apos;s own line, but it&apos;s not just skipped. The format for the line is:
MODIFIERS : path/to/test = EXPECTATIONS

If the test is skipped, the one of the MODIFIERS will be SKIP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255241</commentid>
    <comment_count>5</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-07-23 00:43:57 -0700</bug_when>
    <thetext>Thanks for the review. I made the requested changes but I need more time for the unittest as it requires a new mock and maybe a new API in scm.py, not sure yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255285</commentid>
    <comment_count>6</comment_count>
      <attachid>62404</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-07-23 03:25:31 -0700</bug_when>
    <thetext>Created attachment 62404
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255286</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-23 03:27:44 -0700</bug_when>
    <thetext>Attachment 62404 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKitTools/Scripts/webkitpy/tool/mocktool.py:427:  missing whitespace after &apos;,&apos;  [pep8/E231] [5]
WebKitTools/Scripts/webkitpy/tool/mocktool.py:429:  missing whitespace after &apos;,&apos;  [pep8/E231] [5]
Total errors found: 2 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255287</commentid>
    <comment_count>8</comment_count>
      <attachid>62405</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-07-23 03:36:15 -0700</bug_when>
    <thetext>Created attachment 62405
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255719</commentid>
    <comment_count>9</comment_count>
      <attachid>62405</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-24 08:43:31 -0700</bug_when>
    <thetext>Comment on attachment 62405
proposed patch

WebKitTools/Scripts/webkitpy/common/checkout/scm.py:244
 +      def directory_contents(self, path):
Please add unit tests in scm_unittests.  To run the SCM unit tests, you need to pass --all to test-webkitpy.

WebKitTools/Scripts/webkitpy/tool/commands/queries.py:301
 +                           if line.strip() and not line.startswith(&quot;#&quot;)]
This calls line.strip twice.  :(

WebKitTools/Scripts/webkitpy/tool/commands/queries.py:307
 +                      tests_skipped.append(test_name)
skipped_tests and tests_skipped are very similar names.  It&apos;s hard to know which is which.

WebKitTools/Scripts/webkitpy/tool/commands/queries.py:297
 +      def _find_tests_in_skipped(self, scm, tests, skipped_file):
We shouldn&apos;t be parsing Skipped files at the command layer.  That&apos;s something much lower level.  We need to add some facilities in one of the lower-level modules so that we can re-use this parsing code in other commands.

WebKitTools/Scripts/webkitpy/tool/commands/queries.py:319
 +          chromium_expectations_path = os.path.join(platform_directory, &quot;chromium&quot;, &quot;test_expectations.txt&quot;)
The command layer shouldn&apos;t know anything about specific ports.  All that information needs to be encapsulated in the port abstraction.

WebKitTools/Scripts/webkitpy/tool/commands/queries.py:321
 +                   if line.find(&quot;SKIP&quot;) &gt;= 0 and line.strip() and not line.startswith(&quot;//&quot;)]
We already have a very nice facility for parsing test_expectations.  Please don&apos;t re-invent the wheel.

WebKitTools/Scripts/webkitpy/tool/commands/queries.py:350
 +          scm = tool.scm()
We don&apos;t generally store scm in a local variable.  We just access it off the tool.

WebKitTools/Scripts/webkitpy/tool/commands/queries.py:351
 +          platform_directory = tool.scm().absolute_path(os.path.join(&quot;LayoutTests&quot;, &quot;platform&quot;))
This knowledge doesn&apos;t belong at the command layer.

WebKitTools/Scripts/webkitpy/tool/mocktool.py:438
 +  # I am a Skipped file
This sort of fixture belongs in the unit test for a module that understands Skipped files.  These fixtures are a bit higher level.  That&apos;s just a symptom of trying to put too much at the command layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255720</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-24 08:49:59 -0700</bug_when>
    <thetext>We also have some minimal skipped file parsing in layout_test/port/webkit.py iirc.  That too belongs pushed into common instead of the command layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273845</commentid>
    <comment_count>11</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-09-03 02:47:56 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; We also have some minimal skipped file parsing in layout_test/port/webkit.py iirc.  That too belongs pushed into common instead of the command layer.

Why common? After looking at it the port layer seems like the way to go for me. The command could reuse it, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274042</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-09-03 11:07:42 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; We also have some minimal skipped file parsing in layout_test/port/webkit.py iirc.  That too belongs pushed into common instead of the command layer.
&gt; 
&gt; Why common? After looking at it the port layer seems like the way to go for me. The command could reuse it, right?

Do you mean putting the skipped file parsing in webkit.py?  That&apos;s fine.  I consider that &quot;common&quot; even though it&apos;s not in the &quot;common&quot; directory yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274684</commentid>
    <comment_count>13</comment_count>
      <attachid>66653</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-09-06 10:12:42 -0700</bug_when>
    <thetext>Created attachment 66653
proposed patch (reworked)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274685</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-06 10:13:39 -0700</bug_when>
    <thetext>Attachment 66653 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKitTools/Scripts/webkitpy/layout_tests/port/factory.py:35:  missing whitespace around operator  [pep8/E225] [5]
WebKitTools/Scripts/webkitpy/layout_tests/port/factory.py:95:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/Scripts/webkitpy/layout_tests/port/webkit_unittest.py:44:  missing whitespace after &apos;,&apos;  [pep8/E231] [5]
WebKitTools/Scripts/webkitpy/layout_tests/port/webkit_unittest.py:47:  missing whitespace after &apos;,&apos;  [pep8/E231] [5]
WebKitTools/Scripts/webkitpy/tool/mocktool.py:558:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/Scripts/webkitpy/tool/mocktool.py:563:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/Scripts/webkitpy/tool/mocktool.py:568:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/Scripts/webkitpy/layout_tests/port/chromium.py:237:  whitespace after &apos;[&apos;  [pep8/E201] [5]
WebKitTools/Scripts/webkitpy/layout_tests/port/chromium_unittest.py:108:  missing whitespace after &apos;,&apos;  [pep8/E231] [5]
Total errors found: 9 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274690</commentid>
    <comment_count>15</comment_count>
      <attachid>66655</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-09-06 10:17:30 -0700</bug_when>
    <thetext>Created attachment 66655
proposed patch (reworked)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274691</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-06 10:18:59 -0700</bug_when>
    <thetext>Attachment 66655 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKitTools/Scripts/webkitpy/layout_tests/port/factory.py:95:  expected 2 blank lines, found 1  [pep8/E302] [5]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274693</commentid>
    <comment_count>17</comment_count>
      <attachid>66656</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-09-06 10:21:58 -0700</bug_when>
    <thetext>Created attachment 66656
proposed patch (reworked)

Sorry for the noise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274697</commentid>
    <comment_count>18</comment_count>
      <attachid>66656</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-06 10:30:36 -0700</bug_when>
    <thetext>Comment on attachment 66656
proposed patch (reworked)

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

Mostly nits.  The fake test_expectations parser is my main complaint.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/port/base.py:317
&gt; +            basename, extension = os.path.splitext(test_or_category)
&gt; +            if not extension and test_name.startswith(basename):
&gt; +                return True
Crazy.  We decide if something is a directory by whether it has an extension?  It feels like there should be a better way to do this, but I don&apos;t know what it is.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/port/chromium.py:239
&gt; +    def skipped_layout_tests(self):
&gt; +        return [line.split(&apos;:&apos;)[1].split(&quot;=&quot;)[0].strip()
&gt; +                for line in self.test_expectations().splitlines()
&gt; +                if line.find(&apos;SKIP&apos;) != -1 and not line.startswith(&apos;//&apos;)]
Surely we should use the test_expectation file parser instead of hacking one together here.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/port/factory.py:37
&gt; +ALL_PORT_NAMES = [&apos;test&apos;, &apos;dryrun&apos;, &apos;mac&apos;, &apos;win&apos;, &apos;gtk&apos;, &apos;qt&apos;, &apos;chromium-mac&apos;,
&gt; +                  &apos;chromium-linux&apos;, &apos;chromium-win&apos;, &apos;google-chrome-win&apos;,
&gt; +                  &apos;google-chrome-mac&apos;, &apos;google-chrome-linux32&apos;, &apos;google-chrome-linux64&apos;]
This seems like a maintenance burden.  Can we get this information by crawling the port classes that have been imported into memory?  You can see how we do that to autoregister commands.

&gt; WebKitTools/Scripts/webkitpy/tool/commands/queries.py:298
&gt; +        class Options:
&gt; +            pass
This seems like a ugly pattern.  Can&apos;t we just pass an empty dictionary to represent no options?

&gt; WebKitTools/Scripts/webkitpy/tool/main.py:80
&gt; +        self.port_factory = port.factory
Nice.  I&apos;m glad these two subsystems are finally getting integrated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274874</commentid>
    <comment_count>19</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-09-07 00:55:17 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 66656 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=66656&amp;action=prettypatch
&gt; 
&gt; Mostly nits.  The fake test_expectations parser is my main complaint.
&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/port/base.py:317
&gt; &gt; +            basename, extension = os.path.splitext(test_or_category)
&gt; &gt; +            if not extension and test_name.startswith(basename):
&gt; &gt; +                return True
&gt; Crazy.  We decide if something is a directory by whether it has an extension?  It feels like there should be a better way to do this, but I don&apos;t know what it is.
&gt; 

Crazy indeed! Will be fixed in next patch.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/port/chromium.py:239
&gt; &gt; +    def skipped_layout_tests(self):
&gt; &gt; +        return [line.split(&apos;:&apos;)[1].split(&quot;=&quot;)[0].strip()
&gt; &gt; +                for line in self.test_expectations().splitlines()
&gt; &gt; +                if line.find(&apos;SKIP&apos;) != -1 and not line.startswith(&apos;//&apos;)]
&gt; Surely we should use the test_expectation file parser instead of hacking one together here.
&gt; 

Sure we can use that parser but it&apos;s really slow, at least here. Anyway, will make use of it in next patch...

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/port/factory.py:37
&gt; &gt; +ALL_PORT_NAMES = [&apos;test&apos;, &apos;dryrun&apos;, &apos;mac&apos;, &apos;win&apos;, &apos;gtk&apos;, &apos;qt&apos;, &apos;chromium-mac&apos;,
&gt; &gt; +                  &apos;chromium-linux&apos;, &apos;chromium-win&apos;, &apos;google-chrome-win&apos;,
&gt; &gt; +                  &apos;google-chrome-mac&apos;, &apos;google-chrome-linux32&apos;, &apos;google-chrome-linux64&apos;]
&gt; This seems like a maintenance burden.  Can we get this information by crawling the port classes that have been imported into memory?  You can see how we do that to autoregister commands.
&gt; 

I don&apos;t see how to do that. The port modules are imported conditionally (see the get function in that same file, which is too BTW an interesting maintenance burden :)).

&gt; &gt; WebKitTools/Scripts/webkitpy/tool/commands/queries.py:298
&gt; &gt; +        class Options:
&gt; &gt; +            pass
&gt; This seems like a ugly pattern.  Can&apos;t we just pass an empty dictionary to represent no options?
&gt; 

The chromium and webkit port implementations require a class or instance object, see for instance:

webkit.py, line 368, in _build_path
    self.flag_from_configuration(self._options.configuration),</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274877</commentid>
    <comment_count>20</comment_count>
      <attachid>66689</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-09-07 00:58:51 -0700</bug_when>
    <thetext>Created attachment 66689
updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274879</commentid>
    <comment_count>21</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-07 01:00:01 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; (From update of attachment 66656 [details] [details])
&gt; &gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/port/chromium.py:239
&gt; &gt; &gt; +    def skipped_layout_tests(self):
&gt; &gt; &gt; +        return [line.split(&apos;:&apos;)[1].split(&quot;=&quot;)[0].strip()
&gt; &gt; &gt; +                for line in self.test_expectations().splitlines()
&gt; &gt; &gt; +                if line.find(&apos;SKIP&apos;) != -1 and not line.startswith(&apos;//&apos;)]
&gt; &gt; Surely we should use the test_expectation file parser instead of hacking one together here.
&gt; 
&gt; Sure we can use that parser but it&apos;s really slow, at least here. Anyway, will make use of it in next patch...

How slow are we talking about?  In general, we don&apos;t worry too much about performance of these commands.  Maintainability is usually more important.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274882</commentid>
    <comment_count>22</comment_count>
      <attachid>66689</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-07 01:01:32 -0700</bug_when>
    <thetext>Comment on attachment 66689
updated patch

Looks great.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274883</commentid>
    <comment_count>23</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-09-07 01:04:44 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #19)
&gt; &gt; (In reply to comment #18)
&gt; &gt; &gt; (From update of attachment 66656 [details] [details] [details])
&gt; &gt; &gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/port/chromium.py:239
&gt; &gt; &gt; &gt; +    def skipped_layout_tests(self):
&gt; &gt; &gt; &gt; +        return [line.split(&apos;:&apos;)[1].split(&quot;=&quot;)[0].strip()
&gt; &gt; &gt; &gt; +                for line in self.test_expectations().splitlines()
&gt; &gt; &gt; &gt; +                if line.find(&apos;SKIP&apos;) != -1 and not line.startswith(&apos;//&apos;)]
&gt; &gt; &gt; Surely we should use the test_expectation file parser instead of hacking one together here.
&gt; &gt; 
&gt; &gt; Sure we can use that parser but it&apos;s really slow, at least here. Anyway, will make use of it in next patch...
&gt; 
&gt; How slow are we talking about?  In general, we don&apos;t worry too much about performance of these commands.  Maintainability is usually more important.

It takes about 5 seconds to parse the expectations file for each chromium port instance used by the query. I think there&apos;s a bug opened about this, will try to find it back.

Thanks a lot for the reviews and your patience :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274887</commentid>
    <comment_count>24</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-07 01:10:44 -0700</bug_when>
    <thetext>&gt; &gt; &gt; &gt; (From update of attachment 66656 [details] [details] [details] [details])
&gt; &gt; &gt; &gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/port/chromium.py:239
&gt; &gt; &gt; &gt; &gt; +    def skipped_layout_tests(self):
&gt; &gt; &gt; &gt; &gt; +        return [line.split(&apos;:&apos;)[1].split(&quot;=&quot;)[0].strip()
&gt; &gt; &gt; &gt; &gt; +                for line in self.test_expectations().splitlines()
&gt; &gt; &gt; &gt; &gt; +                if line.find(&apos;SKIP&apos;) != -1 and not line.startswith(&apos;//&apos;)]
&gt; &gt; &gt; &gt; Surely we should use the test_expectation file parser instead of hacking one together here.
&gt; &gt; &gt; 
&gt; &gt; &gt; Sure we can use that parser but it&apos;s really slow, at least here. Anyway, will make use of it in next patch...
&gt; &gt; 
&gt; &gt; How slow are we talking about?  In general, we don&apos;t worry too much about performance of these commands.  Maintainability is usually more important.
&gt; 
&gt; It takes about 5 seconds to parse the expectations file for each chromium port instance used by the query. I think there&apos;s a bug opened about this, will try to find it back.

5 seconds is super long.  Thanks for the patch.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274927</commentid>
    <comment_count>25</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-09-07 02:54:33 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/66872 with little updates to make the unittests actually pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274931</commentid>
    <comment_count>26</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-09-07 03:14:04 -0700</bug_when>
    <thetext>Also commited http://trac.webkit.org/changeset/66873 after figuring out my checkout directory wasn&apos;t totally clean, which made the tests pass for me but not on the buildbots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274954</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-07 04:10:26 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/66872 might have broken SnowLeopard Intel Release (Tests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279329</commentid>
    <comment_count>28</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-09-14 19:17:29 -0700</bug_when>
    <thetext>Hrm.

The port layer is supposed to be the lowest layer in the system. It shouldn&apos;t be depending on anything from the layout_tests module, and definitely not the test_expectations package.

This is somewhat confusing because the webkit implementation conses up a fake expectations file from the Skipped files, and so it creates the appearance that the port knows something about expectations, but it really shouldn&apos;t (apart from how to find them).

If you look at the chromium implementation, you&apos;ll see that we only return the Release value, which means that if we skip a test in Debug mode, we won&apos;t notice it.

The functionality is useful, but there&apos;s probably a better way to do this. We probably actually want something like the way we do --lint-test-files in run_webkit_tests, which does exercise all of the possible configurations for a given port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279381</commentid>
    <comment_count>29</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-14 22:01:49 -0700</bug_when>
    <thetext>&gt; The port layer is supposed to be the lowest layer in the system. It shouldn&apos;t be depending on anything from the layout_tests module, and definitely not the test_expectations package.

Ok.  So it sounds like we need a new object that can depend both on port and on test expectations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279721</commentid>
    <comment_count>30</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-09-15 14:25:51 -0700</bug_when>
    <thetext>curious why we tacked this onto webkit-patch rather than a separate script? It doesn&apos;t really have anything to do with SCM or managing patches ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279725</commentid>
    <comment_count>31</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-15 14:28:08 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; curious why we tacked this onto webkit-patch rather than a separate script? It doesn&apos;t really have anything to do with SCM or managing patches ...

webkit-patch is a kitchen sink.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279728</commentid>
    <comment_count>32</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-09-15 14:30:01 -0700</bug_when>
    <thetext>webkit-patch has long been a catch-all for webkitpy scripts.  WE have a zillion hidden commands (including this one).

We have a long-standing bug where we need to separate out the &quot;tool&quot; data storage from WebKitPatch so that it&apos;s easier to write webkitpy-using commands.

Once we finally do that, we could easily create a separate kitchen-sink tool or folks could add other webkit-patch like tools for specific command themes.

See webkit-patch help --all-commands if you&apos;d like to see the kitchen sink in its full glory. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279729</commentid>
    <comment_count>33</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-09-15 14:31:26 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; webkit-patch has long been a catch-all for webkitpy scripts.  WE have a zillion hidden commands (including this one).
&gt; 
&gt; We have a long-standing bug where we need to separate out the &quot;tool&quot; data storage from WebKitPatch so that it&apos;s easier to write webkitpy-using commands.
&gt; 
&gt; Once we finally do that, we could easily create a separate kitchen-sink tool or folks could add other webkit-patch like tools for specific command themes.
&gt; 
&gt; See webkit-patch help --all-commands if you&apos;d like to see the kitchen sink in its full glory. :)

Is that bug actually filed? I&apos;d be happy to take a look at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279732</commentid>
    <comment_count>34</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-15 14:36:06 -0700</bug_when>
    <thetext>&gt; Is that bug actually filed? I&apos;d be happy to take a look at it.

Go for it.  WARNING: You&apos;ll be entering the dungeon of code from when webkitpy was a single Python file and Eric had no clue that you didn&apos;t need curly brakets.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279737</commentid>
    <comment_count>35</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-09-15 14:40:15 -0700</bug_when>
    <thetext>Filed bug 45838.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292805</commentid>
    <comment_count>36</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-11 18:12:59 -0700</bug_when>
    <thetext>I filed bug 47528 to fix the layering violations ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495195</commentid>
    <comment_count>37</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-11-02 21:53:05 -0700</bug_when>
    <thetext>It appears I broke this command a long time ago and no one noticed:

% webkit-patch skipped-ports svg                                                                                                                     [/Projects/WebKit/Tools/Scripts/webkitpy]
Traceback (most recent call last):
  File &quot;/Projects/WebKit/Tools/Scripts/webkit-patch&quot;, line 74, in &lt;module&gt;
    main()
  File &quot;/Projects/WebKit/Tools/Scripts/webkit-patch&quot;, line 69, in main
    WebKitPatch(os.path.abspath(__file__)).main()
  File &quot;/Projects/WebKit/Tools/Scripts/webkitpy/tool/multicommandtool.py&quot;, line 308, in main
    result = command.check_arguments_and_execute(options, args, self)
  File &quot;/Projects/WebKit/Tools/Scripts/webkitpy/tool/multicommandtool.py&quot;, line 117, in check_arguments_and_execute
    return self.execute(options, args, tool) or 0
  File &quot;/Projects/WebKit/Tools/Scripts/webkitpy/tool/commands/queries.py&quot;, line 391, in execute
    for port_name, port_object in tool.port_factory.get_all().iteritems():
AttributeError: &apos;PortFactory&apos; object has no attribute &apos;get_all&apos;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62307</attachid>
            <date>2010-07-22 09:24:49 -0700</date>
            <delta_ts>2010-07-22 09:30:24 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>proposed-patch.patch</filename>
            <type>text/plain</type>
            <size>3803</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA4OTdmZGVjZGJiNDgwODM3ZjE3ZjQ3N2JmNmM4MGJkZTRhYWRjMTdkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUaHUsIDIyIEp1bCAyMDEwIDE4OjI0OjIzICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
cHJvcG9zZWQgcGF0Y2gKCi0tLQogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIDExICsrKysrCiAuLi4vU2NyaXB0cy93ZWJraXRweS90b29sL2Nv
bW1hbmRzL3F1ZXJpZXMucHkgICAgICB8ICAgNDYgKysrKysrKysrKysrKysrKysrKysKIDIgZmls
ZXMgY2hhbmdlZCwgNTcgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKaW5kZXggMjZj
ZjE1MS4uOTI0ZmM1NiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1dl
YktpdFRvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEwLTA3LTIyICBQaGlsaXBw
ZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICB3ZWJraXQtcGF0Y2ggY29tbWFuZCB0byBmaW5kIHRo
ZSBwb3J0cyBjb3ZlcmluZyBhIHNwZWNpZmljIGxheW91dCB0ZXN0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjgzMgorCisgICAgICAgIFRvIHVzZSBp
dDogd2Via2l0LXBhdGNoIHdoYXQtY292ZXJzIHNvbWUvbGF5b3V0L3Rlc3QuaHRtbAorCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXMucHk6CisKIDIwMTAt
MDctMjEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFNhbSBXZWluaWcuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dG9vbC9jb21tYW5kcy9xdWVyaWVzLnB5CmluZGV4IDkxY2U1ZTkuLjkwM2YxM2QgMTAwNjQ0Ci0t
LSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzLnB5
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVz
LnB5CkBAIC0yOSw2ICsyOSw3IEBACiAKIAogZnJvbSBvcHRwYXJzZSBpbXBvcnQgbWFrZV9vcHRp
b24KK2ltcG9ydCBvcwogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dC5jb21taXRpbmZv
IGltcG9ydCBDb21taXRJbmZvCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jb25maWcuY29tbWl0dGVy
cyBpbXBvcnQgQ29tbWl0dGVyTGlzdApAQCAtMjg0LDMgKzI4NSw0OCBAQCBhbmQgZGlzcGxheWVz
IHRoZSBzdGF0dXMgb2YgZWFjaCBidWlsZGVyLiIiIgogICAgICAgICBmb3IgYnVpbGRlciBpbiB0
b29sLmJ1aWxkYm90LmJ1aWxkZXJfc3RhdHVzZXMoKToKICAgICAgICAgICAgIHN0YXR1c19zdHJp
bmcgPSAib2siIGlmIGJ1aWxkZXJbImlzX2dyZWVuIl0gZWxzZSAiRkFJTCIKICAgICAgICAgICAg
IHByaW50ICIlcyA6ICVzIiAlIChzdGF0dXNfc3RyaW5nLmxqdXN0KDQpLCBidWlsZGVyWyJuYW1l
Il0pCisKK2NsYXNzIFdoYXRDb3ZlcnMoQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQpOgorICAg
IG5hbWUgPSAid2hhdC1jb3ZlcnMiCisgICAgaGVscF90ZXh0ID0gIlByaW50IHRoZSBsaXN0IG9m
IHBvcnRzIG5vdCBza2lwcGluZyBnaXZlbiB0ZXN0KHMpIgorICAgIGxvbmdfaGVscCA9ICIiIlNj
YW5zIHRoZSB0aGUgU2tpcHBlZCBmaWxlIG9mIGVhY2ggcG9ydCBhbmQgZmlndXJlCitvdXQgd2hh
dCBwb3J0cyBjb3ZlciB0aGUgdGVzdChzKS4gQ2F0ZWdvcmllcyBhcmUgdGFrZW4gaW4gYWNjb3Vu
dCB0b28uIiIiCisgICAgYXJndW1lbnRfbmFtZXMgPSAiVEVTVF9OQU1FIgorCisgICAgZGVmIF9m
aW5kX3Rlc3RzX2luX3NraXBwZWQoc2VsZiwgdGVzdHMsIHNraXBwZWRfZmlsZSk6CisgICAgICAg
IHRlc3RzX3NraXBwZWQgPSBbXQorCisgICAgICAgICMgQWxsIHRlc3RzIG9yIGNhdGVnb3JpZXMg
b2YgdGVzdHMgc2tpcHBlZC4KKyAgICAgICAgc2tpcHBlZF90ZXN0cyA9IFsgbGluZS5zdHJpcCgp
IGZvciBsaW5lIGluIG9wZW4oc2tpcHBlZF9maWxlKS5yZWFkbGluZXMoKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCkgYW5kIG5vdCBsaW5lLnN0YXJ0c3dpdGgoIiMi
KSBdCisKKyAgICAgICAgIyBGaW5kIGlmIGEgdGVzdCBpcyBza2lwcGVkIGJ5IHVzaW5nIGRpcmVj
dCBtYXRjaCBvciBjYXRlZ29yeSBtYXRjaGluZy4KKyAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiB0
ZXN0czoKKyAgICAgICAgICAgIGZvciBza2lwcGVkX3Rlc3QgaW4gc2tpcHBlZF90ZXN0czoKKyAg
ICAgICAgICAgICAgICBpZiBza2lwcGVkX3Rlc3QgPT0gdGVzdF9uYW1lOgorICAgICAgICAgICAg
ICAgICAgICB0ZXN0c19za2lwcGVkLmFwcGVuZCh0ZXN0X25hbWUpCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYmFz
ZW5hbWUsIGV4dGVuc2lvbiA9IG9zLnBhdGguc3BsaXRleHQoc2tpcHBlZF90ZXN0KQorICAgICAg
ICAgICAgICAgICAgICAjIHRoaXMgaXMgYSB0ZXN0IGNhdGVnb3J5CisgICAgICAgICAgICAgICAg
ICAgIGlmIG5vdCBleHRlbnNpb24gYW5kIHRlc3RfbmFtZS5zdGFydHN3aXRoKGJhc2VuYW1lKToK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzX3NraXBwZWQuYXBwZW5kKHRlc3RfbmFtZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgcmV0dXJuIFtpIGZvciBp
IGluIHRlc3RzIGlmIGkgbm90IGluIHRlc3RzX3NraXBwZWRdCisKKyAgICBkZWYgZXhlY3V0ZShz
ZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKKyAgICAgICAgcGxhdGZvcm1fZGlyZWN0b3J5ID0g
b3MucGF0aC5qb2luKHRvb2wuc2NtKCkuY3dkLCAiTGF5b3V0VGVzdHMiLCAicGxhdGZvcm0iKQor
ICAgICAgICByZXN1bHRzID0gZGljdChbKHRlc3QsIFtdKSBmb3IgdGVzdCBpbiBhcmdzXSkKKyAg
ICAgICAgZm9yIHBvcnRfbmFtZSBpbiBvcy5saXN0ZGlyKHBsYXRmb3JtX2RpcmVjdG9yeSk6Cisg
ICAgICAgICAgICBza2lwcGVkX2ZpbGUgPSBvcy5wYXRoLmpvaW4ocGxhdGZvcm1fZGlyZWN0b3J5
LCBwb3J0X25hbWUsICJTa2lwcGVkIikKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmls
ZShza2lwcGVkX2ZpbGUpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBm
b3IgdGVzdF9uYW1lIGluIHNlbGYuX2ZpbmRfdGVzdHNfaW5fc2tpcHBlZChhcmdzLCBza2lwcGVk
X2ZpbGUpOgorICAgICAgICAgICAgICAgIHJlc3VsdHNbdGVzdF9uYW1lXS5hcHBlbmQocG9ydF9u
YW1lKQorCisgICAgICAgIGZvciB0ZXN0X25hbWUsIHBvcnRzIGluIHJlc3VsdHMuaXRlcml0ZW1z
KCk6CisgICAgICAgICAgICBpZiBwb3J0czoKKyAgICAgICAgICAgICAgICBwcmludCAiUG9ydHMg
Y292ZXJpbmcgdGVzdCAlcjogJXMiICUgKHRlc3RfbmFtZSwgJywgJy5qb2luKHBvcnRzKSkKKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgIlRlc3QgJXIgaXMgbm90IGNv
dmVyZWQgYnkgYW55IHBvcnQuIiAlIHRlc3RfbmFtZQotLSAKMS43LjE=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62309</attachid>
            <date>2010-07-22 09:30:24 -0700</date>
            <delta_ts>2010-07-23 03:25:31 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>proposed-patch.patch</filename>
            <type>text/plain</type>
            <size>3802</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSAwNTEzOWVhNmIwMzUyNWRiYzUwNGZhODUzYmQwODI0NThhYTg0NWRhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUaHUsIDIyIEp1bCAyMDEwIDE4OjI0OjIzICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
cHJvcG9zZWQgcGF0Y2gKCi0tLQogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIDExICsrKysrCiAuLi4vU2NyaXB0cy93ZWJraXRweS90b29sL2Nv
bW1hbmRzL3F1ZXJpZXMucHkgICAgICB8ICAgNDcgKysrKysrKysrKysrKysrKysrKysKIDIgZmls
ZXMgY2hhbmdlZCwgNTggaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKaW5kZXggMjZj
ZjE1MS4uOTI0ZmM1NiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1dl
YktpdFRvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEwLTA3LTIyICBQaGlsaXBw
ZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICB3ZWJraXQtcGF0Y2ggY29tbWFuZCB0byBmaW5kIHRo
ZSBwb3J0cyBjb3ZlcmluZyBhIHNwZWNpZmljIGxheW91dCB0ZXN0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjgzMgorCisgICAgICAgIFRvIHVzZSBp
dDogd2Via2l0LXBhdGNoIHdoYXQtY292ZXJzIHNvbWUvbGF5b3V0L3Rlc3QuaHRtbAorCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXMucHk6CisKIDIwMTAt
MDctMjEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFNhbSBXZWluaWcuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dG9vbC9jb21tYW5kcy9xdWVyaWVzLnB5CmluZGV4IDkxY2U1ZTkuLmY3YWRkNGMgMTAwNjQ0Ci0t
LSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzLnB5
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVz
LnB5CkBAIC0yOSw2ICsyOSw3IEBACiAKIAogZnJvbSBvcHRwYXJzZSBpbXBvcnQgbWFrZV9vcHRp
b24KK2ltcG9ydCBvcwogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dC5jb21taXRpbmZv
IGltcG9ydCBDb21taXRJbmZvCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jb25maWcuY29tbWl0dGVy
cyBpbXBvcnQgQ29tbWl0dGVyTGlzdApAQCAtMjg0LDMgKzI4NSw0OSBAQCBhbmQgZGlzcGxheWVz
IHRoZSBzdGF0dXMgb2YgZWFjaCBidWlsZGVyLiIiIgogICAgICAgICBmb3IgYnVpbGRlciBpbiB0
b29sLmJ1aWxkYm90LmJ1aWxkZXJfc3RhdHVzZXMoKToKICAgICAgICAgICAgIHN0YXR1c19zdHJp
bmcgPSAib2siIGlmIGJ1aWxkZXJbImlzX2dyZWVuIl0gZWxzZSAiRkFJTCIKICAgICAgICAgICAg
IHByaW50ICIlcyA6ICVzIiAlIChzdGF0dXNfc3RyaW5nLmxqdXN0KDQpLCBidWlsZGVyWyJuYW1l
Il0pCisKKworY2xhc3MgV2hhdENvdmVycyhBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZCk6Cisg
ICAgbmFtZSA9ICJ3aGF0LWNvdmVycyIKKyAgICBoZWxwX3RleHQgPSAiUHJpbnQgdGhlIGxpc3Qg
b2YgcG9ydHMgbm90IHNraXBwaW5nIGdpdmVuIHRlc3QocykiCisgICAgbG9uZ19oZWxwID0gIiIi
U2NhbnMgdGhlIHRoZSBTa2lwcGVkIGZpbGUgb2YgZWFjaCBwb3J0IGFuZCBmaWd1cmUKK291dCB3
aGF0IHBvcnRzIGNvdmVyIHRoZSB0ZXN0KHMpLiBDYXRlZ29yaWVzIGFyZSB0YWtlbiBpbiBhY2Nv
dW50IHRvby4iIiIKKyAgICBhcmd1bWVudF9uYW1lcyA9ICJURVNUX05BTUUiCisKKyAgICBkZWYg
X2ZpbmRfdGVzdHNfaW5fc2tpcHBlZChzZWxmLCB0ZXN0cywgc2tpcHBlZF9maWxlKToKKyAgICAg
ICAgdGVzdHNfc2tpcHBlZCA9IFtdCisKKyAgICAgICAgIyBBbGwgdGVzdHMgb3IgY2F0ZWdvcmll
cyBvZiB0ZXN0cyBza2lwcGVkLgorICAgICAgICBza2lwcGVkX3Rlc3RzID0gW2xpbmUuc3RyaXAo
KSBmb3IgbGluZSBpbiBvcGVuKHNraXBwZWRfZmlsZSkucmVhZGxpbmVzKCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCkgYW5kIG5vdCBsaW5lLnN0YXJ0c3dpdGgoIiMi
KV0KKworICAgICAgICAjIEZpbmQgaWYgYSB0ZXN0IGlzIHNraXBwZWQgYnkgdXNpbmcgZGlyZWN0
IG1hdGNoIG9yIGNhdGVnb3J5IG1hdGNoaW5nLgorICAgICAgICBmb3IgdGVzdF9uYW1lIGluIHRl
c3RzOgorICAgICAgICAgICAgZm9yIHNraXBwZWRfdGVzdCBpbiBza2lwcGVkX3Rlc3RzOgorICAg
ICAgICAgICAgICAgIGlmIHNraXBwZWRfdGVzdCA9PSB0ZXN0X25hbWU6CisgICAgICAgICAgICAg
ICAgICAgIHRlc3RzX3NraXBwZWQuYXBwZW5kKHRlc3RfbmFtZSkKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBiYXNl
bmFtZSwgZXh0ZW5zaW9uID0gb3MucGF0aC5zcGxpdGV4dChza2lwcGVkX3Rlc3QpCisgICAgICAg
ICAgICAgICAgICAgICMgdGhpcyBpcyBhIHRlc3QgY2F0ZWdvcnkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgbm90IGV4dGVuc2lvbiBhbmQgdGVzdF9uYW1lLnN0YXJ0c3dpdGgoYmFzZW5hbWUpOgor
ICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNfc2tpcHBlZC5hcHBlbmQodGVzdF9uYW1lKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICByZXR1cm4gW2kgZm9yIGkg
aW4gdGVzdHMgaWYgaSBub3QgaW4gdGVzdHNfc2tpcHBlZF0KKworICAgIGRlZiBleGVjdXRlKHNl
bGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgorICAgICAgICBwbGF0Zm9ybV9kaXJlY3RvcnkgPSBv
cy5wYXRoLmpvaW4odG9vbC5zY20oKS5jd2QsICJMYXlvdXRUZXN0cyIsICJwbGF0Zm9ybSIpCisg
ICAgICAgIHJlc3VsdHMgPSBkaWN0KFsodGVzdCwgW10pIGZvciB0ZXN0IGluIGFyZ3NdKQorICAg
ICAgICBmb3IgcG9ydF9uYW1lIGluIG9zLmxpc3RkaXIocGxhdGZvcm1fZGlyZWN0b3J5KToKKyAg
ICAgICAgICAgIHNraXBwZWRfZmlsZSA9IG9zLnBhdGguam9pbihwbGF0Zm9ybV9kaXJlY3Rvcnks
IHBvcnRfbmFtZSwgIlNraXBwZWQiKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxl
KHNraXBwZWRfZmlsZSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZv
ciB0ZXN0X25hbWUgaW4gc2VsZi5fZmluZF90ZXN0c19pbl9za2lwcGVkKGFyZ3MsIHNraXBwZWRf
ZmlsZSk6CisgICAgICAgICAgICAgICAgcmVzdWx0c1t0ZXN0X25hbWVdLmFwcGVuZChwb3J0X25h
bWUpCisKKyAgICAgICAgZm9yIHRlc3RfbmFtZSwgcG9ydHMgaW4gcmVzdWx0cy5pdGVyaXRlbXMo
KToKKyAgICAgICAgICAgIGlmIHBvcnRzOgorICAgICAgICAgICAgICAgIHByaW50ICJQb3J0cyBj
b3ZlcmluZyB0ZXN0ICVyOiAlcyIgJSAodGVzdF9uYW1lLCAnLCAnLmpvaW4ocG9ydHMpKQorICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCAiVGVzdCAlciBpcyBub3QgY292
ZXJlZCBieSBhbnkgcG9ydC4iICUgdGVzdF9uYW1lCi0tIAoxLjcuMQ==
</data>
<flag name="review"
          id="50482"
          type_id="1"
          status="-"
          setter="ojan"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62404</attachid>
            <date>2010-07-23 03:25:31 -0700</date>
            <delta_ts>2010-07-23 03:36:15 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>proposed-patch.patch</filename>
            <type>text/plain</type>
            <size>9763</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBkOTg0ZDZmZmMyZGE4ZGRiZDA1YzJkYjAxZWM2MWJhNTQxMDk4YzJjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUaHUsIDIyIEp1bCAyMDEwIDE4OjI0OjIzICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
cHJvcG9zZWQgcGF0Y2gKCi0tLQogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIDE0ICsrKysKIC4uLi9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9j
aGVja291dC9zY20ucHkgICAgICAgIHwgICAgOSArKwogLi4uL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9jb21tYW5kcy9xdWVyaWVzLnB5ICAgICAgfCAgIDgzICsrKysrKysrKysrKysrKysrKysrCiAu
Li4vd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzX3VuaXR0ZXN0LnB5ICAgICB8ICAgMTAg
KysrCiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkgICAgICB8
ICAgMjggKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAxNDQgaW5zZXJ0aW9ucygrKSwgMCBkZWxl
dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKaW5kZXggMjZjZjE1MS4uNzU5ODQwNiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBA
CisyMDEwLTA3LTIzICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICB3ZWJraXQtcGF0
Y2ggY29tbWFuZCB0byBmaW5kIHRoZSBwb3J0cyBjb3ZlcmluZyBhIHNwZWNpZmljIGxheW91dCB0
ZXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mjgz
MgorCisgICAgICAgIFRvIHVzZSBpdDogd2Via2l0LXBhdGNoIHNraXBwZWQtcG9ydHMgc29tZS9s
YXlvdXQvdGVzdC5odG1sCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVj
a291dC9zY20ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1
ZXJpZXMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJp
ZXNfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29s
LnB5OgorCiAyMDEwLTA3LTIxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtLnB5CmluZGV4IDU2OTU1OGEuLjg1Yjk0ODUg
MTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0
L3NjbS5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291
dC9zY20ucHkKQEAgLTI0MSw2ICsyNDEsOSBAQCBjbGFzcyBTQ006CiAgICAgZGVmIHNob3dfaGVh
ZChzZWxmLCBwYXRoKToKICAgICAgICAgc2VsZi5fc3ViY2xhc3NfbXVzdF9pbXBsZW1lbnQoKQog
CisgICAgZGVmIGRpcmVjdG9yeV9jb250ZW50cyhzZWxmLCBwYXRoKToKKyAgICAgICAgc2VsZi5f
c3ViY2xhc3NfbXVzdF9pbXBsZW1lbnQoKQorCiAgICAgZGVmIGFwcGx5X3JldmVyc2VfZGlmZihz
ZWxmLCByZXZpc2lvbik6CiAgICAgICAgIHNlbGYuX3N1YmNsYXNzX211c3RfaW1wbGVtZW50KCkK
IApAQCAtNDY5LDYgKzQ3Miw5IEBAIGNsYXNzIFNWTihTQ00pOgogICAgIGRlZiBzaG93X2hlYWQo
c2VsZiwgcGF0aCk6CiAgICAgICAgIHJldHVybiBzZWxmLnJ1bihbJ3N2bicsICdjYXQnLCAnLXIn
LCAnQkFTRScsIHBhdGhdLCBkZWNvZGVfb3V0cHV0PUZhbHNlKQogCisgICAgZGVmIGRpcmVjdG9y
eV9jb250ZW50cyhzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuKFsnc3ZuJywg
J2xzJywgcGF0aF0sIGRlY29kZV9vdXRwdXQ9RmFsc2UpCisKICAgICBkZWYgX3JlcG9zaXRvcnlf
dXJsKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi52YWx1ZV9mcm9tX3N2bl9pbmZvKHNlbGYu
Y2hlY2tvdXRfcm9vdCwgJ1VSTCcpCiAKQEAgLTY2OSw2ICs2NzUsOSBAQCBjbGFzcyBHaXQoU0NN
KToKICAgICBkZWYgc2hvd19oZWFkKHNlbGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gc2VsZi5y
dW4oWydnaXQnLCAnc2hvdycsICdIRUFEOicgKyBzZWxmLnRvX29iamVjdF9uYW1lKHBhdGgpXSwg
ZGVjb2RlX291dHB1dD1GYWxzZSkKIAorICAgIGRlZiBkaXJlY3RvcnlfY29udGVudHMoc2VsZiwg
cGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bihbJ2dpdCcsICdscy10cmVlJywgJy0tbmFt
ZS1vbmx5JywgIkhFQUQ6JXMiICUgc2VsZi50b19vYmplY3RfbmFtZShwYXRoKV0sIGRlY29kZV9v
dXRwdXQ9RmFsc2UpLnNwbGl0bGluZXMoKQorCiAgICAgZGVmIGNvbW1pdHRlcl9lbWFpbF9mb3Jf
cmV2aXNpb24oc2VsZiwgcmV2aXNpb24pOgogICAgICAgICBnaXRfY29tbWl0ID0gc2VsZi5naXRf
Y29tbWl0X2Zyb21fc3ZuX3JldmlzaW9uKHJldmlzaW9uKQogICAgICAgICBjb21taXR0ZXJfZW1h
aWwgPSBzZWxmLnJ1bihbImdpdCIsICJsb2ciLCAiLTEiLCAiLS1wcmV0dHk9Zm9ybWF0OiVjZSIs
IGdpdF9jb21taXRdKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90
b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvY29tbWFuZHMvcXVlcmllcy5weQppbmRleCA5MWNlNWU5Li40MDQ1OThkIDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5w
eQpAQCAtMjksNiArMjksNyBAQAogCiAKIGZyb20gb3B0cGFyc2UgaW1wb3J0IG1ha2Vfb3B0aW9u
CitpbXBvcnQgb3MKIAogZnJvbSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuY29tbWl0aW5mbyBp
bXBvcnQgQ29tbWl0SW5mbwogZnJvbSB3ZWJraXRweS5jb21tb24uY29uZmlnLmNvbW1pdHRlcnMg
aW1wb3J0IENvbW1pdHRlckxpc3QKQEAgLTI4NCwzICsyODUsODUgQEAgYW5kIGRpc3BsYXllcyB0
aGUgc3RhdHVzIG9mIGVhY2ggYnVpbGRlci4iIiIKICAgICAgICAgZm9yIGJ1aWxkZXIgaW4gdG9v
bC5idWlsZGJvdC5idWlsZGVyX3N0YXR1c2VzKCk6CiAgICAgICAgICAgICBzdGF0dXNfc3RyaW5n
ID0gIm9rIiBpZiBidWlsZGVyWyJpc19ncmVlbiJdIGVsc2UgIkZBSUwiCiAgICAgICAgICAgICBw
cmludCAiJXMgOiAlcyIgJSAoc3RhdHVzX3N0cmluZy5sanVzdCg0KSwgYnVpbGRlclsibmFtZSJd
KQorCisKK2NsYXNzIFNraXBwZWRQb3J0cyhBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZCk6Cisg
ICAgbmFtZSA9ICJza2lwcGVkLXBvcnRzIgorICAgIGhlbHBfdGV4dCA9ICJQcmludCB0aGUgbGlz
dCBvZiBwb3J0cyBza2lwcGluZyB0aGUgZ2l2ZW4gbGF5b3V0IHRlc3QocykiCisgICAgbG9uZ19o
ZWxwID0gIiIiU2NhbnMgdGhlIHRoZSBTa2lwcGVkIGZpbGUgb2YgZWFjaCBwb3J0IGFuZCBmaWd1
cmUKK291dCB3aGF0IHBvcnRzIGFyZSBza2lwcGluZyB0aGUgdGVzdChzKS4gQ2F0ZWdvcmllcyBh
cmUgdGFrZW4gaW4gYWNjb3VudCB0b28uIiIiCisgICAgYXJndW1lbnRfbmFtZXMgPSAiVEVTVF9O
QU1FIgorCisgICAgZGVmIF9maW5kX3Rlc3RzX2luX3NraXBwZWQoc2VsZiwgc2NtLCB0ZXN0cywg
c2tpcHBlZF9maWxlKToKKyAgICAgICAgdGVzdHNfc2tpcHBlZCA9IFtdCisgICAgICAgICMgQWxs
IHRlc3RzIG9yIGNhdGVnb3JpZXMgb2YgdGVzdHMgc2tpcHBlZC4KKyAgICAgICAgc2tpcHBlZF90
ZXN0cyA9IFtsaW5lLnN0cmlwKCkgZm9yIGxpbmUgaW4gc2NtLnNob3dfaGVhZChza2lwcGVkX2Zp
bGUpLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RyaXAo
KSBhbmQgbm90IGxpbmUuc3RhcnRzd2l0aCgiIyIpXQorCisgICAgICAgICMgRmluZCBpZiBhIHRl
c3QgaXMgc2tpcHBlZCBieSB1c2luZyBkaXJlY3QgbWF0Y2ggb3IgY2F0ZWdvcnkgbWF0Y2hpbmcu
CisgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gdGVzdHM6CisgICAgICAgICAgICBmb3Igc2tpcHBl
ZF90ZXN0IGluIHNraXBwZWRfdGVzdHM6CisgICAgICAgICAgICAgICAgaWYgc2tpcHBlZF90ZXN0
ID09IHRlc3RfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgdGVzdHNfc2tpcHBlZC5hcHBlbmQo
dGVzdF9uYW1lKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lLCBleHRlbnNpb24gPSBvcy5wYXRoLnNw
bGl0ZXh0KHNraXBwZWRfdGVzdCkKKyAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGlzIGEgdGVz
dCBjYXRlZ29yeQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZXh0ZW5zaW9uIGFuZCB0ZXN0
X25hbWUuc3RhcnRzd2l0aChiYXNlbmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0
c19za2lwcGVkLmFwcGVuZCh0ZXN0X25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
aworCisgICAgICAgIHJldHVybiB0ZXN0c19za2lwcGVkCisKKyAgICBkZWYgX2ZpbmRfdGVzdHNf
aW5fZXhwZWN0YXRpb25zX2ZpbGUoc2VsZiwgc2NtLCB0ZXN0cywgcGxhdGZvcm1fZGlyZWN0b3J5
KToKKyAgICAgICAgY2hyb21pdW1fZXhwZWN0YXRpb25zX3BhdGggPSBvcy5wYXRoLmpvaW4ocGxh
dGZvcm1fZGlyZWN0b3J5LCAiY2hyb21pdW0iLCAidGVzdF9leHBlY3RhdGlvbnMudHh0IikKKyAg
ICAgICAgbGluZXMgPSBbbGluZS5zdHJpcCgpIGZvciBsaW5lIGluIHNjbS5zaG93X2hlYWQoY2hy
b21pdW1fZXhwZWN0YXRpb25zX3BhdGgpLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgICAgICBp
ZiBsaW5lLmZpbmQoIlNLSVAiKSA+PSAwIGFuZCBsaW5lLnN0cmlwKCkgYW5kIG5vdCBsaW5lLnN0
YXJ0c3dpdGgoIi8vIildCisKKyAgICAgICAgYWxsX3NraXBwZWRfdGVzdHMgPSBbXQorICAgICAg
ICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIG1ldGFkYXRhLCB0ZXN0ID0gbGluZS5z
cGxpdCgiOiIpCisgICAgICAgICAgICBtZXRhZGF0YSA9IG1ldGFkYXRhLnN0cmlwKCkKKyAgICAg
ICAgICAgIHRlc3QgPSB0ZXN0LnN0cmlwKCkKKyAgICAgICAgICAgIHRlc3RfbmFtZSA9IHRlc3Qu
c3BsaXQoIj0iKVswXS5zdHJpcCgpCisgICAgICAgICAgICAjIEZJWE1FOiBtYXliZSBpdCdkIGJl
IG5pY2UgdG8gcmV1c2UgdGhlIG1ldGFkYXRhIGZpZWxkIHNvCisgICAgICAgICAgICAjIG1vcmUg
aW5mb3JtYXRpb25zIGNhbiBiZSByZXBvcnRlZCB0byB0aGUgdXNlciwgc3VjaCBhcworICAgICAg
ICAgICAgIyBidWlsZCB0eXBlIGFuZCBwbGF0Zm9ybShzKS4KKyAgICAgICAgICAgIGFsbF9za2lw
cGVkX3Rlc3RzLmFwcGVuZCh0ZXN0X25hbWUpCisKKyAgICAgICAgdGVzdHNfc2tpcHBlZCA9IFtd
CisgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gdGVzdHM6CisgICAgICAgICAgICBmb3Igc2tpcHBl
ZF90ZXN0IGluIGFsbF9za2lwcGVkX3Rlc3RzOgorICAgICAgICAgICAgICAgIGlmIHNraXBwZWRf
dGVzdCA9PSB0ZXN0X25hbWU6CisgICAgICAgICAgICAgICAgICAgIHRlc3RzX3NraXBwZWQuYXBw
ZW5kKHRlc3RfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBiYXNlbmFtZSwgZXh0ZW5zaW9uID0gb3MucGF0
aC5zcGxpdGV4dChza2lwcGVkX3Rlc3QpCisgICAgICAgICAgICAgICAgICAgICMgdGhpcyBpcyBh
IHRlc3QgY2F0ZWdvcnkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGV4dGVuc2lvbiBhbmQg
dGVzdF9uYW1lLnN0YXJ0c3dpdGgoYmFzZW5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAg
dGVzdHNfc2tpcHBlZC5hcHBlbmQodGVzdF9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWsKKworICAgICAgICByZXR1cm4gZGljdChbKGksIFsiY2hyb21pdW0iXSkgZm9yIGkgaW4g
dGVzdHNfc2tpcHBlZF0pCisKKyAgICBkZWYgZXhlY3V0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0
b29sKToKKyAgICAgICAgc2NtID0gdG9vbC5zY20oKQorICAgICAgICBwbGF0Zm9ybV9kaXJlY3Rv
cnkgPSB0b29sLnNjbSgpLmFic29sdXRlX3BhdGgob3MucGF0aC5qb2luKCJMYXlvdXRUZXN0cyIs
ICJwbGF0Zm9ybSIpKQorICAgICAgICByZXN1bHRzID0gZGljdChbKHRlc3QsIFtdKSBmb3IgdGVz
dCBpbiBhcmdzXSkKKyAgICAgICAgZm9yIHBvcnRfbmFtZSBpbiBzY20uZGlyZWN0b3J5X2NvbnRl
bnRzKHBsYXRmb3JtX2RpcmVjdG9yeSk6CisgICAgICAgICAgICBpZiAiU2tpcHBlZCIgbm90IGlu
IHNjbS5kaXJlY3RvcnlfY29udGVudHMob3MucGF0aC5qb2luKHBsYXRmb3JtX2RpcmVjdG9yeSwg
cG9ydF9uYW1lKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZvciB0
ZXN0X25hbWUgaW4gc2VsZi5fZmluZF90ZXN0c19pbl9za2lwcGVkKHNjbSwgYXJncywgb3MucGF0
aC5qb2luKHBsYXRmb3JtX2RpcmVjdG9yeSwgcG9ydF9uYW1lLCAiU2tpcHBlZCIpKToKKyAgICAg
ICAgICAgICAgICByZXN1bHRzW3Rlc3RfbmFtZV0uYXBwZW5kKHBvcnRfbmFtZSkKKworICAgICAg
ICAjIFBhcnNlIENocm9taXVtJ3MgZXhwZWN0YXRpb25zIGZpbGUKKyAgICAgICAgc2tpcHBlZF9j
aHJvbWl1bV90ZXN0cyA9IHNlbGYuX2ZpbmRfdGVzdHNfaW5fZXhwZWN0YXRpb25zX2ZpbGUoc2Nt
LCBhcmdzLCBwbGF0Zm9ybV9kaXJlY3RvcnkpCisKKyAgICAgICAgZm9yIHRlc3RfbmFtZSwgcG9y
dHMgaW4gcmVzdWx0cy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGFsbF9wb3J0cyA9IHBvcnRz
CisgICAgICAgICAgICBpZiB0ZXN0X25hbWUgaW4gc2tpcHBlZF9jaHJvbWl1bV90ZXN0czoKKyAg
ICAgICAgICAgICAgICBhbGxfcG9ydHMuZXh0ZW5kKHNraXBwZWRfY2hyb21pdW1fdGVzdHNbdGVz
dF9uYW1lXSkKKyAgICAgICAgICAgIGlmIGFsbF9wb3J0czoKKyAgICAgICAgICAgICAgICBwcmlu
dCAiUG9ydHMgc2tpcHBpbmcgdGVzdCAlcjogJXMiICUgKHRlc3RfbmFtZSwgJywgJy5qb2luKGFs
bF9wb3J0cykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICJUZXN0
ICVyIGlzIG5vdCBza2lwcGVkIGJ5IGFueSBwb3J0LiIgJSB0ZXN0X25hbWUKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzX3VuaXR0
ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJp
ZXNfdW5pdHRlc3QucHkKaW5kZXggOThlZDU0NS4uMmVmMGZiZCAxMDA2NDQKLS0tIGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXNfdW5pdHRlc3QucHkK
KysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXNf
dW5pdHRlc3QucHkKQEAgLTYxLDMgKzYxLDEzIEBAIGNsYXNzIFF1ZXJ5Q29tbWFuZHNUZXN0KENv
bW1hbmRzVGVzdCk6CiAgICAgZGVmIHRlc3RfdHJlZV9zdGF0dXMoc2VsZik6CiAgICAgICAgIGV4
cGVjdGVkX3N0ZG91dCA9ICJvayAgIDogQnVpbGRlcjFcbm9rICAgOiBCdWlsZGVyMlxuIgogICAg
ICAgICBzZWxmLmFzc2VydF9leGVjdXRlX291dHB1dHMoVHJlZVN0YXR1cygpLCBOb25lLCBleHBl
Y3RlZF9zdGRvdXQpCisKKyAgICBkZWYgdGVzdF9za2lwcGVkX3BvcnRzKHNlbGYpOgorICAgICAg
ICBleHBlY3RlZF9zdGRvdXQgPSAiUG9ydHMgc2tpcHBpbmcgdGVzdCAnbWVkaWEvZm9vL2Jhci5o
dG1sJzogZmFrZV9wb3J0LCBjaHJvbWl1bVxuIgorICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRl
X291dHB1dHMoU2tpcHBlZFBvcnRzKCksICgibWVkaWEvZm9vL2Jhci5odG1sIiwpLCBleHBlY3Rl
ZF9zdGRvdXQpCisKKyAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0ID0gIlBvcnRzIHNraXBwaW5nIHRl
c3QgJ2Zvbyc6IGZha2VfcG9ydFxuIgorICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRlX291dHB1
dHMoU2tpcHBlZFBvcnRzKCksICgiZm9vIiwpLCBleHBlY3RlZF9zdGRvdXQpCisKKyAgICAgICAg
ZXhwZWN0ZWRfc3Rkb3V0ID0gIlRlc3QgJ21lZGlhJyBpcyBub3Qgc2tpcHBlZCBieSBhbnkgcG9y
dC5cbiIKKyAgICAgICAgc2VsZi5hc3NlcnRfZXhlY3V0ZV9vdXRwdXRzKFNraXBwZWRQb3J0cygp
LCAoIm1lZGlhIiwpLCBleHBlY3RlZF9zdGRvdXQpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkKaW5kZXggMjExNGMzMC4uZDQzMjlkYiAxMDA2NDQKLS0t
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5CisrKyBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9tb2NrdG9vbC5weQpAQCAtNDIyLDYgKzQy
MiwzNCBAQCBjbGFzcyBNb2NrU0NNKE1vY2spOgogICAgIGRlZiBzdm5fcmV2aXNpb25fZnJvbV9j
b21taXRfdGV4dChzZWxmLCBjb21taXRfdGV4dCk6CiAgICAgICAgIHJldHVybiAiNDk4MjQiCiAK
KyAgICBkZWYgZGlyZWN0b3J5X2NvbnRlbnRzKHNlbGYsIGRpcmVjdG9yeV9wYXRoKToKKyAgICAg
ICAgaWYgZGlyZWN0b3J5X3BhdGggPT0gb3MucGF0aC5qb2luKCJMYXlvdXRUZXN0cyIsICJwbGF0
Zm9ybSIpOgorICAgICAgICAgICAgcmV0dXJuIFsiZmFrZV9wb3J0IixdCisgICAgICAgIGVsaWYg
ZGlyZWN0b3J5X3BhdGggPT0gb3MucGF0aC5qb2luKCJMYXlvdXRUZXN0cyIsICJwbGF0Zm9ybSIs
ICJmYWtlX3BvcnQiKToKKyAgICAgICAgICAgIHJldHVybiBbIlNraXBwZWQiLF0KKyAgICAgICAg
cmV0dXJuIFtdCisKKyAgICBkZWYgYWJzb2x1dGVfcGF0aChzZWxmLCBwYXRoKToKKyAgICAgICAg
cmV0dXJuIHBhdGgKKworICAgIGRlZiBzaG93X2hlYWQoc2VsZiwgcGF0aCk6CisgICAgICAgIGlm
IHBhdGggPT0gb3MucGF0aC5qb2luKCJMYXlvdXRUZXN0cyIsICJwbGF0Zm9ybSIsICJmYWtlX3Bv
cnQiLCAiU2tpcHBlZCIpOgorICAgICAgICAgICAgcmV0dXJuICIiIlwKKyMgSSBhbSBhIFNraXBw
ZWQgZmlsZQorbWVkaWEvZm9vL2Jhci5odG1sCisKK2ZvbworZm9vL2JvbworCisiIiIKKyAgICAg
ICAgZWxpZiBwYXRoID09IG9zLnBhdGguam9pbigiTGF5b3V0VGVzdHMiLCAicGxhdGZvcm0iLCAi
Y2hyb21pdW0iLCAidGVzdF9leHBlY3RhdGlvbnMudHh0Iik6CisgICAgICAgICAgICByZXR1cm4g
IiIiXAorLy8gSSBhbSBhIENocm9taXVtIGV4cGVjdGF0aW9ucyBmaWxlCitTS0lQIDogbWVkaWEv
Zm9vID0gVElNRU9VVCBQQVNTCitERUJVRyA6IGZhc3QvanMvbm8tZ29vZC5qcyA9IFRJTUVPVVQg
UEFTUworCisiIiIKKyAgICAgICAgcmV0dXJuICIiCiAKIGNsYXNzIE1vY2tDaGVja291dChvYmpl
Y3QpOgogCi0tIAoxLjcuMQ==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62405</attachid>
            <date>2010-07-23 03:36:15 -0700</date>
            <delta_ts>2010-09-06 10:12:42 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>proposed-patch.patch</filename>
            <type>text/plain</type>
            <size>9765</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA5OWE3MzE4Zjc2OWYxMTZhNzA0Y2JiNmRlNjQyMjQwMjk1YzE1OTAxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUaHUsIDIyIEp1bCAyMDEwIDE4OjI0OjIzICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
cHJvcG9zZWQgcGF0Y2gKCi0tLQogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIDE0ICsrKysKIC4uLi9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9j
aGVja291dC9zY20ucHkgICAgICAgIHwgICAgOSArKwogLi4uL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9jb21tYW5kcy9xdWVyaWVzLnB5ICAgICAgfCAgIDgzICsrKysrKysrKysrKysrKysrKysrCiAu
Li4vd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzX3VuaXR0ZXN0LnB5ICAgICB8ICAgMTAg
KysrCiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkgICAgICB8
ICAgMjggKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAxNDQgaW5zZXJ0aW9ucygrKSwgMCBkZWxl
dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKaW5kZXggMjZjZjE1MS4uNzU5ODQwNiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBA
CisyMDEwLTA3LTIzICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICB3ZWJraXQtcGF0
Y2ggY29tbWFuZCB0byBmaW5kIHRoZSBwb3J0cyBjb3ZlcmluZyBhIHNwZWNpZmljIGxheW91dCB0
ZXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mjgz
MgorCisgICAgICAgIFRvIHVzZSBpdDogd2Via2l0LXBhdGNoIHNraXBwZWQtcG9ydHMgc29tZS9s
YXlvdXQvdGVzdC5odG1sCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVj
a291dC9zY20ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1
ZXJpZXMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJp
ZXNfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29s
LnB5OgorCiAyMDEwLTA3LTIxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtLnB5CmluZGV4IDU2OTU1OGEuLjg1Yjk0ODUg
MTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0
L3NjbS5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291
dC9zY20ucHkKQEAgLTI0MSw2ICsyNDEsOSBAQCBjbGFzcyBTQ006CiAgICAgZGVmIHNob3dfaGVh
ZChzZWxmLCBwYXRoKToKICAgICAgICAgc2VsZi5fc3ViY2xhc3NfbXVzdF9pbXBsZW1lbnQoKQog
CisgICAgZGVmIGRpcmVjdG9yeV9jb250ZW50cyhzZWxmLCBwYXRoKToKKyAgICAgICAgc2VsZi5f
c3ViY2xhc3NfbXVzdF9pbXBsZW1lbnQoKQorCiAgICAgZGVmIGFwcGx5X3JldmVyc2VfZGlmZihz
ZWxmLCByZXZpc2lvbik6CiAgICAgICAgIHNlbGYuX3N1YmNsYXNzX211c3RfaW1wbGVtZW50KCkK
IApAQCAtNDY5LDYgKzQ3Miw5IEBAIGNsYXNzIFNWTihTQ00pOgogICAgIGRlZiBzaG93X2hlYWQo
c2VsZiwgcGF0aCk6CiAgICAgICAgIHJldHVybiBzZWxmLnJ1bihbJ3N2bicsICdjYXQnLCAnLXIn
LCAnQkFTRScsIHBhdGhdLCBkZWNvZGVfb3V0cHV0PUZhbHNlKQogCisgICAgZGVmIGRpcmVjdG9y
eV9jb250ZW50cyhzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuKFsnc3ZuJywg
J2xzJywgcGF0aF0sIGRlY29kZV9vdXRwdXQ9RmFsc2UpCisKICAgICBkZWYgX3JlcG9zaXRvcnlf
dXJsKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi52YWx1ZV9mcm9tX3N2bl9pbmZvKHNlbGYu
Y2hlY2tvdXRfcm9vdCwgJ1VSTCcpCiAKQEAgLTY2OSw2ICs2NzUsOSBAQCBjbGFzcyBHaXQoU0NN
KToKICAgICBkZWYgc2hvd19oZWFkKHNlbGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gc2VsZi5y
dW4oWydnaXQnLCAnc2hvdycsICdIRUFEOicgKyBzZWxmLnRvX29iamVjdF9uYW1lKHBhdGgpXSwg
ZGVjb2RlX291dHB1dD1GYWxzZSkKIAorICAgIGRlZiBkaXJlY3RvcnlfY29udGVudHMoc2VsZiwg
cGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bihbJ2dpdCcsICdscy10cmVlJywgJy0tbmFt
ZS1vbmx5JywgIkhFQUQ6JXMiICUgc2VsZi50b19vYmplY3RfbmFtZShwYXRoKV0sIGRlY29kZV9v
dXRwdXQ9RmFsc2UpLnNwbGl0bGluZXMoKQorCiAgICAgZGVmIGNvbW1pdHRlcl9lbWFpbF9mb3Jf
cmV2aXNpb24oc2VsZiwgcmV2aXNpb24pOgogICAgICAgICBnaXRfY29tbWl0ID0gc2VsZi5naXRf
Y29tbWl0X2Zyb21fc3ZuX3JldmlzaW9uKHJldmlzaW9uKQogICAgICAgICBjb21taXR0ZXJfZW1h
aWwgPSBzZWxmLnJ1bihbImdpdCIsICJsb2ciLCAiLTEiLCAiLS1wcmV0dHk9Zm9ybWF0OiVjZSIs
IGdpdF9jb21taXRdKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90
b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvY29tbWFuZHMvcXVlcmllcy5weQppbmRleCA5MWNlNWU5Li40MDQ1OThkIDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5w
eQpAQCAtMjksNiArMjksNyBAQAogCiAKIGZyb20gb3B0cGFyc2UgaW1wb3J0IG1ha2Vfb3B0aW9u
CitpbXBvcnQgb3MKIAogZnJvbSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuY29tbWl0aW5mbyBp
bXBvcnQgQ29tbWl0SW5mbwogZnJvbSB3ZWJraXRweS5jb21tb24uY29uZmlnLmNvbW1pdHRlcnMg
aW1wb3J0IENvbW1pdHRlckxpc3QKQEAgLTI4NCwzICsyODUsODUgQEAgYW5kIGRpc3BsYXllcyB0
aGUgc3RhdHVzIG9mIGVhY2ggYnVpbGRlci4iIiIKICAgICAgICAgZm9yIGJ1aWxkZXIgaW4gdG9v
bC5idWlsZGJvdC5idWlsZGVyX3N0YXR1c2VzKCk6CiAgICAgICAgICAgICBzdGF0dXNfc3RyaW5n
ID0gIm9rIiBpZiBidWlsZGVyWyJpc19ncmVlbiJdIGVsc2UgIkZBSUwiCiAgICAgICAgICAgICBw
cmludCAiJXMgOiAlcyIgJSAoc3RhdHVzX3N0cmluZy5sanVzdCg0KSwgYnVpbGRlclsibmFtZSJd
KQorCisKK2NsYXNzIFNraXBwZWRQb3J0cyhBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZCk6Cisg
ICAgbmFtZSA9ICJza2lwcGVkLXBvcnRzIgorICAgIGhlbHBfdGV4dCA9ICJQcmludCB0aGUgbGlz
dCBvZiBwb3J0cyBza2lwcGluZyB0aGUgZ2l2ZW4gbGF5b3V0IHRlc3QocykiCisgICAgbG9uZ19o
ZWxwID0gIiIiU2NhbnMgdGhlIHRoZSBTa2lwcGVkIGZpbGUgb2YgZWFjaCBwb3J0IGFuZCBmaWd1
cmUKK291dCB3aGF0IHBvcnRzIGFyZSBza2lwcGluZyB0aGUgdGVzdChzKS4gQ2F0ZWdvcmllcyBh
cmUgdGFrZW4gaW4gYWNjb3VudCB0b28uIiIiCisgICAgYXJndW1lbnRfbmFtZXMgPSAiVEVTVF9O
QU1FIgorCisgICAgZGVmIF9maW5kX3Rlc3RzX2luX3NraXBwZWQoc2VsZiwgc2NtLCB0ZXN0cywg
c2tpcHBlZF9maWxlKToKKyAgICAgICAgdGVzdHNfc2tpcHBlZCA9IFtdCisgICAgICAgICMgQWxs
IHRlc3RzIG9yIGNhdGVnb3JpZXMgb2YgdGVzdHMgc2tpcHBlZC4KKyAgICAgICAgc2tpcHBlZF90
ZXN0cyA9IFtsaW5lLnN0cmlwKCkgZm9yIGxpbmUgaW4gc2NtLnNob3dfaGVhZChza2lwcGVkX2Zp
bGUpLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RyaXAo
KSBhbmQgbm90IGxpbmUuc3RhcnRzd2l0aCgiIyIpXQorCisgICAgICAgICMgRmluZCBpZiBhIHRl
c3QgaXMgc2tpcHBlZCBieSB1c2luZyBkaXJlY3QgbWF0Y2ggb3IgY2F0ZWdvcnkgbWF0Y2hpbmcu
CisgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gdGVzdHM6CisgICAgICAgICAgICBmb3Igc2tpcHBl
ZF90ZXN0IGluIHNraXBwZWRfdGVzdHM6CisgICAgICAgICAgICAgICAgaWYgc2tpcHBlZF90ZXN0
ID09IHRlc3RfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgdGVzdHNfc2tpcHBlZC5hcHBlbmQo
dGVzdF9uYW1lKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lLCBleHRlbnNpb24gPSBvcy5wYXRoLnNw
bGl0ZXh0KHNraXBwZWRfdGVzdCkKKyAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGlzIGEgdGVz
dCBjYXRlZ29yeQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZXh0ZW5zaW9uIGFuZCB0ZXN0
X25hbWUuc3RhcnRzd2l0aChiYXNlbmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0
c19za2lwcGVkLmFwcGVuZCh0ZXN0X25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
aworCisgICAgICAgIHJldHVybiB0ZXN0c19za2lwcGVkCisKKyAgICBkZWYgX2ZpbmRfdGVzdHNf
aW5fZXhwZWN0YXRpb25zX2ZpbGUoc2VsZiwgc2NtLCB0ZXN0cywgcGxhdGZvcm1fZGlyZWN0b3J5
KToKKyAgICAgICAgY2hyb21pdW1fZXhwZWN0YXRpb25zX3BhdGggPSBvcy5wYXRoLmpvaW4ocGxh
dGZvcm1fZGlyZWN0b3J5LCAiY2hyb21pdW0iLCAidGVzdF9leHBlY3RhdGlvbnMudHh0IikKKyAg
ICAgICAgbGluZXMgPSBbbGluZS5zdHJpcCgpIGZvciBsaW5lIGluIHNjbS5zaG93X2hlYWQoY2hy
b21pdW1fZXhwZWN0YXRpb25zX3BhdGgpLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgICAgICBp
ZiBsaW5lLmZpbmQoIlNLSVAiKSA+PSAwIGFuZCBsaW5lLnN0cmlwKCkgYW5kIG5vdCBsaW5lLnN0
YXJ0c3dpdGgoIi8vIildCisKKyAgICAgICAgYWxsX3NraXBwZWRfdGVzdHMgPSBbXQorICAgICAg
ICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIG1ldGFkYXRhLCB0ZXN0ID0gbGluZS5z
cGxpdCgiOiIpCisgICAgICAgICAgICBtZXRhZGF0YSA9IG1ldGFkYXRhLnN0cmlwKCkKKyAgICAg
ICAgICAgIHRlc3QgPSB0ZXN0LnN0cmlwKCkKKyAgICAgICAgICAgIHRlc3RfbmFtZSA9IHRlc3Qu
c3BsaXQoIj0iKVswXS5zdHJpcCgpCisgICAgICAgICAgICAjIEZJWE1FOiBtYXliZSBpdCdkIGJl
IG5pY2UgdG8gcmV1c2UgdGhlIG1ldGFkYXRhIGZpZWxkIHNvCisgICAgICAgICAgICAjIG1vcmUg
aW5mb3JtYXRpb25zIGNhbiBiZSByZXBvcnRlZCB0byB0aGUgdXNlciwgc3VjaCBhcworICAgICAg
ICAgICAgIyBidWlsZCB0eXBlIGFuZCBwbGF0Zm9ybShzKS4KKyAgICAgICAgICAgIGFsbF9za2lw
cGVkX3Rlc3RzLmFwcGVuZCh0ZXN0X25hbWUpCisKKyAgICAgICAgdGVzdHNfc2tpcHBlZCA9IFtd
CisgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gdGVzdHM6CisgICAgICAgICAgICBmb3Igc2tpcHBl
ZF90ZXN0IGluIGFsbF9za2lwcGVkX3Rlc3RzOgorICAgICAgICAgICAgICAgIGlmIHNraXBwZWRf
dGVzdCA9PSB0ZXN0X25hbWU6CisgICAgICAgICAgICAgICAgICAgIHRlc3RzX3NraXBwZWQuYXBw
ZW5kKHRlc3RfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBiYXNlbmFtZSwgZXh0ZW5zaW9uID0gb3MucGF0
aC5zcGxpdGV4dChza2lwcGVkX3Rlc3QpCisgICAgICAgICAgICAgICAgICAgICMgdGhpcyBpcyBh
IHRlc3QgY2F0ZWdvcnkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGV4dGVuc2lvbiBhbmQg
dGVzdF9uYW1lLnN0YXJ0c3dpdGgoYmFzZW5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAg
dGVzdHNfc2tpcHBlZC5hcHBlbmQodGVzdF9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWsKKworICAgICAgICByZXR1cm4gZGljdChbKGksIFsiY2hyb21pdW0iXSkgZm9yIGkgaW4g
dGVzdHNfc2tpcHBlZF0pCisKKyAgICBkZWYgZXhlY3V0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0
b29sKToKKyAgICAgICAgc2NtID0gdG9vbC5zY20oKQorICAgICAgICBwbGF0Zm9ybV9kaXJlY3Rv
cnkgPSB0b29sLnNjbSgpLmFic29sdXRlX3BhdGgob3MucGF0aC5qb2luKCJMYXlvdXRUZXN0cyIs
ICJwbGF0Zm9ybSIpKQorICAgICAgICByZXN1bHRzID0gZGljdChbKHRlc3QsIFtdKSBmb3IgdGVz
dCBpbiBhcmdzXSkKKyAgICAgICAgZm9yIHBvcnRfbmFtZSBpbiBzY20uZGlyZWN0b3J5X2NvbnRl
bnRzKHBsYXRmb3JtX2RpcmVjdG9yeSk6CisgICAgICAgICAgICBpZiAiU2tpcHBlZCIgbm90IGlu
IHNjbS5kaXJlY3RvcnlfY29udGVudHMob3MucGF0aC5qb2luKHBsYXRmb3JtX2RpcmVjdG9yeSwg
cG9ydF9uYW1lKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZvciB0
ZXN0X25hbWUgaW4gc2VsZi5fZmluZF90ZXN0c19pbl9za2lwcGVkKHNjbSwgYXJncywgb3MucGF0
aC5qb2luKHBsYXRmb3JtX2RpcmVjdG9yeSwgcG9ydF9uYW1lLCAiU2tpcHBlZCIpKToKKyAgICAg
ICAgICAgICAgICByZXN1bHRzW3Rlc3RfbmFtZV0uYXBwZW5kKHBvcnRfbmFtZSkKKworICAgICAg
ICAjIFBhcnNlIENocm9taXVtJ3MgZXhwZWN0YXRpb25zIGZpbGUKKyAgICAgICAgc2tpcHBlZF9j
aHJvbWl1bV90ZXN0cyA9IHNlbGYuX2ZpbmRfdGVzdHNfaW5fZXhwZWN0YXRpb25zX2ZpbGUoc2Nt
LCBhcmdzLCBwbGF0Zm9ybV9kaXJlY3RvcnkpCisKKyAgICAgICAgZm9yIHRlc3RfbmFtZSwgcG9y
dHMgaW4gcmVzdWx0cy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGFsbF9wb3J0cyA9IHBvcnRz
CisgICAgICAgICAgICBpZiB0ZXN0X25hbWUgaW4gc2tpcHBlZF9jaHJvbWl1bV90ZXN0czoKKyAg
ICAgICAgICAgICAgICBhbGxfcG9ydHMuZXh0ZW5kKHNraXBwZWRfY2hyb21pdW1fdGVzdHNbdGVz
dF9uYW1lXSkKKyAgICAgICAgICAgIGlmIGFsbF9wb3J0czoKKyAgICAgICAgICAgICAgICBwcmlu
dCAiUG9ydHMgc2tpcHBpbmcgdGVzdCAlcjogJXMiICUgKHRlc3RfbmFtZSwgJywgJy5qb2luKGFs
bF9wb3J0cykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICJUZXN0
ICVyIGlzIG5vdCBza2lwcGVkIGJ5IGFueSBwb3J0LiIgJSB0ZXN0X25hbWUKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzX3VuaXR0
ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJp
ZXNfdW5pdHRlc3QucHkKaW5kZXggOThlZDU0NS4uMmVmMGZiZCAxMDA2NDQKLS0tIGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXNfdW5pdHRlc3QucHkK
KysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXNf
dW5pdHRlc3QucHkKQEAgLTYxLDMgKzYxLDEzIEBAIGNsYXNzIFF1ZXJ5Q29tbWFuZHNUZXN0KENv
bW1hbmRzVGVzdCk6CiAgICAgZGVmIHRlc3RfdHJlZV9zdGF0dXMoc2VsZik6CiAgICAgICAgIGV4
cGVjdGVkX3N0ZG91dCA9ICJvayAgIDogQnVpbGRlcjFcbm9rICAgOiBCdWlsZGVyMlxuIgogICAg
ICAgICBzZWxmLmFzc2VydF9leGVjdXRlX291dHB1dHMoVHJlZVN0YXR1cygpLCBOb25lLCBleHBl
Y3RlZF9zdGRvdXQpCisKKyAgICBkZWYgdGVzdF9za2lwcGVkX3BvcnRzKHNlbGYpOgorICAgICAg
ICBleHBlY3RlZF9zdGRvdXQgPSAiUG9ydHMgc2tpcHBpbmcgdGVzdCAnbWVkaWEvZm9vL2Jhci5o
dG1sJzogZmFrZV9wb3J0LCBjaHJvbWl1bVxuIgorICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRl
X291dHB1dHMoU2tpcHBlZFBvcnRzKCksICgibWVkaWEvZm9vL2Jhci5odG1sIiwpLCBleHBlY3Rl
ZF9zdGRvdXQpCisKKyAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0ID0gIlBvcnRzIHNraXBwaW5nIHRl
c3QgJ2Zvbyc6IGZha2VfcG9ydFxuIgorICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRlX291dHB1
dHMoU2tpcHBlZFBvcnRzKCksICgiZm9vIiwpLCBleHBlY3RlZF9zdGRvdXQpCisKKyAgICAgICAg
ZXhwZWN0ZWRfc3Rkb3V0ID0gIlRlc3QgJ21lZGlhJyBpcyBub3Qgc2tpcHBlZCBieSBhbnkgcG9y
dC5cbiIKKyAgICAgICAgc2VsZi5hc3NlcnRfZXhlY3V0ZV9vdXRwdXRzKFNraXBwZWRQb3J0cygp
LCAoIm1lZGlhIiwpLCBleHBlY3RlZF9zdGRvdXQpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkKaW5kZXggMjExNGMzMC4uMWZjZWY3OSAxMDA2NDQKLS0t
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5CisrKyBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9tb2NrdG9vbC5weQpAQCAtNDIyLDYgKzQy
MiwzNCBAQCBjbGFzcyBNb2NrU0NNKE1vY2spOgogICAgIGRlZiBzdm5fcmV2aXNpb25fZnJvbV9j
b21taXRfdGV4dChzZWxmLCBjb21taXRfdGV4dCk6CiAgICAgICAgIHJldHVybiAiNDk4MjQiCiAK
KyAgICBkZWYgZGlyZWN0b3J5X2NvbnRlbnRzKHNlbGYsIGRpcmVjdG9yeV9wYXRoKToKKyAgICAg
ICAgaWYgZGlyZWN0b3J5X3BhdGggPT0gb3MucGF0aC5qb2luKCJMYXlvdXRUZXN0cyIsICJwbGF0
Zm9ybSIpOgorICAgICAgICAgICAgcmV0dXJuIFsiZmFrZV9wb3J0IiwgXQorICAgICAgICBlbGlm
IGRpcmVjdG9yeV9wYXRoID09IG9zLnBhdGguam9pbigiTGF5b3V0VGVzdHMiLCAicGxhdGZvcm0i
LCAiZmFrZV9wb3J0Iik6CisgICAgICAgICAgICByZXR1cm4gWyJTa2lwcGVkIiwgXQorICAgICAg
ICByZXR1cm4gW10KKworICAgIGRlZiBhYnNvbHV0ZV9wYXRoKHNlbGYsIHBhdGgpOgorICAgICAg
ICByZXR1cm4gcGF0aAorCisgICAgZGVmIHNob3dfaGVhZChzZWxmLCBwYXRoKToKKyAgICAgICAg
aWYgcGF0aCA9PSBvcy5wYXRoLmpvaW4oIkxheW91dFRlc3RzIiwgInBsYXRmb3JtIiwgImZha2Vf
cG9ydCIsICJTa2lwcGVkIik6CisgICAgICAgICAgICByZXR1cm4gIiIiXAorIyBJIGFtIGEgU2tp
cHBlZCBmaWxlCittZWRpYS9mb28vYmFyLmh0bWwKKworZm9vCitmb28vYm9vCisKKyIiIgorICAg
ICAgICBlbGlmIHBhdGggPT0gb3MucGF0aC5qb2luKCJMYXlvdXRUZXN0cyIsICJwbGF0Zm9ybSIs
ICJjaHJvbWl1bSIsICJ0ZXN0X2V4cGVjdGF0aW9ucy50eHQiKToKKyAgICAgICAgICAgIHJldHVy
biAiIiJcCisvLyBJIGFtIGEgQ2hyb21pdW0gZXhwZWN0YXRpb25zIGZpbGUKK1NLSVAgOiBtZWRp
YS9mb28gPSBUSU1FT1VUIFBBU1MKK0RFQlVHIDogZmFzdC9qcy9uby1nb29kLmpzID0gVElNRU9V
VCBQQVNTCisKKyIiIgorICAgICAgICByZXR1cm4gIiIKIAogY2xhc3MgTW9ja0NoZWNrb3V0KG9i
amVjdCk6CiAKLS0gCjEuNy4x
</data>
<flag name="review"
          id="50591"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66653</attachid>
            <date>2010-09-06 10:12:42 -0700</date>
            <delta_ts>2010-09-06 10:17:30 -0700</delta_ts>
            <desc>proposed patch (reworked)</desc>
            <filename>proposed-patch-reworked.patch</filename>
            <type>text/plain</type>
            <size>17966</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA2YjQzY2U0NmZmYWU5ZjIxMmRmODViYTlhYmNiZjYxZjBjMDQ5MTMyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDYgU2VwIDIwMTAgMTk6MTI6NTQgKzAyMDAKU3ViamVjdDogW1BBVENIXSBw
cm9wb3NlZCBwYXRjaCAocmV3b3JrZWQpCgotLS0KIFdlYktpdFRvb2xzL0NoYW5nZUxvZyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMyArKysrKysrKysrKysrKysrKwogLi4uL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weSAgICAgfCAgIDEyICsrKysr
KysrKwogLi4uL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2VfdW5pdHRlc3QucHkgICAg
fCAgICA3ICsrKysrCiAuLi4vU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bS5weSB8ICAgIDUgKysrKwogLi4uL2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3VuaXR0
ZXN0LnB5ICAgICAgICAgfCAgIDExICsrKysrKysrCiAuLi4vU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5ICB8ICAgIDcgKysrKysKIC4uLi93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9mYWN0b3J5X3VuaXR0ZXN0LnB5IHwgICAyNiArKysrKysrKysrKysrKysr
LS0tCiAuLi4vU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5ICAgICB8
ICAgIDMgKysKIC4uLi9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5w
eSAgIHwgICAxMSArKysrKy0tLQogLi4uL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtp
dF91bml0dGVzdC5weSAgfCAgIDEyICsrKysrKysrKwogLi4uL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9jb21tYW5kcy9xdWVyaWVzLnB5ICAgICAgfCAgIDI2ICsrKysrKysrKysrKysrKysrKystCiAu
Li4vd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzX3VuaXR0ZXN0LnB5ICAgICB8ICAgMTAg
KysrKysrKwogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21haW4ucHkgICAgICAg
ICAgfCAgICAyICsKIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9tb2NrdG9vbC5w
eSAgICAgIHwgICAxNSArKysrKysrKysrKwogMTQgZmlsZXMgY2hhbmdlZCwgMTYxIGluc2VydGlv
bnMoKyksIDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9n
IGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDUwNjQ4YjAuLjQyNDIxMjQgMTAwNjQ0Ci0t
LSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyNiBAQAorMjAxMC0wOS0wNiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGln
YWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgd2Via2l0LXBhdGNoIGNvbW1hbmQgdG8gZmluZCB0aGUgcG9ydHMgY292ZXJpbmcgYSBzcGVj
aWZpYyBsYXlvdXQgdGVzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDI4MzIKKworICAgICAgICBUbyB1c2UgaXQ6IHdlYmtpdC1wYXRjaCBza2lwcGVk
LXBvcnRzIHNvbWUvbGF5b3V0L3Rlc3QuaHRtbAorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvYmFzZV91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5OgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fdW5pdHRlc3QucHk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeV91bml0dGVzdC5w
eToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXRfdW5p
dHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJp
ZXMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXNf
dW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL21haW4ucHk6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5OgorCiAyMDEwLTA5LTA1
ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CmluZGV4IDZiNzM0MmQuLjU1YTllNmIgMTAwNjQ0
Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFz
ZS5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Jhc2UucHkKQEAgLTMwNSw2ICszMDUsMTggQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAg
ICAiIiJSZXR1cm4gdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHRvcCBvZiB0aGUgTGF5b3V0VGVz
dHMgZGlyZWN0b3J5LiIiIgogICAgICAgICByZXR1cm4gc2VsZi5wYXRoX2Zyb21fd2Via2l0X2Jh
c2UoJ0xheW91dFRlc3RzJykKIAorICAgIGRlZiBza2lwc19sYXlvdXRfdGVzdChzZWxmLCB0ZXN0
X25hbWUpOgorICAgICAgICAiIiJGaWd1cmVzIG91dCBpZiB0aGUgZ2l2ZW50IHRlc3QgaXMgYmVp
bmcgc2tpcHBlZCBvciBub3QuCisKKyAgICAgICAgVGVzdCBjYXRlZ29yaWVzIGFyZSBoYW5kbGVk
IGFzIHdlbGwuIiIiCisgICAgICAgIGZvciB0ZXN0X29yX2NhdGVnb3J5IGluIHNlbGYuc2tpcHBl
ZF9sYXlvdXRfdGVzdHMoKToKKyAgICAgICAgICAgIGlmIHRlc3Rfb3JfY2F0ZWdvcnkgPT0gdGVz
dF9uYW1lOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBiYXNlbmFt
ZSwgZXh0ZW5zaW9uID0gb3MucGF0aC5zcGxpdGV4dCh0ZXN0X29yX2NhdGVnb3J5KQorICAgICAg
ICAgICAgaWYgbm90IGV4dGVuc2lvbiBhbmQgdGVzdF9uYW1lLnN0YXJ0c3dpdGgoYmFzZW5hbWUp
OgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCiAg
ICAgZGVmIG1heWJlX21ha2VfZGlyZWN0b3J5KHNlbGYsICpwYXRoKToKICAgICAgICAgIiIiQ3Jl
YXRlcyB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3Qu
IiIiCiAgICAgICAgIHRyeToKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZV91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZV91bml0dGVzdC5weQppbmRleCBmODIx
MzUzLi4yNDdmNWFhIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Jhc2VfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5CkBAIC0xMDksNiAr
MTA5LDEzIEBAIGNsYXNzIFBvcnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2Vs
Zi5hc3NlcnRGYWxzZShiYXNlLl93ZGlmZl9hdmFpbGFibGUpCiAgICAgICAgIGJhc2UuX3dkaWZm
X2F2YWlsYWJsZSA9IFRydWUKIAorICAgIGRlZiB0ZXN0X2xheW91dF90ZXN0c19za2lwcGluZyhz
ZWxmKToKKyAgICAgICAgcG9ydCA9IGJhc2UuUG9ydCgpCisgICAgICAgIHBvcnQuc2tpcHBlZF9s
YXlvdXRfdGVzdHMgPSBsYW1iZGE6IFsnZm9vL2Jhci5odG1sJywgJ2JvbyddCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShwb3J0LnNraXBzX2xheW91dF90ZXN0KCdmb28vYmFyLmh0bWwnKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQuc2tpcHNfbGF5b3V0X3Rlc3QoJ2Jvby9iYWguaHRt
bCcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQuc2tpcHNfbGF5b3V0X3Rlc3QoJ2Zv
by9mb28uaHRtbCcpKQorCiAKIGNsYXNzIERyaXZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgog
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2Nocm9taXVtLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9jaHJvbWl1bS5weQppbmRleCA2Y2ZjMGI4Li43NWFiZDM2IDEwMDY0NAotLS0gYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hy
b21pdW0ucHkKQEAgLTIzMyw2ICsyMzMsMTEgQEAgY2xhc3MgQ2hyb21pdW1Qb3J0KGJhc2UuUG9y
dCk6CiAgICAgICAgIHdpdGggY29kZWNzLm9wZW4ob3ZlcnJpZGVzX3BhdGgsICJyIiwgInV0Zi04
IikgYXMgZmlsZToKICAgICAgICAgICAgIHJldHVybiBmaWxlLnJlYWQoKSArIGRydF9vdmVycmlk
ZXMKIAorICAgIGRlZiBza2lwcGVkX2xheW91dF90ZXN0cyhzZWxmKToKKyAgICAgICAgcmV0dXJu
IFsgbGluZS5zcGxpdCgnOicpWzFdLnNwbGl0KCI9IilbMF0uc3RyaXAoKQorICAgICAgICAgICAg
ICAgICBmb3IgbGluZSBpbiBzZWxmLnRlc3RfZXhwZWN0YXRpb25zKCkuc3BsaXRsaW5lcygpCisg
ICAgICAgICAgICAgICAgIGlmIGxpbmUuZmluZCgnU0tJUCcpICE9IC0xIGFuZCBub3QgbGluZS5z
dGFydHN3aXRoKCcvLycpIF0KKwogICAgIGRlZiB0ZXN0X3BsYXRmb3JtX25hbWVzKHNlbGYpOgog
ICAgICAgICByZXR1cm4gc2VsZi50ZXN0X2Jhc2VfcGxhdGZvcm1fbmFtZXMoKSArICgnd2luLXhw
JywKICAgICAgICAgICAgICd3aW4tdmlzdGEnLCAnd2luLTcnKQpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV91bml0dGVz
dC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hy
b21pdW1fdW5pdHRlc3QucHkKaW5kZXggYTMyZWFmZC4uZTdhNzMyMCAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV91bml0
dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2Nocm9taXVtX3VuaXR0ZXN0LnB5CkBAIC05NSwzICs5NSwxNCBAQCBjbGFzcyBDaHJvbWl1
bURyaXZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgJy94Y29kZWJ1aWxk
L1JlbGVhc2UvSW1hZ2VEaWZmJykpCiAgICAgICAgICMgRklYTUU6IEZpZ3VyZSBvdXQgaG93IHRo
aXMgaXMgZ29pbmcgdG8gd29yayBvbiBXaW5kb3dzLgogICAgICAgICAjcG9ydCA9IGNocm9taXVt
X3dpbi5DaHJvbWl1bVdpblBvcnQoJ3Rlc3QtcG9ydCcsIG9wdGlvbnM9TW9ja09wdGlvbnMoKSkK
KworICAgIGRlZiB0ZXN0X3NraXBwZWRfbGF5b3V0X3Rlc3RzKHNlbGYpOgorICAgICAgICBjbGFz
cyBNb2NrT3B0aW9uczoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBwb3J0ID0gY2hyb21p
dW1fbGludXguQ2hyb21pdW1MaW51eFBvcnQoJ3Rlc3QtcG9ydCcsIG9wdGlvbnM9TW9ja09wdGlv
bnMoKSkKKyAgICAgICAgcG9ydC50ZXN0X2V4cGVjdGF0aW9ucyA9IGxhbWJkYTogIiIiU0tJUCA6
IGZhc3QvanMvbm90LWdvb2QuanMgPSBUSU1FT1VUIFBBU1MKKyAgICAgIERFQlVHIDogZmFzdC9q
cy9uby1nb29kLmpzID0gVElNRU9VVCBQQVNTCisgICAgICBERUZFUiBMSU5VWCBXSU4gOiBmYXN0
L2pzL3ZlcnktZ29vZC5qcyA9IFRJTUVPVVQgUEFTUyIiIgorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHBvcnQuc2tpcHBlZF9sYXlvdXRfdGVzdHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBbImZhc3QvanMvbm90LWdvb2QuanMiLF0pCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHkgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHkKaW5kZXggMjU4YmYz
My4uYjZlMTk0NCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weQpAQCAtMzIsNiArMzIsOSBAQAogCiBpbXBv
cnQgc3lzCiAKK0FMTF9QT1JUX05BTUVTPVsndGVzdCcsICdkcnlydW4nLCAnbWFjJywgJ3dpbics
ICdndGsnLCAncXQnLCAnY2hyb21pdW0tbWFjJywKKyAgICAgICAgICAgICAgICAnY2hyb21pdW0t
bGludXgnLCAnY2hyb21pdW0td2luJywgJ2dvb2dsZS1jaHJvbWUtd2luJywKKyAgICAgICAgICAg
ICAgICAnZ29vZ2xlLWNocm9tZS1tYWMnLCAnZ29vZ2xlLWNocm9tZS1saW51eDMyJywgJ2dvb2ds
ZS1jaHJvbWUtbGludXg2NCddCiAKIGRlZiBnZXQocG9ydF9uYW1lPU5vbmUsIG9wdGlvbnM9Tm9u
ZSk6CiAgICAgIiIiUmV0dXJucyBhbiBvYmplY3QgaW1wbGVtZW50aW5nIHRoZSBQb3J0IGludGVy
ZmFjZS4gSWYKQEAgLTg4LDMgKzkxLDcgQEAgZGVmIGdldChwb3J0X25hbWU9Tm9uZSwgb3B0aW9u
cz1Ob25lKToKICAgICAgICAgcmV0dXJuIGdvb2dsZV9jaHJvbWUuR2V0R29vZ2xlQ2hyb21lUG9y
dChwb3J0X25hbWUsIG9wdGlvbnMpCiAKICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCd1
bnN1cHBvcnRlZCBwb3J0OiAlcycgJSBwb3J0X3RvX3VzZSkKKworZGVmIGdldF9hbGwob3B0aW9u
cz1Ob25lKToKKyAgICByZXR1cm4gZGljdChbKHBvcnRfbmFtZSwgZ2V0KHBvcnRfbmFtZSwgb3B0
aW9ucz1vcHRpb25zKSkKKyAgICAgICAgICAgICAgICAgZm9yIHBvcnRfbmFtZSBpbiBBTExfUE9S
VF9OQU1FU10pCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2ZhY3RvcnlfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnlfdW5pdHRlc3QucHkKaW5kZXggZDhkZmZk
Zi4uZmY5ZWJjZSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9mYWN0b3J5X3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeV91bml0dGVzdC5weQpAQCAtNjks
MTYgKzY5LDE2IEBAIGNsYXNzIEZhY3RvcnlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBk
ZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHN5cy5wbGF0Zm9ybSA9IHNlbGYucmVhbF9zeXNf
cGxhdGZvcm0KIAotICAgIGRlZiBhc3NlcnRfcG9ydChzZWxmLCBwb3J0X25hbWUsIGV4cGVjdGVk
X3BvcnQpOgorICAgIGRlZiBhc3NlcnRfcG9ydChzZWxmLCBwb3J0X25hbWUsIGV4cGVjdGVkX3Bv
cnQsIHBvcnRfb2JqPU5vbmUpOgogICAgICAgICAiIiJIZWxwZXIgYXNzZXJ0IGZvciBwb3J0X25h
bWUuCiAKICAgICAgICAgQXJnczoKICAgICAgICAgICBwb3J0X25hbWU6IHBvcnQgbmFtZSB0byBn
ZXQgcG9ydCBvYmplY3QuCiAgICAgICAgICAgZXhwZWN0ZWRfcG9ydDogY2xhc3Mgb2YgZXhwZWN0
ZWQgcG9ydCBvYmplY3QuCi0KKyAgICAgICAgICBwb3J0X29iajogb3B0aW9uYWwgcG9ydCBvYmpl
Y3QKICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGZhY3Rv
cnkuZ2V0KHBvcnRfbmFtZT1wb3J0X25hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleHBlY3RlZF9wb3J0KSkKKyAgICAgICAgcG9ydF9vYmogPSBwb3J0X29iaiBvciBm
YWN0b3J5LmdldChwb3J0X25hbWU9cG9ydF9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUo
aXNpbnN0YW5jZShwb3J0X29iaiwgZXhwZWN0ZWRfcG9ydCkpCiAKICAgICBkZWYgYXNzZXJ0X3Bs
YXRmb3JtX3BvcnQoc2VsZiwgcGxhdGZvcm0sIG9wdGlvbnMsIGV4cGVjdGVkX3BvcnQpOgogICAg
ICAgICAiIiJIZWxwZXIgYXNzZXJ0IGZvciBwbGF0Zm9ybSBhbmQgb3B0aW9ucy4KQEAgLTEzNiwz
ICsxMzYsMjEgQEAgY2xhc3MgRmFjdG9yeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocm9taXVtX3dpbi5DaHJvbWl1bVdpblBvcnQp
CiAgICAgICAgIHNlbGYuYXNzZXJ0X3BsYXRmb3JtX3BvcnQoImN5Z3dpbiIsIHNlbGYuY2hyb21p
dW1fb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHJvbWl1bV93
aW4uQ2hyb21pdW1XaW5Qb3J0KQorCisgICAgZGVmIHRlc3RfZ2V0X2FsbF9wb3J0cyhzZWxmKToK
KyAgICAgICAgcG9ydHMgPSBmYWN0b3J5LmdldF9hbGwoKQorICAgICAgICBmb3IgbmFtZSBpbiBm
YWN0b3J5LkFMTF9QT1JUX05BTUVTOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5hbWUg
aW4gcG9ydHMua2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0KCJ0ZXN0IiwgdGVzdC5U
ZXN0UG9ydCwgcG9ydHNbInRlc3QiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgiZHJ5cnVu
LXRlc3QiLCBkcnlydW4uRHJ5UnVuUG9ydCwgcG9ydHNbImRyeXJ1biJdKQorICAgICAgICBzZWxm
LmFzc2VydF9wb3J0KCJkcnlydW4tbWFjIiwgZHJ5cnVuLkRyeVJ1blBvcnQsIHBvcnRzWyJkcnly
dW4iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgibWFjIiwgbWFjLk1hY1BvcnQsIHBvcnRz
WyJtYWMiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgid2luIiwgd2luLldpblBvcnQsIHBv
cnRzWyJ3aW4iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgiZ3RrIiwgZ3RrLkd0a1BvcnQs
IHBvcnRzWyJndGsiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgicXQiLCBxdC5RdFBvcnQs
IHBvcnRzWyJxdCJdKQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0KCJjaHJvbWl1bS1tYWMiLCBj
aHJvbWl1bV9tYWMuQ2hyb21pdW1NYWNQb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHBv
cnRzWyJjaHJvbWl1bS1tYWMiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgiY2hyb21pdW0t
bGludXgiLCBjaHJvbWl1bV9saW51eC5DaHJvbWl1bUxpbnV4UG9ydCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBwb3J0c1siY2hyb21pdW0tbGludXgiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRf
cG9ydCgiY2hyb21pdW0td2luIiwgY2hyb21pdW1fd2luLkNocm9taXVtV2luUG9ydCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBwb3J0c1siY2hyb21pdW0td2luIl0pCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKaW5k
ZXggZTMwOTMzNC4uYTY0ODIzYyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQpAQCAtNzYsNiArNzYsOSBAQCBjbGFz
cyBUZXN0UG9ydChiYXNlLlBvcnQpOgogICAgIGRlZiBvcHRpb25zKHNlbGYpOgogICAgICAgICBy
ZXR1cm4gc2VsZi5fb3B0aW9ucwogCisgICAgZGVmIHNraXBwZWRfbGF5b3V0X3Rlc3RzKHNlbGYp
OgorICAgICAgICByZXR1cm4gW10KKwogICAgIGRlZiBwYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25z
X2ZpbGUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgn
V2ViS2l0VG9vbHMnLCAnU2NyaXB0cycsCiAgICAgICAgICAgICAnd2Via2l0cHknLCAnbGF5b3V0
X3Rlc3RzJywgJ2RhdGEnLCAncGxhdGZvcm0nLCAndGVzdCcsCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weSBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CmluZGV4
IDYxZjhhZWQuLjc2NWUzOGYgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CkBAIC0zNDIsMTQgKzM0MiwxNyBA
QCBjbGFzcyBXZWJLaXRQb3J0KGJhc2UuUG9ydCk6CiAgICAgICAgICMgVGhpcyByb3V0aW5lIHJl
YWRzIHRob3NlIGZpbGVzIGFuZCB0dXJucyBjb250ZW50cyBpbnRvIHRoZQogICAgICAgICAjIGZv
cm1hdCBleHBlY3RlZCBieSB0ZXN0X2V4cGVjdGF0aW9ucy4KIAorICAgICAgICB0ZXN0c190b19z
a2lwID0gc2VsZi5za2lwcGVkX2xheW91dF90ZXN0cygpCisgICAgICAgIHNraXBfbGluZXMgPSBt
YXAobGFtYmRhIHRlc3RfcGF0aDogIkJVR19TS0lQUEVEIFNLSVAgOiAlcyA9IEZBSUwiICUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9wYXRoLCB0ZXN0c190b19za2lwKQor
ICAgICAgICByZXR1cm4gIlxuIi5qb2luKHNraXBfbGluZXMpCisKKyAgICBkZWYgc2tpcHBlZF9s
YXlvdXRfdGVzdHMoc2VsZik6CiAgICAgICAgICMgVXNlIGEgc2V0IHRvIGFsbG93IGR1cGxpY2F0
ZXMKICAgICAgICAgdGVzdHNfdG9fc2tpcCA9IHNldChzZWxmLl9leHBlY3RhdGlvbnNfZnJvbV9z
a2lwcGVkX2ZpbGVzKCkpCi0KICAgICAgICAgdGVzdHNfdG9fc2tpcC51cGRhdGUoc2VsZi5fdGVz
dHNfZm9yX290aGVyX3BsYXRmb3JtcygpKQogICAgICAgICB0ZXN0c190b19za2lwLnVwZGF0ZShz
ZWxmLl90ZXN0c19mb3JfZGlzYWJsZWRfZmVhdHVyZXMoKSkKLSAgICAgICAgc2tpcF9saW5lcyA9
IG1hcChsYW1iZGEgdGVzdF9wYXRoOiAiQlVHX1NLSVBQRUQgU0tJUCA6ICVzID0gRkFJTCIgJQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3BhdGgsIHRlc3RzX3RvX3NraXAp
Ci0gICAgICAgIHJldHVybiAiXG4iLmpvaW4oc2tpcF9saW5lcykKKyAgICAgICAgcmV0dXJuIHRl
c3RzX3RvX3NraXAKIAogICAgIGRlZiB0ZXN0X3BsYXRmb3JtX25hbWUoc2VsZik6CiAgICAgICAg
IHJldHVybiBzZWxmLl9uYW1lICsgc2VsZi52ZXJzaW9uKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0X3VuaXR0ZXN0LnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXRf
dW5pdHRlc3QucHkKaW5kZXggYWY5YTkzMC4uZTRkMGEzOCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXRfdW5pdHRlc3QucHkK
KysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJr
aXRfdW5pdHRlc3QucHkKQEAgLTQwLDYgKzQwLDE0IEBAIGNsYXNzIFRlc3RXZWJLaXRQb3J0KFdl
YktpdFBvcnQpOgogICAgIGRlZiBfc3VwcG9ydGVkX3N5bWJvbF9saXN0KHNlbGYpOgogICAgICAg
ICByZXR1cm4gc2VsZi5zeW1ib2xfbGlzdAogCisgICAgZGVmIF90ZXN0c19mb3Jfb3RoZXJfcGxh
dGZvcm1zKHNlbGYpOgorICAgICAgICByZXR1cm4gWyJtZWRpYSIsXQorCisgICAgZGVmIF90ZXN0
c19mb3JfZGlzYWJsZWRfZmVhdHVyZXMoc2VsZik6CisgICAgICAgIHJldHVybiBbImFjY2Vzc2li
aWxpdHkiLF0KKworICAgIGRlZiBfc2tpcHBlZF9maWxlX3BhdGhzKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gW10KIAogY2xhc3MgV2ViS2l0UG9ydFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCkBA
IC01NCwzICs2Miw3IEBAIGNsYXNzIFdlYktpdFBvcnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
ICAgICAgICAgZXhwZWN0ZWRfZGlyZWN0b3JpZXMgPSBzZXQoWyJhbmltYXRpb25zLzNkIiwgInRy
YW5zZm9ybXMvM2QiXSkKICAgICAgICAgcmVzdWx0X2RpcmVjdG9yaWVzID0gc2V0KFRlc3RXZWJL
aXRQb3J0KE5vbmUsIHN1cHBvcnRlZF9mZWF0dXJlcykuX3NraXBwZWRfdGVzdHNfZm9yX3Vuc3Vw
cG9ydGVkX2ZlYXR1cmVzKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0X2RpcmVj
dG9yaWVzLCBleHBlY3RlZF9kaXJlY3RvcmllcykKKworICAgIGRlZiB0ZXN0X3NraXBwZWRfbGF5
b3V0X3Rlc3RzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RXZWJLaXRQb3J0
KE5vbmUsIE5vbmUpLnNraXBwZWRfbGF5b3V0X3Rlc3RzKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0KFsibWVkaWEiLCAiYWNjZXNzaWJpbGl0eSJdKSkKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzLnB5IGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkKaW5kZXggOTFj
ZTVlOS4uYjE3ZjRhMSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90
b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkKQEAgLTM3LDcgKzM3LDcgQEAgZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLnVzZXIgaW1wb3J0IFVzZXIKIGZyb20gd2Via2l0cHkudG9vbC5ncmFt
bWFyIGltcG9ydCBwbHVyYWxpemUKIGZyb20gd2Via2l0cHkudG9vbC5tdWx0aWNvbW1hbmR0b29s
IGltcG9ydCBBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZAogZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtLmRlcHJlY2F0ZWRfbG9nZ2luZyBpbXBvcnQgbG9nCi0KK2Zyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzIGltcG9ydCBwb3J0CiAKIGNsYXNzIEJ1Z3NUb0NvbW1pdChBYnN0cmFjdERlY2xh
cmF0aXZlQ29tbWFuZCk6CiAgICAgbmFtZSA9ICJidWdzLXRvLWNvbW1pdCIKQEAgLTI4NCwzICsy
ODQsMjcgQEAgYW5kIGRpc3BsYXllcyB0aGUgc3RhdHVzIG9mIGVhY2ggYnVpbGRlci4iIiIKICAg
ICAgICAgZm9yIGJ1aWxkZXIgaW4gdG9vbC5idWlsZGJvdC5idWlsZGVyX3N0YXR1c2VzKCk6CiAg
ICAgICAgICAgICBzdGF0dXNfc3RyaW5nID0gIm9rIiBpZiBidWlsZGVyWyJpc19ncmVlbiJdIGVs
c2UgIkZBSUwiCiAgICAgICAgICAgICBwcmludCAiJXMgOiAlcyIgJSAoc3RhdHVzX3N0cmluZy5s
anVzdCg0KSwgYnVpbGRlclsibmFtZSJdKQorCisKK2NsYXNzIFNraXBwZWRQb3J0cyhBYnN0cmFj
dERlY2xhcmF0aXZlQ29tbWFuZCk6CisgICAgbmFtZSA9ICJza2lwcGVkLXBvcnRzIgorICAgIGhl
bHBfdGV4dCA9ICJQcmludCB0aGUgbGlzdCBvZiBwb3J0cyBza2lwcGluZyB0aGUgZ2l2ZW4gbGF5
b3V0IHRlc3QocykiCisgICAgbG9uZ19oZWxwID0gIiIiU2NhbnMgdGhlIHRoZSBTa2lwcGVkIGZp
bGUgb2YgZWFjaCBwb3J0IGFuZCBmaWd1cmUKK291dCB3aGF0IHBvcnRzIGFyZSBza2lwcGluZyB0
aGUgdGVzdChzKS4gQ2F0ZWdvcmllcyBhcmUgdGFrZW4gaW4gYWNjb3VudCB0b28uIiIiCisgICAg
YXJndW1lbnRfbmFtZXMgPSAiVEVTVF9OQU1FIgorCisgICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0
aW9ucywgYXJncywgdG9vbCk6CisgICAgICAgIGNsYXNzIE9wdGlvbnM6CisgICAgICAgICAgICBw
YXNzCisKKyAgICAgICAgcmVzdWx0cyA9IGRpY3QoWyh0ZXN0X25hbWUsIFtdKSBmb3IgdGVzdF9u
YW1lIGluIGFyZ3NdKQorICAgICAgICBmb3IgcG9ydF9uYW1lLCBwb3J0X29iamVjdCBpbiB0b29s
LnBvcnRfZmFjdG9yeS5nZXRfYWxsKG9wdGlvbnM9T3B0aW9ucykuaXRlcml0ZW1zKCk6CisgICAg
ICAgICAgICBmb3IgdGVzdF9uYW1lIGluIGFyZ3M6CisgICAgICAgICAgICAgICAgaWYgcG9ydF9v
YmplY3Quc2tpcHNfbGF5b3V0X3Rlc3QodGVzdF9uYW1lKToKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0c1t0ZXN0X25hbWVdLmFwcGVuZChwb3J0X25hbWUpCisKKyAgICAgICAgZm9yIHRlc3Rf
bmFtZSwgcG9ydHMgaW4gcmVzdWx0cy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHBvcnRz
OgorICAgICAgICAgICAgICAgIHByaW50ICJQb3J0cyBza2lwcGluZyB0ZXN0ICVyOiAlcyIgJSAo
dGVzdF9uYW1lLCAnLCAnLmpvaW4ocG9ydHMpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICBwcmludCAiVGVzdCAlciBpcyBub3Qgc2tpcHBlZCBieSBhbnkgcG9ydC4iICUgdGVz
dF9uYW1lCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29t
bWFuZHMvcXVlcmllc191bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dG9vbC9jb21tYW5kcy9xdWVyaWVzX3VuaXR0ZXN0LnB5CmluZGV4IDk4ZWQ1NDUuLjdkZGRmZTcg
MTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9x
dWVyaWVzX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9jb21tYW5kcy9xdWVyaWVzX3VuaXR0ZXN0LnB5CkBAIC02MSwzICs2MSwxMyBAQCBjbGFzcyBR
dWVyeUNvbW1hbmRzVGVzdChDb21tYW5kc1Rlc3QpOgogICAgIGRlZiB0ZXN0X3RyZWVfc3RhdHVz
KHNlbGYpOgogICAgICAgICBleHBlY3RlZF9zdGRvdXQgPSAib2sgICA6IEJ1aWxkZXIxXG5vayAg
IDogQnVpbGRlcjJcbiIKICAgICAgICAgc2VsZi5hc3NlcnRfZXhlY3V0ZV9vdXRwdXRzKFRyZWVT
dGF0dXMoKSwgTm9uZSwgZXhwZWN0ZWRfc3Rkb3V0KQorCisgICAgZGVmIHRlc3Rfc2tpcHBlZF9w
b3J0cyhzZWxmKToKKyAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0ID0gIlBvcnRzIHNraXBwaW5nIHRl
c3QgJ21lZGlhL2Zvby9iYXIuaHRtbCc6IHRlc3RfcG9ydDEsIHRlc3RfcG9ydDJcbiIKKyAgICAg
ICAgc2VsZi5hc3NlcnRfZXhlY3V0ZV9vdXRwdXRzKFNraXBwZWRQb3J0cygpLCAoIm1lZGlhL2Zv
by9iYXIuaHRtbCIsKSwgZXhwZWN0ZWRfc3Rkb3V0KQorCisgICAgICAgIGV4cGVjdGVkX3N0ZG91
dCA9ICJQb3J0cyBza2lwcGluZyB0ZXN0ICdmb28nOiB0ZXN0X3BvcnQxXG4iCisgICAgICAgIHNl
bGYuYXNzZXJ0X2V4ZWN1dGVfb3V0cHV0cyhTa2lwcGVkUG9ydHMoKSwgKCJmb28iLCksIGV4cGVj
dGVkX3N0ZG91dCkKKworICAgICAgICBleHBlY3RlZF9zdGRvdXQgPSAiVGVzdCAnbWVkaWEnIGlz
IG5vdCBza2lwcGVkIGJ5IGFueSBwb3J0LlxuIgorICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRl
X291dHB1dHMoU2tpcHBlZFBvcnRzKCksICgibWVkaWEiLCksIGV4cGVjdGVkX3N0ZG91dCkKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9tYWluLnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21haW4ucHkKaW5kZXggMGRkNTAxNy4uOTUz
MWI2MyAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21haW4u
cHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21haW4ucHkKQEAgLTQw
LDYgKzQwLDcgQEAgZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LnJpZXR2ZWxkIGltcG9ydCBSaWV0
dmVsZAogZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LmlyYy5pcmNwcm94eSBpbXBvcnQgSVJDUHJv
eHkKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2
ZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnVzZXIgaW1wb3J0IFVzZXIKK2Zyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBwb3J0CiBpbXBvcnQgd2Via2l0cHkudG9vbC5jb21t
YW5kcyBhcyBjb21tYW5kcwogIyBGSVhNRTogUmVtb3ZlIHRoZXNlIGltcG9ydHMgb25jZSBhbGwg
dGhlIGNvbW1hbmRzIGFyZSBpbiB0aGUgcm9vdCBvZiB0aGUKICMgY29tbWFuZCBwYWNrYWdlLgpA
QCAtNzYsNiArNzcsNyBAQCBjbGFzcyBXZWJLaXRQYXRjaChNdWx0aUNvbW1hbmRUb29sKToKICAg
ICAgICAgc2VsZi5fY2hlY2tvdXQgPSBOb25lCiAgICAgICAgIHNlbGYuc3RhdHVzX3NlcnZlciA9
IFN0YXR1c1NlcnZlcigpCiAgICAgICAgIHNlbGYuY29kZXJldmlldyA9IFJpZXR2ZWxkKHNlbGYu
ZXhlY3V0aXZlKQorICAgICAgICBzZWxmLnBvcnRfZmFjdG9yeSA9IHBvcnQuZmFjdG9yeQogCiAg
ICAgZGVmIHNjbShzZWxmKToKICAgICAgICAgIyBMYXppbHkgaW5pdGlhbGl6ZSBTQ00gdG8gbm90
IGVycm9yLW91dCBiZWZvcmUgY29tbWFuZCBsaW5lIHBhcnNpbmcgKG9yIHdoZW4gcnVubmluZyBu
b24tc2NtIGNvbW1hbmRzKS4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdG9vbC9tb2NrdG9vbC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9t
b2NrdG9vbC5weQppbmRleCA3ZWI4ZjRjLi43ZjQ5ZDBlIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkKKysrIGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5CkBAIC01NTUsNiArNTU1LDIwIEBAIGNsYXNz
IE1vY2tSaWV0dmVsZCgpOgogICAgIGRlZiBwb3N0KHNlbGYsIGRpZmYsIHBhdGNoX2lkLCBjb2Rl
cmV2aWV3X2lzc3VlLCBtZXNzYWdlPU5vbmUsIGNjPU5vbmUpOgogICAgICAgICBsb2coIk1PQ0s6
IFVwbG9hZGluZyBwYXRjaCB0byByaWV0dmVsZCIpCiAKK2NsYXNzIE1vY2tUZXN0UG9ydDEoKToK
KworICAgIGRlZiBza2lwc19sYXlvdXRfdGVzdChzZWxmLCB0ZXN0X25hbWUpOgorICAgICAgICBy
ZXR1cm4gdGVzdF9uYW1lIGluIFsibWVkaWEvZm9vL2Jhci5odG1sIiwgImZvbyJdCisKK2NsYXNz
IE1vY2tUZXN0UG9ydDIoKToKKworICAgIGRlZiBza2lwc19sYXlvdXRfdGVzdChzZWxmLCB0ZXN0
X25hbWUpOgorICAgICAgICByZXR1cm4gdGVzdF9uYW1lID09ICJtZWRpYS9mb28vYmFyLmh0bWwi
CisKK2NsYXNzIE1vY2tQb3J0RmFjdG9yeSgpOgorCisgICAgZGVmIGdldF9hbGwoc2VsZiwgb3B0
aW9ucz1Ob25lKToKKyAgICAgICAgcmV0dXJuIHsidGVzdF9wb3J0MSI6IE1vY2tUZXN0UG9ydDEo
KSwgInRlc3RfcG9ydDIiOiBNb2NrVGVzdFBvcnQyKCl9CiAKIGNsYXNzIE1vY2tUb29sKCk6CiAK
QEAgLTU3MCw2ICs1ODQsNyBAQCBjbGFzcyBNb2NrVG9vbCgpOgogICAgICAgICBzZWxmLnN0YXR1
c19zZXJ2ZXIgPSBNb2NrU3RhdHVzU2VydmVyKCkKICAgICAgICAgc2VsZi5pcmNfcGFzc3dvcmQg
PSAiTU9DSyBpcmMgcGFzc3dvcmQiCiAgICAgICAgIHNlbGYuY29kZXJldmlldyA9IE1vY2tSaWV0
dmVsZChzZWxmLmV4ZWN1dGl2ZSkKKyAgICAgICAgc2VsZi5wb3J0X2ZhY3RvcnkgPSBNb2NrUG9y
dEZhY3RvcnkoKQogCiAgICAgZGVmIHNjbShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3Nj
bQotLSAKMS43LjE=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66655</attachid>
            <date>2010-09-06 10:17:30 -0700</date>
            <delta_ts>2010-09-06 10:21:58 -0700</delta_ts>
            <desc>proposed patch (reworked)</desc>
            <filename>proposed-patch-reworked.patch</filename>
            <type>text/plain</type>
            <size>17950</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBmYjMxMDA4NTE2N2Y1YTA0NzI2ZGZiMTlhMGY0YWU0NWMxNTVlOWVhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDYgU2VwIDIwMTAgMTk6MTc6NTQgKzAyMDAKU3ViamVjdDogW1BBVENIXSBw
cm9wb3NlZCBwYXRjaCAocmV3b3JrZWQpCgotLS0KIFdlYktpdFRvb2xzL0NoYW5nZUxvZyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMyArKysrKysrKysrKysrKysrKwogLi4uL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weSAgICAgfCAgIDEyICsrKysr
KysrKwogLi4uL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2VfdW5pdHRlc3QucHkgICAg
fCAgICA3ICsrKysrCiAuLi4vU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bS5weSB8ICAgIDUgKysrKwogLi4uL2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3VuaXR0
ZXN0LnB5ICAgICAgICAgfCAgIDExICsrKysrKysrCiAuLi4vU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5ICB8ICAgIDcgKysrKysKIC4uLi93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9mYWN0b3J5X3VuaXR0ZXN0LnB5IHwgICAyNiArKysrKysrKysrKysrKysr
LS0tCiAuLi4vU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5ICAgICB8
ICAgIDMgKysKIC4uLi9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5w
eSAgIHwgICAxMSArKysrKy0tLQogLi4uL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtp
dF91bml0dGVzdC5weSAgfCAgIDEyICsrKysrKysrKwogLi4uL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9jb21tYW5kcy9xdWVyaWVzLnB5ICAgICAgfCAgIDI2ICsrKysrKysrKysrKysrKysrKystCiAu
Li4vd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzX3VuaXR0ZXN0LnB5ICAgICB8ICAgMTAg
KysrKysrKwogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21haW4ucHkgICAgICAg
ICAgfCAgICAyICsKIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9tb2NrdG9vbC5w
eSAgICAgIHwgICAxOSArKysrKysrKysrKysrKwogMTQgZmlsZXMgY2hhbmdlZCwgMTY1IGluc2Vy
dGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvQ2hhbmdl
TG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDUwNjQ4YjAuLjQyNDIxMjQgMTAwNjQ0
Ci0tLSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyNiBAQAorMjAxMC0wOS0wNiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5k
QGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgd2Via2l0LXBhdGNoIGNvbW1hbmQgdG8gZmluZCB0aGUgcG9ydHMgY292ZXJpbmcgYSBz
cGVjaWZpYyBsYXlvdXQgdGVzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDI4MzIKKworICAgICAgICBUbyB1c2UgaXQ6IHdlYmtpdC1wYXRjaCBza2lw
cGVkLXBvcnRzIHNvbWUvbGF5b3V0L3Rlc3QuaHRtbAorCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZV91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5OgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fdW5pdHRlc3QucHk6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeV91bml0dGVz
dC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3Qu
cHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQu
cHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXRf
dW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1
ZXJpZXMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJp
ZXNfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL21haW4ucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5OgorCiAyMDEwLTA5
LTA1ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CmluZGV4IDZiNzM0MmQuLjU1YTllNmIgMTAw
NjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
YmFzZS5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2Jhc2UucHkKQEAgLTMwNSw2ICszMDUsMTggQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAg
ICAgICAiIiJSZXR1cm4gdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHRvcCBvZiB0aGUgTGF5b3V0
VGVzdHMgZGlyZWN0b3J5LiIiIgogICAgICAgICByZXR1cm4gc2VsZi5wYXRoX2Zyb21fd2Via2l0
X2Jhc2UoJ0xheW91dFRlc3RzJykKIAorICAgIGRlZiBza2lwc19sYXlvdXRfdGVzdChzZWxmLCB0
ZXN0X25hbWUpOgorICAgICAgICAiIiJGaWd1cmVzIG91dCBpZiB0aGUgZ2l2ZW50IHRlc3QgaXMg
YmVpbmcgc2tpcHBlZCBvciBub3QuCisKKyAgICAgICAgVGVzdCBjYXRlZ29yaWVzIGFyZSBoYW5k
bGVkIGFzIHdlbGwuIiIiCisgICAgICAgIGZvciB0ZXN0X29yX2NhdGVnb3J5IGluIHNlbGYuc2tp
cHBlZF9sYXlvdXRfdGVzdHMoKToKKyAgICAgICAgICAgIGlmIHRlc3Rfb3JfY2F0ZWdvcnkgPT0g
dGVzdF9uYW1lOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBiYXNl
bmFtZSwgZXh0ZW5zaW9uID0gb3MucGF0aC5zcGxpdGV4dCh0ZXN0X29yX2NhdGVnb3J5KQorICAg
ICAgICAgICAgaWYgbm90IGV4dGVuc2lvbiBhbmQgdGVzdF9uYW1lLnN0YXJ0c3dpdGgoYmFzZW5h
bWUpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQor
CiAgICAgZGVmIG1heWJlX21ha2VfZGlyZWN0b3J5KHNlbGYsICpwYXRoKToKICAgICAgICAgIiIi
Q3JlYXRlcyB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhp
c3QuIiIiCiAgICAgICAgIHRyeToKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZV91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZV91bml0dGVzdC5weQppbmRleCBm
ODIxMzUzLi4yNDdmNWFhIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Jhc2VfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5CkBAIC0xMDks
NiArMTA5LDEzIEBAIGNsYXNzIFBvcnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAg
c2VsZi5hc3NlcnRGYWxzZShiYXNlLl93ZGlmZl9hdmFpbGFibGUpCiAgICAgICAgIGJhc2UuX3dk
aWZmX2F2YWlsYWJsZSA9IFRydWUKIAorICAgIGRlZiB0ZXN0X2xheW91dF90ZXN0c19za2lwcGlu
ZyhzZWxmKToKKyAgICAgICAgcG9ydCA9IGJhc2UuUG9ydCgpCisgICAgICAgIHBvcnQuc2tpcHBl
ZF9sYXlvdXRfdGVzdHMgPSBsYW1iZGE6IFsnZm9vL2Jhci5odG1sJywgJ2JvbyddCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShwb3J0LnNraXBzX2xheW91dF90ZXN0KCdmb28vYmFyLmh0bWwnKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQuc2tpcHNfbGF5b3V0X3Rlc3QoJ2Jvby9iYWgu
aHRtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQuc2tpcHNfbGF5b3V0X3Rlc3Qo
J2Zvby9mb28uaHRtbCcpKQorCiAKIGNsYXNzIERyaXZlclRlc3QodW5pdHRlc3QuVGVzdENhc2Up
OgogCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Nocm9taXVtLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9jaHJvbWl1bS5weQppbmRleCA2Y2ZjMGI4Li43YmM0NmZhIDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVt
LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
Y2hyb21pdW0ucHkKQEAgLTIzMyw2ICsyMzMsMTEgQEAgY2xhc3MgQ2hyb21pdW1Qb3J0KGJhc2Uu
UG9ydCk6CiAgICAgICAgIHdpdGggY29kZWNzLm9wZW4ob3ZlcnJpZGVzX3BhdGgsICJyIiwgInV0
Zi04IikgYXMgZmlsZToKICAgICAgICAgICAgIHJldHVybiBmaWxlLnJlYWQoKSArIGRydF9vdmVy
cmlkZXMKIAorICAgIGRlZiBza2lwcGVkX2xheW91dF90ZXN0cyhzZWxmKToKKyAgICAgICAgcmV0
dXJuIFtsaW5lLnNwbGl0KCc6JylbMV0uc3BsaXQoIj0iKVswXS5zdHJpcCgpCisgICAgICAgICAg
ICAgICAgZm9yIGxpbmUgaW4gc2VsZi50ZXN0X2V4cGVjdGF0aW9ucygpLnNwbGl0bGluZXMoKQor
ICAgICAgICAgICAgICAgIGlmIGxpbmUuZmluZCgnU0tJUCcpICE9IC0xIGFuZCBub3QgbGluZS5z
dGFydHN3aXRoKCcvLycpXQorCiAgICAgZGVmIHRlc3RfcGxhdGZvcm1fbmFtZXMoc2VsZik6CiAg
ICAgICAgIHJldHVybiBzZWxmLnRlc3RfYmFzZV9wbGF0Zm9ybV9uYW1lcygpICsgKCd3aW4teHAn
LAogICAgICAgICAgICAgJ3dpbi12aXN0YScsICd3aW4tNycpCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3VuaXR0ZXN0
LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bV91bml0dGVzdC5weQppbmRleCBhMzJlYWZkLi44Y2EwOTQxIDEwMDY0NAotLS0gYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3VuaXR0
ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvY2hyb21pdW1fdW5pdHRlc3QucHkKQEAgLTk1LDMgKzk1LDE0IEBAIGNsYXNzIENocm9taXVt
RHJpdmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICAnL3hjb2RlYnVpbGQv
UmVsZWFzZS9JbWFnZURpZmYnKSkKICAgICAgICAgIyBGSVhNRTogRmlndXJlIG91dCBob3cgdGhp
cyBpcyBnb2luZyB0byB3b3JrIG9uIFdpbmRvd3MuCiAgICAgICAgICNwb3J0ID0gY2hyb21pdW1f
d2luLkNocm9taXVtV2luUG9ydCgndGVzdC1wb3J0Jywgb3B0aW9ucz1Nb2NrT3B0aW9ucygpKQor
CisgICAgZGVmIHRlc3Rfc2tpcHBlZF9sYXlvdXRfdGVzdHMoc2VsZik6CisgICAgICAgIGNsYXNz
IE1vY2tPcHRpb25zOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHBvcnQgPSBjaHJvbWl1
bV9saW51eC5DaHJvbWl1bUxpbnV4UG9ydCgndGVzdC1wb3J0Jywgb3B0aW9ucz1Nb2NrT3B0aW9u
cygpKQorICAgICAgICBwb3J0LnRlc3RfZXhwZWN0YXRpb25zID0gbGFtYmRhOiAiIiJTS0lQIDog
ZmFzdC9qcy9ub3QtZ29vZC5qcyA9IFRJTUVPVVQgUEFTUworICAgICAgREVCVUcgOiBmYXN0L2pz
L25vLWdvb2QuanMgPSBUSU1FT1VUIFBBU1MKKyAgICAgIERFRkVSIExJTlVYIFdJTiA6IGZhc3Qv
anMvdmVyeS1nb29kLmpzID0gVElNRU9VVCBQQVNTIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwocG9ydC5za2lwcGVkX2xheW91dF90ZXN0cygpLAorICAgICAgICAgICAgICAgICAgICAgICAg
IFsiZmFzdC9qcy9ub3QtZ29vZC5qcyIsIF0pCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHkgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHkKaW5kZXggMjU4YmYz
My4uZTFmYWQzNSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weQpAQCAtMzIsNiArMzIsOSBAQAogCiBpbXBv
cnQgc3lzCiAKK0FMTF9QT1JUX05BTUVTID0gWyd0ZXN0JywgJ2RyeXJ1bicsICdtYWMnLCAnd2lu
JywgJ2d0aycsICdxdCcsICdjaHJvbWl1bS1tYWMnLAorICAgICAgICAgICAgICAgICAgJ2Nocm9t
aXVtLWxpbnV4JywgJ2Nocm9taXVtLXdpbicsICdnb29nbGUtY2hyb21lLXdpbicsCisgICAgICAg
ICAgICAgICAgICAnZ29vZ2xlLWNocm9tZS1tYWMnLCAnZ29vZ2xlLWNocm9tZS1saW51eDMyJywg
J2dvb2dsZS1jaHJvbWUtbGludXg2NCddCiAKIGRlZiBnZXQocG9ydF9uYW1lPU5vbmUsIG9wdGlv
bnM9Tm9uZSk6CiAgICAgIiIiUmV0dXJucyBhbiBvYmplY3QgaW1wbGVtZW50aW5nIHRoZSBQb3J0
IGludGVyZmFjZS4gSWYKQEAgLTg4LDMgKzkxLDcgQEAgZGVmIGdldChwb3J0X25hbWU9Tm9uZSwg
b3B0aW9ucz1Ob25lKToKICAgICAgICAgcmV0dXJuIGdvb2dsZV9jaHJvbWUuR2V0R29vZ2xlQ2hy
b21lUG9ydChwb3J0X25hbWUsIG9wdGlvbnMpCiAKICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVy
cm9yKCd1bnN1cHBvcnRlZCBwb3J0OiAlcycgJSBwb3J0X3RvX3VzZSkKKworZGVmIGdldF9hbGwo
b3B0aW9ucz1Ob25lKToKKyAgICByZXR1cm4gZGljdChbKHBvcnRfbmFtZSwgZ2V0KHBvcnRfbmFt
ZSwgb3B0aW9ucz1vcHRpb25zKSkKKyAgICAgICAgICAgICAgICAgZm9yIHBvcnRfbmFtZSBpbiBB
TExfUE9SVF9OQU1FU10pCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnlfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnlfdW5pdHRlc3QucHkKaW5kZXgg
ZDhkZmZkZi4uZmY5ZWJjZSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5X3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeV91bml0dGVzdC5weQpA
QCAtNjksMTYgKzY5LDE2IEBAIGNsYXNzIEZhY3RvcnlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
ICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHN5cy5wbGF0Zm9ybSA9IHNlbGYucmVh
bF9zeXNfcGxhdGZvcm0KIAotICAgIGRlZiBhc3NlcnRfcG9ydChzZWxmLCBwb3J0X25hbWUsIGV4
cGVjdGVkX3BvcnQpOgorICAgIGRlZiBhc3NlcnRfcG9ydChzZWxmLCBwb3J0X25hbWUsIGV4cGVj
dGVkX3BvcnQsIHBvcnRfb2JqPU5vbmUpOgogICAgICAgICAiIiJIZWxwZXIgYXNzZXJ0IGZvciBw
b3J0X25hbWUuCiAKICAgICAgICAgQXJnczoKICAgICAgICAgICBwb3J0X25hbWU6IHBvcnQgbmFt
ZSB0byBnZXQgcG9ydCBvYmplY3QuCiAgICAgICAgICAgZXhwZWN0ZWRfcG9ydDogY2xhc3Mgb2Yg
ZXhwZWN0ZWQgcG9ydCBvYmplY3QuCi0KKyAgICAgICAgICBwb3J0X29iajogb3B0aW9uYWwgcG9y
dCBvYmplY3QKICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNl
KGZhY3RvcnkuZ2V0KHBvcnRfbmFtZT1wb3J0X25hbWUpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBleHBlY3RlZF9wb3J0KSkKKyAgICAgICAgcG9ydF9vYmogPSBwb3J0X29i
aiBvciBmYWN0b3J5LmdldChwb3J0X25hbWU9cG9ydF9uYW1lKQorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoaXNpbnN0YW5jZShwb3J0X29iaiwgZXhwZWN0ZWRfcG9ydCkpCiAKICAgICBkZWYgYXNz
ZXJ0X3BsYXRmb3JtX3BvcnQoc2VsZiwgcGxhdGZvcm0sIG9wdGlvbnMsIGV4cGVjdGVkX3BvcnQp
OgogICAgICAgICAiIiJIZWxwZXIgYXNzZXJ0IGZvciBwbGF0Zm9ybSBhbmQgb3B0aW9ucy4KQEAg
LTEzNiwzICsxMzYsMjEgQEAgY2xhc3MgRmFjdG9yeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocm9taXVtX3dpbi5DaHJvbWl1bVdp
blBvcnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0X3BsYXRmb3JtX3BvcnQoImN5Z3dpbiIsIHNlbGYu
Y2hyb21pdW1fb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHJv
bWl1bV93aW4uQ2hyb21pdW1XaW5Qb3J0KQorCisgICAgZGVmIHRlc3RfZ2V0X2FsbF9wb3J0cyhz
ZWxmKToKKyAgICAgICAgcG9ydHMgPSBmYWN0b3J5LmdldF9hbGwoKQorICAgICAgICBmb3IgbmFt
ZSBpbiBmYWN0b3J5LkFMTF9QT1JUX05BTUVTOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KG5hbWUgaW4gcG9ydHMua2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0KCJ0ZXN0Iiwg
dGVzdC5UZXN0UG9ydCwgcG9ydHNbInRlc3QiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgi
ZHJ5cnVuLXRlc3QiLCBkcnlydW4uRHJ5UnVuUG9ydCwgcG9ydHNbImRyeXJ1biJdKQorICAgICAg
ICBzZWxmLmFzc2VydF9wb3J0KCJkcnlydW4tbWFjIiwgZHJ5cnVuLkRyeVJ1blBvcnQsIHBvcnRz
WyJkcnlydW4iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgibWFjIiwgbWFjLk1hY1BvcnQs
IHBvcnRzWyJtYWMiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgid2luIiwgd2luLldpblBv
cnQsIHBvcnRzWyJ3aW4iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgiZ3RrIiwgZ3RrLkd0
a1BvcnQsIHBvcnRzWyJndGsiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgicXQiLCBxdC5R
dFBvcnQsIHBvcnRzWyJxdCJdKQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0KCJjaHJvbWl1bS1t
YWMiLCBjaHJvbWl1bV9tYWMuQ2hyb21pdW1NYWNQb3J0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgIHBvcnRzWyJjaHJvbWl1bS1tYWMiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgiY2hy
b21pdW0tbGludXgiLCBjaHJvbWl1bV9saW51eC5DaHJvbWl1bUxpbnV4UG9ydCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBwb3J0c1siY2hyb21pdW0tbGludXgiXSkKKyAgICAgICAgc2VsZi5h
c3NlcnRfcG9ydCgiY2hyb21pdW0td2luIiwgY2hyb21pdW1fd2luLkNocm9taXVtV2luUG9ydCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0c1siY2hyb21pdW0td2luIl0pCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3Qu
cHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3Qu
cHkKaW5kZXggZTMwOTMzNC4uYTY0ODIzYyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQpAQCAtNzYsNiArNzYsOSBA
QCBjbGFzcyBUZXN0UG9ydChiYXNlLlBvcnQpOgogICAgIGRlZiBvcHRpb25zKHNlbGYpOgogICAg
ICAgICByZXR1cm4gc2VsZi5fb3B0aW9ucwogCisgICAgZGVmIHNraXBwZWRfbGF5b3V0X3Rlc3Rz
KHNlbGYpOgorICAgICAgICByZXR1cm4gW10KKwogICAgIGRlZiBwYXRoX3RvX3Rlc3RfZXhwZWN0
YXRpb25zX2ZpbGUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLnBhdGhfZnJvbV93ZWJraXRf
YmFzZSgnV2ViS2l0VG9vbHMnLCAnU2NyaXB0cycsCiAgICAgICAgICAgICAnd2Via2l0cHknLCAn
bGF5b3V0X3Rlc3RzJywgJ2RhdGEnLCAncGxhdGZvcm0nLCAndGVzdCcsCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weSBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5
CmluZGV4IDYxZjhhZWQuLjc2NWUzOGYgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CkBAIC0zNDIsMTQgKzM0
MiwxNyBAQCBjbGFzcyBXZWJLaXRQb3J0KGJhc2UuUG9ydCk6CiAgICAgICAgICMgVGhpcyByb3V0
aW5lIHJlYWRzIHRob3NlIGZpbGVzIGFuZCB0dXJucyBjb250ZW50cyBpbnRvIHRoZQogICAgICAg
ICAjIGZvcm1hdCBleHBlY3RlZCBieSB0ZXN0X2V4cGVjdGF0aW9ucy4KIAorICAgICAgICB0ZXN0
c190b19za2lwID0gc2VsZi5za2lwcGVkX2xheW91dF90ZXN0cygpCisgICAgICAgIHNraXBfbGlu
ZXMgPSBtYXAobGFtYmRhIHRlc3RfcGF0aDogIkJVR19TS0lQUEVEIFNLSVAgOiAlcyA9IEZBSUwi
ICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9wYXRoLCB0ZXN0c190b19z
a2lwKQorICAgICAgICByZXR1cm4gIlxuIi5qb2luKHNraXBfbGluZXMpCisKKyAgICBkZWYgc2tp
cHBlZF9sYXlvdXRfdGVzdHMoc2VsZik6CiAgICAgICAgICMgVXNlIGEgc2V0IHRvIGFsbG93IGR1
cGxpY2F0ZXMKICAgICAgICAgdGVzdHNfdG9fc2tpcCA9IHNldChzZWxmLl9leHBlY3RhdGlvbnNf
ZnJvbV9za2lwcGVkX2ZpbGVzKCkpCi0KICAgICAgICAgdGVzdHNfdG9fc2tpcC51cGRhdGUoc2Vs
Zi5fdGVzdHNfZm9yX290aGVyX3BsYXRmb3JtcygpKQogICAgICAgICB0ZXN0c190b19za2lwLnVw
ZGF0ZShzZWxmLl90ZXN0c19mb3JfZGlzYWJsZWRfZmVhdHVyZXMoKSkKLSAgICAgICAgc2tpcF9s
aW5lcyA9IG1hcChsYW1iZGEgdGVzdF9wYXRoOiAiQlVHX1NLSVBQRUQgU0tJUCA6ICVzID0gRkFJ
TCIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3BhdGgsIHRlc3RzX3Rv
X3NraXApCi0gICAgICAgIHJldHVybiAiXG4iLmpvaW4oc2tpcF9saW5lcykKKyAgICAgICAgcmV0
dXJuIHRlc3RzX3RvX3NraXAKIAogICAgIGRlZiB0ZXN0X3BsYXRmb3JtX25hbWUoc2VsZik6CiAg
ICAgICAgIHJldHVybiBzZWxmLl9uYW1lICsgc2VsZi52ZXJzaW9uKCkKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0X3VuaXR0
ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93
ZWJraXRfdW5pdHRlc3QucHkKaW5kZXggYWY5YTkzMC4uZmJmYWRjMyAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXRfdW5pdHRl
c3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC93ZWJraXRfdW5pdHRlc3QucHkKQEAgLTQwLDYgKzQwLDE0IEBAIGNsYXNzIFRlc3RXZWJLaXRQ
b3J0KFdlYktpdFBvcnQpOgogICAgIGRlZiBfc3VwcG9ydGVkX3N5bWJvbF9saXN0KHNlbGYpOgog
ICAgICAgICByZXR1cm4gc2VsZi5zeW1ib2xfbGlzdAogCisgICAgZGVmIF90ZXN0c19mb3Jfb3Ro
ZXJfcGxhdGZvcm1zKHNlbGYpOgorICAgICAgICByZXR1cm4gWyJtZWRpYSIsIF0KKworICAgIGRl
ZiBfdGVzdHNfZm9yX2Rpc2FibGVkX2ZlYXR1cmVzKHNlbGYpOgorICAgICAgICByZXR1cm4gWyJh
Y2Nlc3NpYmlsaXR5IiwgXQorCisgICAgZGVmIF9za2lwcGVkX2ZpbGVfcGF0aHMoc2VsZik6Cisg
ICAgICAgIHJldHVybiBbXQogCiBjbGFzcyBXZWJLaXRQb3J0VGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CiAKQEAgLTU0LDMgKzYyLDcgQEAgY2xhc3MgV2ViS2l0UG9ydFRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogICAgICAgICBleHBlY3RlZF9kaXJlY3RvcmllcyA9IHNldChbImFuaW1hdGlvbnMv
M2QiLCAidHJhbnNmb3Jtcy8zZCJdKQogICAgICAgICByZXN1bHRfZGlyZWN0b3JpZXMgPSBzZXQo
VGVzdFdlYktpdFBvcnQoTm9uZSwgc3VwcG9ydGVkX2ZlYXR1cmVzKS5fc2tpcHBlZF90ZXN0c19m
b3JfdW5zdXBwb3J0ZWRfZmVhdHVyZXMoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1
bHRfZGlyZWN0b3JpZXMsIGV4cGVjdGVkX2RpcmVjdG9yaWVzKQorCisgICAgZGVmIHRlc3Rfc2tp
cHBlZF9sYXlvdXRfdGVzdHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdFdl
YktpdFBvcnQoTm9uZSwgTm9uZSkuc2tpcHBlZF9sYXlvdXRfdGVzdHMoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBzZXQoWyJtZWRpYSIsICJhY2Nlc3NpYmlsaXR5Il0pKQpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQpp
bmRleCA5MWNlNWU5Li5iMTdmNGExIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQpAQCAtMzcsNyArMzcsNyBAQCBmcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0udXNlciBpbXBvcnQgVXNlcgogZnJvbSB3ZWJraXRweS50
b29sLmdyYW1tYXIgaW1wb3J0IHBsdXJhbGl6ZQogZnJvbSB3ZWJraXRweS50b29sLm11bHRpY29t
bWFuZHRvb2wgaW1wb3J0IEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kCiBmcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0uZGVwcmVjYXRlZF9sb2dnaW5nIGltcG9ydCBsb2cKLQorZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKIAogY2xhc3MgQnVnc1RvQ29tbWl0KEFic3Ry
YWN0RGVjbGFyYXRpdmVDb21tYW5kKToKICAgICBuYW1lID0gImJ1Z3MtdG8tY29tbWl0IgpAQCAt
Mjg0LDMgKzI4NCwyNyBAQCBhbmQgZGlzcGxheWVzIHRoZSBzdGF0dXMgb2YgZWFjaCBidWlsZGVy
LiIiIgogICAgICAgICBmb3IgYnVpbGRlciBpbiB0b29sLmJ1aWxkYm90LmJ1aWxkZXJfc3RhdHVz
ZXMoKToKICAgICAgICAgICAgIHN0YXR1c19zdHJpbmcgPSAib2siIGlmIGJ1aWxkZXJbImlzX2dy
ZWVuIl0gZWxzZSAiRkFJTCIKICAgICAgICAgICAgIHByaW50ICIlcyA6ICVzIiAlIChzdGF0dXNf
c3RyaW5nLmxqdXN0KDQpLCBidWlsZGVyWyJuYW1lIl0pCisKKworY2xhc3MgU2tpcHBlZFBvcnRz
KEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kKToKKyAgICBuYW1lID0gInNraXBwZWQtcG9ydHMi
CisgICAgaGVscF90ZXh0ID0gIlByaW50IHRoZSBsaXN0IG9mIHBvcnRzIHNraXBwaW5nIHRoZSBn
aXZlbiBsYXlvdXQgdGVzdChzKSIKKyAgICBsb25nX2hlbHAgPSAiIiJTY2FucyB0aGUgdGhlIFNr
aXBwZWQgZmlsZSBvZiBlYWNoIHBvcnQgYW5kIGZpZ3VyZQorb3V0IHdoYXQgcG9ydHMgYXJlIHNr
aXBwaW5nIHRoZSB0ZXN0KHMpLiBDYXRlZ29yaWVzIGFyZSB0YWtlbiBpbiBhY2NvdW50IHRvby4i
IiIKKyAgICBhcmd1bWVudF9uYW1lcyA9ICJURVNUX05BTUUiCisKKyAgICBkZWYgZXhlY3V0ZShz
ZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKKyAgICAgICAgY2xhc3MgT3B0aW9uczoKKyAgICAg
ICAgICAgIHBhc3MKKworICAgICAgICByZXN1bHRzID0gZGljdChbKHRlc3RfbmFtZSwgW10pIGZv
ciB0ZXN0X25hbWUgaW4gYXJnc10pCisgICAgICAgIGZvciBwb3J0X25hbWUsIHBvcnRfb2JqZWN0
IGluIHRvb2wucG9ydF9mYWN0b3J5LmdldF9hbGwob3B0aW9ucz1PcHRpb25zKS5pdGVyaXRlbXMo
KToKKyAgICAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gYXJnczoKKyAgICAgICAgICAgICAgICBp
ZiBwb3J0X29iamVjdC5za2lwc19sYXlvdXRfdGVzdCh0ZXN0X25hbWUpOgorICAgICAgICAgICAg
ICAgICAgICByZXN1bHRzW3Rlc3RfbmFtZV0uYXBwZW5kKHBvcnRfbmFtZSkKKworICAgICAgICBm
b3IgdGVzdF9uYW1lLCBwb3J0cyBpbiByZXN1bHRzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAg
aWYgcG9ydHM6CisgICAgICAgICAgICAgICAgcHJpbnQgIlBvcnRzIHNraXBwaW5nIHRlc3QgJXI6
ICVzIiAlICh0ZXN0X25hbWUsICcsICcuam9pbihwb3J0cykpCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIHByaW50ICJUZXN0ICVyIGlzIG5vdCBza2lwcGVkIGJ5IGFueSBwb3J0
LiIgJSB0ZXN0X25hbWUKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dG9vbC9jb21tYW5kcy9xdWVyaWVzX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXNfdW5pdHRlc3QucHkKaW5kZXggOThlZDU0NS4u
N2RkZGZlNyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2Nv
bW1hbmRzL3F1ZXJpZXNfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXNfdW5pdHRlc3QucHkKQEAgLTYxLDMgKzYxLDEzIEBA
IGNsYXNzIFF1ZXJ5Q29tbWFuZHNUZXN0KENvbW1hbmRzVGVzdCk6CiAgICAgZGVmIHRlc3RfdHJl
ZV9zdGF0dXMoc2VsZik6CiAgICAgICAgIGV4cGVjdGVkX3N0ZG91dCA9ICJvayAgIDogQnVpbGRl
cjFcbm9rICAgOiBCdWlsZGVyMlxuIgogICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRlX291dHB1
dHMoVHJlZVN0YXR1cygpLCBOb25lLCBleHBlY3RlZF9zdGRvdXQpCisKKyAgICBkZWYgdGVzdF9z
a2lwcGVkX3BvcnRzKHNlbGYpOgorICAgICAgICBleHBlY3RlZF9zdGRvdXQgPSAiUG9ydHMgc2tp
cHBpbmcgdGVzdCAnbWVkaWEvZm9vL2Jhci5odG1sJzogdGVzdF9wb3J0MSwgdGVzdF9wb3J0Mlxu
IgorICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRlX291dHB1dHMoU2tpcHBlZFBvcnRzKCksICgi
bWVkaWEvZm9vL2Jhci5odG1sIiwpLCBleHBlY3RlZF9zdGRvdXQpCisKKyAgICAgICAgZXhwZWN0
ZWRfc3Rkb3V0ID0gIlBvcnRzIHNraXBwaW5nIHRlc3QgJ2Zvbyc6IHRlc3RfcG9ydDFcbiIKKyAg
ICAgICAgc2VsZi5hc3NlcnRfZXhlY3V0ZV9vdXRwdXRzKFNraXBwZWRQb3J0cygpLCAoImZvbyIs
KSwgZXhwZWN0ZWRfc3Rkb3V0KQorCisgICAgICAgIGV4cGVjdGVkX3N0ZG91dCA9ICJUZXN0ICdt
ZWRpYScgaXMgbm90IHNraXBwZWQgYnkgYW55IHBvcnQuXG4iCisgICAgICAgIHNlbGYuYXNzZXJ0
X2V4ZWN1dGVfb3V0cHV0cyhTa2lwcGVkUG9ydHMoKSwgKCJtZWRpYSIsKSwgZXhwZWN0ZWRfc3Rk
b3V0KQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21haW4u
cHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbWFpbi5weQppbmRleCAwZGQ1
MDE3Li45NTMxYjYzIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvbWFpbi5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbWFpbi5w
eQpAQCAtNDAsNiArNDAsNyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQucmlldHZlbGQgaW1w
b3J0IFJpZXR2ZWxkCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuaXJjLmlyY3Byb3h5IGltcG9y
dCBJUkNQcm94eQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQg
RXhlY3V0aXZlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0udXNlciBpbXBvcnQgVXNlcgor
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKIGltcG9ydCB3ZWJraXRweS50
b29sLmNvbW1hbmRzIGFzIGNvbW1hbmRzCiAjIEZJWE1FOiBSZW1vdmUgdGhlc2UgaW1wb3J0cyBv
bmNlIGFsbCB0aGUgY29tbWFuZHMgYXJlIGluIHRoZSByb290IG9mIHRoZQogIyBjb21tYW5kIHBh
Y2thZ2UuCkBAIC03Niw2ICs3Nyw3IEBAIGNsYXNzIFdlYktpdFBhdGNoKE11bHRpQ29tbWFuZFRv
b2wpOgogICAgICAgICBzZWxmLl9jaGVja291dCA9IE5vbmUKICAgICAgICAgc2VsZi5zdGF0dXNf
c2VydmVyID0gU3RhdHVzU2VydmVyKCkKICAgICAgICAgc2VsZi5jb2RlcmV2aWV3ID0gUmlldHZl
bGQoc2VsZi5leGVjdXRpdmUpCisgICAgICAgIHNlbGYucG9ydF9mYWN0b3J5ID0gcG9ydC5mYWN0
b3J5CiAKICAgICBkZWYgc2NtKHNlbGYpOgogICAgICAgICAjIExhemlseSBpbml0aWFsaXplIFND
TSB0byBub3QgZXJyb3Itb3V0IGJlZm9yZSBjb21tYW5kIGxpbmUgcGFyc2luZyAob3Igd2hlbiBy
dW5uaW5nIG5vbi1zY20gY29tbWFuZHMpLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90b29sL21vY2t0b29sLnB5CmluZGV4IDdlYjhmNGMuLmUzZDM2Y2UgMTAwNjQ0Ci0tLSBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9tb2NrdG9vbC5weQorKysgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkKQEAgLTU1Niw2ICs1NTYsMjQg
QEAgY2xhc3MgTW9ja1JpZXR2ZWxkKCk6CiAgICAgICAgIGxvZygiTU9DSzogVXBsb2FkaW5nIHBh
dGNoIHRvIHJpZXR2ZWxkIikKIAogCitjbGFzcyBNb2NrVGVzdFBvcnQxKCk6CisKKyAgICBkZWYg
c2tpcHNfbGF5b3V0X3Rlc3Qoc2VsZiwgdGVzdF9uYW1lKToKKyAgICAgICAgcmV0dXJuIHRlc3Rf
bmFtZSBpbiBbIm1lZGlhL2Zvby9iYXIuaHRtbCIsICJmb28iXQorCisKK2NsYXNzIE1vY2tUZXN0
UG9ydDIoKToKKworICAgIGRlZiBza2lwc19sYXlvdXRfdGVzdChzZWxmLCB0ZXN0X25hbWUpOgor
ICAgICAgICByZXR1cm4gdGVzdF9uYW1lID09ICJtZWRpYS9mb28vYmFyLmh0bWwiCisKKworY2xh
c3MgTW9ja1BvcnRGYWN0b3J5KCk6CisKKyAgICBkZWYgZ2V0X2FsbChzZWxmLCBvcHRpb25zPU5v
bmUpOgorICAgICAgICByZXR1cm4geyJ0ZXN0X3BvcnQxIjogTW9ja1Rlc3RQb3J0MSgpLCAidGVz
dF9wb3J0MiI6IE1vY2tUZXN0UG9ydDIoKX0KKworCiBjbGFzcyBNb2NrVG9vbCgpOgogCiAgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGxvZ19leGVjdXRpdmU9RmFsc2UpOgpAQCAtNTcwLDYgKzU4OCw3
IEBAIGNsYXNzIE1vY2tUb29sKCk6CiAgICAgICAgIHNlbGYuc3RhdHVzX3NlcnZlciA9IE1vY2tT
dGF0dXNTZXJ2ZXIoKQogICAgICAgICBzZWxmLmlyY19wYXNzd29yZCA9ICJNT0NLIGlyYyBwYXNz
d29yZCIKICAgICAgICAgc2VsZi5jb2RlcmV2aWV3ID0gTW9ja1JpZXR2ZWxkKHNlbGYuZXhlY3V0
aXZlKQorICAgICAgICBzZWxmLnBvcnRfZmFjdG9yeSA9IE1vY2tQb3J0RmFjdG9yeSgpCiAKICAg
ICBkZWYgc2NtKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fc2NtCi0tIAoxLjcuMQ==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66656</attachid>
            <date>2010-09-06 10:21:58 -0700</date>
            <delta_ts>2010-09-07 00:58:51 -0700</delta_ts>
            <desc>proposed patch (reworked)</desc>
            <filename>proposed-patch-reworked.patch</filename>
            <type>text/plain</type>
            <size>18025</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA2NWI5OTVmNGJkNjNiYjE3M2IxMzc0YmZjYjRhYjJlMjg4MjM3MDA1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDYgU2VwIDIwMTAgMTk6MTc6NTQgKzAyMDAKU3ViamVjdDogW1BBVENIXSBw
cm9wb3NlZCBwYXRjaCAocmV3b3JrZWQpCgotLS0KIFdlYktpdFRvb2xzL0NoYW5nZUxvZyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMyArKysrKysrKysrKysrKysrKwogLi4uL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weSAgICAgfCAgIDEyICsrKysr
KysrKwogLi4uL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2VfdW5pdHRlc3QucHkgICAg
fCAgICA3ICsrKysrCiAuLi4vU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bS5weSB8ICAgIDUgKysrKwogLi4uL2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3VuaXR0
ZXN0LnB5ICAgICAgICAgfCAgIDExICsrKysrKysrCiAuLi4vU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5ICB8ICAgMTAgKysrKysrKwogLi4uL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2ZhY3RvcnlfdW5pdHRlc3QucHkgfCAgIDI2ICsrKysrKysrKysrKysr
KystLS0KIC4uLi9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkgICAg
IHwgICAgMyArKwogLi4uL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0
LnB5ICAgfCAgIDExICsrKysrLS0tCiAuLi4vd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vi
a2l0X3VuaXR0ZXN0LnB5ICB8ICAgMTIgKysrKysrKysrCiAuLi4vU2NyaXB0cy93ZWJraXRweS90
b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkgICAgICB8ICAgMjYgKysrKysrKysrKysrKysrKysrKy0K
IC4uLi93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXNfdW5pdHRlc3QucHkgICAgIHwgICAx
MCArKysrKysrCiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbWFpbi5weSAgICAg
ICAgICB8ICAgIDIgKwogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29s
LnB5ICAgICAgfCAgIDE5ICsrKysrKysrKysrKysrCiAxNCBmaWxlcyBjaGFuZ2VkLCAxNjggaW5z
ZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9DaGFu
Z2VMb2cgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKaW5kZXggNTA2NDhiMC4uNDI0MjEyNCAxMDA2
NDQKLS0tIGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI2IEBACisyMDEwLTA5LTA2ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1h
bmRAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICB3ZWJraXQtcGF0Y2ggY29tbWFuZCB0byBmaW5kIHRoZSBwb3J0cyBjb3ZlcmluZyBh
IHNwZWNpZmljIGxheW91dCB0ZXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00MjgzMgorCisgICAgICAgIFRvIHVzZSBpdDogd2Via2l0LXBhdGNoIHNr
aXBwZWQtcG9ydHMgc29tZS9sYXlvdXQvdGVzdC5odG1sCisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV91bml0dGVzdC5weToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHk6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5X3VuaXR0
ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVz
dC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtp
dC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtp
dF91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMv
cXVlcmllcy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVl
cmllc191bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbWFpbi5w
eToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHk6CisKIDIwMTAt
MDktMDUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKaW5kZXggNmI3MzQyZC4uNTVhOWU2YiAx
MDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9iYXNlLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvYmFzZS5weQpAQCAtMzA1LDYgKzMwNSwxOCBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAg
ICAgICAgICIiIlJldHVybiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdG9wIG9mIHRoZSBMYXlv
dXRUZXN0cyBkaXJlY3RvcnkuIiIiCiAgICAgICAgIHJldHVybiBzZWxmLnBhdGhfZnJvbV93ZWJr
aXRfYmFzZSgnTGF5b3V0VGVzdHMnKQogCisgICAgZGVmIHNraXBzX2xheW91dF90ZXN0KHNlbGYs
IHRlc3RfbmFtZSk6CisgICAgICAgICIiIkZpZ3VyZXMgb3V0IGlmIHRoZSBnaXZlbnQgdGVzdCBp
cyBiZWluZyBza2lwcGVkIG9yIG5vdC4KKworICAgICAgICBUZXN0IGNhdGVnb3JpZXMgYXJlIGhh
bmRsZWQgYXMgd2VsbC4iIiIKKyAgICAgICAgZm9yIHRlc3Rfb3JfY2F0ZWdvcnkgaW4gc2VsZi5z
a2lwcGVkX2xheW91dF90ZXN0cygpOgorICAgICAgICAgICAgaWYgdGVzdF9vcl9jYXRlZ29yeSA9
PSB0ZXN0X25hbWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGJh
c2VuYW1lLCBleHRlbnNpb24gPSBvcy5wYXRoLnNwbGl0ZXh0KHRlc3Rfb3JfY2F0ZWdvcnkpCisg
ICAgICAgICAgICBpZiBub3QgZXh0ZW5zaW9uIGFuZCB0ZXN0X25hbWUuc3RhcnRzd2l0aChiYXNl
bmFtZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNl
CisKICAgICBkZWYgbWF5YmVfbWFrZV9kaXJlY3Rvcnkoc2VsZiwgKnBhdGgpOgogICAgICAgICAi
IiJDcmVhdGVzIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBl
eGlzdC4iIiIKICAgICAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5CmluZGV4
IGY4MjEzNTMuLjI0N2Y1YWEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZV91bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2VfdW5pdHRlc3QucHkKQEAgLTEw
OSw2ICsxMDksMTMgQEAgY2xhc3MgUG9ydFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKGJhc2UuX3dkaWZmX2F2YWlsYWJsZSkKICAgICAgICAgYmFzZS5f
d2RpZmZfYXZhaWxhYmxlID0gVHJ1ZQogCisgICAgZGVmIHRlc3RfbGF5b3V0X3Rlc3RzX3NraXBw
aW5nKHNlbGYpOgorICAgICAgICBwb3J0ID0gYmFzZS5Qb3J0KCkKKyAgICAgICAgcG9ydC5za2lw
cGVkX2xheW91dF90ZXN0cyA9IGxhbWJkYTogWydmb28vYmFyLmh0bWwnLCAnYm9vJ10KKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQuc2tpcHNfbGF5b3V0X3Rlc3QoJ2Zvby9iYXIuaHRtbCcp
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5za2lwc19sYXlvdXRfdGVzdCgnYm9vL2Jh
aC5odG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5za2lwc19sYXlvdXRfdGVz
dCgnZm9vL2Zvby5odG1sJykpCisKIAogY2xhc3MgRHJpdmVyVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvY2hyb21pdW0ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CmluZGV4IDZjZmMwYjguLjdiYzQ2ZmEgMTAwNjQ0Ci0t
LSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW0ucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9jaHJvbWl1bS5weQpAQCAtMjMzLDYgKzIzMywxMSBAQCBjbGFzcyBDaHJvbWl1bVBvcnQoYmFz
ZS5Qb3J0KToKICAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihvdmVycmlkZXNfcGF0aCwgInIiLCAi
dXRmLTgiKSBhcyBmaWxlOgogICAgICAgICAgICAgcmV0dXJuIGZpbGUucmVhZCgpICsgZHJ0X292
ZXJyaWRlcwogCisgICAgZGVmIHNraXBwZWRfbGF5b3V0X3Rlc3RzKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gW2xpbmUuc3BsaXQoJzonKVsxXS5zcGxpdCgiPSIpWzBdLnN0cmlwKCkKKyAgICAgICAg
ICAgICAgICBmb3IgbGluZSBpbiBzZWxmLnRlc3RfZXhwZWN0YXRpb25zKCkuc3BsaXRsaW5lcygp
CisgICAgICAgICAgICAgICAgaWYgbGluZS5maW5kKCdTS0lQJykgIT0gLTEgYW5kIG5vdCBsaW5l
LnN0YXJ0c3dpdGgoJy8vJyldCisKICAgICBkZWYgdGVzdF9wbGF0Zm9ybV9uYW1lcyhzZWxmKToK
ICAgICAgICAgcmV0dXJuIHNlbGYudGVzdF9iYXNlX3BsYXRmb3JtX25hbWVzKCkgKyAoJ3dpbi14
cCcsCiAgICAgICAgICAgICAnd2luLXZpc3RhJywgJ3dpbi03JykKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fdW5pdHRl
c3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2No
cm9taXVtX3VuaXR0ZXN0LnB5CmluZGV4IGEzMmVhZmQuLjhjYTA5NDEgMTAwNjQ0Ci0tLSBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fdW5p
dHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9jaHJvbWl1bV91bml0dGVzdC5weQpAQCAtOTUsMyArOTUsMTQgQEAgY2xhc3MgQ2hyb21p
dW1Ecml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgICcveGNvZGVidWls
ZC9SZWxlYXNlL0ltYWdlRGlmZicpKQogICAgICAgICAjIEZJWE1FOiBGaWd1cmUgb3V0IGhvdyB0
aGlzIGlzIGdvaW5nIHRvIHdvcmsgb24gV2luZG93cy4KICAgICAgICAgI3BvcnQgPSBjaHJvbWl1
bV93aW4uQ2hyb21pdW1XaW5Qb3J0KCd0ZXN0LXBvcnQnLCBvcHRpb25zPU1vY2tPcHRpb25zKCkp
CisKKyAgICBkZWYgdGVzdF9za2lwcGVkX2xheW91dF90ZXN0cyhzZWxmKToKKyAgICAgICAgY2xh
c3MgTW9ja09wdGlvbnM6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcG9ydCA9IGNocm9t
aXVtX2xpbnV4LkNocm9taXVtTGludXhQb3J0KCd0ZXN0LXBvcnQnLCBvcHRpb25zPU1vY2tPcHRp
b25zKCkpCisgICAgICAgIHBvcnQudGVzdF9leHBlY3RhdGlvbnMgPSBsYW1iZGE6ICIiIlNLSVAg
OiBmYXN0L2pzL25vdC1nb29kLmpzID0gVElNRU9VVCBQQVNTCisgICAgICBERUJVRyA6IGZhc3Qv
anMvbm8tZ29vZC5qcyA9IFRJTUVPVVQgUEFTUworICAgICAgREVGRVIgTElOVVggV0lOIDogZmFz
dC9qcy92ZXJ5LWdvb2QuanMgPSBUSU1FT1VUIFBBU1MiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChwb3J0LnNraXBwZWRfbGF5b3V0X3Rlc3RzKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgWyJmYXN0L2pzL25vdC1nb29kLmpzIiwgXSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weSBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weQppbmRleCAyNThi
ZjMzLi41NzA0ZjY1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5CkBAIC0zMiw2ICszMiwxMCBAQAogCiBp
bXBvcnQgc3lzCiAKK0FMTF9QT1JUX05BTUVTID0gWyd0ZXN0JywgJ2RyeXJ1bicsICdtYWMnLCAn
d2luJywgJ2d0aycsICdxdCcsICdjaHJvbWl1bS1tYWMnLAorICAgICAgICAgICAgICAgICAgJ2No
cm9taXVtLWxpbnV4JywgJ2Nocm9taXVtLXdpbicsICdnb29nbGUtY2hyb21lLXdpbicsCisgICAg
ICAgICAgICAgICAgICAnZ29vZ2xlLWNocm9tZS1tYWMnLCAnZ29vZ2xlLWNocm9tZS1saW51eDMy
JywgJ2dvb2dsZS1jaHJvbWUtbGludXg2NCddCisKIAogZGVmIGdldChwb3J0X25hbWU9Tm9uZSwg
b3B0aW9ucz1Ob25lKToKICAgICAiIiJSZXR1cm5zIGFuIG9iamVjdCBpbXBsZW1lbnRpbmcgdGhl
IFBvcnQgaW50ZXJmYWNlLiBJZgpAQCAtODgsMyArOTIsOSBAQCBkZWYgZ2V0KHBvcnRfbmFtZT1O
b25lLCBvcHRpb25zPU5vbmUpOgogICAgICAgICByZXR1cm4gZ29vZ2xlX2Nocm9tZS5HZXRHb29n
bGVDaHJvbWVQb3J0KHBvcnRfbmFtZSwgb3B0aW9ucykKIAogICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IoJ3Vuc3VwcG9ydGVkIHBvcnQ6ICVzJyAlIHBvcnRfdG9fdXNlKQorCisKK2RlZiBn
ZXRfYWxsKG9wdGlvbnM9Tm9uZSk6CisgICAgIiIiUmV0dXJucyBhbGwgdGhlIG9iamVjdHMgaW1w
bGVtZW50aW5nIHRoZSBQb3J0IGludGVyZmFjZS4iIiIKKyAgICByZXR1cm4gZGljdChbKHBvcnRf
bmFtZSwgZ2V0KHBvcnRfbmFtZSwgb3B0aW9ucz1vcHRpb25zKSkKKyAgICAgICAgICAgICAgICAg
Zm9yIHBvcnRfbmFtZSBpbiBBTExfUE9SVF9OQU1FU10pCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnlfdW5pdHRlc3QucHkg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3Rvcnlf
dW5pdHRlc3QucHkKaW5kZXggZDhkZmZkZi4uZmY5ZWJjZSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5X3VuaXR0ZXN0LnB5
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFj
dG9yeV91bml0dGVzdC5weQpAQCAtNjksMTYgKzY5LDE2IEBAIGNsYXNzIEZhY3RvcnlUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHN5cy5w
bGF0Zm9ybSA9IHNlbGYucmVhbF9zeXNfcGxhdGZvcm0KIAotICAgIGRlZiBhc3NlcnRfcG9ydChz
ZWxmLCBwb3J0X25hbWUsIGV4cGVjdGVkX3BvcnQpOgorICAgIGRlZiBhc3NlcnRfcG9ydChzZWxm
LCBwb3J0X25hbWUsIGV4cGVjdGVkX3BvcnQsIHBvcnRfb2JqPU5vbmUpOgogICAgICAgICAiIiJI
ZWxwZXIgYXNzZXJ0IGZvciBwb3J0X25hbWUuCiAKICAgICAgICAgQXJnczoKICAgICAgICAgICBw
b3J0X25hbWU6IHBvcnQgbmFtZSB0byBnZXQgcG9ydCBvYmplY3QuCiAgICAgICAgICAgZXhwZWN0
ZWRfcG9ydDogY2xhc3Mgb2YgZXhwZWN0ZWQgcG9ydCBvYmplY3QuCi0KKyAgICAgICAgICBwb3J0
X29iajogb3B0aW9uYWwgcG9ydCBvYmplY3QKICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShpc2luc3RhbmNlKGZhY3RvcnkuZ2V0KHBvcnRfbmFtZT1wb3J0X25hbWUpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9wb3J0KSkKKyAgICAgICAg
cG9ydF9vYmogPSBwb3J0X29iaiBvciBmYWN0b3J5LmdldChwb3J0X25hbWU9cG9ydF9uYW1lKQor
ICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShwb3J0X29iaiwgZXhwZWN0ZWRfcG9y
dCkpCiAKICAgICBkZWYgYXNzZXJ0X3BsYXRmb3JtX3BvcnQoc2VsZiwgcGxhdGZvcm0sIG9wdGlv
bnMsIGV4cGVjdGVkX3BvcnQpOgogICAgICAgICAiIiJIZWxwZXIgYXNzZXJ0IGZvciBwbGF0Zm9y
bSBhbmQgb3B0aW9ucy4KQEAgLTEzNiwzICsxMzYsMjEgQEAgY2xhc3MgRmFjdG9yeVRlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocm9t
aXVtX3dpbi5DaHJvbWl1bVdpblBvcnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0X3BsYXRmb3JtX3Bv
cnQoImN5Z3dpbiIsIHNlbGYuY2hyb21pdW1fb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaHJvbWl1bV93aW4uQ2hyb21pdW1XaW5Qb3J0KQorCisgICAgZGVmIHRl
c3RfZ2V0X2FsbF9wb3J0cyhzZWxmKToKKyAgICAgICAgcG9ydHMgPSBmYWN0b3J5LmdldF9hbGwo
KQorICAgICAgICBmb3IgbmFtZSBpbiBmYWN0b3J5LkFMTF9QT1JUX05BTUVTOgorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKG5hbWUgaW4gcG9ydHMua2V5cygpKQorICAgICAgICBzZWxmLmFz
c2VydF9wb3J0KCJ0ZXN0IiwgdGVzdC5UZXN0UG9ydCwgcG9ydHNbInRlc3QiXSkKKyAgICAgICAg
c2VsZi5hc3NlcnRfcG9ydCgiZHJ5cnVuLXRlc3QiLCBkcnlydW4uRHJ5UnVuUG9ydCwgcG9ydHNb
ImRyeXJ1biJdKQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0KCJkcnlydW4tbWFjIiwgZHJ5cnVu
LkRyeVJ1blBvcnQsIHBvcnRzWyJkcnlydW4iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgi
bWFjIiwgbWFjLk1hY1BvcnQsIHBvcnRzWyJtYWMiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9y
dCgid2luIiwgd2luLldpblBvcnQsIHBvcnRzWyJ3aW4iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRf
cG9ydCgiZ3RrIiwgZ3RrLkd0a1BvcnQsIHBvcnRzWyJndGsiXSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRfcG9ydCgicXQiLCBxdC5RdFBvcnQsIHBvcnRzWyJxdCJdKQorICAgICAgICBzZWxmLmFzc2Vy
dF9wb3J0KCJjaHJvbWl1bS1tYWMiLCBjaHJvbWl1bV9tYWMuQ2hyb21pdW1NYWNQb3J0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgIHBvcnRzWyJjaHJvbWl1bS1tYWMiXSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRfcG9ydCgiY2hyb21pdW0tbGludXgiLCBjaHJvbWl1bV9saW51eC5DaHJvbWl1bUxp
bnV4UG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0c1siY2hyb21pdW0tbGludXgi
XSkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgiY2hyb21pdW0td2luIiwgY2hyb21pdW1fd2lu
LkNocm9taXVtV2luUG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0c1siY2hyb21p
dW0td2luIl0pCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L3Rlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L3Rlc3QucHkKaW5kZXggZTMwOTMzNC4uYTY0ODIzYyAxMDA2NDQKLS0tIGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5Cisr
KyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5w
eQpAQCAtNzYsNiArNzYsOSBAQCBjbGFzcyBUZXN0UG9ydChiYXNlLlBvcnQpOgogICAgIGRlZiBv
cHRpb25zKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fb3B0aW9ucwogCisgICAgZGVmIHNr
aXBwZWRfbGF5b3V0X3Rlc3RzKHNlbGYpOgorICAgICAgICByZXR1cm4gW10KKwogICAgIGRlZiBw
YXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxm
LnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnV2ViS2l0VG9vbHMnLCAnU2NyaXB0cycsCiAgICAgICAg
ICAgICAnd2Via2l0cHknLCAnbGF5b3V0X3Rlc3RzJywgJ2RhdGEnLCAncGxhdGZvcm0nLCAndGVz
dCcsCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L3dlYmtpdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvd2Via2l0LnB5CmluZGV4IDYxZjhhZWQuLjc2NWUzOGYgMTAwNjQ0Ci0tLSBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5Cisr
KyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0
LnB5CkBAIC0zNDIsMTQgKzM0MiwxNyBAQCBjbGFzcyBXZWJLaXRQb3J0KGJhc2UuUG9ydCk6CiAg
ICAgICAgICMgVGhpcyByb3V0aW5lIHJlYWRzIHRob3NlIGZpbGVzIGFuZCB0dXJucyBjb250ZW50
cyBpbnRvIHRoZQogICAgICAgICAjIGZvcm1hdCBleHBlY3RlZCBieSB0ZXN0X2V4cGVjdGF0aW9u
cy4KIAorICAgICAgICB0ZXN0c190b19za2lwID0gc2VsZi5za2lwcGVkX2xheW91dF90ZXN0cygp
CisgICAgICAgIHNraXBfbGluZXMgPSBtYXAobGFtYmRhIHRlc3RfcGF0aDogIkJVR19TS0lQUEVE
IFNLSVAgOiAlcyA9IEZBSUwiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVz
dF9wYXRoLCB0ZXN0c190b19za2lwKQorICAgICAgICByZXR1cm4gIlxuIi5qb2luKHNraXBfbGlu
ZXMpCisKKyAgICBkZWYgc2tpcHBlZF9sYXlvdXRfdGVzdHMoc2VsZik6CiAgICAgICAgICMgVXNl
IGEgc2V0IHRvIGFsbG93IGR1cGxpY2F0ZXMKICAgICAgICAgdGVzdHNfdG9fc2tpcCA9IHNldChz
ZWxmLl9leHBlY3RhdGlvbnNfZnJvbV9za2lwcGVkX2ZpbGVzKCkpCi0KICAgICAgICAgdGVzdHNf
dG9fc2tpcC51cGRhdGUoc2VsZi5fdGVzdHNfZm9yX290aGVyX3BsYXRmb3JtcygpKQogICAgICAg
ICB0ZXN0c190b19za2lwLnVwZGF0ZShzZWxmLl90ZXN0c19mb3JfZGlzYWJsZWRfZmVhdHVyZXMo
KSkKLSAgICAgICAgc2tpcF9saW5lcyA9IG1hcChsYW1iZGEgdGVzdF9wYXRoOiAiQlVHX1NLSVBQ
RUQgU0tJUCA6ICVzID0gRkFJTCIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZXN0X3BhdGgsIHRlc3RzX3RvX3NraXApCi0gICAgICAgIHJldHVybiAiXG4iLmpvaW4oc2tpcF9s
aW5lcykKKyAgICAgICAgcmV0dXJuIHRlc3RzX3RvX3NraXAKIAogICAgIGRlZiB0ZXN0X3BsYXRm
b3JtX25hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9uYW1lICsgc2VsZi52ZXJzaW9u
KCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvd2Via2l0X3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC93ZWJraXRfdW5pdHRlc3QucHkKaW5kZXggYWY5YTkzMC4uZmJmYWRj
MyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC93ZWJraXRfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXRfdW5pdHRlc3QucHkKQEAgLTQwLDYgKzQwLDE0IEBA
IGNsYXNzIFRlc3RXZWJLaXRQb3J0KFdlYktpdFBvcnQpOgogICAgIGRlZiBfc3VwcG9ydGVkX3N5
bWJvbF9saXN0KHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5zeW1ib2xfbGlzdAogCisgICAg
ZGVmIF90ZXN0c19mb3Jfb3RoZXJfcGxhdGZvcm1zKHNlbGYpOgorICAgICAgICByZXR1cm4gWyJt
ZWRpYSIsIF0KKworICAgIGRlZiBfdGVzdHNfZm9yX2Rpc2FibGVkX2ZlYXR1cmVzKHNlbGYpOgor
ICAgICAgICByZXR1cm4gWyJhY2Nlc3NpYmlsaXR5IiwgXQorCisgICAgZGVmIF9za2lwcGVkX2Zp
bGVfcGF0aHMoc2VsZik6CisgICAgICAgIHJldHVybiBbXQogCiBjbGFzcyBXZWJLaXRQb3J0VGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTU0LDMgKzYyLDcgQEAgY2xhc3MgV2ViS2l0UG9y
dFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBleHBlY3RlZF9kaXJlY3RvcmllcyA9
IHNldChbImFuaW1hdGlvbnMvM2QiLCAidHJhbnNmb3Jtcy8zZCJdKQogICAgICAgICByZXN1bHRf
ZGlyZWN0b3JpZXMgPSBzZXQoVGVzdFdlYktpdFBvcnQoTm9uZSwgc3VwcG9ydGVkX2ZlYXR1cmVz
KS5fc2tpcHBlZF90ZXN0c19mb3JfdW5zdXBwb3J0ZWRfZmVhdHVyZXMoKSkKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChyZXN1bHRfZGlyZWN0b3JpZXMsIGV4cGVjdGVkX2RpcmVjdG9yaWVzKQor
CisgICAgZGVmIHRlc3Rfc2tpcHBlZF9sYXlvdXRfdGVzdHMoc2VsZik6CisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoVGVzdFdlYktpdFBvcnQoTm9uZSwgTm9uZSkuc2tpcHBlZF9sYXlvdXRfdGVz
dHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZXQoWyJtZWRpYSIsICJhY2Nlc3NpYmls
aXR5Il0pKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2Nv
bW1hbmRzL3F1ZXJpZXMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29t
bWFuZHMvcXVlcmllcy5weQppbmRleCA5MWNlNWU5Li5iMTdmNGExIDEwMDY0NAotLS0gYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQpAQCAt
MzcsNyArMzcsNyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0udXNlciBpbXBvcnQgVXNl
cgogZnJvbSB3ZWJraXRweS50b29sLmdyYW1tYXIgaW1wb3J0IHBsdXJhbGl6ZQogZnJvbSB3ZWJr
aXRweS50b29sLm11bHRpY29tbWFuZHRvb2wgaW1wb3J0IEFic3RyYWN0RGVjbGFyYXRpdmVDb21t
YW5kCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZGVwcmVjYXRlZF9sb2dnaW5nIGltcG9y
dCBsb2cKLQorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKIAogY2xhc3Mg
QnVnc1RvQ29tbWl0KEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kKToKICAgICBuYW1lID0gImJ1
Z3MtdG8tY29tbWl0IgpAQCAtMjg0LDMgKzI4NCwyNyBAQCBhbmQgZGlzcGxheWVzIHRoZSBzdGF0
dXMgb2YgZWFjaCBidWlsZGVyLiIiIgogICAgICAgICBmb3IgYnVpbGRlciBpbiB0b29sLmJ1aWxk
Ym90LmJ1aWxkZXJfc3RhdHVzZXMoKToKICAgICAgICAgICAgIHN0YXR1c19zdHJpbmcgPSAib2si
IGlmIGJ1aWxkZXJbImlzX2dyZWVuIl0gZWxzZSAiRkFJTCIKICAgICAgICAgICAgIHByaW50ICIl
cyA6ICVzIiAlIChzdGF0dXNfc3RyaW5nLmxqdXN0KDQpLCBidWlsZGVyWyJuYW1lIl0pCisKKwor
Y2xhc3MgU2tpcHBlZFBvcnRzKEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kKToKKyAgICBuYW1l
ID0gInNraXBwZWQtcG9ydHMiCisgICAgaGVscF90ZXh0ID0gIlByaW50IHRoZSBsaXN0IG9mIHBv
cnRzIHNraXBwaW5nIHRoZSBnaXZlbiBsYXlvdXQgdGVzdChzKSIKKyAgICBsb25nX2hlbHAgPSAi
IiJTY2FucyB0aGUgdGhlIFNraXBwZWQgZmlsZSBvZiBlYWNoIHBvcnQgYW5kIGZpZ3VyZQorb3V0
IHdoYXQgcG9ydHMgYXJlIHNraXBwaW5nIHRoZSB0ZXN0KHMpLiBDYXRlZ29yaWVzIGFyZSB0YWtl
biBpbiBhY2NvdW50IHRvby4iIiIKKyAgICBhcmd1bWVudF9uYW1lcyA9ICJURVNUX05BTUUiCisK
KyAgICBkZWYgZXhlY3V0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKKyAgICAgICAgY2xh
c3MgT3B0aW9uczoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXN1bHRzID0gZGljdChb
KHRlc3RfbmFtZSwgW10pIGZvciB0ZXN0X25hbWUgaW4gYXJnc10pCisgICAgICAgIGZvciBwb3J0
X25hbWUsIHBvcnRfb2JqZWN0IGluIHRvb2wucG9ydF9mYWN0b3J5LmdldF9hbGwob3B0aW9ucz1P
cHRpb25zKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gYXJnczoK
KyAgICAgICAgICAgICAgICBpZiBwb3J0X29iamVjdC5za2lwc19sYXlvdXRfdGVzdCh0ZXN0X25h
bWUpOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRzW3Rlc3RfbmFtZV0uYXBwZW5kKHBvcnRf
bmFtZSkKKworICAgICAgICBmb3IgdGVzdF9uYW1lLCBwb3J0cyBpbiByZXN1bHRzLml0ZXJpdGVt
cygpOgorICAgICAgICAgICAgaWYgcG9ydHM6CisgICAgICAgICAgICAgICAgcHJpbnQgIlBvcnRz
IHNraXBwaW5nIHRlc3QgJXI6ICVzIiAlICh0ZXN0X25hbWUsICcsICcuam9pbihwb3J0cykpCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICJUZXN0ICVyIGlzIG5vdCBz
a2lwcGVkIGJ5IGFueSBwb3J0LiIgJSB0ZXN0X25hbWUKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzX3VuaXR0ZXN0LnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXNfdW5pdHRlc3Qu
cHkKaW5kZXggOThlZDU0NS4uN2RkZGZlNyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXNfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXNfdW5pdHRlc3QucHkK
QEAgLTYxLDMgKzYxLDEzIEBAIGNsYXNzIFF1ZXJ5Q29tbWFuZHNUZXN0KENvbW1hbmRzVGVzdCk6
CiAgICAgZGVmIHRlc3RfdHJlZV9zdGF0dXMoc2VsZik6CiAgICAgICAgIGV4cGVjdGVkX3N0ZG91
dCA9ICJvayAgIDogQnVpbGRlcjFcbm9rICAgOiBCdWlsZGVyMlxuIgogICAgICAgICBzZWxmLmFz
c2VydF9leGVjdXRlX291dHB1dHMoVHJlZVN0YXR1cygpLCBOb25lLCBleHBlY3RlZF9zdGRvdXQp
CisKKyAgICBkZWYgdGVzdF9za2lwcGVkX3BvcnRzKHNlbGYpOgorICAgICAgICBleHBlY3RlZF9z
dGRvdXQgPSAiUG9ydHMgc2tpcHBpbmcgdGVzdCAnbWVkaWEvZm9vL2Jhci5odG1sJzogdGVzdF9w
b3J0MSwgdGVzdF9wb3J0MlxuIgorICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRlX291dHB1dHMo
U2tpcHBlZFBvcnRzKCksICgibWVkaWEvZm9vL2Jhci5odG1sIiwpLCBleHBlY3RlZF9zdGRvdXQp
CisKKyAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0ID0gIlBvcnRzIHNraXBwaW5nIHRlc3QgJ2Zvbyc6
IHRlc3RfcG9ydDFcbiIKKyAgICAgICAgc2VsZi5hc3NlcnRfZXhlY3V0ZV9vdXRwdXRzKFNraXBw
ZWRQb3J0cygpLCAoImZvbyIsKSwgZXhwZWN0ZWRfc3Rkb3V0KQorCisgICAgICAgIGV4cGVjdGVk
X3N0ZG91dCA9ICJUZXN0ICdtZWRpYScgaXMgbm90IHNraXBwZWQgYnkgYW55IHBvcnQuXG4iCisg
ICAgICAgIHNlbGYuYXNzZXJ0X2V4ZWN1dGVfb3V0cHV0cyhTa2lwcGVkUG9ydHMoKSwgKCJtZWRp
YSIsKSwgZXhwZWN0ZWRfc3Rkb3V0KQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS90b29sL21haW4ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
bWFpbi5weQppbmRleCAwZGQ1MDE3Li45NTMxYjYzIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvbWFpbi5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvbWFpbi5weQpAQCAtNDAsNiArNDAsNyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5uZXQucmlldHZlbGQgaW1wb3J0IFJpZXR2ZWxkCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQu
aXJjLmlyY3Byb3h5IGltcG9ydCBJUkNQcm94eQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0u
dXNlciBpbXBvcnQgVXNlcgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQK
IGltcG9ydCB3ZWJraXRweS50b29sLmNvbW1hbmRzIGFzIGNvbW1hbmRzCiAjIEZJWE1FOiBSZW1v
dmUgdGhlc2UgaW1wb3J0cyBvbmNlIGFsbCB0aGUgY29tbWFuZHMgYXJlIGluIHRoZSByb290IG9m
IHRoZQogIyBjb21tYW5kIHBhY2thZ2UuCkBAIC03Niw2ICs3Nyw3IEBAIGNsYXNzIFdlYktpdFBh
dGNoKE11bHRpQ29tbWFuZFRvb2wpOgogICAgICAgICBzZWxmLl9jaGVja291dCA9IE5vbmUKICAg
ICAgICAgc2VsZi5zdGF0dXNfc2VydmVyID0gU3RhdHVzU2VydmVyKCkKICAgICAgICAgc2VsZi5j
b2RlcmV2aWV3ID0gUmlldHZlbGQoc2VsZi5leGVjdXRpdmUpCisgICAgICAgIHNlbGYucG9ydF9m
YWN0b3J5ID0gcG9ydC5mYWN0b3J5CiAKICAgICBkZWYgc2NtKHNlbGYpOgogICAgICAgICAjIExh
emlseSBpbml0aWFsaXplIFNDTSB0byBub3QgZXJyb3Itb3V0IGJlZm9yZSBjb21tYW5kIGxpbmUg
cGFyc2luZyAob3Igd2hlbiBydW5uaW5nIG5vbi1zY20gY29tbWFuZHMpLgpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5CmluZGV4IDdlYjhmNGMuLmUzZDM2
Y2UgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9tb2NrdG9v
bC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkK
QEAgLTU1Niw2ICs1NTYsMjQgQEAgY2xhc3MgTW9ja1JpZXR2ZWxkKCk6CiAgICAgICAgIGxvZygi
TU9DSzogVXBsb2FkaW5nIHBhdGNoIHRvIHJpZXR2ZWxkIikKIAogCitjbGFzcyBNb2NrVGVzdFBv
cnQxKCk6CisKKyAgICBkZWYgc2tpcHNfbGF5b3V0X3Rlc3Qoc2VsZiwgdGVzdF9uYW1lKToKKyAg
ICAgICAgcmV0dXJuIHRlc3RfbmFtZSBpbiBbIm1lZGlhL2Zvby9iYXIuaHRtbCIsICJmb28iXQor
CisKK2NsYXNzIE1vY2tUZXN0UG9ydDIoKToKKworICAgIGRlZiBza2lwc19sYXlvdXRfdGVzdChz
ZWxmLCB0ZXN0X25hbWUpOgorICAgICAgICByZXR1cm4gdGVzdF9uYW1lID09ICJtZWRpYS9mb28v
YmFyLmh0bWwiCisKKworY2xhc3MgTW9ja1BvcnRGYWN0b3J5KCk6CisKKyAgICBkZWYgZ2V0X2Fs
bChzZWxmLCBvcHRpb25zPU5vbmUpOgorICAgICAgICByZXR1cm4geyJ0ZXN0X3BvcnQxIjogTW9j
a1Rlc3RQb3J0MSgpLCAidGVzdF9wb3J0MiI6IE1vY2tUZXN0UG9ydDIoKX0KKworCiBjbGFzcyBN
b2NrVG9vbCgpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZ19leGVjdXRpdmU9RmFsc2Up
OgpAQCAtNTcwLDYgKzU4OCw3IEBAIGNsYXNzIE1vY2tUb29sKCk6CiAgICAgICAgIHNlbGYuc3Rh
dHVzX3NlcnZlciA9IE1vY2tTdGF0dXNTZXJ2ZXIoKQogICAgICAgICBzZWxmLmlyY19wYXNzd29y
ZCA9ICJNT0NLIGlyYyBwYXNzd29yZCIKICAgICAgICAgc2VsZi5jb2RlcmV2aWV3ID0gTW9ja1Jp
ZXR2ZWxkKHNlbGYuZXhlY3V0aXZlKQorICAgICAgICBzZWxmLnBvcnRfZmFjdG9yeSA9IE1vY2tQ
b3J0RmFjdG9yeSgpCiAKICAgICBkZWYgc2NtKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5f
c2NtCi0tIAoxLjcuMQ==
</data>
<flag name="review"
          id="55730"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66689</attachid>
            <date>2010-09-07 00:58:51 -0700</date>
            <delta_ts>2010-09-07 01:01:32 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>updated-patch.patch</filename>
            <type>text/plain</type>
            <size>18762</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBmYzU0YzVlOTRiNTEzM2Q5M2UxNTM1OTA2ZTAwZDQ2ZDhiNWUxZTI5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDYgU2VwIDIwMTAgMTk6MTc6NTQgKzAyMDAKU3ViamVjdDogW1BBVENIXSB1
cGRhdGVkIHBhdGNoCgotLS0KIFdlYktpdFRvb2xzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAyMyArKysrKysrKysrKysrKysrKwogLi4uL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weSAgICAgfCAgIDEyICsrKysrKysrKwogLi4uL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2VfdW5pdHRlc3QucHkgICAgfCAgICA3ICsrKysr
CiAuLi4vU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weSB8ICAg
MTQgKysrKysrKysrKwogLi4uL2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3VuaXR0ZXN0LnB5
ICAgICAgICAgfCAgIDExICsrKysrKysrCiAuLi4vU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9mYWN0b3J5LnB5ICB8ICAgMTAgKysrKysrKwogLi4uL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2ZhY3RvcnlfdW5pdHRlc3QucHkgfCAgIDI2ICsrKysrKysrKysrKysrKystLS0K
IC4uLi9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkgICAgIHwgICAg
MyArKwogLi4uL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5ICAg
fCAgIDExICsrKysrLS0tCiAuLi4vd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0X3Vu
aXR0ZXN0LnB5ICB8ICAgMTIgKysrKysrKysrCiAuLi4vU2NyaXB0cy93ZWJraXRweS90b29sL2Nv
bW1hbmRzL3F1ZXJpZXMucHkgICAgICB8ICAgMjYgKysrKysrKysrKysrKysrKysrKysKIC4uLi93
ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXNfdW5pdHRlc3QucHkgICAgIHwgICAxMCArKysr
KysrCiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbWFpbi5weSAgICAgICAgICB8
ICAgIDIgKwogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5ICAg
ICAgfCAgIDE5ICsrKysrKysrKysrKysrCiAxNCBmaWxlcyBjaGFuZ2VkLCAxNzggaW5zZXJ0aW9u
cygrKSwgOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cg
Yi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKaW5kZXggNTA2NDhiMC4uNDI0MjEyNCAxMDA2NDQKLS0t
IGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI2IEBACisyMDEwLTA5LTA2ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdh
bGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICB3ZWJraXQtcGF0Y2ggY29tbWFuZCB0byBmaW5kIHRoZSBwb3J0cyBjb3ZlcmluZyBhIHNwZWNp
ZmljIGxheW91dCB0ZXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00MjgzMgorCisgICAgICAgIFRvIHVzZSBpdDogd2Via2l0LXBhdGNoIHNraXBwZWQt
cG9ydHMgc29tZS9sYXlvdXQvdGVzdC5odG1sCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV91bml0dGVzdC5weToKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5X3VuaXR0ZXN0LnB5
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weToK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weToK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdF91bml0
dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmll
cy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllc191
bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbWFpbi5weToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHk6CisKIDIwMTAtMDktMDUg
IFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKaW5kZXggNmI3MzQyZC4uYjdiZjg2MyAxMDA2NDQK
LS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNl
LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
YmFzZS5weQpAQCAtMzA1LDYgKzMwNSwxOCBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAg
ICIiIlJldHVybiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdG9wIG9mIHRoZSBMYXlvdXRUZXN0
cyBkaXJlY3RvcnkuIiIiCiAgICAgICAgIHJldHVybiBzZWxmLnBhdGhfZnJvbV93ZWJraXRfYmFz
ZSgnTGF5b3V0VGVzdHMnKQogCisgICAgZGVmIHNraXBzX2xheW91dF90ZXN0KHNlbGYsIHRlc3Rf
bmFtZSk6CisgICAgICAgICIiIkZpZ3VyZXMgb3V0IGlmIHRoZSBnaXZlbnQgdGVzdCBpcyBiZWlu
ZyBza2lwcGVkIG9yIG5vdC4KKworICAgICAgICBUZXN0IGNhdGVnb3JpZXMgYXJlIGhhbmRsZWQg
YXMgd2VsbC4iIiIKKyAgICAgICAgZm9yIHRlc3Rfb3JfY2F0ZWdvcnkgaW4gc2VsZi5za2lwcGVk
X2xheW91dF90ZXN0cygpOgorICAgICAgICAgICAgaWYgdGVzdF9vcl9jYXRlZ29yeSA9PSB0ZXN0
X25hbWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGNhdGVnb3J5
ID0gb3MucGF0aC5qb2luKHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpLCB0ZXN0X29yX2NhdGVnb3J5
KQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihjYXRlZ29yeSkgYW5kIHRlc3RfbmFtZS5z
dGFydHN3aXRoKGNhdGVnb3J5KToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAg
ICByZXR1cm4gRmFsc2UKKwogICAgIGRlZiBtYXliZV9tYWtlX2RpcmVjdG9yeShzZWxmLCAqcGF0
aCk6CiAgICAgICAgICIiIkNyZWF0ZXMgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgaWYgaXQgZG9l
c24ndCBhbHJlYWR5IGV4aXN0LiIiIgogICAgICAgICB0cnk6CmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2VfdW5pdHRlc3QucHkg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2VfdW5p
dHRlc3QucHkKaW5kZXggZjgyMTM1My4uMjQ3ZjVhYSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5CisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZV91bml0
dGVzdC5weQpAQCAtMTA5LDYgKzEwOSwxMyBAQCBjbGFzcyBQb3J0VGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmFzZS5fd2RpZmZfYXZhaWxhYmxlKQog
ICAgICAgICBiYXNlLl93ZGlmZl9hdmFpbGFibGUgPSBUcnVlCiAKKyAgICBkZWYgdGVzdF9sYXlv
dXRfdGVzdHNfc2tpcHBpbmcoc2VsZik6CisgICAgICAgIHBvcnQgPSBiYXNlLlBvcnQoKQorICAg
ICAgICBwb3J0LnNraXBwZWRfbGF5b3V0X3Rlc3RzID0gbGFtYmRhOiBbJ2Zvby9iYXIuaHRtbCcs
ICdib28nXQorICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5za2lwc19sYXlvdXRfdGVzdCgn
Zm9vL2Jhci5odG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0LnNraXBzX2xheW91
dF90ZXN0KCdib28vYmFoLmh0bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0LnNr
aXBzX2xheW91dF90ZXN0KCdmb28vZm9vLmh0bWwnKSkKKwogCiBjbGFzcyBEcml2ZXJUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKaW5kZXggNmNmYzBiOC4uYzZi
ZTA4MiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9jaHJvbWl1bS5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CkBAIC00Niw2ICs0Niw4IEBAIGltcG9ydCBiYXNl
CiBpbXBvcnQgaHR0cF9zZXJ2ZXIKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1
dGl2ZSBpbXBvcnQgRXhlY3V0aXZlCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRf
cGFja2FnZSBpbXBvcnQgdGVzdF9maWxlcworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5
b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCiAKICMgQ2hyb21pdW0gRFJUIG9u
IE9TWCB1c2VzIFdlYktpdERyaXZlci4KIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKQEAg
LTIzMyw2ICsyMzUsMTggQEAgY2xhc3MgQ2hyb21pdW1Qb3J0KGJhc2UuUG9ydCk6CiAgICAgICAg
IHdpdGggY29kZWNzLm9wZW4ob3ZlcnJpZGVzX3BhdGgsICJyIiwgInV0Zi04IikgYXMgZmlsZToK
ICAgICAgICAgICAgIHJldHVybiBmaWxlLnJlYWQoKSArIGRydF9vdmVycmlkZXMKIAorICAgIGRl
ZiBza2lwcGVkX2xheW91dF90ZXN0cyhzZWxmKToKKyAgICAgICAgZXhwZWN0YXRpb25zX3N0ciA9
IHNlbGYudGVzdF9leHBlY3RhdGlvbnMoKQorICAgICAgICBvdmVycmlkZXNfc3RyID0gc2VsZi50
ZXN0X2V4cGVjdGF0aW9uc19vdmVycmlkZXMoKQorICAgICAgICB0ZXN0X3BsYXRmb3JtX25hbWUg
PSBzZWxmLnRlc3RfcGxhdGZvcm1fbmFtZSgpCisgICAgICAgIGlzX2RlYnVnX21vZGUgPSBGYWxz
ZQorICAgICAgICBhbGxfdGVzdF9maWxlcyA9IHRlc3RfZmlsZXMuZ2F0aGVyX3Rlc3RfZmlsZXMo
c2VsZiwgJyonKQorICAgICAgICBleHBlY3RhdGlvbnMgPSB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0
RXhwZWN0YXRpb25zKAorICAgICAgICAgICAgc2VsZiwgYWxsX3Rlc3RfZmlsZXMsIGV4cGVjdGF0
aW9uc19zdHIsIHRlc3RfcGxhdGZvcm1fbmFtZSwKKyAgICAgICAgICAgIGlzX2RlYnVnX21vZGUs
IGlzX2xpbnRfbW9kZT1UcnVlLAorICAgICAgICAgICAgdGVzdHNfYXJlX3ByZXNlbnQ9VHJ1ZSwg
b3ZlcnJpZGVzPW92ZXJyaWRlc19zdHIpCisgICAgICAgIHJldHVybiBleHBlY3RhdGlvbnMuZ2V0
X3Rlc3RzX3dpdGhfcmVzdWx0X3R5cGUodGVzdF9leHBlY3RhdGlvbnMuU0tJUCkKKwogICAgIGRl
ZiB0ZXN0X3BsYXRmb3JtX25hbWVzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi50ZXN0X2Jh
c2VfcGxhdGZvcm1fbmFtZXMoKSArICgnd2luLXhwJywKICAgICAgICAgICAgICd3aW4tdmlzdGEn
LCAnd2luLTcnKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9jaHJvbWl1bV91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fdW5pdHRlc3QucHkKaW5kZXggYTMy
ZWFmZC4uOGNhMDk0MSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV91bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3VuaXR0ZXN0LnB5CkBA
IC05NSwzICs5NSwxNCBAQCBjbGFzcyBDaHJvbWl1bURyaXZlclRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgogICAgICAgICAgICAgJy94Y29kZWJ1aWxkL1JlbGVhc2UvSW1hZ2VEaWZmJykpCiAgICAg
ICAgICMgRklYTUU6IEZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgZ29pbmcgdG8gd29yayBvbiBXaW5k
b3dzLgogICAgICAgICAjcG9ydCA9IGNocm9taXVtX3dpbi5DaHJvbWl1bVdpblBvcnQoJ3Rlc3Qt
cG9ydCcsIG9wdGlvbnM9TW9ja09wdGlvbnMoKSkKKworICAgIGRlZiB0ZXN0X3NraXBwZWRfbGF5
b3V0X3Rlc3RzKHNlbGYpOgorICAgICAgICBjbGFzcyBNb2NrT3B0aW9uczoKKyAgICAgICAgICAg
IHBhc3MKKworICAgICAgICBwb3J0ID0gY2hyb21pdW1fbGludXguQ2hyb21pdW1MaW51eFBvcnQo
J3Rlc3QtcG9ydCcsIG9wdGlvbnM9TW9ja09wdGlvbnMoKSkKKyAgICAgICAgcG9ydC50ZXN0X2V4
cGVjdGF0aW9ucyA9IGxhbWJkYTogIiIiU0tJUCA6IGZhc3QvanMvbm90LWdvb2QuanMgPSBUSU1F
T1VUIFBBU1MKKyAgICAgIERFQlVHIDogZmFzdC9qcy9uby1nb29kLmpzID0gVElNRU9VVCBQQVNT
CisgICAgICBERUZFUiBMSU5VWCBXSU4gOiBmYXN0L2pzL3ZlcnktZ29vZC5qcyA9IFRJTUVPVVQg
UEFTUyIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuc2tpcHBlZF9sYXlvdXRfdGVz
dHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbImZhc3QvanMvbm90LWdvb2QuanMiLCBd
KQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9mYWN0b3J5LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9mYWN0b3J5LnB5CmluZGV4IDI1OGJmMzMuLjU3MDRmNjUgMTAwNjQ0Ci0tLSBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weQor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3Rv
cnkucHkKQEAgLTMyLDYgKzMyLDEwIEBACiAKIGltcG9ydCBzeXMKIAorQUxMX1BPUlRfTkFNRVMg
PSBbJ3Rlc3QnLCAnZHJ5cnVuJywgJ21hYycsICd3aW4nLCAnZ3RrJywgJ3F0JywgJ2Nocm9taXVt
LW1hYycsCisgICAgICAgICAgICAgICAgICAnY2hyb21pdW0tbGludXgnLCAnY2hyb21pdW0td2lu
JywgJ2dvb2dsZS1jaHJvbWUtd2luJywKKyAgICAgICAgICAgICAgICAgICdnb29nbGUtY2hyb21l
LW1hYycsICdnb29nbGUtY2hyb21lLWxpbnV4MzInLCAnZ29vZ2xlLWNocm9tZS1saW51eDY0J10K
KwogCiBkZWYgZ2V0KHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUpOgogICAgICIiIlJldHVy
bnMgYW4gb2JqZWN0IGltcGxlbWVudGluZyB0aGUgUG9ydCBpbnRlcmZhY2UuIElmCkBAIC04OCwz
ICs5Miw5IEBAIGRlZiBnZXQocG9ydF9uYW1lPU5vbmUsIG9wdGlvbnM9Tm9uZSk6CiAgICAgICAg
IHJldHVybiBnb29nbGVfY2hyb21lLkdldEdvb2dsZUNocm9tZVBvcnQocG9ydF9uYW1lLCBvcHRp
b25zKQogCiAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigndW5zdXBwb3J0ZWQgcG9ydDog
JXMnICUgcG9ydF90b191c2UpCisKKworZGVmIGdldF9hbGwob3B0aW9ucz1Ob25lKToKKyAgICAi
IiJSZXR1cm5zIGFsbCB0aGUgb2JqZWN0cyBpbXBsZW1lbnRpbmcgdGhlIFBvcnQgaW50ZXJmYWNl
LiIiIgorICAgIHJldHVybiBkaWN0KFsocG9ydF9uYW1lLCBnZXQocG9ydF9uYW1lLCBvcHRpb25z
PW9wdGlvbnMpKQorICAgICAgICAgICAgICAgICBmb3IgcG9ydF9uYW1lIGluIEFMTF9QT1JUX05B
TUVTXSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvZmFjdG9yeV91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeV91bml0dGVzdC5weQppbmRleCBkOGRmZmRmLi5m
ZjllYmNlIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2ZhY3RvcnlfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5X3VuaXR0ZXN0LnB5CkBAIC02OSwxNiAr
NjksMTYgQEAgY2xhc3MgRmFjdG9yeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0
ZWFyRG93bihzZWxmKToKICAgICAgICAgc3lzLnBsYXRmb3JtID0gc2VsZi5yZWFsX3N5c19wbGF0
Zm9ybQogCi0gICAgZGVmIGFzc2VydF9wb3J0KHNlbGYsIHBvcnRfbmFtZSwgZXhwZWN0ZWRfcG9y
dCk6CisgICAgZGVmIGFzc2VydF9wb3J0KHNlbGYsIHBvcnRfbmFtZSwgZXhwZWN0ZWRfcG9ydCwg
cG9ydF9vYmo9Tm9uZSk6CiAgICAgICAgICIiIkhlbHBlciBhc3NlcnQgZm9yIHBvcnRfbmFtZS4K
IAogICAgICAgICBBcmdzOgogICAgICAgICAgIHBvcnRfbmFtZTogcG9ydCBuYW1lIHRvIGdldCBw
b3J0IG9iamVjdC4KICAgICAgICAgICBleHBlY3RlZF9wb3J0OiBjbGFzcyBvZiBleHBlY3RlZCBw
b3J0IG9iamVjdC4KLQorICAgICAgICAgIHBvcnRfb2JqOiBvcHRpb25hbCBwb3J0IG9iamVjdAog
ICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZmFjdG9yeS5n
ZXQocG9ydF9uYW1lPXBvcnRfbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4cGVjdGVkX3BvcnQpKQorICAgICAgICBwb3J0X29iaiA9IHBvcnRfb2JqIG9yIGZhY3Rv
cnkuZ2V0KHBvcnRfbmFtZT1wb3J0X25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2lu
c3RhbmNlKHBvcnRfb2JqLCBleHBlY3RlZF9wb3J0KSkKIAogICAgIGRlZiBhc3NlcnRfcGxhdGZv
cm1fcG9ydChzZWxmLCBwbGF0Zm9ybSwgb3B0aW9ucywgZXhwZWN0ZWRfcG9ydCk6CiAgICAgICAg
ICIiIkhlbHBlciBhc3NlcnQgZm9yIHBsYXRmb3JtIGFuZCBvcHRpb25zLgpAQCAtMTM2LDMgKzEz
NiwyMSBAQCBjbGFzcyBGYWN0b3J5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hyb21pdW1fd2luLkNocm9taXVtV2luUG9ydCkKICAg
ICAgICAgc2VsZi5hc3NlcnRfcGxhdGZvcm1fcG9ydCgiY3lnd2luIiwgc2VsZi5jaHJvbWl1bV9v
cHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocm9taXVtX3dpbi5D
aHJvbWl1bVdpblBvcnQpCisKKyAgICBkZWYgdGVzdF9nZXRfYWxsX3BvcnRzKHNlbGYpOgorICAg
ICAgICBwb3J0cyA9IGZhY3RvcnkuZ2V0X2FsbCgpCisgICAgICAgIGZvciBuYW1lIGluIGZhY3Rv
cnkuQUxMX1BPUlRfTkFNRVM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobmFtZSBpbiBw
b3J0cy5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQoInRlc3QiLCB0ZXN0LlRlc3RQ
b3J0LCBwb3J0c1sidGVzdCJdKQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0KCJkcnlydW4tdGVz
dCIsIGRyeXJ1bi5EcnlSdW5Qb3J0LCBwb3J0c1siZHJ5cnVuIl0pCisgICAgICAgIHNlbGYuYXNz
ZXJ0X3BvcnQoImRyeXJ1bi1tYWMiLCBkcnlydW4uRHJ5UnVuUG9ydCwgcG9ydHNbImRyeXJ1biJd
KQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0KCJtYWMiLCBtYWMuTWFjUG9ydCwgcG9ydHNbIm1h
YyJdKQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0KCJ3aW4iLCB3aW4uV2luUG9ydCwgcG9ydHNb
IndpbiJdKQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0KCJndGsiLCBndGsuR3RrUG9ydCwgcG9y
dHNbImd0ayJdKQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0KCJxdCIsIHF0LlF0UG9ydCwgcG9y
dHNbInF0Il0pCisgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQoImNocm9taXVtLW1hYyIsIGNocm9t
aXVtX21hYy5DaHJvbWl1bU1hY1BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydHNb
ImNocm9taXVtLW1hYyJdKQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0KCJjaHJvbWl1bS1saW51
eCIsIGNocm9taXVtX2xpbnV4LkNocm9taXVtTGludXhQb3J0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgIHBvcnRzWyJjaHJvbWl1bS1saW51eCJdKQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0
KCJjaHJvbWl1bS13aW4iLCBjaHJvbWl1bV93aW4uQ2hyb21pdW1XaW5Qb3J0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgIHBvcnRzWyJjaHJvbWl1bS13aW4iXSkKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weSBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQppbmRleCBl
MzA5MzM0Li5hNjQ4MjNjIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CkBAIC03Niw2ICs3Niw5IEBAIGNsYXNzIFRl
c3RQb3J0KGJhc2UuUG9ydCk6CiAgICAgZGVmIG9wdGlvbnMoc2VsZik6CiAgICAgICAgIHJldHVy
biBzZWxmLl9vcHRpb25zCiAKKyAgICBkZWYgc2tpcHBlZF9sYXlvdXRfdGVzdHMoc2VsZik6Cisg
ICAgICAgIHJldHVybiBbXQorCiAgICAgZGVmIHBhdGhfdG9fdGVzdF9leHBlY3RhdGlvbnNfZmls
ZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdXZWJL
aXRUb29scycsICdTY3JpcHRzJywKICAgICAgICAgICAgICd3ZWJraXRweScsICdsYXlvdXRfdGVz
dHMnLCAnZGF0YScsICdwbGF0Zm9ybScsICd0ZXN0JywKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHkKaW5kZXggNjFm
OGFlZC4uNzY1ZTM4ZiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHkKQEAgLTM0MiwxNCArMzQyLDE3IEBAIGNs
YXNzIFdlYktpdFBvcnQoYmFzZS5Qb3J0KToKICAgICAgICAgIyBUaGlzIHJvdXRpbmUgcmVhZHMg
dGhvc2UgZmlsZXMgYW5kIHR1cm5zIGNvbnRlbnRzIGludG8gdGhlCiAgICAgICAgICMgZm9ybWF0
IGV4cGVjdGVkIGJ5IHRlc3RfZXhwZWN0YXRpb25zLgogCisgICAgICAgIHRlc3RzX3RvX3NraXAg
PSBzZWxmLnNraXBwZWRfbGF5b3V0X3Rlc3RzKCkKKyAgICAgICAgc2tpcF9saW5lcyA9IG1hcChs
YW1iZGEgdGVzdF9wYXRoOiAiQlVHX1NLSVBQRUQgU0tJUCA6ICVzID0gRkFJTCIgJQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3BhdGgsIHRlc3RzX3RvX3NraXApCisgICAg
ICAgIHJldHVybiAiXG4iLmpvaW4oc2tpcF9saW5lcykKKworICAgIGRlZiBza2lwcGVkX2xheW91
dF90ZXN0cyhzZWxmKToKICAgICAgICAgIyBVc2UgYSBzZXQgdG8gYWxsb3cgZHVwbGljYXRlcwog
ICAgICAgICB0ZXN0c190b19za2lwID0gc2V0KHNlbGYuX2V4cGVjdGF0aW9uc19mcm9tX3NraXBw
ZWRfZmlsZXMoKSkKLQogICAgICAgICB0ZXN0c190b19za2lwLnVwZGF0ZShzZWxmLl90ZXN0c19m
b3Jfb3RoZXJfcGxhdGZvcm1zKCkpCiAgICAgICAgIHRlc3RzX3RvX3NraXAudXBkYXRlKHNlbGYu
X3Rlc3RzX2Zvcl9kaXNhYmxlZF9mZWF0dXJlcygpKQotICAgICAgICBza2lwX2xpbmVzID0gbWFw
KGxhbWJkYSB0ZXN0X3BhdGg6ICJCVUdfU0tJUFBFRCBTS0lQIDogJXMgPSBGQUlMIiAlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcGF0aCwgdGVzdHNfdG9fc2tpcCkKLSAg
ICAgICAgcmV0dXJuICJcbiIuam9pbihza2lwX2xpbmVzKQorICAgICAgICByZXR1cm4gdGVzdHNf
dG9fc2tpcAogCiAgICAgZGVmIHRlc3RfcGxhdGZvcm1fbmFtZShzZWxmKToKICAgICAgICAgcmV0
dXJuIHNlbGYuX25hbWUgKyBzZWxmLnZlcnNpb24oKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXRfdW5pdHRlc3QucHkgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdF91bml0
dGVzdC5weQppbmRleCBhZjlhOTMwLi5mYmZhZGMzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdF91bml0dGVzdC5weQorKysg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdF91
bml0dGVzdC5weQpAQCAtNDAsNiArNDAsMTQgQEAgY2xhc3MgVGVzdFdlYktpdFBvcnQoV2ViS2l0
UG9ydCk6CiAgICAgZGVmIF9zdXBwb3J0ZWRfc3ltYm9sX2xpc3Qoc2VsZik6CiAgICAgICAgIHJl
dHVybiBzZWxmLnN5bWJvbF9saXN0CiAKKyAgICBkZWYgX3Rlc3RzX2Zvcl9vdGhlcl9wbGF0Zm9y
bXMoc2VsZik6CisgICAgICAgIHJldHVybiBbIm1lZGlhIiwgXQorCisgICAgZGVmIF90ZXN0c19m
b3JfZGlzYWJsZWRfZmVhdHVyZXMoc2VsZik6CisgICAgICAgIHJldHVybiBbImFjY2Vzc2liaWxp
dHkiLCBdCisKKyAgICBkZWYgX3NraXBwZWRfZmlsZV9wYXRocyhzZWxmKToKKyAgICAgICAgcmV0
dXJuIFtdCiAKIGNsYXNzIFdlYktpdFBvcnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAt
NTQsMyArNjIsNyBAQCBjbGFzcyBXZWJLaXRQb3J0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAg
ICAgICAgIGV4cGVjdGVkX2RpcmVjdG9yaWVzID0gc2V0KFsiYW5pbWF0aW9ucy8zZCIsICJ0cmFu
c2Zvcm1zLzNkIl0pCiAgICAgICAgIHJlc3VsdF9kaXJlY3RvcmllcyA9IHNldChUZXN0V2ViS2l0
UG9ydChOb25lLCBzdXBwb3J0ZWRfZmVhdHVyZXMpLl9za2lwcGVkX3Rlc3RzX2Zvcl91bnN1cHBv
cnRlZF9mZWF0dXJlcygpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdF9kaXJlY3Rv
cmllcywgZXhwZWN0ZWRfZGlyZWN0b3JpZXMpCisKKyAgICBkZWYgdGVzdF9za2lwcGVkX2xheW91
dF90ZXN0cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0V2ViS2l0UG9ydChO
b25lLCBOb25lKS5za2lwcGVkX2xheW91dF90ZXN0cygpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIHNldChbIm1lZGlhIiwgImFjY2Vzc2liaWxpdHkiXSkpCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzLnB5CmluZGV4IDkxY2U1
ZTkuLjliOGQxNjIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9jb21tYW5kcy9xdWVyaWVzLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dG9vbC9jb21tYW5kcy9xdWVyaWVzLnB5CkBAIC0zNyw2ICszNyw3IEBAIGZyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbS51c2VyIGltcG9ydCBVc2VyCiBmcm9tIHdlYmtpdHB5LnRvb2wuZ3JhbW1h
ciBpbXBvcnQgcGx1cmFsaXplCiBmcm9tIHdlYmtpdHB5LnRvb2wubXVsdGljb21tYW5kdG9vbCBp
bXBvcnQgQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5kZXByZWNhdGVkX2xvZ2dpbmcgaW1wb3J0IGxvZworZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMgaW1wb3J0IHBvcnQKIAogCiBjbGFzcyBCdWdzVG9Db21taXQoQWJzdHJhY3REZWNsYXJh
dGl2ZUNvbW1hbmQpOgpAQCAtMjg0LDMgKzI4NSwyOCBAQCBhbmQgZGlzcGxheWVzIHRoZSBzdGF0
dXMgb2YgZWFjaCBidWlsZGVyLiIiIgogICAgICAgICBmb3IgYnVpbGRlciBpbiB0b29sLmJ1aWxk
Ym90LmJ1aWxkZXJfc3RhdHVzZXMoKToKICAgICAgICAgICAgIHN0YXR1c19zdHJpbmcgPSAib2si
IGlmIGJ1aWxkZXJbImlzX2dyZWVuIl0gZWxzZSAiRkFJTCIKICAgICAgICAgICAgIHByaW50ICIl
cyA6ICVzIiAlIChzdGF0dXNfc3RyaW5nLmxqdXN0KDQpLCBidWlsZGVyWyJuYW1lIl0pCisKKwor
Y2xhc3MgU2tpcHBlZFBvcnRzKEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kKToKKyAgICBuYW1l
ID0gInNraXBwZWQtcG9ydHMiCisgICAgaGVscF90ZXh0ID0gIlByaW50IHRoZSBsaXN0IG9mIHBv
cnRzIHNraXBwaW5nIHRoZSBnaXZlbiBsYXlvdXQgdGVzdChzKSIKKyAgICBsb25nX2hlbHAgPSAi
IiJTY2FucyB0aGUgdGhlIFNraXBwZWQgZmlsZSBvZiBlYWNoIHBvcnQgYW5kIGZpZ3VyZQorb3V0
IHdoYXQgcG9ydHMgYXJlIHNraXBwaW5nIHRoZSB0ZXN0KHMpLiBDYXRlZ29yaWVzIGFyZSB0YWtl
biBpbiBhY2NvdW50IHRvby4iIiIKKyAgICBhcmd1bWVudF9uYW1lcyA9ICJURVNUX05BTUUiCisK
KyAgICBkZWYgZXhlY3V0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKKyAgICAgICAgY2xh
c3MgT3B0aW9uczoKKyAgICAgICAgICAgICMgUmVxdWlyZWQgZm9yIGNocm9taXVtIHBvcnQuCisg
ICAgICAgICAgICB1c2VfZHJ0ID0gVHJ1ZQorCisgICAgICAgIHJlc3VsdHMgPSBkaWN0KFsodGVz
dF9uYW1lLCBbXSkgZm9yIHRlc3RfbmFtZSBpbiBhcmdzXSkKKyAgICAgICAgZm9yIHBvcnRfbmFt
ZSwgcG9ydF9vYmplY3QgaW4gdG9vbC5wb3J0X2ZhY3RvcnkuZ2V0X2FsbChvcHRpb25zPU9wdGlv
bnMpLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiBhcmdzOgorICAg
ICAgICAgICAgICAgIGlmIHBvcnRfb2JqZWN0LnNraXBzX2xheW91dF90ZXN0KHRlc3RfbmFtZSk6
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNbdGVzdF9uYW1lXS5hcHBlbmQocG9ydF9uYW1l
KQorCisgICAgICAgIGZvciB0ZXN0X25hbWUsIHBvcnRzIGluIHJlc3VsdHMuaXRlcml0ZW1zKCk6
CisgICAgICAgICAgICBpZiBwb3J0czoKKyAgICAgICAgICAgICAgICBwcmludCAiUG9ydHMgc2tp
cHBpbmcgdGVzdCAlcjogJXMiICUgKHRlc3RfbmFtZSwgJywgJy5qb2luKHBvcnRzKSkKKyAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgIlRlc3QgJXIgaXMgbm90IHNraXBw
ZWQgYnkgYW55IHBvcnQuIiAlIHRlc3RfbmFtZQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXNfdW5pdHRlc3QucHkgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllc191bml0dGVzdC5weQpp
bmRleCA5OGVkNTQ1Li43ZGRkZmU3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllc191bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllc191bml0dGVzdC5weQpAQCAt
NjEsMyArNjEsMTMgQEAgY2xhc3MgUXVlcnlDb21tYW5kc1Rlc3QoQ29tbWFuZHNUZXN0KToKICAg
ICBkZWYgdGVzdF90cmVlX3N0YXR1cyhzZWxmKToKICAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0ID0g
Im9rICAgOiBCdWlsZGVyMVxub2sgICA6IEJ1aWxkZXIyXG4iCiAgICAgICAgIHNlbGYuYXNzZXJ0
X2V4ZWN1dGVfb3V0cHV0cyhUcmVlU3RhdHVzKCksIE5vbmUsIGV4cGVjdGVkX3N0ZG91dCkKKwor
ICAgIGRlZiB0ZXN0X3NraXBwZWRfcG9ydHMoc2VsZik6CisgICAgICAgIGV4cGVjdGVkX3N0ZG91
dCA9ICJQb3J0cyBza2lwcGluZyB0ZXN0ICdtZWRpYS9mb28vYmFyLmh0bWwnOiB0ZXN0X3BvcnQx
LCB0ZXN0X3BvcnQyXG4iCisgICAgICAgIHNlbGYuYXNzZXJ0X2V4ZWN1dGVfb3V0cHV0cyhTa2lw
cGVkUG9ydHMoKSwgKCJtZWRpYS9mb28vYmFyLmh0bWwiLCksIGV4cGVjdGVkX3N0ZG91dCkKKwor
ICAgICAgICBleHBlY3RlZF9zdGRvdXQgPSAiUG9ydHMgc2tpcHBpbmcgdGVzdCAnZm9vJzogdGVz
dF9wb3J0MVxuIgorICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRlX291dHB1dHMoU2tpcHBlZFBv
cnRzKCksICgiZm9vIiwpLCBleHBlY3RlZF9zdGRvdXQpCisKKyAgICAgICAgZXhwZWN0ZWRfc3Rk
b3V0ID0gIlRlc3QgJ21lZGlhJyBpcyBub3Qgc2tpcHBlZCBieSBhbnkgcG9ydC5cbiIKKyAgICAg
ICAgc2VsZi5hc3NlcnRfZXhlY3V0ZV9vdXRwdXRzKFNraXBwZWRQb3J0cygpLCAoIm1lZGlhIiwp
LCBleHBlY3RlZF9zdGRvdXQpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvbWFpbi5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9tYWlu
LnB5CmluZGV4IDBkZDUwMTcuLjk1MzFiNjMgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdG9vbC9tYWluLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdG9vbC9tYWluLnB5CkBAIC00MCw2ICs0MCw3IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLm5l
dC5yaWV0dmVsZCBpbXBvcnQgUmlldHZlbGQKIGZyb20gd2Via2l0cHkuY29tbW9uLm5ldC5pcmMu
aXJjcHJveHkgaW1wb3J0IElSQ1Byb3h5CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhl
Y3V0aXZlIGltcG9ydCBFeGVjdXRpdmUKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS51c2Vy
IGltcG9ydCBVc2VyCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcG9ydAogaW1w
b3J0IHdlYmtpdHB5LnRvb2wuY29tbWFuZHMgYXMgY29tbWFuZHMKICMgRklYTUU6IFJlbW92ZSB0
aGVzZSBpbXBvcnRzIG9uY2UgYWxsIHRoZSBjb21tYW5kcyBhcmUgaW4gdGhlIHJvb3Qgb2YgdGhl
CiAjIGNvbW1hbmQgcGFja2FnZS4KQEAgLTc2LDYgKzc3LDcgQEAgY2xhc3MgV2ViS2l0UGF0Y2go
TXVsdGlDb21tYW5kVG9vbCk6CiAgICAgICAgIHNlbGYuX2NoZWNrb3V0ID0gTm9uZQogICAgICAg
ICBzZWxmLnN0YXR1c19zZXJ2ZXIgPSBTdGF0dXNTZXJ2ZXIoKQogICAgICAgICBzZWxmLmNvZGVy
ZXZpZXcgPSBSaWV0dmVsZChzZWxmLmV4ZWN1dGl2ZSkKKyAgICAgICAgc2VsZi5wb3J0X2ZhY3Rv
cnkgPSBwb3J0LmZhY3RvcnkKIAogICAgIGRlZiBzY20oc2VsZik6CiAgICAgICAgICMgTGF6aWx5
IGluaXRpYWxpemUgU0NNIHRvIG5vdCBlcnJvci1vdXQgYmVmb3JlIGNvbW1hbmQgbGluZSBwYXJz
aW5nIChvciB3aGVuIHJ1bm5pbmcgbm9uLXNjbSBjb21tYW5kcykuCmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkKaW5kZXggN2ViOGY0Yy4uZTNkMzZjZSAx
MDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9tb2NrdG9vbC5weQpAQCAt
NTU2LDYgKzU1NiwyNCBAQCBjbGFzcyBNb2NrUmlldHZlbGQoKToKICAgICAgICAgbG9nKCJNT0NL
OiBVcGxvYWRpbmcgcGF0Y2ggdG8gcmlldHZlbGQiKQogCiAKK2NsYXNzIE1vY2tUZXN0UG9ydDEo
KToKKworICAgIGRlZiBza2lwc19sYXlvdXRfdGVzdChzZWxmLCB0ZXN0X25hbWUpOgorICAgICAg
ICByZXR1cm4gdGVzdF9uYW1lIGluIFsibWVkaWEvZm9vL2Jhci5odG1sIiwgImZvbyJdCisKKwor
Y2xhc3MgTW9ja1Rlc3RQb3J0MigpOgorCisgICAgZGVmIHNraXBzX2xheW91dF90ZXN0KHNlbGYs
IHRlc3RfbmFtZSk6CisgICAgICAgIHJldHVybiB0ZXN0X25hbWUgPT0gIm1lZGlhL2Zvby9iYXIu
aHRtbCIKKworCitjbGFzcyBNb2NrUG9ydEZhY3RvcnkoKToKKworICAgIGRlZiBnZXRfYWxsKHNl
bGYsIG9wdGlvbnM9Tm9uZSk6CisgICAgICAgIHJldHVybiB7InRlc3RfcG9ydDEiOiBNb2NrVGVz
dFBvcnQxKCksICJ0ZXN0X3BvcnQyIjogTW9ja1Rlc3RQb3J0MigpfQorCisKIGNsYXNzIE1vY2tU
b29sKCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nX2V4ZWN1dGl2ZT1GYWxzZSk6CkBA
IC01NzAsNiArNTg4LDcgQEAgY2xhc3MgTW9ja1Rvb2woKToKICAgICAgICAgc2VsZi5zdGF0dXNf
c2VydmVyID0gTW9ja1N0YXR1c1NlcnZlcigpCiAgICAgICAgIHNlbGYuaXJjX3Bhc3N3b3JkID0g
Ik1PQ0sgaXJjIHBhc3N3b3JkIgogICAgICAgICBzZWxmLmNvZGVyZXZpZXcgPSBNb2NrUmlldHZl
bGQoc2VsZi5leGVjdXRpdmUpCisgICAgICAgIHNlbGYucG9ydF9mYWN0b3J5ID0gTW9ja1BvcnRG
YWN0b3J5KCkKIAogICAgIGRlZiBzY20oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9zY20K
LS0gCjEuNy4x
</data>
<flag name="review"
          id="55773"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>