<?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>49033</bug_id>
          
          <creation_ts>2010-11-04 15:39:14 -0700</creation_ts>
          <short_desc>webkitpy.common.system.executive_unittest fails when run with Win32 Python</short_desc>
          <delta_ts>2010-11-08 11:16:28 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>48728</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Roben (:aroben)">aroben</reporter>
          <assigned_to name="Adam Roben (:aroben)">aroben</assigned_to>
          <cc>abarth</cc>
    
    <cc>aroben</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>dbates</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>304934</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-11-04 15:39:14 -0700</bug_when>
    <thetext>webkitpy.common.system.executive_unittest fails when run with Win32 Python</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304937</commentid>
    <comment_count>1</comment_count>
      <attachid>72991</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-11-04 15:41:27 -0700</bug_when>
    <thetext>Created attachment 72991
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304947</commentid>
    <comment_count>2</comment_count>
      <attachid>72991</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-11-04 15:50:56 -0700</bug_when>
    <thetext>Comment on attachment 72991
Patch

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

Minor concern about possibly masking a failure with the roundtripping, but otherwise this looks fine.

&gt; WebKitTools/ChangeLog:37
&gt; +        be replaced by question marks; the round-tripping allows us to expect

It sounds like this is a failure then?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304951</commentid>
    <comment_count>3</comment_count>
      <attachid>72991</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-04 15:54:54 -0700</bug_when>
    <thetext>Comment on attachment 72991
Patch

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

In general looks great.  You should consider making your statics non-static and possibly using child_process_encoding from within the unittests themselves.

&gt; WebKitTools/Scripts/webkitpy/common/system/executive.py:242
&gt; +    @staticmethod
&gt; +    def child_process_encoding():

I&apos;m not sure @staticmethod buys us much here.  It just makes methods which depend on these harder to mock/test.

&gt; WebKitTools/Scripts/webkitpy/common/system/executive.py:262
&gt; +        # Win32 Python 2.x uses CreateProcessA rather than CreateProcessW
&gt; +        # to launch subprocesses, so we have to encode arguments using the
&gt; +        # current code page.
&gt; +        return sys.platform in (&apos;cygwin&apos;, &apos;win32&apos;)

Do we want to add a python version check here?  We will eventually move to 3, and even just asserting in that case might be helpful.

&gt; WebKitTools/Scripts/webkitpy/common/system/executive.py:264
&gt; +    @classmethod

Likewise here for classmethod.  If you&apos;re going to keep this a class method, you should use cls instead of &quot;self&quot; for the arg name.

&gt; WebKitTools/Scripts/webkitpy/common/system/executive.py:286
&gt;          if isinstance(input, unicode):
&gt; -            input = input.encode(&quot;utf-8&quot;)
&gt; +            input = input.encode(self.child_process_encoding())

I wonder why this unconditionally encodes and run_command_with_teed_output (which is old and mostly deprecated) does not?

&gt; WebKitTools/Scripts/webkitpy/common/system/executive.py:314
&gt; +        args = map(self.encode_input_if_needed, args)

A little odd that this is named encode_input and its being passed &quot;args&quot;, but it works.

&gt; WebKitTools/Scripts/webkitpy/common/system/executive_unittest.py:136
&gt; +        if sys.platform == &quot;cygwin&quot;:
&gt; +            expected_exit_code = 0  # os.kill results in exit(0) for this process.
&gt; +        elif sys.platform == &quot;win32&quot;:
&gt; +            expected_exit_code = 1
&gt;          else:
&gt;              expected_exit_code = -signal.SIGTERM

Hmmm... Seems we might want to use a shared method for this.  expected_child_exit_code_for_kill() or similar.  I feel like I had something like that in an earlier version of the patch where I added this all... and then dropped it.  Now I can&apos;t remember why. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304959</commentid>
    <comment_count>4</comment_count>
      <attachid>72991</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-11-04 16:01:33 -0700</bug_when>
    <thetext>Comment on attachment 72991
Patch

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

&gt;&gt; WebKitTools/ChangeLog:37
&gt;&gt; +        be replaced by question marks; the round-tripping allows us to expect
&gt; 
&gt; It sounds like this is a failure then?

Yes, but it&apos;s the best we can do given the limitations of Python 2.x on Windows.

&gt;&gt; WebKitTools/Scripts/webkitpy/common/system/executive.py:262
&gt;&gt; +        return sys.platform in (&apos;cygwin&apos;, &apos;win32&apos;)
&gt; 
&gt; Do we want to add a python version check here?  We will eventually move to 3, and even just asserting in that case might be helpful.

Sure, I&apos;ll add a check.

&gt;&gt; WebKitTools/Scripts/webkitpy/common/system/executive.py:286
&gt;&gt; +            input = input.encode(self.child_process_encoding())
&gt; 
&gt; I wonder why this unconditionally encodes and run_command_with_teed_output (which is old and mostly deprecated) does not?

This unconditionally encoding the string fed to stdin, while the code in _run_command_with_teed_output was conditionally encoding the arguments passed on the command-line. Clearly I need to rename should_encode_child_process_input/encode_input_if_needed to use &quot;arguments&quot; instead of &quot;input&quot;.

&gt;&gt; WebKitTools/Scripts/webkitpy/common/system/executive.py:314
&gt;&gt; +        args = map(self.encode_input_if_needed, args)
&gt; 
&gt; A little odd that this is named encode_input and its being passed &quot;args&quot;, but it works.

Yeah, I&apos;ll change it to &quot;arguments&quot;.

&gt;&gt; WebKitTools/Scripts/webkitpy/common/system/executive_unittest.py:136
&gt;&gt;              expected_exit_code = -signal.SIGTERM
&gt; 
&gt; Hmmm... Seems we might want to use a shared method for this.  expected_child_exit_code_for_kill() or similar.  I feel like I had something like that in an earlier version of the patch where I added this all... and then dropped it.  Now I can&apos;t remember why. :)

Unfortunately we&apos;re getting different exit codes when killing a single process (we get -SIGTERM) vs. killing all processes (we get 0) with Cygwin Python. But I guess we could have two different methods, one for kill and one for kill_all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304962</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-11-04 16:02:37 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 72991 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=72991&amp;action=review
&gt; 
&gt; In general looks great.  You should consider making your statics non-static and possibly using child_process_encoding from within the unittests themselves.

I thought about using child_process_encoding but was worried that it made the test weaker, as if someone introduces a bug in that function then the tests will &quot;expect&quot; that bug. But by not using child_process_encoding I&apos;ve made the test more fragile. I&apos;m not sure what the best option is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304966</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-04 16:05:51 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 72991 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=72991&amp;action=review
&gt; &gt; 
&gt; &gt; In general looks great.  You should consider making your statics non-static and possibly using child_process_encoding from within the unittests themselves.
&gt; 
&gt; I thought about using child_process_encoding but was worried that it made the test weaker, as if someone introduces a bug in that function then the tests will &quot;expect&quot; that bug. But by not using child_process_encoding I&apos;ve made the test more fragile. I&apos;m not sure what the best option is.

I think this is what killed my original use of a method for the various exit codes.  IIRC the argument of the reviewer at the time was that my method made my unit testing weaker.

I&apos;m OK with either approach.  I still think we should fight the static cling by removing the @static methods :)  They rarely buy you anything besides untestability in python.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304973</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-11-04 16:09:22 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; I still think we should fight the static cling by removing the @static methods :)  They rarely buy you anything besides untestability in python.

Sounds fine to me. I&apos;ll make them non-static.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304975</commentid>
    <comment_count>8</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-11-04 16:10:18 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 72991 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=72991&amp;action=review
&gt; 
&gt; &gt;&gt; WebKitTools/ChangeLog:37
&gt; &gt;&gt; +        be replaced by question marks; the round-tripping allows us to expect
&gt; &gt; 
&gt; &gt; It sounds like this is a failure then?
&gt; 
&gt; Yes, but it&apos;s the best we can do given the limitations of Python 2.x on Windows.

Would it be possible to use the value of &quot;unicode_tor&quot; on platforms other than Windows rather than roundtripped_tor (since that seems the most trustworthy result and less likely to hide regressions)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305236</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-11-05 05:27:33 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 72991 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=72991&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; WebKitTools/ChangeLog:37
&gt; &gt; &gt;&gt; +        be replaced by question marks; the round-tripping allows us to expect
&gt; &gt; &gt; 
&gt; &gt; &gt; It sounds like this is a failure then?
&gt; &gt; 
&gt; &gt; Yes, but it&apos;s the best we can do given the limitations of Python 2.x on Windows.
&gt; 
&gt; Would it be possible to use the value of &quot;unicode_tor&quot; on platforms other than Windows rather than roundtripped_tor (since that seems the most trustworthy result and less likely to hide regressions)?

Yes, I&apos;ll do that. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305310</commentid>
    <comment_count>10</comment_count>
      <attachid>73070</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-11-05 09:16:40 -0700</bug_when>
    <thetext>Created attachment 73070
Addresses comments from Dave and Eric</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305442</commentid>
    <comment_count>11</comment_count>
      <attachid>73070</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-11-05 12:03:31 -0700</bug_when>
    <thetext>Comment on attachment 73070
Addresses comments from Dave and Eric

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

Seems fine to me. (Well, one minor comment.)  It looks like Eric&apos;s comments are all addressed as well except for &quot;Seems we might want to use a shared method for this...&quot; which you replied to, but I&apos;d rather let Eric give it one last look in case he had any issues with the response.

&gt; WebKitTools/Scripts/webkitpy/common/system/executive.py:324
&gt; +        if sys.platform == &apos;win32&apos;:

version check here too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305584</commentid>
    <comment_count>12</comment_count>
      <attachid>73070</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-05 15:33:42 -0700</bug_when>
    <thetext>Comment on attachment 73070
Addresses comments from Dave and Eric

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

