<?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>37377</bug_id>
          
          <creation_ts>2010-04-09 18:06:35 -0700</creation_ts>
          <short_desc>Don&apos;t reinvent Executive.cpu_count for every port</short_desc>
          <delta_ts>2010-04-10 07:56:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</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="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cjerdonek</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>211063</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-09 18:06:35 -0700</bug_when>
    <thetext>Don&apos;t reinvent Executive.cpu_count for every port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211065</commentid>
    <comment_count>1</comment_count>
      <attachid>53026</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-09 18:08:33 -0700</bug_when>
    <thetext>Created attachment 53026
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211067</commentid>
    <comment_count>2</comment_count>
      <attachid>53026</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-09 18:20:05 -0700</bug_when>
    <thetext>Comment on attachment 53026
Patch

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211089</commentid>
    <comment_count>3</comment_count>
      <attachid>53026</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-09 19:17:53 -0700</bug_when>
    <thetext>Comment on attachment 53026
Patch

Clearing flags on attachment: 53026

Committed r57399: &lt;http://trac.webkit.org/changeset/57399&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211090</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-09 19:17:59 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211104</commentid>
    <comment_count>5</comment_count>
      <attachid>53026</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-09 20:27:31 -0700</bug_when>
    <thetext>Comment on attachment 53026
Patch

diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py b/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
&gt; index e5a0108..5185947 100755
&gt; --- a/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
&gt; +++ b/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
&gt; @@ -50,6 +50,7 @@ import logging
&gt;  import math
&gt;  import optparse
&gt;  import os
&gt; +import platform
&gt;  import Queue
&gt;  import random
&gt;  import re
&gt; @@ -71,6 +72,8 @@ from test_types import image_diff
&gt;  from test_types import test_type_base
&gt;  from test_types import text_diff
&gt;  
&gt; +from webkitpy.common.system.executive import Executive
&gt; +
&gt;  import port
&gt;  
&gt;  _log = logging.getLogger(&quot;webkitpy.layout_tests.run_webkit_tests&quot;)
&gt; @@ -1389,6 +1392,7 @@ def main(options, args):
&gt;                          stream=meter)
&gt;  
&gt;      port_obj = port.get(options.platform, options)
&gt; +    executive = Executive()
&gt;  
&gt;      if not options.configuration:
&gt;          options.configuration = port_obj.default_configuration()
&gt; @@ -1422,8 +1426,13 @@ def main(options, args):
&gt;                                ignore_errors=True)
&gt;  
&gt;      if not options.num_dump_render_trees:
&gt; -        # TODO(ojan): Investigate perf/flakiness impact of using numcores + 1.
&gt; -        options.num_dump_render_trees = port_obj.num_cores()
&gt; +        # FIXME: Investigate perf/flakiness impact of using cpu_count + 1.
&gt; +        options.num_dump_render_trees = executive.cpu_count()
&gt; +        # FIXME: new-run-webkit-tests is unstable on Mac running more than
&gt; +        # four threads in parallel.
&gt; +        # See https://bugs.webkit.org/show_bug.cgi?id=36622
&gt; +        if platform.system() == &quot;Dawin&quot; and options.num_dump_render_trees &gt; 4:
&gt; +            options.num_dump_render_trees = 4

The instability isn&apos;t generic, it&apos;s port-specific, and there should be a port-specific way to limit parallelism. For example, the fact that the base mac 
port is unstable due to DumpRenderTree doesn&apos;t mean that we should limit the parallelism that Chromoium gets.

I think a better way to implement this patch would&apos;ve been to have base.num_cores() call the Executive module, and leave the hook in for any ports that didn&apos;t want the default logic.

I went pretty far ensuring that anything platform-specific needed by run-webkit-tests would be wrapped up in the Port interface, so that a Port only needs to change things in one place. The rest of the Python code does not seem to have a similar since of layering (as evidenced by the switch statement in system/executive.py). Please don&apos;t undo this layering without replacing it with something equivalent or at least having more of a discussion about this.

