<?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>53326</bug_id>
          
          <creation_ts>2011-01-28 12:56:09 -0800</creation_ts>
          <short_desc>webkitpy: update fileset, zipfileset to be usable by rebaseline-chromium-webkit-tests</short_desc>
          <delta_ts>2011-01-30 15:33:07 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>53040</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>koz</cc>
    
    <cc>mihaip</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>341669</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-28 12:56:09 -0800</bug_when>
    <thetext>webkitpy: update fileset, zipfileset to be usable by rebaseline-chromium-webkit-tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341670</commentid>
    <comment_count>1</comment_count>
      <attachid>80486</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-28 12:57:01 -0800</bug_when>
    <thetext>Created attachment 80486
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341691</commentid>
    <comment_count>2</comment_count>
      <attachid>80486</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-28 13:33:30 -0800</bug_when>
    <thetext>Comment on attachment 80486
Patch

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

&gt; Tools/Scripts/webkitpy/common/system/fileset.py:40
&gt; +    def close(self):

Why?

&gt; Tools/Scripts/webkitpy/common/system/filesystem_mock.py:144
&gt; +        # FIXME: might want tests for this and/or a better comment about how
&gt; +        # it works.

go go punchcards. :)

&gt; Tools/Scripts/webkitpy/common/system/ospath.py:35
&gt; +def relpath(path, start_path, os_path_abspath=None, sep=None):

We should probably just move this onto filesystem.py now that we have it.

&gt; Tools/Scripts/webkitpy/common/system/zipfileset.py:43
&gt; +        return (temp_file, zipfile.ZipFile(temp_file))

Confused wehre this is used.

&gt; Tools/Scripts/webkitpy/common/system/zipfileset_unittest.py:67
&gt; +        return (None, result)

Confused where thsi is used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341695</commentid>
    <comment_count>3</comment_count>
      <attachid>80486</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-28 13:36:23 -0800</bug_when>
    <thetext>Comment on attachment 80486
Patch

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

I think this needs a bit more testing, but in general looks good!  r- cause I&apos;d like to see at least one tst of the .sep support.

&gt; Tools/Scripts/webkitpy/common/system/filesystem.py:206
&gt; +        &quot;&quot;&quot;Returns the relative path from the starting point.&quot;&quot;&quot;

This seems unhelpful.

&gt; Tools/Scripts/webkitpy/common/system/filesystem_mock.py:56
&gt; +        idx = path.rfind(self.sep)

Seems we should test this new .sep support somewhere.

&gt; Tools/Scripts/webkitpy/common/system/zipfileset.py:53
&gt; +    def close(self):

Now that we have close, seems we might want to have __being__ __end__ support (or whatever it takes to have &quot;with&quot; work).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341699</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-28 13:38:29 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 80486 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=80486&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/system/fileset.py:40
&gt; &gt; +    def close(self):
&gt; 
&gt; Why?
&gt; 

The use is clearer in the patch in 53040. The zipfileset downloads the URL into a temp file, but provides no way for the tempfile to be subsequently deleted, which means that the archives get leaked into the filesystem over time. In theory they may get cleaned up when the machine reboots, but that tends to be dependent on the machine configuration (/tmp and friends are not guaranteed to be cleaned up), and if feels wrong to me to rely on that.

&gt; &gt; Tools/Scripts/webkitpy/common/system/filesystem_mock.py:144
&gt; &gt; +        # FIXME: might want tests for this and/or a better comment about how
&gt; &gt; +        # it works.
&gt; 
&gt; go go punchcards. :)
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/system/ospath.py:35
&gt; &gt; +def relpath(path, start_path, os_path_abspath=None, sep=None):
&gt; 
&gt; We should probably just move this onto filesystem.py now that we have it.
&gt; 

Yeah, will do in a separate patch.

&gt; &gt; Tools/Scripts/webkitpy/common/system/zipfileset.py:43
&gt; &gt; +        return (temp_file, zipfile.ZipFile(temp_file))
&gt; 
&gt; Confused wehre this is used.
&gt;

As per above.
 
&gt; &gt; Tools/Scripts/webkitpy/common/system/zipfileset_unittest.py:67
&gt; &gt; +        return (None, result)
&gt; 
&gt; Confused where thsi is used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341700</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-28 13:40:07 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 80486 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=80486&amp;action=review
&gt; 
&gt; I think this needs a bit more testing, but in general looks good!  r- cause I&apos;d like to see at least one tst of the .sep support.
&gt;

Okay, I can add some unit tests.
 
&gt; &gt; Tools/Scripts/webkitpy/common/system/filesystem.py:206
&gt; &gt; +        &quot;&quot;&quot;Returns the relative path from the starting point.&quot;&quot;&quot;
&gt; 
&gt; This seems unhelpful.
&gt;

Will delete.
 
&gt; &gt; Tools/Scripts/webkitpy/common/system/filesystem_mock.py:56
&gt; &gt; +        idx = path.rfind(self.sep)
&gt; 
&gt; Seems we should test this new .sep support somewhere.
&gt; 

Will do.

&gt; &gt; Tools/Scripts/webkitpy/common/system/zipfileset.py:53
&gt; &gt; +    def close(self):
&gt; 
&gt; Now that we have close, seems we might want to have __being__ __end__ support (or whatever it takes to have &quot;with&quot; work).

It&apos;s not clear to me that the lifetime of the zipfile will fit cleanly into a with block, but it&apos;s not much work to add it. I can do that in a separate patch and I&apos;ll add a FIXME to track it for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341702</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-28 13:41:56 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; &gt; Now that we have close, seems we might want to have __being__ __end__ support (or whatever it takes to have &quot;with&quot; work).
&gt; 
&gt; It&apos;s not clear to me that the lifetime of the zipfile will fit cleanly into a with block, but it&apos;s not much work to add it. I can do that in a separate patch and I&apos;ll add a FIXME to track it for now.

Yeah, like many of my review comments, I was just musing to the void about what the perfect platonic zipfileset might look like.  My appologies that my musings are often interpretable as requests for action.  Certainly not needed in this patch. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341723</commentid>
    <comment_count>7</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-28 14:09:17 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 80486 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=80486&amp;action=review
&gt; &gt; 
&gt; &gt; I think this needs a bit more testing, but in general looks good!  r- cause I&apos;d like to see at least one tst of the .sep support.
&gt; &gt;
&gt; 
&gt; Okay, I can add some unit tests.
&gt;

Before I go off and write stuff .. is there something specific you&apos;re concerned about testing, or is this just a general concern for coverage? The code paths are well-covered under the layout_tests unit tests, but I have no problem adding unit tests here as well, I just wanted to make sure I was addressing what your concern really was.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341735</commentid>
    <comment_count>8</comment_count>
      <attachid>80486</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-28 14:22:29 -0800</bug_when>
    <thetext>Comment on attachment 80486
Patch

I just see you adding a .sep feature, and I don&apos;t see it used anywhere, that&apos;s all.  No specific need.  Just would like to see a test which uses a different .sep</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341742</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-28 14:27:40 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 80486 [details])
&gt; I just see you adding a .sep feature, and I don&apos;t see it used anywhere, that&apos;s all.  No specific need.  Just would like to see a test which uses a different .sep

Ah, I didn&apos;t add it, it was already there. All I did was replace places where we still had hard-coded &apos;/&apos; strings with self.sep. The property is meant to be read-only (I suppose I could code it as such) and public just so people can refer to it if they need to rather than using os.sep and potentially introducing bugs in unit tests on windows.

At some point it might be interesting to actually change the &apos;/&apos; to something else and see what happens.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341760</commentid>
    <comment_count>10</comment_count>
      <attachid>80499</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-28 14:53:55 -0800</bug_when>
    <thetext>Created attachment 80499
add tests for fs.sep, make it readonly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341763</commentid>
    <comment_count>11</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-28 14:56:39 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; At some point it might be interesting to actually change the &apos;/&apos; to something else and see what happens.

Every once in a while I think this and then I realize that you can&apos;t do this without breaking the constructors, because the files dict relies on the keys having &apos;/&apos; as the separator.

I.e., we could change self.sep, but every unit test that relied on a pre-existing filename with a path separator in it would break.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341772</commentid>
    <comment_count>12</comment_count>
      <attachid>80499</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-28 15:12:05 -0800</bug_when>
    <thetext>Comment on attachment 80499
add tests for fs.sep, make it readonly

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

Still looks OK.  See nits below.

&gt; Tools/Scripts/webkitpy/common/system/filesystem.py:55
&gt; +    def _get_sep(self):
&gt; +        return self._sep
&gt; +
&gt; +    sep = property(_get_sep, doc=&quot;pathname separator&quot;)

I&apos;m not sure making it read-only is really worth the trouble, but it&apos;s not horrible either.

&gt; Tools/Scripts/webkitpy/common/system/filesystem.py:211
&gt; +        &quot;&quot;&quot;Returns the relative path from the starting point.&quot;&quot;&quot;

Doesn&apos;t add anything, really.

&gt; Tools/Scripts/webkitpy/common/system/filesystem_mock.py:55
&gt; +    def _get_sep(self):
&gt; +        return self._sep
&gt; +
&gt; +    sep = property(_get_sep, doc=&quot;pathname separator&quot;)

Sigh, more boilerplate.  There really isn&apos;t a way to do this with less code?

&gt; Tools/Scripts/webkitpy/common/system/filesystem_mock.py:62
&gt;      def _split(self, path):
&gt; -        idx = path.rfind(&apos;/&apos;)
&gt; +        idx = path.rfind(self.sep)
&gt;          return (path[0:idx], path[idx + 1:])

Isn&apos;t this just path.rsplit(self.sep, max=1)?

&gt; Tools/Scripts/webkitpy/common/system/filesystem_mock.py:66
&gt; +        if path.endswith(self.sep):
&gt; +            return path[:-1]

I think you just want return path.rstrip(&apos;/&apos;), no?

&gt; Tools/Scripts/webkitpy/common/system/filesystem_mock.py:149
&gt; +        # FIXME: might want tests for this and/or a better comment about how
&gt; +        # it works.

I think the patch ordering might have gotten mixed locally.

&gt; Tools/Scripts/webkitpy/common/system/filesystem_unittest.py:175
&gt; +        self.assertEquals(fs.sep, os.sep)
&gt; +        self.assertEquals(fs.join(&quot;foo&quot;, &quot;bar&quot;),
&gt; +                          os.path.join(&quot;foo&quot;, &quot;bar&quot;))