In general this looks fine.  You probalby want a version check where dave noted.

&gt; WebKitTools/Scripts/webkitpy/common/system/executive.py:341
&gt; +        if sys.platform == &apos;win32&apos; and versioning.compare_version(sys, &apos;3.0&apos;)[0] &lt; 0:

Seems like Chris&apos;s versioning module is a bit hard to use.  The whole neeing to grab [0]  and compare it &lt; 0, seems really awkward.

We should probably make his module better, eventually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305590</commentid>
    <comment_count>13</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-05 15:41:03 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 73070 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=73070&amp;action=review
&gt; 
&gt; In general this looks fine.  You probalby want a version check where dave noted.
&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/executive.py:341
&gt; &gt; +        if sys.platform == &apos;win32&apos; and versioning.compare_version(sys, &apos;3.0&apos;)[0] &lt; 0:
&gt; 
&gt; Seems like Chris&apos;s versioning module is a bit hard to use.  The whole neeing to grab [0]  and compare it &lt; 0, seems really awkward.
&gt; 
&gt; We should probably make his module better, eventually.

I was thinking this as well. It&apos;s useful in some cases, but a wrapper that just did a cmp() would be nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306229</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-11-08 11:16:28 -0800</bug_when>
    <thetext>Committed r71547: &lt;http://trac.webkit.org/changeset/71547&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72991</attachid>
            <date>2010-11-04 15:41:27 -0700</date>
            <delta_ts>2010-11-05 09:16:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49033-20101104184126.patch</filename>
            <type>text/plain</type>
            <size>12538</size>
            <attacher name="Adam Roben (:aroben)">aroben</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAxZjFjYjVjYzViZjc5ZTg2OGFiNDk3YWIyNjhiMzc4OTY2NWE0NzY0Li5iM2RiYjYz
