<?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>67269</bug_id>
          
          <creation_ts>2011-08-31 01:04:40 -0700</creation_ts>
          <short_desc>Provides a stand alone CSSWG reftest runner which can be used internally.</short_desc>
          <delta_ts>2011-12-04 18:56:01 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>66295</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hayato Ito">hayato</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>hamaji</cc>
    
    <cc>makabi</cc>
    
    <cc>morrita</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>459501</commentid>
    <comment_count>0</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-08-31 01:04:40 -0700</bug_when>
    <thetext>Before integrating CSSWG reftests runner with new-run-webkit-test.py, I&apos;d like to have a simple CSSWG reftests runner, which just prints results of CSSWG reftests to standard output to make sure there is not a significant issue in supporting CSSWG reftests in Webkit.
That should be used internally and should not be integrated with new-run-webkit-tests yet.

After having such a CSSWG reftests runner, we&apos;ll try to integrate that to new-run-webkit-tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460170</commentid>
    <comment_count>1</comment_count>
      <attachid>105885</attachid>
    <who name="Ai Makabi">makabi</who>
    <bug_when>2011-08-31 19:24:48 -0700</bug_when>
    <thetext>Created attachment 105885
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460209</commentid>
    <comment_count>2</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-08-31 21:39:38 -0700</bug_when>
    <thetext>Ai-san,
Thank you for the patch. Let me review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460268</commentid>
    <comment_count>3</comment_count>
      <attachid>105885</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-08-31 23:54:01 -0700</bug_when>
    <thetext>Comment on attachment 105885
Patch

Thank you for the great effort, Ai-san!
That&apos;d be useful for testing reftests. I think this is a nice first step for us.
The patch looks good, but putting r- for some minor nitpicks.

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

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:27
&gt; +&quot;&quot;&quot;This module is a stand alone CSSWG reftest runner&quot;&quot;&quot;

That&apos;d be great that if you include a sample usage of this script in this module level docstring.

e.g.
Usage: &lt;path&gt;/test_csswg_reftest.py directory_which_includes_reftests_under_layouttest_directory.

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:33
&gt; +from collections import defaultdict

According to http://trac.webkit.org/wiki/PythonGuidelines, L33 should be before L30.

from collections import defaultdict
import os
import sys

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:36
&gt; +from webkitpy.layout_tests.port.base import Port

Line36 should be before Line35 (alphabetically).

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:43
&gt; +    &quot;&quot;&quot;This function is a structure of reftest file&quot;&quot;&quot;

This docstring would be &quot;A structure of reftest file&quot;, wouldn&apos;t it?  Because this is a docstring for a class, not a fucntion.

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:65
&gt; +        if reftests_dir_path in myport.test_dirs():

Could you exit early here if reftests_dir_path is not included in myport.test_dirs() so that we can reduce an indent level of the following block?

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:69
&gt; +                    absorute_path = os.path.join(root, file)

That would be &apos;absolute_path&apos;, not &apos;absorute_path&apos;.

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:73
&gt; +                    file_string = open(absorute_path).read()

Could you close an opened file explicitly?

e.g.
file = open(absolute_path)
file_string = file.read()
file.close()

Othewise, you might want to use &apos;with&apos; statement.

from __future__ import with_statement
...
with open(absolute_path) as file:
  file_string = file.read()

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:84
&gt; +        This test compares match/mismatch for rendering results of

That should be:
&quot;&quot;&quot;This test...   (No new line at the beginning.)
...
&quot;&quot;&quot;

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:90
&gt; +            input = DriverInput(test_file, 100000, None)

100000 milliseconds might be too long. Could you set it to 10000 ms?

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:99
&gt; +        for test_file in self.test_files:

Could you separate this &apos;def test(self)&apos; function into two or three functions?
For testability, it might be better to have a separate &quot;# show results&quot; function.

This is my rough idea.
1. Calculating hash images of each test file (L87 - L97). 
2. Testing matchness/mismatchess using image_hash (L99 - L106).
3. Print out results (L108 - L111).

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:119
&gt; +                print &quot;%s is running: There is no %s file.&quot; % (test_file, match_file)

This seems to be a warning/error message. So you might want to use logging module here like:

_log = logging.getLogger(__name__)
...
    _log.error(&quot;There is no match file: %s, %s&quot;, test_file, match_file)

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:127
&gt; +                print &quot;%s is running: There is no %s file.&quot; % (test_file, mismatch_file)

Same to LIne119. logging module might be useful here.

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:131
&gt; +        port = factory.get(options.platform, options)

I think port object should be created only at once.
You could create a port object in __init__(self, ...) method and reuse that in all methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460403</commentid>
    <comment_count>4</comment_count>
      <attachid>105948</attachid>
    <who name="Ai Makabi">makabi</who>
    <bug_when>2011-09-01 06:19:10 -0700</bug_when>
    <thetext>Created attachment 105948
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460405</commentid>
    <comment_count>5</comment_count>
      <attachid>105885</attachid>
    <who name="Ai Makabi">makabi</who>
    <bug_when>2011-09-01 06:21:57 -0700</bug_when>
    <thetext>Comment on attachment 105885
Patch

Thank you for the review.
I&apos;ve addressed your comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460981</commentid>
    <comment_count>6</comment_count>
      <attachid>105948</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-09-01 18:15:57 -0700</bug_when>
    <thetext>Comment on attachment 105948
Patch

Hi Ai-san. Thank you for addressing comments!
Could you address some minor comments again? Sorry for the back and forth.

I don&apos;t think we need a comprehensive unittest for this type of script because this test runner can be used only internally.
So we could land this patch after you addressing minor comments and Hamaji-san reviews and give r+ to a next patch. 


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

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:72
&gt; +            return

Could you remove this line? We don&apos;t need &apos;return&apos; here.

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:101
&gt; +                self.test_files[test_file].crash = True

You might want to replace L100-101 with one line as:
    self.test_files[test_file].crash = output.crash

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:137
&gt; +            if self.test_files[test_file].crash:

Could you print a message to notify a crash?
like:
   print &quot;test_file: %s is crashed.&quot; % test_file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460990</commentid>
    <comment_count>7</comment_count>
      <attachid>106077</attachid>
    <who name="Ai Makabi">makabi</who>
    <bug_when>2011-09-01 18:31:44 -0700</bug_when>
    <thetext>Created attachment 106077
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460998</commentid>
    <comment_count>8</comment_count>
    <who name="Ai Makabi">makabi</who>
    <bug_when>2011-09-01 18:40:17 -0700</bug_when>
    <thetext>Thank you for the review again.
I&apos;ve addressed your comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461017</commentid>
    <comment_count>9</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-09-01 19:48:13 -0700</bug_when>
    <thetext>Looks good. Thank you!

Hamaji-san, could you take a look at the patch? If that&apos;s okay, your r+ is highly welcome!

