<?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>48103</bug_id>
          
          <creation_ts>2010-10-21 16:49:42 -0700</creation_ts>
          <short_desc>new-run-webkit-tests: clean up duplicate, ugly code in port/chromium_gpu*.py</short_desc>
          <delta_ts>2011-08-16 16:25:13 -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>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>levin</cc>
    
    <cc>mihaip</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>297723</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-21 16:49:42 -0700</bug_when>
    <thetext>See bug 47874 and bug 47884 for background ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434359</commentid>
    <comment_count>1</comment_count>
      <attachid>100176</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-07-08 16:03:20 -0700</bug_when>
    <thetext>Created attachment 100176
Patch using Multiple inheritance - doesn&apos;t work so well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434367</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-07-08 16:12:20 -0700</bug_when>
    <thetext>Updating a patch that converts just the GPU code to a more multiple-inheritance + mixin-style approach. I can&apos;t decide if this is actually much of an improvement or not.

The GPU&apos;s constructor code wants to rely on the base port&apos;s constructor already having been called (in order to call things like get_option()). However, the GPU class needs to be declared before the base port so that the methods override properly, so you get:

class MacGPU(GPU, Mac):
    def __init__(self):
         Mac.__init__(self)
         GPU.__init__(self)

(i.e., the constructors are called in the &quot;opposite&quot; order). This felt weird, so I moved the GPU &quot;constructor&quot; to _set_default_options().

We could also get rid of any dependency on the MRO by explicitly specifying which super class to call, e.g.:

class MacGPU(GPU, Mac):
    def default_child_processes(self):
         return GPU.default_child_processes(self)

and so on, but this kind of repetition and explicit overriding seems to default some of the point.
    
What do y&apos;all think? Are there other options? In bug 47884 Tony suggested using a delegate class, but I don&apos;t think that is actually going to be much different from the code as currently checked in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434398</commentid>
    <comment_count>3</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-07-08 17:04:04 -0700</bug_when>
    <thetext>This doesn&apos;t look like mixins to me.  It looks more like the text book case of multiple inheritance showing why it&apos;s bad.

I think the current code isn&apos;t great (we shouldn&apos;t be using inheritance for this), but it&apos;s probably better than multiple inheritance.  One alternative would be to make GPU be a property of the chromium.py port and somehow change behavior for the overridden methods if the GPU property is set.

Anyway, I don&apos;t think it&apos;s that big of a deal either way and it&apos;s probably OK to WONTFIX this bug unless someone feels motivated to post a cleanup patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435882</commentid>
    <comment_count>4</comment_count>
      <attachid>100545</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-07-12 12:57:26 -0700</bug_when>
    <thetext>Created attachment 100545
Try again - fold chromium_gpu into other chromium* ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435889</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-07-12 12:59:48 -0700</bug_when>
    <thetext>Moving the google_chrome*.py changes to bug 64384.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435923</commentid>
    <comment_count>6</comment_count>
      <attachid>100545</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-07-12 13:54:49 -0700</bug_when>
    <thetext>Comment on attachment 100545
Try again - fold chromium_gpu into other chromium* ports.

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

This looks much better to me!

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium.py:296
&gt; +            return self._gpu_tests(self, paths)

Where is _gpu_tests?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:64
&gt;          if input_name and platform:
&gt; -            port = chromium_gpu.get(platform=platform, port_name=input_name,
&gt; -                                    options=mock_options)
&gt; +            port = factory.get(platform=platform, port_name=input_name, options=mock_options)
&gt;          else:
&gt; -            port = chromium_gpu.get(port_name=port_name, options=mock_options)
&gt; +            port = factory.get(port_name=port_name, options=mock_options)

Could this be:

if input_name and platform:
    port_name = input_name
port = factory.get(port_name=port_name, platform=platform, options=mock_options)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436013</commentid>
    <comment_count>7</comment_count>
      <attachid>100545</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-07-12 15:17:33 -0700</bug_when>
    <thetext>Comment on attachment 100545
Try again - fold chromium_gpu into other chromium* ports.

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

This is *way* better than waht we have, but could still be better.  Please fix the things mentioned in review before landing.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium.py:89
&gt; +        if self.get_option(&apos;accelerated_compositing&apos;) is None:
&gt; +            self._options.accelerated_compositing = True

We have a function set_default_option which does exactly this.  (I think you even wrote the function originally.)

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium.py:96
&gt; +        # on the bots.
&gt; +        if self.get_option(&apos;builder_name&apos;) is not None and not &apos; - GPU&apos; in self._options.builder_name:
&gt; +            self._options.builder_name += &apos; - GPU&apos;

This is bad.  We should generate the builder names from component parts on demand, not store the whole thing and modify it blindly.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium.py:122
&gt; +        fallback_paths = (self.GRAPHICS_TYPE_FALLBACK_PATHS[self._graphics_type] +
&gt; +                          self.ARCHITECTURE_FALLBACK_PATHS[self._architecture] +
&gt; +                          self.VERSION_FALLBACK_PATHS[self._version] +
&gt; +                          self.BASE_FALLBACK_PATHS)

See the implementation of this function in webkit.py.  This is OK too... we&apos;ll have to see how it looks in the end.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium.py:178
&gt; +        if self._graphics_type == &apos;gpu&apos;:
&gt; +            return 1

the gpu port seems super lame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436037</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-07-12 15:53:16 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 100545 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=100545&amp;action=review
&gt; 
&gt; This looks much better to me!
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/chromium.py:296
&gt; &gt; +            return self._gpu_tests(self, paths)
&gt; 
&gt; Where is _gpu_tests?
&gt; 

Umm ... whoops? 

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:64
&gt; &gt;          if input_name and platform:
&gt; &gt; -            port = chromium_gpu.get(platform=platform, port_name=input_name,
&gt; &gt; -                                    options=mock_options)
&gt; &gt; +            port = factory.get(platform=platform, port_name=input_name, options=mock_options)
&gt; &gt;          else:
&gt; &gt; -            port = chromium_gpu.get(port_name=port_name, options=mock_options)
&gt; &gt; +            port = factory.get(port_name=port_name, options=mock_options)
&gt; 
&gt; Could this be:
&gt; 
&gt; if input_name and platform:
&gt;     port_name = input_name
&gt; port = factory.get(port_name=port_name, platform=platform, options=mock_options)

Yes, I think that would work.