MmVmZmRlNGM0NDY0MzUzZWM4OGIxZmJmY2Y1YjcxNzQ3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAK
KzIwMTAtMTEtMDQgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgorCisgICAgICAgIE1h
a2Ugd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmVfdW5pdHRlc3QgcGFzcyB3aGVuIHJ1
bm5pbmcgdW5kZXIKKyAgICAgICAgV2luMzIgUHl0aG9uCisKKyAgICAgICAgRml4ZXMgPGh0dHA6
Ly93ZWJraXQub3JnL2IvNDkwMzM+LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2
ZS5weToKKyAgICAgICAgKEV4ZWN1dGl2ZS5fcnVuX2NvbW1hbmRfd2l0aF90ZWVkX291dHB1dCk6
IFBhc3MgdGhlIGFyZ3VtZW50cyB0aHJvdWdoCisgICAgICAgIGVuY29kZV9pbnB1dF9pZl9uZWVk
ZWQgcmF0aGVyIHRoYW4gdXNpbmcgQ3lnd2luLXNwZWNpZmljIGNvZGUgaGVyZS4KKyAgICAgICAg
KEV4ZWN1dGl2ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwpOiBVc2UgY2hpbGRfcHJvY2Vzc19lbmNv
ZGluZyB0byBkZWNvZGUKKyAgICAgICAgdGhlIG91dHB1dC4KKyAgICAgICAgKEV4ZWN1dGl2ZS5j
aGlsZF9wcm9jZXNzX2VuY29kaW5nKTogUmV0dXJucyB0aGUgZW5jb2RpbmcgdGhhdCBzaG91bGQg
YmUKKyAgICAgICAgdXNlZCB3aGVuIGNvbW11bmljYXRpbmcgd2l0aCBjaGlsZCBwcm9jZXNzZXMu
IE9uIFdpbmRvd3Mgd2UgdXNlIG1iY3MsCisgICAgICAgIHdoaWNoIG1hcHMgdG8gdGhlIGN1cnJl
bnQgY29kZSBwYWdlLiBPbiBhbGwgb3RoZXIgcGxhdGZvcm1zIHdlIHVzZQorICAgICAgICBVVEYt
OC4KKyAgICAgICAgKEV4ZWN1dGl2ZS5zaG91bGRfZW5jb2RlX2NoaWxkX3Byb2Nlc3NfaW5wdXQp
OiBSZXR1cm5zIFRydWUgaWYKKyAgICAgICAgYXJndW1lbnRzIHRvIGNoaWxkIHByb2Nlc3NlcyBu
ZWVkIHRvIGJlIGVuY29kZWQuIFRoaXMgaXMgY3VycmVudGx5IG9ubHkKKyAgICAgICAgbmVlZGVk
IG9uIEN5Z3dpbiBhbmQgV2luZG93cy4KKyAgICAgICAgKEV4ZWN1dGl2ZS5lbmNvZGVfaW5wdXRf
aWZfbmVlZGVkKTogRW5jb2RlIHRoZSBpbnB1dCB1c2luZworICAgICAgICBjaGlsZF9wcm9jZXNz
X2VuY29kaW5nIGlmIHdlIG5lZWQgdG8gZW5jb2RlIGNoaWxkIHByb2Nlc3MgaW5wdXQgb24gdGhp
cworICAgICAgICBwbGF0Zm9ybS4KKyAgICAgICAgKEV4ZWN1dGl2ZS5ydW5fY29tbWFuZCk6IFVz
ZSBlbmNvZGVfaW5wdXRfaWZfbmVlZGVkIHRvIGVuY29kZSB0aGUKKyAgICAgICAgYXJndW1lbnRz
IGFuZCBjaGlsZF9wcm9jZXNzX2VuY29kaW5nIHRvIGRlY29kZSB0aGUgb3V0cHV0LgorCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV91bml0dGVzdC5w
eToKKyAgICAgICAgKG5ldmVyX2VuZGluZ19jb21tYW5kKTogQWRkZWQuIFJldHVybnMgYXJndW1l
bnRzIHRvIHJ1biBhIGNvbW1hbmQgdGhhdAorICAgICAgICB3aWxsIG5vdCBxdWl0IHVudGlsIHdl
IGtpbGwgaXQuIE9uIFdpbmRvd3Mgd2UgdXNlIHdtaWMsIG9uIG90aGVyCisgICAgICAgIHBsYXRm
b3JtcyB3ZSB1c2UgeWVzLgorICAgICAgICAoRXhlY3V0aXZlVGVzdC50ZXN0X3J1bl9jb21tYW5k
X3dpdGhfdW5pY29kZSk6IENoYW5nZWQgdG8gZXhwZWN0IHRoZQorICAgICAgICBtYmNzIGVuY29k
aW5nIHRvIGJlIHVzZWQgb24gV2luZG93cywgYW5kIGZvciBvdXRwdXQgZnJvbSB0aGUgY2hpbGQK
KyAgICAgICAgcHJvY2Vzc2VzIHRvIGhhdmUgYmVlbiByb3VuZHRyaXBwZWQgdGhyb3VnaCBlbmNv
ZGUvZGVjb2RlLiBXaGVuIFVURi04CisgICAgICAgIGlzIHRoZSBlbmNvZGluZyB0aGUgcm91bmR0
cmlwcGluZyBpcyB1bmRldGVjdGFibGUsIGJ1dCB3aXRoIG1iY3MgaXQncworICAgICAgICBwb3Nz
aWJsZSB0aGF0IHNvbWUgY2hhcmFjdGVycyB3aWxsIG5vdCBiZSBhYmxlIHRvIGJlIGNvbnZlcnRl
ZCBhbmQgd2lsbAorICAgICAgICBiZSByZXBsYWNlZCBieSBxdWVzdGlvbiBtYXJrczsgdGhlIHJv
dW5kLXRyaXBwaW5nIGFsbG93cyB1cyB0byBleHBlY3QKKyAgICAgICAgdGhpcyByZXN1bHQuCisK
KyAgICAgICAgKEV4ZWN1dGl2ZVRlc3QudGVzdF9raWxsX3Byb2Nlc3MpOgorICAgICAgICAoRXhl
Y3V0aXZlVGVzdC50ZXN0X2tpbGxfYWxsKToKKyAgICAgICAgVXNlIG5ldmVyX2VuZGluZ19jb21t
YW5kIGluc3RlYWQgb2YgaW52b2tpbmcgInllcyIgZGlyZWN0bHkuIEV4cGVjdCBhbgorICAgICAg
ICBleGl0IGNvZGUgb2YgMSB3aGVuIHVzaW5nIFdpbjMyIFB5dGhvbiwgYXMgdGhhdCdzIHdoYXQg
c2VlbXMgdG8gaGFwcGVuLgorCiAyMDEwLTExLTAyICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZWR1Y2Ugb3VyIGRlcGVuZGVuY2Ugb24gY29yZXV0aWxzIHdoZW4g
cnVubmluZyBQeXRob24gdGVzdHMKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmUucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5CmluZGV4IDIxNmNmNThhNzk0NGNmNTE0
YjRmNWE4NTBmOTNjZDhkZTJhOGFiYWMuLjY1NzEwM2ZhMWYyNjZmZjQ0ZGExMGZhYmVkMjg4MDhl
MTY1Y2Y5M2IgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9leGVjdXRpdmUucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL2V4ZWN1dGl2ZS5weQpAQCAtMTAzLDEzICsxMDMsOCBAQCBjbGFzcyBFeGVj
dXRpdmUob2JqZWN0KToKIAogICAgIGRlZiBfcnVuX2NvbW1hbmRfd2l0aF90ZWVkX291dHB1dChz
ZWxmLCBhcmdzLCB0ZWVkX291dHB1dCk6CiAgICAgICAgIGFyZ3MgPSBtYXAodW5pY29kZSwgYXJn
cykgICMgUG9wZW4gd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYXJncyBhcmUgbm9uLXN0cmlu
Z3MgKGxpa2UgaW50KCkpCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJzoKLSAg
ICAgICAgICAgICMgQ3lnd2luJ3MgUHl0aG9uJ3Mgb3MuZXhlY3YgZG9lc24ndCBzdXBwb3J0IHVu
aWNvZGUgY29tbWFuZAotICAgICAgICAgICAgIyBhcmd1bWVudHMsIGFuZCBuZWl0aGVyIGRvZXMg
Q3lnd2luJ3MgZXhlY3YgaXRzZWxmLgotICAgICAgICAgICAgIyBGSVhNRTogVXNpbmcgVVRGLTgg
aGVyZSB3aWxsIGNvbmZ1c2UgV2luZG93cy1uYXRpdmUgY29tbWFuZHMKLSAgICAgICAgICAgICMg
d2hpY2ggd2lsbCBleHBlY3QgYXJndW1lbnRzIHRvIGJlIGVuY29kZWQgdXNpbmcgdGhlIGN1cnJl
bnQgY29kZQotICAgICAgICAgICAgIyBwYWdlLgotICAgICAgICAgICAgYXJncyA9IFthcmcuZW5j
b2RlKCd1dGYtOCcpIGZvciBhcmcgaW4gYXJnc10KKyAgICAgICAgYXJncyA9IG1hcChzZWxmLmVu
Y29kZV9pbnB1dF9pZl9uZWVkZWQsIGFyZ3MpCisKICAgICAgICAgY2hpbGRfcHJvY2VzcyA9IHN1
YnByb2Nlc3MuUG9wZW4oYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULApAQCAtMTQ4LDkgKzE0Myw4
IEBAIGNsYXNzIEV4ZWN1dGl2ZShvYmplY3QpOgogICAgICAgICBjaGlsZF9vdXRwdXQgPSBjaGls
ZF9vdXRfZmlsZS5nZXR2YWx1ZSgpCiAgICAgICAgIGNoaWxkX291dF9maWxlLmNsb3NlKCkKIAot
ICAgICAgICAjIFdlIGFzc3VtZSB0aGUgY2hpbGQgcHJvY2VzcyBvdXRwdXQgdXRmLTgKICAgICAg
ICAgaWYgZGVjb2RlX291dHB1dDoKLSAgICAgICAgICAgIGNoaWxkX291dHB1dCA9IGNoaWxkX291
dHB1dC5kZWNvZGUoInV0Zi04IikKKyAgICAgICAgICAgIGNoaWxkX291dHB1dCA9IGNoaWxkX291
dHB1dC5kZWNvZGUoc2VsZi5jaGlsZF9wcm9jZXNzX2VuY29kaW5nKCkpCiAKICAgICAgICAgaWYg
ZXhpdF9jb2RlOgogICAgICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3Ioc2NyaXB0X2FyZ3M9YXJn
cywKQEAgLTI0NCw2ICsyMzgsMzUgQEAgY2xhc3MgRXhlY3V0aXZlKG9iamVjdCk6CiAgICAgZGVm
IGlnbm9yZV9lcnJvcihlcnJvcik6CiAgICAgICAgIHBhc3MKIAorICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgY2hpbGRfcHJvY2Vzc19lbmNvZGluZygpOgorICAgICAgICAjIFdpbjMyIFB5dGhv
biAyLnggdXNlcyBDcmVhdGVQcm9jZXNzQSByYXRoZXIgdGhhbiBDcmVhdGVQcm9jZXNzVworICAg
ICAgICAjIHRvIGxhdW5jaCBzdWJwcm9jZXNzZXMsIHNvIHdlIGhhdmUgdG8gZW5jb2RlIGFyZ3Vt
ZW50cyB1c2luZyB0aGUKKyAgICAgICAgIyBjdXJyZW50IGNvZGUgcGFnZS4KKyAgICAgICAgaWYg
c3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICByZXR1cm4gJ21iY3MnCisgICAg
ICAgICMgQWxsIG90aGVyIHBsYXRmb3JtcyB1c2UgVVRGLTguCisgICAgICAgICMgRklYTUU6IFVz
aW5nIFVURi04IG9uIEN5Z3dpbiB3aWxsIGNvbmZ1c2UgV2luZG93cy1uYXRpdmUgY29tbWFuZHMK
KyAgICAgICAgIyB3aGljaCB3aWxsIGV4cGVjdCBhcmd1bWVudHMgdG8gYmUgZW5jb2RlZCB1c2lu
ZyB0aGUgY3VycmVudCBjb2RlCisgICAgICAgICMgcGFnZS4KKyAgICAgICAgcmV0dXJuICd1dGYt
OCcKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc2hvdWxkX2VuY29kZV9jaGlsZF9wcm9j
ZXNzX2lucHV0KCk6CisgICAgICAgICMgQ3lnd2luJ3MgUHl0aG9uJ3Mgb3MuZXhlY3YgZG9lc24n
dCBzdXBwb3J0IHVuaWNvZGUgY29tbWFuZAorICAgICAgICAjIGFyZ3VtZW50cywgYW5kIG5laXRo
ZXIgZG9lcyBDeWd3aW4ncyBleGVjdiBpdHNlbGYuCisgICAgICAgICMKKyAgICAgICAgIyBXaW4z
MiBQeXRob24gMi54IHVzZXMgQ3JlYXRlUHJvY2Vzc0EgcmF0aGVyIHRoYW4gQ3JlYXRlUHJvY2Vz
c1cKKyAgICAgICAgIyB0byBsYXVuY2ggc3VicHJvY2Vzc2VzLCBzbyB3ZSBoYXZlIHRvIGVuY29k
ZSBhcmd1bWVudHMgdXNpbmcgdGhlCisgICAgICAgICMgY3VycmVudCBjb2RlIHBhZ2UuCisgICAg
ICAgIHJldHVybiBzeXMucGxhdGZvcm0gaW4gKCdjeWd3aW4nLCAnd2luMzInKQorCisgICAgQGNs
YXNzbWV0aG9kCisgICAgZGVmIGVuY29kZV9pbnB1dF9pZl9uZWVkZWQoc2VsZiwgaW5wdXQpOgor
ICAgICAgICBpZiBub3Qgc2VsZi5zaG91bGRfZW5jb2RlX2NoaWxkX3Byb2Nlc3NfaW5wdXQoKToK
KyAgICAgICAgICAgIHJldHVybiBpbnB1dAorICAgICAgICByZXR1cm4gaW5wdXQuZW5jb2RlKHNl
bGYuY2hpbGRfcHJvY2Vzc19lbmNvZGluZygpKQorCiAgICAgZGVmIF9jb21wdXRlX3N0ZGluKHNl
bGYsIGlucHV0KToKICAgICAgICAgIiIiUmV0dXJucyAoc3RkaW4sIHN0cmluZ190b19jb21tdW5p
Y2F0ZSkiIiIKICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGJlIHJldHVybmluZyAvZGV2L251
bGwgZm9yIHN0ZGluCkBAIC0yNjAsNyArMjgzLDcgQEAgY2xhc3MgRXhlY3V0aXZlKG9iamVjdCk6
CiAgICAgICAgICMgZm9yIGFuIGV4YW1wbGUgb2YgYSByZWdyZXNpb24gY2F1c2VkIGJ5IHBhc3Np
bmcgYSB1bmljb2RlIHN0cmluZyBkaXJlY3RseS4KICAgICAgICAgIyBGSVhNRTogV2UgbWF5IG5l
ZWQgdG8gZW5jb2RlIGRpZmZlcmVudGx5IG9uIGRpZmZlcmVudCBwbGF0Zm9ybXMuCiAgICAgICAg
IGlmIGlzaW5zdGFuY2UoaW5wdXQsIHVuaWNvZGUpOgotICAgICAgICAgICAgaW5wdXQgPSBpbnB1
dC5lbmNvZGUoInV0Zi04IikKKyAgICAgICAgICAgIGlucHV0ID0gaW5wdXQuZW5jb2RlKHNlbGYu
Y2hpbGRfcHJvY2Vzc19lbmNvZGluZygpKQogICAgICAgICByZXR1cm4gKHN1YnByb2Nlc3MuUElQ
RSwgaW5wdXQpCiAKICAgICBkZWYgX2NvbW1hbmRfZm9yX3ByaW50aW5nKHNlbGYsIGFyZ3MpOgpA
QCAtMjg4LDEzICszMTEsOCBAQCBjbGFzcyBFeGVjdXRpdmUob2JqZWN0KToKICAgICAgICAgYXNz
ZXJ0KGlzaW5zdGFuY2UoYXJncywgbGlzdCkgb3IgaXNpbnN0YW5jZShhcmdzLCB0dXBsZSkpCiAg
ICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogICAgICAgICBhcmdzID0gbWFwKHVuaWNv
ZGUsIGFyZ3MpICAjIFBvcGVuIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFyZ3MgYXJlIG5v
bi1zdHJpbmdzIChsaWtlIGludCgpKQotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2N5Z3dp
bic6Ci0gICAgICAgICAgICAjIEN5Z3dpbidzIFB5dGhvbidzIG9zLmV4ZWN2IGRvZXNuJ3Qgc3Vw
cG9ydCB1bmljb2RlIGNvbW1hbmQKLSAgICAgICAgICAgICMgYXJndW1lbnRzLCBhbmQgbmVpdGhl
ciBkb2VzIEN5Z3dpbidzIGV4ZWN2IGl0c2VsZi4KLSAgICAgICAgICAgICMgRklYTUU6IFVzaW5n
IFVURi04IGhlcmUgd2lsbCBjb25mdXNlIFdpbmRvd3MtbmF0aXZlIGNvbW1hbmRzCi0gICAgICAg
ICAgICAjIHdoaWNoIHdpbGwgZXhwZWN0IGFyZ3VtZW50cyB0byBiZSBlbmNvZGVkIHVzaW5nIHRo
ZSBjdXJyZW50IGNvZGUKLSAgICAgICAgICAgICMgcGFnZS4KLSAgICAgICAgICAgIGFyZ3MgPSBb
YXJnLmVuY29kZSgndXRmLTgnKSBmb3IgYXJnIGluIGFyZ3NdCisgICAgICAgIGFyZ3MgPSBtYXAo
c2VsZi5lbmNvZGVfaW5wdXRfaWZfbmVlZGVkLCBhcmdzKQorCiAgICAgICAgIHN0ZGluLCBzdHJp
bmdfdG9fY29tbXVuaWNhdGUgPSBzZWxmLl9jb21wdXRlX3N0ZGluKGlucHV0KQogICAgICAgICBz
dGRlcnIgPSBzdWJwcm9jZXNzLlNURE9VVCBpZiByZXR1cm5fc3RkZXJyIGVsc2UgTm9uZQogCkBA
IC0zMDUsOSArMzIzLDExIEBAIGNsYXNzIEV4ZWN1dGl2ZShvYmplY3QpOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjd2Q9Y3dkLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjbG9zZV9mZHM9c2VsZi5fc2hvdWxkX2Nsb3NlX2ZkcygpKQogICAgICAgICBv
dXRwdXQgPSBwcm9jZXNzLmNvbW11bmljYXRlKHN0cmluZ190b19jb21tdW5pY2F0ZSlbMF0KKwog
ICAgICAgICAjIHJ1bl9jb21tYW5kIGF1dG9tYXRpY2FsbHkgZGVjb2RlcyB0byB1bmljb2RlKCkg
dW5sZXNzIGV4cGxpY2l0bHkgdG9sZCBub3QgdG8uCiAgICAgICAgIGlmIGRlY29kZV9vdXRwdXQ6
Ci0gICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuZGVjb2RlKCJ1dGYtOCIpCisgICAgICAgICAg
ICBvdXRwdXQgPSBvdXRwdXQuZGVjb2RlKHNlbGYuY2hpbGRfcHJvY2Vzc19lbmNvZGluZygpKQor
CiAgICAgICAgICMgd2FpdCgpIGlzIG5vdCB0aHJlYWRzYWZlIGFuZCBjYW4gdGhyb3cgT1NFcnJv
ciBkdWUgdG86CiAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE3MzE3MTcK
ICAgICAgICAgZXhpdF9jb2RlID0gcHJvY2Vzcy53YWl0KCkKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfdW5pdHRlc3QucHkg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3Vu
aXR0ZXN0LnB5CmluZGV4IDYxMDZiZThlOThjNjA3YWE1ODdhMWM1MThkYjY0MjFhYmNmOWUxYzgu
Ljc3MWE4YWM3N2UyZjFhNDIyMjVkMDFkYTVhZDU3MGRiMWIxM2FjNjggMTAwNjQ0Ci0tLSBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfdW5pdHRl
c3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4
ZWN1dGl2ZV91bml0dGVzdC5weQpAQCAtMzYsNiArMzYsMTUgQEAgZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZlLCBydW5fY29tbWFuZCwgU2NyaXB0
RXJyb3IKIGZyb20gd2Via2l0cHkudGVzdCBpbXBvcnQgY2F0LCBlY2hvCiAKIAorZGVmIG5ldmVy
X2VuZGluZ19jb21tYW5kKCk6CisgICAgIiIiQXJndW1lbnRzIGZvciBhIGNvbW1hbmQgdGhhdCB3
aWxsIG5ldmVyIGVuZCAodXNlZnVsIGZvciB0ZXN0aW5nIHByb2Nlc3MKKyAgICBraWxsaW5nKS4g
SXQgc2hvdWxkIGJlIGEgcHJvY2VzcyB0aGF0IGlzIHVubGlrZWx5IHRvIGFscmVhZHkgYmUgcnVu
bmluZworICAgIGJlY2F1c2UgYWxsIGluc3RhbmNlcyB3aWxsIGJlIGtpbGxlZC4iIiIKKyAgICBp
ZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgcmV0dXJuIFsnd21pYyddCisgICAg
cmV0dXJuIFsneWVzJ10KKworCiBjbGFzcyBFeGVjdXRpdmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKIAogICAgIGRlZiB0ZXN0X3J1bl9jb21tYW5kX3dpdGhfYmFkX2NvbW1hbmQoc2VsZik6CkBA
IC01NCwzOSArNjMsNDQgQEAgY2xhc3MgRXhlY3V0aXZlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6
CiAgICAgICAgICIiIlZhbGlkYXRlIHRoYXQgaXQgaXMgc2FmZSB0byBwYXNzIHVuaWNvZGUoKSBv
YmplY3RzCiAgICAgICAgIHRvIEV4ZWN1dGl2ZS5ydW4qIG1ldGhvZHMsIGFuZCB0aGV5IHdpbGwg
cmV0dXJuIHVuaWNvZGUoKQogICAgICAgICBvYmplY3RzIGJ5IGRlZmF1bHQgdW5sZXNzIGRlY29k
ZV9vdXRwdXQ9RmFsc2UiIiIKLSAgICAgICAgZXhlY3V0aXZlID0gRXhlY3V0aXZlKCkKICAgICAg
ICAgdW5pY29kZV90b3IgPSB1IldlYktpdCBcdTI2NjEgVG9yIEFybmUgVmVzdGJcdTAwRjghIgot
ICAgICAgICB1dGY4X3RvciA9IHVuaWNvZGVfdG9yLmVuY29kZSgidXRmLTgiKQorICAgICAgICBp
ZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIGVuY29kaW5nID0gJ21iY3Mn
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbmNvZGluZyA9ICd1dGYtOCcKKyAgICAgICAg
ZW5jb2RlZF90b3IgPSB1bmljb2RlX3Rvci5lbmNvZGUoZW5jb2RpbmcpCisgICAgICAgIHJvdW5k
dHJpcHBlZF90b3IgPSBlbmNvZGVkX3Rvci5kZWNvZGUoZW5jb2RpbmcpCisKKyAgICAgICAgZXhl
Y3V0aXZlID0gRXhlY3V0aXZlKCkKIAogICAgICAgICBvdXRwdXQgPSBleGVjdXRpdmUucnVuX2Nv
bW1hbmQoY2F0LmNvbW1hbmRfYXJndW1lbnRzKCksIGlucHV0PXVuaWNvZGVfdG9yKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhvdXRwdXQsIHVuaWNvZGVfdG9yKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhvdXRwdXQsIHJvdW5kdHJpcHBlZF90b3IpCiAKICAgICAgICAgb3V0cHV0ID0g
ZXhlY3V0aXZlLnJ1bl9jb21tYW5kKGVjaG8uY29tbWFuZF9hcmd1bWVudHMoIi1uIiwgdW5pY29k
ZV90b3IpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvdXRwdXQsIHVuaWNvZGVfdG9yKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvdXRwdXQsIHJvdW5kdHJpcHBlZF90b3IpCiAKICAg
ICAgICAgb3V0cHV0ID0gZXhlY3V0aXZlLnJ1bl9jb21tYW5kKGVjaG8uY29tbWFuZF9hcmd1bWVu
dHMoIi1uIiwgdW5pY29kZV90b3IpLCBkZWNvZGVfb3V0cHV0PUZhbHNlKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhvdXRwdXQsIHV0ZjhfdG9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhvdXRwdXQsIGVuY29kZWRfdG9yKQogCiAgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgc3RyKCkg
aW5wdXQgYWxzbyB3b3Jrcy4KLSAgICAgICAgb3V0cHV0ID0gZXhlY3V0aXZlLnJ1bl9jb21tYW5k
KGNhdC5jb21tYW5kX2FyZ3VtZW50cygpLCBpbnB1dD11dGY4X3RvciwgZGVjb2RlX291dHB1dD1G
YWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3V0cHV0LCB1dGY4X3RvcikKKyAgICAg
ICAgb3V0cHV0ID0gZXhlY3V0aXZlLnJ1bl9jb21tYW5kKGNhdC5jb21tYW5kX2FyZ3VtZW50cygp
LCBpbnB1dD1lbmNvZGVkX3RvciwgZGVjb2RlX291dHB1dD1GYWxzZSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMob3V0cHV0LCBlbmNvZGVkX3RvcikKIAogICAgICAgICAjIEZJWE1FOiBXZSBz
aG91bGQgb25seSBoYXZlIG9uZSBydW4qIG1ldGhvZCB0byB0ZXN0CiAgICAgICAgIG91dHB1dCA9
IGV4ZWN1dGl2ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwoZWNoby5jb21tYW5kX2FyZ3VtZW50cygi
LW4iLCB1bmljb2RlX3RvciksIHF1aWV0PVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KG91dHB1dCwgdW5pY29kZV90b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG91dHB1dCwg
cm91bmR0cmlwcGVkX3RvcikKIAogICAgICAgICBvdXRwdXQgPSBleGVjdXRpdmUucnVuX2FuZF90
aHJvd19pZl9mYWlsKGVjaG8uY29tbWFuZF9hcmd1bWVudHMoIi1uIiwgdW5pY29kZV90b3IpLCBx
dWlldD1UcnVlLCBkZWNvZGVfb3V0cHV0PUZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhvdXRwdXQsIHV0ZjhfdG9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvdXRwdXQsIGVu
Y29kZWRfdG9yKQogCiAgICAgZGVmIHRlc3Rfa2lsbF9wcm9jZXNzKHNlbGYpOgogICAgICAgICBl
eGVjdXRpdmUgPSBFeGVjdXRpdmUoKQotICAgICAgICAjIFdlIHVzZSAieWVzIiBiZWNhdXNlIGl0
IGxvb3BzIGZvcmV2ZXIuCi0gICAgICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKFsieWVz
Il0sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNz
LlBvcGVuKG5ldmVyX2VuZGluZ19jb21tYW5kKCksIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvY2Vzcy5wb2xsKCksIE5vbmUpICAjIFByb2Nlc3Mg
aXMgcnVubmluZwogICAgICAgICBleGVjdXRpdmUua2lsbF9wcm9jZXNzKHByb2Nlc3MucGlkKQog
ICAgICAgICAjIE5vdGU6IENhbid0IHVzZSBhIHRlcm5hcnkgc2luY2Ugc2lnbmFsLlNJR0tJTEwg
aXMgdW5kZWZpbmVkIGZvciBzeXMucGxhdGZvcm0gPT0gIndpbjMyIgogICAgICAgICBpZiBzeXMu
cGxhdGZvcm0gPT0gIndpbjMyIjoKLSAgICAgICAgICAgIGV4cGVjdGVkX2V4aXRfY29kZSA9IDAg
ICMgdGFza2tpbGwuZXhlIHJlc3VsdHMgaW4gZXhpdCgwKQorICAgICAgICAgICAgZXhwZWN0ZWRf
ZXhpdF9jb2RlID0gMQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZXhwZWN0ZWRfZXhpdF9j
b2RlID0gLXNpZ25hbC5TSUdLSUxMCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvY2Vzcy53
YWl0KCksIGV4cGVjdGVkX2V4aXRfY29kZSkKQEAgLTExMCwxNCArMTI0LDE2IEBAIGNsYXNzIEV4
ZWN1dGl2ZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2tpbGxfYWxsKHNl
bGYpOgogICAgICAgICBleGVjdXRpdmUgPSBFeGVjdXRpdmUoKQogICAgICAgICAjIFdlIHVzZSAi
eWVzIiBiZWNhdXNlIGl0IGxvb3BzIGZvcmV2ZXIuCi0gICAgICAgIHByb2Nlc3MgPSBzdWJwcm9j
ZXNzLlBvcGVuKFsieWVzIl0sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHByb2Nl
c3MgPSBzdWJwcm9jZXNzLlBvcGVuKG5ldmVyX2VuZGluZ19jb21tYW5kKCksIHN0ZG91dD1zdWJw
cm9jZXNzLlBJUEUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvY2Vzcy5wb2xsKCksIE5v
bmUpICAjIFByb2Nlc3MgaXMgcnVubmluZwotICAgICAgICBleGVjdXRpdmUua2lsbF9hbGwoInll
cyIpCisgICAgICAgIGV4ZWN1dGl2ZS5raWxsX2FsbChuZXZlcl9lbmRpbmdfY29tbWFuZCgpWzBd
KQogICAgICAgICAjIE5vdGU6IENhbid0IHVzZSBhIHRlcm5hcnkgc2luY2Ugc2lnbmFsLlNJR1RF
Uk0gaXMgdW5kZWZpbmVkIGZvciBzeXMucGxhdGZvcm0gPT0gIndpbjMyIgotICAgICAgICBpZiBz
eXMucGxhdGZvcm0gaW4gKCJ3aW4zMiIsICJjeWd3aW4iKToKLSAgICAgICAgICAgIGV4cGVjdGVk
X2V4aXRfY29kZSA9IDAgICMgdGFza2tpbGwuZXhlIHJlc3VsdHMgaW4gZXhpdCgwKQorICAgICAg
ICBpZiBzeXMucGxhdGZvcm0gPT0gImN5Z3dpbiI6CisgICAgICAgICAgICBleHBlY3RlZF9leGl0
X2NvZGUgPSAwICAjIG9zLmtpbGwgcmVzdWx0cyBpbiBleGl0KDApIGZvciB0aGlzIHByb2Nlc3Mu
CisgICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICAgICBleHBl
Y3RlZF9leGl0X2NvZGUgPSAxCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBleHBlY3RlZF9l
eGl0X2NvZGUgPSAtc2lnbmFsLlNJR1RFUk0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9j
ZXNzLndhaXQoKSwgZXhwZWN0ZWRfZXhpdF9jb2RlKQogICAgICAgICAjIEtpbGxpbmcgYWdhaW4g
c2hvdWxkIGZhaWwgc2lsZW50bHkuCi0gICAgICAgIGV4ZWN1dGl2ZS5raWxsX2FsbCgieWVzIikK
KyAgICAgICAgZXhlY3V0aXZlLmtpbGxfYWxsKG5ldmVyX2VuZGluZ19jb21tYW5kKClbMF0pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73070</attachid>
            <date>2010-11-05 09:16:40 -0700</date>
            <delta_ts>2010-11-05 15:33:42 -0700</delta_ts>
            <desc>Addresses comments from Dave and Eric</desc>
            <filename>bug-49033-20101105121639.patch</filename>
            <type>text/plain</type>
            <size>13687</size>
            <attacher name="Adam Roben (:aroben)">aroben</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAxZjFjYjVjYzViZjc5ZTg2OGFiNDk3YWIyNjhiMzc4OTY2NWE0NzY0Li5hMzgxZWM0