&gt;  
&gt;      write = create_logging_writer(options, &apos;config&apos;)
&gt;      write(&quot;Running %s DumpRenderTrees in parallel&quot; % options.num_dump_render_trees)
&gt; @@ -1461,9 +1470,9 @@ def main(options, args):
&gt;          # Creating the expecations for each platform/configuration pair does
&gt;          # all the test list parsing and ensures it&apos;s correct syntax (e.g. no
&gt;          # dupes).
&gt; -        for platform in port_obj.test_platform_names():
&gt; -            test_runner.parse_expectations(platform, is_debug_mode=True)
&gt; -            test_runner.parse_expectations(platform, is_debug_mode=False)
&gt; +        for platform_name in port_obj.test_platform_names():
&gt; +            test_runner.parse_expectations(platform_name, is_debug_mode=True)
&gt; +            test_runner.parse_expectations(platform_name, is_debug_mode=False)
&gt;          meter.update(&quot;&quot;)
&gt;          print (&quot;If there are no fail messages, errors or exceptions, then the &quot;
&gt;              &quot;lint succeeded.&quot;)

I have no objection to this change, but it doesn&apos;t seem to have anything to do with the rest of this patch. Did it sneak in accidentally?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211139</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-04-10 06:07:55 -0700</bug_when>
    <thetext>Typo in this patch:

+        if system_name == &quot;Dawin&quot;:
+            return int(self.run_command([&quot;sysctl&quot;, &quot;-n&quot;, &quot;hw.ncpu&quot;]))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211147</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-10 07:56:46 -0700</bug_when>
    <thetext>&gt; &gt; +        if platform.system() == &quot;Dawin&quot; and options.num_dump_render_trees &gt; 4:
&gt; &gt; +            options.num_dump_render_trees = 4
&gt; 
&gt; The instability isn&apos;t generic, it&apos;s port-specific, and there should be a
&gt; port-specific way to limit parallelism. For example, the fact that the base mac 
&gt; port is unstable due to DumpRenderTree doesn&apos;t mean that we should limit the
&gt; parallelism that Chromoium gets.

Ok.  It seems better to just fix the bug than to create something complicated to work around the issue.

&gt; I think a better way to implement this patch would&apos;ve been to have
&gt; base.num_cores() call the Executive module, and leave the hook in for any ports
&gt; that didn&apos;t want the default logic.

How about a base.default_dump_render_tree_count method?  The number of cores your machine has doesn&apos;t vary by port, but the number of DRT instances you want could.

&gt; I went pretty far ensuring that anything platform-specific needed by
&gt; run-webkit-tests would be wrapped up in the Port interface, so that a Port only
&gt; needs to change things in one place. The rest of the Python code does not seem
&gt; to have a similar since of layering (as evidenced by the switch statement in
&gt; system/executive.py). Please don&apos;t undo this layering without replacing it with
&gt; something equivalent or at least having more of a discussion about this.

There&apos;s really two things going on.  We have a notion of a port (Gtk, Chromium, Qt, etc) and a notion of  a platform (Mac, Windows, Linux).  At the moment, the two are smashed together, which leads to the copy/paste code.

In this particular case, the OS-specific code is just making up for a deficiency in the Python 2.5 library.  In Python 2.6, the multiprocessing package abstracts away the platform specific logic for counting CPUs.

In any case, I&apos;ll write a patch that I think will make you happy.  :)