(In reply to comment #8)
&gt; Thank you for the review again.
&gt; I&apos;ve addressed your comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469963</commentid>
    <comment_count>10</comment_count>
      <attachid>106077</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2011-09-20 02:18:54 -0700</bug_when>
    <thetext>Comment on attachment 106077
Patch

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

Sorry for the big latency... I somehow missed this patch. I think this patch needs some works for readability.

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:47
&gt; +    def __init__(self):

We might need documentation for each fields. Especially, we might need to explain the key and values of result_* fields.

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:56
&gt; +class TestCSSWGReftest():

We might need a docstring which describes how to use this class.

BTW, is this the best name for this class? I&apos;d call this CSSWGReftestRunner or something like this, but I&apos;m not sure.

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:62
&gt; +    def make_reftest_file_data(self, reftests_dir_path):

Cannot we move the code from this function to __init__ ?

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:63
&gt; +        &quot;&quot;&quot;Given a reftests directory, makes a dictionary

I think the summary in a docstring should be a single line. Maybe something like:

&quot;&quot;&quot;Initializes this object with the given reftests directory.

More descriptions about self.test_files...

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:71
&gt; +            raise AssertionError(&quot;Put %s in the %s&quot; % (reftests_dir_path, myport.layout_tests_dir()))

I think raising AssertionError in this way isn&apos;t a good idea... But I&apos;ve found there are some code which manually raise AssertionError. Hmm...

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:76
&gt; +                absolute_path = os.path.join(root, file)

I think this path isn&apos;t an absolute path, right? Maybe path_from_root and path_from_testdir (or test_name?) or something like them?

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:90
&gt; +        &quot;&quot;&quot;This test compares match/mismatch for rendering results of

Runs tests and prints the results?

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:107
&gt; +    def _compare_match_mismatch(self):

How about check_results?

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:111
&gt; +            test_file_hash = self.test_files[test_file].image_hash

How about actual_hash?

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:112
&gt; +            if self.test_files[test_file].matches:

Do we need this if?

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:113
&gt; +                self._is_matching(test_file, test_file_hash)

How about passing test_files[test_file] instead of test_file. There are many &quot;test_files[test_file]&quot; in is_matching.

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:117
&gt; +    def _is_matching(self, test_file, test_file_hash):

&quot;is_matching&quot; sounds like a boolean function and this function should not have a side-effect. How about check_matching?

&gt; Tools/Scripts/webkitpy/layout_tests/reftests/test_csswg_reftest.py:123
&gt; +                _log.error(&quot;There is no match file: %s, %s&quot;, test_file, match_file)

It is unclear which file doesn&apos;t exist. How about

(&quot;Match file %s not found for %s&quot;, match_file, test_file)

?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513417</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-01 19:55:50 -0800</bug_when>
    <thetext>I&apos;m confused. What is the goal of this tool?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514831</commentid>
    <comment_count>12</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-12-04 18:56:01 -0800</bug_when>
    <thetext>Because there seems to be no significant reason to land this, I marked it WONTFIX.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105885</attachid>
            <date>2011-08-31 19:24:48 -0700</date>
            <delta_ts>2011-09-01 06:21:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67269-20110901112446.patch</filename>
            <type>text/plain</type>
            <size>7344</size>
            <attacher name="Ai Makabi">makabi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQxODIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxYjliYzJlYmMxMTg4ZDJjZTViZjhkMjUyNmZmMmFhOGZm
MmNjOGZjLi42MTYwY2ZkMTc2Y2NlYjhhOWE4MzZjMTQ1NWY1NDhjMjQ4ZmJkODM3IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTQg
QEAKIDIwMTEtMDgtMzEgIEFpIE1ha2FiaSAgPG1ha2FiaUBnb29nbGUuY29tPgogCisgICAgICAg
IFByb3ZpZGVzIGEgc3RhbmQgYWxvbmUgQ1NTV0cgcmVmdGVzdCBydW5uZXIgd2hpY2ggY2FuIGJl
IHVzZWQgaW50ZXJuYWxseS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY3MjY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWZ0ZXN0cy90ZXN0X2Nz
c3dnX3JlZnRlc3QucHk6IEFkZGVkLgorCisyMDExLTA4LTMxICBBaSBNYWthYmkgIDxtYWthYmlA
Z29vZ2xlLmNvbT4KKwogICAgICAgICBFeHRyYWN0IHJlZmVyZW5jZSBsaW5rcyBmcm9tIHJlZnRl
c3QgdGVzdCBmaWxlLgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjY4MzgKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcmVmdGVzdHMvdGVzdF9jc3N3Z19yZWZ0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcmVmdGVzdHMvdGVzdF9jc3N3Z19yZWZ0ZXN0LnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjcxOGM5ZDFlYzQ0NTk5MTg0MjM4YmFiY2M5YWIwZmQ1NDQyMWJlYjEKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWZ0ZXN0cy90ZXN0
X2Nzc3dnX3JlZnRlc3QucHkKQEAgLTAsMCArMSwxNDQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhv
bgorIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlv
bi4KKworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIi
IlRoaXMgbW9kdWxlIGlzIGEgc3RhbmQgYWxvbmUgQ1NTV0cgcmVmdGVzdCBydW5uZXIiIiIKKwor
CitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVs
dGRpY3QKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5kcml2ZXIgaW1wb3J0IERy
aXZlcklucHV0Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmJhc2UgaW1wb3J0IFBv
cnQKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGZhY3RvcnkKK2Zyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBydW5fd2Via2l0X3Rlc3RzCitmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy5yZWZ0ZXN0cyBpbXBvcnQgZXh0cmFjdF9yZWZlcmVuY2VfbGluayBh
cyBleHRyYWN0b3IKKworCitjbGFzcyBSZWZ0ZXN0RmlsZURhdGEoKToKKyAgICAiIiJUaGlzIGZ1
bmN0aW9uIGlzIGEgc3RydWN0dXJlIG9mIHJlZnRlc3QgZmlsZSIiIgorICAgIGRlZiBfX2luaXRf
XyhzZWxmKToKKyAgICAgICAgc2VsZi5pbWFnZV9oYXNoID0gIiIKKyAgICAgICAgc2VsZi5tYXRj
aGVzID0gW10KKyAgICAgICAgc2VsZi5taXNtYXRjaGVzID0gW10KKyAgICAgICAgc2VsZi5yZXN1
bHRfbWF0Y2hlcyA9IHt9CisgICAgICAgIHNlbGYucmVzdWx0X21pc21hdGNoZXMgPSB7fQorICAg
ICAgICBzZWxmLmNyYXNoID0gRmFsc2UKKworCitjbGFzcyBUZXN0Q1NTV0dSZWZ0ZXN0KCk6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnRlc3RfZmlsZXMgPSBkZWZhdWx0
ZGljdChSZWZ0ZXN0RmlsZURhdGEpCisKKyAgICBkZWYgbWFrZV9yZWZ0ZXN0X2ZpbGVfZGF0YShz
ZWxmLCByZWZ0ZXN0c19kaXJfcGF0aCk6CisgICAgICAgICIiIkdpdmVuIGEgcmVmdGVzdHMgZGly
ZWN0b3J5LCBtYWtlcyBhIGRpY3Rpb25hcnkKKyAgICAgICAgd2hpY2ggZm9sbG93IFJlZnRlc3RG
aWxlRGF0ZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcmVmdGVzdHNfZGlyX3BhdGg6
IGEgcmVsYXRpdmUgcGF0aCBvZiByZWZ0ZXN0cyBkaXJlY3RvcnkuCisgICAgICAgICIiIgorICAg
ICAgICBteXBvcnQgPSBQb3J0KCkKKyAgICAgICAgaWYgcmVmdGVzdHNfZGlyX3BhdGggaW4gbXlw
b3J0LnRlc3RfZGlycygpOgorICAgICAgICAgICAgUk9PVF9QQVRIID0gb3MucGF0aC5qb2luKG15
cG9ydC5sYXlvdXRfdGVzdHNfZGlyKCksIHJlZnRlc3RzX2Rpcl9wYXRoKQorICAgICAgICAgICAg
Zm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoUk9PVF9QQVRIKToKKyAgICAgICAgICAg
ICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgYWJzb3J1dGVfcGF0
aCA9IG9zLnBhdGguam9pbihyb290LCBmaWxlKQorICAgICAgICAgICAgICAgICAgICByZWxhdGl2
ZV9wYXRoID0gbXlwb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoYWJzb3J1dGVfcGF0aCkKKwor
ICAgICAgICAgICAgICAgICAgICAjIEV4dHJhY3QgbWF0Y2hlcyBhbmQgbWlzbWF0Y2hlcyBmcm9t
IEhUTUwgc3RyaW5nLgorICAgICAgICAgICAgICAgICAgICBmaWxlX3N0cmluZyA9IG9wZW4oYWJz
b3J1dGVfcGF0aCkucmVhZCgpCisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMsIG1pc21hdGNo
ZXMgPSBleHRyYWN0b3IuZ2V0X3JlZmVyZW5jZV9saW5rKGZpbGVfc3RyaW5nKQorICAgICAgICAg
ICAgICAgICAgICBtYXRjaGVzID0gW215cG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKG9zLnBh
dGguam9pbihyb290LCBtYXRjaCkpIGZvciBtYXRjaCBpbiBtYXRjaGVzXQorICAgICAgICAgICAg
ICAgICAgICBtaXNtYXRjaGVzID0gW215cG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKG9zLnBh
dGguam9pbihyb290LCBtaXNtYXRjaCkpIGZvciBtaXNtYXRjaCBpbiBtaXNtYXRjaGVzXQorICAg
ICAgICAgICAgICAgICAgICBzZWxmLnRlc3RfZmlsZXNbcmVsYXRpdmVfcGF0aF0ubWF0Y2hlcyA9
IG1hdGNoZXMKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0X2ZpbGVzW3JlbGF0aXZlX3Bh
dGhdLm1pc21hdGNoZXMgPSBtaXNtYXRjaGVzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBy
YWlzZSBBc3NlcnRpb25FcnJvcigiUHV0ICVzIGluIHRoZSAlcyIgJSAocmVmdGVzdHNfZGlyX3Bh
dGgsIG15cG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkpKQorCisgICAgZGVmIHRlc3Qoc2VsZik6Cisg
ICAgICAgICIiIgorICAgICAgICBUaGlzIHRlc3QgY29tcGFyZXMgbWF0Y2gvbWlzbWF0Y2ggZm9y
IHJlbmRlcmluZyByZXN1bHRzIG9mCisgICAgICAgIHJlZnRlc3QgZmlsZXMuCisgICAgICAgICIi
IgorICAgICAgICBkcml2ZXIgPSBzZWxmLl9jcmVhdGVfZHJpdmVyKCkKKyAgICAgICAgZHJpdmVy
LnN0YXJ0KCkKKyAgICAgICAgZm9yIHRlc3RfZmlsZSBpbiBzZWxmLnRlc3RfZmlsZXM6CisgICAg
ICAgICAgICBpbnB1dCA9IERyaXZlcklucHV0KHRlc3RfZmlsZSwgMTAwMDAwLCBOb25lKQorICAg
ICAgICAgICAgb3V0cHV0ID0gZHJpdmVyLnJ1bl90ZXN0KGlucHV0KQorICAgICAgICAgICAgc2Vs
Zi50ZXN0X2ZpbGVzW3Rlc3RfZmlsZV0uaW1hZ2VfaGFzaCA9IG91dHB1dC5pbWFnZV9oYXNoCisg
ICAgICAgICAgICBpZiBvdXRwdXQuY3Jhc2g6CisgICAgICAgICAgICAgICAgc2VsZi50ZXN0X2Zp
bGVzW3Rlc3RfZmlsZV0uY3Jhc2ggPSBUcnVlCisgICAgICAgICAgICBpZiBkcml2ZXIucG9sbCgp
OgorICAgICAgICAgICAgICAgIGRyaXZlciA9IHNlbGYuX2NyZWF0ZV9kcml2ZXIoKQorICAgICAg
ICAgICAgICAgIGRyaXZlci5zdGFydCgpCisKKyAgICAgICAgZm9yIHRlc3RfZmlsZSBpbiBzZWxm
LnRlc3RfZmlsZXM6CisgICAgICAgICAgICBpZiBzZWxmLnRlc3RfZmlsZXNbdGVzdF9maWxlXS5j
cmFzaDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdGVzdF9maWxlX2hh
c2ggPSBzZWxmLnRlc3RfZmlsZXNbdGVzdF9maWxlXS5pbWFnZV9oYXNoCisgICAgICAgICAgICBp
ZiBzZWxmLnRlc3RfZmlsZXNbdGVzdF9maWxlXS5tYXRjaGVzOgorICAgICAgICAgICAgICAgIHNl
bGYuX2lzX21hdGNoaW5nKHRlc3RfZmlsZSwgdGVzdF9maWxlX2hhc2gpCisgICAgICAgICAgICBp
ZiBzZWxmLnRlc3RfZmlsZXNbdGVzdF9maWxlXS5taXNtYXRjaGVzOgorICAgICAgICAgICAgICAg
IHNlbGYuX2lzX21pc21hdGNoaW5nKHRlc3RfZmlsZSwgdGVzdF9maWxlX2hhc2gpCisKKyAgICAg
ICAgICAgICMgc2hvdyByZXN1bHRzCisgICAgICAgICAgICBwcmludCAidGVzdF9maWxlOiAlciIg
JSB0ZXN0X2ZpbGUKKyAgICAgICAgICAgIHByaW50ICJtaXNtYXRjaDogJXIiICUgbXl0ZXN0LnRl
c3RfZmlsZXNbdGVzdF9maWxlXS5yZXN1bHRfbWlzbWF0Y2hlcworICAgICAgICAgICAgcHJpbnQg
Im1hdGNoOiAlciIgJSBteXRlc3QudGVzdF9maWxlc1t0ZXN0X2ZpbGVdLnJlc3VsdF9tYXRjaGVz
CisKKyAgICBkZWYgX2lzX21hdGNoaW5nKHNlbGYsIHRlc3RfZmlsZSwgdGVzdF9maWxlX2hhc2gp
OgorICAgICAgICBmb3IgbWF0Y2hfZmlsZSBpbiBzZWxmLnRlc3RfZmlsZXNbdGVzdF9maWxlXS5t
YXRjaGVzOgorICAgICAgICAgICAgaWYgbWF0Y2hfZmlsZSBpbiBzZWxmLnRlc3RfZmlsZXM6Cisg
ICAgICAgICAgICAgICAgc2VsZi50ZXN0X2ZpbGVzW3Rlc3RfZmlsZV0ucmVzdWx0X21hdGNoZXNb
bWF0Y2hfZmlsZV0gPSBcCisgICAgICAgICAgICAgICAgICAgIHRlc3RfZmlsZV9oYXNoID09IHNl
bGYudGVzdF9maWxlc1ttYXRjaF9maWxlXS5pbWFnZV9oYXNoCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIHByaW50ICIlcyBpcyBydW5uaW5nOiBUaGVyZSBpcyBubyAlcyBmaWxl
LiIgJSAodGVzdF9maWxlLCBtYXRjaF9maWxlKQorCisgICAgZGVmIF9pc19taXNtYXRjaGluZyhz
ZWxmLCB0ZXN0X2ZpbGUsIHRlc3RfZmlsZV9oYXNoKToKKyAgICAgICAgZm9yIG1pc21hdGNoX2Zp
bGUgaW4gc2VsZi50ZXN0X2ZpbGVzW3Rlc3RfZmlsZV0ubWlzbWF0Y2hlczoKKyAgICAgICAgICAg
IGlmIG1pc21hdGNoX2ZpbGUgaW4gc2VsZi50ZXN0X2ZpbGVzOgorICAgICAgICAgICAgICAgIHNl
bGYudGVzdF9maWxlc1t0ZXN0X2ZpbGVdLnJlc3VsdF9taXNtYXRjaGVzW21pc21hdGNoX2ZpbGVd
ID0gXAorICAgICAgICAgICAgICAgICAgICB0ZXN0X2ZpbGVfaGFzaCAhPSBzZWxmLnRlc3RfZmls
ZXNbbWlzbWF0Y2hfZmlsZV0uaW1hZ2VfaGFzaAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICBwcmludCAiJXMgaXMgcnVubmluZzogVGhlcmUgaXMgbm8gJXMgZmlsZS4iICUgKHRl
c3RfZmlsZSwgbWlzbWF0Y2hfZmlsZSkKKworICAgIGRlZiBfY3JlYXRlX2RyaXZlcihzZWxmKToK
KyAgICAgICAgb3B0aW9ucywgYXJncyA9IHJ1bl93ZWJraXRfdGVzdHMucGFyc2VfYXJncyhbJy0t
ZGVidWcnLCAnLS1waXhlbC10ZXN0cyddKQorICAgICAgICBwb3J0ID0gZmFjdG9yeS5nZXQob3B0
aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucykKKyAgICAgICAgZHVtbXlfd29ya2VyX251bWJlciA9IDAK
KyAgICAgICAgZHJpdmVyID0gcG9ydC5jcmVhdGVfZHJpdmVyKGR1bW15X3dvcmtlcl9udW1iZXIp
CisgICAgICAgIHJldHVybiBkcml2ZXIKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgor
ICAgIG15dGVzdCA9IFRlc3RDU1NXR1JlZnRlc3QoKQorICAgIGFyZ3ZzID0gc3lzLmFyZ3YKKyAg
ICBpZiBsZW4oYXJndnMpICE9IDI6CisgICAgICAgIHByaW50ICJHaXZlIHRoZSBkaXJlY3Rvcnkg
cGF0aCBhcyBhbiBhcmd1bWVudC4iCisgICAgZWxzZToKKyAgICAgICAgbXl0ZXN0Lm1ha2VfcmVm
dGVzdF9maWxlX2RhdGEoYXJndnNbMV0pCisgICAgICAgIG15dGVzdC50ZXN0KCkK
</data>
<flag name="review"
          id="102253"
          type_id="1"
          status="-"
          setter="makabi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105948</attachid>
            <date>2011-09-01 06:19:10 -0700</date>
            <delta_ts>2011-09-01 18:31:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67269-20110901221908.patch</filename>
            <type>text/plain</type>
            <size>7763</size>
            <attacher name="Ai Makabi">makabi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQxODIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxYjliYzJlYmMxMTg4ZDJjZTViZjhkMjUyNmZmMmFhOGZm
MmNjOGZjLi42MTYwY2ZkMTc2Y2NlYjhhOWE4MzZjMTQ1NWY1NDhjMjQ4ZmJkODM3IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTQg
QEAKIDIwMTEtMDgtMzEgIEFpIE1ha2FiaSAgPG1ha2FiaUBnb29nbGUuY29tPgogCisgICAgICAg
IFByb3ZpZGVzIGEgc3RhbmQgYWxvbmUgQ1NTV0cgcmVmdGVzdCBydW5uZXIgd2hpY2ggY2FuIGJl
IHVzZWQgaW50ZXJuYWxseS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY3MjY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWZ0ZXN0cy90ZXN0X2Nz
c3dnX3JlZnRlc3QucHk6IEFkZGVkLgorCisyMDExLTA4LTMxICBBaSBNYWthYmkgIDxtYWthYmlA
Z29vZ2xlLmNvbT4KKwogICAgICAgICBFeHRyYWN0IHJlZmVyZW5jZSBsaW5rcyBmcm9tIHJlZnRl
c3QgdGVzdCBmaWxlLgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjY4MzgKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcmVmdGVzdHMvdGVzdF9jc3N3Z19yZWZ0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcmVmdGVzdHMvdGVzdF9jc3N3Z19yZWZ0ZXN0LnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjY3NGI5ZmU2YzkxOTMxOTc4ZTgxMzE1M2ZhOGYyM2U1YjVmOTBmMTkKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWZ0ZXN0cy90ZXN0
X2Nzc3dnX3JlZnRlc3QucHkKQEAgLTAsMCArMSwxNTYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhv
bgorIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlv
bi4KKworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIi
IlRoaXMgbW9kdWxlIGlzIGEgc3RhbmQgYWxvbmUgQ1NTV0cgcmVmdGVzdCBydW5uZXIKK1VzYWdl
OiA8cGF0aD4vdGVzdF9jc3N3Z19yZWZ0ZXN0LnB5IGRpcmVjdG9yeV93aGljaF9pbmNsdWRlc19y
ZWZ0ZXN0c191bmRlcl9sYXlvdXR0ZXN0X2RpcmVjdG9yeQorIiIiCisKK2Zyb20gY29sbGVjdGlv
bnMgaW1wb3J0IGRlZmF1bHRkaWN0CitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBsb2d1dGlscworZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMucG9ydC5iYXNlIGltcG9ydCBQb3J0Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5w
b3J0LmRyaXZlciBpbXBvcnQgRHJpdmVySW5wdXQKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LnBvcnQgaW1wb3J0IGZhY3RvcnkKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBy
dW5fd2Via2l0X3Rlc3RzCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5yZWZ0ZXN0cyBpbXBv
cnQgZXh0cmFjdF9yZWZlcmVuY2VfbGluayBhcyBleHRyYWN0b3IKKworX2xvZyA9IGxvZ3V0aWxz
LmdldF9sb2dnZXIoX19maWxlX18pCisKKworY2xhc3MgUmVmdGVzdEZpbGVEYXRhKCk6CisgICAg
IiIiQSBzdHJ1Y3R1cmUgb2YgcmVmdGVzdCBmaWxlIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYp
OgorICAgICAgICBzZWxmLmltYWdlX2hhc2ggPSAiIgorICAgICAgICBzZWxmLm1hdGNoZXMgPSBb
XQorICAgICAgICBzZWxmLm1pc21hdGNoZXMgPSBbXQorICAgICAgICBzZWxmLnJlc3VsdF9tYXRj
aGVzID0ge30KKyAgICAgICAgc2VsZi5yZXN1bHRfbWlzbWF0Y2hlcyA9IHt9CisgICAgICAgIHNl
bGYuY3Jhc2ggPSBGYWxzZQorCisKK2NsYXNzIFRlc3RDU1NXR1JlZnRlc3QoKToKKyAgICBkZWYg
X19pbml0X18oc2VsZik6CisgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBydW5fd2Via2l0X3Rlc3Rz
LnBhcnNlX2FyZ3MoWyctLWRlYnVnJywgJy0tcGl4ZWwtdGVzdHMnXSkKKyAgICAgICAgc2VsZi5w
b3J0ID0gZmFjdG9yeS5nZXQob3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucykKKyAgICAgICAgc2Vs
Zi50ZXN0X2ZpbGVzID0gZGVmYXVsdGRpY3QoUmVmdGVzdEZpbGVEYXRhKQorCisgICAgZGVmIG1h
a2VfcmVmdGVzdF9maWxlX2RhdGEoc2VsZiwgcmVmdGVzdHNfZGlyX3BhdGgpOgorICAgICAgICAi
IiJHaXZlbiBhIHJlZnRlc3RzIGRpcmVjdG9yeSwgbWFrZXMgYSBkaWN0aW9uYXJ5CisgICAgICAg
IHdoaWNoIGZvbGxvdyBSZWZ0ZXN0RmlsZURhdGUuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAg
ICAgIHJlZnRlc3RzX2Rpcl9wYXRoOiBhIHJlbGF0aXZlIHBhdGggb2YgcmVmdGVzdHMgZGlyZWN0
b3J5LgorICAgICAgICAiIiIKKyAgICAgICAgbXlwb3J0ID0gUG9ydCgpCisgICAgICAgIGlmIG5v
dCByZWZ0ZXN0c19kaXJfcGF0aCBpbiBteXBvcnQudGVzdF9kaXJzKCk6CisgICAgICAgICAgICBy
YWlzZSBBc3NlcnRpb25FcnJvcigiUHV0ICVzIGluIHRoZSAlcyIgJSAocmVmdGVzdHNfZGlyX3Bh
dGgsIG15cG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkpKQorICAgICAgICAgICAgcmV0dXJuCisKKyAg
ICAgICAgUk9PVF9QQVRIID0gb3MucGF0aC5qb2luKG15cG9ydC5sYXlvdXRfdGVzdHNfZGlyKCks
IHJlZnRlc3RzX2Rpcl9wYXRoKQorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mu
d2FsayhST09UX1BBVEgpOgorICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAg
ICAgICAgICAgYWJzb2x1dGVfcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBmaWxlKQorICAgICAg
ICAgICAgICAgIHJlbGF0aXZlX3BhdGggPSBteXBvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShh
YnNvbHV0ZV9wYXRoKQorCisgICAgICAgICAgICAgICAgIyBFeHRyYWN0IG1hdGNoZXMgYW5kIG1p
c21hdGNoZXMgZnJvbSBIVE1MIHN0cmluZy4KKyAgICAgICAgICAgICAgICBmaWxlID0gb3Blbihh
YnNvbHV0ZV9wYXRoKQorICAgICAgICAgICAgICAgIGZpbGVfc3RyaW5nID0gZmlsZS5yZWFkKCkK
KyAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBtYXRjaGVzLCBt
aXNtYXRjaGVzID0gZXh0cmFjdG9yLmdldF9yZWZlcmVuY2VfbGluayhmaWxlX3N0cmluZykKKyAg
ICAgICAgICAgICAgICBtYXRjaGVzID0gW215cG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKG9z
LnBhdGguam9pbihyb290LCBtYXRjaCkpIGZvciBtYXRjaCBpbiBtYXRjaGVzXQorICAgICAgICAg
ICAgICAgIG1pc21hdGNoZXMgPSBbbXlwb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUob3MucGF0
aC5qb2luKHJvb3QsIG1pc21hdGNoKSkgZm9yIG1pc21hdGNoIGluIG1pc21hdGNoZXNdCisgICAg
ICAgICAgICAgICAgc2VsZi50ZXN0X2ZpbGVzW3JlbGF0aXZlX3BhdGhdLm1hdGNoZXMgPSBtYXRj
aGVzCisgICAgICAgICAgICAgICAgc2VsZi50ZXN0X2ZpbGVzW3JlbGF0aXZlX3BhdGhdLm1pc21h
dGNoZXMgPSBtaXNtYXRjaGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgIiIiVGhp
cyB0ZXN0IGNvbXBhcmVzIG1hdGNoL21pc21hdGNoIGZvciByZW5kZXJpbmcgcmVzdWx0cyBvZgor
ICAgICAgICByZWZ0ZXN0IGZpbGVzLgorICAgICAgICAiIiIKKyAgICAgICAgZHJpdmVyID0gc2Vs
Zi5fY3JlYXRlX2RyaXZlcigpCisgICAgICAgIGRyaXZlci5zdGFydCgpCisgICAgICAgIGZvciB0
ZXN0X2ZpbGUgaW4gc2VsZi50ZXN0X2ZpbGVzOgorICAgICAgICAgICAgaW5wdXQgPSBEcml2ZXJJ
bnB1dCh0ZXN0X2ZpbGUsIDEwMDAwLCBOb25lKQorICAgICAgICAgICAgb3V0cHV0ID0gZHJpdmVy
LnJ1bl90ZXN0KGlucHV0KQorICAgICAgICAgICAgc2VsZi50ZXN0X2ZpbGVzW3Rlc3RfZmlsZV0u
aW1hZ2VfaGFzaCA9IG91dHB1dC5pbWFnZV9oYXNoCisgICAgICAgICAgICBpZiBvdXRwdXQuY3Jh
c2g6CisgICAgICAgICAgICAgICAgc2VsZi50ZXN0X2ZpbGVzW3Rlc3RfZmlsZV0uY3Jhc2ggPSBU
cnVlCisgICAgICAgICAgICBpZiBkcml2ZXIucG9sbCgpOgorICAgICAgICAgICAgICAgIGRyaXZl
ciA9IHNlbGYuX2NyZWF0ZV9kcml2ZXIoKQorICAgICAgICAgICAgICAgIGRyaXZlci5zdGFydCgp
CisKKyAgICAgICAgc2VsZi5fY29tcGFyZV9tYXRjaF9taXNtYXRjaCgpCisgICAgICAgIHNlbGYu
X3ByaW50X3Jlc3VsdHMoKQorCisgICAgZGVmIF9jb21wYXJlX21hdGNoX21pc21hdGNoKHNlbGYp
OgorICAgICAgICBmb3IgdGVzdF9maWxlIGluIHNlbGYudGVzdF9maWxlczoKKyAgICAgICAgICAg
IGlmIHNlbGYudGVzdF9maWxlc1t0ZXN0X2ZpbGVdLmNyYXNoOgorICAgICAgICAgICAgICAgIGNv
bnRpbnVlCisgICAgICAgICAgICB0ZXN0X2ZpbGVfaGFzaCA9IHNlbGYudGVzdF9maWxlc1t0ZXN0
X2ZpbGVdLmltYWdlX2hhc2gKKyAgICAgICAgICAgIGlmIHNlbGYudGVzdF9maWxlc1t0ZXN0X2Zp
bGVdLm1hdGNoZXM6CisgICAgICAgICAgICAgICAgc2VsZi5faXNfbWF0Y2hpbmcodGVzdF9maWxl
LCB0ZXN0X2ZpbGVfaGFzaCkKKyAgICAgICAgICAgIGlmIHNlbGYudGVzdF9maWxlc1t0ZXN0X2Zp
bGVdLm1pc21hdGNoZXM6CisgICAgICAgICAgICAgICAgc2VsZi5faXNfbWlzbWF0Y2hpbmcodGVz
dF9maWxlLCB0ZXN0X2ZpbGVfaGFzaCkKKworICAgIGRlZiBfaXNfbWF0Y2hpbmcoc2VsZiwgdGVz
dF9maWxlLCB0ZXN0X2ZpbGVfaGFzaCk6CisgICAgICAgIGZvciBtYXRjaF9maWxlIGluIHNlbGYu
dGVzdF9maWxlc1t0ZXN0X2ZpbGVdLm1hdGNoZXM6CisgICAgICAgICAgICBpZiBtYXRjaF9maWxl
IGluIHNlbGYudGVzdF9maWxlczoKKyAgICAgICAgICAgICAgICBzZWxmLnRlc3RfZmlsZXNbdGVz
dF9maWxlXS5yZXN1bHRfbWF0Y2hlc1ttYXRjaF9maWxlXSA9IFwKKyAgICAgICAgICAgICAgICAg
ICAgdGVzdF9maWxlX2hhc2ggPT0gc2VsZi50ZXN0X2ZpbGVzW21hdGNoX2ZpbGVdLmltYWdlX2hh
c2gKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgX2xvZy5lcnJvcigiVGhlcmUg
aXMgbm8gbWF0Y2ggZmlsZTogJXMsICVzIiwgdGVzdF9maWxlLCBtYXRjaF9maWxlKQorCisgICAg
ZGVmIF9pc19taXNtYXRjaGluZyhzZWxmLCB0ZXN0X2ZpbGUsIHRlc3RfZmlsZV9oYXNoKToKKyAg
ICAgICAgZm9yIG1pc21hdGNoX2ZpbGUgaW4gc2VsZi50ZXN0X2ZpbGVzW3Rlc3RfZmlsZV0ubWlz
bWF0Y2hlczoKKyAgICAgICAgICAgIGlmIG1pc21hdGNoX2ZpbGUgaW4gc2VsZi50ZXN0X2ZpbGVz
OgorICAgICAgICAgICAgICAgIHNlbGYudGVzdF9maWxlc1t0ZXN0X2ZpbGVdLnJlc3VsdF9taXNt
YXRjaGVzW21pc21hdGNoX2ZpbGVdID0gXAorICAgICAgICAgICAgICAgICAgICB0ZXN0X2ZpbGVf
aGFzaCAhPSBzZWxmLnRlc3RfZmlsZXNbbWlzbWF0Y2hfZmlsZV0uaW1hZ2VfaGFzaAorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCJUaGVyZSBpcyBubyBtaXNt
YXRjaCBmaWxlOiAlcywgJXMiLCB0ZXN0X2ZpbGUsIG1pc21hdGNoX2ZpbGUpCisKKyAgICBkZWYg
X3ByaW50X3Jlc3VsdHMoc2VsZik6CisgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gc2VsZi50ZXN0
X2ZpbGVzOgorICAgICAgICAgICAgaWYgc2VsZi50ZXN0X2ZpbGVzW3Rlc3RfZmlsZV0uY3Jhc2g6
CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHByaW50ICJ0ZXN0X2ZpbGU6
ICVyIiAlIHRlc3RfZmlsZQorICAgICAgICAgICAgcHJpbnQgIm1pc21hdGNoOiAlciIgJSBteXRl
c3QudGVzdF9maWxlc1t0ZXN0X2ZpbGVdLnJlc3VsdF9taXNtYXRjaGVzCisgICAgICAgICAgICBw
cmludCAibWF0Y2g6ICVyIiAlIG15dGVzdC50ZXN0X2ZpbGVzW3Rlc3RfZmlsZV0ucmVzdWx0X21h
dGNoZXMKKworICAgIGRlZiBfY3JlYXRlX2RyaXZlcihzZWxmKToKKyAgICAgICAgZHVtbXlfd29y
a2VyX251bWJlciA9IDAKKyAgICAgICAgZHJpdmVyID0gc2VsZi5wb3J0LmNyZWF0ZV9kcml2ZXIo
ZHVtbXlfd29ya2VyX251bWJlcikKKyAgICAgICAgcmV0dXJuIGRyaXZlcgorCisKK2lmIF9fbmFt
ZV9fID09ICJfX21haW5fXyI6CisgICAgbXl0ZXN0ID0gVGVzdENTU1dHUmVmdGVzdCgpCisgICAg
YXJndnMgPSBzeXMuYXJndgorICAgIGlmIGxlbihhcmd2cykgIT0gMjoKKyAgICAgICAgcHJpbnQg
IkdpdmUgdGhlIGRpcmVjdG9yeSBwYXRoIGFzIGFuIGFyZ3VtZW50LiIKKyAgICBlbHNlOgorICAg
ICAgICBteXRlc3QubWFrZV9yZWZ0ZXN0X2ZpbGVfZGF0YShhcmd2c1sxXSkKKyAgICAgICAgbXl0
ZXN0LnRlc3QoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106077</attachid>
            <date>2011-09-01 18:31:44 -0700</date>
            <delta_ts>2011-09-20 02:18:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67269-20110902103142.patch</filename>
            <type>text/plain</type>
            <size>7780</size>
            <attacher name="Ai Makabi">makabi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQxODIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxYjliYzJlYmMxMTg4ZDJjZTViZjhkMjUyNmZmMmFhOGZm
MmNjOGZjLi42MTYwY2ZkMTc2Y2NlYjhhOWE4MzZjMTQ1NWY1NDhjMjQ4ZmJkODM3IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTQg
QEAKIDIwMTEtMDgtMzEgIEFpIE1ha2FiaSAgPG1ha2FiaUBnb29nbGUuY29tPgogCisgICAgICAg
IFByb3ZpZGVzIGEgc3RhbmQgYWxvbmUgQ1NTV0cgcmVmdGVzdCBydW5uZXIgd2hpY2ggY2FuIGJl
IHVzZWQgaW50ZXJuYWxseS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY3MjY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWZ0ZXN0cy90ZXN0X2Nz
c3dnX3JlZnRlc3QucHk6IEFkZGVkLgorCisyMDExLTA4LTMxICBBaSBNYWthYmkgIDxtYWthYmlA
Z29vZ2xlLmNvbT4KKwogICAgICAgICBFeHRyYWN0IHJlZmVyZW5jZSBsaW5rcyBmcm9tIHJlZnRl
c3QgdGVzdCBmaWxlLgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjY4MzgKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcmVmdGVzdHMvdGVzdF9jc3N3Z19yZWZ0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcmVmdGVzdHMvdGVzdF9jc3N3Z19yZWZ0ZXN0LnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjExMjIwNzhhMTVlYTA2NzEyNTJiZDkyNjFiYjZmYmI0Y2IzZWM3OTYKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWZ0ZXN0cy90ZXN0
X2Nzc3dnX3JlZnRlc3QucHkKQEAgLTAsMCArMSwxNTUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhv
bgorIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlv
bi4KKworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIi
IlRoaXMgbW9kdWxlIGlzIGEgc3RhbmQgYWxvbmUgQ1NTV0cgcmVmdGVzdCBydW5uZXIKK1VzYWdl
OiA8cGF0aD4vdGVzdF9jc3N3Z19yZWZ0ZXN0LnB5IGRpcmVjdG9yeV93aGljaF9pbmNsdWRlc19y
ZWZ0ZXN0c191bmRlcl9sYXlvdXR0ZXN0X2RpcmVjdG9yeQorIiIiCisKK2Zyb20gY29sbGVjdGlv
bnMgaW1wb3J0IGRlZmF1bHRkaWN0CitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBsb2d1dGlscworZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMucG9ydC5iYXNlIGltcG9ydCBQb3J0Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5w
b3J0LmRyaXZlciBpbXBvcnQgRHJpdmVySW5wdXQKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LnBvcnQgaW1wb3J0IGZhY3RvcnkKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBy
dW5fd2Via2l0X3Rlc3RzCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5yZWZ0ZXN0cyBpbXBv
cnQgZXh0cmFjdF9yZWZlcmVuY2VfbGluayBhcyBleHRyYWN0b3IKKworX2xvZyA9IGxvZ3V0aWxz
LmdldF9sb2dnZXIoX19maWxlX18pCisKKworY2xhc3MgUmVmdGVzdEZpbGVEYXRhKCk6CisgICAg
IiIiQSBzdHJ1Y3R1cmUgb2YgcmVmdGVzdCBmaWxlIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYp
OgorICAgICAgICBzZWxmLmltYWdlX2hhc2ggPSAiIgorICAgICAgICBzZWxmLm1hdGNoZXMgPSBb
XQorICAgICAgICBzZWxmLm1pc21hdGNoZXMgPSBbXQorICAgICAgICBzZWxmLnJlc3VsdF9tYXRj
aGVzID0ge30KKyAgICAgICAgc2VsZi5yZXN1bHRfbWlzbWF0Y2hlcyA9IHt9CisgICAgICAgIHNl
bGYuY3Jhc2ggPSBGYWxzZQorCisKK2NsYXNzIFRlc3RDU1NXR1JlZnRlc3QoKToKKyAgICBkZWYg
X19pbml0X18oc2VsZik6CisgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBydW5fd2Via2l0X3Rlc3Rz
LnBhcnNlX2FyZ3MoWyctLWRlYnVnJywgJy0tcGl4ZWwtdGVzdHMnXSkKKyAgICAgICAgc2VsZi5w
b3J0ID0gZmFjdG9yeS5nZXQob3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucykKKyAgICAgICAgc2Vs
Zi50ZXN0X2ZpbGVzID0gZGVmYXVsdGRpY3QoUmVmdGVzdEZpbGVEYXRhKQorCisgICAgZGVmIG1h
a2VfcmVmdGVzdF9maWxlX2RhdGEoc2VsZiwgcmVmdGVzdHNfZGlyX3BhdGgpOgorICAgICAgICAi
IiJHaXZlbiBhIHJlZnRlc3RzIGRpcmVjdG9yeSwgbWFrZXMgYSBkaWN0aW9uYXJ5CisgICAgICAg
IHdoaWNoIGZvbGxvdyBSZWZ0ZXN0RmlsZURhdGUuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAg
ICAgIHJlZnRlc3RzX2Rpcl9wYXRoOiBhIHJlbGF0aXZlIHBhdGggb2YgcmVmdGVzdHMgZGlyZWN0
b3J5LgorICAgICAgICAiIiIKKyAgICAgICAgbXlwb3J0ID0gUG9ydCgpCisgICAgICAgIGlmIG5v
dCByZWZ0ZXN0c19kaXJfcGF0aCBpbiBteXBvcnQudGVzdF9kaXJzKCk6CisgICAgICAgICAgICBy
YWlzZSBBc3NlcnRpb25FcnJvcigiUHV0ICVzIGluIHRoZSAlcyIgJSAocmVmdGVzdHNfZGlyX3Bh
dGgsIG15cG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkpKQorCisgICAgICAgIFJPT1RfUEFUSCA9IG9z
LnBhdGguam9pbihteXBvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCByZWZ0ZXN0c19kaXJfcGF0aCkK
KyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoUk9PVF9QQVRIKToKKyAg
ICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGFic29sdXRlX3Bh
dGggPSBvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZSkKKyAgICAgICAgICAgICAgICByZWxhdGl2ZV9w
YXRoID0gbXlwb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoYWJzb2x1dGVfcGF0aCkKKworICAg
ICAgICAgICAgICAgICMgRXh0cmFjdCBtYXRjaGVzIGFuZCBtaXNtYXRjaGVzIGZyb20gSFRNTCBz
dHJpbmcuCisgICAgICAgICAgICAgICAgZmlsZSA9IG9wZW4oYWJzb2x1dGVfcGF0aCkKKyAgICAg
ICAgICAgICAgICBmaWxlX3N0cmluZyA9IGZpbGUucmVhZCgpCisgICAgICAgICAgICAgICAgZmls
ZS5jbG9zZSgpCisgICAgICAgICAgICAgICAgbWF0Y2hlcywgbWlzbWF0Y2hlcyA9IGV4dHJhY3Rv
ci5nZXRfcmVmZXJlbmNlX2xpbmsoZmlsZV9zdHJpbmcpCisgICAgICAgICAgICAgICAgbWF0Y2hl
cyA9IFtteXBvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShvcy5wYXRoLmpvaW4ocm9vdCwgbWF0
Y2gpKSBmb3IgbWF0Y2ggaW4gbWF0Y2hlc10KKyAgICAgICAgICAgICAgICBtaXNtYXRjaGVzID0g
W215cG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKG9zLnBhdGguam9pbihyb290LCBtaXNtYXRj
aCkpIGZvciBtaXNtYXRjaCBpbiBtaXNtYXRjaGVzXQorICAgICAgICAgICAgICAgIHNlbGYudGVz
dF9maWxlc1tyZWxhdGl2ZV9wYXRoXS5tYXRjaGVzID0gbWF0Y2hlcworICAgICAgICAgICAgICAg
IHNlbGYudGVzdF9maWxlc1tyZWxhdGl2ZV9wYXRoXS5taXNtYXRjaGVzID0gbWlzbWF0Y2hlcwor
CisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICIiIlRoaXMgdGVzdCBjb21wYXJlcyBtYXRj
aC9taXNtYXRjaCBmb3IgcmVuZGVyaW5nIHJlc3VsdHMgb2YKKyAgICAgICAgcmVmdGVzdCBmaWxl
cy4KKyAgICAgICAgIiIiCisgICAgICAgIGRyaXZlciA9IHNlbGYuX2NyZWF0ZV9kcml2ZXIoKQor
ICAgICAgICBkcml2ZXIuc3RhcnQoKQorICAgICAgICBmb3IgdGVzdF9maWxlIGluIHNlbGYudGVz
dF9maWxlczoKKyAgICAgICAgICAgIGlucHV0ID0gRHJpdmVySW5wdXQodGVzdF9maWxlLCAxMDAw
MCwgTm9uZSkKKyAgICAgICAgICAgIG91dHB1dCA9IGRyaXZlci5ydW5fdGVzdChpbnB1dCkKKyAg
ICAgICAgICAgIHNlbGYudGVzdF9maWxlc1t0ZXN0X2ZpbGVdLmltYWdlX2hhc2ggPSBvdXRwdXQu
aW1hZ2VfaGFzaAorICAgICAgICAgICAgc2VsZi50ZXN0X2ZpbGVzW3Rlc3RfZmlsZV0uY3Jhc2gg
PSBvdXRwdXQuY3Jhc2gKKyAgICAgICAgICAgIGlmIGRyaXZlci5wb2xsKCk6CisgICAgICAgICAg
ICAgICAgZHJpdmVyID0gc2VsZi5fY3JlYXRlX2RyaXZlcigpCisgICAgICAgICAgICAgICAgZHJp
dmVyLnN0YXJ0KCkKKworICAgICAgICBzZWxmLl9jb21wYXJlX21hdGNoX21pc21hdGNoKCkKKyAg
ICAgICAgc2VsZi5fcHJpbnRfcmVzdWx0cygpCisKKyAgICBkZWYgX2NvbXBhcmVfbWF0Y2hfbWlz
bWF0Y2goc2VsZik6CisgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gc2VsZi50ZXN0X2ZpbGVzOgor
ICAgICAgICAgICAgaWYgc2VsZi50ZXN0X2ZpbGVzW3Rlc3RfZmlsZV0uY3Jhc2g6CisgICAgICAg
ICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRlc3RfZmlsZV9oYXNoID0gc2VsZi50ZXN0
X2ZpbGVzW3Rlc3RfZmlsZV0uaW1hZ2VfaGFzaAorICAgICAgICAgICAgaWYgc2VsZi50ZXN0X2Zp
bGVzW3Rlc3RfZmlsZV0ubWF0Y2hlczoKKyAgICAgICAgICAgICAgICBzZWxmLl9pc19tYXRjaGlu
Zyh0ZXN0X2ZpbGUsIHRlc3RfZmlsZV9oYXNoKQorICAgICAgICAgICAgaWYgc2VsZi50ZXN0X2Zp
bGVzW3Rlc3RfZmlsZV0ubWlzbWF0Y2hlczoKKyAgICAgICAgICAgICAgICBzZWxmLl9pc19taXNt
YXRjaGluZyh0ZXN0X2ZpbGUsIHRlc3RfZmlsZV9oYXNoKQorCisgICAgZGVmIF9pc19tYXRjaGlu
ZyhzZWxmLCB0ZXN0X2ZpbGUsIHRlc3RfZmlsZV9oYXNoKToKKyAgICAgICAgZm9yIG1hdGNoX2Zp
bGUgaW4gc2VsZi50ZXN0X2ZpbGVzW3Rlc3RfZmlsZV0ubWF0Y2hlczoKKyAgICAgICAgICAgIGlm
IG1hdGNoX2ZpbGUgaW4gc2VsZi50ZXN0X2ZpbGVzOgorICAgICAgICAgICAgICAgIHNlbGYudGVz
dF9maWxlc1t0ZXN0X2ZpbGVdLnJlc3VsdF9tYXRjaGVzW21hdGNoX2ZpbGVdID0gXAorICAgICAg
ICAgICAgICAgICAgICB0ZXN0X2ZpbGVfaGFzaCA9PSBzZWxmLnRlc3RfZmlsZXNbbWF0Y2hfZmls
ZV0uaW1hZ2VfaGFzaAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfbG9nLmVy
cm9yKCJUaGVyZSBpcyBubyBtYXRjaCBmaWxlOiAlcywgJXMiLCB0ZXN0X2ZpbGUsIG1hdGNoX2Zp
bGUpCisKKyAgICBkZWYgX2lzX21pc21hdGNoaW5nKHNlbGYsIHRlc3RfZmlsZSwgdGVzdF9maWxl
X2hhc2gpOgorICAgICAgICBmb3IgbWlzbWF0Y2hfZmlsZSBpbiBzZWxmLnRlc3RfZmlsZXNbdGVz
dF9maWxlXS5taXNtYXRjaGVzOgorICAgICAgICAgICAgaWYgbWlzbWF0Y2hfZmlsZSBpbiBzZWxm
LnRlc3RfZmlsZXM6CisgICAgICAgICAgICAgICAgc2VsZi50ZXN0X2ZpbGVzW3Rlc3RfZmlsZV0u
cmVzdWx0X21pc21hdGNoZXNbbWlzbWF0Y2hfZmlsZV0gPSBcCisgICAgICAgICAgICAgICAgICAg
IHRlc3RfZmlsZV9oYXNoICE9IHNlbGYudGVzdF9maWxlc1ttaXNtYXRjaF9maWxlXS5pbWFnZV9o
YXNoCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoIlRoZXJl
IGlzIG5vIG1pc21hdGNoIGZpbGU6ICVzLCAlcyIsIHRlc3RfZmlsZSwgbWlzbWF0Y2hfZmlsZSkK
KworICAgIGRlZiBfcHJpbnRfcmVzdWx0cyhzZWxmKToKKyAgICAgICAgZm9yIHRlc3RfZmlsZSBp
biBzZWxmLnRlc3RfZmlsZXM6CisgICAgICAgICAgICBpZiBzZWxmLnRlc3RfZmlsZXNbdGVzdF9m
aWxlXS5jcmFzaDoKKyAgICAgICAgICAgICAgICBwcmludCAidGVzdF9maWxlOiAlcyBpcyBjcmFz
aGVkLiIgJSB0ZXN0X2ZpbGUKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAg
cHJpbnQgInRlc3RfZmlsZTogJXIiICUgdGVzdF9maWxlCisgICAgICAgICAgICBwcmludCAibWlz
bWF0Y2g6ICVyIiAlIG15dGVzdC50ZXN0X2ZpbGVzW3Rlc3RfZmlsZV0ucmVzdWx0X21pc21hdGNo
ZXMKKyAgICAgICAgICAgIHByaW50ICJtYXRjaDogJXIiICUgbXl0ZXN0LnRlc3RfZmlsZXNbdGVz
dF9maWxlXS5yZXN1bHRfbWF0Y2hlcworCisgICAgZGVmIF9jcmVhdGVfZHJpdmVyKHNlbGYpOgor
ICAgICAgICBkdW1teV93b3JrZXJfbnVtYmVyID0gMAorICAgICAgICBkcml2ZXIgPSBzZWxmLnBv
cnQuY3JlYXRlX2RyaXZlcihkdW1teV93b3JrZXJfbnVtYmVyKQorICAgICAgICByZXR1cm4gZHJp
dmVyCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBteXRlc3QgPSBUZXN0Q1NT
V0dSZWZ0ZXN0KCkKKyAgICBhcmd2cyA9IHN5cy5hcmd2CisgICAgaWYgbGVuKGFyZ3ZzKSAhPSAy
OgorICAgICAgICBwcmludCAiR2l2ZSB0aGUgZGlyZWN0b3J5IHBhdGggYXMgYW4gYXJndW1lbnQu
IgorICAgIGVsc2U6CisgICAgICAgIG15dGVzdC5tYWtlX3JlZnRlc3RfZmlsZV9kYXRhKGFyZ3Zz
WzFdKQorICAgICAgICBteXRlc3QudGVzdCgpCg==
</data>
<flag name="review"
          id="102422"
          type_id="1"
          status="-"
          setter="hamaji"
    />
          </attachment>
      

    </bug>

</bugzilla>