<?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>39207</bug_id>
          
          <creation_ts>2010-05-17 01:36:47 -0700</creation_ts>
          <short_desc>webkit-patch upload needs to pass diff to check-webkit-style</short_desc>
          <delta_ts>2010-10-21 08:18:12 -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>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>48041</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>levin</cc>
    
    <cc>mjs</cc>
    
    <cc>ojan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>226680</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-17 01:36:47 -0700</bug_when>
    <thetext>webkit-patch upload needs to pass diff to check-webkit-style

Right now both webkit-patch and check-webkit-style compute their own copy of the current diff.  This is very expensive, especially under SVN.

We should pass the diff to check-webkit-style via stdin, we have it sitting in a string right there during the CheckStyle step.  All we need to do is call self.cached_lookup(state, &quot;diff&quot;) and pass it as input= as part of run_command.  We obviously would have to teach check-webkit-style how to expect the diff over stdin, but that should be easy to do.

I expect this could be a very large speedup for webkit-patch users.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226682</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-17 01:38:26 -0700</bug_when>
    <thetext>We should also pass the diff to prepare-ChangeLog, although that can be done in a separate bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229629</commentid>
    <comment_count>2</comment_count>
      <attachid>56854</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-24 00:52:15 -0700</bug_when>
    <thetext>Created attachment 56854
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229630</commentid>
    <comment_count>3</comment_count>
      <attachid>56854</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-24 00:54:20 -0700</bug_when>
    <thetext>Comment on attachment 56854
patch

Actually, this is ready for review.  This makes webkit-patch upload 15s faster on my laptop, and should be an even bigger speed improvement for SVN users.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229663</commentid>
    <comment_count>4</comment_count>
      <attachid>56854</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-24 02:20:35 -0700</bug_when>
    <thetext>Comment on attachment 56854
patch

The invalidation question below is important or else we could upload the wrong diff.

WebKitTools/Scripts/webkitpy/tool/steps/abstractstep.py: 
 +          command = [port.script_path(script_name)]
This seems unrelated, but ok.

WebKitTools/Scripts/webkitpy/tool/steps/checkstyle.py:52
 +          diff = self.cached_lookup(state, &quot;diff&quot;)
Please make sure that prepare change log and edit change log correctly invalidate the diff.  I&apos;m not sure if this really saves much since we need to recompute the diff after editing the change log anyway.  We need to track the modified files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229781</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-05-24 09:34:06 -0700</bug_when>
    <thetext>It&apos;s a layering violation for TextFileReader to have to know about patches.  TextFileReader shouldn&apos;t have a _patch_reader data attribute.  It also shouldn&apos;t have a process_files_listed_in_patch() method.

Side question: is there a reason we want code in webkitpy to be calling other code in webkitpy via the command line instead of simply calling it as a Python function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229797</commentid>
    <comment_count>6</comment_count>
      <attachid>56854</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-24 10:23:36 -0700</bug_when>
    <thetext>Comment on attachment 56854
patch

Please address Chris&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229801</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-24 10:38:13 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; It&apos;s a layering violation for TextFileReader to have to know about patches.  TextFileReader shouldn&apos;t have a _patch_reader data attribute.  It also shouldn&apos;t have a process_files_listed_in_patch() method.

Why is this a layering violation?  The previous code was horribly contorted.  I&apos;m OK with moving process_files_listed_in_patch down into the caller (check-webkit-style), but the previous design with PatchReader was wrong, PatchReader had no business knowing about TextFileReader as demonstrated by how hard it was to mock the code.

The disadvantage with moving the process_files_listed_in_patch call down into check-webkit-style is that it makes it less testable.

Please explain why you see this as a layering violation.  TextFileReader is about reading files and processing them.  PatchReader teaching it how to read patch files. just like it already implicitly knows how to read directory files.

&gt; Side question: is there a reason we want code in webkitpy to be calling other code in webkitpy via the command line instead of simply calling it as a Python function?

I like that it spits out the same output as it would for someone calling it via the command line.  It would be OK to call it directly, but I simply kept it this way for now.  In general process boundaries are really nice for forcing us to do simple (user-repeatable) actions and make exceptions/error cases easier to handle in a generic way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229877</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-05-24 13:36:51 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #5)
&gt; &gt; It&apos;s a layering violation for TextFileReader to have to know about patches.  TextFileReader shouldn&apos;t have a _patch_reader data attribute.  It also shouldn&apos;t have a process_files_listed_in_patch() method.
&gt; 
&gt; Why is this a layering violation?

It&apos;s a layering violation because TextFileReader was designed to be a generic
class for performing generic operations on files.  Notice that it has no
dependencies on webkitpy other than webkitpy logging.  In particular, it
doesn&apos;t have any style-specific code in it.

Your code adds to filereader.py a reference to PatchReader, which in turn
knows about DiffParser from webkitpy.common.checkout.diff_parser.  So now
TextFileReader knows about all this other stuff.

Your code also adds style-specific logic to TextFileReader because it
passes a &quot;line_numbers&quot; parameter to process_file() which only makes sense
in the context of check-webkit-style.

+    def process_files_listed_in_patch(self, patch_string):
+        files_to_lines = self._patch_reader.parse_files_and_line_numbers(patch_string)
+        for path, line_numbers in files_to_lines.items():
+            self.process_file(file_path=path, line_numbers=line_numbers)
+
     def process_file(self, file_path, **kwargs):
         &quot;&quot;&quot;Process the given file by calling the processor&apos;s process() method.

The line_numbers parameter is part of the StyleProcessor class&apos;s API:

http://trac.webkit.org/browser/trunk/WebKitTools/Scripts/webkitpy/style/checker.py?rev=60053#L655

So that would add an implicit circular reference (checker.py &lt;-&gt; filereader.py).

TextFileReader&apos;s process_file() method accepts **kwargs so it wouldn&apos;t have to
know about any style-specific parameters like &quot;line_numbers&quot;.

&gt;  The previous code was horribly contorted.  I&apos;m OK with moving process_files_listed_in_patch down into the caller (check-webkit-style), but the previous design with PatchReader was wrong, PatchReader had no business knowing about TextFileReader as demonstrated by how hard it was to mock the code.

It wasn&apos;t hard to mock.  The TextFileReader mock only consisted of two one-line methods.

-    class MockTextFileReader(object):
-
-        def __init__(self):
-            self.passed_to_process_file = []
-            &quot;&quot;&quot;A list of (file_path, line_numbers) pairs.&quot;&quot;&quot;
-
-        def process_file(self, file_path, line_numbers):
-            self.passed_to_process_file.append((file_path, line_numbers))

Incidentally, I notice that your patch didn&apos;t add any unit tests for process_files_listed_in_patch(self, patch_string).

It sounds like maybe you just don&apos;t like the fact that PatchReader
is responsible for calling both DiffParser and TextFileReader.  If that&apos;s
the case, it seems like you might be able to just break PatchReader up into smaller pieces
or methods, which would be fine.  Originally, PatchReader was really just a higher-level
helper class to make things easier to test and call from check-webkit-style.