&gt; &gt; @@ -1461,9 +1470,9 @@ def main(options, args):
&gt; &gt;          # Creating the expecations for each platform/configuration pair does
&gt; &gt;          # all the test list parsing and ensures it&apos;s correct syntax (e.g. no
&gt; &gt;          # dupes).
&gt; &gt; -        for platform in port_obj.test_platform_names():
&gt; &gt; -            test_runner.parse_expectations(platform, is_debug_mode=True)
&gt; &gt; -            test_runner.parse_expectations(platform, is_debug_mode=False)
&gt; &gt; +        for platform_name in port_obj.test_platform_names():
&gt; &gt; +            test_runner.parse_expectations(platform_name, is_debug_mode=True)
&gt; &gt; +            test_runner.parse_expectations(platform_name, is_debug_mode=False)
&gt; &gt;          meter.update(&quot;&quot;)
&gt; &gt;          print (&quot;If there are no fail messages, errors or exceptions, then the &quot;
&gt;
&gt; I have no objection to this change, but it doesn&apos;t seem to have anything to do
&gt; with the rest of this patch. Did it sneak in accidentally?

The name &quot;platform&quot; conflicts with the import platform statements I added at the top of the file.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53026</attachid>
            <date>2010-04-09 18:08:33 -0700</date>
            <delta_ts>2010-04-09 20:27:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37377-20100409180831.patch</filename>
            <type>text/plain</type>
            <size>10517</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAzNmRlNzNiLi45YjE1Y2I2IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMzAgQEAKIAogICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBEb24ndCByZWludmVudCBF
eGVjdXRpdmUuY3B1X2NvdW50IGZvciBldmVyeSBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzM3NworCisgICAgICAgIG1hYy5weSBhbmQgY2hy
b21pdW1fbWFjLnB5IGhhZCBzb21lIGNvcHkvcGFzdGUgY29kZS4gIFRoaXMgY29kZSBkb2Vzbid0
CisgICAgICAgIGFjdHVhbGx5IGhhdmUgYW55dGhpbmcgdG8gZG8gd2l0aCBXZWJLaXQgcG9ydHMu
ICBJdCdzIHJlYWxseSBqdXN0CisgICAgICAgIHNvbWV0aGluZyBpbiB0aGUgbXVsdGlwcm9jZXNz
aW5nIHBhY2thZ2UuICBUaGUgbGFtZSBiaXQgaXMgdGhhdCBwYWNrYWdlCisgICAgICAgIGlzbid0
IGF2YWlsYWJsZSBpbiBvbGRlciB2ZXJzaW9ucyBvZiBQeXRob24sIHNvIHdlIG5lZWQgdG8gaW1w
bGVtZW50IGEKKyAgICAgICAgZmFsbGJhY2suICBIb3dldmVyLCB3ZSBhbHJlYWR5IGhhdmUgdGhl
IGZhbGxiYWNrIGluIGNvbW1vbi4gIFdlIGRvbid0CisgICAgICAgIG5lZWQgdG8gcmVpbnZlbnQg
aXQgc3BlY2lmaWNseSBmb3IgbGF5b3V0X3Rlc3RzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZS5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2xpbnV4LnB5OgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5OgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weToKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5OgorCisy
MDEwLTA0LTA5ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHMg
LS1yZWxlYXNlIGZhaWxzIHRvIGJ1aWxkIHJlbGVhc2UgRFJUIHdoZW4gZ2xvYmFsIGNvbmZpZ3Vy
YXRpb24gaXMgRGVidWcKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM3Mzc2CiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9leGVjdXRpdmUucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5CmluZGV4IDAwYmUxY2MuLjg3ZDcyN2QgMTAwNjQ0
Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRp
dmUucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4
ZWN1dGl2ZS5weQpAQCAtMzQsNiArMzQsNyBAQCBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgbXVs
dGlwcm9jZXNzaW5nID0gTm9uZQogCiBpbXBvcnQgb3MKK2ltcG9ydCBwbGF0Zm9ybQogaW1wb3J0
IFN0cmluZ0lPCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwpAQCAtMTIyLDYgKzEyMywx
NiBAQCBjbGFzcyBFeGVjdXRpdmUob2JqZWN0KToKICAgICBkZWYgY3B1X2NvdW50KCk6CiAgICAg
ICAgIGlmIG11bHRpcHJvY2Vzc2luZzoKICAgICAgICAgICAgIHJldHVybiBtdWx0aXByb2Nlc3Np
bmcuY3B1X2NvdW50KCkKKyAgICAgICAgIyBEYXJuLiAgV2UgZG9uJ3QgaGF2ZSB0aGUgbXVsdGlw
cm9jZXNzaW5nIHBhY2thZ2UuCisgICAgICAgIHN5c3RlbV9uYW1lID0gcGxhdGZvcm0uc3lzdGVt
KCkKKyAgICAgICAgaWYgc3lzdGVtX25hbWUgPT0gIkRhd2luIjoKKyAgICAgICAgICAgIHJldHVy
biBpbnQoc2VsZi5ydW5fY29tbWFuZChbInN5c2N0bCIsICItbiIsICJody5uY3B1Il0pKQorICAg
ICAgICBlbGlmIHN5c3RlbV9uYW1lID09ICJXaW5kb3dzIjoKKyAgICAgICAgICAgIHJldHVybiBp
bnQob3MuZW52aXJvbi5nZXQoJ05VTUJFUl9PRl9QUk9DRVNTT1JTJywgMSkpCisgICAgICAgIGVs
aWYgc3lzdGVtX25hbWUgPT0gIkxpbnV4IjoKKyAgICAgICAgICAgIG51bV9jb3JlcyA9IG9zLnN5
c2NvbmYoIlNDX05QUk9DRVNTT1JTX09OTE4iKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShu
dW1fY29yZXMsIGludCkgYW5kIG51bV9jb3JlcyA+IDA6CisgICAgICAgICAgICAgICAgcmV0dXJu
IG51bV9jb3JlcwogICAgICAgICAjIFRoaXMgcXVhbnRpdHkgaXMgYSBsaWUgYnV0IHByb2JhYmx5
IGEgcmVhc29uYWJsZSBndWVzcyBmb3IgbW9kZXJuCiAgICAgICAgICMgbWFjaGluZXMuCiAgICAg
ICAgIHJldHVybiAyCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Jhc2UucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKaW5kZXggZjViZTU2MC4uZTVmMDFkZSAxMDA2NDQKLS0t
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFz
ZS5weQpAQCAtMjg2LDEzICsyODYsNiBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgIG1h
eSBiZSBkaWZmZXJlbnQgKGUuZy4sICd3aW4teHAnIGluc3RlYWQgb2YgJ2Nocm9taXVtLXdpbi14
cCcuIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCiAKLSAgICBkZWYgbnVtX2NvcmVzKHNl
bGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIG51bWJlciBvZiBjb3Jlcy9jcHVzIGF2YWlsYWJs
ZSBvbiB0aGlzIG1hY2hpbmUuCi0KLSAgICAgICAgVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gZGV0
ZXJtaW5lIHRoZSBkZWZhdWx0IGFtb3VudCBvZiBwYXJhbGxlbGlzbQotICAgICAgICB1c2VkIGJ5
IHJ1bi1jaHJvbWl1bS13ZWJraXQtdGVzdHMuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IoJ1BvcnQubnVtX2NvcmVzJykKLQogICAgICMgRklYTUU6IFRoaXMgY291bGQgYmUg
cmVwbGFjZWQgYnkgZnVuY3Rpb25zIGluIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dC5zY20uCiAg
ICAgZGVmIHBhdGhfZnJvbV93ZWJraXRfYmFzZShzZWxmLCAqY29tcHMpOgogICAgICAgICAiIiJS
ZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gcGF0aCBtYWRlIGJ5IGpvaW5pbmcgdGhlIHRvcCBvZiB0
aGUKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvY2hyb21pdW0ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Nocm9taXVtLnB5CmluZGV4IDQ0MzU3NjAuLjViOTBiODUgMTAwNjQ0Ci0tLSBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0u
cHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9j
aHJvbWl1bS5weQpAQCAtNDQsNiArNDQsNyBAQCBpbXBvcnQgd2Vic29ja2V0X3NlcnZlcgogX2xv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5jaHJvbWl1
bSIpCiAKIAorIyBGSVhNRTogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGJlbG9uZyBpbiB0aGlzIHBh
Y2thZ2UuCiBkZWYgY2hlY2tfZmlsZV9leGlzdHMocGF0aF90b19maWxlLCBmaWxlX2Rlc2NyaXB0
aW9uLCBvdmVycmlkZV9zdGVwPU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2luZz1U
cnVlKToKICAgICAiIiJWZXJpZnkgdGhlIGZpbGUgaXMgcHJlc2VudCB3aGVyZSBleHBlY3RlZCBv
ciBsb2cgYW4gZXJyb3IuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2xpbnV4LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9saW51eC5weQppbmRleCBkNjgx
NDcyLi4xZGRiYzIyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2xpbnV4LnB5CisrKyBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbGludXgucHkKQEAgLTczLDEy
ICs3Myw2IEBAIGNsYXNzIENocm9taXVtTGludXhQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6
CiAgICAgICAgICAgICAgICAgICAgICAgICdMaW51eEJ1aWxkSW5zdHJ1Y3Rpb25zJykKICAgICAg
ICAgcmV0dXJuIHJlc3VsdAogCi0gICAgZGVmIG51bV9jb3JlcyhzZWxmKToKLSAgICAgICAgbnVt
X2NvcmVzID0gb3Muc3lzY29uZigiU0NfTlBST0NFU1NPUlNfT05MTiIpCi0gICAgICAgIGlmIGlz
aW5zdGFuY2UobnVtX2NvcmVzLCBpbnQpIGFuZCBudW1fY29yZXMgPiAwOgotICAgICAgICAgICAg
cmV0dXJuIG51bV9jb3JlcwotICAgICAgICByZXR1cm4gMQotCiAgICAgZGVmIHRlc3RfcGxhdGZv
cm1fbmFtZShzZWxmKToKICAgICAgICAgIyBXZSB1c2UgJ2xpbnV4JyBpbnN0ZWFkIG9mICdjaHJv
bWl1bS1saW51eCcgaW4gdGVzdF9leHBlY3RhdGlvbnMudHh0LgogICAgICAgICByZXR1cm4gJ2xp
bnV4JwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9jaHJvbWl1bV9tYWMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weQppbmRleCBkNDc3ZjQwLi44ZjVjOGQ5IDEw
MDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Nocm9taXVtX21hYy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weQpAQCAtNjYsMTAgKzY2LDYgQEAgY2xhc3MgQ2hy
b21pdW1NYWNQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgICAgICAgICAgICAgICAg
ICAgICdNYWNCdWlsZEluc3RydWN0aW9ucycpCiAgICAgICAgIHJldHVybiByZXN1bHQKIAotICAg
IGRlZiBudW1fY29yZXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBpbnQoc3VicHJvY2Vzcy5Qb3Bl
bihbJ3N5c2N0bCcsJy1uJywnaHcubmNwdSddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKSkKLQogICAgIGRl
ZiB0ZXN0X3BsYXRmb3JtX25hbWUoc2VsZik6CiAgICAgICAgICMgV2UgdXNlICdtYWMnIGluc3Rl
YWQgb2YgJ2Nocm9taXVtLW1hYycKICAgICAgICAgcmV0dXJuICdtYWMnCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3dp
bi5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hy
b21pdW1fd2luLnB5CmluZGV4IGNhZjRjZDEuLmZhZmM3Y2YgMTAwNjQ0Ci0tLSBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5Cisr
KyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW1fd2luLnB5CkBAIC03OCw5ICs3OCw2IEBAIGNsYXNzIENocm9taXVtV2luUG9ydChjaHJvbWl1
bS5DaHJvbWl1bVBvcnQpOgogICAgICAgICBhYnNwYXRoID0gb3MucGF0aC5hYnNwYXRoKGZpbGVu
YW1lKQogICAgICAgICByZXR1cm4gYWJzcGF0aC5yZXBsYWNlKCdcXCcsICcvJykKIAotICAgIGRl
ZiBudW1fY29yZXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBpbnQob3MuZW52aXJvbi5nZXQoJ05V
TUJFUl9PRl9QUk9DRVNTT1JTJywgMSkpCi0KICAgICBkZWYgcmVsYXRpdmVfdGVzdF9maWxlbmFt
ZShzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgIHBhdGggPSBmaWxlbmFtZVtsZW4oc2VsZi5sYXlv
dXRfdGVzdHNfZGlyKCkpICsgMTpdCiAgICAgICAgIHJldHVybiBwYXRoLnJlcGxhY2UoJ1xcJywg
Jy8nKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9tYWMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L21hYy5weQppbmRleCA1MzllMWNmLi5hMTVmMzlhIDEwMDY0NAotLS0gYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5weQorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5weQpAQCAtMTcy
LDE1ICsxNzIsNiBAQCBjbGFzcyBNYWNQb3J0KGJhc2UuUG9ydCk6CiAgICAgICAgIHNwLnN0b3Ao
KQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKLSAgICBkZWYgbnVtX2NvcmVzKHNlbGYpOgotICAg
ICAgICBuY29yZXMgPSBpbnQoZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsic3lzY3RsIiwgIi1uIiwg
Imh3Lm5jcHUiXSkpCi0gICAgICAgICMgRklYTUU6IG5ldy1ydW4td2Via2l0LXRlc3RzIGlzIHVu
c3RhYmxlIHJ1bm5pbmcgbW9yZSB0aGFuIGZvdXIKLSAgICAgICAgIyB0aHJlYWRzIGluIHBhcmFs
bGVsLgotICAgICAgICAjIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzY2MjIKLSAgICAgICAgaWYgbmNvcmVzID4gNDoKLSAgICAgICAgICAgIG5jb3JlcyA9IDQK
LSAgICAgICAgcmV0dXJuIG5jb3JlcwotCiAgICAgZGVmIHBhdGhfdG9fdGVzdF9leHBlY3RhdGlv
bnNfZmlsZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYucGF0aF9mcm9tX3dlYmtpdF9iYXNl
KCdMYXlvdXRUZXN0cycsICdwbGF0Zm9ybScsCiAgICAgICAgICAgICdtYWMnLCAndGVzdF9leHBl
Y3RhdGlvbnMudHh0JykKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQppbmRleCA2ZjUxZTFkLi5lZGVmNDg1IDEwMDY0NAot
LS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3Qu
cHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90
ZXN0LnB5CkBAIC02OSw5ICs2OSw2IEBAIGNsYXNzIFRlc3RQb3J0KGJhc2UuUG9ydCk6CiAgICAg
ZGVmIG5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCiAKLSAgICBkZWYgbnVt
X2NvcmVzKHNlbGYpOgotICAgICAgICByZXR1cm4gaW50KG9zLnBvcGVuMigic3lzY3RsIC1uIGh3
Lm5jcHUiKVsxXS5yZWFkKCkpCi0KICAgICBkZWYgb3B0aW9ucyhzZWxmKToKICAgICAgICAgcmV0
dXJuIHNlbGYuX29wdGlvbnMKIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKaW5kZXggZTVhMDEw
OC4uNTE4NTk0NyAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC01MCw2ICs1MCw3IEBA
IGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgbWF0aAogaW1wb3J0IG9wdHBhcnNlCiBpbXBvcnQgb3MK
K2ltcG9ydCBwbGF0Zm9ybQogaW1wb3J0IFF1ZXVlCiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgcmUK
QEAgLTcxLDYgKzcyLDggQEAgZnJvbSB0ZXN0X3R5cGVzIGltcG9ydCBpbWFnZV9kaWZmCiBmcm9t
IHRlc3RfdHlwZXMgaW1wb3J0IHRlc3RfdHlwZV9iYXNlCiBmcm9tIHRlc3RfdHlwZXMgaW1wb3J0
IHRleHRfZGlmZgogCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9y
dCBFeGVjdXRpdmUKKwogaW1wb3J0IHBvcnQKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3
ZWJraXRweS5sYXlvdXRfdGVzdHMucnVuX3dlYmtpdF90ZXN0cyIpCkBAIC0xMzg5LDYgKzEzOTIs
NyBAQCBkZWYgbWFpbihvcHRpb25zLCBhcmdzKToKICAgICAgICAgICAgICAgICAgICAgICAgIHN0
cmVhbT1tZXRlcikKIAogICAgIHBvcnRfb2JqID0gcG9ydC5nZXQob3B0aW9ucy5wbGF0Zm9ybSwg
b3B0aW9ucykKKyAgICBleGVjdXRpdmUgPSBFeGVjdXRpdmUoKQogCiAgICAgaWYgbm90IG9wdGlv
bnMuY29uZmlndXJhdGlvbjoKICAgICAgICAgb3B0aW9ucy5jb25maWd1cmF0aW9uID0gcG9ydF9v
YmouZGVmYXVsdF9jb25maWd1cmF0aW9uKCkKQEAgLTE0MjIsOCArMTQyNiwxMyBAQCBkZWYgbWFp
bihvcHRpb25zLCBhcmdzKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZV9l
cnJvcnM9VHJ1ZSkKIAogICAgIGlmIG5vdCBvcHRpb25zLm51bV9kdW1wX3JlbmRlcl90cmVlczoK
LSAgICAgICAgIyBUT0RPKG9qYW4pOiBJbnZlc3RpZ2F0ZSBwZXJmL2ZsYWtpbmVzcyBpbXBhY3Qg
b2YgdXNpbmcgbnVtY29yZXMgKyAxLgotICAgICAgICBvcHRpb25zLm51bV9kdW1wX3JlbmRlcl90
cmVlcyA9IHBvcnRfb2JqLm51bV9jb3JlcygpCisgICAgICAgICMgRklYTUU6IEludmVzdGlnYXRl
IHBlcmYvZmxha2luZXNzIGltcGFjdCBvZiB1c2luZyBjcHVfY291bnQgKyAxLgorICAgICAgICBv
cHRpb25zLm51bV9kdW1wX3JlbmRlcl90cmVlcyA9IGV4ZWN1dGl2ZS5jcHVfY291bnQoKQorICAg
ICAgICAjIEZJWE1FOiBuZXctcnVuLXdlYmtpdC10ZXN0cyBpcyB1bnN0YWJsZSBvbiBNYWMgcnVu
bmluZyBtb3JlIHRoYW4KKyAgICAgICAgIyBmb3VyIHRocmVhZHMgaW4gcGFyYWxsZWwuCisgICAg
ICAgICMgU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjYyMgor
ICAgICAgICBpZiBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAiRGF3aW4iIGFuZCBvcHRpb25zLm51bV9k
dW1wX3JlbmRlcl90cmVlcyA+IDQ6CisgICAgICAgICAgICBvcHRpb25zLm51bV9kdW1wX3JlbmRl
cl90cmVlcyA9IDQKIAogICAgIHdyaXRlID0gY3JlYXRlX2xvZ2dpbmdfd3JpdGVyKG9wdGlvbnMs
ICdjb25maWcnKQogICAgIHdyaXRlKCJSdW5uaW5nICVzIER1bXBSZW5kZXJUcmVlcyBpbiBwYXJh
bGxlbCIgJSBvcHRpb25zLm51bV9kdW1wX3JlbmRlcl90cmVlcykKQEAgLTE0NjEsOSArMTQ3MCw5
IEBAIGRlZiBtYWluKG9wdGlvbnMsIGFyZ3MpOgogICAgICAgICAjIENyZWF0aW5nIHRoZSBleHBl
Y2F0aW9ucyBmb3IgZWFjaCBwbGF0Zm9ybS9jb25maWd1cmF0aW9uIHBhaXIgZG9lcwogICAgICAg
ICAjIGFsbCB0aGUgdGVzdCBsaXN0IHBhcnNpbmcgYW5kIGVuc3VyZXMgaXQncyBjb3JyZWN0IHN5
bnRheCAoZS5nLiBubwogICAgICAgICAjIGR1cGVzKS4KLSAgICAgICAgZm9yIHBsYXRmb3JtIGlu
IHBvcnRfb2JqLnRlc3RfcGxhdGZvcm1fbmFtZXMoKToKLSAgICAgICAgICAgIHRlc3RfcnVubmVy
LnBhcnNlX2V4cGVjdGF0aW9ucyhwbGF0Zm9ybSwgaXNfZGVidWdfbW9kZT1UcnVlKQotICAgICAg
ICAgICAgdGVzdF9ydW5uZXIucGFyc2VfZXhwZWN0YXRpb25zKHBsYXRmb3JtLCBpc19kZWJ1Z19t
b2RlPUZhbHNlKQorICAgICAgICBmb3IgcGxhdGZvcm1fbmFtZSBpbiBwb3J0X29iai50ZXN0X3Bs
YXRmb3JtX25hbWVzKCk6CisgICAgICAgICAgICB0ZXN0X3J1bm5lci5wYXJzZV9leHBlY3RhdGlv
bnMocGxhdGZvcm1fbmFtZSwgaXNfZGVidWdfbW9kZT1UcnVlKQorICAgICAgICAgICAgdGVzdF9y
dW5uZXIucGFyc2VfZXhwZWN0YXRpb25zKHBsYXRmb3JtX25hbWUsIGlzX2RlYnVnX21vZGU9RmFs
c2UpCiAgICAgICAgIG1ldGVyLnVwZGF0ZSgiIikKICAgICAgICAgcHJpbnQgKCJJZiB0aGVyZSBh
cmUgbm8gZmFpbCBtZXNzYWdlcywgZXJyb3JzIG9yIGV4Y2VwdGlvbnMsIHRoZW4gdGhlICIKICAg
ICAgICAgICAgICJsaW50IHN1Y2NlZWRlZC4iKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>