I guess I was more intersted in seeing a FileSystem instantiated with a custom sep and seen that it was used.  FileSystem(sep=&quot;#&quot;), fs.join(&apos;foo&apos;, &apos;bar&apos;) == &apos;foo#bar&apos;, etc.

&gt; Tools/Scripts/webkitpy/common/system/filesystem_unittest.py:184
&gt; +        try:
&gt; +            fs.sep = &apos; &apos;
&gt; +            self.assertTrue(False, msg=&quot;fs.sep isn&apos;t readonly&quot;)
&gt; +        except AttributeError, e:
&gt; +            pass

there is an assertRaises which seems more appropriate here (assuming you keep the read-only stuff, which I&apos;m not sure is necessary, but is up to you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341792</commentid>
    <comment_count>13</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-28 15:25:01 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 80499 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=80499&amp;action=review
&gt; 
&gt; Still looks OK.  See nits below.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/system/filesystem.py:55
&gt; &gt; +    def _get_sep(self):
&gt; &gt; +        return self._sep
&gt; &gt; +
&gt; &gt; +    sep = property(_get_sep, doc=&quot;pathname separator&quot;)
&gt; 
&gt; I&apos;m not sure making it read-only is really worth the trouble, but it&apos;s not horrible either.
&gt; 

I think it probably makes things a little more obvious.

&gt; &gt; Tools/Scripts/webkitpy/common/system/filesystem.py:211
&gt; &gt; +        &quot;&quot;&quot;Returns the relative path from the starting point.&quot;&quot;&quot;
&gt; 
&gt; Doesn&apos;t add anything, really.
&gt;

Whoops, meant to delete that.
 
&gt; &gt; Tools/Scripts/webkitpy/common/system/filesystem_mock.py:55
&gt; &gt; +    def _get_sep(self):
&gt; &gt; +        return self._sep
&gt; &gt; +
&gt; &gt; +    sep = property(_get_sep, doc=&quot;pathname separator&quot;)
&gt; 
&gt; Sigh, more boilerplate.  There really isn&apos;t a way to do this with less code?
&gt;

Unfortunately, not as far as I know :( Still think it&apos;s probably worth it.
 
&gt; &gt; Tools/Scripts/webkitpy/common/system/filesystem_mock.py:62
&gt; &gt;      def _split(self, path):
&gt; &gt; -        idx = path.rfind(&apos;/&apos;)
&gt; &gt; +        idx = path.rfind(self.sep)
&gt; &gt;          return (path[0:idx], path[idx + 1:])
&gt; 
&gt; Isn&apos;t this just path.rsplit(self.sep, max=1)?
&gt; 

Yeah, I think that works.

&gt; &gt; Tools/Scripts/webkitpy/common/system/filesystem_mock.py:66
&gt; &gt; +        if path.endswith(self.sep):
&gt; &gt; +            return path[:-1]
&gt; 
&gt; I think you just want return path.rstrip(&apos;/&apos;), no?
&gt; 

rstrip will strip all trailing &apos;/&apos; rather than just one. That may or may not be the right thing to do in the mock system, so I&apos;ll probably just leave things the way they are.

&gt; &gt; Tools/Scripts/webkitpy/common/system/filesystem_mock.py:149
&gt; &gt; +        # FIXME: might want tests for this and/or a better comment about how
&gt; &gt; +        # it works.
&gt; 
&gt; I think the patch ordering might have gotten mixed locally.
&gt; 

Maybe.

&gt; &gt; Tools/Scripts/webkitpy/common/system/filesystem_unittest.py:175
&gt; &gt; +        self.assertEquals(fs.sep, os.sep)
&gt; &gt; +        self.assertEquals(fs.join(&quot;foo&quot;, &quot;bar&quot;),
&gt; &gt; +                          os.path.join(&quot;foo&quot;, &quot;bar&quot;))
&gt; 
&gt; I guess I was more intersted in seeing a FileSystem instantiated with a custom sep and seen that it was used.  FileSystem(sep=&quot;#&quot;), fs.join(&apos;foo&apos;, &apos;bar&apos;) == &apos;foo#bar&apos;, etc.
&gt;

Yeah, understood. As per comment #10 and #11, that isn&apos;t the intended usage and probably would be bad. I suppose I could change the constructor to substitute self.sep for &apos;/&apos; in the keys.
 
&gt; &gt; Tools/Scripts/webkitpy/common/system/filesystem_unittest.py:184
&gt; &gt; +        try:
&gt; &gt; +            fs.sep = &apos; &apos;
&gt; &gt; +            self.assertTrue(False, msg=&quot;fs.sep isn&apos;t readonly&quot;)
&gt; &gt; +        except AttributeError, e:
&gt; &gt; +            pass
&gt; 

To use assertRaises I need to stuff the assignment into a local function, but I can do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341798</commentid>
    <comment_count>14</comment_count>
      <attachid>80509</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-28 15:30:40 -0800</bug_when>
    <thetext>Created attachment 80509
update w/ more review feedback from eseidel</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341849</commentid>
    <comment_count>15</comment_count>
      <attachid>80509</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-28 16:31:48 -0800</bug_when>
    <thetext>Comment on attachment 80509
update w/ more review feedback from eseidel

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342379</commentid>
    <comment_count>16</comment_count>
      <attachid>80509</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-30 15:07:13 -0800</bug_when>
    <thetext>Comment on attachment 80509
update w/ more review feedback from eseidel

Clearing flags on attachment: 80509

Committed r77093: &lt;http://trac.webkit.org/changeset/77093&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342380</commentid>
    <comment_count>17</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-30 15:07:18 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342387</commentid>
    <comment_count>18</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-30 15:33:07 -0800</bug_when>
    <thetext>Committed r77096: &lt;http://trac.webkit.org/changeset/77096&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80486</attachid>
            <date>2011-01-28 12:57:01 -0800</date>
            <delta_ts>2011-01-28 14:53:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53326-20110128125700.patch</filename>
            <type>text/plain</type>
            <size>14331</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5M2Yy
MDBhMzkyNTNjODVhNzUwNjY2MmM3N2M5OGU1NGIzNTMzMGNiLi4zZWNiNTZkNmZiZTU3MDVlNmJh
MWU0OTAzNGI2ZDk1NWVjNGJlMGRmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjggQEAKIDIwMTEtMDEtMjcgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgb2YgdGhlIGZpbGVzeXN0ZW0tcmVsYXRlZCBtb2R1
bGVzIHVzZWQgaW4gd2Via2l0cHkuCisgICAgICAgIEkndmUgYWRkZWQgcmVscGF0aCgpIHRvIHRo
ZSBmaWxlc3lzdGVtIGludGVyZmFjZSwgbW9kaWZpZWQKKyAgICAgICAgb3NwYXRoLnJlbHBhdGgo
KSBzbyB0aGF0IGl0IGNvdWxkIHdvcmsgd2l0aCB0aGUgZmlsZXN5c3RlbQorICAgICAgICBpbnRl
cmZhY2UsIGFuZCBtb2RpZmllZCB0aGUgZmlsZXNldCogcm91dGluZXMgdG8gdXNlIHRoZQorICAg
ICAgICBmaWxlc3lzdGVtIGludGVyZmFjZSBjb25zaXN0ZW50bHkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhbHNvIGFkZHMgYSBjbG9zZSgpIHJvdXRpbmUgdG8gdGhlIGZpbGVzZXQgcm91dGluZXMK
KyAgICAgICAgdG8gaW5kaWNhdGUgdGhhdCB0aGUgY2FsbGVyIGlzIGRvbmUgd2l0aCB0aGUgZmls
ZXNldC4gVGhpcworICAgICAgICBhbGxvd3MgemlwZmlsZXNldCB0byBjbGVhbiB1cCBhZnRlciBp
dHNlbGYgd2hlbiBpdCBjcmVhdGVzCisgICAgICAgIHRlbXBmaWxlcyB0byBzdG9yZSBkb3dubG9h
ZHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZGlyZWN0b3J5
ZmlsZXNldC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmls
ZXNldC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5
c3RlbS5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5
c3RlbV9tb2NrLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9v
c3BhdGgucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3ppcGZp
bGVzZXQucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3ppcGZp
bGVzZXRfdW5pdHRlc3QucHk6CisKKzIwMTEtMDEtMjcgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBj
aHJvbWl1bS5vcmc+CisKICAgICAgICAgUmV2aWV3ZWQgYnkgTWloYWkgUGFycGFyaXRhLgogCiAg
ICAgICAgIG5ldy1ydW4td2Via2l0LXRlc3RzOiB0dXJuIG9mZiBwaXhlbCB0ZXN0cyBjb3JyZWN0
bHkgYnkgZGVmYXVsdApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL2RpcmVjdG9yeWZpbGVzZXQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vZGlyZWN0b3J5ZmlsZXNldC5weQppbmRleCAxMWFjYWY0ZWIyZmQyNzE2NWY4YmRl
MmZmOWM5YjJiOTI3YTAzNzlkLi5hNWNhYjBlOTRhNGQ1Y2NiZTA0MmY1MDc3MjRkNjUwYmI1YzE2
OWFmIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZGly
ZWN0b3J5ZmlsZXNldC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0
ZW0vZGlyZWN0b3J5ZmlsZXNldC5weQpAQCAtMjEsMTQgKzIxLDggQEAKICMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCiAjIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQK
LQotaW1wb3J0IG9zCi1pbXBvcnQgc2h1dGlsCi0KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5maWxlc2V0IGltcG9ydCBGaWxlU2V0RmlsZUhhbmRsZQogZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KLWltcG9ydCB3ZWJraXRweS5jb21t
b24uc3lzdGVtLm9zcGF0aCBhcyBvc3BhdGgKIAogCiBjbGFzcyBEaXJlY3RvcnlGaWxlU2V0KG9i
amVjdCk6CkBAIC0zNiw4ICszMCw4IEBAIGNsYXNzIERpcmVjdG9yeUZpbGVTZXQob2JqZWN0KToK
ICAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCwgZmlsZXN5c3RlbT1Ob25lKToKICAgICAgICAg
c2VsZi5fcGF0aCA9IHBhdGgKICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IGZpbGVzeXN0ZW0g
b3IgRmlsZVN5c3RlbSgpCi0gICAgICAgIGlmIG5vdCBzZWxmLl9wYXRoLmVuZHN3aXRoKG9zLnBh
dGguc2VwKToKLSAgICAgICAgICAgIHNlbGYuX3BhdGggKz0gb3MucGF0aC5zZXAKKyAgICAgICAg
aWYgbm90IHNlbGYuX3BhdGguZW5kc3dpdGgoc2VsZi5fZmlsZXN5c3RlbS5zZXApOgorICAgICAg
ICAgICAgc2VsZi5fcGF0aCArPSBzZWxmLl9maWxlc3lzdGVtLnNlcAogCiAgICAgZGVmIF9mdWxs
X3BhdGgoc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICBhc3NlcnQgc2VsZi5faXNfdW5kZXIoc2Vs
Zi5fcGF0aCwgZmlsZW5hbWUpCkBAIC01Miw3ICs0Niw3IEBAIGNsYXNzIERpcmVjdG9yeUZpbGVT
ZXQob2JqZWN0KToKICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uZmlsZXNfdW5kZXIo
c2VsZi5fcGF0aCkKIAogICAgIGRlZiBfaXNfdW5kZXIoc2VsZiwgZGlyLCBmaWxlbmFtZSk6Ci0g
ICAgICAgIHJldHVybiBib29sKG9zcGF0aC5yZWxwYXRoKHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihk
aXIsIGZpbGVuYW1lKSwgZGlyKSkKKyAgICAgICAgcmV0dXJuIGJvb2woc2VsZi5fZmlsZXN5c3Rl
bS5yZWxwYXRoKHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihkaXIsIGZpbGVuYW1lKSwgZGlyKSkKIAog
ICAgIGRlZiBvcGVuKHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAgcmV0dXJuIEZpbGVTZXRGaWxl
SGFuZGxlKHNlbGYsIGZpbGVuYW1lLCBzZWxmLl9maWxlc3lzdGVtKQpAQCAtNjksNyArNjMsNyBA
QCBjbGFzcyBEaXJlY3RvcnlGaWxlU2V0KG9iamVjdCk6CiAgICAgICAgIGRlc3QgPSBzZWxmLl9m
aWxlc3lzdGVtLmpvaW4ocGF0aCwgZmlsZW5hbWUpCiAgICAgICAgICMgQXMgZmlsZW5hbWUgbWF5
IGhhdmUgc2xhc2hlcyBpbiBpdCwgd2UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgc2FtZQogICAgICAg
ICAjIGRpcmVjdG9yeSBoaWVyYXJjaHkgZXhpc3RzIGF0IHRoZSBvdXRwdXQgcGF0aC4KLSAgICAg
ICAgc2VsZi5fZmlsZXN5c3RlbS5tYXliZV9tYWtlX2RpcmVjdG9yeShvcy5wYXRoLnNwbGl0KGRl
c3QpWzBdKQorICAgICAgICBzZWxmLl9maWxlc3lzdGVtLm1heWJlX21ha2VfZGlyZWN0b3J5KHNl
bGYuX2ZpbGVzeXN0ZW0uZGlybmFtZShkZXN0KSkKICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5j
b3B5ZmlsZShzcmMsIGRlc3QpCiAKICAgICBkZWYgZGVsZXRlKHNlbGYsIGZpbGVuYW1lKToKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc2V0LnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzZXQucHkKaW5kZXgg
MjJmN2M0ZDZkMDc0MTgyNGNiZjhkNWU3NTBhNTg3MDBlZTllOWY4Yy4uNTk4YzFjNTk1ZGU3NTJj
OTUyMmZmMWU3MjZkOTZhZjY0ZjAxODMyNiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL2ZpbGVzZXQucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL2ZpbGVzZXQucHkKQEAgLTIyLDcgKzIyLDYgQEAKICMgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
IAogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAotaW1wb3J0IG9zCiAKIGZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtIGltcG9ydCBGaWxlU3lzdGVtCiAK
QEAgLTM4LDYgKzM3LDkgQEAgY2xhc3MgRmlsZVNldEZpbGVIYW5kbGUob2JqZWN0KToKICAgICBk
ZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICIlczolcyIgJSAoc2VsZi5fZmlsZXNl
dCwgc2VsZi5fZmlsZW5hbWUpCiAKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHBhc3MK
KwogICAgIGRlZiBjb250ZW50cyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5fY29udGVudHMgaXMg
Tm9uZToKICAgICAgICAgICAgIHNlbGYuX2NvbnRlbnRzID0gc2VsZi5fZmlsZXNldC5yZWFkKHNl
bGYuX2ZpbGVuYW1lKQpAQCAtNjEsNCArNjMsNCBAQCBjbGFzcyBGaWxlU2V0RmlsZUhhbmRsZShv
YmplY3QpOgogICAgICAgICByZXR1cm4gc2VsZi5fZmlsZW5hbWUKIAogICAgIGRlZiBzcGxpdGV4
dChzZWxmKToKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguc3BsaXRleHQoc2VsZi5uYW1lKCkpCisg
ICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLnNwbGl0ZXh0KHNlbGYubmFtZSgpKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW0u
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weQpp
bmRleCBiMTVkNGMzZjY0OGMxNGE4NzNiNDNhZDhjNDMzYmU2MGFjOGM3YzM3Li5iY2Q3ZjIwNmI3
MzVkMzU5OGQ4MjQwYmJiZDcxNTk1YTc5OTBkYjQzIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weQpAQCAtMzksNiArMzksOCBAQCBp
bXBvcnQgc2h1dGlsCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB0aW1lCiAKK2Zyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgb3NwYXRoCisKIGNsYXNzIEZpbGVTeXN0ZW0ob2JqZWN0
KToKICAgICAiIiJGaWxlU3lzdGVtIGludGVyZmFjZSBmb3Igd2Via2l0cHkuCiAKQEAgLTIwMCw2
ICsyMDIsMTAgQEAgY2xhc3MgRmlsZVN5c3RlbShvYmplY3QpOgogICAgICAgICB3aXRoIGNvZGVj
cy5vcGVuKHBhdGgsICdyJywgJ3V0ZjgnKSBhcyBmOgogICAgICAgICAgICAgcmV0dXJuIGYucmVh
ZCgpCiAKKyAgICBkZWYgcmVscGF0aChzZWxmLCBwYXRoLCBzdGFydD0nLicpOgorICAgICAgICAi
IiJSZXR1cm5zIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIHN0YXJ0aW5nIHBvaW50LiIiIgor
ICAgICAgICByZXR1cm4gb3NwYXRoLnJlbHBhdGgocGF0aCwgc3RhcnQpCisKICAgICBjbGFzcyBf
V2luZG93c0Vycm9yKGV4Y2VwdGlvbnMuT1NFcnJvcik6CiAgICAgICAgICIiIkZha2UgZXhjZXB0
aW9uIGZvciBMaW51eCBhbmQgTWFjLiIiIgogICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5weQppbmRl
eCA4ZWMzMWRlZjNmZjBkYzEyNGYyNTgwZjYzMzViYzI0MWZjMWQyMzUwLi44YTEwNjhiNzI2NzA1
ZjIwOTZhMTI1OTk3OTk2YTU3NzUzOTBiODg4IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHkKQEAgLTI4LDkgKzI4
LDExIEBACiAKIGltcG9ydCBlcnJubwogaW1wb3J0IG9zCi1pbXBvcnQgcGF0aAogaW1wb3J0IHJl
CiAKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgcGF0aAorZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtIGltcG9ydCBvc3BhdGgKKwogCiBjbGFzcyBNb2NrRmlsZVN5c3RlbShv
YmplY3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlcz1Ob25lKToKQEAgLTUxLDEwICs1
MywxMiBAQCBjbGFzcyBNb2NrRmlsZVN5c3RlbShvYmplY3QpOgogICAgICAgICByYWlzZSBJT0Vy
cm9yKGVycm5vLkVOT0VOVCwgcGF0aCwgb3Muc3RyZXJyb3IoZXJybm8uRU5PRU5UKSkKIAogICAg
IGRlZiBfc3BsaXQoc2VsZiwgcGF0aCk6Ci0gICAgICAgIGlkeCA9IHBhdGgucmZpbmQoJy8nKQor
ICAgICAgICBpZHggPSBwYXRoLnJmaW5kKHNlbGYuc2VwKQogICAgICAgICByZXR1cm4gKHBhdGhb
MDppZHhdLCBwYXRoW2lkeCArIDE6XSkKIAogICAgIGRlZiBhYnNwYXRoKHNlbGYsIHBhdGgpOgor
ICAgICAgICBpZiBwYXRoLmVuZHN3aXRoKHNlbGYuc2VwKToKKyAgICAgICAgICAgIHJldHVybiBw
YXRoWzotMV0KICAgICAgICAgcmV0dXJuIHBhdGgKIAogICAgIGRlZiBiYXNlbmFtZShzZWxmLCBw
YXRoKToKQEAgLTkxLDEwICs5NSwxMCBAQCBjbGFzcyBNb2NrRmlsZVN5c3RlbShvYmplY3QpOgog
ICAgICAgICBpZiBzZWxmLmJhc2VuYW1lKHBhdGgpIGluIGRpcnNfdG9fc2tpcDoKICAgICAgICAg
ICAgIHJldHVybiBbXQogCi0gICAgICAgIGlmIG5vdCBwYXRoLmVuZHN3aXRoKCcvJyk6Ci0gICAg
ICAgICAgICBwYXRoICs9ICcvJworICAgICAgICBpZiBub3QgcGF0aC5lbmRzd2l0aChzZWxmLnNl
cCk6CisgICAgICAgICAgICBwYXRoICs9IHNlbGYuc2VwCiAKLSAgICAgICAgZGlyX3N1YnN0cmlu
Z3MgPSBbJy8nICsgZCArICcvJyBmb3IgZCBpbiBkaXJzX3RvX3NraXBdCisgICAgICAgIGRpcl9z
dWJzdHJpbmdzID0gW3NlbGYuc2VwICsgZCArIHNlbGYuc2VwIGZvciBkIGluIGRpcnNfdG9fc2tp
cF0KICAgICAgICAgZm9yIGZpbGVuYW1lIGluIHNlbGYuZmlsZXM6CiAgICAgICAgICAgICBpZiBu
b3QgZmlsZW5hbWUuc3RhcnRzd2l0aChwYXRoKToKICAgICAgICAgICAgICAgICBjb250aW51ZQpA
QCAtMTE4LDcgKzEyMiw3IEBAIGNsYXNzIE1vY2tGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAgICAg
ICAgICByZXR1cm4gW2YgZm9yIGYgaW4gc2VsZi5maWxlcyBpZiBmID09IHBhdGhdCiAKICAgICBk
ZWYgaXNhYnMoc2VsZiwgcGF0aCk6Ci0gICAgICAgIHJldHVybiBwYXRoLnN0YXJ0c3dpdGgoJy8n
KQorICAgICAgICByZXR1cm4gcGF0aC5zdGFydHN3aXRoKHNlbGYuc2VwKQogCiAgICAgZGVmIGlz
ZmlsZShzZWxmLCBwYXRoKToKICAgICAgICAgcmV0dXJuIHBhdGggaW4gc2VsZi5maWxlcyBhbmQg
c2VsZi5maWxlc1twYXRoXSBpcyBub3QgTm9uZQpAQCAtMTI2LDggKzEzMCw4IEBAIGNsYXNzIE1v
Y2tGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAgZGVmIGlzZGlyKHNlbGYsIHBhdGgpOgogICAgICAg
ICBpZiBwYXRoIGluIHNlbGYuZmlsZXM6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAg
ICAgaWYgbm90IHBhdGguZW5kc3dpdGgoJy8nKToKLSAgICAgICAgICAgIHBhdGggKz0gJy8nCisg
ICAgICAgIGlmIG5vdCBwYXRoLmVuZHN3aXRoKHNlbGYuc2VwKToKKyAgICAgICAgICAgIHBhdGgg
Kz0gc2VsZi5zZXAKIAogICAgICAgICAjIFdlIG5lZWQgdG8gdXNlIGEgY29weSBvZiB0aGUga2V5
cyBoZXJlIGluIG9yZGVyIHRvIGF2b2lkIHN3aXRjaGluZwogICAgICAgICAjIHRvIGEgZGlmZmVy
ZW50IHRocmVhZCBhbmQgcG90ZW50aWFsbHkgbW9kaWZ5aW5nIHRoZSBkaWN0IGluCkBAIC0xMzYs
MjIgKzE0MCwyNCBAQCBjbGFzcyBNb2NrRmlsZVN5c3RlbShvYmplY3QpOgogICAgICAgICByZXR1
cm4gYW55KGYuc3RhcnRzd2l0aChwYXRoKSBmb3IgZiBpbiBmaWxlcykKIAogICAgIGRlZiBqb2lu
KHNlbGYsICpjb21wcyk6Ci0gICAgICAgIHJldHVybiByZS5zdWIocmUuZXNjYXBlKG9zLnBhdGgu
c2VwKSwgJy8nLCBvcy5wYXRoLmpvaW4oKmNvbXBzKSkKKyAgICAgICAgIyBGSVhNRTogbWlnaHQg
d2FudCB0ZXN0cyBmb3IgdGhpcyBhbmQvb3IgYSBiZXR0ZXIgY29tbWVudCBhYm91dCBob3cKKyAg
ICAgICAgIyBpdCB3b3Jrcy4KKyAgICAgICAgcmV0dXJuIHJlLnN1YihyZS5lc2NhcGUob3MucGF0
aC5zZXApLCBzZWxmLnNlcCwgb3MucGF0aC5qb2luKCpjb21wcykpCiAKICAgICBkZWYgbGlzdGRp
cihzZWxmLCBwYXRoKToKICAgICAgICAgaWYgbm90IHNlbGYuaXNkaXIocGF0aCk6CiAgICAgICAg
ICAgICByYWlzZSBPU0Vycm9yKCIlcyBpcyBub3QgYSBkaXJlY3RvcnkiICUgcGF0aCkKIAotICAg
ICAgICBpZiBub3QgcGF0aC5lbmRzd2l0aCgnLycpOgotICAgICAgICAgICAgcGF0aCArPSAnLycK
KyAgICAgICAgaWYgbm90IHBhdGguZW5kc3dpdGgoc2VsZi5zZXApOgorICAgICAgICAgICAgcGF0
aCArPSBzZWxmLnNlcAogCiAgICAgICAgIGRpcnMgPSBbXQogICAgICAgICBmaWxlcyA9IFtdCiAg
ICAgICAgIGZvciBmIGluIHNlbGYuZmlsZXM6CiAgICAgICAgICAgICBpZiBzZWxmLmV4aXN0cyhm
KSBhbmQgZi5zdGFydHN3aXRoKHBhdGgpOgogICAgICAgICAgICAgICAgIHJlbWFpbmluZyA9IGZb
bGVuKHBhdGgpOl0KLSAgICAgICAgICAgICAgICBpZiAnLycgaW4gcmVtYWluaW5nOgotICAgICAg
ICAgICAgICAgICAgICBkaXIgPSByZW1haW5pbmdbOnJlbWFpbmluZy5pbmRleCgnLycpXQorICAg
ICAgICAgICAgICAgIGlmIHNlbGYuc2VwIGluIHJlbWFpbmluZzoKKyAgICAgICAgICAgICAgICAg
ICAgZGlyID0gcmVtYWluaW5nWzpyZW1haW5pbmcuaW5kZXgoc2VsZi5zZXApXQogICAgICAgICAg
ICAgICAgICAgICBpZiBub3QgZGlyIGluIGRpcnM6CiAgICAgICAgICAgICAgICAgICAgICAgICBk
aXJzLmFwcGVuZChkaXIpCiAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTE2NSw3ICsxNzEsNyBA
QCBjbGFzcyBNb2NrRmlsZVN5c3RlbShvYmplY3QpOgogCiAgICAgZGVmIF9ta3RlbXAoc2VsZiwg
c3VmZml4PScnLCBwcmVmaXg9J3RtcCcsIGRpcj1Ob25lLCAqKmt3YXJncyk6CiAgICAgICAgIGlm
IGRpciBpcyBOb25lOgotICAgICAgICAgICAgZGlyID0gJy9fX2ltX3RtcCcKKyAgICAgICAgICAg
IGRpciA9IHNlbGYuc2VwICsgJ19faW1fdG1wJwogICAgICAgICBjdXJubyA9IHNlbGYuY3VycmVu
dF90bXBubwogICAgICAgICBzZWxmLmN1cnJlbnRfdG1wbm8gKz0gMQogICAgICAgICByZXR1cm4g
c2VsZi5qb2luKGRpciwgIiVzXyV1XyVzIiAlIChwcmVmaXgsIGN1cm5vLCBzdWZmaXgpKQpAQCAt
MjI0LDYgKzIzMCw5IEBAIGNsYXNzIE1vY2tGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAgICAgICAg
ICBzZWxmLl9yYWlzZV9ub3RfZm91bmQocGF0aCkKICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXNb
cGF0aF0KIAorICAgIGRlZiByZWxwYXRoKHNlbGYsIHBhdGgsIHN0YXJ0PScuJyk6CisgICAgICAg
IHJldHVybiBvc3BhdGgucmVscGF0aChwYXRoLCBzdGFydCwgc2VsZi5hYnNwYXRoLCBzZWxmLnNl
cCkKKwogICAgIGRlZiByZW1vdmUoc2VsZiwgcGF0aCk6CiAgICAgICAgIGlmIHNlbGYuZmlsZXNb
cGF0aF0gaXMgTm9uZToKICAgICAgICAgICAgIHNlbGYuX3JhaXNlX25vdF9mb3VuZChwYXRoKQpA
QCAtMjMxLDggKzI0MCw4IEBAIGNsYXNzIE1vY2tGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAgICAg
IHNlbGYud3JpdHRlbl9maWxlc1twYXRoXSA9IE5vbmUKIAogICAgIGRlZiBybXRyZWUoc2VsZiwg
cGF0aCk6Ci0gICAgICAgIGlmIG5vdCBwYXRoLmVuZHN3aXRoKCcvJyk6Ci0gICAgICAgICAgICBw
YXRoICs9ICcvJworICAgICAgICBpZiBub3QgcGF0aC5lbmRzd2l0aChzZWxmLnNlcCk6CisgICAg
ICAgICAgICBwYXRoICs9IHNlbGYuc2VwCiAKICAgICAgICAgZm9yIGYgaW4gc2VsZi5maWxlczoK
ICAgICAgICAgICAgIGlmIGYuc3RhcnRzd2l0aChwYXRoKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9vc3BhdGgucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vb3NwYXRoLnB5CmluZGV4IGFlZDdhM2QyMjMzMjQyMzY3NWI1
ZjQ2NzQxMmNkOGRmMDJjNTFhNDAuLjI1MDQ2NDVjMDRjYTVhOTcxYmZiZTlhNzQ0NzM5ZmU0ODg5
ZTkyNTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9v
c3BhdGgucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL29zcGF0
aC5weQpAQCAtMzIsNyArMzIsNyBAQCBpbXBvcnQgb3MKICMKICMgSXQgc2hvdWxkIGJlaGF2ZSBl
c3NlbnRpYWxseSB0aGUgc2FtZSBhcyBvcy5wYXRoLnJlbHBhdGgoKSwgZXhjZXB0IGZvcgogIyBy
ZXR1cm5pbmcgTm9uZSBvbiBwYXRocyBub3QgY29udGFpbmVkIGluIGFic19zdGFydF9wYXRoLgot
ZGVmIHJlbHBhdGgocGF0aCwgc3RhcnRfcGF0aCwgb3NfcGF0aF9hYnNwYXRoPU5vbmUpOgorZGVm
IHJlbHBhdGgocGF0aCwgc3RhcnRfcGF0aCwgb3NfcGF0aF9hYnNwYXRoPU5vbmUsIHNlcD1Ob25l
KToKICAgICAiIiJSZXR1cm4gYSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBzdGFydCBwYXRo
LCBvciBOb25lLgogCiAgICAgUmV0dXJucyBOb25lIGlmIHRoZSBwYXRoIGlzIG5vdCBjb250YWlu
ZWQgaW4gdGhlIGRpcmVjdG9yeSBzdGFydF9wYXRoLgpAQCAtNDQsMTAgKzQ0LDEyIEBAIGRlZiBy
ZWxwYXRoKHBhdGgsIHN0YXJ0X3BhdGgsIG9zX3BhdGhfYWJzcGF0aD1Ob25lKToKICAgICAgIG9z
X3BhdGhfYWJzcGF0aDogQSByZXBsYWNlbWVudCBmdW5jdGlvbiBmb3IgdW5pdCB0ZXN0aW5nLiAg
VGhpcwogICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzaG91bGQgc3RyaXAgdHJhaWxp
bmcgc2xhc2hlcyBqdXN0IGxpa2UKICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5hYnNw
YXRoKCkuICBEZWZhdWx0cyB0byBvcy5wYXRoLmFic3BhdGguCisgICAgICBzZXA6IFBhdGggc2Vw
YXJhdG9yLiAgRGVmYXVsdHMgdG8gb3MucGF0aC5zZXAKIAogICAgICIiIgogICAgIGlmIG9zX3Bh
dGhfYWJzcGF0aCBpcyBOb25lOgogICAgICAgICBvc19wYXRoX2Fic3BhdGggPSBvcy5wYXRoLmFi
c3BhdGgKKyAgICBzZXAgPSBzZXAgb3Igb3Muc2VwCiAKICAgICAjIFNpbmNlIG9zX3BhdGhfYWJz
cGF0aCgpIGNhbGxzIG9zLnBhdGgubm9ybXBhdGgoKS0tCiAgICAgIwpAQCAtNjcsMTEgKzY5LDEx
IEBAIGRlZiByZWxwYXRoKHBhdGgsIHN0YXJ0X3BhdGgsIG9zX3BhdGhfYWJzcGF0aD1Ob25lKToK
ICAgICBpZiBub3QgcmVsX3BhdGg6CiAgICAgICAgICMgVGhlbiB0aGUgcGF0aHMgYXJlIHRoZSBz
YW1lLgogICAgICAgICBwYXNzCi0gICAgZWxpZiByZWxfcGF0aFswXSA9PSBvcy5zZXA6CisgICAg
ZWxpZiByZWxfcGF0aFswXSA9PSBzZXA6CiAgICAgICAgICMgSXQgaXMgcHJvYmFibHkgc3VmZmlj
aWVudCB0byByZW1vdmUganVzdCB0aGUgZmlyc3QgY2hhcmFjdGVyCiAgICAgICAgICMgc2luY2Ug
b3MucGF0aC5ub3JtcGF0aCgpIGNvbGxhcHNlcyBzZXBhcmF0b3JzLCBidXQgd2UgdXNlCiAgICAg
ICAgICMgbHN0cmlwKCkganVzdCB0byBiZSBzdXJlLgotICAgICAgICByZWxfcGF0aCA9IHJlbF9w
YXRoLmxzdHJpcChvcy5zZXApCisgICAgICAgIHJlbF9wYXRoID0gcmVsX3BhdGgubHN0cmlwKHNl
cCkKICAgICBlbHNlOgogICAgICAgICAjIFdlIGFyZSBpbiB0aGUgY2FzZSB0eXBpZmllZCBieSB0
aGUgZm9sbG93aW5nIGV4YW1wbGU6CiAgICAgICAgICMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS96aXBmaWxlc2V0LnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3ppcGZpbGVzZXQucHkKaW5kZXggZmEyYjc2Mjc1ZTRmMDc2
Njg0MWRiMDEzNTgwZjZlYTdlMTQ5ZDIwNS4uNWNmMzYxNmVjMDQxYzEyZDYwMjY1NjBlMmE0MWQz
YTJlNDUzYjE3NyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL3ppcGZpbGVzZXQucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL3ppcGZpbGVzZXQucHkKQEAgLTMzLDIyICszMywyOCBAQCBjbGFzcyBaaXBGaWxlU2V0KG9i
amVjdCk6CiAgICAgIiIiVGhlIHNldCBvZiBmaWxlcyBpbiBhIHppcCBmaWxlIHRoYXQgcmVzaWRl
cyBhdCBhIFVSTCAobG9jYWwgb3IgcmVtb3RlKSIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB6
aXBfdXJsLCBmaWxlc3lzdGVtPU5vbmUsIHppcF9mYWN0b3J5PU5vbmUpOgogICAgICAgICBzZWxm
Ll96aXBfdXJsID0gemlwX3VybAorICAgICAgICBzZWxmLl90ZW1wX2ZpbGUgPSBOb25lCiAgICAg
ICAgIHNlbGYuX3ppcF9maWxlID0gTm9uZQogICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gZmls
ZXN5c3RlbSBvciBGaWxlU3lzdGVtKCkKICAgICAgICAgc2VsZi5femlwX2ZhY3RvcnkgPSB6aXBf
ZmFjdG9yeSBvciBzZWxmLl9yZXRyaWV2ZV96aXBfZmlsZQogCiAgICAgZGVmIF9yZXRyaWV2ZV96
aXBfZmlsZShzZWxmLCB6aXBfdXJsKToKICAgICAgICAgdGVtcF9maWxlID0gTmV0d29ya1RyYW5z
YWN0aW9uKCkucnVuKGxhbWJkYTogdXJsbGliLnVybHJldHJpZXZlKHppcF91cmwpWzBdKQotICAg
ICAgICByZXR1cm4gemlwZmlsZS5aaXBGaWxlKHRlbXBfZmlsZSkKKyAgICAgICAgcmV0dXJuICh0
ZW1wX2ZpbGUsIHppcGZpbGUuWmlwRmlsZSh0ZW1wX2ZpbGUpKQogCiAgICAgZGVmIF9sb2FkKHNl
bGYpOgogICAgICAgICBpZiBzZWxmLl96aXBfZmlsZSBpcyBOb25lOgotICAgICAgICAgICAgc2Vs
Zi5femlwX2ZpbGUgPSBzZWxmLl96aXBfZmFjdG9yeShzZWxmLl96aXBfdXJsKQorICAgICAgICAg
ICAgc2VsZi5fdGVtcF9maWxlLCBzZWxmLl96aXBfZmlsZSA9IHNlbGYuX3ppcF9mYWN0b3J5KHNl
bGYuX3ppcF91cmwpCiAKICAgICBkZWYgb3BlbihzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgIHNl
bGYuX2xvYWQoKQogICAgICAgICByZXR1cm4gRmlsZVNldEZpbGVIYW5kbGUoc2VsZiwgZmlsZW5h
bWUsIHNlbGYuX2ZpbGVzeXN0ZW0pCiAKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlm
IHNlbGYuX3RlbXBfZmlsZToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKHNl
bGYuX3RlbXBfZmlsZSkKKyAgICAgICAgICAgIHNlbGYuX3RlbXBfZmlsZSA9IE5vbmUKKwogICAg
IGRlZiBuYW1lbGlzdChzZWxmKToKICAgICAgICAgc2VsZi5fbG9hZCgpCiAgICAgICAgIHJldHVy
biBzZWxmLl96aXBfZmlsZS5uYW1lbGlzdCgpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vemlwZmlsZXNldF91bml0dGVzdC5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS96aXBmaWxlc2V0X3VuaXR0ZXN0LnB5CmluZGV4IGE5
YmE1YWQ4YTE3NTViN2I2YjNmYjM5NWU1NTZjNTU2ZjBjYjVkZTUuLjY4MDE0MDY4MDVlOWE4YTA0
NWFlYzU2NzRhNjgxN2MwODljNzE3YjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS96aXBmaWxlc2V0X3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS96aXBmaWxlc2V0X3VuaXR0ZXN0LnB5CkBAIC02NCwx
MyArNjQsMTcgQEAgY2xhc3MgWmlwRmlsZVNldFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAg
ICAgICByZXN1bHQgPSBGYWtlWmlwKHNlbGYuX2ZpbGVzeXN0ZW0pCiAgICAgICAgIHJlc3VsdC5h
ZGRfZmlsZSgnc29tZS1maWxlJywgJ2NvbnRlbnRzJykKICAgICAgICAgcmVzdWx0LmFkZF9maWxl
KCdhL2Ivc29tZS1vdGhlci1maWxlJywgJ290aGVyIGNvbnRlbnRzJykKLSAgICAgICAgcmV0dXJu
IHJlc3VsdAorICAgICAgICByZXR1cm4gKE5vbmUsIHJlc3VsdCkKIAogICAgIGRlZiB0ZXN0X29w
ZW4oc2VsZik6CiAgICAgICAgIGZpbGUgPSBzZWxmLl96aXAub3BlbignYS9iL3NvbWUtb3RoZXIt
ZmlsZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdhL2Ivc29tZS1vdGhlci1maWxlJywg
ZmlsZS5uYW1lKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdvdGhlciBjb250ZW50cycs
IGZpbGUuY29udGVudHMoKSkKIAorICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICB6
aXBmaWxlc2V0ID0gWmlwRmlsZVNldCgnYmxhaCcsIHNlbGYuX2ZpbGVzeXN0ZW0sIHNlbGYubWFr
ZV9mYWtlX3ppcCkKKyAgICAgICAgemlwZmlsZXNldC5jbG9zZSgpCisKICAgICBkZWYgdGVzdF9y
ZWFkKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnY29udGVudHMnLCBzZWxmLl96
aXAucmVhZCgnc29tZS1maWxlJykpCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80499</attachid>
            <date>2011-01-28 14:53:55 -0800</date>
            <delta_ts>2011-01-28 15:30:37 -0800</delta_ts>
            <desc>add tests for fs.sep, make it readonly</desc>
            <filename>bug-53326-20110128145354.patch</filename>
            <type>text/plain</type>
            <size>16169</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5M2Yy
MDBhMzkyNTNjODVhNzUwNjY2MmM3N2M5OGU1NGIzNTMzMGNiLi5iYzgxMTY0MWM4ZmUzNWQ3MjU1
NmVlZmZmNzlhODdlODc5OWZiYTA1IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzEgQEAKIDIwMTEtMDEtMjcgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgb2YgdGhlIGZpbGVzeXN0ZW0tcmVsYXRlZCBtb2R1
bGVzIHVzZWQgaW4gd2Via2l0cHkuCisgICAgICAgIEkndmUgYWRkZWQgcmVscGF0aCgpIHRvIHRo
ZSBmaWxlc3lzdGVtIGludGVyZmFjZSwgbW9kaWZpZWQKKyAgICAgICAgb3NwYXRoLnJlbHBhdGgo
KSBzbyB0aGF0IGl0IGNvdWxkIHdvcmsgd2l0aCB0aGUgZmlsZXN5c3RlbQorICAgICAgICBpbnRl
cmZhY2UsIGFuZCBtb2RpZmllZCB0aGUgZmlsZXNldCogcm91dGluZXMgdG8gdXNlIHRoZQorICAg
ICAgICBmaWxlc3lzdGVtIGludGVyZmFjZSBjb25zaXN0ZW50bHkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhbHNvIGFkZHMgYSBjbG9zZSgpIHJvdXRpbmUgdG8gdGhlIGZpbGVzZXQgcm91dGluZXMK
KyAgICAgICAgdG8gaW5kaWNhdGUgdGhhdCB0aGUgY2FsbGVyIGlzIGRvbmUgd2l0aCB0aGUgZmls
ZXNldC4gVGhpcworICAgICAgICBhbGxvd3MgemlwZmlsZXNldCB0byBjbGVhbiB1cCBhZnRlciBp
dHNlbGYgd2hlbiBpdCBjcmVhdGVzCisgICAgICAgIHRlbXBmaWxlcyB0byBzdG9yZSBkb3dubG9h
ZHMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUz
MzI2CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZGlyZWN0b3J5
ZmlsZXNldC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmls
ZXNldC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5
c3RlbS5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5
c3RlbV9tb2NrLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9m
aWxlc3lzdGVtX3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9vc3BhdGgucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL3ppcGZpbGVzZXQucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL3ppcGZpbGVzZXRfdW5pdHRlc3QucHk6CisKKzIwMTEtMDEtMjcgIERpcmsgUHJhbmtlICA8
ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgUmV2aWV3ZWQgYnkgTWloYWkgUGFycGFy
aXRhLgogCiAgICAgICAgIG5ldy1ydW4td2Via2l0LXRlc3RzOiB0dXJuIG9mZiBwaXhlbCB0ZXN0
cyBjb3JyZWN0bHkgYnkgZGVmYXVsdApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL2RpcmVjdG9yeWZpbGVzZXQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vZGlyZWN0b3J5ZmlsZXNldC5weQppbmRleCAxMWFjYWY0ZWIyZmQy
NzE2NWY4YmRlMmZmOWM5YjJiOTI3YTAzNzlkLi5hNWNhYjBlOTRhNGQ1Y2NiZTA0MmY1MDc3MjRk
NjUwYmI1YzE2OWFmIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vZGlyZWN0b3J5ZmlsZXNldC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vZGlyZWN0b3J5ZmlsZXNldC5weQpAQCAtMjEsMTQgKzIxLDggQEAKICMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCiAjIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9z
dGF0ZW1lbnQKLQotaW1wb3J0IG9zCi1pbXBvcnQgc2h1dGlsCi0KIGZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5maWxlc2V0IGltcG9ydCBGaWxlU2V0RmlsZUhhbmRsZQogZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KLWltcG9ydCB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLm9zcGF0aCBhcyBvc3BhdGgKIAogCiBjbGFzcyBEaXJlY3RvcnlG
aWxlU2V0KG9iamVjdCk6CkBAIC0zNiw4ICszMCw4IEBAIGNsYXNzIERpcmVjdG9yeUZpbGVTZXQo
b2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCwgZmlsZXN5c3RlbT1Ob25lKToK
ICAgICAgICAgc2VsZi5fcGF0aCA9IHBhdGgKICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IGZp
bGVzeXN0ZW0gb3IgRmlsZVN5c3RlbSgpCi0gICAgICAgIGlmIG5vdCBzZWxmLl9wYXRoLmVuZHN3
aXRoKG9zLnBhdGguc2VwKToKLSAgICAgICAgICAgIHNlbGYuX3BhdGggKz0gb3MucGF0aC5zZXAK
KyAgICAgICAgaWYgbm90IHNlbGYuX3BhdGguZW5kc3dpdGgoc2VsZi5fZmlsZXN5c3RlbS5zZXAp
OgorICAgICAgICAgICAgc2VsZi5fcGF0aCArPSBzZWxmLl9maWxlc3lzdGVtLnNlcAogCiAgICAg
ZGVmIF9mdWxsX3BhdGgoc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICBhc3NlcnQgc2VsZi5faXNf
dW5kZXIoc2VsZi5fcGF0aCwgZmlsZW5hbWUpCkBAIC01Miw3ICs0Niw3IEBAIGNsYXNzIERpcmVj
dG9yeUZpbGVTZXQob2JqZWN0KToKICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uZmls
ZXNfdW5kZXIoc2VsZi5fcGF0aCkKIAogICAgIGRlZiBfaXNfdW5kZXIoc2VsZiwgZGlyLCBmaWxl
bmFtZSk6Ci0gICAgICAgIHJldHVybiBib29sKG9zcGF0aC5yZWxwYXRoKHNlbGYuX2ZpbGVzeXN0
ZW0uam9pbihkaXIsIGZpbGVuYW1lKSwgZGlyKSkKKyAgICAgICAgcmV0dXJuIGJvb2woc2VsZi5f
ZmlsZXN5c3RlbS5yZWxwYXRoKHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihkaXIsIGZpbGVuYW1lKSwg
ZGlyKSkKIAogICAgIGRlZiBvcGVuKHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAgcmV0dXJuIEZp
bGVTZXRGaWxlSGFuZGxlKHNlbGYsIGZpbGVuYW1lLCBzZWxmLl9maWxlc3lzdGVtKQpAQCAtNjks
NyArNjMsNyBAQCBjbGFzcyBEaXJlY3RvcnlGaWxlU2V0KG9iamVjdCk6CiAgICAgICAgIGRlc3Qg
PSBzZWxmLl9maWxlc3lzdGVtLmpvaW4ocGF0aCwgZmlsZW5hbWUpCiAgICAgICAgICMgQXMgZmls
ZW5hbWUgbWF5IGhhdmUgc2xhc2hlcyBpbiBpdCwgd2UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgc2Ft
ZQogICAgICAgICAjIGRpcmVjdG9yeSBoaWVyYXJjaHkgZXhpc3RzIGF0IHRoZSBvdXRwdXQgcGF0
aC4KLSAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5tYXliZV9tYWtlX2RpcmVjdG9yeShvcy5wYXRo
LnNwbGl0KGRlc3QpWzBdKQorICAgICAgICBzZWxmLl9maWxlc3lzdGVtLm1heWJlX21ha2VfZGly
ZWN0b3J5KHNlbGYuX2ZpbGVzeXN0ZW0uZGlybmFtZShkZXN0KSkKICAgICAgICAgc2VsZi5fZmls
ZXN5c3RlbS5jb3B5ZmlsZShzcmMsIGRlc3QpCiAKICAgICBkZWYgZGVsZXRlKHNlbGYsIGZpbGVu
YW1lKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9m
aWxlc2V0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzZXQu
cHkKaW5kZXggMjJmN2M0ZDZkMDc0MTgyNGNiZjhkNWU3NTBhNTg3MDBlZTllOWY4Yy4uNTk4YzFj
NTk1ZGU3NTJjOTUyMmZmMWU3MjZkOTZhZjY0ZjAxODMyNiAxMDA2NDQKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzZXQucHkKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzZXQucHkKQEAgLTIyLDcgKzIyLDYgQEAKICMg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KIAogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAotaW1wb3J0
IG9zCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtIGltcG9ydCBGaWxl
U3lzdGVtCiAKQEAgLTM4LDYgKzM3LDkgQEAgY2xhc3MgRmlsZVNldEZpbGVIYW5kbGUob2JqZWN0
KToKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICIlczolcyIgJSAoc2Vs
Zi5fZmlsZXNldCwgc2VsZi5fZmlsZW5hbWUpCiAKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAg
ICAgIHBhc3MKKwogICAgIGRlZiBjb250ZW50cyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5fY29u
dGVudHMgaXMgTm9uZToKICAgICAgICAgICAgIHNlbGYuX2NvbnRlbnRzID0gc2VsZi5fZmlsZXNl
dC5yZWFkKHNlbGYuX2ZpbGVuYW1lKQpAQCAtNjEsNCArNjMsNCBAQCBjbGFzcyBGaWxlU2V0Rmls
ZUhhbmRsZShvYmplY3QpOgogICAgICAgICByZXR1cm4gc2VsZi5fZmlsZW5hbWUKIAogICAgIGRl
ZiBzcGxpdGV4dChzZWxmKToKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguc3BsaXRleHQoc2VsZi5u
YW1lKCkpCisgICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLnNwbGl0ZXh0KHNlbGYubmFt
ZSgpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2Zp
bGVzeXN0ZW0ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5
c3RlbS5weQppbmRleCBiMTVkNGMzZjY0OGMxNGE4NzNiNDNhZDhjNDMzYmU2MGFjOGM3YzM3Li5m
MzhjY2IyODE1NDFhMTI4MmZkNWNlNWRmNjJkZGEzNjU1ZGU4ZWE5IDEwMDY0NAotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weQpAQCAtMzksMTMg
KzM5LDIwIEBAIGltcG9ydCBzaHV0aWwKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHRpbWUKIAor
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBvc3BhdGgKKwogY2xhc3MgRmlsZVN5
c3RlbShvYmplY3QpOgogICAgICIiIkZpbGVTeXN0ZW0gaW50ZXJmYWNlIGZvciB3ZWJraXRweS4K
IAogICAgIFVubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCBwYXRocyBhcmUgYWxsb3dlZCB0byBi
ZSBlaXRoZXIgYWJzb2x1dGUKICAgICBvciByZWxhdGl2ZS4iIiIKICAgICBkZWYgX19pbml0X18o
c2VsZik6Ci0gICAgICAgIHNlbGYuc2VwID0gb3Muc2VwCisgICAgICAgIHNlbGYuX3NlcCA9IG9z
LnNlcAorCisgICAgZGVmIF9nZXRfc2VwKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc2Vw
CisKKyAgICBzZXAgPSBwcm9wZXJ0eShfZ2V0X3NlcCwgZG9jPSJwYXRobmFtZSBzZXBhcmF0b3Ii
KQogCiAgICAgZGVmIGFic3BhdGgoc2VsZiwgcGF0aCk6CiAgICAgICAgIHJldHVybiBvcy5wYXRo
LmFic3BhdGgocGF0aCkKQEAgLTIwMCw2ICsyMDcsMTAgQEAgY2xhc3MgRmlsZVN5c3RlbShvYmpl
Y3QpOgogICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHBhdGgsICdyJywgJ3V0ZjgnKSBhcyBmOgog
ICAgICAgICAgICAgcmV0dXJuIGYucmVhZCgpCiAKKyAgICBkZWYgcmVscGF0aChzZWxmLCBwYXRo
LCBzdGFydD0nLicpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20g
dGhlIHN0YXJ0aW5nIHBvaW50LiIiIgorICAgICAgICByZXR1cm4gb3NwYXRoLnJlbHBhdGgocGF0
aCwgc3RhcnQpCisKICAgICBjbGFzcyBfV2luZG93c0Vycm9yKGV4Y2VwdGlvbnMuT1NFcnJvcik6
CiAgICAgICAgICIiIkZha2UgZXhjZXB0aW9uIGZvciBMaW51eCBhbmQgTWFjLiIiIgogICAgICAg
ICBwYXNzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
ZmlsZXN5c3RlbV9tb2NrLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L2ZpbGVzeXN0ZW1fbW9jay5weQppbmRleCA4ZWMzMWRlZjNmZjBkYzEyNGYyNTgwZjYzMzViYzI0
MWZjMWQyMzUwLi40NTM5ZDc5ZTIwMzkxNDUwM2I2Y2Q1MGE3OGRhMTUxNTk5ZTFmYzlhIDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9t
b2NrLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lz
dGVtX21vY2sucHkKQEAgLTI4LDkgKzI4LDExIEBACiAKIGltcG9ydCBlcnJubwogaW1wb3J0IG9z
Ci1pbXBvcnQgcGF0aAogaW1wb3J0IHJlCiAKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBp
bXBvcnQgcGF0aAorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBvc3BhdGgKKwog
CiBjbGFzcyBNb2NrRmlsZVN5c3RlbShvYmplY3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBm
aWxlcz1Ob25lKToKQEAgLTQ0LDE3ICs0NiwyNCBAQCBjbGFzcyBNb2NrRmlsZVN5c3RlbShvYmpl
Y3QpOgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5maWxlcyA9IGZpbGVzIG9yIHt9CiAgICAg
ICAgIHNlbGYud3JpdHRlbl9maWxlcyA9IHt9Ci0gICAgICAgIHNlbGYuc2VwID0gJy8nCisgICAg
ICAgIHNlbGYuX3NlcCA9ICcvJwogICAgICAgICBzZWxmLmN1cnJlbnRfdG1wbm8gPSAwCiAKKyAg
ICBkZWYgX2dldF9zZXAoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zZXAKKworICAgIHNl
cCA9IHByb3BlcnR5KF9nZXRfc2VwLCBkb2M9InBhdGhuYW1lIHNlcGFyYXRvciIpCisKICAgICBk
ZWYgX3JhaXNlX25vdF9mb3VuZChzZWxmLCBwYXRoKToKICAgICAgICAgcmFpc2UgSU9FcnJvcihl
cnJuby5FTk9FTlQsIHBhdGgsIG9zLnN0cmVycm9yKGVycm5vLkVOT0VOVCkpCiAKICAgICBkZWYg
X3NwbGl0KHNlbGYsIHBhdGgpOgotICAgICAgICBpZHggPSBwYXRoLnJmaW5kKCcvJykKKyAgICAg
ICAgaWR4ID0gcGF0aC5yZmluZChzZWxmLnNlcCkKICAgICAgICAgcmV0dXJuIChwYXRoWzA6aWR4
XSwgcGF0aFtpZHggKyAxOl0pCiAKICAgICBkZWYgYWJzcGF0aChzZWxmLCBwYXRoKToKKyAgICAg
ICAgaWYgcGF0aC5lbmRzd2l0aChzZWxmLnNlcCk6CisgICAgICAgICAgICByZXR1cm4gcGF0aFs6
LTFdCiAgICAgICAgIHJldHVybiBwYXRoCiAKICAgICBkZWYgYmFzZW5hbWUoc2VsZiwgcGF0aCk6
CkBAIC05MSwxMCArMTAwLDEwIEBAIGNsYXNzIE1vY2tGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAg
ICAgIGlmIHNlbGYuYmFzZW5hbWUocGF0aCkgaW4gZGlyc190b19za2lwOgogICAgICAgICAgICAg
cmV0dXJuIFtdCiAKLSAgICAgICAgaWYgbm90IHBhdGguZW5kc3dpdGgoJy8nKToKLSAgICAgICAg
ICAgIHBhdGggKz0gJy8nCisgICAgICAgIGlmIG5vdCBwYXRoLmVuZHN3aXRoKHNlbGYuc2VwKToK
KyAgICAgICAgICAgIHBhdGggKz0gc2VsZi5zZXAKIAotICAgICAgICBkaXJfc3Vic3RyaW5ncyA9
IFsnLycgKyBkICsgJy8nIGZvciBkIGluIGRpcnNfdG9fc2tpcF0KKyAgICAgICAgZGlyX3N1YnN0
cmluZ3MgPSBbc2VsZi5zZXAgKyBkICsgc2VsZi5zZXAgZm9yIGQgaW4gZGlyc190b19za2lwXQog
ICAgICAgICBmb3IgZmlsZW5hbWUgaW4gc2VsZi5maWxlczoKICAgICAgICAgICAgIGlmIG5vdCBm
aWxlbmFtZS5zdGFydHN3aXRoKHBhdGgpOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCkBAIC0x
MTgsNyArMTI3LDcgQEAgY2xhc3MgTW9ja0ZpbGVTeXN0ZW0ob2JqZWN0KToKICAgICAgICAgICAg
IHJldHVybiBbZiBmb3IgZiBpbiBzZWxmLmZpbGVzIGlmIGYgPT0gcGF0aF0KIAogICAgIGRlZiBp
c2FicyhzZWxmLCBwYXRoKToKLSAgICAgICAgcmV0dXJuIHBhdGguc3RhcnRzd2l0aCgnLycpCisg
ICAgICAgIHJldHVybiBwYXRoLnN0YXJ0c3dpdGgoc2VsZi5zZXApCiAKICAgICBkZWYgaXNmaWxl
KHNlbGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gcGF0aCBpbiBzZWxmLmZpbGVzIGFuZCBzZWxm
LmZpbGVzW3BhdGhdIGlzIG5vdCBOb25lCkBAIC0xMjYsOCArMTM1LDggQEAgY2xhc3MgTW9ja0Zp
bGVTeXN0ZW0ob2JqZWN0KToKICAgICBkZWYgaXNkaXIoc2VsZiwgcGF0aCk6CiAgICAgICAgIGlm
IHBhdGggaW4gc2VsZi5maWxlczoKICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBp
ZiBub3QgcGF0aC5lbmRzd2l0aCgnLycpOgotICAgICAgICAgICAgcGF0aCArPSAnLycKKyAgICAg
ICAgaWYgbm90IHBhdGguZW5kc3dpdGgoc2VsZi5zZXApOgorICAgICAgICAgICAgcGF0aCArPSBz
ZWxmLnNlcAogCiAgICAgICAgICMgV2UgbmVlZCB0byB1c2UgYSBjb3B5IG9mIHRoZSBrZXlzIGhl
cmUgaW4gb3JkZXIgdG8gYXZvaWQgc3dpdGNoaW5nCiAgICAgICAgICMgdG8gYSBkaWZmZXJlbnQg
dGhyZWFkIGFuZCBwb3RlbnRpYWxseSBtb2RpZnlpbmcgdGhlIGRpY3QgaW4KQEAgLTEzNiwyMiAr
MTQ1LDI0IEBAIGNsYXNzIE1vY2tGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBh
bnkoZi5zdGFydHN3aXRoKHBhdGgpIGZvciBmIGluIGZpbGVzKQogCiAgICAgZGVmIGpvaW4oc2Vs
ZiwgKmNvbXBzKToKLSAgICAgICAgcmV0dXJuIHJlLnN1YihyZS5lc2NhcGUob3MucGF0aC5zZXAp
LCAnLycsIG9zLnBhdGguam9pbigqY29tcHMpKQorICAgICAgICAjIEZJWE1FOiBtaWdodCB3YW50
IHRlc3RzIGZvciB0aGlzIGFuZC9vciBhIGJldHRlciBjb21tZW50IGFib3V0IGhvdworICAgICAg
ICAjIGl0IHdvcmtzLgorICAgICAgICByZXR1cm4gcmUuc3ViKHJlLmVzY2FwZShvcy5wYXRoLnNl
cCksIHNlbGYuc2VwLCBvcy5wYXRoLmpvaW4oKmNvbXBzKSkKIAogICAgIGRlZiBsaXN0ZGlyKHNl
bGYsIHBhdGgpOgogICAgICAgICBpZiBub3Qgc2VsZi5pc2RpcihwYXRoKToKICAgICAgICAgICAg
IHJhaXNlIE9TRXJyb3IoIiVzIGlzIG5vdCBhIGRpcmVjdG9yeSIgJSBwYXRoKQogCi0gICAgICAg
IGlmIG5vdCBwYXRoLmVuZHN3aXRoKCcvJyk6Ci0gICAgICAgICAgICBwYXRoICs9ICcvJworICAg
ICAgICBpZiBub3QgcGF0aC5lbmRzd2l0aChzZWxmLnNlcCk6CisgICAgICAgICAgICBwYXRoICs9
IHNlbGYuc2VwCiAKICAgICAgICAgZGlycyA9IFtdCiAgICAgICAgIGZpbGVzID0gW10KICAgICAg
ICAgZm9yIGYgaW4gc2VsZi5maWxlczoKICAgICAgICAgICAgIGlmIHNlbGYuZXhpc3RzKGYpIGFu
ZCBmLnN0YXJ0c3dpdGgocGF0aCk6CiAgICAgICAgICAgICAgICAgcmVtYWluaW5nID0gZltsZW4o
cGF0aCk6XQotICAgICAgICAgICAgICAgIGlmICcvJyBpbiByZW1haW5pbmc6Ci0gICAgICAgICAg
ICAgICAgICAgIGRpciA9IHJlbWFpbmluZ1s6cmVtYWluaW5nLmluZGV4KCcvJyldCisgICAgICAg
ICAgICAgICAgaWYgc2VsZi5zZXAgaW4gcmVtYWluaW5nOgorICAgICAgICAgICAgICAgICAgICBk
aXIgPSByZW1haW5pbmdbOnJlbWFpbmluZy5pbmRleChzZWxmLnNlcCldCiAgICAgICAgICAgICAg
ICAgICAgIGlmIG5vdCBkaXIgaW4gZGlyczoKICAgICAgICAgICAgICAgICAgICAgICAgIGRpcnMu
YXBwZW5kKGRpcikKICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMTY1LDcgKzE3Niw3IEBAIGNs
YXNzIE1vY2tGaWxlU3lzdGVtKG9iamVjdCk6CiAKICAgICBkZWYgX21rdGVtcChzZWxmLCBzdWZm
aXg9JycsIHByZWZpeD0ndG1wJywgZGlyPU5vbmUsICoqa3dhcmdzKToKICAgICAgICAgaWYgZGly
IGlzIE5vbmU6Ci0gICAgICAgICAgICBkaXIgPSAnL19faW1fdG1wJworICAgICAgICAgICAgZGly
ID0gc2VsZi5zZXAgKyAnX19pbV90bXAnCiAgICAgICAgIGN1cm5vID0gc2VsZi5jdXJyZW50X3Rt
cG5vCiAgICAgICAgIHNlbGYuY3VycmVudF90bXBubyArPSAxCiAgICAgICAgIHJldHVybiBzZWxm
LmpvaW4oZGlyLCAiJXNfJXVfJXMiICUgKHByZWZpeCwgY3Vybm8sIHN1ZmZpeCkpCkBAIC0yMjQs
NiArMjM1LDkgQEAgY2xhc3MgTW9ja0ZpbGVTeXN0ZW0ob2JqZWN0KToKICAgICAgICAgICAgIHNl
bGYuX3JhaXNlX25vdF9mb3VuZChwYXRoKQogICAgICAgICByZXR1cm4gc2VsZi5maWxlc1twYXRo
XQogCisgICAgZGVmIHJlbHBhdGgoc2VsZiwgcGF0aCwgc3RhcnQ9Jy4nKToKKyAgICAgICAgcmV0
dXJuIG9zcGF0aC5yZWxwYXRoKHBhdGgsIHN0YXJ0LCBzZWxmLmFic3BhdGgsIHNlbGYuc2VwKQor
CiAgICAgZGVmIHJlbW92ZShzZWxmLCBwYXRoKToKICAgICAgICAgaWYgc2VsZi5maWxlc1twYXRo
XSBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi5fcmFpc2Vfbm90X2ZvdW5kKHBhdGgpCkBAIC0y
MzEsOCArMjQ1LDggQEAgY2xhc3MgTW9ja0ZpbGVTeXN0ZW0ob2JqZWN0KToKICAgICAgICAgc2Vs
Zi53cml0dGVuX2ZpbGVzW3BhdGhdID0gTm9uZQogCiAgICAgZGVmIHJtdHJlZShzZWxmLCBwYXRo
KToKLSAgICAgICAgaWYgbm90IHBhdGguZW5kc3dpdGgoJy8nKToKLSAgICAgICAgICAgIHBhdGgg
Kz0gJy8nCisgICAgICAgIGlmIG5vdCBwYXRoLmVuZHN3aXRoKHNlbGYuc2VwKToKKyAgICAgICAg
ICAgIHBhdGggKz0gc2VsZi5zZXAKIAogICAgICAgICBmb3IgZiBpbiBzZWxmLmZpbGVzOgogICAg
ICAgICAgICAgaWYgZi5zdGFydHN3aXRoKHBhdGgpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fdW5pdHRlc3QucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV91bml0dGVzdC5weQppbmRl
eCAyNjdjYTEzZDc1MzdiZWI0MWE1NDFjOGJhNjhkZDY5MzM0NjYxZDA2Li4yZjI5ZTU2MGU1NjIx
OGJhYjZjZDQ4YmJiNDg1OThlMDRlY2YwZWMwIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV91bml0dGVzdC5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV91bml0dGVzdC5weQpAQCAt
MTY3LDYgKzE2NywyMiBAQCBjbGFzcyBGaWxlU3lzdGVtVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6
CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmcy5yZW1vdmUoJ2ZpbGVuYW1lJywgcmVtb3ZlX3dp
dGhfZXhjZXB0aW9uKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoLTEsIEZpbGVTeXN0ZW1U
ZXN0Ll9yZW1vdmVfZmFpbHVyZXMpCiAKKyAgICBkZWYgdGVzdF9zZXAoc2VsZik6CisgICAgICAg
IGZzID0gRmlsZVN5c3RlbSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZnMuc2VwLCBv
cy5zZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZzLmpvaW4oImZvbyIsICJiYXIiKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKCJmb28iLCAiYmFyIikpCisK
KyAgICBkZWYgdGVzdF9zZXBfX2lzX3JlYWRvbmx5KHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVT
eXN0ZW0oKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZzLnNlcCA9ICcgJworICAgICAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKEZhbHNlLCBtc2c9ImZzLnNlcCBpc24ndCByZWFkb25seSIp
CisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgZToKKyAgICAgICAgICAgIHBhc3MKKwog
CiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL29zcGF0aC5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9vc3BhdGgucHkKaW5kZXggYWVkN2Ez
ZDIyMzMyNDIzNjc1YjVmNDY3NDEyY2Q4ZGYwMmM1MWE0MC4uMjUwNDY0NWMwNGNhNWE5NzFiZmJl
OWE3NDQ3MzlmZTQ4ODllOTI1OCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL29zcGF0aC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vb3NwYXRoLnB5CkBAIC0zMiw3ICszMiw3IEBAIGltcG9ydCBvcwogIwogIyBJdCBz
aG91bGQgYmVoYXZlIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIG9zLnBhdGgucmVscGF0aCgpLCBl
eGNlcHQgZm9yCiAjIHJldHVybmluZyBOb25lIG9uIHBhdGhzIG5vdCBjb250YWluZWQgaW4gYWJz
X3N0YXJ0X3BhdGguCi1kZWYgcmVscGF0aChwYXRoLCBzdGFydF9wYXRoLCBvc19wYXRoX2Fic3Bh
dGg9Tm9uZSk6CitkZWYgcmVscGF0aChwYXRoLCBzdGFydF9wYXRoLCBvc19wYXRoX2Fic3BhdGg9
Tm9uZSwgc2VwPU5vbmUpOgogICAgICIiIlJldHVybiBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIGdp
dmVuIHN0YXJ0IHBhdGgsIG9yIE5vbmUuCiAKICAgICBSZXR1cm5zIE5vbmUgaWYgdGhlIHBhdGgg
aXMgbm90IGNvbnRhaW5lZCBpbiB0aGUgZGlyZWN0b3J5IHN0YXJ0X3BhdGguCkBAIC00NCwxMCAr
NDQsMTIgQEAgZGVmIHJlbHBhdGgocGF0aCwgc3RhcnRfcGF0aCwgb3NfcGF0aF9hYnNwYXRoPU5v
bmUpOgogICAgICAgb3NfcGF0aF9hYnNwYXRoOiBBIHJlcGxhY2VtZW50IGZ1bmN0aW9uIGZvciB1
bml0IHRlc3RpbmcuICBUaGlzCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNob3Vs
ZCBzdHJpcCB0cmFpbGluZyBzbGFzaGVzIGp1c3QgbGlrZQogICAgICAgICAgICAgICAgICAgICAg
ICBvcy5wYXRoLmFic3BhdGgoKS4gIERlZmF1bHRzIHRvIG9zLnBhdGguYWJzcGF0aC4KKyAgICAg
IHNlcDogUGF0aCBzZXBhcmF0b3IuICBEZWZhdWx0cyB0byBvcy5wYXRoLnNlcAogCiAgICAgIiIi
CiAgICAgaWYgb3NfcGF0aF9hYnNwYXRoIGlzIE5vbmU6CiAgICAgICAgIG9zX3BhdGhfYWJzcGF0
aCA9IG9zLnBhdGguYWJzcGF0aAorICAgIHNlcCA9IHNlcCBvciBvcy5zZXAKIAogICAgICMgU2lu
Y2Ugb3NfcGF0aF9hYnNwYXRoKCkgY2FsbHMgb3MucGF0aC5ub3JtcGF0aCgpLS0KICAgICAjCkBA
IC02NywxMSArNjksMTEgQEAgZGVmIHJlbHBhdGgocGF0aCwgc3RhcnRfcGF0aCwgb3NfcGF0aF9h
YnNwYXRoPU5vbmUpOgogICAgIGlmIG5vdCByZWxfcGF0aDoKICAgICAgICAgIyBUaGVuIHRoZSBw
YXRocyBhcmUgdGhlIHNhbWUuCiAgICAgICAgIHBhc3MKLSAgICBlbGlmIHJlbF9wYXRoWzBdID09
IG9zLnNlcDoKKyAgICBlbGlmIHJlbF9wYXRoWzBdID09IHNlcDoKICAgICAgICAgIyBJdCBpcyBw
cm9iYWJseSBzdWZmaWNpZW50IHRvIHJlbW92ZSBqdXN0IHRoZSBmaXJzdCBjaGFyYWN0ZXIKICAg
ICAgICAgIyBzaW5jZSBvcy5wYXRoLm5vcm1wYXRoKCkgY29sbGFwc2VzIHNlcGFyYXRvcnMsIGJ1
dCB3ZSB1c2UKICAgICAgICAgIyBsc3RyaXAoKSBqdXN0IHRvIGJlIHN1cmUuCi0gICAgICAgIHJl
bF9wYXRoID0gcmVsX3BhdGgubHN0cmlwKG9zLnNlcCkKKyAgICAgICAgcmVsX3BhdGggPSByZWxf
cGF0aC5sc3RyaXAoc2VwKQogICAgIGVsc2U6CiAgICAgICAgICMgV2UgYXJlIGluIHRoZSBjYXNl
IHR5cGlmaWVkIGJ5IHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKICAgICAgICAgIwpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3ppcGZpbGVzZXQucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vemlwZmlsZXNldC5weQppbmRleCBm
YTJiNzYyNzVlNGYwNzY2ODQxZGIwMTM1ODBmNmVhN2UxNDlkMjA1Li41Y2YzNjE2ZWMwNDFjMTJk
NjAyNjU2MGUyYTQxZDNhMmU0NTNiMTc3IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vemlwZmlsZXNldC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vemlwZmlsZXNldC5weQpAQCAtMzMsMjIgKzMzLDI4IEBAIGNsYXNz
IFppcEZpbGVTZXQob2JqZWN0KToKICAgICAiIiJUaGUgc2V0IG9mIGZpbGVzIGluIGEgemlwIGZp
bGUgdGhhdCByZXNpZGVzIGF0IGEgVVJMIChsb2NhbCBvciByZW1vdGUpIiIiCiAgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHppcF91cmwsIGZpbGVzeXN0ZW09Tm9uZSwgemlwX2ZhY3Rvcnk9Tm9uZSk6
CiAgICAgICAgIHNlbGYuX3ppcF91cmwgPSB6aXBfdXJsCisgICAgICAgIHNlbGYuX3RlbXBfZmls
ZSA9IE5vbmUKICAgICAgICAgc2VsZi5femlwX2ZpbGUgPSBOb25lCiAgICAgICAgIHNlbGYuX2Zp
bGVzeXN0ZW0gPSBmaWxlc3lzdGVtIG9yIEZpbGVTeXN0ZW0oKQogICAgICAgICBzZWxmLl96aXBf
ZmFjdG9yeSA9IHppcF9mYWN0b3J5IG9yIHNlbGYuX3JldHJpZXZlX3ppcF9maWxlCiAKICAgICBk
ZWYgX3JldHJpZXZlX3ppcF9maWxlKHNlbGYsIHppcF91cmwpOgogICAgICAgICB0ZW1wX2ZpbGUg
PSBOZXR3b3JrVHJhbnNhY3Rpb24oKS5ydW4obGFtYmRhOiB1cmxsaWIudXJscmV0cmlldmUoemlw
X3VybClbMF0pCi0gICAgICAgIHJldHVybiB6aXBmaWxlLlppcEZpbGUodGVtcF9maWxlKQorICAg
ICAgICByZXR1cm4gKHRlbXBfZmlsZSwgemlwZmlsZS5aaXBGaWxlKHRlbXBfZmlsZSkpCiAKICAg
ICBkZWYgX2xvYWQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX3ppcF9maWxlIGlzIE5vbmU6Ci0g
ICAgICAgICAgICBzZWxmLl96aXBfZmlsZSA9IHNlbGYuX3ppcF9mYWN0b3J5KHNlbGYuX3ppcF91
cmwpCisgICAgICAgICAgICBzZWxmLl90ZW1wX2ZpbGUsIHNlbGYuX3ppcF9maWxlID0gc2VsZi5f
emlwX2ZhY3Rvcnkoc2VsZi5femlwX3VybCkKIAogICAgIGRlZiBvcGVuKHNlbGYsIGZpbGVuYW1l
KToKICAgICAgICAgc2VsZi5fbG9hZCgpCiAgICAgICAgIHJldHVybiBGaWxlU2V0RmlsZUhhbmRs
ZShzZWxmLCBmaWxlbmFtZSwgc2VsZi5fZmlsZXN5c3RlbSkKIAorICAgIGRlZiBjbG9zZShzZWxm
KToKKyAgICAgICAgaWYgc2VsZi5fdGVtcF9maWxlOgorICAgICAgICAgICAgc2VsZi5fZmlsZXN5
c3RlbS5yZW1vdmUoc2VsZi5fdGVtcF9maWxlKQorICAgICAgICAgICAgc2VsZi5fdGVtcF9maWxl
ID0gTm9uZQorCiAgICAgZGVmIG5hbWVsaXN0KHNlbGYpOgogICAgICAgICBzZWxmLl9sb2FkKCkK
ICAgICAgICAgcmV0dXJuIHNlbGYuX3ppcF9maWxlLm5hbWVsaXN0KCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS96aXBmaWxlc2V0X3VuaXR0ZXN0LnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3ppcGZpbGVzZXRfdW5pdHRl
c3QucHkKaW5kZXggYTliYTVhZDhhMTc1NWI3YjZiM2ZiMzk1ZTU1NmM1NTZmMGNiNWRlNS4uNjgw
MTQwNjgwNWU5YThhMDQ1YWVjNTY3NGE2ODE3YzA4OWM3MTdiOCAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3ppcGZpbGVzZXRfdW5pdHRlc3QucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3ppcGZpbGVzZXRfdW5pdHRl
c3QucHkKQEAgLTY0LDEzICs2NCwxNyBAQCBjbGFzcyBaaXBGaWxlU2V0VGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgIHJlc3VsdCA9IEZha2VaaXAoc2VsZi5fZmlsZXN5c3RlbSkKICAg
ICAgICAgcmVzdWx0LmFkZF9maWxlKCdzb21lLWZpbGUnLCAnY29udGVudHMnKQogICAgICAgICBy
ZXN1bHQuYWRkX2ZpbGUoJ2EvYi9zb21lLW90aGVyLWZpbGUnLCAnb3RoZXIgY29udGVudHMnKQot
ICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgIHJldHVybiAoTm9uZSwgcmVzdWx0KQogCiAg
ICAgZGVmIHRlc3Rfb3BlbihzZWxmKToKICAgICAgICAgZmlsZSA9IHNlbGYuX3ppcC5vcGVuKCdh
L2Ivc29tZS1vdGhlci1maWxlJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ2EvYi9zb21l
LW90aGVyLWZpbGUnLCBmaWxlLm5hbWUoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ290
aGVyIGNvbnRlbnRzJywgZmlsZS5jb250ZW50cygpKQogCisgICAgZGVmIHRlc3RfY2xvc2Uoc2Vs
Zik6CisgICAgICAgIHppcGZpbGVzZXQgPSBaaXBGaWxlU2V0KCdibGFoJywgc2VsZi5fZmlsZXN5
c3RlbSwgc2VsZi5tYWtlX2Zha2VfemlwKQorICAgICAgICB6aXBmaWxlc2V0LmNsb3NlKCkKKwog
ICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdjb250
ZW50cycsIHNlbGYuX3ppcC5yZWFkKCdzb21lLWZpbGUnKSkKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80509</attachid>
            <date>2011-01-28 15:30:40 -0800</date>
            <delta_ts>2011-01-30 15:07:13 -0800</delta_ts>
            <desc>update w/ more review feedback from eseidel</desc>
            <filename>bug-53326-20110128153039.patch</filename>
            <type>text/plain</type>
            <size>16058</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5M2Yy
MDBhMzkyNTNjODVhNzUwNjY2MmM3N2M5OGU1NGIzNTMzMGNiLi5iYzgxMTY0MWM4ZmUzNWQ3MjU1
NmVlZmZmNzlhODdlODc5OWZiYTA1IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzEgQEAKIDIwMTEtMDEtMjcgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgb2YgdGhlIGZpbGVzeXN0ZW0tcmVsYXRlZCBtb2R1
bGVzIHVzZWQgaW4gd2Via2l0cHkuCisgICAgICAgIEkndmUgYWRkZWQgcmVscGF0aCgpIHRvIHRo
ZSBmaWxlc3lzdGVtIGludGVyZmFjZSwgbW9kaWZpZWQKKyAgICAgICAgb3NwYXRoLnJlbHBhdGgo
KSBzbyB0aGF0IGl0IGNvdWxkIHdvcmsgd2l0aCB0aGUgZmlsZXN5c3RlbQorICAgICAgICBpbnRl
cmZhY2UsIGFuZCBtb2RpZmllZCB0aGUgZmlsZXNldCogcm91dGluZXMgdG8gdXNlIHRoZQorICAg
ICAgICBmaWxlc3lzdGVtIGludGVyZmFjZSBjb25zaXN0ZW50bHkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhbHNvIGFkZHMgYSBjbG9zZSgpIHJvdXRpbmUgdG8gdGhlIGZpbGVzZXQgcm91dGluZXMK
KyAgICAgICAgdG8gaW5kaWNhdGUgdGhhdCB0aGUgY2FsbGVyIGlzIGRvbmUgd2l0aCB0aGUgZmls
ZXNldC4gVGhpcworICAgICAgICBhbGxvd3MgemlwZmlsZXNldCB0byBjbGVhbiB1cCBhZnRlciBp
dHNlbGYgd2hlbiBpdCBjcmVhdGVzCisgICAgICAgIHRlbXBmaWxlcyB0byBzdG9yZSBkb3dubG9h
ZHMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUz
MzI2CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZGlyZWN0b3J5
ZmlsZXNldC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmls
ZXNldC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5
c3RlbS5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5
c3RlbV9tb2NrLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9m
aWxlc3lzdGVtX3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9vc3BhdGgucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL3ppcGZpbGVzZXQucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL3ppcGZpbGVzZXRfdW5pdHRlc3QucHk6CisKKzIwMTEtMDEtMjcgIERpcmsgUHJhbmtlICA8
ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgUmV2aWV3ZWQgYnkgTWloYWkgUGFycGFy
aXRhLgogCiAgICAgICAgIG5ldy1ydW4td2Via2l0LXRlc3RzOiB0dXJuIG9mZiBwaXhlbCB0ZXN0
cyBjb3JyZWN0bHkgYnkgZGVmYXVsdApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL2RpcmVjdG9yeWZpbGVzZXQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vZGlyZWN0b3J5ZmlsZXNldC5weQppbmRleCAxMWFjYWY0ZWIyZmQy
NzE2NWY4YmRlMmZmOWM5YjJiOTI3YTAzNzlkLi5hNWNhYjBlOTRhNGQ1Y2NiZTA0MmY1MDc3MjRk
NjUwYmI1YzE2OWFmIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vZGlyZWN0b3J5ZmlsZXNldC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vZGlyZWN0b3J5ZmlsZXNldC5weQpAQCAtMjEsMTQgKzIxLDggQEAKICMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCiAjIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9z
dGF0ZW1lbnQKLQotaW1wb3J0IG9zCi1pbXBvcnQgc2h1dGlsCi0KIGZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5maWxlc2V0IGltcG9ydCBGaWxlU2V0RmlsZUhhbmRsZQogZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KLWltcG9ydCB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLm9zcGF0aCBhcyBvc3BhdGgKIAogCiBjbGFzcyBEaXJlY3RvcnlG
aWxlU2V0KG9iamVjdCk6CkBAIC0zNiw4ICszMCw4IEBAIGNsYXNzIERpcmVjdG9yeUZpbGVTZXQo
b2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCwgZmlsZXN5c3RlbT1Ob25lKToK
ICAgICAgICAgc2VsZi5fcGF0aCA9IHBhdGgKICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IGZp
bGVzeXN0ZW0gb3IgRmlsZVN5c3RlbSgpCi0gICAgICAgIGlmIG5vdCBzZWxmLl9wYXRoLmVuZHN3
aXRoKG9zLnBhdGguc2VwKToKLSAgICAgICAgICAgIHNlbGYuX3BhdGggKz0gb3MucGF0aC5zZXAK
KyAgICAgICAgaWYgbm90IHNlbGYuX3BhdGguZW5kc3dpdGgoc2VsZi5fZmlsZXN5c3RlbS5zZXAp
OgorICAgICAgICAgICAgc2VsZi5fcGF0aCArPSBzZWxmLl9maWxlc3lzdGVtLnNlcAogCiAgICAg
ZGVmIF9mdWxsX3BhdGgoc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICBhc3NlcnQgc2VsZi5faXNf
dW5kZXIoc2VsZi5fcGF0aCwgZmlsZW5hbWUpCkBAIC01Miw3ICs0Niw3IEBAIGNsYXNzIERpcmVj
dG9yeUZpbGVTZXQob2JqZWN0KToKICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uZmls
ZXNfdW5kZXIoc2VsZi5fcGF0aCkKIAogICAgIGRlZiBfaXNfdW5kZXIoc2VsZiwgZGlyLCBmaWxl
bmFtZSk6Ci0gICAgICAgIHJldHVybiBib29sKG9zcGF0aC5yZWxwYXRoKHNlbGYuX2ZpbGVzeXN0
ZW0uam9pbihkaXIsIGZpbGVuYW1lKSwgZGlyKSkKKyAgICAgICAgcmV0dXJuIGJvb2woc2VsZi5f
ZmlsZXN5c3RlbS5yZWxwYXRoKHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihkaXIsIGZpbGVuYW1lKSwg
ZGlyKSkKIAogICAgIGRlZiBvcGVuKHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAgcmV0dXJuIEZp
bGVTZXRGaWxlSGFuZGxlKHNlbGYsIGZpbGVuYW1lLCBzZWxmLl9maWxlc3lzdGVtKQpAQCAtNjks
NyArNjMsNyBAQCBjbGFzcyBEaXJlY3RvcnlGaWxlU2V0KG9iamVjdCk6CiAgICAgICAgIGRlc3Qg
PSBzZWxmLl9maWxlc3lzdGVtLmpvaW4ocGF0aCwgZmlsZW5hbWUpCiAgICAgICAgICMgQXMgZmls
ZW5hbWUgbWF5IGhhdmUgc2xhc2hlcyBpbiBpdCwgd2UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgc2Ft
ZQogICAgICAgICAjIGRpcmVjdG9yeSBoaWVyYXJjaHkgZXhpc3RzIGF0IHRoZSBvdXRwdXQgcGF0
aC4KLSAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5tYXliZV9tYWtlX2RpcmVjdG9yeShvcy5wYXRo
LnNwbGl0KGRlc3QpWzBdKQorICAgICAgICBzZWxmLl9maWxlc3lzdGVtLm1heWJlX21ha2VfZGly
ZWN0b3J5KHNlbGYuX2ZpbGVzeXN0ZW0uZGlybmFtZShkZXN0KSkKICAgICAgICAgc2VsZi5fZmls
ZXN5c3RlbS5jb3B5ZmlsZShzcmMsIGRlc3QpCiAKICAgICBkZWYgZGVsZXRlKHNlbGYsIGZpbGVu
YW1lKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9m
aWxlc2V0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzZXQu
cHkKaW5kZXggMjJmN2M0ZDZkMDc0MTgyNGNiZjhkNWU3NTBhNTg3MDBlZTllOWY4Yy4uNTk4YzFj
NTk1ZGU3NTJjOTUyMmZmMWU3MjZkOTZhZjY0ZjAxODMyNiAxMDA2NDQKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzZXQucHkKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzZXQucHkKQEAgLTIyLDcgKzIyLDYgQEAKICMg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KIAogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAotaW1wb3J0
IG9zCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtIGltcG9ydCBGaWxl
U3lzdGVtCiAKQEAgLTM4LDYgKzM3LDkgQEAgY2xhc3MgRmlsZVNldEZpbGVIYW5kbGUob2JqZWN0
KToKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICIlczolcyIgJSAoc2Vs
Zi5fZmlsZXNldCwgc2VsZi5fZmlsZW5hbWUpCiAKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAg
ICAgIHBhc3MKKwogICAgIGRlZiBjb250ZW50cyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5fY29u
dGVudHMgaXMgTm9uZToKICAgICAgICAgICAgIHNlbGYuX2NvbnRlbnRzID0gc2VsZi5fZmlsZXNl
dC5yZWFkKHNlbGYuX2ZpbGVuYW1lKQpAQCAtNjEsNCArNjMsNCBAQCBjbGFzcyBGaWxlU2V0Rmls
ZUhhbmRsZShvYmplY3QpOgogICAgICAgICByZXR1cm4gc2VsZi5fZmlsZW5hbWUKIAogICAgIGRl
ZiBzcGxpdGV4dChzZWxmKToKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguc3BsaXRleHQoc2VsZi5u
YW1lKCkpCisgICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLnNwbGl0ZXh0KHNlbGYubmFt
ZSgpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2Zp
bGVzeXN0ZW0ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5
c3RlbS5weQppbmRleCBiMTVkNGMzZjY0OGMxNGE4NzNiNDNhZDhjNDMzYmU2MGFjOGM3YzM3Li5i
ODc2ODA3OTViY2E1NGVkY2U0OTU3ZGZmZWRiMzQ5YTk4ZjlmNzBiIDEwMDY0NAotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weQpAQCAtMzksMTMg
KzM5LDIwIEBAIGltcG9ydCBzaHV0aWwKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHRpbWUKIAor
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBvc3BhdGgKKwogY2xhc3MgRmlsZVN5
c3RlbShvYmplY3QpOgogICAgICIiIkZpbGVTeXN0ZW0gaW50ZXJmYWNlIGZvciB3ZWJraXRweS4K
IAogICAgIFVubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCBwYXRocyBhcmUgYWxsb3dlZCB0byBi
ZSBlaXRoZXIgYWJzb2x1dGUKICAgICBvciByZWxhdGl2ZS4iIiIKICAgICBkZWYgX19pbml0X18o
c2VsZik6Ci0gICAgICAgIHNlbGYuc2VwID0gb3Muc2VwCisgICAgICAgIHNlbGYuX3NlcCA9IG9z
LnNlcAorCisgICAgZGVmIF9nZXRfc2VwKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc2Vw
CisKKyAgICBzZXAgPSBwcm9wZXJ0eShfZ2V0X3NlcCwgZG9jPSJwYXRobmFtZSBzZXBhcmF0b3Ii
KQogCiAgICAgZGVmIGFic3BhdGgoc2VsZiwgcGF0aCk6CiAgICAgICAgIHJldHVybiBvcy5wYXRo
LmFic3BhdGgocGF0aCkKQEAgLTIwMCw2ICsyMDcsOSBAQCBjbGFzcyBGaWxlU3lzdGVtKG9iamVj
dCk6CiAgICAgICAgIHdpdGggY29kZWNzLm9wZW4ocGF0aCwgJ3InLCAndXRmOCcpIGFzIGY6CiAg
ICAgICAgICAgICByZXR1cm4gZi5yZWFkKCkKIAorICAgIGRlZiByZWxwYXRoKHNlbGYsIHBhdGgs
IHN0YXJ0PScuJyk6CisgICAgICAgIHJldHVybiBvc3BhdGgucmVscGF0aChwYXRoLCBzdGFydCkK
KwogICAgIGNsYXNzIF9XaW5kb3dzRXJyb3IoZXhjZXB0aW9ucy5PU0Vycm9yKToKICAgICAgICAg
IiIiRmFrZSBleGNlcHRpb24gZm9yIExpbnV4IGFuZCBNYWMuIiIiCiAgICAgICAgIHBhc3MKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVt
X21vY2sucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3Rl
bV9tb2NrLnB5CmluZGV4IDhlYzMxZGVmM2ZmMGRjMTI0ZjI1ODBmNjMzNWJjMjQxZmMxZDIzNTAu
LmIyY2Q2M2EwYTBmODllOWFmN2IzNGNmNjcxOGYzNWE4ODUxNTAxNWQgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5w
eQpAQCAtMjgsOSArMjgsMTEgQEAKIAogaW1wb3J0IGVycm5vCiBpbXBvcnQgb3MKLWltcG9ydCBw
YXRoCiBpbXBvcnQgcmUKIAorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBwYXRo
Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IG9zcGF0aAorCiAKIGNsYXNzIE1v
Y2tGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVzPU5vbmUp
OgpAQCAtNDQsMTcgKzQ2LDIzIEBAIGNsYXNzIE1vY2tGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAg
ICAgICIiIgogICAgICAgICBzZWxmLmZpbGVzID0gZmlsZXMgb3Ige30KICAgICAgICAgc2VsZi53
cml0dGVuX2ZpbGVzID0ge30KLSAgICAgICAgc2VsZi5zZXAgPSAnLycKKyAgICAgICAgc2VsZi5f
c2VwID0gJy8nCiAgICAgICAgIHNlbGYuY3VycmVudF90bXBubyA9IDAKIAorICAgIGRlZiBfZ2V0
X3NlcChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NlcAorCisgICAgc2VwID0gcHJvcGVy
dHkoX2dldF9zZXAsIGRvYz0icGF0aG5hbWUgc2VwYXJhdG9yIikKKwogICAgIGRlZiBfcmFpc2Vf
bm90X2ZvdW5kKHNlbGYsIHBhdGgpOgogICAgICAgICByYWlzZSBJT0Vycm9yKGVycm5vLkVOT0VO
VCwgcGF0aCwgb3Muc3RyZXJyb3IoZXJybm8uRU5PRU5UKSkKIAogICAgIGRlZiBfc3BsaXQoc2Vs
ZiwgcGF0aCk6Ci0gICAgICAgIGlkeCA9IHBhdGgucmZpbmQoJy8nKQotICAgICAgICByZXR1cm4g
KHBhdGhbMDppZHhdLCBwYXRoW2lkeCArIDE6XSkKKyAgICAgICAgcmV0dXJuIHBhdGgucnNwbGl0
KHNlbGYuc2VwLCBtYXg9MSkKIAogICAgIGRlZiBhYnNwYXRoKHNlbGYsIHBhdGgpOgorICAgICAg
ICBpZiBwYXRoLmVuZHN3aXRoKHNlbGYuc2VwKToKKyAgICAgICAgICAgIHJldHVybiBwYXRoWzot
MV0KICAgICAgICAgcmV0dXJuIHBhdGgKIAogICAgIGRlZiBiYXNlbmFtZShzZWxmLCBwYXRoKToK
QEAgLTkxLDEwICs5OSwxMCBAQCBjbGFzcyBNb2NrRmlsZVN5c3RlbShvYmplY3QpOgogICAgICAg
ICBpZiBzZWxmLmJhc2VuYW1lKHBhdGgpIGluIGRpcnNfdG9fc2tpcDoKICAgICAgICAgICAgIHJl
dHVybiBbXQogCi0gICAgICAgIGlmIG5vdCBwYXRoLmVuZHN3aXRoKCcvJyk6Ci0gICAgICAgICAg
ICBwYXRoICs9ICcvJworICAgICAgICBpZiBub3QgcGF0aC5lbmRzd2l0aChzZWxmLnNlcCk6Cisg
ICAgICAgICAgICBwYXRoICs9IHNlbGYuc2VwCiAKLSAgICAgICAgZGlyX3N1YnN0cmluZ3MgPSBb
Jy8nICsgZCArICcvJyBmb3IgZCBpbiBkaXJzX3RvX3NraXBdCisgICAgICAgIGRpcl9zdWJzdHJp
bmdzID0gW3NlbGYuc2VwICsgZCArIHNlbGYuc2VwIGZvciBkIGluIGRpcnNfdG9fc2tpcF0KICAg
ICAgICAgZm9yIGZpbGVuYW1lIGluIHNlbGYuZmlsZXM6CiAgICAgICAgICAgICBpZiBub3QgZmls
ZW5hbWUuc3RhcnRzd2l0aChwYXRoKToKICAgICAgICAgICAgICAgICBjb250aW51ZQpAQCAtMTE4
LDcgKzEyNiw3IEBAIGNsYXNzIE1vY2tGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAgICAgICAgICBy
ZXR1cm4gW2YgZm9yIGYgaW4gc2VsZi5maWxlcyBpZiBmID09IHBhdGhdCiAKICAgICBkZWYgaXNh
YnMoc2VsZiwgcGF0aCk6Ci0gICAgICAgIHJldHVybiBwYXRoLnN0YXJ0c3dpdGgoJy8nKQorICAg
ICAgICByZXR1cm4gcGF0aC5zdGFydHN3aXRoKHNlbGYuc2VwKQogCiAgICAgZGVmIGlzZmlsZShz
ZWxmLCBwYXRoKToKICAgICAgICAgcmV0dXJuIHBhdGggaW4gc2VsZi5maWxlcyBhbmQgc2VsZi5m
aWxlc1twYXRoXSBpcyBub3QgTm9uZQpAQCAtMTI2LDggKzEzNCw4IEBAIGNsYXNzIE1vY2tGaWxl
U3lzdGVtKG9iamVjdCk6CiAgICAgZGVmIGlzZGlyKHNlbGYsIHBhdGgpOgogICAgICAgICBpZiBw
YXRoIGluIHNlbGYuZmlsZXM6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgaWYg
bm90IHBhdGguZW5kc3dpdGgoJy8nKToKLSAgICAgICAgICAgIHBhdGggKz0gJy8nCisgICAgICAg
IGlmIG5vdCBwYXRoLmVuZHN3aXRoKHNlbGYuc2VwKToKKyAgICAgICAgICAgIHBhdGggKz0gc2Vs
Zi5zZXAKIAogICAgICAgICAjIFdlIG5lZWQgdG8gdXNlIGEgY29weSBvZiB0aGUga2V5cyBoZXJl
IGluIG9yZGVyIHRvIGF2b2lkIHN3aXRjaGluZwogICAgICAgICAjIHRvIGEgZGlmZmVyZW50IHRo
cmVhZCBhbmQgcG90ZW50aWFsbHkgbW9kaWZ5aW5nIHRoZSBkaWN0IGluCkBAIC0xMzYsMjIgKzE0
NCwyNCBAQCBjbGFzcyBNb2NrRmlsZVN5c3RlbShvYmplY3QpOgogICAgICAgICByZXR1cm4gYW55
KGYuc3RhcnRzd2l0aChwYXRoKSBmb3IgZiBpbiBmaWxlcykKIAogICAgIGRlZiBqb2luKHNlbGYs
ICpjb21wcyk6Ci0gICAgICAgIHJldHVybiByZS5zdWIocmUuZXNjYXBlKG9zLnBhdGguc2VwKSwg
Jy8nLCBvcy5wYXRoLmpvaW4oKmNvbXBzKSkKKyAgICAgICAgIyBGSVhNRTogbWlnaHQgd2FudCB0
ZXN0cyBmb3IgdGhpcyBhbmQvb3IgYSBiZXR0ZXIgY29tbWVudCBhYm91dCBob3cKKyAgICAgICAg
IyBpdCB3b3Jrcy4KKyAgICAgICAgcmV0dXJuIHJlLnN1YihyZS5lc2NhcGUob3MucGF0aC5zZXAp
LCBzZWxmLnNlcCwgb3MucGF0aC5qb2luKCpjb21wcykpCiAKICAgICBkZWYgbGlzdGRpcihzZWxm
LCBwYXRoKToKICAgICAgICAgaWYgbm90IHNlbGYuaXNkaXIocGF0aCk6CiAgICAgICAgICAgICBy
YWlzZSBPU0Vycm9yKCIlcyBpcyBub3QgYSBkaXJlY3RvcnkiICUgcGF0aCkKIAotICAgICAgICBp
ZiBub3QgcGF0aC5lbmRzd2l0aCgnLycpOgotICAgICAgICAgICAgcGF0aCArPSAnLycKKyAgICAg
ICAgaWYgbm90IHBhdGguZW5kc3dpdGgoc2VsZi5zZXApOgorICAgICAgICAgICAgcGF0aCArPSBz
ZWxmLnNlcAogCiAgICAgICAgIGRpcnMgPSBbXQogICAgICAgICBmaWxlcyA9IFtdCiAgICAgICAg
IGZvciBmIGluIHNlbGYuZmlsZXM6CiAgICAgICAgICAgICBpZiBzZWxmLmV4aXN0cyhmKSBhbmQg
Zi5zdGFydHN3aXRoKHBhdGgpOgogICAgICAgICAgICAgICAgIHJlbWFpbmluZyA9IGZbbGVuKHBh
dGgpOl0KLSAgICAgICAgICAgICAgICBpZiAnLycgaW4gcmVtYWluaW5nOgotICAgICAgICAgICAg
ICAgICAgICBkaXIgPSByZW1haW5pbmdbOnJlbWFpbmluZy5pbmRleCgnLycpXQorICAgICAgICAg
ICAgICAgIGlmIHNlbGYuc2VwIGluIHJlbWFpbmluZzoKKyAgICAgICAgICAgICAgICAgICAgZGly
ID0gcmVtYWluaW5nWzpyZW1haW5pbmcuaW5kZXgoc2VsZi5zZXApXQogICAgICAgICAgICAgICAg
ICAgICBpZiBub3QgZGlyIGluIGRpcnM6CiAgICAgICAgICAgICAgICAgICAgICAgICBkaXJzLmFw
cGVuZChkaXIpCiAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTE2NSw3ICsxNzUsNyBAQCBjbGFz
cyBNb2NrRmlsZVN5c3RlbShvYmplY3QpOgogCiAgICAgZGVmIF9ta3RlbXAoc2VsZiwgc3VmZml4
PScnLCBwcmVmaXg9J3RtcCcsIGRpcj1Ob25lLCAqKmt3YXJncyk6CiAgICAgICAgIGlmIGRpciBp
cyBOb25lOgotICAgICAgICAgICAgZGlyID0gJy9fX2ltX3RtcCcKKyAgICAgICAgICAgIGRpciA9
IHNlbGYuc2VwICsgJ19faW1fdG1wJwogICAgICAgICBjdXJubyA9IHNlbGYuY3VycmVudF90bXBu
bwogICAgICAgICBzZWxmLmN1cnJlbnRfdG1wbm8gKz0gMQogICAgICAgICByZXR1cm4gc2VsZi5q
b2luKGRpciwgIiVzXyV1XyVzIiAlIChwcmVmaXgsIGN1cm5vLCBzdWZmaXgpKQpAQCAtMjI0LDYg
KzIzNCw5IEBAIGNsYXNzIE1vY2tGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAgICAgICAgICBzZWxm
Ll9yYWlzZV9ub3RfZm91bmQocGF0aCkKICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXNbcGF0aF0K
IAorICAgIGRlZiByZWxwYXRoKHNlbGYsIHBhdGgsIHN0YXJ0PScuJyk6CisgICAgICAgIHJldHVy
biBvc3BhdGgucmVscGF0aChwYXRoLCBzdGFydCwgc2VsZi5hYnNwYXRoLCBzZWxmLnNlcCkKKwog
ICAgIGRlZiByZW1vdmUoc2VsZiwgcGF0aCk6CiAgICAgICAgIGlmIHNlbGYuZmlsZXNbcGF0aF0g
aXMgTm9uZToKICAgICAgICAgICAgIHNlbGYuX3JhaXNlX25vdF9mb3VuZChwYXRoKQpAQCAtMjMx
LDggKzI0NCw4IEBAIGNsYXNzIE1vY2tGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAgICAgIHNlbGYu
d3JpdHRlbl9maWxlc1twYXRoXSA9IE5vbmUKIAogICAgIGRlZiBybXRyZWUoc2VsZiwgcGF0aCk6
Ci0gICAgICAgIGlmIG5vdCBwYXRoLmVuZHN3aXRoKCcvJyk6Ci0gICAgICAgICAgICBwYXRoICs9
ICcvJworICAgICAgICBpZiBub3QgcGF0aC5lbmRzd2l0aChzZWxmLnNlcCk6CisgICAgICAgICAg
ICBwYXRoICs9IHNlbGYuc2VwCiAKICAgICAgICAgZm9yIGYgaW4gc2VsZi5maWxlczoKICAgICAg
ICAgICAgIGlmIGYuc3RhcnRzd2l0aChwYXRoKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fdW5pdHRlc3QucHkKaW5kZXgg
MjY3Y2ExM2Q3NTM3YmViNDFhNTQxYzhiYTY4ZGQ2OTMzNDY2MWQwNi4uODQ1NWQ3MjkwMGM0NjFh
NWU5Y2RjOTAxZTA3ZjkxNzRiM2U5ZWY4MSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fdW5pdHRlc3QucHkKQEAgLTE2
Nyw2ICsxNjcsMTkgQEAgY2xhc3MgRmlsZVN5c3RlbVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgog
ICAgICAgICBzZWxmLmFzc2VydFRydWUoZnMucmVtb3ZlKCdmaWxlbmFtZScsIHJlbW92ZV93aXRo
X2V4Y2VwdGlvbikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKC0xLCBGaWxlU3lzdGVtVGVz
dC5fcmVtb3ZlX2ZhaWx1cmVzKQogCisgICAgZGVmIHRlc3Rfc2VwKHNlbGYpOgorICAgICAgICBm
cyA9IEZpbGVTeXN0ZW0oKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZzLnNlcCwgb3Mu
c2VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmcy5qb2luKCJmb28iLCAiYmFyIiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbigiZm9vIiwgImJhciIpKQorCisg
ICAgZGVmIHRlc3Rfc2VwX19pc19yZWFkb25seShzZWxmKToKKyAgICAgICAgZGVmIGFzc2lnbl9z
ZXAoKToKKyAgICAgICAgICAgIGZzLnNlcCA9ICcgJworICAgICAgICBmcyA9IEZpbGVTeXN0ZW0o
KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgYXNzaWduX3NlcCkK
KwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL29zcGF0aC5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9vc3BhdGgucHkKaW5kZXggYWVk
N2EzZDIyMzMyNDIzNjc1YjVmNDY3NDEyY2Q4ZGYwMmM1MWE0MC4uMjUwNDY0NWMwNGNhNWE5NzFi
ZmJlOWE3NDQ3MzlmZTQ4ODllOTI1OCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL29zcGF0aC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vb3NwYXRoLnB5CkBAIC0zMiw3ICszMiw3IEBAIGltcG9ydCBvcwogIwogIyBJ
dCBzaG91bGQgYmVoYXZlIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIG9zLnBhdGgucmVscGF0aCgp
LCBleGNlcHQgZm9yCiAjIHJldHVybmluZyBOb25lIG9uIHBhdGhzIG5vdCBjb250YWluZWQgaW4g
YWJzX3N0YXJ0X3BhdGguCi1kZWYgcmVscGF0aChwYXRoLCBzdGFydF9wYXRoLCBvc19wYXRoX2Fi
c3BhdGg9Tm9uZSk6CitkZWYgcmVscGF0aChwYXRoLCBzdGFydF9wYXRoLCBvc19wYXRoX2Fic3Bh
dGg9Tm9uZSwgc2VwPU5vbmUpOgogICAgICIiIlJldHVybiBhIHBhdGggcmVsYXRpdmUgdG8gdGhl
IGdpdmVuIHN0YXJ0IHBhdGgsIG9yIE5vbmUuCiAKICAgICBSZXR1cm5zIE5vbmUgaWYgdGhlIHBh
dGggaXMgbm90IGNvbnRhaW5lZCBpbiB0aGUgZGlyZWN0b3J5IHN0YXJ0X3BhdGguCkBAIC00NCwx
MCArNDQsMTIgQEAgZGVmIHJlbHBhdGgocGF0aCwgc3RhcnRfcGF0aCwgb3NfcGF0aF9hYnNwYXRo
PU5vbmUpOgogICAgICAgb3NfcGF0aF9hYnNwYXRoOiBBIHJlcGxhY2VtZW50IGZ1bmN0aW9uIGZv
ciB1bml0IHRlc3RpbmcuICBUaGlzCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNo
b3VsZCBzdHJpcCB0cmFpbGluZyBzbGFzaGVzIGp1c3QgbGlrZQogICAgICAgICAgICAgICAgICAg
ICAgICBvcy5wYXRoLmFic3BhdGgoKS4gIERlZmF1bHRzIHRvIG9zLnBhdGguYWJzcGF0aC4KKyAg
ICAgIHNlcDogUGF0aCBzZXBhcmF0b3IuICBEZWZhdWx0cyB0byBvcy5wYXRoLnNlcAogCiAgICAg
IiIiCiAgICAgaWYgb3NfcGF0aF9hYnNwYXRoIGlzIE5vbmU6CiAgICAgICAgIG9zX3BhdGhfYWJz
cGF0aCA9IG9zLnBhdGguYWJzcGF0aAorICAgIHNlcCA9IHNlcCBvciBvcy5zZXAKIAogICAgICMg
U2luY2Ugb3NfcGF0aF9hYnNwYXRoKCkgY2FsbHMgb3MucGF0aC5ub3JtcGF0aCgpLS0KICAgICAj
CkBAIC02NywxMSArNjksMTEgQEAgZGVmIHJlbHBhdGgocGF0aCwgc3RhcnRfcGF0aCwgb3NfcGF0
aF9hYnNwYXRoPU5vbmUpOgogICAgIGlmIG5vdCByZWxfcGF0aDoKICAgICAgICAgIyBUaGVuIHRo
ZSBwYXRocyBhcmUgdGhlIHNhbWUuCiAgICAgICAgIHBhc3MKLSAgICBlbGlmIHJlbF9wYXRoWzBd
ID09IG9zLnNlcDoKKyAgICBlbGlmIHJlbF9wYXRoWzBdID09IHNlcDoKICAgICAgICAgIyBJdCBp
cyBwcm9iYWJseSBzdWZmaWNpZW50IHRvIHJlbW92ZSBqdXN0IHRoZSBmaXJzdCBjaGFyYWN0ZXIK
ICAgICAgICAgIyBzaW5jZSBvcy5wYXRoLm5vcm1wYXRoKCkgY29sbGFwc2VzIHNlcGFyYXRvcnMs
IGJ1dCB3ZSB1c2UKICAgICAgICAgIyBsc3RyaXAoKSBqdXN0IHRvIGJlIHN1cmUuCi0gICAgICAg
IHJlbF9wYXRoID0gcmVsX3BhdGgubHN0cmlwKG9zLnNlcCkKKyAgICAgICAgcmVsX3BhdGggPSBy
ZWxfcGF0aC5sc3RyaXAoc2VwKQogICAgIGVsc2U6CiAgICAgICAgICMgV2UgYXJlIGluIHRoZSBj
YXNlIHR5cGlmaWVkIGJ5IHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKICAgICAgICAgIwpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3ppcGZpbGVzZXQucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vemlwZmlsZXNldC5weQppbmRl
eCBmYTJiNzYyNzVlNGYwNzY2ODQxZGIwMTM1ODBmNmVhN2UxNDlkMjA1Li41Y2YzNjE2ZWMwNDFj
MTJkNjAyNjU2MGUyYTQxZDNhMmU0NTNiMTc3IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vemlwZmlsZXNldC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vemlwZmlsZXNldC5weQpAQCAtMzMsMjIgKzMzLDI4IEBAIGNs
YXNzIFppcEZpbGVTZXQob2JqZWN0KToKICAgICAiIiJUaGUgc2V0IG9mIGZpbGVzIGluIGEgemlw
IGZpbGUgdGhhdCByZXNpZGVzIGF0IGEgVVJMIChsb2NhbCBvciByZW1vdGUpIiIiCiAgICAgZGVm
IF9faW5pdF9fKHNlbGYsIHppcF91cmwsIGZpbGVzeXN0ZW09Tm9uZSwgemlwX2ZhY3Rvcnk9Tm9u
ZSk6CiAgICAgICAgIHNlbGYuX3ppcF91cmwgPSB6aXBfdXJsCisgICAgICAgIHNlbGYuX3RlbXBf
ZmlsZSA9IE5vbmUKICAgICAgICAgc2VsZi5femlwX2ZpbGUgPSBOb25lCiAgICAgICAgIHNlbGYu
X2ZpbGVzeXN0ZW0gPSBmaWxlc3lzdGVtIG9yIEZpbGVTeXN0ZW0oKQogICAgICAgICBzZWxmLl96
aXBfZmFjdG9yeSA9IHppcF9mYWN0b3J5IG9yIHNlbGYuX3JldHJpZXZlX3ppcF9maWxlCiAKICAg
ICBkZWYgX3JldHJpZXZlX3ppcF9maWxlKHNlbGYsIHppcF91cmwpOgogICAgICAgICB0ZW1wX2Zp
bGUgPSBOZXR3b3JrVHJhbnNhY3Rpb24oKS5ydW4obGFtYmRhOiB1cmxsaWIudXJscmV0cmlldmUo
emlwX3VybClbMF0pCi0gICAgICAgIHJldHVybiB6aXBmaWxlLlppcEZpbGUodGVtcF9maWxlKQor
ICAgICAgICByZXR1cm4gKHRlbXBfZmlsZSwgemlwZmlsZS5aaXBGaWxlKHRlbXBfZmlsZSkpCiAK
ICAgICBkZWYgX2xvYWQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX3ppcF9maWxlIGlzIE5vbmU6
Ci0gICAgICAgICAgICBzZWxmLl96aXBfZmlsZSA9IHNlbGYuX3ppcF9mYWN0b3J5KHNlbGYuX3pp
cF91cmwpCisgICAgICAgICAgICBzZWxmLl90ZW1wX2ZpbGUsIHNlbGYuX3ppcF9maWxlID0gc2Vs
Zi5femlwX2ZhY3Rvcnkoc2VsZi5femlwX3VybCkKIAogICAgIGRlZiBvcGVuKHNlbGYsIGZpbGVu
YW1lKToKICAgICAgICAgc2VsZi5fbG9hZCgpCiAgICAgICAgIHJldHVybiBGaWxlU2V0RmlsZUhh
bmRsZShzZWxmLCBmaWxlbmFtZSwgc2VsZi5fZmlsZXN5c3RlbSkKIAorICAgIGRlZiBjbG9zZShz
ZWxmKToKKyAgICAgICAgaWYgc2VsZi5fdGVtcF9maWxlOgorICAgICAgICAgICAgc2VsZi5fZmls
ZXN5c3RlbS5yZW1vdmUoc2VsZi5fdGVtcF9maWxlKQorICAgICAgICAgICAgc2VsZi5fdGVtcF9m
aWxlID0gTm9uZQorCiAgICAgZGVmIG5hbWVsaXN0KHNlbGYpOgogICAgICAgICBzZWxmLl9sb2Fk
KCkKICAgICAgICAgcmV0dXJuIHNlbGYuX3ppcF9maWxlLm5hbWVsaXN0KCkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS96aXBmaWxlc2V0X3VuaXR0ZXN0
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3ppcGZpbGVzZXRfdW5p
dHRlc3QucHkKaW5kZXggYTliYTVhZDhhMTc1NWI3YjZiM2ZiMzk1ZTU1NmM1NTZmMGNiNWRlNS4u
NjgwMTQwNjgwNWU5YThhMDQ1YWVjNTY3NGE2ODE3YzA4OWM3MTdiOCAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3ppcGZpbGVzZXRfdW5pdHRlc3QucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3ppcGZpbGVzZXRfdW5p
dHRlc3QucHkKQEAgLTY0LDEzICs2NCwxNyBAQCBjbGFzcyBaaXBGaWxlU2V0VGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CiAgICAgICAgIHJlc3VsdCA9IEZha2VaaXAoc2VsZi5fZmlsZXN5c3RlbSkK
ICAgICAgICAgcmVzdWx0LmFkZF9maWxlKCdzb21lLWZpbGUnLCAnY29udGVudHMnKQogICAgICAg
ICByZXN1bHQuYWRkX2ZpbGUoJ2EvYi9zb21lLW90aGVyLWZpbGUnLCAnb3RoZXIgY29udGVudHMn
KQotICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgIHJldHVybiAoTm9uZSwgcmVzdWx0KQog
CiAgICAgZGVmIHRlc3Rfb3BlbihzZWxmKToKICAgICAgICAgZmlsZSA9IHNlbGYuX3ppcC5vcGVu
KCdhL2Ivc29tZS1vdGhlci1maWxlJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ2EvYi9z
b21lLW90aGVyLWZpbGUnLCBmaWxlLm5hbWUoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
J290aGVyIGNvbnRlbnRzJywgZmlsZS5jb250ZW50cygpKQogCisgICAgZGVmIHRlc3RfY2xvc2Uo
c2VsZik6CisgICAgICAgIHppcGZpbGVzZXQgPSBaaXBGaWxlU2V0KCdibGFoJywgc2VsZi5fZmls
ZXN5c3RlbSwgc2VsZi5tYWtlX2Zha2VfemlwKQorICAgICAgICB6aXBmaWxlc2V0LmNsb3NlKCkK
KwogICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdj
b250ZW50cycsIHNlbGYuX3ppcC5yZWFkKCdzb21lLWZpbGUnKSkKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>