<?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>33098</bug_id>
          
          <creation_ts>2010-01-01 16:55:30 -0800</creation_ts>
          <short_desc>Refactor svn-apply and svn-unapply to use a common &quot;patch&quot; method</short_desc>
          <delta_ts>2010-01-04 21:00:10 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Other</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>ddkilzer</cc>
    
    <cc>eric</cc>
    
    <cc>hamaji</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>176291</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-01 16:55:30 -0800</bug_when>
    <thetext>This is partially in preparation for bug 27204.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176292</commentid>
    <comment_count>1</comment_count>
      <attachid>45737</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-01 17:12:04 -0800</bug_when>
    <thetext>Created attachment 45737
Proposed patch

Let me know if there&apos;s a better way to suppress STDERR in the added unit tests than what I&apos;ve done.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176293</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-01 17:15:02 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45737 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176296</commentid>
    <comment_count>3</comment_count>
      <attachid>45737</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-01-01 18:25:48 -0800</bug_when>
    <thetext>Comment on attachment 45737
Proposed patch

Overall this looks great!  I like that you&apos;re getting rid of the $pathScriptWasRunFrom global variable from svn-apply and svn-unapply.

&gt; Index: WebKitTools/Scripts/VCSUtils.pm
&gt; +sub runPatchCommand($$$;$)
&gt; +{
&gt; +    my ($patch, $repositoryRootPath, $pathRelativeToRoot, $options) = @_;
&gt; +    
&gt; +    $options = [] if (! $options);
&gt; +
&gt; +    my $patchCommand = &quot;patch &quot; . join(&quot; &quot;, &quot;-p0&quot;, @{$options});
&gt; +    my $exitCode;
&gt; +    
&gt; +    # Temporarily change the working directory since the path found
&gt; +    # in the patch&apos;s &quot;Index:&quot; line is relative to the repository root
&gt; +    # (i.e. the same as $pathRelativeToRoot).
&gt; +    my $cwd = Cwd::getcwd();
&gt; +    chdir $repositoryRootPath;
&gt; +    open PATCH, &quot;| $patchCommand&quot; or die &quot;Failed to patch file \&quot;$pathRelativeToRoot\&quot;: $!&quot;;
&gt; +    print PATCH $patch;
&gt; +    close PATCH;
&gt; +    chdir $cwd;
&gt; +    
&gt; +    $exitCode = $? &gt;&gt; 8;

Setting $exitCode should really go *before* the chdir line.

Also, $exitCode should really use exitStatus() here since it&apos;s more cross-platform compatible.  Note that we don&apos;t want to introduce a dependency on webkitdirs.pm (where exitStatus() is defined) from VCSUtils.pm.  (As a temporary measure, we could define exitStatus() in webkitdirs.pm outside the &apos;package&apos; statement so the code may be shared and we can remove the ugly main::exitStatus() hack currently in VCSUtils.pm.)

&gt; +    return ($patchCommand, $exitCode);
&gt; +}
&gt; Index: WebKitTools/Scripts/VCSUtils_unittest.pl
&gt; ===================================================================
&gt; --- WebKitTools/Scripts/VCSUtils_unittest.pl	(revision 52685)
&gt; +++ WebKitTools/Scripts/VCSUtils_unittest.pl	(working copy)
&gt; @@ -30,10 +30,24 @@
&gt;  
&gt;  # Unit tests of VCSUtils.pm.
&gt;  
&gt; -use Test::Simple tests =&gt; 7;
&gt; +use Test::Simple tests =&gt; 9;
&gt;  
&gt;  use VCSUtils;
&gt;  
&gt; +# Call a function while suppressing STDERR.
&gt; +sub callSilently($@) {
&gt; +    my ($func, @args) = @_;
&gt; +
&gt; +    open(OLDERR, &quot;&gt;&amp;STDOUT&quot;);
&gt; +    open(STDERR, &quot;&gt;/dev/null&quot;);
&gt; +    my @return_value = &amp;$func(@args);
&gt; +    close(STDERR);
&gt; +    open(STDERR, &quot;&gt;&amp;OLDERR&quot;);
&gt; +    close(OLDERR);
&gt; +
&gt; +    return @return_value;
&gt; +}

Was this taken from the Perl Recipes book?  I&apos;m not very familiar with this pattern for reassigning STDERR, and I&apos;m not sure it would work on Windows or not.  This should work on Windows so we can run unit tests there.

&gt; @@ -292,3 +306,22 @@ END
&gt;  
&gt;  ok(fixChangeLogPatch($in) eq $out, $title);
&gt;  
&gt; +# Test: runPatchCommand
&gt; +
&gt; +# Since $patch has no &quot;Index:&quot; path, passing this to runPatchCommand
&gt; +# should not affect any files.
&gt; +my $patch = &lt;&lt;&apos;END&apos;;
&gt; +Garbage patch contents
&gt; +END
&gt; +
&gt; +# We call silently to avoid the following output to STDERR:
&gt; +# patch: **** Only garbage was found in the patch input.
&gt; +my ($patchCommand, $exitCode) = callSilently(\&amp;runPatchCommand, $patch, &quot;.&quot;, &quot;file_to_patch.txt&quot;, [&quot;--force&quot;, &quot;-c&quot;]);
&gt; +
&gt; +$title = &quot;runPatchCommand: Pass arguments.&quot;;
&gt; +
&gt; +ok($patchCommand eq &quot;patch -p0 --force -c&quot;, $title);
&gt; +
&gt; +$title = &quot;runPatchCommand: Bad patch.&quot;;
&gt; +
&gt; +ok($exitCode == 2, $title);

It would be nice to test successful patching as well (both applying and unapplying), but I guess it&apos;s not necessary.

&gt; Index: WebKitTools/Scripts/svn-unapply
&gt; @@ -258,16 +257,26 @@ sub revertDirectories()
&gt;      }
&gt;  }
&gt;  
&gt; +# Unapply the given patch string.
&gt; +#
&gt; +# Args:
&gt; +#   $patch: a patch string.
&gt; +#   $pathRelativeToRoot: the path of the file to be patched, relative to the
&gt; +#                        repository root. This should normally be the path
&gt; +#                        found in the patch&apos;s &quot;Index:&quot; line.
&gt; +#   $options: a reference to an array of options to pass to the patch command.
&gt;  sub unapplyPatch($$;$)
&gt;  {
&gt; -    my ($patch, $fullPath, $options) = @_;
&gt; -    chdir $pathForRepositoryRoot;
&gt; -    $options = [] if (! $options);
&gt; -    my $command = &quot;patch &quot; . join(&quot; &quot;, &quot;-p0&quot;, &quot;-R&quot;, @{$options});
&gt; -    open PATCH, &quot;| $command&quot; or die &quot;Failed to patch $fullPath: $!&quot;;
&gt; -    print PATCH $patch;
&gt; -    close PATCH;
&gt; -    chdir $pathScriptWasRunFrom;
&gt; +    my ($patch, $pathRelativeToRoot, $options) = @_;
&gt; +
&gt; +    if (! $options) {
&gt; +        $options = [];
&gt; +    } else {
&gt; +        $options = [@{$options}]; # Copy to avoid side effects.
&gt; +    }
&gt; +
&gt; +    push @{$options}, &quot;--reverse&quot;;
&gt; +    runPatchCommand($patch, $repositoryRootPath, $pathRelativeToRoot, $options);
&gt;  }

The unapplyPatch() subroutine should really do the same check of $exitStatus and $force that applyPatch() in svn-apply does.  It&apos;s not strictly necessary to fix this, but since you&apos;re moving common functionality into a new method, it would be nice to pick this up as well if the logic can be shared.

r- for getting $exitCode from exitStatus() in VCSUtils::applyPatch(), making sure the STDERR redirection works on Windows, and looking into sharing the --force code in unapplyPath() for svn-unapply from applyPatch() in svn-apply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176299</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-01 19:47:25 -0800</bug_when>
    <thetext>(In reply to comment #3)

Thanks a lot for the rapid and thorough review, David.  Once again, great feedback!

&gt; (From update of attachment 45737 [details])
&gt; Also, $exitCode should really use exitStatus() here since it&apos;s more
&gt; cross-platform compatible.  Note that we don&apos;t want to introduce a dependency
&gt; on webkitdirs.pm (where exitStatus() is defined) from VCSUtils.pm.  (As a
&gt; temporary measure, we could define exitStatus() in webkitdirs.pm outside the
&gt; &apos;package&apos; statement so the code may be shared and we can remove the ugly
&gt; main::exitStatus() hack currently in VCSUtils.pm.)

What&apos;s the better solution -- create another file?  I don&apos;t have any thoughts yet on what such a file should be called.  I wouldn&apos;t mind creating a &quot;perl&quot; folder so we don&apos;t have to keep putting supporting files in the top level (e.g. VCSUtils_unittest.pl) -- similar to the way we have such a location for our Python code.

&gt; &gt; +sub callSilently($@) {
&gt; &gt; +    my ($func, @args) = @_;
&gt; &gt; +
&gt; &gt; +    open(OLDERR, &quot;&gt;&amp;STDOUT&quot;);
&gt; &gt; +    open(STDERR, &quot;&gt;/dev/null&quot;);
&gt; &gt; +    my @return_value = &amp;$func(@args);
&gt; &gt; +    close(STDERR);
&gt; &gt; +    open(STDERR, &quot;&gt;&amp;OLDERR&quot;);
&gt; &gt; +    close(OLDERR);
&gt; &gt; +
&gt; &gt; +    return @return_value;
&gt; &gt; +}
&gt; 
&gt; Was this taken from the Perl Recipes book?  I&apos;m not very familiar with this
&gt; pattern for reassigning STDERR, and I&apos;m not sure it would work on Windows or
&gt; not.  This should work on Windows so we can run unit tests there.

I got the idea from here:

http://www.sdsc.edu/~moreland/courses/IntroPerl/docs/manual/pod/perlfunc/open.html

though here is a better link:

http://perldoc.perl.org/functions/open.html (search for &quot;open OLDERR&quot;)

It seems the final &quot;close&quot; is superfluous, but I&apos;m not sure yet why.

Do you know who might be good to ask to run on Windows?

&gt; &gt; +$title = &quot;runPatchCommand: Bad patch.&quot;;
&gt; &gt; +
&gt; &gt; +ok($exitCode == 2, $title);
&gt; 
&gt; It would be nice to test successful patching as well (both applying and
&gt; unapplying), but I guess it&apos;s not necessary.

Yes, it wouldn&apos;t increase the code coverage in this instance, but it would be nice.  It would take a bit more setup though.  I&apos;m not sure yet if there&apos;s a way to do it without creating temporary files.  Are there any guidelines for creating temporary files during unit tests, like where to put them and what to name them?

&gt; The unapplyPatch() subroutine should really do the same check of $exitStatus
&gt; and $force that applyPatch() in svn-apply does.  It&apos;s not strictly necessary to
&gt; fix this, but since you&apos;re moving common functionality into a new method, it
&gt; would be nice to pick this up as well if the logic can be shared.

I&apos;m glad you mentioned this.  I was wondering that myself, and was going to ask.  I thought perhaps there was a rationale behind it -- that unapplying should be allowed to continue since it was being used in clean-up situations that svn-apply wasn&apos;t.

Browsing through svn-apply and svn-unapply, there seem to be a lot of such &quot;near symmetries&quot;.  I started with the easiest one.  I will look for more such opportunities as I work on bug 27204.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176304</commentid>
    <comment_count>5</comment_count>
      <attachid>45738</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-02 01:15:06 -0800</bug_when>
    <thetext>Created attachment 45738
Proposed patch 2

Except for the unit tests on Windows, I believe this addresses what you wanted me to address.  Of course, it&apos;s also possible that the changes introduced new things that need to be addressed.

Regarding exitStatus(), it turns out that webkitdirs.pm already references VCSUtils.pm (I hadn&apos;t known that when I responded to you before).  So I was simply able to move the implementation of exitStatus() from webkitdirs.pm to VCSUtils.pm, and leave behind a subroutine declaration inside webkitdirs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176305</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-02 01:36:26 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45738 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176321</commentid>
    <comment_count>7</comment_count>
      <attachid>45738</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-02 09:05:16 -0800</bug_when>
    <thetext>Comment on attachment 45738
Proposed patch 2

Working on more improvements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176324</commentid>
    <comment_count>8</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-01-02 09:24:03 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Except for the unit tests on Windows, I believe this addresses what you wanted
&gt; me to address.  Of course, it&apos;s also possible that the changes introduced new
&gt; things that need to be addressed.

Since you got the file handle code from a Perl manpage, I suspect it&apos;s already cross-platform.  Let&apos;s worry about this if it&apos;s shown to be an issue later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176369</commentid>
    <comment_count>9</comment_count>
      <attachid>45747</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-02 13:01:30 -0800</bug_when>
    <thetext>Created attachment 45747
Proposed patch 3

Lots more changes here for the better (many relating to your suggestions),
including--

- Broke the code to assemble the patch command syntax out into a separate 
  subroutine for cleaner testing, and added a bunch of unit tests.
- Broke out the optional arguments to runPatchCommand() into a hash
  reference (named parameters) since the argument list was getting longer.
- Moved more code from applyPatch/unapplyPatch into runPatchCommand().
- Removed from the unit tests the reference to /dev/null, so the bad patch
  test is more likely to work on Windows now.
- Added unit tests to test successful patches (both silent and &quot;real&quot;).
- svn-unapply now returns a non-zero exit status if one of the patches
  failed (it didn&apos;t before, since it was effectively always in --force mode).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176370</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-02 13:06:25 -0800</bug_when>
    <thetext>Attachment 45747 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKitTools/Scripts/VCSUtils_unittest.pl:390:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/VCSUtils_unittest.pl:391:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176377</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-02 13:22:46 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Attachment 45747 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
&gt; WebKitTools/Scripts/VCSUtils_unittest.pl:390:  Line contains tab character. 
&gt; [whitespace/tab] [5]
&gt; WebKitTools/Scripts/VCSUtils_unittest.pl:391:  Line contains tab character. 
&gt; [whitespace/tab] [5]
&gt; Total errors found: 2

These tabs appear in a patch string generated by &quot;patch&quot; and used as input to some unit tests:

+$patch = &lt;&lt;END;
+Index: $fileToPatch
+===================================================================
+--- $fileToPatch	(revision 0)
++++ $fileToPatch	(revision 0)
+@@ -0,0 +1,5 @@

The patch files generated by patch include tabs.  Perhaps the style checker should skip any files ending in _unittest.* since unit tests can test a wide variety of inputs.  Or alternatively, the unit test file could include some sort of marker, dilineators, etc. that the style checker could recognize -- as has been suggested before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176379</commentid>
    <comment_count>12</comment_count>
      <attachid>45747</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-02 13:28:02 -0800</bug_when>
    <thetext>Comment on attachment 45747
Proposed patch 3

That might be a good idea.

We won&apos;t be able to use commit-queue to land the patch because the file needs the magical allow-tabs SVN property.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176386</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-02 13:53:35 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 45747 [details])
&gt; We won&apos;t be able to use commit-queue to land the patch because the file needs
&gt; the magical allow-tabs SVN property.

Could we also set the property in advance, and then use cq?  Otherwise, it sounds like I will need to modify this patch with the property so they can both go in together.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176389</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-02 14:08:11 -0800</bug_when>
    <thetext>Oh, it&apos;s fine.  We&apos;ll just land the patch by hand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176417</commentid>
    <comment_count>15</comment_count>
      <attachid>45747</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-01-03 08:52:47 -0800</bug_when>
    <thetext>Comment on attachment 45747
Proposed patch 3

Looks great!  Just a couple of nits/comments below:

&gt; Index: WebKitTools/Scripts/VCSUtils.pm
&gt; +    # Merges hash references. It&apos;s okay here if passed hash reference is undefined.
&gt; +    @{$argsHashRef}{keys %{$passedArgsHashRef}} = values %{$passedArgsHashRef};

Wow, I&apos;ve never seen this syntax before!  Is it known to work for more than a trivial number of hash entries?

&gt; +    my $patchCommand = &quot;patch &quot; . join(&quot; &quot;, &quot;-p0&quot;, @{$options});

Nit:  You could include &quot;patch&quot; in the join which may read a little nicer:

    my $patchCommand = join(&quot; &quot;, &quot;patch&quot;, &quot;-p0&quot;, @{$options});

&gt; Index: WebKitTools/Scripts/VCSUtils_unittest.pl
&gt; @@ -30,10 +30,23 @@
&gt;  
&gt;  # Unit tests of VCSUtils.pm.
&gt;  
&gt; -use Test::Simple tests =&gt; 7;
&gt; +use Test::Simple tests =&gt; 21;

The tests are great, but I think putting every test in a single source file is going to get out of hand soon.  We should consider alternatives like putting each individual test in its own file in a t/ subdirectory.

&gt; Index: WebKitTools/Scripts/svn-unapply
&gt; @@ -77,13 +78,21 @@ sub unapplyPatch($$;$);
&gt;  sub unsetChangeLogDate($$);
&gt;  
&gt;  my $showHelp = 0;
&gt; -if (!GetOptions(&quot;help!&quot; =&gt; \$showHelp) || $showHelp) {
&gt; -    print STDERR basename($0) . &quot; [-h|--help] patch1 [patch2 ...]\n&quot;;
&gt; +my $force = 0;

Nit:  $force should be declared before $showHelp.

&gt; +my $optionParseSuccess = GetOptions(
&gt; +    &quot;help!&quot; =&gt; \$showHelp,
&gt; +    &quot;force!&quot; =&gt; \$force
&gt; +);

Nit:  &apos;force&apos; should be before &apos;help!&apos;.

&gt; Index: WebKitTools/Scripts/webkitdirs.pm
&gt; @@ -34,6 +34,7 @@ use FindBin;
&gt;  use File::Basename;
&gt;  use File::Spec;
&gt;  use POSIX;
&gt; +
&gt;  use VCSUtils;

Nit:  We usually don&apos;t put a blank line here.

r=me

Note that since the test file requires the &apos;allow-tabs&apos; svn property, so this can&apos;t be landed via git or the commit-queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176427</commentid>
    <comment_count>16</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-03 10:25:50 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; Index: WebKitTools/Scripts/VCSUtils.pm
&gt; &gt; +    # Merges hash references. It&apos;s okay here if passed hash reference is undefined.
&gt; &gt; +    @{$argsHashRef}{keys %{$passedArgsHashRef}} = values %{$passedArgsHashRef};
&gt; 
&gt; Wow, I&apos;ve never seen this syntax before!  Is it known to work for more than a
&gt; trivial number of hash entries?

I came across a couple pages that say it&apos;s very efficient, but I don&apos;t really know.  This page says it &quot;requires enough memory for lists of the keys and values of [the right-hand hash]&quot;, so perhaps memory is the limitation.

&gt; 
&gt; &gt; +    my $patchCommand = &quot;patch &quot; . join(&quot; &quot;, &quot;-p0&quot;, @{$options});
&gt; 
&gt; Nit:  You could include &quot;patch&quot; in the join which may read a little nicer:
&gt; 
&gt;     my $patchCommand = join(&quot; &quot;, &quot;patch&quot;, &quot;-p0&quot;, @{$options});

Or even-- :)

&gt;     my $patchCommand = join(&quot; &quot;, &quot;patch -p0&quot;, @{$options});

Thanks again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176428</commentid>
    <comment_count>17</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-03 10:27:28 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; &gt; Index: WebKitTools/Scripts/VCSUtils.pm
&gt; &gt; &gt; +    # Merges hash references. It&apos;s okay here if passed hash reference is undefined.
&gt; &gt; &gt; +    @{$argsHashRef}{keys %{$passedArgsHashRef}} = values %{$passedArgsHashRef};
&gt; &gt; 
&gt; &gt; Wow, I&apos;ve never seen this syntax before!  Is it known to work for more than a
&gt; &gt; trivial number of hash entries?
&gt; 
&gt; I came across a couple pages that say it&apos;s very efficient, but I don&apos;t really
&gt; know.  This page says it &quot;requires enough memory for lists of the keys and
&gt; values of [the right-hand hash]&quot;, so perhaps memory is the limitation.

http://docstore.mik.ua/orelly/perl/cookbook/ch05_11.htm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176431</commentid>
    <comment_count>18</comment_count>
      <attachid>45756</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-03 11:01:50 -0800</bug_when>
    <thetext>Created attachment 45756
Proposed patch 4

Incorporated David&apos;s final suggested tweaks.  Could one of you commit this for me (including the required SVN tab property)?  Thanks a lot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176432</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-03 11:05:36 -0800</bug_when>
    <thetext>Attachment 45756 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKitTools/Scripts/VCSUtils_unittest.pl:390:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/VCSUtils_unittest.pl:391:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176437</commentid>
    <comment_count>20</comment_count>
      <attachid>45756</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-01-03 11:50:42 -0800</bug_when>
    <thetext>Comment on attachment 45756
Proposed patch 4

r=me

I&apos;ll submit this via svn.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176449</commentid>
    <comment_count>21</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-01-03 13:26:28 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; I&apos;ll submit this via svn.

$ svn commit WebKitTools
Sending        WebKitTools/ChangeLog
Sending        WebKitTools/Scripts/VCSUtils.pm
Sending        WebKitTools/Scripts/VCSUtils_unittest.pl
Sending        WebKitTools/Scripts/svn-apply
Sending        WebKitTools/Scripts/svn-unapply
Sending        WebKitTools/Scripts/webkitdirs.pm
Transmitting file data ......
Committed revision 52692.