OWFkN2MwYTRmM2M3ODBkOTgyYmIyY2Q0ZjAxNTRhYTlhIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAK
KzIwMTAtMTEtMDUgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgorCisgICAgICAgIE1h
a2Ugd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmVfdW5pdHRlc3QgcGFzcyB3aGVuIHJ1
bm5pbmcgdW5kZXIKKyAgICAgICAgV2luMzIgUHl0aG9uCisKKyAgICAgICAgRml4ZXMgPGh0dHA6
Ly93ZWJraXQub3JnL2IvNDkwMzM+LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2
ZS5weToKKyAgICAgICAgKEV4ZWN1dGl2ZS5fcnVuX2NvbW1hbmRfd2l0aF90ZWVkX291dHB1dCk6
IFBhc3MgdGhlIGFyZ3VtZW50cyB0aHJvdWdoCisgICAgICAgIGVuY29kZV9hcmd1bWVudF9pZl9u
ZWVkZWQgcmF0aGVyIHRoYW4gdXNpbmcgQ3lnd2luLXNwZWNpZmljIGNvZGUgaGVyZS4KKyAgICAg
ICAgKEV4ZWN1dGl2ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwpOiBVc2UgY2hpbGRfcHJvY2Vzc19l
bmNvZGluZyB0byBkZWNvZGUKKyAgICAgICAgdGhlIG91dHB1dC4KKyAgICAgICAgKEV4ZWN1dGl2
ZS5ydW5fY29tbWFuZCk6IFVzZSBlbmNvZGVfYXJndW1lbnRfaWZfbmVlZGVkIHRvIGVuY29kZSB0
aGUKKyAgICAgICAgYXJndW1lbnRzIGFuZCBjaGlsZF9wcm9jZXNzX2VuY29kaW5nIHRvIGRlY29k
ZSB0aGUgb3V0cHV0LgorICAgICAgICAoRXhlY3V0aXZlLl9jaGlsZF9wcm9jZXNzX2VuY29kaW5n
KTogUmV0dXJucyB0aGUgZW5jb2RpbmcgdGhhdCBzaG91bGQgYmUKKyAgICAgICAgdXNlZCB3aGVu
IGNvbW11bmljYXRpbmcgd2l0aCBjaGlsZCBwcm9jZXNzZXMuIE9uIFdpbmRvd3Mgd2UgdXNlIG1i
Y3MsCisgICAgICAgIHdoaWNoIG1hcHMgdG8gdGhlIGN1cnJlbnQgY29kZSBwYWdlLiBPbiBhbGwg
b3RoZXIgcGxhdGZvcm1zIHdlIHVzZQorICAgICAgICBVVEYtOC4KKyAgICAgICAgKEV4ZWN1dGl2
ZS5fc2hvdWxkX2VuY29kZV9jaGlsZF9wcm9jZXNzX2FyZ3VtZW50cyk6IFJldHVybnMgVHJ1ZSBp
ZgorICAgICAgICBhcmd1bWVudHMgdG8gY2hpbGQgcHJvY2Vzc2VzIG5lZWQgdG8gYmUgZW5jb2Rl
ZC4gVGhpcyBpcyBjdXJyZW50bHkKKyAgICAgICAgb25seSBuZWVkZWQgb24gQ3lnd2luIGFuZCBX
aW4zMiBQeXRob24gMi54LgorICAgICAgICAoRXhlY3V0aXZlLl9lbmNvZGVfYXJndW1lbnRfaWZf
bmVlZGVkKTogRW5jb2RlIHRoZSBhcmd1bWVudCB1c2luZworICAgICAgICBjaGlsZF9wcm9jZXNz
X2VuY29kaW5nIGlmIHdlIG5lZWQgdG8gZW5jb2RlIGFyZ3VtZW50cyB0byBjaGlsZAorICAgICAg
ICBwcm9jZXNzZXMgb24gdGhpcyBwbGF0Zm9ybS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfdW5pdHRlc3QucHk6CisgICAgICAgIChuZXZlcl9l
bmRpbmdfY29tbWFuZCk6IEFkZGVkLiBSZXR1cm5zIGFyZ3VtZW50cyB0byBydW4gYSBjb21tYW5k
IHRoYXQKKyAgICAgICAgd2lsbCBub3QgcXVpdCB1bnRpbCB3ZSBraWxsIGl0LiBPbiBXaW5kb3dz
IHdlIHVzZSB3bWljLCBvbiBvdGhlcgorICAgICAgICBwbGF0Zm9ybXMgd2UgdXNlIHllcy4KKyAg
ICAgICAgKEV4ZWN1dGl2ZVRlc3QudGVzdF9ydW5fY29tbWFuZF93aXRoX3VuaWNvZGUpOiBDaGFu
Z2VkIHRvIGV4cGVjdCB0aGUKKyAgICAgICAgbWJjcyBlbmNvZGluZyB0byBiZSB1c2VkIGFuZCBm
b3Igb3V0cHV0IGZyb20gdGhlIGNoaWxkIHByb2Nlc3NlcyB0bworICAgICAgICBoYXZlIGJlZW4g
cm91bmR0cmlwcGVkIHRocm91Z2ggZW5jb2RlL2RlY29kZSBvbiBXaW4zMiBQeXRob24uIFdoZW4K
KyAgICAgICAgVVRGLTggaXMgdGhlIGVuY29kaW5nIHRoZSByb3VuZHRyaXBwaW5nIGlzIHVuZGV0
ZWN0YWJsZSwgYnV0IHdpdGggbWJjcworICAgICAgICBpdCdzIHBvc3NpYmxlIHRoYXQgc29tZSBj
aGFyYWN0ZXJzIHdpbGwgbm90IGJlIGFibGUgdG8gYmUgY29udmVydGVkCisgICAgICAgIGFuZCB3
aWxsIGJlIHJlcGxhY2VkIGJ5IHF1ZXN0aW9uIG1hcmtzOyB0aGUgcm91bmQtdHJpcHBpbmcgYWxs
b3dzIHVzCisgICAgICAgIHRvIGV4cGVjdCB0aGlzIHJlc3VsdC4KKworICAgICAgICAoRXhlY3V0
aXZlVGVzdC50ZXN0X2tpbGxfcHJvY2Vzcyk6CisgICAgICAgIChFeGVjdXRpdmVUZXN0LnRlc3Rf
a2lsbF9hbGwpOgorICAgICAgICBVc2UgbmV2ZXJfZW5kaW5nX2NvbW1hbmQgaW5zdGVhZCBvZiBp
bnZva2luZyAieWVzIiBkaXJlY3RseS4gRXhwZWN0IGFuCisgICAgICAgIGV4aXQgY29kZSBvZiAx
IHdoZW4gdXNpbmcgV2luMzIgUHl0aG9uLCBhcyB0aGF0J3Mgd2hhdCBzZWVtcyB0byBoYXBwZW4u
CisKIDIwMTAtMTEtMDIgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFJlZHVjZSBvdXIgZGVwZW5kZW5jZSBvbiBjb3JldXRpbHMgd2hlbiBydW5uaW5nIFB5dGhvbiB0
ZXN0cwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL2V4ZWN1dGl2ZS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS9leGVjdXRpdmUucHkKaW5kZXggMjE2Y2Y1OGE3OTQ0Y2Y1MTRiNGY1YTg1MGY5M2NkOGRl
MmE4YWJhYy4uZWFiZmNlZDlhZDg0MTA5NDU2MjA4ZjRjYThiNTgxNTY4OTY0OTUzYiAxMDA2NDQK
LS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2
ZS5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhl
Y3V0aXZlLnB5CkBAIC00NCw2ICs0NCw3IEBAIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiAKIGZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5kZXByZWNhdGVkX2xvZ2dpbmcgaW1wb3J0IHRlZQor
ZnJvbSB3ZWJraXRweS5weXRob24yNCBpbXBvcnQgdmVyc2lvbmluZwogCiAKIF9sb2cgPSBsb2dn
aW5nLmdldExvZ2dlcigid2Via2l0cHkuY29tbW9uLnN5c3RlbSIpCkBAIC0xMDMsMTMgKzEwNCw4
IEBAIGNsYXNzIEV4ZWN1dGl2ZShvYmplY3QpOgogCiAgICAgZGVmIF9ydW5fY29tbWFuZF93aXRo
X3RlZWRfb3V0cHV0KHNlbGYsIGFyZ3MsIHRlZWRfb3V0cHV0KToKICAgICAgICAgYXJncyA9IG1h
cCh1bmljb2RlLCBhcmdzKSAgIyBQb3BlbiB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhcmdz
IGFyZSBub24tc3RyaW5ncyAobGlrZSBpbnQoKSkKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09
ICdjeWd3aW4nOgotICAgICAgICAgICAgIyBDeWd3aW4ncyBQeXRob24ncyBvcy5leGVjdiBkb2Vz
bid0IHN1cHBvcnQgdW5pY29kZSBjb21tYW5kCi0gICAgICAgICAgICAjIGFyZ3VtZW50cywgYW5k
IG5laXRoZXIgZG9lcyBDeWd3aW4ncyBleGVjdiBpdHNlbGYuCi0gICAgICAgICAgICAjIEZJWE1F
OiBVc2luZyBVVEYtOCBoZXJlIHdpbGwgY29uZnVzZSBXaW5kb3dzLW5hdGl2ZSBjb21tYW5kcwot
ICAgICAgICAgICAgIyB3aGljaCB3aWxsIGV4cGVjdCBhcmd1bWVudHMgdG8gYmUgZW5jb2RlZCB1
c2luZyB0aGUgY3VycmVudCBjb2RlCi0gICAgICAgICAgICAjIHBhZ2UuCi0gICAgICAgICAgICBh
cmdzID0gW2FyZy5lbmNvZGUoJ3V0Zi04JykgZm9yIGFyZyBpbiBhcmdzXQorICAgICAgICBhcmdz
ID0gbWFwKHNlbGYuX2VuY29kZV9hcmd1bWVudF9pZl9uZWVkZWQsIGFyZ3MpCisKICAgICAgICAg
Y2hpbGRfcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VU
LApAQCAtMTQ4LDkgKzE0NCw4IEBAIGNsYXNzIEV4ZWN1dGl2ZShvYmplY3QpOgogICAgICAgICBj
aGlsZF9vdXRwdXQgPSBjaGlsZF9vdXRfZmlsZS5nZXR2YWx1ZSgpCiAgICAgICAgIGNoaWxkX291
dF9maWxlLmNsb3NlKCkKIAotICAgICAgICAjIFdlIGFzc3VtZSB0aGUgY2hpbGQgcHJvY2VzcyBv
dXRwdXQgdXRmLTgKICAgICAgICAgaWYgZGVjb2RlX291dHB1dDoKLSAgICAgICAgICAgIGNoaWxk
X291dHB1dCA9IGNoaWxkX291dHB1dC5kZWNvZGUoInV0Zi04IikKKyAgICAgICAgICAgIGNoaWxk
X291dHB1dCA9IGNoaWxkX291dHB1dC5kZWNvZGUoc2VsZi5fY2hpbGRfcHJvY2Vzc19lbmNvZGlu
ZygpKQogCiAgICAgICAgIGlmIGV4aXRfY29kZToKICAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVy
cm9yKHNjcmlwdF9hcmdzPWFyZ3MsCkBAIC0yNjAsNyArMjU1LDcgQEAgY2xhc3MgRXhlY3V0aXZl
KG9iamVjdCk6CiAgICAgICAgICMgZm9yIGFuIGV4YW1wbGUgb2YgYSByZWdyZXNpb24gY2F1c2Vk
IGJ5IHBhc3NpbmcgYSB1bmljb2RlIHN0cmluZyBkaXJlY3RseS4KICAgICAgICAgIyBGSVhNRTog
V2UgbWF5IG5lZWQgdG8gZW5jb2RlIGRpZmZlcmVudGx5IG9uIGRpZmZlcmVudCBwbGF0Zm9ybXMu
CiAgICAgICAgIGlmIGlzaW5zdGFuY2UoaW5wdXQsIHVuaWNvZGUpOgotICAgICAgICAgICAgaW5w
dXQgPSBpbnB1dC5lbmNvZGUoInV0Zi04IikKKyAgICAgICAgICAgIGlucHV0ID0gaW5wdXQuZW5j
b2RlKHNlbGYuX2NoaWxkX3Byb2Nlc3NfZW5jb2RpbmcoKSkKICAgICAgICAgcmV0dXJuIChzdWJw
cm9jZXNzLlBJUEUsIGlucHV0KQogCiAgICAgZGVmIF9jb21tYW5kX2Zvcl9wcmludGluZyhzZWxm
LCBhcmdzKToKQEAgLTI4OCwxMyArMjgzLDggQEAgY2xhc3MgRXhlY3V0aXZlKG9iamVjdCk6CiAg
ICAgICAgIGFzc2VydChpc2luc3RhbmNlKGFyZ3MsIGxpc3QpIG9yIGlzaW5zdGFuY2UoYXJncywg
dHVwbGUpKQogICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKICAgICAgICAgYXJncyA9
IG1hcCh1bmljb2RlLCBhcmdzKSAgIyBQb3BlbiB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBh
cmdzIGFyZSBub24tc3RyaW5ncyAobGlrZSBpbnQoKSkKLSAgICAgICAgaWYgc3lzLnBsYXRmb3Jt
ID09ICdjeWd3aW4nOgotICAgICAgICAgICAgIyBDeWd3aW4ncyBQeXRob24ncyBvcy5leGVjdiBk
b2Vzbid0IHN1cHBvcnQgdW5pY29kZSBjb21tYW5kCi0gICAgICAgICAgICAjIGFyZ3VtZW50cywg
YW5kIG5laXRoZXIgZG9lcyBDeWd3aW4ncyBleGVjdiBpdHNlbGYuCi0gICAgICAgICAgICAjIEZJ
WE1FOiBVc2luZyBVVEYtOCBoZXJlIHdpbGwgY29uZnVzZSBXaW5kb3dzLW5hdGl2ZSBjb21tYW5k
cwotICAgICAgICAgICAgIyB3aGljaCB3aWxsIGV4cGVjdCBhcmd1bWVudHMgdG8gYmUgZW5jb2Rl
ZCB1c2luZyB0aGUgY3VycmVudCBjb2RlCi0gICAgICAgICAgICAjIHBhZ2UuCi0gICAgICAgICAg
ICBhcmdzID0gW2FyZy5lbmNvZGUoJ3V0Zi04JykgZm9yIGFyZyBpbiBhcmdzXQorICAgICAgICBh
cmdzID0gbWFwKHNlbGYuX2VuY29kZV9hcmd1bWVudF9pZl9uZWVkZWQsIGFyZ3MpCisKICAgICAg
ICAgc3RkaW4sIHN0cmluZ190b19jb21tdW5pY2F0ZSA9IHNlbGYuX2NvbXB1dGVfc3RkaW4oaW5w
dXQpCiAgICAgICAgIHN0ZGVyciA9IHN1YnByb2Nlc3MuU1RET1VUIGlmIHJldHVybl9zdGRlcnIg
ZWxzZSBOb25lCiAKQEAgLTMwNSw5ICsyOTUsMTEgQEAgY2xhc3MgRXhlY3V0aXZlKG9iamVjdCk6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD1jd2QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz1zZWxmLl9zaG91bGRfY2xvc2VfZmRz
KCkpCiAgICAgICAgIG91dHB1dCA9IHByb2Nlc3MuY29tbXVuaWNhdGUoc3RyaW5nX3RvX2NvbW11
bmljYXRlKVswXQorCiAgICAgICAgICMgcnVuX2NvbW1hbmQgYXV0b21hdGljYWxseSBkZWNvZGVz
IHRvIHVuaWNvZGUoKSB1bmxlc3MgZXhwbGljaXRseSB0b2xkIG5vdCB0by4KICAgICAgICAgaWYg
ZGVjb2RlX291dHB1dDoKLSAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5kZWNvZGUoInV0Zi04
IikKKyAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5kZWNvZGUoc2VsZi5fY2hpbGRfcHJvY2Vz
c19lbmNvZGluZygpKQorCiAgICAgICAgICMgd2FpdCgpIGlzIG5vdCB0aHJlYWRzYWZlIGFuZCBj
YW4gdGhyb3cgT1NFcnJvciBkdWUgdG86CiAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9y
Zy9pc3N1ZTE3MzE3MTcKICAgICAgICAgZXhpdF9jb2RlID0gcHJvY2Vzcy53YWl0KCkKQEAgLTMy
NCwzICszMTYsMzQgQEAgY2xhc3MgRXhlY3V0aXZlKG9iamVjdCk6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjd2Q9Y3dkKQogICAgICAgICAgICAgKGVycm9yX2hhbmRs
ZXIgb3Igc2VsZi5kZWZhdWx0X2Vycm9yX2hhbmRsZXIpKHNjcmlwdF9lcnJvcikKICAgICAgICAg
cmV0dXJuIG91dHB1dAorCisgICAgZGVmIF9jaGlsZF9wcm9jZXNzX2VuY29kaW5nKHNlbGYpOgor
ICAgICAgICAjIFdpbjMyIFB5dGhvbiAyLnggdXNlcyBDcmVhdGVQcm9jZXNzQSByYXRoZXIgdGhh
biBDcmVhdGVQcm9jZXNzVworICAgICAgICAjIHRvIGxhdW5jaCBzdWJwcm9jZXNzZXMsIHNvIHdl
IGhhdmUgdG8gZW5jb2RlIGFyZ3VtZW50cyB1c2luZyB0aGUKKyAgICAgICAgIyBjdXJyZW50IGNv
ZGUgcGFnZS4KKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAg
ICByZXR1cm4gJ21iY3MnCisgICAgICAgICMgQWxsIG90aGVyIHBsYXRmb3JtcyB1c2UgVVRGLTgu
CisgICAgICAgICMgRklYTUU6IFVzaW5nIFVURi04IG9uIEN5Z3dpbiB3aWxsIGNvbmZ1c2UgV2lu
ZG93cy1uYXRpdmUgY29tbWFuZHMKKyAgICAgICAgIyB3aGljaCB3aWxsIGV4cGVjdCBhcmd1bWVu
dHMgdG8gYmUgZW5jb2RlZCB1c2luZyB0aGUgY3VycmVudCBjb2RlCisgICAgICAgICMgcGFnZS4K
KyAgICAgICAgcmV0dXJuICd1dGYtOCcKKworICAgIGRlZiBfc2hvdWxkX2VuY29kZV9jaGlsZF9w
cm9jZXNzX2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgIyBDeWd3aW4ncyBQeXRob24ncyBvcy5l
eGVjdiBkb2Vzbid0IHN1cHBvcnQgdW5pY29kZSBjb21tYW5kCisgICAgICAgICMgYXJndW1lbnRz
LCBhbmQgbmVpdGhlciBkb2VzIEN5Z3dpbidzIGV4ZWN2IGl0c2VsZi4KKyAgICAgICAgaWYgc3lz
LnBsYXRmb3JtID09ICdjeWd3aW4nOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAg
ICAjIFdpbjMyIFB5dGhvbiAyLnggdXNlcyBDcmVhdGVQcm9jZXNzQSByYXRoZXIgdGhhbiBDcmVh
dGVQcm9jZXNzVworICAgICAgICAjIHRvIGxhdW5jaCBzdWJwcm9jZXNzZXMsIHNvIHdlIGhhdmUg
dG8gZW5jb2RlIGFyZ3VtZW50cyB1c2luZyB0aGUKKyAgICAgICAgIyBjdXJyZW50IGNvZGUgcGFn
ZS4KKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMicgYW5kIHZlcnNpb25pbmcuY29t
cGFyZV92ZXJzaW9uKHN5cywgJzMuMCcpWzBdIDwgMDoKKyAgICAgICAgICAgIHJldHVybiBUcnVl
CisKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2VuY29kZV9hcmd1bWVudF9pZl9u
ZWVkZWQoc2VsZiwgYXJndW1lbnQpOgorICAgICAgICBpZiBub3Qgc2VsZi5fc2hvdWxkX2VuY29k
ZV9jaGlsZF9wcm9jZXNzX2FyZ3VtZW50cygpOgorICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50
CisgICAgICAgIHJldHVybiBhcmd1bWVudC5lbmNvZGUoc2VsZi5fY2hpbGRfcHJvY2Vzc19lbmNv
ZGluZygpKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL2V4ZWN1dGl2ZV91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfdW5pdHRlc3QucHkKaW5kZXggNjEwNmJlOGU5OGM2
MDdhYTU4N2ExYzUxOGRiNjQyMWFiY2Y5ZTFjOC4uYjhlMjJjMGU5Yzk0NTg3ZmM0YWZjNmJlYmFk
ZDk5NDBjMjVlYWIzNCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL2V4ZWN1dGl2ZV91bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0ZXN0LnB5CkBAIC0zNiw2
ICszNiwxNSBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBF
eGVjdXRpdmUsIHJ1bl9jb21tYW5kLCBTY3JpcHRFcnJvcgogZnJvbSB3ZWJraXRweS50ZXN0IGlt
cG9ydCBjYXQsIGVjaG8KIAogCitkZWYgbmV2ZXJfZW5kaW5nX2NvbW1hbmQoKToKKyAgICAiIiJB
cmd1bWVudHMgZm9yIGEgY29tbWFuZCB0aGF0IHdpbGwgbmV2ZXIgZW5kICh1c2VmdWwgZm9yIHRl
c3RpbmcgcHJvY2VzcworICAgIGtpbGxpbmcpLiBJdCBzaG91bGQgYmUgYSBwcm9jZXNzIHRoYXQg
aXMgdW5saWtlbHkgdG8gYWxyZWFkeSBiZSBydW5uaW5nCisgICAgYmVjYXVzZSBhbGwgaW5zdGFu
Y2VzIHdpbGwgYmUga2lsbGVkLiIiIgorICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgor
ICAgICAgICByZXR1cm4gWyd3bWljJ10KKyAgICByZXR1cm4gWyd5ZXMnXQorCisKIGNsYXNzIEV4
ZWN1dGl2ZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfcnVuX2NvbW1h
bmRfd2l0aF9iYWRfY29tbWFuZChzZWxmKToKQEAgLTU0LDM5ICs2Myw0OSBAQCBjbGFzcyBFeGVj
dXRpdmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgIiIiVmFsaWRhdGUgdGhhdCBp
dCBpcyBzYWZlIHRvIHBhc3MgdW5pY29kZSgpIG9iamVjdHMKICAgICAgICAgdG8gRXhlY3V0aXZl
LnJ1biogbWV0aG9kcywgYW5kIHRoZXkgd2lsbCByZXR1cm4gdW5pY29kZSgpCiAgICAgICAgIG9i
amVjdHMgYnkgZGVmYXVsdCB1bmxlc3MgZGVjb2RlX291dHB1dD1GYWxzZSIiIgorICAgICAgICB1
bmljb2RlX3Rvcl9pbnB1dCA9IHUiV2ViS2l0IFx1MjY2MSBUb3IgQXJuZSBWZXN0Ylx1MDBGOCEi
CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgZW5jb2Rp
bmcgPSAnbWJjcycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVuY29kaW5nID0gJ3V0Zi04
JworICAgICAgICBlbmNvZGVkX3RvciA9IHVuaWNvZGVfdG9yX2lucHV0LmVuY29kZShlbmNvZGlu
ZykKKyAgICAgICAgIyBPbiBXaW5kb3dzLCB3ZSBleHBlY3QgdGhlIHVuaWNvZGUtPm1iY3MtPnVu
aWNvZGUgcm91bmR0cmlwIHRvIGJlCisgICAgICAgICMgbG9zc3kuIE9uIG90aGVyIHBsYXRmb3Jt
cywgd2UgZXhwZWN0IGEgbG9zc2xlc3Mgcm91bmR0cmlwLgorICAgICAgICBpZiBzeXMucGxhdGZv
cm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHVuaWNvZGVfdG9yX291dHB1dCA9IGVuY29kZWRf
dG9yLmRlY29kZShlbmNvZGluZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVuaWNvZGVf
dG9yX291dHB1dCA9IHVuaWNvZGVfdG9yX2lucHV0CisKICAgICAgICAgZXhlY3V0aXZlID0gRXhl
Y3V0aXZlKCkKLSAgICAgICAgdW5pY29kZV90b3IgPSB1IldlYktpdCBcdTI2NjEgVG9yIEFybmUg
VmVzdGJcdTAwRjghIgotICAgICAgICB1dGY4X3RvciA9IHVuaWNvZGVfdG9yLmVuY29kZSgidXRm
LTgiKQogCi0gICAgICAgIG91dHB1dCA9IGV4ZWN1dGl2ZS5ydW5fY29tbWFuZChjYXQuY29tbWFu
ZF9hcmd1bWVudHMoKSwgaW5wdXQ9dW5pY29kZV90b3IpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKG91dHB1dCwgdW5pY29kZV90b3IpCisgICAgICAgIG91dHB1dCA9IGV4ZWN1dGl2ZS5ydW5f
Y29tbWFuZChjYXQuY29tbWFuZF9hcmd1bWVudHMoKSwgaW5wdXQ9dW5pY29kZV90b3JfaW5wdXQp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG91dHB1dCwgdW5pY29kZV90b3Jfb3V0cHV0KQog
Ci0gICAgICAgIG91dHB1dCA9IGV4ZWN1dGl2ZS5ydW5fY29tbWFuZChlY2hvLmNvbW1hbmRfYXJn
dW1lbnRzKCItbiIsIHVuaWNvZGVfdG9yKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3V0
cHV0LCB1bmljb2RlX3RvcikKKyAgICAgICAgb3V0cHV0ID0gZXhlY3V0aXZlLnJ1bl9jb21tYW5k
KGVjaG8uY29tbWFuZF9hcmd1bWVudHMoIi1uIiwgdW5pY29kZV90b3JfaW5wdXQpKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhvdXRwdXQsIHVuaWNvZGVfdG9yX291dHB1dCkKIAotICAgICAg
ICBvdXRwdXQgPSBleGVjdXRpdmUucnVuX2NvbW1hbmQoZWNoby5jb21tYW5kX2FyZ3VtZW50cygi
LW4iLCB1bmljb2RlX3RvciksIGRlY29kZV9vdXRwdXQ9RmFsc2UpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKG91dHB1dCwgdXRmOF90b3IpCisgICAgICAgIG91dHB1dCA9IGV4ZWN1dGl2ZS5y
dW5fY29tbWFuZChlY2hvLmNvbW1hbmRfYXJndW1lbnRzKCItbiIsIHVuaWNvZGVfdG9yX2lucHV0
KSwgZGVjb2RlX291dHB1dD1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3V0cHV0
LCBlbmNvZGVkX3RvcikKIAogICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHN0cigpIGlucHV0IGFs
c28gd29ya3MuCi0gICAgICAgIG91dHB1dCA9IGV4ZWN1dGl2ZS5ydW5fY29tbWFuZChjYXQuY29t
bWFuZF9hcmd1bWVudHMoKSwgaW5wdXQ9dXRmOF90b3IsIGRlY29kZV9vdXRwdXQ9RmFsc2UpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG91dHB1dCwgdXRmOF90b3IpCisgICAgICAgIG91dHB1
dCA9IGV4ZWN1dGl2ZS5ydW5fY29tbWFuZChjYXQuY29tbWFuZF9hcmd1bWVudHMoKSwgaW5wdXQ9
ZW5jb2RlZF90b3IsIGRlY29kZV9vdXRwdXQ9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKG91dHB1dCwgZW5jb2RlZF90b3IpCiAKICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIG9u
bHkgaGF2ZSBvbmUgcnVuKiBtZXRob2QgdG8gdGVzdAotICAgICAgICBvdXRwdXQgPSBleGVjdXRp
dmUucnVuX2FuZF90aHJvd19pZl9mYWlsKGVjaG8uY29tbWFuZF9hcmd1bWVudHMoIi1uIiwgdW5p
Y29kZV90b3IpLCBxdWlldD1UcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvdXRwdXQs
IHVuaWNvZGVfdG9yKQorICAgICAgICBvdXRwdXQgPSBleGVjdXRpdmUucnVuX2FuZF90aHJvd19p
Zl9mYWlsKGVjaG8uY29tbWFuZF9hcmd1bWVudHMoIi1uIiwgdW5pY29kZV90b3JfaW5wdXQpLCBx
dWlldD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvdXRwdXQsIHVuaWNvZGVfdG9y
X291dHB1dCkKIAotICAgICAgICBvdXRwdXQgPSBleGVjdXRpdmUucnVuX2FuZF90aHJvd19pZl9m
YWlsKGVjaG8uY29tbWFuZF9hcmd1bWVudHMoIi1uIiwgdW5pY29kZV90b3IpLCBxdWlldD1UcnVl
LCBkZWNvZGVfb3V0cHV0PUZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvdXRwdXQs
IHV0ZjhfdG9yKQorICAgICAgICBvdXRwdXQgPSBleGVjdXRpdmUucnVuX2FuZF90aHJvd19pZl9m
YWlsKGVjaG8uY29tbWFuZF9hcmd1bWVudHMoIi1uIiwgdW5pY29kZV90b3JfaW5wdXQpLCBxdWll
dD1UcnVlLCBkZWNvZGVfb3V0cHV0PUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhv
dXRwdXQsIGVuY29kZWRfdG9yKQogCiAgICAgZGVmIHRlc3Rfa2lsbF9wcm9jZXNzKHNlbGYpOgog
ICAgICAgICBleGVjdXRpdmUgPSBFeGVjdXRpdmUoKQotICAgICAgICAjIFdlIHVzZSAieWVzIiBi
ZWNhdXNlIGl0IGxvb3BzIGZvcmV2ZXIuCi0gICAgICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBv
cGVuKFsieWVzIl0sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHByb2Nlc3MgPSBz
dWJwcm9jZXNzLlBvcGVuKG5ldmVyX2VuZGluZ19jb21tYW5kKCksIHN0ZG91dD1zdWJwcm9jZXNz
LlBJUEUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvY2Vzcy5wb2xsKCksIE5vbmUpICAj
IFByb2Nlc3MgaXMgcnVubmluZwogICAgICAgICBleGVjdXRpdmUua2lsbF9wcm9jZXNzKHByb2Nl
c3MucGlkKQogICAgICAgICAjIE5vdGU6IENhbid0IHVzZSBhIHRlcm5hcnkgc2luY2Ugc2lnbmFs
LlNJR0tJTEwgaXMgdW5kZWZpbmVkIGZvciBzeXMucGxhdGZvcm0gPT0gIndpbjMyIgogICAgICAg
ICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKLSAgICAgICAgICAgIGV4cGVjdGVkX2V4aXRf
Y29kZSA9IDAgICMgdGFza2tpbGwuZXhlIHJlc3VsdHMgaW4gZXhpdCgwKQorICAgICAgICAgICAg
ZXhwZWN0ZWRfZXhpdF9jb2RlID0gMQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZXhwZWN0
ZWRfZXhpdF9jb2RlID0gLXNpZ25hbC5TSUdLSUxMCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
cHJvY2Vzcy53YWl0KCksIGV4cGVjdGVkX2V4aXRfY29kZSkKQEAgLTExMCwxNCArMTI5LDE2IEBA
IGNsYXNzIEV4ZWN1dGl2ZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2tp
bGxfYWxsKHNlbGYpOgogICAgICAgICBleGVjdXRpdmUgPSBFeGVjdXRpdmUoKQogICAgICAgICAj
IFdlIHVzZSAieWVzIiBiZWNhdXNlIGl0IGxvb3BzIGZvcmV2ZXIuCi0gICAgICAgIHByb2Nlc3Mg
PSBzdWJwcm9jZXNzLlBvcGVuKFsieWVzIl0sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAg
ICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKG5ldmVyX2VuZGluZ19jb21tYW5kKCksIHN0
ZG91dD1zdWJwcm9jZXNzLlBJUEUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvY2Vzcy5w
b2xsKCksIE5vbmUpICAjIFByb2Nlc3MgaXMgcnVubmluZwotICAgICAgICBleGVjdXRpdmUua2ls
bF9hbGwoInllcyIpCisgICAgICAgIGV4ZWN1dGl2ZS5raWxsX2FsbChuZXZlcl9lbmRpbmdfY29t
bWFuZCgpWzBdKQogICAgICAgICAjIE5vdGU6IENhbid0IHVzZSBhIHRlcm5hcnkgc2luY2Ugc2ln
bmFsLlNJR1RFUk0gaXMgdW5kZWZpbmVkIGZvciBzeXMucGxhdGZvcm0gPT0gIndpbjMyIgotICAg
ICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCJ3aW4zMiIsICJjeWd3aW4iKToKLSAgICAgICAgICAg
IGV4cGVjdGVkX2V4aXRfY29kZSA9IDAgICMgdGFza2tpbGwuZXhlIHJlc3VsdHMgaW4gZXhpdCgw
KQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gImN5Z3dpbiI6CisgICAgICAgICAgICBleHBl
Y3RlZF9leGl0X2NvZGUgPSAwICAjIG9zLmtpbGwgcmVzdWx0cyBpbiBleGl0KDApIGZvciB0aGlz
IHByb2Nlc3MuCisgICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAg
ICAgICBleHBlY3RlZF9leGl0X2NvZGUgPSAxCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBl
eHBlY3RlZF9leGl0X2NvZGUgPSAtc2lnbmFsLlNJR1RFUk0KICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChwcm9jZXNzLndhaXQoKSwgZXhwZWN0ZWRfZXhpdF9jb2RlKQogICAgICAgICAjIEtpbGxp
bmcgYWdhaW4gc2hvdWxkIGZhaWwgc2lsZW50bHkuCi0gICAgICAgIGV4ZWN1dGl2ZS5raWxsX2Fs
bCgieWVzIikKKyAgICAgICAgZXhlY3V0aXZlLmtpbGxfYWxsKG5ldmVyX2VuZGluZ19jb21tYW5k
KClbMF0pCg==
</data>
<flag name="review"
          id="63437"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>