Perhaps the confusion was all from the name.  As it is now, PatchReader is more a souped-up
version of TextFileReader for check-webkit-style purposes, rather than something
that simply &quot;reads patches&quot;.  If the name had been something more accurate but longer like &quot;TextFileReaderForPatches&quot;
instead of the more innocent-sounding PatchReader, the dependency might have made more sense.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56854</attachid>
            <date>2010-05-24 00:52:15 -0700</date>
            <delta_ts>2010-06-11 13:27:28 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug-39207-20100524005213.patch</filename>
            <type>text/plain</type>
            <size>19802</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBiZWMyMzFmZWI4MjQ3OWJjOTU4YWVhNmE3MzI1M2U1MjFkMWIwYWI0Li5jYmFjNGIx
YmZkYTc5ODAwMzQ2MWZhY2ViZGY4OWEwNTJjMjEwMjVkIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAK
KzIwMTAtMDUtMjQgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHdlYmtpdC1wYXRjaCB1cGxvYWQg
bmVlZHMgdG8gcGFzcyBkaWZmIHRvIGNoZWNrLXdlYmtpdC1zdHlsZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkyMDcKKworICAgICAgICAqIFNjcmlw
dHMvY2hlY2std2Via2l0LXN0eWxlOgorICAgICAgICAgLSBBZGQgc3VwcG9ydCBmb3IgLS11c2Ut
cGF0Y2gtYXMtZGlmZgorICAgICAgICAgLSBEb24ndCB1c2UgUGF0Y2hSZWFkZXIgZGlyZWN0bHku
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9weXRob24ucHk6Cisg
ICAgICAgICAtIEZpeCBicm9rZW4gcmVmZXJlbmNlIHRvIHBlcDgucHkKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2ZpbGVyZWFkZXIucHk6CisgICAgICAgICAtIEFkZCBwcm9jZXNz
X2ZpbGVzX2xpc3RlZF9pbl9wYXRjaCB0byB3cmFwIFBhdGNoUmVhZGVyLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvc3R5bGUvb3B0cGFyc2VyLnB5OgorICAgICAgICAgLSBBZGQgLS11c2Ut
cGF0Y2gtYXMtZGlmZi4KKyAgICAgICAgIC0gU2ltcGxpZnkgaGFuZGxpbmcgb2YgZmxhZ192YWx1
ZQorICAgICAgICAgLSBtaW5fY29uZmlkZW5jZSBpcyBhbHJlYWR5IGFuIGludCgpIG5vIG5lZWQg
dG8gY29udmVydC4KKyAgICAgICAgIC0gQWRkIEZJWE1FIGFib3V0IGRvaW5nIG1vcmUgaW4gY2Fs
bGJhY2tzIGFuZCBsZXNzIGluIHRoaXMgY3VzdG9tIG1ldGhvZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL3BhdGNocmVhZGVyLnB5OgorICAgICAgICAgLSBQYXRjaFJlYWRlciBz
aG91bGRuJ3QgY2FsbCBUZXh0RmlsZVJlYWRlciBkaXJlY3RseS4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL3BhdGNocmVhZGVyX3VuaXR0ZXN0LnB5OgorICAgICAgICAgLSBHcmVh
dGx5IHNpbXBsaWZ5IG1vY2tpbmcgbm93IHRoYXQgd2UgZG9uJ3QgY2FsbCBUZXh0RmlsZVJlYWRl
ci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvYWJzdHJhY3RzdGVwLnB5
OgorICAgICAgICAgLSBSZW1vdmUgdW51c2VkIHBvcnQgYXJndW1lbnQgZnJvbSBfcnVuX3Njcmlw
dC4KKyAgICAgICAgIC0gVXNlIHRvb2wuc2NtKCkuc2NyaXB0X3BhdGggaW5zdGVhZCBvZiBwb3J0
LnNjcmlwdF9wYXRoIHNvIHRoYXQgd2UKKyAgICAgICAgICAgaGF2ZSBhYnNvbHV0ZSBwYXRocyBh
bmQgZG9uJ3QgbmVlZCB0byBoYXZlIGNoZGlyJ2QgdG8gd2Via2l0X3Jvb3QuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL2NoZWNrc3R5bGUucHk6CisgICAgICAgICAtIFN0
b3AgY2hkaXItaW5nIHRvIGNoZWNrb3V0X3Jvb3QsIG1vZGlmeWluZyBjd2QgaXMgYmFkLgorICAg
ICAgICAgLSBObyBuZWVkIGZvciAtLXNxdWFzaCBoYW5kbGluZyBhbnltb3JlLCBwYXNzIHRoZSBk
aWZmIGRpcmVjdGx5IHRvIGNoZWNrLXdlYmtpdC1zdHlsZS4KKyAgICAgICAgIC0gInJhaXNlIiBp
cyBiZXR0ZXIgdGhhbiAicmFpc2UgZSIgYXMgaXQgd29uJ3QgbW9kaWZ5IHRoZSBjYWxsc3RhY2su
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL2NoZWNrc3R5bGVfdW5pdHRl
c3QucHk6CisgICAgICAgICAtIFJlbW92ZSBub3ctaW52YWxpZCAtLXNxdWFzaCB0ZXN0IGFuZCBh
ZGQgYSBiYXNpYyBjYWNoZWQgZGlmZiB0ZXN0LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
dG9vbC9zdGVwcy9wcmVwYXJlY2hhbmdlbG9nLnB5OgorICAgICAgICAgLSBVc2UgYW4gYWJzb2x1
dGUgcGF0aCB0byBwcmVwYXJlLUNoYW5nZUxvZy4KKwogMjAxMC0wNS0yMyAgRXJpYyBTZWlkZWwg
IDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuaWVsIEJhdGVzLgpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9jaGVjay13ZWJraXQtc3R5bGUgYi9XZWJL
aXRUb29scy9TY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHlsZQppbmRleCAxOWQzNzYyNzU1OTI3ZGJl
NTI5MmJmNTkxNTk3MDhkOTIxYWI2ZDI3Li40NjBhYjYxYmQyMGQ3NWI2OGExNzE3M2RiMWY1ZjAz
MDY2ZjljMWMxIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL2NoZWNrLXdlYmtpdC1z
dHlsZQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHlsZQpAQCAtNTAs
NyArNTAsNiBAQCBpbXBvcnQgc3lzCiAKIGZyb20gd2Via2l0cHkuc3R5bGVfcmVmZXJlbmNlcyBp
bXBvcnQgZGV0ZWN0X2NoZWNrb3V0CiBpbXBvcnQgd2Via2l0cHkuc3R5bGUuY2hlY2tlciBhcyBj
aGVja2VyCi1mcm9tIHdlYmtpdHB5LnN0eWxlLnBhdGNocmVhZGVyIGltcG9ydCBQYXRjaFJlYWRl
cgogZnJvbSB3ZWJraXRweS5zdHlsZS5jaGVja2VyIGltcG9ydCBTdHlsZVByb2Nlc3NvcgogZnJv
bSB3ZWJraXRweS5zdHlsZS5maWxlcmVhZGVyIGltcG9ydCBUZXh0RmlsZVJlYWRlcgogZnJvbSB3
ZWJraXRweS5zdHlsZS5tYWluIGltcG9ydCBjaGFuZ2VfZGlyZWN0b3J5CkBAIC0xMDksMTUgKzEw
OCwxOCBAQCBkZWYgbWFpbigpOgogICAgIHBhdGhzID0gY2hhbmdlX2RpcmVjdG9yeShjaGVja291
dF9yb290PWNoZWNrb3V0X3Jvb3QsIHBhdGhzPXBhdGhzKQogCiAgICAgc3R5bGVfcHJvY2Vzc29y
ID0gU3R5bGVQcm9jZXNzb3IoY29uZmlndXJhdGlvbikKLQogICAgIGZpbGVfcmVhZGVyID0gVGV4
dEZpbGVSZWFkZXIoc3R5bGVfcHJvY2Vzc29yKQogCiAgICAgaWYgcGF0aHM6CiAgICAgICAgIGZp
bGVfcmVhZGVyLnByb2Nlc3NfcGF0aHMocGF0aHMpCiAgICAgZWxzZToKLSAgICAgICAgcGF0Y2gg
PSBjaGVja291dC5jcmVhdGVfcGF0Y2gob3B0aW9ucy5naXRfY29tbWl0LCBvcHRpb25zLnNxdWFz
aCkKLSAgICAgICAgcGF0Y2hfY2hlY2tlciA9IFBhdGNoUmVhZGVyKGZpbGVfcmVhZGVyKQotICAg
ICAgICBwYXRjaF9jaGVja2VyLmNoZWNrKHBhdGNoKQorICAgICAgICBpZiBvcHRpb25zLnVzZV9w
YXRjaF9hc19kaWZmOgorICAgICAgICAgICAgIyBQYXRjaCBmaWxlcyBhcmUgYWx3YXlzIHRyZWF0
ZWQgYXMgYmluYXJ5LgorICAgICAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihvcHRpb25zLnVzZV9w
YXRjaF9hc19kaWZmLCAiciIsIGVuY29kaW5nPU5vbmUpIGFzIHBhdGNoX2ZpbGU6CisgICAgICAg
ICAgICAgICAgcGF0Y2ggPSBwYXRjaF9maWxlLnJlYWQoKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgcGF0Y2ggPSBjaGVja291dC5jcmVhdGVfcGF0Y2gob3B0aW9ucy5naXRfY29tbWl0LCBv
cHRpb25zLnNxdWFzaCkKKyAgICAgICAgZmlsZV9yZWFkZXIucHJvY2Vzc19maWxlc19saXN0ZWRf
aW5fcGF0Y2gocGF0Y2gpCiAKICAgICBlcnJvcl9jb3VudCA9IHN0eWxlX3Byb2Nlc3Nvci5lcnJv
cl9jb3VudAogICAgIGZpbGVfY291bnQgPSBmaWxlX3JlYWRlci5maWxlX2NvdW50CmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL3B5dGhvbi5w
eSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvcHl0aG9uLnB5
CmluZGV4IDcwZDQ0NTBkYjdlZDk5ZjAzNWFmNjdmMmFhZmE1YzFkNDRlNGM3YWUuLjhjZmQxYjJk
MzVlZjE2MWRlZDA2OWJhYjVlNmI3MDg3YzdhOTUyODMgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvcHl0aG9uLnB5CisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvcHl0aG9uLnB5CkBAIC0yMiw3ICsy
Miw3IEBACiAKICIiIlN1cHBvcnRzIGNoZWNraW5nIFdlYktpdCBzdHlsZSBpbiBQeXRob24gZmls
ZXMuIiIiCiAKLWZyb20gLi4uc3R5bGVfcmVmZXJlbmNlcyBpbXBvcnQgcGVwOAorZnJvbSB3ZWJr
aXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQgaW1wb3J0IHBlcDgKIAogCiBjbGFzcyBQeXRo
b25DaGVja2VyKG9iamVjdCk6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2ZpbGVyZWFkZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2ZpbGVyZWFkZXIucHkKaW5kZXggNDg0NTViMzVmMjdmMjhiYWU4NjBkMmI2NzAyODUxNjIw
N2I3OTkwNS4uMTZiNWZlYTNiYzViMDg1YjQ5ZDZiMmNhZTMwNzRjN2RlMGUyYWI3YyAxMDA2NDQK
LS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9maWxlcmVhZGVyLnB5Cisr
KyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvZmlsZXJlYWRlci5weQpAQCAt
MzUsNiArMzUsOCBAQCBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiAKK2Zy
b20gd2Via2l0cHkuc3R5bGUucGF0Y2hyZWFkZXIgaW1wb3J0IFBhdGNoUmVhZGVyCisKIAogX2xv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCkBAIC01OCw2ICs2MCw3IEBAIGNsYXNz
IFRleHRGaWxlUmVhZGVyKG9iamVjdCk6CiAKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3By
b2Nlc3NvciA9IHByb2Nlc3NvcgorICAgICAgICBzZWxmLl9wYXRjaF9yZWFkZXIgPSBQYXRjaFJl
YWRlcigpCiAgICAgICAgIHNlbGYuZmlsZV9jb3VudCA9IDAKIAogICAgIGRlZiBfcmVhZF9saW5l
cyhzZWxmLCBmaWxlX3BhdGgpOgpAQCAtODgsNiArOTEsMTEgQEAgY2xhc3MgVGV4dEZpbGVSZWFk
ZXIob2JqZWN0KToKICAgICAgICAgbGluZXMgPSBjb250ZW50cy5zcGxpdCgnXG4nKQogICAgICAg
ICByZXR1cm4gbGluZXMKIAorICAgIGRlZiBwcm9jZXNzX2ZpbGVzX2xpc3RlZF9pbl9wYXRjaChz
ZWxmLCBwYXRjaF9zdHJpbmcpOgorICAgICAgICBmaWxlc190b19saW5lcyA9IHNlbGYuX3BhdGNo
X3JlYWRlci5wYXJzZV9maWxlc19hbmRfbGluZV9udW1iZXJzKHBhdGNoX3N0cmluZykKKyAgICAg
ICAgZm9yIHBhdGgsIGxpbmVfbnVtYmVycyBpbiBmaWxlc190b19saW5lcy5pdGVtcygpOgorICAg
ICAgICAgICAgc2VsZi5wcm9jZXNzX2ZpbGUoZmlsZV9wYXRoPXBhdGgsIGxpbmVfbnVtYmVycz1s
aW5lX251bWJlcnMpCisKICAgICBkZWYgcHJvY2Vzc19maWxlKHNlbGYsIGZpbGVfcGF0aCwgKipr
d2FyZ3MpOgogICAgICAgICAiIiJQcm9jZXNzIHRoZSBnaXZlbiBmaWxlIGJ5IGNhbGxpbmcgdGhl
IHByb2Nlc3NvcidzIHByb2Nlc3MoKSBtZXRob2QuCiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvb3B0cGFyc2VyLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9zdHlsZS9vcHRwYXJzZXIucHkKaW5kZXggYmI0Nzg4YTU1ZGI2OGZiYzcxMDQ4
NDk5NjNlODliMjZiYzQzZDU4NS4uZDYyNmVmYzUyYjIzZGEyZTAyOTEzNWNhMzUxZDRiNTMyZThm
ZjdkYiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9vcHRw
YXJzZXIucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9vcHRwYXJz
ZXIucHkKQEAgLTE0OCw2ICsxNDgsNyBAQCBjbGFzcyBDb21tYW5kT3B0aW9uVmFsdWVzKG9iamVj
dCk6CiAgICAgICAgICAgICAgICAgIGlzX3ZlcmJvc2U9RmFsc2UsCiAgICAgICAgICAgICAgICAg
IG1pbl9jb25maWRlbmNlPTEsCiAgICAgICAgICAgICAgICAgIG91dHB1dF9mb3JtYXQ9ImVtYWNz
IiwKKyAgICAgICAgICAgICAgICAgdXNlX3BhdGNoX2FzX2RpZmY9Tm9uZSwKICAgICAgICAgICAg
ICAgICAgc3F1YXNoPUZhbHNlKToKICAgICAgICAgaWYgZmlsdGVyX3J1bGVzIGlzIE5vbmU6CiAg
ICAgICAgICAgICBmaWx0ZXJfcnVsZXMgPSBbXQpAQCAtMTY3LDYgKzE2OCw3IEBAIGNsYXNzIENv
bW1hbmRPcHRpb25WYWx1ZXMob2JqZWN0KToKICAgICAgICAgc2VsZi5pc192ZXJib3NlID0gaXNf
dmVyYm9zZQogICAgICAgICBzZWxmLm1pbl9jb25maWRlbmNlID0gbWluX2NvbmZpZGVuY2UKICAg
ICAgICAgc2VsZi5vdXRwdXRfZm9ybWF0ID0gb3V0cHV0X2Zvcm1hdAorICAgICAgICBzZWxmLnVz
ZV9wYXRjaF9hc19kaWZmID0gdXNlX3BhdGNoX2FzX2RpZmYKICAgICAgICAgc2VsZi5zcXVhc2gg
PSBzcXVhc2gKIAogICAgICMgVXNlZnVsIGZvciB1bml0IHRlc3RpbmcuCkBAIC0xODIsNiArMTg0
LDggQEAgY2xhc3MgQ29tbWFuZE9wdGlvblZhbHVlcyhvYmplY3QpOgogICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCiAgICAgICAgIGlmIHNlbGYub3V0cHV0X2Zvcm1hdCAhPSBvdGhlci5vdXRwdXRf
Zm9ybWF0OgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIHNlbGYudXNlX3Bh
dGNoX2FzX2RpZmYgIT0gb3RoZXIudXNlX3BhdGNoX2FzX2RpZmY6CisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKICAgICAgICAgaWYgc2VsZi5zcXVhc2ggIT0gb3RoZXIuc3F1YXNoOgogICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCiAKQEAgLTIyMCw2ICsyMjQsOCBAQCBjbGFzcyBBcmd1bWVudFBy
aW50ZXIob2JqZWN0KToKICAgICAgICAgICAgIGZsYWdzWydnaXQtY29tbWl0J10gPSBvcHRpb25z
LmdpdF9jb21taXQKICAgICAgICAgaWYgb3B0aW9ucy5zcXVhc2g6CiAgICAgICAgICAgICBmbGFn
c1snc3F1YXNoJ10gPSBvcHRpb25zLnNxdWFzaAorICAgICAgICBpZiBvcHRpb25zLnVzZV9wYXRj
aF9hc19kaWZmOgorICAgICAgICAgICAgZmxhZ3NbJ3VzZS1wYXRjaC1hcy1kaWZmJ10gPSBvcHRp
b25zLnVzZV9wYXRjaF9hc19kaWZmCiAKICAgICAgICAgZmxhZ19zdHJpbmcgPSAnJwogICAgICAg
ICAjIEFscGhhYmV0aXppbmcgbGV0cyB1cyB1bml0IHRlc3QgdGhpcyBtZXRob2QuCkBAIC0zNDIs
NiArMzQ4LDExIEBAIGNsYXNzIEFyZ3VtZW50UGFyc2VyKG9iamVjdCk6CiAgICAgICAgIHBhcnNl
ci5hZGRfb3B0aW9uKCItdiIsICItLXZlcmJvc2UiLCBkZXN0PSJpc192ZXJib3NlIiwgZGVmYXVs
dD1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwg
aGVscD12ZXJib3NlX2hlbHApCiAKKyAgICAgICAgdXNlX3BhdGNoX2FzX2RpZmZfaGVscCA9ICgi
UGFyc2UgdGhlIHBhc3NlZCBpbiBwYXRjaCBmaWxlIGZvciBmaWxlIG5hbWVzIGFuZCBsaW5lIgor
ICAgICAgICAgICAgIm51bWJlcnMgaW5zdGVhZCBvZiB1c2luZyB0aGUgU0NNIGRpZmYgY29tbWFu
ZC4iKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLS11c2UtcGF0Y2gtYXMtZGlmZiIsIGRl
c3Q9InVzZV9wYXRjaF9hc19kaWZmIiwKKyAgICAgICAgICAgIHR5cGU9InN0cmluZyIsIG1ldGF2
YXI9IlBBVENIIiwgYWN0aW9uPSJzdG9yZSIsIGhlbHA9dXNlX3BhdGNoX2FzX2RpZmZfaGVscCkK
KwogICAgICAgICAjIE92ZXJyaWRlIE9wdGlvblBhcnNlcidzIGVycm9yKCkgbWV0aG9kIHNvIHRo
YXQgb3B0aW9uIGhlbHAgd2lsbAogICAgICAgICAjIGFsc28gZGlzcGxheSB3aGVuIGFuIGVycm9y
IG9jY3Vycy4gIE5vcm1hbGx5LCBqdXN0IHRoZSB1c2FnZQogICAgICAgICAjIHN0cmluZyBkaXNw
bGF5cyBhbmQgbm90IG9wdGlvbiBoZWxwLgpAQCAtMzk5LDYgKzQxMCw4IEBAIGNsYXNzIEFyZ3Vt
ZW50UGFyc2VyKG9iamVjdCk6CiAKICAgICAgICAgIiIiCiAgICAgICAgIGZpbHRlcnMgPSBbXQor
ICAgICAgICBpZiBub3QgZmxhZ192YWx1ZToKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXJzCiAg
ICAgICAgIGZvciB1bmNsZWFuZWRfZmlsdGVyIGluIGZsYWdfdmFsdWUuc3BsaXQoJywnKToKICAg
ICAgICAgICAgIGZpbHRlciA9IHVuY2xlYW5lZF9maWx0ZXIuc3RyaXAoKQogICAgICAgICAgICAg
aWYgbm90IGZpbHRlcjoKQEAgLTQyMywzMiArNDM2LDI4IEBAIGNsYXNzIEFyZ3VtZW50UGFyc2Vy
KG9iamVjdCk6CiAKICAgICAgICAgZmlsdGVyX3ZhbHVlID0gb3B0aW9ucy5maWx0ZXJfdmFsdWUK
ICAgICAgICAgZ2l0X2NvbW1pdCA9IG9wdGlvbnMuZ2l0X2NvbW1pdAotICAgICAgICBpc192ZXJi
b3NlID0gb3B0aW9ucy5pc192ZXJib3NlCiAgICAgICAgIG1pbl9jb25maWRlbmNlID0gb3B0aW9u
cy5taW5fY29uZmlkZW5jZQotICAgICAgICBvdXRwdXRfZm9ybWF0ID0gb3B0aW9ucy5vdXRwdXRf
Zm9ybWF0CiAKKyAgICAgICAgIyBGSVhNRTogV2h5IHRoZSBpcyBub3QgTm9uZSBjaGVjaz8KICAg
ICAgICAgaWYgZmlsdGVyX3ZhbHVlIGlzIG5vdCBOb25lIGFuZCBub3QgZmlsdGVyX3ZhbHVlOgog
ICAgICAgICAgICAgIyBUaGVuIHRoZSB1c2VyIGV4cGxpY2l0bHkgcGFzc2VkIG5vIGZpbHRlciwg
Zm9yCiAgICAgICAgICAgICAjIGV4YW1wbGUgIi1mICcnIiBvciAiLS1maWx0ZXI9Ii4KICAgICAg
ICAgICAgIHNlbGYuX2V4aXRfd2l0aF9jYXRlZ29yaWVzKCkKIAotICAgICAgICAjIFZhbGlkYXRl
IHVzZXItcHJvdmlkZWQgdmFsdWVzLgotCiAgICAgICAgIGlmIHBhdGhzIGFuZCBnaXRfY29tbWl0
OgogICAgICAgICAgICAgc2VsZi5fcGFyc2VfZXJyb3IoJ1lvdSBjYW5ub3QgcHJvdmlkZSBib3Ro
IHBhdGhzIGFuZCBhIGdpdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tbWl0
IGF0IHRoZSBzYW1lIHRpbWUuJykKIAotICAgICAgICBtaW5fY29uZmlkZW5jZSA9IGludChtaW5f
Y29uZmlkZW5jZSkKKyAgICAgICAgIyBGSVhNRTogU2hvdWxkIGJlIGRvbmUgaW4gYW4gb3B0cGFy
c2UgY2FsbGJhY2sgaW5zdGVhZC4KICAgICAgICAgaWYgKG1pbl9jb25maWRlbmNlIDwgMSkgb3Ig
KG1pbl9jb25maWRlbmNlID4gNSk6CiAgICAgICAgICAgICBzZWxmLl9wYXJzZV9lcnJvcignb3B0
aW9uIC0tbWluLWNvbmZpZGVuY2U6IGludmFsaWQgaW50ZWdlcjogJwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJyVzOiB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNScKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICUgbWluX2NvbmZpZGVuY2UpCiAKLSAgICAgICAgaWYg
ZmlsdGVyX3ZhbHVlOgotICAgICAgICAgICAgZmlsdGVyX3J1bGVzID0gc2VsZi5fcGFyc2VfZmls
dGVyX2ZsYWcoZmlsdGVyX3ZhbHVlKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZmlsdGVy
X3J1bGVzID0gW10KKyAgICAgICAgaWYgb3B0aW9ucy51c2VfcGF0Y2hfYXNfZGlmZiBhbmQgcGF0
aHM6CisgICAgICAgICAgICBzZWxmLl9wYXJzZV9lcnJvcignLS11c2UtcGF0Y2gtYXMtZGlmZiBj
YW5ub3QgYmUgdXNlZCB3aXRoIHBhdGggYXJndW1lbnRzLicpCiAKKyAgICAgICAgZmlsdGVyX3J1
bGVzID0gc2VsZi5fcGFyc2VfZmlsdGVyX2ZsYWcoZmlsdGVyX3ZhbHVlKQogICAgICAgICB0cnk6
CiAgICAgICAgICAgICB2YWxpZGF0ZV9maWx0ZXJfcnVsZXMoZmlsdGVyX3J1bGVzLCBzZWxmLl9h
bGxfY2F0ZWdvcmllcykKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGVycjoKQEAgLTQ1Niw5
ICs0NjUsMTAgQEAgY2xhc3MgQXJndW1lbnRQYXJzZXIob2JqZWN0KToKIAogICAgICAgICBvcHRp
b25zID0gQ29tbWFuZE9wdGlvblZhbHVlcyhmaWx0ZXJfcnVsZXM9ZmlsdGVyX3J1bGVzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaXRfY29tbWl0PWdpdF9jb21taXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3ZlcmJvc2U9aXNfdmVy
Ym9zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfdmVyYm9zZT1v
cHRpb25zLmlzX3ZlcmJvc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1pbl9jb25maWRlbmNlPW1pbl9jb25maWRlbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwdXRfZm9ybWF0PW91dHB1dF9mb3JtYXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mb3JtYXQ9b3B0aW9ucy5vdXRwdXRfZm9y
bWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VfcGF0Y2hfYXNf
ZGlmZj1vcHRpb25zLnVzZV9wYXRjaF9hc19kaWZmLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzcXVhc2g9b3B0aW9ucy5zcXVhc2gpCiAKICAgICAgICAgcmV0dXJuIChw
YXRocywgb3B0aW9ucykKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3R5bGUvcGF0Y2hyZWFkZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxl
L3BhdGNocmVhZGVyLnB5CmluZGV4IDdiYTJiNjY1MWI5ODY1Mjg2ZTUyY2ZmYWJhOTVkNWMzODdm
MjY3N2EuLjE2MDBiMGE4OWM2ZmZlN2RjNWI3MWUzN2Y2ZmVjZmYxZjk5YTI4M2MgMTAwNjQ0Ci0t
LSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvcGF0Y2hyZWFkZXIucHkKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9wYXRjaHJlYWRlci5weQpAQCAt
MzgsMjEgKzM4LDE0IEBAIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkuc3R5bGUu
cGF0Y2hyZWFkZXIiKQogCiBjbGFzcyBQYXRjaFJlYWRlcihvYmplY3QpOgogCi0gICAgIiIiU3Vw
cG9ydHMgY2hlY2tpbmcgc3R5bGUgaW4gcGF0Y2hlcy4iIiIKKyAgICAiIiJTdXBwb3J0cyByZWFk
aW5nIGxpc3RzIG9mIGZpbGVzIGFuZCBsaW5lIG51bWJlcnMgZnJvbSBwYXRjaGVzLiIiIgogCi0g
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHRfZmlsZV9yZWFkZXIpOgotICAgICAgICAiIiJDcmVh
dGUgYSBQYXRjaFJlYWRlciBpbnN0YW5jZS4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgIHRl
eHRfZmlsZV9yZWFkZXI6IEEgVGV4dEZpbGVSZWFkZXIgaW5zdGFuY2UuCi0KLSAgICAgICAgIiIi
Ci0gICAgICAgIHNlbGYuX3RleHRfZmlsZV9yZWFkZXIgPSB0ZXh0X2ZpbGVfcmVhZGVyCi0KLSAg
ICBkZWYgY2hlY2soc2VsZiwgcGF0Y2hfc3RyaW5nKToKKyAgICBkZWYgcGFyc2VfZmlsZXNfYW5k
X2xpbmVfbnVtYmVycyhzZWxmLCBwYXRjaF9zdHJpbmcpOgogICAgICAgICAiIiJDaGVjayBzdHls
ZSBpbiB0aGUgZ2l2ZW4gcGF0Y2guIiIiCiAgICAgICAgIHBhdGNoX2ZpbGVzID0gRGlmZlBhcnNl
cihwYXRjaF9zdHJpbmcuc3BsaXRsaW5lcygpKS5maWxlcwogCisgICAgICAgIGZpbGVzX3RvX2xp
bmVfbnVtYmVycyA9IHt9CisKICAgICAgICAgIyBUaGUgZGlmZiB2YXJpYWJsZSBpcyBhIERpZmZG
aWxlIGluc3RhbmNlLgogICAgICAgICBmb3IgcGF0aCwgZGlmZiBpbiBwYXRjaF9maWxlcy5pdGVy
aXRlbXMoKToKICAgICAgICAgICAgIGxpbmVfbnVtYmVycyA9IHNldCgpCkBAIC03MSw1ICs2NCw1
IEBAIGNsYXNzIFBhdGNoUmVhZGVyKG9iamVjdCk6CiAgICAgICAgICAgICAjIFRoaXMgb3B0aW1p
emF0aW9uIGFsc28gcHJldmVudHMgdGhlIHByb2dyYW0gZnJvbSBleGl0aW5nCiAgICAgICAgICAg
ICAjIGR1ZSB0byBhIGRlbGV0ZWQgZmlsZS4KICAgICAgICAgICAgIGlmIGxpbmVfbnVtYmVyczoK
LSAgICAgICAgICAgICAgICBzZWxmLl90ZXh0X2ZpbGVfcmVhZGVyLnByb2Nlc3NfZmlsZShmaWxl
X3BhdGg9cGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5lX251bWJlcnM9bGluZV9udW1iZXJzKQorICAgICAgICAgICAgICAgIGZpbGVz
X3RvX2xpbmVfbnVtYmVycy5zZXRkZWZhdWx0KHBhdGgsIHNldCgpKS51cGRhdGUobGluZV9udW1i
ZXJzKQorICAgICAgICByZXR1cm4gZmlsZXNfdG9fbGluZV9udW1iZXJzCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL3BhdGNocmVhZGVyX3VuaXR0ZXN0LnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9wYXRjaHJlYWRlcl91bml0dGVz
dC5weQppbmRleCAxMDc5MWU0ODY3Y2JlMTcxMGMyYjU1MjI5MjkwYmI4NWI5ZmQ1ODFhLi5mY2Qx
YzljMzc4ZGY2NjU5ZmVkNWQ1ZDc4NWE0NGRiMDYxNTM4ZGVjIDEwMDY0NAotLS0gYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL3BhdGNocmVhZGVyX3VuaXR0ZXN0LnB5CisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvcGF0Y2hyZWFkZXJfdW5pdHRlc3Qu
cHkKQEAgLTQwLDQ2ICs0MCwzMCBAQCBjbGFzcyBQYXRjaFJlYWRlclRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogCiAgICAgIiIiVGVzdCB0aGUgUGF0Y2hSZWFkZXIgY2xhc3MuIiIiCiAKLSAgICBj
bGFzcyBNb2NrVGV4dEZpbGVSZWFkZXIob2JqZWN0KToKLQotICAgICAgICBkZWYgX19pbml0X18o
c2VsZik6Ci0gICAgICAgICAgICBzZWxmLnBhc3NlZF90b19wcm9jZXNzX2ZpbGUgPSBbXQotICAg
ICAgICAgICAgIiIiQSBsaXN0IG9mIChmaWxlX3BhdGgsIGxpbmVfbnVtYmVycykgcGFpcnMuIiIi
Ci0KLSAgICAgICAgZGVmIHByb2Nlc3NfZmlsZShzZWxmLCBmaWxlX3BhdGgsIGxpbmVfbnVtYmVy
cyk6Ci0gICAgICAgICAgICBzZWxmLnBhc3NlZF90b19wcm9jZXNzX2ZpbGUuYXBwZW5kKChmaWxl
X3BhdGgsIGxpbmVfbnVtYmVycykpCi0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIGZp
bGVfcmVhZGVyID0gc2VsZi5Nb2NrVGV4dEZpbGVSZWFkZXIoKQotICAgICAgICBzZWxmLl9maWxl
X3JlYWRlciA9IGZpbGVfcmVhZGVyCi0gICAgICAgIHNlbGYuX3BhdGNoX2NoZWNrZXIgPSBQYXRj
aFJlYWRlcihmaWxlX3JlYWRlcikKLQotICAgIGRlZiBfY2FsbF9jaGVja19wYXRjaChzZWxmLCBw
YXRjaF9zdHJpbmcpOgotICAgICAgICBzZWxmLl9wYXRjaF9jaGVja2VyLmNoZWNrKHBhdGNoX3N0
cmluZykKLQotICAgIGRlZiBfYXNzZXJ0X2NoZWNrZWQoc2VsZiwgcGFzc2VkX3RvX3Byb2Nlc3Nf
ZmlsZSk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuX2ZpbGVfcmVhZGVyLnBhc3Nl
ZF90b19wcm9jZXNzX2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NlZF90b19w
cm9jZXNzX2ZpbGUpCisgICAgZGVmIF9hc3NlcnRfcGFyc2VkX2xpbmVzKHNlbGYsIHBhdGNoLCBl
eHBlY3RlZF9saW5lcyk6CisgICAgICAgIGxpbmVzID0gUGF0Y2hSZWFkZXIoKS5wYXJzZV9maWxl
c19hbmRfbGluZV9udW1iZXJzKHBhdGNoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVz
LCBleHBlY3RlZF9saW5lcykKIAogICAgIGRlZiB0ZXN0X2NoZWNrX3BhdGNoKHNlbGYpOgogICAg
ICAgICAjIFRoZSBtb2RpZmllZCBsaW5lX251bWJlcnMgYXJyYXkgZm9yIHRoaXMgcGF0Y2ggaXM6
IFsyXS4KLSAgICAgICAgc2VsZi5fY2FsbF9jaGVja19wYXRjaCgiIiJkaWZmIC0tZ2l0IGEvX19p
bml0X18ucHkgYi9fX2luaXRfXy5weQorICAgICAgICBwYXRjaCA9ICIiImRpZmYgLS1naXQgYS9f
X2luaXRfXy5weSBiL19faW5pdF9fLnB5CiBpbmRleCBlZjY1YmVlLi5lM2RiNzBlIDEwMDY0NAog
LS0tIGEvX19pbml0X18ucHkKICsrKyBiL19faW5pdF9fLnB5CiBAQCAtMSwxICsxLDIgQEAKICAj
IFJlcXVpcmVkIGZvciBQeXRob24gdG8gc2VhcmNoIHRoaXMgZGlyZWN0b3J5IGZvciBtb2R1bGUg
ZmlsZXMKICsjIE5ldyBsaW5lCi0iIiIpCi0gICAgICAgIHNlbGYuX2Fzc2VydF9jaGVja2VkKFso
Il9faW5pdF9fLnB5Iiwgc2V0KFsyXSkpXSkKKyIiIgorICAgICAgICBleHBlY3RlZF9saW5lcyA9
IHsiX19pbml0X18ucHkiOiBzZXQoWzJdKX0KKyAgICAgICAgc2VsZi5fYXNzZXJ0X3BhcnNlZF9s
aW5lcyhwYXRjaCwgZXhwZWN0ZWRfbGluZXMpCiAKICAgICBkZWYgdGVzdF9jaGVja19wYXRjaF93
aXRoX2RlbGV0aW9uKHNlbGYpOgotICAgICAgICBzZWxmLl9jYWxsX2NoZWNrX3BhdGNoKCIiIklu
ZGV4OiBfX2luaXRfXy5weQorICAgICAgICBwYXRjaCA9ICIiIkluZGV4OiBfX2luaXRfXy5weQog
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQogLS0tIF9faW5pdF9fLnB5ICAocmV2aXNpb24gMzU5MykKICsrKyBfX2luaXRf
Xy5weSAgKHdvcmtpbmcgY29weSkKIEBAIC0xICswLDAgQEAKIC1mb29iYXIKLSIiIikKLSAgICAg
ICAgIyBfbW9ja19jaGVja19maWxlIHNob3VsZCBub3QgYmUgY2FsbGVkIGZvciB0aGUgZGVsZXRp
b24gcGF0Y2guCi0gICAgICAgIHNlbGYuX2Fzc2VydF9jaGVja2VkKFtdKQorIiIiCisgICAgICAg
ICMgVGhlcmUgYXJlIG5vIGxpbmVzIHRvIGNoZWNrIGluIHRoaXMgZGVsZXRpb24gcGF0Y2guCisg
ICAgICAgIHNlbGYuX2Fzc2VydF9wYXJzZWRfbGluZXMocGF0Y2gsIHt9KQpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL2Fic3RyYWN0c3RlcC5weSBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9hYnN0cmFjdHN0ZXAucHkK
aW5kZXggYWJhZmU2Mzk5OGYyMDFmOWQ2MDEyNGQ2ZTIwNGMyNTkxOTNkMGU1Ni4uYmQ5Zjk1NjRh
MGYzOWI3NWIzZWQxZGNhZDMzNTk4MDZlYTA1YjQyNSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL2Fic3RyYWN0c3RlcC5weQorKysgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvYWJzdHJhY3RzdGVwLnB5CkBAIC0zNywx
MiArMzcsMTEgQEAgY2xhc3MgQWJzdHJhY3RTdGVwKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX29w
dGlvbnMgPSBvcHRpb25zCiAgICAgICAgIHNlbGYuX3BvcnQgPSBOb25lCiAKLSAgICBkZWYgX3J1
bl9zY3JpcHQoc2VsZiwgc2NyaXB0X25hbWUsIGFyZ3M9Tm9uZSwgcXVpZXQ9RmFsc2UsIHBvcnQ9
V2ViS2l0UG9ydCk6CisgICAgZGVmIF9ydW5fc2NyaXB0KHNlbGYsIHNjcmlwdF9uYW1lLCBhcmdz
PU5vbmUsIHF1aWV0PUZhbHNlKToKICAgICAgICAgbG9nKCJSdW5uaW5nICVzIiAlIHNjcmlwdF9u
YW1lKQotICAgICAgICBjb21tYW5kID0gW3BvcnQuc2NyaXB0X3BhdGgoc2NyaXB0X25hbWUpXQor
ICAgICAgICBjb21tYW5kID0gW3NlbGYuX3Rvb2wuc2NtKCkuc2NyaXB0X3BhdGgoc2NyaXB0X25h
bWUpXQogICAgICAgICBpZiBhcmdzOgogICAgICAgICAgICAgY29tbWFuZC5leHRlbmQoYXJncykK
LSAgICAgICAgIyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNlbGYucG9ydCgpCiAgICAgICAgIHNl
bGYuX3Rvb2wuZXhlY3V0aXZlLnJ1bl9hbmRfdGhyb3dfaWZfZmFpbChjb21tYW5kLCBxdWlldCkK
IAogICAgICMgRklYTUU6IFRoZSBwb3J0IHNob3VsZCBsaXZlIG9uIHRoZSB0b29sLgpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL2NoZWNrc3R5bGUu
cHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvY2hlY2tzdHlsZS5w
eQppbmRleCA5M2U2MjE1MzE0NGZmN2FkNWE3N2QzNzFiZWM3MjEyMzc2NzA1YmJkLi4yYTNhY2Ni
YjMzNDZlYjJmZjk5NDY2ZGE0MjYzNzdkZWNmNGEzNGU3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvY2hlY2tzdHlsZS5weQorKysgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvY2hlY2tzdHlsZS5weQpAQCAtMjcsMTEg
KzI3LDEyIEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIGltcG9ydCBvcworaW1wb3J0IHRlbXBmaWxlCiAK
IGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9y
CiBmcm9tIHdlYmtpdHB5LnRvb2wuc3RlcHMuYWJzdHJhY3RzdGVwIGltcG9ydCBBYnN0cmFjdFN0
ZXAKIGZyb20gd2Via2l0cHkudG9vbC5zdGVwcy5vcHRpb25zIGltcG9ydCBPcHRpb25zCi1mcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZGVwcmVjYXRlZF9sb2dnaW5nIGltcG9ydCBlcnJvcgor
CiAKIGNsYXNzIENoZWNrU3R5bGUoQWJzdHJhY3RTdGVwKToKICAgICBAY2xhc3NtZXRob2QKQEAg
LTQ3LDIzICs0OCwxOCBAQCBjbGFzcyBDaGVja1N0eWxlKEFic3RyYWN0U3RlcCk6CiAgICAgZGVm
IHJ1bihzZWxmLCBzdGF0ZSk6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLmNoZWNrX3N0
eWxlOgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIG9zLmNoZGlyKHNlbGYuX3Rvb2wuc2Nt
KCkuY2hlY2tvdXRfcm9vdCkKIAotICAgICAgICBhcmdzID0gW10KLSAgICAgICAgaWYgc2VsZi5f
b3B0aW9ucy5naXRfY29tbWl0OgotICAgICAgICAgICAgYXJncy5hcHBlbmQoIi0tZ2l0LWNvbW1p
dCIpCi0gICAgICAgICAgICBhcmdzLmFwcGVuZChzZWxmLl9vcHRpb25zLmdpdF9jb21taXQpCi0g
ICAgICAgIGlmIHNlbGYuX3Rvb2wuc2NtKCkuc2hvdWxkX3NxdWFzaChzZWxmLl9vcHRpb25zLnNx
dWFzaCk6Ci0gICAgICAgICAgICBhcmdzLmFwcGVuZCgiLS1zcXVhc2giKQotICAgICAgICBlbHNl
OgotICAgICAgICAgICAgYXJncy5hcHBlbmQoIi0tbm8tc3F1YXNoIikKKyAgICAgICAgZGlmZiA9
IHNlbGYuY2FjaGVkX2xvb2t1cChzdGF0ZSwgImRpZmYiKQorICAgICAgICBwYXRjaF9maWxlID0g
dGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKHN1ZmZpeD0iLnBhdGNoIikKKyAgICAgICAgcGF0
Y2hfZmlsZS53cml0ZShkaWZmKQorICAgICAgICBwYXRjaF9maWxlLmZsdXNoKCkKIAogICAgICAg
ICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9ydW5fc2NyaXB0KCJjaGVjay13ZWJraXQtc3R5bGUi
LCBhcmdzKQorICAgICAgICAgICAgc2VsZi5fcnVuX3NjcmlwdCgiY2hlY2std2Via2l0LXN0eWxl
IiwgYXJncz1bIi0tdXNlLXBhdGNoLWFzLWRpZmYiLCBwYXRjaF9maWxlLm5hbWVdKQogICAgICAg
ICBleGNlcHQgU2NyaXB0RXJyb3IsIGU6CiAgICAgICAgICAgICBpZiBzZWxmLl9vcHRpb25zLm5v
bl9pbnRlcmFjdGl2ZToKICAgICAgICAgICAgICAgICAjIFdlIG5lZWQgdG8gcmUtcmFpc2UgdGhl
IGV4Y2VwdGlvbiBoZXJlIHRvIGhhdmUgdGhlCiAgICAgICAgICAgICAgICAgIyBzdHlsZS1xdWV1
ZSBkbyB0aGUgcmlnaHQgdGhpbmcuCi0gICAgICAgICAgICAgICAgcmFpc2UgZQorICAgICAgICAg
ICAgICAgIHJhaXNlCiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fdG9vbC51c2VyLmNvbmZpcm0o
IkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjb250aW51ZT8iKToKICAgICAgICAgICAgICAgICBl
eGl0KDEpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3Rl
cHMvY2hlY2tzdHlsZV91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dG9vbC9zdGVwcy9jaGVja3N0eWxlX3VuaXR0ZXN0LnB5CmluZGV4IGEyM2VhMWIzYzVkNDZmMmVh
M2IzOGU0NjJmM2I5MWM5NjUyYjM4ZDEuLjZiMmNkNjU4NGE1MTBlYTIwOTAzODVkMmExMmRiYTY5
ODllMjk2MzIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9z
dGVwcy9jaGVja3N0eWxlX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdG9vbC9zdGVwcy9jaGVja3N0eWxlX3VuaXR0ZXN0LnB5CkBAIC0yOSwxOCArMjksMTYg
QEAKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0
aXZlIGltcG9ydCBTY3JpcHRFcnJvcgorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1
dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5t
b2NrIGltcG9ydCBNb2NrCiBmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tU
b29sCiBmcm9tIHdlYmtpdHB5LnRvb2wuc3RlcHMuY2hlY2tzdHlsZSBpbXBvcnQgQ2hlY2tTdHls
ZQogCiAKIGNsYXNzIENoZWNrU3R5bGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYg
dGVzdF9zaG91bGRfc3F1YXNoX2Vycm9yKHNlbGYpOgotICAgICAgICAiIiJzaG91bGRfc3F1YXNo
IGNhbiB0aHJvdyBhbiBlcnJvci4gVGhhdCBlcnJvciBzaG91bGQgbm90IGJlIGVhdGVuIGJ5IENo
ZWNrU3R5bGUuIiIiCi0gICAgICAgIGRlZiBzaG91bGRfc3F1YXNoKHNxdWFzaCk6Ci0gICAgICAg
ICAgICByYWlzZSBTY3JpcHRFcnJvcihtZXNzYWdlPSJEdW1teSBlcnJvciIpCi0KLSAgICAgICAg
dG9vbCA9IE1vY2tUb29sKCkKLSAgICAgICAgdG9vbC5fc2NtLnNob3VsZF9zcXVhc2ggPSBzaG91
bGRfc3F1YXNoCi0gICAgICAgIHN0ZXAgPSBDaGVja1N0eWxlKHRvb2wsIE1vY2soKSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMoU2NyaXB0RXJyb3IsIHN0ZXAucnVuLCBbXSkKKyAgICBkZWYg
dGVzdF91c2Vfc3RhdGVfZGlmZihzZWxmKToKKyAgICAgICAgIiIiQ2hlY2tTdHlsZSBzaG91bGQg
dXNlIHRoZSBjYWNoZWQgZGlmZiBvbiBzdGF0ZSBpZiBhdmFpbGFibGUuIiIiCisgICAgICAgIGNh
cHR1cmUgPSBPdXRwdXRDYXB0dXJlKCkKKyAgICAgICAgc3RlcCA9IENoZWNrU3R5bGUoTW9ja1Rv
b2woKSwgTW9jaygpKQorICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiUnVubmluZyBjaGVjay13
ZWJraXQtc3R5bGVcbiIKKyAgICAgICAgY2FwdHVyZS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBzdGVw
LnJ1biwgW3siZGlmZiI6ICIifV0sIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIpCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvcHJlcGFy
ZWNoYW5nZWxvZy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9w
cmVwYXJlY2hhbmdlbG9nLnB5CmluZGV4IDNhNWMwMTNhMDUzYjhjODRiOTcyMzJjNTAxMTc5ZmNk
NTNjZWEyNTQuLjc0ZDZkOTUwOGYyMGZmMDcxNjhiMjdiMWRhNWIzYjIwNGY5NDYwZTYgMTAwNjQ0
Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9wcmVwYXJlY2hh
bmdlbG9nLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9w
cmVwYXJlY2hhbmdlbG9nLnB5CkBAIC00OSw4ICs0OSw5IEBAIGNsYXNzIFByZXBhcmVDaGFuZ2VM
b2coQWJzdHJhY3RTdGVwKToKICAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKICAgICAgICAgaWYg
c2VsZi5jYWNoZWRfbG9va3VwKHN0YXRlLCAiY2hhbmdlbG9ncyIpOgogICAgICAgICAgICAgcmV0
dXJuCisgICAgICAgICMgRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBjaGRpciB0byB0aGUgcm9vdCBk
aXJlY3RvcnkuCiAgICAgICAgIG9zLmNoZGlyKHNlbGYuX3Rvb2wuc2NtKCkuY2hlY2tvdXRfcm9v
dCkKLSAgICAgICAgYXJncyA9IFtzZWxmLnBvcnQoKS5zY3JpcHRfcGF0aCgicHJlcGFyZS1DaGFu
Z2VMb2ciKV0KKyAgICAgICAgYXJncyA9IFtzZWxmLl90b29sLnNjbSgpLnNjcmlwdF9wYXRoKCJw
cmVwYXJlLUNoYW5nZUxvZyIpXQogICAgICAgICBpZiBzdGF0ZVsiYnVnX2lkIl06CiAgICAgICAg
ICAgICBhcmdzLmFwcGVuZCgiLS1idWc9JXMiICUgc3RhdGVbImJ1Z19pZCJdKQogICAgICAgICBp
ZiBzZWxmLl9vcHRpb25zLmVtYWlsOgo=
</data>
<flag name="review"
          id="41335"
          type_id="1"
          status="-"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="41336"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>