&lt;http://trac.webkit.org/changeset/52692&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177004</commentid>
    <comment_count>22</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-04 20:15:19 -0800</bug_when>
    <thetext>(In reply to comment #15)

&gt; &gt; Index: WebKitTools/Scripts/svn-unapply
&gt; &gt; @@ -77,13 +78,21 @@ sub unapplyPatch($$;$);
&gt; &gt;  sub unsetChangeLogDate($$);
&gt; &gt;  
&gt; &gt;  my $showHelp = 0;
&gt; &gt; -if (!GetOptions(&quot;help!&quot; =&gt; \$showHelp) || $showHelp) {
&gt; &gt; -    print STDERR basename($0) . &quot; [-h|--help] patch1 [patch2 ...]\n&quot;;
&gt; &gt; +my $force = 0;
&gt; 
&gt; Nit:  $force should be declared before $showHelp.
&gt; 
&gt; &gt; +my $optionParseSuccess = GetOptions(
&gt; &gt; +    &quot;help!&quot; =&gt; \$showHelp,
&gt; &gt; +    &quot;force!&quot; =&gt; \$force
&gt; &gt; +);
&gt; 
&gt; Nit:  &apos;force&apos; should be before &apos;help!&apos;.

I meant to ask -- what was the underlying rule or reason for these suggestions?  For example, is it to alphabetize all consecutive variable declarations, and alphabetize all hard-coded hashes by key name?

If so, one consequence for code like the above is that the variable declarations could be in a different order from their corresponding occurrence in the parameter listing, which would make it more difficult to visually check a one-to-one correspondence (e.g. if $showHelp were called $displayHelp).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177010</commentid>
    <comment_count>23</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-01-04 21:00:10 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; &gt; Nit:  &apos;force&apos; should be before &apos;help!&apos;.
&gt; 
&gt; I meant to ask -- what was the underlying rule or reason for these suggestions?
&gt;  For example, is it to alphabetize all consecutive variable declarations, and
&gt; alphabetize all hard-coded hashes by key name?

Yes, to keep them alphabetized.

&gt; If so, one consequence for code like the above is that the variable
&gt; declarations could be in a different order from their corresponding occurrence
&gt; in the parameter listing, which would make it more difficult to visually check
&gt; a one-to-one correspondence (e.g. if $showHelp were called $displayHelp).

Or simply $help.  I guess I haven&apos;t been too concerned about keeping the variables in the same order as the options--just keeping the variables alphabetized and the options alphabetized for easier searching.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45737</attachid>
            <date>2010-01-01 17:12:04 -0800</date>
            <delta_ts>2010-01-02 01:15:06 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch-tools4-1.txt</filename>
            <type>text/plain</type>
            <size>8488</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUyNjg2KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDEtMDEgIENocmlzIEplcmRvbmVrICA8
Y2hyaXMuamVyZG9uZWtAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgc3ZuLWFwcGx5IGFuZCBzdm4tdW5hcHBseSB0
byB1c2UgYSBjb21tb24gInBhdGNoIgorICAgICAgICBjb21tYW5kIG1ldGhvZCwgYW5kIGFkZGVk
IHVuaXQgdGVzdHMgZm9yIHRoaXMgbmV3IG1ldGhvZC4KKworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMwOTgKKworICAgICAgICAqIFNjcmlwdHMvVkNT
VXRpbHMucG06CisgICAgICAgICAgQWRkZWQgcnVuUGF0Y2hDb21tYW5kKCkuCisKKyAgICAgICAg
KiBTY3JpcHRzL1ZDU1V0aWxzX3VuaXR0ZXN0LnBsOgorICAgICAgICAgIEFkZGVkIHR3byB1bml0
IHRlc3RzIGZvciBydW5QYXRjaENvbW1hbmQoKS4KKworICAgICAgICAqIFNjcmlwdHMvc3ZuLWFw
cGx5OgorICAgICAgICAgIFJlZmFjdG9yZWQgYXBwbHlQYXRjaCgpLgorICAgICAgICAgIFJlbW92
ZWQgJHBhdGhTY3JpcHRXYXNSdW5Gcm9tIGdsb2JhbCB2YXJpYWJsZS4KKworICAgICAgICAqIFNj
cmlwdHMvc3ZuLXVuYXBwbHk6CisgICAgICAgICAgUmVmYWN0b3JlZCBhcHBseVBhdGNoKCkuCisg
ICAgICAgICAgUmVtb3ZlZCAkcGF0aFNjcmlwdFdhc1J1bkZyb20gZ2xvYmFsIHZhcmlhYmxlLgor
CiAyMDA5LTEyLTMxICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0
aWxzLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHMucG0JKHJl
dmlzaW9uIDUyNjg1KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbQkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQCBCRUdJTiB7CiAgICAgICAgICZtYWtlRmlsZVBhdGhS
ZWxhdGl2ZQogICAgICAgICAmbm9ybWFsaXplUGF0aAogICAgICAgICAmcGF0aFJlbGF0aXZlVG9T
Vk5SZXBvc2l0b3J5Um9vdEZvclBhdGgKKyAgICAgICAgJnJ1blBhdGNoQ29tbWFuZAogICAgICAg
ICAmc3ZuUmV2aXNpb25Gb3JEaXJlY3RvcnkKICAgICAgICAgJnN2blN0YXR1cwogICAgICk7CkBA
IC00OTYsNiArNDk3LDQ3IEBAIHN1YiBmaXhDaGFuZ2VMb2dQYXRjaCgkKQogICAgIHJldHVybiBq
b2luKCRsaW5lRW5kaW5nLCBAbGluZXMpIC4gIlxuIjsgIyBwYXRjaCgxKSBleHBlY3RzIGFuIGV4
dHJhIHRyYWlsaW5nIG5ld2xpbmUuCiB9CiAKKyMgQXBwbHkgdGhlIGdpdmVuIHBhdGNoIHVzaW5n
IHRoZSBwYXRjaCgxKSBjb21tYW5kLgorIworIyBSZXR1cm5zIHRoZSBzeW50YXggb2YgdGhlIHBh
dGNoIGNvbW1hbmQgdXNlZCBhbmQgdGhlIGV4aXQgY29kZS4gVGhpcworIyBpcyBtb3N0bHkgdG8g
bGV0IHRoZSBjYWxsZXIgaGFuZGxlIGVycm9ycy4KKyMKKyMgQXJnczoKKyMgICAkcGF0Y2g6IGEg
cGF0Y2ggc3RyaW5nLgorIyAgICRyZXBvc2l0b3J5Um9vdFBhdGg6IGFuIGFic29sdXRlIHBhdGgg
dG8gdGhlIHJlcG9zaXRvcnkgcm9vdC4KKyMgICAkcGF0aFJlbGF0aXZlVG9Sb290OiB0aGUgcGF0
aCBvZiB0aGUgZmlsZSB0byBiZSBwYXRjaGVkLCByZWxhdGl2ZSB0byB0aGUKKyMgICAgICAgICAg
ICAgICAgICAgICAgICByZXBvc2l0b3J5IHJvb3QuIFRoaXMgc2hvdWxkIG5vcm1hbGx5IGJlIHRo
ZSBwYXRoCisjICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgaW4gdGhlIHBhdGNoJ3MgIklu
ZGV4OiIgbGluZS4gRm9yIG9wdGltaXphdGlvbgorIyAgICAgICAgICAgICAgICAgICAgICAgIHB1
cnBvc2VzLCBpdCBpcyBwYXNzZWQgZXhwbGljaXRseSByYXRoZXIgdGhhbgorIyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcGFyc2VkIGZyb20gdGhlIHBhdGNoIHN0cmluZy4KKyMgICAkb3B0aW9u
czogYSByZWZlcmVuY2UgdG8gYW4gYXJyYXkgb2Ygb3B0aW9ucyB0byBwYXNzIHRvIHRoZSBwYXRj
aAorIyAgICAgICAgICAgICBjb21tYW5kLiBUaGUgc3Vicm91dGluZSBwYXNzZXMgdGhlIC1wMCBv
cHRpb24gbm8gbWF0dGVyIHdoYXQuCisjCisjIFRoaXMgc3Vicm91dGluZSBoYXMgdW5pdCB0ZXN0
cyBpbiBWQ1NVdGlsc191bml0dGVzdC5wbC4KK3N1YiBydW5QYXRjaENvbW1hbmQoJCQkOyQpCit7
CisgICAgbXkgKCRwYXRjaCwgJHJlcG9zaXRvcnlSb290UGF0aCwgJHBhdGhSZWxhdGl2ZVRvUm9v
dCwgJG9wdGlvbnMpID0gQF87CisgICAgCisgICAgJG9wdGlvbnMgPSBbXSBpZiAoISAkb3B0aW9u
cyk7CisKKyAgICBteSAkcGF0Y2hDb21tYW5kID0gInBhdGNoICIgLiBqb2luKCIgIiwgIi1wMCIs
IEB7JG9wdGlvbnN9KTsKKyAgICBteSAkZXhpdENvZGU7CisgICAgCisgICAgIyBUZW1wb3Jhcmls
eSBjaGFuZ2UgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHNpbmNlIHRoZSBwYXRoIGZvdW5kCisgICAg
IyBpbiB0aGUgcGF0Y2gncyAiSW5kZXg6IiBsaW5lIGlzIHJlbGF0aXZlIHRvIHRoZSByZXBvc2l0
b3J5IHJvb3QKKyAgICAjIChpLmUuIHRoZSBzYW1lIGFzICRwYXRoUmVsYXRpdmVUb1Jvb3QpLgor
ICAgIG15ICRjd2QgPSBDd2Q6OmdldGN3ZCgpOworICAgIGNoZGlyICRyZXBvc2l0b3J5Um9vdFBh
dGg7CisgICAgb3BlbiBQQVRDSCwgInwgJHBhdGNoQ29tbWFuZCIgb3IgZGllICJGYWlsZWQgdG8g
cGF0Y2ggZmlsZSBcIiRwYXRoUmVsYXRpdmVUb1Jvb3RcIjogJCEiOworICAgIHByaW50IFBBVENI
ICRwYXRjaDsKKyAgICBjbG9zZSBQQVRDSDsKKyAgICBjaGRpciAkY3dkOworICAgIAorICAgICRl
eGl0Q29kZSA9ICQ/ID4+IDg7CisKKyAgICByZXR1cm4gKCRwYXRjaENvbW1hbmQsICRleGl0Q29k
ZSk7Cit9CisKIHN1YiBnaXRDb25maWcoJCkKIHsKICAgICByZXR1cm4gdW5sZXNzICRpc0dpdDsK
SW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHNfdW5pdHRlc3QucGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlsc191bml0dGVzdC5wbAkocmV2aXNpb24g
NTI2ODUpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzX3VuaXR0ZXN0LnBsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCwxMCArMzAsMjQgQEAKIAogIyBVbml0IHRlc3RzIG9mIFZDU1V0aWxz
LnBtLgogCi11c2UgVGVzdDo6U2ltcGxlIHRlc3RzID0+IDc7Cit1c2UgVGVzdDo6U2ltcGxlIHRl
c3RzID0+IDk7CiAKIHVzZSBWQ1NVdGlsczsKIAorIyBDYWxsIGEgZnVuY3Rpb24gd2hpbGUgc3Vw
cHJlc3NpbmcgU1RERVJSLgorc3ViIGNhbGxTaWxlbnRseSgkQCkgeworICAgIG15ICgkZnVuYywg
QGFyZ3MpID0gQF87CisKKyAgICBvcGVuKE9MREVSUiwgIj4mU1RET1VUIik7CisgICAgb3BlbihT
VERFUlIsICI+L2Rldi9udWxsIik7CisgICAgbXkgQHJldHVybl92YWx1ZSA9ICYkZnVuYyhAYXJn
cyk7CisgICAgY2xvc2UoU1RERVJSKTsKKyAgICBvcGVuKFNUREVSUiwgIj4mT0xERVJSIik7Cisg
ICAgY2xvc2UoT0xERVJSKTsKKworICAgIHJldHVybiBAcmV0dXJuX3ZhbHVlOworfQorCiAjIGZp
eENoYW5nZUxvZ1BhdGNoCiAjCiAjIFRoZSBzb3VyY2UgQ2hhbmdlTG9nIGZvciB0aGVzZSB0ZXN0
cyBpcyB0aGUgZm9sbG93aW5nOgpAQCAtMjkyLDMgKzMwNiwyMiBAQCBFTkQKIAogb2soZml4Q2hh
bmdlTG9nUGF0Y2goJGluKSBlcSAkb3V0LCAkdGl0bGUpOwogCisjIFRlc3Q6IHJ1blBhdGNoQ29t
bWFuZAorCisjIFNpbmNlICRwYXRjaCBoYXMgbm8gIkluZGV4OiIgcGF0aCwgcGFzc2luZyB0aGlz
IHRvIHJ1blBhdGNoQ29tbWFuZAorIyBzaG91bGQgbm90IGFmZmVjdCBhbnkgZmlsZXMuCitteSAk
cGF0Y2ggPSA8PCdFTkQnOworR2FyYmFnZSBwYXRjaCBjb250ZW50cworRU5ECisKKyMgV2UgY2Fs
bCBzaWxlbnRseSB0byBhdm9pZCB0aGUgZm9sbG93aW5nIG91dHB1dCB0byBTVERFUlI6CisjIHBh
dGNoOiAqKioqIE9ubHkgZ2FyYmFnZSB3YXMgZm91bmQgaW4gdGhlIHBhdGNoIGlucHV0LgorbXkg
KCRwYXRjaENvbW1hbmQsICRleGl0Q29kZSkgPSBjYWxsU2lsZW50bHkoXCZydW5QYXRjaENvbW1h
bmQsICRwYXRjaCwgIi4iLCAiZmlsZV90b19wYXRjaC50eHQiLCBbIi0tZm9yY2UiLCAiLWMiXSk7
CisKKyR0aXRsZSA9ICJydW5QYXRjaENvbW1hbmQ6IFBhc3MgYXJndW1lbnRzLiI7CisKK29rKCRw
YXRjaENvbW1hbmQgZXEgInBhdGNoIC1wMCAtLWZvcmNlIC1jIiwgJHRpdGxlKTsKKworJHRpdGxl
ID0gInJ1blBhdGNoQ29tbWFuZDogQmFkIHBhdGNoLiI7CisKK29rKCRleGl0Q29kZSA9PSAyLCAk
dGl0bGUpOwpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9zdm4tYXBwbHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9zdm4tYXBwbHkJKHJldmlzaW9uIDUyNjg1KQorKysgV2Vi
S2l0VG9vbHMvU2NyaXB0cy9zdm4tYXBwbHkJKHdvcmtpbmcgY29weSkKQEAgLTExOCw4ICsxMTgs
NyBAQCBteSAlcmVtb3ZlRGlyZWN0b3J5SWdub3JlTGlzdCA9ICgKIAogbXkgJGdsb2JhbEV4aXRD
b2RlID0gMDsKIAotbXkgJHBhdGhTY3JpcHRXYXNSdW5Gcm9tID0gQ3dkOjpnZXRjd2QoKTsKLW15
ICRwYXRoRm9yUmVwb3NpdG9yeVJvb3QgPSBkZXRlcm1pbmVWQ1NSb290KCk7CitteSAkcmVwb3Np
dG9yeVJvb3RQYXRoID0gZGV0ZXJtaW5lVkNTUm9vdCgpOwogCiBteSAlY2hlY2tlZERpcmVjdG9y
aWVzOwogbXkgJWNvcGllZEZpbGVzOwpAQCAtMjI0LDIyICsyMjMsMzAgQEAgc3ViIGFkZERpcmVj
dG9yaWVzSWZOZWVkZWQoJCkKICAgICB9CiB9CiAKKyMgQXBwbHkgdGhlIGdpdmVuIHBhdGNoIHN0
cmluZy4KKyMKKyMgQXJnczoKKyMgICAkcGF0Y2g6IGEgcGF0Y2ggc3RyaW5nLgorIyAgICRwYXRo
UmVsYXRpdmVUb1Jvb3Q6IHRoZSBwYXRoIG9mIHRoZSBmaWxlIHRvIGJlIHBhdGNoZWQsIHJlbGF0
aXZlIHRvIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgcm9vdC4gVGhp
cyBzaG91bGQgbm9ybWFsbHkgYmUgdGhlIHBhdGgKKyMgICAgICAgICAgICAgICAgICAgICAgICBm
b3VuZCBpbiB0aGUgcGF0Y2gncyAiSW5kZXg6IiBsaW5lLgorIyAgICRvcHRpb25zOiBhIHJlZmVy
ZW5jZSB0byBhbiBhcnJheSBvZiBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIHBhdGNoIGNvbW1hbmQu
CiBzdWIgYXBwbHlQYXRjaCgkJDskKQogewotICAgIG15ICgkcGF0Y2gsICRmdWxsUGF0aCwgJG9w
dGlvbnMpID0gQF87Ci0gICAgY2hkaXIgJHBhdGhGb3JSZXBvc2l0b3J5Um9vdDsKLSAgICAkb3B0
aW9ucyA9IFtdIGlmICghICRvcHRpb25zKTsKKyAgICBteSAoJHBhdGNoLCAkcGF0aFJlbGF0aXZl
VG9Sb290LCAkb3B0aW9ucykgPSBAXzsKKworICAgIGlmICghICRvcHRpb25zKSB7CisgICAgICAg
ICRvcHRpb25zID0gW107CisgICAgfSBlbHNlIHsKKyAgICAgICAgJG9wdGlvbnMgPSBbQHskb3B0
aW9uc31dOyAjIENvcHkgdG8gYXZvaWQgc2lkZSBlZmZlY3RzLgorICAgIH0KICAgICBwdXNoIEB7
JG9wdGlvbnN9LCAiLS1mb3JjZSIgaWYgJGZvcmNlOwotICAgIG15ICRjb21tYW5kID0gInBhdGNo
ICIgLiBqb2luKCIgIiwgIi1wMCIsIEB7JG9wdGlvbnN9KTsKLSAgICBvcGVuIFBBVENILCAifCAk
Y29tbWFuZCIgb3IgZGllICJGYWlsZWQgdG8gcGF0Y2ggJGZ1bGxQYXRoXG4iOwotICAgIHByaW50
IFBBVENIICRwYXRjaDsKLSAgICBjbG9zZSBQQVRDSDsKLSAgICBjaGRpciAkcGF0aFNjcmlwdFdh
c1J1bkZyb207CiAKLSAgICBteSAkZXhpdENvZGUgPSAkPyA+PiA4OworICAgIG15ICgkcGF0Y2hD
b21tYW5kLCAkZXhpdENvZGUpID0gcnVuUGF0Y2hDb21tYW5kKCRwYXRjaCwgJHJlcG9zaXRvcnlS
b290UGF0aCwgJHBhdGhSZWxhdGl2ZVRvUm9vdCwgJG9wdGlvbnMpOworCiAgICAgaWYgKCRleGl0
Q29kZSkgewogICAgICAgICBpZiAoISRmb3JjZSkgewotICAgICAgICAgICAgcHJpbnQgIiRjb21t
YW5kIFwiJGZ1bGxQYXRoXCIgcmV0dXJuZWQgJGV4aXRDb2RlLiAgUGFzcyAtLWZvcmNlIHRvIGln
bm9yZSBwYXRjaCBmYWlsdXJlcy5cbiI7CisgICAgICAgICAgICBwcmludCAiXCIkcGF0Y2hDb21t
YW5kXCIgZm9yIFwiJHBhdGhSZWxhdGl2ZVRvUm9vdFwiIHJldHVybmVkICRleGl0Q29kZS4gIFBh
c3MgLS1mb3JjZSB0byBpZ25vcmUgcGF0Y2ggZmFpbHVyZXMuXG4iOwogICAgICAgICAgICAgZXhp
dCAkZXhpdENvZGU7CiAgICAgICAgIH0KICAgICAgICAgJGdsb2JhbEV4aXRDb2RlID0gJGV4aXRD
b2RlOwpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9zdm4tdW5hcHBseQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9TY3JpcHRzL3N2bi11bmFwcGx5CShyZXZpc2lvbiA1MjY4NSkKKysrIFdl
YktpdFRvb2xzL1NjcmlwdHMvc3ZuLXVuYXBwbHkJKHdvcmtpbmcgY29weSkKQEAgLTgyLDggKzgy
LDcgQEAgaWYgKCFHZXRPcHRpb25zKCJoZWxwISIgPT4gXCRzaG93SGVscCkgfAogICAgIGV4aXQg
MTsKIH0KIAotbXkgJHBhdGhTY3JpcHRXYXNSdW5Gcm9tID0gQ3dkOjpnZXRjd2QoKTsKLW15ICRw
YXRoRm9yUmVwb3NpdG9yeVJvb3QgPSBkZXRlcm1pbmVWQ1NSb290KCk7CitteSAkcmVwb3NpdG9y
eVJvb3RQYXRoID0gZGV0ZXJtaW5lVkNTUm9vdCgpOwogCiBteSBAY29waWVkRmlsZXM7CiBteSAl
ZGlyZWN0b3JpZXNUb0NoZWNrOwpAQCAtMjI4LDcgKzIyNyw3IEBAIHN1YiBwYXRjaCgkKQogCiBz
dWIgcmV2ZXJ0RGlyZWN0b3JpZXMoKQogewotICAgIGNoZGlyICRwYXRoRm9yUmVwb3NpdG9yeVJv
b3Q7CisgICAgY2hkaXIgJHJlcG9zaXRvcnlSb290UGF0aDsKICAgICBteSAlY2hlY2tlZERpcmVj
dG9yaWVzOwogICAgIGZvcmVhY2ggbXkgJHBhdGggKHJldmVyc2Ugc29ydCBrZXlzICVkaXJlY3Rv
cmllc1RvQ2hlY2spIHsKICAgICAgICAgbXkgQGRpcnMgPSBGaWxlOjpTcGVjLT5zcGxpdGRpcigk
cGF0aCk7CkBAIC0yNTgsMTYgKzI1NywyNiBAQCBzdWIgcmV2ZXJ0RGlyZWN0b3JpZXMoKQogICAg
IH0KIH0KIAorIyBVbmFwcGx5IHRoZSBnaXZlbiBwYXRjaCBzdHJpbmcuCisjCisjIEFyZ3M6Cisj
ICAgJHBhdGNoOiBhIHBhdGNoIHN0cmluZy4KKyMgICAkcGF0aFJlbGF0aXZlVG9Sb290OiB0aGUg
cGF0aCBvZiB0aGUgZmlsZSB0byBiZSBwYXRjaGVkLCByZWxhdGl2ZSB0byB0aGUKKyMgICAgICAg
ICAgICAgICAgICAgICAgICByZXBvc2l0b3J5IHJvb3QuIFRoaXMgc2hvdWxkIG5vcm1hbGx5IGJl
IHRoZSBwYXRoCisjICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgaW4gdGhlIHBhdGNoJ3Mg
IkluZGV4OiIgbGluZS4KKyMgICAkb3B0aW9uczogYSByZWZlcmVuY2UgdG8gYW4gYXJyYXkgb2Yg
b3B0aW9ucyB0byBwYXNzIHRvIHRoZSBwYXRjaCBjb21tYW5kLgogc3ViIHVuYXBwbHlQYXRjaCgk
JDskKQogewotICAgIG15ICgkcGF0Y2gsICRmdWxsUGF0aCwgJG9wdGlvbnMpID0gQF87Ci0gICAg
Y2hkaXIgJHBhdGhGb3JSZXBvc2l0b3J5Um9vdDsKLSAgICAkb3B0aW9ucyA9IFtdIGlmICghICRv
cHRpb25zKTsKLSAgICBteSAkY29tbWFuZCA9ICJwYXRjaCAiIC4gam9pbigiICIsICItcDAiLCAi
LVIiLCBAeyRvcHRpb25zfSk7Ci0gICAgb3BlbiBQQVRDSCwgInwgJGNvbW1hbmQiIG9yIGRpZSAi
RmFpbGVkIHRvIHBhdGNoICRmdWxsUGF0aDogJCEiOwotICAgIHByaW50IFBBVENIICRwYXRjaDsK
LSAgICBjbG9zZSBQQVRDSDsKLSAgICBjaGRpciAkcGF0aFNjcmlwdFdhc1J1bkZyb207CisgICAg
bXkgKCRwYXRjaCwgJHBhdGhSZWxhdGl2ZVRvUm9vdCwgJG9wdGlvbnMpID0gQF87CisKKyAgICBp
ZiAoISAkb3B0aW9ucykgeworICAgICAgICAkb3B0aW9ucyA9IFtdOworICAgIH0gZWxzZSB7Cisg
ICAgICAgICRvcHRpb25zID0gW0B7JG9wdGlvbnN9XTsgIyBDb3B5IHRvIGF2b2lkIHNpZGUgZWZm
ZWN0cy4KKyAgICB9CisKKyAgICBwdXNoIEB7JG9wdGlvbnN9LCAiLS1yZXZlcnNlIjsKKyAgICBy
dW5QYXRjaENvbW1hbmQoJHBhdGNoLCAkcmVwb3NpdG9yeVJvb3RQYXRoLCAkcGF0aFJlbGF0aXZl
VG9Sb290LCAkb3B0aW9ucyk7CiB9CiAKIHN1YiB1bnNldENoYW5nZUxvZ0RhdGUoJCQpCg==
</data>
<flag name="review"
          id="27843"
          type_id="1"
          status="-"
          setter="ddkilzer"
    />
    <flag name="commit-queue"
          id="27844"
          type_id="3"
          status="-"
          setter="ddkilzer"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45738</attachid>
            <date>2010-01-02 01:15:06 -0800</date>
            <delta_ts>2010-01-02 09:05:15 -0800</delta_ts>
            <desc>Proposed patch 2</desc>
            <filename>patch-tools4-2.txt</filename>
            <type>text/plain</type>
            <size>12542</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUyNjg2KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTAtMDEtMDEgIENocmlzIEplcmRvbmVrICA8
Y2hyaXMuamVyZG9uZWtAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgc3ZuLWFwcGx5IGFuZCBzdm4tdW5hcHBseSB0
byB1c2UgYSBjb21tb24gInBhdGNoIgorICAgICAgICBjb21tYW5kIG1ldGhvZCwgYW5kIGFkZGVk
IHVuaXQgdGVzdHMgZm9yIHRoaXMgbmV3IG1ldGhvZC4KKworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMwOTgKKworICAgICAgICAqIFNjcmlwdHMvVkNT
VXRpbHMucG06CisgICAgICAgICAgLSBBZGRlZCBydW5QYXRjaENvbW1hbmQoKS4KKyAgICAgICAg
ICAtIEFkZHJlc3NlZCBleGl0U3RhdHVzKCkgRklYTUUgYnkgYWRkaW5nIGV4aXRTdGF0dXMoKS4K
KworICAgICAgICAqIFNjcmlwdHMvVkNTVXRpbHNfdW5pdHRlc3QucGw6CisgICAgICAgICAgLSBB
ZGRlZCB0d28gdW5pdCB0ZXN0cyBmb3IgcnVuUGF0Y2hDb21tYW5kKCkuCisgICAgICAgICAgLSBB
ZGRlZCBjYWxsU2lsZW50bHkoKSBtZXRob2QuCisKKyAgICAgICAgKiBTY3JpcHRzL3N2bi1hcHBs
eToKKyAgICAgICAgICAtIFJlZmFjdG9yZWQgYXBwbHlQYXRjaCgpLgorICAgICAgICAgIC0gUmVt
b3ZlZCAkcGF0aFNjcmlwdFdhc1J1bkZyb20gZ2xvYmFsIHZhcmlhYmxlLgorICAgICAgICAgIC0g
QWRkcmVzc2VkIGlzc3VlIHdoZXJlICItLWZvcmNlIiBvcHRpb24gY291bGQgZ2V0IGFkZGVkIHR3
aWNlLgorCisgICAgICAgICogU2NyaXB0cy9zdm4tdW5hcHBseToKKyAgICAgICAgICAtIFJlZmFj
dG9yZWQgYXBwbHlQYXRjaCgpLgorICAgICAgICAgIC0gUmVtb3ZlZCAkcGF0aFNjcmlwdFdhc1J1
bkZyb20gZ2xvYmFsIHZhcmlhYmxlLgorICAgICAgICAgIC0gQWRkZWQgc3VwcG9ydCBmb3IgLS1m
b3JjZSBvcHRpb24uCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdGRpcnMucG06CisgICAgICAg
ICAgLSBNb3ZlZCBleGl0U3RhdHVzKCkgaW1wbGVtZW50YXRpb24gdG8gVkNTVXRpbHMucG0uCisK
IDIwMDktMTItMzEgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRp
bHMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbQkocmV2
aXNpb24gNTI2ODUpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzLnBtCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCw3IEBAIHVzZSB3YXJuaW5nczsKIHVzZSBDd2QgcXcoKTsgICMg
InF3KCkiIHByZXZlbnRzIHdhcm5pbmdzIGFib3V0IHJlZGVmaW5pbmcgZ2V0Y3dkKCkgd2l0aCAi
dXNlIFBPU0lYOyIKIHVzZSBGaWxlOjpCYXNlbmFtZTsKIHVzZSBGaWxlOjpTcGVjOwordXNlIFBP
U0lYOwogCiBCRUdJTiB7CiAgICAgdXNlIEV4cG9ydGVyICAgKCk7CkBAIC00OCw2ICs0OSw3IEBA
IEJFR0lOIHsKICAgICAgICAgJmRlY29kZUdpdEJpbmFyeVBhdGNoCiAgICAgICAgICZkZXRlcm1p
bmVTVk5Sb290CiAgICAgICAgICZkZXRlcm1pbmVWQ1NSb290CisgICAgICAgICZleGl0U3RhdHVz
CiAgICAgICAgICZmaXhDaGFuZ2VMb2dQYXRjaAogICAgICAgICAmZ2l0QnJhbmNoCiAgICAgICAg
ICZnaXRkaWZmMnN2bmRpZmYKQEAgLTYwLDYgKzYyLDcgQEAgQkVHSU4gewogICAgICAgICAmbWFr
ZUZpbGVQYXRoUmVsYXRpdmUKICAgICAgICAgJm5vcm1hbGl6ZVBhdGgKICAgICAgICAgJnBhdGhS
ZWxhdGl2ZVRvU1ZOUmVwb3NpdG9yeVJvb3RGb3JQYXRoCisgICAgICAgICZydW5QYXRjaENvbW1h
bmQKICAgICAgICAgJnN2blJldmlzaW9uRm9yRGlyZWN0b3J5CiAgICAgICAgICZzdm5TdGF0dXMK
ICAgICApOwpAQCAtNzYsNiArNzksMjAgQEAgbXkgJGlzR2l0QnJhbmNoQnVpbGQ7CiBteSAkaXNT
Vk47CiBteSAkc3ZuVmVyc2lvbjsKIAorIyBUaGlzIG1ldGhvZCBpcyBmb3IgcG9ydGFiaWxpdHku
IFJldHVybiB0aGUgc3lzdGVtLWFwcHJvcHJpYXRlIGV4aXQKKyMgc3RhdHVzIG9mIGEgY2hpbGQg
cHJvY2Vzcy4KKyMgCisjIEFyZ3M6IHBhc3MgdGhlIGNoaWxkIGVycm9yIHN0YXR1cyByZXR1cm5l
ZCBieSB0aGUgbGFzdCBwaXBlIGNsb3NlLAorIyAgICAgICBmb3IgZXhhbXBsZSAiJD8iLgorc3Vi
IGV4aXRTdGF0dXMoJCkKK3sKKyAgICBteSAoJHJldHVybnZhbHVlKSA9IEBfOworICAgIGlmICgk
Xk8gZXEgIk1TV2luMzIiKSB7CisgICAgICAgIHJldHVybiAkcmV0dXJudmFsdWUgPj4gODsKKyAg
ICB9CisgICAgcmV0dXJuIFdFWElUU1RBVFVTKCRyZXR1cm52YWx1ZSk7Cit9CisKIHN1YiBpc0dp
dERpcmVjdG9yeSgkKQogewogICAgIG15ICgkZGlyKSA9IEBfOwpAQCAtOTQsNyArMTExLDcgQEAg
c3ViIGdpdEJyYW5jaCgpCiB7CiAgICAgdW5sZXNzIChkZWZpbmVkICRnaXRCcmFuY2gpIHsKICAg
ICAgICAgY2hvbXAoJGdpdEJyYW5jaCA9IGBnaXQgc3ltYm9saWMtcmVmIC1xIEhFQURgKTsKLSAg
ICAgICAgJGdpdEJyYW5jaCA9ICIiIGlmIG1haW46OmV4aXRTdGF0dXMoJD8pOyAjIEZJWE1FOiBl
eGl0U3RhdHVzIGlzIGRlZmluZWQgaW4gd2Via2l0ZGlycy5wbQorICAgICAgICAkZ2l0QnJhbmNo
ID0gIiIgaWYgZXhpdFN0YXR1cygkPyk7CiAgICAgICAgICRnaXRCcmFuY2ggPX4gcyNecmVmcy9o
ZWFkcy8jIzsKICAgICAgICAgJGdpdEJyYW5jaCA9ICIiIGlmICRnaXRCcmFuY2ggZXEgIm1hc3Rl
ciI7CiAgICAgfQpAQCAtNDk2LDYgKzUxMyw1OCBAQCBzdWIgZml4Q2hhbmdlTG9nUGF0Y2goJCkK
ICAgICByZXR1cm4gam9pbigkbGluZUVuZGluZywgQGxpbmVzKSAuICJcbiI7ICMgcGF0Y2goMSkg
ZXhwZWN0cyBhbiBleHRyYSB0cmFpbGluZyBuZXdsaW5lLgogfQogCisjIEFwcGx5IHRoZSBnaXZl
biBwYXRjaCB1c2luZyB0aGUgcGF0Y2goMSkgY29tbWFuZC4KKyMKKyMgT24gc3VjY2VzcywgcmV0
dXJuIHRoZSByZXN1bHRpbmcgZXhpdCBzdGF0dXMuIE90aGVyd2lzZSwgZXhpdCB3aXRoIHRoZQor
IyBleGl0IHN0YXR1cy4gSWYgIi0tZm9yY2UiIGlzIHBhc3NlZCBhcyBhbiBvcHRpb24sIGhvd2V2
ZXIsIHRoZW4gbmV2ZXIKKyMgZXhpdCBhbmQgYWx3YXlzIHJldHVybiB0aGUgZXhpdCBzdGF0dXMu
CisjCisjIEFyZ3M6CisjICAgJHBhdGNoOiBhIHBhdGNoIHN0cmluZy4KKyMgICAkcmVwb3NpdG9y
eVJvb3RQYXRoOiBhbiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSByZXBvc2l0b3J5IHJvb3QuCisjICAg
JHBhdGhSZWxhdGl2ZVRvUm9vdDogdGhlIHBhdGggb2YgdGhlIGZpbGUgdG8gYmUgcGF0Y2hlZCwg
cmVsYXRpdmUgdG8gdGhlCisjICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSByb290
LiBUaGlzIHNob3VsZCBub3JtYWxseSBiZSB0aGUgcGF0aAorIyAgICAgICAgICAgICAgICAgICAg
ICAgIGZvdW5kIGluIHRoZSBwYXRjaCdzICJJbmRleDoiIGxpbmUuIEZvciBvcHRpbWl6YXRpb24K
KyMgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlcywgaXQgaXMgcGFzc2VkIGV4cGxpY2l0
bHkgcmF0aGVyIHRoYW4KKyMgICAgICAgICAgICAgICAgICAgICAgICByZXBhcnNlZCBmcm9tIHRo
ZSBwYXRjaCBzdHJpbmcuCisjICAgJG9wdGlvbnM6IGEgcmVmZXJlbmNlIHRvIGFuIGFycmF5IG9m
IG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgcGF0Y2gKKyMgICAgICAgICAgICAgY29tbWFuZC4gVGhl
IHN1YnJvdXRpbmUgcGFzc2VzIHRoZSAtcDAgb3B0aW9uIG5vIG1hdHRlciB3aGF0LgorIworIyBU
aGlzIHN1YnJvdXRpbmUgaGFzIHVuaXQgdGVzdHMgaW4gVkNTVXRpbHNfdW5pdHRlc3QucGwuCitz
dWIgcnVuUGF0Y2hDb21tYW5kKCQkJDskKQoreworICAgIG15ICgkcGF0Y2gsICRyZXBvc2l0b3J5
Um9vdFBhdGgsICRwYXRoUmVsYXRpdmVUb1Jvb3QsICRvcHRpb25zKSA9IEBfOworICAgIAorICAg
ICRvcHRpb25zID0gW10gaWYgKCEgJG9wdGlvbnMpOworCisgICAgbXkgJHBhdGNoQ29tbWFuZCA9
ICJwYXRjaCAiIC4gam9pbigiICIsICItcDAiLCBAeyRvcHRpb25zfSk7CisgICAgCisgICAgIyBU
ZW1wb3JhcmlseSBjaGFuZ2UgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHNpbmNlIHRoZSBwYXRoIGZv
dW5kCisgICAgIyBpbiB0aGUgcGF0Y2gncyAiSW5kZXg6IiBsaW5lIGlzIHJlbGF0aXZlIHRvIHRo
ZSByZXBvc2l0b3J5IHJvb3QKKyAgICAjIChpLmUuIHRoZSBzYW1lIGFzICRwYXRoUmVsYXRpdmVU
b1Jvb3QpLgorICAgIG15ICRjd2QgPSBDd2Q6OmdldGN3ZCgpOworICAgIGNoZGlyICRyZXBvc2l0
b3J5Um9vdFBhdGg7CisKKyAgICBvcGVuIFBBVENILCAifCAkcGF0Y2hDb21tYW5kIiBvciBkaWUg
IkNvdWxkIG5vdCBjYWxsIFwiJHBhdGNoQ29tbWFuZFwiIGZvciBmaWxlIFwiJHBhdGhSZWxhdGl2
ZVRvUm9vdFwiOiAkISI7CisgICAgcHJpbnQgUEFUQ0ggJHBhdGNoOworICAgIGNsb3NlIFBBVENI
OworICAgIG15ICRleGl0U3RhdHVzID0gZXhpdFN0YXR1cygkPyk7CisKKyAgICBjaGRpciAkY3dk
OworCisgICAgaWYgKCRleGl0U3RhdHVzICYmICEoZ3JlcCAvXi0tZm9yY2UkLywgQHskb3B0aW9u
c30pKSB7CisgICAgICAgIHByaW50ICJDYWxsaW5nIFwiJHBhdGNoQ29tbWFuZFwiIGZvciBmaWxl
IFwiJHBhdGhSZWxhdGl2ZVRvUm9vdFwiIHJldHVybmVkICIgLgorICAgICAgICAgICAgICAic3Rh
dHVzICRleGl0U3RhdHVzLiAgUGFzcyAtLWZvcmNlIHRvIGlnbm9yZSBwYXRjaCBmYWlsdXJlcy5c
biI7CisgICAgICAgIGV4aXQgJGV4aXRTdGF0dXM7CisgICAgfQorICAgIAorICAgICMgRklYTUU6
IFJldHVybiBqdXN0ICRleGl0U3RhdHVzIGFmdGVyIGFkZGluZyBhIHVuaXQgdGVzdCBpbgorICAg
ICMgICAgICAgIFZDU1V0aWxzX3VuaXR0ZXN0LnBsIHRoYXQgZG9lcyBhIHN1Y2Nlc3NmdWwgcGF0
Y2guIFdlIGFyZQorICAgICMgICAgICAgIGN1cnJlbnRseSB1bml0IHRlc3RpbmcgdGhpcyBtZXRo
b2QgaW5kaXJlY3RseSBieSBjaGVja2luZyB0aGUKKyAgICAjICAgICAgICBjb21tYW5kIHN5bnRh
eCBpdHNlbGYgdmlhIHRoZSAkcGF0Y2hDb21tYW5kIHJldHVybiB2YWx1ZS4KKyAgICByZXR1cm4g
KCRwYXRjaENvbW1hbmQsICRleGl0U3RhdHVzKTsKK30KKwogc3ViIGdpdENvbmZpZygkKQogewog
ICAgIHJldHVybiB1bmxlc3MgJGlzR2l0OwpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NV
dGlsc191bml0dGVzdC5wbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0
aWxzX3VuaXR0ZXN0LnBsCShyZXZpc2lvbiA1MjY4NSkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMv
VkNTVXRpbHNfdW5pdHRlc3QucGwJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwICszMCwyNCBAQAog
CiAjIFVuaXQgdGVzdHMgb2YgVkNTVXRpbHMucG0uCiAKLXVzZSBUZXN0OjpTaW1wbGUgdGVzdHMg
PT4gNzsKK3VzZSBUZXN0OjpTaW1wbGUgdGVzdHMgPT4gOTsKIAogdXNlIFZDU1V0aWxzOwogCisj
IENhbGwgYSBmdW5jdGlvbiB3aGlsZSBzdXBwcmVzc2luZyBTVERFUlIuCitzdWIgY2FsbFNpbGVu
dGx5KCRAKSB7CisgICAgbXkgKCRmdW5jLCBAYXJncykgPSBAXzsKKworICAgIG9wZW4oT0xERVJS
LCAiPiZTVERPVVQiKTsKKyAgICBvcGVuKFNUREVSUiwgIj4vZGV2L251bGwiKTsKKyAgICBteSBA
cmV0dXJuVmFsdWUgPSAmJGZ1bmMoQGFyZ3MpOworICAgIGNsb3NlKFNUREVSUik7CisgICAgb3Bl
bihTVERFUlIsICI+Jk9MREVSUiIpOworICAgIGNsb3NlKE9MREVSUik7ICMgRklYTUU6IElzIHRo
aXMgbmVjZXNzYXJ5PworCisgICAgcmV0dXJuIEByZXR1cm5WYWx1ZTsKK30KKwogIyBmaXhDaGFu
Z2VMb2dQYXRjaAogIwogIyBUaGUgc291cmNlIENoYW5nZUxvZyBmb3IgdGhlc2UgdGVzdHMgaXMg
dGhlIGZvbGxvd2luZzoKQEAgLTI5MiwzICszMDYsMjQgQEAgRU5ECiAKIG9rKGZpeENoYW5nZUxv
Z1BhdGNoKCRpbikgZXEgJG91dCwgJHRpdGxlKTsKIAorIyBUZXN0OiBydW5QYXRjaENvbW1hbmQK
KworIyBGSVhNRTogQWRkIGEgc3VjY2Vzc2Z1bCBwYXRjaCB0ZXN0LgorCisjIFNpbmNlICRwYXRj
aCBoYXMgbm8gIkluZGV4OiIgcGF0aCwgcGFzc2luZyB0aGlzIHRvIHJ1blBhdGNoQ29tbWFuZAor
IyBzaG91bGQgbm90IGFmZmVjdCBhbnkgZmlsZXMuCitteSAkcGF0Y2ggPSA8PCdFTkQnOworR2Fy
YmFnZSBwYXRjaCBjb250ZW50cworRU5ECisKKyMgV2UgY2FsbCBzaWxlbnRseSB0byBhdm9pZCB0
aGUgZm9sbG93aW5nIG91dHB1dCB0byBTVERFUlI6CisjIHBhdGNoOiAqKioqIE9ubHkgZ2FyYmFn
ZSB3YXMgZm91bmQgaW4gdGhlIHBhdGNoIGlucHV0LgorbXkgKCRwYXRjaENvbW1hbmQsICRleGl0
U3RhdHVzKSA9IGNhbGxTaWxlbnRseShcJnJ1blBhdGNoQ29tbWFuZCwgJHBhdGNoLCAiLiIsICJm
aWxlX3RvX3BhdGNoLnR4dCIsIFsiLS1mb3JjZSIsICItYyJdKTsKKworJHRpdGxlID0gInJ1blBh
dGNoQ29tbWFuZDogUGFzcyBhcmd1bWVudHMuIjsKKworb2soJHBhdGNoQ29tbWFuZCBlcSAicGF0
Y2ggLXAwIC0tZm9yY2UgLWMiLCAkdGl0bGUpOworCiskdGl0bGUgPSAicnVuUGF0Y2hDb21tYW5k
OiBCYWQgcGF0Y2guIjsKKworb2soJGV4aXRTdGF0dXMgIT0gMCwgJHRpdGxlKTsKSW5kZXg6IFdl
YktpdFRvb2xzL1NjcmlwdHMvc3ZuLWFwcGx5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Nj
cmlwdHMvc3ZuLWFwcGx5CShyZXZpc2lvbiA1MjY4NSkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMv
c3ZuLWFwcGx5CSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMTAgKzExNiw5IEBAIG15ICVyZW1vdmVE
aXJlY3RvcnlJZ25vcmVMaXN0ID0gKAogICAgICdfc3ZuJyA9PiAxLAogKTsKIAotbXkgJGdsb2Jh
bEV4aXRDb2RlID0gMDsKK215ICRnbG9iYWxFeGl0U3RhdHVzID0gMDsKIAotbXkgJHBhdGhTY3Jp
cHRXYXNSdW5Gcm9tID0gQ3dkOjpnZXRjd2QoKTsKLW15ICRwYXRoRm9yUmVwb3NpdG9yeVJvb3Qg
PSBkZXRlcm1pbmVWQ1NSb290KCk7CitteSAkcmVwb3NpdG9yeVJvb3RQYXRoID0gZGV0ZXJtaW5l
VkNTUm9vdCgpOwogCiBteSAlY2hlY2tlZERpcmVjdG9yaWVzOwogbXkgJWNvcGllZEZpbGVzOwpA
QCAtMTkzLDcgKzE5Miw3IEBAIGZvciAkcGF0Y2ggKEBwYXRjaGVzKSB7CiAKIHJlbW92ZURpcmVj
dG9yaWVzSWZOZWVkZWQoKTsKIAotZXhpdCAkZ2xvYmFsRXhpdENvZGU7CitleGl0ICRnbG9iYWxF
eGl0U3RhdHVzOwogCiBzdWIgYWRkRGlyZWN0b3JpZXNJZk5lZWRlZCgkKQogewpAQCAtMjI0LDI1
ICsyMjMsMzIgQEAgc3ViIGFkZERpcmVjdG9yaWVzSWZOZWVkZWQoJCkKICAgICB9CiB9CiAKKyMg
QXBwbHkgdGhlIGdpdmVuIHBhdGNoIHN0cmluZy4KKyMKKyMgQXJnczoKKyMgICAkcGF0Y2g6IGEg
cGF0Y2ggc3RyaW5nLgorIyAgICRwYXRoUmVsYXRpdmVUb1Jvb3Q6IHRoZSBwYXRoIG9mIHRoZSBm
aWxlIHRvIGJlIHBhdGNoZWQsIHJlbGF0aXZlIHRvIHRoZQorIyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcG9zaXRvcnkgcm9vdC4gVGhpcyBzaG91bGQgbm9ybWFsbHkgYmUgdGhlIHBhdGgKKyMg
ICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCBpbiB0aGUgcGF0Y2gncyAiSW5kZXg6IiBsaW5l
LgorIyAgICRvcHRpb25zOiBhIHJlZmVyZW5jZSB0byBhbiBhcnJheSBvZiBvcHRpb25zIHRvIHBh
c3MgdG8gdGhlIHBhdGNoIGNvbW1hbmQuCiBzdWIgYXBwbHlQYXRjaCgkJDskKQogewotICAgIG15
ICgkcGF0Y2gsICRmdWxsUGF0aCwgJG9wdGlvbnMpID0gQF87Ci0gICAgY2hkaXIgJHBhdGhGb3JS
ZXBvc2l0b3J5Um9vdDsKLSAgICAkb3B0aW9ucyA9IFtdIGlmICghICRvcHRpb25zKTsKLSAgICBw
dXNoIEB7JG9wdGlvbnN9LCAiLS1mb3JjZSIgaWYgJGZvcmNlOwotICAgIG15ICRjb21tYW5kID0g
InBhdGNoICIgLiBqb2luKCIgIiwgIi1wMCIsIEB7JG9wdGlvbnN9KTsKLSAgICBvcGVuIFBBVENI
LCAifCAkY29tbWFuZCIgb3IgZGllICJGYWlsZWQgdG8gcGF0Y2ggJGZ1bGxQYXRoXG4iOwotICAg
IHByaW50IFBBVENIICRwYXRjaDsKLSAgICBjbG9zZSBQQVRDSDsKLSAgICBjaGRpciAkcGF0aFNj
cmlwdFdhc1J1bkZyb207Ci0KLSAgICBteSAkZXhpdENvZGUgPSAkPyA+PiA4OwotICAgIGlmICgk
ZXhpdENvZGUpIHsKLSAgICAgICAgaWYgKCEkZm9yY2UpIHsKLSAgICAgICAgICAgIHByaW50ICIk
Y29tbWFuZCBcIiRmdWxsUGF0aFwiIHJldHVybmVkICRleGl0Q29kZS4gIFBhc3MgLS1mb3JjZSB0
byBpZ25vcmUgcGF0Y2ggZmFpbHVyZXMuXG4iOwotICAgICAgICAgICAgZXhpdCAkZXhpdENvZGU7
Ci0gICAgICAgIH0KLSAgICAgICAgJGdsb2JhbEV4aXRDb2RlID0gJGV4aXRDb2RlOworICAgIG15
ICgkcGF0Y2gsICRwYXRoUmVsYXRpdmVUb1Jvb3QsICRvcHRpb25zKSA9IEBfOworCisgICAgaWYg
KCEgJG9wdGlvbnMpIHsKKyAgICAgICAgJG9wdGlvbnMgPSBbXTsKKyAgICB9IGVsc2UgeworICAg
ICAgICAkb3B0aW9ucyA9IFtAeyRvcHRpb25zfV07ICMgQ29weSB0byBhdm9pZCBzaWRlIGVmZmVj
dHMuCisgICAgfQorICAgIAorICAgIGlmICgkZm9yY2UgJiYgIShncmVwIC9eLS1mb3JjZSQvLCBA
eyRvcHRpb25zfSkpIHsgIyBDaGVjayBub3QgYWxyZWFkeSBmb3JjaW5nLgorICAgICAgICBwdXNo
IEB7JG9wdGlvbnN9LCAiLS1mb3JjZSI7CisgICAgfQorCisgICAgbXkgKCRwYXRjaENvbW1hbmQs
ICRleGl0U3RhdHVzKSA9IHJ1blBhdGNoQ29tbWFuZCgkcGF0Y2gsICRyZXBvc2l0b3J5Um9vdFBh
dGgsICRwYXRoUmVsYXRpdmVUb1Jvb3QsICRvcHRpb25zKTsKKworICAgIGlmICgkZXhpdFN0YXR1
cykgeworICAgICAgICAkZ2xvYmFsRXhpdFN0YXR1cyA9ICRleGl0U3RhdHVzOwogICAgIH0KIH0K
IApJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9zdm4tdW5hcHBseQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXRUb29scy9TY3JpcHRzL3N2bi11bmFwcGx5CShyZXZpc2lvbiA1MjY4NSkKKysrIFdlYktp
dFRvb2xzL1NjcmlwdHMvc3ZuLXVuYXBwbHkJKHdvcmtpbmcgY29weSkKQEAgLTc3LDEzICs3Nywx
OSBAQCBzdWIgdW5hcHBseVBhdGNoKCQkOyQpOwogc3ViIHVuc2V0Q2hhbmdlTG9nRGF0ZSgkJCk7
CiAKIG15ICRzaG93SGVscCA9IDA7Ci1pZiAoIUdldE9wdGlvbnMoImhlbHAhIiA9PiBcJHNob3dI
ZWxwKSB8fCAkc2hvd0hlbHApIHsKLSAgICBwcmludCBTVERFUlIgYmFzZW5hbWUoJDApIC4gIiBb
LWh8LS1oZWxwXSBwYXRjaDEgW3BhdGNoMiAuLi5dXG4iOworbXkgJGZvcmNlID0gMDsKKworbXkg
JG9wdGlvblBhcnNlU3VjY2VzcyA9IEdldE9wdGlvbnMoCisgICAgImhlbHAhIiA9PiBcJHNob3dI
ZWxwLAorICAgICJmb3JjZSEiID0+IFwkZm9yY2UKKyk7CisKK2lmICghJG9wdGlvblBhcnNlU3Vj
Y2VzcyB8fCAkc2hvd0hlbHApIHsKKyAgICBwcmludCBTVERFUlIgYmFzZW5hbWUoJDApIC4gIiBb
LWh8LS1oZWxwXSBbLS1mb3JjZV0gcGF0Y2gxIFtwYXRjaDIgLi4uXVxuIjsKICAgICBleGl0IDE7
CiB9CiAKLW15ICRwYXRoU2NyaXB0V2FzUnVuRnJvbSA9IEN3ZDo6Z2V0Y3dkKCk7Ci1teSAkcGF0
aEZvclJlcG9zaXRvcnlSb290ID0gZGV0ZXJtaW5lVkNTUm9vdCgpOworbXkgJHJlcG9zaXRvcnlS
b290UGF0aCA9IGRldGVybWluZVZDU1Jvb3QoKTsKIAogbXkgQGNvcGllZEZpbGVzOwogbXkgJWRp
cmVjdG9yaWVzVG9DaGVjazsKQEAgLTIyOCw3ICsyMzQsNyBAQCBzdWIgcGF0Y2goJCkKIAogc3Vi
IHJldmVydERpcmVjdG9yaWVzKCkKIHsKLSAgICBjaGRpciAkcGF0aEZvclJlcG9zaXRvcnlSb290
OworICAgIGNoZGlyICRyZXBvc2l0b3J5Um9vdFBhdGg7CiAgICAgbXkgJWNoZWNrZWREaXJlY3Rv
cmllczsKICAgICBmb3JlYWNoIG15ICRwYXRoIChyZXZlcnNlIHNvcnQga2V5cyAlZGlyZWN0b3Jp
ZXNUb0NoZWNrKSB7CiAgICAgICAgIG15IEBkaXJzID0gRmlsZTo6U3BlYy0+c3BsaXRkaXIoJHBh
dGgpOwpAQCAtMjU4LDE2ICsyNjQsMzAgQEAgc3ViIHJldmVydERpcmVjdG9yaWVzKCkKICAgICB9
CiB9CiAKKyMgVW5hcHBseSB0aGUgZ2l2ZW4gcGF0Y2ggc3RyaW5nLgorIworIyBBcmdzOgorIyAg
ICRwYXRjaDogYSBwYXRjaCBzdHJpbmcuCisjICAgJHBhdGhSZWxhdGl2ZVRvUm9vdDogdGhlIHBh
dGggb2YgdGhlIGZpbGUgdG8gYmUgcGF0Y2hlZCwgcmVsYXRpdmUgdG8gdGhlCisjICAgICAgICAg
ICAgICAgICAgICAgICAgcmVwb3NpdG9yeSByb290LiBUaGlzIHNob3VsZCBub3JtYWxseSBiZSB0
aGUgcGF0aAorIyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kIGluIHRoZSBwYXRjaCdzICJJ
bmRleDoiIGxpbmUuCisjICAgJG9wdGlvbnM6IGEgcmVmZXJlbmNlIHRvIGFuIGFycmF5IG9mIG9w
dGlvbnMgdG8gcGFzcyB0byB0aGUgcGF0Y2ggY29tbWFuZC4KIHN1YiB1bmFwcGx5UGF0Y2goJCQ7
JCkKIHsKLSAgICBteSAoJHBhdGNoLCAkZnVsbFBhdGgsICRvcHRpb25zKSA9IEBfOwotICAgIGNo
ZGlyICRwYXRoRm9yUmVwb3NpdG9yeVJvb3Q7Ci0gICAgJG9wdGlvbnMgPSBbXSBpZiAoISAkb3B0
aW9ucyk7Ci0gICAgbXkgJGNvbW1hbmQgPSAicGF0Y2ggIiAuIGpvaW4oIiAiLCAiLXAwIiwgIi1S
IiwgQHskb3B0aW9uc30pOwotICAgIG9wZW4gUEFUQ0gsICJ8ICRjb21tYW5kIiBvciBkaWUgIkZh
aWxlZCB0byBwYXRjaCAkZnVsbFBhdGg6ICQhIjsKLSAgICBwcmludCBQQVRDSCAkcGF0Y2g7Ci0g
ICAgY2xvc2UgUEFUQ0g7Ci0gICAgY2hkaXIgJHBhdGhTY3JpcHRXYXNSdW5Gcm9tOworICAgIG15
ICgkcGF0Y2gsICRwYXRoUmVsYXRpdmVUb1Jvb3QsICRvcHRpb25zKSA9IEBfOworCisgICAgaWYg
KCEgJG9wdGlvbnMpIHsKKyAgICAgICAgJG9wdGlvbnMgPSBbXTsKKyAgICB9IGVsc2UgeworICAg
ICAgICAkb3B0aW9ucyA9IFtAeyRvcHRpb25zfV07ICMgQ29weSB0byBhdm9pZCBzaWRlIGVmZmVj
dHMuCisgICAgfQorCisgICAgaWYgKCRmb3JjZSAmJiAhKGdyZXAgL14tLWZvcmNlJC8sIEB7JG9w
dGlvbnN9KSkgeyAjIENoZWNrIG5vdCBhbHJlYWR5IGZvcmNpbmcuCisgICAgICAgIHB1c2ggQHsk
b3B0aW9uc30sICItLWZvcmNlIjsKKyAgICB9CisKKyAgICBwdXNoIEB7JG9wdGlvbnN9LCAiLS1y
ZXZlcnNlIjsKKyAgICBydW5QYXRjaENvbW1hbmQoJHBhdGNoLCAkcmVwb3NpdG9yeVJvb3RQYXRo
LCAkcGF0aFJlbGF0aXZlVG9Sb290LCAkb3B0aW9ucyk7CiB9CiAKIHN1YiB1bnNldENoYW5nZUxv
Z0RhdGUoJCQpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCShyZXZpc2lvbiA1MjY4
NSkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsNyBAQCB1c2UgRmluZEJpbjsKIHVzZSBGaWxlOjpCYXNlbmFtZTsKIHVzZSBG
aWxlOjpTcGVjOwogdXNlIFBPU0lYOworCiB1c2UgVkNTVXRpbHM7CiAKIEJFR0lOIHsKQEAgLTcw
LDYgKzcxLDkgQEAgbXkgJHZjQnVpbGRQYXRoOwogbXkgJHdpbmRvd3NUbXBQYXRoOwogbXkgJHdp
bmRvd3NTb3VyY2VEaXI7CiAKKyMgRGVmaW5lZCBpbiBWQ1NVdGlscy4KK3N1YiBleGl0U3RhdHVz
KCQpOworCiBzdWIgZGV0ZXJtaW5lU291cmNlRGlyCiB7CiAgICAgcmV0dXJuIGlmICRzb3VyY2VE
aXI7CkBAIC0xNjAyLDE1ICsxNjA2LDYgQEAgc3ViIHNldFBhdGhGb3JSdW5uaW5nV2ViS2l0QXBw
CiAgICAgJGVudi0+e1BBVEh9ID0gam9pbignOicsIHByb2R1Y3REaXIoKSwgZGlybmFtZShpbnN0
YWxsZWRTYWZhcmlQYXRoKCkpLCBhcHBsZUFwcGxpY2F0aW9uU3VwcG9ydFBhdGgoKSwgJGVudi0+
e1BBVEh9IHx8ICIiKTsKIH0KIAotc3ViIGV4aXRTdGF0dXMoJCkKLXsKLSAgICBteSAoJHJldHVy
bnZhbHVlKSA9IEBfOwotICAgIGlmICgkXk8gZXEgIk1TV2luMzIiKSB7Ci0gICAgICAgIHJldHVy
biAkcmV0dXJudmFsdWUgPj4gODsKLSAgICB9Ci0gICAgcmV0dXJuIFdFWElUU1RBVFVTKCRyZXR1
cm52YWx1ZSk7Ci19Ci0KIHN1YiBydW5TYWZhcmkKIHsKICAgICBteSAoJGRlYnVnZ2VyKSA9IEBf
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45747</attachid>
            <date>2010-01-02 13:01:30 -0800</date>
            <delta_ts>2010-01-03 11:01:50 -0800</delta_ts>
            <desc>Proposed patch 3</desc>
            <filename>patch-tools4-3.txt</filename>
            <type>text/plain</type>
            <size>18484</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUyNjg2KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTAtMDEtMDEgIENocmlzIEplcmRvbmVrICA8
Y2hyaXMuamVyZG9uZWtAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgc3ZuLWFwcGx5IGFuZCBzdm4tdW5hcHBseSB0
byB1c2UgYSBjb21tb24gInBhdGNoIgorICAgICAgICBjb21tYW5kIG1ldGhvZCwgYW5kIGFkZGVk
IHVuaXQgdGVzdHMgZm9yIHRoaXMgbmV3IG1ldGhvZC4KKworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMwOTgKKworICAgICAgICAqIFNjcmlwdHMvVkNT
VXRpbHMucG06CisgICAgICAgICAgLSBBZGRlZCBnZW5lcmF0ZVJ1blBhdGNoQ29tbWFuZCgpLgor
ICAgICAgICAgIC0gQWRkZWQgcnVuUGF0Y2hDb21tYW5kKCkuCisgICAgICAgICAgLSBBZGRlZCBl
eGl0U3RhdHVzKCkgZnJvbSB3ZWJraXRkaXJzLnBtIHRvIGFkZHJlc3MgRklYTUUuCisKKyAgICAg
ICAgKiBTY3JpcHRzL1ZDU1V0aWxzX3VuaXR0ZXN0LnBsOgorICAgICAgICAgIC0gQWRkZWQgMTAg
dW5pdCB0ZXN0cyBmb3IgZ2VuZXJhdGVSdW5QYXRjaENvbW1hbmQoKS4KKyAgICAgICAgICAtIEFk
ZGVkIDQgdW5pdCB0ZXN0cyBmb3IgcnVuUGF0Y2hDb21tYW5kKCkuCisgICAgICAgICAgLSBBZGRl
ZCBjYWxsU2lsZW50bHkoKSBtZXRob2QuCisKKyAgICAgICAgKiBTY3JpcHRzL3N2bi1hcHBseToK
KyAgICAgICAgICAtIFJlZmFjdG9yZWQgYXBwbHlQYXRjaCgpLgorICAgICAgICAgIC0gUmVtb3Zl
ZCAkcGF0aFNjcmlwdFdhc1J1bkZyb20gZ2xvYmFsIHZhcmlhYmxlLgorICAgICAgICAgIC0gQWRk
cmVzc2VkIGlzc3VlIHdoZXJlICItLWZvcmNlIiBvcHRpb24gd2FzIGdldHRpbmcgYWRkZWQgdHdp
Y2UuCisKKyAgICAgICAgKiBTY3JpcHRzL3N2bi11bmFwcGx5OgorICAgICAgICAgIC0gUmVmYWN0
b3JlZCBhcHBseVBhdGNoKCkuCisgICAgICAgICAgLSBSZW1vdmVkICRwYXRoU2NyaXB0V2FzUnVu
RnJvbSBnbG9iYWwgdmFyaWFibGUuCisgICAgICAgICAgLSBBZGRlZCBzdXBwb3J0IGZvciAtLWZv
cmNlIG9wdGlvbi4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0ZGlycy5wbToKKyAgICAgICAg
ICAtIE1vdmVkIGV4aXRTdGF0dXMoKSBpbXBsZW1lbnRhdGlvbiB0byBWQ1NVdGlscy5wbS4KKwog
MjAwOS0xMi0zMSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGls
cy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzLnBtCShyZXZp
c2lvbiA1MjY4NSkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHMucG0JKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAjIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKEMpIDIwMDkgQ2hy
aXMgSmVyZG9uZWsgKGNocmlzLmplcmRvbmVrQGdtYWlsLmNvbSkKKyMgQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDEwIENocmlzIEplcmRvbmVrIChjaHJpcy5qZXJkb25la0BnbWFpbC5jb20pCiAjCiAj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAgdXNlIHdhcm5pbmdzOwog
dXNlIEN3ZCBxdygpOyAgIyAicXcoKSIgcHJldmVudHMgd2FybmluZ3MgYWJvdXQgcmVkZWZpbmlu
ZyBnZXRjd2QoKSB3aXRoICJ1c2UgUE9TSVg7IgogdXNlIEZpbGU6OkJhc2VuYW1lOwogdXNlIEZp
bGU6OlNwZWM7Cit1c2UgUE9TSVg7CiAKIEJFR0lOIHsKICAgICB1c2UgRXhwb3J0ZXIgICAoKTsK
QEAgLTQ4LDYgKzQ5LDcgQEAgQkVHSU4gewogICAgICAgICAmZGVjb2RlR2l0QmluYXJ5UGF0Y2gK
ICAgICAgICAgJmRldGVybWluZVNWTlJvb3QKICAgICAgICAgJmRldGVybWluZVZDU1Jvb3QKKyAg
ICAgICAgJmV4aXRTdGF0dXMKICAgICAgICAgJmZpeENoYW5nZUxvZ1BhdGNoCiAgICAgICAgICZn
aXRCcmFuY2gKICAgICAgICAgJmdpdGRpZmYyc3ZuZGlmZgpAQCAtNjAsNiArNjIsNyBAQCBCRUdJ
TiB7CiAgICAgICAgICZtYWtlRmlsZVBhdGhSZWxhdGl2ZQogICAgICAgICAmbm9ybWFsaXplUGF0
aAogICAgICAgICAmcGF0aFJlbGF0aXZlVG9TVk5SZXBvc2l0b3J5Um9vdEZvclBhdGgKKyAgICAg
ICAgJnJ1blBhdGNoQ29tbWFuZAogICAgICAgICAmc3ZuUmV2aXNpb25Gb3JEaXJlY3RvcnkKICAg
ICAgICAgJnN2blN0YXR1cwogICAgICk7CkBAIC03Niw2ICs3OSwyMCBAQCBteSAkaXNHaXRCcmFu
Y2hCdWlsZDsKIG15ICRpc1NWTjsKIG15ICRzdm5WZXJzaW9uOwogCisjIFRoaXMgbWV0aG9kIGlz
IGZvciBwb3J0YWJpbGl0eS4gUmV0dXJuIHRoZSBzeXN0ZW0tYXBwcm9wcmlhdGUgZXhpdAorIyBz
dGF0dXMgb2YgYSBjaGlsZCBwcm9jZXNzLgorIworIyBBcmdzOiBwYXNzIHRoZSBjaGlsZCBlcnJv
ciBzdGF0dXMgcmV0dXJuZWQgYnkgdGhlIGxhc3QgcGlwZSBjbG9zZSwKKyMgICAgICAgZm9yIGV4
YW1wbGUgIiQ/Ii4KK3N1YiBleGl0U3RhdHVzKCQpCit7CisgICAgbXkgKCRyZXR1cm52YWx1ZSkg
PSBAXzsKKyAgICBpZiAoJF5PIGVxICJNU1dpbjMyIikgeworICAgICAgICByZXR1cm4gJHJldHVy
bnZhbHVlID4+IDg7CisgICAgfQorICAgIHJldHVybiBXRVhJVFNUQVRVUygkcmV0dXJudmFsdWUp
OworfQorCiBzdWIgaXNHaXREaXJlY3RvcnkoJCkKIHsKICAgICBteSAoJGRpcikgPSBAXzsKQEAg
LTk0LDcgKzExMSw3IEBAIHN1YiBnaXRCcmFuY2goKQogewogICAgIHVubGVzcyAoZGVmaW5lZCAk
Z2l0QnJhbmNoKSB7CiAgICAgICAgIGNob21wKCRnaXRCcmFuY2ggPSBgZ2l0IHN5bWJvbGljLXJl
ZiAtcSBIRUFEYCk7Ci0gICAgICAgICRnaXRCcmFuY2ggPSAiIiBpZiBtYWluOjpleGl0U3RhdHVz
KCQ/KTsgIyBGSVhNRTogZXhpdFN0YXR1cyBpcyBkZWZpbmVkIGluIHdlYmtpdGRpcnMucG0KKyAg
ICAgICAgJGdpdEJyYW5jaCA9ICIiIGlmIGV4aXRTdGF0dXMoJD8pOwogICAgICAgICAkZ2l0QnJh
bmNoID1+IHMjXnJlZnMvaGVhZHMvIyM7CiAgICAgICAgICRnaXRCcmFuY2ggPSAiIiBpZiAkZ2l0
QnJhbmNoIGVxICJtYXN0ZXIiOwogICAgIH0KQEAgLTQ5Niw2ICs1MTMsMTA5IEBAIHN1YiBmaXhD
aGFuZ2VMb2dQYXRjaCgkKQogICAgIHJldHVybiBqb2luKCRsaW5lRW5kaW5nLCBAbGluZXMpIC4g
IlxuIjsgIyBwYXRjaCgxKSBleHBlY3RzIGFuIGV4dHJhIHRyYWlsaW5nIG5ld2xpbmUuCiB9CiAK
KyMgVGhpcyBpcyBhIHN1cHBvcnRpbmcgbWV0aG9kIGZvciBydW5QYXRjaENvbW1hbmQuCisjCisj
IEFyZzogdGhlIG9wdGlvbmFsICRhcmdzIHBhcmFtZXRlciBwYXNzZWQgdG8gcnVuUGF0Y2hDb21t
YW5kIChjYW4gYmUgdW5kZWZpbmVkKS4KKyMKKyMgUmV0dXJucyAoJHBhdGNoQ29tbWFuZCwgJGlz
Rm9yY2luZykuCisjCisjIFRoaXMgc3Vicm91dGluZSBoYXMgdW5pdCB0ZXN0cyBpbiBWQ1NVdGls
c191bml0dGVzdC5wbC4KK3N1YiBnZW5lcmF0ZVJ1blBhdGNoQ29tbWFuZCgkKQoreworICAgIG15
ICgkcGFzc2VkQXJnc0hhc2hSZWYpID0gQF87CisKKyAgICBteSAkYXJnc0hhc2hSZWYgPSB7ICMg
RGVmYXVsdHMKKyAgICAgICAgZW5zdXJlRm9yY2UgPT4gMCwKKyAgICAgICAgc2hvdWxkUmV2ZXJz
ZSA9PiAwLAorICAgICAgICBvcHRpb25zID0+IFtdCisgICAgfTsKKyAgICAKKyAgICAjIE1lcmdl
cyBoYXNoIHJlZmVyZW5jZXMuIEl0J3Mgb2theSBoZXJlIGlmIHBhc3NlZCBoYXNoIHJlZmVyZW5j
ZSBpcyB1bmRlZmluZWQuCisgICAgQHskYXJnc0hhc2hSZWZ9e2tleXMgJXskcGFzc2VkQXJnc0hh
c2hSZWZ9fSA9IHZhbHVlcyAleyRwYXNzZWRBcmdzSGFzaFJlZn07CisgICAgCisgICAgbXkgJGVu
c3VyZUZvcmNlID0gJGFyZ3NIYXNoUmVmLT57ZW5zdXJlRm9yY2V9OworICAgIG15ICRzaG91bGRS
ZXZlcnNlID0gJGFyZ3NIYXNoUmVmLT57c2hvdWxkUmV2ZXJzZX07CisgICAgbXkgJG9wdGlvbnMg
PSAkYXJnc0hhc2hSZWYtPntvcHRpb25zfTsKKworICAgIGlmICghICRvcHRpb25zKSB7CisgICAg
ICAgICRvcHRpb25zID0gW107CisgICAgfSBlbHNlIHsKKyAgICAgICAgJG9wdGlvbnMgPSBbQHsk
b3B0aW9uc31dOyAjIENvcHkgdG8gYXZvaWQgc2lkZSBlZmZlY3RzLgorICAgIH0KKworICAgIG15
ICRpc0ZvcmNpbmcgPSAwOworICAgIGlmIChncmVwIC9eLS1mb3JjZSQvLCBAeyRvcHRpb25zfSkg
eworICAgICAgICAkaXNGb3JjaW5nID0gMTsKKyAgICB9IGVsc2lmICgkZW5zdXJlRm9yY2UpIHsK
KyAgICAgICAgcHVzaCBAeyRvcHRpb25zfSwgIi0tZm9yY2UiOworICAgICAgICAkaXNGb3JjaW5n
ID0gMTsKKyAgICB9CisKKyAgICBpZiAoJHNob3VsZFJldmVyc2UpIHsgIyBObyBjaGVjazogLS1y
ZXZlcnNlIHNob3VsZCBuZXZlciBiZSBwYXNzZWQgZXhwbGljaXRseS4KKyAgICAgICAgcHVzaCBA
eyRvcHRpb25zfSwgIi0tcmV2ZXJzZSI7CisgICAgfQorCisgICAgQHskb3B0aW9uc30gPSBzb3J0
KEB7JG9wdGlvbnN9KTsgIyBGb3IgZWFzaWVyIHRlc3RpbmcuCisKKyAgICBteSAkcGF0Y2hDb21t
YW5kID0gInBhdGNoICIgLiBqb2luKCIgIiwgIi1wMCIsIEB7JG9wdGlvbnN9KTsKKworICAgIHJl
dHVybiAoJHBhdGNoQ29tbWFuZCwgJGlzRm9yY2luZyk7Cit9CisKKyMgQXBwbHkgdGhlIGdpdmVu
IHBhdGNoIHVzaW5nIHRoZSBwYXRjaCgxKSBjb21tYW5kLgorIworIyBPbiBzdWNjZXNzLCByZXR1
cm4gdGhlIHJlc3VsdGluZyBleGl0IHN0YXR1cy4gT3RoZXJ3aXNlLCBleGl0IHdpdGggdGhlCisj
IGV4aXQgc3RhdHVzLiBJZiAiLS1mb3JjZSIgaXMgcGFzc2VkIGFzIGFuIG9wdGlvbiwgaG93ZXZl
ciwgdGhlbiBuZXZlcgorIyBleGl0IGFuZCBhbHdheXMgcmV0dXJuIHRoZSBleGl0IHN0YXR1cy4K
KyMKKyMgQXJnczoKKyMgICAkcGF0Y2g6IGEgcGF0Y2ggc3RyaW5nLgorIyAgICRyZXBvc2l0b3J5
Um9vdFBhdGg6IGFuIGFic29sdXRlIHBhdGggdG8gdGhlIHJlcG9zaXRvcnkgcm9vdC4KKyMgICAk
cGF0aFJlbGF0aXZlVG9Sb290OiB0aGUgcGF0aCBvZiB0aGUgZmlsZSB0byBiZSBwYXRjaGVkLCBy
ZWxhdGl2ZSB0byB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5IHJvb3Qu
IFRoaXMgc2hvdWxkIG5vcm1hbGx5IGJlIHRoZSBwYXRoCisjICAgICAgICAgICAgICAgICAgICAg
ICAgZm91bmQgaW4gdGhlIHBhdGNoJ3MgIkluZGV4OiIgbGluZS4gSXQgaXMgcGFzc2VkCisjICAg
ICAgICAgICAgICAgICAgICAgICAgZXhwbGljaXRseSByYXRoZXIgdGhhbiByZXBhcnNlZCBmcm9t
IHRoZSBwYXRjaAorIyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBmb3Igb3B0aW1pemF0
aW9uIHB1cnBvc2VzLgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHVzZWQg
b25seSBmb3IgZXJyb3IgcmVwb3J0aW5nLiBUaGUKKyMgICAgICAgICAgICAgICAgICAgICAgICBw
YXRjaCBjb21tYW5kIGdsZWFucyB0aGUgYWN0dWFsIGZpbGUgdG8gcGF0Y2gKKyMgICAgICAgICAg
ICAgICAgICAgICAgICBmcm9tIHRoZSBwYXRjaCBzdHJpbmcuCisjICAgJGFyZ3M6IGEgcmVmZXJl
bmNlIHRvIGEgaGFzaCBvZiBvcHRpb25hbCBhcmd1bWVudHMuIFRoZSBwb3NzaWJsZQorIyAgICAg
ICAgICBrZXlzIGFyZSAtLQorIyAgICAgICAgICAgIGVuc3VyZUZvcmNlOiB3aGV0aGVyIHRvIGVu
c3VyZSAtLWZvcmNlIGlzIHBhc3NlZCAoZGVmYXVsdHMgdG8gMCkuCisjICAgICAgICAgICAgc2hv
dWxkUmV2ZXJzZTogd2hldGhlciB0byBwYXNzIC0tcmV2ZXJzZSAoZGVmYXVsdHMgdG8gMCkuCisj
ICAgICAgICAgICAgb3B0aW9uczogYSByZWZlcmVuY2UgdG8gYW4gYXJyYXkgb2Ygb3B0aW9ucyB0
byBwYXNzIHRvIHRoZQorIyAgICAgICAgICAgICAgICAgICAgIHBhdGNoIGNvbW1hbmQuIFRoZSBz
dWJyb3V0aW5lIHBhc3NlcyB0aGUgLXAwIG9wdGlvbgorIyAgICAgICAgICAgICAgICAgICAgIG5v
IG1hdHRlciB3aGF0LiBUaGlzIHNob3VsZCBub3QgaW5jbHVkZSAtLXJldmVyc2UuCisjCisjIFRo
aXMgc3Vicm91dGluZSBoYXMgdW5pdCB0ZXN0cyBpbiBWQ1NVdGlsc191bml0dGVzdC5wbC4KK3N1
YiBydW5QYXRjaENvbW1hbmQoJCQkOyQpCit7CisgICAgbXkgKCRwYXRjaCwgJHJlcG9zaXRvcnlS
b290UGF0aCwgJHBhdGhSZWxhdGl2ZVRvUm9vdCwgJGFyZ3MpID0gQF87CisKKyAgICBteSAoJHBh
dGNoQ29tbWFuZCwgJGlzRm9yY2luZykgPSBnZW5lcmF0ZVJ1blBhdGNoQ29tbWFuZCgkYXJncyk7
CisKKyAgICAjIFRlbXBvcmFyaWx5IGNoYW5nZSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgc2luY2Ug
dGhlIHBhdGggZm91bmQKKyAgICAjIGluIHRoZSBwYXRjaCdzICJJbmRleDoiIGxpbmUgaXMgcmVs
YXRpdmUgdG8gdGhlIHJlcG9zaXRvcnkgcm9vdAorICAgICMgKGkuZS4gdGhlIHNhbWUgYXMgJHBh
dGhSZWxhdGl2ZVRvUm9vdCkuCisgICAgbXkgJGN3ZCA9IEN3ZDo6Z2V0Y3dkKCk7CisgICAgY2hk
aXIgJHJlcG9zaXRvcnlSb290UGF0aDsKKworICAgIG9wZW4gUEFUQ0gsICJ8ICRwYXRjaENvbW1h
bmQiIG9yIGRpZSAiQ291bGQgbm90IGNhbGwgXCIkcGF0Y2hDb21tYW5kXCIgZm9yIGZpbGUgXCIk
cGF0aFJlbGF0aXZlVG9Sb290XCI6ICQhIjsKKyAgICBwcmludCBQQVRDSCAkcGF0Y2g7CisgICAg
Y2xvc2UgUEFUQ0g7CisgICAgbXkgJGV4aXRTdGF0dXMgPSBleGl0U3RhdHVzKCQ/KTsKKworICAg
IGNoZGlyICRjd2Q7CisKKyAgICBpZiAoJGV4aXRTdGF0dXMgJiYgISRpc0ZvcmNpbmcpIHsKKyAg
ICAgICAgcHJpbnQgIkNhbGxpbmcgXCIkcGF0Y2hDb21tYW5kXCIgZm9yIGZpbGUgXCIkcGF0aFJl
bGF0aXZlVG9Sb290XCIgcmV0dXJuZWQgIiAuCisgICAgICAgICAgICAgICJzdGF0dXMgJGV4aXRT
dGF0dXMuICBQYXNzIC0tZm9yY2UgdG8gaWdub3JlIHBhdGNoIGZhaWx1cmVzLlxuIjsKKyAgICAg
ICAgZXhpdCAkZXhpdFN0YXR1czsKKyAgICB9CisKKyAgICByZXR1cm4gJGV4aXRTdGF0dXM7Cit9
CisKIHN1YiBnaXRDb25maWcoJCkKIHsKICAgICByZXR1cm4gdW5sZXNzICRpc0dpdDsKSW5kZXg6
IFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHNfdW5pdHRlc3QucGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlsc191bml0dGVzdC5wbAkocmV2aXNpb24gNTI2ODUp
CisrKyBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzX3VuaXR0ZXN0LnBsCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogIyEvdXNyL2Jpbi9wZXJsCiAjCi0jIENvcHlyaWdodCAoQykg
MjAwOSBDaHJpcyBKZXJkb25layAoY2hyaXMuamVyZG9uZWtAZ21haWwuY29tKQorIyBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNocmlzLmplcmRvbmVrQGdtYWlsLmNv
bSkKICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMwLDEwICszMCwyMyBAQAog
CiAjIFVuaXQgdGVzdHMgb2YgVkNTVXRpbHMucG0uCiAKLXVzZSBUZXN0OjpTaW1wbGUgdGVzdHMg
PT4gNzsKK3VzZSBUZXN0OjpTaW1wbGUgdGVzdHMgPT4gMjE7CiAKIHVzZSBWQ1NVdGlsczsKIAor
IyBDYWxsIGEgZnVuY3Rpb24gd2hpbGUgc3VwcHJlc3NpbmcgU1RERVJSLgorc3ViIGNhbGxTaWxl
bnRseSgkQCkgeworICAgIG15ICgkZnVuYywgQGFyZ3MpID0gQF87CisKKyAgICBvcGVuKE9MREVS
UiwgIj4mU1RERVJSIik7CisgICAgY2xvc2UoU1RERVJSKTsKKyAgICBteSBAcmV0dXJuVmFsdWUg
PSAmJGZ1bmMoQGFyZ3MpOworICAgIG9wZW4oU1RERVJSLCAiPiZPTERFUlIiKTsKKyAgICBjbG9z
ZShPTERFUlIpOyAjIEZJWE1FOiBJcyB0aGlzIG5lY2Vzc2FyeT8KKworICAgIHJldHVybiBAcmV0
dXJuVmFsdWU7Cit9CisKICMgZml4Q2hhbmdlTG9nUGF0Y2gKICMKICMgVGhlIHNvdXJjZSBDaGFu
Z2VMb2cgZm9yIHRoZXNlIHRlc3RzIGlzIHRoZSBmb2xsb3dpbmc6CkBAIC0yOTIsMyArMzA1LDEx
NyBAQCBFTkQKIAogb2soZml4Q2hhbmdlTG9nUGF0Y2goJGluKSBlcSAkb3V0LCAkdGl0bGUpOwog
CisjIFRlc3RzOiBnZW5lcmF0ZVJ1blBhdGNoQ29tbWFuZAorCisjIE5ldyB0ZXN0CiskdGl0bGUg
PSAiZ2VuZXJhdGVSdW5QYXRjaENvbW1hbmQ6IFVuZGVmaW5lZCBvcHRpb25hbCBhcmd1bWVudHMu
IjsKKworbXkgJGFyZ3NIYXNoUmVmOworbXkgKCRwYXRjaENvbW1hbmQsICRpc0ZvcmNpbmcpID0g
VkNTVXRpbHM6OmdlbmVyYXRlUnVuUGF0Y2hDb21tYW5kKCRhcmdzSGFzaFJlZik7CisKK29rKCRw
YXRjaENvbW1hbmQgZXEgInBhdGNoIC1wMCIsICR0aXRsZSk7CitvaygkaXNGb3JjaW5nID09IDAs
ICR0aXRsZSk7CisKKyMgTmV3IHRlc3QKKyR0aXRsZSA9ICJnZW5lcmF0ZVJ1blBhdGNoQ29tbWFu
ZDogVW5kZWZpbmVkIG9wdGlvbnMuIjsKKworbXkgJG9wdGlvbnM7CiskYXJnc0hhc2hSZWYgPSB7
b3B0aW9ucyA9PiAkb3B0aW9uc307CisoJHBhdGNoQ29tbWFuZCwgJGlzRm9yY2luZykgPSBWQ1NV
dGlsczo6Z2VuZXJhdGVSdW5QYXRjaENvbW1hbmQoJGFyZ3NIYXNoUmVmKTsKKworb2soJHBhdGNo
Q29tbWFuZCBlcSAicGF0Y2ggLXAwIiwgJHRpdGxlKTsKK29rKCRpc0ZvcmNpbmcgPT0gMCwgJHRp
dGxlKTsKKworIyBOZXcgdGVzdAorJHRpdGxlID0gImdlbmVyYXRlUnVuUGF0Y2hDb21tYW5kOiAt
LWZvcmNlIGFuZCBubyBcImVuc3VyZSBmb3JjZVwiLiI7CisKKyRhcmdzSGFzaFJlZiA9IHtvcHRp
b25zID0+IFsiLS1mb3JjZSJdfTsKKygkcGF0Y2hDb21tYW5kLCAkaXNGb3JjaW5nKSA9IFZDU1V0
aWxzOjpnZW5lcmF0ZVJ1blBhdGNoQ29tbWFuZCgkYXJnc0hhc2hSZWYpOworCitvaygkcGF0Y2hD
b21tYW5kIGVxICJwYXRjaCAtcDAgLS1mb3JjZSIsICR0aXRsZSk7CitvaygkaXNGb3JjaW5nID09
IDEsICR0aXRsZSk7CisKKyMgTmV3IHRlc3QKKyR0aXRsZSA9ICJnZW5lcmF0ZVJ1blBhdGNoQ29t
bWFuZDogbm8gLS1mb3JjZSBhbmQgXCJlbnN1cmUgZm9yY2VcIi4iOworCiskYXJnc0hhc2hSZWYg
PSB7ZW5zdXJlRm9yY2UgPT4gMX07CisoJHBhdGNoQ29tbWFuZCwgJGlzRm9yY2luZykgPSBWQ1NV
dGlsczo6Z2VuZXJhdGVSdW5QYXRjaENvbW1hbmQoJGFyZ3NIYXNoUmVmKTsKKworb2soJHBhdGNo
Q29tbWFuZCBlcSAicGF0Y2ggLXAwIC0tZm9yY2UiLCAkdGl0bGUpOworb2soJGlzRm9yY2luZyA9
PSAxLCAkdGl0bGUpOworCisjIE5ldyB0ZXN0CiskdGl0bGUgPSAiZ2VuZXJhdGVSdW5QYXRjaENv
bW1hbmQ6IFwic2hvdWxkIHJldmVyc2VcIi4iOworCiskYXJnc0hhc2hSZWYgPSB7c2hvdWxkUmV2
ZXJzZSA9PiAxfTsKKygkcGF0Y2hDb21tYW5kLCAkaXNGb3JjaW5nKSA9IFZDU1V0aWxzOjpnZW5l
cmF0ZVJ1blBhdGNoQ29tbWFuZCgkYXJnc0hhc2hSZWYpOworCitvaygkcGF0Y2hDb21tYW5kIGVx
ICJwYXRjaCAtcDAgLS1yZXZlcnNlIiwgJHRpdGxlKTsKKworIyBOZXcgdGVzdAorJHRpdGxlID0g
ImdlbmVyYXRlUnVuUGF0Y2hDb21tYW5kOiAtLWZ1eno9MywgLS1mb3JjZS4iOworCiskYXJnc0hh
c2hSZWYgPSB7b3B0aW9ucyA9PiBbIi0tZnV6ej0zIiwgIi0tZm9yY2UiXX07CisoJHBhdGNoQ29t
bWFuZCwgJGlzRm9yY2luZykgPSBWQ1NVdGlsczo6Z2VuZXJhdGVSdW5QYXRjaENvbW1hbmQoJGFy
Z3NIYXNoUmVmKTsKKworb2soJHBhdGNoQ29tbWFuZCBlcSAicGF0Y2ggLXAwIC0tZm9yY2UgLS1m
dXp6PTMiLCAkdGl0bGUpOworCisjIFRlc3RzOiBydW5QYXRjaENvbW1hbmQKKworIyBOZXcgdGVz
dAorJHRpdGxlID0gInJ1blBhdGNoQ29tbWFuZDogVW5zdWNjZXNzZnVsIHBhdGNoLCBmb3JjaW5n
LiI7CisKKyMgU2luY2UgJHBhdGNoIGhhcyBubyAiSW5kZXg6IiBwYXRoLCBwYXNzaW5nIHRoaXMg
dG8gcnVuUGF0Y2hDb21tYW5kCisjIHNob3VsZCBub3QgYWZmZWN0IGFueSBmaWxlcy4KK215ICRw
YXRjaCA9IDw8J0VORCc7CitHYXJiYWdlIHBhdGNoIGNvbnRlbnRzCitFTkQKKworIyBXZSBjYWxs
IHZpYSBjYWxsU2lsZW50bHkoKSB0byBhdm9pZCBvdXRwdXQgbGlrZSB0aGUgZm9sbG93aW5nIHRv
IFNUREVSUjoKKyMgcGF0Y2g6ICoqKiogT25seSBnYXJiYWdlIHdhcyBmb3VuZCBpbiB0aGUgcGF0
Y2ggaW5wdXQuCiskYXJnc0hhc2hSZWYgPSB7ZW5zdXJlRm9yY2UgPT4gMX07CiskZXhpdFN0YXR1
cyA9IGNhbGxTaWxlbnRseShcJnJ1blBhdGNoQ29tbWFuZCwgJHBhdGNoLCAiLiIsICJmaWxlX3Rv
X3BhdGNoLnR4dCIsICRhcmdzSGFzaFJlZik7CisKK29rKCRleGl0U3RhdHVzICE9IDAsICR0aXRs
ZSk7CisKKyMgTmV3IHRlc3QKKyR0aXRsZSA9ICJydW5QYXRjaENvbW1hbmQ6IE5ldyBmaWxlLCAt
LWRyeS1ydW4uIjsKKworIyBUaGlzIGZpbGUgc2hvdWxkIG5vdCBleGlzdCBhZnRlciB0aGUgdGVz
dHMsIGJ1dCB3ZSB0YWtlIGNhcmUgd2l0aCB0aGUKKyMgZmlsZSBuYW1lIGFuZCBjb250ZW50cyBq
dXN0IGluIGNhc2UuCitteSAkZmlsZVRvUGF0Y2ggPSAidGVtcF9PS19UT19FUkFTRV9fUkVBRE1F
X0ZPUl9NT1JFLnR4dCI7CiskcGF0Y2ggPSA8PEVORDsKK0luZGV4OiAkZmlsZVRvUGF0Y2gKKz09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KKy0tLSAkZmlsZVRvUGF0Y2gJKHJldmlzaW9uIDApCisrKysgJGZpbGVUb1BhdGNo
CShyZXZpc2lvbiAwKQorQEAgLTAsMCArMSw1IEBACisrVGhpcyBpcyBhIHRlc3QgZmlsZSBmb3Ig
V2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlsc191bml0dGVzdC5wbC4KKytUaGlzIGZpbGUgc2hv
dWxkIG5vdCBoYXZlIGdvdHRlbiBjcmVhdGVkIG9uIHlvdXIgc3lzdGVtLgorK0lmIGl0IGRpZCwg
c29tZSB1bml0IHRlc3RzIGRvZW4ndCBzZWVtIHRvIGJlIHdvcmtpbmcgcXVpdGUgcmlnaHQ6Cisr
SXQgd291bGQgYmUgZ3JlYXQgaWYgeW91IGNvdWxkIGZpbGUgYSBidWcgcmVwb3J0LiBUaGFua3Mh
CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCitFTkQKKworIyAtLWRyeS1ydW4gcHJldmVudHMgY3JlYXRpbmcgYW55
IGZpbGVzLgorIyAtLXNpbGVudCBzdXBwcmVzc2VzIHRoZSBzdWNjZXNzIG1lc3NhZ2UgdG8gU1RE
T1VULgorJGFyZ3NIYXNoUmVmID0ge29wdGlvbnMgPT4gWyItLWRyeS1ydW4iLCAiLS1zaWxlbnQi
XX07CiskZXhpdFN0YXR1cyA9IHJ1blBhdGNoQ29tbWFuZCgkcGF0Y2gsICIuIiwgJGZpbGVUb1Bh
dGNoLCAkYXJnc0hhc2hSZWYpOworCitvaygkZXhpdFN0YXR1cyA9PSAwLCAkdGl0bGUpOworCisj
IE5ldyB0ZXN0CiskdGl0bGUgPSAicnVuUGF0Y2hDb21tYW5kOiBOZXcgZmlsZTogXCIkZmlsZVRv
UGF0Y2hcIi4iOworCiskYXJnc0hhc2hSZWYgPSB7b3B0aW9ucyA9PiBbIi0tc2lsZW50Il19Owor
JGV4aXRTdGF0dXMgPSBydW5QYXRjaENvbW1hbmQoJHBhdGNoLCAiLiIsICRmaWxlVG9QYXRjaCwg
JGFyZ3NIYXNoUmVmKTsKKworb2soJGV4aXRTdGF0dXMgPT0gMCwgJHRpdGxlKTsKKworIyBOZXcg
dGVzdAorJHRpdGxlID0gInJ1blBhdGNoQ29tbWFuZDogUmV2ZXJzZSBuZXcgZmlsZSAoY2xlYW4g
dXAgcHJldmlvdXMpLiI7CisKKyRhcmdzSGFzaFJlZiA9IHtzaG91bGRSZXZlcnNlID0+IDEsCisg
ICAgICAgICAgICAgICAgb3B0aW9ucyA9PiBbIi0tc2lsZW50IiwgIi0tcmVtb3ZlLWVtcHR5LWZp
bGVzIl19OyAjIFRvIGNsZWFuIHVwLgorJGV4aXRTdGF0dXMgPSBydW5QYXRjaENvbW1hbmQoJHBh
dGNoLCAiLiIsICRmaWxlVG9QYXRjaCwgJGFyZ3NIYXNoUmVmKTsKK29rKCRleGl0U3RhdHVzID09
IDAsICR0aXRsZSk7CkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3N2bi1hcHBseQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3N2bi1hcHBseQkocmV2aXNpb24gNTI2ODUpCisr
KyBXZWJLaXRUb29scy9TY3JpcHRzL3N2bi1hcHBseQkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsy
LDcgQEAKIAogIyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDA5IENhbWVyb24gTWNDb3JtYWNr
IDxjYW1AbWNjLmlkLmF1PgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNo
cmlzLmplcmRvbmVrQGdtYWlsLmNvbSkKICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTE2LDEwICsxMTcsOSBAQCBteSAlcmVtb3ZlRGlyZWN0b3J5SWdub3JlTGlzdCA9ICgKICAgICAn
X3N2bicgPT4gMSwKICk7CiAKLW15ICRnbG9iYWxFeGl0Q29kZSA9IDA7CitteSAkZ2xvYmFsRXhp
dFN0YXR1cyA9IDA7CiAKLW15ICRwYXRoU2NyaXB0V2FzUnVuRnJvbSA9IEN3ZDo6Z2V0Y3dkKCk7
Ci1teSAkcGF0aEZvclJlcG9zaXRvcnlSb290ID0gZGV0ZXJtaW5lVkNTUm9vdCgpOworbXkgJHJl
cG9zaXRvcnlSb290UGF0aCA9IGRldGVybWluZVZDU1Jvb3QoKTsKIAogbXkgJWNoZWNrZWREaXJl
Y3RvcmllczsKIG15ICVjb3BpZWRGaWxlczsKQEAgLTE5Myw3ICsxOTMsNyBAQCBmb3IgJHBhdGNo
IChAcGF0Y2hlcykgewogCiByZW1vdmVEaXJlY3Rvcmllc0lmTmVlZGVkKCk7CiAKLWV4aXQgJGds
b2JhbEV4aXRDb2RlOworZXhpdCAkZ2xvYmFsRXhpdFN0YXR1czsKIAogc3ViIGFkZERpcmVjdG9y
aWVzSWZOZWVkZWQoJCkKIHsKQEAgLTIyNCwyNSArMjI0LDIyIEBAIHN1YiBhZGREaXJlY3Rvcmll
c0lmTmVlZGVkKCQpCiAgICAgfQogfQogCisjIEFyZ3M6CisjICAgJHBhdGNoOiBhIHBhdGNoIHN0
cmluZy4KKyMgICAkcGF0aFJlbGF0aXZlVG9Sb290OiB0aGUgcGF0aCBvZiB0aGUgZmlsZSB0byBi
ZSBwYXRjaGVkLCByZWxhdGl2ZSB0byB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgICByZXBv
c2l0b3J5IHJvb3QuIFRoaXMgc2hvdWxkIG5vcm1hbGx5IGJlIHRoZSBwYXRoCisjICAgICAgICAg
ICAgICAgICAgICAgICAgZm91bmQgaW4gdGhlIHBhdGNoJ3MgIkluZGV4OiIgbGluZS4KKyMgICAk
b3B0aW9uczogYSByZWZlcmVuY2UgdG8gYW4gYXJyYXkgb2Ygb3B0aW9ucyB0byBwYXNzIHRvIHRo
ZSBwYXRjaCBjb21tYW5kLgogc3ViIGFwcGx5UGF0Y2goJCQ7JCkKIHsKLSAgICBteSAoJHBhdGNo
LCAkZnVsbFBhdGgsICRvcHRpb25zKSA9IEBfOwotICAgIGNoZGlyICRwYXRoRm9yUmVwb3NpdG9y
eVJvb3Q7Ci0gICAgJG9wdGlvbnMgPSBbXSBpZiAoISAkb3B0aW9ucyk7Ci0gICAgcHVzaCBAeyRv
cHRpb25zfSwgIi0tZm9yY2UiIGlmICRmb3JjZTsKLSAgICBteSAkY29tbWFuZCA9ICJwYXRjaCAi
IC4gam9pbigiICIsICItcDAiLCBAeyRvcHRpb25zfSk7Ci0gICAgb3BlbiBQQVRDSCwgInwgJGNv
bW1hbmQiIG9yIGRpZSAiRmFpbGVkIHRvIHBhdGNoICRmdWxsUGF0aFxuIjsKLSAgICBwcmludCBQ
QVRDSCAkcGF0Y2g7Ci0gICAgY2xvc2UgUEFUQ0g7Ci0gICAgY2hkaXIgJHBhdGhTY3JpcHRXYXNS
dW5Gcm9tOwotCi0gICAgbXkgJGV4aXRDb2RlID0gJD8gPj4gODsKLSAgICBpZiAoJGV4aXRDb2Rl
KSB7Ci0gICAgICAgIGlmICghJGZvcmNlKSB7Ci0gICAgICAgICAgICBwcmludCAiJGNvbW1hbmQg
XCIkZnVsbFBhdGhcIiByZXR1cm5lZCAkZXhpdENvZGUuICBQYXNzIC0tZm9yY2UgdG8gaWdub3Jl
IHBhdGNoIGZhaWx1cmVzLlxuIjsKLSAgICAgICAgICAgIGV4aXQgJGV4aXRDb2RlOwotICAgICAg
ICB9Ci0gICAgICAgICRnbG9iYWxFeGl0Q29kZSA9ICRleGl0Q29kZTsKKyAgICBteSAoJHBhdGNo
LCAkcGF0aFJlbGF0aXZlVG9Sb290LCAkb3B0aW9ucykgPSBAXzsKKworICAgIG15ICRvcHRpb25h
bEFyZ3MgPSB7b3B0aW9ucyA9PiAkb3B0aW9ucywgZW5zdXJlRm9yY2UgPT4gJGZvcmNlfTsKKwor
ICAgIG15ICRleGl0U3RhdHVzID0gcnVuUGF0Y2hDb21tYW5kKCRwYXRjaCwgJHJlcG9zaXRvcnlS
b290UGF0aCwgJHBhdGhSZWxhdGl2ZVRvUm9vdCwgJG9wdGlvbmFsQXJncyk7CisKKyAgICBpZiAo
JGV4aXRTdGF0dXMpIHsKKyAgICAgICAgJGdsb2JhbEV4aXRTdGF0dXMgPSAkZXhpdFN0YXR1czsK
ICAgICB9CiB9CiAKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvc3ZuLXVuYXBwbHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9zdm4tdW5hcHBseQkocmV2aXNpb24gNTI2ODUp
CisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3N2bi11bmFwcGx5CSh3b3JraW5nIGNvcHkpCkBAIC0y
LDYgKzIsNyBAQAogCiAjIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMDkgQ2FtZXJvbiBNY0Nv
cm1hY2sgPGNhbUBtY2MuaWQuYXU+CisjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25l
ayAoY2hyaXMuamVyZG9uZWtAZ21haWwuY29tKQogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC03NywxMyArNzgsMjEgQEAgc3ViIHVuYXBwbHlQYXRjaCgkJDskKTsKIHN1YiB1bnNldENo
YW5nZUxvZ0RhdGUoJCQpOwogCiBteSAkc2hvd0hlbHAgPSAwOwotaWYgKCFHZXRPcHRpb25zKCJo
ZWxwISIgPT4gXCRzaG93SGVscCkgfHwgJHNob3dIZWxwKSB7Ci0gICAgcHJpbnQgU1RERVJSIGJh
c2VuYW1lKCQwKSAuICIgWy1ofC0taGVscF0gcGF0Y2gxIFtwYXRjaDIgLi4uXVxuIjsKK215ICRm
b3JjZSA9IDA7CisKK215ICRvcHRpb25QYXJzZVN1Y2Nlc3MgPSBHZXRPcHRpb25zKAorICAgICJo
ZWxwISIgPT4gXCRzaG93SGVscCwKKyAgICAiZm9yY2UhIiA9PiBcJGZvcmNlCispOworCitpZiAo
ISRvcHRpb25QYXJzZVN1Y2Nlc3MgfHwgJHNob3dIZWxwKSB7CisgICAgcHJpbnQgU1RERVJSIGJh
c2VuYW1lKCQwKSAuICIgWy1ofC0taGVscF0gWy0tZm9yY2VdIHBhdGNoMSBbcGF0Y2gyIC4uLl1c
biI7CiAgICAgZXhpdCAxOwogfQogCi1teSAkcGF0aFNjcmlwdFdhc1J1bkZyb20gPSBDd2Q6Omdl
dGN3ZCgpOwotbXkgJHBhdGhGb3JSZXBvc2l0b3J5Um9vdCA9IGRldGVybWluZVZDU1Jvb3QoKTsK
K215ICRnbG9iYWxFeGl0U3RhdHVzID0gMDsKKworbXkgJHJlcG9zaXRvcnlSb290UGF0aCA9IGRl
dGVybWluZVZDU1Jvb3QoKTsKIAogbXkgQGNvcGllZEZpbGVzOwogbXkgJWRpcmVjdG9yaWVzVG9D
aGVjazsKQEAgLTE0Miw3ICsxNTEsNyBAQCBpZiAoaXNTVk4oKSkgewogICAgIHJldmVydERpcmVj
dG9yaWVzKCk7CiB9CiAKLWV4aXQgMDsKK2V4aXQgJGdsb2JhbEV4aXRTdGF0dXM7CiAKIHN1YiBj
aGVja3N1bSgkKQogewpAQCAtMjI4LDcgKzIzNyw3IEBAIHN1YiBwYXRjaCgkKQogCiBzdWIgcmV2
ZXJ0RGlyZWN0b3JpZXMoKQogewotICAgIGNoZGlyICRwYXRoRm9yUmVwb3NpdG9yeVJvb3Q7Cisg
ICAgY2hkaXIgJHJlcG9zaXRvcnlSb290UGF0aDsKICAgICBteSAlY2hlY2tlZERpcmVjdG9yaWVz
OwogICAgIGZvcmVhY2ggbXkgJHBhdGggKHJldmVyc2Ugc29ydCBrZXlzICVkaXJlY3Rvcmllc1Rv
Q2hlY2spIHsKICAgICAgICAgbXkgQGRpcnMgPSBGaWxlOjpTcGVjLT5zcGxpdGRpcigkcGF0aCk7
CkBAIC0yNTgsMTYgKzI2NywyNCBAQCBzdWIgcmV2ZXJ0RGlyZWN0b3JpZXMoKQogICAgIH0KIH0K
IAorIyBBcmdzOgorIyAgICRwYXRjaDogYSBwYXRjaCBzdHJpbmcuCisjICAgJHBhdGhSZWxhdGl2
ZVRvUm9vdDogdGhlIHBhdGggb2YgdGhlIGZpbGUgdG8gYmUgcGF0Y2hlZCwgcmVsYXRpdmUgdG8g
dGhlCisjICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSByb290LiBUaGlzIHNob3Vs
ZCBub3JtYWxseSBiZSB0aGUgcGF0aAorIyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kIGlu
IHRoZSBwYXRjaCdzICJJbmRleDoiIGxpbmUuCisjICAgJG9wdGlvbnM6IGEgcmVmZXJlbmNlIHRv
IGFuIGFycmF5IG9mIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgcGF0Y2ggY29tbWFuZC4KKyMgICAg
ICAgICAgICAgRG8gbm90IGluY2x1ZGUgLS1yZXZlcnNlIGluIHRoaXMgYXJyYXkuCiBzdWIgdW5h
cHBseVBhdGNoKCQkOyQpCiB7Ci0gICAgbXkgKCRwYXRjaCwgJGZ1bGxQYXRoLCAkb3B0aW9ucykg
PSBAXzsKLSAgICBjaGRpciAkcGF0aEZvclJlcG9zaXRvcnlSb290OwotICAgICRvcHRpb25zID0g
W10gaWYgKCEgJG9wdGlvbnMpOwotICAgIG15ICRjb21tYW5kID0gInBhdGNoICIgLiBqb2luKCIg
IiwgIi1wMCIsICItUiIsIEB7JG9wdGlvbnN9KTsKLSAgICBvcGVuIFBBVENILCAifCAkY29tbWFu
ZCIgb3IgZGllICJGYWlsZWQgdG8gcGF0Y2ggJGZ1bGxQYXRoOiAkISI7Ci0gICAgcHJpbnQgUEFU
Q0ggJHBhdGNoOwotICAgIGNsb3NlIFBBVENIOwotICAgIGNoZGlyICRwYXRoU2NyaXB0V2FzUnVu
RnJvbTsKKyAgICBteSAoJHBhdGNoLCAkcGF0aFJlbGF0aXZlVG9Sb290LCAkb3B0aW9ucykgPSBA
XzsKKworICAgIG15ICRvcHRpb25hbEFyZ3MgPSB7b3B0aW9ucyA9PiAkb3B0aW9ucywgZW5zdXJl
Rm9yY2UgPT4gJGZvcmNlLCBzaG91bGRSZXZlcnNlID0+IDF9OworCisgICAgbXkgJGV4aXRTdGF0
dXMgPSBydW5QYXRjaENvbW1hbmQoJHBhdGNoLCAkcmVwb3NpdG9yeVJvb3RQYXRoLCAkcGF0aFJl
bGF0aXZlVG9Sb290LCAkb3B0aW9uYWxBcmdzKTsKKworICAgIGlmICgkZXhpdFN0YXR1cykgewor
ICAgICAgICAkZ2xvYmFsRXhpdFN0YXR1cyA9ICRleGl0U3RhdHVzOworICAgIH0KIH0KIAogc3Vi
IHVuc2V0Q2hhbmdlTG9nRGF0ZSgkJCkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
ZGlycy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0J
KHJldmlzaW9uIDUyNjg1KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBAIHVzZSBGaW5kQmluOwogdXNlIEZpbGU6OkJh
c2VuYW1lOwogdXNlIEZpbGU6OlNwZWM7CiB1c2UgUE9TSVg7CisKIHVzZSBWQ1NVdGlsczsKIAog
QkVHSU4gewpAQCAtNzAsNiArNzEsOSBAQCBteSAkdmNCdWlsZFBhdGg7CiBteSAkd2luZG93c1Rt
cFBhdGg7CiBteSAkd2luZG93c1NvdXJjZURpcjsKIAorIyBEZWZpbmVkIGluIFZDU1V0aWxzLgor
c3ViIGV4aXRTdGF0dXMoJCk7CisKIHN1YiBkZXRlcm1pbmVTb3VyY2VEaXIKIHsKICAgICByZXR1
cm4gaWYgJHNvdXJjZURpcjsKQEAgLTE2MDIsMTUgKzE2MDYsNiBAQCBzdWIgc2V0UGF0aEZvclJ1
bm5pbmdXZWJLaXRBcHAKICAgICAkZW52LT57UEFUSH0gPSBqb2luKCc6JywgcHJvZHVjdERpcigp
LCBkaXJuYW1lKGluc3RhbGxlZFNhZmFyaVBhdGgoKSksIGFwcGxlQXBwbGljYXRpb25TdXBwb3J0
UGF0aCgpLCAkZW52LT57UEFUSH0gfHwgIiIpOwogfQogCi1zdWIgZXhpdFN0YXR1cygkKQotewot
ICAgIG15ICgkcmV0dXJudmFsdWUpID0gQF87Ci0gICAgaWYgKCReTyBlcSAiTVNXaW4zMiIpIHsK
LSAgICAgICAgcmV0dXJuICRyZXR1cm52YWx1ZSA+PiA4OwotICAgIH0KLSAgICByZXR1cm4gV0VY
SVRTVEFUVVMoJHJldHVybnZhbHVlKTsKLX0KLQogc3ViIHJ1blNhZmFyaQogewogICAgIG15ICgk
ZGVidWdnZXIpID0gQF87Cg==
</data>
<flag name="review"
          id="27859"
          type_id="1"
          status="+"
          setter="ddkilzer"
    />
    <flag name="commit-queue"
          id="27860"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45756</attachid>
            <date>2010-01-03 11:01:50 -0800</date>
            <delta_ts>2010-01-03 11:50:41 -0800</delta_ts>
            <desc>Proposed patch 4</desc>
            <filename>patch-tools4-4.txt</filename>
            <type>text/plain</type>
            <size>18451</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUyNjg2KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTAtMDEtMDEgIENocmlzIEplcmRvbmVrICA8
Y2hyaXMuamVyZG9uZWtAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgc3ZuLWFwcGx5IGFuZCBzdm4tdW5hcHBseSB0
byB1c2UgYSBjb21tb24gInBhdGNoIgorICAgICAgICBjb21tYW5kIG1ldGhvZCwgYW5kIGFkZGVk
IHVuaXQgdGVzdHMgZm9yIHRoaXMgbmV3IG1ldGhvZC4KKworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMwOTgKKworICAgICAgICAqIFNjcmlwdHMvVkNT
VXRpbHMucG06CisgICAgICAgICAgLSBBZGRlZCBnZW5lcmF0ZVJ1blBhdGNoQ29tbWFuZCgpLgor
ICAgICAgICAgIC0gQWRkZWQgcnVuUGF0Y2hDb21tYW5kKCkuCisgICAgICAgICAgLSBBZGRlZCBl
eGl0U3RhdHVzKCkgZnJvbSB3ZWJraXRkaXJzLnBtIHRvIGFkZHJlc3MgRklYTUUuCisKKyAgICAg
ICAgKiBTY3JpcHRzL1ZDU1V0aWxzX3VuaXR0ZXN0LnBsOgorICAgICAgICAgIC0gQWRkZWQgMTAg
dW5pdCB0ZXN0cyBmb3IgZ2VuZXJhdGVSdW5QYXRjaENvbW1hbmQoKS4KKyAgICAgICAgICAtIEFk
ZGVkIDQgdW5pdCB0ZXN0cyBmb3IgcnVuUGF0Y2hDb21tYW5kKCkuCisgICAgICAgICAgLSBBZGRl
ZCBjYWxsU2lsZW50bHkoKSBtZXRob2QuCisKKyAgICAgICAgKiBTY3JpcHRzL3N2bi1hcHBseToK
KyAgICAgICAgICAtIFJlZmFjdG9yZWQgYXBwbHlQYXRjaCgpLgorICAgICAgICAgIC0gUmVtb3Zl
ZCAkcGF0aFNjcmlwdFdhc1J1bkZyb20gZ2xvYmFsIHZhcmlhYmxlLgorICAgICAgICAgIC0gQWRk
cmVzc2VkIGlzc3VlIHdoZXJlICItLWZvcmNlIiBvcHRpb24gd2FzIGdldHRpbmcgYWRkZWQgdHdp
Y2UuCisKKyAgICAgICAgKiBTY3JpcHRzL3N2bi11bmFwcGx5OgorICAgICAgICAgIC0gUmVmYWN0
b3JlZCBhcHBseVBhdGNoKCkuCisgICAgICAgICAgLSBSZW1vdmVkICRwYXRoU2NyaXB0V2FzUnVu
RnJvbSBnbG9iYWwgdmFyaWFibGUuCisgICAgICAgICAgLSBBZGRlZCBzdXBwb3J0IGZvciAtLWZv
cmNlIG9wdGlvbi4KKyAgICAgICAgICAtIEVuaGFuY2VkIHRvIHJldHVybiBtZWFuaW5nZnVsIGV4
aXQgc3RhdHVzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRkaXJzLnBtOgorICAgICAgICAg
IC0gTW92ZWQgZXhpdFN0YXR1cygpIGltcGxlbWVudGF0aW9uIHRvIFZDU1V0aWxzLnBtLgorCiAy
MDA5LTEyLTMxICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxz
LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHMucG0JKHJldmlz
aW9uIDUyNjg1KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbQkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKICMgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoQykgMjAwOSBDaHJp
cyBKZXJkb25layAoY2hyaXMuamVyZG9uZWtAZ21haWwuY29tKQorIyBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNocmlzLmplcmRvbmVrQGdtYWlsLmNvbSkKICMKICMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsNyBAQCB1c2Ugd2FybmluZ3M7CiB1
c2UgQ3dkIHF3KCk7ICAjICJxdygpIiBwcmV2ZW50cyB3YXJuaW5ncyBhYm91dCByZWRlZmluaW5n
IGdldGN3ZCgpIHdpdGggInVzZSBQT1NJWDsiCiB1c2UgRmlsZTo6QmFzZW5hbWU7CiB1c2UgRmls
ZTo6U3BlYzsKK3VzZSBQT1NJWDsKIAogQkVHSU4gewogICAgIHVzZSBFeHBvcnRlciAgICgpOwpA
QCAtNDgsNiArNDksNyBAQCBCRUdJTiB7CiAgICAgICAgICZkZWNvZGVHaXRCaW5hcnlQYXRjaAog
ICAgICAgICAmZGV0ZXJtaW5lU1ZOUm9vdAogICAgICAgICAmZGV0ZXJtaW5lVkNTUm9vdAorICAg
ICAgICAmZXhpdFN0YXR1cwogICAgICAgICAmZml4Q2hhbmdlTG9nUGF0Y2gKICAgICAgICAgJmdp
dEJyYW5jaAogICAgICAgICAmZ2l0ZGlmZjJzdm5kaWZmCkBAIC02MCw2ICs2Miw3IEBAIEJFR0lO
IHsKICAgICAgICAgJm1ha2VGaWxlUGF0aFJlbGF0aXZlCiAgICAgICAgICZub3JtYWxpemVQYXRo
CiAgICAgICAgICZwYXRoUmVsYXRpdmVUb1NWTlJlcG9zaXRvcnlSb290Rm9yUGF0aAorICAgICAg
ICAmcnVuUGF0Y2hDb21tYW5kCiAgICAgICAgICZzdm5SZXZpc2lvbkZvckRpcmVjdG9yeQogICAg
ICAgICAmc3ZuU3RhdHVzCiAgICAgKTsKQEAgLTc2LDYgKzc5LDIwIEBAIG15ICRpc0dpdEJyYW5j
aEJ1aWxkOwogbXkgJGlzU1ZOOwogbXkgJHN2blZlcnNpb247CiAKKyMgVGhpcyBtZXRob2QgaXMg
Zm9yIHBvcnRhYmlsaXR5LiBSZXR1cm4gdGhlIHN5c3RlbS1hcHByb3ByaWF0ZSBleGl0CisjIHN0
YXR1cyBvZiBhIGNoaWxkIHByb2Nlc3MuCisjCisjIEFyZ3M6IHBhc3MgdGhlIGNoaWxkIGVycm9y
IHN0YXR1cyByZXR1cm5lZCBieSB0aGUgbGFzdCBwaXBlIGNsb3NlLAorIyAgICAgICBmb3IgZXhh
bXBsZSAiJD8iLgorc3ViIGV4aXRTdGF0dXMoJCkKK3sKKyAgICBteSAoJHJldHVybnZhbHVlKSA9
IEBfOworICAgIGlmICgkXk8gZXEgIk1TV2luMzIiKSB7CisgICAgICAgIHJldHVybiAkcmV0dXJu
dmFsdWUgPj4gODsKKyAgICB9CisgICAgcmV0dXJuIFdFWElUU1RBVFVTKCRyZXR1cm52YWx1ZSk7
Cit9CisKIHN1YiBpc0dpdERpcmVjdG9yeSgkKQogewogICAgIG15ICgkZGlyKSA9IEBfOwpAQCAt
OTQsNyArMTExLDcgQEAgc3ViIGdpdEJyYW5jaCgpCiB7CiAgICAgdW5sZXNzIChkZWZpbmVkICRn
aXRCcmFuY2gpIHsKICAgICAgICAgY2hvbXAoJGdpdEJyYW5jaCA9IGBnaXQgc3ltYm9saWMtcmVm
IC1xIEhFQURgKTsKLSAgICAgICAgJGdpdEJyYW5jaCA9ICIiIGlmIG1haW46OmV4aXRTdGF0dXMo
JD8pOyAjIEZJWE1FOiBleGl0U3RhdHVzIGlzIGRlZmluZWQgaW4gd2Via2l0ZGlycy5wbQorICAg
ICAgICAkZ2l0QnJhbmNoID0gIiIgaWYgZXhpdFN0YXR1cygkPyk7CiAgICAgICAgICRnaXRCcmFu
Y2ggPX4gcyNecmVmcy9oZWFkcy8jIzsKICAgICAgICAgJGdpdEJyYW5jaCA9ICIiIGlmICRnaXRC
cmFuY2ggZXEgIm1hc3RlciI7CiAgICAgfQpAQCAtNDk2LDYgKzUxMywxMDkgQEAgc3ViIGZpeENo
YW5nZUxvZ1BhdGNoKCQpCiAgICAgcmV0dXJuIGpvaW4oJGxpbmVFbmRpbmcsIEBsaW5lcykgLiAi
XG4iOyAjIHBhdGNoKDEpIGV4cGVjdHMgYW4gZXh0cmEgdHJhaWxpbmcgbmV3bGluZS4KIH0KIAor
IyBUaGlzIGlzIGEgc3VwcG9ydGluZyBtZXRob2QgZm9yIHJ1blBhdGNoQ29tbWFuZC4KKyMKKyMg
QXJnOiB0aGUgb3B0aW9uYWwgJGFyZ3MgcGFyYW1ldGVyIHBhc3NlZCB0byBydW5QYXRjaENvbW1h
bmQgKGNhbiBiZSB1bmRlZmluZWQpLgorIworIyBSZXR1cm5zICgkcGF0Y2hDb21tYW5kLCAkaXNG
b3JjaW5nKS4KKyMKKyMgVGhpcyBzdWJyb3V0aW5lIGhhcyB1bml0IHRlc3RzIGluIFZDU1V0aWxz
X3VuaXR0ZXN0LnBsLgorc3ViIGdlbmVyYXRlUnVuUGF0Y2hDb21tYW5kKCQpCit7CisgICAgbXkg
KCRwYXNzZWRBcmdzSGFzaFJlZikgPSBAXzsKKworICAgIG15ICRhcmdzSGFzaFJlZiA9IHsgIyBE
ZWZhdWx0cworICAgICAgICBlbnN1cmVGb3JjZSA9PiAwLAorICAgICAgICBzaG91bGRSZXZlcnNl
ID0+IDAsCisgICAgICAgIG9wdGlvbnMgPT4gW10KKyAgICB9OworICAgIAorICAgICMgTWVyZ2Vz
IGhhc2ggcmVmZXJlbmNlcy4gSXQncyBva2F5IGhlcmUgaWYgcGFzc2VkIGhhc2ggcmVmZXJlbmNl
IGlzIHVuZGVmaW5lZC4KKyAgICBAeyRhcmdzSGFzaFJlZn17a2V5cyAleyRwYXNzZWRBcmdzSGFz
aFJlZn19ID0gdmFsdWVzICV7JHBhc3NlZEFyZ3NIYXNoUmVmfTsKKyAgICAKKyAgICBteSAkZW5z
dXJlRm9yY2UgPSAkYXJnc0hhc2hSZWYtPntlbnN1cmVGb3JjZX07CisgICAgbXkgJHNob3VsZFJl
dmVyc2UgPSAkYXJnc0hhc2hSZWYtPntzaG91bGRSZXZlcnNlfTsKKyAgICBteSAkb3B0aW9ucyA9
ICRhcmdzSGFzaFJlZi0+e29wdGlvbnN9OworCisgICAgaWYgKCEgJG9wdGlvbnMpIHsKKyAgICAg
ICAgJG9wdGlvbnMgPSBbXTsKKyAgICB9IGVsc2UgeworICAgICAgICAkb3B0aW9ucyA9IFtAeyRv
cHRpb25zfV07ICMgQ29weSB0byBhdm9pZCBzaWRlIGVmZmVjdHMuCisgICAgfQorCisgICAgbXkg
JGlzRm9yY2luZyA9IDA7CisgICAgaWYgKGdyZXAgL14tLWZvcmNlJC8sIEB7JG9wdGlvbnN9KSB7
CisgICAgICAgICRpc0ZvcmNpbmcgPSAxOworICAgIH0gZWxzaWYgKCRlbnN1cmVGb3JjZSkgewor
ICAgICAgICBwdXNoIEB7JG9wdGlvbnN9LCAiLS1mb3JjZSI7CisgICAgICAgICRpc0ZvcmNpbmcg
PSAxOworICAgIH0KKworICAgIGlmICgkc2hvdWxkUmV2ZXJzZSkgeyAjIE5vIGNoZWNrOiAtLXJl
dmVyc2Ugc2hvdWxkIG5ldmVyIGJlIHBhc3NlZCBleHBsaWNpdGx5LgorICAgICAgICBwdXNoIEB7
JG9wdGlvbnN9LCAiLS1yZXZlcnNlIjsKKyAgICB9CisKKyAgICBAeyRvcHRpb25zfSA9IHNvcnQo
QHskb3B0aW9uc30pOyAjIEZvciBlYXNpZXIgdGVzdGluZy4KKworICAgIG15ICRwYXRjaENvbW1h
bmQgPSBqb2luKCIgIiwgInBhdGNoIC1wMCIsIEB7JG9wdGlvbnN9KTsKKworICAgIHJldHVybiAo
JHBhdGNoQ29tbWFuZCwgJGlzRm9yY2luZyk7Cit9CisKKyMgQXBwbHkgdGhlIGdpdmVuIHBhdGNo
IHVzaW5nIHRoZSBwYXRjaCgxKSBjb21tYW5kLgorIworIyBPbiBzdWNjZXNzLCByZXR1cm4gdGhl
IHJlc3VsdGluZyBleGl0IHN0YXR1cy4gT3RoZXJ3aXNlLCBleGl0IHdpdGggdGhlCisjIGV4aXQg
c3RhdHVzLiBJZiAiLS1mb3JjZSIgaXMgcGFzc2VkIGFzIGFuIG9wdGlvbiwgaG93ZXZlciwgdGhl
biBuZXZlcgorIyBleGl0IGFuZCBhbHdheXMgcmV0dXJuIHRoZSBleGl0IHN0YXR1cy4KKyMKKyMg
QXJnczoKKyMgICAkcGF0Y2g6IGEgcGF0Y2ggc3RyaW5nLgorIyAgICRyZXBvc2l0b3J5Um9vdFBh
dGg6IGFuIGFic29sdXRlIHBhdGggdG8gdGhlIHJlcG9zaXRvcnkgcm9vdC4KKyMgICAkcGF0aFJl
bGF0aXZlVG9Sb290OiB0aGUgcGF0aCBvZiB0aGUgZmlsZSB0byBiZSBwYXRjaGVkLCByZWxhdGl2
ZSB0byB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5IHJvb3QuIFRoaXMg
c2hvdWxkIG5vcm1hbGx5IGJlIHRoZSBwYXRoCisjICAgICAgICAgICAgICAgICAgICAgICAgZm91
bmQgaW4gdGhlIHBhdGNoJ3MgIkluZGV4OiIgbGluZS4gSXQgaXMgcGFzc2VkCisjICAgICAgICAg
ICAgICAgICAgICAgICAgZXhwbGljaXRseSByYXRoZXIgdGhhbiByZXBhcnNlZCBmcm9tIHRoZSBw
YXRjaAorIyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBmb3Igb3B0aW1pemF0aW9uIHB1
cnBvc2VzLgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHVzZWQgb25seSBm
b3IgZXJyb3IgcmVwb3J0aW5nLiBUaGUKKyMgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaCBj
b21tYW5kIGdsZWFucyB0aGUgYWN0dWFsIGZpbGUgdG8gcGF0Y2gKKyMgICAgICAgICAgICAgICAg
ICAgICAgICBmcm9tIHRoZSBwYXRjaCBzdHJpbmcuCisjICAgJGFyZ3M6IGEgcmVmZXJlbmNlIHRv
IGEgaGFzaCBvZiBvcHRpb25hbCBhcmd1bWVudHMuIFRoZSBwb3NzaWJsZQorIyAgICAgICAgICBr
ZXlzIGFyZSAtLQorIyAgICAgICAgICAgIGVuc3VyZUZvcmNlOiB3aGV0aGVyIHRvIGVuc3VyZSAt
LWZvcmNlIGlzIHBhc3NlZCAoZGVmYXVsdHMgdG8gMCkuCisjICAgICAgICAgICAgc2hvdWxkUmV2
ZXJzZTogd2hldGhlciB0byBwYXNzIC0tcmV2ZXJzZSAoZGVmYXVsdHMgdG8gMCkuCisjICAgICAg
ICAgICAgb3B0aW9uczogYSByZWZlcmVuY2UgdG8gYW4gYXJyYXkgb2Ygb3B0aW9ucyB0byBwYXNz
IHRvIHRoZQorIyAgICAgICAgICAgICAgICAgICAgIHBhdGNoIGNvbW1hbmQuIFRoZSBzdWJyb3V0
aW5lIHBhc3NlcyB0aGUgLXAwIG9wdGlvbgorIyAgICAgICAgICAgICAgICAgICAgIG5vIG1hdHRl
ciB3aGF0LiBUaGlzIHNob3VsZCBub3QgaW5jbHVkZSAtLXJldmVyc2UuCisjCisjIFRoaXMgc3Vi
cm91dGluZSBoYXMgdW5pdCB0ZXN0cyBpbiBWQ1NVdGlsc191bml0dGVzdC5wbC4KK3N1YiBydW5Q
YXRjaENvbW1hbmQoJCQkOyQpCit7CisgICAgbXkgKCRwYXRjaCwgJHJlcG9zaXRvcnlSb290UGF0
aCwgJHBhdGhSZWxhdGl2ZVRvUm9vdCwgJGFyZ3MpID0gQF87CisKKyAgICBteSAoJHBhdGNoQ29t
bWFuZCwgJGlzRm9yY2luZykgPSBnZW5lcmF0ZVJ1blBhdGNoQ29tbWFuZCgkYXJncyk7CisKKyAg
ICAjIFRlbXBvcmFyaWx5IGNoYW5nZSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgc2luY2UgdGhlIHBh
dGggZm91bmQKKyAgICAjIGluIHRoZSBwYXRjaCdzICJJbmRleDoiIGxpbmUgaXMgcmVsYXRpdmUg
dG8gdGhlIHJlcG9zaXRvcnkgcm9vdAorICAgICMgKGkuZS4gdGhlIHNhbWUgYXMgJHBhdGhSZWxh
dGl2ZVRvUm9vdCkuCisgICAgbXkgJGN3ZCA9IEN3ZDo6Z2V0Y3dkKCk7CisgICAgY2hkaXIgJHJl
cG9zaXRvcnlSb290UGF0aDsKKworICAgIG9wZW4gUEFUQ0gsICJ8ICRwYXRjaENvbW1hbmQiIG9y
IGRpZSAiQ291bGQgbm90IGNhbGwgXCIkcGF0Y2hDb21tYW5kXCIgZm9yIGZpbGUgXCIkcGF0aFJl
bGF0aXZlVG9Sb290XCI6ICQhIjsKKyAgICBwcmludCBQQVRDSCAkcGF0Y2g7CisgICAgY2xvc2Ug
UEFUQ0g7CisgICAgbXkgJGV4aXRTdGF0dXMgPSBleGl0U3RhdHVzKCQ/KTsKKworICAgIGNoZGly
ICRjd2Q7CisKKyAgICBpZiAoJGV4aXRTdGF0dXMgJiYgISRpc0ZvcmNpbmcpIHsKKyAgICAgICAg
cHJpbnQgIkNhbGxpbmcgXCIkcGF0Y2hDb21tYW5kXCIgZm9yIGZpbGUgXCIkcGF0aFJlbGF0aXZl
VG9Sb290XCIgcmV0dXJuZWQgIiAuCisgICAgICAgICAgICAgICJzdGF0dXMgJGV4aXRTdGF0dXMu
ICBQYXNzIC0tZm9yY2UgdG8gaWdub3JlIHBhdGNoIGZhaWx1cmVzLlxuIjsKKyAgICAgICAgZXhp
dCAkZXhpdFN0YXR1czsKKyAgICB9CisKKyAgICByZXR1cm4gJGV4aXRTdGF0dXM7Cit9CisKIHN1
YiBnaXRDb25maWcoJCkKIHsKICAgICByZXR1cm4gdW5sZXNzICRpc0dpdDsKSW5kZXg6IFdlYktp
dFRvb2xzL1NjcmlwdHMvVkNTVXRpbHNfdW5pdHRlc3QucGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
VG9vbHMvU2NyaXB0cy9WQ1NVdGlsc191bml0dGVzdC5wbAkocmV2aXNpb24gNTI2ODUpCisrKyBX
ZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzX3VuaXR0ZXN0LnBsCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAogIyEvdXNyL2Jpbi9wZXJsCiAjCi0jIENvcHlyaWdodCAoQykgMjAwOSBD
aHJpcyBKZXJkb25layAoY2hyaXMuamVyZG9uZWtAZ21haWwuY29tKQorIyBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNocmlzLmplcmRvbmVrQGdtYWlsLmNvbSkKICMK
ICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMwLDEwICszMCwyMyBAQAogCiAjIFVu
aXQgdGVzdHMgb2YgVkNTVXRpbHMucG0uCiAKLXVzZSBUZXN0OjpTaW1wbGUgdGVzdHMgPT4gNzsK
K3VzZSBUZXN0OjpTaW1wbGUgdGVzdHMgPT4gMjE7CiAKIHVzZSBWQ1NVdGlsczsKIAorIyBDYWxs
IGEgZnVuY3Rpb24gd2hpbGUgc3VwcHJlc3NpbmcgU1RERVJSLgorc3ViIGNhbGxTaWxlbnRseSgk
QCkgeworICAgIG15ICgkZnVuYywgQGFyZ3MpID0gQF87CisKKyAgICBvcGVuKE9MREVSUiwgIj4m
U1RERVJSIik7CisgICAgY2xvc2UoU1RERVJSKTsKKyAgICBteSBAcmV0dXJuVmFsdWUgPSAmJGZ1
bmMoQGFyZ3MpOworICAgIG9wZW4oU1RERVJSLCAiPiZPTERFUlIiKTsKKyAgICBjbG9zZShPTERF
UlIpOyAjIEZJWE1FOiBJcyB0aGlzIG5lY2Vzc2FyeT8KKworICAgIHJldHVybiBAcmV0dXJuVmFs
dWU7Cit9CisKICMgZml4Q2hhbmdlTG9nUGF0Y2gKICMKICMgVGhlIHNvdXJjZSBDaGFuZ2VMb2cg
Zm9yIHRoZXNlIHRlc3RzIGlzIHRoZSBmb2xsb3dpbmc6CkBAIC0yOTIsMyArMzA1LDExNyBAQCBF
TkQKIAogb2soZml4Q2hhbmdlTG9nUGF0Y2goJGluKSBlcSAkb3V0LCAkdGl0bGUpOwogCisjIFRl
c3RzOiBnZW5lcmF0ZVJ1blBhdGNoQ29tbWFuZAorCisjIE5ldyB0ZXN0CiskdGl0bGUgPSAiZ2Vu
ZXJhdGVSdW5QYXRjaENvbW1hbmQ6IFVuZGVmaW5lZCBvcHRpb25hbCBhcmd1bWVudHMuIjsKKwor
bXkgJGFyZ3NIYXNoUmVmOworbXkgKCRwYXRjaENvbW1hbmQsICRpc0ZvcmNpbmcpID0gVkNTVXRp
bHM6OmdlbmVyYXRlUnVuUGF0Y2hDb21tYW5kKCRhcmdzSGFzaFJlZik7CisKK29rKCRwYXRjaENv
bW1hbmQgZXEgInBhdGNoIC1wMCIsICR0aXRsZSk7CitvaygkaXNGb3JjaW5nID09IDAsICR0aXRs
ZSk7CisKKyMgTmV3IHRlc3QKKyR0aXRsZSA9ICJnZW5lcmF0ZVJ1blBhdGNoQ29tbWFuZDogVW5k
ZWZpbmVkIG9wdGlvbnMuIjsKKworbXkgJG9wdGlvbnM7CiskYXJnc0hhc2hSZWYgPSB7b3B0aW9u
cyA9PiAkb3B0aW9uc307CisoJHBhdGNoQ29tbWFuZCwgJGlzRm9yY2luZykgPSBWQ1NVdGlsczo6
Z2VuZXJhdGVSdW5QYXRjaENvbW1hbmQoJGFyZ3NIYXNoUmVmKTsKKworb2soJHBhdGNoQ29tbWFu
ZCBlcSAicGF0Y2ggLXAwIiwgJHRpdGxlKTsKK29rKCRpc0ZvcmNpbmcgPT0gMCwgJHRpdGxlKTsK
KworIyBOZXcgdGVzdAorJHRpdGxlID0gImdlbmVyYXRlUnVuUGF0Y2hDb21tYW5kOiAtLWZvcmNl
IGFuZCBubyBcImVuc3VyZSBmb3JjZVwiLiI7CisKKyRhcmdzSGFzaFJlZiA9IHtvcHRpb25zID0+
IFsiLS1mb3JjZSJdfTsKKygkcGF0Y2hDb21tYW5kLCAkaXNGb3JjaW5nKSA9IFZDU1V0aWxzOjpn
ZW5lcmF0ZVJ1blBhdGNoQ29tbWFuZCgkYXJnc0hhc2hSZWYpOworCitvaygkcGF0Y2hDb21tYW5k
IGVxICJwYXRjaCAtcDAgLS1mb3JjZSIsICR0aXRsZSk7CitvaygkaXNGb3JjaW5nID09IDEsICR0
aXRsZSk7CisKKyMgTmV3IHRlc3QKKyR0aXRsZSA9ICJnZW5lcmF0ZVJ1blBhdGNoQ29tbWFuZDog
bm8gLS1mb3JjZSBhbmQgXCJlbnN1cmUgZm9yY2VcIi4iOworCiskYXJnc0hhc2hSZWYgPSB7ZW5z
dXJlRm9yY2UgPT4gMX07CisoJHBhdGNoQ29tbWFuZCwgJGlzRm9yY2luZykgPSBWQ1NVdGlsczo6
Z2VuZXJhdGVSdW5QYXRjaENvbW1hbmQoJGFyZ3NIYXNoUmVmKTsKKworb2soJHBhdGNoQ29tbWFu
ZCBlcSAicGF0Y2ggLXAwIC0tZm9yY2UiLCAkdGl0bGUpOworb2soJGlzRm9yY2luZyA9PSAxLCAk
dGl0bGUpOworCisjIE5ldyB0ZXN0CiskdGl0bGUgPSAiZ2VuZXJhdGVSdW5QYXRjaENvbW1hbmQ6
IFwic2hvdWxkIHJldmVyc2VcIi4iOworCiskYXJnc0hhc2hSZWYgPSB7c2hvdWxkUmV2ZXJzZSA9
PiAxfTsKKygkcGF0Y2hDb21tYW5kLCAkaXNGb3JjaW5nKSA9IFZDU1V0aWxzOjpnZW5lcmF0ZVJ1
blBhdGNoQ29tbWFuZCgkYXJnc0hhc2hSZWYpOworCitvaygkcGF0Y2hDb21tYW5kIGVxICJwYXRj
aCAtcDAgLS1yZXZlcnNlIiwgJHRpdGxlKTsKKworIyBOZXcgdGVzdAorJHRpdGxlID0gImdlbmVy
YXRlUnVuUGF0Y2hDb21tYW5kOiAtLWZ1eno9MywgLS1mb3JjZS4iOworCiskYXJnc0hhc2hSZWYg
PSB7b3B0aW9ucyA9PiBbIi0tZnV6ej0zIiwgIi0tZm9yY2UiXX07CisoJHBhdGNoQ29tbWFuZCwg
JGlzRm9yY2luZykgPSBWQ1NVdGlsczo6Z2VuZXJhdGVSdW5QYXRjaENvbW1hbmQoJGFyZ3NIYXNo
UmVmKTsKKworb2soJHBhdGNoQ29tbWFuZCBlcSAicGF0Y2ggLXAwIC0tZm9yY2UgLS1mdXp6PTMi
LCAkdGl0bGUpOworCisjIFRlc3RzOiBydW5QYXRjaENvbW1hbmQKKworIyBOZXcgdGVzdAorJHRp
dGxlID0gInJ1blBhdGNoQ29tbWFuZDogVW5zdWNjZXNzZnVsIHBhdGNoLCBmb3JjaW5nLiI7CisK
KyMgU2luY2UgJHBhdGNoIGhhcyBubyAiSW5kZXg6IiBwYXRoLCBwYXNzaW5nIHRoaXMgdG8gcnVu
UGF0Y2hDb21tYW5kCisjIHNob3VsZCBub3QgYWZmZWN0IGFueSBmaWxlcy4KK215ICRwYXRjaCA9
IDw8J0VORCc7CitHYXJiYWdlIHBhdGNoIGNvbnRlbnRzCitFTkQKKworIyBXZSBjYWxsIHZpYSBj
YWxsU2lsZW50bHkoKSB0byBhdm9pZCBvdXRwdXQgbGlrZSB0aGUgZm9sbG93aW5nIHRvIFNUREVS
UjoKKyMgcGF0Y2g6ICoqKiogT25seSBnYXJiYWdlIHdhcyBmb3VuZCBpbiB0aGUgcGF0Y2ggaW5w
dXQuCiskYXJnc0hhc2hSZWYgPSB7ZW5zdXJlRm9yY2UgPT4gMX07CiskZXhpdFN0YXR1cyA9IGNh
bGxTaWxlbnRseShcJnJ1blBhdGNoQ29tbWFuZCwgJHBhdGNoLCAiLiIsICJmaWxlX3RvX3BhdGNo
LnR4dCIsICRhcmdzSGFzaFJlZik7CisKK29rKCRleGl0U3RhdHVzICE9IDAsICR0aXRsZSk7CisK
KyMgTmV3IHRlc3QKKyR0aXRsZSA9ICJydW5QYXRjaENvbW1hbmQ6IE5ldyBmaWxlLCAtLWRyeS1y
dW4uIjsKKworIyBUaGlzIGZpbGUgc2hvdWxkIG5vdCBleGlzdCBhZnRlciB0aGUgdGVzdHMsIGJ1
dCB3ZSB0YWtlIGNhcmUgd2l0aCB0aGUKKyMgZmlsZSBuYW1lIGFuZCBjb250ZW50cyBqdXN0IGlu
IGNhc2UuCitteSAkZmlsZVRvUGF0Y2ggPSAidGVtcF9PS19UT19FUkFTRV9fUkVBRE1FX0ZPUl9N
T1JFLnR4dCI7CiskcGF0Y2ggPSA8PEVORDsKK0luZGV4OiAkZmlsZVRvUGF0Y2gKKz09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KKy0tLSAkZmlsZVRvUGF0Y2gJKHJldmlzaW9uIDApCisrKysgJGZpbGVUb1BhdGNoCShyZXZp
c2lvbiAwKQorQEAgLTAsMCArMSw1IEBACisrVGhpcyBpcyBhIHRlc3QgZmlsZSBmb3IgV2ViS2l0
VG9vbHMvU2NyaXB0cy9WQ1NVdGlsc191bml0dGVzdC5wbC4KKytUaGlzIGZpbGUgc2hvdWxkIG5v
dCBoYXZlIGdvdHRlbiBjcmVhdGVkIG9uIHlvdXIgc3lzdGVtLgorK0lmIGl0IGRpZCwgc29tZSB1
bml0IHRlc3RzIGRvbid0IHNlZW0gdG8gYmUgd29ya2luZyBxdWl0ZSByaWdodDoKKytJdCB3b3Vs
ZCBiZSBncmVhdCBpZiB5b3UgY291bGQgZmlsZSBhIGJ1ZyByZXBvcnQuIFRoYW5rcyEKKystLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KK0VORAorCisjIC0tZHJ5LXJ1biBwcmV2ZW50cyBjcmVhdGluZyBhbnkgZmlsZXMu
CisjIC0tc2lsZW50IHN1cHByZXNzZXMgdGhlIHN1Y2Nlc3MgbWVzc2FnZSB0byBTVERPVVQuCisk
YXJnc0hhc2hSZWYgPSB7b3B0aW9ucyA9PiBbIi0tZHJ5LXJ1biIsICItLXNpbGVudCJdfTsKKyRl
eGl0U3RhdHVzID0gcnVuUGF0Y2hDb21tYW5kKCRwYXRjaCwgIi4iLCAkZmlsZVRvUGF0Y2gsICRh
cmdzSGFzaFJlZik7CisKK29rKCRleGl0U3RhdHVzID09IDAsICR0aXRsZSk7CisKKyMgTmV3IHRl
c3QKKyR0aXRsZSA9ICJydW5QYXRjaENvbW1hbmQ6IE5ldyBmaWxlOiBcIiRmaWxlVG9QYXRjaFwi
LiI7CisKKyRhcmdzSGFzaFJlZiA9IHtvcHRpb25zID0+IFsiLS1zaWxlbnQiXX07CiskZXhpdFN0
YXR1cyA9IHJ1blBhdGNoQ29tbWFuZCgkcGF0Y2gsICIuIiwgJGZpbGVUb1BhdGNoLCAkYXJnc0hh
c2hSZWYpOworCitvaygkZXhpdFN0YXR1cyA9PSAwLCAkdGl0bGUpOworCisjIE5ldyB0ZXN0Cisk
dGl0bGUgPSAicnVuUGF0Y2hDb21tYW5kOiBSZXZlcnNlIG5ldyBmaWxlIChjbGVhbiB1cCBwcmV2
aW91cykuIjsKKworJGFyZ3NIYXNoUmVmID0ge3Nob3VsZFJldmVyc2UgPT4gMSwKKyAgICAgICAg
ICAgICAgICBvcHRpb25zID0+IFsiLS1zaWxlbnQiLCAiLS1yZW1vdmUtZW1wdHktZmlsZXMiXX07
ICMgVG8gY2xlYW4gdXAuCiskZXhpdFN0YXR1cyA9IHJ1blBhdGNoQ29tbWFuZCgkcGF0Y2gsICIu
IiwgJGZpbGVUb1BhdGNoLCAkYXJnc0hhc2hSZWYpOworb2soJGV4aXRTdGF0dXMgPT0gMCwgJHRp
dGxlKTsKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvc3ZuLWFwcGx5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL1NjcmlwdHMvc3ZuLWFwcGx5CShyZXZpc2lvbiA1MjY4NSkKKysrIFdlYktp
dFRvb2xzL1NjcmlwdHMvc3ZuLWFwcGx5CSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAog
CiAjIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMDkgQ2FtZXJvbiBNY0Nvcm1hY2sgPGNhbUBt
Y2MuaWQuYXU+CisjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2hyaXMuamVy
ZG9uZWtAZ21haWwuY29tKQogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTYsMTAg
KzExNyw5IEBAIG15ICVyZW1vdmVEaXJlY3RvcnlJZ25vcmVMaXN0ID0gKAogICAgICdfc3ZuJyA9
PiAxLAogKTsKIAotbXkgJGdsb2JhbEV4aXRDb2RlID0gMDsKK215ICRnbG9iYWxFeGl0U3RhdHVz
ID0gMDsKIAotbXkgJHBhdGhTY3JpcHRXYXNSdW5Gcm9tID0gQ3dkOjpnZXRjd2QoKTsKLW15ICRw
YXRoRm9yUmVwb3NpdG9yeVJvb3QgPSBkZXRlcm1pbmVWQ1NSb290KCk7CitteSAkcmVwb3NpdG9y
eVJvb3RQYXRoID0gZGV0ZXJtaW5lVkNTUm9vdCgpOwogCiBteSAlY2hlY2tlZERpcmVjdG9yaWVz
OwogbXkgJWNvcGllZEZpbGVzOwpAQCAtMTkzLDcgKzE5Myw3IEBAIGZvciAkcGF0Y2ggKEBwYXRj
aGVzKSB7CiAKIHJlbW92ZURpcmVjdG9yaWVzSWZOZWVkZWQoKTsKIAotZXhpdCAkZ2xvYmFsRXhp
dENvZGU7CitleGl0ICRnbG9iYWxFeGl0U3RhdHVzOwogCiBzdWIgYWRkRGlyZWN0b3JpZXNJZk5l
ZWRlZCgkKQogewpAQCAtMjI0LDI1ICsyMjQsMjIgQEAgc3ViIGFkZERpcmVjdG9yaWVzSWZOZWVk
ZWQoJCkKICAgICB9CiB9CiAKKyMgQXJnczoKKyMgICAkcGF0Y2g6IGEgcGF0Y2ggc3RyaW5nLgor
IyAgICRwYXRoUmVsYXRpdmVUb1Jvb3Q6IHRoZSBwYXRoIG9mIHRoZSBmaWxlIHRvIGJlIHBhdGNo
ZWQsIHJlbGF0aXZlIHRvIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkg
cm9vdC4gVGhpcyBzaG91bGQgbm9ybWFsbHkgYmUgdGhlIHBhdGgKKyMgICAgICAgICAgICAgICAg
ICAgICAgICBmb3VuZCBpbiB0aGUgcGF0Y2gncyAiSW5kZXg6IiBsaW5lLgorIyAgICRvcHRpb25z
OiBhIHJlZmVyZW5jZSB0byBhbiBhcnJheSBvZiBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIHBhdGNo
IGNvbW1hbmQuCiBzdWIgYXBwbHlQYXRjaCgkJDskKQogewotICAgIG15ICgkcGF0Y2gsICRmdWxs
UGF0aCwgJG9wdGlvbnMpID0gQF87Ci0gICAgY2hkaXIgJHBhdGhGb3JSZXBvc2l0b3J5Um9vdDsK
LSAgICAkb3B0aW9ucyA9IFtdIGlmICghICRvcHRpb25zKTsKLSAgICBwdXNoIEB7JG9wdGlvbnN9
LCAiLS1mb3JjZSIgaWYgJGZvcmNlOwotICAgIG15ICRjb21tYW5kID0gInBhdGNoICIgLiBqb2lu
KCIgIiwgIi1wMCIsIEB7JG9wdGlvbnN9KTsKLSAgICBvcGVuIFBBVENILCAifCAkY29tbWFuZCIg
b3IgZGllICJGYWlsZWQgdG8gcGF0Y2ggJGZ1bGxQYXRoXG4iOwotICAgIHByaW50IFBBVENIICRw
YXRjaDsKLSAgICBjbG9zZSBQQVRDSDsKLSAgICBjaGRpciAkcGF0aFNjcmlwdFdhc1J1bkZyb207
Ci0KLSAgICBteSAkZXhpdENvZGUgPSAkPyA+PiA4OwotICAgIGlmICgkZXhpdENvZGUpIHsKLSAg
ICAgICAgaWYgKCEkZm9yY2UpIHsKLSAgICAgICAgICAgIHByaW50ICIkY29tbWFuZCBcIiRmdWxs
UGF0aFwiIHJldHVybmVkICRleGl0Q29kZS4gIFBhc3MgLS1mb3JjZSB0byBpZ25vcmUgcGF0Y2gg
ZmFpbHVyZXMuXG4iOwotICAgICAgICAgICAgZXhpdCAkZXhpdENvZGU7Ci0gICAgICAgIH0KLSAg
ICAgICAgJGdsb2JhbEV4aXRDb2RlID0gJGV4aXRDb2RlOworICAgIG15ICgkcGF0Y2gsICRwYXRo
UmVsYXRpdmVUb1Jvb3QsICRvcHRpb25zKSA9IEBfOworCisgICAgbXkgJG9wdGlvbmFsQXJncyA9
IHtvcHRpb25zID0+ICRvcHRpb25zLCBlbnN1cmVGb3JjZSA9PiAkZm9yY2V9OworCisgICAgbXkg
JGV4aXRTdGF0dXMgPSBydW5QYXRjaENvbW1hbmQoJHBhdGNoLCAkcmVwb3NpdG9yeVJvb3RQYXRo
LCAkcGF0aFJlbGF0aXZlVG9Sb290LCAkb3B0aW9uYWxBcmdzKTsKKworICAgIGlmICgkZXhpdFN0
YXR1cykgeworICAgICAgICAkZ2xvYmFsRXhpdFN0YXR1cyA9ICRleGl0U3RhdHVzOwogICAgIH0K
IH0KIApJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9zdm4tdW5hcHBseQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9TY3JpcHRzL3N2bi11bmFwcGx5CShyZXZpc2lvbiA1MjY4NSkKKysrIFdl
YktpdFRvb2xzL1NjcmlwdHMvc3ZuLXVuYXBwbHkJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3
IEBACiAKICMgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoQykgMjAwOSBDYW1lcm9uIE1jQ29ybWFjayA8
Y2FtQG1jYy5pZC5hdT4KKyMgQ29weXJpZ2h0IChDKSAyMDEwIENocmlzIEplcmRvbmVrIChjaHJp
cy5qZXJkb25la0BnbWFpbC5jb20pCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc2
LDE0ICs3NywyMiBAQCBzdWIgcmV2ZXJ0RGlyZWN0b3JpZXMoKTsKIHN1YiB1bmFwcGx5UGF0Y2go
JCQ7JCk7CiBzdWIgdW5zZXRDaGFuZ2VMb2dEYXRlKCQkKTsKIAorbXkgJGZvcmNlID0gMDsKIG15
ICRzaG93SGVscCA9IDA7Ci1pZiAoIUdldE9wdGlvbnMoImhlbHAhIiA9PiBcJHNob3dIZWxwKSB8
fCAkc2hvd0hlbHApIHsKLSAgICBwcmludCBTVERFUlIgYmFzZW5hbWUoJDApIC4gIiBbLWh8LS1o
ZWxwXSBwYXRjaDEgW3BhdGNoMiAuLi5dXG4iOworCitteSAkb3B0aW9uUGFyc2VTdWNjZXNzID0g
R2V0T3B0aW9ucygKKyAgICAiZm9yY2UhIiA9PiBcJGZvcmNlLAorICAgICJoZWxwISIgPT4gXCRz
aG93SGVscAorKTsKKworaWYgKCEkb3B0aW9uUGFyc2VTdWNjZXNzIHx8ICRzaG93SGVscCkgewor
ICAgIHByaW50IFNUREVSUiBiYXNlbmFtZSgkMCkgLiAiIFstaHwtLWhlbHBdIFstLWZvcmNlXSBw
YXRjaDEgW3BhdGNoMiAuLi5dXG4iOwogICAgIGV4aXQgMTsKIH0KIAotbXkgJHBhdGhTY3JpcHRX
YXNSdW5Gcm9tID0gQ3dkOjpnZXRjd2QoKTsKLW15ICRwYXRoRm9yUmVwb3NpdG9yeVJvb3QgPSBk
ZXRlcm1pbmVWQ1NSb290KCk7CitteSAkZ2xvYmFsRXhpdFN0YXR1cyA9IDA7CisKK215ICRyZXBv
c2l0b3J5Um9vdFBhdGggPSBkZXRlcm1pbmVWQ1NSb290KCk7CiAKIG15IEBjb3BpZWRGaWxlczsK
IG15ICVkaXJlY3Rvcmllc1RvQ2hlY2s7CkBAIC0xNDIsNyArMTUxLDcgQEAgaWYgKGlzU1ZOKCkp
IHsKICAgICByZXZlcnREaXJlY3RvcmllcygpOwogfQogCi1leGl0IDA7CitleGl0ICRnbG9iYWxF
eGl0U3RhdHVzOwogCiBzdWIgY2hlY2tzdW0oJCkKIHsKQEAgLTIyOCw3ICsyMzcsNyBAQCBzdWIg
cGF0Y2goJCkKIAogc3ViIHJldmVydERpcmVjdG9yaWVzKCkKIHsKLSAgICBjaGRpciAkcGF0aEZv
clJlcG9zaXRvcnlSb290OworICAgIGNoZGlyICRyZXBvc2l0b3J5Um9vdFBhdGg7CiAgICAgbXkg
JWNoZWNrZWREaXJlY3RvcmllczsKICAgICBmb3JlYWNoIG15ICRwYXRoIChyZXZlcnNlIHNvcnQg
a2V5cyAlZGlyZWN0b3JpZXNUb0NoZWNrKSB7CiAgICAgICAgIG15IEBkaXJzID0gRmlsZTo6U3Bl
Yy0+c3BsaXRkaXIoJHBhdGgpOwpAQCAtMjU4LDE2ICsyNjcsMjQgQEAgc3ViIHJldmVydERpcmVj
dG9yaWVzKCkKICAgICB9CiB9CiAKKyMgQXJnczoKKyMgICAkcGF0Y2g6IGEgcGF0Y2ggc3RyaW5n
LgorIyAgICRwYXRoUmVsYXRpdmVUb1Jvb3Q6IHRoZSBwYXRoIG9mIHRoZSBmaWxlIHRvIGJlIHBh
dGNoZWQsIHJlbGF0aXZlIHRvIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRv
cnkgcm9vdC4gVGhpcyBzaG91bGQgbm9ybWFsbHkgYmUgdGhlIHBhdGgKKyMgICAgICAgICAgICAg
ICAgICAgICAgICBmb3VuZCBpbiB0aGUgcGF0Y2gncyAiSW5kZXg6IiBsaW5lLgorIyAgICRvcHRp
b25zOiBhIHJlZmVyZW5jZSB0byBhbiBhcnJheSBvZiBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIHBh
dGNoIGNvbW1hbmQuCisjICAgICAgICAgICAgIERvIG5vdCBpbmNsdWRlIC0tcmV2ZXJzZSBpbiB0
aGlzIGFycmF5Lgogc3ViIHVuYXBwbHlQYXRjaCgkJDskKQogewotICAgIG15ICgkcGF0Y2gsICRm
dWxsUGF0aCwgJG9wdGlvbnMpID0gQF87Ci0gICAgY2hkaXIgJHBhdGhGb3JSZXBvc2l0b3J5Um9v
dDsKLSAgICAkb3B0aW9ucyA9IFtdIGlmICghICRvcHRpb25zKTsKLSAgICBteSAkY29tbWFuZCA9
ICJwYXRjaCAiIC4gam9pbigiICIsICItcDAiLCAiLVIiLCBAeyRvcHRpb25zfSk7Ci0gICAgb3Bl
biBQQVRDSCwgInwgJGNvbW1hbmQiIG9yIGRpZSAiRmFpbGVkIHRvIHBhdGNoICRmdWxsUGF0aDog
JCEiOwotICAgIHByaW50IFBBVENIICRwYXRjaDsKLSAgICBjbG9zZSBQQVRDSDsKLSAgICBjaGRp
ciAkcGF0aFNjcmlwdFdhc1J1bkZyb207CisgICAgbXkgKCRwYXRjaCwgJHBhdGhSZWxhdGl2ZVRv
Um9vdCwgJG9wdGlvbnMpID0gQF87CisKKyAgICBteSAkb3B0aW9uYWxBcmdzID0ge29wdGlvbnMg
PT4gJG9wdGlvbnMsIGVuc3VyZUZvcmNlID0+ICRmb3JjZSwgc2hvdWxkUmV2ZXJzZSA9PiAxfTsK
KworICAgIG15ICRleGl0U3RhdHVzID0gcnVuUGF0Y2hDb21tYW5kKCRwYXRjaCwgJHJlcG9zaXRv
cnlSb290UGF0aCwgJHBhdGhSZWxhdGl2ZVRvUm9vdCwgJG9wdGlvbmFsQXJncyk7CisKKyAgICBp
ZiAoJGV4aXRTdGF0dXMpIHsKKyAgICAgICAgJGdsb2JhbEV4aXRTdGF0dXMgPSAkZXhpdFN0YXR1
czsKKyAgICB9CiB9CiAKIHN1YiB1bnNldENoYW5nZUxvZ0RhdGUoJCQpCkluZGV4OiBXZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRkaXJzLnBtCShyZXZpc2lvbiA1MjY4NSkKKysrIFdlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0ZGlycy5wbQkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsOSBAQCBteSAkdmNC
dWlsZFBhdGg7CiBteSAkd2luZG93c1RtcFBhdGg7CiBteSAkd2luZG93c1NvdXJjZURpcjsKIAor
IyBEZWZpbmVkIGluIFZDU1V0aWxzLgorc3ViIGV4aXRTdGF0dXMoJCk7CisKIHN1YiBkZXRlcm1p
bmVTb3VyY2VEaXIKIHsKICAgICByZXR1cm4gaWYgJHNvdXJjZURpcjsKQEAgLTE2MDIsMTUgKzE2
MDUsNiBAQCBzdWIgc2V0UGF0aEZvclJ1bm5pbmdXZWJLaXRBcHAKICAgICAkZW52LT57UEFUSH0g
PSBqb2luKCc6JywgcHJvZHVjdERpcigpLCBkaXJuYW1lKGluc3RhbGxlZFNhZmFyaVBhdGgoKSks
IGFwcGxlQXBwbGljYXRpb25TdXBwb3J0UGF0aCgpLCAkZW52LT57UEFUSH0gfHwgIiIpOwogfQog
Ci1zdWIgZXhpdFN0YXR1cygkKQotewotICAgIG15ICgkcmV0dXJudmFsdWUpID0gQF87Ci0gICAg
aWYgKCReTyBlcSAiTVNXaW4zMiIpIHsKLSAgICAgICAgcmV0dXJuICRyZXR1cm52YWx1ZSA+PiA4
OwotICAgIH0KLSAgICByZXR1cm4gV0VYSVRTVEFUVVMoJHJldHVybnZhbHVlKTsKLX0KLQogc3Vi
IHJ1blNhZmFyaQogewogICAgIG15ICgkZGVidWdnZXIpID0gQF87Cg==
</data>
<flag name="review"
          id="27870"
          type_id="1"
          status="+"
          setter="ddkilzer"
    />
    <flag name="commit-queue"
          id="27871"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
      

    </bug>

</bugzilla>