<?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>35498</bug_id>
          
          <creation_ts>2010-02-28 11:51:25 -0800</creation_ts>
          <short_desc>check-webkit-style: Path-specific logic should work when invoking with files syntax</short_desc>
          <delta_ts>2010-03-29 09:23:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Jerdonek">cjerdonek</reporter>
          <assigned_to name="Chris Jerdonek">cjerdonek</assigned_to>
          <cc>abarth</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>eric</cc>
    
    <cc>hamaji</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>194587</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-28 11:51:25 -0800</bug_when>
    <thetext>It looks like in a lot of places where a path is checked for a certain sub-string (e.g. for path-specific filter rules, whether to skip the file, etc), the absolute form of the path is not always used.  This can cause those checks to fail if check-webkit-style is run from a sub-directory.  Adding the following in appropriate places should help resolve this:

            path = os.path.abspath(path)

We want to be careful though to continue *displaying* the path that was provided -- or at least the path relative to the source root.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197089</commentid>
    <comment_count>1</comment_count>
      <attachid>50196</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-08 01:06:56 -0800</bug_when>
    <thetext>Created attachment 50196
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197447</commentid>
    <comment_count>2</comment_count>
      <attachid>50196</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-03-08 21:27:47 -0800</bug_when>
    <thetext>Comment on attachment 50196
Proposed patch

OK.

If you checkout WebKit repository in a directory whose name is &quot;ForwardingHeaders&quot;, build/header_guard will be not checked for all files, right? If so, I guess we may eventually want to modify the absolute path so that it doesn&apos;t contain directories where the WebKit repository is put. Anyway, I think this kind of situations are unlikely to happen for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197462</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-08 22:27:19 -0800</bug_when>
    <thetext>(In reply to comment #2)

Thanks for reviewing, Shinichiro!

&gt; (From update of attachment 50196 [details])
&gt; If you checkout WebKit repository in a directory whose name is
&gt; &quot;ForwardingHeaders&quot;, build/header_guard will be not checked for all files,
&gt; right? If so, I guess we may eventually want to modify the absolute path so
&gt; that it doesn&apos;t contain directories where the WebKit repository is put. Anyway,
&gt; I think this kind of situations are unlikely to happen for now.

That&apos;s a really good point.  It makes me realize that I don&apos;t think I have the right solution.  Actually, I see now that the issue I mention in this report is only an issue when the &quot;file&quot; syntax is used -- as opposed to the patch or --git-commit syntax.  When the latter syntax is used, the path relative to the source root is passed to the checker, making the conversion to absolute paths unnecessary.

To illustrate (executing check-webkit-style from the JavaScriptCore/wtf
directory)--

chris_g4@stonewall:wtf (tot-staging)&gt; check-webkit-style 
JavaScriptCore/wtf/StringExtras.h:25:  Tab found; better to use spaces  [whitespace/tab] [1]
Total errors found: 1 in 1 files
chris_g4@stonewall:wtf (tot-staging)&gt; check-webkit-style StringExtras.h
StringExtras.h:26:  #ifndef header guard has wrong style, please use: StringExtras_h  [build/header_guard] [5]
StringExtras.h:25:  Tab found; better to use spaces  [whitespace/tab] [1]
StringExtras.h:95:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
StringExtras.h:98:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 4 in 1 files
chris_g4@stonewall:wtf (tot-staging)&gt; 

So I think a better solution might be as follows:

If the file syntax is used, try to find the source root.  If the source root can be found, then pass the paths into the checker relative to the source root, and apply the path-specific rules as usual.  Otherwise, if the source root cannot be found, pass the paths relative to the current working directory, and do not apply any path-specific rules.

With that solution, we will never need to take absolute paths.  It will keep the code simpler.  It will render more nicely (since paths will be displayed relative to the source root).  And it will let people check entire directories, etc. using WebKit&apos;s style configuration rules -- even if they aren&apos;t part of a patch.

The only drawback is if someone has a copy of the repository that lacks the needed .svn files, etc to allow the source root to be detected.  In that case, checking style wouldn&apos;t take the path-specific rules into account.  If we used absolute paths, it would.  However, the correct solution in this case is probably to make the source root detection code smarter -- to find the source root based on file paths rather than on the presence of .svn files, etc.  (I haven&apos;t actually looked at the source root detection code.)  And if that can&apos;t be done, we could always allow a source root to be passed manually as a flag, but I think the need for that is probably pretty rare.

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197482</commentid>
    <comment_count>4</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-03-09 00:02:04 -0800</bug_when>
    <thetext>&gt; So I think a better solution might be as follows:
&gt; 
&gt; If the file syntax is used, try to find the source root.  If the source root
&gt; can be found, then pass the paths into the checker relative to the source root,
&gt; and apply the path-specific rules as usual.  Otherwise, if the source root
&gt; cannot be found, pass the paths relative to the current working directory, and
&gt; do not apply any path-specific rules.
&gt; 
&gt; With that solution, we will never need to take absolute paths.  It will keep
&gt; the code simpler.  It will render more nicely (since paths will be displayed
&gt; relative to the source root).  And it will let people check entire directories,
&gt; etc. using WebKit&apos;s style configuration rules -- even if they aren&apos;t part of a
&gt; patch.

This plan sounds promising. I&apos;m not sure if it&apos;s easy to convert relative paths into source root relative paths though. Maybe python provides a nice function for this?

&gt; The only drawback is if someone has a copy of the repository that lacks the
&gt; needed .svn files, etc to allow the source root to be detected.  In that case,
&gt; checking style wouldn&apos;t take the path-specific rules into account.  If we used
&gt; absolute paths, it would.  However, the correct solution in this case is
&gt; probably to make the source root detection code smarter -- to find the source
&gt; root based on file paths rather than on the presence of .svn files, etc.  (I
&gt; haven&apos;t actually looked at the source root detection code.)  And if that can&apos;t
&gt; be done, we could always allow a source root to be passed manually as a flag,
&gt; but I think the need for that is probably pretty rare.

Yeah, it seems WebKit&apos;s nightly source doesn&apos;t contain .svn or .git (http://nightly.webkit.org/). I guess just checking WebKitTools instead of .svn or .git would solve this problem for almost all cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197484</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-09 00:13:20 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; This plan sounds promising. I&apos;m not sure if it&apos;s easy to convert relative paths
&gt; into source root relative paths though. Maybe python provides a nice function
&gt; for this?

I was just working on this.  It turns out they do: os.path.relpath.

http://docs.python.org/library/os.path.html#os.path.relpath

But after trying it, I found out it&apos;s new in Python 2.6. :(

There should be alternatives -- perhaps using os.path.commonprefix on the two paths made absolute:

http://docs.python.org/library/os.path.html#os.path.commonprefix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197485</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-09 00:20:04 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; The only drawback is if someone has a copy of the repository that lacks the
&gt; &gt; needed .svn files, etc to allow the source root to be detected.  In that case,
&gt; &gt; checking style wouldn&apos;t take the path-specific rules into account.  If we used
&gt; &gt; absolute paths, it would.  However, the correct solution in this case is
&gt; &gt; probably to make the source root detection code smarter -- to find the source
&gt; &gt; root based on file paths rather than on the presence of .svn files, etc.  (I
&gt; &gt; haven&apos;t actually looked at the source root detection code.)  And if that can&apos;t
&gt; &gt; be done, we could always allow a source root to be passed manually as a flag,
&gt; &gt; but I think the need for that is probably pretty rare.
&gt; 
&gt; Yeah, it seems WebKit&apos;s nightly source doesn&apos;t contain .svn or .git
&gt; (http://nightly.webkit.org/). I guess just checking WebKitTools instead of .svn
&gt; or .git would solve this problem for almost all cases.

By the way, it turns out that turning off path-specific logic isn&apos;t really possible after all (at least turning off all of it).  This is because not all of the path-specific logic is encapsulated by the configuration variables.  Some of it is in cpp.py, for instance.

So rather than trying to turning it part-way off, I&apos;m just going to leave the path-specific logic turned on all the way, but display a warning that there may be unexpected results.  The benefit, though, is that check-webkit-style will still work correctly on the nightlies, provided that check-webkit-style is run from the root of the nightly.  Maybe I will include some advice to that effect in the warning as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199132</commentid>
    <comment_count>7</comment_count>
      <attachid>50610</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-12 10:52:01 -0800</bug_when>
    <thetext>Created attachment 50610
Proposed patch 2

Added patch with revised logic, as discussed in the comment thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199136</commentid>
    <comment_count>8</comment_count>
      <attachid>50612</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-12 11:02:58 -0800</bug_when>
    <thetext>Created attachment 50612
Proposed patch 3

Removed some trailing spaces, fixed a hanging indent, and renamed two unit tests: (un)converted -&gt; (un)convertible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199152</commentid>
    <comment_count>9</comment_count>
      <attachid>50617</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-12 11:36:04 -0800</bug_when>
    <thetext>Created attachment 50617
Proposed patch 4

Changed the abs_start_path parameter of _rel_path() to start_path.  This makes the function more similar to os.path.relpath() and harder to use incorrectly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199474</commentid>
    <comment_count>10</comment_count>
      <attachid>50617</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-03-14 11:14:46 -0700</bug_when>
    <thetext>Comment on attachment 50617
Proposed patch 4

Sorry for the latency... I&apos;ve been somewhat sick and busy these days.

Overall this change looks pretty good! But I believe we can improve this a bit.

I think it&apos;s nice to rename UnitTestLogStream in separate change. Also, I&apos;m not sure why TestLogStream is the better naming.

&gt; -def configure_logging(stream, logger=None):
&gt; +def configure_logging(stream, logger=None, logging_level=logging.INFO):

Why? It seems this change is used in this patch. If my understanding is correct, I&apos;m appreciated to see this change in separated patch.

&gt; +def _rel_path(path, start_path, os_path_abspath=None):
&gt; +    &quot;&quot;&quot;Return a path relative to the given start path, or None.
&gt; +
&gt; +    Returns None if the path is not contained in the directory start_path.
&gt; +
&gt; +    Args:
&gt; +      path: An absolute or relative path to convert to a relative path.
&gt; +      start_path: The path relative to which the given path should be
&gt; +                  converted.
&gt; +      os_path_abspath: A replacement function for unit testing.
&gt; +                       Defaults to os.path.abspath.
&gt; +
&gt; +    &quot;&quot;&quot;
&gt; +    if os_path_abspath is None:
&gt; +        os_path_abspath = os.path.abspath
&gt; +
&gt; +    start_path = os_path_abspath(start_path)
&gt; +    path = os_path_abspath(path)
&gt; +
&gt; +    if not path.lower().startswith(start_path.lower()):
&gt; +        # Then path is outside the directory given by start_path.
&gt; +        return None
&gt; +
&gt; +    path = path[len(start_path):]
&gt; +    # Trim off any leading slash from path in case start_path
&gt; +    # does not end in a slash.
&gt; +    path = path.lstrip(&quot;/\\&quot;)
&gt; +
&gt; +    return path

What happens if a user call this function like

_rel_path(&quot;/tmp/foobar&quot;, &quot;/tmp/foo&quot;)

? I guess the return value will be &quot;bar&quot;. I guess it&apos;s better to check if path.lstrip actually modified the string. Otherwise, this function should return None, I think.

&gt; +def handle_scm(paths=None, mock_detect_scm=None, mock_os=None):

Why cannot we just do mock_os=os ? I know default_value=[] is bad, but I think it&apos;s OK to assign os module here. Sometimes I&apos;ve seen this idiom in your patch, so I should have asked earlier.

&gt; +        _log.warn(&quot;Source root not detected: path-specific logic may yield &quot;
&gt; +                  &quot;unexpected results.\n&quot;
&gt; +                  &quot; If you are running this script from a known source &quot;
&gt; +                  &quot;root, ignore this warning.&quot;)

This message is for end-users, right? I guess this message isn&apos;t super helpful for end-users. I would say &quot;WebKit source root&quot; or something instead of &quot;source root&quot;. Also, I would provide an example of unexpected results.

&gt; +            if rel_path is None:
&gt; +                # Then the path is outside the source tree.  Since all
&gt; +                # paths should be interpreted relative to the same root,
&gt; +                # do not interpret any of the paths as relative to the
&gt; +                # source root.  Interpret all of them relative to the
&gt; +                # current working directory, and do not change the current
&gt; +                # working directory.
&gt; +                _log.warn(&quot;One of the given files is outside the source &quot;
&gt; +                          &quot;tree: path-specific logic may yield unexpected &quot;
&gt; +                          &quot;results.\n Ensure that all files are within &quot;
&gt; +                          &quot;the source tree to achieve expected results.&quot;)
&gt; +                return (paths, scm)

I&apos;d add the value of path into the warning message.

&gt; +    def test_rel_path(self):
&gt; +        rel_path = self._rel_path(&quot;/WebKit/test/Foo.txt&quot;, &quot;/WebKit&quot;)
&gt; +        self.assertEquals(rel_path, &quot;test/Foo.txt&quot;)
&gt; +
&gt; +        rel_path = self._rel_path(&quot;/WebKit/test/Foo.txt&quot;, &quot;/WebKit/&quot;)
&gt; +        self.assertEquals(rel_path, &quot;test/Foo.txt&quot;)
&gt; +
&gt; +        rel_path = self._rel_path(r&quot;c:\WebKit\test\Foo.txt&quot;, r&quot;c:\WebKit&quot;)
&gt; +        self.assertEquals(rel_path, r&quot;test\Foo.txt&quot;)
&gt; +
&gt; +        rel_path = self._rel_path(r&quot;c:\WebKit\test\Foo.txt&quot;, &quot;c:\\WebKit\\&quot;)
&gt; +        self.assertEquals(rel_path, r&quot;test\Foo.txt&quot;)

I&apos;d check //WebKit//test//Foo.txt, too. I&apos;d also check self._rel_path(&quot;/WebKitTools&quot;, &quot;/WebKit&quot;) .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199480</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-14 12:51:48 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 50617 [details])
&gt; Overall this change looks pretty good! But I believe we can improve this a bit.

Thanks a lot for the review and excellent comments!

&gt; I think it&apos;s nice to rename UnitTestLogStream in separate change. Also, I&apos;m not
&gt; sure why TestLogStream is the better naming.

Okay, I&apos;ll do that separately.  I thought TestLogStream is preferable because (1) it is more concise, and (2) it is more consistent with the rest of the nomenclature in the module, which drops the word &quot;unit&quot; (logtesting module and LogTesting class rather than logunittesting and LogUnitTesting).

&gt; &gt; -def configure_logging(stream, logger=None):
&gt; &gt; +def configure_logging(stream, logger=None, logging_level=logging.INFO):
&gt; 
&gt; Why? It seems this change is used in this patch. If my understanding is
&gt; correct, I&apos;m appreciated to see this change in separated patch.

I think you mean &quot;not&quot; used in this patch?  Well, yes and no.  :)  I was using it when debugging by setting logging_level to logging.DEBUG in the call to configure_calling().  There is a FIXME in checker.py to add to configure_logging() support for more verbose logging, which is not quite implemented yet.

&gt; What happens if a user call this function like
&gt; 
&gt; _rel_path(&quot;/tmp/foobar&quot;, &quot;/tmp/foo&quot;)
&gt; 
&gt; ? I guess the return value will be &quot;bar&quot;. I guess it&apos;s better to check if
&gt; path.lstrip actually modified the string. Otherwise, this function should
&gt; return None, I think.

Good catch!  Yes, and then in that case I will also need to rstrip() trailing slashes from start_path prior to removing from path.

&gt; &gt; +def handle_scm(paths=None, mock_detect_scm=None, mock_os=None):
&gt; 
&gt; Why cannot we just do mock_os=os ? I know default_value=[] is bad, but I think
&gt; it&apos;s OK to assign os module here. Sometimes I&apos;ve seen this idiom in your patch,
&gt; so I should have asked earlier.

I got into this practice after reading Google&apos;s Python style guide:

http://google-styleguide.googlecode.com/svn/trunk/pyguide.html#Default_Argument_Values

where it says, &quot;Do not use mutable objects as default values in the function or method definition.&quot;

And good suggestions on the warning messages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199489</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-14 13:46:18 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Okay, I&apos;ll do that separately.  I thought TestLogStream is preferable because
&gt; (1) it is more concise, and (2) it is more consistent with the rest of the
&gt; nomenclature in the module, which drops the word &quot;unit&quot; (logtesting module and
&gt; LogTesting class rather than logunittesting and LogUnitTesting).

Created a report for this here:

https://bugs.webkit.org/show_bug.cgi?id=36099</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199491</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-14 13:49:34 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; There is a FIXME in checker.py to add to
&gt; configure_logging() support for more verbose logging, which is not quite
&gt; implemented yet.

Also created a report this here:

https://bugs.webkit.org/show_bug.cgi?id=36100</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199568</commentid>
    <comment_count>14</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-03-15 00:53:06 -0700</bug_when>
    <thetext>Thanks for trying to splitting the patch.

&gt; I think you mean &quot;not&quot; used in this patch?

Yes.

&gt; Well, yes and no.  :)  I was using
&gt; it when debugging by setting logging_level to logging.DEBUG in the call to
&gt; configure_calling().  There is a FIXME in checker.py to add to
&gt; configure_logging() support for more verbose logging, which is not quite
&gt; implemented yet.

So, I think it&apos;s better to add the parameter when it is actually used.

&gt; I got into this practice after reading Google&apos;s Python style guide:
&gt; 
&gt; http://google-styleguide.googlecode.com/svn/trunk/pyguide.html#Default_Argument_Values
&gt; 
&gt; where it says, &quot;Do not use mutable objects as default values in the function or
&gt; method definition.&quot;

I believe this sentence is vague but trying to warn of code like following:

def add_to_list(element, array=[]):
  array.append(element)
  return array

print add_to_list(1)  # [1]
print add_to_list(2)  # [1, 2]... wtf!?

As no one will modify os or os.path, I think we can think they are immutable. However, I think the current code is also OK if you like it. It&apos;s verbose but consistent in all cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199888</commentid>
    <comment_count>15</comment_count>
      <attachid>50196</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-15 15:54:55 -0700</bug_when>
    <thetext>Comment on attachment 50196
Proposed patch

Cleared Shinichiro Hamaji&apos;s review+ from obsolete attachment 50196 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202305</commentid>
    <comment_count>16</comment_count>
      <attachid>51252</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-21 12:11:32 -0700</bug_when>
    <thetext>Created attachment 51252
Proposed patch 5

Lots of changes in this patch.

Note that this patch may not apply correctly because it may depend on another patch being landed (one of the patches that was requested I split out: bug 36100).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202307</commentid>
    <comment_count>17</comment_count>
      <attachid>51253</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-21 12:18:33 -0700</bug_when>
    <thetext>Created attachment 51253
Proposed patch 6

Re-attaching -- that wasn&apos;t the newest one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202308</commentid>
    <comment_count>18</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-21 12:33:44 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; So, I think it&apos;s better to add the parameter when it is actually used.

I am taking care of this here--

https://bugs.webkit.org/show_bug.cgi?id=36100

&gt; As no one will modify os or os.path, I think we can think they are immutable.
&gt; However, I think the current code is also OK if you like it. It&apos;s verbose but
&gt; consistent in all cases.

I decided to keep it because we never know what future developers will do.  We modify sys, for instance, in check-webkit-style.  Though it is something I don&apos;t favor, I could see a developer modifying os or os.path to change the behavior of, for example, os.chdir or os.path.abspath (especially for unit testing).  In this patch we avoid needing to do that by providing parameters to allow mock objects to be substituted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203354</commentid>
    <comment_count>19</comment_count>
      <attachid>51482</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-24 01:00:44 -0700</bug_when>
    <thetext>Created attachment 51482
Proposed patch 7

This should apply now that the patch for bug 36100 has landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203379</commentid>
    <comment_count>20</comment_count>
      <attachid>51482</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-03-24 05:03:12 -0700</bug_when>
    <thetext>Comment on attachment 51482
Proposed patch 7

As usual, this patch looks very good :) r- for a few style nitpicks.

&gt; +        _log.warn(&quot;WebKit checkout root not found:\n&quot;
&gt; +                  &quot;  Path-dependent style checks may not work correctly.\n&quot;
&gt; +                  &quot;  See the help documentation for more info.&quot;)
&gt; +
&gt; +        return paths
&gt; +
&gt; +    if paths:
&gt; +        # Then try converting all of the paths to paths relative to
&gt; +        # the checkout root.
&gt; +        rel_paths = []
&gt; +        for path in paths:
&gt; +            rel_path = _rel_path(path, checkout_root)
&gt; +            if rel_path is None:
&gt; +                # Then the path is not below the checkout root.  Since all
&gt; +                # paths should be interpreted relative to the same root,
&gt; +                # do not interpret any of the paths as relative to the
&gt; +                # checkout root.  Interpret all of them relative to the
&gt; +                # current working directory, and do not change the current
&gt; +                # working directory.
&gt; +                _log.warn(&quot;\
&gt; +Path-dependent style checks may not work correctly:\n\
&gt; +\n\
&gt; +  One of the given paths is outside the WebKit checkout of the current\n\
&gt; +  working directory:\n\
&gt; +\n\
&gt; +    Path: %s\n\
&gt; +    Checkout root: %s\n\
&gt; +\n\
&gt; +  Pass only files below the checkout root to ensure correct results.\n\
&gt; +  See the help documentation for more info.\n&quot;
&gt; +                          % (path, checkout_root))

I&apos;m not sure why we are using this style here. I prefer the style of above _log.error. Or, we may want to use a string literal with three double-quotes?

&gt; +        expected_rel_path = os.path.join(&quot;test&quot;, &quot;Foo.txt&quot;)
&gt; +        path = os.path.join(start_path, expected_rel_path)

I&apos;d create these values by [&quot;test&quot;, &quot;Foo.txt&quot;].join(&quot;/&quot;) so the test case becomes OS independent. Of course, we may want one test case which uses backslashes as the path separator.

Also, I&apos;d check rel_path(&quot;WebKit//test//Foo.txt&quot;, &quot;WebKit&quot;) == &quot;test//Foo.txt&quot; .

&gt; +        actual_rel_path = self._rel_path(path, start_path)
&gt; +        self.assertEquals(expected_rel_path, actual_rel_path)

I&apos;d remove actual_rel_path, but it&apos;s OK as is.

&gt; +        rel_path = self._rel_path(path, start_path)
&gt; +        self.assertTrue(rel_path is None)
&gt; +
&gt; +        rel_path = self._rel_path(&quot;WebKitTools&quot;, &quot;WebKit&quot;)
&gt; +        self.assertTrue(rel_path is None)

Same here.

&gt; +        log_messages = [&quot;&quot;&quot;WARNING: WebKit checkout root not found:
&gt; +  Path-dependent style checks may not work correctly.
&gt; +  See the help documentation for more info.
&gt; +&quot;&quot;&quot;]

&gt; +        log_messages = [
&gt; +&quot;&quot;&quot;WARNING: Path-dependent style checks may not work correctly:
&gt; +
&gt; +  One of the given paths is outside the WebKit checkout of the current
&gt; +  working directory:
&gt; +
&gt; +    Path: /outside/foo2.txt
&gt; +    Checkout root: /WebKit
&gt; +
&gt; +  Pass only files below the checkout root to ensure correct results.
&gt; +  See the help documentation for more info.
&gt; +
&gt; +&quot;&quot;&quot;]

They look inconsistent, too.

&gt; +        if not found_checkout and not paths:
&gt; +            _log.error(&quot;WebKit checkout not found: You must run this script &quot;
&gt; +                       &quot;from inside a WebKit checkout if you are not passing &quot;
&gt; +                       &quot;specific paths to check.&quot;)
&gt; +            sys.exit(1)

I&apos;d put this in check-webkit-style and then move it to main.py when we remove FIXME in check-webkit-style you added in this patch. But it&apos;s not strong preference and please feel free to go ahead as is.

&gt;      def _parse(self):
&gt;          &quot;&quot;&quot;Return a default parse() function for testing.&quot;&quot;&quot;
&gt; -        return self._create_parser().parse
&gt; +        # We will test found_scm False separately.
&gt; +        def parse(args, found_scm=True):
&gt; +            parser = self._create_parser()
&gt; +            return parser.parse(args, found_scm)
&gt; +
&gt; +        return parse

I didn&apos;t notice this function is a higher order function when I looked this before, but I&apos;d just define this like

def _parse(self, args, found_scm=True):
    &quot;&quot;&quot;...&quot;&quot;&quot;
    parser = self._create_parser()
    return parser.parse(args, found_scm)

and use it like

parse = self._parse
self.assertRaises(SystemExit, parse, [...])

because this would be simpler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203381</commentid>
    <comment_count>21</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-03-24 05:15:00 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #14)
&gt; &gt; So, I think it&apos;s better to add the parameter when it is actually used.
&gt; 
&gt; I am taking care of this here--
&gt; 
&gt; https://bugs.webkit.org/show_bug.cgi?id=36100

Thanks a lot!

&gt; I decided to keep it because we never know what future developers will do.  We
&gt; modify sys, for instance, in check-webkit-style.  Though it is something I
&gt; don&apos;t favor, I could see a developer modifying os or os.path to change the
&gt; behavior of, for example, os.chdir or os.path.abspath (especially for unit
&gt; testing).  In this patch we avoid needing to do that by providing parameters to
&gt; allow mock objects to be substituted.

I see. Though I&apos;m not fully convinced yet (I guess I like shorter code too
much... Or, maybe I just dislike Python&apos;s default parameters - if they are
evaluated every time we invoke functions, we didn&apos;t need this discussion), I
can understand your opinion. Please go ahead with the current way (assign None
first then assign actual values inside the function body).

Anyway, thanks for the detailed description!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205020</commentid>
    <comment_count>22</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-27 12:06:59 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 51482 [details])
&gt; As usual, this patch looks very good :) r- for a few style nitpicks.

Thanks again for reviewing!  Sorry for the delay in resubmitting.

&gt; &gt; +        _log.warn(&quot;WebKit checkout root not found:\n&quot;
&gt; &gt; +                  &quot;  Path-dependent style checks may not work correctly.\n&quot;
&gt; &gt; +                  &quot;  See the help documentation for more info.&quot;)
&gt; &gt; +
&gt; &gt; +        return paths
&gt; &gt; +
&gt; &gt; +    if paths:
&gt; &gt; +        # Then try converting all of the paths to paths relative to
&gt; &gt; +        # the checkout root.
&gt; &gt; +        rel_paths = []
&gt; &gt; +        for path in paths:
&gt; &gt; +            rel_path = _rel_path(path, checkout_root)
&gt; &gt; +            if rel_path is None:
&gt; &gt; +                # Then the path is not below the checkout root.  Since all
&gt; &gt; +                # paths should be interpreted relative to the same root,
&gt; &gt; +                # do not interpret any of the paths as relative to the
&gt; &gt; +                # checkout root.  Interpret all of them relative to the
&gt; &gt; +                # current working directory, and do not change the current
&gt; &gt; +                # working directory.
&gt; &gt; +                _log.warn(&quot;\
&gt; &gt; +Path-dependent style checks may not work correctly:\n\
&gt; &gt; +\n\
&gt; &gt; +  One of the given paths is outside the WebKit checkout of the current\n\
&gt; &gt; +  working directory:\n\
&gt; &gt; +\n\
&gt; &gt; +    Path: %s\n\
&gt; &gt; +    Checkout root: %s\n\
&gt; &gt; +\n\
&gt; &gt; +  Pass only files below the checkout root to ensure correct results.\n\
&gt; &gt; +  See the help documentation for more info.\n&quot;
&gt; &gt; +                          % (path, checkout_root))
&gt; 
&gt; I&apos;m not sure why we are using this style here. I prefer the style of above
&gt; _log.error. Or, we may want to use a string literal with three double-quotes?

Yes, of course.  Three double-quotes would be better here.  For some reason I was thinking format string weren&apos;t allowed with three double quotes.  (Also, I prefer the string literal over the non-literal because in order to see more clearly what it looks like in multi-line format.) 

&gt; &gt; +        expected_rel_path = os.path.join(&quot;test&quot;, &quot;Foo.txt&quot;)
&gt; &gt; +        path = os.path.join(start_path, expected_rel_path)
&gt; 
&gt; I&apos;d create these values by [&quot;test&quot;, &quot;Foo.txt&quot;].join(&quot;/&quot;) so the test case
&gt; becomes OS independent. Of course, we may want one test case which uses
&gt; backslashes as the path separator.

I could be mistaken on the comments I&apos;m making here, but isn&apos;t it preferable if we can eliminate the presence of forward and backward slashes from the tests (i.e. eliminate platform-specific path separators and generate all paths using cross-platform methods)?  One reason, for example, is that os.path.abspath() (which _rel_path() uses) won&apos;t work for paths with backward slashes when run from a Mac:

http://docs.python.org/library/os.path.html#os.path.abspath
http://docs.python.org/library/os.path.html#os.path.normpath

I guess it wouldn&apos;t matter for our tests if we were using mock os.path methods for all of our path processing (which we aren&apos;t really).  But if we were, then it doesn&apos;t seem like it would help to test both forward and backward slashes, etc. since then we would just be testing the mock methods rather than the code itself.

I think my preference is to use os.path methods everywhere possible rather than literal slashes.  Otherwise, it seems like we would have to explicitly import, for example, ntpath to test the case of backward slashes.

&gt; Also, I&apos;d check rel_path(&quot;WebKit//test//Foo.txt&quot;, &quot;WebKit&quot;) == &quot;test//Foo.txt&quot;

See comment above.

&gt; &gt; +        actual_rel_path = self._rel_path(path, start_path)
&gt; &gt; +        self.assertEquals(expected_rel_path, actual_rel_path)
&gt; 
&gt; I&apos;d remove actual_rel_path, but it&apos;s OK as is.

Thanks, you are right.  That was left over from previous.

&gt; 
&gt; &gt; +        rel_path = self._rel_path(path, start_path)
&gt; &gt; +        self.assertTrue(rel_path is None)
&gt; &gt; +
&gt; &gt; +        rel_path = self._rel_path(&quot;WebKitTools&quot;, &quot;WebKit&quot;)
&gt; &gt; +        self.assertTrue(rel_path is None)
&gt; 
&gt; Same here.

?

&gt; &gt; +        log_messages = [&quot;&quot;&quot;WARNING: WebKit checkout root not found:
&gt; &gt; +  Path-dependent style checks may not work correctly.
&gt; &gt; +  See the help documentation for more info.
&gt; &gt; +&quot;&quot;&quot;]
&gt; 
&gt; &gt; +        log_messages = [
&gt; &gt; +&quot;&quot;&quot;WARNING: Path-dependent style checks may not work correctly:
&gt; &gt; +
&gt; &gt; +  One of the given paths is outside the WebKit checkout of the current
&gt; &gt; +  working directory:
&gt; &gt; +
&gt; &gt; +    Path: /outside/foo2.txt
&gt; &gt; +    Checkout root: /WebKit
&gt; &gt; +
&gt; &gt; +  Pass only files below the checkout root to ensure correct results.
&gt; &gt; +  See the help documentation for more info.
&gt; &gt; +
&gt; &gt; +&quot;&quot;&quot;]
&gt; 
&gt; They look inconsistent, too.

Will fix.

&gt; &gt; +        if not found_checkout and not paths:
&gt; &gt; +            _log.error(&quot;WebKit checkout not found: You must run this script &quot;
&gt; &gt; +                       &quot;from inside a WebKit checkout if you are not passing &quot;
&gt; &gt; +                       &quot;specific paths to check.&quot;)
&gt; &gt; +            sys.exit(1)
&gt; 
&gt; I&apos;d put this in check-webkit-style and then move it to main.py when we remove
&gt; FIXME in check-webkit-style you added in this patch. But it&apos;s not strong
&gt; preference and please feel free to go ahead as is.

Okay, I&apos;ll revisit this later.

&gt; &gt;      def _parse(self):
&gt; &gt;          &quot;&quot;&quot;Return a default parse() function for testing.&quot;&quot;&quot;
&gt; &gt; -        return self._create_parser().parse
&gt; &gt; +        # We will test found_scm False separately.
&gt; &gt; +        def parse(args, found_scm=True):
&gt; &gt; +            parser = self._create_parser()
&gt; &gt; +            return parser.parse(args, found_scm)
&gt; &gt; +
&gt; &gt; +        return parse
&gt; 
&gt; I didn&apos;t notice this function is a higher order function when I looked this
&gt; before, but I&apos;d just define this like
&gt; 
&gt; def _parse(self, args, found_scm=True):
&gt;     &quot;&quot;&quot;...&quot;&quot;&quot;
&gt;     parser = self._create_parser()
&gt;     return parser.parse(args, found_scm)
&gt; 
&gt; and use it like
&gt; 
&gt; parse = self._parse
&gt; self.assertRaises(SystemExit, parse, [...])
&gt; 
&gt; because this would be simpler.

Yes, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205022</commentid>
    <comment_count>23</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-27 12:13:03 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; &gt; Also, I&apos;d check rel_path(&quot;WebKit//test//Foo.txt&quot;, &quot;WebKit&quot;) == &quot;test//Foo.txt&quot;
&gt; 
&gt; See comment above.

To clarify, I&apos;m not sure cases like this help because they are testing the mock os.path.abspath() method (which in our case doesn&apos;t do anything) rather than the code itself.  In actual practice, os.path.abspath() (which calls normpath()) collapses consecutive slashes:

http://docs.python.org/library/os.path.html#os.path.normpath</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205025</commentid>
    <comment_count>24</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-27 12:23:59 -0700</bug_when>
    <thetext>(In reply to comment #22)

&gt; &gt; &gt; +        log_messages = [&quot;&quot;&quot;WARNING: WebKit checkout root not found:
&gt; &gt; &gt; +  Path-dependent style checks may not work correctly.
&gt; &gt; &gt; +  See the help documentation for more info.
&gt; &gt; &gt; +&quot;&quot;&quot;]
&gt; &gt; 
&gt; &gt; &gt; +        log_messages = [
&gt; &gt; &gt; +&quot;&quot;&quot;WARNING: Path-dependent style checks may not work correctly:
&gt; &gt; &gt; +
&gt; &gt; &gt; +  One of the given paths is outside the WebKit checkout of the current
&gt; &gt; &gt; +  working directory:
&gt; &gt; &gt; +
&gt; &gt; &gt; +    Path: /outside/foo2.txt
&gt; &gt; &gt; +    Checkout root: /WebKit
&gt; &gt; &gt; +
&gt; &gt; &gt; +  Pass only files below the checkout root to ensure correct results.
&gt; &gt; &gt; +  See the help documentation for more info.
&gt; &gt; &gt; +
&gt; &gt; &gt; +&quot;&quot;&quot;]
&gt; &gt; 
&gt; &gt; They look inconsistent, too.
&gt; 
&gt; Will fix.

FYI, this difference turned out to have been forced by the second case exceeding the 79 character limit (my preference was to start immediately after the bracket by default, if possible).  Maybe the solution is to always begin triple double-quote strings at the beginning of the following line, when used in cases other than doc strings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205029</commentid>
    <comment_count>25</comment_count>
      <attachid>51837</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-27 12:39:52 -0700</bug_when>
    <thetext>Created attachment 51837
Proposed patch 8

And to think the first patch in this report had an r+! :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205091</commentid>
    <comment_count>26</comment_count>
      <attachid>51837</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-03-27 19:56:10 -0700</bug_when>
    <thetext>Comment on attachment 51837
Proposed patch 8

&gt; &gt; &gt; +        expected_rel_path = os.path.join(&quot;test&quot;, &quot;Foo.txt&quot;)
&gt; &gt; &gt; +        path = os.path.join(start_path, expected_rel_path)
&gt; &gt; 
&gt; &gt; I&apos;d create these values by [&quot;test&quot;, &quot;Foo.txt&quot;].join(&quot;/&quot;) so the test case
&gt; &gt; becomes OS independent. Of course, we may want one test case which uses
&gt; &gt; backslashes as the path separator.
&gt; 
&gt; I could be mistaken on the comments I&apos;m making here, but isn&apos;t it preferable if
&gt; we can eliminate the presence of forward and backward slashes from the tests
&gt; (i.e. eliminate platform-specific path separators and generate all paths using
&gt; cross-platform methods)?  One reason, for example, is that os.path.abspath()
&gt; (which _rel_path() uses) won&apos;t work for paths with backward slashes when run
&gt; from a Mac:
&gt; 
&gt; http://docs.python.org/library/os.path.html#os.path.abspath
&gt; http://docs.python.org/library/os.path.html#os.path.normpath
&gt; 
&gt; I guess it wouldn&apos;t matter for our tests if we were using mock os.path methods
&gt; for all of our path processing (which we aren&apos;t really).  But if we were, then
&gt; it doesn&apos;t seem like it would help to test both forward and backward slashes,
&gt; etc. since then we would just be testing the mock methods rather than the code
&gt; itself.
&gt; 
&gt; I think my preference is to use os.path methods everywhere possible rather than
&gt; literal slashes.  Otherwise, it seems like we would have to explicitly import,
&gt; for example, ntpath to test the case of backward slashes.

I see. I didn&apos;t notice os.path.abspath depends on os.path.sep. So, now I think using os.path.join would be better. As you are using a slash and a backslash in _rel_path to lstrip the path, I thought testing without os.path.join would be better to check both slashes and backslashes will be lstripped.

&gt; &gt; &gt; +        actual_rel_path = self._rel_path(path, start_path)
&gt; &gt; &gt; +        self.assertEquals(expected_rel_path, actual_rel_path)
&gt; &gt; 
&gt; &gt; I&apos;d remove actual_rel_path, but it&apos;s OK as is.
&gt; 
&gt; Thanks, you are right.  That was left over from previous.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; +        rel_path = self._rel_path(path, start_path)
&gt; &gt; &gt; +        self.assertTrue(rel_path is None)
&gt; &gt; &gt; +
&gt; &gt; &gt; +        rel_path = self._rel_path(&quot;WebKitTools&quot;, &quot;WebKit&quot;)
&gt; &gt; &gt; +        self.assertTrue(rel_path is None)
&gt; &gt; 
&gt; &gt; Same here.
&gt; 
&gt; ?

Sorry for this unclear comment. I tried to mean we can remove actual_rel_path and rel_path. Like


self.assertEquals(expected_rel_path, self._rel_path(path, start_path))

or

self.assertTrue(self._rel_path(path, start_path) is None)

But this change isn&apos;t important at all. Please go ahead as is if you like the current code.

&gt; FYI, this difference turned out to have been forced by the second case
&gt; exceeding the 79 character limit (my preference was to start immediately after
&gt; the bracket by default, if possible).  Maybe the solution is to always begin
&gt; triple double-quote strings at the beginning of the following line, when used
&gt; in cases other than doc strings.

If you like, you may be able to use

  str = &quot;&quot;&quot;\
Foo
  bar
  baz
&quot;&quot;&quot;

but your code is good as well as is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205097</commentid>
    <comment_count>27</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-27 20:54:01 -0700</bug_when>
    <thetext>(In reply to comment #26)

&gt; I see. I didn&apos;t notice os.path.abspath depends on os.path.sep. So, now I think
&gt; using os.path.join would be better. As you are using a slash and a backslash in
&gt; _rel_path to lstrip the path, I thought testing without os.path.join would be
&gt; better to check both slashes and backslashes will be lstripped.

I see.  Good point.  I guess the ideal would be if the method could use os methods to do the lstrip instead of having to reference slash characters explicitly.  Alternatively, we could use os.altsep (only if it is not None on the system) to construct the other test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205112</commentid>
    <comment_count>28</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-28 00:58:56 -0700</bug_when>
    <thetext>Manually committed (via &quot;git svn dcommit&quot;):

http://trac.webkit.org/changeset/56682</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205482</commentid>
    <comment_count>29</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-29 09:23:41 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #26)
&gt; 
&gt; &gt; I see. I didn&apos;t notice os.path.abspath depends on os.path.sep. So, now I think
&gt; &gt; using os.path.join would be better. As you are using a slash and a backslash in
&gt; &gt; _rel_path to lstrip the path, I thought testing without os.path.join would be
&gt; &gt; better to check both slashes and backslashes will be lstripped.
&gt; 
&gt; I see.  Good point.  I guess the ideal would be if the method could use os
&gt; methods to do the lstrip instead of having to reference slash characters
&gt; explicitly.  Alternatively, we could use os.altsep (only if it is not None on
&gt; the system) to construct the other test case.

I made a report for this issue here:

https://bugs.webkit.org/show_bug.cgi?id=36759</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50196</attachid>
            <date>2010-03-08 01:06:56 -0800</date>
            <delta_ts>2010-03-15 15:54:55 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>_patch-35498-1.diff</filename>
            <type>text/plain</type>
            <size>19285</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBkZjZmMTZlLi5jZDYyOGE4IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTAtMDMt
MDggIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4ZWQgc29tZSBwYXJ0cyBvZiBj
aGVjay13ZWJraXQtc3R5bGUgdGhhdCBnYXZlIGluY29ycmVjdAorICAgICAgICByZXN1bHRzIHdo
ZW4gZXhlY3V0ZWQgZnJvbSB3b3JraW5nIGRpcmVjdG9yaWVzIG90aGVyIHRoYW4KKyAgICAgICAg
dGhlIHNvdXJjZSByb290LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zNTQ5OAorCisgICAgICAgIFRoaXMgcGF0Y2ggYWx0ZXJzIHNvbWUgcGF0aCBj
b21wYXJpc29ucyBieSBjb252ZXJ0aW5nIHRvIGFic29sdXRlCisgICAgICAgIHBhdGhzIHByaW9y
IHRvIGRvaW5nIHRoZSBjb21wYXJpc29uLiAgSW4gb3JkZXIgdG8gc2ltcGxpZnkgdW5pdAorICAg
ICAgICB0ZXN0aW5nLCBldmVyeXdoZXJlIHRoYXQgYWJzb2x1dGUgcGF0aCBjb252ZXJzaW9ucyBh
cmUgZG9uZSwgdGhpcworICAgICAgICBwYXRjaCBhZGRzIGEgcGFyYW1ldGVyIHRoYXQgYWNjZXB0
cyBhIG1vY2sgb3MucGF0aC5hYnNwYXRoKCkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXIucHk6CisgICAgICAgICAgLSBJbiB0aGUgUHJvY2Vzc29yRGlzcGF0Y2hl
ciBjbGFzczoKKyAgICAgICAgICAgIC0gQWRkZWQgYW4gb3NfcGF0aF9hYnNwYXRoIHBhcmFtZXRl
ciB0byB0aGUgUHJvY2Vzc29yRGlzcGF0Y2hlcgorICAgICAgICAgICAgICBjb25zdHJ1Y3Rvci4K
KyAgICAgICAgICAgIC0gQWRqdXN0ZWQgdGhlIHNob3VsZF9za2lwX3dpdGhfd2FybmluZygpIGFu
ZAorICAgICAgICAgICAgICBzaG91bGRfc2tpcF93aXRob3V0X3dhcm5pbmcoKSBtZXRob2RzIHRv
IGFwcGx5IHRoaXMgcGFyYW1ldGVyCisgICAgICAgICAgICAgIHRvIHBhdGhzIHByaW9yIHRvIGNo
ZWNraW5nIHRoZW0uCisgICAgICAgICAgLSBBZGRlZCBhbiBvc19wYXRoX2Fic3BhdGggcGFyYW1l
dGVyIHRvIHRoZQorICAgICAgICAgICAgU3R5bGVDaGVja2VyQ29uZmlndXJhdGlvbiBjb25zdHJ1
Y3Rvci4KKyAgICAgICAgICAtIEFkanVzdGVkIHRoZSBTdHlsZUNoZWNrZXIgY2xhc3MgdG8gdXNl
IHRoZQorICAgICAgICAgICAgU3R5bGVDaGVja2VyQ29uZmlndXJhdGlvbidzIG5ldyBvc19wYXRo
X2Fic3BhdGggcGFyYW1ldGVyCisgICAgICAgICAgICB3aGVuIGNvbnN0cnVjdGluZyBhIFByb2Nl
c3NvckRpc3BhdGNoZXIgaW5zdGFuY2UuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2NoZWNrZXJfdW5pdHRlc3QucHk6CisgICAgICAgICAgLSBBZGRlZCBhIGhlbHBlciBfZGlz
cGF0Y2hlcigpIG1ldGhvZCB0byBjb25zdHJ1Y3QgYQorICAgICAgICAgICAgUHJvY2Vzc29yRGlz
cGF0Y2hlciBpbnN0YW5jZSB3aXRoIGEgbW9jayBvcy5wYXRoLmFic3BhdGguCisgICAgICAgICAg
LSBVcGRhdGVkIHRoZSBtb2R1bGUgdG8gdXNlIHRoaXMgaGVscGVyIG1ldGhvZC4KKyAgICAgICAg
ICAtIFVwZGF0ZWQgdGhlIHVuaXQgdGVzdHMgd2hlcmUgbmVjZXNzYXJ5IHRvIGNoZWNrIHRoZSBu
ZXcKKyAgICAgICAgICAgIG9zX3BhdGhfYWJzcGF0aCBwcm9wZXJ0eS4KKyAgICAgICAgICAtIFJl
bW92ZWQgdGhlIG5vLWxvbmdlci11c2VkIF9fbWFpbl9fIGJsb2NrIGF0IHRoZSBlbmQgb2YKKyAg
ICAgICAgICAgIHRoZSBtb2R1bGUuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxl
L2ZpbHRlci5weToKKyAgICAgICAgICAtIEFkZGVkIGFuIG9zX3BhdGhfYWJzcGF0aCBwYXJhbWV0
ZXIgdG8gdGhlIEZpbHRlckNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIGNvbnN0cnVjdG9yLgor
ICAgICAgICAgIC0gVXBkYXRlZCB0aGUgX3BhdGhfcnVsZXNfZnJvbV9wYXRoKCkgbWV0aG9kIHRv
IGNhbGwgdGhpcworICAgICAgICAgICAgZnVuY3Rpb24gcHJpb3IgdG8gZGV0ZXJtaW5pbmcgdGhl
IHJ1bGVzIGFzc29jaWF0ZWQgdG8gYSBwYXRoLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS9maWx0ZXJfdW5pdHRlc3QucHk6CisgICAgICAgICAgLSBVcGRhdGVkIHRoZSB1bml0
IHRlc3RzIHRvIHBhc3MgYSBtb2NrIG9zLnBhdGguYWJzcGF0aCB0bworICAgICAgICAgICAgdGhl
IEZpbHRlckNvbmZpZ3VyYXRpb24gY29uc3RydWN0b3IgZXZlcnl3aGVyZS4KKwogMjAxMC0wMy0w
NiAgSGlyb25vcmkgQm9ubyAgPGhib25vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvc3R5bGUvY2hlY2tlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlci5weQppbmRleCA5MmQ2NWQzLi45OTc3M2YyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKKysrIGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CkBAIC0zMzksMTkgKzMzOSw0NiBAQCBjbGFz
cyBQcm9jZXNzb3JEaXNwYXRjaGVyKG9iamVjdCk6CiAgICAgICAgICd0eHQnLAogICAgICAgICAp
CiAKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3NfcGF0aF9hYnNwYXRoPU5vbmUpOgorICAgICAg
ICAiIiJDcmVhdGUgYW4gaW5zdGFuY2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBvc19w
YXRoX2Fic3BhdGg6IEEgcmVwbGFjZW1lbnQgZm9yIG9zLnBhdGguYWJzcGF0aCgpLiAgVGhpcwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIGVsaW1pbmF0ZXMgdGhlIGRlcGVu
ZGVuY2Ugb2YgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Mgb24gdGhlIGN1
cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuICBJdAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2hvdWxkIGJlIHVzZWQgb25seSBmb3IgdW5pdCB0ZXN0aW5nLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRGVmYXVsdHMgdG8gb3MucGF0aC5hYnNwYXRoLgorCisgICAgICAgICIiIgorICAg
ICAgICBpZiBvc19wYXRoX2Fic3BhdGggaXMgTm9uZToKKyAgICAgICAgICAgIG9zX3BhdGhfYWJz
cGF0aCA9IG9zLnBhdGguYWJzcGF0aAorICAgICAgICBzZWxmLl9vc19wYXRoX2Fic3BhdGggPSBv
c19wYXRoX2Fic3BhdGgKKwogICAgIGRlZiBfZmlsZV9leHRlbnNpb24oc2VsZiwgZmlsZV9wYXRo
KToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBmaWxlIGV4dGVuc2lvbiB3aXRob3V0IHRoZSBsZWFk
aW5nIGRvdC4iIiIKICAgICAgICAgcmV0dXJuIG9zLnBhdGguc3BsaXRleHQoZmlsZV9wYXRoKVsx
XS5sc3RyaXAoIi4iKQogCiAgICAgZGVmIHNob3VsZF9za2lwX3dpdGhfd2FybmluZyhzZWxmLCBm
aWxlX3BhdGgpOgotICAgICAgICAiIiJSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gZmlsZSBzaG91
bGQgYmUgc2tpcHBlZCB3aXRoIGEgd2FybmluZy4iIiIKKyAgICAgICAgIiIiUmV0dXJuIHdoZXRo
ZXIgdGhlIGdpdmVuIGZpbGUgc2hvdWxkIGJlIHNraXBwZWQgd2l0aCBhIHdhcm5pbmcuCisKKyAg
ICAgICAgQXJnczoKKyAgICAgICAgICBmaWxlX3BhdGg6IEEgcmVsYXRpdmUgb3IgYWJzb2x1dGUg
cGF0aCBvZiB0aGUgZmlsZSB0byBjaGVjay4KKworICAgICAgICAiIiIKKyAgICAgICAgZmlsZV9w
YXRoID0gc2VsZi5fb3NfcGF0aF9hYnNwYXRoKGZpbGVfcGF0aCkKICAgICAgICAgZm9yIHNraXBw
ZWRfZmlsZSBpbiBfU0tJUFBFRF9GSUxFU19XSVRIX1dBUk5JTkc6CiAgICAgICAgICAgICBpZiBm
aWxlX3BhdGguZmluZChza2lwcGVkX2ZpbGUpID49IDA6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IFRydWUKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBkZWYgc2hvdWxkX3NraXBfd2l0aG91
dF93YXJuaW5nKHNlbGYsIGZpbGVfcGF0aCk6Ci0gICAgICAgICIiIlJldHVybiB3aGV0aGVyIHRo
ZSBnaXZlbiBmaWxlIHNob3VsZCBiZSBza2lwcGVkIHdpdGhvdXQgYSB3YXJuaW5nLiIiIgorICAg
ICAgICAiIiJSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gZmlsZSBzaG91bGQgYmUgc2tpcHBlZCB3
aXRob3V0IGEgd2FybmluZy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIGZpbGVfcGF0aDog
QSByZWxhdGl2ZSBvciBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBmaWxlIHRvIGNoZWNrLgorCisgICAg
ICAgICIiIgorICAgICAgICBmaWxlX3BhdGggPSBzZWxmLl9vc19wYXRoX2Fic3BhdGgoZmlsZV9w
YXRoKQogICAgICAgICBmb3Igc2tpcHBlZF9maWxlIGluIF9TS0lQUEVEX0ZJTEVTX1dJVEhPVVRf
V0FSTklORzoKICAgICAgICAgICAgIGlmIGZpbGVfcGF0aC5maW5kKHNraXBwZWRfZmlsZSkgPj0g
MDoKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQpAQCAtNDE2LDYgKzQ0Myw5IEBAIGNsYXNz
IFN0eWxlQ2hlY2tlckNvbmZpZ3VyYXRpb24ob2JqZWN0KToKICAgICAgIG1heF9yZXBvcnRzX3Bl
cl9jYXRlZ29yeTogVGhlIG1heGltdW0gbnVtYmVyIG9mIGVycm9ycyB0byByZXBvcnQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyIGNhdGVnb3J5LCBwZXIgZmlsZS4KIAorICAg
ICAgb3NfcGF0aF9hYnNwYXRoOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB0byBjb252ZXJ0IGEgcGF0
aCB0byBhbgorICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZSBwYXRoLgorCiAgICAgICBz
dGRlcnJfd3JpdGU6IEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHN0cmluZyBhcyBhIHBhcmFtZXRl
ciBhbmQKICAgICAgICAgICAgICAgICAgICAgc2VydmVzIGFzIHN0ZGVyci53cml0ZS4KIApAQCAt
NDI5LDcgKzQ1OSw4IEBAIGNsYXNzIFN0eWxlQ2hlY2tlckNvbmZpZ3VyYXRpb24ob2JqZWN0KToK
ICAgICAgICAgICAgICAgICAgbWF4X3JlcG9ydHNfcGVyX2NhdGVnb3J5LAogICAgICAgICAgICAg
ICAgICBvdXRwdXRfZm9ybWF0LAogICAgICAgICAgICAgICAgICBzdGRlcnJfd3JpdGUsCi0gICAg
ICAgICAgICAgICAgIHZlcmJvc2l0eSk6CisgICAgICAgICAgICAgICAgIHZlcmJvc2l0eSwKKyAg
ICAgICAgICAgICAgICAgb3NfcGF0aF9hYnNwYXRoPU5vbmUpOgogICAgICAgICAiIiJDcmVhdGUg
YSBTdHlsZUNoZWNrZXJDb25maWd1cmF0aW9uIGluc3RhbmNlLgogCiAgICAgICAgIEFyZ3M6CkBA
IC00NTEsMTEgKzQ4MiwyMSBAQCBjbGFzcyBTdHlsZUNoZWNrZXJDb25maWd1cmF0aW9uKG9iamVj
dCk6CiAgICAgICAgICAgICAgICAgICAgICB0byBlcnJvcnMgd2l0aCBhIGNvbmZpZGVuY2Ugc2Nv
cmUgYXQgb3IgYWJvdmUgdGhpcyB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZh
dWx0IGlzIDEsIHdoaWNoIHJlcG9ydHMgYWxsIGVycm9ycy4KIAorICAgICAgICAgIG9zX3BhdGhf
YWJzcGF0aDogQSByZXBsYWNlbWVudCBmb3Igb3MucGF0aC5hYnNwYXRoKCkuICBUaGlzCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgZWxpbWluYXRlcyB0aGUgZGVwZW5kZW5j
ZSBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBvbiB0aGUgY3VycmVu
dCB3b3JraW5nIGRpcmVjdG9yeS4gIEl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91
bGQgYmUgdXNlZCBvbmx5IGZvciB1bml0IHRlc3RpbmcuCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEZWZhdWx0cyB0byBvcy5wYXRoLmFic3BhdGguCisKICAgICAgICAgIiIiCisgICAgICAg
IGlmIG9zX3BhdGhfYWJzcGF0aCBpcyBOb25lOgorICAgICAgICAgICAgb3NfcGF0aF9hYnNwYXRo
ID0gb3MucGF0aC5hYnNwYXRoCisKICAgICAgICAgc2VsZi5fZmlsdGVyX2NvbmZpZ3VyYXRpb24g
PSBmaWx0ZXJfY29uZmlndXJhdGlvbgogICAgICAgICBzZWxmLl9vdXRwdXRfZm9ybWF0ID0gb3V0
cHV0X2Zvcm1hdAogCiAgICAgICAgIHNlbGYubWF4X3JlcG9ydHNfcGVyX2NhdGVnb3J5ID0gbWF4
X3JlcG9ydHNfcGVyX2NhdGVnb3J5CisgICAgICAgIHNlbGYub3NfcGF0aF9hYnNwYXRoID0gb3Nf
cGF0aF9hYnNwYXRoCiAgICAgICAgIHNlbGYuc3RkZXJyX3dyaXRlID0gc3RkZXJyX3dyaXRlCiAg
ICAgICAgIHNlbGYudmVyYm9zaXR5ID0gdmVyYm9zaXR5CiAKQEAgLTU5OSw3ICs2NDAsOCBAQCBj
bGFzcyBTdHlsZUNoZWNrZXIob2JqZWN0KToKIAogICAgICAgICBzZWxmLmZpbGVfY291bnQgKz0g
MQogCi0gICAgICAgIGRpc3BhdGNoZXIgPSBQcm9jZXNzb3JEaXNwYXRjaGVyKCkKKyAgICAgICAg
ZGlzcGF0Y2hlciA9IFByb2Nlc3NvckRpc3BhdGNoZXIob3NfcGF0aF9hYnNwYXRoPQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb25maWd1cmF0aW9uLm9z
X3BhdGhfYWJzcGF0aCkKIAogICAgICAgICBpZiBkaXNwYXRjaGVyLnNob3VsZF9za2lwX3dpdGhv
dXRfd2FybmluZyhmaWxlX3BhdGgpOgogICAgICAgICAgICAgcmV0dXJuCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHkgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHkKaW5k
ZXggZDg2NjY2My4uYzY0NDYxNSAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weQpAQCAtNTgsNiArNTgsMTUgQEAgZnJv
bSBwcm9jZXNzb3JzLmNwcCBpbXBvcnQgQ3BwUHJvY2Vzc29yCiBmcm9tIHByb2Nlc3NvcnMudGV4
dCBpbXBvcnQgVGV4dFByb2Nlc3NvcgogCiAKKyMgQSBtb2NrIG9zLnBhdGguYWJzcGF0aCgpIHRo
YXQgbGVhdmVzIHRoZSBwYXRoIHVuY2hhbmdlZC4KK19tb2NrX29zX3BhdGhfYWJzcGF0aCA9IGxh
bWJkYSBwYXRoOiBwYXRoCisKKworZGVmIF9kaXNwYXRjaGVyKCk6CisgICAgIiIiUmV0dXJuIGEg
dGVzdCBQcm9jZXNzb3JEaXNwYXRjaGVyIGluc3RhbmNlLiIiIgorICAgIHJldHVybiBQcm9jZXNz
b3JEaXNwYXRjaGVyKG9zX3BhdGhfYWJzcGF0aD1fbW9ja19vc19wYXRoX2Fic3BhdGgpCisKKwog
Y2xhc3MgQ29uZmlndXJlTG9nZ2luZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgIiIi
VGVzdHMgdGhlIGNvbmZpZ3VyZV9sb2dnaW5nKCkgZnVuY3Rpb24uIiIiCkBAIC0yMzEsNyArMjQw
LDcgQEAgY2xhc3MgUHJvY2Vzc29yRGlzcGF0Y2hlclNraXBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKIAogICAgIGRlZiB0ZXN0X3Nob3VsZF9za2lwX3dpdGhfd2FybmluZyhzZWxmKToKICAgICAg
ICAgIiIiVGVzdCBzaG91bGRfc2tpcF93aXRoX3dhcm5pbmcoKS4iIiIKLSAgICAgICAgZGlzcGF0
Y2hlciA9IFByb2Nlc3NvckRpc3BhdGNoZXIoKQorICAgICAgICBkaXNwYXRjaGVyID0gX2Rpc3Bh
dGNoZXIoKQogCiAgICAgICAgICMgQ2hlY2sgYSBub24tc2tpcHBlZCBmaWxlLgogICAgICAgICBz
ZWxmLmFzc2VydEZhbHNlKGRpc3BhdGNoZXIuc2hvdWxkX3NraXBfd2l0aF93YXJuaW5nKCJmb28u
dHh0IikpCkBAIC0yNTQsNyArMjYzLDcgQEAgY2xhc3MgUHJvY2Vzc29yRGlzcGF0Y2hlclNraXBU
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3Nob3VsZF9za2lwX3dpdGhv
dXRfd2FybmluZyhzZWxmKToKICAgICAgICAgIiIiVGVzdCBzaG91bGRfc2tpcF93aXRob3V0X3dh
cm5pbmcoKS4iIiIKLSAgICAgICAgZGlzcGF0Y2hlciA9IFByb2Nlc3NvckRpc3BhdGNoZXIoKQor
ICAgICAgICBkaXNwYXRjaGVyID0gX2Rpc3BhdGNoZXIoKQogCiAgICAgICAgICMgQ2hlY2sgYSBu
b24tc2tpcHBlZCBmaWxlLgogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGRpc3BhdGNoZXIuc2hv
dWxkX3NraXBfd2l0aG91dF93YXJuaW5nKCJmb28udHh0IikpCkBAIC0yNzksNyArMjg4LDcgQEAg
Y2xhc3MgUHJvY2Vzc29yRGlzcGF0Y2hlckRpc3BhdGNoVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6
CiAKICAgICBkZWYgZGlzcGF0Y2hfcHJvY2Vzc29yKHNlbGYsIGZpbGVfcGF0aCk6CiAgICAgICAg
ICIiIkNhbGwgZGlzcGF0Y2hfcHJvY2Vzc29yKCkgd2l0aCB0aGUgZ2l2ZW4gZmlsZSBwYXRoLiIi
IgotICAgICAgICBkaXNwYXRjaGVyID0gUHJvY2Vzc29yRGlzcGF0Y2hlcigpCisgICAgICAgIGRp
c3BhdGNoZXIgPSBfZGlzcGF0Y2hlcigpCiAgICAgICAgIHByb2Nlc3NvciA9IGRpc3BhdGNoZXIu
ZGlzcGF0Y2hfcHJvY2Vzc29yKGZpbGVfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2NrX2hhbmRsZV9zdHlsZV9lcnJvciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zaXR5
PTMpCkBAIC00MDUsNyArNDE0LDggQEAgY2xhc3MgU3R5bGVDaGVja2VyQ29uZmlndXJhdGlvblRl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgICAgICAgIG1heF9yZXBvcnRzX3Bl
cl9jYXRlZ29yeT17IndoaXRlc3BhY2UvbmV3bGluZSI6IDF9LAogICAgICAgICAgICAgICAgICAg
IG91dHB1dF9mb3JtYXQ9b3V0cHV0X2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICBzdGRlcnJf
d3JpdGU9c2VsZi5fbW9ja19zdGRlcnJfd3JpdGUsCi0gICAgICAgICAgICAgICAgICAgdmVyYm9z
aXR5PTMpCisgICAgICAgICAgICAgICAgICAgdmVyYm9zaXR5PTMsCisgICAgICAgICAgICAgICAg
ICAgb3NfcGF0aF9hYnNwYXRoPV9tb2NrX29zX3BhdGhfYWJzcGF0aCkKIAogICAgIGRlZiB0ZXN0
X2luaXQoc2VsZik6CiAgICAgICAgICIiIlRlc3QgdGhlIF9faW5pdF9fKCkgbWV0aG9kLiIiIgpA
QCAtNDE2LDYgKzQyNiw3IEBAIGNsYXNzIFN0eWxlQ2hlY2tlckNvbmZpZ3VyYXRpb25UZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJ3aGl0ZXNwYWNl
L25ld2xpbmUiOiAxfSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29uZmlndXJhdGlvbi5z
dGRlcnJfd3JpdGUsIHNlbGYuX21vY2tfc3RkZXJyX3dyaXRlKQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhjb25maWd1cmF0aW9uLnZlcmJvc2l0eSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoY29uZmlndXJhdGlvbi5vc19wYXRoX2Fic3BhdGgsIF9tb2NrX29zX3BhdGhfYWJzcGF0
aCkKIAogICAgIGRlZiB0ZXN0X2lzX3JlcG9ydGFibGUoc2VsZik6CiAgICAgICAgICIiIlRlc3Qg
dGhlIGlzX3JlcG9ydGFibGUoKSBtZXRob2QuIiIiCkBAIC00NjcsNyArNDc4LDggQEAgY2xhc3Mg
U3R5bGVDaGVja2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF4X3JlcG9ydHNfcGVyX2NhdGVnb3J5PXt9LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHB1dF9mb3JtYXQ9InZzNyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkZXJyX3dyaXRlPXNlbGYuX21vY2tfc3RkZXJyX3dyaXRlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZlcmJvc2l0eT0zKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZl
cmJvc2l0eT0zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zX3BhdGhfYWJzcGF0aD1f
bW9ja19vc19wYXRoX2Fic3BhdGgpCiAKICAgICAgICAgc3R5bGVfY2hlY2tlciA9IHNlbGYuX3N0
eWxlX2NoZWNrZXIoY29uZmlndXJhdGlvbikKIApAQCAtNTQ5LDcgKzU2MSw4IEBAIGNsYXNzIFN0
eWxlQ2hlY2tlckNoZWNrRmlsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1heF9yZXBvcnRzX3Blcl9jYXRlZ29yeT17IndoaXRlc3BhY2UvbmV3
bGluZSI6IDF9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mb3JtYXQ9InZz
NyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyX3dyaXRlPXNlbGYubW9ja19z
dGRlcnJfd3JpdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zaXR5PTMpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zaXR5PTMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3NfcGF0aF9hYnNwYXRoPV9tb2NrX29zX3BhdGhfYWJzcGF0aCkKIAogICAg
ICAgICBzdHlsZV9jaGVja2VyID0gU3R5bGVDaGVja2VyKGNvbmZpZ3VyYXRpb24pCiAKQEAgLTU2
NCw3ICs1NzcsNyBAQCBjbGFzcyBTdHlsZUNoZWNrZXJDaGVja0ZpbGVUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKIAogICAgICAgICBmaWxlX3BhdGggPSAiTGF5b3V0VGVzdHMvZm9vLnR4dCIKIAot
ICAgICAgICBkaXNwYXRjaGVyID0gUHJvY2Vzc29yRGlzcGF0Y2hlcigpCisgICAgICAgIGRpc3Bh
dGNoZXIgPSBfZGlzcGF0Y2hlcigpCiAgICAgICAgICMgQ29uZmlybSB0aGF0IHRoZSBpbnB1dCBm
aWxlIGlzIHRydWx5IGEgc2tpcHBlZC13aXRob3V0LXdhcm5pbmcgZmlsZS4KICAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKGRpc3BhdGNoZXIuc2hvdWxkX3NraXBfd2l0aG91dF93YXJuaW5nKGZpbGVf
cGF0aCkpCiAKQEAgLTU3Nyw3ICs1OTAsNyBAQCBjbGFzcyBTdHlsZUNoZWNrZXJDaGVja0ZpbGVU
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICAgICBmaWxlX3BhdGggPSAiZ3RrMmRyYXdp
bmcuYyIKIAotICAgICAgICBkaXNwYXRjaGVyID0gUHJvY2Vzc29yRGlzcGF0Y2hlcigpCisgICAg
ICAgIGRpc3BhdGNoZXIgPSBfZGlzcGF0Y2hlcigpCiAgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUg
aW5wdXQgZmlsZSBpcyB0cnVseSBhIHNraXBwZWQtd2l0aC13YXJuaW5nIGZpbGUuCiAgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShkaXNwYXRjaGVyLnNob3VsZF9za2lwX3dpdGhfd2FybmluZyhmaWxl
X3BhdGgpKQogCkBAIC01OTYsNyArNjA5LDcgQEAgY2xhc3MgU3R5bGVDaGVja2VyQ2hlY2tGaWxl
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGZpbGVfZXh0ZW5zaW9uID0gImNwcCIK
ICAgICAgICAgZmlsZV9wYXRoID0gZmlsZV9iYXNlICsgIi4iICsgZmlsZV9leHRlbnNpb24KIAot
ICAgICAgICBkaXNwYXRjaGVyID0gUHJvY2Vzc29yRGlzcGF0Y2hlcigpCisgICAgICAgIGRpc3Bh
dGNoZXIgPSBfZGlzcGF0Y2hlcigpCiAgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgaW5wdXQgZmls
ZSBpcyB0cnVseSBhIEMrKyBmaWxlLgogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkaXNwYXRj
aGVyLl9maWxlX3R5cGUoZmlsZV9wYXRoKSwgc3R5bGUuRmlsZVR5cGUuQ1BQKQogCkBAIC02MDks
OSArNjIyLDMgQEAgY2xhc3MgU3R5bGVDaGVja2VyQ2hlY2tGaWxlVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2NrX2hhbmRsZV9z
dHlsZV9lcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9wcm9j
ZXNzb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpCi0KLQotaWYgX19uYW1l
X18gPT0gJ19fbWFpbl9fJzoKLSAgICBpbXBvcnQgc3lzCi0KLSAgICB1bml0dGVzdC5tYWluKCkK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvZmlsdGVyLnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9maWx0ZXIucHkKaW5kZXggNjA4
YTllNi4uYTBjMjk4NiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9maWx0ZXIucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9m
aWx0ZXIucHkKQEAgLTIyLDYgKzIyLDggQEAKIAogIiIiQ29udGFpbnMgZmlsdGVyLXJlbGF0ZWQg
Y29kZS4iIiIKIAoraW1wb3J0IG9zCisKIAogZGVmIHZhbGlkYXRlX2ZpbHRlcl9ydWxlcyhmaWx0
ZXJfcnVsZXMsIGFsbF9jYXRlZ29yaWVzKToKICAgICAiIiJWYWxpZGF0ZSB0aGUgZ2l2ZW4gZmls
dGVyIHJ1bGVzLCBhbmQgcmFpc2UgYSBWYWx1ZUVycm9yIGlmIG5vdCB2YWxpZC4KQEAgLTEyMSw3
ICsxMjMsOCBAQCBjbGFzcyBGaWx0ZXJDb25maWd1cmF0aW9uKG9iamVjdCk6CiAKICAgICAiIiJT
dXBwb3J0cyBmaWx0ZXJpbmcgd2l0aCBwYXRoLXNwZWNpZmljIGFuZCB1c2VyLXNwZWNpZmllZCBy
dWxlcy4iIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBiYXNlX3J1bGVzPU5vbmUsIHBhdGhf
c3BlY2lmaWM9Tm9uZSwgdXNlcl9ydWxlcz1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
YmFzZV9ydWxlcz1Ob25lLCBwYXRoX3NwZWNpZmljPU5vbmUsIHVzZXJfcnVsZXM9Tm9uZSwKKyAg
ICAgICAgICAgICAgICAgb3NfcGF0aF9hYnNwYXRoPU5vbmUpOgogICAgICAgICAiIiJDcmVhdGUg
YSBGaWx0ZXJDb25maWd1cmF0aW9uIGluc3RhbmNlLgogCiAgICAgICAgIEFyZ3M6CkBAIC0xNDIs
MTEgKzE0NSwxNyBAQCBjbGFzcyBGaWx0ZXJDb25maWd1cmF0aW9uKG9iamVjdCk6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRoZSAicGF0aF9ydWxlcyIgdmFsdWUgaXMgYSBsaXN0IG9m
IGZpbHRlcgogICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVzIHRoYXQgY2FuIGJlIGFwcGVu
ZGVkIHRvIHRoZSBiYXNlIHJ1bGVzLgogCi0gICAgICAgICAgdXNlcl9ydWxlczogQSBsaXN0IG9m
IGZpbHRlciBydWxlcyB0aGF0IGlzIGFsd2F5cyBhcHBlbmRlZAotICAgICAgICAgICAgICAgICAg
ICAgIHRvIHRoZSBiYXNlIHJ1bGVzIGFuZCBhbnkgcGF0aCBydWxlcy4gIEluIG90aGVyCi0gICAg
ICAgICAgICAgICAgICAgICAgd29yZHMsIHRoZSB1c2VyIHJ1bGVzIHRha2UgcHJlY2VkZW5jZSBv
dmVyIHRoZQotICAgICAgICAgICAgICAgICAgICAgIGV2ZXJ5dGhpbmcuICBJbiBwcmFjdGljZSwg
dGhlIHVzZXIgcnVsZXMgYXJlCi0gICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgYnkgdGhl
IHVzZXIgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorICAgICAgICAgIHVzZXJfcnVsZXM6IEEgbGlz
dCBvZiBmaWx0ZXIgcnVsZXMgdGhhdCBpcyBhcHBlbmRlZCB0byB0aGUKKyAgICAgICAgICAgICAg
ICAgICAgICBiYXNlIHJ1bGVzIGFuZCBhbnkgcGF0aCBydWxlcy4gIFRodXMsIHRoZSB1c2VyCisg
ICAgICAgICAgICAgICAgICAgICAgcnVsZXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgYWxsIG90aGVy
IHJ1bGVzLgorICAgICAgICAgICAgICAgICAgICAgIEluIHByYWN0aWNlLCB0aGUgdXNlciBydWxl
cyBhcmUgcHJvdmlkZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgdXNlciB2aWEgdGhl
IGNvbW1hbmQgbGluZS4KKworICAgICAgICAgIG9zX3BhdGhfYWJzcGF0aDogQSByZXBsYWNlbWVu
dCBmb3Igb3MucGF0aC5hYnNwYXRoKCkuICBUaGlzCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJhbWV0ZXIgZWxpbWluYXRlcyB0aGUgZGVwZW5kZW5jZSBvZiB0aGlzCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjbGFzcyBvbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4g
IEl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgdXNlZCBvbmx5IGZvciB1
bml0IHRlc3RpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byBvcy5w
YXRoLmFic3BhdGguCiAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIGJhc2VfcnVsZXMgaXMgTm9u
ZToKQEAgLTE1NSw2ICsxNjQsOCBAQCBjbGFzcyBGaWx0ZXJDb25maWd1cmF0aW9uKG9iamVjdCk6
CiAgICAgICAgICAgICBwYXRoX3NwZWNpZmljID0gW10KICAgICAgICAgaWYgdXNlcl9ydWxlcyBp
cyBOb25lOgogICAgICAgICAgICAgdXNlcl9ydWxlcyA9IFtdCisgICAgICAgIGlmIG9zX3BhdGhf
YWJzcGF0aCBpcyBOb25lOgorICAgICAgICAgICAgb3NfcGF0aF9hYnNwYXRoID0gb3MucGF0aC5h
YnNwYXRoCiAKICAgICAgICAgc2VsZi5fYmFzZV9ydWxlcyA9IGJhc2VfcnVsZXMKICAgICAgICAg
c2VsZi5fcGF0aF9zcGVjaWZpYyA9IHBhdGhfc3BlY2lmaWMKQEAgLTE2Myw2ICsxNzQsOCBAQCBj
bGFzcyBGaWx0ZXJDb25maWd1cmF0aW9uKG9iamVjdCk6CiAKICAgICAgICAgc2VsZi5fdXNlcl9y
dWxlcyA9IHVzZXJfcnVsZXMKIAorICAgICAgICBzZWxmLl9vc19wYXRoX2Fic3BhdGggPSBvc19w
YXRoX2Fic3BhdGgKKwogICAgICAgICBzZWxmLl9wYXRoX3J1bGVzX3RvX2ZpbHRlciA9IHt9CiAg
ICAgICAgICIiIkNhY2hlZCBkaWN0aW9uYXJ5IG9mIHBhdGggcnVsZXMgdG8gQ2F0ZWdvcnlGaWx0
ZXIgaW5zdGFuY2UuIiIiCiAKQEAgLTE4Miw2ICsxOTUsOCBAQCBjbGFzcyBGaWx0ZXJDb25maWd1
cmF0aW9uKG9iamVjdCk6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgaWYgc2Vs
Zi5fdXNlcl9ydWxlcyAhPSBvdGhlci5fdXNlcl9ydWxlczoKICAgICAgICAgICAgIHJldHVybiBG
YWxzZQorICAgICAgICBpZiBzZWxmLl9vc19wYXRoX2Fic3BhdGggIT0gb3RoZXIuX29zX3BhdGhf
YWJzcGF0aDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgICAgIHJldHVybiBUcnVl
CiAKQEAgLTIwNCwxMSArMjE5LDE5IEBAIGNsYXNzIEZpbHRlckNvbmZpZ3VyYXRpb24ob2JqZWN0
KToKICAgICBkZWYgX3BhdGhfcnVsZXNfZnJvbV9wYXRoKHNlbGYsIHBhdGgpOgogICAgICAgICAi
IiJEZXRlcm1pbmUgdGhlIHBhdGgtc3BlY2lmaWMgcnVsZXMgdG8gdXNlLCBhbmQgcmV0dXJuIGFz
IGEgdHVwbGUuCiAKLSAgICAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSB0dXBsZSByYXRoZXIg
dGhhbiBhIGxpc3Qgc28gdGhlIHJldHVybgotICAgICAgICAgdmFsdWUgY2FuIGJlIHBhc3NlZCB0
byBfZmlsdGVyX2Zyb21fcGF0aF9ydWxlcygpIHdpdGhvdXQgY2hhbmdlLgorICAgICAgICBUaGlz
IG1ldGhvZCByZXR1cm5zIGEgdHVwbGUgcmF0aGVyIHRoYW4gYSBsaXN0IHNvIHRoZSByZXR1cm4K
KyAgICAgICAgdmFsdWUgY2FuIGJlIHBhc3NlZCB0byBfZmlsdGVyX2Zyb21fcGF0aF9ydWxlcygp
IHdpdGhvdXQgY2hhbmdlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgcGF0aDogQSByZWxh
dGl2ZSBvciBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBmaWxlIHRvIGNoZWNrLgogCiAgICAgICAgICIi
IgorICAgICAgICAjIENvbnZlcnQgdGhlIHBhdGggdG8gYW4gYWJzb2x1dGUgcGF0aCB0byBlbnN1
cmUgdGhhdCB0aGUgcmVzdWx0CisgICAgICAgICMgZG9lcyBub3QgdmFyeSBkZXBlbmRpbmcgb24g
dGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisgICAgICAgIHBhdGggPSBzZWxmLl9vc19w
YXRoX2Fic3BhdGgocGF0aCkKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGNoZWNrIGlzIGNhc2Ut
aW5zZW5zaXR2ZS4KICAgICAgICAgcGF0aCA9IHBhdGgubG93ZXIoKQorCiAgICAgICAgIGZvciAo
c3ViX3BhdGhzLCBwYXRoX3J1bGVzKSBpbiBzZWxmLl9nZXRfcGF0aF9zcGVjaWZpY19sb3dlcigp
OgogICAgICAgICAgICAgZm9yIHN1Yl9wYXRoIGluIHN1Yl9wYXRoczoKICAgICAgICAgICAgICAg
ICBpZiBwYXRoLmZpbmQoc3ViX3BhdGgpID4gLTE6CkBAIC0yMzUsNyArMjU4LDEyIEBAIGNsYXNz
IEZpbHRlckNvbmZpZ3VyYXRpb24ob2JqZWN0KToKICAgICAgICAgcmV0dXJuIHNlbGYuX3BhdGhf
cnVsZXNfdG9fZmlsdGVyW3BhdGhfcnVsZXNdCiAKICAgICBkZWYgX2ZpbHRlcl9mcm9tX3BhdGgo
c2VsZiwgcGF0aCk6Ci0gICAgICAgICIiIlJldHVybiB0aGUgQ2F0ZWdvcnlGaWx0ZXIgYXNzb2Np
YXRlZCB0byBhIHBhdGguIiIiCisgICAgICAgICIiIlJldHVybiB0aGUgQ2F0ZWdvcnlGaWx0ZXIg
YXNzb2NpYXRlZCB0byBhIHBhdGguCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBwYXRoOiBB
IHJlbGF0aXZlIG9yIGFic29sdXRlIHBhdGggb2YgdGhlIGZpbGUgdG8gY2hlY2suCisKKyAgICAg
ICAgIiIiCiAgICAgICAgIGlmIHBhdGggbm90IGluIHNlbGYuX3BhdGhfdG9fZmlsdGVyOgogICAg
ICAgICAgICAgcGF0aF9ydWxlcyA9IHNlbGYuX3BhdGhfcnVsZXNfZnJvbV9wYXRoKHBhdGgpCiAg
ICAgICAgICAgICBmaWx0ZXIgPSBzZWxmLl9maWx0ZXJfZnJvbV9wYXRoX3J1bGVzKHBhdGhfcnVs
ZXMpCkBAIC0yNzEsNyArMjk5LDcgQEAgY2xhc3MgRmlsdGVyQ29uZmlndXJhdGlvbihvYmplY3Qp
OgogCiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAgY2F0ZWdvcnk6IFRoZSBjYXRlZ29yeSBuYW1l
LgotICAgICAgICAgIHBhdGg6IFRoZSBwYXRoIG9mIHRoZSBmaWxlIGJlaW5nIGNoZWNrZWQuCisg
ICAgICAgICAgcGF0aDogQSByZWxhdGl2ZSBvciBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBmaWxlIHRv
IGNoZWNrLgogCiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi5fZmlsdGVyX2Zyb21f
cGF0aChwYXRoKS5zaG91bGRfY2hlY2soY2F0ZWdvcnkpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2ZpbHRlcl91bml0dGVzdC5weSBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvZmlsdGVyX3VuaXR0ZXN0LnB5CmluZGV4IDdiOGE1NDAu
LmM0ODI0ZGQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
ZmlsdGVyX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5
bGUvZmlsdGVyX3VuaXR0ZXN0LnB5CkBAIC0yMiw2ICsyMiw3IEBACiAKICIiIlVuaXQgdGVzdHMg
Zm9yIGZpbHRlci5weS4iIiIKIAoraW1wb3J0IG9zCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSBm
aWx0ZXIgaW1wb3J0IF9DYXRlZ29yeUZpbHRlciBhcyBDYXRlZ29yeUZpbHRlcgpAQCAtMTQ2LDEx
ICsxNDcsMTYgQEAgY2xhc3MgRmlsdGVyQ29uZmlndXJhdGlvblRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgogCiAgICAgIiIiVGVzdHMgRmlsdGVyQ29uZmlndXJhdGlvbiBjbGFzcy4iIiIKIAorICAg
IGRlZiBfbW9ja19vc19wYXRoX2Fic3BhdGgoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIkEgbW9j
ayBvcy5wYXRoLmFic3BhdGgoKSB0aGF0IGxlYXZlcyB0aGUgcGF0aCB1bmNoYW5nZWQuIiIiCisg
ICAgICAgIHJldHVybiBwYXRoCisKICAgICBkZWYgX2NvbmZpZyhzZWxmLCBiYXNlX3J1bGVzLCBw
YXRoX3NwZWNpZmljLCB1c2VyX3J1bGVzKToKICAgICAgICAgIiIiUmV0dXJuIGEgRmlsdGVyQ29u
ZmlndXJhdGlvbiBpbnN0YW5jZS4iIiIKICAgICAgICAgcmV0dXJuIEZpbHRlckNvbmZpZ3VyYXRp
b24oYmFzZV9ydWxlcz1iYXNlX3J1bGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXRoX3NwZWNpZmljPXBhdGhfc3BlY2lmaWMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVzZXJfcnVsZXM9dXNlcl9ydWxlcykKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXNlcl9ydWxlcz11c2VyX3J1bGVzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvc19wYXRoX2Fic3BhdGg9c2VsZi5fbW9ja19vc19wYXRoX2Fic3Bh
dGgpCiAKICAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgogICAgICAgICAiIiJUZXN0IF9faW5pdF9f
IG1ldGhvZC4iIiIKQEAgLTE2NSw2ICsxNzEsNyBAQCBjbGFzcyBGaWx0ZXJDb25maWd1cmF0aW9u
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGJhc2Vf
cnVsZXMsIGNvbmZpZy5fYmFzZV9ydWxlcykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGF0
aF9zcGVjaWZpYywgY29uZmlnLl9wYXRoX3NwZWNpZmljKQogICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyh1c2VyX3J1bGVzLCBjb25maWcuX3VzZXJfcnVsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKHNlbGYuX21vY2tfb3NfcGF0aF9hYnNwYXRoLCBjb25maWcuX29zX3BhdGhfYWJzcGF0
aCkKIAogICAgIGRlZiB0ZXN0X2RlZmF1bHRfYXJndW1lbnRzKHNlbGYpOgogICAgICAgICAjIFRl
c3QgdGhhdCB0aGUgYXR0cmlidXRlcyBhcmUgZ2V0dGluZyBzZXQgY29ycmVjdGx5IHRvIHRoZSBk
ZWZhdWx0cy4KQEAgLTE3Myw2ICsxODAsNyBAQCBjbGFzcyBGaWx0ZXJDb25maWd1cmF0aW9uVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFtdLCBjb25m
aWcuX2Jhc2VfcnVsZXMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFtdLCBjb25maWcuX3Bh
dGhfc3BlY2lmaWMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFtdLCBjb25maWcuX3VzZXJf
cnVsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9zLnBhdGguYWJzcGF0aCwgY29uZmln
Ll9vc19wYXRoX2Fic3BhdGgpCiAKICAgICBkZWYgdGVzdF9lcShzZWxmKToKICAgICAgICAgIiIi
VGVzdCBfX2VxX18gbWV0aG9kLiIiIgpAQCAtMTk0LDYgKzIwMiw4IEBAIGNsYXNzIEZpbHRlckNv
bmZpZ3VyYXRpb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXRoX3NwZWNpZmljPXBhdGhfc3BlY2lmaWMpKSkKICAg
ICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb25maWcuX19lcV9fKEZpbHRlckNvbmZpZ3VyYXRpb24o
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9ydWxlcz11
c2VyX3J1bGVzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29uZmlnLl9fZXFfXyhGaWx0
ZXJDb25maWd1cmF0aW9uKG9zX3BhdGhfYWJzcGF0aD0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9tb2NrX29zX3BhdGhfYWJzcGF0aCkpKQogCiAgICAg
ZGVmIHRlc3RfbmUoc2VsZik6CiAgICAgICAgICIiIlRlc3QgX19uZV9fIG1ldGhvZC4iIiIKQEAg
LTI1Myw0ICsyNjMsMyBAQCBjbGFzcyBGaWx0ZXJDb25maWd1cmF0aW9uVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb25maWcuc2hvdWxkX2NoZWNr
KCJhIiwgInBhdGgiKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmZpZy5zaG91bGRfY2hl
Y2soImIiLCAicGF0aCIpKQotCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50610</attachid>
            <date>2010-03-12 10:52:01 -0800</date>
            <delta_ts>2010-03-12 11:02:58 -0800</delta_ts>
            <desc>Proposed patch 2</desc>
            <filename>_patch-35498-2.diff</filename>
            <type>text/plain</type>
            <size>26477</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBkMzUyMjc0Li43M2M0YmQzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTAtMDMt
MTIgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlZCBjaGVjay13ZWJraXQt
c3R5bGUgdG8gY29udmVydCBwYXRocyB0byBwYXRocyByZWxhdGl2ZSB0bworICAgICAgICB0aGUg
c291cmNlIHJvb3Qgd2hlbiBpbnZva2luZyBjaGVjay13ZWJraXQtc3R5bGUgd2l0aCB0aGUgZmls
ZXMKKyAgICAgICAgc3ludGF4LiAgQWxzbyBhZGRlZCB3YXJuaW5nIG1lc3NhZ2VzIHdoZXJlIGFw
cHJvcHJpYXRlLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zNTQ5OAorCisgICAgICAgIENvbnZlcnRpbmcgcGF0aHMgdG8gcGF0aHMgcmVsYXRpdmUg
dG8gdGhlIHNvdXJjZSByb290IGVuc3VyZXMKKyAgICAgICAgdGhhdCBzdHlsZSBjaGVja2luZyB3
aWxsIGJlaGF2ZSBhcyBleHBlY3RlZCAoc2luY2UgcGF0aC1zcGVjaWZpYworICAgICAgICBydWxl
cyBhc3N1bWUgaW5wdXQgcGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBzb3VyY2Ugcm9vdCkuCisK
KyAgICAgICAgKiBTY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHlsZToKKyAgICAgICAgICAtIEFkZGVk
IGEgY2FsbCB0byBoYW5kbGVfc2NtIHByaW9yIHRvIGNoZWNraW5nIHN0eWxlLgorCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9pbml0L2xvZ3Rlc3RpbmcucHk6CisgICAgICAgICAgLSBSZW5h
bWVkIFVuaXRUZXN0TG9nU3RyZWFtIHRvIFRlc3RMb2dTdHJlYW0uCisKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHk6CisgICAgICAgICAgLSBBZGRlZCBhIGxvZ2dp
bmdfbGV2ZWwgcGFyYW1ldGVyIHRvIGNvbmZpZ3VyZV9sb2dnaW5nKCkuCisKKworICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weToKKyAgICAgICAgICAt
IFVwZGF0ZWQgdGhlIG5hbWUgb2YgVW5pdFRlc3RMb2dTdHJlYW0gdG8gVGVzdExvZ1N0cmVhbS4K
KworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvbWFpbi5weTogQWRkZWQuCisgICAg
ICAgICAgLSBBZGRlZCBhIG5ldyBmaWxlIHRvIGFsbG93IHRoZSBjb2RlIGluIHRoaXMgcGF0Y2gg
dG8gYmUKKyAgICAgICAgICAgIHVuaXQtdGVzdGVkLCBhcyBvcHBvc2VkIHRvIGFkZGluZyBuZXcg
Y29kZSB0byBjaGVjay13ZWJraXQtc3R5bGUuCisgICAgICAgICAgLSBBZGRlZCBfcmVsX3BhdGgo
KSBhcyBhIHN1YnN0aXR1dGUgZm9yIG9zLnBhdGgucmVscGF0aCgpCisgICAgICAgICAgICB3aGlj
aCBpcyBhdmFpbGFibGUgb25seSBpbiBQeXRob24gMi42LgorICAgICAgICAgIC0gQWRkZWQgaGFu
ZGxlX3NjbSgpIHdoaWNoIGNvbnRhaW5zIG1vc3Qgb2YgdGhlIG5ldyBmdW5jdGlvbmFsaXR5Cisg
ICAgICAgICAgICBpbiB0aGlzIHBhdGNoLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9tYWluX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgICAtIEFkZGVkIFJlbFBhdGhU
ZXN0IHRvIHRlc3QgbWFpbi5fcmVsX3BhdGgoKS4KKyAgICAgICAgICAtIEFkZGVkIEhhbmRsZVNj
bVRlc3QgdG8gdGVzdCBoYW5kbGVfc2NtKCkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL3VuaXR0ZXN0cy5weToKKyAgICAgICAgICAtIEFkZGVkIGFuIGltcG9ydCBzdGF0ZW1l
bnQgZm9yIG1haW5fdW5pdHRlc3QuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxl
X3JlZmVyZW5jZXMucHk6CisgICAgICAgICAgLSBVcGRhdGVkIHRoZSBuYW1lIG9mIFVuaXRUZXN0
TG9nU3RyZWFtIHRvIFRlc3RMb2dTdHJlYW0uCisgICAgICAgICAgLSBBZGRlZCBhIGRldGVjdF9z
Y20oKSBmdW5jdGlvbiB0byBhbGxvdyByZXR1cm5pbmcgTm9uZSBpbnN0ZWFkIG9mCisgICAgICAg
ICAgICBhIFNpbXBsZVNjbSBpbnN0YW5jZSB3aGVuIGNoZWNraW5nIGZvciB0aGUgc2NtLgorCiAy
MDEwLTAzLTEwICBDaHJpcyBKZXJkb25layAgPGNqZXJkb25la0B3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFNoaW5pY2hpcm8gSGFtYWppLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy9jaGVjay13ZWJraXQtc3R5bGUgYi9XZWJLaXRUb29scy9TY3JpcHRzL2NoZWNr
LXdlYmtpdC1zdHlsZQppbmRleCBmMTg4NWIyLi5mOWQ4MTk3IDEwMDc1NQotLS0gYS9XZWJLaXRU
b29scy9TY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHlsZQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRz
L2NoZWNrLXdlYmtpdC1zdHlsZQpAQCAtNDgsMTEgKzQ4LDEzIEBAIGltcG9ydCBvcwogaW1wb3J0
IG9zLnBhdGgKIGltcG9ydCBzeXMKIAorZnJvbSB3ZWJraXRweS5zdHlsZS5tYWluIGltcG9ydCBo
YW5kbGVfc2NtIAogaW1wb3J0IHdlYmtpdHB5LnN0eWxlLmNoZWNrZXIgYXMgY2hlY2tlcgotZnJv
bSB3ZWJraXRweS5zdHlsZV9yZWZlcmVuY2VzIGltcG9ydCBTaW1wbGVTY20KIAogX2xvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKCJjaGVjay13ZWJraXQtc3R5bGUiKQogCisKKyMgRklYTUU6IE1vdmUg
dGhpcyBjb2RlIHRvIHN0eWxlLm1haW4uCiBkZWYgbWFpbigpOgogICAgICMgQ2hhbmdlIHN0ZGVy
ciB0byB3cml0ZSB3aXRoIHJlcGxhY2VtZW50IGNoYXJhY3RlcnMgc28gd2UgZG9uJ3QgZGllCiAg
ICAgIyBpZiB3ZSB0cnkgdG8gcHJpbnQgc29tZXRoaW5nIGNvbnRhaW5pbmcgbm9uLUFTQ0lJIGNo
YXJhY3RlcnMuCkBAIC03NCwyMCArNzYsMTcgQEAgZGVmIG1haW4oKToKICAgICBjaGVja2VyLmNv
bmZpZ3VyZV9sb2dnaW5nKHN0ZGVycikKIAogICAgIHBhcnNlciA9IGNoZWNrZXIuY2hlY2tfd2Vi
a2l0X3N0eWxlX3BhcnNlcigpCi0gICAgKGZpbGVzLCBvcHRpb25zKSA9IHBhcnNlci5wYXJzZShz
eXMuYXJndlsxOl0pCisgICAgKHBhdGhzLCBvcHRpb25zKSA9IHBhcnNlci5wYXJzZShzeXMuYXJn
dlsxOl0pCiAKICAgICBjb25maWd1cmF0aW9uID0gY2hlY2tlci5jaGVja193ZWJraXRfc3R5bGVf
Y29uZmlndXJhdGlvbihvcHRpb25zKQogICAgIHN0eWxlX2NoZWNrZXIgPSBjaGVja2VyLlN0eWxl
Q2hlY2tlcihjb25maWd1cmF0aW9uKQogCi0gICAgaWYgZmlsZXM6Ci0gICAgICAgIGZvciBmaWxl
bmFtZSBpbiBmaWxlczoKLSAgICAgICAgICAgIHN0eWxlX2NoZWNrZXIuY2hlY2tfZmlsZShmaWxl
bmFtZSkKKyAgICAocGF0aHMsIHNjbSkgPSBoYW5kbGVfc2NtKHBhdGhzKQogCisgICAgaWYgcGF0
aHM6CisgICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICAgICAgc3R5bGVfY2hlY2tl
ci5jaGVja19maWxlKHBhdGgpCiAgICAgZWxzZToKLSAgICAgICAgc2NtID0gU2ltcGxlU2NtKCkK
LQotICAgICAgICBvcy5jaGRpcihzY20uY2hlY2tvdXRfcm9vdCgpKQotCiAgICAgICAgIGlmIG9w
dGlvbnMuZ2l0X2NvbW1pdDoKICAgICAgICAgICAgIGNvbW1pdCA9IG9wdGlvbnMuZ2l0X2NvbW1p
dAogICAgICAgICAgICAgaWYgJy4uJyBpbiBjb21taXQ6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2luaXQvbG9ndGVzdGluZy5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvaW5pdC9sb2d0ZXN0aW5nLnB5CmluZGV4IDEwZDAwZTQuLjRkOWQ0ZjcgMTAw
NjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvaW5pdC9sb2d0ZXN0aW5nLnB5
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvaW5pdC9sb2d0ZXN0aW5nLnB5CkBA
IC0yNywxNCArMjcsMTQgQEAgbG9nZ2luZyBtb2R1bGUuCiAKIFVzZSB0aGUgTG9nVGVzdGluZyBj
bGFzcyBmb3IgYmFzaWMgdGVzdGluZyBuZWVkcy4gIEZvciBtb3JlIGFkdmFuY2VkCiBuZWVkcyAo
ZS5nLiB1bml0LXRlc3RpbmcgbWV0aG9kcyB0aGF0IGNvbmZpZ3VyZSBsb2dnaW5nKSwgc2VlIHRo
ZQotVW5pdFRlc3RMb2dTdHJlYW0gY2xhc3MuCitUZXN0TG9nU3RyZWFtIGNsYXNzLgogCiAiIiIK
IAogaW1wb3J0IGxvZ2dpbmcKIAogCi1jbGFzcyBVbml0VGVzdExvZ1N0cmVhbShvYmplY3QpOgor
Y2xhc3MgVGVzdExvZ1N0cmVhbShvYmplY3QpOgogCiAgICAgIiIiUmVwcmVzZW50cyBhIGZpbGUt
bGlrZSBvYmplY3QgZm9yIHVuaXQtdGVzdGluZyBsb2dnaW5nLgogCkBAIC0xMDQsNyArMTA0LDcg
QEAgY2xhc3MgTG9nVGVzdGluZyhvYmplY3QpOgogICAgICAgICBpbnN0ZWFkIGJlIGNyZWF0ZWQg
dXNpbmcgdGhlIHN0YXRpYyBzZXRVcCgpIG1ldGhvZC4KIAogICAgICAgICBBcmdzOgotICAgICAg
ICAgIHRlc3Rfc3RyZWFtOiBBIFVuaXRUZXN0TG9nU3RyZWFtIGluc3RhbmNlLgorICAgICAgICAg
IHRlc3Rfc3RyZWFtOiBBIFRlc3RMb2dTdHJlYW0gaW5zdGFuY2UuCiAgICAgICAgICAgaGFuZGxl
cjogVGhlIGhhbmRsZXIgYWRkZWQgdG8gdGhlIGxvZ2dlci4KIAogICAgICAgICAiIiIKQEAgLTE0
Myw3ICsxNDMsNyBAQCBjbGFzcyBMb2dUZXN0aW5nKG9iamVjdCk6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgb2YgbG9nIG1lc3NhZ2VzIHlvdSB3b3VsZCBsaWtlIHRvIHRlc3QuCiAKICAgICAg
ICAgIiIiCi0gICAgICAgIHN0cmVhbSA9IFVuaXRUZXN0TG9nU3RyZWFtKHRlc3RfY2FzZSkKKyAg
ICAgICAgc3RyZWFtID0gVGVzdExvZ1N0cmVhbSh0ZXN0X2Nhc2UpCiAgICAgICAgIGhhbmRsZXIg
PSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc3RyZWFtKQogICAgICAgICBoYW5kbGVyLnNldExldmVs
KGxvZ2dpbmdfbGV2ZWwpCiAgICAgICAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKCIl
KGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2NoZWNrZXIucHkKaW5kZXggZjhiYTRmNS4uYzMyYWRhMiAxMDA2NDQKLS0tIGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAtMjMwLDcgKzIzMCw3
IEBAIGRlZiBjaGVja193ZWJraXRfc3R5bGVfY29uZmlndXJhdGlvbihvcHRpb25zKToKICMgICAg
ICAgIFRoaXMgY2FuIHVzZSBhIGZvcm1hdHRlciBsaWtlIHRoZSBmb2xsb3dpbmcsIGZvciBleGFt
cGxlLS0KICMKICMgICAgICAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKCIlKG5hbWUp
czogWyUobGV2ZWxuYW1lKXNdICUobWVzc2FnZSlzIikKLWRlZiBjb25maWd1cmVfbG9nZ2luZyhz
dHJlYW0sIGxvZ2dlcj1Ob25lKToKK2RlZiBjb25maWd1cmVfbG9nZ2luZyhzdHJlYW0sIGxvZ2dl
cj1Ob25lLCBsb2dnaW5nX2xldmVsPWxvZ2dpbmcuSU5GTyk6CiAgICAgIiIiQ29uZmlndXJlIGxv
Z2dpbmcsIGFuZCByZXR1cm4gdGhlIGxpc3Qgb2YgaGFuZGxlcnMgYWRkZWQuCiAKICAgICBDb25m
aWd1cmVzIGEgbG9nZ2VyIHRvIGxvZyBJTkZPIG1lc3NhZ2VzIGFuZCBoaWdoZXIuICBGb3JtYXRz
IFdBUk5JTkcKQEAgLTI1MSw4ICsyNTEsMTUgQEAgZGVmIGNvbmZpZ3VyZV9sb2dnaW5nKHN0cmVh
bSwgbG9nZ2VyPU5vbmUpOgogICAgICAgbG9nZ2VyOiBBIGxvZ2dpbmcubG9nZ2VyIGluc3RhbmNl
IHRvIGNvbmZpZ3VyZS4gIFRoaXMgcGFyYW1ldGVyCiAgICAgICAgICAgICAgIHNob3VsZCBiZSB1
c2VkIG9ubHkgaW4gdW5pdCB0ZXN0cy4gIERlZmF1bHRzIHRvIHRoZQogICAgICAgICAgICAgICBy
b290IGxvZ2dlci4KKyAgICAgIGxvZ2dpbmdfbGV2ZWw6IEFuIGludGVnZXIgbG9nZ2luZyBsZXZl
bCB0aGF0IGlzIHRoZSBtaW5pbXVtIGxldmVsCisgICAgICAgICAgICAgICAgICAgICBvZiBsb2cg
bWVzc2FnZXMgdG8gbG9nLgogCiAgICAgIiIiCisgICAgaWYgbG9nZ2VyIGlzIE5vbmU6CisgICAg
ICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKworICAgIGxvZ2dlci5zZXRMZXZlbChs
b2dnaW5nX2xldmVsKQorCiAgICAgIyBJZiB0aGUgc3RyZWFtIGRvZXMgbm90IGRlZmluZSBhbiAi
ZW5jb2RpbmciIGRhdGEgYXR0cmlidXRlLCB0aGUKICAgICAjIGxvZ2dpbmcgbW9kdWxlIGNhbiB0
aHJvdyBhbiBlcnJvciBsaWtlIHRoZSBmb2xsb3dpbmc6CiAgICAgIwpAQCAtMjc5LDEwICsyODYs
NiBAQCBkZWYgY29uZmlndXJlX2xvZ2dpbmcoc3RyZWFtLCBsb2dnZXI9Tm9uZSk6CiAgICAgZm9y
bWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoIiUobWVzc2FnZSlzIikKICAgICBub25fZXJyb3Jf
aGFuZGxlci5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQogCi0gICAgaWYgbG9nZ2VyIGlzIE5vbmU6
Ci0gICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKLSAgICBsb2dnZXIuc2V0TGV2
ZWwobG9nZ2luZy5JTkZPKQotCiAgICAgaGFuZGxlcnMgPSBbZXJyb3JfaGFuZGxlciwgbm9uX2Vy
cm9yX2hhbmRsZXJdCiAKICAgICBmb3IgaGFuZGxlciBpbiBoYW5kbGVyczoKQEAgLTU2Miw2ICs1
NjUsOSBAQCBjbGFzcyBTdHlsZUNoZWNrZXIob2JqZWN0KToKIAogICAgICAgICBBcmdzOgogICAg
ICAgICAgIGZpbGVfcGF0aDogQSBzdHJpbmcgdGhhdCBpcyB0aGUgcGF0aCBvZiB0aGUgZmlsZSB0
byBwcm9jZXNzLgorICAgICAgICAgICAgICAgICAgICAgVGhlIHBhdGggc2hvdWxkIGJlIHJlbGF0
aXZlIHRvIHRoZSBzb3VyY2Ugcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSBw
YXRoLXNwZWNpZmljIGxvZ2ljIG1heSBub3QgYmVoYXZlIGFzCisgICAgICAgICAgICAgICAgICAg
ICBleHBlY3RlZC4KICAgICAgICAgICBoYW5kbGVfc3R5bGVfZXJyb3I6IFRoZSBmdW5jdGlvbiB0
byBjYWxsIHdoZW4gYSBzdHlsZSBlcnJvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2NjdXJzLiBUaGlzIHBhcmFtZXRlciBpcyBtZWFudCBmb3IgaW50ZXJuYWwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVzZSB3aXRoaW4gdGhpcyBjbGFzcy4gRGVmYXVsdHMgdG8gYQpA
QCAtNTcxLDYgKzU3Nyw3IEBAIGNsYXNzIFN0eWxlQ2hlY2tlcihvYmplY3QpOgogICAgICAgICAg
ICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gdGhlIGZpbGUgcHJvY2Vzc2luZyBtZXRob2Qgb2Yg
dGhpcyBjbGFzcy4KIAogICAgICAgICAiIiIKKyAgICAgICAgX2xvZy5kZWJ1ZygiQ2hlY2tpbmc6
ICIgKyBmaWxlX3BhdGgpCiAgICAgICAgIGlmIGhhbmRsZV9zdHlsZV9lcnJvciBpcyBOb25lOgog
ICAgICAgICAgICAgaGFuZGxlX3N0eWxlX2Vycm9yID0gRGVmYXVsdFN0eWxlRXJyb3JIYW5kbGVy
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249c2Vs
Zi5fY29uZmlndXJhdGlvbiwKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weQppbmRleCAwNmJiMTkxLi41NWUyZDhiIDEwMDc1
NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRl
c3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyX3Vu
aXR0ZXN0LnB5CkBAIC0zOSw3ICszOSw3IEBAIGltcG9ydCB1bml0dGVzdAogCiBpbXBvcnQgY2hl
Y2tlciBhcyBzdHlsZQogZnJvbSB3ZWJraXRweS5zdHlsZV9yZWZlcmVuY2VzIGltcG9ydCBMb2dU
ZXN0aW5nCi1mcm9tIHdlYmtpdHB5LnN0eWxlX3JlZmVyZW5jZXMgaW1wb3J0IFVuaXRUZXN0TG9n
U3RyZWFtCitmcm9tIHdlYmtpdHB5LnN0eWxlX3JlZmVyZW5jZXMgaW1wb3J0IFRlc3RMb2dTdHJl
YW0KIGZyb20gY2hlY2tlciBpbXBvcnQgX0JBU0VfRklMVEVSX1JVTEVTCiBmcm9tIGNoZWNrZXIg
aW1wb3J0IF9NQVhfUkVQT1JUU19QRVJfQ0FURUdPUlkKIGZyb20gY2hlY2tlciBpbXBvcnQgX1BB
VEhfUlVMRVNfU1BFQ0lGSUVSIGFzIFBBVEhfUlVMRVNfU1BFQ0lGSUVSCkBAIC02Myw3ICs2Myw3
IEBAIGNsYXNzIENvbmZpZ3VyZUxvZ2dpbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAi
IiJUZXN0cyB0aGUgY29uZmlndXJlX2xvZ2dpbmcoKSBmdW5jdGlvbi4iIiIKIAogICAgIGRlZiBz
ZXRVcChzZWxmKToKLSAgICAgICAgbG9nX3N0cmVhbSA9IFVuaXRUZXN0TG9nU3RyZWFtKHNlbGYp
CisgICAgICAgIGxvZ19zdHJlYW0gPSBUZXN0TG9nU3RyZWFtKHNlbGYpCiAgICAgICAgICMgVXNl
IGEgbG9nZ2VyIG90aGVyIHRoYW4gdGhlIHJvb3QgbG9nZ2VyIG9yIG9uZSBwcmVmaXhlZCB3aXRo
CiAgICAgICAgICMgd2Via2l0IHNvIGFzIG5vdCB0byBjb25mbGljdCB3aXRoIHRlc3Qtd2Via2l0
cHkgbG9nZ2luZy4KICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInVuaXR0ZXN0
IikKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvbWFpbi5w
eSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvbWFpbi5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWVlMWZiCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9tYWluLnB5CkBAIC0wLDAgKzEsMTU5IEBA
CisjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2plcmRvbmVrQHdlYmtpdC5v
cmcpCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisj
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBs
b2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworIyBQcmVmaXggd2l0aCBhbiB1bmRlcnNj
b3JlIHRvIHJlZHVjZSBjb25mdXNpb24gd2hlbiBjYWxsaW5nIGRldGVjdF9zY20oKQorIyBmcm9t
IHdpdGhpbiBoYW5kbGVfc2NtKCkgYmVsb3cuCitmcm9tIHdlYmtpdHB5LnN0eWxlX3JlZmVyZW5j
ZXMgaW1wb3J0IGRldGVjdF9zY20gYXMgX2RldGVjdF9zY20KKworCitfbG9nID0gbG9nZ2luZy5n
ZXRMb2dnZXIoX19uYW1lX18pCisKKworIyBUaGlzIGZ1bmN0aW9uIGlzIGVzc2VudGlhbGx5IGEg
cmVwbGFjZW1lbnQgZm9yIG9zLnBhdGgucmVscGF0aCgpCisjIHdoaWNoIGlzIGF2YWlsYWJsZSBp
biBQeXRob24gMi42LiAgSXQgYmVoYXZlcyBtb3JlIG9yIGxlc3MgdGhlIHNhbWUKKyMgZXhjZXB0
IGZvciByZXR1cm5pbmcgTm9uZSBvbiBwYXRocyBub3QgY29udGFpbmVkIGluIGFic19zdGFydF9w
YXRoLgorZGVmIF9yZWxfcGF0aChwYXRoLCBhYnNfc3RhcnRfcGF0aCwgb3NfcGF0aF9hYnNwYXRo
PU5vbmUpOgorICAgICIiIlJldHVybiBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIGdpdmVuIHN0YXJ0
IHBhdGgsIG9yIE5vbmUuCisKKyAgICBSZXR1cm5zIE5vbmUgaWYgdGhlIHBhdGggaXMgbm90IGNv
bnRhaW5lZCBpbiB0aGUgZGlyZWN0b3J5CisgICAgYWJzX3N0YXJ0X3BhdGguCisKKyAgICBBcmdz
OgorICAgICAgcGF0aDogQW4gYWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aCB0byBjb252ZXJ0IHRv
IGEgcmVsYXRpdmUgcGF0aC4KKyAgICAgIGFic19zdGFydF9wYXRoOiBBbiBhYnNvbHV0ZSBwYXRo
IHJlbGF0aXZlIHRvIHdoaWNoIHRoZSBnaXZlbiBwYXRoCisgICAgICAgICAgICAgICAgICAgICAg
c2hvdWxkIGJlIGNvbnZlcnRlZC4KKyAgICAgIG9zX3BhdGhfYWJzcGF0aDogQSByZXBsYWNlbWVu
dCBmdW5jdGlvbiBmb3IgdW5pdCB0ZXN0aW5nLgorICAgICAgICAgICAgICAgICAgICAgICBEZWZh
dWx0cyB0byBvcy5wYXRoLmFic3BhdGguCisKKyAgICAiIiIKKyAgICBpZiBvc19wYXRoX2Fic3Bh
dGggaXMgTm9uZToKKyAgICAgICAgb3NfcGF0aF9hYnNwYXRoID0gb3MucGF0aC5hYnNwYXRoCisK
KyAgICBwYXRoID0gb3NfcGF0aF9hYnNwYXRoKHBhdGgpCisKKyAgICBpZiBub3QgcGF0aC5sb3dl
cigpLnN0YXJ0c3dpdGgoYWJzX3N0YXJ0X3BhdGgubG93ZXIoKSk6CisgICAgICAgICMgVGhlbiBw
YXRoIGlzIG91dHNpZGUgdGhlIGRpcmVjdG9yeSBnaXZlbiBieSBhYnNfc3RhcnRfcGF0aC4KKyAg
ICAgICAgcmV0dXJuIE5vbmUKKworICAgIHBhdGggPSBwYXRoW2xlbihhYnNfc3RhcnRfcGF0aCk6
XQorICAgICMgVHJpbSBvZmYgYW55IGxlYWRpbmcgc2xhc2ggZnJvbSBwYXRoIGluIGNhc2UgYWJz
X3N0YXJ0X3BhdGgKKyAgICAjIGRvZXMgbm90IGVuZCBpbiBhIHNsYXNoLgorICAgIHBhdGggPSBw
YXRoLmxzdHJpcCgiL1xcIikKKworICAgIHJldHVybiBwYXRoCisKKworZGVmIGhhbmRsZV9zY20o
cGF0aHM9Tm9uZSwgbW9ja19kZXRlY3Rfc2NtPU5vbmUsIG1vY2tfb3M9Tm9uZSk6CisgICAgIiIi
RGV0ZWN0IHRoZSBzY20sIGFuZCBzd2l0Y2ggdG8gdGhlIHNvdXJjZSByb290LCBpZiBwb3NzaWJs
ZS4KKworICAgIFRoaXMgbWV0aG9kIHRyaWVzIHRvIGRldGVjdCB0aGUgc291cmNlIGNvbnRyb2wg
cm9vdCBvZiB0aGUgY3VycmVudAorICAgIGRpcmVjdG9yeSwgYXMgd2VsbCBhcyBpdHMgc2NtIChh
a2Egc291cmNlIGNvbnRyb2wgbWFuYWdlcikuCisgICAgICAgIElmIHRoZSBzb3VyY2UgY29udHJv
bCByb290IHdhcyBkZXRlY3RlZCBhbmQgYWxsIGdpdmVuIHBhdGhzIGFyZQorICAgIGNvbnRhaW5l
ZCB3aXRoaW4gdGhlIHNvdXJjZSByb290IChvciBpZiBwYXRocyBpcyBlbXB0eSBvciBOb25lKSwK
KyAgICB0aGlzIG1ldGhvZCBhbHNvIGNoYW5nZXMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rv
cnkgdG8gdGhlCisgICAgc291cmNlIHJvb3QuICBUaGlzIGFsbG93cyBmaWxlcyBwcm9jZXNzZWQg
dG8gYmUgZGlzcGxheWVkIHJlbGF0aXZlCisgICAgdG8gdGhlIHNvdXJjZSByb290LCBhbmQgZm9y
IHBhdGgtc3BlY2lmaWMgcnVsZXMgdG8gd29yayBhcyBleHBlY3RlZAorICAgIChlLmcuIHdoZXRo
ZXIgZmlsZXMgc2hvdWxkIGJlIHNraXBwZWQgYW5kIHdoZXRoZXIgY3VzdG9tIHN0eWxlIHJ1bGVz
CisgICAgc2hvdWxkIGFwcGx5KS4KKworICAgIFJldHVybnM6CisgICAgICBBIHBhaXIgb2YgKHBh
dGhzLCBzY20pLgorCisgICAgICBwYXRoczogVGhlIHBhdGhzIHBhcmFtZXRlciBjb252ZXJ0ZWQg
dG8gYSBsaXN0IG9mIHBhdGhzIHJlbGF0aXZlCisgICAgICAgICAgICAgdG8gdGhlIHNvdXJjZSBy
b290LCBpZiB0aGUgc291cmNlIHJvb3Qgd2FzIGRldGVjdGVkIGFuZAorICAgICAgICAgICAgIGlm
IGFsbCBnaXZlbiBwYXRocyBhcmUgY29udGFpbmVkIGluIHRoZSBzb3VyY2Ugcm9vdCBvciBvbmUK
KyAgICAgICAgICAgICBvZiBpdHMgc3ViLWRpcmVjdG9yaWVzLgorICAgICAgc2NtOiBUaGUgc2Nt
IGFzIGEgU2ltcGxlU2NtIGluc3RhbmNlIGlmIHRoZSBzY20gd2FzIGRldGVjdGVkLCBvciBOb25l
LgorCisgICAgQXJnczoKKyAgICAgIHBhdGhzOiBUaGUgbGlzdCBvZiBwYXRocyB0byBjaGVjayBz
dHlsZS4gIFRoaXMgYXJndW1lbnQgY2FuIGJlIE5vbmUKKyAgICAgICAgICAgICBvciB0aGUgZW1w
dHkgbGlzdCBpZiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBvciBhIGdpdAorICAgICAg
ICAgICAgIGNvbW1pdCBzaG91bGQgYmUgY2hlY2tlZC4KKyAgICAgIG1vY2tfZGV0ZWN0X3NjbTog
QSByZXBsYWNlbWVudCBmdW5jdGlvbiBmb3IgdW5pdCB0ZXN0aW5nLiAgRGVmYXVsdHMKKyAgICAg
ICAgICAgICAgICAgICAgICAgdG8gd2Via2l0cHkuc3R5bGVfcmVmZXJlbmNlcy5kZXRlY3Rfc2Nt
LgorICAgICAgbW9ja19vczogQSByZXBsYWNlbWVudCBtb2R1bGUgZm9yIHVuaXQgdGVzdGluZy4g
IERlZmF1bHRzIHRvIG9zLgorCisgICAgIiIiCisgICAgZGV0ZWN0X3NjbSA9IF9kZXRlY3Rfc2Nt
IGlmIG1vY2tfZGV0ZWN0X3NjbSBpcyBOb25lIGVsc2UgbW9ja19kZXRlY3Rfc2NtCisgICAgb3Nf
bW9kdWxlID0gb3MgaWYgbW9ja19vcyBpcyBOb25lIGVsc2UgbW9ja19vcworCisgICAgc2NtID0g
ZGV0ZWN0X3NjbSgpCisKKyAgICBpZiBzY20gaXMgbm90IE5vbmU6CisgICAgICAgIHNvdXJjZV9y
b290ID0gc2NtLnNvdXJjZV9yb290KCkKKyAgICAgICAgc291cmNlX3Jvb3QgPSBvcy5wYXRoLmFi
c3BhdGgoc291cmNlX3Jvb3QpCisgICAgZWxzZToKKyAgICAgICAgIyBGSVhNRTogSWYgc2NtIGlz
IE5vbmUsIHRyeSB0byBmaW5kIGEgInNvdXJjZSByb290IiB1c2luZyBhCisgICAgICAgICMgICAg
ICAgIGZpbGUtYmFzZWQgaGV1cmlzdGljIC0tIGZvciBleGFtcGxlIGJ5IGV4YW1pbmluZyBwYXJl
bnQKKyAgICAgICAgIyAgICAgICAgZGlyZWN0b3JpZXMgdW50aWwgYSBkaXJlY3RvcnkgaXMgZm91
bmQgY29udGFpbmluZworICAgICAgICAjICAgICAgICBKYXZhU2NyaXB0Q29yZSwgV2ViQ29yZSwg
V2ViS2l0LCBXZWJLaXRTaXRlLCBhbmQgV2ViS2l0VG9vbHMuCisgICAgICAgICMgICAgICAgIFRo
ZW4gbG9nIGFuIElORk8gbWVzc2FnZSBzYXlpbmcgdGhhdCBhIG5vbi1zY20gc291cmNlIHJvb3QK
KyAgICAgICAgIyAgICAgICAgd2FzIGZvdW5kLiAgVGhpcyBhbGxvd3MgY2hlY2std2Via2l0LXN0
eWxlIHRvIGJlIHJ1biBvbgorICAgICAgICAjICAgICAgICBub24tc2NtIGNvcGllcyBvZiB0aGUg
c291cmNlIHRyZWUgKGUuZy4gbmlnaHRsaWVzKS4KKyAgICAgICAgc291cmNlX3Jvb3QgPSBOb25l
CisKKyAgICBpZiBzb3VyY2Vfcm9vdCBpcyBOb25lOgorICAgICAgICBpZiBub3QgcGF0aHM6Cisg
ICAgICAgICAgICAjIEZJWE1FOiBMb2cgdGhpcyBlcnJvciBhbmQgZXhpdCBmcm9tIHdpdGhpbiB0
aGUgb3B0aW9uIHBhcnNlcgorICAgICAgICAgICAgIyAgICAgICAgaW5zdGVhZCwgYW5kIGhhbmRs
ZSB0aGlzIGNhc2UgaGVyZSBieSByYWlzaW5nIGFuCisgICAgICAgICAgICAjICAgICAgICBlcnJv
ci4gIFRoaXMgcHJvYmFibHkgcmVxdWlyZXMgZGV0ZWN0aW5nIHRoZSBzY20gcHJpb3IKKyAgICAg
ICAgICAgICMgICAgICAgIHRvIHBhcnNpbmcgb3B0aW9ucywgYW5kIHRoZW4gcGFzc2luZyB0aGUg
cmVzdWx0IHRvCisgICAgICAgICAgICAjICAgICAgICB0aGUgb3B0aW9uIHBhcnNlci4KKyAgICAg
ICAgICAgIF9sb2cuZXJyb3IoIlNvdXJjZSByb290IG5vdCBmb3VuZDogZmlsZSBuYW1lcyBtdXN0
IGJlIHBhc3NlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICJ3aGVuIHRoZSBzb3VyY2Ugcm9v
dCBjYW5ub3QgYmUgZm91bmQuIikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIF9s
b2cud2FybigiU291cmNlIHJvb3Qgbm90IGRldGVjdGVkOiBwYXRoLXNwZWNpZmljIGxvZ2ljIG1h
eSB5aWVsZCAiCisgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCByZXN1bHRzLlxuIgorICAg
ICAgICAgICAgICAgICAgIiBJZiB5b3UgYXJlIHJ1bm5pbmcgdGhpcyBzY3JpcHQgZnJvbSBhIGtu
b3duIHNvdXJjZSAiCisgICAgICAgICAgICAgICAgICAicm9vdCwgaWdub3JlIHRoaXMgd2Fybmlu
Zy4iKQorICAgICAgICByZXR1cm4gKHBhdGhzLCBOb25lKQorCisgICAgaWYgcGF0aHM6CisgICAg
ICAgICMgVGhlbiB0cnkgY29udmVydGluZyBhbGwgb2YgdGhlIHBhdGhzIHRvIHBhdGhzIHJlbGF0
aXZlIHRvCisgICAgICAgICMgdGhlIHNvdXJjZSByb290LgorICAgICAgICByZWxfcGF0aHMgPSBb
XQorICAgICAgICBmb3IgcGF0aCBpbiBwYXRoczoKKyAgICAgICAgICAgIHJlbF9wYXRoID0gX3Jl
bF9wYXRoKHBhdGgsIHNvdXJjZV9yb290KQorICAgICAgICAgICAgaWYgcmVsX3BhdGggaXMgTm9u
ZToKKyAgICAgICAgICAgICAgICAjIFRoZW4gdGhlIHBhdGggaXMgb3V0c2lkZSB0aGUgc291cmNl
IHRyZWUuICBTaW5jZSBhbGwKKyAgICAgICAgICAgICAgICAjIHBhdGhzIHNob3VsZCBiZSBpbnRl
cnByZXRlZCByZWxhdGl2ZSB0byB0aGUgc2FtZSByb290LAorICAgICAgICAgICAgICAgICMgZG8g
bm90IGludGVycHJldCBhbnkgb2YgdGhlIHBhdGhzIGFzIHJlbGF0aXZlIHRvIHRoZQorICAgICAg
ICAgICAgICAgICMgc291cmNlIHJvb3QuICBJbnRlcnByZXQgYWxsIG9mIHRoZW0gcmVsYXRpdmUg
dG8gdGhlCisgICAgICAgICAgICAgICAgIyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCBhbmQg
ZG8gbm90IGNoYW5nZSB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICMgd29ya2luZyBkaXJl
Y3RvcnkuCisgICAgICAgICAgICAgICAgX2xvZy53YXJuKCJPbmUgb2YgdGhlIGdpdmVuIGZpbGVz
IGlzIG91dHNpZGUgdGhlIHNvdXJjZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ0cmVl
OiBwYXRoLXNwZWNpZmljIGxvZ2ljIG1heSB5aWVsZCB1bmV4cGVjdGVkICIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgInJlc3VsdHMuXG4gRW5zdXJlIHRoYXQgYWxsIGZpbGVzIGFyZSB3aXRo
aW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIHNvdXJjZSB0cmVlIHRvIGFjaGll
dmUgZXhwZWN0ZWQgcmVzdWx0cy4iKQorICAgICAgICAgICAgICAgIHJldHVybiAocGF0aHMsIHNj
bSkKKyAgICAgICAgICAgIHJlbF9wYXRocy5hcHBlbmQocmVsX3BhdGgpCisgICAgICAgICMgSWYg
d2UgZ290IGhlcmUsIHRoZSBjb252ZXJzaW9uIHdhcyBzdWNjZXNzZnVsLgorICAgICAgICBwYXRo
cyA9IHJlbF9wYXRocworCisgICAgX2xvZy5kZWJ1ZygiQ2hhbmdpbmcgdG8gc291cmNlIHJvb3Q6
ICIgKyBzb3VyY2Vfcm9vdCkKKyAgICBvc19tb2R1bGUuY2hkaXIoc291cmNlX3Jvb3QpCisKKyAg
ICByZXR1cm4gKHBhdGhzLCBzY20pCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL21haW5fdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL21haW5fdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZTFjYWQ5NwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvbWFpbl91bml0dGVzdC5weQpAQCAtMCwwICsxLDIwOSBAQAorIyBDb3B5cmln
aHQgKEMpIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNocmlzLmplcmRvbmVrQGdtYWlsLmNvbSkKKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwK
KyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiVW5pdCB0ZXN0cyBm
b3IgbWFpbi5weS4iIiIKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gbWFpbiBpbXBvcnQgX3Jl
bF9wYXRoCitmcm9tIG1haW4gaW1wb3J0IGhhbmRsZV9zY20KK2Zyb20gd2Via2l0cHkuc3R5bGVf
cmVmZXJlbmNlcyBpbXBvcnQgTG9nVGVzdGluZworCisKK2NsYXNzIFJlbFBhdGhUZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKKworICAgICIiIlRlc3RzIF9yZWxfcGF0aCgpLiIiIgorCisgICAgIyBT
aW5jZSBvdXIgb3NfcGF0aF9hYnNwYXRoIHJldHVybnMgdGhlIHNhbWUgcGF0aCwgd2Ugc2hvdWxk
IHBhc3MKKyAgICAjIGluIGFic29sdXRlIHBhdGhzIGZvciB0aGUgcGF0aCBwYXJhbWV0ZXIgb2Yg
X3JlbF9wYXRoKCkuCisgICAgb3NfcGF0aF9hYnNwYXRoID0gbGFtYmRhIHNlbGYsIHBhdGg6IHBh
dGgKKworICAgIGRlZiBfcmVsX3BhdGgoc2VsZiwgcGF0aCwgYWJzX3N0YXJ0X3BhdGgpOgorICAg
ICAgICByZXR1cm4gX3JlbF9wYXRoKHBhdGgsIGFic19zdGFydF9wYXRoLCBzZWxmLm9zX3BhdGhf
YWJzcGF0aCkKKworICAgIGRlZiB0ZXN0X3JlbF9wYXRoKHNlbGYpOgorICAgICAgICByZWxfcGF0
aCA9IHNlbGYuX3JlbF9wYXRoKCIvV2ViS2l0L3Rlc3QvRm9vLnR4dCIsICIvV2ViS2l0IikKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVsX3BhdGgsICJ0ZXN0L0Zvby50eHQiKQorCisgICAg
ICAgIHJlbF9wYXRoID0gc2VsZi5fcmVsX3BhdGgoIi9XZWJLaXQvdGVzdC9Gb28udHh0IiwgIi9X
ZWJLaXQvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVsX3BhdGgsICJ0ZXN0L0Zvby50
eHQiKQorCisgICAgICAgIHJlbF9wYXRoID0gc2VsZi5fcmVsX3BhdGgociJjOlxXZWJLaXRcdGVz
dFxGb28udHh0IiwgciJjOlxXZWJLaXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZWxf
cGF0aCwgciJ0ZXN0XEZvby50eHQiKQorCisgICAgICAgIHJlbF9wYXRoID0gc2VsZi5fcmVsX3Bh
dGgociJjOlxXZWJLaXRcdGVzdFxGb28udHh0IiwgImM6XFxXZWJLaXRcXCIpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKHJlbF9wYXRoLCByInRlc3RcRm9vLnR4dCIpCisKKyAgICBkZWYgdGVz
dF9yZWxfcGF0aF9ub25lKHNlbGYpOgorICAgICAgICAiIiJUZXN0IF9yZWxfcGF0aCgpIHdpdGgg
Tm9uZSByZXR1cm4gdmFsdWUuIiIiCisgICAgICAgIHJlbF9wYXRoID0gc2VsZi5fcmVsX3BhdGgo
Ii9vdGhlcl9kaXIvdGVzdC9mb28udHh0IiwgIi9XZWJLaXQiKQorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUocmVsX3BhdGggaXMgTm9uZSkKKworCitjbGFzcyBIYW5kbGVTY21UZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKKworICAgICIiIlRlc3RzIGhhbmRsZV9zY20oKS4iIiIKKworICAgIGNsYXNz
IF9Nb2NrT3Mob2JqZWN0KToKKworICAgICAgICAiIiJBIG1vY2sgb3MgbW9kdWxlIGZvciB1bml0
IHRlc3RpbmcuIiIiCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfY2FzZSk6Cisg
ICAgICAgICAgICBzZWxmLl90ZXN0X2Nhc2UgPSB0ZXN0X2Nhc2UKKyAgICAgICAgICAgIHNlbGYu
X2N1cnJlbnRfZGlyZWN0b3J5ID0gSGFuZGxlU2NtVGVzdC5fb3JpZ2luYWxfZGlyZWN0b3J5CisK
KyAgICAgICAgZGVmIGNoZGlyKHNlbGYsIGN1cnJlbnRfZGlyZWN0b3J5KToKKyAgICAgICAgICAg
IHNlbGYuX2N1cnJlbnRfZGlyZWN0b3J5ID0gY3VycmVudF9kaXJlY3RvcnkKKworICAgICAgICBk
ZWYgYXNzZXJ0Q3VycmVudERpcmVjdG9yeShzZWxmLCBleHBlY3RlZF9kaXJlY3RvcnkpOgorICAg
ICAgICAgICAgc2VsZi5fdGVzdF9jYXNlLmFzc2VydEVxdWFscyhleHBlY3RlZF9kaXJlY3Rvcnks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRf
ZGlyZWN0b3J5KQorCisgICAgY2xhc3MgX01vY2tTaW1wbGVTY20ob2JqZWN0KToKKyAgICAKKyAg
ICAgICAgIiIiQSBtb2NrIFNpbXBsZVNjbSBmb3IgdW5pdCB0ZXN0aW5nLiIiIgorICAgIAorICAg
ICAgICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlX3Jvb3QpOgorICAgICAgICAgICAgIiIiQ3Jl
YXRlIGFuIGluc3RhbmNlLgorICAgIAorICAgICAgICAgICAgQXJnczoKKyAgICAgICAgICAgICAg
c291cmNlX3Jvb3Q6IEEgc3RyaW5nIHRoYXQgaXMgdGhlIGFic29sdXRlIHBhdGggdGhhdAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX3Jvb3QoKSBzaG91bGQgcmV0dXJuLgorICAg
IAorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBzZWxmLl9zb3VyY2Vfcm9vdCA9IHNvdXJj
ZV9yb290CisgICAgCisgICAgICAgIGRlZiBzb3VyY2Vfcm9vdChzZWxmKToKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLl9zb3VyY2Vfcm9vdAorCisgICAgX29yaWdpbmFsX2RpcmVjdG9yeSA9ICIv
b3JpZ2luYWwiCisgICAgX3NvdXJjZV9yb290ID0gIi9XZWJLaXQiCisKKyAgICBkZWYgc2V0VXAo
c2VsZik6CisgICAgICAgIHNlbGYuX2xvZyA9IExvZ1Rlc3Rpbmcuc2V0VXAoc2VsZikKKyAgICAg
ICAgc2VsZi5fbW9ja19vcyA9IHNlbGYuX01vY2tPcyhzZWxmKQorICAgICAgICBzZWxmLl9tb2Nr
X3NjbSA9IHNlbGYuX01vY2tTaW1wbGVTY20oc2VsZi5fc291cmNlX3Jvb3QpCisKKyAgICBkZWYg
dGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuX2xvZy50ZWFyRG93bigpCisKKyAgICAjIFRo
aXMgbWV0aG9kIGlzIGEgY29udmVuaWVudCB3cmFwcGVyIGZvciBoYW5kbGVfc2NtKCkgdGhhdAor
ICAgICMgcGFzc2VzIHRoZSBtb2NrX29zIGZvciB0aGlzIHVuaXQgdGVzdGluZyBjbGFzcy4KKyAg
ICBkZWYgX2hhbmRsZV9zY20oc2VsZiwgcGF0aHMsIG1vY2tfZGV0ZWN0X3NjbSk6CisgICAgICAg
IHJldHVybiBoYW5kbGVfc2NtKHBhdGhzPXBhdGhzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBtb2NrX2RldGVjdF9zY209bW9ja19kZXRlY3Rfc2NtLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBtb2NrX29zPXNlbGYuX21vY2tfb3MpCisKKyAgICBkZWYgX2Fzc2VydF9oYW5kbGVfc2Nt
X3Jlc3VsdChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsX3Jl
dHVybl92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3Jl
dHVybl92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2xv
Z19tZXNzYWdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2N1
cnJlbnRfZGlyZWN0b3J5KToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYWN0dWFsX3JldHVy
bl92YWx1ZSwgZXhwZWN0ZWRfcmV0dXJuX3ZhbHVlKQorICAgICAgICBzZWxmLl9sb2cuYXNzZXJ0
TWVzc2FnZXMoZXhwZWN0ZWRfbG9nX21lc3NhZ2VzKQorICAgICAgICBzZWxmLl9tb2NrX29zLmFz
c2VydEN1cnJlbnREaXJlY3RvcnkoZXhwZWN0ZWRfY3VycmVudF9kaXJlY3RvcnkpCisKKyAgICBk
ZWYgdGVzdF9zY21fbm9uZV9wYXRoc19ub25lKHNlbGYpOgorICAgICAgICBtb2NrX2RldGVjdF9z
Y20gPSBsYW1iZGE6IE5vbmUKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0
LCBzZWxmLl9oYW5kbGVfc2NtLCBwYXRocz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBtb2NrX2RldGVjdF9zY209bW9ja19kZXRlY3Rfc2NtKQorCisgICAgICAgIHNlbGYuX2xvZy5h
c3NlcnRNZXNzYWdlcyhbIkVSUk9SOiBTb3VyY2Ugcm9vdCBub3QgZm91bmQ6IGZpbGUgbmFtZXMg
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGJlIHBhc3NlZCB3aGVu
IHRoZSBzb3VyY2Ugcm9vdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNh
bm5vdCBiZSBmb3VuZC5cbiJdKQorICAgICAgICBzZWxmLl9tb2NrX29zLmFzc2VydEN1cnJlbnRE
aXJlY3Rvcnkoc2VsZi5fb3JpZ2luYWxfZGlyZWN0b3J5KQorCisKKyAgICBkZWYgdGVzdF9zY21f
bm9uZV9wYXRoc19lbXB0eShzZWxmKToKKyAgICAgICAgbW9ja19kZXRlY3Rfc2NtID0gbGFtYmRh
OiBOb25lCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCwgc2VsZi5faGFu
ZGxlX3NjbSwgcGF0aHM9W10sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2tfZGV0ZWN0
X3NjbT1tb2NrX2RldGVjdF9zY20pCisKKyAgICAgICAgc2VsZi5fbG9nLmFzc2VydE1lc3NhZ2Vz
KFsiRVJST1I6IFNvdXJjZSByb290IG5vdCBmb3VuZDogZmlsZSBuYW1lcyAiCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUgcGFzc2VkIHdoZW4gdGhlIHNvdXJjZSBy
b290ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGJlIGZvdW5k
LlxuIl0pCisgICAgICAgIHNlbGYuX21vY2tfb3MuYXNzZXJ0Q3VycmVudERpcmVjdG9yeShzZWxm
Ll9vcmlnaW5hbF9kaXJlY3RvcnkpCisKKyAgICBkZWYgdGVzdF9ub19zY21fbm9uZW1wdHlfcGF0
aHMoc2VsZik6CisgICAgICAgIG1vY2tfZGV0ZWN0X3NjbSA9IGxhbWJkYTogTm9uZQorCisgICAg
ICAgIGhhbmRsZWRfc2NtID0gc2VsZi5faGFuZGxlX3NjbShwYXRocz1bInBhdGgxIl0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrX2RldGVjdF9zY209bW9ja19k
ZXRlY3Rfc2NtKQorCisgICAgICAgIGxvZ19tZXNzYWdlcyA9IFsiV0FSTklORzogU291cmNlIHJv
b3Qgbm90IGRldGVjdGVkOiBwYXRoLXNwZWNpZmljICIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICJsb2dpYyBtYXkgeWllbGQgdW5leHBlY3RlZCByZXN1bHRzLlxuIgorICAgICAgICAgICAgICAg
ICAgICAgICAgIiBJZiB5b3UgYXJlIHJ1bm5pbmcgdGhpcyBzY3JpcHQgZnJvbSBhIGtub3duIHNv
dXJjZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAicm9vdCwgaWdub3JlIHRoaXMgd2Fybmlu
Zy5cbiJdOworCisgICAgICAgIHNlbGYuX2Fzc2VydF9oYW5kbGVfc2NtX3Jlc3VsdChoYW5kbGVk
X3NjbSwgKFsicGF0aDEiXSwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsb2dfbWVzc2FnZXMsIHNlbGYuX29yaWdpbmFsX2RpcmVjdG9yeSkKKworICAgIGRl
ZiB0ZXN0X3dpdGhfc2NtX25vbmVfcGF0aHMoc2VsZik6CisgICAgICAgIG1vY2tfc2NtID0gc2Vs
Zi5fbW9ja19zY20KKyAgICAgICAgbW9ja19kZXRlY3Rfc2NtID0gbGFtYmRhOiBtb2NrX3NjbQor
CisgICAgICAgIGhhbmRsZWRfc2NtID0gc2VsZi5faGFuZGxlX3NjbShwYXRocz1Ob25lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9ja19kZXRlY3Rfc2NtPW1vY2tf
ZGV0ZWN0X3NjbSkKKworICAgICAgICBzZWxmLl9hc3NlcnRfaGFuZGxlX3NjbV9yZXN1bHQoaGFu
ZGxlZF9zY20sIChOb25lLCBtb2NrX3NjbSksIFtdLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fc291cmNlX3Jvb3QpCisKKyAgICBkZWYgdGVzdF93aXRoX3Nj
bV9jb252ZXJ0ZWRfcGF0aHMoc2VsZik6CisgICAgICAgIHBhdGhzPVsiL1dlYktpdC9mb28xLnR4
dCIsCisgICAgICAgICAgICAgICAiL1dlYktpdC9mb28yLnR4dCJdCisKKyAgICAgICAgbW9ja19z
Y20gPSBzZWxmLl9tb2NrX3NjbQorICAgICAgICBtb2NrX2RldGVjdF9zY20gPSBsYW1iZGE6IG1v
Y2tfc2NtCisKKyAgICAgICAgaGFuZGxlZF9zY20gPSBzZWxmLl9oYW5kbGVfc2NtKHBhdGhzPXBh
dGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9ja19kZXRlY3Rf
c2NtPW1vY2tfZGV0ZWN0X3NjbSkKKworICAgICAgICBzZWxmLl9hc3NlcnRfaGFuZGxlX3NjbV9y
ZXN1bHQoaGFuZGxlZF9zY20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoWyJmb28xLnR4dCIsICJmb28yLnR4dCJdLCBtb2NrX3NjbSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX3NvdXJjZV9yb290KQorCisgICAgZGVmIHRlc3Rfd2l0aF9zY21fdW5j
b252ZXJ0ZWRfcGF0aHMoc2VsZik6CisgICAgICAgIHBhdGhzPVsiL1dlYktpdC9mb28xLnR4dCIs
CisgICAgICAgICAgICAgICAiL291dHNpZGUvZm9vMi50eHQiXQorCisgICAgICAgIG1vY2tfc2Nt
ID0gc2VsZi5fbW9ja19zY20KKyAgICAgICAgbW9ja19kZXRlY3Rfc2NtID0gbGFtYmRhOiBtb2Nr
X3NjbQorCisgICAgICAgIGhhbmRsZWRfc2NtID0gc2VsZi5faGFuZGxlX3NjbShwYXRocz1wYXRo
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2tfZGV0ZWN0X3Nj
bT1tb2NrX2RldGVjdF9zY20pCisKKyAgICAgICAgbG9nX21lc3NhZ2VzID0gWyJXQVJOSU5HOiBP
bmUgb2YgdGhlIGdpdmVuIGZpbGVzIGlzIG91dHNpZGUgdGhlICIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICJzb3VyY2UgdHJlZTogcGF0aC1zcGVjaWZpYyBsb2dpYyBtYXkgeWllbGQgIgorICAg
ICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgcmVzdWx0cy5cbiBFbnN1cmUgdGhhdCBh
bGwgZmlsZXMgYXJlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoaW4gdGhlIHNvdXJj
ZSB0cmVlIHRvIGFjaGlldmUgZXhwZWN0ZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgInJl
c3VsdHMuXG4iXTsKKworICAgICAgICBzZWxmLl9hc3NlcnRfaGFuZGxlX3NjbV9yZXN1bHQoaGFu
ZGxlZF9zY20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0aHMs
IG1vY2tfc2NtKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ19t
ZXNzYWdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29y
aWdpbmFsX2RpcmVjdG9yeSkKKworCisKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvdW5pdHRlc3RzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS91bml0dGVzdHMucHkKaW5kZXggNjI2MTVhYi4uZmY0NGRlMCAxMDA2NDQKLS0tIGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS91bml0dGVzdHMucHkKKysrIGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS91bml0dGVzdHMucHkKQEAgLTM4LDYgKzM4
LDcgQEAgaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIGNoZWNrZXJfdW5pdHRlc3QgaW1wb3J0ICoKIGZy
b20gZXJyb3JfaGFuZGxlcnNfdW5pdHRlc3QgaW1wb3J0ICoKIGZyb20gZmlsdGVyX3VuaXR0ZXN0
IGltcG9ydCAqCitmcm9tIG1haW5fdW5pdHRlc3QgaW1wb3J0ICoKIGZyb20gb3B0cGFyc2VyX3Vu
aXR0ZXN0IGltcG9ydCAqCiBmcm9tIHByb2Nlc3NvcnMuY29tbW9uX3VuaXR0ZXN0IGltcG9ydCAq
CiBmcm9tIHByb2Nlc3NvcnMuY3BwX3VuaXR0ZXN0IGltcG9ydCAqCmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlX3JlZmVyZW5jZXMucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlX3JlZmVyZW5jZXMucHkKaW5kZXggZTU3Y2QwZS4uN2Q4
NmE0NiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZV9yZWZl
cmVuY2VzLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGVfcmVmZXJl
bmNlcy5weQpAQCAtNDIsMTAgKzQyLDE4IEBAIGltcG9ydCBvcwogCiBmcm9tIGRpZmZfcGFyc2Vy
IGltcG9ydCBEaWZmUGFyc2VyCiBmcm9tIGluaXQubG9ndGVzdGluZyBpbXBvcnQgTG9nVGVzdGlu
ZwotZnJvbSBpbml0LmxvZ3Rlc3RpbmcgaW1wb3J0IFVuaXRUZXN0TG9nU3RyZWFtCitmcm9tIGlu
aXQubG9ndGVzdGluZyBpbXBvcnQgVGVzdExvZ1N0cmVhbQogZnJvbSBzY20gaW1wb3J0IGRldGVj
dF9zY21fc3lzdGVtCiAKIAorZGVmIGRldGVjdF9zY20oKToKKyAgICAiIiJSZXR1cm4gYSBTaW1w
bGVTY20gaW5zdGFuY2UsIG9yIE5vbmUgaWYgaXQgY2Fubm90IGJlIGZvdW5kLiIiIgorICAgIGN3
ZCA9IG9zLnBhdGguYWJzcGF0aChvcy5jdXJkaXIpCisgICAgc2NtID0gZGV0ZWN0X3NjbV9zeXN0
ZW0oY3dkKQorCisgICAgcmV0dXJuIE5vbmUgaWYgc2NtIGlzIE5vbmUgZWxzZSBTaW1wbGVTY20o
c2NtKQorCisKIGRlZiBwYXJzZV9wYXRjaChwYXRjaF9zdHJpbmcpOgogCiAgICAgIiIiUGFyc2Ug
YSBwYXRjaCBzdHJpbmcgYW5kIHJldHVybiB0aGUgYWZmZWN0ZWQgZmlsZXMuIiIiCkBAIC01OCwx
MSArNjYsMTAgQEAgY2xhc3MgU2ltcGxlU2NtKG9iamVjdCk6CiAKICAgICAiIiJTaW1wbGUgZmFj
YWRlIHRvIFNDTSBmb3IgdXNlIGJ5IHN0eWxlIHBhY2thZ2UuIiIiCiAKLSAgICBkZWYgX19pbml0
X18oc2VsZik6Ci0gICAgICAgIGN3ZCA9IG9zLnBhdGguYWJzcGF0aCgnLicpCi0gICAgICAgIHNl
bGYuX3NjbSA9IGRldGVjdF9zY21fc3lzdGVtKGN3ZCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
c2NtKToKKyAgICAgICAgc2VsZi5fc2NtID0gc2NtCiAKLSAgICBkZWYgY2hlY2tvdXRfcm9vdChz
ZWxmKToKKyAgICBkZWYgc291cmNlX3Jvb3Qoc2VsZik6CiAgICAgICAgICIiIlJldHVybiB0aGUg
c291cmNlIGNvbnRyb2wgcm9vdCBhcyBhbiBhYnNvbHV0ZSBwYXRoLiIiIgogICAgICAgICByZXR1
cm4gc2VsZi5fc2NtLmNoZWNrb3V0X3Jvb3QKIAo=
</data>
<flag name="commit-queue"
          id="33779"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50612</attachid>
            <date>2010-03-12 11:02:58 -0800</date>
            <delta_ts>2010-03-12 11:36:04 -0800</delta_ts>
            <desc>Proposed patch 3</desc>
            <filename>_patch-35498-3.diff</filename>
            <type>text/plain</type>
            <size>26462</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBkMzUyMjc0Li5iNzQ4ZjE3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTAtMDMt
MTIgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlZCBjaGVjay13ZWJraXQt
c3R5bGUgdG8gY29udmVydCBwYXRocyB0byBwYXRocyByZWxhdGl2ZSB0bworICAgICAgICB0aGUg
c291cmNlIHJvb3Qgd2hlbiBpbnZva2luZyBjaGVjay13ZWJraXQtc3R5bGUgd2l0aCB0aGUgZmls
ZXMKKyAgICAgICAgc3ludGF4LiAgQWxzbyBhZGRlZCB3YXJuaW5nIG1lc3NhZ2VzIHdoZXJlIGFw
cHJvcHJpYXRlLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zNTQ5OAorCisgICAgICAgIENvbnZlcnRpbmcgcGF0aHMgdG8gcGF0aHMgcmVsYXRpdmUg
dG8gdGhlIHNvdXJjZSByb290IGVuc3VyZXMKKyAgICAgICAgdGhhdCBzdHlsZSBjaGVja2luZyB3
aWxsIGJlaGF2ZSBhcyBleHBlY3RlZCAoc2luY2UgcGF0aC1zcGVjaWZpYworICAgICAgICBydWxl
cyBhc3N1bWUgaW5wdXQgcGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBzb3VyY2Ugcm9vdCkuCisK
KyAgICAgICAgKiBTY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHlsZToKKyAgICAgICAgICAtIEFkZGVk
IGEgY2FsbCB0byBoYW5kbGVfc2NtIHByaW9yIHRvIGNoZWNraW5nIHN0eWxlLgorCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9pbml0L2xvZ3Rlc3RpbmcucHk6CisgICAgICAgICAgLSBSZW5h
bWVkIFVuaXRUZXN0TG9nU3RyZWFtIHRvIFRlc3RMb2dTdHJlYW0uCisKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHk6CisgICAgICAgICAgLSBBZGRlZCBhIGxvZ2dp
bmdfbGV2ZWwgcGFyYW1ldGVyIHRvIGNvbmZpZ3VyZV9sb2dnaW5nKCkuCisKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHk6CisgICAgICAgICAgLSBV
cGRhdGVkIHRoZSBuYW1lIG9mIFVuaXRUZXN0TG9nU3RyZWFtIHRvIFRlc3RMb2dTdHJlYW0uCisK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL21haW4ucHk6IEFkZGVkLgorICAgICAg
ICAgIC0gQWRkZWQgYSBuZXcgZmlsZSB0byBhbGxvdyB0aGUgY29kZSBpbiB0aGlzIHBhdGNoIHRv
IGJlCisgICAgICAgICAgICB1bml0LXRlc3RlZCwgYXMgb3Bwb3NlZCB0byBhZGRpbmcgbmV3IGNv
ZGUgdG8gY2hlY2std2Via2l0LXN0eWxlLgorICAgICAgICAgIC0gQWRkZWQgX3JlbF9wYXRoKCkg
YXMgYSBzdWJzdGl0dXRlIGZvciBvcy5wYXRoLnJlbHBhdGgoKQorICAgICAgICAgICAgd2hpY2gg
aXMgYXZhaWxhYmxlIG9ubHkgaW4gUHl0aG9uIDIuNi4KKyAgICAgICAgICAtIEFkZGVkIGhhbmRs
ZV9zY20oKSB3aGljaCBjb250YWlucyBtb3N0IG9mIHRoZSBuZXcgZnVuY3Rpb25hbGl0eQorICAg
ICAgICAgICAgaW4gdGhpcyBwYXRjaC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5
bGUvbWFpbl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgICAgLSBBZGRlZCBSZWxQYXRoVGVz
dCB0byB0ZXN0IG1haW4uX3JlbF9wYXRoKCkuCisgICAgICAgICAgLSBBZGRlZCBIYW5kbGVTY21U
ZXN0IHRvIHRlc3QgaGFuZGxlX3NjbSgpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9z
dHlsZS91bml0dGVzdHMucHk6CisgICAgICAgICAgLSBBZGRlZCBhbiBpbXBvcnQgc3RhdGVtZW50
IGZvciBtYWluX3VuaXR0ZXN0LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZV9y
ZWZlcmVuY2VzLnB5OgorICAgICAgICAgIC0gVXBkYXRlZCB0aGUgbmFtZSBvZiBVbml0VGVzdExv
Z1N0cmVhbSB0byBUZXN0TG9nU3RyZWFtLgorICAgICAgICAgIC0gQWRkZWQgYSBkZXRlY3Rfc2Nt
KCkgZnVuY3Rpb24gdG8gYWxsb3cgcmV0dXJuaW5nIE5vbmUgaW5zdGVhZCBvZgorICAgICAgICAg
ICAgYSBTaW1wbGVTY20gaW5zdGFuY2Ugd2hlbiBjaGVja2luZyBmb3IgdGhlIHNjbS4KKwogMjAx
MC0wMy0xMCAgQ2hyaXMgSmVyZG9uZWsgIDxjamVyZG9uZWtAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTaGluaWNoaXJvIEhhbWFqaS4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvY2hlY2std2Via2l0LXN0eWxlIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9jaGVjay13
ZWJraXQtc3R5bGUKaW5kZXggZjE4ODViMi4uOTkwYjc4ZCAxMDA3NTUKLS0tIGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy9jaGVjay13ZWJraXQtc3R5bGUKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9j
aGVjay13ZWJraXQtc3R5bGUKQEAgLTQ4LDExICs0OCwxMyBAQCBpbXBvcnQgb3MKIGltcG9ydCBv
cy5wYXRoCiBpbXBvcnQgc3lzCiAKK2Zyb20gd2Via2l0cHkuc3R5bGUubWFpbiBpbXBvcnQgaGFu
ZGxlX3NjbQogaW1wb3J0IHdlYmtpdHB5LnN0eWxlLmNoZWNrZXIgYXMgY2hlY2tlcgotZnJvbSB3
ZWJraXRweS5zdHlsZV9yZWZlcmVuY2VzIGltcG9ydCBTaW1wbGVTY20KIAogX2xvZyA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKCJjaGVjay13ZWJraXQtc3R5bGUiKQogCisKKyMgRklYTUU6IE1vdmUgdGhp
cyBjb2RlIHRvIHN0eWxlLm1haW4uCiBkZWYgbWFpbigpOgogICAgICMgQ2hhbmdlIHN0ZGVyciB0
byB3cml0ZSB3aXRoIHJlcGxhY2VtZW50IGNoYXJhY3RlcnMgc28gd2UgZG9uJ3QgZGllCiAgICAg
IyBpZiB3ZSB0cnkgdG8gcHJpbnQgc29tZXRoaW5nIGNvbnRhaW5pbmcgbm9uLUFTQ0lJIGNoYXJh
Y3RlcnMuCkBAIC03NCwyMCArNzYsMTcgQEAgZGVmIG1haW4oKToKICAgICBjaGVja2VyLmNvbmZp
Z3VyZV9sb2dnaW5nKHN0ZGVycikKIAogICAgIHBhcnNlciA9IGNoZWNrZXIuY2hlY2tfd2Via2l0
X3N0eWxlX3BhcnNlcigpCi0gICAgKGZpbGVzLCBvcHRpb25zKSA9IHBhcnNlci5wYXJzZShzeXMu
YXJndlsxOl0pCisgICAgKHBhdGhzLCBvcHRpb25zKSA9IHBhcnNlci5wYXJzZShzeXMuYXJndlsx
Ol0pCiAKICAgICBjb25maWd1cmF0aW9uID0gY2hlY2tlci5jaGVja193ZWJraXRfc3R5bGVfY29u
ZmlndXJhdGlvbihvcHRpb25zKQogICAgIHN0eWxlX2NoZWNrZXIgPSBjaGVja2VyLlN0eWxlQ2hl
Y2tlcihjb25maWd1cmF0aW9uKQogCi0gICAgaWYgZmlsZXM6Ci0gICAgICAgIGZvciBmaWxlbmFt
ZSBpbiBmaWxlczoKLSAgICAgICAgICAgIHN0eWxlX2NoZWNrZXIuY2hlY2tfZmlsZShmaWxlbmFt
ZSkKKyAgICAocGF0aHMsIHNjbSkgPSBoYW5kbGVfc2NtKHBhdGhzKQogCisgICAgaWYgcGF0aHM6
CisgICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICAgICAgc3R5bGVfY2hlY2tlci5j
aGVja19maWxlKHBhdGgpCiAgICAgZWxzZToKLSAgICAgICAgc2NtID0gU2ltcGxlU2NtKCkKLQot
ICAgICAgICBvcy5jaGRpcihzY20uY2hlY2tvdXRfcm9vdCgpKQotCiAgICAgICAgIGlmIG9wdGlv
bnMuZ2l0X2NvbW1pdDoKICAgICAgICAgICAgIGNvbW1pdCA9IG9wdGlvbnMuZ2l0X2NvbW1pdAog
ICAgICAgICAgICAgaWYgJy4uJyBpbiBjb21taXQ6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2luaXQvbG9ndGVzdGluZy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvaW5pdC9sb2d0ZXN0aW5nLnB5CmluZGV4IDEwZDAwZTQuLjRkOWQ0ZjcgMTAwNjQ0
Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvaW5pdC9sb2d0ZXN0aW5nLnB5Cisr
KyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvaW5pdC9sb2d0ZXN0aW5nLnB5CkBAIC0y
NywxNCArMjcsMTQgQEAgbG9nZ2luZyBtb2R1bGUuCiAKIFVzZSB0aGUgTG9nVGVzdGluZyBjbGFz
cyBmb3IgYmFzaWMgdGVzdGluZyBuZWVkcy4gIEZvciBtb3JlIGFkdmFuY2VkCiBuZWVkcyAoZS5n
LiB1bml0LXRlc3RpbmcgbWV0aG9kcyB0aGF0IGNvbmZpZ3VyZSBsb2dnaW5nKSwgc2VlIHRoZQot
VW5pdFRlc3RMb2dTdHJlYW0gY2xhc3MuCitUZXN0TG9nU3RyZWFtIGNsYXNzLgogCiAiIiIKIAog
aW1wb3J0IGxvZ2dpbmcKIAogCi1jbGFzcyBVbml0VGVzdExvZ1N0cmVhbShvYmplY3QpOgorY2xh
c3MgVGVzdExvZ1N0cmVhbShvYmplY3QpOgogCiAgICAgIiIiUmVwcmVzZW50cyBhIGZpbGUtbGlr
ZSBvYmplY3QgZm9yIHVuaXQtdGVzdGluZyBsb2dnaW5nLgogCkBAIC0xMDQsNyArMTA0LDcgQEAg
Y2xhc3MgTG9nVGVzdGluZyhvYmplY3QpOgogICAgICAgICBpbnN0ZWFkIGJlIGNyZWF0ZWQgdXNp
bmcgdGhlIHN0YXRpYyBzZXRVcCgpIG1ldGhvZC4KIAogICAgICAgICBBcmdzOgotICAgICAgICAg
IHRlc3Rfc3RyZWFtOiBBIFVuaXRUZXN0TG9nU3RyZWFtIGluc3RhbmNlLgorICAgICAgICAgIHRl
c3Rfc3RyZWFtOiBBIFRlc3RMb2dTdHJlYW0gaW5zdGFuY2UuCiAgICAgICAgICAgaGFuZGxlcjog
VGhlIGhhbmRsZXIgYWRkZWQgdG8gdGhlIGxvZ2dlci4KIAogICAgICAgICAiIiIKQEAgLTE0Myw3
ICsxNDMsNyBAQCBjbGFzcyBMb2dUZXN0aW5nKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2YgbG9nIG1lc3NhZ2VzIHlvdSB3b3VsZCBsaWtlIHRvIHRlc3QuCiAKICAgICAgICAg
IiIiCi0gICAgICAgIHN0cmVhbSA9IFVuaXRUZXN0TG9nU3RyZWFtKHRlc3RfY2FzZSkKKyAgICAg
ICAgc3RyZWFtID0gVGVzdExvZ1N0cmVhbSh0ZXN0X2Nhc2UpCiAgICAgICAgIGhhbmRsZXIgPSBs
b2dnaW5nLlN0cmVhbUhhbmRsZXIoc3RyZWFtKQogICAgICAgICBoYW5kbGVyLnNldExldmVsKGxv
Z2dpbmdfbGV2ZWwpCiAgICAgICAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKCIlKGxl
dmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXIucHkKaW5kZXggZjhiYTRmNS4uYzMyYWRhMiAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAtMjMwLDcgKzIzMCw3IEBA
IGRlZiBjaGVja193ZWJraXRfc3R5bGVfY29uZmlndXJhdGlvbihvcHRpb25zKToKICMgICAgICAg
IFRoaXMgY2FuIHVzZSBhIGZvcm1hdHRlciBsaWtlIHRoZSBmb2xsb3dpbmcsIGZvciBleGFtcGxl
LS0KICMKICMgICAgICAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKCIlKG5hbWUpczog
WyUobGV2ZWxuYW1lKXNdICUobWVzc2FnZSlzIikKLWRlZiBjb25maWd1cmVfbG9nZ2luZyhzdHJl
YW0sIGxvZ2dlcj1Ob25lKToKK2RlZiBjb25maWd1cmVfbG9nZ2luZyhzdHJlYW0sIGxvZ2dlcj1O
b25lLCBsb2dnaW5nX2xldmVsPWxvZ2dpbmcuSU5GTyk6CiAgICAgIiIiQ29uZmlndXJlIGxvZ2dp
bmcsIGFuZCByZXR1cm4gdGhlIGxpc3Qgb2YgaGFuZGxlcnMgYWRkZWQuCiAKICAgICBDb25maWd1
cmVzIGEgbG9nZ2VyIHRvIGxvZyBJTkZPIG1lc3NhZ2VzIGFuZCBoaWdoZXIuICBGb3JtYXRzIFdB
Uk5JTkcKQEAgLTI1MSw4ICsyNTEsMTUgQEAgZGVmIGNvbmZpZ3VyZV9sb2dnaW5nKHN0cmVhbSwg
bG9nZ2VyPU5vbmUpOgogICAgICAgbG9nZ2VyOiBBIGxvZ2dpbmcubG9nZ2VyIGluc3RhbmNlIHRv
IGNvbmZpZ3VyZS4gIFRoaXMgcGFyYW1ldGVyCiAgICAgICAgICAgICAgIHNob3VsZCBiZSB1c2Vk
IG9ubHkgaW4gdW5pdCB0ZXN0cy4gIERlZmF1bHRzIHRvIHRoZQogICAgICAgICAgICAgICByb290
IGxvZ2dlci4KKyAgICAgIGxvZ2dpbmdfbGV2ZWw6IEFuIGludGVnZXIgbG9nZ2luZyBsZXZlbCB0
aGF0IGlzIHRoZSBtaW5pbXVtIGxldmVsCisgICAgICAgICAgICAgICAgICAgICBvZiBsb2cgbWVz
c2FnZXMgdG8gbG9nLgogCiAgICAgIiIiCisgICAgaWYgbG9nZ2VyIGlzIE5vbmU6CisgICAgICAg
IGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKworICAgIGxvZ2dlci5zZXRMZXZlbChsb2dn
aW5nX2xldmVsKQorCiAgICAgIyBJZiB0aGUgc3RyZWFtIGRvZXMgbm90IGRlZmluZSBhbiAiZW5j
b2RpbmciIGRhdGEgYXR0cmlidXRlLCB0aGUKICAgICAjIGxvZ2dpbmcgbW9kdWxlIGNhbiB0aHJv
dyBhbiBlcnJvciBsaWtlIHRoZSBmb2xsb3dpbmc6CiAgICAgIwpAQCAtMjc5LDEwICsyODYsNiBA
QCBkZWYgY29uZmlndXJlX2xvZ2dpbmcoc3RyZWFtLCBsb2dnZXI9Tm9uZSk6CiAgICAgZm9ybWF0
dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoIiUobWVzc2FnZSlzIikKICAgICBub25fZXJyb3JfaGFu
ZGxlci5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQogCi0gICAgaWYgbG9nZ2VyIGlzIE5vbmU6Ci0g
ICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKLSAgICBsb2dnZXIuc2V0TGV2ZWwo
bG9nZ2luZy5JTkZPKQotCiAgICAgaGFuZGxlcnMgPSBbZXJyb3JfaGFuZGxlciwgbm9uX2Vycm9y
X2hhbmRsZXJdCiAKICAgICBmb3IgaGFuZGxlciBpbiBoYW5kbGVyczoKQEAgLTU2Miw2ICs1NjUs
OSBAQCBjbGFzcyBTdHlsZUNoZWNrZXIob2JqZWN0KToKIAogICAgICAgICBBcmdzOgogICAgICAg
ICAgIGZpbGVfcGF0aDogQSBzdHJpbmcgdGhhdCBpcyB0aGUgcGF0aCBvZiB0aGUgZmlsZSB0byBw
cm9jZXNzLgorICAgICAgICAgICAgICAgICAgICAgVGhlIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZl
IHRvIHRoZSBzb3VyY2Ugcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSBwYXRo
LXNwZWNpZmljIGxvZ2ljIG1heSBub3QgYmVoYXZlIGFzCisgICAgICAgICAgICAgICAgICAgICBl
eHBlY3RlZC4KICAgICAgICAgICBoYW5kbGVfc3R5bGVfZXJyb3I6IFRoZSBmdW5jdGlvbiB0byBj
YWxsIHdoZW4gYSBzdHlsZSBlcnJvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Nj
dXJzLiBUaGlzIHBhcmFtZXRlciBpcyBtZWFudCBmb3IgaW50ZXJuYWwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVzZSB3aXRoaW4gdGhpcyBjbGFzcy4gRGVmYXVsdHMgdG8gYQpAQCAt
NTcxLDYgKzU3Nyw3IEBAIGNsYXNzIFN0eWxlQ2hlY2tlcihvYmplY3QpOgogICAgICAgICAgICAg
ICAgICAgICAgICAgRGVmYXVsdHMgdG8gdGhlIGZpbGUgcHJvY2Vzc2luZyBtZXRob2Qgb2YgdGhp
cyBjbGFzcy4KIAogICAgICAgICAiIiIKKyAgICAgICAgX2xvZy5kZWJ1ZygiQ2hlY2tpbmc6ICIg
KyBmaWxlX3BhdGgpCiAgICAgICAgIGlmIGhhbmRsZV9zdHlsZV9lcnJvciBpcyBOb25lOgogICAg
ICAgICAgICAgaGFuZGxlX3N0eWxlX2Vycm9yID0gRGVmYXVsdFN0eWxlRXJyb3JIYW5kbGVyKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249c2VsZi5f
Y29uZmlndXJhdGlvbiwKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3R5bGUvY2hlY2tlcl91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3R5bGUvY2hlY2tlcl91bml0dGVzdC5weQppbmRleCAwNmJiMTkxLi41NWUyZDhiIDEwMDc1NQot
LS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3Qu
cHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyX3VuaXR0
ZXN0LnB5CkBAIC0zOSw3ICszOSw3IEBAIGltcG9ydCB1bml0dGVzdAogCiBpbXBvcnQgY2hlY2tl
ciBhcyBzdHlsZQogZnJvbSB3ZWJraXRweS5zdHlsZV9yZWZlcmVuY2VzIGltcG9ydCBMb2dUZXN0
aW5nCi1mcm9tIHdlYmtpdHB5LnN0eWxlX3JlZmVyZW5jZXMgaW1wb3J0IFVuaXRUZXN0TG9nU3Ry
ZWFtCitmcm9tIHdlYmtpdHB5LnN0eWxlX3JlZmVyZW5jZXMgaW1wb3J0IFRlc3RMb2dTdHJlYW0K
IGZyb20gY2hlY2tlciBpbXBvcnQgX0JBU0VfRklMVEVSX1JVTEVTCiBmcm9tIGNoZWNrZXIgaW1w
b3J0IF9NQVhfUkVQT1JUU19QRVJfQ0FURUdPUlkKIGZyb20gY2hlY2tlciBpbXBvcnQgX1BBVEhf
UlVMRVNfU1BFQ0lGSUVSIGFzIFBBVEhfUlVMRVNfU1BFQ0lGSUVSCkBAIC02Myw3ICs2Myw3IEBA
IGNsYXNzIENvbmZpZ3VyZUxvZ2dpbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiJU
ZXN0cyB0aGUgY29uZmlndXJlX2xvZ2dpbmcoKSBmdW5jdGlvbi4iIiIKIAogICAgIGRlZiBzZXRV
cChzZWxmKToKLSAgICAgICAgbG9nX3N0cmVhbSA9IFVuaXRUZXN0TG9nU3RyZWFtKHNlbGYpCisg
ICAgICAgIGxvZ19zdHJlYW0gPSBUZXN0TG9nU3RyZWFtKHNlbGYpCiAgICAgICAgICMgVXNlIGEg
bG9nZ2VyIG90aGVyIHRoYW4gdGhlIHJvb3QgbG9nZ2VyIG9yIG9uZSBwcmVmaXhlZCB3aXRoCiAg
ICAgICAgICMgd2Via2l0IHNvIGFzIG5vdCB0byBjb25mbGljdCB3aXRoIHRlc3Qtd2Via2l0cHkg
bG9nZ2luZy4KICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInVuaXR0ZXN0IikK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvbWFpbi5weSBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvbWFpbi5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWVlMWZiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9tYWluLnB5CkBAIC0wLDAgKzEsMTU5IEBACisj
IENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2plcmRvbmVrQHdlYmtpdC5vcmcp
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBsb2dn
aW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworIyBQcmVmaXggd2l0aCBhbiB1bmRlcnNjb3Jl
IHRvIHJlZHVjZSBjb25mdXNpb24gd2hlbiBjYWxsaW5nIGRldGVjdF9zY20oKQorIyBmcm9tIHdp
dGhpbiBoYW5kbGVfc2NtKCkgYmVsb3cuCitmcm9tIHdlYmtpdHB5LnN0eWxlX3JlZmVyZW5jZXMg
aW1wb3J0IGRldGVjdF9zY20gYXMgX2RldGVjdF9zY20KKworCitfbG9nID0gbG9nZ2luZy5nZXRM
b2dnZXIoX19uYW1lX18pCisKKworIyBUaGlzIGZ1bmN0aW9uIGlzIGVzc2VudGlhbGx5IGEgcmVw
bGFjZW1lbnQgZm9yIG9zLnBhdGgucmVscGF0aCgpCisjIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiBQ
eXRob24gMi42LiAgSXQgYmVoYXZlcyBtb3JlIG9yIGxlc3MgdGhlIHNhbWUKKyMgZXhjZXB0IGZv
ciByZXR1cm5pbmcgTm9uZSBvbiBwYXRocyBub3QgY29udGFpbmVkIGluIGFic19zdGFydF9wYXRo
LgorZGVmIF9yZWxfcGF0aChwYXRoLCBhYnNfc3RhcnRfcGF0aCwgb3NfcGF0aF9hYnNwYXRoPU5v
bmUpOgorICAgICIiIlJldHVybiBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIGdpdmVuIHN0YXJ0IHBh
dGgsIG9yIE5vbmUuCisKKyAgICBSZXR1cm5zIE5vbmUgaWYgdGhlIHBhdGggaXMgbm90IGNvbnRh
aW5lZCBpbiB0aGUgZGlyZWN0b3J5CisgICAgYWJzX3N0YXJ0X3BhdGguCisKKyAgICBBcmdzOgor
ICAgICAgcGF0aDogQW4gYWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aCB0byBjb252ZXJ0IHRvIGEg
cmVsYXRpdmUgcGF0aC4KKyAgICAgIGFic19zdGFydF9wYXRoOiBBbiBhYnNvbHV0ZSBwYXRoIHJl
bGF0aXZlIHRvIHdoaWNoIHRoZSBnaXZlbiBwYXRoCisgICAgICAgICAgICAgICAgICAgICAgc2hv
dWxkIGJlIGNvbnZlcnRlZC4KKyAgICAgIG9zX3BhdGhfYWJzcGF0aDogQSByZXBsYWNlbWVudCBm
dW5jdGlvbiBmb3IgdW5pdCB0ZXN0aW5nLgorICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0
cyB0byBvcy5wYXRoLmFic3BhdGguCisKKyAgICAiIiIKKyAgICBpZiBvc19wYXRoX2Fic3BhdGgg
aXMgTm9uZToKKyAgICAgICAgb3NfcGF0aF9hYnNwYXRoID0gb3MucGF0aC5hYnNwYXRoCisKKyAg
ICBwYXRoID0gb3NfcGF0aF9hYnNwYXRoKHBhdGgpCisKKyAgICBpZiBub3QgcGF0aC5sb3dlcigp
LnN0YXJ0c3dpdGgoYWJzX3N0YXJ0X3BhdGgubG93ZXIoKSk6CisgICAgICAgICMgVGhlbiBwYXRo
IGlzIG91dHNpZGUgdGhlIGRpcmVjdG9yeSBnaXZlbiBieSBhYnNfc3RhcnRfcGF0aC4KKyAgICAg
ICAgcmV0dXJuIE5vbmUKKworICAgIHBhdGggPSBwYXRoW2xlbihhYnNfc3RhcnRfcGF0aCk6XQor
ICAgICMgVHJpbSBvZmYgYW55IGxlYWRpbmcgc2xhc2ggZnJvbSBwYXRoIGluIGNhc2UgYWJzX3N0
YXJ0X3BhdGgKKyAgICAjIGRvZXMgbm90IGVuZCBpbiBhIHNsYXNoLgorICAgIHBhdGggPSBwYXRo
LmxzdHJpcCgiL1xcIikKKworICAgIHJldHVybiBwYXRoCisKKworZGVmIGhhbmRsZV9zY20ocGF0
aHM9Tm9uZSwgbW9ja19kZXRlY3Rfc2NtPU5vbmUsIG1vY2tfb3M9Tm9uZSk6CisgICAgIiIiRGV0
ZWN0IHRoZSBzY20sIGFuZCBzd2l0Y2ggdG8gdGhlIHNvdXJjZSByb290LCBpZiBwb3NzaWJsZS4K
KworICAgIFRoaXMgbWV0aG9kIHRyaWVzIHRvIGRldGVjdCB0aGUgc291cmNlIGNvbnRyb2wgcm9v
dCBvZiB0aGUgY3VycmVudAorICAgIGRpcmVjdG9yeSwgYXMgd2VsbCBhcyBpdHMgc2NtIChha2Eg
c291cmNlIGNvbnRyb2wgbWFuYWdlcikuCisgICAgICAgIElmIHRoZSBzb3VyY2UgY29udHJvbCBy
b290IHdhcyBkZXRlY3RlZCBhbmQgYWxsIGdpdmVuIHBhdGhzIGFyZQorICAgIGNvbnRhaW5lZCB3
aXRoaW4gdGhlIHNvdXJjZSByb290IChvciBpZiBwYXRocyBpcyBlbXB0eSBvciBOb25lKSwKKyAg
ICB0aGlzIG1ldGhvZCBhbHNvIGNoYW5nZXMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkg
dG8gdGhlCisgICAgc291cmNlIHJvb3QuICBUaGlzIGFsbG93cyBmaWxlcyBwcm9jZXNzZWQgdG8g
YmUgZGlzcGxheWVkIHJlbGF0aXZlCisgICAgdG8gdGhlIHNvdXJjZSByb290LCBhbmQgZm9yIHBh
dGgtc3BlY2lmaWMgcnVsZXMgdG8gd29yayBhcyBleHBlY3RlZAorICAgIChlLmcuIHdoZXRoZXIg
ZmlsZXMgc2hvdWxkIGJlIHNraXBwZWQgYW5kIHdoZXRoZXIgY3VzdG9tIHN0eWxlIHJ1bGVzCisg
ICAgc2hvdWxkIGFwcGx5KS4KKworICAgIFJldHVybnM6CisgICAgICBBIHBhaXIgb2YgKHBhdGhz
LCBzY20pLgorCisgICAgICBwYXRoczogVGhlIHBhdGhzIHBhcmFtZXRlciBjb252ZXJ0ZWQgdG8g
YSBsaXN0IG9mIHBhdGhzIHJlbGF0aXZlCisgICAgICAgICAgICAgdG8gdGhlIHNvdXJjZSByb290
LCBpZiB0aGUgc291cmNlIHJvb3Qgd2FzIGRldGVjdGVkIGFuZAorICAgICAgICAgICAgIGlmIGFs
bCBnaXZlbiBwYXRocyBhcmUgY29udGFpbmVkIGluIHRoZSBzb3VyY2Ugcm9vdCBvciBvbmUKKyAg
ICAgICAgICAgICBvZiBpdHMgc3ViLWRpcmVjdG9yaWVzLgorICAgICAgc2NtOiBUaGUgc2NtIGFz
IGEgU2ltcGxlU2NtIGluc3RhbmNlIGlmIHRoZSBzY20gd2FzIGRldGVjdGVkLCBvciBOb25lLgor
CisgICAgQXJnczoKKyAgICAgIHBhdGhzOiBUaGUgbGlzdCBvZiBwYXRocyB0byBjaGVjayBzdHls
ZS4gIFRoaXMgYXJndW1lbnQgY2FuIGJlIE5vbmUKKyAgICAgICAgICAgICBvciB0aGUgZW1wdHkg
bGlzdCBpZiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBvciBhIGdpdAorICAgICAgICAg
ICAgIGNvbW1pdCBzaG91bGQgYmUgY2hlY2tlZC4KKyAgICAgIG1vY2tfZGV0ZWN0X3NjbTogQSBy
ZXBsYWNlbWVudCBmdW5jdGlvbiBmb3IgdW5pdCB0ZXN0aW5nLiAgRGVmYXVsdHMKKyAgICAgICAg
ICAgICAgICAgICAgICAgdG8gd2Via2l0cHkuc3R5bGVfcmVmZXJlbmNlcy5kZXRlY3Rfc2NtLgor
ICAgICAgbW9ja19vczogQSByZXBsYWNlbWVudCBtb2R1bGUgZm9yIHVuaXQgdGVzdGluZy4gIERl
ZmF1bHRzIHRvIG9zLgorCisgICAgIiIiCisgICAgZGV0ZWN0X3NjbSA9IF9kZXRlY3Rfc2NtIGlm
IG1vY2tfZGV0ZWN0X3NjbSBpcyBOb25lIGVsc2UgbW9ja19kZXRlY3Rfc2NtCisgICAgb3NfbW9k
dWxlID0gb3MgaWYgbW9ja19vcyBpcyBOb25lIGVsc2UgbW9ja19vcworCisgICAgc2NtID0gZGV0
ZWN0X3NjbSgpCisKKyAgICBpZiBzY20gaXMgbm90IE5vbmU6CisgICAgICAgIHNvdXJjZV9yb290
ID0gc2NtLnNvdXJjZV9yb290KCkKKyAgICAgICAgc291cmNlX3Jvb3QgPSBvcy5wYXRoLmFic3Bh
dGgoc291cmNlX3Jvb3QpCisgICAgZWxzZToKKyAgICAgICAgIyBGSVhNRTogSWYgc2NtIGlzIE5v
bmUsIHRyeSB0byBmaW5kIGEgInNvdXJjZSByb290IiB1c2luZyBhCisgICAgICAgICMgICAgICAg
IGZpbGUtYmFzZWQgaGV1cmlzdGljIC0tIGZvciBleGFtcGxlIGJ5IGV4YW1pbmluZyBwYXJlbnQK
KyAgICAgICAgIyAgICAgICAgZGlyZWN0b3JpZXMgdW50aWwgYSBkaXJlY3RvcnkgaXMgZm91bmQg
Y29udGFpbmluZworICAgICAgICAjICAgICAgICBKYXZhU2NyaXB0Q29yZSwgV2ViQ29yZSwgV2Vi
S2l0LCBXZWJLaXRTaXRlLCBhbmQgV2ViS2l0VG9vbHMuCisgICAgICAgICMgICAgICAgIFRoZW4g
bG9nIGFuIElORk8gbWVzc2FnZSBzYXlpbmcgdGhhdCBhIG5vbi1zY20gc291cmNlIHJvb3QKKyAg
ICAgICAgIyAgICAgICAgd2FzIGZvdW5kLiAgVGhpcyBhbGxvd3MgY2hlY2std2Via2l0LXN0eWxl
IHRvIGJlIHJ1biBvbgorICAgICAgICAjICAgICAgICBub24tc2NtIGNvcGllcyBvZiB0aGUgc291
cmNlIHRyZWUgKGUuZy4gbmlnaHRsaWVzKS4KKyAgICAgICAgc291cmNlX3Jvb3QgPSBOb25lCisK
KyAgICBpZiBzb3VyY2Vfcm9vdCBpcyBOb25lOgorICAgICAgICBpZiBub3QgcGF0aHM6CisgICAg
ICAgICAgICAjIEZJWE1FOiBMb2cgdGhpcyBlcnJvciBhbmQgZXhpdCBmcm9tIHdpdGhpbiB0aGUg
b3B0aW9uIHBhcnNlcgorICAgICAgICAgICAgIyAgICAgICAgaW5zdGVhZCwgYW5kIGhhbmRsZSB0
aGlzIGNhc2UgaGVyZSBieSByYWlzaW5nIGFuCisgICAgICAgICAgICAjICAgICAgICBlcnJvci4g
IFRoaXMgcHJvYmFibHkgcmVxdWlyZXMgZGV0ZWN0aW5nIHRoZSBzY20gcHJpb3IKKyAgICAgICAg
ICAgICMgICAgICAgIHRvIHBhcnNpbmcgb3B0aW9ucywgYW5kIHRoZW4gcGFzc2luZyB0aGUgcmVz
dWx0IHRvCisgICAgICAgICAgICAjICAgICAgICB0aGUgb3B0aW9uIHBhcnNlci4KKyAgICAgICAg
ICAgIF9sb2cuZXJyb3IoIlNvdXJjZSByb290IG5vdCBmb3VuZDogZmlsZSBuYW1lcyBtdXN0IGJl
IHBhc3NlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICJ3aGVuIHRoZSBzb3VyY2Ugcm9vdCBj
YW5ub3QgYmUgZm91bmQuIikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIF9sb2cu
d2FybigiU291cmNlIHJvb3Qgbm90IGRldGVjdGVkOiBwYXRoLXNwZWNpZmljIGxvZ2ljIG1heSB5
aWVsZCAiCisgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCByZXN1bHRzLlxuIgorICAgICAg
ICAgICAgICAgICAgIiBJZiB5b3UgYXJlIHJ1bm5pbmcgdGhpcyBzY3JpcHQgZnJvbSBhIGtub3du
IHNvdXJjZSAiCisgICAgICAgICAgICAgICAgICAicm9vdCwgaWdub3JlIHRoaXMgd2FybmluZy4i
KQorICAgICAgICByZXR1cm4gKHBhdGhzLCBOb25lKQorCisgICAgaWYgcGF0aHM6CisgICAgICAg
ICMgVGhlbiB0cnkgY29udmVydGluZyBhbGwgb2YgdGhlIHBhdGhzIHRvIHBhdGhzIHJlbGF0aXZl
IHRvCisgICAgICAgICMgdGhlIHNvdXJjZSByb290LgorICAgICAgICByZWxfcGF0aHMgPSBbXQor
ICAgICAgICBmb3IgcGF0aCBpbiBwYXRoczoKKyAgICAgICAgICAgIHJlbF9wYXRoID0gX3JlbF9w
YXRoKHBhdGgsIHNvdXJjZV9yb290KQorICAgICAgICAgICAgaWYgcmVsX3BhdGggaXMgTm9uZToK
KyAgICAgICAgICAgICAgICAjIFRoZW4gdGhlIHBhdGggaXMgb3V0c2lkZSB0aGUgc291cmNlIHRy
ZWUuICBTaW5jZSBhbGwKKyAgICAgICAgICAgICAgICAjIHBhdGhzIHNob3VsZCBiZSBpbnRlcnBy
ZXRlZCByZWxhdGl2ZSB0byB0aGUgc2FtZSByb290LAorICAgICAgICAgICAgICAgICMgZG8gbm90
IGludGVycHJldCBhbnkgb2YgdGhlIHBhdGhzIGFzIHJlbGF0aXZlIHRvIHRoZQorICAgICAgICAg
ICAgICAgICMgc291cmNlIHJvb3QuICBJbnRlcnByZXQgYWxsIG9mIHRoZW0gcmVsYXRpdmUgdG8g
dGhlCisgICAgICAgICAgICAgICAgIyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCBhbmQgZG8g
bm90IGNoYW5nZSB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICMgd29ya2luZyBkaXJlY3Rv
cnkuCisgICAgICAgICAgICAgICAgX2xvZy53YXJuKCJPbmUgb2YgdGhlIGdpdmVuIGZpbGVzIGlz
IG91dHNpZGUgdGhlIHNvdXJjZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ0cmVlOiBw
YXRoLXNwZWNpZmljIGxvZ2ljIG1heSB5aWVsZCB1bmV4cGVjdGVkICIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgInJlc3VsdHMuXG4gRW5zdXJlIHRoYXQgYWxsIGZpbGVzIGFyZSB3aXRoaW4g
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIHNvdXJjZSB0cmVlIHRvIGFjaGlldmUg
ZXhwZWN0ZWQgcmVzdWx0cy4iKQorICAgICAgICAgICAgICAgIHJldHVybiAocGF0aHMsIHNjbSkK
KyAgICAgICAgICAgIHJlbF9wYXRocy5hcHBlbmQocmVsX3BhdGgpCisgICAgICAgICMgSWYgd2Ug
Z290IGhlcmUsIHRoZSBjb252ZXJzaW9uIHdhcyBzdWNjZXNzZnVsLgorICAgICAgICBwYXRocyA9
IHJlbF9wYXRocworCisgICAgX2xvZy5kZWJ1ZygiQ2hhbmdpbmcgdG8gc291cmNlIHJvb3Q6ICIg
KyBzb3VyY2Vfcm9vdCkKKyAgICBvc19tb2R1bGUuY2hkaXIoc291cmNlX3Jvb3QpCisKKyAgICBy
ZXR1cm4gKHBhdGhzLCBzY20pCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL21haW5fdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL21haW5fdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uM2JmYmQxNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvc3R5bGUvbWFpbl91bml0dGVzdC5weQpAQCAtMCwwICsxLDIwOSBAQAorIyBDb3B5cmlnaHQg
KEMpIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNocmlzLmplcmRvbmVrQGdtYWlsLmNvbSkKKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiVW5pdCB0ZXN0cyBmb3Ig
bWFpbi5weS4iIiIKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gbWFpbiBpbXBvcnQgX3JlbF9w
YXRoCitmcm9tIG1haW4gaW1wb3J0IGhhbmRsZV9zY20KK2Zyb20gd2Via2l0cHkuc3R5bGVfcmVm
ZXJlbmNlcyBpbXBvcnQgTG9nVGVzdGluZworCisKK2NsYXNzIFJlbFBhdGhUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKKworICAgICIiIlRlc3RzIF9yZWxfcGF0aCgpLiIiIgorCisgICAgIyBTaW5j
ZSBvdXIgb3NfcGF0aF9hYnNwYXRoIHJldHVybnMgdGhlIHNhbWUgcGF0aCwgd2Ugc2hvdWxkIHBh
c3MKKyAgICAjIGluIGFic29sdXRlIHBhdGhzIGZvciB0aGUgcGF0aCBwYXJhbWV0ZXIgb2YgX3Jl
bF9wYXRoKCkuCisgICAgb3NfcGF0aF9hYnNwYXRoID0gbGFtYmRhIHNlbGYsIHBhdGg6IHBhdGgK
KworICAgIGRlZiBfcmVsX3BhdGgoc2VsZiwgcGF0aCwgYWJzX3N0YXJ0X3BhdGgpOgorICAgICAg
ICByZXR1cm4gX3JlbF9wYXRoKHBhdGgsIGFic19zdGFydF9wYXRoLCBzZWxmLm9zX3BhdGhfYWJz
cGF0aCkKKworICAgIGRlZiB0ZXN0X3JlbF9wYXRoKHNlbGYpOgorICAgICAgICByZWxfcGF0aCA9
IHNlbGYuX3JlbF9wYXRoKCIvV2ViS2l0L3Rlc3QvRm9vLnR4dCIsICIvV2ViS2l0IikKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMocmVsX3BhdGgsICJ0ZXN0L0Zvby50eHQiKQorCisgICAgICAg
IHJlbF9wYXRoID0gc2VsZi5fcmVsX3BhdGgoIi9XZWJLaXQvdGVzdC9Gb28udHh0IiwgIi9XZWJL
aXQvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVsX3BhdGgsICJ0ZXN0L0Zvby50eHQi
KQorCisgICAgICAgIHJlbF9wYXRoID0gc2VsZi5fcmVsX3BhdGgociJjOlxXZWJLaXRcdGVzdFxG
b28udHh0IiwgciJjOlxXZWJLaXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZWxfcGF0
aCwgciJ0ZXN0XEZvby50eHQiKQorCisgICAgICAgIHJlbF9wYXRoID0gc2VsZi5fcmVsX3BhdGgo
ciJjOlxXZWJLaXRcdGVzdFxGb28udHh0IiwgImM6XFxXZWJLaXRcXCIpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKHJlbF9wYXRoLCByInRlc3RcRm9vLnR4dCIpCisKKyAgICBkZWYgdGVzdF9y
ZWxfcGF0aF9ub25lKHNlbGYpOgorICAgICAgICAiIiJUZXN0IF9yZWxfcGF0aCgpIHdpdGggTm9u
ZSByZXR1cm4gdmFsdWUuIiIiCisgICAgICAgIHJlbF9wYXRoID0gc2VsZi5fcmVsX3BhdGgoIi9v
dGhlcl9kaXIvdGVzdC9mb28udHh0IiwgIi9XZWJLaXQiKQorICAgICAgICBzZWxmLmFzc2VydFRy
dWUocmVsX3BhdGggaXMgTm9uZSkKKworCitjbGFzcyBIYW5kbGVTY21UZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKKworICAgICIiIlRlc3RzIGhhbmRsZV9zY20oKS4iIiIKKworICAgIGNsYXNzIF9N
b2NrT3Mob2JqZWN0KToKKworICAgICAgICAiIiJBIG1vY2sgb3MgbW9kdWxlIGZvciB1bml0IHRl
c3RpbmcuIiIiCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfY2FzZSk6CisgICAg
ICAgICAgICBzZWxmLl90ZXN0X2Nhc2UgPSB0ZXN0X2Nhc2UKKyAgICAgICAgICAgIHNlbGYuX2N1
cnJlbnRfZGlyZWN0b3J5ID0gSGFuZGxlU2NtVGVzdC5fb3JpZ2luYWxfZGlyZWN0b3J5CisKKyAg
ICAgICAgZGVmIGNoZGlyKHNlbGYsIGN1cnJlbnRfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIHNl
bGYuX2N1cnJlbnRfZGlyZWN0b3J5ID0gY3VycmVudF9kaXJlY3RvcnkKKworICAgICAgICBkZWYg
YXNzZXJ0Q3VycmVudERpcmVjdG9yeShzZWxmLCBleHBlY3RlZF9kaXJlY3RvcnkpOgorICAgICAg
ICAgICAgc2VsZi5fdGVzdF9jYXNlLmFzc2VydEVxdWFscyhleHBlY3RlZF9kaXJlY3RvcnksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfZGly
ZWN0b3J5KQorCisgICAgY2xhc3MgX01vY2tTaW1wbGVTY20ob2JqZWN0KToKKworICAgICAgICAi
IiJBIG1vY2sgU2ltcGxlU2NtIGZvciB1bml0IHRlc3RpbmcuIiIiCisKKyAgICAgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHNvdXJjZV9yb290KToKKyAgICAgICAgICAgICIiIkNyZWF0ZSBhbiBpbnN0
YW5jZS4KKworICAgICAgICAgICAgQXJnczoKKyAgICAgICAgICAgICAgc291cmNlX3Jvb3Q6IEEg
c3RyaW5nIHRoYXQgaXMgdGhlIGFic29sdXRlIHBhdGggdGhhdAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc291cmNlX3Jvb3QoKSBzaG91bGQgcmV0dXJuLgorCisgICAgICAgICAgICAiIiIK
KyAgICAgICAgICAgIHNlbGYuX3NvdXJjZV9yb290ID0gc291cmNlX3Jvb3QKKworICAgICAgICBk
ZWYgc291cmNlX3Jvb3Qoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc291cmNlX3Jv
b3QKKworICAgIF9vcmlnaW5hbF9kaXJlY3RvcnkgPSAiL29yaWdpbmFsIgorICAgIF9zb3VyY2Vf
cm9vdCA9ICIvV2ViS2l0IgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl9s
b2cgPSBMb2dUZXN0aW5nLnNldFVwKHNlbGYpCisgICAgICAgIHNlbGYuX21vY2tfb3MgPSBzZWxm
Ll9Nb2NrT3Moc2VsZikKKyAgICAgICAgc2VsZi5fbW9ja19zY20gPSBzZWxmLl9Nb2NrU2ltcGxl
U2NtKHNlbGYuX3NvdXJjZV9yb290KQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAg
ICBzZWxmLl9sb2cudGVhckRvd24oKQorCisgICAgIyBUaGlzIG1ldGhvZCBpcyBhIGNvbnZlbmll
bnQgd3JhcHBlciBmb3IgaGFuZGxlX3NjbSgpIHRoYXQKKyAgICAjIHBhc3NlcyB0aGUgbW9ja19v
cyBmb3IgdGhpcyB1bml0IHRlc3RpbmcgY2xhc3MuCisgICAgZGVmIF9oYW5kbGVfc2NtKHNlbGYs
IHBhdGhzLCBtb2NrX2RldGVjdF9zY20pOgorICAgICAgICByZXR1cm4gaGFuZGxlX3NjbShwYXRo
cz1wYXRocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbW9ja19kZXRlY3Rfc2NtPW1vY2tf
ZGV0ZWN0X3NjbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbW9ja19vcz1zZWxmLl9tb2Nr
X29zKQorCisgICAgZGVmIF9hc3NlcnRfaGFuZGxlX3NjbV9yZXN1bHQoc2VsZiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxfcmV0dXJuX3ZhbHVlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3JldHVybl92YWx1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9sb2dfbWVzc2FnZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfY3VycmVudF9kaXJlY3RvcnkpOgor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhY3R1YWxfcmV0dXJuX3ZhbHVlLCBleHBlY3RlZF9y
ZXR1cm5fdmFsdWUpCisgICAgICAgIHNlbGYuX2xvZy5hc3NlcnRNZXNzYWdlcyhleHBlY3RlZF9s
b2dfbWVzc2FnZXMpCisgICAgICAgIHNlbGYuX21vY2tfb3MuYXNzZXJ0Q3VycmVudERpcmVjdG9y
eShleHBlY3RlZF9jdXJyZW50X2RpcmVjdG9yeSkKKworICAgIGRlZiB0ZXN0X3NjbV9ub25lX3Bh
dGhzX25vbmUoc2VsZik6CisgICAgICAgIG1vY2tfZGV0ZWN0X3NjbSA9IGxhbWJkYTogTm9uZQor
CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQsIHNlbGYuX2hhbmRsZV9zY20s
IHBhdGhzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2tfZGV0ZWN0X3NjbT1t
b2NrX2RldGVjdF9zY20pCisKKyAgICAgICAgc2VsZi5fbG9nLmFzc2VydE1lc3NhZ2VzKFsiRVJS
T1I6IFNvdXJjZSByb290IG5vdCBmb3VuZDogZmlsZSBuYW1lcyAiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIm11c3QgYmUgcGFzc2VkIHdoZW4gdGhlIHNvdXJjZSByb290ICIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGJlIGZvdW5kLlxuIl0p
CisgICAgICAgIHNlbGYuX21vY2tfb3MuYXNzZXJ0Q3VycmVudERpcmVjdG9yeShzZWxmLl9vcmln
aW5hbF9kaXJlY3RvcnkpCisKKworICAgIGRlZiB0ZXN0X3NjbV9ub25lX3BhdGhzX2VtcHR5KHNl
bGYpOgorICAgICAgICBtb2NrX2RldGVjdF9zY20gPSBsYW1iZGE6IE5vbmUKKworICAgICAgICBz
ZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBzZWxmLl9oYW5kbGVfc2NtLCBwYXRocz1bXSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgbW9ja19kZXRlY3Rfc2NtPW1vY2tfZGV0ZWN0X3Nj
bSkKKworICAgICAgICBzZWxmLl9sb2cuYXNzZXJ0TWVzc2FnZXMoWyJFUlJPUjogU291cmNlIHJv
b3Qgbm90IGZvdW5kOiBmaWxlIG5hbWVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAibXVzdCBiZSBwYXNzZWQgd2hlbiB0aGUgc291cmNlIHJvb3QgIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgYmUgZm91bmQuXG4iXSkKKyAgICAgICAgc2Vs
Zi5fbW9ja19vcy5hc3NlcnRDdXJyZW50RGlyZWN0b3J5KHNlbGYuX29yaWdpbmFsX2RpcmVjdG9y
eSkKKworICAgIGRlZiB0ZXN0X25vX3NjbV9ub25lbXB0eV9wYXRocyhzZWxmKToKKyAgICAgICAg
bW9ja19kZXRlY3Rfc2NtID0gbGFtYmRhOiBOb25lCisKKyAgICAgICAgaGFuZGxlZF9zY20gPSBz
ZWxmLl9oYW5kbGVfc2NtKHBhdGhzPVsicGF0aDEiXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1vY2tfZGV0ZWN0X3NjbT1tb2NrX2RldGVjdF9zY20pCisKKyAgICAg
ICAgbG9nX21lc3NhZ2VzID0gWyJXQVJOSU5HOiBTb3VyY2Ugcm9vdCBub3QgZGV0ZWN0ZWQ6IHBh
dGgtc3BlY2lmaWMgIgorICAgICAgICAgICAgICAgICAgICAgICAgImxvZ2ljIG1heSB5aWVsZCB1
bmV4cGVjdGVkIHJlc3VsdHMuXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiIElmIHlvdSBh
cmUgcnVubmluZyB0aGlzIHNjcmlwdCBmcm9tIGEga25vd24gc291cmNlICIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICJyb290LCBpZ25vcmUgdGhpcyB3YXJuaW5nLlxuIl07CisKKyAgICAgICAg
c2VsZi5fYXNzZXJ0X2hhbmRsZV9zY21fcmVzdWx0KGhhbmRsZWRfc2NtLCAoWyJwYXRoMSJdLCBO
b25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ19tZXNzYWdl
cywgc2VsZi5fb3JpZ2luYWxfZGlyZWN0b3J5KQorCisgICAgZGVmIHRlc3Rfd2l0aF9zY21fbm9u
ZV9wYXRocyhzZWxmKToKKyAgICAgICAgbW9ja19zY20gPSBzZWxmLl9tb2NrX3NjbQorICAgICAg
ICBtb2NrX2RldGVjdF9zY20gPSBsYW1iZGE6IG1vY2tfc2NtCisKKyAgICAgICAgaGFuZGxlZF9z
Y20gPSBzZWxmLl9oYW5kbGVfc2NtKHBhdGhzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtb2NrX2RldGVjdF9zY209bW9ja19kZXRlY3Rfc2NtKQorCisgICAg
ICAgIHNlbGYuX2Fzc2VydF9oYW5kbGVfc2NtX3Jlc3VsdChoYW5kbGVkX3NjbSwgKE5vbmUsIG1v
Y2tfc2NtKSwgW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9zb3VyY2Vfcm9vdCkKKworICAgIGRlZiB0ZXN0X3dpdGhfc2NtX3BhdGhzX2NvbnZlcnRpYmxl
KHNlbGYpOgorICAgICAgICBwYXRocz1bIi9XZWJLaXQvZm9vMS50eHQiLAorICAgICAgICAgICAg
ICAgIi9XZWJLaXQvZm9vMi50eHQiXQorCisgICAgICAgIG1vY2tfc2NtID0gc2VsZi5fbW9ja19z
Y20KKyAgICAgICAgbW9ja19kZXRlY3Rfc2NtID0gbGFtYmRhOiBtb2NrX3NjbQorCisgICAgICAg
IGhhbmRsZWRfc2NtID0gc2VsZi5faGFuZGxlX3NjbShwYXRocz1wYXRocywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2tfZGV0ZWN0X3NjbT1tb2NrX2RldGVjdF9z
Y20pCisKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2hhbmRsZV9zY21fcmVzdWx0KGhhbmRsZWRfc2Nt
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFsiZm9vMS50eHQiLCAi
Zm9vMi50eHQiXSwgbW9ja19zY20pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9z
b3VyY2Vfcm9vdCkKKworICAgIGRlZiB0ZXN0X3dpdGhfc2NtX3BhdGhzX3VuY29udmVydGlibGUo
c2VsZik6CisgICAgICAgIHBhdGhzPVsiL1dlYktpdC9mb28xLnR4dCIsCisgICAgICAgICAgICAg
ICAiL291dHNpZGUvZm9vMi50eHQiXQorCisgICAgICAgIG1vY2tfc2NtID0gc2VsZi5fbW9ja19z
Y20KKyAgICAgICAgbW9ja19kZXRlY3Rfc2NtID0gbGFtYmRhOiBtb2NrX3NjbQorCisgICAgICAg
IGhhbmRsZWRfc2NtID0gc2VsZi5faGFuZGxlX3NjbShwYXRocz1wYXRocywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2tfZGV0ZWN0X3NjbT1tb2NrX2RldGVjdF9z
Y20pCisKKyAgICAgICAgbG9nX21lc3NhZ2VzID0gWyJXQVJOSU5HOiBPbmUgb2YgdGhlIGdpdmVu
IGZpbGVzIGlzIG91dHNpZGUgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2Ug
dHJlZTogcGF0aC1zcGVjaWZpYyBsb2dpYyBtYXkgeWllbGQgIgorICAgICAgICAgICAgICAgICAg
ICAgICAgInVuZXhwZWN0ZWQgcmVzdWx0cy5cbiBFbnN1cmUgdGhhdCBhbGwgZmlsZXMgYXJlICIK
KyAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoaW4gdGhlIHNvdXJjZSB0cmVlIHRvIGFjaGll
dmUgZXhwZWN0ZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgInJlc3VsdHMuXG4iXTsKKwor
ICAgICAgICBzZWxmLl9hc3NlcnRfaGFuZGxlX3NjbV9yZXN1bHQoaGFuZGxlZF9zY20sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0aHMsIG1vY2tfc2NtKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ19tZXNzYWdlcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29yaWdpbmFsX2RpcmVjdG9y
eSkKKworCisKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
dW5pdHRlc3RzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS91bml0dGVz
dHMucHkKaW5kZXggNjI2MTVhYi4uZmY0NGRlMCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS91bml0dGVzdHMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9zdHlsZS91bml0dGVzdHMucHkKQEAgLTM4LDYgKzM4LDcgQEAgaW1wb3J0IHVu
aXR0ZXN0CiBmcm9tIGNoZWNrZXJfdW5pdHRlc3QgaW1wb3J0ICoKIGZyb20gZXJyb3JfaGFuZGxl
cnNfdW5pdHRlc3QgaW1wb3J0ICoKIGZyb20gZmlsdGVyX3VuaXR0ZXN0IGltcG9ydCAqCitmcm9t
IG1haW5fdW5pdHRlc3QgaW1wb3J0ICoKIGZyb20gb3B0cGFyc2VyX3VuaXR0ZXN0IGltcG9ydCAq
CiBmcm9tIHByb2Nlc3NvcnMuY29tbW9uX3VuaXR0ZXN0IGltcG9ydCAqCiBmcm9tIHByb2Nlc3Nv
cnMuY3BwX3VuaXR0ZXN0IGltcG9ydCAqCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlX3JlZmVyZW5jZXMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlX3JlZmVyZW5jZXMucHkKaW5kZXggZTU3Y2QwZS4uN2Q4NmE0NiAxMDA2NDQKLS0t
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZV9yZWZlcmVuY2VzLnB5CisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGVfcmVmZXJlbmNlcy5weQpAQCAtNDIs
MTAgKzQyLDE4IEBAIGltcG9ydCBvcwogCiBmcm9tIGRpZmZfcGFyc2VyIGltcG9ydCBEaWZmUGFy
c2VyCiBmcm9tIGluaXQubG9ndGVzdGluZyBpbXBvcnQgTG9nVGVzdGluZwotZnJvbSBpbml0Lmxv
Z3Rlc3RpbmcgaW1wb3J0IFVuaXRUZXN0TG9nU3RyZWFtCitmcm9tIGluaXQubG9ndGVzdGluZyBp
bXBvcnQgVGVzdExvZ1N0cmVhbQogZnJvbSBzY20gaW1wb3J0IGRldGVjdF9zY21fc3lzdGVtCiAK
IAorZGVmIGRldGVjdF9zY20oKToKKyAgICAiIiJSZXR1cm4gYSBTaW1wbGVTY20gaW5zdGFuY2Us
IG9yIE5vbmUgaWYgaXQgY2Fubm90IGJlIGZvdW5kLiIiIgorICAgIGN3ZCA9IG9zLnBhdGguYWJz
cGF0aChvcy5jdXJkaXIpCisgICAgc2NtID0gZGV0ZWN0X3NjbV9zeXN0ZW0oY3dkKQorCisgICAg
cmV0dXJuIE5vbmUgaWYgc2NtIGlzIE5vbmUgZWxzZSBTaW1wbGVTY20oc2NtKQorCisKIGRlZiBw
YXJzZV9wYXRjaChwYXRjaF9zdHJpbmcpOgogCiAgICAgIiIiUGFyc2UgYSBwYXRjaCBzdHJpbmcg
YW5kIHJldHVybiB0aGUgYWZmZWN0ZWQgZmlsZXMuIiIiCkBAIC01OCwxMSArNjYsMTAgQEAgY2xh
c3MgU2ltcGxlU2NtKG9iamVjdCk6CiAKICAgICAiIiJTaW1wbGUgZmFjYWRlIHRvIFNDTSBmb3Ig
dXNlIGJ5IHN0eWxlIHBhY2thZ2UuIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAg
ICAgIGN3ZCA9IG9zLnBhdGguYWJzcGF0aCgnLicpCi0gICAgICAgIHNlbGYuX3NjbSA9IGRldGVj
dF9zY21fc3lzdGVtKGN3ZCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2NtKToKKyAgICAgICAg
c2VsZi5fc2NtID0gc2NtCiAKLSAgICBkZWYgY2hlY2tvdXRfcm9vdChzZWxmKToKKyAgICBkZWYg
c291cmNlX3Jvb3Qoc2VsZik6CiAgICAgICAgICIiIlJldHVybiB0aGUgc291cmNlIGNvbnRyb2wg
cm9vdCBhcyBhbiBhYnNvbHV0ZSBwYXRoLiIiIgogICAgICAgICByZXR1cm4gc2VsZi5fc2NtLmNo
ZWNrb3V0X3Jvb3QKIAo=
</data>
<flag name="commit-queue"
          id="33782"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50617</attachid>
            <date>2010-03-12 11:36:04 -0800</date>
            <delta_ts>2010-03-21 12:11:32 -0700</delta_ts>
            <desc>Proposed patch 4</desc>
            <filename>_patch-35498-4.diff</filename>
            <type>text/plain</type>
            <size>26344</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBkMzUyMjc0Li5iNzQ4ZjE3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTAtMDMt
MTIgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlZCBjaGVjay13ZWJraXQt
c3R5bGUgdG8gY29udmVydCBwYXRocyB0byBwYXRocyByZWxhdGl2ZSB0bworICAgICAgICB0aGUg
c291cmNlIHJvb3Qgd2hlbiBpbnZva2luZyBjaGVjay13ZWJraXQtc3R5bGUgd2l0aCB0aGUgZmls
ZXMKKyAgICAgICAgc3ludGF4LiAgQWxzbyBhZGRlZCB3YXJuaW5nIG1lc3NhZ2VzIHdoZXJlIGFw
cHJvcHJpYXRlLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zNTQ5OAorCisgICAgICAgIENvbnZlcnRpbmcgcGF0aHMgdG8gcGF0aHMgcmVsYXRpdmUg
dG8gdGhlIHNvdXJjZSByb290IGVuc3VyZXMKKyAgICAgICAgdGhhdCBzdHlsZSBjaGVja2luZyB3
aWxsIGJlaGF2ZSBhcyBleHBlY3RlZCAoc2luY2UgcGF0aC1zcGVjaWZpYworICAgICAgICBydWxl
cyBhc3N1bWUgaW5wdXQgcGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBzb3VyY2Ugcm9vdCkuCisK
KyAgICAgICAgKiBTY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHlsZToKKyAgICAgICAgICAtIEFkZGVk
IGEgY2FsbCB0byBoYW5kbGVfc2NtIHByaW9yIHRvIGNoZWNraW5nIHN0eWxlLgorCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9pbml0L2xvZ3Rlc3RpbmcucHk6CisgICAgICAgICAgLSBSZW5h
bWVkIFVuaXRUZXN0TG9nU3RyZWFtIHRvIFRlc3RMb2dTdHJlYW0uCisKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHk6CisgICAgICAgICAgLSBBZGRlZCBhIGxvZ2dp
bmdfbGV2ZWwgcGFyYW1ldGVyIHRvIGNvbmZpZ3VyZV9sb2dnaW5nKCkuCisKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHk6CisgICAgICAgICAgLSBV
cGRhdGVkIHRoZSBuYW1lIG9mIFVuaXRUZXN0TG9nU3RyZWFtIHRvIFRlc3RMb2dTdHJlYW0uCisK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL21haW4ucHk6IEFkZGVkLgorICAgICAg
ICAgIC0gQWRkZWQgYSBuZXcgZmlsZSB0byBhbGxvdyB0aGUgY29kZSBpbiB0aGlzIHBhdGNoIHRv
IGJlCisgICAgICAgICAgICB1bml0LXRlc3RlZCwgYXMgb3Bwb3NlZCB0byBhZGRpbmcgbmV3IGNv
ZGUgdG8gY2hlY2std2Via2l0LXN0eWxlLgorICAgICAgICAgIC0gQWRkZWQgX3JlbF9wYXRoKCkg
YXMgYSBzdWJzdGl0dXRlIGZvciBvcy5wYXRoLnJlbHBhdGgoKQorICAgICAgICAgICAgd2hpY2gg
aXMgYXZhaWxhYmxlIG9ubHkgaW4gUHl0aG9uIDIuNi4KKyAgICAgICAgICAtIEFkZGVkIGhhbmRs
ZV9zY20oKSB3aGljaCBjb250YWlucyBtb3N0IG9mIHRoZSBuZXcgZnVuY3Rpb25hbGl0eQorICAg
ICAgICAgICAgaW4gdGhpcyBwYXRjaC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5
bGUvbWFpbl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgICAgLSBBZGRlZCBSZWxQYXRoVGVz
dCB0byB0ZXN0IG1haW4uX3JlbF9wYXRoKCkuCisgICAgICAgICAgLSBBZGRlZCBIYW5kbGVTY21U
ZXN0IHRvIHRlc3QgaGFuZGxlX3NjbSgpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9z
dHlsZS91bml0dGVzdHMucHk6CisgICAgICAgICAgLSBBZGRlZCBhbiBpbXBvcnQgc3RhdGVtZW50
IGZvciBtYWluX3VuaXR0ZXN0LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZV9y
ZWZlcmVuY2VzLnB5OgorICAgICAgICAgIC0gVXBkYXRlZCB0aGUgbmFtZSBvZiBVbml0VGVzdExv
Z1N0cmVhbSB0byBUZXN0TG9nU3RyZWFtLgorICAgICAgICAgIC0gQWRkZWQgYSBkZXRlY3Rfc2Nt
KCkgZnVuY3Rpb24gdG8gYWxsb3cgcmV0dXJuaW5nIE5vbmUgaW5zdGVhZCBvZgorICAgICAgICAg
ICAgYSBTaW1wbGVTY20gaW5zdGFuY2Ugd2hlbiBjaGVja2luZyBmb3IgdGhlIHNjbS4KKwogMjAx
MC0wMy0xMCAgQ2hyaXMgSmVyZG9uZWsgIDxjamVyZG9uZWtAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTaGluaWNoaXJvIEhhbWFqaS4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvY2hlY2std2Via2l0LXN0eWxlIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9jaGVjay13
ZWJraXQtc3R5bGUKaW5kZXggZjE4ODViMi4uOTkwYjc4ZCAxMDA3NTUKLS0tIGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy9jaGVjay13ZWJraXQtc3R5bGUKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9j
aGVjay13ZWJraXQtc3R5bGUKQEAgLTQ4LDExICs0OCwxMyBAQCBpbXBvcnQgb3MKIGltcG9ydCBv
cy5wYXRoCiBpbXBvcnQgc3lzCiAKK2Zyb20gd2Via2l0cHkuc3R5bGUubWFpbiBpbXBvcnQgaGFu
ZGxlX3NjbQogaW1wb3J0IHdlYmtpdHB5LnN0eWxlLmNoZWNrZXIgYXMgY2hlY2tlcgotZnJvbSB3
ZWJraXRweS5zdHlsZV9yZWZlcmVuY2VzIGltcG9ydCBTaW1wbGVTY20KIAogX2xvZyA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKCJjaGVjay13ZWJraXQtc3R5bGUiKQogCisKKyMgRklYTUU6IE1vdmUgdGhp
cyBjb2RlIHRvIHN0eWxlLm1haW4uCiBkZWYgbWFpbigpOgogICAgICMgQ2hhbmdlIHN0ZGVyciB0
byB3cml0ZSB3aXRoIHJlcGxhY2VtZW50IGNoYXJhY3RlcnMgc28gd2UgZG9uJ3QgZGllCiAgICAg
IyBpZiB3ZSB0cnkgdG8gcHJpbnQgc29tZXRoaW5nIGNvbnRhaW5pbmcgbm9uLUFTQ0lJIGNoYXJh
Y3RlcnMuCkBAIC03NCwyMCArNzYsMTcgQEAgZGVmIG1haW4oKToKICAgICBjaGVja2VyLmNvbmZp
Z3VyZV9sb2dnaW5nKHN0ZGVycikKIAogICAgIHBhcnNlciA9IGNoZWNrZXIuY2hlY2tfd2Via2l0
X3N0eWxlX3BhcnNlcigpCi0gICAgKGZpbGVzLCBvcHRpb25zKSA9IHBhcnNlci5wYXJzZShzeXMu
YXJndlsxOl0pCisgICAgKHBhdGhzLCBvcHRpb25zKSA9IHBhcnNlci5wYXJzZShzeXMuYXJndlsx
Ol0pCiAKICAgICBjb25maWd1cmF0aW9uID0gY2hlY2tlci5jaGVja193ZWJraXRfc3R5bGVfY29u
ZmlndXJhdGlvbihvcHRpb25zKQogICAgIHN0eWxlX2NoZWNrZXIgPSBjaGVja2VyLlN0eWxlQ2hl
Y2tlcihjb25maWd1cmF0aW9uKQogCi0gICAgaWYgZmlsZXM6Ci0gICAgICAgIGZvciBmaWxlbmFt
ZSBpbiBmaWxlczoKLSAgICAgICAgICAgIHN0eWxlX2NoZWNrZXIuY2hlY2tfZmlsZShmaWxlbmFt
ZSkKKyAgICAocGF0aHMsIHNjbSkgPSBoYW5kbGVfc2NtKHBhdGhzKQogCisgICAgaWYgcGF0aHM6
CisgICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICAgICAgc3R5bGVfY2hlY2tlci5j
aGVja19maWxlKHBhdGgpCiAgICAgZWxzZToKLSAgICAgICAgc2NtID0gU2ltcGxlU2NtKCkKLQot
ICAgICAgICBvcy5jaGRpcihzY20uY2hlY2tvdXRfcm9vdCgpKQotCiAgICAgICAgIGlmIG9wdGlv
bnMuZ2l0X2NvbW1pdDoKICAgICAgICAgICAgIGNvbW1pdCA9IG9wdGlvbnMuZ2l0X2NvbW1pdAog
ICAgICAgICAgICAgaWYgJy4uJyBpbiBjb21taXQ6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2luaXQvbG9ndGVzdGluZy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvaW5pdC9sb2d0ZXN0aW5nLnB5CmluZGV4IDEwZDAwZTQuLjRkOWQ0ZjcgMTAwNjQ0
Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvaW5pdC9sb2d0ZXN0aW5nLnB5Cisr
KyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvaW5pdC9sb2d0ZXN0aW5nLnB5CkBAIC0y
NywxNCArMjcsMTQgQEAgbG9nZ2luZyBtb2R1bGUuCiAKIFVzZSB0aGUgTG9nVGVzdGluZyBjbGFz
cyBmb3IgYmFzaWMgdGVzdGluZyBuZWVkcy4gIEZvciBtb3JlIGFkdmFuY2VkCiBuZWVkcyAoZS5n
LiB1bml0LXRlc3RpbmcgbWV0aG9kcyB0aGF0IGNvbmZpZ3VyZSBsb2dnaW5nKSwgc2VlIHRoZQot
VW5pdFRlc3RMb2dTdHJlYW0gY2xhc3MuCitUZXN0TG9nU3RyZWFtIGNsYXNzLgogCiAiIiIKIAog
aW1wb3J0IGxvZ2dpbmcKIAogCi1jbGFzcyBVbml0VGVzdExvZ1N0cmVhbShvYmplY3QpOgorY2xh
c3MgVGVzdExvZ1N0cmVhbShvYmplY3QpOgogCiAgICAgIiIiUmVwcmVzZW50cyBhIGZpbGUtbGlr
ZSBvYmplY3QgZm9yIHVuaXQtdGVzdGluZyBsb2dnaW5nLgogCkBAIC0xMDQsNyArMTA0LDcgQEAg
Y2xhc3MgTG9nVGVzdGluZyhvYmplY3QpOgogICAgICAgICBpbnN0ZWFkIGJlIGNyZWF0ZWQgdXNp
bmcgdGhlIHN0YXRpYyBzZXRVcCgpIG1ldGhvZC4KIAogICAgICAgICBBcmdzOgotICAgICAgICAg
IHRlc3Rfc3RyZWFtOiBBIFVuaXRUZXN0TG9nU3RyZWFtIGluc3RhbmNlLgorICAgICAgICAgIHRl
c3Rfc3RyZWFtOiBBIFRlc3RMb2dTdHJlYW0gaW5zdGFuY2UuCiAgICAgICAgICAgaGFuZGxlcjog
VGhlIGhhbmRsZXIgYWRkZWQgdG8gdGhlIGxvZ2dlci4KIAogICAgICAgICAiIiIKQEAgLTE0Myw3
ICsxNDMsNyBAQCBjbGFzcyBMb2dUZXN0aW5nKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2YgbG9nIG1lc3NhZ2VzIHlvdSB3b3VsZCBsaWtlIHRvIHRlc3QuCiAKICAgICAgICAg
IiIiCi0gICAgICAgIHN0cmVhbSA9IFVuaXRUZXN0TG9nU3RyZWFtKHRlc3RfY2FzZSkKKyAgICAg
ICAgc3RyZWFtID0gVGVzdExvZ1N0cmVhbSh0ZXN0X2Nhc2UpCiAgICAgICAgIGhhbmRsZXIgPSBs
b2dnaW5nLlN0cmVhbUhhbmRsZXIoc3RyZWFtKQogICAgICAgICBoYW5kbGVyLnNldExldmVsKGxv
Z2dpbmdfbGV2ZWwpCiAgICAgICAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKCIlKGxl
dmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXIucHkKaW5kZXggZjhiYTRmNS4uYzMyYWRhMiAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAtMjMwLDcgKzIzMCw3IEBA
IGRlZiBjaGVja193ZWJraXRfc3R5bGVfY29uZmlndXJhdGlvbihvcHRpb25zKToKICMgICAgICAg
IFRoaXMgY2FuIHVzZSBhIGZvcm1hdHRlciBsaWtlIHRoZSBmb2xsb3dpbmcsIGZvciBleGFtcGxl
LS0KICMKICMgICAgICAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKCIlKG5hbWUpczog
WyUobGV2ZWxuYW1lKXNdICUobWVzc2FnZSlzIikKLWRlZiBjb25maWd1cmVfbG9nZ2luZyhzdHJl
YW0sIGxvZ2dlcj1Ob25lKToKK2RlZiBjb25maWd1cmVfbG9nZ2luZyhzdHJlYW0sIGxvZ2dlcj1O
b25lLCBsb2dnaW5nX2xldmVsPWxvZ2dpbmcuSU5GTyk6CiAgICAgIiIiQ29uZmlndXJlIGxvZ2dp
bmcsIGFuZCByZXR1cm4gdGhlIGxpc3Qgb2YgaGFuZGxlcnMgYWRkZWQuCiAKICAgICBDb25maWd1
cmVzIGEgbG9nZ2VyIHRvIGxvZyBJTkZPIG1lc3NhZ2VzIGFuZCBoaWdoZXIuICBGb3JtYXRzIFdB
Uk5JTkcKQEAgLTI1MSw4ICsyNTEsMTUgQEAgZGVmIGNvbmZpZ3VyZV9sb2dnaW5nKHN0cmVhbSwg
bG9nZ2VyPU5vbmUpOgogICAgICAgbG9nZ2VyOiBBIGxvZ2dpbmcubG9nZ2VyIGluc3RhbmNlIHRv
IGNvbmZpZ3VyZS4gIFRoaXMgcGFyYW1ldGVyCiAgICAgICAgICAgICAgIHNob3VsZCBiZSB1c2Vk
IG9ubHkgaW4gdW5pdCB0ZXN0cy4gIERlZmF1bHRzIHRvIHRoZQogICAgICAgICAgICAgICByb290
IGxvZ2dlci4KKyAgICAgIGxvZ2dpbmdfbGV2ZWw6IEFuIGludGVnZXIgbG9nZ2luZyBsZXZlbCB0
aGF0IGlzIHRoZSBtaW5pbXVtIGxldmVsCisgICAgICAgICAgICAgICAgICAgICBvZiBsb2cgbWVz
c2FnZXMgdG8gbG9nLgogCiAgICAgIiIiCisgICAgaWYgbG9nZ2VyIGlzIE5vbmU6CisgICAgICAg
IGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKworICAgIGxvZ2dlci5zZXRMZXZlbChsb2dn
aW5nX2xldmVsKQorCiAgICAgIyBJZiB0aGUgc3RyZWFtIGRvZXMgbm90IGRlZmluZSBhbiAiZW5j
b2RpbmciIGRhdGEgYXR0cmlidXRlLCB0aGUKICAgICAjIGxvZ2dpbmcgbW9kdWxlIGNhbiB0aHJv
dyBhbiBlcnJvciBsaWtlIHRoZSBmb2xsb3dpbmc6CiAgICAgIwpAQCAtMjc5LDEwICsyODYsNiBA
QCBkZWYgY29uZmlndXJlX2xvZ2dpbmcoc3RyZWFtLCBsb2dnZXI9Tm9uZSk6CiAgICAgZm9ybWF0
dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoIiUobWVzc2FnZSlzIikKICAgICBub25fZXJyb3JfaGFu
ZGxlci5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQogCi0gICAgaWYgbG9nZ2VyIGlzIE5vbmU6Ci0g
ICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKLSAgICBsb2dnZXIuc2V0TGV2ZWwo
bG9nZ2luZy5JTkZPKQotCiAgICAgaGFuZGxlcnMgPSBbZXJyb3JfaGFuZGxlciwgbm9uX2Vycm9y
X2hhbmRsZXJdCiAKICAgICBmb3IgaGFuZGxlciBpbiBoYW5kbGVyczoKQEAgLTU2Miw2ICs1NjUs
OSBAQCBjbGFzcyBTdHlsZUNoZWNrZXIob2JqZWN0KToKIAogICAgICAgICBBcmdzOgogICAgICAg
ICAgIGZpbGVfcGF0aDogQSBzdHJpbmcgdGhhdCBpcyB0aGUgcGF0aCBvZiB0aGUgZmlsZSB0byBw
cm9jZXNzLgorICAgICAgICAgICAgICAgICAgICAgVGhlIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZl
IHRvIHRoZSBzb3VyY2Ugcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSBwYXRo
LXNwZWNpZmljIGxvZ2ljIG1heSBub3QgYmVoYXZlIGFzCisgICAgICAgICAgICAgICAgICAgICBl
eHBlY3RlZC4KICAgICAgICAgICBoYW5kbGVfc3R5bGVfZXJyb3I6IFRoZSBmdW5jdGlvbiB0byBj
YWxsIHdoZW4gYSBzdHlsZSBlcnJvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Nj
dXJzLiBUaGlzIHBhcmFtZXRlciBpcyBtZWFudCBmb3IgaW50ZXJuYWwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVzZSB3aXRoaW4gdGhpcyBjbGFzcy4gRGVmYXVsdHMgdG8gYQpAQCAt
NTcxLDYgKzU3Nyw3IEBAIGNsYXNzIFN0eWxlQ2hlY2tlcihvYmplY3QpOgogICAgICAgICAgICAg
ICAgICAgICAgICAgRGVmYXVsdHMgdG8gdGhlIGZpbGUgcHJvY2Vzc2luZyBtZXRob2Qgb2YgdGhp
cyBjbGFzcy4KIAogICAgICAgICAiIiIKKyAgICAgICAgX2xvZy5kZWJ1ZygiQ2hlY2tpbmc6ICIg
KyBmaWxlX3BhdGgpCiAgICAgICAgIGlmIGhhbmRsZV9zdHlsZV9lcnJvciBpcyBOb25lOgogICAg
ICAgICAgICAgaGFuZGxlX3N0eWxlX2Vycm9yID0gRGVmYXVsdFN0eWxlRXJyb3JIYW5kbGVyKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249c2VsZi5f
Y29uZmlndXJhdGlvbiwKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3R5bGUvY2hlY2tlcl91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3R5bGUvY2hlY2tlcl91bml0dGVzdC5weQppbmRleCAwNmJiMTkxLi41NWUyZDhiIDEwMDc1NQot
LS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3Qu
cHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyX3VuaXR0
ZXN0LnB5CkBAIC0zOSw3ICszOSw3IEBAIGltcG9ydCB1bml0dGVzdAogCiBpbXBvcnQgY2hlY2tl
ciBhcyBzdHlsZQogZnJvbSB3ZWJraXRweS5zdHlsZV9yZWZlcmVuY2VzIGltcG9ydCBMb2dUZXN0
aW5nCi1mcm9tIHdlYmtpdHB5LnN0eWxlX3JlZmVyZW5jZXMgaW1wb3J0IFVuaXRUZXN0TG9nU3Ry
ZWFtCitmcm9tIHdlYmtpdHB5LnN0eWxlX3JlZmVyZW5jZXMgaW1wb3J0IFRlc3RMb2dTdHJlYW0K
IGZyb20gY2hlY2tlciBpbXBvcnQgX0JBU0VfRklMVEVSX1JVTEVTCiBmcm9tIGNoZWNrZXIgaW1w
b3J0IF9NQVhfUkVQT1JUU19QRVJfQ0FURUdPUlkKIGZyb20gY2hlY2tlciBpbXBvcnQgX1BBVEhf
UlVMRVNfU1BFQ0lGSUVSIGFzIFBBVEhfUlVMRVNfU1BFQ0lGSUVSCkBAIC02Myw3ICs2Myw3IEBA
IGNsYXNzIENvbmZpZ3VyZUxvZ2dpbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiJU
ZXN0cyB0aGUgY29uZmlndXJlX2xvZ2dpbmcoKSBmdW5jdGlvbi4iIiIKIAogICAgIGRlZiBzZXRV
cChzZWxmKToKLSAgICAgICAgbG9nX3N0cmVhbSA9IFVuaXRUZXN0TG9nU3RyZWFtKHNlbGYpCisg
ICAgICAgIGxvZ19zdHJlYW0gPSBUZXN0TG9nU3RyZWFtKHNlbGYpCiAgICAgICAgICMgVXNlIGEg
bG9nZ2VyIG90aGVyIHRoYW4gdGhlIHJvb3QgbG9nZ2VyIG9yIG9uZSBwcmVmaXhlZCB3aXRoCiAg
ICAgICAgICMgd2Via2l0IHNvIGFzIG5vdCB0byBjb25mbGljdCB3aXRoIHRlc3Qtd2Via2l0cHkg
bG9nZ2luZy4KICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInVuaXR0ZXN0IikK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvbWFpbi5weSBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvbWFpbi5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTg1YmNiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9tYWluLnB5CkBAIC0wLDAgKzEsMTU1IEBACisj
IENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2plcmRvbmVrQHdlYmtpdC5vcmcp
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBsb2dn
aW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworIyBQcmVmaXggd2l0aCBhbiB1bmRlcnNjb3Jl
IHRvIHJlZHVjZSBjb25mdXNpb24gd2hlbiBjYWxsaW5nIGRldGVjdF9zY20oKQorIyBmcm9tIHdp
dGhpbiBoYW5kbGVfc2NtKCkgYmVsb3cuCitmcm9tIHdlYmtpdHB5LnN0eWxlX3JlZmVyZW5jZXMg
aW1wb3J0IGRldGVjdF9zY20gYXMgX2RldGVjdF9zY20KKworCitfbG9nID0gbG9nZ2luZy5nZXRM
b2dnZXIoX19uYW1lX18pCisKKworIyBUaGlzIGZ1bmN0aW9uIGlzIGVzc2VudGlhbGx5IGEgcmVw
bGFjZW1lbnQgZm9yIG9zLnBhdGgucmVscGF0aCgpCisjIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiBQ
eXRob24gMi42LiAgSXQgYmVoYXZlcyBtb3JlIG9yIGxlc3MgdGhlIHNhbWUKKyMgZXhjZXB0IGZv
ciByZXR1cm5pbmcgTm9uZSBvbiBwYXRocyBub3QgY29udGFpbmVkIGluIGFic19zdGFydF9wYXRo
LgorZGVmIF9yZWxfcGF0aChwYXRoLCBzdGFydF9wYXRoLCBvc19wYXRoX2Fic3BhdGg9Tm9uZSk6
CisgICAgIiIiUmV0dXJuIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gc3RhcnQgcGF0aCwg
b3IgTm9uZS4KKworICAgIFJldHVybnMgTm9uZSBpZiB0aGUgcGF0aCBpcyBub3QgY29udGFpbmVk
IGluIHRoZSBkaXJlY3Rvcnkgc3RhcnRfcGF0aC4KKworICAgIEFyZ3M6CisgICAgICBwYXRoOiBB
biBhYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRoIHRvIGNvbnZlcnQgdG8gYSByZWxhdGl2ZSBwYXRo
LgorICAgICAgc3RhcnRfcGF0aDogVGhlIHBhdGggcmVsYXRpdmUgdG8gd2hpY2ggdGhlIGdpdmVu
IHBhdGggc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQuCisgICAgICBvc19w
YXRoX2Fic3BhdGg6IEEgcmVwbGFjZW1lbnQgZnVuY3Rpb24gZm9yIHVuaXQgdGVzdGluZy4KKyAg
ICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gb3MucGF0aC5hYnNwYXRoLgorCisgICAg
IiIiCisgICAgaWYgb3NfcGF0aF9hYnNwYXRoIGlzIE5vbmU6CisgICAgICAgIG9zX3BhdGhfYWJz
cGF0aCA9IG9zLnBhdGguYWJzcGF0aAorCisgICAgc3RhcnRfcGF0aCA9IG9zX3BhdGhfYWJzcGF0
aChzdGFydF9wYXRoKQorICAgIHBhdGggPSBvc19wYXRoX2Fic3BhdGgocGF0aCkKKworICAgIGlm
IG5vdCBwYXRoLmxvd2VyKCkuc3RhcnRzd2l0aChzdGFydF9wYXRoLmxvd2VyKCkpOgorICAgICAg
ICAjIFRoZW4gcGF0aCBpcyBvdXRzaWRlIHRoZSBkaXJlY3RvcnkgZ2l2ZW4gYnkgc3RhcnRfcGF0
aC4KKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIHBhdGggPSBwYXRoW2xlbihzdGFydF9wYXRo
KTpdCisgICAgIyBUcmltIG9mZiBhbnkgbGVhZGluZyBzbGFzaCBmcm9tIHBhdGggaW4gY2FzZSBz
dGFydF9wYXRoCisgICAgIyBkb2VzIG5vdCBlbmQgaW4gYSBzbGFzaC4KKyAgICBwYXRoID0gcGF0
aC5sc3RyaXAoIi9cXCIpCisKKyAgICByZXR1cm4gcGF0aAorCisKK2RlZiBoYW5kbGVfc2NtKHBh
dGhzPU5vbmUsIG1vY2tfZGV0ZWN0X3NjbT1Ob25lLCBtb2NrX29zPU5vbmUpOgorICAgICIiIkRl
dGVjdCB0aGUgc2NtLCBhbmQgc3dpdGNoIHRvIHRoZSBzb3VyY2Ugcm9vdCwgaWYgcG9zc2libGUu
CisKKyAgICBUaGlzIG1ldGhvZCB0cmllcyB0byBkZXRlY3QgdGhlIHNvdXJjZSBjb250cm9sIHJv
b3Qgb2YgdGhlIGN1cnJlbnQKKyAgICBkaXJlY3RvcnksIGFzIHdlbGwgYXMgaXRzIHNjbSAoYWth
IHNvdXJjZSBjb250cm9sIG1hbmFnZXIpLgorICAgICAgICBJZiB0aGUgc291cmNlIGNvbnRyb2wg
cm9vdCB3YXMgZGV0ZWN0ZWQgYW5kIGFsbCBnaXZlbiBwYXRocyBhcmUKKyAgICBjb250YWluZWQg
d2l0aGluIHRoZSBzb3VyY2Ugcm9vdCAob3IgaWYgcGF0aHMgaXMgZW1wdHkgb3IgTm9uZSksCisg
ICAgdGhpcyBtZXRob2QgYWxzbyBjaGFuZ2VzIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5
IHRvIHRoZQorICAgIHNvdXJjZSByb290LiAgVGhpcyBhbGxvd3MgZmlsZXMgcHJvY2Vzc2VkIHRv
IGJlIGRpc3BsYXllZCByZWxhdGl2ZQorICAgIHRvIHRoZSBzb3VyY2Ugcm9vdCwgYW5kIGZvciBw
YXRoLXNwZWNpZmljIHJ1bGVzIHRvIHdvcmsgYXMgZXhwZWN0ZWQKKyAgICAoZS5nLiB3aGV0aGVy
IGZpbGVzIHNob3VsZCBiZSBza2lwcGVkIGFuZCB3aGV0aGVyIGN1c3RvbSBzdHlsZSBydWxlcwor
ICAgIHNob3VsZCBhcHBseSkuCisKKyAgICBSZXR1cm5zOgorICAgICAgQSBwYWlyIG9mIChwYXRo
cywgc2NtKS4KKworICAgICAgcGF0aHM6IFRoZSBwYXRocyBwYXJhbWV0ZXIgY29udmVydGVkIHRv
IGEgbGlzdCBvZiBwYXRocyByZWxhdGl2ZQorICAgICAgICAgICAgIHRvIHRoZSBzb3VyY2Ugcm9v
dCwgaWYgdGhlIHNvdXJjZSByb290IHdhcyBkZXRlY3RlZCBhbmQKKyAgICAgICAgICAgICBpZiBh
bGwgZ2l2ZW4gcGF0aHMgYXJlIGNvbnRhaW5lZCBpbiB0aGUgc291cmNlIHJvb3Qgb3Igb25lCisg
ICAgICAgICAgICAgb2YgaXRzIHN1Yi1kaXJlY3Rvcmllcy4KKyAgICAgIHNjbTogVGhlIHNjbSBh
cyBhIFNpbXBsZVNjbSBpbnN0YW5jZSBpZiB0aGUgc2NtIHdhcyBkZXRlY3RlZCwgb3IgTm9uZS4K
KworICAgIEFyZ3M6CisgICAgICBwYXRoczogVGhlIGxpc3Qgb2YgcGF0aHMgdG8gY2hlY2sgc3R5
bGUuICBUaGlzIGFyZ3VtZW50IGNhbiBiZSBOb25lCisgICAgICAgICAgICAgb3IgdGhlIGVtcHR5
IGxpc3QgaWYgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgb3IgYSBnaXQKKyAgICAgICAg
ICAgICBjb21taXQgc2hvdWxkIGJlIGNoZWNrZWQuCisgICAgICBtb2NrX2RldGVjdF9zY206IEEg
cmVwbGFjZW1lbnQgZnVuY3Rpb24gZm9yIHVuaXQgdGVzdGluZy4gIERlZmF1bHRzCisgICAgICAg
ICAgICAgICAgICAgICAgIHRvIHdlYmtpdHB5LnN0eWxlX3JlZmVyZW5jZXMuZGV0ZWN0X3NjbS4K
KyAgICAgIG1vY2tfb3M6IEEgcmVwbGFjZW1lbnQgbW9kdWxlIGZvciB1bml0IHRlc3RpbmcuICBE
ZWZhdWx0cyB0byBvcy4KKworICAgICIiIgorICAgIGRldGVjdF9zY20gPSBfZGV0ZWN0X3NjbSBp
ZiBtb2NrX2RldGVjdF9zY20gaXMgTm9uZSBlbHNlIG1vY2tfZGV0ZWN0X3NjbQorICAgIG9zX21v
ZHVsZSA9IG9zIGlmIG1vY2tfb3MgaXMgTm9uZSBlbHNlIG1vY2tfb3MKKworICAgIHNjbSA9IGRl
dGVjdF9zY20oKQorCisgICAgIyBGSVhNRTogSWYgc2NtIGlzIE5vbmUsIHRyeSB0byBmaW5kIGEg
InNvdXJjZSByb290IiB1c2luZyBhCisgICAgIyAgICAgICAgZmlsZS1iYXNlZCBoZXVyaXN0aWMg
LS0gZm9yIGV4YW1wbGUgYnkgZXhhbWluaW5nIHBhcmVudAorICAgICMgICAgICAgIGRpcmVjdG9y
aWVzIHVudGlsIGEgZGlyZWN0b3J5IGlzIGZvdW5kIGNvbnRhaW5pbmcKKyAgICAjICAgICAgICBK
YXZhU2NyaXB0Q29yZSwgV2ViQ29yZSwgV2ViS2l0LCBXZWJLaXRTaXRlLCBhbmQgV2ViS2l0VG9v
bHMuCisgICAgIyAgICAgICAgVGhlbiBsb2cgYW4gSU5GTyBtZXNzYWdlIHNheWluZyB0aGF0IGEg
bm9uLXNjbSBzb3VyY2Ugcm9vdAorICAgICMgICAgICAgIHdhcyBmb3VuZC4gIFRoaXMgYWxsb3dz
IGNoZWNrLXdlYmtpdC1zdHlsZSB0byBiZSBydW4gb24KKyAgICAjICAgICAgICBub24tc2NtIGNv
cGllcyBvZiB0aGUgc291cmNlIHRyZWUgKGUuZy4gbmlnaHRsaWVzKS4KKyAgICBzb3VyY2Vfcm9v
dCA9IHNjbS5zb3VyY2Vfcm9vdCgpIGlmIHNjbSBpcyBub3QgTm9uZSBlbHNlIE5vbmUKKworICAg
IGlmIHNvdXJjZV9yb290IGlzIE5vbmU6CisgICAgICAgIGlmIG5vdCBwYXRoczoKKyAgICAgICAg
ICAgICMgRklYTUU6IExvZyB0aGlzIGVycm9yIGFuZCBleGl0IGZyb20gd2l0aGluIHRoZSBvcHRp
b24gcGFyc2VyCisgICAgICAgICAgICAjICAgICAgICBpbnN0ZWFkLCBhbmQgaGFuZGxlIHRoaXMg
Y2FzZSBoZXJlIGJ5IHJhaXNpbmcgYW4KKyAgICAgICAgICAgICMgICAgICAgIGVycm9yLiAgVGhp
cyBwcm9iYWJseSByZXF1aXJlcyBkZXRlY3RpbmcgdGhlIHNjbSBwcmlvcgorICAgICAgICAgICAg
IyAgICAgICAgdG8gcGFyc2luZyBvcHRpb25zLCBhbmQgdGhlbiBwYXNzaW5nIHRoZSByZXN1bHQg
dG8KKyAgICAgICAgICAgICMgICAgICAgIHRoZSBvcHRpb24gcGFyc2VyLgorICAgICAgICAgICAg
X2xvZy5lcnJvcigiU291cmNlIHJvb3Qgbm90IGZvdW5kOiBmaWxlIG5hbWVzIG11c3QgYmUgcGFz
c2VkICIKKyAgICAgICAgICAgICAgICAgICAgICAgIndoZW4gdGhlIHNvdXJjZSByb290IGNhbm5v
dCBiZSBmb3VuZC4iKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgX2xvZy53YXJu
KCJTb3VyY2Ugcm9vdCBub3QgZGV0ZWN0ZWQ6IHBhdGgtc3BlY2lmaWMgbG9naWMgbWF5IHlpZWxk
ICIKKyAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIHJlc3VsdHMuXG4iCisgICAgICAgICAg
ICAgICAgICAiIElmIHlvdSBhcmUgcnVubmluZyB0aGlzIHNjcmlwdCBmcm9tIGEga25vd24gc291
cmNlICIKKyAgICAgICAgICAgICAgICAgICJyb290LCBpZ25vcmUgdGhpcyB3YXJuaW5nLiIpCisg
ICAgICAgIHJldHVybiAocGF0aHMsIE5vbmUpCisKKyAgICBpZiBwYXRoczoKKyAgICAgICAgIyBU
aGVuIHRyeSBjb252ZXJ0aW5nIGFsbCBvZiB0aGUgcGF0aHMgdG8gcGF0aHMgcmVsYXRpdmUgdG8K
KyAgICAgICAgIyB0aGUgc291cmNlIHJvb3QuCisgICAgICAgIHJlbF9wYXRocyA9IFtdCisgICAg
ICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICAgICAgcmVsX3BhdGggPSBfcmVsX3BhdGgo
cGF0aCwgc291cmNlX3Jvb3QpCisgICAgICAgICAgICBpZiByZWxfcGF0aCBpcyBOb25lOgorICAg
ICAgICAgICAgICAgICMgVGhlbiB0aGUgcGF0aCBpcyBvdXRzaWRlIHRoZSBzb3VyY2UgdHJlZS4g
IFNpbmNlIGFsbAorICAgICAgICAgICAgICAgICMgcGF0aHMgc2hvdWxkIGJlIGludGVycHJldGVk
IHJlbGF0aXZlIHRvIHRoZSBzYW1lIHJvb3QsCisgICAgICAgICAgICAgICAgIyBkbyBub3QgaW50
ZXJwcmV0IGFueSBvZiB0aGUgcGF0aHMgYXMgcmVsYXRpdmUgdG8gdGhlCisgICAgICAgICAgICAg
ICAgIyBzb3VyY2Ugcm9vdC4gIEludGVycHJldCBhbGwgb2YgdGhlbSByZWxhdGl2ZSB0byB0aGUK
KyAgICAgICAgICAgICAgICAjIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksIGFuZCBkbyBub3Qg
Y2hhbmdlIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgIyB3b3JraW5nIGRpcmVjdG9yeS4K
KyAgICAgICAgICAgICAgICBfbG9nLndhcm4oIk9uZSBvZiB0aGUgZ2l2ZW4gZmlsZXMgaXMgb3V0
c2lkZSB0aGUgc291cmNlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInRyZWU6IHBhdGgt
c3BlY2lmaWMgbG9naWMgbWF5IHlpZWxkIHVuZXhwZWN0ZWQgIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAicmVzdWx0cy5cbiBFbnN1cmUgdGhhdCBhbGwgZmlsZXMgYXJlIHdpdGhpbiAiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgc291cmNlIHRyZWUgdG8gYWNoaWV2ZSBleHBl
Y3RlZCByZXN1bHRzLiIpCisgICAgICAgICAgICAgICAgcmV0dXJuIChwYXRocywgc2NtKQorICAg
ICAgICAgICAgcmVsX3BhdGhzLmFwcGVuZChyZWxfcGF0aCkKKyAgICAgICAgIyBJZiB3ZSBnb3Qg
aGVyZSwgdGhlIGNvbnZlcnNpb24gd2FzIHN1Y2Nlc3NmdWwuCisgICAgICAgIHBhdGhzID0gcmVs
X3BhdGhzCisKKyAgICBfbG9nLmRlYnVnKCJDaGFuZ2luZyB0byBzb3VyY2Ugcm9vdDogIiArIHNv
dXJjZV9yb290KQorICAgIG9zX21vZHVsZS5jaGRpcihzb3VyY2Vfcm9vdCkKKworICAgIHJldHVy
biAocGF0aHMsIHNjbSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3R5bGUvbWFpbl91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5
bGUvbWFpbl91bml0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4z
YmZiZDE2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9tYWluX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsMjA5IEBACisjIENvcHlyaWdodCAoQykg
MjAxMCBDaHJpcyBKZXJkb25layAoY2hyaXMuamVyZG9uZWtAZ21haWwuY29tKQorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJVbml0IHRlc3RzIGZvciBtYWlu
LnB5LiIiIgorCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBtYWluIGltcG9ydCBfcmVsX3BhdGgK
K2Zyb20gbWFpbiBpbXBvcnQgaGFuZGxlX3NjbQorZnJvbSB3ZWJraXRweS5zdHlsZV9yZWZlcmVu
Y2VzIGltcG9ydCBMb2dUZXN0aW5nCisKKworY2xhc3MgUmVsUGF0aFRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgorCisgICAgIiIiVGVzdHMgX3JlbF9wYXRoKCkuIiIiCisKKyAgICAjIFNpbmNlIG91
ciBvc19wYXRoX2Fic3BhdGggcmV0dXJucyB0aGUgc2FtZSBwYXRoLCB3ZSBzaG91bGQgcGFzcwor
ICAgICMgaW4gYWJzb2x1dGUgcGF0aHMgZm9yIHRoZSBwYXRoIHBhcmFtZXRlciBvZiBfcmVsX3Bh
dGgoKS4KKyAgICBvc19wYXRoX2Fic3BhdGggPSBsYW1iZGEgc2VsZiwgcGF0aDogcGF0aAorCisg
ICAgZGVmIF9yZWxfcGF0aChzZWxmLCBwYXRoLCBhYnNfc3RhcnRfcGF0aCk6CisgICAgICAgIHJl
dHVybiBfcmVsX3BhdGgocGF0aCwgYWJzX3N0YXJ0X3BhdGgsIHNlbGYub3NfcGF0aF9hYnNwYXRo
KQorCisgICAgZGVmIHRlc3RfcmVsX3BhdGgoc2VsZik6CisgICAgICAgIHJlbF9wYXRoID0gc2Vs
Zi5fcmVsX3BhdGgoIi9XZWJLaXQvdGVzdC9Gb28udHh0IiwgIi9XZWJLaXQiKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhyZWxfcGF0aCwgInRlc3QvRm9vLnR4dCIpCisKKyAgICAgICAgcmVs
X3BhdGggPSBzZWxmLl9yZWxfcGF0aCgiL1dlYktpdC90ZXN0L0Zvby50eHQiLCAiL1dlYktpdC8i
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZWxfcGF0aCwgInRlc3QvRm9vLnR4dCIpCisK
KyAgICAgICAgcmVsX3BhdGggPSBzZWxmLl9yZWxfcGF0aChyImM6XFdlYktpdFx0ZXN0XEZvby50
eHQiLCByImM6XFdlYktpdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlbF9wYXRoLCBy
InRlc3RcRm9vLnR4dCIpCisKKyAgICAgICAgcmVsX3BhdGggPSBzZWxmLl9yZWxfcGF0aChyImM6
XFdlYktpdFx0ZXN0XEZvby50eHQiLCAiYzpcXFdlYktpdFxcIikKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMocmVsX3BhdGgsIHIidGVzdFxGb28udHh0IikKKworICAgIGRlZiB0ZXN0X3JlbF9w
YXRoX25vbmUoc2VsZik6CisgICAgICAgICIiIlRlc3QgX3JlbF9wYXRoKCkgd2l0aCBOb25lIHJl
dHVybiB2YWx1ZS4iIiIKKyAgICAgICAgcmVsX3BhdGggPSBzZWxmLl9yZWxfcGF0aCgiL290aGVy
X2Rpci90ZXN0L2Zvby50eHQiLCAiL1dlYktpdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShy
ZWxfcGF0aCBpcyBOb25lKQorCisKK2NsYXNzIEhhbmRsZVNjbVRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgorCisgICAgIiIiVGVzdHMgaGFuZGxlX3NjbSgpLiIiIgorCisgICAgY2xhc3MgX01vY2tP
cyhvYmplY3QpOgorCisgICAgICAgICIiIkEgbW9jayBvcyBtb2R1bGUgZm9yIHVuaXQgdGVzdGlu
Zy4iIiIKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9jYXNlKToKKyAgICAgICAg
ICAgIHNlbGYuX3Rlc3RfY2FzZSA9IHRlc3RfY2FzZQorICAgICAgICAgICAgc2VsZi5fY3VycmVu
dF9kaXJlY3RvcnkgPSBIYW5kbGVTY21UZXN0Ll9vcmlnaW5hbF9kaXJlY3RvcnkKKworICAgICAg
ICBkZWYgY2hkaXIoc2VsZiwgY3VycmVudF9kaXJlY3RvcnkpOgorICAgICAgICAgICAgc2VsZi5f
Y3VycmVudF9kaXJlY3RvcnkgPSBjdXJyZW50X2RpcmVjdG9yeQorCisgICAgICAgIGRlZiBhc3Nl
cnRDdXJyZW50RGlyZWN0b3J5KHNlbGYsIGV4cGVjdGVkX2RpcmVjdG9yeSk6CisgICAgICAgICAg
ICBzZWxmLl90ZXN0X2Nhc2UuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkX2RpcmVjdG9yeSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9kaXJlY3Rv
cnkpCisKKyAgICBjbGFzcyBfTW9ja1NpbXBsZVNjbShvYmplY3QpOgorCisgICAgICAgICIiIkEg
bW9jayBTaW1wbGVTY20gZm9yIHVuaXQgdGVzdGluZy4iIiIKKworICAgICAgICBkZWYgX19pbml0
X18oc2VsZiwgc291cmNlX3Jvb3QpOgorICAgICAgICAgICAgIiIiQ3JlYXRlIGFuIGluc3RhbmNl
LgorCisgICAgICAgICAgICBBcmdzOgorICAgICAgICAgICAgICBzb3VyY2Vfcm9vdDogQSBzdHJp
bmcgdGhhdCBpcyB0aGUgYWJzb2x1dGUgcGF0aCB0aGF0CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzb3VyY2Vfcm9vdCgpIHNob3VsZCByZXR1cm4uCisKKyAgICAgICAgICAgICIiIgorICAg
ICAgICAgICAgc2VsZi5fc291cmNlX3Jvb3QgPSBzb3VyY2Vfcm9vdAorCisgICAgICAgIGRlZiBz
b3VyY2Vfcm9vdChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9zb3VyY2Vfcm9vdAor
CisgICAgX29yaWdpbmFsX2RpcmVjdG9yeSA9ICIvb3JpZ2luYWwiCisgICAgX3NvdXJjZV9yb290
ID0gIi9XZWJLaXQiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX2xvZyA9
IExvZ1Rlc3Rpbmcuc2V0VXAoc2VsZikKKyAgICAgICAgc2VsZi5fbW9ja19vcyA9IHNlbGYuX01v
Y2tPcyhzZWxmKQorICAgICAgICBzZWxmLl9tb2NrX3NjbSA9IHNlbGYuX01vY2tTaW1wbGVTY20o
c2VsZi5fc291cmNlX3Jvb3QpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNl
bGYuX2xvZy50ZWFyRG93bigpCisKKyAgICAjIFRoaXMgbWV0aG9kIGlzIGEgY29udmVuaWVudCB3
cmFwcGVyIGZvciBoYW5kbGVfc2NtKCkgdGhhdAorICAgICMgcGFzc2VzIHRoZSBtb2NrX29zIGZv
ciB0aGlzIHVuaXQgdGVzdGluZyBjbGFzcy4KKyAgICBkZWYgX2hhbmRsZV9zY20oc2VsZiwgcGF0
aHMsIG1vY2tfZGV0ZWN0X3NjbSk6CisgICAgICAgIHJldHVybiBoYW5kbGVfc2NtKHBhdGhzPXBh
dGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrX2RldGVjdF9zY209bW9ja19kZXRl
Y3Rfc2NtLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrX29zPXNlbGYuX21vY2tfb3Mp
CisKKyAgICBkZWYgX2Fzc2VydF9oYW5kbGVfc2NtX3Jlc3VsdChzZWxmLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbF9yZXR1cm5fdmFsdWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcmV0dXJuX3ZhbHVlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2xvZ19tZXNzYWdlcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9jdXJyZW50X2RpcmVjdG9yeSk6CisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGFjdHVhbF9yZXR1cm5fdmFsdWUsIGV4cGVjdGVkX3JldHVy
bl92YWx1ZSkKKyAgICAgICAgc2VsZi5fbG9nLmFzc2VydE1lc3NhZ2VzKGV4cGVjdGVkX2xvZ19t
ZXNzYWdlcykKKyAgICAgICAgc2VsZi5fbW9ja19vcy5hc3NlcnRDdXJyZW50RGlyZWN0b3J5KGV4
cGVjdGVkX2N1cnJlbnRfZGlyZWN0b3J5KQorCisgICAgZGVmIHRlc3Rfc2NtX25vbmVfcGF0aHNf
bm9uZShzZWxmKToKKyAgICAgICAgbW9ja19kZXRlY3Rfc2NtID0gbGFtYmRhOiBOb25lCisKKyAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCwgc2VsZi5faGFuZGxlX3NjbSwgcGF0
aHM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbW9ja19kZXRlY3Rfc2NtPW1vY2tf
ZGV0ZWN0X3NjbSkKKworICAgICAgICBzZWxmLl9sb2cuYXNzZXJ0TWVzc2FnZXMoWyJFUlJPUjog
U291cmNlIHJvb3Qgbm90IGZvdW5kOiBmaWxlIG5hbWVzICIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAibXVzdCBiZSBwYXNzZWQgd2hlbiB0aGUgc291cmNlIHJvb3QgIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgYmUgZm91bmQuXG4iXSkKKyAg
ICAgICAgc2VsZi5fbW9ja19vcy5hc3NlcnRDdXJyZW50RGlyZWN0b3J5KHNlbGYuX29yaWdpbmFs
X2RpcmVjdG9yeSkKKworCisgICAgZGVmIHRlc3Rfc2NtX25vbmVfcGF0aHNfZW1wdHkoc2VsZik6
CisgICAgICAgIG1vY2tfZGV0ZWN0X3NjbSA9IGxhbWJkYTogTm9uZQorCisgICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQsIHNlbGYuX2hhbmRsZV9zY20sIHBhdGhzPVtdLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBtb2NrX2RldGVjdF9zY209bW9ja19kZXRlY3Rfc2NtKQor
CisgICAgICAgIHNlbGYuX2xvZy5hc3NlcnRNZXNzYWdlcyhbIkVSUk9SOiBTb3VyY2Ugcm9vdCBu
b3QgZm91bmQ6IGZpbGUgbmFtZXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJtdXN0IGJlIHBhc3NlZCB3aGVuIHRoZSBzb3VyY2Ugcm9vdCAiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImNhbm5vdCBiZSBmb3VuZC5cbiJdKQorICAgICAgICBzZWxmLl9t
b2NrX29zLmFzc2VydEN1cnJlbnREaXJlY3Rvcnkoc2VsZi5fb3JpZ2luYWxfZGlyZWN0b3J5KQor
CisgICAgZGVmIHRlc3Rfbm9fc2NtX25vbmVtcHR5X3BhdGhzKHNlbGYpOgorICAgICAgICBtb2Nr
X2RldGVjdF9zY20gPSBsYW1iZGE6IE5vbmUKKworICAgICAgICBoYW5kbGVkX3NjbSA9IHNlbGYu
X2hhbmRsZV9zY20ocGF0aHM9WyJwYXRoMSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbW9ja19kZXRlY3Rfc2NtPW1vY2tfZGV0ZWN0X3NjbSkKKworICAgICAgICBs
b2dfbWVzc2FnZXMgPSBbIldBUk5JTkc6IFNvdXJjZSByb290IG5vdCBkZXRlY3RlZDogcGF0aC1z
cGVjaWZpYyAiCisgICAgICAgICAgICAgICAgICAgICAgICAibG9naWMgbWF5IHlpZWxkIHVuZXhw
ZWN0ZWQgcmVzdWx0cy5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgSWYgeW91IGFyZSBy
dW5uaW5nIHRoaXMgc2NyaXB0IGZyb20gYSBrbm93biBzb3VyY2UgIgorICAgICAgICAgICAgICAg
ICAgICAgICAgInJvb3QsIGlnbm9yZSB0aGlzIHdhcm5pbmcuXG4iXTsKKworICAgICAgICBzZWxm
Ll9hc3NlcnRfaGFuZGxlX3NjbV9yZXN1bHQoaGFuZGxlZF9zY20sIChbInBhdGgxIl0sIE5vbmUp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nX21lc3NhZ2VzLCBz
ZWxmLl9vcmlnaW5hbF9kaXJlY3RvcnkpCisKKyAgICBkZWYgdGVzdF93aXRoX3NjbV9ub25lX3Bh
dGhzKHNlbGYpOgorICAgICAgICBtb2NrX3NjbSA9IHNlbGYuX21vY2tfc2NtCisgICAgICAgIG1v
Y2tfZGV0ZWN0X3NjbSA9IGxhbWJkYTogbW9ja19zY20KKworICAgICAgICBoYW5kbGVkX3NjbSA9
IHNlbGYuX2hhbmRsZV9zY20ocGF0aHM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1vY2tfZGV0ZWN0X3NjbT1tb2NrX2RldGVjdF9zY20pCisKKyAgICAgICAg
c2VsZi5fYXNzZXJ0X2hhbmRsZV9zY21fcmVzdWx0KGhhbmRsZWRfc2NtLCAoTm9uZSwgbW9ja19z
Y20pLCBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Nv
dXJjZV9yb290KQorCisgICAgZGVmIHRlc3Rfd2l0aF9zY21fcGF0aHNfY29udmVydGlibGUoc2Vs
Zik6CisgICAgICAgIHBhdGhzPVsiL1dlYktpdC9mb28xLnR4dCIsCisgICAgICAgICAgICAgICAi
L1dlYktpdC9mb28yLnR4dCJdCisKKyAgICAgICAgbW9ja19zY20gPSBzZWxmLl9tb2NrX3NjbQor
ICAgICAgICBtb2NrX2RldGVjdF9zY20gPSBsYW1iZGE6IG1vY2tfc2NtCisKKyAgICAgICAgaGFu
ZGxlZF9zY20gPSBzZWxmLl9oYW5kbGVfc2NtKHBhdGhzPXBhdGhzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbW9ja19kZXRlY3Rfc2NtPW1vY2tfZGV0ZWN0X3NjbSkK
KworICAgICAgICBzZWxmLl9hc3NlcnRfaGFuZGxlX3NjbV9yZXN1bHQoaGFuZGxlZF9zY20sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWyJmb28xLnR4dCIsICJmb28y
LnR4dCJdLCBtb2NrX3NjbSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NvdXJj
ZV9yb290KQorCisgICAgZGVmIHRlc3Rfd2l0aF9zY21fcGF0aHNfdW5jb252ZXJ0aWJsZShzZWxm
KToKKyAgICAgICAgcGF0aHM9WyIvV2ViS2l0L2ZvbzEudHh0IiwKKyAgICAgICAgICAgICAgICIv
b3V0c2lkZS9mb28yLnR4dCJdCisKKyAgICAgICAgbW9ja19zY20gPSBzZWxmLl9tb2NrX3NjbQor
ICAgICAgICBtb2NrX2RldGVjdF9zY20gPSBsYW1iZGE6IG1vY2tfc2NtCisKKyAgICAgICAgaGFu
ZGxlZF9zY20gPSBzZWxmLl9oYW5kbGVfc2NtKHBhdGhzPXBhdGhzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbW9ja19kZXRlY3Rfc2NtPW1vY2tfZGV0ZWN0X3NjbSkK
KworICAgICAgICBsb2dfbWVzc2FnZXMgPSBbIldBUk5JTkc6IE9uZSBvZiB0aGUgZ2l2ZW4gZmls
ZXMgaXMgb3V0c2lkZSB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSB0cmVl
OiBwYXRoLXNwZWNpZmljIGxvZ2ljIG1heSB5aWVsZCAiCisgICAgICAgICAgICAgICAgICAgICAg
ICAidW5leHBlY3RlZCByZXN1bHRzLlxuIEVuc3VyZSB0aGF0IGFsbCBmaWxlcyBhcmUgIgorICAg
ICAgICAgICAgICAgICAgICAgICAgIndpdGhpbiB0aGUgc291cmNlIHRyZWUgdG8gYWNoaWV2ZSBl
eHBlY3RlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0cy5cbiJdOworCisgICAg
ICAgIHNlbGYuX2Fzc2VydF9oYW5kbGVfc2NtX3Jlc3VsdChoYW5kbGVkX3NjbSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRocywgbW9ja19zY20pLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nX21lc3NhZ2VzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3JpZ2luYWxfZGlyZWN0b3J5KQor
CisKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS91bml0
dGVzdHMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL3VuaXR0ZXN0cy5w
eQppbmRleCA2MjYxNWFiLi5mZjQ0ZGUwIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL3VuaXR0ZXN0cy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL3VuaXR0ZXN0cy5weQpAQCAtMzgsNiArMzgsNyBAQCBpbXBvcnQgdW5pdHRl
c3QKIGZyb20gY2hlY2tlcl91bml0dGVzdCBpbXBvcnQgKgogZnJvbSBlcnJvcl9oYW5kbGVyc191
bml0dGVzdCBpbXBvcnQgKgogZnJvbSBmaWx0ZXJfdW5pdHRlc3QgaW1wb3J0ICoKK2Zyb20gbWFp
bl91bml0dGVzdCBpbXBvcnQgKgogZnJvbSBvcHRwYXJzZXJfdW5pdHRlc3QgaW1wb3J0ICoKIGZy
b20gcHJvY2Vzc29ycy5jb21tb25fdW5pdHRlc3QgaW1wb3J0ICoKIGZyb20gcHJvY2Vzc29ycy5j
cHBfdW5pdHRlc3QgaW1wb3J0ICoKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGVfcmVmZXJlbmNlcy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3R5bGVfcmVmZXJlbmNlcy5weQppbmRleCBlNTdjZDBlLi43ZDg2YTQ2IDEwMDY0NAotLS0gYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlX3JlZmVyZW5jZXMucHkKKysrIGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZV9yZWZlcmVuY2VzLnB5CkBAIC00MiwxMCAr
NDIsMTggQEAgaW1wb3J0IG9zCiAKIGZyb20gZGlmZl9wYXJzZXIgaW1wb3J0IERpZmZQYXJzZXIK
IGZyb20gaW5pdC5sb2d0ZXN0aW5nIGltcG9ydCBMb2dUZXN0aW5nCi1mcm9tIGluaXQubG9ndGVz
dGluZyBpbXBvcnQgVW5pdFRlc3RMb2dTdHJlYW0KK2Zyb20gaW5pdC5sb2d0ZXN0aW5nIGltcG9y
dCBUZXN0TG9nU3RyZWFtCiBmcm9tIHNjbSBpbXBvcnQgZGV0ZWN0X3NjbV9zeXN0ZW0KIAogCitk
ZWYgZGV0ZWN0X3NjbSgpOgorICAgICIiIlJldHVybiBhIFNpbXBsZVNjbSBpbnN0YW5jZSwgb3Ig
Tm9uZSBpZiBpdCBjYW5ub3QgYmUgZm91bmQuIiIiCisgICAgY3dkID0gb3MucGF0aC5hYnNwYXRo
KG9zLmN1cmRpcikKKyAgICBzY20gPSBkZXRlY3Rfc2NtX3N5c3RlbShjd2QpCisKKyAgICByZXR1
cm4gTm9uZSBpZiBzY20gaXMgTm9uZSBlbHNlIFNpbXBsZVNjbShzY20pCisKKwogZGVmIHBhcnNl
X3BhdGNoKHBhdGNoX3N0cmluZyk6CiAKICAgICAiIiJQYXJzZSBhIHBhdGNoIHN0cmluZyBhbmQg
cmV0dXJuIHRoZSBhZmZlY3RlZCBmaWxlcy4iIiIKQEAgLTU4LDExICs2NiwxMCBAQCBjbGFzcyBT
aW1wbGVTY20ob2JqZWN0KToKIAogICAgICIiIlNpbXBsZSBmYWNhZGUgdG8gU0NNIGZvciB1c2Ug
Ynkgc3R5bGUgcGFja2FnZS4iIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAg
Y3dkID0gb3MucGF0aC5hYnNwYXRoKCcuJykKLSAgICAgICAgc2VsZi5fc2NtID0gZGV0ZWN0X3Nj
bV9zeXN0ZW0oY3dkKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzY20pOgorICAgICAgICBzZWxm
Ll9zY20gPSBzY20KIAotICAgIGRlZiBjaGVja291dF9yb290KHNlbGYpOgorICAgIGRlZiBzb3Vy
Y2Vfcm9vdChzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBzb3VyY2UgY29udHJvbCByb290
IGFzIGFuIGFic29sdXRlIHBhdGguIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9zY20uY2hlY2tv
dXRfcm9vdAogCg==
</data>
<flag name="review"
          id="33788"
          type_id="1"
          status="-"
          setter="hamaji"
    />
    <flag name="commit-queue"
          id="33789"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51252</attachid>
            <date>2010-03-21 12:11:32 -0700</date>
            <delta_ts>2010-03-21 12:18:33 -0700</delta_ts>
            <desc>Proposed patch 5</desc>
            <filename>_patch-35498-5.diff</filename>
            <type>text/plain</type>
            <size>31954</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAxM2U1ZWU1Li45M2NkYjBmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTAtMDMt
MjEgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlZCBjaGVjay13ZWJraXQt
c3R5bGUgdG8gY29udmVydCBwYXRocyB0byBwYXRocyByZWxhdGl2ZSB0bworICAgICAgICB0aGUg
Y2hlY2tvdXQgcm9vdCB3aGVuIGludm9raW5nIGNoZWNrLXdlYmtpdC1zdHlsZSB3aXRoIHBhdGgK
KyAgICAgICAgYXJndW1lbnRzLiAgQWxzbyBhZGRlZCB3YXJuaW5nIG1lc3NhZ2VzIHdoZXJlIGFw
cHJvcHJpYXRlLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zNTQ5OAorCisgICAgICAgIENvbnZlcnRpbmcgcGF0aHMgdG8gcGF0aHMgcmVsYXRpdmUg
dG8gdGhlIGNoZWNrb3V0IHJvb3QgZW5zdXJlcworICAgICAgICB0aGF0IHN0eWxlIGNoZWNraW5n
IHdpbGwgYmVoYXZlIGFzIGV4cGVjdGVkIChzaW5jZSBwYXRoLXNwZWNpZmljCisgICAgICAgIHJ1
bGVzIGFzc3VtZSBpbnB1dCBwYXRocyBhcmUgcmVsYXRpdmUgdG8gYSBzb3VyY2Ugcm9vdCkuCisK
KyAgICAgICAgKiBTY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHlsZToKKyAgICAgICAgICAtIEFkZGVk
IGRlYnVnIGxvZ2dpbmcgb2Ygd2hldGhlciB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2FzIGZvdW5k
CisgICAgICAgICAgICB0byBiZSBpbiBhIFdlYktpdCBjaGVja291dC4KKyAgICAgICAgICAtIEFk
ZGVkIHRoZSBmb3VuZF9jaGVja291dCBwYXJhbWV0ZXIgdG8gdGhlIGNhbGwgdG8gcGFyc2VyLnBh
cnNlKCkuCisgICAgICAgICAgLSBSZW5hbWVkIHRoZSBmaWxlcyB2YXJpYWJsZSB0byBwYXRocy4K
KyAgICAgICAgICAtIEFkZGVkIGEgY2FsbCB0byBjaGFuZ2VfZGlyZWN0b3J5KCkgcHJpb3IgdG8g
Y2hlY2tpbmcgc3R5bGUuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXIucHk6CisgICAgICAgICAgLSBGb3IgU3R5bGVDaGVja2VyLmNoZWNrX2ZpbGUoKToKKyAgICAg
ICAgICAgIC0gVXBkYXRlZCB0aGUgZG9jc3RyaW5nLgorICAgICAgICAgICAgLSBBZGRlZCB0d28g
bG9nIG1lc3NhZ2VzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vy
X3VuaXR0ZXN0LnB5OgorICAgICAgICAgIC0gVXBkYXRlZCBhIGNhbGwgdG8gcGFyc2VyLnBhcnNl
KCkgd2l0aCB0aGUgZm91bmRfY2hlY2tvdXQgcGFyYW1ldGVyLgorCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9zdHlsZS9tYWluLnB5OiBBZGRlZC4KKyAgICAgICAgICAtIEFkZGVkIGEgbmV3
IGZpbGUgc28gdGhlIGNvZGUgaW4gdGhpcyBwYXRjaCBjb3VsZCBiZSB1bml0LXRlc3RlZCwKKyAg
ICAgICAgICAgIGFzIG9wcG9zZWQgdG8gYWRkaW5nIG5ldyBjb2RlIHRvIGNoZWNrLXdlYmtpdC1z
dHlsZS4KKyAgICAgICAgICAtIEFkZGVkIHRoZSBtZXRob2QgX3JlbF9wYXRoKCkgYXMgYSBzdWJz
dGl0dXRlIGZvciBvcy5wYXRoLnJlbHBhdGgoKSwKKyAgICAgICAgICAgIHdoaWNoIGlzIGF2YWls
YWJsZSBvbmx5IGluIFB5dGhvbiAyLjYuCisgICAgICAgICAgLSBBZGRlZCB0aGUgbWV0aG9kIGNo
YW5nZV9kaXJlY3RvcnkoKSwgd2hpY2ggY29udGFpbnMgbW9zdCBvZiB0aGUKKyAgICAgICAgICAg
IG5ldyBmdW5jdGlvbmFsaXR5IGluIHRoaXMgcGF0Y2guCisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL21haW5fdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAgIC0gQWRkZWQg
UmVsUGF0aFRlc3QgdG8gdGVzdCBtYWluLl9yZWxfcGF0aCgpLgorICAgICAgICAgIC0gQWRkZWQg
Q2hhbmdlRGlyZWN0b3J5VGVzdCB0byB0ZXN0IG1haW4uY2hhbmdlX2RpcmVjdG9yeSgpLgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9vcHRwYXJzZXIucHk6CisgICAgICAgICAg
LSBVcGRhdGVkIGNoZWNrLXdlYmtpdC1zdHlsZSdzIHVzYWdlIHN0cmluZy4KKyAgICAgICAgICAt
IEZvciB0aGUgQXJndW1lbnRQYXJzZXIucGFyc2UoKSBtZXRob2Q6CisgICAgICAgICAgICAtIEFk
ZGVkIGEgZm91bmRfY2hlY2tvdXQgcGFyYW1ldGVyLgorICAgICAgICAgICAgLSBSZW5hbWVkIGZp
bGVuYW1lcyB0byBwYXRocy4KKyAgICAgICAgICAgIC0gQWRkZWQgbG9naWMgc28gdGhhdCBhbiBl
cnJvciBpcyByYWlzZWQgaWYgbm8gcGF0aHMgYXJlIHBhc3NlZAorICAgICAgICAgICAgICBpZiBm
b3VuZF9jaGVja291dCBpcyBGYWxzZS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5
bGUvb3B0cGFyc2VyX3VuaXR0ZXN0LnB5OgorICAgICAgICAgIC0gVXBkYXRlZCB0aGUgQXJndW1l
bnRQYXJzZXIucGFyc2UoKSB1bml0IHRlc3RzIHRvIGluY2x1ZGUKKyAgICAgICAgICAgIGNvdmVy
YWdlIGZvciB0aGUgbmV3IGZvdW5kX2NoZWNrb3V0IHBhcmFtZXRlci4KKworICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvc3R5bGUvdW5pdHRlc3RzLnB5OgorICAgICAgICAgIC0gQWRkZWQgYW4g
aW1wb3J0IHN0YXRlbWVudCBmb3IgbWFpbl91bml0dGVzdC4KKworICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvc3R5bGVfcmVmZXJlbmNlcy5weToKKyAgICAgICAgICAtIFJlbmFtZWQgU2ltcGxl
U2NtIHRvIFdlYktpdENoZWNrb3V0LgorICAgICAgICAgIC0gQWRkZWQgYSBkZXRlY3RfY2hlY2tv
dXQoKSBmdW5jdGlvbiB0byBhbGxvdyByZXR1cm5pbmcgTm9uZQorICAgICAgICAgICAgaW5zdGVh
ZCBvZiBhIFdlYktpdENoZWNrb3V0IGluc3RhbmNlIGlmIG5vIGNoZWNrb3V0IGlzIGZvdW5kLgor
ICAgICAgICAgIC0gUmVuYW1lZCBjaGVja291dF9yb290IHRvIHJvb3RfcGF0aC4KKwogMjAxMC0w
My0yMCAgQ2hyaXMgSmVyZG9uZWsgIDxjamVyZG9uZWtAd2Via2l0Lm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvY2hlY2std2Via2l0LXN0eWxlIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9jaGVjay13ZWJraXQt
c3R5bGUKaW5kZXggOWQ4MTAxYi4uMmE4NmIyNiAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy9jaGVjay13ZWJraXQtc3R5bGUKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9jaGVjay13
ZWJraXQtc3R5bGUKQEAgLTQ4LDExICs0OCwxNCBAQCBpbXBvcnQgb3MKIGltcG9ydCBvcy5wYXRo
CiBpbXBvcnQgc3lzCiAKK2Zyb20gd2Via2l0cHkuc3R5bGVfcmVmZXJlbmNlcyBpbXBvcnQgZGV0
ZWN0X2NoZWNrb3V0Citmcm9tIHdlYmtpdHB5LnN0eWxlLm1haW4gaW1wb3J0IGNoYW5nZV9kaXJl
Y3RvcnkKIGltcG9ydCB3ZWJraXRweS5zdHlsZS5jaGVja2VyIGFzIGNoZWNrZXIKLWZyb20gd2Vi
a2l0cHkuc3R5bGVfcmVmZXJlbmNlcyBpbXBvcnQgU2ltcGxlU2NtCiAKIF9sb2cgPSBsb2dnaW5n
LmdldExvZ2dlcigiY2hlY2std2Via2l0LXN0eWxlIikKIAorCisjIEZJWE1FOiBNb3ZlIHRoaXMg
Y29kZSB0byBzdHlsZS5tYWluLgogZGVmIG1haW4oKToKICAgICAjIENoYW5nZSBzdGRlcnIgdG8g
d3JpdGUgd2l0aCByZXBsYWNlbWVudCBjaGFyYWN0ZXJzIHNvIHdlIGRvbid0IGRpZQogICAgICMg
aWYgd2UgdHJ5IHRvIHByaW50IHNvbWV0aGluZyBjb250YWluaW5nIG5vbi1BU0NJSSBjaGFyYWN0
ZXJzLgpAQCAtNzMsMjggKzc2LDM1IEBAIGRlZiBtYWluKCk6CiAKICAgICBhcmdzID0gc3lzLmFy
Z3ZbMTpdCiAKLSAgICAjIENoZWNraW5nIHRoZSBkZWJ1ZyBmbGFnIGJlZm9yZSBjYWxsaW5nIGNo
ZWNrX3dlYmtpdF9zdHlsZV9wYXJzZXIoKQotICAgICMgbGV0cyB1cyBlbmFibGUgbW9yZSBkZXRh
aWxlZCBsb2dnaW5nIGVhcmxpZXIuCisgICAgIyBDaGVja2luZyBmb3IgdGhlIGRlYnVnIGZsYWcg
YmVmb3JlIGNhbGxpbmcgY2hlY2tfd2Via2l0X3N0eWxlX3BhcnNlcigpCisgICAgIyBsZXRzIHVz
IGVuYWJsZSBkZWJ1ZyBsb2dnaW5nIGVhcmxpZXIuCiAgICAgaXNfZGVidWcgPSAiLS1kZWJ1ZyIg
aW4gYXJncwogCiAgICAgY2hlY2tlci5jb25maWd1cmVfbG9nZ2luZyhzdHJlYW09c3RkZXJyLCBp
c19kZWJ1Zz1pc19kZWJ1ZykKICAgICBfbG9nLmRlYnVnKCJEZWJ1ZyBsb2dnaW5nIGVuYWJsZWQu
IikKIAorICAgIGNoZWNrb3V0ID0gZGV0ZWN0X2NoZWNrb3V0KCkKKworICAgIGlmIGNoZWNrb3V0
IGlzIE5vbmU6CisgICAgICAgIGNoZWNrb3V0X3Jvb3QgPSBOb25lCisgICAgICAgIF9sb2cuZGVi
dWcoIldlYktpdCBjaGVja291dCBub3QgZm91bmQgZm9yIGN1cnJlbnQgZGlyZWN0b3J5LiIpCisg
ICAgZWxzZToKKyAgICAgICAgY2hlY2tvdXRfcm9vdCA9IGNoZWNrb3V0LnJvb3RfcGF0aCgpCisg
ICAgICAgIF9sb2cuZGVidWcoIldlYktpdCBjaGVja291dCBmb3VuZCB3aXRoIHJvb3Q6ICVzIiAl
IGNoZWNrb3V0X3Jvb3QpCisKICAgICBwYXJzZXIgPSBjaGVja2VyLmNoZWNrX3dlYmtpdF9zdHls
ZV9wYXJzZXIoKQotICAgIChmaWxlcywgb3B0aW9ucykgPSBwYXJzZXIucGFyc2UoYXJncykKKyAg
ICBmb3VuZF9jaGVja291dCA9IGNoZWNrb3V0IGlzIG5vdCBOb25lCisgICAgKHBhdGhzLCBvcHRp
b25zKSA9IHBhcnNlci5wYXJzZShhcmdzLCBmb3VuZF9jaGVja291dD1mb3VuZF9jaGVja291dCkK
IAogICAgIGNvbmZpZ3VyYXRpb24gPSBjaGVja2VyLmNoZWNrX3dlYmtpdF9zdHlsZV9jb25maWd1
cmF0aW9uKG9wdGlvbnMpCiAgICAgc3R5bGVfY2hlY2tlciA9IGNoZWNrZXIuU3R5bGVDaGVja2Vy
KGNvbmZpZ3VyYXRpb24pCiAKLSAgICBpZiBmaWxlczoKLSAgICAgICAgZm9yIGZpbGVuYW1lIGlu
IGZpbGVzOgotICAgICAgICAgICAgc3R5bGVfY2hlY2tlci5jaGVja19maWxlKGZpbGVuYW1lKQor
ICAgIHBhdGhzID0gY2hhbmdlX2RpcmVjdG9yeShjaGVja291dF9yb290PWNoZWNrb3V0X3Jvb3Qs
IHBhdGhzPXBhdGhzKQogCisgICAgaWYgcGF0aHM6CisgICAgICAgIGZvciBwYXRoIGluIHBhdGhz
OgorICAgICAgICAgICAgc3R5bGVfY2hlY2tlci5jaGVja19maWxlKHBhdGgpCiAgICAgZWxzZToK
LSAgICAgICAgc2NtID0gU2ltcGxlU2NtKCkKLQotICAgICAgICBvcy5jaGRpcihzY20uY2hlY2tv
dXRfcm9vdCgpKQotCiAgICAgICAgIGlmIG9wdGlvbnMuZ2l0X2NvbW1pdDoKICAgICAgICAgICAg
IGNvbW1pdCA9IG9wdGlvbnMuZ2l0X2NvbW1pdAogICAgICAgICAgICAgaWYgJy4uJyBpbiBjb21t
aXQ6CkBAIC0xMDMsOSArMTEzLDkgQEAgZGVmIG1haW4oKToKICAgICAgICAgICAgICAgICBjb21t
aXQgPSBjb21taXRbOmNvbW1pdC5maW5kKCcuLicpXQogICAgICAgICAgICAgICAgIF9sb2cud2Fy
bigiUmFuZ2VzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciAtLWdpdC1jb21taXQuICIKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIkNoZWNraW5nIGFsbCBjaGFuZ2VzIHNpbmNlICVzLiIgJSBjb21t
aXQpCi0gICAgICAgICAgICBwYXRjaCA9IHNjbS5jcmVhdGVfcGF0Y2hfc2luY2VfbG9jYWxfY29t
bWl0KGNvbW1pdCkKKyAgICAgICAgICAgIHBhdGNoID0gY2hlY2tvdXQuY3JlYXRlX3BhdGNoX3Np
bmNlX2xvY2FsX2NvbW1pdChjb21taXQpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwYXRj
aCA9IHNjbS5jcmVhdGVfcGF0Y2goKQorICAgICAgICAgICAgcGF0Y2ggPSBjaGVja291dC5jcmVh
dGVfcGF0Y2goKQogICAgICAgICBzdHlsZV9jaGVja2VyLmNoZWNrX3BhdGNoKHBhdGNoKQogCiAg
ICAgZXJyb3JfY291bnQgPSBzdHlsZV9jaGVja2VyLmVycm9yX2NvdW50CmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKaW5kZXggM2U2OWY5Ni4uZjEyOTk3
NiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vy
LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpA
QCAtNTg2LDcgKzU4Niw5IEBAIGNsYXNzIFN0eWxlQ2hlY2tlcihvYmplY3QpOgogICAgICAgICAi
IiJDaGVjayBzdHlsZSBpbiB0aGUgZ2l2ZW4gZmlsZS4KIAogICAgICAgICBBcmdzOgotICAgICAg
ICAgIGZpbGVfcGF0aDogQSBzdHJpbmcgdGhhdCBpcyB0aGUgcGF0aCBvZiB0aGUgZmlsZSB0byBw
cm9jZXNzLgorICAgICAgICAgIGZpbGVfcGF0aDogVGhlIHBhdGggb2YgdGhlIGZpbGUgdG8gcHJv
Y2Vzcy4gIElmIHBvc3NpYmxlLCB0aGUgcGF0aAorICAgICAgICAgICAgICAgICAgICAgc2hvdWxk
IGJlIHJlbGF0aXZlIHRvIHRoZSBzb3VyY2Ugcm9vdC4gIE90aGVyd2lzZSwKKyAgICAgICAgICAg
ICAgICAgICAgIHBhdGgtc3BlY2lmaWMgbG9naWMgbWF5IG5vdCBiZWhhdmUgYXMgZXhwZWN0ZWQu
CiAgICAgICAgICAgaGFuZGxlX3N0eWxlX2Vycm9yOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVu
IGEgc3R5bGUgZXJyb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jY3Vycy4gVGhp
cyBwYXJhbWV0ZXIgaXMgbWVhbnQgZm9yIGludGVybmFsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1c2Ugd2l0aGluIHRoaXMgY2xhc3MuIERlZmF1bHRzIHRvIGEKQEAgLTU5Niw2ICs1
OTgsNyBAQCBjbGFzcyBTdHlsZUNoZWNrZXIob2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAg
ICAgIERlZmF1bHRzIHRvIHRoZSBmaWxlIHByb2Nlc3NpbmcgbWV0aG9kIG9mIHRoaXMgY2xhc3Mu
CiAKICAgICAgICAgIiIiCisgICAgICAgIF9sb2cuZGVidWcoIkNoZWNraW5nOiAiICsgZmlsZV9w
YXRoKQogICAgICAgICBpZiBoYW5kbGVfc3R5bGVfZXJyb3IgaXMgTm9uZToKICAgICAgICAgICAg
IGhhbmRsZV9zdHlsZV9lcnJvciA9IERlZmF1bHRTdHlsZUVycm9ySGFuZGxlcigKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uPXNlbGYuX2NvbmZpZ3Vy
YXRpb24sCkBAIC02MjEsOCArNjI0LDE1IEBAIGNsYXNzIFN0eWxlQ2hlY2tlcihvYmplY3QpOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVf
c3R5bGVfZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZlcmJvc2l0eSkKICAgICAgICAgaWYgcHJvY2Vzc29yIGlzIE5vbmU6CisgICAgICAg
ICAgICAjIERpc3BsYXkgYSB3YXJuaW5nIHNvIGFzIG5vdCB0byBnaXZlIGFuIGltcHJlc3Npb24g
dGhhdCB0aGlzCisgICAgICAgICAgICAjIHdhcyBjaGVja2VkLgorICAgICAgICAgICAgX2xvZy5p
bmZvKCdGaWxlIG5vdCBhIHJlY29nbml6ZWQgdHlwZSB0byBjaGVjay4gU2tpcHBpbmc6ICIlcyIn
CisgICAgICAgICAgICAgICAgICAgICAgJSBmaWxlX3BhdGgpCiAgICAgICAgICAgICByZXR1cm4K
IAorCisgICAgICAgIF9sb2cuZGVidWcoIlVzaW5nIGNsYXNzOiAiICsgcHJvY2Vzc29yLl9fY2xh
c3NfXy5fX25hbWVfXykKKwogICAgICAgICBwcm9jZXNzX2ZpbGUocHJvY2Vzc29yLCBmaWxlX3Bh
dGgsIGhhbmRsZV9zdHlsZV9lcnJvcikKIAogICAgIGRlZiBjaGVja19wYXRjaChzZWxmLCBwYXRj
aF9zdHJpbmcpOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHls
ZS9jaGVja2VyX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHls
ZS9jaGVja2VyX3VuaXR0ZXN0LnB5CmluZGV4IDY4ZGNmY2EuLmIzOWNlZWMgMTAwNzU1Ci0tLSBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weQor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3Qu
cHkKQEAgLTE3OSw3ICsxNzksOSBAQCBjbGFzcyBHbG9iYWxWYXJpYWJsZXNUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9vcHRp
b25zPWRlZmF1bHRfb3B0aW9ucykKICAgICAgICAgIyBObyBuZWVkIHRvIHRlc3QgdGhlIHJldHVy
biB2YWx1ZSBoZXJlIHNpbmNlIHdlIHRlc3QgcGFyc2UoKQogICAgICAgICAjIG9uIHZhbGlkIGFy
Z3VtZW50cyBlbHNld2hlcmUuCi0gICAgICAgIHBhcnNlci5wYXJzZShbXSkgIyBhcmd1bWVudHMg
dmFsaWQ6IG5vIGVycm9yIG9yIFN5c3RlbUV4aXQKKyAgICAgICAgIworICAgICAgICAjIFRoZSBk
ZWZhdWx0IG9wdGlvbnMgYXJlIHZhbGlkOiBubyBlcnJvciBvciBTeXN0ZW1FeGl0LgorICAgICAg
ICBwYXJzZXIucGFyc2UoYXJncz1bXSwgZm91bmRfY2hlY2tvdXQ9VHJ1ZSkKIAogICAgIGRlZiB0
ZXN0X3BhdGhfcnVsZXNfc3BlY2lmaWVyKHNlbGYpOgogICAgICAgICBhbGxfY2F0ZWdvcmllcyA9
IHNlbGYuX2FsbF9jYXRlZ29yaWVzKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvbWFpbi5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5
bGUvbWFpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2FkMjg0Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9tYWlu
LnB5CkBAIC0wLDAgKzEsMTc0IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25l
ayAoY2plcmRvbmVrQHdlYmtpdC5vcmcpCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworCitf
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworIyBUaGlzIGZ1bmN0aW9uIGlz
IGEgcmVwbGFjZW1lbnQgZm9yIG9zLnBhdGgucmVscGF0aCgpLCB3aGljaCBpcyBvbmx5CisjIGF2
YWlsYWJsZSBpbiBQeXRob24gMi42LiAgSXQgc2hvdWxkIGJlaGF2ZSBlc3NlbnRpYWxseSB0aGUg
c2FtZSBhcworIyBvcy5wYXRoLnJlbHBhdGgoKSwgZXhjZXB0IGZvciByZXR1cm5pbmcgTm9uZSBv
biBwYXRocyBub3QgY29udGFpbmVkCisjIGluIGFic19zdGFydF9wYXRoLgorZGVmIF9yZWxfcGF0
aChwYXRoLCBzdGFydF9wYXRoLCBvc19wYXRoX2Fic3BhdGg9Tm9uZSk6CisgICAgIiIiUmV0dXJu
IGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gc3RhcnQgcGF0aCwgb3IgTm9uZS4KKworICAg
IFJldHVybnMgTm9uZSBpZiB0aGUgcGF0aCBpcyBub3QgY29udGFpbmVkIGluIHRoZSBkaXJlY3Rv
cnkgc3RhcnRfcGF0aC4KKworICAgIEFyZ3M6CisgICAgICBwYXRoOiBBbiBhYnNvbHV0ZSBvciBy
ZWxhdGl2ZSBwYXRoIHRvIGNvbnZlcnQgdG8gYSByZWxhdGl2ZSBwYXRoLgorICAgICAgc3RhcnRf
cGF0aDogVGhlIHBhdGggcmVsYXRpdmUgdG8gd2hpY2ggdGhlIGdpdmVuIHBhdGggc2hvdWxkIGJl
CisgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQuCisgICAgICBvc19wYXRoX2Fic3BhdGg6IEEg
cmVwbGFjZW1lbnQgZnVuY3Rpb24gZm9yIHVuaXQgdGVzdGluZy4gIFRoaXMKKyAgICAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rpb24gc2hvdWxkIHN0cmlwIHRyYWlsaW5nIHNsYXNoZXMganVzdCBs
aWtlCisgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYWJzcGF0aCgpLiAgRGVmYXVsdHMg
dG8gb3MucGF0aC5hYnNwYXRoLgorCisgICAgIiIiCisgICAgaWYgb3NfcGF0aF9hYnNwYXRoIGlz
IE5vbmU6CisgICAgICAgIG9zX3BhdGhfYWJzcGF0aCA9IG9zLnBhdGguYWJzcGF0aAorCisgICAg
IyBDYWxsaW5nIG9zX3BhdGhfYWJzcGF0aCgpIGFsc28gcmVtb3ZlcyBhbnkgdHJhaWxpbmcgc2xh
c2hlcy4KKyAgICBzdGFydF9wYXRoID0gb3NfcGF0aF9hYnNwYXRoKHN0YXJ0X3BhdGgpCisgICAg
cGF0aCA9IG9zX3BhdGhfYWJzcGF0aChwYXRoKQorCisgICAgc2xhc2hfY2hhcnMgPSAiL1xcIgor
CisgICAgaWYgbm90IHBhdGgubG93ZXIoKS5zdGFydHN3aXRoKHN0YXJ0X3BhdGgubG93ZXIoKSk6
CisgICAgICAgICMgVGhlbiBwYXRoIGlzIG91dHNpZGUgdGhlIGRpcmVjdG9yeSBnaXZlbiBieSBz
dGFydF9wYXRoLgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgcmVsX3BhdGggPSBwYXRoW2xl
bihzdGFydF9wYXRoKTpdCisKKyAgICBpZiByZWxfcGF0aCBhbmQgcmVsX3BhdGhbMF0gbm90IGlu
IHNsYXNoX2NoYXJzOgorICAgICAgICAjIFRoZW4gd2UgYXJlIGluIHRoZSBjYXNlIHR5cGlmaWVk
IGJ5IHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKKyAgICAgICAgIworICAgICAgICAjIHN0YXJ0X3Bh
dGggPSAiL3RtcC9mb28iCisgICAgICAgICMgcGF0aCA9ICIvdG1wL2Zvb2JhciIKKyAgICAgICAg
IyByZWxfcGF0aCA9ICJiYXIiCisgICAgICAgIHJldHVybiBOb25lCisgICAgIyBPdGhlcndpc2Ug
cmVsX3BhdGggaXMgIiIgb3IgYmVnaW5zIHdpdGggYSBzbGFzaC4KKworICAgIHJlbF9wYXRoID0g
cmVsX3BhdGgubHN0cmlwKHNsYXNoX2NoYXJzKQorCisgICAgcmV0dXJuIHJlbF9wYXRoCisKKwor
ZGVmIGNoYW5nZV9kaXJlY3RvcnkoY2hlY2tvdXRfcm9vdCwgcGF0aHMsIG1vY2tfb3M9Tm9uZSk6
CisgICAgIiIiQ2hhbmdlIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgV2ViS2l0IGNoZWNr
b3V0IHJvb3QsIGlmIHBvc3NpYmxlLgorCisgICAgSWYgZXZlcnkgcGF0aCBpbiB0aGUgcGF0aHMg
cGFyYW1ldGVyIGlzIGJlbG93IHRoZSBjaGVja291dCByb290IChvciBpZgorICAgIHRoZSBwYXRo
cyBwYXJhbWV0ZXIgaXMgZW1wdHkgb3IgTm9uZSksIHRoaXMgbWV0aG9kIGNoYW5nZXMgdGhlIGN1
cnJlbnQKKyAgICB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgY2hlY2tvdXQgcm9vdCBhbmQgY29u
dmVydHMgdGhlIHBhdGhzIHBhcmFtZXRlcgorICAgIGFzIGRlc2NyaWJlZCBiZWxvdy4KKyAgICAg
ICAgVGhpcyBhbGxvd3MgdGhlIHBhdGhzIGJlaW5nIGNoZWNrZWQgdG8gYmUgZGlzcGxheWVkIHJl
bGF0aXZlIHRvIHRoZQorICAgIGNoZWNrb3V0IHJvb3QsIGFuZCBmb3IgcGF0aC1zcGVjaWZpYyBz
dHlsZSBjaGVja3MgdG8gd29yayBhcyBleHBlY3RlZC4KKyAgICBQYXRoLXNwZWNpZmljIGNoZWNr
cyBpbmNsdWRlIHdoZXRoZXIgZmlsZXMgc2hvdWxkIGJlIHNraXBwZWQsIHdoZXRoZXIKKyAgICBj
dXN0b20gc3R5bGUgcnVsZXMgc2hvdWxkIGFwcGx5IHRvIGNlcnRhaW4gZmlsZXMsIGV0Yy4KKyAg
ICAgICAgSWYgdGhlIGNoZWNrb3V0IHJvb3QgaXMgTm9uZSBvciB0aGUgZW1wdHkgc3RyaW5nLCB0
aGlzIG1ldGhvZCByZXR1cm5zCisgICAgdGhlIHBhdGhzIHBhcmFtZXRlciB1bmNoYW5nZWQuCisK
KyAgICBSZXR1cm5zOgorICAgICAgcGF0aHM6IEEgY29weSBvZiB0aGUgcGF0aHMgcGFyYW1ldGVy
IC0tIHBvc3NpYmx5IGNvbnZlcnRlZCwgYXMgZm9sbG93cy4KKyAgICAgICAgICAgICBJZiB0aGlz
IG1ldGhvZCBjaGFuZ2VkIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHRvIHRoZQorICAg
ICAgICAgICAgIGNoZWNrb3V0IHJvb3QsIHRoZW4gdGhlIGxpc3QgaXMgdGhlIHBhdGhzIHBhcmFt
ZXRlciBjb252ZXJ0ZWQgdG8KKyAgICAgICAgICAgICBub3JtYWxpemVkIHBhdGhzIHJlbGF0aXZl
IHRvIHRoZSBjaGVja291dCByb290LiAgT3RoZXJ3aXNlLCB0aGUKKyAgICAgICAgICAgICBwYXRo
cyBhcmUgbm90IGNvbnZlcnRlZC4KKworICAgIEFyZ3M6CisgICAgICBwYXRoczogQSBsaXN0IG9m
IHBhdGhzIHRvIHRoZSBmaWxlcyB0aGF0IHNob3VsZCBiZSBjaGVja2VkIGZvciBzdHlsZS4KKyAg
ICAgICAgICAgICBUaGlzIGFyZ3VtZW50IGNhbiBiZSBOb25lIG9yIHRoZSBlbXB0eSBsaXN0IGlm
IGEgZ2l0IGNvbW1pdAorICAgICAgICAgICAgIG9yIGFsbCBjaGFuZ2VzIHVuZGVyIHRoZSBjaGVj
a291dCByb290IHNob3VsZCBiZSBjaGVja2VkLgorICAgICAgY2hlY2tvdXRfcm9vdDogVGhlIHBh
dGggdG8gdGhlIHJvb3Qgb2YgdGhlIFdlYktpdCBjaGVja291dCwgb3IgTm9uZSBvcgorICAgICAg
ICAgICAgICAgICAgICAgdGhlIGVtcHR5IHN0cmluZyBpZiBubyBjaGVja291dCBjb3VsZCBiZSBk
ZXRlY3RlZC4KKyAgICAgIG1vY2tfb3M6IEEgcmVwbGFjZW1lbnQgbW9kdWxlIGZvciB1bml0IHRl
c3RpbmcuICBEZWZhdWx0cyB0byBvcy4KKworICAgICIiIgorICAgIG9zX21vZHVsZSA9IG9zIGlm
IG1vY2tfb3MgaXMgTm9uZSBlbHNlIG1vY2tfb3MKKworICAgIGlmIHBhdGhzIGlzIG5vdCBOb25l
OgorICAgICAgICBwYXRocyA9IGxpc3QocGF0aHMpCisKKyAgICBpZiBub3QgY2hlY2tvdXRfcm9v
dDoKKyAgICAgICAgaWYgbm90IHBhdGhzOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJU
aGUgcGF0aHMgcGFyYW1ldGVyIG11c3QgYmUgbm9uLWVtcHR5IGlmICIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAidGhlcmUgaXMgbm8gY2hlY2tvdXQgcm9vdC4iKQorCisgICAgICAgICMg
RklYTUU6IENvbnNpZGVyIHRyeWluZyB0byBkZXRlY3QgdGhlIGNoZWNrb3V0IHJvb3QgZm9yIGVh
Y2ggZmlsZQorICAgICAgICAjICAgICAgICBiZWluZyBjaGVja2VkIHJhdGhlciB0aGFuIG9ubHkg
dHJ5aW5nIHRvIGRldGVjdCB0aGUgY2hlY2tvdXQKKyAgICAgICAgIyAgICAgICAgcm9vdCBmb3Ig
dGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuICBUaGlzIHdvdWxkIGFsbG93CisgICAgICAg
ICMgICAgICAgIGZpbGVzIHRvIGJlIGNoZWNrZWQgY29ycmVjdGx5IGV2ZW4gaWYgdGhlIHNjcmlw
dCBpcyBiZWluZworICAgICAgICAjICAgICAgICBydW4gZnJvbSBvdXRzaWRlIGFueSBXZWJLaXQg
Y2hlY2tvdXQuCisgICAgICAgICMKKyAgICAgICAgIyAgICAgICAgTW9yZW92ZXIsIHRyeSB0byBm
aW5kIHRoZSAic291cmNlIHJvb3QiIGZvciBlYWNoIGZpbGUKKyAgICAgICAgIyAgICAgICAgdXNp
bmcgcGF0aC1iYXNlZCBoZXVyaXN0aWNzIHJhdGhlciB0aGFuIHVzaW5nIG9ubHkgdGhlCisgICAg
ICAgICMgICAgICAgIHByZXNlbmNlIG9mIGEgV2ViS2l0IGNoZWNrb3V0LiAgRm9yIGV4YW1wbGUs
IHdlIGNvdWxkCisgICAgICAgICMgICAgICAgIGV4YW1pbmUgcGFyZW50IGRpcmVjdG9yaWVzIHVu
dGlsIGEgZGlyZWN0b3J5IGlzIGZvdW5kCisgICAgICAgICMgICAgICAgIGNvbnRhaW5pbmcgSmF2
YVNjcmlwdENvcmUsIFdlYkNvcmUsIFdlYktpdCwgV2ViS2l0U2l0ZSwKKyAgICAgICAgIyAgICAg
ICAgYW5kIFdlYktpdFRvb2xzLgorICAgICAgICAjICAgICAgICAgICAgIFRoZW4gbG9nIGFuIElO
Rk8gbWVzc2FnZSBzYXlpbmcgdGhhdCBhIHNvdXJjZSByb290IG5vdAorICAgICAgICAjICAgICAg
ICBpbiBhIFdlYktpdCBjaGVja291dCB3YXMgZm91bmQuICBUaGlzIHdpbGwgYWxsb3cgdXMgdG8g
Y2hlY2sKKyAgICAgICAgIyAgICAgICAgdGhlIHN0eWxlIG9mIG5vbi1zY20gY29waWVzIG9mIHRo
ZSBzb3VyY2UgdHJlZSAoZS5nLgorICAgICAgICAjICAgICAgICBuaWdodGxpZXMpLgorICAgICAg
ICBfbG9nLndhcm4oIldlYktpdCBjaGVja291dCByb290IG5vdCBmb3VuZDpcbiIKKyAgICAgICAg
ICAgICAgICAgICIgIFBhdGgtZGVwZW5kZW50IHN0eWxlIGNoZWNrcyBtYXkgbm90IHdvcmsgY29y
cmVjdGx5LlxuIgorICAgICAgICAgICAgICAgICAgIiAgU2VlIHRoZSBoZWxwIGRvY3VtZW50YXRp
b24gZm9yIG1vcmUgaW5mby4iKQorCisgICAgICAgIHJldHVybiBwYXRocworCisgICAgaWYgcGF0
aHM6CisgICAgICAgICMgVGhlbiB0cnkgY29udmVydGluZyBhbGwgb2YgdGhlIHBhdGhzIHRvIHBh
dGhzIHJlbGF0aXZlIHRvCisgICAgICAgICMgdGhlIGNoZWNrb3V0IHJvb3QuCisgICAgICAgIHJl
bF9wYXRocyA9IFtdCisgICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICAgICAgcmVs
X3BhdGggPSBfcmVsX3BhdGgocGF0aCwgY2hlY2tvdXRfcm9vdCkKKyAgICAgICAgICAgIGlmIHJl
bF9wYXRoIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBUaGVuIHRoZSBwYXRoIGlzIG5vdCBi
ZWxvdyB0aGUgY2hlY2tvdXQgcm9vdC4gIFNpbmNlIGFsbAorICAgICAgICAgICAgICAgICMgcGF0
aHMgc2hvdWxkIGJlIGludGVycHJldGVkIHJlbGF0aXZlIHRvIHRoZSBzYW1lIHJvb3QsCisgICAg
ICAgICAgICAgICAgIyBkbyBub3QgaW50ZXJwcmV0IGFueSBvZiB0aGUgcGF0aHMgYXMgcmVsYXRp
dmUgdG8gdGhlCisgICAgICAgICAgICAgICAgIyBjaGVja291dCByb290LiAgSW50ZXJwcmV0IGFs
bCBvZiB0aGVtIHJlbGF0aXZlIHRvIHRoZQorICAgICAgICAgICAgICAgICMgY3VycmVudCB3b3Jr
aW5nIGRpcmVjdG9yeSwgYW5kIGRvIG5vdCBjaGFuZ2UgdGhlIGN1cnJlbnQKKyAgICAgICAgICAg
ICAgICAjIHdvcmtpbmcgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIF9sb2cud2FybigiXAor
UGF0aC1kZXBlbmRlbnQgc3R5bGUgY2hlY2tzIG1heSBub3Qgd29yayBjb3JyZWN0bHk6XG5cCitc
blwKKyAgT25lIG9mIHRoZSBnaXZlbiBwYXRocyBpcyBvdXRzaWRlIHRoZSBXZWJLaXQgY2hlY2tv
dXQgb2YgdGhlIGN1cnJlbnRcblwKKyAgd29ya2luZyBkaXJlY3Rvcnk6XG5cCitcblwKKyAgICBQ
YXRoOiAlc1xuXAorICAgIENoZWNrb3V0IHJvb3Q6ICVzXG5cCitcblwKKyAgUGFzcyBvbmx5IGZp
bGVzIGJlbG93IHRoZSBjaGVja291dCByb290IHRvIGVuc3VyZSBjb3JyZWN0IHJlc3VsdHMuXG5c
CisgIFNlZSB0aGUgaGVscCBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm8uXG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICUgKHBhdGgsIGNoZWNrb3V0X3Jvb3QpKQorCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhdGhzCisgICAgICAgICAgICByZWxfcGF0aHMuYXBwZW5kKHJlbF9wYXRo
KQorICAgICAgICAjIElmIHdlIGdvdCBoZXJlLCB0aGUgY29udmVyc2lvbiB3YXMgc3VjY2Vzc2Z1
bC4KKyAgICAgICAgcGF0aHMgPSByZWxfcGF0aHMKKworICAgIF9sb2cuZGVidWcoIkNoYW5naW5n
IHRvIGNoZWNrb3V0IHJvb3Q6ICIgKyBjaGVja291dF9yb290KQorICAgIG9zX21vZHVsZS5jaGRp
cihjaGVja291dF9yb290KQorCisgICAgcmV0dXJuIHBhdGhzCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL21haW5fdW5pdHRlc3QucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL21haW5fdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ1ODIwZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvbWFpbl91bml0dGVzdC5weQpAQCAtMCwwICsxLDE1
OCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNqZXJkb25la0B3ZWJr
aXQub3JnKQorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJV
bml0IHRlc3RzIGZvciBtYWluLnB5LiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAor
Citmcm9tIG1haW4gaW1wb3J0IF9yZWxfcGF0aAorZnJvbSBtYWluIGltcG9ydCBjaGFuZ2VfZGly
ZWN0b3J5Citmcm9tIHdlYmtpdHB5LnN0eWxlX3JlZmVyZW5jZXMgaW1wb3J0IExvZ1Rlc3RpbmcK
KworCisjIE1ha2Ugc3VyZSB0aGUgdGVzdHMgaW4gdGhpcyBjbGFzcyBhcmUgcGxhdGZvcm0gaW5k
ZXBlbmRlbnQuCitjbGFzcyBSZWxQYXRoVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAi
IiJUZXN0cyBfcmVsX3BhdGgoKS4iIiIKKworICAgIG9zX3BhdGhfYWJzcGF0aCA9IGxhbWJkYSBz
ZWxmLCBwYXRoOiBwYXRoCisKKyAgICBkZWYgX3JlbF9wYXRoKHNlbGYsIHBhdGgsIGFic19zdGFy
dF9wYXRoKToKKyAgICAgICAgcmV0dXJuIF9yZWxfcGF0aChwYXRoLCBhYnNfc3RhcnRfcGF0aCwg
c2VsZi5vc19wYXRoX2Fic3BhdGgpCisKKyAgICBkZWYgdGVzdF9zYW1lX3BhdGgoc2VsZik6Cisg
ICAgICAgIHJlbF9wYXRoID0gc2VsZi5fcmVsX3BhdGgoIldlYktpdCIsICJXZWJLaXQiKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhyZWxfcGF0aCwgIiIpCisKKyAgICBkZWYgdGVzdF9sb25n
X3JlbF9wYXRoKHNlbGYpOgorICAgICAgICBzdGFydF9wYXRoID0gIldlYktpdCIKKyAgICAgICAg
ZXhwZWN0ZWRfcmVsX3BhdGggPSBvcy5wYXRoLmpvaW4oInRlc3QiLCAiRm9vLnR4dCIpCisgICAg
ICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc3RhcnRfcGF0aCwgZXhwZWN0ZWRfcmVsX3BhdGgpCisK
KyAgICAgICAgYWN0dWFsX3JlbF9wYXRoID0gc2VsZi5fcmVsX3BhdGgocGF0aCwgc3RhcnRfcGF0
aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRfcmVsX3BhdGgsIGFjdHVhbF9y
ZWxfcGF0aCkKKworICAgIGRlZiB0ZXN0X25vbmVfcmVsX3BhdGgoc2VsZik6CisgICAgICAgICIi
IlRlc3QgX3JlbF9wYXRoKCkgd2l0aCBOb25lIHJldHVybiB2YWx1ZS4iIiIKKyAgICAgICAgc3Rh
cnRfcGF0aCA9ICJXZWJLaXQiCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oIm90aGVyX2Rp
ciIsICJmb28udHh0IikKKworICAgICAgICByZWxfcGF0aCA9IHNlbGYuX3JlbF9wYXRoKHBhdGgs
IHN0YXJ0X3BhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWxfcGF0aCBpcyBOb25lKQor
CisgICAgICAgIHJlbF9wYXRoID0gc2VsZi5fcmVsX3BhdGgoIldlYktpdFRvb2xzIiwgIldlYktp
dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWxfcGF0aCBpcyBOb25lKQorCisKK2NsYXNz
IENoYW5nZURpcmVjdG9yeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIiIiVGVzdHMg
Y2hhbmdlX2RpcmVjdG9yeSgpLiIiIgorCisgICAgX29yaWdpbmFsX2RpcmVjdG9yeSA9ICIvb3Jp
Z2luYWwiCisgICAgX2NoZWNrb3V0X3Jvb3QgPSAiL1dlYktpdCIKKworICAgIGNsYXNzIF9Nb2Nr
T3Mob2JqZWN0KToKKworICAgICAgICAiIiJBIG1vY2sgb3MgbW9kdWxlIGZvciB1bml0IHRlc3Rp
bmcuIiIiCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfY2FzZSk6CisgICAgICAg
ICAgICBzZWxmLl90ZXN0X2Nhc2UgPSB0ZXN0X2Nhc2UKKyAgICAgICAgICAgIHNlbGYuX2N1cnJl
bnRfZGlyZWN0b3J5ID0gXAorICAgICAgICAgICAgICAgIENoYW5nZURpcmVjdG9yeVRlc3QuX29y
aWdpbmFsX2RpcmVjdG9yeQorCisgICAgICAgIGRlZiBjaGRpcihzZWxmLCBjdXJyZW50X2RpcmVj
dG9yeSk6CisgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2RpcmVjdG9yeSA9IGN1cnJlbnRfZGly
ZWN0b3J5CisKKyAgICAgICAgZGVmIGFzc2VydEN1cnJlbnREaXJlY3Rvcnkoc2VsZiwgZXhwZWN0
ZWRfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfY2FzZS5hc3NlcnRFcXVhbHMo
ZXhwZWN0ZWRfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9jdXJyZW50X2RpcmVjdG9yeSkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAg
ICAgICAgc2VsZi5fbG9nID0gTG9nVGVzdGluZy5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLl9t
b2NrX29zID0gc2VsZi5fTW9ja09zKHNlbGYpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6Cisg
ICAgICAgIHNlbGYuX2xvZy50ZWFyRG93bigpCisKKyAgICAjIFRoaXMgbWV0aG9kIGlzIGEgY29u
dmVuaWVudCB3cmFwcGVyIGZvciBjaGFuZ2Vfd29ya2luZ19kaXJlY3RvcnkoKSB0aGF0CisgICAg
IyBwYXNzZXMgdGhlIG1vY2tfb3MgZm9yIHRoaXMgdW5pdCB0ZXN0aW5nIGNsYXNzLgorICAgIGRl
ZiBfY2hhbmdlX2RpcmVjdG9yeShzZWxmLCBwYXRocywgY2hlY2tvdXRfcm9vdCk6CisgICAgICAg
IHJldHVybiBjaGFuZ2VfZGlyZWN0b3J5KHBhdGhzPXBhdGhzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGVja291dF9yb290PWNoZWNrb3V0X3Jvb3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1vY2tfb3M9c2VsZi5fbW9ja19vcykKKworICAgIGRlZiBfYXNz
ZXJ0X3Jlc3VsdChzZWxmLCBhY3R1YWxfcmV0dXJuX3ZhbHVlLCBleHBlY3RlZF9yZXR1cm5fdmFs
dWUsCisgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2xvZ19tZXNzYWdlcywgZXhwZWN0
ZWRfY3VycmVudF9kaXJlY3RvcnkpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhY3R1YWxf
cmV0dXJuX3ZhbHVlLCBleHBlY3RlZF9yZXR1cm5fdmFsdWUpCisgICAgICAgIHNlbGYuX2xvZy5h
c3NlcnRNZXNzYWdlcyhleHBlY3RlZF9sb2dfbWVzc2FnZXMpCisgICAgICAgIHNlbGYuX21vY2tf
b3MuYXNzZXJ0Q3VycmVudERpcmVjdG9yeShleHBlY3RlZF9jdXJyZW50X2RpcmVjdG9yeSkKKwor
ICAgIGRlZiB0ZXN0X2NoZWNrb3V0X3Jvb3Rfbm9uZV9wYXRoc19ub25lKHNlbGYpOgorICAgICAg
ICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIHNlbGYuX2NoYW5nZV9kaXJlY3RvcnksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrb3V0X3Jvb3Q9Tm9uZSwgcGF0aHM9Tm9uZSkK
KyAgICAgICAgc2VsZi5fbG9nLmFzc2VydE1lc3NhZ2VzKFtdKQorICAgICAgICBzZWxmLl9tb2Nr
X29zLmFzc2VydEN1cnJlbnREaXJlY3Rvcnkoc2VsZi5fb3JpZ2luYWxfZGlyZWN0b3J5KQorCisg
ICAgZGVmIHRlc3RfY2hlY2tvdXRfcm9vdF9ub25lKHNlbGYpOgorICAgICAgICBwYXRocyA9IHNl
bGYuX2NoYW5nZV9kaXJlY3RvcnkoY2hlY2tvdXRfcm9vdD1Ob25lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHM9WyJwYXRoMSJdKQorICAgICAgICBsb2dfbWVz
c2FnZXMgPSBbIiIiV0FSTklORzogV2ViS2l0IGNoZWNrb3V0IHJvb3Qgbm90IGZvdW5kOgorICBQ
YXRoLWRlcGVuZGVudCBzdHlsZSBjaGVja3MgbWF5IG5vdCB3b3JrIGNvcnJlY3RseS4KKyAgU2Vl
IHRoZSBoZWxwIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mby4KKyIiIl0KKyAgICAgICAgc2Vs
Zi5fYXNzZXJ0X3Jlc3VsdChwYXRocywgWyJwYXRoMSJdLCBsb2dfbWVzc2FnZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3JpZ2luYWxfZGlyZWN0b3J5KQorCisgICAgZGVm
IHRlc3RfcGF0aHNfbm9uZShzZWxmKToKKyAgICAgICAgcGF0aHMgPSBzZWxmLl9jaGFuZ2VfZGly
ZWN0b3J5KGNoZWNrb3V0X3Jvb3Q9c2VsZi5fY2hlY2tvdXRfcm9vdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzPU5vbmUpCisgICAgICAgIHNlbGYuX2Fzc2Vy
dF9yZXN1bHQocGF0aHMsIE5vbmUsIFtdLCBzZWxmLl9jaGVja291dF9yb290KQorCisgICAgZGVm
IHRlc3RfcGF0aHNfY29udmVydGlibGUoc2VsZik6CisgICAgICAgIHBhdGhzPVsiL1dlYktpdC9m
b28xLnR4dCIsCisgICAgICAgICAgICAgICAiL1dlYktpdC9mb28yLnR4dCJdCisgICAgICAgIHBh
dGhzID0gc2VsZi5fY2hhbmdlX2RpcmVjdG9yeShjaGVja291dF9yb290PXNlbGYuX2NoZWNrb3V0
X3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRocz1wYXRo
cykKKyAgICAgICAgc2VsZi5fYXNzZXJ0X3Jlc3VsdChwYXRocywgWyJmb28xLnR4dCIsICJmb28y
LnR4dCJdLCBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jaGVja291dF9y
b290KQorCisgICAgZGVmIHRlc3Rfd2l0aF9zY21fcGF0aHNfdW5jb252ZXJ0aWJsZShzZWxmKToK
KyAgICAgICAgcGF0aHM9WyIvV2ViS2l0L2ZvbzEudHh0IiwKKyAgICAgICAgICAgICAgICIvb3V0
c2lkZS9mb28yLnR4dCJdCisgICAgICAgIHBhdGhzID0gc2VsZi5fY2hhbmdlX2RpcmVjdG9yeShj
aGVja291dF9yb290PXNlbGYuX2NoZWNrb3V0X3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXRocz1wYXRocykKKyAgICAgICAgbG9nX21lc3NhZ2VzID0gWwor
IiIiV0FSTklORzogUGF0aC1kZXBlbmRlbnQgc3R5bGUgY2hlY2tzIG1heSBub3Qgd29yayBjb3Jy
ZWN0bHk6CisKKyAgT25lIG9mIHRoZSBnaXZlbiBwYXRocyBpcyBvdXRzaWRlIHRoZSBXZWJLaXQg
Y2hlY2tvdXQgb2YgdGhlIGN1cnJlbnQKKyAgd29ya2luZyBkaXJlY3Rvcnk6CisKKyAgICBQYXRo
OiAvb3V0c2lkZS9mb28yLnR4dAorICAgIENoZWNrb3V0IHJvb3Q6IC9XZWJLaXQKKworICBQYXNz
IG9ubHkgZmlsZXMgYmVsb3cgdGhlIGNoZWNrb3V0IHJvb3QgdG8gZW5zdXJlIGNvcnJlY3QgcmVz
dWx0cy4KKyAgU2VlIHRoZSBoZWxwIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mby4KKworIiIi
XQorICAgICAgICBzZWxmLl9hc3NlcnRfcmVzdWx0KHBhdGhzLCBwYXRocywgbG9nX21lc3NhZ2Vz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29yaWdpbmFsX2RpcmVjdG9yeSkK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvb3B0cGFyc2Vy
LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9vcHRwYXJzZXIucHkKaW5k
ZXggZmM0MGE0My4uOTU5NTYxZCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9vcHRwYXJzZXIucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS9vcHRwYXJzZXIucHkKQEAgLTIzLDEyICsyMywxNSBAQAogIiIiU3VwcG9ydHMgdGhl
IHBhcnNpbmcgb2YgY29tbWFuZC1saW5lIG9wdGlvbnMgZm9yIGNoZWNrLXdlYmtpdC1zdHlsZS4i
IiIKIAogaW1wb3J0IGdldG9wdAoraW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcy5wYXRoCiBpbXBv
cnQgc3lzCiAKIGZyb20gZmlsdGVyIGltcG9ydCB2YWxpZGF0ZV9maWx0ZXJfcnVsZXMKICMgVGhp
cyBtb2R1bGUgc2hvdWxkIG5vdCBpbXBvcnQgYW55dGhpbmcgZnJvbSBjaGVja2VyLnB5LgogCitf
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKIAogZGVmIF9jcmVhdGVfdXNhZ2Uo
ZGVmYXVsdF9vcHRpb25zKToKICAgICAiIiJSZXR1cm4gdGhlIHVzYWdlIHN0cmluZyB0byBkaXNw
bGF5IGZvciBjb21tYW5kIGhlbHAuCkBAIC05OCw2ICsxMDEsMzYgQEAgU3ludGF4OiAlKHByb2dy
YW1fbmFtZSlzIFstLWRlYnVnXSBbLS12ZXJib3NlPSNdIFstLWdpdC1jb21taXQ9PFNpbmdsZUNv
bW1pdD5dCiAgICAgICAlKHByb2dyYW1fbmFtZSlzLCBhbG9uZyB3aXRoIHdoaWNoIGFyZSBlbmFi
bGVkIGJ5IGRlZmF1bHQsIHBhc3MKICAgICAgIHRoZSBlbXB0eSBmaWx0ZXIgYXMgZm9sbG93czoK
ICAgICAgICAgIC0tZmlsdGVyPQorCitQYXRoIGNvbnNpZGVyYXRpb25zOgorCisgIENlcnRhaW4g
c3R5bGUtY2hlY2tpbmcgYmVoYXZpb3IgZGVwZW5kcyBvbiB0aGUgcGF0aHMgcmVsYXRpdmUgdG8g
dGhlIFdlYktpdAorICBzb3VyY2Ugcm9vdCBvZiB0aGUgZmlsZXMgYmVpbmcgY2hlY2tlZC4gIEZv
ciBleGFtcGxlLCBjZXJ0YWluIHR5cGVzIG9mIGVycm9ycworICBtYXkgYmUgaGFuZGxlZCBkaWZm
ZXJlbnRseSBmb3IgZmlsZXMgaW4gV2ViS2l0L2d0ay93ZWJraXQvIChlLmcuIGJ5CisgIHN1cHBy
ZXNzaW5nICJyZWFkYWJpbGl0eS9uYW1pbmciIGVycm9ycyBmb3IgZmlsZXMgaW4gdGhpcyBkaXJl
Y3RvcnkpLgorCisgIENvbnNlcXVlbnRseSwgaWYgdGhlIHBhdGggcmVsYXRpdmUgdG8gdGhlIFdl
YktpdCBzb3VyY2Ugcm9vdCBjYW5ub3QgYmUKKyAgZGV0ZXJtaW5lZCBmb3IgYSBmaWxlIGJlaW5n
IGNoZWNrZWQsIHRoZW4gc3R5bGUgY2hlY2tpbmcgbWF5IG5vdCB3b3JrCisgIGNvcnJlY3RseSBm
b3IgdGhhdCBmaWxlLiAgVGhpcyBjYW4gb2NjdXIsIGZvciBleGFtcGxlLCBpZiB0aGUgV2ViS2l0
IHNvdXJjZQorICByb290IGNhbm5vdCBiZSBkZXRlY3RlZCwgb3IgaWYgdGhlIHNvdXJjZSByb290
IGNhbiBiZSBkZXRlY3RlZCwgYnV0IG9uZSBvZgorICB0aGUgZmlsZXMgYmVpbmcgY2hlY2tlZCBs
aWVzIG91dHNpZGUgdGhlIHNvdXJjZSB0cmVlLgorCisgIElmIHRoZSBXZWJLaXQgc291cmNlIHJv
b3QgY2FuIGJlIGRldGVjdGVkIGFuZCBhbGwgZmlsZXMgYmVpbmcgY2hlY2tlZCBhcmUgaW4KKyAg
dGhlIHNvdXJjZSB0cmVlLCB0aGVuIGFsbCBwYXRocyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgY29u
dmVydGVkIHRvIHBhdGhzCisgIHJlbGF0aXZlIHRvIHRoZSBzb3VyY2Ugcm9vdCBwcmlvciB0byBj
aGVja2luZy4gIFRoaXMgaXMgYWxzbyB1c2VmdWwgZm9yCisgIGRpc3BsYXkgcHVycG9zZXMuCisK
KyAgQ3VycmVudGx5LCB0aGlzIGNvbW1hbmQgY2FuIGRldGVjdCB0aGUgc291cmNlIHJvb3Qgb25s
eSBpZiB0aGUgY29tbWFuZCBpcworICBydW4gZnJvbSB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5
IChpLmUuIGlmIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CisgIHdoZW4gcnVubmluZyB0
aGlzIGNvbW1hbmQgaXMgYmVsb3cgdGhlIHNvdXJjZSByb290KS4gIEluIHBhcnRpY3VsYXIsIGl0
IGlzCisgIG5vdCByZWNvbW1lbmRlZCB0byBydW4gdGhpcyBzY3JpcHQgZnJvbSBhIGRpcmVjdG9y
eSBvdXRzaWRlIHRoZSBzb3VyY2UgdHJlZS4KKworICBSdW5uaW5nIHRoaXMgc2NyaXB0IGZyb20g
YSB0b3AtbGV2ZWwgV2ViS2l0IHNvdXJjZSBkaXJlY3RvcnkgYW5kIGNoZWNraW5nCisgIG9ubHkg
ZmlsZXMgaW4gdGhlIHNvdXJjZSB0cmVlIHdpbGwgZW5zdXJlIHRoYXQgYWxsIHN0eWxlIGNoZWNr
aW5nIGJlaGF2ZXMKKyAgY29ycmVjdGx5IC0tIHdoZXRoZXIgb3Igbm90IHRoZSBzb3VyY2Ugcm9v
dCBjYW4gYmUgZGV0ZWN0ZWQuICBUaGlzIGlzIGJlY2F1c2UKKyAgYWxsIGZpbGUgcGF0aHMgd2ls
bCBhbHJlYWR5IGJlIHJlbGF0aXZlIHRvIHRoZSBzb3VyY2Ugcm9vdCBhbmQgc28gd2lsbCBub3QK
KyAgbmVlZCB0byBiZSBjb252ZXJ0ZWQuCisKICIiIiAlIHsncHJvZ3JhbV9uYW1lJzogb3MucGF0
aC5iYXNlbmFtZShzeXMuYXJndlswXSksCiAgICAgICAgJ2RlZmF1bHRfdmVyYm9zaXR5JzogZGVm
YXVsdF9vcHRpb25zLnZlcmJvc2l0eSwKICAgICAgICAnZGVmYXVsdF9vdXRwdXRfZm9ybWF0Jzog
ZGVmYXVsdF9vcHRpb25zLm91dHB1dF9mb3JtYXR9CkBAIC0zMzEsMTYgKzM2NCwxOCBAQCBjbGFz
cyBBcmd1bWVudFBhcnNlcihvYmplY3QpOgogICAgICAgICAgICAgZmlsdGVycy5hcHBlbmQoZmls
dGVyKQogICAgICAgICByZXR1cm4gZmlsdGVycwogCi0gICAgZGVmIHBhcnNlKHNlbGYsIGFyZ3Mp
OgorICAgIGRlZiBwYXJzZShzZWxmLCBhcmdzLCBmb3VuZF9jaGVja291dCk6CiAgICAgICAgICIi
IlBhcnNlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIGNoZWNrLXdlYmtpdC1zdHlsZS4K
IAogICAgICAgICBBcmdzOgogICAgICAgICAgIGFyZ3M6IEEgbGlzdCBvZiBjb21tYW5kLWxpbmUg
YXJndW1lbnRzIGFzIHJldHVybmVkIGJ5IHN5cy5hcmd2WzE6XS4KKyAgICAgICAgICBmb3VuZF9j
aGVja291dDogQSBib29sZWFuIHZhbHVlIG9mIHdoZXRoZXIgdGhlIGN1cnJlbnQgd29ya2luZwor
ICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgd2FzIGZvdW5kIHRvIGJlIGluc2lk
ZSBhIFdlYktpdCBjaGVja291dC4KIAogICAgICAgICBSZXR1cm5zOgotICAgICAgICAgIEEgdHVw
bGUgb2YgKGZpbGVuYW1lcywgb3B0aW9ucykKKyAgICAgICAgICBBIHR1cGxlIG9mIChwYXRocywg
b3B0aW9ucykKIAotICAgICAgICAgIGZpbGVuYW1lczogVGhlIGxpc3Qgb2YgZmlsZW5hbWVzIHRv
IGNoZWNrLgorICAgICAgICAgIHBhdGhzOiBUaGUgbGlzdCBvZiBwYXRocyB0byBjaGVjay4KICAg
ICAgICAgICBvcHRpb25zOiBBIENvbW1hbmRPcHRpb25WYWx1ZXMgaW5zdGFuY2UuCiAKICAgICAg
ICAgIiIiCkBAIC0zNTMsNyArMzg4LDcgQEAgY2xhc3MgQXJndW1lbnRQYXJzZXIob2JqZWN0KToK
ICAgICAgICAgICAgICAgICAgJ3ZlcmJvc2U9J10KIAogICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICAob3B0cywgZmlsZW5hbWVzKSA9IGdldG9wdC5nZXRvcHQoYXJncywgJycsIGZsYWdzKQorICAg
ICAgICAgICAgKG9wdHMsIHBhdGhzKSA9IGdldG9wdC5nZXRvcHQoYXJncywgJycsIGZsYWdzKQog
ICAgICAgICBleGNlcHQgZ2V0b3B0LkdldG9wdEVycm9yLCBlcnI6CiAgICAgICAgICAgICAjIEZJ
WE1FOiBTZXR0bGUgb24gYW4gZXJyb3IgaGFuZGxpbmcgYXBwcm9hY2g6IGNvbWUgdXAKICAgICAg
ICAgICAgICMgICAgICAgIHdpdGggYSBjb25zaXN0ZW50IGd1aWRlbGluZSBhcyB0byB3aGVuIGFu
ZCB3aGV0aGVyCkBAIC0zNjEsNiArMzk2LDEyIEBAIGNsYXNzIEFyZ3VtZW50UGFyc2VyKG9iamVj
dCk6CiAgICAgICAgICAgICAjICAgICAgICBzeXMuZXhpdCB3aGVuIG5lZWRpbmcgdG8gaW50ZXJy
dXB0IGV4ZWN1dGlvbi4KICAgICAgICAgICAgIHNlbGYuX2V4aXRfd2l0aF91c2FnZSgnSW52YWxp
ZCBhcmd1bWVudHM6ICVzJyAlIGVycikKIAorICAgICAgICBpZiBub3QgZm91bmRfY2hlY2tvdXQg
YW5kIG5vdCBwYXRoczoKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoIldlYktpdCBjaGVja291dCBu
b3QgZm91bmQ6IFlvdSBtdXN0IHJ1biB0aGlzIHNjcmlwdCAiCisgICAgICAgICAgICAgICAgICAg
ICAgICJmcm9tIGluc2lkZSBhIFdlYktpdCBjaGVja291dCBpZiB5b3UgYXJlIG5vdCBwYXNzaW5n
ICIKKyAgICAgICAgICAgICAgICAgICAgICAgInNwZWNpZmljIHBhdGhzIHRvIGNoZWNrLiIpCisg
ICAgICAgICAgICBzeXMuZXhpdCgxKQorCiAgICAgICAgIGdpdF9jb21taXQgPSBOb25lCiAgICAg
ICAgIGZpbHRlcl9ydWxlcyA9IFtdCiAKQEAgLTM4NSw3ICs0MjYsNyBAQCBjbGFzcyBBcmd1bWVu
dFBhcnNlcihvYmplY3QpOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFs
aWQgb3B0aW9uOiAiJXMiJyAlIG9wdCkKIAogICAgICAgICAjIENoZWNrIHZhbGlkaXR5IG9mIHJl
c3VsdGluZyB2YWx1ZXMuCi0gICAgICAgIGlmIGZpbGVuYW1lcyBhbmQgKGdpdF9jb21taXQgIT0g
Tm9uZSk6CisgICAgICAgIGlmIHBhdGhzIGFuZCAoZ2l0X2NvbW1pdCAhPSBOb25lKToKICAgICAg
ICAgICAgIHNlbGYuX2V4aXRfd2l0aF91c2FnZSgnSXQgaXMgbm90IHBvc3NpYmxlIHRvIGNoZWNr
IGZpbGVzIGFuZCBhICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BlY2lm
aWMgY29tbWl0IGF0IHRoZSBzYW1lIHRpbWUuJykKIApAQCAtNDA3LDUgKzQ0OCw1IEBAIGNsYXNz
IEFyZ3VtZW50UGFyc2VyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHB1dF9mb3JtYXQ9b3V0cHV0X2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmVyYm9zaXR5PXZlcmJvc2l0eSkKIAotICAgICAgICByZXR1cm4g
KGZpbGVuYW1lcywgb3B0aW9ucykKKyAgICAgICAgcmV0dXJuIChwYXRocywgb3B0aW9ucykKIApk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9vcHRwYXJzZXJf
dW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL29wdHBhcnNl
cl91bml0dGVzdC5weQppbmRleCA2MWE1NDhlLi4yMWU2MWVkIDEwMDY0NAotLS0gYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL29wdHBhcnNlcl91bml0dGVzdC5weQorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL29wdHBhcnNlcl91bml0dGVzdC5weQpA
QCAtMjksNiArMjksNyBAQCBmcm9tIG9wdHBhcnNlciBpbXBvcnQgQXJndW1lbnRQYXJzZXIKIGZy
b20gb3B0cGFyc2VyIGltcG9ydCBBcmd1bWVudFByaW50ZXIKIGZyb20gb3B0cGFyc2VyIGltcG9y
dCBDb21tYW5kT3B0aW9uVmFsdWVzIGFzIFByb2Nlc3Nvck9wdGlvbnMKIGZyb20gb3B0cGFyc2Vy
IGltcG9ydCBEZWZhdWx0Q29tbWFuZE9wdGlvblZhbHVlcworZnJvbSB3ZWJraXRweS5zdHlsZV9y
ZWZlcmVuY2VzIGltcG9ydCBMb2dUZXN0aW5nCiAKIAogY2xhc3MgQ3JlYXRlVXNhZ2VUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKQEAgLTc1LDkgKzc2LDIwIEBAIGNsYXNzIEFyZ3VtZW50UGFyc2Vy
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAiIiJUZXN0IHRoZSBBcmd1bWVudFBhcnNl
ciBjbGFzcy4iIiIKIAorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fbG9nID0g
TG9nVGVzdGluZy5zZXRVcChzZWxmKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAg
ICBzZWxmLl9sb2cudGVhckRvd24oKQorCiAgICAgZGVmIF9wYXJzZShzZWxmKToKICAgICAgICAg
IiIiUmV0dXJuIGEgZGVmYXVsdCBwYXJzZSgpIGZ1bmN0aW9uIGZvciB0ZXN0aW5nLiIiIgotICAg
ICAgICByZXR1cm4gc2VsZi5fY3JlYXRlX3BhcnNlcigpLnBhcnNlCisgICAgICAgICMgV2Ugd2ls
bCB0ZXN0IGZvdW5kX3NjbSBGYWxzZSBzZXBhcmF0ZWx5LgorICAgICAgICBkZWYgcGFyc2UoYXJn
cywgZm91bmRfc2NtPVRydWUpOgorICAgICAgICAgICAgcGFyc2VyID0gc2VsZi5fY3JlYXRlX3Bh
cnNlcigpCisgICAgICAgICAgICByZXR1cm4gcGFyc2VyLnBhcnNlKGFyZ3MsIGZvdW5kX3NjbSkK
KworICAgICAgICByZXR1cm4gcGFyc2UKIAogICAgIGRlZiBfY3JlYXRlX2RlZmF1bHRzKHNlbGYp
OgogICAgICAgICAiIiJSZXR1cm4gYSBEZWZhdWx0Q29tbWFuZE9wdGlvblZhbHVlcyBpbnN0YW5j
ZSBmb3IgdGVzdGluZy4iIiIKQEAgLTEzMiw2ICsxNDQsMTMgQEAgY2xhc3MgQXJndW1lbnRQYXJz
ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgIyBQYXNzIGZpbGVzIGFuZCBnaXQt
Y29tbWl0IGF0IHRoZSBzYW1lIHRpbWUuCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3Rl
bUV4aXQsIHBhcnNlLCBbJy0tZ2l0LWNvbW1pdD0nLCAnZmlsZS50eHQnXSkKIAorICAgICAgICAj
IFBhdGhzIG11c3QgYmUgcGFzc2VkIHdoZW4gZm91bmRfc2NtIGlzIEZhbHNlLgorICAgICAgICBz
ZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBwYXJzZSwgW10sIGZvdW5kX3NjbT1GYWxzZSkK
KyAgICAgICAgbWVzc2FnZXMgPSBbIkVSUk9SOiBXZWJLaXQgY2hlY2tvdXQgbm90IGZvdW5kOiBZ
b3UgbXVzdCBydW4gdGhpcyAiCisgICAgICAgICAgICAgICAgICAgICJzY3JpcHQgZnJvbSBpbnNp
ZGUgYSBXZWJLaXQgY2hlY2tvdXQgaWYgeW91IGFyZSBub3QgIgorICAgICAgICAgICAgICAgICAg
ICAicGFzc2luZyBzcGVjaWZpYyBwYXRocyB0byBjaGVjay5cbiJdCisgICAgICAgIHNlbGYuX2xv
Zy5hc3NlcnRNZXNzYWdlcyhtZXNzYWdlcykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lz
dGVtRXhpdCwgcGFyc2UsIFsnLS12ZXJib3NlPTMnXSwgZm91bmRfc2NtPUZhbHNlKQogCiAgICAg
ZGVmIHRlc3RfcGFyc2VfZGVmYXVsdF9hcmd1bWVudHMoc2VsZik6CiAgICAgICAgIHBhcnNlID0g
c2VsZi5fcGFyc2UoKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9z
dHlsZS91bml0dGVzdHMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL3Vu
aXR0ZXN0cy5weQppbmRleCBkMmI0OTY2Li45YTAwMDU0IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL3VuaXR0ZXN0cy5weQorKysgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL3VuaXR0ZXN0cy5weQpAQCAtMzgsNiArMzgsNyBAQCBpbXBv
cnQgdW5pdHRlc3QKIGZyb20gY2hlY2tlcl91bml0dGVzdCBpbXBvcnQgKgogZnJvbSBlcnJvcl9o
YW5kbGVyc191bml0dGVzdCBpbXBvcnQgKgogZnJvbSBmaWx0ZXJfdW5pdHRlc3QgaW1wb3J0ICoK
K2Zyb20gbWFpbl91bml0dGVzdCBpbXBvcnQgKgogZnJvbSBvcHRwYXJzZXJfdW5pdHRlc3QgaW1w
b3J0ICoKIGZyb20gcHJvY2Vzc29ycy5jb21tb25fdW5pdHRlc3QgaW1wb3J0ICoKIGZyb20gcHJv
Y2Vzc29ycy5jcHBfdW5pdHRlc3QgaW1wb3J0ICoKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3R5bGVfcmVmZXJlbmNlcy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGVfcmVmZXJlbmNlcy5weQppbmRleCBlNTdjZDBlLi45ZThiNjBkIDEwMDY0
NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlX3JlZmVyZW5jZXMucHkK
KysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZV9yZWZlcmVuY2VzLnB5CkBA
IC00Niw2ICs0NiwxNCBAQCBmcm9tIGluaXQubG9ndGVzdGluZyBpbXBvcnQgVW5pdFRlc3RMb2dT
dHJlYW0KIGZyb20gc2NtIGltcG9ydCBkZXRlY3Rfc2NtX3N5c3RlbQogCiAKK2RlZiBkZXRlY3Rf
Y2hlY2tvdXQoKToKKyAgICAiIiJSZXR1cm4gYSBXZWJLaXRDaGVja291dCBpbnN0YW5jZSwgb3Ig
Tm9uZSBpZiBpdCBjYW5ub3QgYmUgZm91bmQuIiIiCisgICAgY3dkID0gb3MucGF0aC5hYnNwYXRo
KG9zLmN1cmRpcikKKyAgICBzY20gPSBkZXRlY3Rfc2NtX3N5c3RlbShjd2QpCisKKyAgICByZXR1
cm4gTm9uZSBpZiBzY20gaXMgTm9uZSBlbHNlIFdlYktpdENoZWNrb3V0KHNjbSkKKworCiBkZWYg
cGFyc2VfcGF0Y2gocGF0Y2hfc3RyaW5nKToKIAogICAgICIiIlBhcnNlIGEgcGF0Y2ggc3RyaW5n
IGFuZCByZXR1cm4gdGhlIGFmZmVjdGVkIGZpbGVzLiIiIgpAQCAtNTQsMTYgKzYyLDE1IEBAIGRl
ZiBwYXJzZV9wYXRjaChwYXRjaF9zdHJpbmcpOgogICAgIHJldHVybiBwYXRjaC5maWxlcwogCiAK
LWNsYXNzIFNpbXBsZVNjbShvYmplY3QpOgorY2xhc3MgV2ViS2l0Q2hlY2tvdXQob2JqZWN0KToK
IAotICAgICIiIlNpbXBsZSBmYWNhZGUgdG8gU0NNIGZvciB1c2UgYnkgc3R5bGUgcGFja2FnZS4i
IiIKKyAgICAiIiJTaW1wbGUgZmFjYWRlIHRvIHRoZSBTQ00gY2xhc3MgZm9yIHVzZSBieSBzdHls
ZSBwYWNrYWdlLiIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBjd2QgPSBv
cy5wYXRoLmFic3BhdGgoJy4nKQotICAgICAgICBzZWxmLl9zY20gPSBkZXRlY3Rfc2NtX3N5c3Rl
bShjd2QpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNjbSk6CisgICAgICAgIHNlbGYuX3NjbSA9
IHNjbQogCi0gICAgZGVmIGNoZWNrb3V0X3Jvb3Qoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB0
aGUgc291cmNlIGNvbnRyb2wgcm9vdCBhcyBhbiBhYnNvbHV0ZSBwYXRoLiIiIgorICAgIGRlZiBy
b290X3BhdGgoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgY2hlY2tvdXQgcm9vdCBhcyBh
biBhYnNvbHV0ZSBwYXRoLiIiIgogICAgICAgICByZXR1cm4gc2VsZi5fc2NtLmNoZWNrb3V0X3Jv
b3QKIAogICAgIGRlZiBjcmVhdGVfcGF0Y2goc2VsZik6Cg==
</data>
<flag name="commit-queue"
          id="34469"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51253</attachid>
            <date>2010-03-21 12:18:33 -0700</date>
            <delta_ts>2010-03-24 01:00:44 -0700</delta_ts>
            <desc>Proposed patch 6</desc>
            <filename>_patch-35498-6.diff</filename>
            <type>text/plain</type>
            <size>31668</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAxM2U1ZWU1Li45M2NkYjBmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTAtMDMt
MjEgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlZCBjaGVjay13ZWJraXQt
c3R5bGUgdG8gY29udmVydCBwYXRocyB0byBwYXRocyByZWxhdGl2ZSB0bworICAgICAgICB0aGUg
Y2hlY2tvdXQgcm9vdCB3aGVuIGludm9raW5nIGNoZWNrLXdlYmtpdC1zdHlsZSB3aXRoIHBhdGgK
KyAgICAgICAgYXJndW1lbnRzLiAgQWxzbyBhZGRlZCB3YXJuaW5nIG1lc3NhZ2VzIHdoZXJlIGFw
cHJvcHJpYXRlLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zNTQ5OAorCisgICAgICAgIENvbnZlcnRpbmcgcGF0aHMgdG8gcGF0aHMgcmVsYXRpdmUg
dG8gdGhlIGNoZWNrb3V0IHJvb3QgZW5zdXJlcworICAgICAgICB0aGF0IHN0eWxlIGNoZWNraW5n
IHdpbGwgYmVoYXZlIGFzIGV4cGVjdGVkIChzaW5jZSBwYXRoLXNwZWNpZmljCisgICAgICAgIHJ1
bGVzIGFzc3VtZSBpbnB1dCBwYXRocyBhcmUgcmVsYXRpdmUgdG8gYSBzb3VyY2Ugcm9vdCkuCisK
KyAgICAgICAgKiBTY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHlsZToKKyAgICAgICAgICAtIEFkZGVk
IGRlYnVnIGxvZ2dpbmcgb2Ygd2hldGhlciB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2FzIGZvdW5k
CisgICAgICAgICAgICB0byBiZSBpbiBhIFdlYktpdCBjaGVja291dC4KKyAgICAgICAgICAtIEFk
ZGVkIHRoZSBmb3VuZF9jaGVja291dCBwYXJhbWV0ZXIgdG8gdGhlIGNhbGwgdG8gcGFyc2VyLnBh
cnNlKCkuCisgICAgICAgICAgLSBSZW5hbWVkIHRoZSBmaWxlcyB2YXJpYWJsZSB0byBwYXRocy4K
KyAgICAgICAgICAtIEFkZGVkIGEgY2FsbCB0byBjaGFuZ2VfZGlyZWN0b3J5KCkgcHJpb3IgdG8g
Y2hlY2tpbmcgc3R5bGUuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXIucHk6CisgICAgICAgICAgLSBGb3IgU3R5bGVDaGVja2VyLmNoZWNrX2ZpbGUoKToKKyAgICAg
ICAgICAgIC0gVXBkYXRlZCB0aGUgZG9jc3RyaW5nLgorICAgICAgICAgICAgLSBBZGRlZCB0d28g
bG9nIG1lc3NhZ2VzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vy
X3VuaXR0ZXN0LnB5OgorICAgICAgICAgIC0gVXBkYXRlZCBhIGNhbGwgdG8gcGFyc2VyLnBhcnNl
KCkgd2l0aCB0aGUgZm91bmRfY2hlY2tvdXQgcGFyYW1ldGVyLgorCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9zdHlsZS9tYWluLnB5OiBBZGRlZC4KKyAgICAgICAgICAtIEFkZGVkIGEgbmV3
IGZpbGUgc28gdGhlIGNvZGUgaW4gdGhpcyBwYXRjaCBjb3VsZCBiZSB1bml0LXRlc3RlZCwKKyAg
ICAgICAgICAgIGFzIG9wcG9zZWQgdG8gYWRkaW5nIG5ldyBjb2RlIHRvIGNoZWNrLXdlYmtpdC1z
dHlsZS4KKyAgICAgICAgICAtIEFkZGVkIHRoZSBtZXRob2QgX3JlbF9wYXRoKCkgYXMgYSBzdWJz
dGl0dXRlIGZvciBvcy5wYXRoLnJlbHBhdGgoKSwKKyAgICAgICAgICAgIHdoaWNoIGlzIGF2YWls
YWJsZSBvbmx5IGluIFB5dGhvbiAyLjYuCisgICAgICAgICAgLSBBZGRlZCB0aGUgbWV0aG9kIGNo
YW5nZV9kaXJlY3RvcnkoKSwgd2hpY2ggY29udGFpbnMgbW9zdCBvZiB0aGUKKyAgICAgICAgICAg
IG5ldyBmdW5jdGlvbmFsaXR5IGluIHRoaXMgcGF0Y2guCisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL21haW5fdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAgIC0gQWRkZWQg
UmVsUGF0aFRlc3QgdG8gdGVzdCBtYWluLl9yZWxfcGF0aCgpLgorICAgICAgICAgIC0gQWRkZWQg
Q2hhbmdlRGlyZWN0b3J5VGVzdCB0byB0ZXN0IG1haW4uY2hhbmdlX2RpcmVjdG9yeSgpLgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9vcHRwYXJzZXIucHk6CisgICAgICAgICAg
LSBVcGRhdGVkIGNoZWNrLXdlYmtpdC1zdHlsZSdzIHVzYWdlIHN0cmluZy4KKyAgICAgICAgICAt
IEZvciB0aGUgQXJndW1lbnRQYXJzZXIucGFyc2UoKSBtZXRob2Q6CisgICAgICAgICAgICAtIEFk
ZGVkIGEgZm91bmRfY2hlY2tvdXQgcGFyYW1ldGVyLgorICAgICAgICAgICAgLSBSZW5hbWVkIGZp
bGVuYW1lcyB0byBwYXRocy4KKyAgICAgICAgICAgIC0gQWRkZWQgbG9naWMgc28gdGhhdCBhbiBl
cnJvciBpcyByYWlzZWQgaWYgbm8gcGF0aHMgYXJlIHBhc3NlZAorICAgICAgICAgICAgICBpZiBm
b3VuZF9jaGVja291dCBpcyBGYWxzZS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5
bGUvb3B0cGFyc2VyX3VuaXR0ZXN0LnB5OgorICAgICAgICAgIC0gVXBkYXRlZCB0aGUgQXJndW1l
bnRQYXJzZXIucGFyc2UoKSB1bml0IHRlc3RzIHRvIGluY2x1ZGUKKyAgICAgICAgICAgIGNvdmVy
YWdlIGZvciB0aGUgbmV3IGZvdW5kX2NoZWNrb3V0IHBhcmFtZXRlci4KKworICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvc3R5bGUvdW5pdHRlc3RzLnB5OgorICAgICAgICAgIC0gQWRkZWQgYW4g
aW1wb3J0IHN0YXRlbWVudCBmb3IgbWFpbl91bml0dGVzdC4KKworICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvc3R5bGVfcmVmZXJlbmNlcy5weToKKyAgICAgICAgICAtIFJlbmFtZWQgU2ltcGxl
U2NtIHRvIFdlYktpdENoZWNrb3V0LgorICAgICAgICAgIC0gQWRkZWQgYSBkZXRlY3RfY2hlY2tv
dXQoKSBmdW5jdGlvbiB0byBhbGxvdyByZXR1cm5pbmcgTm9uZQorICAgICAgICAgICAgaW5zdGVh
ZCBvZiBhIFdlYktpdENoZWNrb3V0IGluc3RhbmNlIGlmIG5vIGNoZWNrb3V0IGlzIGZvdW5kLgor
ICAgICAgICAgIC0gUmVuYW1lZCBjaGVja291dF9yb290IHRvIHJvb3RfcGF0aC4KKwogMjAxMC0w
My0yMCAgQ2hyaXMgSmVyZG9uZWsgIDxjamVyZG9uZWtAd2Via2l0Lm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvY2hlY2std2Via2l0LXN0eWxlIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9jaGVjay13ZWJraXQt
c3R5bGUKaW5kZXggOWQ4MTAxYi4uMmE4NmIyNiAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy9jaGVjay13ZWJraXQtc3R5bGUKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9jaGVjay13
ZWJraXQtc3R5bGUKQEAgLTQ4LDExICs0OCwxNCBAQCBpbXBvcnQgb3MKIGltcG9ydCBvcy5wYXRo
CiBpbXBvcnQgc3lzCiAKK2Zyb20gd2Via2l0cHkuc3R5bGVfcmVmZXJlbmNlcyBpbXBvcnQgZGV0
ZWN0X2NoZWNrb3V0Citmcm9tIHdlYmtpdHB5LnN0eWxlLm1haW4gaW1wb3J0IGNoYW5nZV9kaXJl
Y3RvcnkKIGltcG9ydCB3ZWJraXRweS5zdHlsZS5jaGVja2VyIGFzIGNoZWNrZXIKLWZyb20gd2Vi
a2l0cHkuc3R5bGVfcmVmZXJlbmNlcyBpbXBvcnQgU2ltcGxlU2NtCiAKIF9sb2cgPSBsb2dnaW5n
LmdldExvZ2dlcigiY2hlY2std2Via2l0LXN0eWxlIikKIAorCisjIEZJWE1FOiBNb3ZlIHRoaXMg
Y29kZSB0byBzdHlsZS5tYWluLgogZGVmIG1haW4oKToKICAgICAjIENoYW5nZSBzdGRlcnIgdG8g
d3JpdGUgd2l0aCByZXBsYWNlbWVudCBjaGFyYWN0ZXJzIHNvIHdlIGRvbid0IGRpZQogICAgICMg
aWYgd2UgdHJ5IHRvIHByaW50IHNvbWV0aGluZyBjb250YWluaW5nIG5vbi1BU0NJSSBjaGFyYWN0
ZXJzLgpAQCAtNzMsMjggKzc2LDM1IEBAIGRlZiBtYWluKCk6CiAKICAgICBhcmdzID0gc3lzLmFy
Z3ZbMTpdCiAKLSAgICAjIENoZWNraW5nIHRoZSBkZWJ1ZyBmbGFnIGJlZm9yZSBjYWxsaW5nIGNo
ZWNrX3dlYmtpdF9zdHlsZV9wYXJzZXIoKQotICAgICMgbGV0cyB1cyBlbmFibGUgbW9yZSBkZXRh
aWxlZCBsb2dnaW5nIGVhcmxpZXIuCisgICAgIyBDaGVja2luZyBmb3IgdGhlIGRlYnVnIGZsYWcg
YmVmb3JlIGNhbGxpbmcgY2hlY2tfd2Via2l0X3N0eWxlX3BhcnNlcigpCisgICAgIyBsZXRzIHVz
IGVuYWJsZSBkZWJ1ZyBsb2dnaW5nIGVhcmxpZXIuCiAgICAgaXNfZGVidWcgPSAiLS1kZWJ1ZyIg
aW4gYXJncwogCiAgICAgY2hlY2tlci5jb25maWd1cmVfbG9nZ2luZyhzdHJlYW09c3RkZXJyLCBp
c19kZWJ1Zz1pc19kZWJ1ZykKICAgICBfbG9nLmRlYnVnKCJEZWJ1ZyBsb2dnaW5nIGVuYWJsZWQu
IikKIAorICAgIGNoZWNrb3V0ID0gZGV0ZWN0X2NoZWNrb3V0KCkKKworICAgIGlmIGNoZWNrb3V0
IGlzIE5vbmU6CisgICAgICAgIGNoZWNrb3V0X3Jvb3QgPSBOb25lCisgICAgICAgIF9sb2cuZGVi
dWcoIldlYktpdCBjaGVja291dCBub3QgZm91bmQgZm9yIGN1cnJlbnQgZGlyZWN0b3J5LiIpCisg
ICAgZWxzZToKKyAgICAgICAgY2hlY2tvdXRfcm9vdCA9IGNoZWNrb3V0LnJvb3RfcGF0aCgpCisg
ICAgICAgIF9sb2cuZGVidWcoIldlYktpdCBjaGVja291dCBmb3VuZCB3aXRoIHJvb3Q6ICVzIiAl
IGNoZWNrb3V0X3Jvb3QpCisKICAgICBwYXJzZXIgPSBjaGVja2VyLmNoZWNrX3dlYmtpdF9zdHls
ZV9wYXJzZXIoKQotICAgIChmaWxlcywgb3B0aW9ucykgPSBwYXJzZXIucGFyc2UoYXJncykKKyAg
ICBmb3VuZF9jaGVja291dCA9IGNoZWNrb3V0IGlzIG5vdCBOb25lCisgICAgKHBhdGhzLCBvcHRp
b25zKSA9IHBhcnNlci5wYXJzZShhcmdzLCBmb3VuZF9jaGVja291dD1mb3VuZF9jaGVja291dCkK
IAogICAgIGNvbmZpZ3VyYXRpb24gPSBjaGVja2VyLmNoZWNrX3dlYmtpdF9zdHlsZV9jb25maWd1
cmF0aW9uKG9wdGlvbnMpCiAgICAgc3R5bGVfY2hlY2tlciA9IGNoZWNrZXIuU3R5bGVDaGVja2Vy
KGNvbmZpZ3VyYXRpb24pCiAKLSAgICBpZiBmaWxlczoKLSAgICAgICAgZm9yIGZpbGVuYW1lIGlu
IGZpbGVzOgotICAgICAgICAgICAgc3R5bGVfY2hlY2tlci5jaGVja19maWxlKGZpbGVuYW1lKQor
ICAgIHBhdGhzID0gY2hhbmdlX2RpcmVjdG9yeShjaGVja291dF9yb290PWNoZWNrb3V0X3Jvb3Qs
IHBhdGhzPXBhdGhzKQogCisgICAgaWYgcGF0aHM6CisgICAgICAgIGZvciBwYXRoIGluIHBhdGhz
OgorICAgICAgICAgICAgc3R5bGVfY2hlY2tlci5jaGVja19maWxlKHBhdGgpCiAgICAgZWxzZToK
LSAgICAgICAgc2NtID0gU2ltcGxlU2NtKCkKLQotICAgICAgICBvcy5jaGRpcihzY20uY2hlY2tv
dXRfcm9vdCgpKQotCiAgICAgICAgIGlmIG9wdGlvbnMuZ2l0X2NvbW1pdDoKICAgICAgICAgICAg
IGNvbW1pdCA9IG9wdGlvbnMuZ2l0X2NvbW1pdAogICAgICAgICAgICAgaWYgJy4uJyBpbiBjb21t
aXQ6CkBAIC0xMDMsOSArMTEzLDkgQEAgZGVmIG1haW4oKToKICAgICAgICAgICAgICAgICBjb21t
aXQgPSBjb21taXRbOmNvbW1pdC5maW5kKCcuLicpXQogICAgICAgICAgICAgICAgIF9sb2cud2Fy
bigiUmFuZ2VzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciAtLWdpdC1jb21taXQuICIKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIkNoZWNraW5nIGFsbCBjaGFuZ2VzIHNpbmNlICVzLiIgJSBjb21t
aXQpCi0gICAgICAgICAgICBwYXRjaCA9IHNjbS5jcmVhdGVfcGF0Y2hfc2luY2VfbG9jYWxfY29t
bWl0KGNvbW1pdCkKKyAgICAgICAgICAgIHBhdGNoID0gY2hlY2tvdXQuY3JlYXRlX3BhdGNoX3Np
bmNlX2xvY2FsX2NvbW1pdChjb21taXQpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwYXRj
aCA9IHNjbS5jcmVhdGVfcGF0Y2goKQorICAgICAgICAgICAgcGF0Y2ggPSBjaGVja291dC5jcmVh
dGVfcGF0Y2goKQogICAgICAgICBzdHlsZV9jaGVja2VyLmNoZWNrX3BhdGNoKHBhdGNoKQogCiAg
ICAgZXJyb3JfY291bnQgPSBzdHlsZV9jaGVja2VyLmVycm9yX2NvdW50CmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKaW5kZXggM2U2OWY5Ni4uZjEyOTk3
NiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vy
LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpA
QCAtNTg2LDcgKzU4Niw5IEBAIGNsYXNzIFN0eWxlQ2hlY2tlcihvYmplY3QpOgogICAgICAgICAi
IiJDaGVjayBzdHlsZSBpbiB0aGUgZ2l2ZW4gZmlsZS4KIAogICAgICAgICBBcmdzOgotICAgICAg
ICAgIGZpbGVfcGF0aDogQSBzdHJpbmcgdGhhdCBpcyB0aGUgcGF0aCBvZiB0aGUgZmlsZSB0byBw
cm9jZXNzLgorICAgICAgICAgIGZpbGVfcGF0aDogVGhlIHBhdGggb2YgdGhlIGZpbGUgdG8gcHJv
Y2Vzcy4gIElmIHBvc3NpYmxlLCB0aGUgcGF0aAorICAgICAgICAgICAgICAgICAgICAgc2hvdWxk
IGJlIHJlbGF0aXZlIHRvIHRoZSBzb3VyY2Ugcm9vdC4gIE90aGVyd2lzZSwKKyAgICAgICAgICAg
ICAgICAgICAgIHBhdGgtc3BlY2lmaWMgbG9naWMgbWF5IG5vdCBiZWhhdmUgYXMgZXhwZWN0ZWQu
CiAgICAgICAgICAgaGFuZGxlX3N0eWxlX2Vycm9yOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVu
IGEgc3R5bGUgZXJyb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jY3Vycy4gVGhp
cyBwYXJhbWV0ZXIgaXMgbWVhbnQgZm9yIGludGVybmFsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1c2Ugd2l0aGluIHRoaXMgY2xhc3MuIERlZmF1bHRzIHRvIGEKQEAgLTU5Niw2ICs1
OTgsNyBAQCBjbGFzcyBTdHlsZUNoZWNrZXIob2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAg
ICAgIERlZmF1bHRzIHRvIHRoZSBmaWxlIHByb2Nlc3NpbmcgbWV0aG9kIG9mIHRoaXMgY2xhc3Mu
CiAKICAgICAgICAgIiIiCisgICAgICAgIF9sb2cuZGVidWcoIkNoZWNraW5nOiAiICsgZmlsZV9w
YXRoKQogICAgICAgICBpZiBoYW5kbGVfc3R5bGVfZXJyb3IgaXMgTm9uZToKICAgICAgICAgICAg
IGhhbmRsZV9zdHlsZV9lcnJvciA9IERlZmF1bHRTdHlsZUVycm9ySGFuZGxlcigKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uPXNlbGYuX2NvbmZpZ3Vy
YXRpb24sCkBAIC02MjEsOCArNjI0LDE1IEBAIGNsYXNzIFN0eWxlQ2hlY2tlcihvYmplY3QpOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVf
c3R5bGVfZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZlcmJvc2l0eSkKICAgICAgICAgaWYgcHJvY2Vzc29yIGlzIE5vbmU6CisgICAgICAg
ICAgICAjIERpc3BsYXkgYSB3YXJuaW5nIHNvIGFzIG5vdCB0byBnaXZlIGFuIGltcHJlc3Npb24g
dGhhdCB0aGlzCisgICAgICAgICAgICAjIHdhcyBjaGVja2VkLgorICAgICAgICAgICAgX2xvZy5p
bmZvKCdGaWxlIG5vdCBhIHJlY29nbml6ZWQgdHlwZSB0byBjaGVjay4gU2tpcHBpbmc6ICIlcyIn
CisgICAgICAgICAgICAgICAgICAgICAgJSBmaWxlX3BhdGgpCiAgICAgICAgICAgICByZXR1cm4K
IAorCisgICAgICAgIF9sb2cuZGVidWcoIlVzaW5nIGNsYXNzOiAiICsgcHJvY2Vzc29yLl9fY2xh
c3NfXy5fX25hbWVfXykKKwogICAgICAgICBwcm9jZXNzX2ZpbGUocHJvY2Vzc29yLCBmaWxlX3Bh
dGgsIGhhbmRsZV9zdHlsZV9lcnJvcikKIAogICAgIGRlZiBjaGVja19wYXRjaChzZWxmLCBwYXRj
aF9zdHJpbmcpOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHls
ZS9jaGVja2VyX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHls
ZS9jaGVja2VyX3VuaXR0ZXN0LnB5CmluZGV4IDY4ZGNmY2EuLmIzOWNlZWMgMTAwNzU1Ci0tLSBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weQor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3Qu
cHkKQEAgLTE3OSw3ICsxNzksOSBAQCBjbGFzcyBHbG9iYWxWYXJpYWJsZXNUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9vcHRp
b25zPWRlZmF1bHRfb3B0aW9ucykKICAgICAgICAgIyBObyBuZWVkIHRvIHRlc3QgdGhlIHJldHVy
biB2YWx1ZSBoZXJlIHNpbmNlIHdlIHRlc3QgcGFyc2UoKQogICAgICAgICAjIG9uIHZhbGlkIGFy
Z3VtZW50cyBlbHNld2hlcmUuCi0gICAgICAgIHBhcnNlci5wYXJzZShbXSkgIyBhcmd1bWVudHMg
dmFsaWQ6IG5vIGVycm9yIG9yIFN5c3RlbUV4aXQKKyAgICAgICAgIworICAgICAgICAjIFRoZSBk
ZWZhdWx0IG9wdGlvbnMgYXJlIHZhbGlkOiBubyBlcnJvciBvciBTeXN0ZW1FeGl0LgorICAgICAg
ICBwYXJzZXIucGFyc2UoYXJncz1bXSwgZm91bmRfY2hlY2tvdXQ9VHJ1ZSkKIAogICAgIGRlZiB0
ZXN0X3BhdGhfcnVsZXNfc3BlY2lmaWVyKHNlbGYpOgogICAgICAgICBhbGxfY2F0ZWdvcmllcyA9
IHNlbGYuX2FsbF9jYXRlZ29yaWVzKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvbWFpbi5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5
bGUvbWFpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2FkMjg0Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9tYWlu
LnB5CkBAIC0wLDAgKzEsMTc0IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25l
ayAoY2plcmRvbmVrQHdlYmtpdC5vcmcpCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworCitf
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworIyBUaGlzIGZ1bmN0aW9uIGlz
IGEgcmVwbGFjZW1lbnQgZm9yIG9zLnBhdGgucmVscGF0aCgpLCB3aGljaCBpcyBvbmx5CisjIGF2
YWlsYWJsZSBpbiBQeXRob24gMi42LiAgSXQgc2hvdWxkIGJlaGF2ZSBlc3NlbnRpYWxseSB0aGUg
c2FtZSBhcworIyBvcy5wYXRoLnJlbHBhdGgoKSwgZXhjZXB0IGZvciByZXR1cm5pbmcgTm9uZSBv
biBwYXRocyBub3QgY29udGFpbmVkCisjIGluIGFic19zdGFydF9wYXRoLgorZGVmIF9yZWxfcGF0
aChwYXRoLCBzdGFydF9wYXRoLCBvc19wYXRoX2Fic3BhdGg9Tm9uZSk6CisgICAgIiIiUmV0dXJu
IGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gc3RhcnQgcGF0aCwgb3IgTm9uZS4KKworICAg
IFJldHVybnMgTm9uZSBpZiB0aGUgcGF0aCBpcyBub3QgY29udGFpbmVkIGluIHRoZSBkaXJlY3Rv
cnkgc3RhcnRfcGF0aC4KKworICAgIEFyZ3M6CisgICAgICBwYXRoOiBBbiBhYnNvbHV0ZSBvciBy
ZWxhdGl2ZSBwYXRoIHRvIGNvbnZlcnQgdG8gYSByZWxhdGl2ZSBwYXRoLgorICAgICAgc3RhcnRf
cGF0aDogVGhlIHBhdGggcmVsYXRpdmUgdG8gd2hpY2ggdGhlIGdpdmVuIHBhdGggc2hvdWxkIGJl
CisgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQuCisgICAgICBvc19wYXRoX2Fic3BhdGg6IEEg
cmVwbGFjZW1lbnQgZnVuY3Rpb24gZm9yIHVuaXQgdGVzdGluZy4gIFRoaXMKKyAgICAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rpb24gc2hvdWxkIHN0cmlwIHRyYWlsaW5nIHNsYXNoZXMganVzdCBs
aWtlCisgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYWJzcGF0aCgpLiAgRGVmYXVsdHMg
dG8gb3MucGF0aC5hYnNwYXRoLgorCisgICAgIiIiCisgICAgaWYgb3NfcGF0aF9hYnNwYXRoIGlz
IE5vbmU6CisgICAgICAgIG9zX3BhdGhfYWJzcGF0aCA9IG9zLnBhdGguYWJzcGF0aAorCisgICAg
IyBDYWxsaW5nIG9zX3BhdGhfYWJzcGF0aCgpIGFsc28gcmVtb3ZlcyBhbnkgdHJhaWxpbmcgc2xh
c2hlcy4KKyAgICBzdGFydF9wYXRoID0gb3NfcGF0aF9hYnNwYXRoKHN0YXJ0X3BhdGgpCisgICAg
cGF0aCA9IG9zX3BhdGhfYWJzcGF0aChwYXRoKQorCisgICAgc2xhc2hfY2hhcnMgPSAiL1xcIgor
CisgICAgaWYgbm90IHBhdGgubG93ZXIoKS5zdGFydHN3aXRoKHN0YXJ0X3BhdGgubG93ZXIoKSk6
CisgICAgICAgICMgVGhlbiBwYXRoIGlzIG91dHNpZGUgdGhlIGRpcmVjdG9yeSBnaXZlbiBieSBz
dGFydF9wYXRoLgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgcmVsX3BhdGggPSBwYXRoW2xl
bihzdGFydF9wYXRoKTpdCisKKyAgICBpZiByZWxfcGF0aCBhbmQgcmVsX3BhdGhbMF0gbm90IGlu
IHNsYXNoX2NoYXJzOgorICAgICAgICAjIFRoZW4gd2UgYXJlIGluIHRoZSBjYXNlIHR5cGlmaWVk
IGJ5IHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKKyAgICAgICAgIworICAgICAgICAjIHN0YXJ0X3Bh
dGggPSAiL3RtcC9mb28iCisgICAgICAgICMgcGF0aCA9ICIvdG1wL2Zvb2JhciIKKyAgICAgICAg
IyByZWxfcGF0aCA9ICJiYXIiCisgICAgICAgIHJldHVybiBOb25lCisgICAgIyBPdGhlcndpc2Ug
cmVsX3BhdGggaXMgIiIgb3IgYmVnaW5zIHdpdGggYSBzbGFzaC4KKworICAgIHJlbF9wYXRoID0g
cmVsX3BhdGgubHN0cmlwKHNsYXNoX2NoYXJzKQorCisgICAgcmV0dXJuIHJlbF9wYXRoCisKKwor
ZGVmIGNoYW5nZV9kaXJlY3RvcnkoY2hlY2tvdXRfcm9vdCwgcGF0aHMsIG1vY2tfb3M9Tm9uZSk6
CisgICAgIiIiQ2hhbmdlIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgV2ViS2l0IGNoZWNr
b3V0IHJvb3QsIGlmIHBvc3NpYmxlLgorCisgICAgSWYgZXZlcnkgcGF0aCBpbiB0aGUgcGF0aHMg
cGFyYW1ldGVyIGlzIGJlbG93IHRoZSBjaGVja291dCByb290IChvciBpZgorICAgIHRoZSBwYXRo
cyBwYXJhbWV0ZXIgaXMgZW1wdHkgb3IgTm9uZSksIHRoaXMgbWV0aG9kIGNoYW5nZXMgdGhlIGN1
cnJlbnQKKyAgICB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgY2hlY2tvdXQgcm9vdCBhbmQgY29u
dmVydHMgdGhlIHBhdGhzIHBhcmFtZXRlcgorICAgIGFzIGRlc2NyaWJlZCBiZWxvdy4KKyAgICAg
ICAgVGhpcyBhbGxvd3MgdGhlIHBhdGhzIGJlaW5nIGNoZWNrZWQgdG8gYmUgZGlzcGxheWVkIHJl
bGF0aXZlIHRvIHRoZQorICAgIGNoZWNrb3V0IHJvb3QsIGFuZCBmb3IgcGF0aC1zcGVjaWZpYyBz
dHlsZSBjaGVja3MgdG8gd29yayBhcyBleHBlY3RlZC4KKyAgICBQYXRoLXNwZWNpZmljIGNoZWNr
cyBpbmNsdWRlIHdoZXRoZXIgZmlsZXMgc2hvdWxkIGJlIHNraXBwZWQsIHdoZXRoZXIKKyAgICBj
dXN0b20gc3R5bGUgcnVsZXMgc2hvdWxkIGFwcGx5IHRvIGNlcnRhaW4gZmlsZXMsIGV0Yy4KKyAg
ICAgICAgSWYgdGhlIGNoZWNrb3V0IHJvb3QgaXMgTm9uZSBvciB0aGUgZW1wdHkgc3RyaW5nLCB0
aGlzIG1ldGhvZCByZXR1cm5zCisgICAgdGhlIHBhdGhzIHBhcmFtZXRlciB1bmNoYW5nZWQuCisK
KyAgICBSZXR1cm5zOgorICAgICAgcGF0aHM6IEEgY29weSBvZiB0aGUgcGF0aHMgcGFyYW1ldGVy
IC0tIHBvc3NpYmx5IGNvbnZlcnRlZCwgYXMgZm9sbG93cy4KKyAgICAgICAgICAgICBJZiB0aGlz
IG1ldGhvZCBjaGFuZ2VkIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHRvIHRoZQorICAg
ICAgICAgICAgIGNoZWNrb3V0IHJvb3QsIHRoZW4gdGhlIGxpc3QgaXMgdGhlIHBhdGhzIHBhcmFt
ZXRlciBjb252ZXJ0ZWQgdG8KKyAgICAgICAgICAgICBub3JtYWxpemVkIHBhdGhzIHJlbGF0aXZl
IHRvIHRoZSBjaGVja291dCByb290LiAgT3RoZXJ3aXNlLCB0aGUKKyAgICAgICAgICAgICBwYXRo
cyBhcmUgbm90IGNvbnZlcnRlZC4KKworICAgIEFyZ3M6CisgICAgICBwYXRoczogQSBsaXN0IG9m
IHBhdGhzIHRvIHRoZSBmaWxlcyB0aGF0IHNob3VsZCBiZSBjaGVja2VkIGZvciBzdHlsZS4KKyAg
ICAgICAgICAgICBUaGlzIGFyZ3VtZW50IGNhbiBiZSBOb25lIG9yIHRoZSBlbXB0eSBsaXN0IGlm
IGEgZ2l0IGNvbW1pdAorICAgICAgICAgICAgIG9yIGFsbCBjaGFuZ2VzIHVuZGVyIHRoZSBjaGVj
a291dCByb290IHNob3VsZCBiZSBjaGVja2VkLgorICAgICAgY2hlY2tvdXRfcm9vdDogVGhlIHBh
dGggdG8gdGhlIHJvb3Qgb2YgdGhlIFdlYktpdCBjaGVja291dCwgb3IgTm9uZSBvcgorICAgICAg
ICAgICAgICAgICAgICAgdGhlIGVtcHR5IHN0cmluZyBpZiBubyBjaGVja291dCBjb3VsZCBiZSBk
ZXRlY3RlZC4KKyAgICAgIG1vY2tfb3M6IEEgcmVwbGFjZW1lbnQgbW9kdWxlIGZvciB1bml0IHRl
c3RpbmcuICBEZWZhdWx0cyB0byBvcy4KKworICAgICIiIgorICAgIG9zX21vZHVsZSA9IG9zIGlm
IG1vY2tfb3MgaXMgTm9uZSBlbHNlIG1vY2tfb3MKKworICAgIGlmIHBhdGhzIGlzIG5vdCBOb25l
OgorICAgICAgICBwYXRocyA9IGxpc3QocGF0aHMpCisKKyAgICBpZiBub3QgY2hlY2tvdXRfcm9v
dDoKKyAgICAgICAgaWYgbm90IHBhdGhzOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJU
aGUgcGF0aHMgcGFyYW1ldGVyIG11c3QgYmUgbm9uLWVtcHR5IGlmICIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAidGhlcmUgaXMgbm8gY2hlY2tvdXQgcm9vdC4iKQorCisgICAgICAgICMg
RklYTUU6IENvbnNpZGVyIHRyeWluZyB0byBkZXRlY3QgdGhlIGNoZWNrb3V0IHJvb3QgZm9yIGVh
Y2ggZmlsZQorICAgICAgICAjICAgICAgICBiZWluZyBjaGVja2VkIHJhdGhlciB0aGFuIG9ubHkg
dHJ5aW5nIHRvIGRldGVjdCB0aGUgY2hlY2tvdXQKKyAgICAgICAgIyAgICAgICAgcm9vdCBmb3Ig
dGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuICBUaGlzIHdvdWxkIGFsbG93CisgICAgICAg
ICMgICAgICAgIGZpbGVzIHRvIGJlIGNoZWNrZWQgY29ycmVjdGx5IGV2ZW4gaWYgdGhlIHNjcmlw
dCBpcyBiZWluZworICAgICAgICAjICAgICAgICBydW4gZnJvbSBvdXRzaWRlIGFueSBXZWJLaXQg
Y2hlY2tvdXQuCisgICAgICAgICMKKyAgICAgICAgIyAgICAgICAgTW9yZW92ZXIsIHRyeSB0byBm
aW5kIHRoZSAic291cmNlIHJvb3QiIGZvciBlYWNoIGZpbGUKKyAgICAgICAgIyAgICAgICAgdXNp
bmcgcGF0aC1iYXNlZCBoZXVyaXN0aWNzIHJhdGhlciB0aGFuIHVzaW5nIG9ubHkgdGhlCisgICAg
ICAgICMgICAgICAgIHByZXNlbmNlIG9mIGEgV2ViS2l0IGNoZWNrb3V0LiAgRm9yIGV4YW1wbGUs
IHdlIGNvdWxkCisgICAgICAgICMgICAgICAgIGV4YW1pbmUgcGFyZW50IGRpcmVjdG9yaWVzIHVu
dGlsIGEgZGlyZWN0b3J5IGlzIGZvdW5kCisgICAgICAgICMgICAgICAgIGNvbnRhaW5pbmcgSmF2
YVNjcmlwdENvcmUsIFdlYkNvcmUsIFdlYktpdCwgV2ViS2l0U2l0ZSwKKyAgICAgICAgIyAgICAg
ICAgYW5kIFdlYktpdFRvb2xzLgorICAgICAgICAjICAgICAgICAgICAgIFRoZW4gbG9nIGFuIElO
Rk8gbWVzc2FnZSBzYXlpbmcgdGhhdCBhIHNvdXJjZSByb290IG5vdAorICAgICAgICAjICAgICAg
ICBpbiBhIFdlYktpdCBjaGVja291dCB3YXMgZm91bmQuICBUaGlzIHdpbGwgYWxsb3cgdXMgdG8g
Y2hlY2sKKyAgICAgICAgIyAgICAgICAgdGhlIHN0eWxlIG9mIG5vbi1zY20gY29waWVzIG9mIHRo
ZSBzb3VyY2UgdHJlZSAoZS5nLgorICAgICAgICAjICAgICAgICBuaWdodGxpZXMpLgorICAgICAg
ICBfbG9nLndhcm4oIldlYktpdCBjaGVja291dCByb290IG5vdCBmb3VuZDpcbiIKKyAgICAgICAg
ICAgICAgICAgICIgIFBhdGgtZGVwZW5kZW50IHN0eWxlIGNoZWNrcyBtYXkgbm90IHdvcmsgY29y
cmVjdGx5LlxuIgorICAgICAgICAgICAgICAgICAgIiAgU2VlIHRoZSBoZWxwIGRvY3VtZW50YXRp
b24gZm9yIG1vcmUgaW5mby4iKQorCisgICAgICAgIHJldHVybiBwYXRocworCisgICAgaWYgcGF0
aHM6CisgICAgICAgICMgVGhlbiB0cnkgY29udmVydGluZyBhbGwgb2YgdGhlIHBhdGhzIHRvIHBh
dGhzIHJlbGF0aXZlIHRvCisgICAgICAgICMgdGhlIGNoZWNrb3V0IHJvb3QuCisgICAgICAgIHJl
bF9wYXRocyA9IFtdCisgICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICAgICAgcmVs
X3BhdGggPSBfcmVsX3BhdGgocGF0aCwgY2hlY2tvdXRfcm9vdCkKKyAgICAgICAgICAgIGlmIHJl
bF9wYXRoIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBUaGVuIHRoZSBwYXRoIGlzIG5vdCBi
ZWxvdyB0aGUgY2hlY2tvdXQgcm9vdC4gIFNpbmNlIGFsbAorICAgICAgICAgICAgICAgICMgcGF0
aHMgc2hvdWxkIGJlIGludGVycHJldGVkIHJlbGF0aXZlIHRvIHRoZSBzYW1lIHJvb3QsCisgICAg
ICAgICAgICAgICAgIyBkbyBub3QgaW50ZXJwcmV0IGFueSBvZiB0aGUgcGF0aHMgYXMgcmVsYXRp
dmUgdG8gdGhlCisgICAgICAgICAgICAgICAgIyBjaGVja291dCByb290LiAgSW50ZXJwcmV0IGFs
bCBvZiB0aGVtIHJlbGF0aXZlIHRvIHRoZQorICAgICAgICAgICAgICAgICMgY3VycmVudCB3b3Jr
aW5nIGRpcmVjdG9yeSwgYW5kIGRvIG5vdCBjaGFuZ2UgdGhlIGN1cnJlbnQKKyAgICAgICAgICAg
ICAgICAjIHdvcmtpbmcgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIF9sb2cud2FybigiXAor
UGF0aC1kZXBlbmRlbnQgc3R5bGUgY2hlY2tzIG1heSBub3Qgd29yayBjb3JyZWN0bHk6XG5cCitc
blwKKyAgT25lIG9mIHRoZSBnaXZlbiBwYXRocyBpcyBvdXRzaWRlIHRoZSBXZWJLaXQgY2hlY2tv
dXQgb2YgdGhlIGN1cnJlbnRcblwKKyAgd29ya2luZyBkaXJlY3Rvcnk6XG5cCitcblwKKyAgICBQ
YXRoOiAlc1xuXAorICAgIENoZWNrb3V0IHJvb3Q6ICVzXG5cCitcblwKKyAgUGFzcyBvbmx5IGZp
bGVzIGJlbG93IHRoZSBjaGVja291dCByb290IHRvIGVuc3VyZSBjb3JyZWN0IHJlc3VsdHMuXG5c
CisgIFNlZSB0aGUgaGVscCBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm8uXG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICUgKHBhdGgsIGNoZWNrb3V0X3Jvb3QpKQorCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhdGhzCisgICAgICAgICAgICByZWxfcGF0aHMuYXBwZW5kKHJlbF9wYXRo
KQorICAgICAgICAjIElmIHdlIGdvdCBoZXJlLCB0aGUgY29udmVyc2lvbiB3YXMgc3VjY2Vzc2Z1
bC4KKyAgICAgICAgcGF0aHMgPSByZWxfcGF0aHMKKworICAgIF9sb2cuZGVidWcoIkNoYW5naW5n
IHRvIGNoZWNrb3V0IHJvb3Q6ICIgKyBjaGVja291dF9yb290KQorICAgIG9zX21vZHVsZS5jaGRp
cihjaGVja291dF9yb290KQorCisgICAgcmV0dXJuIHBhdGhzCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL21haW5fdW5pdHRlc3QucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL21haW5fdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ1ODIwZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvbWFpbl91bml0dGVzdC5weQpAQCAtMCwwICsxLDE1
OCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNqZXJkb25la0B3ZWJr
aXQub3JnKQorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJV
bml0IHRlc3RzIGZvciBtYWluLnB5LiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAor
Citmcm9tIG1haW4gaW1wb3J0IF9yZWxfcGF0aAorZnJvbSBtYWluIGltcG9ydCBjaGFuZ2VfZGly
ZWN0b3J5Citmcm9tIHdlYmtpdHB5LnN0eWxlX3JlZmVyZW5jZXMgaW1wb3J0IExvZ1Rlc3RpbmcK
KworCisjIE1ha2Ugc3VyZSB0aGUgdGVzdHMgaW4gdGhpcyBjbGFzcyBhcmUgcGxhdGZvcm0gaW5k
ZXBlbmRlbnQuCitjbGFzcyBSZWxQYXRoVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAi
IiJUZXN0cyBfcmVsX3BhdGgoKS4iIiIKKworICAgIG9zX3BhdGhfYWJzcGF0aCA9IGxhbWJkYSBz
ZWxmLCBwYXRoOiBwYXRoCisKKyAgICBkZWYgX3JlbF9wYXRoKHNlbGYsIHBhdGgsIGFic19zdGFy
dF9wYXRoKToKKyAgICAgICAgcmV0dXJuIF9yZWxfcGF0aChwYXRoLCBhYnNfc3RhcnRfcGF0aCwg
c2VsZi5vc19wYXRoX2Fic3BhdGgpCisKKyAgICBkZWYgdGVzdF9zYW1lX3BhdGgoc2VsZik6Cisg
ICAgICAgIHJlbF9wYXRoID0gc2VsZi5fcmVsX3BhdGgoIldlYktpdCIsICJXZWJLaXQiKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhyZWxfcGF0aCwgIiIpCisKKyAgICBkZWYgdGVzdF9sb25n
X3JlbF9wYXRoKHNlbGYpOgorICAgICAgICBzdGFydF9wYXRoID0gIldlYktpdCIKKyAgICAgICAg
ZXhwZWN0ZWRfcmVsX3BhdGggPSBvcy5wYXRoLmpvaW4oInRlc3QiLCAiRm9vLnR4dCIpCisgICAg
ICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc3RhcnRfcGF0aCwgZXhwZWN0ZWRfcmVsX3BhdGgpCisK
KyAgICAgICAgYWN0dWFsX3JlbF9wYXRoID0gc2VsZi5fcmVsX3BhdGgocGF0aCwgc3RhcnRfcGF0
aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRfcmVsX3BhdGgsIGFjdHVhbF9y
ZWxfcGF0aCkKKworICAgIGRlZiB0ZXN0X25vbmVfcmVsX3BhdGgoc2VsZik6CisgICAgICAgICIi
IlRlc3QgX3JlbF9wYXRoKCkgd2l0aCBOb25lIHJldHVybiB2YWx1ZS4iIiIKKyAgICAgICAgc3Rh
cnRfcGF0aCA9ICJXZWJLaXQiCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oIm90aGVyX2Rp
ciIsICJmb28udHh0IikKKworICAgICAgICByZWxfcGF0aCA9IHNlbGYuX3JlbF9wYXRoKHBhdGgs
IHN0YXJ0X3BhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWxfcGF0aCBpcyBOb25lKQor
CisgICAgICAgIHJlbF9wYXRoID0gc2VsZi5fcmVsX3BhdGgoIldlYktpdFRvb2xzIiwgIldlYktp
dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWxfcGF0aCBpcyBOb25lKQorCisKK2NsYXNz
IENoYW5nZURpcmVjdG9yeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIiIiVGVzdHMg
Y2hhbmdlX2RpcmVjdG9yeSgpLiIiIgorCisgICAgX29yaWdpbmFsX2RpcmVjdG9yeSA9ICIvb3Jp
Z2luYWwiCisgICAgX2NoZWNrb3V0X3Jvb3QgPSAiL1dlYktpdCIKKworICAgIGNsYXNzIF9Nb2Nr
T3Mob2JqZWN0KToKKworICAgICAgICAiIiJBIG1vY2sgb3MgbW9kdWxlIGZvciB1bml0IHRlc3Rp
bmcuIiIiCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfY2FzZSk6CisgICAgICAg
ICAgICBzZWxmLl90ZXN0X2Nhc2UgPSB0ZXN0X2Nhc2UKKyAgICAgICAgICAgIHNlbGYuX2N1cnJl
bnRfZGlyZWN0b3J5ID0gXAorICAgICAgICAgICAgICAgIENoYW5nZURpcmVjdG9yeVRlc3QuX29y
aWdpbmFsX2RpcmVjdG9yeQorCisgICAgICAgIGRlZiBjaGRpcihzZWxmLCBjdXJyZW50X2RpcmVj
dG9yeSk6CisgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2RpcmVjdG9yeSA9IGN1cnJlbnRfZGly
ZWN0b3J5CisKKyAgICAgICAgZGVmIGFzc2VydEN1cnJlbnREaXJlY3Rvcnkoc2VsZiwgZXhwZWN0
ZWRfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfY2FzZS5hc3NlcnRFcXVhbHMo
ZXhwZWN0ZWRfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9jdXJyZW50X2RpcmVjdG9yeSkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAg
ICAgICAgc2VsZi5fbG9nID0gTG9nVGVzdGluZy5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLl9t
b2NrX29zID0gc2VsZi5fTW9ja09zKHNlbGYpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6Cisg
ICAgICAgIHNlbGYuX2xvZy50ZWFyRG93bigpCisKKyAgICAjIFRoaXMgbWV0aG9kIGlzIGEgY29u
dmVuaWVudCB3cmFwcGVyIGZvciBjaGFuZ2Vfd29ya2luZ19kaXJlY3RvcnkoKSB0aGF0CisgICAg
IyBwYXNzZXMgdGhlIG1vY2tfb3MgZm9yIHRoaXMgdW5pdCB0ZXN0aW5nIGNsYXNzLgorICAgIGRl
ZiBfY2hhbmdlX2RpcmVjdG9yeShzZWxmLCBwYXRocywgY2hlY2tvdXRfcm9vdCk6CisgICAgICAg
IHJldHVybiBjaGFuZ2VfZGlyZWN0b3J5KHBhdGhzPXBhdGhzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGVja291dF9yb290PWNoZWNrb3V0X3Jvb3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1vY2tfb3M9c2VsZi5fbW9ja19vcykKKworICAgIGRlZiBfYXNz
ZXJ0X3Jlc3VsdChzZWxmLCBhY3R1YWxfcmV0dXJuX3ZhbHVlLCBleHBlY3RlZF9yZXR1cm5fdmFs
dWUsCisgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2xvZ19tZXNzYWdlcywgZXhwZWN0
ZWRfY3VycmVudF9kaXJlY3RvcnkpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhY3R1YWxf
cmV0dXJuX3ZhbHVlLCBleHBlY3RlZF9yZXR1cm5fdmFsdWUpCisgICAgICAgIHNlbGYuX2xvZy5h
c3NlcnRNZXNzYWdlcyhleHBlY3RlZF9sb2dfbWVzc2FnZXMpCisgICAgICAgIHNlbGYuX21vY2tf
b3MuYXNzZXJ0Q3VycmVudERpcmVjdG9yeShleHBlY3RlZF9jdXJyZW50X2RpcmVjdG9yeSkKKwor
ICAgIGRlZiB0ZXN0X2NoZWNrb3V0X3Jvb3Rfbm9uZV9wYXRoc19ub25lKHNlbGYpOgorICAgICAg
ICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIHNlbGYuX2NoYW5nZV9kaXJlY3RvcnksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrb3V0X3Jvb3Q9Tm9uZSwgcGF0aHM9Tm9uZSkK
KyAgICAgICAgc2VsZi5fbG9nLmFzc2VydE1lc3NhZ2VzKFtdKQorICAgICAgICBzZWxmLl9tb2Nr
X29zLmFzc2VydEN1cnJlbnREaXJlY3Rvcnkoc2VsZi5fb3JpZ2luYWxfZGlyZWN0b3J5KQorCisg
ICAgZGVmIHRlc3RfY2hlY2tvdXRfcm9vdF9ub25lKHNlbGYpOgorICAgICAgICBwYXRocyA9IHNl
bGYuX2NoYW5nZV9kaXJlY3RvcnkoY2hlY2tvdXRfcm9vdD1Ob25lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHM9WyJwYXRoMSJdKQorICAgICAgICBsb2dfbWVz
c2FnZXMgPSBbIiIiV0FSTklORzogV2ViS2l0IGNoZWNrb3V0IHJvb3Qgbm90IGZvdW5kOgorICBQ
YXRoLWRlcGVuZGVudCBzdHlsZSBjaGVja3MgbWF5IG5vdCB3b3JrIGNvcnJlY3RseS4KKyAgU2Vl
IHRoZSBoZWxwIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mby4KKyIiIl0KKyAgICAgICAgc2Vs
Zi5fYXNzZXJ0X3Jlc3VsdChwYXRocywgWyJwYXRoMSJdLCBsb2dfbWVzc2FnZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3JpZ2luYWxfZGlyZWN0b3J5KQorCisgICAgZGVm
IHRlc3RfcGF0aHNfbm9uZShzZWxmKToKKyAgICAgICAgcGF0aHMgPSBzZWxmLl9jaGFuZ2VfZGly
ZWN0b3J5KGNoZWNrb3V0X3Jvb3Q9c2VsZi5fY2hlY2tvdXRfcm9vdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzPU5vbmUpCisgICAgICAgIHNlbGYuX2Fzc2Vy
dF9yZXN1bHQocGF0aHMsIE5vbmUsIFtdLCBzZWxmLl9jaGVja291dF9yb290KQorCisgICAgZGVm
IHRlc3RfcGF0aHNfY29udmVydGlibGUoc2VsZik6CisgICAgICAgIHBhdGhzPVsiL1dlYktpdC9m
b28xLnR4dCIsCisgICAgICAgICAgICAgICAiL1dlYktpdC9mb28yLnR4dCJdCisgICAgICAgIHBh
dGhzID0gc2VsZi5fY2hhbmdlX2RpcmVjdG9yeShjaGVja291dF9yb290PXNlbGYuX2NoZWNrb3V0
X3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRocz1wYXRo
cykKKyAgICAgICAgc2VsZi5fYXNzZXJ0X3Jlc3VsdChwYXRocywgWyJmb28xLnR4dCIsICJmb28y
LnR4dCJdLCBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jaGVja291dF9y
b290KQorCisgICAgZGVmIHRlc3Rfd2l0aF9zY21fcGF0aHNfdW5jb252ZXJ0aWJsZShzZWxmKToK
KyAgICAgICAgcGF0aHM9WyIvV2ViS2l0L2ZvbzEudHh0IiwKKyAgICAgICAgICAgICAgICIvb3V0
c2lkZS9mb28yLnR4dCJdCisgICAgICAgIHBhdGhzID0gc2VsZi5fY2hhbmdlX2RpcmVjdG9yeShj
aGVja291dF9yb290PXNlbGYuX2NoZWNrb3V0X3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXRocz1wYXRocykKKyAgICAgICAgbG9nX21lc3NhZ2VzID0gWwor
IiIiV0FSTklORzogUGF0aC1kZXBlbmRlbnQgc3R5bGUgY2hlY2tzIG1heSBub3Qgd29yayBjb3Jy
ZWN0bHk6CisKKyAgT25lIG9mIHRoZSBnaXZlbiBwYXRocyBpcyBvdXRzaWRlIHRoZSBXZWJLaXQg
Y2hlY2tvdXQgb2YgdGhlIGN1cnJlbnQKKyAgd29ya2luZyBkaXJlY3Rvcnk6CisKKyAgICBQYXRo
OiAvb3V0c2lkZS9mb28yLnR4dAorICAgIENoZWNrb3V0IHJvb3Q6IC9XZWJLaXQKKworICBQYXNz
IG9ubHkgZmlsZXMgYmVsb3cgdGhlIGNoZWNrb3V0IHJvb3QgdG8gZW5zdXJlIGNvcnJlY3QgcmVz
dWx0cy4KKyAgU2VlIHRoZSBoZWxwIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mby4KKworIiIi
XQorICAgICAgICBzZWxmLl9hc3NlcnRfcmVzdWx0KHBhdGhzLCBwYXRocywgbG9nX21lc3NhZ2Vz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29yaWdpbmFsX2RpcmVjdG9yeSkK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvb3B0cGFyc2Vy
LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9vcHRwYXJzZXIucHkKaW5k
ZXggZmM0MGE0My4uZGUxMWUxMCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9vcHRwYXJzZXIucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS9vcHRwYXJzZXIucHkKQEAgLTIzLDEyICsyMywxNSBAQAogIiIiU3VwcG9ydHMgdGhl
IHBhcnNpbmcgb2YgY29tbWFuZC1saW5lIG9wdGlvbnMgZm9yIGNoZWNrLXdlYmtpdC1zdHlsZS4i
IiIKIAogaW1wb3J0IGdldG9wdAoraW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcy5wYXRoCiBpbXBv
cnQgc3lzCiAKIGZyb20gZmlsdGVyIGltcG9ydCB2YWxpZGF0ZV9maWx0ZXJfcnVsZXMKICMgVGhp
cyBtb2R1bGUgc2hvdWxkIG5vdCBpbXBvcnQgYW55dGhpbmcgZnJvbSBjaGVja2VyLnB5LgogCitf
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKIAogZGVmIF9jcmVhdGVfdXNhZ2Uo
ZGVmYXVsdF9vcHRpb25zKToKICAgICAiIiJSZXR1cm4gdGhlIHVzYWdlIHN0cmluZyB0byBkaXNw
bGF5IGZvciBjb21tYW5kIGhlbHAuCkBAIC05OCw2ICsxMDEsMzggQEAgU3ludGF4OiAlKHByb2dy
YW1fbmFtZSlzIFstLWRlYnVnXSBbLS12ZXJib3NlPSNdIFstLWdpdC1jb21taXQ9PFNpbmdsZUNv
bW1pdD5dCiAgICAgICAlKHByb2dyYW1fbmFtZSlzLCBhbG9uZyB3aXRoIHdoaWNoIGFyZSBlbmFi
bGVkIGJ5IGRlZmF1bHQsIHBhc3MKICAgICAgIHRoZSBlbXB0eSBmaWx0ZXIgYXMgZm9sbG93czoK
ICAgICAgICAgIC0tZmlsdGVyPQorCitQYXRoIGNvbnNpZGVyYXRpb25zOgorCisgIENlcnRhaW4g
c3R5bGUtY2hlY2tpbmcgYmVoYXZpb3IgZGVwZW5kcyBvbiB0aGUgcGF0aHMgcmVsYXRpdmUgdG8K
KyAgdGhlIFdlYktpdCBzb3VyY2Ugcm9vdCBvZiB0aGUgZmlsZXMgYmVpbmcgY2hlY2tlZC4gIEZv
ciBleGFtcGxlLAorICBjZXJ0YWluIHR5cGVzIG9mIGVycm9ycyBtYXkgYmUgaGFuZGxlZCBkaWZm
ZXJlbnRseSBmb3IgZmlsZXMgaW4KKyAgV2ViS2l0L2d0ay93ZWJraXQvIChlLmcuIGJ5IHN1cHBy
ZXNzaW5nICJyZWFkYWJpbGl0eS9uYW1pbmciIGVycm9ycworICBmb3IgZmlsZXMgaW4gdGhpcyBk
aXJlY3RvcnkpLgorCisgIENvbnNlcXVlbnRseSwgaWYgdGhlIHBhdGggcmVsYXRpdmUgdG8gdGhl
IHNvdXJjZSByb290IGNhbm5vdCBiZQorICBkZXRlcm1pbmVkIGZvciBhIGZpbGUgYmVpbmcgY2hl
Y2tlZCwgdGhlbiBzdHlsZSBjaGVja2luZyBtYXkgbm90CisgIHdvcmsgY29ycmVjdGx5IGZvciB0
aGF0IGZpbGUuICBUaGlzIGNhbiBvY2N1ciwgZm9yIGV4YW1wbGUsIGlmIG5vCisgIFdlYktpdCBj
aGVja291dCBjYW4gYmUgZm91bmQsIG9yIGlmIHRoZSBzb3VyY2Ugcm9vdCBjYW4gYmUgZGV0ZWN0
ZWQsCisgIGJ1dCBvbmUgb2YgdGhlIGZpbGVzIGJlaW5nIGNoZWNrZWQgbGllcyBvdXRzaWRlIHRo
ZSBzb3VyY2UgdHJlZS4KKworICBJZiBhIFdlYktpdCBjaGVja291dCBjYW4gYmUgZGV0ZWN0ZWQg
YW5kIGFsbCBmaWxlcyBiZWluZyBjaGVja2VkCisgIGFyZSBpbiB0aGUgc291cmNlIHRyZWUsIHRo
ZW4gYWxsIHBhdGhzIHdpbGwgYXV0b21hdGljYWxseSBiZQorICBjb252ZXJ0ZWQgdG8gcGF0aHMg
cmVsYXRpdmUgdG8gdGhlIHNvdXJjZSByb290IHByaW9yIHRvIGNoZWNraW5nLgorICBUaGlzIGlz
IGFsc28gdXNlZnVsIGZvciBkaXNwbGF5IHB1cnBvc2VzLgorCisgIEN1cnJlbnRseSwgdGhpcyBj
b21tYW5kIGNhbiBkZXRlY3QgdGhlIHNvdXJjZSByb290IG9ubHkgaWYgdGhlCisgIGNvbW1hbmQg
aXMgcnVuIGZyb20gd2l0aGluIGEgV2ViS2l0IGNoZWNrb3V0IChpLmUuIGlmIHRoZSBjdXJyZW50
CisgIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGlzIGJlbG93IHRoZSByb290IG9mIGEgY2hlY2tvdXQp
LiAgSW4KKyAgcGFydGljdWxhciwgaXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIHJ1biB0aGlzIHNj
cmlwdCBmcm9tIGEKKyAgZGlyZWN0b3J5IG91dHNpZGUgYSBjaGVja291dC4KKworICBSdW5uaW5n
IHRoaXMgc2NyaXB0IGZyb20gYSB0b3AtbGV2ZWwgV2ViS2l0IHNvdXJjZSBkaXJlY3RvcnkgYW5k
CisgIGNoZWNraW5nIG9ubHkgZmlsZXMgaW4gdGhlIHNvdXJjZSB0cmVlIHdpbGwgZW5zdXJlIHRo
YXQgYWxsIHN0eWxlCisgIGNoZWNraW5nIGJlaGF2ZXMgY29ycmVjdGx5IC0tIHdoZXRoZXIgb3Ig
bm90IGEgY2hlY2tvdXQgY2FuIGJlCisgIGRldGVjdGVkLiAgVGhpcyBpcyBiZWNhdXNlIGFsbCBm
aWxlIHBhdGhzIHdpbGwgYWxyZWFkeSBiZSByZWxhdGl2ZQorICB0byB0aGUgc291cmNlIHJvb3Qg
YW5kIHNvIHdpbGwgbm90IG5lZWQgdG8gYmUgY29udmVydGVkLgorCiAiIiIgJSB7J3Byb2dyYW1f
bmFtZSc6IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pLAogICAgICAgICdkZWZhdWx0X3Zl
cmJvc2l0eSc6IGRlZmF1bHRfb3B0aW9ucy52ZXJib3NpdHksCiAgICAgICAgJ2RlZmF1bHRfb3V0
cHV0X2Zvcm1hdCc6IGRlZmF1bHRfb3B0aW9ucy5vdXRwdXRfZm9ybWF0fQpAQCAtMzMxLDE2ICsz
NjYsMTggQEAgY2xhc3MgQXJndW1lbnRQYXJzZXIob2JqZWN0KToKICAgICAgICAgICAgIGZpbHRl
cnMuYXBwZW5kKGZpbHRlcikKICAgICAgICAgcmV0dXJuIGZpbHRlcnMKIAotICAgIGRlZiBwYXJz
ZShzZWxmLCBhcmdzKToKKyAgICBkZWYgcGFyc2Uoc2VsZiwgYXJncywgZm91bmRfY2hlY2tvdXQp
OgogICAgICAgICAiIiJQYXJzZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byBjaGVjay13
ZWJraXQtc3R5bGUuCiAKICAgICAgICAgQXJnczoKICAgICAgICAgICBhcmdzOiBBIGxpc3Qgb2Yg
Y29tbWFuZC1saW5lIGFyZ3VtZW50cyBhcyByZXR1cm5lZCBieSBzeXMuYXJndlsxOl0uCisgICAg
ICAgICAgZm91bmRfY2hlY2tvdXQ6IEEgYm9vbGVhbiB2YWx1ZSBvZiB3aGV0aGVyIHRoZSBjdXJy
ZW50IHdvcmtpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHdhcyBmb3Vu
ZCB0byBiZSBpbnNpZGUgYSBXZWJLaXQgY2hlY2tvdXQuCiAKICAgICAgICAgUmV0dXJuczoKLSAg
ICAgICAgICBBIHR1cGxlIG9mIChmaWxlbmFtZXMsIG9wdGlvbnMpCisgICAgICAgICAgQSB0dXBs
ZSBvZiAocGF0aHMsIG9wdGlvbnMpCiAKLSAgICAgICAgICBmaWxlbmFtZXM6IFRoZSBsaXN0IG9m
IGZpbGVuYW1lcyB0byBjaGVjay4KKyAgICAgICAgICBwYXRoczogVGhlIGxpc3Qgb2YgcGF0aHMg
dG8gY2hlY2suCiAgICAgICAgICAgb3B0aW9uczogQSBDb21tYW5kT3B0aW9uVmFsdWVzIGluc3Rh
bmNlLgogCiAgICAgICAgICIiIgpAQCAtMzUzLDcgKzM5MCw3IEBAIGNsYXNzIEFyZ3VtZW50UGFy
c2VyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICd2ZXJib3NlPSddCiAKICAgICAgICAgdHJ5
OgotICAgICAgICAgICAgKG9wdHMsIGZpbGVuYW1lcykgPSBnZXRvcHQuZ2V0b3B0KGFyZ3MsICcn
LCBmbGFncykKKyAgICAgICAgICAgIChvcHRzLCBwYXRocykgPSBnZXRvcHQuZ2V0b3B0KGFyZ3Ms
ICcnLCBmbGFncykKICAgICAgICAgZXhjZXB0IGdldG9wdC5HZXRvcHRFcnJvciwgZXJyOgogICAg
ICAgICAgICAgIyBGSVhNRTogU2V0dGxlIG9uIGFuIGVycm9yIGhhbmRsaW5nIGFwcHJvYWNoOiBj
b21lIHVwCiAgICAgICAgICAgICAjICAgICAgICB3aXRoIGEgY29uc2lzdGVudCBndWlkZWxpbmUg
YXMgdG8gd2hlbiBhbmQgd2hldGhlcgpAQCAtMzg1LDcgKzQyMiwxMyBAQCBjbGFzcyBBcmd1bWVu
dFBhcnNlcihvYmplY3QpOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFs
aWQgb3B0aW9uOiAiJXMiJyAlIG9wdCkKIAogICAgICAgICAjIENoZWNrIHZhbGlkaXR5IG9mIHJl
c3VsdGluZyB2YWx1ZXMuCi0gICAgICAgIGlmIGZpbGVuYW1lcyBhbmQgKGdpdF9jb21taXQgIT0g
Tm9uZSk6CisgICAgICAgIGlmIG5vdCBmb3VuZF9jaGVja291dCBhbmQgbm90IHBhdGhzOgorICAg
ICAgICAgICAgX2xvZy5lcnJvcigiV2ViS2l0IGNoZWNrb3V0IG5vdCBmb3VuZDogWW91IG11c3Qg
cnVuIHRoaXMgc2NyaXB0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgImZyb20gaW5zaWRlIGEg
V2ViS2l0IGNoZWNrb3V0IGlmIHlvdSBhcmUgbm90IHBhc3NpbmcgIgorICAgICAgICAgICAgICAg
ICAgICAgICAic3BlY2lmaWMgcGF0aHMgdG8gY2hlY2suIikKKyAgICAgICAgICAgIHN5cy5leGl0
KDEpCisKKyAgICAgICAgaWYgcGF0aHMgYW5kIChnaXRfY29tbWl0ICE9IE5vbmUpOgogICAgICAg
ICAgICAgc2VsZi5fZXhpdF93aXRoX3VzYWdlKCdJdCBpcyBub3QgcG9zc2libGUgdG8gY2hlY2sg
ZmlsZXMgYW5kIGEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGVjaWZp
YyBjb21taXQgYXQgdGhlIHNhbWUgdGltZS4nKQogCkBAIC00MDcsNSArNDUwLDUgQEAgY2xhc3Mg
QXJndW1lbnRQYXJzZXIob2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cHV0X2Zvcm1hdD1vdXRwdXRfZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2ZXJib3NpdHk9dmVyYm9zaXR5KQogCi0gICAgICAgIHJldHVybiAo
ZmlsZW5hbWVzLCBvcHRpb25zKQorICAgICAgICByZXR1cm4gKHBhdGhzLCBvcHRpb25zKQogCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL29wdHBhcnNlcl91
bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvb3B0cGFyc2Vy
X3VuaXR0ZXN0LnB5CmluZGV4IDYxYTU0OGUuLjIxZTYxZWQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvb3B0cGFyc2VyX3VuaXR0ZXN0LnB5CisrKyBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvb3B0cGFyc2VyX3VuaXR0ZXN0LnB5CkBA
IC0yOSw2ICsyOSw3IEBAIGZyb20gb3B0cGFyc2VyIGltcG9ydCBBcmd1bWVudFBhcnNlcgogZnJv
bSBvcHRwYXJzZXIgaW1wb3J0IEFyZ3VtZW50UHJpbnRlcgogZnJvbSBvcHRwYXJzZXIgaW1wb3J0
IENvbW1hbmRPcHRpb25WYWx1ZXMgYXMgUHJvY2Vzc29yT3B0aW9ucwogZnJvbSBvcHRwYXJzZXIg
aW1wb3J0IERlZmF1bHRDb21tYW5kT3B0aW9uVmFsdWVzCitmcm9tIHdlYmtpdHB5LnN0eWxlX3Jl
ZmVyZW5jZXMgaW1wb3J0IExvZ1Rlc3RpbmcKIAogCiBjbGFzcyBDcmVhdGVVc2FnZVRlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgpAQCAtNzUsOSArNzYsMjAgQEAgY2xhc3MgQXJndW1lbnRQYXJzZXJU
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICIiIlRlc3QgdGhlIEFyZ3VtZW50UGFyc2Vy
IGNsYXNzLiIiIgogCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl9sb2cgPSBM
b2dUZXN0aW5nLnNldFVwKHNlbGYpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAg
IHNlbGYuX2xvZy50ZWFyRG93bigpCisKICAgICBkZWYgX3BhcnNlKHNlbGYpOgogICAgICAgICAi
IiJSZXR1cm4gYSBkZWZhdWx0IHBhcnNlKCkgZnVuY3Rpb24gZm9yIHRlc3RpbmcuIiIiCi0gICAg
ICAgIHJldHVybiBzZWxmLl9jcmVhdGVfcGFyc2VyKCkucGFyc2UKKyAgICAgICAgIyBXZSB3aWxs
IHRlc3QgZm91bmRfc2NtIEZhbHNlIHNlcGFyYXRlbHkuCisgICAgICAgIGRlZiBwYXJzZShhcmdz
LCBmb3VuZF9zY209VHJ1ZSk6CisgICAgICAgICAgICBwYXJzZXIgPSBzZWxmLl9jcmVhdGVfcGFy
c2VyKCkKKyAgICAgICAgICAgIHJldHVybiBwYXJzZXIucGFyc2UoYXJncywgZm91bmRfc2NtKQor
CisgICAgICAgIHJldHVybiBwYXJzZQogCiAgICAgZGVmIF9jcmVhdGVfZGVmYXVsdHMoc2VsZik6
CiAgICAgICAgICIiIlJldHVybiBhIERlZmF1bHRDb21tYW5kT3B0aW9uVmFsdWVzIGluc3RhbmNl
IGZvciB0ZXN0aW5nLiIiIgpAQCAtMTMyLDYgKzE0NCwxMyBAQCBjbGFzcyBBcmd1bWVudFBhcnNl
clRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAjIFBhc3MgZmlsZXMgYW5kIGdpdC1j
b21taXQgYXQgdGhlIHNhbWUgdGltZS4KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVt
RXhpdCwgcGFyc2UsIFsnLS1naXQtY29tbWl0PScsICdmaWxlLnR4dCddKQogCisgICAgICAgICMg
UGF0aHMgbXVzdCBiZSBwYXNzZWQgd2hlbiBmb3VuZF9zY20gaXMgRmFsc2UuCisgICAgICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQsIHBhcnNlLCBbXSwgZm91bmRfc2NtPUZhbHNlKQor
ICAgICAgICBtZXNzYWdlcyA9IFsiRVJST1I6IFdlYktpdCBjaGVja291dCBub3QgZm91bmQ6IFlv
dSBtdXN0IHJ1biB0aGlzICIKKyAgICAgICAgICAgICAgICAgICAgInNjcmlwdCBmcm9tIGluc2lk
ZSBhIFdlYktpdCBjaGVja291dCBpZiB5b3UgYXJlIG5vdCAiCisgICAgICAgICAgICAgICAgICAg
ICJwYXNzaW5nIHNwZWNpZmljIHBhdGhzIHRvIGNoZWNrLlxuIl0KKyAgICAgICAgc2VsZi5fbG9n
LmFzc2VydE1lc3NhZ2VzKG1lc3NhZ2VzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0
ZW1FeGl0LCBwYXJzZSwgWyctLXZlcmJvc2U9MyddLCBmb3VuZF9zY209RmFsc2UpCiAKICAgICBk
ZWYgdGVzdF9wYXJzZV9kZWZhdWx0X2FyZ3VtZW50cyhzZWxmKToKICAgICAgICAgcGFyc2UgPSBz
ZWxmLl9wYXJzZSgpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL3VuaXR0ZXN0cy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvdW5p
dHRlc3RzLnB5CmluZGV4IGQyYjQ5NjYuLjlhMDAwNTQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvdW5pdHRlc3RzLnB5CisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3R5bGUvdW5pdHRlc3RzLnB5CkBAIC0zOCw2ICszOCw3IEBAIGltcG9y
dCB1bml0dGVzdAogZnJvbSBjaGVja2VyX3VuaXR0ZXN0IGltcG9ydCAqCiBmcm9tIGVycm9yX2hh
bmRsZXJzX3VuaXR0ZXN0IGltcG9ydCAqCiBmcm9tIGZpbHRlcl91bml0dGVzdCBpbXBvcnQgKgor
ZnJvbSBtYWluX3VuaXR0ZXN0IGltcG9ydCAqCiBmcm9tIG9wdHBhcnNlcl91bml0dGVzdCBpbXBv
cnQgKgogZnJvbSBwcm9jZXNzb3JzLmNvbW1vbl91bml0dGVzdCBpbXBvcnQgKgogZnJvbSBwcm9j
ZXNzb3JzLmNwcF91bml0dGVzdCBpbXBvcnQgKgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZV9yZWZlcmVuY2VzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdHlsZV9yZWZlcmVuY2VzLnB5CmluZGV4IGU1N2NkMGUuLjllOGI2MGQgMTAwNjQ0
Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGVfcmVmZXJlbmNlcy5weQor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlX3JlZmVyZW5jZXMucHkKQEAg
LTQ2LDYgKzQ2LDE0IEBAIGZyb20gaW5pdC5sb2d0ZXN0aW5nIGltcG9ydCBVbml0VGVzdExvZ1N0
cmVhbQogZnJvbSBzY20gaW1wb3J0IGRldGVjdF9zY21fc3lzdGVtCiAKIAorZGVmIGRldGVjdF9j
aGVja291dCgpOgorICAgICIiIlJldHVybiBhIFdlYktpdENoZWNrb3V0IGluc3RhbmNlLCBvciBO
b25lIGlmIGl0IGNhbm5vdCBiZSBmb3VuZC4iIiIKKyAgICBjd2QgPSBvcy5wYXRoLmFic3BhdGgo
b3MuY3VyZGlyKQorICAgIHNjbSA9IGRldGVjdF9zY21fc3lzdGVtKGN3ZCkKKworICAgIHJldHVy
biBOb25lIGlmIHNjbSBpcyBOb25lIGVsc2UgV2ViS2l0Q2hlY2tvdXQoc2NtKQorCisKIGRlZiBw
YXJzZV9wYXRjaChwYXRjaF9zdHJpbmcpOgogCiAgICAgIiIiUGFyc2UgYSBwYXRjaCBzdHJpbmcg
YW5kIHJldHVybiB0aGUgYWZmZWN0ZWQgZmlsZXMuIiIiCkBAIC01NCwxNiArNjIsMTUgQEAgZGVm
IHBhcnNlX3BhdGNoKHBhdGNoX3N0cmluZyk6CiAgICAgcmV0dXJuIHBhdGNoLmZpbGVzCiAKIAot
Y2xhc3MgU2ltcGxlU2NtKG9iamVjdCk6CitjbGFzcyBXZWJLaXRDaGVja291dChvYmplY3QpOgog
Ci0gICAgIiIiU2ltcGxlIGZhY2FkZSB0byBTQ00gZm9yIHVzZSBieSBzdHlsZSBwYWNrYWdlLiIi
IgorICAgICIiIlNpbXBsZSBmYWNhZGUgdG8gdGhlIFNDTSBjbGFzcyBmb3IgdXNlIGJ5IHN0eWxl
IHBhY2thZ2UuIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIGN3ZCA9IG9z
LnBhdGguYWJzcGF0aCgnLicpCi0gICAgICAgIHNlbGYuX3NjbSA9IGRldGVjdF9zY21fc3lzdGVt
KGN3ZCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2NtKToKKyAgICAgICAgc2VsZi5fc2NtID0g
c2NtCiAKLSAgICBkZWYgY2hlY2tvdXRfcm9vdChzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRo
ZSBzb3VyY2UgY29udHJvbCByb290IGFzIGFuIGFic29sdXRlIHBhdGguIiIiCisgICAgZGVmIHJv
b3RfcGF0aChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBjaGVja291dCByb290IGFzIGFu
IGFic29sdXRlIHBhdGguIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9zY20uY2hlY2tvdXRfcm9v
dAogCiAgICAgZGVmIGNyZWF0ZV9wYXRjaChzZWxmKToK
</data>
<flag name="commit-queue"
          id="34471"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51482</attachid>
            <date>2010-03-24 01:00:44 -0700</date>
            <delta_ts>2010-03-27 12:39:52 -0700</delta_ts>
            <desc>Proposed patch 7</desc>
            <filename>_patch-35498-7.diff</filename>
            <type>text/plain</type>
            <size>31349</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBlZTBhMzBmLi43MDEyM2M0IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTAtMDMt
MjEgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlZCBjaGVjay13ZWJraXQt
c3R5bGUgdG8gY29udmVydCBwYXRocyB0byBwYXRocyByZWxhdGl2ZSB0bworICAgICAgICB0aGUg
Y2hlY2tvdXQgcm9vdCB3aGVuIGludm9raW5nIGNoZWNrLXdlYmtpdC1zdHlsZSB3aXRoIHBhdGgK
KyAgICAgICAgYXJndW1lbnRzLiAgQWxzbyBhZGRlZCB3YXJuaW5nIG1lc3NhZ2VzIHdoZXJlIGFw
cHJvcHJpYXRlLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zNTQ5OAorCisgICAgICAgIENvbnZlcnRpbmcgcGF0aHMgdG8gcGF0aHMgcmVsYXRpdmUg
dG8gdGhlIGNoZWNrb3V0IHJvb3QgZW5zdXJlcworICAgICAgICB0aGF0IHN0eWxlIGNoZWNraW5n
IHdpbGwgYmVoYXZlIGFzIGV4cGVjdGVkIChzaW5jZSBwYXRoLXNwZWNpZmljCisgICAgICAgIHJ1
bGVzIGFzc3VtZSBpbnB1dCBwYXRocyBhcmUgcmVsYXRpdmUgdG8gYSBzb3VyY2Ugcm9vdCkuCisK
KyAgICAgICAgKiBTY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHlsZToKKyAgICAgICAgICAtIEFkZGVk
IGRlYnVnIGxvZ2dpbmcgb2Ygd2hldGhlciB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2FzIGZvdW5k
CisgICAgICAgICAgICB0byBiZSBpbiBhIFdlYktpdCBjaGVja291dC4KKyAgICAgICAgICAtIEFk
ZGVkIHRoZSBmb3VuZF9jaGVja291dCBwYXJhbWV0ZXIgdG8gdGhlIGNhbGwgdG8gcGFyc2VyLnBh
cnNlKCkuCisgICAgICAgICAgLSBSZW5hbWVkIHRoZSBmaWxlcyB2YXJpYWJsZSB0byBwYXRocy4K
KyAgICAgICAgICAtIEFkZGVkIGEgY2FsbCB0byBjaGFuZ2VfZGlyZWN0b3J5KCkgcHJpb3IgdG8g
Y2hlY2tpbmcgc3R5bGUuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXIucHk6CisgICAgICAgICAgLSBGb3IgU3R5bGVDaGVja2VyLmNoZWNrX2ZpbGUoKToKKyAgICAg
ICAgICAgIC0gVXBkYXRlZCB0aGUgZG9jc3RyaW5nLgorICAgICAgICAgICAgLSBBZGRlZCB0d28g
bG9nIG1lc3NhZ2VzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vy
X3VuaXR0ZXN0LnB5OgorICAgICAgICAgIC0gVXBkYXRlZCBhIGNhbGwgdG8gcGFyc2VyLnBhcnNl
KCkgd2l0aCB0aGUgZm91bmRfY2hlY2tvdXQgcGFyYW1ldGVyLgorCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9zdHlsZS9tYWluLnB5OiBBZGRlZC4KKyAgICAgICAgICAtIEFkZGVkIGEgbmV3
IGZpbGUgc28gdGhlIGNvZGUgaW4gdGhpcyBwYXRjaCBjb3VsZCBiZSB1bml0LXRlc3RlZCwKKyAg
ICAgICAgICAgIGFzIG9wcG9zZWQgdG8gYWRkaW5nIG5ldyBjb2RlIHRvIGNoZWNrLXdlYmtpdC1z
dHlsZS4KKyAgICAgICAgICAtIEFkZGVkIHRoZSBtZXRob2QgX3JlbF9wYXRoKCkgYXMgYSBzdWJz
dGl0dXRlIGZvciBvcy5wYXRoLnJlbHBhdGgoKSwKKyAgICAgICAgICAgIHdoaWNoIGlzIGF2YWls
YWJsZSBvbmx5IGluIFB5dGhvbiAyLjYuCisgICAgICAgICAgLSBBZGRlZCB0aGUgbWV0aG9kIGNo
YW5nZV9kaXJlY3RvcnkoKSwgd2hpY2ggY29udGFpbnMgbW9zdCBvZiB0aGUKKyAgICAgICAgICAg
IG5ldyBmdW5jdGlvbmFsaXR5IGluIHRoaXMgcGF0Y2guCisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL21haW5fdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAgIC0gQWRkZWQg
UmVsUGF0aFRlc3QgdG8gdGVzdCBtYWluLl9yZWxfcGF0aCgpLgorICAgICAgICAgIC0gQWRkZWQg
Q2hhbmdlRGlyZWN0b3J5VGVzdCB0byB0ZXN0IG1haW4uY2hhbmdlX2RpcmVjdG9yeSgpLgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9vcHRwYXJzZXIucHk6CisgICAgICAgICAg
LSBVcGRhdGVkIGNoZWNrLXdlYmtpdC1zdHlsZSdzIHVzYWdlIHN0cmluZy4KKyAgICAgICAgICAt
IEZvciB0aGUgQXJndW1lbnRQYXJzZXIucGFyc2UoKSBtZXRob2Q6CisgICAgICAgICAgICAtIEFk
ZGVkIGEgZm91bmRfY2hlY2tvdXQgcGFyYW1ldGVyLgorICAgICAgICAgICAgLSBSZW5hbWVkIGZp
bGVuYW1lcyB0byBwYXRocy4KKyAgICAgICAgICAgIC0gQWRkZWQgbG9naWMgc28gdGhhdCBhbiBl
cnJvciBpcyByYWlzZWQgaWYgbm8gcGF0aHMgYXJlIHBhc3NlZAorICAgICAgICAgICAgICBpZiBm
b3VuZF9jaGVja291dCBpcyBGYWxzZS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5
bGUvb3B0cGFyc2VyX3VuaXR0ZXN0LnB5OgorICAgICAgICAgIC0gVXBkYXRlZCB0aGUgQXJndW1l
bnRQYXJzZXIucGFyc2UoKSB1bml0IHRlc3RzIHRvIGluY2x1ZGUKKyAgICAgICAgICAgIGNvdmVy
YWdlIGZvciB0aGUgbmV3IGZvdW5kX2NoZWNrb3V0IHBhcmFtZXRlci4KKworICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvc3R5bGUvdW5pdHRlc3RzLnB5OgorICAgICAgICAgIC0gQWRkZWQgYW4g
aW1wb3J0IHN0YXRlbWVudCBmb3IgbWFpbl91bml0dGVzdC4KKworICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvc3R5bGVfcmVmZXJlbmNlcy5weToKKyAgICAgICAgICAtIFJlbmFtZWQgU2ltcGxl
U2NtIHRvIFdlYktpdENoZWNrb3V0LgorICAgICAgICAgIC0gQWRkZWQgYSBkZXRlY3RfY2hlY2tv
dXQoKSBmdW5jdGlvbiB0byBhbGxvdyByZXR1cm5pbmcgTm9uZQorICAgICAgICAgICAgaW5zdGVh
ZCBvZiBhIFdlYktpdENoZWNrb3V0IGluc3RhbmNlIGlmIG5vIGNoZWNrb3V0IGlzIGZvdW5kLgor
ICAgICAgICAgIC0gUmVuYW1lZCBjaGVja291dF9yb290IHRvIHJvb3RfcGF0aC4KKwogMjAxMC0w
My0yNCAgQ2hyaXMgSmVyZG9uZWsgIDxjamVyZG9uZWtAd2Via2l0Lm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBTaGluaWNoaXJvIEhhbWFqaS4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvY2hlY2std2Via2l0LXN0eWxlIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9jaGVjay13ZWJr
aXQtc3R5bGUKaW5kZXggZDQ3ZGMzYi4uMmE4NmIyNiAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy9jaGVjay13ZWJraXQtc3R5bGUKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9jaGVj
ay13ZWJraXQtc3R5bGUKQEAgLTQ4LDExICs0OCwxNCBAQCBpbXBvcnQgb3MKIGltcG9ydCBvcy5w
YXRoCiBpbXBvcnQgc3lzCiAKK2Zyb20gd2Via2l0cHkuc3R5bGVfcmVmZXJlbmNlcyBpbXBvcnQg
ZGV0ZWN0X2NoZWNrb3V0Citmcm9tIHdlYmtpdHB5LnN0eWxlLm1haW4gaW1wb3J0IGNoYW5nZV9k
aXJlY3RvcnkKIGltcG9ydCB3ZWJraXRweS5zdHlsZS5jaGVja2VyIGFzIGNoZWNrZXIKLWZyb20g
d2Via2l0cHkuc3R5bGVfcmVmZXJlbmNlcyBpbXBvcnQgU2ltcGxlU2NtCiAKIF9sb2cgPSBsb2dn
aW5nLmdldExvZ2dlcigiY2hlY2std2Via2l0LXN0eWxlIikKIAorCisjIEZJWE1FOiBNb3ZlIHRo
aXMgY29kZSB0byBzdHlsZS5tYWluLgogZGVmIG1haW4oKToKICAgICAjIENoYW5nZSBzdGRlcnIg
dG8gd3JpdGUgd2l0aCByZXBsYWNlbWVudCBjaGFyYWN0ZXJzIHNvIHdlIGRvbid0IGRpZQogICAg
ICMgaWYgd2UgdHJ5IHRvIHByaW50IHNvbWV0aGluZyBjb250YWluaW5nIG5vbi1BU0NJSSBjaGFy
YWN0ZXJzLgpAQCAtODAsMjEgKzgzLDI4IEBAIGRlZiBtYWluKCk6CiAgICAgY2hlY2tlci5jb25m
aWd1cmVfbG9nZ2luZyhzdHJlYW09c3RkZXJyLCBpc19kZWJ1Zz1pc19kZWJ1ZykKICAgICBfbG9n
LmRlYnVnKCJEZWJ1ZyBsb2dnaW5nIGVuYWJsZWQuIikKIAorICAgIGNoZWNrb3V0ID0gZGV0ZWN0
X2NoZWNrb3V0KCkKKworICAgIGlmIGNoZWNrb3V0IGlzIE5vbmU6CisgICAgICAgIGNoZWNrb3V0
X3Jvb3QgPSBOb25lCisgICAgICAgIF9sb2cuZGVidWcoIldlYktpdCBjaGVja291dCBub3QgZm91
bmQgZm9yIGN1cnJlbnQgZGlyZWN0b3J5LiIpCisgICAgZWxzZToKKyAgICAgICAgY2hlY2tvdXRf
cm9vdCA9IGNoZWNrb3V0LnJvb3RfcGF0aCgpCisgICAgICAgIF9sb2cuZGVidWcoIldlYktpdCBj
aGVja291dCBmb3VuZCB3aXRoIHJvb3Q6ICVzIiAlIGNoZWNrb3V0X3Jvb3QpCisKICAgICBwYXJz
ZXIgPSBjaGVja2VyLmNoZWNrX3dlYmtpdF9zdHlsZV9wYXJzZXIoKQotICAgIChmaWxlcywgb3B0
aW9ucykgPSBwYXJzZXIucGFyc2UoYXJncykKKyAgICBmb3VuZF9jaGVja291dCA9IGNoZWNrb3V0
IGlzIG5vdCBOb25lCisgICAgKHBhdGhzLCBvcHRpb25zKSA9IHBhcnNlci5wYXJzZShhcmdzLCBm
b3VuZF9jaGVja291dD1mb3VuZF9jaGVja291dCkKIAogICAgIGNvbmZpZ3VyYXRpb24gPSBjaGVj
a2VyLmNoZWNrX3dlYmtpdF9zdHlsZV9jb25maWd1cmF0aW9uKG9wdGlvbnMpCiAgICAgc3R5bGVf
Y2hlY2tlciA9IGNoZWNrZXIuU3R5bGVDaGVja2VyKGNvbmZpZ3VyYXRpb24pCiAKLSAgICBpZiBm
aWxlczoKLSAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVzOgotICAgICAgICAgICAgc3R5bGVf
Y2hlY2tlci5jaGVja19maWxlKGZpbGVuYW1lKQorICAgIHBhdGhzID0gY2hhbmdlX2RpcmVjdG9y
eShjaGVja291dF9yb290PWNoZWNrb3V0X3Jvb3QsIHBhdGhzPXBhdGhzKQogCisgICAgaWYgcGF0
aHM6CisgICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICAgICAgc3R5bGVfY2hlY2tl
ci5jaGVja19maWxlKHBhdGgpCiAgICAgZWxzZToKLSAgICAgICAgc2NtID0gU2ltcGxlU2NtKCkK
LQotICAgICAgICBvcy5jaGRpcihzY20uY2hlY2tvdXRfcm9vdCgpKQotCiAgICAgICAgIGlmIG9w
dGlvbnMuZ2l0X2NvbW1pdDoKICAgICAgICAgICAgIGNvbW1pdCA9IG9wdGlvbnMuZ2l0X2NvbW1p
dAogICAgICAgICAgICAgaWYgJy4uJyBpbiBjb21taXQ6CkBAIC0xMDMsOSArMTEzLDkgQEAgZGVm
IG1haW4oKToKICAgICAgICAgICAgICAgICBjb21taXQgPSBjb21taXRbOmNvbW1pdC5maW5kKCcu
LicpXQogICAgICAgICAgICAgICAgIF9sb2cud2FybigiUmFuZ2VzIGFyZSBub3Qgc3VwcG9ydGVk
IGZvciAtLWdpdC1jb21taXQuICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNoZWNraW5n
IGFsbCBjaGFuZ2VzIHNpbmNlICVzLiIgJSBjb21taXQpCi0gICAgICAgICAgICBwYXRjaCA9IHNj
bS5jcmVhdGVfcGF0Y2hfc2luY2VfbG9jYWxfY29tbWl0KGNvbW1pdCkKKyAgICAgICAgICAgIHBh
dGNoID0gY2hlY2tvdXQuY3JlYXRlX3BhdGNoX3NpbmNlX2xvY2FsX2NvbW1pdChjb21taXQpCiAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwYXRjaCA9IHNjbS5jcmVhdGVfcGF0Y2goKQorICAg
ICAgICAgICAgcGF0Y2ggPSBjaGVja291dC5jcmVhdGVfcGF0Y2goKQogICAgICAgICBzdHlsZV9j
aGVja2VyLmNoZWNrX3BhdGNoKHBhdGNoKQogCiAgICAgZXJyb3JfY291bnQgPSBzdHlsZV9jaGVj
a2VyLmVycm9yX2NvdW50CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2No
ZWNrZXIucHkKaW5kZXggM2U2OWY5Ni4uZjEyOTk3NiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAtNTg2LDcgKzU4Niw5IEBAIGNsYXNzIFN0
eWxlQ2hlY2tlcihvYmplY3QpOgogICAgICAgICAiIiJDaGVjayBzdHlsZSBpbiB0aGUgZ2l2ZW4g
ZmlsZS4KIAogICAgICAgICBBcmdzOgotICAgICAgICAgIGZpbGVfcGF0aDogQSBzdHJpbmcgdGhh
dCBpcyB0aGUgcGF0aCBvZiB0aGUgZmlsZSB0byBwcm9jZXNzLgorICAgICAgICAgIGZpbGVfcGF0
aDogVGhlIHBhdGggb2YgdGhlIGZpbGUgdG8gcHJvY2Vzcy4gIElmIHBvc3NpYmxlLCB0aGUgcGF0
aAorICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBzb3VyY2Ug
cm9vdC4gIE90aGVyd2lzZSwKKyAgICAgICAgICAgICAgICAgICAgIHBhdGgtc3BlY2lmaWMgbG9n
aWMgbWF5IG5vdCBiZWhhdmUgYXMgZXhwZWN0ZWQuCiAgICAgICAgICAgaGFuZGxlX3N0eWxlX2Vy
cm9yOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgc3R5bGUgZXJyb3IKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9jY3Vycy4gVGhpcyBwYXJhbWV0ZXIgaXMgbWVhbnQgZm9yIGlu
dGVybmFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2Ugd2l0aGluIHRoaXMgY2xh
c3MuIERlZmF1bHRzIHRvIGEKQEAgLTU5Niw2ICs1OTgsNyBAQCBjbGFzcyBTdHlsZUNoZWNrZXIo
b2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIHRoZSBmaWxlIHBy
b2Nlc3NpbmcgbWV0aG9kIG9mIHRoaXMgY2xhc3MuCiAKICAgICAgICAgIiIiCisgICAgICAgIF9s
b2cuZGVidWcoIkNoZWNraW5nOiAiICsgZmlsZV9wYXRoKQogICAgICAgICBpZiBoYW5kbGVfc3R5
bGVfZXJyb3IgaXMgTm9uZToKICAgICAgICAgICAgIGhhbmRsZV9zdHlsZV9lcnJvciA9IERlZmF1
bHRTdHlsZUVycm9ySGFuZGxlcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25maWd1cmF0aW9uPXNlbGYuX2NvbmZpZ3VyYXRpb24sCkBAIC02MjEsOCArNjI0LDE1IEBA
IGNsYXNzIFN0eWxlQ2hlY2tlcihvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfc3R5bGVfZXJyb3IsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJvc2l0eSkKICAgICAgICAg
aWYgcHJvY2Vzc29yIGlzIE5vbmU6CisgICAgICAgICAgICAjIERpc3BsYXkgYSB3YXJuaW5nIHNv
IGFzIG5vdCB0byBnaXZlIGFuIGltcHJlc3Npb24gdGhhdCB0aGlzCisgICAgICAgICAgICAjIHdh
cyBjaGVja2VkLgorICAgICAgICAgICAgX2xvZy5pbmZvKCdGaWxlIG5vdCBhIHJlY29nbml6ZWQg
dHlwZSB0byBjaGVjay4gU2tpcHBpbmc6ICIlcyInCisgICAgICAgICAgICAgICAgICAgICAgJSBm
aWxlX3BhdGgpCiAgICAgICAgICAgICByZXR1cm4KIAorCisgICAgICAgIF9sb2cuZGVidWcoIlVz
aW5nIGNsYXNzOiAiICsgcHJvY2Vzc29yLl9fY2xhc3NfXy5fX25hbWVfXykKKwogICAgICAgICBw
cm9jZXNzX2ZpbGUocHJvY2Vzc29yLCBmaWxlX3BhdGgsIGhhbmRsZV9zdHlsZV9lcnJvcikKIAog
ICAgIGRlZiBjaGVja19wYXRjaChzZWxmLCBwYXRjaF9zdHJpbmcpOgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5CmluZGV4
IGE1NjZhMTguLmEwOGJmYTYgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHkKQEAgLTE4MCw3ICsxODAsOSBAQCBjbGFz
cyBHbG9iYWxWYXJpYWJsZXNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdF9vcHRpb25zPWRlZmF1bHRfb3B0aW9ucykKICAgICAg
ICAgIyBObyBuZWVkIHRvIHRlc3QgdGhlIHJldHVybiB2YWx1ZSBoZXJlIHNpbmNlIHdlIHRlc3Qg
cGFyc2UoKQogICAgICAgICAjIG9uIHZhbGlkIGFyZ3VtZW50cyBlbHNld2hlcmUuCi0gICAgICAg
IHBhcnNlci5wYXJzZShbXSkgIyBhcmd1bWVudHMgdmFsaWQ6IG5vIGVycm9yIG9yIFN5c3RlbUV4
aXQKKyAgICAgICAgIworICAgICAgICAjIFRoZSBkZWZhdWx0IG9wdGlvbnMgYXJlIHZhbGlkOiBu
byBlcnJvciBvciBTeXN0ZW1FeGl0LgorICAgICAgICBwYXJzZXIucGFyc2UoYXJncz1bXSwgZm91
bmRfY2hlY2tvdXQ9VHJ1ZSkKIAogICAgIGRlZiB0ZXN0X3BhdGhfcnVsZXNfc3BlY2lmaWVyKHNl
bGYpOgogICAgICAgICBhbGxfY2F0ZWdvcmllcyA9IHNlbGYuX2FsbF9jYXRlZ29yaWVzKCkKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvbWFpbi5weSBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvbWFpbi5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4yM2FkMjg0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9tYWluLnB5CkBAIC0wLDAgKzEsMTc0IEBACisjIENv
cHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2plcmRvbmVrQHdlYmtpdC5vcmcpCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
CisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5n
CitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19u
YW1lX18pCisKKworIyBUaGlzIGZ1bmN0aW9uIGlzIGEgcmVwbGFjZW1lbnQgZm9yIG9zLnBhdGgu
cmVscGF0aCgpLCB3aGljaCBpcyBvbmx5CisjIGF2YWlsYWJsZSBpbiBQeXRob24gMi42LiAgSXQg
c2hvdWxkIGJlaGF2ZSBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcworIyBvcy5wYXRoLnJlbHBhdGgo
KSwgZXhjZXB0IGZvciByZXR1cm5pbmcgTm9uZSBvbiBwYXRocyBub3QgY29udGFpbmVkCisjIGlu
IGFic19zdGFydF9wYXRoLgorZGVmIF9yZWxfcGF0aChwYXRoLCBzdGFydF9wYXRoLCBvc19wYXRo
X2Fic3BhdGg9Tm9uZSk6CisgICAgIiIiUmV0dXJuIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgZ2l2
ZW4gc3RhcnQgcGF0aCwgb3IgTm9uZS4KKworICAgIFJldHVybnMgTm9uZSBpZiB0aGUgcGF0aCBp
cyBub3QgY29udGFpbmVkIGluIHRoZSBkaXJlY3Rvcnkgc3RhcnRfcGF0aC4KKworICAgIEFyZ3M6
CisgICAgICBwYXRoOiBBbiBhYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRoIHRvIGNvbnZlcnQgdG8g
YSByZWxhdGl2ZSBwYXRoLgorICAgICAgc3RhcnRfcGF0aDogVGhlIHBhdGggcmVsYXRpdmUgdG8g
d2hpY2ggdGhlIGdpdmVuIHBhdGggc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICBjb252ZXJ0
ZWQuCisgICAgICBvc19wYXRoX2Fic3BhdGg6IEEgcmVwbGFjZW1lbnQgZnVuY3Rpb24gZm9yIHVu
aXQgdGVzdGluZy4gIFRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc2hvdWxk
IHN0cmlwIHRyYWlsaW5nIHNsYXNoZXMganVzdCBsaWtlCisgICAgICAgICAgICAgICAgICAgICAg
IG9zLnBhdGguYWJzcGF0aCgpLiAgRGVmYXVsdHMgdG8gb3MucGF0aC5hYnNwYXRoLgorCisgICAg
IiIiCisgICAgaWYgb3NfcGF0aF9hYnNwYXRoIGlzIE5vbmU6CisgICAgICAgIG9zX3BhdGhfYWJz
cGF0aCA9IG9zLnBhdGguYWJzcGF0aAorCisgICAgIyBDYWxsaW5nIG9zX3BhdGhfYWJzcGF0aCgp
IGFsc28gcmVtb3ZlcyBhbnkgdHJhaWxpbmcgc2xhc2hlcy4KKyAgICBzdGFydF9wYXRoID0gb3Nf
cGF0aF9hYnNwYXRoKHN0YXJ0X3BhdGgpCisgICAgcGF0aCA9IG9zX3BhdGhfYWJzcGF0aChwYXRo
KQorCisgICAgc2xhc2hfY2hhcnMgPSAiL1xcIgorCisgICAgaWYgbm90IHBhdGgubG93ZXIoKS5z
dGFydHN3aXRoKHN0YXJ0X3BhdGgubG93ZXIoKSk6CisgICAgICAgICMgVGhlbiBwYXRoIGlzIG91
dHNpZGUgdGhlIGRpcmVjdG9yeSBnaXZlbiBieSBzdGFydF9wYXRoLgorICAgICAgICByZXR1cm4g
Tm9uZQorCisgICAgcmVsX3BhdGggPSBwYXRoW2xlbihzdGFydF9wYXRoKTpdCisKKyAgICBpZiBy
ZWxfcGF0aCBhbmQgcmVsX3BhdGhbMF0gbm90IGluIHNsYXNoX2NoYXJzOgorICAgICAgICAjIFRo
ZW4gd2UgYXJlIGluIHRoZSBjYXNlIHR5cGlmaWVkIGJ5IHRoZSBmb2xsb3dpbmcgZXhhbXBsZToK
KyAgICAgICAgIworICAgICAgICAjIHN0YXJ0X3BhdGggPSAiL3RtcC9mb28iCisgICAgICAgICMg
cGF0aCA9ICIvdG1wL2Zvb2JhciIKKyAgICAgICAgIyByZWxfcGF0aCA9ICJiYXIiCisgICAgICAg
IHJldHVybiBOb25lCisgICAgIyBPdGhlcndpc2UgcmVsX3BhdGggaXMgIiIgb3IgYmVnaW5zIHdp
dGggYSBzbGFzaC4KKworICAgIHJlbF9wYXRoID0gcmVsX3BhdGgubHN0cmlwKHNsYXNoX2NoYXJz
KQorCisgICAgcmV0dXJuIHJlbF9wYXRoCisKKworZGVmIGNoYW5nZV9kaXJlY3RvcnkoY2hlY2tv
dXRfcm9vdCwgcGF0aHMsIG1vY2tfb3M9Tm9uZSk6CisgICAgIiIiQ2hhbmdlIHRoZSB3b3JraW5n
IGRpcmVjdG9yeSB0byB0aGUgV2ViS2l0IGNoZWNrb3V0IHJvb3QsIGlmIHBvc3NpYmxlLgorCisg
ICAgSWYgZXZlcnkgcGF0aCBpbiB0aGUgcGF0aHMgcGFyYW1ldGVyIGlzIGJlbG93IHRoZSBjaGVj
a291dCByb290IChvciBpZgorICAgIHRoZSBwYXRocyBwYXJhbWV0ZXIgaXMgZW1wdHkgb3IgTm9u
ZSksIHRoaXMgbWV0aG9kIGNoYW5nZXMgdGhlIGN1cnJlbnQKKyAgICB3b3JraW5nIGRpcmVjdG9y
eSB0byB0aGUgY2hlY2tvdXQgcm9vdCBhbmQgY29udmVydHMgdGhlIHBhdGhzIHBhcmFtZXRlcgor
ICAgIGFzIGRlc2NyaWJlZCBiZWxvdy4KKyAgICAgICAgVGhpcyBhbGxvd3MgdGhlIHBhdGhzIGJl
aW5nIGNoZWNrZWQgdG8gYmUgZGlzcGxheWVkIHJlbGF0aXZlIHRvIHRoZQorICAgIGNoZWNrb3V0
IHJvb3QsIGFuZCBmb3IgcGF0aC1zcGVjaWZpYyBzdHlsZSBjaGVja3MgdG8gd29yayBhcyBleHBl
Y3RlZC4KKyAgICBQYXRoLXNwZWNpZmljIGNoZWNrcyBpbmNsdWRlIHdoZXRoZXIgZmlsZXMgc2hv
dWxkIGJlIHNraXBwZWQsIHdoZXRoZXIKKyAgICBjdXN0b20gc3R5bGUgcnVsZXMgc2hvdWxkIGFw
cGx5IHRvIGNlcnRhaW4gZmlsZXMsIGV0Yy4KKyAgICAgICAgSWYgdGhlIGNoZWNrb3V0IHJvb3Qg
aXMgTm9uZSBvciB0aGUgZW1wdHkgc3RyaW5nLCB0aGlzIG1ldGhvZCByZXR1cm5zCisgICAgdGhl
IHBhdGhzIHBhcmFtZXRlciB1bmNoYW5nZWQuCisKKyAgICBSZXR1cm5zOgorICAgICAgcGF0aHM6
IEEgY29weSBvZiB0aGUgcGF0aHMgcGFyYW1ldGVyIC0tIHBvc3NpYmx5IGNvbnZlcnRlZCwgYXMg
Zm9sbG93cy4KKyAgICAgICAgICAgICBJZiB0aGlzIG1ldGhvZCBjaGFuZ2VkIHRoZSBjdXJyZW50
IHdvcmtpbmcgZGlyZWN0b3J5IHRvIHRoZQorICAgICAgICAgICAgIGNoZWNrb3V0IHJvb3QsIHRo
ZW4gdGhlIGxpc3QgaXMgdGhlIHBhdGhzIHBhcmFtZXRlciBjb252ZXJ0ZWQgdG8KKyAgICAgICAg
ICAgICBub3JtYWxpemVkIHBhdGhzIHJlbGF0aXZlIHRvIHRoZSBjaGVja291dCByb290LiAgT3Ro
ZXJ3aXNlLCB0aGUKKyAgICAgICAgICAgICBwYXRocyBhcmUgbm90IGNvbnZlcnRlZC4KKworICAg
IEFyZ3M6CisgICAgICBwYXRoczogQSBsaXN0IG9mIHBhdGhzIHRvIHRoZSBmaWxlcyB0aGF0IHNo
b3VsZCBiZSBjaGVja2VkIGZvciBzdHlsZS4KKyAgICAgICAgICAgICBUaGlzIGFyZ3VtZW50IGNh
biBiZSBOb25lIG9yIHRoZSBlbXB0eSBsaXN0IGlmIGEgZ2l0IGNvbW1pdAorICAgICAgICAgICAg
IG9yIGFsbCBjaGFuZ2VzIHVuZGVyIHRoZSBjaGVja291dCByb290IHNob3VsZCBiZSBjaGVja2Vk
LgorICAgICAgY2hlY2tvdXRfcm9vdDogVGhlIHBhdGggdG8gdGhlIHJvb3Qgb2YgdGhlIFdlYktp
dCBjaGVja291dCwgb3IgTm9uZSBvcgorICAgICAgICAgICAgICAgICAgICAgdGhlIGVtcHR5IHN0
cmluZyBpZiBubyBjaGVja291dCBjb3VsZCBiZSBkZXRlY3RlZC4KKyAgICAgIG1vY2tfb3M6IEEg
cmVwbGFjZW1lbnQgbW9kdWxlIGZvciB1bml0IHRlc3RpbmcuICBEZWZhdWx0cyB0byBvcy4KKwor
ICAgICIiIgorICAgIG9zX21vZHVsZSA9IG9zIGlmIG1vY2tfb3MgaXMgTm9uZSBlbHNlIG1vY2tf
b3MKKworICAgIGlmIHBhdGhzIGlzIG5vdCBOb25lOgorICAgICAgICBwYXRocyA9IGxpc3QocGF0
aHMpCisKKyAgICBpZiBub3QgY2hlY2tvdXRfcm9vdDoKKyAgICAgICAgaWYgbm90IHBhdGhzOgor
ICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUaGUgcGF0aHMgcGFyYW1ldGVyIG11c3QgYmUg
bm9uLWVtcHR5IGlmICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlcmUgaXMgbm8g
Y2hlY2tvdXQgcm9vdC4iKQorCisgICAgICAgICMgRklYTUU6IENvbnNpZGVyIHRyeWluZyB0byBk
ZXRlY3QgdGhlIGNoZWNrb3V0IHJvb3QgZm9yIGVhY2ggZmlsZQorICAgICAgICAjICAgICAgICBi
ZWluZyBjaGVja2VkIHJhdGhlciB0aGFuIG9ubHkgdHJ5aW5nIHRvIGRldGVjdCB0aGUgY2hlY2tv
dXQKKyAgICAgICAgIyAgICAgICAgcm9vdCBmb3IgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rv
cnkuICBUaGlzIHdvdWxkIGFsbG93CisgICAgICAgICMgICAgICAgIGZpbGVzIHRvIGJlIGNoZWNr
ZWQgY29ycmVjdGx5IGV2ZW4gaWYgdGhlIHNjcmlwdCBpcyBiZWluZworICAgICAgICAjICAgICAg
ICBydW4gZnJvbSBvdXRzaWRlIGFueSBXZWJLaXQgY2hlY2tvdXQuCisgICAgICAgICMKKyAgICAg
ICAgIyAgICAgICAgTW9yZW92ZXIsIHRyeSB0byBmaW5kIHRoZSAic291cmNlIHJvb3QiIGZvciBl
YWNoIGZpbGUKKyAgICAgICAgIyAgICAgICAgdXNpbmcgcGF0aC1iYXNlZCBoZXVyaXN0aWNzIHJh
dGhlciB0aGFuIHVzaW5nIG9ubHkgdGhlCisgICAgICAgICMgICAgICAgIHByZXNlbmNlIG9mIGEg
V2ViS2l0IGNoZWNrb3V0LiAgRm9yIGV4YW1wbGUsIHdlIGNvdWxkCisgICAgICAgICMgICAgICAg
IGV4YW1pbmUgcGFyZW50IGRpcmVjdG9yaWVzIHVudGlsIGEgZGlyZWN0b3J5IGlzIGZvdW5kCisg
ICAgICAgICMgICAgICAgIGNvbnRhaW5pbmcgSmF2YVNjcmlwdENvcmUsIFdlYkNvcmUsIFdlYktp
dCwgV2ViS2l0U2l0ZSwKKyAgICAgICAgIyAgICAgICAgYW5kIFdlYktpdFRvb2xzLgorICAgICAg
ICAjICAgICAgICAgICAgIFRoZW4gbG9nIGFuIElORk8gbWVzc2FnZSBzYXlpbmcgdGhhdCBhIHNv
dXJjZSByb290IG5vdAorICAgICAgICAjICAgICAgICBpbiBhIFdlYktpdCBjaGVja291dCB3YXMg
Zm91bmQuICBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gY2hlY2sKKyAgICAgICAgIyAgICAgICAgdGhl
IHN0eWxlIG9mIG5vbi1zY20gY29waWVzIG9mIHRoZSBzb3VyY2UgdHJlZSAoZS5nLgorICAgICAg
ICAjICAgICAgICBuaWdodGxpZXMpLgorICAgICAgICBfbG9nLndhcm4oIldlYktpdCBjaGVja291
dCByb290IG5vdCBmb3VuZDpcbiIKKyAgICAgICAgICAgICAgICAgICIgIFBhdGgtZGVwZW5kZW50
IHN0eWxlIGNoZWNrcyBtYXkgbm90IHdvcmsgY29ycmVjdGx5LlxuIgorICAgICAgICAgICAgICAg
ICAgIiAgU2VlIHRoZSBoZWxwIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mby4iKQorCisgICAg
ICAgIHJldHVybiBwYXRocworCisgICAgaWYgcGF0aHM6CisgICAgICAgICMgVGhlbiB0cnkgY29u
dmVydGluZyBhbGwgb2YgdGhlIHBhdGhzIHRvIHBhdGhzIHJlbGF0aXZlIHRvCisgICAgICAgICMg
dGhlIGNoZWNrb3V0IHJvb3QuCisgICAgICAgIHJlbF9wYXRocyA9IFtdCisgICAgICAgIGZvciBw
YXRoIGluIHBhdGhzOgorICAgICAgICAgICAgcmVsX3BhdGggPSBfcmVsX3BhdGgocGF0aCwgY2hl
Y2tvdXRfcm9vdCkKKyAgICAgICAgICAgIGlmIHJlbF9wYXRoIGlzIE5vbmU6CisgICAgICAgICAg
ICAgICAgIyBUaGVuIHRoZSBwYXRoIGlzIG5vdCBiZWxvdyB0aGUgY2hlY2tvdXQgcm9vdC4gIFNp
bmNlIGFsbAorICAgICAgICAgICAgICAgICMgcGF0aHMgc2hvdWxkIGJlIGludGVycHJldGVkIHJl
bGF0aXZlIHRvIHRoZSBzYW1lIHJvb3QsCisgICAgICAgICAgICAgICAgIyBkbyBub3QgaW50ZXJw
cmV0IGFueSBvZiB0aGUgcGF0aHMgYXMgcmVsYXRpdmUgdG8gdGhlCisgICAgICAgICAgICAgICAg
IyBjaGVja291dCByb290LiAgSW50ZXJwcmV0IGFsbCBvZiB0aGVtIHJlbGF0aXZlIHRvIHRoZQor
ICAgICAgICAgICAgICAgICMgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSwgYW5kIGRvIG5vdCBj
aGFuZ2UgdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAjIHdvcmtpbmcgZGlyZWN0b3J5Lgor
ICAgICAgICAgICAgICAgIF9sb2cud2FybigiXAorUGF0aC1kZXBlbmRlbnQgc3R5bGUgY2hlY2tz
IG1heSBub3Qgd29yayBjb3JyZWN0bHk6XG5cCitcblwKKyAgT25lIG9mIHRoZSBnaXZlbiBwYXRo
cyBpcyBvdXRzaWRlIHRoZSBXZWJLaXQgY2hlY2tvdXQgb2YgdGhlIGN1cnJlbnRcblwKKyAgd29y
a2luZyBkaXJlY3Rvcnk6XG5cCitcblwKKyAgICBQYXRoOiAlc1xuXAorICAgIENoZWNrb3V0IHJv
b3Q6ICVzXG5cCitcblwKKyAgUGFzcyBvbmx5IGZpbGVzIGJlbG93IHRoZSBjaGVja291dCByb290
IHRvIGVuc3VyZSBjb3JyZWN0IHJlc3VsdHMuXG5cCisgIFNlZSB0aGUgaGVscCBkb2N1bWVudGF0
aW9uIGZvciBtb3JlIGluZm8uXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBhdGgs
IGNoZWNrb3V0X3Jvb3QpKQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHBhdGhzCisgICAgICAg
ICAgICByZWxfcGF0aHMuYXBwZW5kKHJlbF9wYXRoKQorICAgICAgICAjIElmIHdlIGdvdCBoZXJl
LCB0aGUgY29udmVyc2lvbiB3YXMgc3VjY2Vzc2Z1bC4KKyAgICAgICAgcGF0aHMgPSByZWxfcGF0
aHMKKworICAgIF9sb2cuZGVidWcoIkNoYW5naW5nIHRvIGNoZWNrb3V0IHJvb3Q6ICIgKyBjaGVj
a291dF9yb290KQorICAgIG9zX21vZHVsZS5jaGRpcihjaGVja291dF9yb290KQorCisgICAgcmV0
dXJuIHBhdGhzCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxl
L21haW5fdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL21h
aW5fdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ1ODIw
ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
bWFpbl91bml0dGVzdC5weQpAQCAtMCwwICsxLDE1OCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAg
Q2hyaXMgSmVyZG9uZWsgKGNqZXJkb25la0B3ZWJraXQub3JnKQorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJVbml0IHRlc3RzIGZvciBtYWluLnB5LiIiIgor
CitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIG1haW4gaW1wb3J0IF9yZWxfcGF0
aAorZnJvbSBtYWluIGltcG9ydCBjaGFuZ2VfZGlyZWN0b3J5Citmcm9tIHdlYmtpdHB5LnN0eWxl
X3JlZmVyZW5jZXMgaW1wb3J0IExvZ1Rlc3RpbmcKKworCisjIE1ha2Ugc3VyZSB0aGUgdGVzdHMg
aW4gdGhpcyBjbGFzcyBhcmUgcGxhdGZvcm0gaW5kZXBlbmRlbnQuCitjbGFzcyBSZWxQYXRoVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAiIiJUZXN0cyBfcmVsX3BhdGgoKS4iIiIKKwor
ICAgIG9zX3BhdGhfYWJzcGF0aCA9IGxhbWJkYSBzZWxmLCBwYXRoOiBwYXRoCisKKyAgICBkZWYg
X3JlbF9wYXRoKHNlbGYsIHBhdGgsIGFic19zdGFydF9wYXRoKToKKyAgICAgICAgcmV0dXJuIF9y
ZWxfcGF0aChwYXRoLCBhYnNfc3RhcnRfcGF0aCwgc2VsZi5vc19wYXRoX2Fic3BhdGgpCisKKyAg
ICBkZWYgdGVzdF9zYW1lX3BhdGgoc2VsZik6CisgICAgICAgIHJlbF9wYXRoID0gc2VsZi5fcmVs
X3BhdGgoIldlYktpdCIsICJXZWJLaXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZWxf
cGF0aCwgIiIpCisKKyAgICBkZWYgdGVzdF9sb25nX3JlbF9wYXRoKHNlbGYpOgorICAgICAgICBz
dGFydF9wYXRoID0gIldlYktpdCIKKyAgICAgICAgZXhwZWN0ZWRfcmVsX3BhdGggPSBvcy5wYXRo
LmpvaW4oInRlc3QiLCAiRm9vLnR4dCIpCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc3Rh
cnRfcGF0aCwgZXhwZWN0ZWRfcmVsX3BhdGgpCisKKyAgICAgICAgYWN0dWFsX3JlbF9wYXRoID0g
c2VsZi5fcmVsX3BhdGgocGF0aCwgc3RhcnRfcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMoZXhwZWN0ZWRfcmVsX3BhdGgsIGFjdHVhbF9yZWxfcGF0aCkKKworICAgIGRlZiB0ZXN0X25v
bmVfcmVsX3BhdGgoc2VsZik6CisgICAgICAgICIiIlRlc3QgX3JlbF9wYXRoKCkgd2l0aCBOb25l
IHJldHVybiB2YWx1ZS4iIiIKKyAgICAgICAgc3RhcnRfcGF0aCA9ICJXZWJLaXQiCisgICAgICAg
IHBhdGggPSBvcy5wYXRoLmpvaW4oIm90aGVyX2RpciIsICJmb28udHh0IikKKworICAgICAgICBy
ZWxfcGF0aCA9IHNlbGYuX3JlbF9wYXRoKHBhdGgsIHN0YXJ0X3BhdGgpCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShyZWxfcGF0aCBpcyBOb25lKQorCisgICAgICAgIHJlbF9wYXRoID0gc2VsZi5f
cmVsX3BhdGgoIldlYktpdFRvb2xzIiwgIldlYktpdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShyZWxfcGF0aCBpcyBOb25lKQorCisKK2NsYXNzIENoYW5nZURpcmVjdG9yeVRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgorCisgICAgIiIiVGVzdHMgY2hhbmdlX2RpcmVjdG9yeSgpLiIiIgorCisg
ICAgX29yaWdpbmFsX2RpcmVjdG9yeSA9ICIvb3JpZ2luYWwiCisgICAgX2NoZWNrb3V0X3Jvb3Qg
PSAiL1dlYktpdCIKKworICAgIGNsYXNzIF9Nb2NrT3Mob2JqZWN0KToKKworICAgICAgICAiIiJB
IG1vY2sgb3MgbW9kdWxlIGZvciB1bml0IHRlc3RpbmcuIiIiCisKKyAgICAgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHRlc3RfY2FzZSk6CisgICAgICAgICAgICBzZWxmLl90ZXN0X2Nhc2UgPSB0ZXN0
X2Nhc2UKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfZGlyZWN0b3J5ID0gXAorICAgICAgICAg
ICAgICAgIENoYW5nZURpcmVjdG9yeVRlc3QuX29yaWdpbmFsX2RpcmVjdG9yeQorCisgICAgICAg
IGRlZiBjaGRpcihzZWxmLCBjdXJyZW50X2RpcmVjdG9yeSk6CisgICAgICAgICAgICBzZWxmLl9j
dXJyZW50X2RpcmVjdG9yeSA9IGN1cnJlbnRfZGlyZWN0b3J5CisKKyAgICAgICAgZGVmIGFzc2Vy
dEN1cnJlbnREaXJlY3Rvcnkoc2VsZiwgZXhwZWN0ZWRfZGlyZWN0b3J5KToKKyAgICAgICAgICAg
IHNlbGYuX3Rlc3RfY2FzZS5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRfZGlyZWN0b3J5LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2RpcmVjdG9y
eSkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fbG9nID0gTG9nVGVzdGlu
Zy5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLl9tb2NrX29zID0gc2VsZi5fTW9ja09zKHNlbGYp
CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuX2xvZy50ZWFyRG93bigp
CisKKyAgICAjIFRoaXMgbWV0aG9kIGlzIGEgY29udmVuaWVudCB3cmFwcGVyIGZvciBjaGFuZ2Vf
d29ya2luZ19kaXJlY3RvcnkoKSB0aGF0CisgICAgIyBwYXNzZXMgdGhlIG1vY2tfb3MgZm9yIHRo
aXMgdW5pdCB0ZXN0aW5nIGNsYXNzLgorICAgIGRlZiBfY2hhbmdlX2RpcmVjdG9yeShzZWxmLCBw
YXRocywgY2hlY2tvdXRfcm9vdCk6CisgICAgICAgIHJldHVybiBjaGFuZ2VfZGlyZWN0b3J5KHBh
dGhzPXBhdGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja291dF9yb290
PWNoZWNrb3V0X3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2tfb3M9
c2VsZi5fbW9ja19vcykKKworICAgIGRlZiBfYXNzZXJ0X3Jlc3VsdChzZWxmLCBhY3R1YWxfcmV0
dXJuX3ZhbHVlLCBleHBlY3RlZF9yZXR1cm5fdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAg
IGV4cGVjdGVkX2xvZ19tZXNzYWdlcywgZXhwZWN0ZWRfY3VycmVudF9kaXJlY3RvcnkpOgorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhhY3R1YWxfcmV0dXJuX3ZhbHVlLCBleHBlY3RlZF9yZXR1
cm5fdmFsdWUpCisgICAgICAgIHNlbGYuX2xvZy5hc3NlcnRNZXNzYWdlcyhleHBlY3RlZF9sb2df
bWVzc2FnZXMpCisgICAgICAgIHNlbGYuX21vY2tfb3MuYXNzZXJ0Q3VycmVudERpcmVjdG9yeShl
eHBlY3RlZF9jdXJyZW50X2RpcmVjdG9yeSkKKworICAgIGRlZiB0ZXN0X2NoZWNrb3V0X3Jvb3Rf
bm9uZV9wYXRoc19ub25lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRp
b24sIHNlbGYuX2NoYW5nZV9kaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
ZWNrb3V0X3Jvb3Q9Tm9uZSwgcGF0aHM9Tm9uZSkKKyAgICAgICAgc2VsZi5fbG9nLmFzc2VydE1l
c3NhZ2VzKFtdKQorICAgICAgICBzZWxmLl9tb2NrX29zLmFzc2VydEN1cnJlbnREaXJlY3Rvcnko
c2VsZi5fb3JpZ2luYWxfZGlyZWN0b3J5KQorCisgICAgZGVmIHRlc3RfY2hlY2tvdXRfcm9vdF9u
b25lKHNlbGYpOgorICAgICAgICBwYXRocyA9IHNlbGYuX2NoYW5nZV9kaXJlY3RvcnkoY2hlY2tv
dXRfcm9vdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0
aHM9WyJwYXRoMSJdKQorICAgICAgICBsb2dfbWVzc2FnZXMgPSBbIiIiV0FSTklORzogV2ViS2l0
IGNoZWNrb3V0IHJvb3Qgbm90IGZvdW5kOgorICBQYXRoLWRlcGVuZGVudCBzdHlsZSBjaGVja3Mg
bWF5IG5vdCB3b3JrIGNvcnJlY3RseS4KKyAgU2VlIHRoZSBoZWxwIGRvY3VtZW50YXRpb24gZm9y
IG1vcmUgaW5mby4KKyIiIl0KKyAgICAgICAgc2VsZi5fYXNzZXJ0X3Jlc3VsdChwYXRocywgWyJw
YXRoMSJdLCBsb2dfbWVzc2FnZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5f
b3JpZ2luYWxfZGlyZWN0b3J5KQorCisgICAgZGVmIHRlc3RfcGF0aHNfbm9uZShzZWxmKToKKyAg
ICAgICAgcGF0aHMgPSBzZWxmLl9jaGFuZ2VfZGlyZWN0b3J5KGNoZWNrb3V0X3Jvb3Q9c2VsZi5f
Y2hlY2tvdXRfcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
dGhzPU5vbmUpCisgICAgICAgIHNlbGYuX2Fzc2VydF9yZXN1bHQocGF0aHMsIE5vbmUsIFtdLCBz
ZWxmLl9jaGVja291dF9yb290KQorCisgICAgZGVmIHRlc3RfcGF0aHNfY29udmVydGlibGUoc2Vs
Zik6CisgICAgICAgIHBhdGhzPVsiL1dlYktpdC9mb28xLnR4dCIsCisgICAgICAgICAgICAgICAi
L1dlYktpdC9mb28yLnR4dCJdCisgICAgICAgIHBhdGhzID0gc2VsZi5fY2hhbmdlX2RpcmVjdG9y
eShjaGVja291dF9yb290PXNlbGYuX2NoZWNrb3V0X3Jvb3QsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXRocz1wYXRocykKKyAgICAgICAgc2VsZi5fYXNzZXJ0X3Jl
c3VsdChwYXRocywgWyJmb28xLnR4dCIsICJmb28yLnR4dCJdLCBbXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9jaGVja291dF9yb290KQorCisgICAgZGVmIHRlc3Rfd2l0aF9z
Y21fcGF0aHNfdW5jb252ZXJ0aWJsZShzZWxmKToKKyAgICAgICAgcGF0aHM9WyIvV2ViS2l0L2Zv
bzEudHh0IiwKKyAgICAgICAgICAgICAgICIvb3V0c2lkZS9mb28yLnR4dCJdCisgICAgICAgIHBh
dGhzID0gc2VsZi5fY2hhbmdlX2RpcmVjdG9yeShjaGVja291dF9yb290PXNlbGYuX2NoZWNrb3V0
X3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRocz1wYXRo
cykKKyAgICAgICAgbG9nX21lc3NhZ2VzID0gWworIiIiV0FSTklORzogUGF0aC1kZXBlbmRlbnQg
c3R5bGUgY2hlY2tzIG1heSBub3Qgd29yayBjb3JyZWN0bHk6CisKKyAgT25lIG9mIHRoZSBnaXZl
biBwYXRocyBpcyBvdXRzaWRlIHRoZSBXZWJLaXQgY2hlY2tvdXQgb2YgdGhlIGN1cnJlbnQKKyAg
d29ya2luZyBkaXJlY3Rvcnk6CisKKyAgICBQYXRoOiAvb3V0c2lkZS9mb28yLnR4dAorICAgIENo
ZWNrb3V0IHJvb3Q6IC9XZWJLaXQKKworICBQYXNzIG9ubHkgZmlsZXMgYmVsb3cgdGhlIGNoZWNr
b3V0IHJvb3QgdG8gZW5zdXJlIGNvcnJlY3QgcmVzdWx0cy4KKyAgU2VlIHRoZSBoZWxwIGRvY3Vt
ZW50YXRpb24gZm9yIG1vcmUgaW5mby4KKworIiIiXQorICAgICAgICBzZWxmLl9hc3NlcnRfcmVz
dWx0KHBhdGhzLCBwYXRocywgbG9nX21lc3NhZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX29yaWdpbmFsX2RpcmVjdG9yeSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3R5bGUvb3B0cGFyc2VyLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9vcHRwYXJzZXIucHkKaW5kZXggZmM0MGE0My4uOTk0YmFhZiAxMDA2NDQK
LS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9vcHRwYXJzZXIucHkKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9vcHRwYXJzZXIucHkKQEAgLTIz
LDEyICsyMywxNSBAQAogIiIiU3VwcG9ydHMgdGhlIHBhcnNpbmcgb2YgY29tbWFuZC1saW5lIG9w
dGlvbnMgZm9yIGNoZWNrLXdlYmtpdC1zdHlsZS4iIiIKIAogaW1wb3J0IGdldG9wdAoraW1wb3J0
IGxvZ2dpbmcKIGltcG9ydCBvcy5wYXRoCiBpbXBvcnQgc3lzCiAKIGZyb20gZmlsdGVyIGltcG9y
dCB2YWxpZGF0ZV9maWx0ZXJfcnVsZXMKICMgVGhpcyBtb2R1bGUgc2hvdWxkIG5vdCBpbXBvcnQg
YW55dGhpbmcgZnJvbSBjaGVja2VyLnB5LgogCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19u
YW1lX18pCisKIAogZGVmIF9jcmVhdGVfdXNhZ2UoZGVmYXVsdF9vcHRpb25zKToKICAgICAiIiJS
ZXR1cm4gdGhlIHVzYWdlIHN0cmluZyB0byBkaXNwbGF5IGZvciBjb21tYW5kIGhlbHAuCkBAIC05
OCw2ICsxMDEsMzggQEAgU3ludGF4OiAlKHByb2dyYW1fbmFtZSlzIFstLWRlYnVnXSBbLS12ZXJi
b3NlPSNdIFstLWdpdC1jb21taXQ9PFNpbmdsZUNvbW1pdD5dCiAgICAgICAlKHByb2dyYW1fbmFt
ZSlzLCBhbG9uZyB3aXRoIHdoaWNoIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQsIHBhc3MKICAgICAg
IHRoZSBlbXB0eSBmaWx0ZXIgYXMgZm9sbG93czoKICAgICAgICAgIC0tZmlsdGVyPQorCitQYXRo
IGNvbnNpZGVyYXRpb25zOgorCisgIENlcnRhaW4gc3R5bGUtY2hlY2tpbmcgYmVoYXZpb3IgZGVw
ZW5kcyBvbiB0aGUgcGF0aHMgcmVsYXRpdmUgdG8KKyAgdGhlIFdlYktpdCBzb3VyY2Ugcm9vdCBv
ZiB0aGUgZmlsZXMgYmVpbmcgY2hlY2tlZC4gIEZvciBleGFtcGxlLAorICBjZXJ0YWluIHR5cGVz
IG9mIGVycm9ycyBtYXkgYmUgaGFuZGxlZCBkaWZmZXJlbnRseSBmb3IgZmlsZXMgaW4KKyAgV2Vi
S2l0L2d0ay93ZWJraXQvIChlLmcuIGJ5IHN1cHByZXNzaW5nICJyZWFkYWJpbGl0eS9uYW1pbmci
IGVycm9ycworICBmb3IgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkpLgorCisgIENvbnNlcXVlbnRs
eSwgaWYgdGhlIHBhdGggcmVsYXRpdmUgdG8gdGhlIHNvdXJjZSByb290IGNhbm5vdCBiZQorICBk
ZXRlcm1pbmVkIGZvciBhIGZpbGUgYmVpbmcgY2hlY2tlZCwgdGhlbiBzdHlsZSBjaGVja2luZyBt
YXkgbm90CisgIHdvcmsgY29ycmVjdGx5IGZvciB0aGF0IGZpbGUuICBUaGlzIGNhbiBvY2N1ciwg
Zm9yIGV4YW1wbGUsIGlmIG5vCisgIFdlYktpdCBjaGVja291dCBjYW4gYmUgZm91bmQsIG9yIGlm
IHRoZSBzb3VyY2Ugcm9vdCBjYW4gYmUgZGV0ZWN0ZWQsCisgIGJ1dCBvbmUgb2YgdGhlIGZpbGVz
IGJlaW5nIGNoZWNrZWQgbGllcyBvdXRzaWRlIHRoZSBzb3VyY2UgdHJlZS4KKworICBJZiBhIFdl
YktpdCBjaGVja291dCBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGFsbCBmaWxlcyBiZWluZyBjaGVja2Vk
CisgIGFyZSBpbiB0aGUgc291cmNlIHRyZWUsIHRoZW4gYWxsIHBhdGhzIHdpbGwgYXV0b21hdGlj
YWxseSBiZQorICBjb252ZXJ0ZWQgdG8gcGF0aHMgcmVsYXRpdmUgdG8gdGhlIHNvdXJjZSByb290
IHByaW9yIHRvIGNoZWNraW5nLgorICBUaGlzIGlzIGFsc28gdXNlZnVsIGZvciBkaXNwbGF5IHB1
cnBvc2VzLgorCisgIEN1cnJlbnRseSwgdGhpcyBjb21tYW5kIGNhbiBkZXRlY3QgdGhlIHNvdXJj
ZSByb290IG9ubHkgaWYgdGhlCisgIGNvbW1hbmQgaXMgcnVuIGZyb20gd2l0aGluIGEgV2ViS2l0
IGNoZWNrb3V0IChpLmUuIGlmIHRoZSBjdXJyZW50CisgIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGJl
bG93IHRoZSByb290IG9mIGEgY2hlY2tvdXQpLiAgSW4gcGFydGljdWxhciwKKyAgaXQgaXMgbm90
IHJlY29tbWVuZGVkIHRvIHJ1biB0aGlzIHNjcmlwdCBmcm9tIGEgZGlyZWN0b3J5IG91dHNpZGUK
KyAgYSBjaGVja291dC4KKworICBSdW5uaW5nIHRoaXMgc2NyaXB0IGZyb20gYSB0b3AtbGV2ZWwg
V2ViS2l0IHNvdXJjZSBkaXJlY3RvcnkgYW5kCisgIGNoZWNraW5nIG9ubHkgZmlsZXMgaW4gdGhl
IHNvdXJjZSB0cmVlIHdpbGwgZW5zdXJlIHRoYXQgYWxsIHN0eWxlCisgIGNoZWNraW5nIGJlaGF2
ZXMgY29ycmVjdGx5IC0tIHdoZXRoZXIgb3Igbm90IGEgY2hlY2tvdXQgY2FuIGJlCisgIGRldGVj
dGVkLiAgVGhpcyBpcyBiZWNhdXNlIGFsbCBmaWxlIHBhdGhzIHdpbGwgYWxyZWFkeSBiZSByZWxh
dGl2ZQorICB0byB0aGUgc291cmNlIHJvb3QgYW5kIHNvIHdpbGwgbm90IG5lZWQgdG8gYmUgY29u
dmVydGVkLgorCiAiIiIgJSB7J3Byb2dyYW1fbmFtZSc6IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFy
Z3ZbMF0pLAogICAgICAgICdkZWZhdWx0X3ZlcmJvc2l0eSc6IGRlZmF1bHRfb3B0aW9ucy52ZXJi
b3NpdHksCiAgICAgICAgJ2RlZmF1bHRfb3V0cHV0X2Zvcm1hdCc6IGRlZmF1bHRfb3B0aW9ucy5v
dXRwdXRfZm9ybWF0fQpAQCAtMzMxLDE2ICszNjYsMTggQEAgY2xhc3MgQXJndW1lbnRQYXJzZXIo
b2JqZWN0KToKICAgICAgICAgICAgIGZpbHRlcnMuYXBwZW5kKGZpbHRlcikKICAgICAgICAgcmV0
dXJuIGZpbHRlcnMKIAotICAgIGRlZiBwYXJzZShzZWxmLCBhcmdzKToKKyAgICBkZWYgcGFyc2Uo
c2VsZiwgYXJncywgZm91bmRfY2hlY2tvdXQpOgogICAgICAgICAiIiJQYXJzZSB0aGUgY29tbWFu
ZCBsaW5lIGFyZ3VtZW50cyB0byBjaGVjay13ZWJraXQtc3R5bGUuCiAKICAgICAgICAgQXJnczoK
ICAgICAgICAgICBhcmdzOiBBIGxpc3Qgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBhcyByZXR1
cm5lZCBieSBzeXMuYXJndlsxOl0uCisgICAgICAgICAgZm91bmRfY2hlY2tvdXQ6IEEgYm9vbGVh
biB2YWx1ZSBvZiB3aGV0aGVyIHRoZSBjdXJyZW50IHdvcmtpbmcKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGlyZWN0b3J5IHdhcyBmb3VuZCB0byBiZSBpbnNpZGUgYSBXZWJLaXQgY2hlY2tv
dXQuCiAKICAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICBBIHR1cGxlIG9mIChmaWxlbmFtZXMs
IG9wdGlvbnMpCisgICAgICAgICAgQSB0dXBsZSBvZiAocGF0aHMsIG9wdGlvbnMpCiAKLSAgICAg
ICAgICBmaWxlbmFtZXM6IFRoZSBsaXN0IG9mIGZpbGVuYW1lcyB0byBjaGVjay4KKyAgICAgICAg
ICBwYXRoczogVGhlIGxpc3Qgb2YgcGF0aHMgdG8gY2hlY2suCiAgICAgICAgICAgb3B0aW9uczog
QSBDb21tYW5kT3B0aW9uVmFsdWVzIGluc3RhbmNlLgogCiAgICAgICAgICIiIgpAQCAtMzUzLDcg
KzM5MCw3IEBAIGNsYXNzIEFyZ3VtZW50UGFyc2VyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAg
ICd2ZXJib3NlPSddCiAKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgKG9wdHMsIGZpbGVuYW1l
cykgPSBnZXRvcHQuZ2V0b3B0KGFyZ3MsICcnLCBmbGFncykKKyAgICAgICAgICAgIChvcHRzLCBw
YXRocykgPSBnZXRvcHQuZ2V0b3B0KGFyZ3MsICcnLCBmbGFncykKICAgICAgICAgZXhjZXB0IGdl
dG9wdC5HZXRvcHRFcnJvciwgZXJyOgogICAgICAgICAgICAgIyBGSVhNRTogU2V0dGxlIG9uIGFu
IGVycm9yIGhhbmRsaW5nIGFwcHJvYWNoOiBjb21lIHVwCiAgICAgICAgICAgICAjICAgICAgICB3
aXRoIGEgY29uc2lzdGVudCBndWlkZWxpbmUgYXMgdG8gd2hlbiBhbmQgd2hldGhlcgpAQCAtMzg1
LDcgKzQyMiwxMyBAQCBjbGFzcyBBcmd1bWVudFBhcnNlcihvYmplY3QpOgogICAgICAgICAgICAg
ICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgb3B0aW9uOiAiJXMiJyAlIG9wdCkKIAogICAg
ICAgICAjIENoZWNrIHZhbGlkaXR5IG9mIHJlc3VsdGluZyB2YWx1ZXMuCi0gICAgICAgIGlmIGZp
bGVuYW1lcyBhbmQgKGdpdF9jb21taXQgIT0gTm9uZSk6CisgICAgICAgIGlmIG5vdCBmb3VuZF9j
aGVja291dCBhbmQgbm90IHBhdGhzOgorICAgICAgICAgICAgX2xvZy5lcnJvcigiV2ViS2l0IGNo
ZWNrb3V0IG5vdCBmb3VuZDogWW91IG11c3QgcnVuIHRoaXMgc2NyaXB0ICIKKyAgICAgICAgICAg
ICAgICAgICAgICAgImZyb20gaW5zaWRlIGEgV2ViS2l0IGNoZWNrb3V0IGlmIHlvdSBhcmUgbm90
IHBhc3NpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAic3BlY2lmaWMgcGF0aHMgdG8gY2hl
Y2suIikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgaWYgcGF0aHMgYW5kIChn
aXRfY29tbWl0ICE9IE5vbmUpOgogICAgICAgICAgICAgc2VsZi5fZXhpdF93aXRoX3VzYWdlKCdJ
dCBpcyBub3QgcG9zc2libGUgdG8gY2hlY2sgZmlsZXMgYW5kIGEgJwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdzcGVjaWZpYyBjb21taXQgYXQgdGhlIHNhbWUgdGltZS4nKQog
CkBAIC00MDcsNSArNDUwLDUgQEAgY2xhc3MgQXJndW1lbnRQYXJzZXIob2JqZWN0KToKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Zvcm1hdD1vdXRwdXRfZm9y
bWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NpdHk9dmVy
Ym9zaXR5KQogCi0gICAgICAgIHJldHVybiAoZmlsZW5hbWVzLCBvcHRpb25zKQorICAgICAgICBy
ZXR1cm4gKHBhdGhzLCBvcHRpb25zKQogCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL29wdHBhcnNlcl91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvb3B0cGFyc2VyX3VuaXR0ZXN0LnB5CmluZGV4IDYxYTU0OGUuLjIx
ZTYxZWQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvb3B0
cGFyc2VyX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5
bGUvb3B0cGFyc2VyX3VuaXR0ZXN0LnB5CkBAIC0yOSw2ICsyOSw3IEBAIGZyb20gb3B0cGFyc2Vy
IGltcG9ydCBBcmd1bWVudFBhcnNlcgogZnJvbSBvcHRwYXJzZXIgaW1wb3J0IEFyZ3VtZW50UHJp
bnRlcgogZnJvbSBvcHRwYXJzZXIgaW1wb3J0IENvbW1hbmRPcHRpb25WYWx1ZXMgYXMgUHJvY2Vz
c29yT3B0aW9ucwogZnJvbSBvcHRwYXJzZXIgaW1wb3J0IERlZmF1bHRDb21tYW5kT3B0aW9uVmFs
dWVzCitmcm9tIHdlYmtpdHB5LnN0eWxlX3JlZmVyZW5jZXMgaW1wb3J0IExvZ1Rlc3RpbmcKIAog
CiBjbGFzcyBDcmVhdGVVc2FnZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNzUsOSArNzYs
MjAgQEAgY2xhc3MgQXJndW1lbnRQYXJzZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAg
ICIiIlRlc3QgdGhlIEFyZ3VtZW50UGFyc2VyIGNsYXNzLiIiIgogCisgICAgZGVmIHNldFVwKHNl
bGYpOgorICAgICAgICBzZWxmLl9sb2cgPSBMb2dUZXN0aW5nLnNldFVwKHNlbGYpCisKKyAgICBk
ZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuX2xvZy50ZWFyRG93bigpCisKICAgICBk
ZWYgX3BhcnNlKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYSBkZWZhdWx0IHBhcnNlKCkgZnVu
Y3Rpb24gZm9yIHRlc3RpbmcuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9jcmVhdGVfcGFyc2Vy
KCkucGFyc2UKKyAgICAgICAgIyBXZSB3aWxsIHRlc3QgZm91bmRfc2NtIEZhbHNlIHNlcGFyYXRl
bHkuCisgICAgICAgIGRlZiBwYXJzZShhcmdzLCBmb3VuZF9zY209VHJ1ZSk6CisgICAgICAgICAg
ICBwYXJzZXIgPSBzZWxmLl9jcmVhdGVfcGFyc2VyKCkKKyAgICAgICAgICAgIHJldHVybiBwYXJz
ZXIucGFyc2UoYXJncywgZm91bmRfc2NtKQorCisgICAgICAgIHJldHVybiBwYXJzZQogCiAgICAg
ZGVmIF9jcmVhdGVfZGVmYXVsdHMoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIERlZmF1bHRD
b21tYW5kT3B0aW9uVmFsdWVzIGluc3RhbmNlIGZvciB0ZXN0aW5nLiIiIgpAQCAtMTMyLDYgKzE0
NCwxMyBAQCBjbGFzcyBBcmd1bWVudFBhcnNlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAg
ICAgICAjIFBhc3MgZmlsZXMgYW5kIGdpdC1jb21taXQgYXQgdGhlIHNhbWUgdGltZS4KICAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCwgcGFyc2UsIFsnLS1naXQtY29tbWl0PScs
ICdmaWxlLnR4dCddKQogCisgICAgICAgICMgUGF0aHMgbXVzdCBiZSBwYXNzZWQgd2hlbiBmb3Vu
ZF9zY20gaXMgRmFsc2UuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQsIHBh
cnNlLCBbXSwgZm91bmRfc2NtPUZhbHNlKQorICAgICAgICBtZXNzYWdlcyA9IFsiRVJST1I6IFdl
YktpdCBjaGVja291dCBub3QgZm91bmQ6IFlvdSBtdXN0IHJ1biB0aGlzICIKKyAgICAgICAgICAg
ICAgICAgICAgInNjcmlwdCBmcm9tIGluc2lkZSBhIFdlYktpdCBjaGVja291dCBpZiB5b3UgYXJl
IG5vdCAiCisgICAgICAgICAgICAgICAgICAgICJwYXNzaW5nIHNwZWNpZmljIHBhdGhzIHRvIGNo
ZWNrLlxuIl0KKyAgICAgICAgc2VsZi5fbG9nLmFzc2VydE1lc3NhZ2VzKG1lc3NhZ2VzKQorICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBwYXJzZSwgWyctLXZlcmJvc2U9Mydd
LCBmb3VuZF9zY209RmFsc2UpCiAKICAgICBkZWYgdGVzdF9wYXJzZV9kZWZhdWx0X2FyZ3VtZW50
cyhzZWxmKToKICAgICAgICAgcGFyc2UgPSBzZWxmLl9wYXJzZSgpCmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL3VuaXR0ZXN0cy5weSBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvdW5pdHRlc3RzLnB5CmluZGV4IGQyYjQ5NjYuLjlhMDAw
NTQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvdW5pdHRl
c3RzLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvdW5pdHRlc3Rz
LnB5CkBAIC0zOCw2ICszOCw3IEBAIGltcG9ydCB1bml0dGVzdAogZnJvbSBjaGVja2VyX3VuaXR0
ZXN0IGltcG9ydCAqCiBmcm9tIGVycm9yX2hhbmRsZXJzX3VuaXR0ZXN0IGltcG9ydCAqCiBmcm9t
IGZpbHRlcl91bml0dGVzdCBpbXBvcnQgKgorZnJvbSBtYWluX3VuaXR0ZXN0IGltcG9ydCAqCiBm
cm9tIG9wdHBhcnNlcl91bml0dGVzdCBpbXBvcnQgKgogZnJvbSBwcm9jZXNzb3JzLmNvbW1vbl91
bml0dGVzdCBpbXBvcnQgKgogZnJvbSBwcm9jZXNzb3JzLmNwcF91bml0dGVzdCBpbXBvcnQgKgpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZV9yZWZlcmVuY2Vz
LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZV9yZWZlcmVuY2VzLnB5Cmlu
ZGV4IDQ1NTM0MDIuLjA3NjU0NTcgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGVfcmVmZXJlbmNlcy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlX3JlZmVyZW5jZXMucHkKQEAgLTQ2LDYgKzQ2LDE0IEBAIGZyb20gaW5pdC5sb2d0
ZXN0aW5nIGltcG9ydCBUZXN0TG9nU3RyZWFtCiBmcm9tIHNjbSBpbXBvcnQgZGV0ZWN0X3NjbV9z
eXN0ZW0KIAogCitkZWYgZGV0ZWN0X2NoZWNrb3V0KCk6CisgICAgIiIiUmV0dXJuIGEgV2ViS2l0
Q2hlY2tvdXQgaW5zdGFuY2UsIG9yIE5vbmUgaWYgaXQgY2Fubm90IGJlIGZvdW5kLiIiIgorICAg
IGN3ZCA9IG9zLnBhdGguYWJzcGF0aChvcy5jdXJkaXIpCisgICAgc2NtID0gZGV0ZWN0X3NjbV9z
eXN0ZW0oY3dkKQorCisgICAgcmV0dXJuIE5vbmUgaWYgc2NtIGlzIE5vbmUgZWxzZSBXZWJLaXRD
aGVja291dChzY20pCisKKwogZGVmIHBhcnNlX3BhdGNoKHBhdGNoX3N0cmluZyk6CiAKICAgICAi
IiJQYXJzZSBhIHBhdGNoIHN0cmluZyBhbmQgcmV0dXJuIHRoZSBhZmZlY3RlZCBmaWxlcy4iIiIK
QEAgLTU0LDE2ICs2MiwxNSBAQCBkZWYgcGFyc2VfcGF0Y2gocGF0Y2hfc3RyaW5nKToKICAgICBy
ZXR1cm4gcGF0Y2guZmlsZXMKIAogCi1jbGFzcyBTaW1wbGVTY20ob2JqZWN0KToKK2NsYXNzIFdl
YktpdENoZWNrb3V0KG9iamVjdCk6CiAKLSAgICAiIiJTaW1wbGUgZmFjYWRlIHRvIFNDTSBmb3Ig
dXNlIGJ5IHN0eWxlIHBhY2thZ2UuIiIiCisgICAgIiIiU2ltcGxlIGZhY2FkZSB0byB0aGUgU0NN
IGNsYXNzIGZvciB1c2UgYnkgc3R5bGUgcGFja2FnZS4iIiIKIAotICAgIGRlZiBfX2luaXRfXyhz
ZWxmKToKLSAgICAgICAgY3dkID0gb3MucGF0aC5hYnNwYXRoKCcuJykKLSAgICAgICAgc2VsZi5f
c2NtID0gZGV0ZWN0X3NjbV9zeXN0ZW0oY3dkKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzY20p
OgorICAgICAgICBzZWxmLl9zY20gPSBzY20KIAotICAgIGRlZiBjaGVja291dF9yb290KHNlbGYp
OgotICAgICAgICAiIiJSZXR1cm4gdGhlIHNvdXJjZSBjb250cm9sIHJvb3QgYXMgYW4gYWJzb2x1
dGUgcGF0aC4iIiIKKyAgICBkZWYgcm9vdF9wYXRoKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4g
dGhlIGNoZWNrb3V0IHJvb3QgYXMgYW4gYWJzb2x1dGUgcGF0aC4iIiIKICAgICAgICAgcmV0dXJu
IHNlbGYuX3NjbS5jaGVja291dF9yb290CiAKICAgICBkZWYgY3JlYXRlX3BhdGNoKHNlbGYpOgo=
</data>
<flag name="review"
          id="34735"
          type_id="1"
          status="-"
          setter="hamaji"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51837</attachid>
            <date>2010-03-27 12:39:52 -0700</date>
            <delta_ts>2010-03-27 19:56:09 -0700</delta_ts>
            <desc>Proposed patch 8</desc>
            <filename>_patch-35498-8.diff</filename>
            <type>text/plain</type>
            <size>32755</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA3NWM1ZDZjLi41MTA3YjgxIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTAtMDMt
MjEgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlZCBjaGVjay13ZWJraXQt
c3R5bGUgdG8gY29udmVydCBwYXRocyB0byBwYXRocyByZWxhdGl2ZSB0bworICAgICAgICB0aGUg
Y2hlY2tvdXQgcm9vdCB3aGVuIGludm9raW5nIGNoZWNrLXdlYmtpdC1zdHlsZSB3aXRoIHBhdGgK
KyAgICAgICAgYXJndW1lbnRzLiAgQWxzbyBhZGRlZCB3YXJuaW5nIG1lc3NhZ2VzIHdoZXJlIGFw
cHJvcHJpYXRlLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zNTQ5OAorCisgICAgICAgIENvbnZlcnRpbmcgcGF0aHMgdG8gcGF0aHMgcmVsYXRpdmUg
dG8gdGhlIGNoZWNrb3V0IHJvb3QgZW5zdXJlcworICAgICAgICB0aGF0IHN0eWxlIGNoZWNraW5n
IHdpbGwgYmVoYXZlIGFzIGV4cGVjdGVkIChzaW5jZSBwYXRoLXNwZWNpZmljCisgICAgICAgIHJ1
bGVzIGFzc3VtZSBpbnB1dCBwYXRocyBhcmUgcmVsYXRpdmUgdG8gYSBzb3VyY2Ugcm9vdCkuCisK
KyAgICAgICAgKiBTY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHlsZToKKyAgICAgICAgICAtIEFkZGVk
IGRlYnVnIGxvZ2dpbmcgb2Ygd2hldGhlciB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2FzIGZvdW5k
CisgICAgICAgICAgICB0byBiZSBpbiBhIFdlYktpdCBjaGVja291dC4KKyAgICAgICAgICAtIEFk
ZGVkIHRoZSBmb3VuZF9jaGVja291dCBwYXJhbWV0ZXIgdG8gdGhlIGNhbGwgdG8gcGFyc2VyLnBh
cnNlKCkuCisgICAgICAgICAgLSBSZW5hbWVkIHRoZSBmaWxlcyB2YXJpYWJsZSB0byBwYXRocy4K
KyAgICAgICAgICAtIEFkZGVkIGEgY2FsbCB0byBjaGFuZ2VfZGlyZWN0b3J5KCkgcHJpb3IgdG8g
Y2hlY2tpbmcgc3R5bGUuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXIucHk6CisgICAgICAgICAgLSBGb3IgU3R5bGVDaGVja2VyLmNoZWNrX2ZpbGUoKToKKyAgICAg
ICAgICAgIC0gVXBkYXRlZCB0aGUgZG9jc3RyaW5nLgorICAgICAgICAgICAgLSBBZGRlZCB0d28g
bG9nIG1lc3NhZ2VzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vy
X3VuaXR0ZXN0LnB5OgorICAgICAgICAgIC0gVXBkYXRlZCBhIGNhbGwgdG8gcGFyc2VyLnBhcnNl
KCkgd2l0aCB0aGUgZm91bmRfY2hlY2tvdXQgcGFyYW1ldGVyLgorCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9zdHlsZS9tYWluLnB5OiBBZGRlZC4KKyAgICAgICAgICAtIEFkZGVkIGEgbmV3
IGZpbGUgc28gdGhlIGNvZGUgaW4gdGhpcyBwYXRjaCBjb3VsZCBiZSB1bml0LXRlc3RlZCwKKyAg
ICAgICAgICAgIGFzIG9wcG9zZWQgdG8gYWRkaW5nIG5ldyBjb2RlIHRvIGNoZWNrLXdlYmtpdC1z
dHlsZS4KKyAgICAgICAgICAtIEFkZGVkIHRoZSBtZXRob2QgX3JlbF9wYXRoKCkgYXMgYSBzdWJz
dGl0dXRlIGZvciBvcy5wYXRoLnJlbHBhdGgoKSwKKyAgICAgICAgICAgIHdoaWNoIGlzIGF2YWls
YWJsZSBvbmx5IGluIFB5dGhvbiAyLjYuCisgICAgICAgICAgLSBBZGRlZCB0aGUgbWV0aG9kIGNo
YW5nZV9kaXJlY3RvcnkoKSwgd2hpY2ggY29udGFpbnMgbW9zdCBvZiB0aGUKKyAgICAgICAgICAg
IG5ldyBmdW5jdGlvbmFsaXR5IGluIHRoaXMgcGF0Y2guCisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL21haW5fdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAgIC0gQWRkZWQg
UmVsUGF0aFRlc3QgdG8gdGVzdCBtYWluLl9yZWxfcGF0aCgpLgorICAgICAgICAgIC0gQWRkZWQg
Q2hhbmdlRGlyZWN0b3J5VGVzdCB0byB0ZXN0IG1haW4uY2hhbmdlX2RpcmVjdG9yeSgpLgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9vcHRwYXJzZXIucHk6CisgICAgICAgICAg
LSBVcGRhdGVkIGNoZWNrLXdlYmtpdC1zdHlsZSdzIHVzYWdlIHN0cmluZy4KKyAgICAgICAgICAt
IEZvciB0aGUgQXJndW1lbnRQYXJzZXIucGFyc2UoKSBtZXRob2Q6CisgICAgICAgICAgICAtIEFk
ZGVkIGEgZm91bmRfY2hlY2tvdXQgcGFyYW1ldGVyLgorICAgICAgICAgICAgLSBSZW5hbWVkIGZp
bGVuYW1lcyB0byBwYXRocy4KKyAgICAgICAgICAgIC0gQWRkZWQgbG9naWMgc28gdGhhdCBhbiBl
cnJvciBpcyByYWlzZWQgaWYgbm8gcGF0aHMgYXJlIHBhc3NlZAorICAgICAgICAgICAgICBpZiBm
b3VuZF9jaGVja291dCBpcyBGYWxzZS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5
bGUvb3B0cGFyc2VyX3VuaXR0ZXN0LnB5OgorICAgICAgICAgIC0gVXBkYXRlZCB0aGUgQXJndW1l
bnRQYXJzZXIucGFyc2UoKSB1bml0IHRlc3RzIHRvIGluY2x1ZGUKKyAgICAgICAgICAgIGNvdmVy
YWdlIGZvciB0aGUgbmV3IGZvdW5kX2NoZWNrb3V0IHBhcmFtZXRlci4KKworICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvc3R5bGUvdW5pdHRlc3RzLnB5OgorICAgICAgICAgIC0gQWRkZWQgYW4g
aW1wb3J0IHN0YXRlbWVudCBmb3IgbWFpbl91bml0dGVzdC4KKworICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvc3R5bGVfcmVmZXJlbmNlcy5weToKKyAgICAgICAgICAtIFJlbmFtZWQgU2ltcGxl
U2NtIHRvIFdlYktpdENoZWNrb3V0LgorICAgICAgICAgIC0gQWRkZWQgYSBkZXRlY3RfY2hlY2tv
dXQoKSBmdW5jdGlvbiB0byBhbGxvdyByZXR1cm5pbmcgTm9uZQorICAgICAgICAgICAgaW5zdGVh
ZCBvZiBhIFdlYktpdENoZWNrb3V0IGluc3RhbmNlIGlmIG5vIGNoZWNrb3V0IGlzIGZvdW5kLgor
ICAgICAgICAgIC0gUmVuYW1lZCBjaGVja291dF9yb290IHRvIHJvb3RfcGF0aC4KKwogMjAxMC0w
My0yNiAgUm9iZXJ0IEhvZ2FuICA8cm9iZXJ0QHJvYmVydGhvZ2FuLm5ldD4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvY2hlY2std2Via2l0LXN0eWxlIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9jaGVjay13ZWJraXQt
c3R5bGUKaW5kZXggZDQ3ZGMzYi4uMmE4NmIyNiAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy9jaGVjay13ZWJraXQtc3R5bGUKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9jaGVjay13
ZWJraXQtc3R5bGUKQEAgLTQ4LDExICs0OCwxNCBAQCBpbXBvcnQgb3MKIGltcG9ydCBvcy5wYXRo
CiBpbXBvcnQgc3lzCiAKK2Zyb20gd2Via2l0cHkuc3R5bGVfcmVmZXJlbmNlcyBpbXBvcnQgZGV0
ZWN0X2NoZWNrb3V0Citmcm9tIHdlYmtpdHB5LnN0eWxlLm1haW4gaW1wb3J0IGNoYW5nZV9kaXJl
Y3RvcnkKIGltcG9ydCB3ZWJraXRweS5zdHlsZS5jaGVja2VyIGFzIGNoZWNrZXIKLWZyb20gd2Vi
a2l0cHkuc3R5bGVfcmVmZXJlbmNlcyBpbXBvcnQgU2ltcGxlU2NtCiAKIF9sb2cgPSBsb2dnaW5n
LmdldExvZ2dlcigiY2hlY2std2Via2l0LXN0eWxlIikKIAorCisjIEZJWE1FOiBNb3ZlIHRoaXMg
Y29kZSB0byBzdHlsZS5tYWluLgogZGVmIG1haW4oKToKICAgICAjIENoYW5nZSBzdGRlcnIgdG8g
d3JpdGUgd2l0aCByZXBsYWNlbWVudCBjaGFyYWN0ZXJzIHNvIHdlIGRvbid0IGRpZQogICAgICMg
aWYgd2UgdHJ5IHRvIHByaW50IHNvbWV0aGluZyBjb250YWluaW5nIG5vbi1BU0NJSSBjaGFyYWN0
ZXJzLgpAQCAtODAsMjEgKzgzLDI4IEBAIGRlZiBtYWluKCk6CiAgICAgY2hlY2tlci5jb25maWd1
cmVfbG9nZ2luZyhzdHJlYW09c3RkZXJyLCBpc19kZWJ1Zz1pc19kZWJ1ZykKICAgICBfbG9nLmRl
YnVnKCJEZWJ1ZyBsb2dnaW5nIGVuYWJsZWQuIikKIAorICAgIGNoZWNrb3V0ID0gZGV0ZWN0X2No
ZWNrb3V0KCkKKworICAgIGlmIGNoZWNrb3V0IGlzIE5vbmU6CisgICAgICAgIGNoZWNrb3V0X3Jv
b3QgPSBOb25lCisgICAgICAgIF9sb2cuZGVidWcoIldlYktpdCBjaGVja291dCBub3QgZm91bmQg
Zm9yIGN1cnJlbnQgZGlyZWN0b3J5LiIpCisgICAgZWxzZToKKyAgICAgICAgY2hlY2tvdXRfcm9v
dCA9IGNoZWNrb3V0LnJvb3RfcGF0aCgpCisgICAgICAgIF9sb2cuZGVidWcoIldlYktpdCBjaGVj
a291dCBmb3VuZCB3aXRoIHJvb3Q6ICVzIiAlIGNoZWNrb3V0X3Jvb3QpCisKICAgICBwYXJzZXIg
PSBjaGVja2VyLmNoZWNrX3dlYmtpdF9zdHlsZV9wYXJzZXIoKQotICAgIChmaWxlcywgb3B0aW9u
cykgPSBwYXJzZXIucGFyc2UoYXJncykKKyAgICBmb3VuZF9jaGVja291dCA9IGNoZWNrb3V0IGlz
IG5vdCBOb25lCisgICAgKHBhdGhzLCBvcHRpb25zKSA9IHBhcnNlci5wYXJzZShhcmdzLCBmb3Vu
ZF9jaGVja291dD1mb3VuZF9jaGVja291dCkKIAogICAgIGNvbmZpZ3VyYXRpb24gPSBjaGVja2Vy
LmNoZWNrX3dlYmtpdF9zdHlsZV9jb25maWd1cmF0aW9uKG9wdGlvbnMpCiAgICAgc3R5bGVfY2hl
Y2tlciA9IGNoZWNrZXIuU3R5bGVDaGVja2VyKGNvbmZpZ3VyYXRpb24pCiAKLSAgICBpZiBmaWxl
czoKLSAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVzOgotICAgICAgICAgICAgc3R5bGVfY2hl
Y2tlci5jaGVja19maWxlKGZpbGVuYW1lKQorICAgIHBhdGhzID0gY2hhbmdlX2RpcmVjdG9yeShj
aGVja291dF9yb290PWNoZWNrb3V0X3Jvb3QsIHBhdGhzPXBhdGhzKQogCisgICAgaWYgcGF0aHM6
CisgICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICAgICAgc3R5bGVfY2hlY2tlci5j
aGVja19maWxlKHBhdGgpCiAgICAgZWxzZToKLSAgICAgICAgc2NtID0gU2ltcGxlU2NtKCkKLQot
ICAgICAgICBvcy5jaGRpcihzY20uY2hlY2tvdXRfcm9vdCgpKQotCiAgICAgICAgIGlmIG9wdGlv
bnMuZ2l0X2NvbW1pdDoKICAgICAgICAgICAgIGNvbW1pdCA9IG9wdGlvbnMuZ2l0X2NvbW1pdAog
ICAgICAgICAgICAgaWYgJy4uJyBpbiBjb21taXQ6CkBAIC0xMDMsOSArMTEzLDkgQEAgZGVmIG1h
aW4oKToKICAgICAgICAgICAgICAgICBjb21taXQgPSBjb21taXRbOmNvbW1pdC5maW5kKCcuLicp
XQogICAgICAgICAgICAgICAgIF9sb2cud2FybigiUmFuZ2VzIGFyZSBub3Qgc3VwcG9ydGVkIGZv
ciAtLWdpdC1jb21taXQuICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNoZWNraW5nIGFs
bCBjaGFuZ2VzIHNpbmNlICVzLiIgJSBjb21taXQpCi0gICAgICAgICAgICBwYXRjaCA9IHNjbS5j
cmVhdGVfcGF0Y2hfc2luY2VfbG9jYWxfY29tbWl0KGNvbW1pdCkKKyAgICAgICAgICAgIHBhdGNo
ID0gY2hlY2tvdXQuY3JlYXRlX3BhdGNoX3NpbmNlX2xvY2FsX2NvbW1pdChjb21taXQpCiAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICBwYXRjaCA9IHNjbS5jcmVhdGVfcGF0Y2goKQorICAgICAg
ICAgICAgcGF0Y2ggPSBjaGVja291dC5jcmVhdGVfcGF0Y2goKQogICAgICAgICBzdHlsZV9jaGVj
a2VyLmNoZWNrX3BhdGNoKHBhdGNoKQogCiAgICAgZXJyb3JfY291bnQgPSBzdHlsZV9jaGVja2Vy
LmVycm9yX2NvdW50CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2NoZWNrZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXIucHkKaW5kZXggM2U2OWY5Ni4uZjEyOTk3NiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAtNTg2LDcgKzU4Niw5IEBAIGNsYXNzIFN0eWxl
Q2hlY2tlcihvYmplY3QpOgogICAgICAgICAiIiJDaGVjayBzdHlsZSBpbiB0aGUgZ2l2ZW4gZmls
ZS4KIAogICAgICAgICBBcmdzOgotICAgICAgICAgIGZpbGVfcGF0aDogQSBzdHJpbmcgdGhhdCBp
cyB0aGUgcGF0aCBvZiB0aGUgZmlsZSB0byBwcm9jZXNzLgorICAgICAgICAgIGZpbGVfcGF0aDog
VGhlIHBhdGggb2YgdGhlIGZpbGUgdG8gcHJvY2Vzcy4gIElmIHBvc3NpYmxlLCB0aGUgcGF0aAor
ICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBzb3VyY2Ugcm9v
dC4gIE90aGVyd2lzZSwKKyAgICAgICAgICAgICAgICAgICAgIHBhdGgtc3BlY2lmaWMgbG9naWMg
bWF5IG5vdCBiZWhhdmUgYXMgZXhwZWN0ZWQuCiAgICAgICAgICAgaGFuZGxlX3N0eWxlX2Vycm9y
OiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgc3R5bGUgZXJyb3IKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9jY3Vycy4gVGhpcyBwYXJhbWV0ZXIgaXMgbWVhbnQgZm9yIGludGVy
bmFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2Ugd2l0aGluIHRoaXMgY2xhc3Mu
IERlZmF1bHRzIHRvIGEKQEAgLTU5Niw2ICs1OTgsNyBAQCBjbGFzcyBTdHlsZUNoZWNrZXIob2Jq
ZWN0KToKICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIHRoZSBmaWxlIHByb2Nl
c3NpbmcgbWV0aG9kIG9mIHRoaXMgY2xhc3MuCiAKICAgICAgICAgIiIiCisgICAgICAgIF9sb2cu
ZGVidWcoIkNoZWNraW5nOiAiICsgZmlsZV9wYXRoKQogICAgICAgICBpZiBoYW5kbGVfc3R5bGVf
ZXJyb3IgaXMgTm9uZToKICAgICAgICAgICAgIGhhbmRsZV9zdHlsZV9lcnJvciA9IERlZmF1bHRT
dHlsZUVycm9ySGFuZGxlcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25maWd1cmF0aW9uPXNlbGYuX2NvbmZpZ3VyYXRpb24sCkBAIC02MjEsOCArNjI0LDE1IEBAIGNs
YXNzIFN0eWxlQ2hlY2tlcihvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoYW5kbGVfc3R5bGVfZXJyb3IsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJvc2l0eSkKICAgICAgICAgaWYg
cHJvY2Vzc29yIGlzIE5vbmU6CisgICAgICAgICAgICAjIERpc3BsYXkgYSB3YXJuaW5nIHNvIGFz
IG5vdCB0byBnaXZlIGFuIGltcHJlc3Npb24gdGhhdCB0aGlzCisgICAgICAgICAgICAjIHdhcyBj
aGVja2VkLgorICAgICAgICAgICAgX2xvZy5pbmZvKCdGaWxlIG5vdCBhIHJlY29nbml6ZWQgdHlw
ZSB0byBjaGVjay4gU2tpcHBpbmc6ICIlcyInCisgICAgICAgICAgICAgICAgICAgICAgJSBmaWxl
X3BhdGgpCiAgICAgICAgICAgICByZXR1cm4KIAorCisgICAgICAgIF9sb2cuZGVidWcoIlVzaW5n
IGNsYXNzOiAiICsgcHJvY2Vzc29yLl9fY2xhc3NfXy5fX25hbWVfXykKKwogICAgICAgICBwcm9j
ZXNzX2ZpbGUocHJvY2Vzc29yLCBmaWxlX3BhdGgsIGhhbmRsZV9zdHlsZV9lcnJvcikKIAogICAg
IGRlZiBjaGVja19wYXRjaChzZWxmLCBwYXRjaF9zdHJpbmcpOgpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5IGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5CmluZGV4IGE1
NjZhMTguLmEwOGJmYTYgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3R5bGUvY2hlY2tlcl91bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHkKQEAgLTE4MCw3ICsxODAsOSBAQCBjbGFzcyBH
bG9iYWxWYXJpYWJsZXNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdF9vcHRpb25zPWRlZmF1bHRfb3B0aW9ucykKICAgICAgICAg
IyBObyBuZWVkIHRvIHRlc3QgdGhlIHJldHVybiB2YWx1ZSBoZXJlIHNpbmNlIHdlIHRlc3QgcGFy
c2UoKQogICAgICAgICAjIG9uIHZhbGlkIGFyZ3VtZW50cyBlbHNld2hlcmUuCi0gICAgICAgIHBh
cnNlci5wYXJzZShbXSkgIyBhcmd1bWVudHMgdmFsaWQ6IG5vIGVycm9yIG9yIFN5c3RlbUV4aXQK
KyAgICAgICAgIworICAgICAgICAjIFRoZSBkZWZhdWx0IG9wdGlvbnMgYXJlIHZhbGlkOiBubyBl
cnJvciBvciBTeXN0ZW1FeGl0LgorICAgICAgICBwYXJzZXIucGFyc2UoYXJncz1bXSwgZm91bmRf
Y2hlY2tvdXQ9VHJ1ZSkKIAogICAgIGRlZiB0ZXN0X3BhdGhfcnVsZXNfc3BlY2lmaWVyKHNlbGYp
OgogICAgICAgICBhbGxfY2F0ZWdvcmllcyA9IHNlbGYuX2FsbF9jYXRlZ29yaWVzKCkKZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvbWFpbi5weSBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvbWFpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5jYTYwZDljCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdHlsZS9tYWluLnB5CkBAIC0wLDAgKzEsMTc1IEBACisjIENvcHly
aWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2plcmRvbmVrQHdlYmtpdC5vcmcpCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisj
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitp
bXBvcnQgb3MKK2ltcG9ydCBzeXMKKworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1l
X18pCisKKworIyBUaGlzIGZ1bmN0aW9uIGlzIGEgcmVwbGFjZW1lbnQgZm9yIG9zLnBhdGgucmVs
cGF0aCgpLCB3aGljaCBpcyBvbmx5CisjIGF2YWlsYWJsZSBpbiBQeXRob24gMi42LiAgSXQgc2hv
dWxkIGJlaGF2ZSBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcworIyBvcy5wYXRoLnJlbHBhdGgoKSwg
ZXhjZXB0IGZvciByZXR1cm5pbmcgTm9uZSBvbiBwYXRocyBub3QgY29udGFpbmVkCisjIGluIGFi
c19zdGFydF9wYXRoLgorZGVmIF9yZWxfcGF0aChwYXRoLCBzdGFydF9wYXRoLCBvc19wYXRoX2Fi
c3BhdGg9Tm9uZSk6CisgICAgIiIiUmV0dXJuIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4g
c3RhcnQgcGF0aCwgb3IgTm9uZS4KKworICAgIFJldHVybnMgTm9uZSBpZiB0aGUgcGF0aCBpcyBu
b3QgY29udGFpbmVkIGluIHRoZSBkaXJlY3Rvcnkgc3RhcnRfcGF0aC4KKworICAgIEFyZ3M6Cisg
ICAgICBwYXRoOiBBbiBhYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRoIHRvIGNvbnZlcnQgdG8gYSBy
ZWxhdGl2ZSBwYXRoLgorICAgICAgc3RhcnRfcGF0aDogVGhlIHBhdGggcmVsYXRpdmUgdG8gd2hp
Y2ggdGhlIGdpdmVuIHBhdGggc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQu
CisgICAgICBvc19wYXRoX2Fic3BhdGg6IEEgcmVwbGFjZW1lbnQgZnVuY3Rpb24gZm9yIHVuaXQg
dGVzdGluZy4gIFRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc2hvdWxkIHN0
cmlwIHRyYWlsaW5nIHNsYXNoZXMganVzdCBsaWtlCisgICAgICAgICAgICAgICAgICAgICAgIG9z
LnBhdGguYWJzcGF0aCgpLiAgRGVmYXVsdHMgdG8gb3MucGF0aC5hYnNwYXRoLgorCisgICAgIiIi
CisgICAgaWYgb3NfcGF0aF9hYnNwYXRoIGlzIE5vbmU6CisgICAgICAgIG9zX3BhdGhfYWJzcGF0
aCA9IG9zLnBhdGguYWJzcGF0aAorCisgICAgIyBDYWxsaW5nIG9zX3BhdGhfYWJzcGF0aCgpIGFs
c28gcmVtb3ZlcyBhbnkgdHJhaWxpbmcgc2xhc2hlcy4KKyAgICBzdGFydF9wYXRoID0gb3NfcGF0
aF9hYnNwYXRoKHN0YXJ0X3BhdGgpCisgICAgcGF0aCA9IG9zX3BhdGhfYWJzcGF0aChwYXRoKQor
CisgICAgc2xhc2hfY2hhcnMgPSAiL1xcIgorCisgICAgaWYgbm90IHBhdGgubG93ZXIoKS5zdGFy
dHN3aXRoKHN0YXJ0X3BhdGgubG93ZXIoKSk6CisgICAgICAgICMgVGhlbiBwYXRoIGlzIG91dHNp
ZGUgdGhlIGRpcmVjdG9yeSBnaXZlbiBieSBzdGFydF9wYXRoLgorICAgICAgICByZXR1cm4gTm9u
ZQorCisgICAgcmVsX3BhdGggPSBwYXRoW2xlbihzdGFydF9wYXRoKTpdCisKKyAgICBpZiByZWxf
cGF0aCBhbmQgcmVsX3BhdGhbMF0gbm90IGluIHNsYXNoX2NoYXJzOgorICAgICAgICAjIFRoZW4g
d2UgYXJlIGluIHRoZSBjYXNlIHR5cGlmaWVkIGJ5IHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKKyAg
ICAgICAgIworICAgICAgICAjIHN0YXJ0X3BhdGggPSAiL3RtcC9mb28iCisgICAgICAgICMgcGF0
aCA9ICIvdG1wL2Zvb2JhciIKKyAgICAgICAgIyByZWxfcGF0aCA9ICJiYXIiCisgICAgICAgIHJl
dHVybiBOb25lCisgICAgIyBPdGhlcndpc2UgcmVsX3BhdGggaXMgIiIgb3IgYmVnaW5zIHdpdGgg
YSBzbGFzaC4KKworICAgIHJlbF9wYXRoID0gcmVsX3BhdGgubHN0cmlwKHNsYXNoX2NoYXJzKQor
CisgICAgcmV0dXJuIHJlbF9wYXRoCisKKworZGVmIGNoYW5nZV9kaXJlY3RvcnkoY2hlY2tvdXRf
cm9vdCwgcGF0aHMsIG1vY2tfb3M9Tm9uZSk6CisgICAgIiIiQ2hhbmdlIHRoZSB3b3JraW5nIGRp
cmVjdG9yeSB0byB0aGUgV2ViS2l0IGNoZWNrb3V0IHJvb3QsIGlmIHBvc3NpYmxlLgorCisgICAg
SWYgZXZlcnkgcGF0aCBpbiB0aGUgcGF0aHMgcGFyYW1ldGVyIGlzIGJlbG93IHRoZSBjaGVja291
dCByb290IChvciBpZgorICAgIHRoZSBwYXRocyBwYXJhbWV0ZXIgaXMgZW1wdHkgb3IgTm9uZSks
IHRoaXMgbWV0aG9kIGNoYW5nZXMgdGhlIGN1cnJlbnQKKyAgICB3b3JraW5nIGRpcmVjdG9yeSB0
byB0aGUgY2hlY2tvdXQgcm9vdCBhbmQgY29udmVydHMgdGhlIHBhdGhzIHBhcmFtZXRlcgorICAg
IGFzIGRlc2NyaWJlZCBiZWxvdy4KKyAgICAgICAgVGhpcyBhbGxvd3MgdGhlIHBhdGhzIGJlaW5n
IGNoZWNrZWQgdG8gYmUgZGlzcGxheWVkIHJlbGF0aXZlIHRvIHRoZQorICAgIGNoZWNrb3V0IHJv
b3QsIGFuZCBmb3IgcGF0aC1zcGVjaWZpYyBzdHlsZSBjaGVja3MgdG8gd29yayBhcyBleHBlY3Rl
ZC4KKyAgICBQYXRoLXNwZWNpZmljIGNoZWNrcyBpbmNsdWRlIHdoZXRoZXIgZmlsZXMgc2hvdWxk
IGJlIHNraXBwZWQsIHdoZXRoZXIKKyAgICBjdXN0b20gc3R5bGUgcnVsZXMgc2hvdWxkIGFwcGx5
IHRvIGNlcnRhaW4gZmlsZXMsIGV0Yy4KKyAgICAgICAgSWYgdGhlIGNoZWNrb3V0IHJvb3QgaXMg
Tm9uZSBvciB0aGUgZW1wdHkgc3RyaW5nLCB0aGlzIG1ldGhvZCByZXR1cm5zCisgICAgdGhlIHBh
dGhzIHBhcmFtZXRlciB1bmNoYW5nZWQuCisKKyAgICBSZXR1cm5zOgorICAgICAgcGF0aHM6IEEg
Y29weSBvZiB0aGUgcGF0aHMgcGFyYW1ldGVyIC0tIHBvc3NpYmx5IGNvbnZlcnRlZCwgYXMgZm9s
bG93cy4KKyAgICAgICAgICAgICBJZiB0aGlzIG1ldGhvZCBjaGFuZ2VkIHRoZSBjdXJyZW50IHdv
cmtpbmcgZGlyZWN0b3J5IHRvIHRoZQorICAgICAgICAgICAgIGNoZWNrb3V0IHJvb3QsIHRoZW4g
dGhlIGxpc3QgaXMgdGhlIHBhdGhzIHBhcmFtZXRlciBjb252ZXJ0ZWQgdG8KKyAgICAgICAgICAg
ICBub3JtYWxpemVkIHBhdGhzIHJlbGF0aXZlIHRvIHRoZSBjaGVja291dCByb290LiAgT3RoZXJ3
aXNlLCB0aGUKKyAgICAgICAgICAgICBwYXRocyBhcmUgbm90IGNvbnZlcnRlZC4KKworICAgIEFy
Z3M6CisgICAgICBwYXRoczogQSBsaXN0IG9mIHBhdGhzIHRvIHRoZSBmaWxlcyB0aGF0IHNob3Vs
ZCBiZSBjaGVja2VkIGZvciBzdHlsZS4KKyAgICAgICAgICAgICBUaGlzIGFyZ3VtZW50IGNhbiBi
ZSBOb25lIG9yIHRoZSBlbXB0eSBsaXN0IGlmIGEgZ2l0IGNvbW1pdAorICAgICAgICAgICAgIG9y
IGFsbCBjaGFuZ2VzIHVuZGVyIHRoZSBjaGVja291dCByb290IHNob3VsZCBiZSBjaGVja2VkLgor
ICAgICAgY2hlY2tvdXRfcm9vdDogVGhlIHBhdGggdG8gdGhlIHJvb3Qgb2YgdGhlIFdlYktpdCBj
aGVja291dCwgb3IgTm9uZSBvcgorICAgICAgICAgICAgICAgICAgICAgdGhlIGVtcHR5IHN0cmlu
ZyBpZiBubyBjaGVja291dCBjb3VsZCBiZSBkZXRlY3RlZC4KKyAgICAgIG1vY2tfb3M6IEEgcmVw
bGFjZW1lbnQgbW9kdWxlIGZvciB1bml0IHRlc3RpbmcuICBEZWZhdWx0cyB0byBvcy4KKworICAg
ICIiIgorICAgIG9zX21vZHVsZSA9IG9zIGlmIG1vY2tfb3MgaXMgTm9uZSBlbHNlIG1vY2tfb3MK
KworICAgIGlmIHBhdGhzIGlzIG5vdCBOb25lOgorICAgICAgICBwYXRocyA9IGxpc3QocGF0aHMp
CisKKyAgICBpZiBub3QgY2hlY2tvdXRfcm9vdDoKKyAgICAgICAgaWYgbm90IHBhdGhzOgorICAg
ICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUaGUgcGF0aHMgcGFyYW1ldGVyIG11c3QgYmUgbm9u
LWVtcHR5IGlmICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlcmUgaXMgbm8gY2hl
Y2tvdXQgcm9vdC4iKQorCisgICAgICAgICMgRklYTUU6IENvbnNpZGVyIHRyeWluZyB0byBkZXRl
Y3QgdGhlIGNoZWNrb3V0IHJvb3QgZm9yIGVhY2ggZmlsZQorICAgICAgICAjICAgICAgICBiZWlu
ZyBjaGVja2VkIHJhdGhlciB0aGFuIG9ubHkgdHJ5aW5nIHRvIGRldGVjdCB0aGUgY2hlY2tvdXQK
KyAgICAgICAgIyAgICAgICAgcm9vdCBmb3IgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnku
ICBUaGlzIHdvdWxkIGFsbG93CisgICAgICAgICMgICAgICAgIGZpbGVzIHRvIGJlIGNoZWNrZWQg
Y29ycmVjdGx5IGV2ZW4gaWYgdGhlIHNjcmlwdCBpcyBiZWluZworICAgICAgICAjICAgICAgICBy
dW4gZnJvbSBvdXRzaWRlIGFueSBXZWJLaXQgY2hlY2tvdXQuCisgICAgICAgICMKKyAgICAgICAg
IyAgICAgICAgTW9yZW92ZXIsIHRyeSB0byBmaW5kIHRoZSAic291cmNlIHJvb3QiIGZvciBlYWNo
IGZpbGUKKyAgICAgICAgIyAgICAgICAgdXNpbmcgcGF0aC1iYXNlZCBoZXVyaXN0aWNzIHJhdGhl
ciB0aGFuIHVzaW5nIG9ubHkgdGhlCisgICAgICAgICMgICAgICAgIHByZXNlbmNlIG9mIGEgV2Vi
S2l0IGNoZWNrb3V0LiAgRm9yIGV4YW1wbGUsIHdlIGNvdWxkCisgICAgICAgICMgICAgICAgIGV4
YW1pbmUgcGFyZW50IGRpcmVjdG9yaWVzIHVudGlsIGEgZGlyZWN0b3J5IGlzIGZvdW5kCisgICAg
ICAgICMgICAgICAgIGNvbnRhaW5pbmcgSmF2YVNjcmlwdENvcmUsIFdlYkNvcmUsIFdlYktpdCwg
V2ViS2l0U2l0ZSwKKyAgICAgICAgIyAgICAgICAgYW5kIFdlYktpdFRvb2xzLgorICAgICAgICAj
ICAgICAgICAgICAgIFRoZW4gbG9nIGFuIElORk8gbWVzc2FnZSBzYXlpbmcgdGhhdCBhIHNvdXJj
ZSByb290IG5vdAorICAgICAgICAjICAgICAgICBpbiBhIFdlYktpdCBjaGVja291dCB3YXMgZm91
bmQuICBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gY2hlY2sKKyAgICAgICAgIyAgICAgICAgdGhlIHN0
eWxlIG9mIG5vbi1zY20gY29waWVzIG9mIHRoZSBzb3VyY2UgdHJlZSAoZS5nLgorICAgICAgICAj
ICAgICAgICBuaWdodGxpZXMpLgorICAgICAgICBfbG9nLndhcm4oIldlYktpdCBjaGVja291dCBy
b290IG5vdCBmb3VuZDpcbiIKKyAgICAgICAgICAgICAgICAgICIgIFBhdGgtZGVwZW5kZW50IHN0
eWxlIGNoZWNrcyBtYXkgbm90IHdvcmsgY29ycmVjdGx5LlxuIgorICAgICAgICAgICAgICAgICAg
IiAgU2VlIHRoZSBoZWxwIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mby4iKQorCisgICAgICAg
IHJldHVybiBwYXRocworCisgICAgaWYgcGF0aHM6CisgICAgICAgICMgVGhlbiB0cnkgY29udmVy
dGluZyBhbGwgb2YgdGhlIHBhdGhzIHRvIHBhdGhzIHJlbGF0aXZlIHRvCisgICAgICAgICMgdGhl
IGNoZWNrb3V0IHJvb3QuCisgICAgICAgIHJlbF9wYXRocyA9IFtdCisgICAgICAgIGZvciBwYXRo
IGluIHBhdGhzOgorICAgICAgICAgICAgcmVsX3BhdGggPSBfcmVsX3BhdGgocGF0aCwgY2hlY2tv
dXRfcm9vdCkKKyAgICAgICAgICAgIGlmIHJlbF9wYXRoIGlzIE5vbmU6CisgICAgICAgICAgICAg
ICAgIyBUaGVuIHRoZSBwYXRoIGlzIG5vdCBiZWxvdyB0aGUgY2hlY2tvdXQgcm9vdC4gIFNpbmNl
IGFsbAorICAgICAgICAgICAgICAgICMgcGF0aHMgc2hvdWxkIGJlIGludGVycHJldGVkIHJlbGF0
aXZlIHRvIHRoZSBzYW1lIHJvb3QsCisgICAgICAgICAgICAgICAgIyBkbyBub3QgaW50ZXJwcmV0
IGFueSBvZiB0aGUgcGF0aHMgYXMgcmVsYXRpdmUgdG8gdGhlCisgICAgICAgICAgICAgICAgIyBj
aGVja291dCByb290LiAgSW50ZXJwcmV0IGFsbCBvZiB0aGVtIHJlbGF0aXZlIHRvIHRoZQorICAg
ICAgICAgICAgICAgICMgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSwgYW5kIGRvIG5vdCBjaGFu
Z2UgdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAjIHdvcmtpbmcgZGlyZWN0b3J5LgorICAg
ICAgICAgICAgICAgIF9sb2cud2FybigKKyIiIlBhdGgtZGVwZW5kZW50IHN0eWxlIGNoZWNrcyBt
YXkgbm90IHdvcmsgY29ycmVjdGx5OgorCisgIE9uZSBvZiB0aGUgZ2l2ZW4gcGF0aHMgaXMgb3V0
c2lkZSB0aGUgV2ViS2l0IGNoZWNrb3V0IG9mIHRoZSBjdXJyZW50CisgIHdvcmtpbmcgZGlyZWN0
b3J5OgorCisgICAgUGF0aDogJXMKKyAgICBDaGVja291dCByb290OiAlcworCisgIFBhc3Mgb25s
eSBmaWxlcyBiZWxvdyB0aGUgY2hlY2tvdXQgcm9vdCB0byBlbnN1cmUgY29ycmVjdCByZXN1bHRz
LgorICBTZWUgdGhlIGhlbHAgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvLgorIiIiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICUgKHBhdGgsIGNoZWNrb3V0X3Jvb3QpKQorCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHBhdGhzCisgICAgICAgICAgICByZWxfcGF0aHMuYXBwZW5kKHJlbF9w
YXRoKQorICAgICAgICAjIElmIHdlIGdvdCBoZXJlLCB0aGUgY29udmVyc2lvbiB3YXMgc3VjY2Vz
c2Z1bC4KKyAgICAgICAgcGF0aHMgPSByZWxfcGF0aHMKKworICAgIF9sb2cuZGVidWcoIkNoYW5n
aW5nIHRvIGNoZWNrb3V0IHJvb3Q6ICIgKyBjaGVja291dF9yb290KQorICAgIG9zX21vZHVsZS5j
aGRpcihjaGVja291dF9yb290KQorCisgICAgcmV0dXJuIHBhdGhzCmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL21haW5fdW5pdHRlc3QucHkgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL21haW5fdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRhYjg0MgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvbWFpbl91bml0dGVzdC5weQpAQCAtMCwwICsx
LDE1OSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNqZXJkb25la0B3
ZWJraXQub3JnKQorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisi
IiJVbml0IHRlc3RzIGZvciBtYWluLnB5LiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVz
dAorCitmcm9tIG1haW4gaW1wb3J0IF9yZWxfcGF0aAorZnJvbSBtYWluIGltcG9ydCBjaGFuZ2Vf
ZGlyZWN0b3J5Citmcm9tIHdlYmtpdHB5LnN0eWxlX3JlZmVyZW5jZXMgaW1wb3J0IExvZ1Rlc3Rp
bmcKKworCisjIE1ha2Ugc3VyZSB0aGUgdGVzdHMgaW4gdGhpcyBjbGFzcyBhcmUgcGxhdGZvcm0g
aW5kZXBlbmRlbnQuCitjbGFzcyBSZWxQYXRoVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAg
ICAiIiJUZXN0cyBfcmVsX3BhdGgoKS4iIiIKKworICAgIG9zX3BhdGhfYWJzcGF0aCA9IGxhbWJk
YSBzZWxmLCBwYXRoOiBwYXRoCisKKyAgICBkZWYgX3JlbF9wYXRoKHNlbGYsIHBhdGgsIGFic19z
dGFydF9wYXRoKToKKyAgICAgICAgcmV0dXJuIF9yZWxfcGF0aChwYXRoLCBhYnNfc3RhcnRfcGF0
aCwgc2VsZi5vc19wYXRoX2Fic3BhdGgpCisKKyAgICBkZWYgdGVzdF9zYW1lX3BhdGgoc2VsZik6
CisgICAgICAgIHJlbF9wYXRoID0gc2VsZi5fcmVsX3BhdGgoIldlYktpdCIsICJXZWJLaXQiKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZWxfcGF0aCwgIiIpCisKKyAgICBkZWYgdGVzdF9s
b25nX3JlbF9wYXRoKHNlbGYpOgorICAgICAgICBzdGFydF9wYXRoID0gIldlYktpdCIKKyAgICAg
ICAgZXhwZWN0ZWRfcmVsX3BhdGggPSBvcy5wYXRoLmpvaW4oInRlc3QiLCAiRm9vLnR4dCIpCisg
ICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc3RhcnRfcGF0aCwgZXhwZWN0ZWRfcmVsX3BhdGgp
CisKKyAgICAgICAgcmVsX3BhdGggPSBzZWxmLl9yZWxfcGF0aChwYXRoLCBzdGFydF9wYXRoKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3RlZF9yZWxfcGF0aCwgcmVsX3BhdGgpCisK
KyAgICBkZWYgdGVzdF9ub25lX3JlbF9wYXRoKHNlbGYpOgorICAgICAgICAiIiJUZXN0IF9yZWxf
cGF0aCgpIHdpdGggTm9uZSByZXR1cm4gdmFsdWUuIiIiCisgICAgICAgIHN0YXJ0X3BhdGggPSAi
V2ViS2l0IgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCJvdGhlcl9kaXIiLCAiZm9vLnR4
dCIpCisKKyAgICAgICAgcmVsX3BhdGggPSBzZWxmLl9yZWxfcGF0aChwYXRoLCBzdGFydF9wYXRo
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVsX3BhdGggaXMgTm9uZSkKKworICAgICAgICBy
ZWxfcGF0aCA9IHNlbGYuX3JlbF9wYXRoKCJXZWJLaXRUb29scyIsICJXZWJLaXQiKQorICAgICAg
ICBzZWxmLmFzc2VydFRydWUocmVsX3BhdGggaXMgTm9uZSkKKworCitjbGFzcyBDaGFuZ2VEaXJl
Y3RvcnlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICIiIlRlc3RzIGNoYW5nZV9kaXJl
Y3RvcnkoKS4iIiIKKworICAgIF9vcmlnaW5hbF9kaXJlY3RvcnkgPSAiL29yaWdpbmFsIgorICAg
IF9jaGVja291dF9yb290ID0gIi9XZWJLaXQiCisKKyAgICBjbGFzcyBfTW9ja09zKG9iamVjdCk6
CisKKyAgICAgICAgIiIiQSBtb2NrIG9zIG1vZHVsZSBmb3IgdW5pdCB0ZXN0aW5nLiIiIgorCisg
ICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X2Nhc2UpOgorICAgICAgICAgICAgc2VsZi5f
dGVzdF9jYXNlID0gdGVzdF9jYXNlCisgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2RpcmVjdG9y
eSA9IFwKKyAgICAgICAgICAgICAgICBDaGFuZ2VEaXJlY3RvcnlUZXN0Ll9vcmlnaW5hbF9kaXJl
Y3RvcnkKKworICAgICAgICBkZWYgY2hkaXIoc2VsZiwgY3VycmVudF9kaXJlY3RvcnkpOgorICAg
ICAgICAgICAgc2VsZi5fY3VycmVudF9kaXJlY3RvcnkgPSBjdXJyZW50X2RpcmVjdG9yeQorCisg
ICAgICAgIGRlZiBhc3NlcnRDdXJyZW50RGlyZWN0b3J5KHNlbGYsIGV4cGVjdGVkX2RpcmVjdG9y
eSk6CisgICAgICAgICAgICBzZWxmLl90ZXN0X2Nhc2UuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkX2Rp
cmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5f
Y3VycmVudF9kaXJlY3RvcnkpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYu
X2xvZyA9IExvZ1Rlc3Rpbmcuc2V0VXAoc2VsZikKKyAgICAgICAgc2VsZi5fbW9ja19vcyA9IHNl
bGYuX01vY2tPcyhzZWxmKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxm
Ll9sb2cudGVhckRvd24oKQorCisgICAgIyBUaGlzIG1ldGhvZCBpcyBhIGNvbnZlbmllbnQgd3Jh
cHBlciBmb3IgY2hhbmdlX3dvcmtpbmdfZGlyZWN0b3J5KCkgdGhhdAorICAgICMgcGFzc2VzIHRo
ZSBtb2NrX29zIGZvciB0aGlzIHVuaXQgdGVzdGluZyBjbGFzcy4KKyAgICBkZWYgX2NoYW5nZV9k
aXJlY3Rvcnkoc2VsZiwgcGF0aHMsIGNoZWNrb3V0X3Jvb3QpOgorICAgICAgICByZXR1cm4gY2hh
bmdlX2RpcmVjdG9yeShwYXRocz1wYXRocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hlY2tvdXRfcm9vdD1jaGVja291dF9yb290LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtb2NrX29zPXNlbGYuX21vY2tfb3MpCisKKyAgICBkZWYgX2Fzc2VydF9yZXN1bHQo
c2VsZiwgYWN0dWFsX3JldHVybl92YWx1ZSwgZXhwZWN0ZWRfcmV0dXJuX3ZhbHVlLAorICAgICAg
ICAgICAgICAgICAgICAgICBleHBlY3RlZF9sb2dfbWVzc2FnZXMsIGV4cGVjdGVkX2N1cnJlbnRf
ZGlyZWN0b3J5KToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYWN0dWFsX3JldHVybl92YWx1
ZSwgZXhwZWN0ZWRfcmV0dXJuX3ZhbHVlKQorICAgICAgICBzZWxmLl9sb2cuYXNzZXJ0TWVzc2Fn
ZXMoZXhwZWN0ZWRfbG9nX21lc3NhZ2VzKQorICAgICAgICBzZWxmLl9tb2NrX29zLmFzc2VydEN1
cnJlbnREaXJlY3RvcnkoZXhwZWN0ZWRfY3VycmVudF9kaXJlY3RvcnkpCisKKyAgICBkZWYgdGVz
dF9jaGVja291dF9yb290X25vbmVfcGF0aHNfbm9uZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoRXhjZXB0aW9uLCBzZWxmLl9jaGFuZ2VfZGlyZWN0b3J5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGVja291dF9yb290PU5vbmUsIHBhdGhzPU5vbmUpCisgICAgICAgIHNl
bGYuX2xvZy5hc3NlcnRNZXNzYWdlcyhbXSkKKyAgICAgICAgc2VsZi5fbW9ja19vcy5hc3NlcnRD
dXJyZW50RGlyZWN0b3J5KHNlbGYuX29yaWdpbmFsX2RpcmVjdG9yeSkKKworICAgIGRlZiB0ZXN0
X2NoZWNrb3V0X3Jvb3Rfbm9uZShzZWxmKToKKyAgICAgICAgcGF0aHMgPSBzZWxmLl9jaGFuZ2Vf
ZGlyZWN0b3J5KGNoZWNrb3V0X3Jvb3Q9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhdGhzPVsicGF0aDEiXSkKKyAgICAgICAgbG9nX21lc3NhZ2VzID0gWwor
IiIiV0FSTklORzogV2ViS2l0IGNoZWNrb3V0IHJvb3Qgbm90IGZvdW5kOgorICBQYXRoLWRlcGVu
ZGVudCBzdHlsZSBjaGVja3MgbWF5IG5vdCB3b3JrIGNvcnJlY3RseS4KKyAgU2VlIHRoZSBoZWxw
IGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mby4KKyIiIl0KKyAgICAgICAgc2VsZi5fYXNzZXJ0
X3Jlc3VsdChwYXRocywgWyJwYXRoMSJdLCBsb2dfbWVzc2FnZXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fb3JpZ2luYWxfZGlyZWN0b3J5KQorCisgICAgZGVmIHRlc3RfcGF0
aHNfbm9uZShzZWxmKToKKyAgICAgICAgcGF0aHMgPSBzZWxmLl9jaGFuZ2VfZGlyZWN0b3J5KGNo
ZWNrb3V0X3Jvb3Q9c2VsZi5fY2hlY2tvdXRfcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhdGhzPU5vbmUpCisgICAgICAgIHNlbGYuX2Fzc2VydF9yZXN1bHQo
cGF0aHMsIE5vbmUsIFtdLCBzZWxmLl9jaGVja291dF9yb290KQorCisgICAgZGVmIHRlc3RfcGF0
aHNfY29udmVydGlibGUoc2VsZik6CisgICAgICAgIHBhdGhzPVsiL1dlYktpdC9mb28xLnR4dCIs
CisgICAgICAgICAgICAgICAiL1dlYktpdC9mb28yLnR4dCJdCisgICAgICAgIHBhdGhzID0gc2Vs
Zi5fY2hhbmdlX2RpcmVjdG9yeShjaGVja291dF9yb290PXNlbGYuX2NoZWNrb3V0X3Jvb3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRocz1wYXRocykKKyAgICAg
ICAgc2VsZi5fYXNzZXJ0X3Jlc3VsdChwYXRocywgWyJmb28xLnR4dCIsICJmb28yLnR4dCJdLCBb
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jaGVja291dF9yb290KQorCisg
ICAgZGVmIHRlc3Rfd2l0aF9zY21fcGF0aHNfdW5jb252ZXJ0aWJsZShzZWxmKToKKyAgICAgICAg
cGF0aHM9WyIvV2ViS2l0L2ZvbzEudHh0IiwKKyAgICAgICAgICAgICAgICIvb3V0c2lkZS9mb28y
LnR4dCJdCisgICAgICAgIHBhdGhzID0gc2VsZi5fY2hhbmdlX2RpcmVjdG9yeShjaGVja291dF9y
b290PXNlbGYuX2NoZWNrb3V0X3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXRocz1wYXRocykKKyAgICAgICAgbG9nX21lc3NhZ2VzID0gWworIiIiV0FSTklO
RzogUGF0aC1kZXBlbmRlbnQgc3R5bGUgY2hlY2tzIG1heSBub3Qgd29yayBjb3JyZWN0bHk6CisK
KyAgT25lIG9mIHRoZSBnaXZlbiBwYXRocyBpcyBvdXRzaWRlIHRoZSBXZWJLaXQgY2hlY2tvdXQg
b2YgdGhlIGN1cnJlbnQKKyAgd29ya2luZyBkaXJlY3Rvcnk6CisKKyAgICBQYXRoOiAvb3V0c2lk
ZS9mb28yLnR4dAorICAgIENoZWNrb3V0IHJvb3Q6IC9XZWJLaXQKKworICBQYXNzIG9ubHkgZmls
ZXMgYmVsb3cgdGhlIGNoZWNrb3V0IHJvb3QgdG8gZW5zdXJlIGNvcnJlY3QgcmVzdWx0cy4KKyAg
U2VlIHRoZSBoZWxwIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mby4KKworIiIiXQorICAgICAg
ICBzZWxmLl9hc3NlcnRfcmVzdWx0KHBhdGhzLCBwYXRocywgbG9nX21lc3NhZ2VzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29yaWdpbmFsX2RpcmVjdG9yeSkKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvb3B0cGFyc2VyLnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9vcHRwYXJzZXIucHkKaW5kZXggZmM0MGE0
My4uOTk0YmFhZiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHls
ZS9vcHRwYXJzZXIucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9v
cHRwYXJzZXIucHkKQEAgLTIzLDEyICsyMywxNSBAQAogIiIiU3VwcG9ydHMgdGhlIHBhcnNpbmcg
b2YgY29tbWFuZC1saW5lIG9wdGlvbnMgZm9yIGNoZWNrLXdlYmtpdC1zdHlsZS4iIiIKIAogaW1w
b3J0IGdldG9wdAoraW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcy5wYXRoCiBpbXBvcnQgc3lzCiAK
IGZyb20gZmlsdGVyIGltcG9ydCB2YWxpZGF0ZV9maWx0ZXJfcnVsZXMKICMgVGhpcyBtb2R1bGUg
c2hvdWxkIG5vdCBpbXBvcnQgYW55dGhpbmcgZnJvbSBjaGVja2VyLnB5LgogCitfbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKIAogZGVmIF9jcmVhdGVfdXNhZ2UoZGVmYXVsdF9v
cHRpb25zKToKICAgICAiIiJSZXR1cm4gdGhlIHVzYWdlIHN0cmluZyB0byBkaXNwbGF5IGZvciBj
b21tYW5kIGhlbHAuCkBAIC05OCw2ICsxMDEsMzggQEAgU3ludGF4OiAlKHByb2dyYW1fbmFtZSlz
IFstLWRlYnVnXSBbLS12ZXJib3NlPSNdIFstLWdpdC1jb21taXQ9PFNpbmdsZUNvbW1pdD5dCiAg
ICAgICAlKHByb2dyYW1fbmFtZSlzLCBhbG9uZyB3aXRoIHdoaWNoIGFyZSBlbmFibGVkIGJ5IGRl
ZmF1bHQsIHBhc3MKICAgICAgIHRoZSBlbXB0eSBmaWx0ZXIgYXMgZm9sbG93czoKICAgICAgICAg
IC0tZmlsdGVyPQorCitQYXRoIGNvbnNpZGVyYXRpb25zOgorCisgIENlcnRhaW4gc3R5bGUtY2hl
Y2tpbmcgYmVoYXZpb3IgZGVwZW5kcyBvbiB0aGUgcGF0aHMgcmVsYXRpdmUgdG8KKyAgdGhlIFdl
YktpdCBzb3VyY2Ugcm9vdCBvZiB0aGUgZmlsZXMgYmVpbmcgY2hlY2tlZC4gIEZvciBleGFtcGxl
LAorICBjZXJ0YWluIHR5cGVzIG9mIGVycm9ycyBtYXkgYmUgaGFuZGxlZCBkaWZmZXJlbnRseSBm
b3IgZmlsZXMgaW4KKyAgV2ViS2l0L2d0ay93ZWJraXQvIChlLmcuIGJ5IHN1cHByZXNzaW5nICJy
ZWFkYWJpbGl0eS9uYW1pbmciIGVycm9ycworICBmb3IgZmlsZXMgaW4gdGhpcyBkaXJlY3Rvcnkp
LgorCisgIENvbnNlcXVlbnRseSwgaWYgdGhlIHBhdGggcmVsYXRpdmUgdG8gdGhlIHNvdXJjZSBy
b290IGNhbm5vdCBiZQorICBkZXRlcm1pbmVkIGZvciBhIGZpbGUgYmVpbmcgY2hlY2tlZCwgdGhl
biBzdHlsZSBjaGVja2luZyBtYXkgbm90CisgIHdvcmsgY29ycmVjdGx5IGZvciB0aGF0IGZpbGUu
ICBUaGlzIGNhbiBvY2N1ciwgZm9yIGV4YW1wbGUsIGlmIG5vCisgIFdlYktpdCBjaGVja291dCBj
YW4gYmUgZm91bmQsIG9yIGlmIHRoZSBzb3VyY2Ugcm9vdCBjYW4gYmUgZGV0ZWN0ZWQsCisgIGJ1
dCBvbmUgb2YgdGhlIGZpbGVzIGJlaW5nIGNoZWNrZWQgbGllcyBvdXRzaWRlIHRoZSBzb3VyY2Ug
dHJlZS4KKworICBJZiBhIFdlYktpdCBjaGVja291dCBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGFsbCBm
aWxlcyBiZWluZyBjaGVja2VkCisgIGFyZSBpbiB0aGUgc291cmNlIHRyZWUsIHRoZW4gYWxsIHBh
dGhzIHdpbGwgYXV0b21hdGljYWxseSBiZQorICBjb252ZXJ0ZWQgdG8gcGF0aHMgcmVsYXRpdmUg
dG8gdGhlIHNvdXJjZSByb290IHByaW9yIHRvIGNoZWNraW5nLgorICBUaGlzIGlzIGFsc28gdXNl
ZnVsIGZvciBkaXNwbGF5IHB1cnBvc2VzLgorCisgIEN1cnJlbnRseSwgdGhpcyBjb21tYW5kIGNh
biBkZXRlY3QgdGhlIHNvdXJjZSByb290IG9ubHkgaWYgdGhlCisgIGNvbW1hbmQgaXMgcnVuIGZy
b20gd2l0aGluIGEgV2ViS2l0IGNoZWNrb3V0IChpLmUuIGlmIHRoZSBjdXJyZW50CisgIHdvcmtp
bmcgZGlyZWN0b3J5IGlzIGJlbG93IHRoZSByb290IG9mIGEgY2hlY2tvdXQpLiAgSW4gcGFydGlj
dWxhciwKKyAgaXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIHJ1biB0aGlzIHNjcmlwdCBmcm9tIGEg
ZGlyZWN0b3J5IG91dHNpZGUKKyAgYSBjaGVja291dC4KKworICBSdW5uaW5nIHRoaXMgc2NyaXB0
IGZyb20gYSB0b3AtbGV2ZWwgV2ViS2l0IHNvdXJjZSBkaXJlY3RvcnkgYW5kCisgIGNoZWNraW5n
IG9ubHkgZmlsZXMgaW4gdGhlIHNvdXJjZSB0cmVlIHdpbGwgZW5zdXJlIHRoYXQgYWxsIHN0eWxl
CisgIGNoZWNraW5nIGJlaGF2ZXMgY29ycmVjdGx5IC0tIHdoZXRoZXIgb3Igbm90IGEgY2hlY2tv
dXQgY2FuIGJlCisgIGRldGVjdGVkLiAgVGhpcyBpcyBiZWNhdXNlIGFsbCBmaWxlIHBhdGhzIHdp
bGwgYWxyZWFkeSBiZSByZWxhdGl2ZQorICB0byB0aGUgc291cmNlIHJvb3QgYW5kIHNvIHdpbGwg
bm90IG5lZWQgdG8gYmUgY29udmVydGVkLgorCiAiIiIgJSB7J3Byb2dyYW1fbmFtZSc6IG9zLnBh
dGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pLAogICAgICAgICdkZWZhdWx0X3ZlcmJvc2l0eSc6IGRl
ZmF1bHRfb3B0aW9ucy52ZXJib3NpdHksCiAgICAgICAgJ2RlZmF1bHRfb3V0cHV0X2Zvcm1hdCc6
IGRlZmF1bHRfb3B0aW9ucy5vdXRwdXRfZm9ybWF0fQpAQCAtMzMxLDE2ICszNjYsMTggQEAgY2xh
c3MgQXJndW1lbnRQYXJzZXIob2JqZWN0KToKICAgICAgICAgICAgIGZpbHRlcnMuYXBwZW5kKGZp
bHRlcikKICAgICAgICAgcmV0dXJuIGZpbHRlcnMKIAotICAgIGRlZiBwYXJzZShzZWxmLCBhcmdz
KToKKyAgICBkZWYgcGFyc2Uoc2VsZiwgYXJncywgZm91bmRfY2hlY2tvdXQpOgogICAgICAgICAi
IiJQYXJzZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byBjaGVjay13ZWJraXQtc3R5bGUu
CiAKICAgICAgICAgQXJnczoKICAgICAgICAgICBhcmdzOiBBIGxpc3Qgb2YgY29tbWFuZC1saW5l
IGFyZ3VtZW50cyBhcyByZXR1cm5lZCBieSBzeXMuYXJndlsxOl0uCisgICAgICAgICAgZm91bmRf
Y2hlY2tvdXQ6IEEgYm9vbGVhbiB2YWx1ZSBvZiB3aGV0aGVyIHRoZSBjdXJyZW50IHdvcmtpbmcK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHdhcyBmb3VuZCB0byBiZSBpbnNp
ZGUgYSBXZWJLaXQgY2hlY2tvdXQuCiAKICAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICBBIHR1
cGxlIG9mIChmaWxlbmFtZXMsIG9wdGlvbnMpCisgICAgICAgICAgQSB0dXBsZSBvZiAocGF0aHMs
IG9wdGlvbnMpCiAKLSAgICAgICAgICBmaWxlbmFtZXM6IFRoZSBsaXN0IG9mIGZpbGVuYW1lcyB0
byBjaGVjay4KKyAgICAgICAgICBwYXRoczogVGhlIGxpc3Qgb2YgcGF0aHMgdG8gY2hlY2suCiAg
ICAgICAgICAgb3B0aW9uczogQSBDb21tYW5kT3B0aW9uVmFsdWVzIGluc3RhbmNlLgogCiAgICAg
ICAgICIiIgpAQCAtMzUzLDcgKzM5MCw3IEBAIGNsYXNzIEFyZ3VtZW50UGFyc2VyKG9iamVjdCk6
CiAgICAgICAgICAgICAgICAgICd2ZXJib3NlPSddCiAKICAgICAgICAgdHJ5OgotICAgICAgICAg
ICAgKG9wdHMsIGZpbGVuYW1lcykgPSBnZXRvcHQuZ2V0b3B0KGFyZ3MsICcnLCBmbGFncykKKyAg
ICAgICAgICAgIChvcHRzLCBwYXRocykgPSBnZXRvcHQuZ2V0b3B0KGFyZ3MsICcnLCBmbGFncykK
ICAgICAgICAgZXhjZXB0IGdldG9wdC5HZXRvcHRFcnJvciwgZXJyOgogICAgICAgICAgICAgIyBG
SVhNRTogU2V0dGxlIG9uIGFuIGVycm9yIGhhbmRsaW5nIGFwcHJvYWNoOiBjb21lIHVwCiAgICAg
ICAgICAgICAjICAgICAgICB3aXRoIGEgY29uc2lzdGVudCBndWlkZWxpbmUgYXMgdG8gd2hlbiBh
bmQgd2hldGhlcgpAQCAtMzg1LDcgKzQyMiwxMyBAQCBjbGFzcyBBcmd1bWVudFBhcnNlcihvYmpl
Y3QpOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgb3B0aW9uOiAi
JXMiJyAlIG9wdCkKIAogICAgICAgICAjIENoZWNrIHZhbGlkaXR5IG9mIHJlc3VsdGluZyB2YWx1
ZXMuCi0gICAgICAgIGlmIGZpbGVuYW1lcyBhbmQgKGdpdF9jb21taXQgIT0gTm9uZSk6CisgICAg
ICAgIGlmIG5vdCBmb3VuZF9jaGVja291dCBhbmQgbm90IHBhdGhzOgorICAgICAgICAgICAgX2xv
Zy5lcnJvcigiV2ViS2l0IGNoZWNrb3V0IG5vdCBmb3VuZDogWW91IG11c3QgcnVuIHRoaXMgc2Ny
aXB0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgImZyb20gaW5zaWRlIGEgV2ViS2l0IGNoZWNr
b3V0IGlmIHlvdSBhcmUgbm90IHBhc3NpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAic3Bl
Y2lmaWMgcGF0aHMgdG8gY2hlY2suIikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAg
ICAgaWYgcGF0aHMgYW5kIChnaXRfY29tbWl0ICE9IE5vbmUpOgogICAgICAgICAgICAgc2VsZi5f
ZXhpdF93aXRoX3VzYWdlKCdJdCBpcyBub3QgcG9zc2libGUgdG8gY2hlY2sgZmlsZXMgYW5kIGEg
JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGVjaWZpYyBjb21taXQgYXQg
dGhlIHNhbWUgdGltZS4nKQogCkBAIC00MDcsNSArNDUwLDUgQEAgY2xhc3MgQXJndW1lbnRQYXJz
ZXIob2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
X2Zvcm1hdD1vdXRwdXRfZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2ZXJib3NpdHk9dmVyYm9zaXR5KQogCi0gICAgICAgIHJldHVybiAoZmlsZW5hbWVzLCBv
cHRpb25zKQorICAgICAgICByZXR1cm4gKHBhdGhzLCBvcHRpb25zKQogCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL29wdHBhcnNlcl91bml0dGVzdC5weSBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvb3B0cGFyc2VyX3VuaXR0ZXN0LnB5
CmluZGV4IDYxYTU0OGUuLjU1YzhmZjUgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvb3B0cGFyc2VyX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3R5bGUvb3B0cGFyc2VyX3VuaXR0ZXN0LnB5CkBAIC0yOSw2ICsyOSw3
IEBAIGZyb20gb3B0cGFyc2VyIGltcG9ydCBBcmd1bWVudFBhcnNlcgogZnJvbSBvcHRwYXJzZXIg
aW1wb3J0IEFyZ3VtZW50UHJpbnRlcgogZnJvbSBvcHRwYXJzZXIgaW1wb3J0IENvbW1hbmRPcHRp
b25WYWx1ZXMgYXMgUHJvY2Vzc29yT3B0aW9ucwogZnJvbSBvcHRwYXJzZXIgaW1wb3J0IERlZmF1
bHRDb21tYW5kT3B0aW9uVmFsdWVzCitmcm9tIHdlYmtpdHB5LnN0eWxlX3JlZmVyZW5jZXMgaW1w
b3J0IExvZ1Rlc3RpbmcKIAogCiBjbGFzcyBDcmVhdGVVc2FnZVRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgpAQCAtNzUsOSArNzYsMTcgQEAgY2xhc3MgQXJndW1lbnRQYXJzZXJUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKIAogICAgICIiIlRlc3QgdGhlIEFyZ3VtZW50UGFyc2VyIGNsYXNzLiIiIgog
Ci0gICAgZGVmIF9wYXJzZShzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIGEgZGVmYXVsdCBwYXJz
ZSgpIGZ1bmN0aW9uIGZvciB0ZXN0aW5nLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fY3JlYXRl
X3BhcnNlcigpLnBhcnNlCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl9sb2cg
PSBMb2dUZXN0aW5nLnNldFVwKHNlbGYpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAg
ICAgIHNlbGYuX2xvZy50ZWFyRG93bigpCisKKyAgICAjIFdlIHdpbGwgcHV0IHRoZSB0ZXN0cyBm
b3IgZm91bmRfc2NtIEZhbHNlIGluIGEgY29tbW9uIGxvY2F0aW9uLgorICAgIGRlZiBfcGFyc2Uo
c2VsZiwgYXJncywgZm91bmRfc2NtPVRydWUpOgorICAgICAgICAiIiJDYWxsIGEgdGVzdCBwYXJz
ZXIucGFyc2UoKS4iIiIKKyAgICAgICAgcGFyc2VyID0gc2VsZi5fY3JlYXRlX3BhcnNlcigpCisg
ICAgICAgIHJldHVybiBwYXJzZXIucGFyc2UoYXJncywgZm91bmRfc2NtKQogCiAgICAgZGVmIF9j
cmVhdGVfZGVmYXVsdHMoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIERlZmF1bHRDb21tYW5k
T3B0aW9uVmFsdWVzIGluc3RhbmNlIGZvciB0ZXN0aW5nLiIiIgpAQCAtMTAxLDcgKzExMCw3IEBA
IGNsYXNzIEFyZ3VtZW50UGFyc2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGRlcnJfd3JpdGU9c3RkZXJyX3dyaXRlKQogCiAgICAgZGVm
IHRlc3RfcGFyc2VfZG9jdW1lbnRhdGlvbihzZWxmKToKLSAgICAgICAgcGFyc2UgPSBzZWxmLl9w
YXJzZSgpCisgICAgICAgIHBhcnNlID0gc2VsZi5fcGFyc2UKIAogICAgICAgICAjIEZJWE1FOiBU
ZXN0IGJvdGggdGhlIHByaW50aW5nIG9mIHRoZSB1c2FnZSBzdHJpbmcgYW5kIHRoZQogICAgICAg
ICAjICAgICAgICBmaWx0ZXIgY2F0ZWdvcmllcyBoZWxwLgpAQCAtMTEyLDcgKzEyMSw3IEBAIGNs
YXNzIEFyZ3VtZW50UGFyc2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQsIHBhcnNlLCBbJy0tZmlsdGVyPSddKQogCiAgICAgZGVm
IHRlc3RfcGFyc2VfYmFkX3ZhbHVlcyhzZWxmKToKLSAgICAgICAgcGFyc2UgPSBzZWxmLl9wYXJz
ZSgpCisgICAgICAgIHBhcnNlID0gc2VsZi5fcGFyc2UKIAogICAgICAgICAjIFBhc3MgYW4gdW5z
dXBwb3J0ZWQgYXJndW1lbnQuCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQs
IHBhcnNlLCBbJy0tYmFkJ10pCkBAIC0xMzIsOSArMTQxLDE2IEBAIGNsYXNzIEFyZ3VtZW50UGFy
c2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICMgUGFzcyBmaWxlcyBhbmQgZ2l0
LWNvbW1pdCBhdCB0aGUgc2FtZSB0aW1lLgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0
ZW1FeGl0LCBwYXJzZSwgWyctLWdpdC1jb21taXQ9JywgJ2ZpbGUudHh0J10pCiAKKyAgICAgICAg
IyBQYXRocyBtdXN0IGJlIHBhc3NlZCB3aGVuIGZvdW5kX3NjbSBpcyBGYWxzZS4KKyAgICAgICAg
c2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCwgcGFyc2UsIFtdLCBmb3VuZF9zY209RmFsc2Up
CisgICAgICAgIG1lc3NhZ2VzID0gWyJFUlJPUjogV2ViS2l0IGNoZWNrb3V0IG5vdCBmb3VuZDog
WW91IG11c3QgcnVuIHRoaXMgIgorICAgICAgICAgICAgICAgICAgICAic2NyaXB0IGZyb20gaW5z
aWRlIGEgV2ViS2l0IGNoZWNrb3V0IGlmIHlvdSBhcmUgbm90ICIKKyAgICAgICAgICAgICAgICAg
ICAgInBhc3Npbmcgc3BlY2lmaWMgcGF0aHMgdG8gY2hlY2suXG4iXQorICAgICAgICBzZWxmLl9s
b2cuYXNzZXJ0TWVzc2FnZXMobWVzc2FnZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5
c3RlbUV4aXQsIHBhcnNlLCBbJy0tdmVyYm9zZT0zJ10sIGZvdW5kX3NjbT1GYWxzZSkKIAogICAg
IGRlZiB0ZXN0X3BhcnNlX2RlZmF1bHRfYXJndW1lbnRzKHNlbGYpOgotICAgICAgICBwYXJzZSA9
IHNlbGYuX3BhcnNlKCkKKyAgICAgICAgcGFyc2UgPSBzZWxmLl9wYXJzZQogCiAgICAgICAgIChm
aWxlcywgb3B0aW9ucykgPSBwYXJzZShbXSkKIApAQCAtMTQ3LDcgKzE2Myw3IEBAIGNsYXNzIEFy
Z3VtZW50UGFyc2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKG9wdGlvbnMudmVyYm9zaXR5LCAzKQogCiAgICAgZGVmIHRlc3RfcGFyc2VfZXhwbGlj
aXRfYXJndW1lbnRzKHNlbGYpOgotICAgICAgICBwYXJzZSA9IHNlbGYuX3BhcnNlKCkKKyAgICAg
ICAgcGFyc2UgPSBzZWxmLl9wYXJzZQogCiAgICAgICAgICMgUGFzcyBub24tZGVmYXVsdCBleHBs
aWNpdCB2YWx1ZXMuCiAgICAgICAgIChmaWxlcywgb3B0aW9ucykgPSBwYXJzZShbJy0tb3V0cHV0
PWVtYWNzJ10pCkBAIC0xNzAsNyArMTg2LDcgQEAgY2xhc3MgQXJndW1lbnRQYXJzZXJUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgWyIrYnVpbGQiLCAi
LXdoaXRlc3BhY2UiXSkKIAogICAgIGRlZiB0ZXN0X3BhcnNlX2ZpbGVzKHNlbGYpOgotICAgICAg
ICBwYXJzZSA9IHNlbGYuX3BhcnNlKCkKKyAgICAgICAgcGFyc2UgPSBzZWxmLl9wYXJzZQogCiAg
ICAgICAgIChmaWxlcywgb3B0aW9ucykgPSBwYXJzZShbJ2Zvby5jcHAnXSkKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoZmlsZXMsIFsnZm9vLmNwcCddKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS91bml0dGVzdHMucHkgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL3VuaXR0ZXN0cy5weQppbmRleCBkMmI0OTY2Li45YTAwMDU0IDEw
MDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL3VuaXR0ZXN0cy5w
eQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL3VuaXR0ZXN0cy5weQpA
QCAtMzgsNiArMzgsNyBAQCBpbXBvcnQgdW5pdHRlc3QKIGZyb20gY2hlY2tlcl91bml0dGVzdCBp
bXBvcnQgKgogZnJvbSBlcnJvcl9oYW5kbGVyc191bml0dGVzdCBpbXBvcnQgKgogZnJvbSBmaWx0
ZXJfdW5pdHRlc3QgaW1wb3J0ICoKK2Zyb20gbWFpbl91bml0dGVzdCBpbXBvcnQgKgogZnJvbSBv
cHRwYXJzZXJfdW5pdHRlc3QgaW1wb3J0ICoKIGZyb20gcHJvY2Vzc29ycy5jb21tb25fdW5pdHRl
c3QgaW1wb3J0ICoKIGZyb20gcHJvY2Vzc29ycy5jcHBfdW5pdHRlc3QgaW1wb3J0ICoKZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGVfcmVmZXJlbmNlcy5weSBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGVfcmVmZXJlbmNlcy5weQppbmRleCBi
MGRiOTU0Li45ZGQzOTlmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlX3JlZmVyZW5jZXMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9z
dHlsZV9yZWZlcmVuY2VzLnB5CkBAIC00Niw2ICs0NiwxNCBAQCBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0ubG9ndGVzdGluZyBpbXBvcnQgVGVzdExvZ1N0cmVhbQogZnJvbSB3ZWJraXRweS5j
b21tb24uY2hlY2tvdXQuc2NtIGltcG9ydCBkZXRlY3Rfc2NtX3N5c3RlbQogCiAKK2RlZiBkZXRl
Y3RfY2hlY2tvdXQoKToKKyAgICAiIiJSZXR1cm4gYSBXZWJLaXRDaGVja291dCBpbnN0YW5jZSwg
b3IgTm9uZSBpZiBpdCBjYW5ub3QgYmUgZm91bmQuIiIiCisgICAgY3dkID0gb3MucGF0aC5hYnNw
YXRoKG9zLmN1cmRpcikKKyAgICBzY20gPSBkZXRlY3Rfc2NtX3N5c3RlbShjd2QpCisKKyAgICBy
ZXR1cm4gTm9uZSBpZiBzY20gaXMgTm9uZSBlbHNlIFdlYktpdENoZWNrb3V0KHNjbSkKKworCiBk
ZWYgcGFyc2VfcGF0Y2gocGF0Y2hfc3RyaW5nKToKIAogICAgICIiIlBhcnNlIGEgcGF0Y2ggc3Ry
aW5nIGFuZCByZXR1cm4gdGhlIGFmZmVjdGVkIGZpbGVzLiIiIgpAQCAtNTQsMTYgKzYyLDE1IEBA
IGRlZiBwYXJzZV9wYXRjaChwYXRjaF9zdHJpbmcpOgogICAgIHJldHVybiBwYXRjaC5maWxlcwog
CiAKLWNsYXNzIFNpbXBsZVNjbShvYmplY3QpOgorY2xhc3MgV2ViS2l0Q2hlY2tvdXQob2JqZWN0
KToKIAotICAgICIiIlNpbXBsZSBmYWNhZGUgdG8gU0NNIGZvciB1c2UgYnkgc3R5bGUgcGFja2Fn
ZS4iIiIKKyAgICAiIiJTaW1wbGUgZmFjYWRlIHRvIHRoZSBTQ00gY2xhc3MgZm9yIHVzZSBieSBz
dHlsZSBwYWNrYWdlLiIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBjd2Qg
PSBvcy5wYXRoLmFic3BhdGgoJy4nKQotICAgICAgICBzZWxmLl9zY20gPSBkZXRlY3Rfc2NtX3N5
c3RlbShjd2QpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNjbSk6CisgICAgICAgIHNlbGYuX3Nj
bSA9IHNjbQogCi0gICAgZGVmIGNoZWNrb3V0X3Jvb3Qoc2VsZik6Ci0gICAgICAgICIiIlJldHVy
biB0aGUgc291cmNlIGNvbnRyb2wgcm9vdCBhcyBhbiBhYnNvbHV0ZSBwYXRoLiIiIgorICAgIGRl
ZiByb290X3BhdGgoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgY2hlY2tvdXQgcm9vdCBh
cyBhbiBhYnNvbHV0ZSBwYXRoLiIiIgogICAgICAgICByZXR1cm4gc2VsZi5fc2NtLmNoZWNrb3V0
X3Jvb3QKIAogICAgIGRlZiBjcmVhdGVfcGF0Y2goc2VsZik6Cg==
</data>
<flag name="review"
          id="35194"
          type_id="1"
          status="+"
          setter="hamaji"
    />
    <flag name="commit-queue"
          id="35195"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
      

    </bug>

</bugzilla>