Investigating this and the above has revealed that the tests weren&apos;t testing anything like I thought they were. New patch coming ... :(

(In reply to comment #7)

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/chromium.py:89
&gt; &gt; +        if self.get_option(&apos;accelerated_compositing&apos;) is None:
&gt; &gt; +            self._options.accelerated_compositing = True
&gt; 
&gt; We have a function set_default_option which does exactly this.  (I think you even wrote the function originally.)

Ah, you&apos;re right, except that it is set_option_default(). I had forgotten about that. This was cut&amp;paste, obviously, but I&apos;ll update it.
 
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/chromium.py:96
&gt; &gt; +        # on the bots.
&gt; &gt; +        if self.get_option(&apos;builder_name&apos;) is not None and not &apos; - GPU&apos; in self._options.builder_name:
&gt; &gt; +            self._options.builder_name += &apos; - GPU&apos;
&gt; 
&gt; This is bad.  We should generate the builder names from component parts on demand, not store the whole thing and modify it blindly.
&gt;

Yeah, except that this would require coordinating with the buildbots, since we don&apos;t control the names. Still a good idea.
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/chromium.py:122
&gt; &gt; +        fallback_paths = (self.GRAPHICS_TYPE_FALLBACK_PATHS[self._graphics_type] +
&gt; &gt; +                          self.ARCHITECTURE_FALLBACK_PATHS[self._architecture] +
&gt; &gt; +                          self.VERSION_FALLBACK_PATHS[self._version] +
&gt; &gt; +                          self.BASE_FALLBACK_PATHS)
&gt; 
&gt; See the implementation of this function in webkit.py.  This is OK too... we&apos;ll have to see how it looks in the end.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/chromium.py:178
&gt; &gt; +        if self._graphics_type == &apos;gpu&apos;:
&gt; &gt; +            return 1
&gt; 
&gt; the gpu port seems super lame.

This could probably be higher, we just haven&apos;t tried it ever since the GPU tests stabilized (and the GPU tests are usually pretty fast).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436086</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-07-12 17:01:59 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; if input_name and platform:
&gt; &gt;     port_name = input_name
&gt; &gt; port = factory.get(port_name=port_name, platform=platform, options=mock_options)
&gt; 
&gt; Yes, I think that would work.
&gt;

Okay, turns out you can&apos;t do this. The code as written unfortunately relies on platform not being passed in as a keyword argument if you didn&apos;t want it (i.e., passing in platform=None breaks things), and also 
the code tests that if I pass in &apos;chromium-gpu&apos; and &apos;darwin&apos;, I need to get &apos;chromium-gpu-mac&apos; as the port_name.
 
These tests are lame. They need to be rewritten along with the whole factory algorithm. However, I don&apos;t want to do that in this patch to avoid perturbing things more than necessary.

I will upload another patch to take a stab at cleaning up the factory, if Eric doesn&apos;t beat me to it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436089</commentid>
    <comment_count>10</comment_count>
      <attachid>100590</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-07-12 17:06:07 -0700</bug_when>
    <thetext>Created attachment 100590
revise w/ review feedback, fix tests and factory routines</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436134</commentid>
    <comment_count>11</comment_count>
      <attachid>100590</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-07-12 18:10:07 -0700</bug_when>
    <thetext>Comment on attachment 100590
revise w/ review feedback, fix tests and factory routines

I&apos;m in the middle of fixing fallback paths for win.  When I finish that I&apos;ll review this in greater depth.  I think the fallback path dictionary lookup is going to end up being the wrong approach, but I&apos;ll know better once I finish my win patch shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436496</commentid>
    <comment_count>12</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-07-13 10:14:13 -0700</bug_when>
    <thetext>I think this patch is an improvement, but here&apos;s another idea I had when discussing this with Ojan:

Just have a single list per platform and remove values that don&apos;t apply.  For example, Linux would have:
&apos;chromium-gpu-linux&apos;, &apos;chromium-gpu-win&apos;, &apos;chromium-gpu&apos;, &apos;chromium-linux-x86&apos;, &apos;chromium-linux&apos;, &apos;chromium-win&apos;, &apos;chromium&apos;, &apos;win&apos;, &apos;mac&apos; and you remove the values that don&apos;t apply for the configuration.

Mac would have:
&apos;chromium-gpu-mac&apos;, &apos;chromium-gpu&apos;, &apos;chromium-mac-leopard&apos;, &apos;chromium-mac&apos;, &apos;chromium&apos;, &apos;mac-leopard&apos;, &apos;mac-snowleopard&apos;, &apos;mac&apos;, and you remove the things that don&apos;t apply.

The downside to this approach is that it&apos;s hard to see the actual fallback for things like mac-leopard-cpu.  I think that could be solved by just having a command line script (n-r-w-t --print-fallback-list) that dumps all the fallback lists for all test configurations (could also log this every run).

We could also just enumerate all the configurations and list the fallback order for each one, but that seems error prone and hard to update.

It&apos;s nice to have an easy to read list in the code, but I think that&apos;s less important than simplifying the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436564</commentid>
    <comment_count>13</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-07-13 11:41:10 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; I think this patch is an improvement, but here&apos;s another idea I had when discussing this with Ojan:
&gt; 
&gt; Just have a single list per platform and remove values that don&apos;t apply.  For example, Linux would have:
&gt; &apos;chromium-gpu-linux&apos;, &apos;chromium-gpu-win&apos;, &apos;chromium-gpu&apos;, &apos;chromium-linux-x86&apos;, &apos;chromium-linux&apos;, &apos;chromium-win&apos;, &apos;chromium&apos;, &apos;win&apos;, &apos;mac&apos; and you remove the values that don&apos;t apply for the configuration.
&gt; 
&gt; Mac would have:
&gt; &apos;chromium-gpu-mac&apos;, &apos;chromium-gpu&apos;, &apos;chromium-mac-leopard&apos;, &apos;chromium-mac&apos;, &apos;chromium&apos;, &apos;mac-leopard&apos;, &apos;mac-snowleopard&apos;, &apos;mac&apos;, and you remove the things that don&apos;t apply.
&gt;

I wonder what the code to remove the things would look like (how complicated it would be). At any rate, I&apos;m inclined to leave this patch as-is for now, until we see what Eric comes up with for the non-chromium ports.
 
&gt; The downside to this approach is that it&apos;s hard to see the actual fallback for things like mac-leopard-cpu.  I think that could be solved by just having a command line script (n-r-w-t --print-fallback-list) that dumps all the fallback lists for all test configurations (could also log this every run).
&gt;

I think printing the fallback path as part of the &apos;&apos;config&quot; output makes sense (I&apos;ve thought about that off and on for a while). I&apos;ll upload a separate patch for that today.
 
&gt; We could also just enumerate all the configurations and list the fallback order for each one, but that seems error prone and hard to update.
&gt; 

This is basically what the chromium cpu ports did prior to this patch. It&apos;s not that unwieldy.

-- Dirk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451961</commentid>
    <comment_count>14</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-08-16 16:25:06 -0700</bug_when>
    <thetext>This has been open for a month, and I&apos;m not sure if it&apos;s particularly relevant any more given the refactoring that abarth and eseidel and dglazkov have all been hacking on. I&apos;m closing this as WONTFIX; someone please comment if I&apos;m mistaken.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100176</attachid>
            <date>2011-07-08 16:03:20 -0700</date>
            <delta_ts>2011-07-12 12:57:23 -0700</delta_ts>
            <desc>Patch using Multiple inheritance - doesn&apos;t work so well.</desc>
            <filename>bug-48103-20110708160319.patch</filename>
            <type>text/plain</type>
            <size>7166</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA2NjUKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmZTM2YTBlNzZmODlmNDQyNDBjYWY0ZWI3MmUzNDE2MGQw
OGRmYmEwLi45MTQyOTBiYjA1NDgyNThiYTJlM2ZhM2ZmNTJhOWZjYTUyMmMyNmVjIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMTEtMDctMDggIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IGNsZWFuIHVwIGR1cGxpY2F0ZSwgdWdseSBjb2Rl
IGluIHBvcnQvZ29vZ2xlX2Nocm9tZSoucHkgYW5kIHBvcnQvY2hyb21pdW1fZ3B1Ki5weQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgxMDMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFj
dHVhbGx5IG9ubHkgbW9kaWZpZXMgdGhlIEdQVSBjb2RlLCBhbmQgaXQncworICAgICAgICBkZWJh
dGFibGUgd2hldGhlciBpdCBpcyBhY3R1YWxseSBjbGVhbmluZyBpdCB1cCBvciBub3QsIGJ1dCBp
dAorICAgICAgICBpcyBzd2l0Y2hpbmcgdGhlIGNvZGUgZnJvbSBhICJkZWxlZ2F0ZSItbGlrZSBt
b2RlbCB0byBzb21ldGhpbmcKKyAgICAgICAgY2xvc2VyIHRvIG11bHRpcGxlLWluaGVyaXRhbmNl
IHdpdGggbWl4aW5zLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9jaHJvbWl1bV9ncHUucHk6CisKIDIwMTEtMDctMDggIEFkYW0gQmFydGggIDxhYmFydGhA
d2Via2l0Lm9yZz4KIAogICAgICAgICBUZXN0UmVzdWx0c1NlcnZlciBzaG91bGQga2VlcCBvbGQg
dGVzdCByZXN1bHRzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Nocm9taXVtX2dwdS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvY2hyb21pdW1fZ3B1LnB5CmluZGV4IDY0NzkyYWE1YWEzZDIwY2ZiMDg1YjI1
ZDllM2I1YWQ5MjRlNWE3YzEuLjRiYzdiODRhOWU5ODc0OTVjMzdjOWIyZGM3M2NmYzM2YTZkN2Vh
ZTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
Y2hyb21pdW1fZ3B1LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvY2hyb21pdW1fZ3B1LnB5CkBAIC01Nyw3OCArNTcsNjIgQEAgZGVmIGdldChwbGF0Zm9y
bT1Ob25lLCBwb3J0X25hbWU9J2Nocm9taXVtLWdwdScsICoqa3dhcmdzKToKICAgICByYWlzZSBO
b3RJbXBsZW1lbnRlZEVycm9yKCd1bnN1cHBvcnRlZCBwb3J0OiAlcycgJSBwb3J0X25hbWUpCiAK
IAotIyBGSVhNRTogVGhlc2Ugc2hvdWxkIHJlYWxseSBiZSBhIG1peGluIGNsYXNzLgotCi1kZWYg
X3NldF9ncHVfb3B0aW9ucyhwb3J0KToKLSAgICBwb3J0Ll9ncmFwaGljc190eXBlID0gJ2dwdScK
LSAgICBpZiBwb3J0LmdldF9vcHRpb24oJ2FjY2VsZXJhdGVkX2NvbXBvc2l0aW5nJykgaXMgTm9u
ZToKLSAgICAgICAgcG9ydC5fb3B0aW9ucy5hY2NlbGVyYXRlZF9jb21wb3NpdGluZyA9IFRydWUK
LSAgICBpZiBwb3J0LmdldF9vcHRpb24oJ2FjY2VsZXJhdGVkXzJkX2NhbnZhcycpIGlzIE5vbmU6
Ci0gICAgICAgIHBvcnQuX29wdGlvbnMuYWNjZWxlcmF0ZWRfMmRfY2FudmFzID0gVHJ1ZQotCi0g
ICAgIyBGSVhNRTogUmVtb3ZlIHRoaXMgYWZ0ZXIgaHR0cDovL2NvZGVyZXZpZXcuY2hyb21pdW0u
b3JnLzUxMzMwMDEvIGlzIGVuYWJsZWQKLSAgICAjIG9uIHRoZSBib3RzLgotICAgIGlmIHBvcnQu
Z2V0X29wdGlvbignYnVpbGRlcl9uYW1lJykgaXMgbm90IE5vbmUgYW5kIG5vdCAnIC0gR1BVJyBp
biBwb3J0Ll9vcHRpb25zLmJ1aWxkZXJfbmFtZToKLSAgICAgICAgcG9ydC5fb3B0aW9ucy5idWls
ZGVyX25hbWUgKz0gJyAtIEdQVScKLQotCi1kZWYgX3Rlc3RzKHBvcnQsIHBhdGhzKToKLSAgICBp
ZiBub3QgcGF0aHM6Ci0gICAgICAgIHBhdGhzID0gWydjb21wb3NpdGluZycsICdwbGF0Zm9ybS9j
aHJvbWl1bS9jb21wb3NpdGluZycsICdtZWRpYScsICdhbmltYXRpb25zLzNkJ10KLSAgICAgICAg
aWYgbm90IHBvcnQubmFtZSgpLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLWdwdS1tYWMnKToKLSAgICAg
ICAgICAgICMgQ2FudmFzIGlzIG5vdCB5ZXQgYWNjZWxlcmF0ZWQgb24gdGhlIE1hYywgc28gdGhl
cmUncyBubyBwb2ludAotICAgICAgICAgICAgIyBpbiBydW5uaW5nIHRoZSB0ZXN0cyB0aGVyZS4K
LSAgICAgICAgICAgIHBhdGhzICs9IFsnZmFzdC9jYW52YXMnLCAnY2FudmFzL3BoaWxpcCddCi0g
ICAgICAgICMgaW52YWxpZGF0ZV9yZWN0Lmh0bWwgdGVzdHMgYSBidWcgaW4gdGhlIGNvbXBvc2l0
b3IuCi0gICAgICAgICMgU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01MzExNwotICAgICAgICBwYXRocyArPSBbJ3BsdWdpbnMvaW52YWxpZGF0ZV9yZWN0Lmh0bWwn
XQotICAgIHJldHVybiBzZXQoW3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmKSBmb3IgZiBp
biB0ZXN0X2ZpbGVzLmZpbmQocG9ydCwgcGF0aHMpXSkKLQotCi1jbGFzcyBDaHJvbWl1bUdwdUxp
bnV4UG9ydChjaHJvbWl1bV9saW51eC5DaHJvbWl1bUxpbnV4UG9ydCk6Ci0gICAgZGVmIF9faW5p
dF9fKHNlbGYsIHBvcnRfbmFtZT0nY2hyb21pdW0tZ3B1LWxpbnV4JywgKiprd2FyZ3MpOgotICAg
ICAgICBjaHJvbWl1bV9saW51eC5DaHJvbWl1bUxpbnV4UG9ydC5fX2luaXRfXyhzZWxmLCBwb3J0
X25hbWU9cG9ydF9uYW1lLCAqKmt3YXJncykKLSAgICAgICAgX3NldF9ncHVfb3B0aW9ucyhzZWxm
KQorY2xhc3MgQ2hyb21pdW1HcHVQb3J0KG9iamVjdCk6CisgICAgZGVmIF9zZXRfZ3B1X2RlZmF1
bHRfb3B0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUaGlzIGlzIGEgc2VwYXJhdGUgZnVuY3Rpb24g
cmF0aGVyIHRoYW4gX19pbml0X18gc28gdGhhdCB3ZSBjYW4KKyAgICAgICAgIyBjYWxsIGl0IGFm
dGVyIHRoZSBvYmplY3QgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIHNvIHdlIGRvbid0IGhhdmUK
KyAgICAgICAgIyB0byB3b3JyeSBhYm91dCBpc3N1ZXMgd2l0aCBjb29wZXJhdGl2ZSBzdXBlcigp
IGNhbGxzLgorCisgICAgICAgIHNlbGYuX2dyYXBoaWNzX3R5cGUgPSAnZ3B1JworICAgICAgICBp
ZiBzZWxmLmdldF9vcHRpb24oJ2FjY2VsZXJhdGVkX2NvbXBvc2l0aW5nJykgaXMgTm9uZToKKyAg
ICAgICAgICAgIHNlbGYuX29wdGlvbnMuYWNjZWxlcmF0ZWRfY29tcG9zaXRpbmcgPSBUcnVlCisg
ICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignYWNjZWxlcmF0ZWRfMmRfY2FudmFzJykgaXMgTm9u
ZToKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuYWNjZWxlcmF0ZWRfMmRfY2FudmFzID0gVHJ1
ZQorCisgICAgICAgICMgRklYTUU6IFJlbW92ZSB0aGlzIGFmdGVyIGh0dHA6Ly9jb2RlcmV2aWV3
LmNocm9taXVtLm9yZy81MTMzMDAxLyBpcyBlbmFibGVkCisgICAgICAgICMgb24gdGhlIGJvdHMu
CisgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignYnVpbGRlcl9uYW1lJykgaXMgbm90IE5vbmUg
YW5kIG5vdCAnIC0gR1BVJyBpbiBzZWxmLl9vcHRpb25zLmJ1aWxkZXJfbmFtZToKKyAgICAgICAg
ICAgIHNlbGYuX29wdGlvbnMuYnVpbGRlcl9uYW1lICs9ICcgLSBHUFUnCiAKICAgICBkZWYgYmFz
ZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6Ci0gICAgICAgICMgTWltaWMgdGhlIExpbnV4IC0+IFdp
biBleHBlY3RhdGlvbnMgZmFsbGJhY2sgaW4gdGhlIG9yZGluYXJ5IENocm9taXVtIHBvcnQuCi0g
ICAgICAgIHJldHVybiAobWFwKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoLCBbJ2Nocm9taXVt
LWdwdS1saW51eCcsICdjaHJvbWl1bS1ncHUtd2luJywgJ2Nocm9taXVtLWdwdSddKSArCi0gICAg
ICAgICAgICAgICAgY2hyb21pdW1fbGludXguQ2hyb21pdW1MaW51eFBvcnQuYmFzZWxpbmVfc2Vh
cmNoX3BhdGgoc2VsZikpCisgICAgICAgIHJldHVybiAobWFwKHNlbGYuX3dlYmtpdF9iYXNlbGlu
ZV9wYXRoLCBzZWxmLkdQVV9CQVNFTElORV9ESVJFQ1RPUklFUykgKworICAgICAgICAgICAgICAg
IHN1cGVyKENocm9taXVtR3B1UG9ydCwgc2VsZikuYmFzZWxpbmVfc2VhcmNoX3BhdGgoKSkKIAog
ICAgIGRlZiBkZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcyhzZWxmKToKICAgICAgICAgcmV0dXJuIDEK
IAogICAgIGRlZiB0ZXN0cyhzZWxmLCBwYXRocyk6Ci0gICAgICAgIHJldHVybiBfdGVzdHMoc2Vs
ZiwgcGF0aHMpCi0KKyAgICAgICAgaWYgbm90IHBhdGhzOgorICAgICAgICAgICAgcGF0aHMgPSBb
J2NvbXBvc2l0aW5nJywgJ3BsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nJywgJ21lZGlhJywg
J2FuaW1hdGlvbnMvM2QnXQorICAgICAgICAgICAgaWYgbm90IHNlbGYubmFtZSgpLnN0YXJ0c3dp
dGgoJ2Nocm9taXVtLWdwdS1tYWMnKToKKyAgICAgICAgICAgICAgICAjIENhbnZhcyBpcyBub3Qg
eWV0IGFjY2VsZXJhdGVkIG9uIHRoZSBNYWMsIHNvIHRoZXJlJ3Mgbm8gcG9pbnQKKyAgICAgICAg
ICAgICAgICAjIGluIHJ1bm5pbmcgdGhlIHRlc3RzIHRoZXJlLgorICAgICAgICAgICAgICAgIHBh
dGhzICs9IFsnZmFzdC9jYW52YXMnLCAnY2FudmFzL3BoaWxpcCddCisgICAgICAgICAgICAjIGlu
dmFsaWRhdGVfcmVjdC5odG1sIHRlc3RzIGEgYnVnIGluIHRoZSBjb21wb3NpdG9yLgorICAgICAg
ICAgICAgIyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMTE3
CisgICAgICAgICAgICBwYXRocyArPSBbJ3BsdWdpbnMvaW52YWxpZGF0ZV9yZWN0Lmh0bWwnXQor
ICAgICAgICByZXR1cm4gc2V0KFtzZWxmLnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZikgZm9yIGYg
aW4gdGVzdF9maWxlcy5maW5kKHNlbGYsIHBhdGhzKV0pCiAKLWNsYXNzIENocm9taXVtR3B1TWFj
UG9ydChjaHJvbWl1bV9tYWMuQ2hyb21pdW1NYWNQb3J0KToKLSAgICBkZWYgX19pbml0X18oc2Vs
ZiwgcG9ydF9uYW1lPSdjaHJvbWl1bS1ncHUtbWFjJywgKiprd2FyZ3MpOgotICAgICAgICBjaHJv
bWl1bV9tYWMuQ2hyb21pdW1NYWNQb3J0Ll9faW5pdF9fKHNlbGYsIHBvcnRfbmFtZT1wb3J0X25h
bWUsICoqa3dhcmdzKQotICAgICAgICBfc2V0X2dwdV9vcHRpb25zKHNlbGYpCiAKLSAgICBkZWYg
YmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6Ci0gICAgICAgIHJldHVybiAobWFwKHNlbGYuX3dl
YmtpdF9iYXNlbGluZV9wYXRoLCBbJ2Nocm9taXVtLWdwdS1tYWMnLCAnY2hyb21pdW0tZ3B1J10p
ICsKLSAgICAgICAgICAgICAgICBjaHJvbWl1bV9tYWMuQ2hyb21pdW1NYWNQb3J0LmJhc2VsaW5l
X3NlYXJjaF9wYXRoKHNlbGYpKQorY2xhc3MgQ2hyb21pdW1HcHVMaW51eFBvcnQoQ2hyb21pdW1H
cHVQb3J0LCBjaHJvbWl1bV9saW51eC5DaHJvbWl1bUxpbnV4UG9ydCk6CisgICAgR1BVX0JBU0VM
SU5FX0RJUkVDVE9SSUVTID0gWydjaHJvbWl1bS1ncHUtbGludXgnLCAnY2hyb21pdW0tZ3B1LXdp
bicsICdjaHJvbWl1bS1ncHUnXQogCi0gICAgZGVmIGRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKHNl
bGYpOgotICAgICAgICByZXR1cm4gMQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X25hbWU9
J2Nocm9taXVtLWdwdS1saW51eCcsICoqa3dhcmdzKToKKyAgICAgICAgY2hyb21pdW1fbGludXgu
Q2hyb21pdW1MaW51eFBvcnQuX19pbml0X18oc2VsZiwgcG9ydF9uYW1lPXBvcnRfbmFtZSwgKipr
d2FyZ3MpCisgICAgICAgIHNlbGYuX3NldF9ncHVfZGVmYXVsdF9vcHRpb25zKCkKIAotICAgIGRl
ZiB0ZXN0cyhzZWxmLCBwYXRocyk6Ci0gICAgICAgIHJldHVybiBfdGVzdHMoc2VsZiwgcGF0aHMp
CiAKK2NsYXNzIENocm9taXVtR3B1TWFjUG9ydChDaHJvbWl1bUdwdVBvcnQsIGNocm9taXVtX21h
Yy5DaHJvbWl1bU1hY1BvcnQpOgorICAgIEdQVV9CQVNFTElORV9ESVJFQ1RPUklFUyA9IFsnY2hy
b21pdW0tZ3B1LW1hYycsICdjaHJvbWl1bS1ncHUnXQogCi1jbGFzcyBDaHJvbWl1bUdwdVdpblBv
cnQoY2hyb21pdW1fd2luLkNocm9taXVtV2luUG9ydCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYs
IHBvcnRfbmFtZT0nY2hyb21pdW0tZ3B1LXdpbicsICoqa3dhcmdzKToKLSAgICAgICAgY2hyb21p
dW1fd2luLkNocm9taXVtV2luUG9ydC5fX2luaXRfXyhzZWxmLCBwb3J0X25hbWU9cG9ydF9uYW1l
LCAqKmt3YXJncykKLSAgICAgICAgX3NldF9ncHVfb3B0aW9ucyhzZWxmKQorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBwb3J0X25hbWU9J2Nocm9taXVtLWdwdS1tYWMnLCAqKmt3YXJncyk6CisgICAg
ICAgIGNocm9taXVtX21hYy5DaHJvbWl1bU1hY1BvcnQuX19pbml0X18oc2VsZiwgcG9ydF9uYW1l
PXBvcnRfbmFtZSwgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuX3NldF9ncHVfZGVmYXVsdF9vcHRp
b25zKCkKIAotICAgIGRlZiBiYXNlbGluZV9zZWFyY2hfcGF0aChzZWxmKToKLSAgICAgICAgcmV0
dXJuIChtYXAoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgsIFsnY2hyb21pdW0tZ3B1LXdpbics
ICdjaHJvbWl1bS1ncHUnXSkgKwotICAgICAgICAgICAgICAgIGNocm9taXVtX3dpbi5DaHJvbWl1
bVdpblBvcnQuYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZikpCiAKLSAgICBkZWYgZGVmYXVsdF9j
aGlsZF9wcm9jZXNzZXMoc2VsZik6Ci0gICAgICAgIHJldHVybiAxCitjbGFzcyBDaHJvbWl1bUdw
dVdpblBvcnQoQ2hyb21pdW1HcHVQb3J0LCBjaHJvbWl1bV93aW4uQ2hyb21pdW1XaW5Qb3J0KToK
KyAgICBHUFVfQkFTRUxJTkVfRElSRUNUT1JJRVMgPSBbJ2Nocm9taXVtLWdwdS13aW4nLCAnY2hy
b21pdW0tZ3B1J10KIAotICAgIGRlZiB0ZXN0cyhzZWxmLCBwYXRocyk6Ci0gICAgICAgIHJldHVy
biBfdGVzdHMoc2VsZiwgcGF0aHMpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfbmFtZT0n
Y2hyb21pdW0tZ3B1LXdpbicsICoqa3dhcmdzKToKKyAgICAgICAgY2hyb21pdW1fd2luLkNocm9t
aXVtV2luUG9ydC5fX2luaXRfXyhzZWxmLCBwb3J0X25hbWU9cG9ydF9uYW1lLCAqKmt3YXJncykK
KyAgICAgICAgc2VsZi5fc2V0X2dwdV9kZWZhdWx0X29wdGlvbnMoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100545</attachid>
            <date>2011-07-12 12:57:26 -0700</date>
            <delta_ts>2011-07-12 17:06:03 -0700</delta_ts>
            <desc>Try again - fold chromium_gpu into other chromium* ports.</desc>
            <filename>bug-48103-20110712125725.patch</filename>
            <type>text/plain</type>
            <size>21764</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA3ODkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyMWY1NWVmZWQ1MjIxMjkyNGM5NzNmOTcxZmM1MWFjNzA5
MDAyN2Q3Li5jN2E2YzU4YzBjMzkwNDhjMTE0YWZmNjlmMmJlOGM4YWIzZjliMmMxIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTEtMDctMTIgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IGNsZWFuIHVwIGR1cGxpY2F0ZSwgdWdseSBjb2Rl
IGluIHBvcnQvY2hyb21pdW1fZ3B1Ki5weQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDgxMDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZXMgbWVyZ2VzIHRoZSBjb2RlIGluIGNocm9taXVt
X2dwdS5weSBpbnRvIHRoZSBvdGhlcgorICAgICAgICBjaHJvbWl1bSBwb3J0czsga2VlcGluZyB0
aGUgY2hhbmdlcyBpbiBhIGRpZmZlcmVudCBzZXQgb2YKKyAgICAgICAgY2xhc3NlcyB3YXMgbWFr
aW5nIHRoZSBpbmhlcml0YW5jZSBncmFwaCB0b28gY29tcGxpY2F0ZWQuCisKKyAgICAgICAgVGhl
IG1ham9yIGNoYW5nZSBoZXJlIGlzIHRvIHJlZGVmaW5lIGhvdyB0aGUgYmFzZWxpbmUgZmFsbGJh
Y2sKKyAgICAgICAgcGF0aCBmb3IgdGhlIGNocm9taXVtIHBvcnRzIGlzIGNvbXB1dGVkLiBOb3cg
YWxsIG9mIHRoZSBjaHJvbWl1bQorICAgICAgICBwb3J0cyB3aWxsIHNlYXJjaCBiYXNlZCBvbiB0
aGUgdmFsdWVzIG9mIHRoZSAocG9ydC1zcGVjaWZpYykKKyAgICAgICAgR1JBUEhJQ1NfVFlQRV9G
QUxMQkFDS19QQVRIUywgQVJDSElURUNUVVJFX0ZBTExCQUNLX1BBVEhTLAorICAgICAgICBWRVJT
SU9OX0ZBTExCQUNLX1BBVEhTIGFuZCB0aGVuIGEgQkFTRV9GQUxMQkFDS19QQVRIUyBsaXN0LiBU
aGlzCisgICAgICAgIHRlY2huaXF1ZSBjYW4gcHJvYmFibHkgYmUgbWFkZSBnZW5lcmljIGFuZCB3
ZSBjYW4gcHVzaCB0aGUKKyAgICAgICAgYmFzZWxpbmVfc2VhcmNoX3BhdGgoKSBsb2dpYyB1cCBp
bnRvIGJhc2UucHkuIChPZiBjb3Vyc2UsIHRoaXMKKyAgICAgICAgd2lsbCBicmVhayBpZiB0aGUg
c2VhcmNoIHBhdGggdmFyaWVzIGJhc2VkIG9uIHRoZSBjb21iaW5hdGlvbiBvZgorICAgICAgICBt
dWx0aXBsZSBhdHRyaWJ1dGVzLCByYXRoZXIgdGhhbiBqdXN0IHRoZSBzdW0pLgorCisgICAgICAg
IFdlIHJlbW92ZSBjaHJvbWl1bV9ncHUucHkuIFdlIGxlYXZlIGNocm9taXVtX2dwdV91bml0dGVz
dC5weSBmb3IKKyAgICAgICAgbm93IHRvIChhKSBkZW1vbnN0cmF0ZSB0aGF0IHRoZXJlIGFyZSBu
byB2aXNpYmxlIHNlbWFudGljCisgICAgICAgIGNoYW5nZXMgKGFsbCB0aGUgdGVzdHMgc3RpbGwg
cGFzcyB1bmNoYW5nZWQpIGFuZCAoYikgaXQncyBub3QKKyAgICAgICAgY2xlYXIgd2hlcmUgdGhl
IHRlc3RzIHNob3VsZCBsaXZlIChtb3ZlIGludG8KKyAgICAgICAgY2hyb21pdW1fdW5pdHRlc3Qu
cHk/KS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hy
b21pdW0ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9j
aHJvbWl1bV9ncHUucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9ncHVfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9saW51eC5weToKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3dpbi5w
eToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3Rvcnku
cHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5
X3VuaXR0ZXN0LnB5OgorCiAyMDExLTA3LTExICBBbGljZSBCb3hoYWxsICA8YWJveGhhbGxAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIENvbnZlcnQganNvbl9yZXN1bHRzX2dlbmVyYXRvci5weSB0
byBvdXRwdXQgdmVyc2lvbiA0IEpTT04uCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQppbmRleCAwYmIwNjM4MTkxOTdmMzA3NTkx
MWJmMmNjZGNmNWNkZWE1MzBhNGFhLi41MWNlMjQ5ZmFjYzY5OGQ2MjI2YTNjOGIzOTlkOWYwZDY3
NDE4MDU1IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2Nocm9taXVtLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvY2hyb21pdW0ucHkKQEAgLTY3LDkgKzY3LDM0IEBAIGNsYXNzIENocm9taXVtUG9ydChQ
b3J0KToKICAgICAgICAgJ2Nocm9taXVtLWdwdS1tYWMtc25vd2xlb3BhcmQnLCAnY2hyb21pdW0t
Z3B1LXdpbi13aW43JywgJ2Nocm9taXVtLWdwdS1saW51eC14ODZfNjQnLAogICAgIF0KIAorICAg
ICMgU3ViY2xhc3NlcyBtdXN0IG92ZXJyaWRlIHRoZXNlIHRvIHNwZWNpZnkgaG93IHRoZSBiYXNl
bGluZSBzZWFyY2ggcGF0aCB2YXJpZXMgYnkKKyAgICAjIHRoZXNlIGFzcGVjdHMgb2YgdGhlIHBv
cnQuCisgICAgR1JBUEhJQ1NfVFlQRV9GQUxMQkFDS19QQVRIUyA9IHt9CisKKyAgICBBUkNISVRF
Q1RVUkVfRkFMTEJBQ0tfUEFUSFMgPSB7fQorCisgICAgVkVSU0lPTl9GQUxMQkFDS19QQVRIUyA9
IHt9CisKKyAgICBCQVNFX0ZBTExCQUNLX1BBVEhTID0gW10KKwogICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIFBvcnQuX19pbml0X18oc2VsZiwgKiprd2FyZ3MpCiAg
ICAgICAgIHNlbGYuX2Nocm9taXVtX2Jhc2VfZGlyID0gTm9uZQorICAgICAgICBpZiAnLWdwdScg
aW4gc2VsZi5uYW1lKCk6CisgICAgICAgICAgICBzZWxmLl9zZXRfZ3B1X2RlZmF1bHRfb3B0aW9u
cygpCisKKyAgICBkZWYgX3NldF9ncHVfZGVmYXVsdF9vcHRpb25zKHNlbGYpOgorICAgICAgICBz
ZWxmLl9ncmFwaGljc190eXBlID0gJ2dwdScKKyAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdh
Y2NlbGVyYXRlZF9jb21wb3NpdGluZycpIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9vcHRp
b25zLmFjY2VsZXJhdGVkX2NvbXBvc2l0aW5nID0gVHJ1ZQorICAgICAgICBpZiBzZWxmLmdldF9v
cHRpb24oJ2FjY2VsZXJhdGVkXzJkX2NhbnZhcycpIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxm
Ll9vcHRpb25zLmFjY2VsZXJhdGVkXzJkX2NhbnZhcyA9IFRydWUKKworICAgICAgICAjIEZJWE1F
OiBSZW1vdmUgdGhpcyBhZnRlciBodHRwOi8vY29kZXJldmlldy5jaHJvbWl1bS5vcmcvNTEzMzAw
MS8gaXMgZW5hYmxlZAorICAgICAgICAjIG9uIHRoZSBib3RzLgorICAgICAgICBpZiBzZWxmLmdl
dF9vcHRpb24oJ2J1aWxkZXJfbmFtZScpIGlzIG5vdCBOb25lIGFuZCBub3QgJyAtIEdQVScgaW4g
c2VsZi5fb3B0aW9ucy5idWlsZGVyX25hbWU6CisgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmJ1
aWxkZXJfbmFtZSArPSAnIC0gR1BVJworCiAKICAgICBkZWYgX2NoZWNrX2ZpbGVfZXhpc3RzKHNl
bGYsIHBhdGhfdG9fZmlsZSwgZmlsZV9kZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG92ZXJyaWRlX3N0ZXA9Tm9uZSwgbG9nZ2luZz1UcnVlKToKQEAgLTkwLDYgKzExNSwx
MiBAQCBjbGFzcyBDaHJvbWl1bVBvcnQoUG9ydCk6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UK
ICAgICAgICAgcmV0dXJuIFRydWUKIAorICAgIGRlZiBiYXNlbGluZV9zZWFyY2hfcGF0aChzZWxm
KToKKyAgICAgICAgZmFsbGJhY2tfcGF0aHMgPSAoc2VsZi5HUkFQSElDU19UWVBFX0ZBTExCQUNL
X1BBVEhTW3NlbGYuX2dyYXBoaWNzX3R5cGVdICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5BUkNISVRFQ1RVUkVfRkFMTEJBQ0tfUEFUSFNbc2VsZi5fYXJjaGl0ZWN0dXJlXSArCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuVkVSU0lPTl9GQUxMQkFDS19QQVRIU1tzZWxm
Ll92ZXJzaW9uXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuQkFTRV9GQUxMQkFD
S19QQVRIUykKKyAgICAgICAgcmV0dXJuIG1hcChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCwg
ZmFsbGJhY2tfcGF0aHMpCiAKICAgICBkZWYgY2hlY2tfYnVpbGQoc2VsZiwgbmVlZHNfaHR0cCk6
CiAgICAgICAgIHJlc3VsdCA9IFRydWUKQEAgLTE0Miw2ICsxNzMsMTEgQEAgY2xhc3MgQ2hyb21p
dW1Qb3J0KFBvcnQpOgogICAgICAgICByZXR1cm4gc2VsZi5fY2hlY2tfZmlsZV9leGlzdHMoaW1h
Z2VfZGlmZl9wYXRoLCAnaW1hZ2UgZGlmZiBleGUnLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3ZlcnJpZGVfc3RlcCwgbG9nZ2luZykKIAorICAgIGRlZiBkZWZhdWx0
X2NoaWxkX3Byb2Nlc3NlcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZ3JhcGhpY3NfdHlwZSA9
PSAnZ3B1JzoKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIHJldHVybiBzdXBlcihDaHJv
bWl1bVBvcnQsIHNlbGYpLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkKKwogICAgIGRlZiBkaWZm
X2ltYWdlKHNlbGYsIGV4cGVjdGVkX2NvbnRlbnRzLCBhY3R1YWxfY29udGVudHMpOgogICAgICAg
ICAjIEZJWE1FOiBuZWVkIHVuaXQgdGVzdHMgZm9yIHRoaXMuCiAgICAgICAgIGlmIG5vdCBhY3R1
YWxfY29udGVudHMgYW5kIG5vdCBleHBlY3RlZF9jb250ZW50czoKQEAgLTI1NSw2ICsyOTEsMTEg
QEAgY2xhc3MgQ2hyb21pdW1Qb3J0KFBvcnQpOgogICAgIGRlZiBhbGxfYmFzZWxpbmVfdmFyaWFu
dHMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLkFMTF9CQVNFTElORV9WQVJJQU5UUwogCisg
ICAgZGVmIHRlc3RzKHNlbGYsIHBhdGhzKToKKyAgICAgICAgaWYgc2VsZi5fZ3JhcGhpY3NfdHlw
ZSA9PSAnZ3B1JzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9ncHVfdGVzdHMoc2VsZiwgcGF0
aHMpCisgICAgICAgIHJldHVybiBzdXBlcihDaHJvbWl1bVBvcnQsIHNlbGYpLnRlc3RzKHBhdGhz
KQorCiAgICAgZGVmIHRlc3RfZXhwZWN0YXRpb25zKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5z
IHRoZSB0ZXN0IGV4cGVjdGF0aW9ucyBmb3IgdGhpcyBwb3J0LgogCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2dwdS5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fZ3B1LnB5CmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDc5MmFhNWFhM2QyMGNmYjA4NWIyNWQ5ZTNi
NWFkOTI0ZTVhN2MxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fZ3B1
LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhv
bgotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlv
bi4KLQotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWlt
cG9ydCBzeXMKLQotaW1wb3J0IGNocm9taXVtX2xpbnV4Ci1pbXBvcnQgY2hyb21pdW1fbWFjCi1p
bXBvcnQgY2hyb21pdW1fd2luCi0KLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1w
b3J0IHRlc3RfZmlsZXMKLQotCi1kZWYgZ2V0KHBsYXRmb3JtPU5vbmUsIHBvcnRfbmFtZT0nY2hy
b21pdW0tZ3B1JywgKiprd2FyZ3MpOgotICAgICIiIlNvbWUgdGVzdHMgaGF2ZSBzbGlnaHRseSBk
aWZmZXJlbnQgcmVzdWx0cyB3aGVuIHJ1biB3aGlsZSB1c2luZwotICAgIGhhcmR3YXJlIGFjY2Vs
ZXJhdGlvbi4gIEluIHRob3NlIGNhc2VzLCB3ZSBwcmVwZW5kIGFuIGFkZGl0aW9uYWwgZGlyZWN0
b3J5Ci0gICAgdG8gdGhlIGJhc2VsaW5lIHBhdGhzLiIiIgotICAgIHBsYXRmb3JtID0gcGxhdGZv
cm0gb3Igc3lzLnBsYXRmb3JtCi0gICAgaWYgcG9ydF9uYW1lID09ICdjaHJvbWl1bS1ncHUnOgot
ICAgICAgICBpZiBwbGF0Zm9ybSBpbiAoJ2N5Z3dpbicsICd3aW4zMicpOgotICAgICAgICAgICAg
cG9ydF9uYW1lID0gJ2Nocm9taXVtLWdwdS13aW4nCi0gICAgICAgIGVsaWYgcGxhdGZvcm0uc3Rh
cnRzd2l0aCgnbGludXgnKToKLSAgICAgICAgICAgIHBvcnRfbmFtZSA9ICdjaHJvbWl1bS1ncHUt
bGludXgnCi0gICAgICAgIGVsaWYgcGxhdGZvcm0gPT0gJ2Rhcndpbic6Ci0gICAgICAgICAgICBw
b3J0X25hbWUgPSAnY2hyb21pdW0tZ3B1LW1hYycKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ3Vuc3VwcG9ydGVkIHBsYXRmb3JtOiAlcycgJSBw
bGF0Zm9ybSkKLQotICAgIGlmIHBvcnRfbmFtZS5zdGFydHN3aXRoKCdjaHJvbWl1bS1ncHUtbGlu
dXgnKToKLSAgICAgICAgcmV0dXJuIENocm9taXVtR3B1TGludXhQb3J0KHBvcnRfbmFtZT1wb3J0
X25hbWUsICoqa3dhcmdzKQotICAgIGlmIHBvcnRfbmFtZS5zdGFydHN3aXRoKCdjaHJvbWl1bS1n
cHUtbWFjJyk6Ci0gICAgICAgIHJldHVybiBDaHJvbWl1bUdwdU1hY1BvcnQocG9ydF9uYW1lPXBv
cnRfbmFtZSwgKiprd2FyZ3MpCi0gICAgaWYgcG9ydF9uYW1lLnN0YXJ0c3dpdGgoJ2Nocm9taXVt
LWdwdS13aW4nKToKLSAgICAgICAgcmV0dXJuIENocm9taXVtR3B1V2luUG9ydChwb3J0X25hbWU9
cG9ydF9uYW1lLCAqKmt3YXJncykKLSAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCd1bnN1
cHBvcnRlZCBwb3J0OiAlcycgJSBwb3J0X25hbWUpCi0KLQotIyBGSVhNRTogVGhlc2Ugc2hvdWxk
IHJlYWxseSBiZSBhIG1peGluIGNsYXNzLgotCi1kZWYgX3NldF9ncHVfb3B0aW9ucyhwb3J0KToK
LSAgICBwb3J0Ll9ncmFwaGljc190eXBlID0gJ2dwdScKLSAgICBpZiBwb3J0LmdldF9vcHRpb24o
J2FjY2VsZXJhdGVkX2NvbXBvc2l0aW5nJykgaXMgTm9uZToKLSAgICAgICAgcG9ydC5fb3B0aW9u
cy5hY2NlbGVyYXRlZF9jb21wb3NpdGluZyA9IFRydWUKLSAgICBpZiBwb3J0LmdldF9vcHRpb24o
J2FjY2VsZXJhdGVkXzJkX2NhbnZhcycpIGlzIE5vbmU6Ci0gICAgICAgIHBvcnQuX29wdGlvbnMu
YWNjZWxlcmF0ZWRfMmRfY2FudmFzID0gVHJ1ZQotCi0gICAgIyBGSVhNRTogUmVtb3ZlIHRoaXMg
YWZ0ZXIgaHR0cDovL2NvZGVyZXZpZXcuY2hyb21pdW0ub3JnLzUxMzMwMDEvIGlzIGVuYWJsZWQK
LSAgICAjIG9uIHRoZSBib3RzLgotICAgIGlmIHBvcnQuZ2V0X29wdGlvbignYnVpbGRlcl9uYW1l
JykgaXMgbm90IE5vbmUgYW5kIG5vdCAnIC0gR1BVJyBpbiBwb3J0Ll9vcHRpb25zLmJ1aWxkZXJf
bmFtZToKLSAgICAgICAgcG9ydC5fb3B0aW9ucy5idWlsZGVyX25hbWUgKz0gJyAtIEdQVScKLQot
Ci1kZWYgX3Rlc3RzKHBvcnQsIHBhdGhzKToKLSAgICBpZiBub3QgcGF0aHM6Ci0gICAgICAgIHBh
dGhzID0gWydjb21wb3NpdGluZycsICdwbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZycsICdt
ZWRpYScsICdhbmltYXRpb25zLzNkJ10KLSAgICAgICAgaWYgbm90IHBvcnQubmFtZSgpLnN0YXJ0
c3dpdGgoJ2Nocm9taXVtLWdwdS1tYWMnKToKLSAgICAgICAgICAgICMgQ2FudmFzIGlzIG5vdCB5
ZXQgYWNjZWxlcmF0ZWQgb24gdGhlIE1hYywgc28gdGhlcmUncyBubyBwb2ludAotICAgICAgICAg
ICAgIyBpbiBydW5uaW5nIHRoZSB0ZXN0cyB0aGVyZS4KLSAgICAgICAgICAgIHBhdGhzICs9IFsn
ZmFzdC9jYW52YXMnLCAnY2FudmFzL3BoaWxpcCddCi0gICAgICAgICMgaW52YWxpZGF0ZV9yZWN0
Lmh0bWwgdGVzdHMgYSBidWcgaW4gdGhlIGNvbXBvc2l0b3IuCi0gICAgICAgICMgU2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzExNwotICAgICAgICBwYXRocyAr
PSBbJ3BsdWdpbnMvaW52YWxpZGF0ZV9yZWN0Lmh0bWwnXQotICAgIHJldHVybiBzZXQoW3BvcnQu
cmVsYXRpdmVfdGVzdF9maWxlbmFtZShmKSBmb3IgZiBpbiB0ZXN0X2ZpbGVzLmZpbmQocG9ydCwg
cGF0aHMpXSkKLQotCi1jbGFzcyBDaHJvbWl1bUdwdUxpbnV4UG9ydChjaHJvbWl1bV9saW51eC5D
aHJvbWl1bUxpbnV4UG9ydCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfbmFtZT0nY2hy
b21pdW0tZ3B1LWxpbnV4JywgKiprd2FyZ3MpOgotICAgICAgICBjaHJvbWl1bV9saW51eC5DaHJv
bWl1bUxpbnV4UG9ydC5fX2luaXRfXyhzZWxmLCBwb3J0X25hbWU9cG9ydF9uYW1lLCAqKmt3YXJn
cykKLSAgICAgICAgX3NldF9ncHVfb3B0aW9ucyhzZWxmKQotCi0gICAgZGVmIGJhc2VsaW5lX3Nl
YXJjaF9wYXRoKHNlbGYpOgotICAgICAgICAjIE1pbWljIHRoZSBMaW51eCAtPiBXaW4gZXhwZWN0
YXRpb25zIGZhbGxiYWNrIGluIHRoZSBvcmRpbmFyeSBDaHJvbWl1bSBwb3J0LgotICAgICAgICBy
ZXR1cm4gKG1hcChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCwgWydjaHJvbWl1bS1ncHUtbGlu
dXgnLCAnY2hyb21pdW0tZ3B1LXdpbicsICdjaHJvbWl1bS1ncHUnXSkgKwotICAgICAgICAgICAg
ICAgIGNocm9taXVtX2xpbnV4LkNocm9taXVtTGludXhQb3J0LmJhc2VsaW5lX3NlYXJjaF9wYXRo
KHNlbGYpKQotCi0gICAgZGVmIGRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgotICAgICAg
ICByZXR1cm4gMQotCi0gICAgZGVmIHRlc3RzKHNlbGYsIHBhdGhzKToKLSAgICAgICAgcmV0dXJu
IF90ZXN0cyhzZWxmLCBwYXRocykKLQotCi1jbGFzcyBDaHJvbWl1bUdwdU1hY1BvcnQoY2hyb21p
dW1fbWFjLkNocm9taXVtTWFjUG9ydCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfbmFt
ZT0nY2hyb21pdW0tZ3B1LW1hYycsICoqa3dhcmdzKToKLSAgICAgICAgY2hyb21pdW1fbWFjLkNo
cm9taXVtTWFjUG9ydC5fX2luaXRfXyhzZWxmLCBwb3J0X25hbWU9cG9ydF9uYW1lLCAqKmt3YXJn
cykKLSAgICAgICAgX3NldF9ncHVfb3B0aW9ucyhzZWxmKQotCi0gICAgZGVmIGJhc2VsaW5lX3Nl
YXJjaF9wYXRoKHNlbGYpOgotICAgICAgICByZXR1cm4gKG1hcChzZWxmLl93ZWJraXRfYmFzZWxp
bmVfcGF0aCwgWydjaHJvbWl1bS1ncHUtbWFjJywgJ2Nocm9taXVtLWdwdSddKSArCi0gICAgICAg
ICAgICAgICAgY2hyb21pdW1fbWFjLkNocm9taXVtTWFjUG9ydC5iYXNlbGluZV9zZWFyY2hfcGF0
aChzZWxmKSkKLQotICAgIGRlZiBkZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcyhzZWxmKToKLSAgICAg
ICAgcmV0dXJuIDEKLQotICAgIGRlZiB0ZXN0cyhzZWxmLCBwYXRocyk6Ci0gICAgICAgIHJldHVy
biBfdGVzdHMoc2VsZiwgcGF0aHMpCi0KLQotY2xhc3MgQ2hyb21pdW1HcHVXaW5Qb3J0KGNocm9t
aXVtX3dpbi5DaHJvbWl1bVdpblBvcnQpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X25h
bWU9J2Nocm9taXVtLWdwdS13aW4nLCAqKmt3YXJncyk6Ci0gICAgICAgIGNocm9taXVtX3dpbi5D
aHJvbWl1bVdpblBvcnQuX19pbml0X18oc2VsZiwgcG9ydF9uYW1lPXBvcnRfbmFtZSwgKiprd2Fy
Z3MpCi0gICAgICAgIF9zZXRfZ3B1X29wdGlvbnMoc2VsZikKLQotICAgIGRlZiBiYXNlbGluZV9z
ZWFyY2hfcGF0aChzZWxmKToKLSAgICAgICAgcmV0dXJuIChtYXAoc2VsZi5fd2Via2l0X2Jhc2Vs
aW5lX3BhdGgsIFsnY2hyb21pdW0tZ3B1LXdpbicsICdjaHJvbWl1bS1ncHUnXSkgKwotICAgICAg
ICAgICAgICAgIGNocm9taXVtX3dpbi5DaHJvbWl1bVdpblBvcnQuYmFzZWxpbmVfc2VhcmNoX3Bh
dGgoc2VsZikpCi0KLSAgICBkZWYgZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoc2VsZik6Ci0gICAg
ICAgIHJldHVybiAxCi0KLSAgICBkZWYgdGVzdHMoc2VsZiwgcGF0aHMpOgotICAgICAgICByZXR1
cm4gX3Rlc3RzKHNlbGYsIHBhdGhzKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9ncHVfdW5pdHRlc3QucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2dwdV91bml0dGVzdC5weQpp
bmRleCAwM2M4ZTRlMWNiN2E3YzE0MTRkZDRlZjg3ZDkwNjc3NjdmZWQ3MGQ2Li42NjVmNjMxNjU3
MjNmNDE5ODliNTRkOGNlYTgzODIxN2ZhNTZlMmJhIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2dwdV91bml0dGVzdC5weQorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2dwdV91
bml0dGVzdC5weQpAQCAtMjgsOCArMjgsNiBAQCBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QK
IAogZnJvbSB3ZWJraXRweS50b29sIGltcG9ydCBtb2NrdG9vbAotaW1wb3J0IGNocm9taXVtX2dw
dQotCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBmYWN0b3J5CiBmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBwb3J0X3Rlc3RjYXNlCiAKQEAgLTYx
LDEwICs1OSw5IEBAIGNsYXNzIENocm9taXVtR3B1VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXJfbmFtZT0n
Zm9vJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRf
cHJvY2Vzc2VzPU5vbmUpCiAgICAgICAgIGlmIGlucHV0X25hbWUgYW5kIHBsYXRmb3JtOgotICAg
ICAgICAgICAgcG9ydCA9IGNocm9taXVtX2dwdS5nZXQocGxhdGZvcm09cGxhdGZvcm0sIHBvcnRf
bmFtZT1pbnB1dF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0
aW9ucz1tb2NrX29wdGlvbnMpCisgICAgICAgICAgICBwb3J0ID0gZmFjdG9yeS5nZXQocGxhdGZv
cm09cGxhdGZvcm0sIHBvcnRfbmFtZT1pbnB1dF9uYW1lLCBvcHRpb25zPW1vY2tfb3B0aW9ucykK
ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBvcnQgPSBjaHJvbWl1bV9ncHUuZ2V0KHBvcnRf
bmFtZT1wb3J0X25hbWUsIG9wdGlvbnM9bW9ja19vcHRpb25zKQorICAgICAgICAgICAgcG9ydCA9
IGZhY3RvcnkuZ2V0KHBvcnRfbmFtZT1wb3J0X25hbWUsIG9wdGlvbnM9bW9ja19vcHRpb25zKQog
ICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5fb3B0aW9ucy5hY2NlbGVyYXRlZF9jb21wb3Np
dGluZykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQuX29wdGlvbnMuYWNjZWxlcmF0ZWRf
MmRfY2FudmFzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuZGVmYXVsdF9jaGlsZF9w
cm9jZXNzZXMoKSwgMSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvY2hyb21pdW1fbGludXgucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2xpbnV4LnB5CmluZGV4IDU4NjkzNGQyMTQzY2I4OTUx
ZGZiMWQ2ZTc1Y2YwN2Y0MzVkYjg3YjEuLjAxYjRiZTE1NDcyMDM3MjVmOTE3NDVjZjE4OWNhNmRm
ZGM3NWM3OWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvY2hyb21pdW1fbGludXgucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9saW51eC5weQpAQCAtNDAsMjQgKzQwLDI4IEBAIF9sb2cg
PSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIGNsYXNzIENocm9taXVtTGludXhQb3J0KGNo
cm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgU1VQUE9SVEVEX0FSQ0hJVEVDVFVSRVMgPSAoJ3g4
NicsICd4ODZfNjQnKQogCi0gICAgRkFMTEJBQ0tfUEFUSFMgPSB7Ci0gICAgICAgICd4ODZfNjQn
OiBbCi0gICAgICAgICAgICAnY2hyb21pdW0tbGludXgnLAotICAgICAgICAgICAgJ2Nocm9taXVt
LXdpbicsCi0gICAgICAgICAgICAnY2hyb21pdW0nLAotICAgICAgICAgICAgJ3dpbicsCi0gICAg
ICAgICAgICAnbWFjJywKLSAgICAgICAgXSwKLSAgICAgICAgJ3g4Nic6IFsKLSAgICAgICAgICAg
ICdjaHJvbWl1bS1saW51eC14ODYnLAotICAgICAgICAgICAgJ2Nocm9taXVtLWxpbnV4JywKLSAg
ICAgICAgICAgICdjaHJvbWl1bS13aW4nLAotICAgICAgICAgICAgJ2Nocm9taXVtJywKLSAgICAg
ICAgICAgICd3aW4nLAotICAgICAgICAgICAgJ21hYycsCi0gICAgICAgIF0sCisgICAgR1JBUEhJ
Q1NfVFlQRV9GQUxMQkFDS19QQVRIUyA9IHsKKyAgICAgICAgJ2NwdSc6IFtdLAorICAgICAgICAn
Z3B1JzogWydjaHJvbWl1bS1ncHUtbGludXgnLCAnY2hyb21pdW0tZ3B1LXdpbicsICdjaHJvbWl1
bS1ncHUnXSwKICAgICB9CiAKKyAgICBBUkNISVRFQ1RVUkVfRkFMTEJBQ0tfUEFUSFMgPSB7Cisg
ICAgICAgICd4ODZfNjQnOiBbXSwKKyAgICAgICAgJ3g4Nic6IFsnY2hyb21pdW0tbGludXgteDg2
J10sCisgICAgfQorCisgICAgVkVSU0lPTl9GQUxMQkFDS19QQVRIUyA9IHsKKyAgICAgICAgJ2x1
Y2lkJzogW10sCisgICAgfQorCisgICAgQkFTRV9GQUxMQkFDS19QQVRIUyA9IFsKKyAgICAgICAg
J2Nocm9taXVtLWxpbnV4JywKKyAgICAgICAgJ2Nocm9taXVtLXdpbicsCisgICAgICAgICdjaHJv
bWl1bScsCisgICAgICAgICd3aW4nLAorICAgICAgICAnbWFjJywKKyAgICBdCisKICAgICBkZWYg
X19pbml0X18oc2VsZiwgcG9ydF9uYW1lPU5vbmUsICoqa3dhcmdzKToKICAgICAgICAgcG9ydF9u
YW1lID0gcG9ydF9uYW1lIG9yICdjaHJvbWl1bS1saW51eCcKICAgICAgICAgY2hyb21pdW0uQ2hy
b21pdW1Qb3J0Ll9faW5pdF9fKHNlbGYsIHBvcnRfbmFtZT1wb3J0X25hbWUsICoqa3dhcmdzKQpA
QCAtMTAwLDEwICsxMDQsNiBAQCBjbGFzcyBDaHJvbWl1bUxpbnV4UG9ydChjaHJvbWl1bS5DaHJv
bWl1bVBvcnQpOgogICAgICAgICAjIGlmIHdlIGFjdHVhbGx5IHRyeSB0byB1c2UgdGhlIGJpbmFy
eSwgY2hlY2tfYnVpbGQoKSBzaG91bGQgZmFpbC4KICAgICAgICAgcmV0dXJuICd4ODZfNjQnCiAK
LSAgICBkZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6Ci0gICAgICAgIHBvcnRfbmFtZXMg
PSBzZWxmLkZBTExCQUNLX1BBVEhTW3NlbGYuX2FyY2hpdGVjdHVyZV0KLSAgICAgICAgcmV0dXJu
IG1hcChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCwgcG9ydF9uYW1lcykKLQogICAgIGRlZiBj
aGVja19idWlsZChzZWxmLCBuZWVkc19odHRwKToKICAgICAgICAgcmVzdWx0ID0gY2hyb21pdW0u
Q2hyb21pdW1Qb3J0LmNoZWNrX2J1aWxkKHNlbGYsIG5lZWRzX2h0dHApCiAgICAgICAgIHJlc3Vs
dCA9IHNlbGYuY2hlY2tfd2RpZmYoKSBhbmQgcmVzdWx0CmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5CmluZGV4IGEz
Y2FhYTE5MDdmZTA5ZTQyMWYwMDA2YWY4YjBlNTZiNTBlZjJmZTUuLjQ3YmRlMDJmZmM5ODgzNWQy
NGM4YzQzYzk0ZmQ3YTdkNGUwZjgwOGMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5CkBAIC00NiwyOCArNDYs
MzYgQEAgY2xhc3MgQ2hyb21pdW1NYWNQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAg
IiIiQ2hyb21pdW0gTWFjIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGNsYXNzLiIiIgogICAg
IFNVUFBPUlRFRF9PU19WRVJTSU9OUyA9ICgnbGVvcGFyZCcsICdzbm93bGVvcGFyZCcsICdmdXR1
cmUnKQogCi0gICAgRkFMTEJBQ0tfUEFUSFMgPSB7CisgICAgR1JBUEhJQ1NfVFlQRV9GQUxMQkFD
S19QQVRIUyA9IHsKKyAgICAgICAgJ2NwdSc6IFtdLAorICAgICAgICAnZ3B1JzogWydjaHJvbWl1
bS1ncHUtbWFjJywgJ2Nocm9taXVtLWdwdSddLAorICAgIH0KKworICAgIEFSQ0hJVEVDVFVSRV9G
QUxMQkFDS19QQVRIUyA9IHsKKyAgICAgICAgJ3g4Nic6IFtdLAorICAgIH0KKworICAgIFZFUlNJ
T05fRkFMTEJBQ0tfUEFUSFMgPSB7CiAgICAgICAgICdsZW9wYXJkJzogWwogICAgICAgICAgICAg
J2Nocm9taXVtLW1hYy1sZW9wYXJkJywKICAgICAgICAgICAgICdjaHJvbWl1bS1tYWMnLAogICAg
ICAgICAgICAgJ2Nocm9taXVtJywKICAgICAgICAgICAgICdtYWMtbGVvcGFyZCcsCiAgICAgICAg
ICAgICAnbWFjLXNub3dsZW9wYXJkJywKLSAgICAgICAgICAgICdtYWMnLAogICAgICAgICBdLAog
ICAgICAgICAnc25vd2xlb3BhcmQnOiBbCiAgICAgICAgICAgICAnY2hyb21pdW0tbWFjJywKICAg
ICAgICAgICAgICdjaHJvbWl1bScsCiAgICAgICAgICAgICAnbWFjLXNub3dsZW9wYXJkJywKLSAg
ICAgICAgICAgICdtYWMnLAogICAgICAgICBdLAogICAgICAgICAnZnV0dXJlJzogWwogICAgICAg
ICAgICAgJ2Nocm9taXVtLW1hYycsCiAgICAgICAgICAgICAnY2hyb21pdW0nLAotICAgICAgICAg
ICAgJ21hYycsCiAgICAgICAgIF0sCiAgICAgfQogCisgICAgQkFTRV9GQUxMQkFDS19QQVRIUyA9
IFsnbWFjJ10KKwogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X25hbWU9Tm9uZSwgb3NfdmVy
c2lvbl9zdHJpbmc9Tm9uZSwgKiprd2FyZ3MpOgogICAgICAgICAjIFdlJ3JlIGEgbGl0dGxlIGdl
bmVyaWMgaGVyZSBiZWNhdXNlIHRoaXMgY29kZSBpcyByZXVzZWQgYnkgdGhlCiAgICAgICAgICMg
J2dvb2dsZS1jaHJvbWUnIHBvcnQgYXMgd2VsbCBhcyB0aGUgJ21vY2stJyBhbmQgJ2RyeXJ1bi0n
IHBvcnRzLgpAQCAtODEsOSArODksNiBAQCBjbGFzcyBDaHJvbWl1bU1hY1BvcnQoY2hyb21pdW0u
Q2hyb21pdW1Qb3J0KToKICAgICAgICAgICAgIGFzc2VydCBzZWxmLl92ZXJzaW9uIGluIHNlbGYu
U1VQUE9SVEVEX09TX1ZFUlNJT05TCiAgICAgICAgIHNlbGYuX29wZXJhdGluZ19zeXN0ZW0gPSAn
bWFjJwogCi0gICAgZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgotICAgICAgICByZXR1
cm4gbWFwKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoLCBzZWxmLkZBTExCQUNLX1BBVEhTW3Nl
bGYuX3ZlcnNpb25dKQotCiAgICAgZGVmIGNoZWNrX2J1aWxkKHNlbGYsIG5lZWRzX2h0dHApOgog
ICAgICAgICByZXN1bHQgPSBjaHJvbWl1bS5DaHJvbWl1bVBvcnQuY2hlY2tfYnVpbGQoc2VsZiwg
bmVlZHNfaHR0cCkKICAgICAgICAgcmVzdWx0ID0gc2VsZi5jaGVja193ZGlmZigpIGFuZCByZXN1
bHQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
Y2hyb21pdW1fd2luLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9jaHJvbWl1bV93aW4ucHkKaW5kZXggMDhhN2MzYWJjNGRiZTA1NTZjZTZmMDE4NWRhOGYyMDEw
MDIwNjcwZC4uMzRkYWVlNDNiZjFjMWI3ZWY3ZjEwMzI2ODE3ZjA0NzdkMTQ4Y2QyMiAxMDA3NTUK
LS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93
aW4ucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bV93aW4ucHkKQEAgLTYwLDMxICs2MCwyOSBAQCBjbGFzcyBDaHJvbWl1bVdpblBvcnQoY2hy
b21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICAjIEZJWE1FOiBGaWd1cmUgb3V0IGhvdyB0byB1bmlm
eSB0aGlzIHdpdGggYmFzZS5UZXN0Q29uZmlndXJhdGlvbi5hbGxfc3lzdGVtcygpPwogICAgIFNV
UFBPUlRFRF9WRVJTSU9OUyA9ICgneHAnLCAndmlzdGEnLCAnd2luNycpCiAKKyAgICBHUkFQSElD
U19UWVBFX0ZBTExCQUNLX1BBVEhTID0geworICAgICAgICAnY3B1JzogW10sCisgICAgICAgICdn
cHUnOiBbJ2Nocm9taXVtLWdwdS13aW4nLCAnY2hyb21pdW0tZ3B1J10sCisgICAgfQorCisgICAg
QVJDSElURUNUVVJFX0ZBTExCQUNLX1BBVEhTID0geworICAgICAgICAneDg2JzogW10sCisgICAg
fQorCiAgICAgIyBGSVhNRTogRG8gd2UgbmVlZCBtYWMtc25vd2xlb3BhcmQgaGVyZSwgbGlrZSB0
aGUgYmFzZSB3aW4gcG9ydD8KLSAgICBGQUxMQkFDS19QQVRIUyA9IHsKLSAgICAgICAgJ3hwJzog
WwotICAgICAgICAgICAgJ2Nocm9taXVtLXdpbi14cCcsCi0gICAgICAgICAgICAnY2hyb21pdW0t
d2luLXZpc3RhJywKLSAgICAgICAgICAgICdjaHJvbWl1bS13aW4nLAotICAgICAgICAgICAgJ2No
cm9taXVtJywKLSAgICAgICAgICAgICd3aW4nLAotICAgICAgICAgICAgJ21hYycsCi0gICAgICAg
IF0sCi0gICAgICAgICd2aXN0YSc6IFsKLSAgICAgICAgICAgICdjaHJvbWl1bS13aW4tdmlzdGEn
LAotICAgICAgICAgICAgJ2Nocm9taXVtLXdpbicsCi0gICAgICAgICAgICAnY2hyb21pdW0nLAot
ICAgICAgICAgICAgJ3dpbicsCi0gICAgICAgICAgICAnbWFjJywKLSAgICAgICAgXSwKLSAgICAg
ICAgJ3dpbjcnOiBbCi0gICAgICAgICAgICAnY2hyb21pdW0td2luJywKLSAgICAgICAgICAgICdj
aHJvbWl1bScsCi0gICAgICAgICAgICAnd2luJywKLSAgICAgICAgICAgICdtYWMnLAotICAgICAg
ICBdLAorICAgIFZFUlNJT05fRkFMTEJBQ0tfUEFUSFMgPSB7CisgICAgICAgICd4cCc6IFsnY2hy
b21pdW0td2luLXhwJywgJ2Nocm9taXVtLXdpbi12aXN0YSddLAorICAgICAgICAndmlzdGEnOiBb
J2Nocm9taXVtLXdpbi12aXN0YSddLAorICAgICAgICAnd2luNyc6IFtdLAogICAgIH0KIAorICAg
IEJBU0VfRkFMTEJBQ0tfUEFUSFMgPSBbCisgICAgICAgICdjaHJvbWl1bS13aW4nLAorICAgICAg
ICAnY2hyb21pdW0nLAorICAgICAgICAnd2luJywKKyAgICAgICAgJ21hYycsCisgICAgXQorCiAg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfbmFtZT1Ob25lLCB3aW5kb3dzX3ZlcnNpb249Tm9u
ZSwgKiprd2FyZ3MpOgogICAgICAgICAjIFdlJ3JlIGEgbGl0dGxlIGdlbmVyaWMgaGVyZSBiZWNh
dXNlIHRoaXMgY29kZSBpcyByZXVzZWQgYnkgdGhlCiAgICAgICAgICMgJ2dvb2dsZS1jaHJvbWUn
IHBvcnQgYXMgd2VsbCBhcyB0aGUgJ21vY2stJyBhbmQgJ2RyeXJ1bi0nIHBvcnRzLgpAQCAtMTE1
LDEwICsxMTMsNiBAQCBjbGFzcyBDaHJvbWl1bVdpblBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0
KToKICAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbc2V0dXBfbW91bnRd
KQogICAgICAgICByZXR1cm4gZW52CiAKLSAgICBkZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2Vs
Zik6Ci0gICAgICAgIHBvcnRfbmFtZXMgPSBzZWxmLkZBTExCQUNLX1BBVEhTW3NlbGYudmVyc2lv
bigpXQotICAgICAgICByZXR1cm4gbWFwKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoLCBwb3J0
X25hbWVzKQotCiAgICAgZGVmIGNoZWNrX2J1aWxkKHNlbGYsIG5lZWRzX2h0dHApOgogICAgICAg
ICByZXN1bHQgPSBjaHJvbWl1bS5DaHJvbWl1bVBvcnQuY2hlY2tfYnVpbGQoc2VsZiwgbmVlZHNf
aHR0cCkKICAgICAgICAgaWYgbm90IHJlc3VsdDoKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weQppbmRleCA2NGQ1N2U1ZTFkMGRiODNm
MWRiZTk3MDdlZjU0ZjhhNTlmM2E1ODk0Li5mOTAzZGE5OTEzYjNkM2QxZGQzYWRkZTRmMmFhZWY5
NTcwYzk2ZTYzIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2ZhY3RvcnkucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9mYWN0b3J5LnB5CkBAIC05OSwxOCArOTksMTYgQEAgZGVmIF9nZXRfa3dhcmdzKCoq
a3dhcmdzKToKICAgICBlbGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgoJ3F0Jyk6CiAgICAgICAg
IGltcG9ydCBxdAogICAgICAgICBtYWtlciA9IHF0LlF0UG9ydAotICAgIGVsaWYgcG9ydF90b191
c2Uuc3RhcnRzd2l0aCgnY2hyb21pdW0tZ3B1Jyk6Ci0gICAgICAgIGltcG9ydCBjaHJvbWl1bV9n
cHUKLSAgICAgICAgbWFrZXIgPSBjaHJvbWl1bV9ncHUuZ2V0Ci0gICAgZWxpZiBwb3J0X3RvX3Vz
ZS5zdGFydHN3aXRoKCdjaHJvbWl1bS1tYWMnKToKLSAgICAgICAgaW1wb3J0IGNocm9taXVtX21h
YwotICAgICAgICBtYWtlciA9IGNocm9taXVtX21hYy5DaHJvbWl1bU1hY1BvcnQKLSAgICBlbGlm
IHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLWxpbnV4Jyk6Ci0gICAgICAgIGltcG9y
dCBjaHJvbWl1bV9saW51eAotICAgICAgICBtYWtlciA9IGNocm9taXVtX2xpbnV4LkNocm9taXVt
TGludXhQb3J0Ci0gICAgZWxpZiBwb3J0X3RvX3VzZS5zdGFydHN3aXRoKCdjaHJvbWl1bS13aW4n
KToKLSAgICAgICAgaW1wb3J0IGNocm9taXVtX3dpbgotICAgICAgICBtYWtlciA9IGNocm9taXVt
X3dpbi5DaHJvbWl1bVdpblBvcnQKKyAgICBlbGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgoJ2No
cm9taXVtJyk6CisgICAgICAgIGlmICctbWFjJyBpbiBwb3J0X3RvX3VzZToKKyAgICAgICAgICAg
IGltcG9ydCBjaHJvbWl1bV9tYWMKKyAgICAgICAgICAgIG1ha2VyID0gY2hyb21pdW1fbWFjLkNo
cm9taXVtTWFjUG9ydAorICAgICAgICBlbGlmICctbGludXgnIGluIHBvcnRfdG9fdXNlOgorICAg
ICAgICAgICAgaW1wb3J0IGNocm9taXVtX2xpbnV4CisgICAgICAgICAgICBtYWtlciA9IGNocm9t
aXVtX2xpbnV4LkNocm9taXVtTGludXhQb3J0CisgICAgICAgIGVsaWYgJy13aW4nIGluIHBvcnRf
dG9fdXNlOgorICAgICAgICAgICAgaW1wb3J0IGNocm9taXVtX3dpbgorICAgICAgICAgICAgbWFr
ZXIgPSBjaHJvbWl1bV93aW4uQ2hyb21pdW1XaW5Qb3J0CiAgICAgZWxpZiBwb3J0X3RvX3VzZS5z
dGFydHN3aXRoKCdnb29nbGUtY2hyb21lJyk6CiAgICAgICAgIGltcG9ydCBnb29nbGVfY2hyb21l
CiAgICAgICAgIG1ha2VyID0gZ29vZ2xlX2Nocm9tZS5HZXRHb29nbGVDaHJvbWVQb3J0CmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3Rvcnlf
dW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Zh
Y3RvcnlfdW5pdHRlc3QucHkKaW5kZXggODhiMzIzYmJiZDhjZmU4YTg4NThkNDg4ZGEyNTRjNDg1
ODYwZDMwZi4uNTI1MTFjNTg5OGIxMDI1NGVjMTM0YzU5NzZjNGE0N2RlOTUxNzliYSAxMDA2NDQK
LS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5X3Vu
aXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
ZmFjdG9yeV91bml0dGVzdC5weQpAQCAtMzEsNyArMzEsNiBAQCBpbXBvcnQgdW5pdHRlc3QKIAog
ZnJvbSB3ZWJraXRweS50b29sIGltcG9ydCBtb2NrdG9vbAogCi1pbXBvcnQgY2hyb21pdW1fZ3B1
CiBpbXBvcnQgY2hyb21pdW1fbGludXgKIGltcG9ydCBjaHJvbWl1bV9tYWMKIGltcG9ydCBjaHJv
bWl1bV93aW4KQEAgLTEyNiwxNSArMTI1LDYgQEAgY2xhc3MgRmFjdG9yeVRlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3F0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydF9w
b3J0KCJxdCIsIHF0LlF0UG9ydCkKIAotICAgIGRlZiB0ZXN0X2Nocm9taXVtX2dwdV9saW51eChz
ZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgiY2hyb21pdW0tZ3B1LWxpbnV4IiwgY2hy
b21pdW1fZ3B1LkNocm9taXVtR3B1TGludXhQb3J0KQotCi0gICAgZGVmIHRlc3RfY2hyb21pdW1f
Z3B1X21hYyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgiY2hyb21pdW0tZ3B1LW1h
YyIsIGNocm9taXVtX2dwdS5DaHJvbWl1bUdwdU1hY1BvcnQpCi0KLSAgICBkZWYgdGVzdF9jaHJv
bWl1bV9ncHVfd2luKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9wb3J0KCJjaHJvbWl1bS1n
cHUtd2luIiwgY2hyb21pdW1fZ3B1LkNocm9taXVtR3B1V2luUG9ydCkKLQogICAgIGRlZiB0ZXN0
X2Nocm9taXVtX21hYyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgiY2hyb21pdW0t
bWFjIiwgY2hyb21pdW1fbWFjLkNocm9taXVtTWFjUG9ydCkKICAgICAgICAgc2VsZi5hc3NlcnRf
cGxhdGZvcm1fcG9ydCgiZGFyd2luIiwgc2VsZi5jaHJvbWl1bV9vcHRpb25zLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100590</attachid>
            <date>2011-07-12 17:06:07 -0700</date>
            <delta_ts>2011-08-16 16:25:13 -0700</delta_ts>
            <desc>revise w/ review feedback, fix tests and factory routines</desc>
            <filename>bug-48103-20110712170606.patch</filename>
            <type>text/plain</type>
            <size>27501</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA3ODkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyMWY1NWVmZWQ1MjIxMjkyNGM5NzNmOTcxZmM1MWFjNzA5
MDAyN2Q3Li5jN2E2YzU4YzBjMzkwNDhjMTE0YWZmNjlmMmJlOGM4YWIzZjliMmMxIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTEtMDctMTIgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IGNsZWFuIHVwIGR1cGxpY2F0ZSwgdWdseSBjb2Rl
IGluIHBvcnQvY2hyb21pdW1fZ3B1Ki5weQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDgxMDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZXMgbWVyZ2VzIHRoZSBjb2RlIGluIGNocm9taXVt
X2dwdS5weSBpbnRvIHRoZSBvdGhlcgorICAgICAgICBjaHJvbWl1bSBwb3J0czsga2VlcGluZyB0
aGUgY2hhbmdlcyBpbiBhIGRpZmZlcmVudCBzZXQgb2YKKyAgICAgICAgY2xhc3NlcyB3YXMgbWFr
aW5nIHRoZSBpbmhlcml0YW5jZSBncmFwaCB0b28gY29tcGxpY2F0ZWQuCisKKyAgICAgICAgVGhl
IG1ham9yIGNoYW5nZSBoZXJlIGlzIHRvIHJlZGVmaW5lIGhvdyB0aGUgYmFzZWxpbmUgZmFsbGJh
Y2sKKyAgICAgICAgcGF0aCBmb3IgdGhlIGNocm9taXVtIHBvcnRzIGlzIGNvbXB1dGVkLiBOb3cg
YWxsIG9mIHRoZSBjaHJvbWl1bQorICAgICAgICBwb3J0cyB3aWxsIHNlYXJjaCBiYXNlZCBvbiB0
aGUgdmFsdWVzIG9mIHRoZSAocG9ydC1zcGVjaWZpYykKKyAgICAgICAgR1JBUEhJQ1NfVFlQRV9G
QUxMQkFDS19QQVRIUywgQVJDSElURUNUVVJFX0ZBTExCQUNLX1BBVEhTLAorICAgICAgICBWRVJT
SU9OX0ZBTExCQUNLX1BBVEhTIGFuZCB0aGVuIGEgQkFTRV9GQUxMQkFDS19QQVRIUyBsaXN0LiBU
aGlzCisgICAgICAgIHRlY2huaXF1ZSBjYW4gcHJvYmFibHkgYmUgbWFkZSBnZW5lcmljIGFuZCB3
ZSBjYW4gcHVzaCB0aGUKKyAgICAgICAgYmFzZWxpbmVfc2VhcmNoX3BhdGgoKSBsb2dpYyB1cCBp
bnRvIGJhc2UucHkuIChPZiBjb3Vyc2UsIHRoaXMKKyAgICAgICAgd2lsbCBicmVhayBpZiB0aGUg
c2VhcmNoIHBhdGggdmFyaWVzIGJhc2VkIG9uIHRoZSBjb21iaW5hdGlvbiBvZgorICAgICAgICBt
dWx0aXBsZSBhdHRyaWJ1dGVzLCByYXRoZXIgdGhhbiBqdXN0IHRoZSBzdW0pLgorCisgICAgICAg
IFdlIHJlbW92ZSBjaHJvbWl1bV9ncHUucHkuIFdlIGxlYXZlIGNocm9taXVtX2dwdV91bml0dGVz
dC5weSBmb3IKKyAgICAgICAgbm93IHRvIChhKSBkZW1vbnN0cmF0ZSB0aGF0IHRoZXJlIGFyZSBu
byB2aXNpYmxlIHNlbWFudGljCisgICAgICAgIGNoYW5nZXMgKGFsbCB0aGUgdGVzdHMgc3RpbGwg
cGFzcyB1bmNoYW5nZWQpIGFuZCAoYikgaXQncyBub3QKKyAgICAgICAgY2xlYXIgd2hlcmUgdGhl
IHRlc3RzIHNob3VsZCBsaXZlIChtb3ZlIGludG8KKyAgICAgICAgY2hyb21pdW1fdW5pdHRlc3Qu
cHk/KS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hy
b21pdW0ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9j
aHJvbWl1bV9ncHUucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9ncHVfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9saW51eC5weToKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3dpbi5w
eToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3Rvcnku
cHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5
X3VuaXR0ZXN0LnB5OgorCiAyMDExLTA3LTExICBBbGljZSBCb3hoYWxsICA8YWJveGhhbGxAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIENvbnZlcnQganNvbl9yZXN1bHRzX2dlbmVyYXRvci5weSB0
byBvdXRwdXQgdmVyc2lvbiA0IEpTT04uCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQppbmRleCAwYmIwNjM4MTkxOTdmMzA3NTkx
MWJmMmNjZGNmNWNkZWE1MzBhNGFhLi4wY2NhOGMxMmNhMDZkODcyMTU0ZjJiMGY3YmE0NWYxNWJk
MmE0MDY2IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2Nocm9taXVtLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvY2hyb21pdW0ucHkKQEAgLTY3LDkgKzY3LDMyIEBAIGNsYXNzIENocm9taXVtUG9ydChQ
b3J0KToKICAgICAgICAgJ2Nocm9taXVtLWdwdS1tYWMtc25vd2xlb3BhcmQnLCAnY2hyb21pdW0t
Z3B1LXdpbi13aW43JywgJ2Nocm9taXVtLWdwdS1saW51eC14ODZfNjQnLAogICAgIF0KIAorICAg
ICMgU3ViY2xhc3NlcyBtdXN0IG92ZXJyaWRlIHRoZXNlIHRvIHNwZWNpZnkgaG93IHRoZSBiYXNl
bGluZSBzZWFyY2ggcGF0aCB2YXJpZXMgYnkKKyAgICAjIHRoZXNlIGFzcGVjdHMgb2YgdGhlIHBv
cnQuCisgICAgR1JBUEhJQ1NfVFlQRV9GQUxMQkFDS19QQVRIUyA9IHt9CisKKyAgICBBUkNISVRF
Q1RVUkVfRkFMTEJBQ0tfUEFUSFMgPSB7fQorCisgICAgVkVSU0lPTl9GQUxMQkFDS19QQVRIUyA9
IHt9CisKKyAgICBCQVNFX0ZBTExCQUNLX1BBVEhTID0gW10KKwogICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIFBvcnQuX19pbml0X18oc2VsZiwgKiprd2FyZ3MpCiAg
ICAgICAgIHNlbGYuX2Nocm9taXVtX2Jhc2VfZGlyID0gTm9uZQorICAgICAgICBpZiAnLWdwdScg
aW4gc2VsZi5uYW1lKCk6CisgICAgICAgICAgICBzZWxmLl9zZXRfZ3B1X2RlZmF1bHRfb3B0aW9u
cygpCisKKyAgICBkZWYgX3NldF9ncHVfZGVmYXVsdF9vcHRpb25zKHNlbGYpOgorICAgICAgICBz
ZWxmLl9ncmFwaGljc190eXBlID0gJ2dwdScKKyAgICAgICAgc2VsZi5zZXRfb3B0aW9uX2RlZmF1
bHQoJ2FjY2VsZXJhdGVkX2NvbXBvc2l0aW5nJywgVHJ1ZSkKKyAgICAgICAgc2VsZi5zZXRfb3B0
aW9uX2RlZmF1bHQoJ2FjY2VsZXJhdGVkXzJkX2NhbnZhcycsIFRydWUpCisKKyAgICAgICAgIyBG
SVhNRTogUmVtb3ZlIHRoaXMgYWZ0ZXIgaHR0cDovL2NvZGVyZXZpZXcuY2hyb21pdW0ub3JnLzUx
MzMwMDEvIGlzIGVuYWJsZWQKKyAgICAgICAgIyBvbiB0aGUgYm90cy4KKyAgICAgICAgaWYgc2Vs
Zi5nZXRfb3B0aW9uKCdidWlsZGVyX25hbWUnKSBpcyBub3QgTm9uZSBhbmQgbm90ICcgLSBHUFUn
IGluIHNlbGYuX29wdGlvbnMuYnVpbGRlcl9uYW1lOgorICAgICAgICAgICAgc2VsZi5fb3B0aW9u
cy5idWlsZGVyX25hbWUgKz0gJyAtIEdQVScKKwogCiAgICAgZGVmIF9jaGVja19maWxlX2V4aXN0
cyhzZWxmLCBwYXRoX3RvX2ZpbGUsIGZpbGVfZGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdmVycmlkZV9zdGVwPU5vbmUsIGxvZ2dpbmc9VHJ1ZSk6CkBAIC05MCw2ICsx
MTMsMTIgQEAgY2xhc3MgQ2hyb21pdW1Qb3J0KFBvcnQpOgogICAgICAgICAgICAgcmV0dXJuIEZh
bHNlCiAgICAgICAgIHJldHVybiBUcnVlCiAKKyAgICBkZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgo
c2VsZik6CisgICAgICAgIGZhbGxiYWNrX3BhdGhzID0gKHNlbGYuR1JBUEhJQ1NfVFlQRV9GQUxM
QkFDS19QQVRIU1tzZWxmLl9ncmFwaGljc190eXBlXSArCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuQVJDSElURUNUVVJFX0ZBTExCQUNLX1BBVEhTW3NlbGYuX2FyY2hpdGVjdHVyZV0g
KworICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLlZFUlNJT05fRkFMTEJBQ0tfUEFUSFNb
c2VsZi5fdmVyc2lvbl0gKworICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLkJBU0VfRkFM
TEJBQ0tfUEFUSFMpCisgICAgICAgIHJldHVybiBtYXAoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3Bh
dGgsIGZhbGxiYWNrX3BhdGhzKQogCiAgICAgZGVmIGNoZWNrX2J1aWxkKHNlbGYsIG5lZWRzX2h0
dHApOgogICAgICAgICByZXN1bHQgPSBUcnVlCkBAIC0xNDIsNiArMTcxLDExIEBAIGNsYXNzIENo
cm9taXVtUG9ydChQb3J0KToKICAgICAgICAgcmV0dXJuIHNlbGYuX2NoZWNrX2ZpbGVfZXhpc3Rz
KGltYWdlX2RpZmZfcGF0aCwgJ2ltYWdlIGRpZmYgZXhlJywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlX3N0ZXAsIGxvZ2dpbmcpCiAKKyAgICBkZWYgZGVm
YXVsdF9jaGlsZF9wcm9jZXNzZXMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2dyYXBoaWNzX3R5
cGUgPT0gJ2dwdSc6CisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICByZXR1cm4gc3VwZXIo
Q2hyb21pdW1Qb3J0LCBzZWxmKS5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpCisKICAgICBkZWYg
ZGlmZl9pbWFnZShzZWxmLCBleHBlY3RlZF9jb250ZW50cywgYWN0dWFsX2NvbnRlbnRzKToKICAg
ICAgICAgIyBGSVhNRTogbmVlZCB1bml0IHRlc3RzIGZvciB0aGlzLgogICAgICAgICBpZiBub3Qg
YWN0dWFsX2NvbnRlbnRzIGFuZCBub3QgZXhwZWN0ZWRfY29udGVudHM6CkBAIC0yNTUsNiArMjg5
LDIyIEBAIGNsYXNzIENocm9taXVtUG9ydChQb3J0KToKICAgICBkZWYgYWxsX2Jhc2VsaW5lX3Zh
cmlhbnRzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5BTExfQkFTRUxJTkVfVkFSSUFOVFMK
IAorICAgIGRlZiBfZGVmYXVsdF9ncHVfcGF0aHMoc2VsZik6CisgICAgICAgIHBhdGhzID0gWydj
b21wb3NpdGluZycsICdwbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZycsICdtZWRpYScsICdh
bmltYXRpb25zLzNkJ10KKyAgICAgICAgaWYgbm90IHNlbGYuX25hbWUuc3RhcnRzd2l0aCgnY2hy
b21pdW0tZ3B1LW1hYycpOgorICAgICAgICAgICAgIyBDYW52YXMgaXMgbm90IHlldCBhY2NlbGVy
YXRlZCBvbiB0aGUgTWFjLCBzbyB0aGVyZSdzIG5vIHBvaW50CisgICAgICAgICAgICAjIGluIHJ1
bm5pbmcgdGhlIHRlc3RzIHRoZXJlLgorICAgICAgICAgICAgcGF0aHMgKz0gWydmYXN0L2NhbnZh
cycsICdjYW52YXMvcGhpbGlwJ10KKyAgICAgICAgIyBpbnZhbGlkYXRlX3JlY3QuaHRtbCB0ZXN0
cyBhIGJ1ZyBpbiB0aGUgY29tcG9zaXRvci4KKyAgICAgICAgIyBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMTE3CisgICAgICAgIHBhdGhzICs9IFsncGx1Z2lu
cy9pbnZhbGlkYXRlX3JlY3QuaHRtbCddCisgICAgICAgIHJldHVybiBwYXRocworCisgICAgZGVm
IHRlc3RzKHNlbGYsIHBhdGhzKToKKyAgICAgICAgaWYgbm90IHBhdGhzIGFuZCBzZWxmLl9ncmFw
aGljc190eXBlID09ICdncHUnOgorICAgICAgICAgICAgcGF0aHMgPSBzZWxmLl9kZWZhdWx0X2dw
dV9wYXRocygpCisgICAgICAgIHJldHVybiBzdXBlcihDaHJvbWl1bVBvcnQsIHNlbGYpLnRlc3Rz
KHBhdGhzKQorCiAgICAgZGVmIHRlc3RfZXhwZWN0YXRpb25zKHNlbGYpOgogICAgICAgICAiIiJS
ZXR1cm5zIHRoZSB0ZXN0IGV4cGVjdGF0aW9ucyBmb3IgdGhpcyBwb3J0LgogCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2dwdS5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fZ3B1
LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDc5MmFhNWFhM2QyMGNmYjA4NWIy
NWQ5ZTNiNWFkOTI0ZTVhN2MxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW1fZ3B1LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52
IHB5dGhvbgotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3Ry
aWJ1dGlvbi4KLQotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLWltcG9ydCBzeXMKLQotaW1wb3J0IGNocm9taXVtX2xpbnV4Ci1pbXBvcnQgY2hyb21pdW1f
bWFjCi1pbXBvcnQgY2hyb21pdW1fd2luCi0KLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBv
cnQgaW1wb3J0IHRlc3RfZmlsZXMKLQotCi1kZWYgZ2V0KHBsYXRmb3JtPU5vbmUsIHBvcnRfbmFt
ZT0nY2hyb21pdW0tZ3B1JywgKiprd2FyZ3MpOgotICAgICIiIlNvbWUgdGVzdHMgaGF2ZSBzbGln
aHRseSBkaWZmZXJlbnQgcmVzdWx0cyB3aGVuIHJ1biB3aGlsZSB1c2luZwotICAgIGhhcmR3YXJl
IGFjY2VsZXJhdGlvbi4gIEluIHRob3NlIGNhc2VzLCB3ZSBwcmVwZW5kIGFuIGFkZGl0aW9uYWwg
ZGlyZWN0b3J5Ci0gICAgdG8gdGhlIGJhc2VsaW5lIHBhdGhzLiIiIgotICAgIHBsYXRmb3JtID0g
cGxhdGZvcm0gb3Igc3lzLnBsYXRmb3JtCi0gICAgaWYgcG9ydF9uYW1lID09ICdjaHJvbWl1bS1n
cHUnOgotICAgICAgICBpZiBwbGF0Zm9ybSBpbiAoJ2N5Z3dpbicsICd3aW4zMicpOgotICAgICAg
ICAgICAgcG9ydF9uYW1lID0gJ2Nocm9taXVtLWdwdS13aW4nCi0gICAgICAgIGVsaWYgcGxhdGZv
cm0uc3RhcnRzd2l0aCgnbGludXgnKToKLSAgICAgICAgICAgIHBvcnRfbmFtZSA9ICdjaHJvbWl1
bS1ncHUtbGludXgnCi0gICAgICAgIGVsaWYgcGxhdGZvcm0gPT0gJ2Rhcndpbic6Ci0gICAgICAg
ICAgICBwb3J0X25hbWUgPSAnY2hyb21pdW0tZ3B1LW1hYycKLSAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ3Vuc3VwcG9ydGVkIHBsYXRmb3JtOiAl
cycgJSBwbGF0Zm9ybSkKLQotICAgIGlmIHBvcnRfbmFtZS5zdGFydHN3aXRoKCdjaHJvbWl1bS1n
cHUtbGludXgnKToKLSAgICAgICAgcmV0dXJuIENocm9taXVtR3B1TGludXhQb3J0KHBvcnRfbmFt
ZT1wb3J0X25hbWUsICoqa3dhcmdzKQotICAgIGlmIHBvcnRfbmFtZS5zdGFydHN3aXRoKCdjaHJv
bWl1bS1ncHUtbWFjJyk6Ci0gICAgICAgIHJldHVybiBDaHJvbWl1bUdwdU1hY1BvcnQocG9ydF9u
YW1lPXBvcnRfbmFtZSwgKiprd2FyZ3MpCi0gICAgaWYgcG9ydF9uYW1lLnN0YXJ0c3dpdGgoJ2No
cm9taXVtLWdwdS13aW4nKToKLSAgICAgICAgcmV0dXJuIENocm9taXVtR3B1V2luUG9ydChwb3J0
X25hbWU9cG9ydF9uYW1lLCAqKmt3YXJncykKLSAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y
KCd1bnN1cHBvcnRlZCBwb3J0OiAlcycgJSBwb3J0X25hbWUpCi0KLQotIyBGSVhNRTogVGhlc2Ug
c2hvdWxkIHJlYWxseSBiZSBhIG1peGluIGNsYXNzLgotCi1kZWYgX3NldF9ncHVfb3B0aW9ucyhw
b3J0KToKLSAgICBwb3J0Ll9ncmFwaGljc190eXBlID0gJ2dwdScKLSAgICBpZiBwb3J0LmdldF9v
cHRpb24oJ2FjY2VsZXJhdGVkX2NvbXBvc2l0aW5nJykgaXMgTm9uZToKLSAgICAgICAgcG9ydC5f
b3B0aW9ucy5hY2NlbGVyYXRlZF9jb21wb3NpdGluZyA9IFRydWUKLSAgICBpZiBwb3J0LmdldF9v
cHRpb24oJ2FjY2VsZXJhdGVkXzJkX2NhbnZhcycpIGlzIE5vbmU6Ci0gICAgICAgIHBvcnQuX29w
dGlvbnMuYWNjZWxlcmF0ZWRfMmRfY2FudmFzID0gVHJ1ZQotCi0gICAgIyBGSVhNRTogUmVtb3Zl
IHRoaXMgYWZ0ZXIgaHR0cDovL2NvZGVyZXZpZXcuY2hyb21pdW0ub3JnLzUxMzMwMDEvIGlzIGVu
YWJsZWQKLSAgICAjIG9uIHRoZSBib3RzLgotICAgIGlmIHBvcnQuZ2V0X29wdGlvbignYnVpbGRl
cl9uYW1lJykgaXMgbm90IE5vbmUgYW5kIG5vdCAnIC0gR1BVJyBpbiBwb3J0Ll9vcHRpb25zLmJ1
aWxkZXJfbmFtZToKLSAgICAgICAgcG9ydC5fb3B0aW9ucy5idWlsZGVyX25hbWUgKz0gJyAtIEdQ
VScKLQotCi1kZWYgX3Rlc3RzKHBvcnQsIHBhdGhzKToKLSAgICBpZiBub3QgcGF0aHM6Ci0gICAg
ICAgIHBhdGhzID0gWydjb21wb3NpdGluZycsICdwbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGlu
ZycsICdtZWRpYScsICdhbmltYXRpb25zLzNkJ10KLSAgICAgICAgaWYgbm90IHBvcnQubmFtZSgp
LnN0YXJ0c3dpdGgoJ2Nocm9taXVtLWdwdS1tYWMnKToKLSAgICAgICAgICAgICMgQ2FudmFzIGlz
IG5vdCB5ZXQgYWNjZWxlcmF0ZWQgb24gdGhlIE1hYywgc28gdGhlcmUncyBubyBwb2ludAotICAg
ICAgICAgICAgIyBpbiBydW5uaW5nIHRoZSB0ZXN0cyB0aGVyZS4KLSAgICAgICAgICAgIHBhdGhz
ICs9IFsnZmFzdC9jYW52YXMnLCAnY2FudmFzL3BoaWxpcCddCi0gICAgICAgICMgaW52YWxpZGF0
ZV9yZWN0Lmh0bWwgdGVzdHMgYSBidWcgaW4gdGhlIGNvbXBvc2l0b3IuCi0gICAgICAgICMgU2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzExNwotICAgICAgICBw
YXRocyArPSBbJ3BsdWdpbnMvaW52YWxpZGF0ZV9yZWN0Lmh0bWwnXQotICAgIHJldHVybiBzZXQo
W3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmKSBmb3IgZiBpbiB0ZXN0X2ZpbGVzLmZpbmQo
cG9ydCwgcGF0aHMpXSkKLQotCi1jbGFzcyBDaHJvbWl1bUdwdUxpbnV4UG9ydChjaHJvbWl1bV9s
aW51eC5DaHJvbWl1bUxpbnV4UG9ydCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfbmFt
ZT0nY2hyb21pdW0tZ3B1LWxpbnV4JywgKiprd2FyZ3MpOgotICAgICAgICBjaHJvbWl1bV9saW51
eC5DaHJvbWl1bUxpbnV4UG9ydC5fX2luaXRfXyhzZWxmLCBwb3J0X25hbWU9cG9ydF9uYW1lLCAq
Kmt3YXJncykKLSAgICAgICAgX3NldF9ncHVfb3B0aW9ucyhzZWxmKQotCi0gICAgZGVmIGJhc2Vs
aW5lX3NlYXJjaF9wYXRoKHNlbGYpOgotICAgICAgICAjIE1pbWljIHRoZSBMaW51eCAtPiBXaW4g
ZXhwZWN0YXRpb25zIGZhbGxiYWNrIGluIHRoZSBvcmRpbmFyeSBDaHJvbWl1bSBwb3J0LgotICAg
ICAgICByZXR1cm4gKG1hcChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCwgWydjaHJvbWl1bS1n
cHUtbGludXgnLCAnY2hyb21pdW0tZ3B1LXdpbicsICdjaHJvbWl1bS1ncHUnXSkgKwotICAgICAg
ICAgICAgICAgIGNocm9taXVtX2xpbnV4LkNocm9taXVtTGludXhQb3J0LmJhc2VsaW5lX3NlYXJj
aF9wYXRoKHNlbGYpKQotCi0gICAgZGVmIGRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgot
ICAgICAgICByZXR1cm4gMQotCi0gICAgZGVmIHRlc3RzKHNlbGYsIHBhdGhzKToKLSAgICAgICAg
cmV0dXJuIF90ZXN0cyhzZWxmLCBwYXRocykKLQotCi1jbGFzcyBDaHJvbWl1bUdwdU1hY1BvcnQo
Y2hyb21pdW1fbWFjLkNocm9taXVtTWFjUG9ydCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBv
cnRfbmFtZT0nY2hyb21pdW0tZ3B1LW1hYycsICoqa3dhcmdzKToKLSAgICAgICAgY2hyb21pdW1f
bWFjLkNocm9taXVtTWFjUG9ydC5fX2luaXRfXyhzZWxmLCBwb3J0X25hbWU9cG9ydF9uYW1lLCAq
Kmt3YXJncykKLSAgICAgICAgX3NldF9ncHVfb3B0aW9ucyhzZWxmKQotCi0gICAgZGVmIGJhc2Vs
aW5lX3NlYXJjaF9wYXRoKHNlbGYpOgotICAgICAgICByZXR1cm4gKG1hcChzZWxmLl93ZWJraXRf
YmFzZWxpbmVfcGF0aCwgWydjaHJvbWl1bS1ncHUtbWFjJywgJ2Nocm9taXVtLWdwdSddKSArCi0g
ICAgICAgICAgICAgICAgY2hyb21pdW1fbWFjLkNocm9taXVtTWFjUG9ydC5iYXNlbGluZV9zZWFy
Y2hfcGF0aChzZWxmKSkKLQotICAgIGRlZiBkZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcyhzZWxmKToK
LSAgICAgICAgcmV0dXJuIDEKLQotICAgIGRlZiB0ZXN0cyhzZWxmLCBwYXRocyk6Ci0gICAgICAg
IHJldHVybiBfdGVzdHMoc2VsZiwgcGF0aHMpCi0KLQotY2xhc3MgQ2hyb21pdW1HcHVXaW5Qb3J0
KGNocm9taXVtX3dpbi5DaHJvbWl1bVdpblBvcnQpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBw
b3J0X25hbWU9J2Nocm9taXVtLWdwdS13aW4nLCAqKmt3YXJncyk6Ci0gICAgICAgIGNocm9taXVt
X3dpbi5DaHJvbWl1bVdpblBvcnQuX19pbml0X18oc2VsZiwgcG9ydF9uYW1lPXBvcnRfbmFtZSwg
Kiprd2FyZ3MpCi0gICAgICAgIF9zZXRfZ3B1X29wdGlvbnMoc2VsZikKLQotICAgIGRlZiBiYXNl
bGluZV9zZWFyY2hfcGF0aChzZWxmKToKLSAgICAgICAgcmV0dXJuIChtYXAoc2VsZi5fd2Via2l0
X2Jhc2VsaW5lX3BhdGgsIFsnY2hyb21pdW0tZ3B1LXdpbicsICdjaHJvbWl1bS1ncHUnXSkgKwot
ICAgICAgICAgICAgICAgIGNocm9taXVtX3dpbi5DaHJvbWl1bVdpblBvcnQuYmFzZWxpbmVfc2Vh
cmNoX3BhdGgoc2VsZikpCi0KLSAgICBkZWYgZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoc2VsZik6
Ci0gICAgICAgIHJldHVybiAxCi0KLSAgICBkZWYgdGVzdHMoc2VsZiwgcGF0aHMpOgotICAgICAg
ICByZXR1cm4gX3Rlc3RzKHNlbGYsIHBhdGhzKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9ncHVfdW5pdHRlc3QucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2dwdV91bml0dGVz
dC5weQppbmRleCAwM2M4ZTRlMWNiN2E3YzE0MTRkZDRlZjg3ZDkwNjc3NjdmZWQ3MGQ2Li40YzYz
NzM2ODIyZmFiOTFkYzhlNzg2M2EwZTM4MDdhNzJlMTE0MmZmIDEwMDc1NQotLS0gYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2dwdV91bml0dGVzdC5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVt
X2dwdV91bml0dGVzdC5weQpAQCAtMjgsNDMgKzI4LDM3IEBAIGltcG9ydCBzeXMKIGltcG9ydCB1
bml0dGVzdAogCiBmcm9tIHdlYmtpdHB5LnRvb2wgaW1wb3J0IG1vY2t0b29sCi1pbXBvcnQgY2hy
b21pdW1fZ3B1Ci0KIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGZhY3Rv
cnkKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IHBvcnRfdGVzdGNhc2UK
IAogY2xhc3MgQ2hyb21pdW1HcHVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgaW50
ZWdyYXRpb25fdGVzdF9jaHJvbWl1bV9ncHVfbGludXgoc2VsZik6Ci0gICAgICAgIGlmIHN5cy5w
bGF0Zm9ybSBub3QgaW4gKCdsaW51eDInLCAnbGludXgzJyk6Ci0gICAgICAgICAgICByZXR1cm4K
LSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydF93b3JrcygnY2hyb21pdW0tZ3B1LWxpbnV4JykKKyAg
ICBkZWYgdGVzdF9jaHJvbWl1bV9ncHVfbGludXgoc2VsZik6CisgICAgICAgIGlmIHN5cy5wbGF0
Zm9ybSBpbiAoJ2xpbnV4MicsICdsaW51eDMnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3Bv
cnRfd29ya3MoJ2Nocm9taXVtLWdwdS1saW51eCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnRf
d29ya3MoJ2Nocm9taXVtLWdwdS1saW51eCcsICdjaHJvbWl1bS1ncHUnLCAnbGludXgyJykKICAg
ICAgICAgc2VsZi5hc3NlcnRfcG9ydF93b3JrcygnY2hyb21pdW0tZ3B1LWxpbnV4JywgJ2Nocm9t
aXVtLWdwdScsICdsaW51eDMnKQogCi0gICAgZGVmIGludGVncmF0aW9uX3Rlc3RfY2hyb21pdW1f
Z3B1X21hYyhzZWxmKToKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICdkYXJ3aW4nOgotICAg
ICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuYXNzZXJ0X3BvcnRfd29ya3MoJ2Nocm9taXVt
LWdwdS1tYWMnKQorICAgIGRlZiB0ZXN0X2Nocm9taXVtX2dwdV9tYWMoc2VsZik6CisgICAgICAg
IGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3Bv
cnRfd29ya3MoJ2Nocm9taXVtLWdwdS1tYWMnKQogICAgICAgICBzZWxmLmFzc2VydF9wb3J0X3dv
cmtzKCdjaHJvbWl1bS1ncHUtbWFjJywgJ2Nocm9taXVtLWdwdScsICdkYXJ3aW4nKQogCi0gICAg
ZGVmIGludGVncmF0aW9uX3Rlc3RfY2hyb21pdW1fZ3B1X3dpbihzZWxmKToKLSAgICAgICAgaWYg
c3lzLnBsYXRmb3JtIG5vdCBpbiAoJ2N5Z3dpbicsICd3aW4zMicpOgotICAgICAgICAgICAgcmV0
dXJuCi0gICAgICAgIHNlbGYuYXNzZXJ0X3BvcnRfd29ya3MoJ2Nocm9taXVtLWdwdS13aW4nKQor
ICAgIGRlZiB0ZXN0X2Nocm9taXVtX2dwdV93aW4oc2VsZik6CisgICAgICAgIGlmIHN5cy5wbGF0
Zm9ybSBpbiAoJ2N5Z3dpbicsICd3aW4zMicpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRfcG9y
dF93b3JrcygnY2hyb21pdW0tZ3B1LXdpbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnRfd29y
a3MoJ2Nocm9taXVtLWdwdS13aW4nLCAnY2hyb21pdW0tZ3B1JywgJ3dpbjMyJykKICAgICAgICAg
c2VsZi5hc3NlcnRfcG9ydF93b3JrcygnY2hyb21pdW0tZ3B1LXdpbicsICdjaHJvbWl1bS1ncHUn
LCAnY3lnd2luJykKIAotICAgIGRlZiBhc3NlcnRfcG9ydF93b3JrcyhzZWxmLCBwb3J0X25hbWUs
IGlucHV0X25hbWU9Tm9uZSwgcGxhdGZvcm09Tm9uZSk6CisgICAgZGVmIGFzc2VydF9wb3J0X3dv
cmtzKHNlbGYsIHBvcnRfbmFtZSwgaW5wdXRfbmFtZT1Ob25lLCBzeXN0ZW1fcGxhdGZvcm09Tm9u
ZSk6CiAgICAgICAgICMgdGVzdCB0aGF0IHdlIGdvdCB0aGUgcmlnaHQgcG9ydAogICAgICAgICBt
b2NrX29wdGlvbnMgPSBtb2NrdG9vbC5Nb2NrT3B0aW9ucyhhY2NlbGVyYXRlZF9jb21wb3NpdGlu
Zz1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nl
bGVyYXRlZF8yZF9jYW52YXM9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnVpbGRlcl9uYW1lPSdmb28nLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGlsZF9wcm9jZXNzZXM9Tm9uZSkKLSAgICAgICAgaWYgaW5w
dXRfbmFtZSBhbmQgcGxhdGZvcm06Ci0gICAgICAgICAgICBwb3J0ID0gY2hyb21pdW1fZ3B1Lmdl
dChwbGF0Zm9ybT1wbGF0Zm9ybSwgcG9ydF9uYW1lPWlucHV0X25hbWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPW1vY2tfb3B0aW9ucykKKyAgICAgICAgaWYg
aW5wdXRfbmFtZSBhbmQgc3lzdGVtX3BsYXRmb3JtOgorICAgICAgICAgICAgcG9ydCA9IGZhY3Rv
cnkuZ2V0KHN5c3RlbV9wbGF0Zm9ybT1zeXN0ZW1fcGxhdGZvcm0sIHBvcnRfbmFtZT1pbnB1dF9u
YW1lLCBvcHRpb25zPW1vY2tfb3B0aW9ucykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBv
cnQgPSBjaHJvbWl1bV9ncHUuZ2V0KHBvcnRfbmFtZT1wb3J0X25hbWUsIG9wdGlvbnM9bW9ja19v
cHRpb25zKQorICAgICAgICAgICAgcG9ydCA9IGZhY3RvcnkuZ2V0KHBvcnRfbmFtZT1wb3J0X25h
bWUsIG9wdGlvbnM9bW9ja19vcHRpb25zKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5f
b3B0aW9ucy5hY2NlbGVyYXRlZF9jb21wb3NpdGluZykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KHBvcnQuX29wdGlvbnMuYWNjZWxlcmF0ZWRfMmRfY2FudmFzKQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHBvcnQuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSwgMSkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbGludXgucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2xpbnV4
LnB5CmluZGV4IDU4NjkzNGQyMTQzY2I4OTUxZGZiMWQ2ZTc1Y2YwN2Y0MzVkYjg3YjEuLjAxYjRi
ZTE1NDcyMDM3MjVmOTE3NDVjZjE4OWNhNmRmZGM3NWM3OWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbGludXgucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9saW51eC5w
eQpAQCAtNDAsMjQgKzQwLDI4IEBAIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykK
IGNsYXNzIENocm9taXVtTGludXhQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgU1VQ
UE9SVEVEX0FSQ0hJVEVDVFVSRVMgPSAoJ3g4NicsICd4ODZfNjQnKQogCi0gICAgRkFMTEJBQ0tf
UEFUSFMgPSB7Ci0gICAgICAgICd4ODZfNjQnOiBbCi0gICAgICAgICAgICAnY2hyb21pdW0tbGlu
dXgnLAotICAgICAgICAgICAgJ2Nocm9taXVtLXdpbicsCi0gICAgICAgICAgICAnY2hyb21pdW0n
LAotICAgICAgICAgICAgJ3dpbicsCi0gICAgICAgICAgICAnbWFjJywKLSAgICAgICAgXSwKLSAg
ICAgICAgJ3g4Nic6IFsKLSAgICAgICAgICAgICdjaHJvbWl1bS1saW51eC14ODYnLAotICAgICAg
ICAgICAgJ2Nocm9taXVtLWxpbnV4JywKLSAgICAgICAgICAgICdjaHJvbWl1bS13aW4nLAotICAg
ICAgICAgICAgJ2Nocm9taXVtJywKLSAgICAgICAgICAgICd3aW4nLAotICAgICAgICAgICAgJ21h
YycsCi0gICAgICAgIF0sCisgICAgR1JBUEhJQ1NfVFlQRV9GQUxMQkFDS19QQVRIUyA9IHsKKyAg
ICAgICAgJ2NwdSc6IFtdLAorICAgICAgICAnZ3B1JzogWydjaHJvbWl1bS1ncHUtbGludXgnLCAn
Y2hyb21pdW0tZ3B1LXdpbicsICdjaHJvbWl1bS1ncHUnXSwKICAgICB9CiAKKyAgICBBUkNISVRF
Q1RVUkVfRkFMTEJBQ0tfUEFUSFMgPSB7CisgICAgICAgICd4ODZfNjQnOiBbXSwKKyAgICAgICAg
J3g4Nic6IFsnY2hyb21pdW0tbGludXgteDg2J10sCisgICAgfQorCisgICAgVkVSU0lPTl9GQUxM
QkFDS19QQVRIUyA9IHsKKyAgICAgICAgJ2x1Y2lkJzogW10sCisgICAgfQorCisgICAgQkFTRV9G
QUxMQkFDS19QQVRIUyA9IFsKKyAgICAgICAgJ2Nocm9taXVtLWxpbnV4JywKKyAgICAgICAgJ2No
cm9taXVtLXdpbicsCisgICAgICAgICdjaHJvbWl1bScsCisgICAgICAgICd3aW4nLAorICAgICAg
ICAnbWFjJywKKyAgICBdCisKICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9uYW1lPU5vbmUs
ICoqa3dhcmdzKToKICAgICAgICAgcG9ydF9uYW1lID0gcG9ydF9uYW1lIG9yICdjaHJvbWl1bS1s
aW51eCcKICAgICAgICAgY2hyb21pdW0uQ2hyb21pdW1Qb3J0Ll9faW5pdF9fKHNlbGYsIHBvcnRf
bmFtZT1wb3J0X25hbWUsICoqa3dhcmdzKQpAQCAtMTAwLDEwICsxMDQsNiBAQCBjbGFzcyBDaHJv
bWl1bUxpbnV4UG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogICAgICAgICAjIGlmIHdlIGFj
dHVhbGx5IHRyeSB0byB1c2UgdGhlIGJpbmFyeSwgY2hlY2tfYnVpbGQoKSBzaG91bGQgZmFpbC4K
ICAgICAgICAgcmV0dXJuICd4ODZfNjQnCiAKLSAgICBkZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgo
c2VsZik6Ci0gICAgICAgIHBvcnRfbmFtZXMgPSBzZWxmLkZBTExCQUNLX1BBVEhTW3NlbGYuX2Fy
Y2hpdGVjdHVyZV0KLSAgICAgICAgcmV0dXJuIG1hcChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0
aCwgcG9ydF9uYW1lcykKLQogICAgIGRlZiBjaGVja19idWlsZChzZWxmLCBuZWVkc19odHRwKToK
ICAgICAgICAgcmVzdWx0ID0gY2hyb21pdW0uQ2hyb21pdW1Qb3J0LmNoZWNrX2J1aWxkKHNlbGYs
IG5lZWRzX2h0dHApCiAgICAgICAgIHJlc3VsdCA9IHNlbGYuY2hlY2tfd2RpZmYoKSBhbmQgcmVz
dWx0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Nocm9taXVtX21hYy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvY2hyb21pdW1fbWFjLnB5CmluZGV4IGEzY2FhYTE5MDdmZTA5ZTQyMWYwMDA2YWY4YjBlNTZi
NTBlZjJmZTUuLjQ3YmRlMDJmZmM5ODgzNWQyNGM4YzQzYzk0ZmQ3YTdkNGUwZjgwOGMgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1f
bWFjLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hy
b21pdW1fbWFjLnB5CkBAIC00NiwyOCArNDYsMzYgQEAgY2xhc3MgQ2hyb21pdW1NYWNQb3J0KGNo
cm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgIiIiQ2hyb21pdW0gTWFjIGltcGxlbWVudGF0aW9u
IG9mIHRoZSBQb3J0IGNsYXNzLiIiIgogICAgIFNVUFBPUlRFRF9PU19WRVJTSU9OUyA9ICgnbGVv
cGFyZCcsICdzbm93bGVvcGFyZCcsICdmdXR1cmUnKQogCi0gICAgRkFMTEJBQ0tfUEFUSFMgPSB7
CisgICAgR1JBUEhJQ1NfVFlQRV9GQUxMQkFDS19QQVRIUyA9IHsKKyAgICAgICAgJ2NwdSc6IFtd
LAorICAgICAgICAnZ3B1JzogWydjaHJvbWl1bS1ncHUtbWFjJywgJ2Nocm9taXVtLWdwdSddLAor
ICAgIH0KKworICAgIEFSQ0hJVEVDVFVSRV9GQUxMQkFDS19QQVRIUyA9IHsKKyAgICAgICAgJ3g4
Nic6IFtdLAorICAgIH0KKworICAgIFZFUlNJT05fRkFMTEJBQ0tfUEFUSFMgPSB7CiAgICAgICAg
ICdsZW9wYXJkJzogWwogICAgICAgICAgICAgJ2Nocm9taXVtLW1hYy1sZW9wYXJkJywKICAgICAg
ICAgICAgICdjaHJvbWl1bS1tYWMnLAogICAgICAgICAgICAgJ2Nocm9taXVtJywKICAgICAgICAg
ICAgICdtYWMtbGVvcGFyZCcsCiAgICAgICAgICAgICAnbWFjLXNub3dsZW9wYXJkJywKLSAgICAg
ICAgICAgICdtYWMnLAogICAgICAgICBdLAogICAgICAgICAnc25vd2xlb3BhcmQnOiBbCiAgICAg
ICAgICAgICAnY2hyb21pdW0tbWFjJywKICAgICAgICAgICAgICdjaHJvbWl1bScsCiAgICAgICAg
ICAgICAnbWFjLXNub3dsZW9wYXJkJywKLSAgICAgICAgICAgICdtYWMnLAogICAgICAgICBdLAog
ICAgICAgICAnZnV0dXJlJzogWwogICAgICAgICAgICAgJ2Nocm9taXVtLW1hYycsCiAgICAgICAg
ICAgICAnY2hyb21pdW0nLAotICAgICAgICAgICAgJ21hYycsCiAgICAgICAgIF0sCiAgICAgfQog
CisgICAgQkFTRV9GQUxMQkFDS19QQVRIUyA9IFsnbWFjJ10KKwogICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBwb3J0X25hbWU9Tm9uZSwgb3NfdmVyc2lvbl9zdHJpbmc9Tm9uZSwgKiprd2FyZ3MpOgog
ICAgICAgICAjIFdlJ3JlIGEgbGl0dGxlIGdlbmVyaWMgaGVyZSBiZWNhdXNlIHRoaXMgY29kZSBp
cyByZXVzZWQgYnkgdGhlCiAgICAgICAgICMgJ2dvb2dsZS1jaHJvbWUnIHBvcnQgYXMgd2VsbCBh
cyB0aGUgJ21vY2stJyBhbmQgJ2RyeXJ1bi0nIHBvcnRzLgpAQCAtODEsOSArODksNiBAQCBjbGFz
cyBDaHJvbWl1bU1hY1BvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICAgICAgICAgIGFz
c2VydCBzZWxmLl92ZXJzaW9uIGluIHNlbGYuU1VQUE9SVEVEX09TX1ZFUlNJT05TCiAgICAgICAg
IHNlbGYuX29wZXJhdGluZ19zeXN0ZW0gPSAnbWFjJwogCi0gICAgZGVmIGJhc2VsaW5lX3NlYXJj
aF9wYXRoKHNlbGYpOgotICAgICAgICByZXR1cm4gbWFwKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9w
YXRoLCBzZWxmLkZBTExCQUNLX1BBVEhTW3NlbGYuX3ZlcnNpb25dKQotCiAgICAgZGVmIGNoZWNr
X2J1aWxkKHNlbGYsIG5lZWRzX2h0dHApOgogICAgICAgICByZXN1bHQgPSBjaHJvbWl1bS5DaHJv
bWl1bVBvcnQuY2hlY2tfYnVpbGQoc2VsZiwgbmVlZHNfaHR0cCkKICAgICAgICAgcmVzdWx0ID0g
c2VsZi5jaGVja193ZGlmZigpIGFuZCByZXN1bHQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93aW4ucHkKaW5kZXggMDhhN2Mz
YWJjNGRiZTA1NTZjZTZmMDE4NWRhOGYyMDEwMDIwNjcwZC4uMzRkYWVlNDNiZjFjMWI3ZWY3ZjEw
MzI2ODE3ZjA0NzdkMTQ4Y2QyMiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93aW4ucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93aW4ucHkKQEAgLTYwLDMxICs2MCwyOSBA
QCBjbGFzcyBDaHJvbWl1bVdpblBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICAjIEZJ
WE1FOiBGaWd1cmUgb3V0IGhvdyB0byB1bmlmeSB0aGlzIHdpdGggYmFzZS5UZXN0Q29uZmlndXJh
dGlvbi5hbGxfc3lzdGVtcygpPwogICAgIFNVUFBPUlRFRF9WRVJTSU9OUyA9ICgneHAnLCAndmlz
dGEnLCAnd2luNycpCiAKKyAgICBHUkFQSElDU19UWVBFX0ZBTExCQUNLX1BBVEhTID0geworICAg
ICAgICAnY3B1JzogW10sCisgICAgICAgICdncHUnOiBbJ2Nocm9taXVtLWdwdS13aW4nLCAnY2hy
b21pdW0tZ3B1J10sCisgICAgfQorCisgICAgQVJDSElURUNUVVJFX0ZBTExCQUNLX1BBVEhTID0g
eworICAgICAgICAneDg2JzogW10sCisgICAgfQorCiAgICAgIyBGSVhNRTogRG8gd2UgbmVlZCBt
YWMtc25vd2xlb3BhcmQgaGVyZSwgbGlrZSB0aGUgYmFzZSB3aW4gcG9ydD8KLSAgICBGQUxMQkFD
S19QQVRIUyA9IHsKLSAgICAgICAgJ3hwJzogWwotICAgICAgICAgICAgJ2Nocm9taXVtLXdpbi14
cCcsCi0gICAgICAgICAgICAnY2hyb21pdW0td2luLXZpc3RhJywKLSAgICAgICAgICAgICdjaHJv
bWl1bS13aW4nLAotICAgICAgICAgICAgJ2Nocm9taXVtJywKLSAgICAgICAgICAgICd3aW4nLAot
ICAgICAgICAgICAgJ21hYycsCi0gICAgICAgIF0sCi0gICAgICAgICd2aXN0YSc6IFsKLSAgICAg
ICAgICAgICdjaHJvbWl1bS13aW4tdmlzdGEnLAotICAgICAgICAgICAgJ2Nocm9taXVtLXdpbics
Ci0gICAgICAgICAgICAnY2hyb21pdW0nLAotICAgICAgICAgICAgJ3dpbicsCi0gICAgICAgICAg
ICAnbWFjJywKLSAgICAgICAgXSwKLSAgICAgICAgJ3dpbjcnOiBbCi0gICAgICAgICAgICAnY2hy
b21pdW0td2luJywKLSAgICAgICAgICAgICdjaHJvbWl1bScsCi0gICAgICAgICAgICAnd2luJywK
LSAgICAgICAgICAgICdtYWMnLAotICAgICAgICBdLAorICAgIFZFUlNJT05fRkFMTEJBQ0tfUEFU
SFMgPSB7CisgICAgICAgICd4cCc6IFsnY2hyb21pdW0td2luLXhwJywgJ2Nocm9taXVtLXdpbi12
aXN0YSddLAorICAgICAgICAndmlzdGEnOiBbJ2Nocm9taXVtLXdpbi12aXN0YSddLAorICAgICAg
ICAnd2luNyc6IFtdLAogICAgIH0KIAorICAgIEJBU0VfRkFMTEJBQ0tfUEFUSFMgPSBbCisgICAg
ICAgICdjaHJvbWl1bS13aW4nLAorICAgICAgICAnY2hyb21pdW0nLAorICAgICAgICAnd2luJywK
KyAgICAgICAgJ21hYycsCisgICAgXQorCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfbmFt
ZT1Ob25lLCB3aW5kb3dzX3ZlcnNpb249Tm9uZSwgKiprd2FyZ3MpOgogICAgICAgICAjIFdlJ3Jl
IGEgbGl0dGxlIGdlbmVyaWMgaGVyZSBiZWNhdXNlIHRoaXMgY29kZSBpcyByZXVzZWQgYnkgdGhl
CiAgICAgICAgICMgJ2dvb2dsZS1jaHJvbWUnIHBvcnQgYXMgd2VsbCBhcyB0aGUgJ21vY2stJyBh
bmQgJ2RyeXJ1bi0nIHBvcnRzLgpAQCAtMTE1LDEwICsxMTMsNiBAQCBjbGFzcyBDaHJvbWl1bVdp
blBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGl2
ZS5ydW5fY29tbWFuZChbc2V0dXBfbW91bnRdKQogICAgICAgICByZXR1cm4gZW52CiAKLSAgICBk
ZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6Ci0gICAgICAgIHBvcnRfbmFtZXMgPSBzZWxm
LkZBTExCQUNLX1BBVEhTW3NlbGYudmVyc2lvbigpXQotICAgICAgICByZXR1cm4gbWFwKHNlbGYu
X3dlYmtpdF9iYXNlbGluZV9wYXRoLCBwb3J0X25hbWVzKQotCiAgICAgZGVmIGNoZWNrX2J1aWxk
KHNlbGYsIG5lZWRzX2h0dHApOgogICAgICAgICByZXN1bHQgPSBjaHJvbWl1bS5DaHJvbWl1bVBv
cnQuY2hlY2tfYnVpbGQoc2VsZiwgbmVlZHNfaHR0cCkKICAgICAgICAgaWYgbm90IHJlc3VsdDoK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFj
dG9yeS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9y
eS5weQppbmRleCA2NGQ1N2U1ZTFkMGRiODNmMWRiZTk3MDdlZjU0ZjhhNTlmM2E1ODk0Li5jYzI3
YjMwMTE4YzRlNzk3YWYyZTg5ZGM5Mjk5M2UzYzc2NzI3YmZiIDEwMDY0NAotLS0gYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5CkBAIC0zNCw3ICsz
NCw2IEBAIGltcG9ydCBzeXMKIAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBv
cnQgYnVpbGRlcnMKIAotCiBkZWYgYWxsX3BvcnRfbmFtZXMoKToKICAgICAiIiJSZXR1cm4gYSBs
aXN0IG9mIGFsbCB2YWxpZCwgZnVsbHktc3BlY2lmaWVkLCAicmVhbCIgcG9ydCBuYW1lcy4KIApA
QCAtNDUsNzUgKzQ0LDcyIEBAIGRlZiBhbGxfcG9ydF9uYW1lcygpOgogICAgIHJldHVybiBidWls
ZGVycy5QT1JUX1RPX0JVSUxERVJfTkFNRS5rZXlzKCkKIAogCi1kZWYgZ2V0KHBvcnRfbmFtZT1O
b25lLCBvcHRpb25zPU5vbmUsICoqa3dhcmdzKToKK2RlZiBnZXQocG9ydF9uYW1lPU5vbmUsIG9w
dGlvbnM9Tm9uZSwgc3lzdGVtX3BsYXRmb3JtPU5vbmUsICoqa3dhcmdzKToKICAgICAiIiJSZXR1
cm5zIGFuIG9iamVjdCBpbXBsZW1lbnRpbmcgdGhlIFBvcnQgaW50ZXJmYWNlLiBJZgogICAgIHBv
cnRfbmFtZSBpcyBOb25lLCB0aGlzIHJvdXRpbmUgYXR0ZW1wdHMgdG8gZ3Vlc3MgYXQgdGhlIG1v
c3QKICAgICBhcHByb3ByaWF0ZSBwb3J0IG9uIHRoaXMgcGxhdGZvcm0uIiIiCi0gICAgIyBXcmFw
cGVkIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eQotICAgIGlmIHBvcnRfbmFtZToKLSAgICAg
ICAga3dhcmdzWydwb3J0X25hbWUnXSA9IHBvcnRfbmFtZQotICAgIGlmIG9wdGlvbnM6Ci0gICAg
ICAgIGt3YXJnc1snb3B0aW9ucyddID0gb3B0aW9ucwotICAgIHJldHVybiBfZ2V0X2t3YXJncygq
Kmt3YXJncykKLQorICAgIHN5c3RlbV9wbGF0Zm9ybSA9IHN5c3RlbV9wbGF0Zm9ybSBvciBzeXMu
cGxhdGZvcm0KIAotZGVmIF9nZXRfa3dhcmdzKCoqa3dhcmdzKToKLSAgICBwb3J0X3RvX3VzZSA9
IGt3YXJncy5nZXQoJ3BvcnRfbmFtZScsIE5vbmUpCi0gICAgb3B0aW9ucyA9IGt3YXJncy5nZXQo
J29wdGlvbnMnLCBOb25lKQotICAgIGlmIHBvcnRfdG9fdXNlIGlzIE5vbmU6Ci0gICAgICAgIGlm
IHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIG9yIHN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJzoKKyAg
ICBpZiBwb3J0X25hbWUgaXMgTm9uZToKKyAgICAgICAgaWYgc3lzdGVtX3BsYXRmb3JtID09ICd3
aW4zMicgb3Igc3lzdGVtX3BsYXRmb3JtID09ICdjeWd3aW4nOgogICAgICAgICAgICAgaWYgb3B0
aW9ucyBhbmQgaGFzYXR0cihvcHRpb25zLCAnY2hyb21pdW0nKSBhbmQgb3B0aW9ucy5jaHJvbWl1
bToKLSAgICAgICAgICAgICAgICBwb3J0X3RvX3VzZSA9ICdjaHJvbWl1bS13aW4nCisgICAgICAg
ICAgICAgICAgcG9ydF9uYW1lID0gJ2Nocm9taXVtLXdpbicKICAgICAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAgICAgcG9ydF90b191c2UgPSAnd2luJwotICAgICAgICBlbGlmIHN5cy5wbGF0
Zm9ybS5zdGFydHN3aXRoKCdsaW51eCcpOgotICAgICAgICAgICAgcG9ydF90b191c2UgPSAnY2hy
b21pdW0tbGludXgnCi0gICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAg
ICAgICAgICAgICAgIHBvcnRfbmFtZSA9ICd3aW4nCisgICAgICAgIGVsaWYgc3lzdGVtX3BsYXRm
b3JtLnN0YXJ0c3dpdGgoJ2xpbnV4Jyk6CisgICAgICAgICAgICBwb3J0X25hbWUgPSAnY2hyb21p
dW0tbGludXgnCisgICAgICAgIGVsaWYgc3lzdGVtX3BsYXRmb3JtID09ICdkYXJ3aW4nOgogICAg
ICAgICAgICAgaWYgb3B0aW9ucyBhbmQgaGFzYXR0cihvcHRpb25zLCAnY2hyb21pdW0nKSBhbmQg
b3B0aW9ucy5jaHJvbWl1bToKLSAgICAgICAgICAgICAgICBwb3J0X3RvX3VzZSA9ICdjaHJvbWl1
bS1tYWMnCisgICAgICAgICAgICAgICAgcG9ydF9uYW1lID0gJ2Nocm9taXVtLW1hYycKICAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcG9ydF90b191c2UgPSAnbWFjJworICAgICAg
ICAgICAgICAgIHBvcnRfbmFtZSA9ICdtYWMnCiAKLSAgICBpZiBwb3J0X3RvX3VzZSBpcyBOb25l
OgorICAgIGlmIHBvcnRfbmFtZSBpcyBOb25lOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRl
ZEVycm9yKCd1bmtub3duIHBvcnQ7IHN5cy5wbGF0Zm9ybSA9ICIlcyInICUKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzeXMucGxhdGZvcm0pCiAKLSAgICBpZiBwb3J0X3RvX3Vz
ZS5zdGFydHN3aXRoKCd0ZXN0Jyk6CisgICAgaWYgcG9ydF9uYW1lID09ICdjaHJvbWl1bS1ncHUn
OgorICAgICAgICBpZiBzeXN0ZW1fcGxhdGZvcm0gaW4gKCd3aW4zMicsICdjeWd3aW4nKToKKyAg
ICAgICAgICAgIHBvcnRfbmFtZSA9ICdjaHJvbWl1bS1ncHUtd2luJworICAgICAgICBlbGlmIHN5
c3RlbV9wbGF0Zm9ybSBpbiAoJ2xpbnV4MicsICdsaW51eDMnKToKKyAgICAgICAgICAgIHBvcnRf
bmFtZSA9ICdjaHJvbWl1bS1ncHUtbGludXgnCisgICAgICAgIGVsaWYgc3lzdGVtX3BsYXRmb3Jt
ID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgcG9ydF9uYW1lID0gJ2Nocm9taXVtLWdwdS1tYWMn
CisKKyAgICBpZiBwb3J0X25hbWUuc3RhcnRzd2l0aCgndGVzdCcpOgogICAgICAgICBpbXBvcnQg
dGVzdAogICAgICAgICBtYWtlciA9IHRlc3QuVGVzdFBvcnQKLSAgICBlbGlmIHBvcnRfdG9fdXNl
LnN0YXJ0c3dpdGgoJ2RyeXJ1bicpOgorICAgIGVsaWYgcG9ydF9uYW1lLnN0YXJ0c3dpdGgoJ2Ry
eXJ1bicpOgogICAgICAgICBpbXBvcnQgZHJ5cnVuCiAgICAgICAgIG1ha2VyID0gZHJ5cnVuLkRy
eVJ1blBvcnQKLSAgICBlbGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgoJ21vY2stJyk6CisgICAg
ZWxpZiBwb3J0X25hbWUuc3RhcnRzd2l0aCgnbW9jay0nKToKICAgICAgICAgaW1wb3J0IG1vY2tf
ZHJ0CiAgICAgICAgIG1ha2VyID0gbW9ja19kcnQuTW9ja0RSVFBvcnQKLSAgICBlbGlmIHBvcnRf
dG9fdXNlLnN0YXJ0c3dpdGgoJ21hYycpOgorICAgIGVsaWYgcG9ydF9uYW1lLnN0YXJ0c3dpdGgo
J21hYycpOgogICAgICAgICBpbXBvcnQgbWFjCiAgICAgICAgIG1ha2VyID0gbWFjLk1hY1BvcnQK
LSAgICBlbGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgoJ3dpbicpOgorICAgIGVsaWYgcG9ydF9u
YW1lLnN0YXJ0c3dpdGgoJ3dpbicpOgogICAgICAgICBpbXBvcnQgd2luCiAgICAgICAgIG1ha2Vy
ID0gd2luLldpblBvcnQKLSAgICBlbGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgoJ2d0aycpOgor
ICAgIGVsaWYgcG9ydF9uYW1lLnN0YXJ0c3dpdGgoJ2d0aycpOgogICAgICAgICBpbXBvcnQgZ3Rr
CiAgICAgICAgIG1ha2VyID0gZ3RrLkd0a1BvcnQKLSAgICBlbGlmIHBvcnRfdG9fdXNlLnN0YXJ0
c3dpdGgoJ3F0Jyk6CisgICAgZWxpZiBwb3J0X25hbWUuc3RhcnRzd2l0aCgncXQnKToKICAgICAg
ICAgaW1wb3J0IHF0CiAgICAgICAgIG1ha2VyID0gcXQuUXRQb3J0Ci0gICAgZWxpZiBwb3J0X3Rv
X3VzZS5zdGFydHN3aXRoKCdjaHJvbWl1bS1ncHUnKToKLSAgICAgICAgaW1wb3J0IGNocm9taXVt
X2dwdQotICAgICAgICBtYWtlciA9IGNocm9taXVtX2dwdS5nZXQKLSAgICBlbGlmIHBvcnRfdG9f
dXNlLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLW1hYycpOgotICAgICAgICBpbXBvcnQgY2hyb21pdW1f
bWFjCi0gICAgICAgIG1ha2VyID0gY2hyb21pdW1fbWFjLkNocm9taXVtTWFjUG9ydAotICAgIGVs
aWYgcG9ydF90b191c2Uuc3RhcnRzd2l0aCgnY2hyb21pdW0tbGludXgnKToKLSAgICAgICAgaW1w
b3J0IGNocm9taXVtX2xpbnV4Ci0gICAgICAgIG1ha2VyID0gY2hyb21pdW1fbGludXguQ2hyb21p
dW1MaW51eFBvcnQKLSAgICBlbGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLXdp
bicpOgotICAgICAgICBpbXBvcnQgY2hyb21pdW1fd2luCi0gICAgICAgIG1ha2VyID0gY2hyb21p
dW1fd2luLkNocm9taXVtV2luUG9ydAotICAgIGVsaWYgcG9ydF90b191c2Uuc3RhcnRzd2l0aCgn
Z29vZ2xlLWNocm9tZScpOgorICAgIGVsaWYgcG9ydF9uYW1lLnN0YXJ0c3dpdGgoJ2Nocm9taXVt
Jyk6CisgICAgICAgIGlmICdtYWMnIGluIHBvcnRfbmFtZToKKyAgICAgICAgICAgIGltcG9ydCBj
aHJvbWl1bV9tYWMKKyAgICAgICAgICAgIG1ha2VyID0gY2hyb21pdW1fbWFjLkNocm9taXVtTWFj
UG9ydAorICAgICAgICBlbGlmICdsaW51eCcgaW4gcG9ydF9uYW1lOgorICAgICAgICAgICAgaW1w
b3J0IGNocm9taXVtX2xpbnV4CisgICAgICAgICAgICBtYWtlciA9IGNocm9taXVtX2xpbnV4LkNo
cm9taXVtTGludXhQb3J0CisgICAgICAgIGVsaWYgJ3dpbicgaW4gcG9ydF9uYW1lOgorICAgICAg
ICAgICAgaW1wb3J0IGNocm9taXVtX3dpbgorICAgICAgICAgICAgbWFrZXIgPSBjaHJvbWl1bV93
aW4uQ2hyb21pdW1XaW5Qb3J0CisgICAgZWxpZiBwb3J0X25hbWUuc3RhcnRzd2l0aCgnZ29vZ2xl
LWNocm9tZScpOgogICAgICAgICBpbXBvcnQgZ29vZ2xlX2Nocm9tZQogICAgICAgICBtYWtlciA9
IGdvb2dsZV9jaHJvbWUuR2V0R29vZ2xlQ2hyb21lUG9ydAogICAgIGVsc2U6Ci0gICAgICAgIHJh
aXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ3Vuc3VwcG9ydGVkIHBvcnQ6ICVzJyAlIHBvcnRfdG9f
dXNlKQotICAgIHJldHVybiBtYWtlcigqKmt3YXJncykKKyAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcigndW5zdXBwb3J0ZWQgcG9ydDogJXMnICUgcG9ydF9uYW1lKQorICAgIHJldHVy
biBtYWtlcihwb3J0X25hbWU9cG9ydF9uYW1lLCBvcHRpb25zPW9wdGlvbnMsIHN5c3RlbV9wbGF0
Zm9ybT1zeXN0ZW1fcGxhdGZvcm0sICoqa3dhcmdzKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5X3VuaXR0ZXN0LnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5X3VuaXR0ZXN0LnB5Cmlu
ZGV4IDg4YjMyM2JiYmQ4Y2ZlOGE4ODU4ZDQ4OGRhMjU0YzQ4NTg2MGQzMGYuLjUyNTExYzU4OThi
MTAyNTRlYzEzNGM1OTc2YzRhNDdkZTk1MTc5YmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeV91bml0dGVzdC5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnlfdW5pdHRlc3QucHkK
QEAgLTMxLDcgKzMxLDYgQEAgaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gd2Via2l0cHkudG9vbCBp
bXBvcnQgbW9ja3Rvb2wKIAotaW1wb3J0IGNocm9taXVtX2dwdQogaW1wb3J0IGNocm9taXVtX2xp
bnV4CiBpbXBvcnQgY2hyb21pdW1fbWFjCiBpbXBvcnQgY2hyb21pdW1fd2luCkBAIC0xMjYsMTUg
KzEyNSw2IEBAIGNsYXNzIEZhY3RvcnlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYg
dGVzdF9xdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgicXQiLCBxdC5RdFBvcnQp
CiAKLSAgICBkZWYgdGVzdF9jaHJvbWl1bV9ncHVfbGludXgoc2VsZik6Ci0gICAgICAgIHNlbGYu
YXNzZXJ0X3BvcnQoImNocm9taXVtLWdwdS1saW51eCIsIGNocm9taXVtX2dwdS5DaHJvbWl1bUdw
dUxpbnV4UG9ydCkKLQotICAgIGRlZiB0ZXN0X2Nocm9taXVtX2dwdV9tYWMoc2VsZik6Ci0gICAg
ICAgIHNlbGYuYXNzZXJ0X3BvcnQoImNocm9taXVtLWdwdS1tYWMiLCBjaHJvbWl1bV9ncHUuQ2hy
b21pdW1HcHVNYWNQb3J0KQotCi0gICAgZGVmIHRlc3RfY2hyb21pdW1fZ3B1X3dpbihzZWxmKToK
LSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgiY2hyb21pdW0tZ3B1LXdpbiIsIGNocm9taXVtX2dw
dS5DaHJvbWl1bUdwdVdpblBvcnQpCi0KICAgICBkZWYgdGVzdF9jaHJvbWl1bV9tYWMoc2VsZik6
CiAgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQoImNocm9taXVtLW1hYyIsIGNocm9taXVtX21hYy5D
aHJvbWl1bU1hY1BvcnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0X3BsYXRmb3JtX3BvcnQoImRhcndp
biIsIHNlbGYuY2hyb21pdW1fb3B0aW9ucywK
</data>

          </attachment>
      

    </bug>

</bugzilla>