<?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>33447</bug_id>
          
          <creation_ts>2010-01-10 01:28:58 -0800</creation_ts>
          <short_desc>Create a function for svn-apply and svn-unapply to parse diff headers</short_desc>
          <delta_ts>2010-01-11 07:57:43 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Jerdonek">cjerdonek</reporter>
          <assigned_to name="Chris Jerdonek">cjerdonek</assigned_to>
          <cc>abarth</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>179126</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-10 01:28:58 -0800</bug_when>
    <thetext>Create a unit-tested parseDiffHeader() subroutine that can eventually replace this code in svn-apply (and similar code in svn-unapply):

    if ($indexPath) {
        # Fix paths on diff, ---, and +++ lines to match preceding Index: line.
        s/\S+$/$indexPath/ if /^diff/;
        s/^--- \S+/--- $indexPath/;
        if (/^--- .+\(from (\S+):(\d+)\)$/) {
            $copiedFromPath = $1;
            $copiedFiles{$indexPath} = $copiedFromPath;
            $versions{$copiedFromPath} = $2 if ($2 != 0);
        }
        elsif (/^--- .+\(revision (\d+)\)$/) {
            $versions{$indexPath} = $1 if ($1 != 0);
        }
        if (s/^\+\+\+ \S+/+++ $indexPath/) {
            $indexPath = &quot;&quot;;
        }
    }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179128</commentid>
    <comment_count>1</comment_count>
      <attachid>46231</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-10 02:02:37 -0800</bug_when>
    <thetext>Created attachment 46231
Proposed patch

cq- since parseDiffHeader.pl probably needs the allow-tabs property.

I have a couple questions regarding this patch that maybe you can help me with:

(1) Is the last line of this code ever needed in svn-apply (I have included similar code again in my patch):

&gt; if ($indexPath) {
&gt;     # Fix paths on diff, ---, and +++ lines to match preceding Index: line.
&gt;     s/\S+$/$indexPath/ if /^diff/;

Note that $_ is Git-formatted by the time this line executes.

(2) In svn-apply, we extract the &quot;version&quot; of a diff by matching with--

&gt; /^--- .+\(revision (\d+)\)$/

For consistency, is there any reason not to also record this version number in the case of a file move (in which case there is also a &quot;from&quot; clause after the &quot;revision&quot; portion), e.g.--

&gt; --- WebKitTools/Scripts/webkitpy/move_test.py (revision 53048) (from WebKitTools/Scripts/webkitpy/initial.py:53048)

(3) Finally, in the case of a file move, can the &quot;revision&quot; number ever be different from the revision number that appears in the &quot;from&quot; clause portion?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179129</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-10 02:03:27 -0800</bug_when>
    <thetext>Attachment 46231 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:99:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:100:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:108:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:109:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:126:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:127:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:135:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:136:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:153:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:154:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:162:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:163:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:180:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:181:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:189:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:190:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 16</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179130</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-10 02:21:31 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; (1) Is the last line of this code ever needed in svn-apply (I have included
&gt; similar code again in my patch):
&gt; 
&gt; &gt; if ($indexPath) {
&gt; &gt;     # Fix paths on diff, ---, and +++ lines to match preceding Index: line.
&gt; &gt;     s/\S+$/$indexPath/ if /^diff/;
&gt; 
&gt; Note that $_ is Git-formatted by the time this line executes.

I meant to say SVN-formatted.

A variation of this question is -- what ways are there to generate a diff that has a line beginning with &quot;diff&quot; in the header block (after the leading &quot;Index:&quot; line and before the ending &quot;+++&quot; line)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179149</commentid>
    <comment_count>4</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-01-10 10:32:03 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #1)
&gt; &gt; (1) Is the last line of this code ever needed in svn-apply (I have included
&gt; &gt; similar code again in my patch):
&gt; &gt; 
&gt; &gt; &gt; if ($indexPath) {
&gt; &gt; &gt;     # Fix paths on diff, ---, and +++ lines to match preceding Index: line.
&gt; &gt; &gt;     s/\S+$/$indexPath/ if /^diff/;
&gt; &gt; 
&gt; &gt; Note that $_ is Git-formatted by the time this line executes.
&gt; 
&gt; I meant to say SVN-formatted.
&gt; 
&gt; A variation of this question is -- what ways are there to generate a diff that
&gt; has a line beginning with &quot;diff&quot; in the header block (after the leading
&gt; &quot;Index:&quot; line and before the ending &quot;+++&quot; line)?

This code has been in svn-apply since its first revision (see svn/git annotate).  I don&apos;t think svn patches will ever have a &quot;diff&quot; line, nor will git patches ever have an &quot;Index&quot; line (unless they&apos;ve been converted).  this was probably to cover all bases at the time.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179150</commentid>
    <comment_count>5</comment_count>
      <attachid>46237</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-10 10:33:02 -0800</bug_when>
    <thetext>Created attachment 46237
Proposed patch 2

Minor clean-ups: some renames, code comments, etc.

Also added two more diff tests: &quot;SVN: new file&quot; and &quot;Git: unrecognized lines&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179151</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-10 10:33:52 -0800</bug_when>
    <thetext>Attachment 46237 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:99:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:100:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:108:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:109:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:126:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:127:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:135:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:136:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:153:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:154:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:162:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:163:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:180:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:181:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:189:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:190:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:207:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:208:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:216:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:217:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 20</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179154</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-10 10:41:32 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; This code has been in svn-apply since its first revision (see svn/git
&gt; annotate).  I don&apos;t think svn patches will ever have a &quot;diff&quot; line, nor will
&gt; git patches ever have an &quot;Index&quot; line (unless they&apos;ve been converted).  this
&gt; was probably to cover all bases at the time.  :)

Thanks. I will remove that line the next time I update the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179157</commentid>
    <comment_count>8</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-01-10 11:26:09 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; (2) In svn-apply, we extract the &quot;version&quot; of a diff by matching with--
&gt; 
&gt; &gt; /^--- .+\(revision (\d+)\)$/
&gt; 
&gt; For consistency, is there any reason not to also record this version number in
&gt; the case of a file move (in which case there is also a &quot;from&quot; clause after the
&gt; &quot;revision&quot; portion), e.g.--
&gt; 
&gt; &gt; --- WebKitTools/Scripts/webkitpy/move_test.py (revision 53048) (from WebKitTools/Scripts/webkitpy/initial.py:53048)

Bug 12023 introduced this code in r18513.  If I remember correctly, we record the revision number in svn-create-patch so that we can repeat the operation in svn-apply if done at a later time.  I&apos;m not quite sure what you&apos;re proposing to do differently, though.  Can you give a more explicit example or ask it a different way (like #1 :)?

&lt;http://trac.webkit.org/changeset/18513&gt;

&gt; (3) Finally, in the case of a file move, can the &quot;revision&quot; number ever be
&gt; different from the revision number that appears in the &quot;from&quot; clause portion?

I think the revision numbers could be different, but you&apos;d want to test using an actual Subversion repository by moving some files around.  Subversion lets you grab revisions of files that aren&apos;t necessarily the local, up-to-date revisions and commit them to trunk, so I don&apos;t think you can say that the revision numbers always match.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179160</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-10 12:32:25 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #1)
&gt; &gt; (2) In svn-apply, we extract the &quot;version&quot; of a diff by matching with--
&gt; &gt; 
&gt; &gt; &gt; /^--- .+\(revision (\d+)\)$/
&gt; &gt; 
&gt; &gt; For consistency, is there any reason not to also record this version number in
&gt; &gt; the case of a file move (in which case there is also a &quot;from&quot; clause after the
&gt; &gt; &quot;revision&quot; portion), e.g.--
&gt; &gt; 
&gt; &gt; &gt; --- WebKitTools/Scripts/webkitpy/move_test.py (revision 53048) (from WebKitTools/Scripts/webkitpy/initial.py:53048)
&gt; 
&gt; Bug 12023 introduced this code in r18513.  If I remember correctly, we record
&gt; the revision number in svn-create-patch so that we can repeat the operation in
&gt; svn-apply if done at a later time.  I&apos;m not quite sure what you&apos;re proposing to
&gt; do differently, though.  Can you give a more explicit example or ask it a
&gt; different way (like #1 :)?

Sure.  I realized only after I posted that the questions I wrote were a bit unclear. :) But I also didn&apos;t want to overwhelm with too much detail in the first go-round.

For the purposes of the question, I&apos;m going to call the two numbers the &quot;revision&quot; number and the &quot;from&quot; number, respectively.

&gt; --- new.py (revision 53048) (from old.py:53048)

Currently, if there is a &quot;from&quot; number (e.g. if the diff is a file copy), svn-apply looks at the &quot;from&quot; number but not the &quot;revision&quot; number:

&gt; if (/^--- .+\(from (\S+):(\d+)\)$/) {
&gt;     $copiedFromPath = $1;
&gt;     $copiedFiles{$indexPath} = $copiedFromPath;
&gt;     $versions{$copiedFromPath} = $2 if ($2 != 0);
&gt; }

And if there is a &quot;revision&quot; number but no &quot;from&quot; number, svn-apply looks at the &quot;revision&quot; number:

&gt; elsif (/^--- .+\(revision (\d+)\)$/) {
&gt;    $versions{$indexPath} = $1 if ($1 != 0);

It uses these two values as the values in the $versions hash (as opposed to using the &quot;revision&quot; number in both cases).

I guess my original question (2) has a few sub-questions--

In the new code, would it make sense to store the &quot;revision&quot; number as a property of the header in both cases, or is the revision number meaningless for our purposes in the case of a file copy? (Note that the new code just parses and stores the values for later, so it won&apos;t affect the behavior of svn-apply, etc.) And in either case, what would be the best name for these numbers -- viewed as properties of the diff header?

Some possible permutations of the values are:

$header{copiedFromVersion}: don&apos;t use
$header{version}: &quot;from&quot; in the case of a copy; &quot;revision&quot; otherwise

$header{copiedFromVersion}: &quot;from&quot; in the case of a copy; undef otherwise
$header{version}: undef in the case of a copy; &quot;revision&quot; otherwise

$header{copiedFromVersion}: &quot;from&quot; in the case of a copy; undef otherwise
$header{version}: &quot;revision&quot; in both cases

Secondly, what do we lose in our current code by not taking into account the &quot;revision&quot; number in the case of a file copy?  Perhaps I&apos;m just asking how we knew or why we chose in our current code to use the &quot;from&quot; number in that case rather than the &quot;revision&quot; number.

My original question (3) was basically asking in what circumstances the &quot;from&quot; and &quot;revision&quot; numbers could be different.  I was asking that to shed light on (2).  If the two numbers are always the same, then it simplifies many of the questions above.

The couple times I tried, the numbers were the same.  But maybe I need to try copying a file that was changed in a later revision that I hadn&apos;t yet obtained.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179163</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-10 12:49:07 -0800</bug_when>
    <thetext>*** Bug 33134 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179164</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-10 13:02:13 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; My original question (3) was basically asking in what circumstances the &quot;from&quot;
&gt; and &quot;revision&quot; numbers could be different.  I was asking that to shed light on
&gt; (2).  If the two numbers are always the same, then it simplifies many of the
&gt; questions above.
&gt; 
&gt; The couple times I tried, the numbers were the same.  But maybe I need to try
&gt; copying a file that was changed in a later revision that I hadn&apos;t yet obtained.

In starting to look at the earlier report you mentioned (thanks for that, by the way)--

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

It looks like it&apos;s possible the two numbers are always the same (in which case the header would contain redundant information):

+sub manufacturePatchForAdditionWithHistory($$)
+{
+    my ($file, $isBinary) = @_;
+    print &quot;Index: ${file}\n&quot;;
+    print &quot;=&quot; x 67, &quot;\n&quot;;
+    my ($sourceFile, $sourceRevision) = findSourceFileAndRevision($file);
+    print &quot;--- ${file}\t(revision ${sourceRevision})\t(from ${sourceFile}:${sourceRevision})\n&quot;; ###
+    print &quot;+++ ${file}\t(working copy)\n&quot;;

I don&apos;t know yet if there are other places where a diff header of this form can get generated, or if there are cases in the future where we might want to allow the two numbers to be different.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179189</commentid>
    <comment_count>12</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-01-10 16:35:17 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #9)
&gt; &gt; My original question (3) was basically asking in what circumstances the &quot;from&quot;
&gt; &gt; and &quot;revision&quot; numbers could be different.  I was asking that to shed light on
&gt; &gt; (2).  If the two numbers are always the same, then it simplifies many of the
&gt; &gt; questions above.
&gt; &gt; 
&gt; &gt; The couple times I tried, the numbers were the same.  But maybe I need to try
&gt; &gt; copying a file that was changed in a later revision that I hadn&apos;t yet obtained.
&gt; 
&gt; In starting to look at the earlier report you mentioned (thanks for that, by
&gt; the way)--
&gt; 
&gt; https://bugs.webkit.org/show_bug.cgi?id=12023
&gt; 
&gt; It looks like it&apos;s possible the two numbers are always the same (in which case
&gt; the header would contain redundant information):
&gt; 
&gt; +sub manufacturePatchForAdditionWithHistory($$)
&gt; +{
&gt; +    my ($file, $isBinary) = @_;
&gt; +    print &quot;Index: ${file}\n&quot;;
&gt; +    print &quot;=&quot; x 67, &quot;\n&quot;;
&gt; +    my ($sourceFile, $sourceRevision) = findSourceFileAndRevision($file);
&gt; +    print &quot;--- ${file}\t(revision ${sourceRevision})\t(from
&gt; ${sourceFile}:${sourceRevision})\n&quot;; ###
&gt; +    print &quot;+++ ${file}\t(working copy)\n&quot;;
&gt; 
&gt; I don&apos;t know yet if there are other places where a diff header of this form can
&gt; get generated, or if there are cases in the future where we might want to allow
&gt; the two numbers to be different.

Okay, after rereading Bug 12023 and playing around with svn, I now remember that the &quot;(from Path/To/File.cpp:NNNNN)&quot; information in the svn-create-patch output for copied/moved files was created solely by me for the purposes of communicating source information in patches from svn-create-patch to svn-apply (and svn-unapply).  That means the revisions will always match due to the code in svn-create-patch that you quoted above.  The revisions are &quot;redundant&quot; because I felt it was useful to include the @revision information with the path in the annotation.

So the revisions are redundant, but I don&apos;t think they hurt anything.  I&apos;m more inclined to leave the format as-is unless there is a compelling reason to change it (other than duplicate information) since there are a number of patches on bugs.webkit.org that use that format.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179195</commentid>
    <comment_count>13</comment_count>
      <attachid>46237</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-01-10 16:51:18 -0800</bug_when>
    <thetext>Comment on attachment 46237
Proposed patch 2

&gt; Index: WebKitTools/Scripts/VCSUtils.pm
&gt; +# Parse the next diff header from the given file handle, and advance
&gt; +# the file handle so the last line read is the first line after the
&gt; +# parsed header block.
&gt; +#
&gt; +# This subroutine dies if given leading junk.
&gt; +#
&gt; +# Args:
&gt; +#   $fileHandle: advanced so the last line read is the first line of the
&gt; +#                next diff header. For SVN-formatted diffs, this is the
&gt; +#                &quot;Index: &quot; line.
&gt; +#   $lastReadLine: the last line read from $fileHandle

Nit:  This is named $line, not $lastReadLine in the method.

&gt; +# Returns ($headerHashRef, $foundHeaderEnding, $lastReadLine):
&gt; +#   $headerHashRef: a hash reference representing a diff header
&gt; +#     copiedFromPath:
&gt; +#     copiedFromVersion:
&gt; +#     indexPath:
&gt; +#     svnConvertedText: header text converted to SVN format. Unrecognized
&gt; +#                       Git lines are left alone.
&gt; +#     version:
&gt; +#   $foundHeaderEnding: whether the last header block line was found.
&gt; +#                       This is a line beginning with &quot;+++&quot;.
&gt; +#   $lastReadLine:

I think $lastReadLine&apos;s description is on the previous line?  Or is there just no description?  Capitalization and indenting make this hard to read.  I think all the various should have some kind of a description.

&gt; Index: WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl
&gt; +{
&gt; +    # New test
&gt; +    diffName =&gt; &quot;Git: unrecognized lines&quot;,
&gt; +    inputText =&gt; &lt;&lt;&apos;END&apos;,
&gt; +diff --git a/LayoutTests/http/tests/security/listener/xss-inactive-closure.html b/LayoutTests/http/tests/security/listener/xss-inactive-closure.html
&gt; +new file mode 100644
&gt; +index 0000000..3c9f114
&gt; +--- /dev/null
&gt; ++++ b/LayoutTests/http/tests/security/listener/xss-inactive-closure.html
&gt; +@@ -0,0 +1,34 @@
&gt; ++&lt;html&gt;
&gt; +END
&gt; +    # Header keys to check
&gt; +    svnConvertedText =&gt; &lt;&lt;&apos;END&apos;,
&gt; +Index: LayoutTests/http/tests/security/listener/xss-inactive-closure.html
&gt; +new file mode 100644
&gt; +index 0000000..3c9f114
&gt; +--- LayoutTests/http/tests/security/listener/xss-inactive-closure.html
&gt; ++++ LayoutTests/http/tests/security/listener/xss-inactive-closure.html
&gt; +END
&gt; +    copiedFromPath =&gt; undef,
&gt; +    copiedFromVersion =&gt; undef,
&gt; +    indexPath =&gt; &quot;LayoutTests/http/tests/security/listener/xss-inactive-closure.html&quot;,
&gt; +    version =&gt; undef,
&gt; +    # Other values to check
&gt; +    foundHeaderEnding =&gt; 1,
&gt; +    lastReadLine =&gt; &quot;@@ -0,0 +1,34 @@\n&quot;,
&gt; +    nextLine =&gt; &quot;+&lt;html&gt;\n&quot;,
&gt; +},
&gt; +);

Heh, this test output will fail to apply.  Is that why you&apos;re writing these tests (to fix that)?  :)

&gt; +plan tests =&gt; @diffTests * 8;

I&apos;ve never really been a fan of missing parenthesis in Perl.  I think this would read better as:

plan(tests =&gt; @diffTests * 8);

It&apos;s up to you, though.  It also took me a while to get used to warn/die statements without parenthesis.

r=me, but it would be nice if the method documentation issues were addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179196</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-10 16:57:57 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Okay, after rereading Bug 12023 and playing around with svn, I now remember
&gt; that the &quot;(from Path/To/File.cpp:NNNNN)&quot; information in the svn-create-patch
&gt; output for copied/moved files was created solely by me for the purposes of
&gt; communicating source information in patches from svn-create-patch to svn-apply
&gt; (and svn-unapply).  That means the revisions will always match due to the code
&gt; in svn-create-patch that you quoted above.  The revisions are &quot;redundant&quot;
&gt; because I felt it was useful to include the @revision information with the path
&gt; in the annotation.
&gt; 
&gt; So the revisions are redundant, but I don&apos;t think they hurt anything.  I&apos;m more
&gt; inclined to leave the format as-is unless there is a compelling reason to
&gt; change it (other than duplicate information) since there are a number of
&gt; patches on bugs.webkit.org that use that format.

That&apos;s fine -- thanks.  I was asking more for the purposes of understanding and writing the code rather than changing the svn-create-patch &quot;API&quot;.  I will document the code accordingly and perhaps adjust how I&apos;m storing and naming the values in the header hash (I might do this in a subsequent revision).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179201</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-10 17:20:44 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; Index: WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl
&gt; &gt; +{
&gt; &gt; +    # New test
&gt; &gt; +    diffName =&gt; &quot;Git: unrecognized lines&quot;,
&gt; &gt; +    inputText =&gt; &lt;&lt;&apos;END&apos;,
&gt; &gt; +diff --git a/LayoutTests/http/tests/security/listener/xss-inactive-closure.html b/LayoutTests/http/tests/security/listener/xss-inactive-closure.html
&gt; &gt; +new file mode 100644
&gt; &gt; +index 0000000..3c9f114
&gt; &gt; +--- /dev/null
&gt; &gt; ++++ b/LayoutTests/http/tests/security/listener/xss-inactive-closure.html
&gt; &gt; +@@ -0,0 +1,34 @@
&gt; &gt; ++&lt;html&gt;
&gt; &gt; +END
&gt; &gt; +    # Header keys to check
&gt; &gt; +    svnConvertedText =&gt; &lt;&lt;&apos;END&apos;,
&gt; &gt; +Index: LayoutTests/http/tests/security/listener/xss-inactive-closure.html
&gt; &gt; +new file mode 100644
&gt; &gt; +index 0000000..3c9f114
&gt; &gt; +--- LayoutTests/http/tests/security/listener/xss-inactive-closure.html
&gt; &gt; ++++ LayoutTests/http/tests/security/listener/xss-inactive-closure.html
&gt; &gt; +END
&gt; &gt; +    copiedFromPath =&gt; undef,
&gt; &gt; +    copiedFromVersion =&gt; undef,
&gt; &gt; +    indexPath =&gt; &quot;LayoutTests/http/tests/security/listener/xss-inactive-closure.html&quot;,
&gt; &gt; +    version =&gt; undef,
&gt; &gt; +    # Other values to check
&gt; &gt; +    foundHeaderEnding =&gt; 1,
&gt; &gt; +    lastReadLine =&gt; &quot;@@ -0,0 +1,34 @@\n&quot;,
&gt; &gt; +    nextLine =&gt; &quot;+&lt;html&gt;\n&quot;,
&gt; &gt; +},
&gt; &gt; +);
&gt; 
&gt; Heh, this test output will fail to apply.

I didn&apos;t know that. :) I just observed by inspection that this is how the current corresponding svn-apply code behaves.  I thought that perhaps svn-apply/unapply relied on this &quot;pass-through&quot; behavior, or else behaved loosely so as not to preempt use of the --force flag.

&gt; Is that why you&apos;re writing these tests (to fix that)?  :)

The test case was to document interesting behavior that I thought was supposed to be preserved -- to help me while refactoring.  In a later patch, I can change the method to suppress unrecognized lines if that&apos;s what&apos;s preferred.

Thanks for reading and thinking about these.

&gt; &gt; +plan tests =&gt; @diffTests * 8;
&gt; 
&gt; I&apos;ve never really been a fan of missing parenthesis in Perl.  I think this
&gt; would read better as:
&gt; 
&gt; plan(tests =&gt; @diffTests * 8);

That&apos;s fine.  I prefer parentheses, too.  I was just following the examples in the Test::Simple/Test::More documentation (and frankly, didn&apos;t even notice that this was a construct in which parentheses could be used).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179204</commentid>
    <comment_count>16</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-10 17:25:42 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; +# Returns ($headerHashRef, $foundHeaderEnding, $lastReadLine):
&gt; &gt; +#   $headerHashRef: a hash reference representing a diff header
&gt; &gt; +#     copiedFromPath:
&gt; &gt; +#     copiedFromVersion:
&gt; &gt; +#     indexPath:
&gt; &gt; +#     svnConvertedText: header text converted to SVN format. Unrecognized
&gt; &gt; +#                       Git lines are left alone.
&gt; &gt; +#     version:
&gt; &gt; +#   $foundHeaderEnding: whether the last header block line was found.
&gt; &gt; +#                       This is a line beginning with &quot;+++&quot;.
&gt; &gt; +#   $lastReadLine:
&gt; 
&gt; I think $lastReadLine&apos;s description is on the previous line?  Or is there just
&gt; no description?  Capitalization and indenting make this hard to read.

Let me know if you have any suggestions for formatting (multi-valued) return values in general (accommodating hash key documentation, etc).  I lifted and modified this format from some WebKit Python code (hence the indenting).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179207</commentid>
    <comment_count>17</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-01-10 17:59:51 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #13)
&gt; &gt; &gt; +# Returns ($headerHashRef, $foundHeaderEnding, $lastReadLine):
&gt; &gt; &gt; +#   $headerHashRef: a hash reference representing a diff header
&gt; &gt; &gt; +#     copiedFromPath:
&gt; &gt; &gt; +#     copiedFromVersion:
&gt; &gt; &gt; +#     indexPath:
&gt; &gt; &gt; +#     svnConvertedText: header text converted to SVN format. Unrecognized
&gt; &gt; &gt; +#                       Git lines are left alone.
&gt; &gt; &gt; +#     version:
&gt; &gt; &gt; +#   $foundHeaderEnding: whether the last header block line was found.
&gt; &gt; &gt; +#                       This is a line beginning with &quot;+++&quot;.
&gt; &gt; &gt; +#   $lastReadLine:
&gt; &gt; 
&gt; &gt; I think $lastReadLine&apos;s description is on the previous line?  Or is there just
&gt; &gt; no description?  Capitalization and indenting make this hard to read.
&gt; 
&gt; Let me know if you have any suggestions for formatting (multi-valued) return
&gt; values in general (accommodating hash key documentation, etc).  I lifted and
&gt; modified this format from some WebKit Python code (hence the indenting).

I&apos;m just expecting text (a description) after every &quot;variable:&quot; line.  If there is no text, does the next line with a description cover it?  I&apos;m just not sure how to parse this format when I read it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179208</commentid>
    <comment_count>18</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-01-10 18:00:32 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #13)
&gt; &gt; &gt; Index: WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    # New test
&gt; &gt; &gt; +    diffName =&gt; &quot;Git: unrecognized lines&quot;,
&gt; &gt; &gt; +    inputText =&gt; &lt;&lt;&apos;END&apos;,
&gt; &gt; &gt; +diff --git a/LayoutTests/http/tests/security/listener/xss-inactive-closure.html b/LayoutTests/http/tests/security/listener/xss-inactive-closure.html
&gt; &gt; &gt; +new file mode 100644
&gt; &gt; &gt; +index 0000000..3c9f114
&gt; &gt; &gt; +--- /dev/null
&gt; &gt; &gt; ++++ b/LayoutTests/http/tests/security/listener/xss-inactive-closure.html
&gt; &gt; &gt; +@@ -0,0 +1,34 @@
&gt; &gt; &gt; ++&lt;html&gt;
&gt; &gt; &gt; +END
&gt; &gt; &gt; +    # Header keys to check
&gt; &gt; &gt; +    svnConvertedText =&gt; &lt;&lt;&apos;END&apos;,
&gt; &gt; &gt; +Index: LayoutTests/http/tests/security/listener/xss-inactive-closure.html
&gt; &gt; &gt; +new file mode 100644
&gt; &gt; &gt; +index 0000000..3c9f114
&gt; &gt; &gt; +--- LayoutTests/http/tests/security/listener/xss-inactive-closure.html
&gt; &gt; &gt; ++++ LayoutTests/http/tests/security/listener/xss-inactive-closure.html
&gt; &gt; &gt; +END
&gt; &gt; &gt; +    copiedFromPath =&gt; undef,
&gt; &gt; &gt; +    copiedFromVersion =&gt; undef,
&gt; &gt; &gt; +    indexPath =&gt; &quot;LayoutTests/http/tests/security/listener/xss-inactive-closure.html&quot;,
&gt; &gt; &gt; +    version =&gt; undef,
&gt; &gt; &gt; +    # Other values to check
&gt; &gt; &gt; +    foundHeaderEnding =&gt; 1,
&gt; &gt; &gt; +    lastReadLine =&gt; &quot;@@ -0,0 +1,34 @@\n&quot;,
&gt; &gt; &gt; +    nextLine =&gt; &quot;+&lt;html&gt;\n&quot;,
&gt; &gt; &gt; +},
&gt; &gt; &gt; +);
&gt; &gt; 
&gt; &gt; Heh, this test output will fail to apply.
&gt; 
&gt; I didn&apos;t know that. :) I just observed by inspection that this is how the
&gt; current corresponding svn-apply code behaves.  I thought that perhaps
&gt; svn-apply/unapply relied on this &quot;pass-through&quot; behavior, or else behaved
&gt; loosely so as not to preempt use of the --force flag.

I think this may be covered by Bug 32834, although maybe not explicitly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179209</commentid>
    <comment_count>19</comment_count>
      <attachid>46250</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-10 18:05:46 -0800</bug_when>
    <thetext>Created attachment 46250
Proposed patch 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179210</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-10 18:10:33 -0800</bug_when>
    <thetext>Attachment 46250 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:99:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:100:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:108:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:109:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:126:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:127:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:135:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:136:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:153:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:154:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:162:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:163:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:180:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:181:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:189:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:190:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:207:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:208:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:216:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:217:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 20</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179225</commentid>
    <comment_count>21</comment_count>
      <attachid>46250</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-01-10 19:36:51 -0800</bug_when>
    <thetext>Comment on attachment 46250
Proposed patch 3

r=me

I assume there isn&apos;t anything else you wanted to change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179237</commentid>
    <comment_count>22</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-10 20:29:58 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 46250 [details])
&gt; r=me
&gt; 
&gt; I assume there isn&apos;t anything else you wanted to change?

Not in this patch.  Could you do me a favor and commit this for me?  I believe it won&apos;t commit otherwise since I think the unit test file needs the allow-tabs property.  Thanks a lot!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179279</commentid>
    <comment_count>23</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-01-10 21:21:41 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #21)
&gt; &gt; (From update of attachment 46250 [details] [details])
&gt; &gt; r=me
&gt; &gt; 
&gt; &gt; I assume there isn&apos;t anything else you wanted to change?
&gt; 
&gt; Not in this patch.  Could you do me a favor and commit this for me?  I believe
&gt; it won&apos;t commit otherwise since I think the unit test file needs the allow-tabs
&gt; property.  Thanks a lot!

Will do this tomorrow unless someone feels like landing it overnight.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179363</commentid>
    <comment_count>24</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-01-11 07:55:22 -0800</bug_when>
    <thetext>Committed r53076: &lt;http://trac.webkit.org/changeset/53076&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46231</attachid>
            <date>2010-01-10 02:02:37 -0800</date>
            <delta_ts>2010-01-10 10:33:02 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch-tools7-1.txt</filename>
            <type>text/plain</type>
            <size>13440</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUzMDUwKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAtMDEtMTAgIENocmlzIEplcmRvbmVrICA8
Y2hyaXMuamVyZG9uZWtAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENyZWF0ZWQgYSB1bml0LXRlc3RlZCBmdW5jdGlvbiB0byBwYXJz
ZSB0aGUgaGVhZGVyIGJsb2NrIG9mCisgICAgICAgIGEgR2l0IG9yIFNWTiBkaWZmIC0tIGZvciBm
dXR1cmUgcmVmYWN0b3Jpbmcgb2Ygc3ZuLWFwcGx5IGFuZAorICAgICAgICBzdm4tdW5hcHBseS4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM0NDcK
KworICAgICAgICAqIFNjcmlwdHMvVkNTVXRpbHMucG06CisgICAgICAgICAgLSBBZGRlZCBwYXJz
ZURpZmZIZWFkZXIoKS4KKyAgICAgICAgICAtIFJlbW92ZWQgaXJyZWxldmFudCBjb21tZW50IGZy
b20gZ2l0ZGlmZjJzdm5kaWZmKCkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBlcmwvVkNT
VXRpbHNfdW5pdHRlc3QvcGFyc2VEaWZmSGVhZGVyLnBsOiBBZGRlZC4KKyAgICAgICAgICAtIEFk
ZGVkIDQ4IHVuaXQgdGVzdHMgZm9yIHBhcnNlRGlmZkhlYWRlcigpLgorCiAyMDEwLTAxLTA5ICBE
YW5pZWwgQmF0ZXMgIDxkYmF0ZXNAd2Via2l0Lm9yZz4KIAogICAgICAgICBObyByZXZpZXcsIHJv
bGxpbmcgb3V0IHI1MzA0NC4KSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHMucG0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbQkocmV2aXNpb24g
NTMwNDUpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzLnBtCSh3b3JraW5nIGNvcHkp
CkBAIC02Miw2ICs2Miw3IEBAIEJFR0lOIHsKICAgICAgICAgJmlzU1ZOVmVyc2lvbjE2T3JOZXdl
cgogICAgICAgICAmbWFrZUZpbGVQYXRoUmVsYXRpdmUKICAgICAgICAgJm5vcm1hbGl6ZVBhdGgK
KyAgICAgICAgJnBhcnNlRGlmZkhlYWRlcgogICAgICAgICAmcGF0aFJlbGF0aXZlVG9TVk5SZXBv
c2l0b3J5Um9vdEZvclBhdGgKICAgICAgICAgJnJ1blBhdGNoQ29tbWFuZAogICAgICAgICAmc3Zu
UmV2aXNpb25Gb3JEaXJlY3RvcnkKQEAgLTM2NSw4ICszNjYsNyBAQCBzdWIgc3ZuU3RhdHVzKCQp
CiBzdWIgZ2l0ZGlmZjJzdm5kaWZmKCQpCiB7CiAgICAgJF8gPSBzaGlmdCBAXzsKLSAgICAKLSAg
ICAjIFxWIGlzIGFueSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgdmVydGljYWwgd2hpdGUgc3BhY2UK
KwogICAgIGlmIChtI15kaWZmIC0tZ2l0IFx3LyguKykgXHcvKFteXHJcbl0rKSMpIHsKICAgICAg
ICAgcmV0dXJuICJJbmRleDogJDEkUE9TVE1BVENIIjsKICAgICB9CkBAIC0zODIsNiArMzgyLDg1
IEBAIHN1YiBnaXRkaWZmMnN2bmRpZmYoJCkKICAgICByZXR1cm4gJF87CiB9CiAKKyMgUGFyc2Ug
dGhlIG5leHQgZGlmZiBoZWFkZXIgZnJvbSB0aGUgZ2l2ZW4gZmlsZSBoYW5kbGUsIGFuZCBhZHZh
bmNlCisjIHRoZSBmaWxlIGhhbmRsZSBzbyB0aGUgbGFzdCBsaW5lIHJlYWQgaXMgdGhlIGZpcnN0
IGxpbmUgYWZ0ZXIgdGhlCisjIHBhcnNlZCBoZWFkZXIuCisjCisjIEFyZ3M6CisjICAgJGZpbGVI
YW5kbGU6IGFkdmFuY2VkIHNvIHRoZSBsYXN0IGxpbmUgcmVhZCBpcyB0aGUgZmlyc3QgKG5vbi1q
dW5rKQorIyAgICAgICAgICAgICAgICBsaW5lIG9mIHRoZSBuZXh0IGRpZmYgaGVhZGVyLgorIyAg
ICRsYXN0UmVhZExpbmU6IHRoZSBsaW5lIGxhc3QgcmVhZCBmcm9tICRmaWxlSGFuZGxlLgorIwor
IyBSZXR1cm5zICgkaGVhZGVySGFzaFJlZiwgJGxhc3RSZWFkTGluZSk6CisjICAgJGhlYWRlckhh
c2hSZWY6IGEgaGFzaCByZWZlcmVuY2UgcmVwcmVzZW50aW5nIGEgZGlmZiBoZWFkZXIsIHdpdGgK
KyMgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyBrZXktdmFsdWVzLS0KKyMgICAgIGNv
cGllZEZyb21QYXRoOgorIyAgICAgY29waWVkRnJvbVZlcnNpb246CisjICAgICBmb3VuZEhlYWRl
ckVuZGluZzoKKyMgICAgIGluZGV4UGF0aDoKKyMgICAgIHN2bkhlYWRlclRleHQ6IGhlYWRlciB0
ZXh0IGNvbnZlcnRlZCB0byBTVk4gZm9ybWF0CisjICAgICB2ZXJzaW9uOgorIyAgICRsYXN0UmVh
ZExpbmU6CitzdWIgcGFyc2VEaWZmSGVhZGVyKCQkKQoreworICAgIG15ICgkZmlsZUhhbmRsZSwg
JGxpbmUpID0gQF87CisKKyAgICBteSAkZmlsdGVyOworICAgIGlmICgkbGluZSA9fiBtI15kaWZm
IC0tZ2l0ICMpIHsKKyAgICAgICAgJGZpbHRlciA9IFwmZ2l0ZGlmZjJzdm5kaWZmOworICAgIH0K
KyAgICAkbGluZSA9ICYkZmlsdGVyKCRsaW5lKSBpZiAkZmlsdGVyOworCisgICAgbXkgJGluZGV4
UGF0aDsKKyAgICBpZiAoJGxpbmUgPX4gL15JbmRleDogKFteXHJcbl0rKS8pIHsKKyAgICAgICAg
JGluZGV4UGF0aCA9ICQxOworICAgIH0gZWxzZSB7CisgICAgICAgIGRpZSgiQ291bGQgbm90IHBh
cnNlIGZpcnN0IGxpbmUgb2YgZGlmZiBoZWFkZXI6IFwiJGxpbmVcIi4iKTsKKyAgICB9CisKKyAg
ICBteSAlaGVhZGVyOworCisgICAgbXkgJGZvdW5kSGVhZGVyRW5kaW5nID0gMDsKKyAgICBteSAk
bGFzdFJlYWRMaW5lOworICAgIG15ICRzdm5IZWFkZXJUZXh0ID0gJGxpbmU7CisgICAgd2hpbGUg
KDwkZmlsZUhhbmRsZT4pIHsKKyAgICAgICAgIyBUZW1wb3JhcmlseSBzdHJpcCBvZmYgYW55IGVu
ZC1vZi1saW5lIGNoYXJhY3RlcnMgdG8gc2ltcGxpZnkKKyAgICAgICAgIyByZWdleCBtYXRjaGlu
ZyBiZWxvdy4KKyAgICAgICAgcy8oW1xuXHJdKykkLy87CisgICAgICAgIG15ICRlb2wgPSAkMTsK
KworICAgICAgICAkXyA9ICYkZmlsdGVyKCRfKSBpZiAkZmlsdGVyOworCisgICAgICAgICMgRml4
IHBhdGhzIG9uICJkaWZmIiwgIi0tLSIsIGFuZCAiKysrIiBsaW5lcyB0byBtYXRjaCB0aGUKKyAg
ICAgICAgIyBsZWFkaW5nIGluZGV4IGxpbmUuCisgICAgICAgIHMvXFMrJC8kaW5kZXhQYXRoLyBp
ZiAvXmRpZmYvOyAjIEZJWE1FOiBDYW4gdGhpcyBldmVyIG9jY3VyPyBJZiBzbywgaW5jbHVkZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgYSB1bml0IHRl
c3QuIE90aGVyd2lzZSwgcmVtb3ZlIGl0LgorICAgICAgICBzL14tLS0gXFMrLy0tLSAkaW5kZXhQ
YXRoLzsKKyAgICAgICAgaWYgKC9eLS0tIC4rXChmcm9tIChcUyspOihcZCspXCkkLykgeworICAg
ICAgICAgICAgJGhlYWRlcntjb3BpZWRGcm9tUGF0aH0gPSAkMTsKKyAgICAgICAgICAgICRoZWFk
ZXJ7Y29waWVkRnJvbVZlcnNpb259ID0gJDIgaWYgKCQyICE9IDApOworICAgICAgICB9IGVsc2lm
ICgvXi0tLSAuK1wocmV2aXNpb24gKFxkKylcKSQvKSB7CisgICAgICAgICAgICAkaGVhZGVye3Zl
cnNpb259ID0gJDEgaWYgKCQxICE9IDApOworICAgICAgICB9IGVsc2lmIChzL15cK1wrXCsgXFMr
LysrKyAkaW5kZXhQYXRoLykgeworICAgICAgICAgICAgJGZvdW5kSGVhZGVyRW5kaW5nID0gMTsK
KyAgICAgICAgfQorCisgICAgICAgICRfIC49ICRlb2w7CisKKyAgICAgICAgJHN2bkhlYWRlclRl
eHQgLj0gJF87CisgICAgICAgIGlmICgkZm91bmRIZWFkZXJFbmRpbmcpIHsKKyAgICAgICAgICAg
ICRsYXN0UmVhZExpbmUgPSA8JGZpbGVIYW5kbGU+OworICAgICAgICAgICAgbGFzdDsKKyAgICAg
ICAgfQorICAgIH0KKworICAgICRoZWFkZXJ7Zm91bmRIZWFkZXJFbmRpbmd9ID0gJGZvdW5kSGVh
ZGVyRW5kaW5nOworICAgICRoZWFkZXJ7aW5kZXhQYXRofSA9ICRpbmRleFBhdGg7CisgICAgJGhl
YWRlcntzdm5IZWFkZXJUZXh0fSA9ICRzdm5IZWFkZXJUZXh0OworCisgICAgcmV0dXJuIChcJWhl
YWRlciwgJGxhc3RSZWFkTGluZSk7Cit9CisKICMgSWYgcG9zc2libGUsIHJldHVybnMgYSBDaGFu
Z2VMb2cgcGF0Y2ggZXF1aXZhbGVudCB0byB0aGUgZ2l2ZW4gb25lLAogIyBidXQgd2l0aCB0aGUg
bmV3ZXN0IENoYW5nZUxvZyBlbnRyeSBpbnNlcnRlZCBhdCB0aGUgdG9wIG9mIHRoZQogIyBmaWxl
IC0tIGkuZS4gbm8gbGVhZGluZyBjb250ZXh0IGFuZCBhbGwgbGluZXMgc3RhcnRpbmcgd2l0aCAi
KyIuCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvVkNTVXRpbHNfdW5pdHRl
c3QvcGFyc2VEaWZmSGVhZGVyLnBsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cGVybC9WQ1NVdGlsc191bml0dGVzdC9wYXJzZURpZmZIZWFkZXIucGwJKHJldmlzaW9u
IDApCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvVkNTVXRpbHNfdW5pdHRlc3Qv
cGFyc2VEaWZmSGVhZGVyLnBsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzMiBAQAorIyEvdXNy
L2Jpbi9wZXJsIC13CisjCisjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2hy
aXMuamVyZG9uZWtAZ21haWwuY29tKQorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
IyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisjIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyMgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKyMgVW5pdCB0ZXN0cyBvZiBwYXJzZURpZmZIZWFkZXIoKS4KKwordXNlIHN0cmljdDsK
K3VzZSB3YXJuaW5nczsKKwordXNlIFRlc3Q6Ok1vcmU7Cit1c2UgVkNTVXRpbHM7CisKK215IEBo
ZWFkZXJLZXlzID0gKCAjIFRoZSAkaGVhZGVySGFzaFJlZiBrZXlzIHRvIGNoZWNrLgorICAgICJj
b3BpZWRGcm9tUGF0aCIsCisgICAgImNvcGllZEZyb21WZXJzaW9uIiwKKyAgICAiZm91bmRIZWFk
ZXJFbmRpbmciLAorICAgICJpbmRleFBhdGgiLAorICAgICJzdm5IZWFkZXJUZXh0IiwKKyAgICAi
dmVyc2lvbiIsCispOworCisjIFRlc3QgcGFyc2VEaWZmSGVhZGVyKCkgZm9yIHRoZSBnaXZlbiAk
ZGlmZlRlc3QuCitzdWIgZG9EaWZmVGVzdCgkKQoreworICAgIG15ICgkZGlmZlRlc3QpID0gQF87
CisKKyAgICBteSAkZmlsZUhhbmRsZTsKKyAgICBvcGVuKCRmaWxlSGFuZGxlLCAiPCIsIFwkZGlm
ZlRlc3QtPntpbnB1dFRleHR9KTsKKworICAgIG15ICRsaW5lID0gPCRmaWxlSGFuZGxlPjsKKwor
ICAgIG15ICgkaGVhZGVyLCAkbGFzdFJlYWRMaW5lKSA9IHBhcnNlRGlmZkhlYWRlcigkZmlsZUhh
bmRsZSwgJGxpbmUpOworCisgICAgbXkgJHRpdGxlSGVhZGVyID0gInBhcnNlRGlmZkhlYWRlcigp
OiBbJGRpZmZUZXN0LT57dGVzdE5hbWV9XSAiOworICAgIG15ICR0aXRsZTsKKworICAgIGZvcmVh
Y2ggbXkgJGhlYWRlcktleSAoQGhlYWRlcktleXMpIHsKKyAgICAgICAgbXkgJHRpdGxlID0gIiR7
dGl0bGVIZWFkZXJ9a2V5PVwiJGhlYWRlcktleVwiIjsKKyAgICAgICAgaXMoJGhlYWRlci0+eyRo
ZWFkZXJLZXl9LCAkZGlmZlRlc3QtPnskaGVhZGVyS2V5fSwgJHRpdGxlKTsKKyAgICB9CisKKyAg
ICBpcygkbGFzdFJlYWRMaW5lLCAkZGlmZlRlc3QtPntsYXN0UmVhZExpbmV9LCAiJHt0aXRsZUhl
YWRlcn1sYXN0UmVhZExpbmUiKTsKKworICAgIG15ICRuZXh0TGluZSA9IDwkZmlsZUhhbmRsZT47
CisgICAgaXMoJG5leHRMaW5lLCAkZGlmZlRlc3QtPntuZXh0TGluZX0sICIke3RpdGxlSGVhZGVy
fW5leHRMaW5lIik7Cit9CisKK215IEBkaWZmVGVzdHMgPSAoeworICAgICMgTmV3IHRlc3Q6IG1p
c3NpbmcgY2xvc2luZyBoZWFkZXIgbGluZQorICAgIHRlc3ROYW1lID0+ICJpbmNvbXBsZXRlIGhl
YWRlciIsCisgICAgaW5wdXRUZXh0ID0+IDw8J0VORCcsCitJbmRleDogV2ViS2l0VG9vbHMvU2Ny
aXB0cy9WQ1NVdGlscy5wbQorRU5ECisgICAgIyBIZWFkZXIga2V5cyB0byBjaGVjaworICAgIHN2
bkhlYWRlclRleHQgPT4gPDwnRU5EJywKK0luZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0
aWxzLnBtCitFTkQKKyAgICBjb3BpZWRGcm9tUGF0aCA9PiB1bmRlZiwKKyAgICBjb3BpZWRGcm9t
VmVyc2lvbiA9PiB1bmRlZiwKKyAgICBmb3VuZEhlYWRlckVuZGluZyA9PiAwLAorICAgIGluZGV4
UGF0aCA9PiAiV2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbSIsCisgICAgdmVyc2lvbiA9
PiB1bmRlZiwKKyAgICAjIE90aGVyIHZhbHVlcyB0byBjaGVjaworICAgIGxhc3RSZWFkTGluZSA9
PiB1bmRlZiwKKyAgICBuZXh0TGluZSA9PiB1bmRlZiwKK30sCit7CisgICAgIyBOZXcgdGVzdAor
ICAgIHRlc3ROYW1lID0+ICJTVk4gc2ltcGxlIiwKKyAgICBpbnB1dFRleHQgPT4gPDwnRU5EJywK
K0luZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzLnBtCis9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0g
V2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbQkocmV2aXNpb24gNTMwMDQpCisrKysgV2Vi
S2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbQkod29ya2luZyBjb3B5KQorQEAgLTMyLDYgKzMy
LDcgQEAgdXNlIHN0cmljdDsKKyB1c2Ugd2FybmluZ3M7CitFTkQKKyAgICAjIEhlYWRlciBrZXlz
IHRvIGNoZWNrCisgICAgc3ZuSGVhZGVyVGV4dCA9PiA8PCdFTkQnLAorSW5kZXg6IFdlYktpdFRv
b2xzL1NjcmlwdHMvVkNTVXRpbHMucG0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBXZWJLaXRUb29scy9TY3Jp
cHRzL1ZDU1V0aWxzLnBtCShyZXZpc2lvbiA1MzAwNCkKKysrKyBXZWJLaXRUb29scy9TY3JpcHRz
L1ZDU1V0aWxzLnBtCSh3b3JraW5nIGNvcHkpCitFTkQKKyAgICBjb3BpZWRGcm9tUGF0aCA9PiB1
bmRlZiwKKyAgICBjb3BpZWRGcm9tVmVyc2lvbiA9PiB1bmRlZiwKKyAgICBmb3VuZEhlYWRlckVu
ZGluZyA9PiAxLAorICAgIGluZGV4UGF0aCA9PiAiV2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGls
cy5wbSIsCisgICAgdmVyc2lvbiA9PiAiNTMwMDQiLAorICAgICMgT3RoZXIgdmFsdWVzIHRvIGNo
ZWNrCisgICAgbGFzdFJlYWRMaW5lID0+ICJAQCAtMzIsNiArMzIsNyBAQCB1c2Ugc3RyaWN0O1xu
IiwKKyAgICBuZXh0TGluZSA9PiAiIHVzZSB3YXJuaW5ncztcbiIsCit9LAoreworICAgICMgTmV3
IHRlc3QKKyAgICB0ZXN0TmFtZSA9PiAiU1ZOIGNvcHkiLAorICAgIGlucHV0VGV4dCA9PiA8PCdF
TkQnLAorSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbW92ZV90ZXN0LnB5Cis9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CistLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9tb3ZlX3Rlc3QucHkJ
KHJldmlzaW9uIDUzMDQ3KQkoZnJvbSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L19faW5p
dF9fLnB5OjUzMDQ4KQorKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbW92ZV90ZXN0
LnB5CSh3b3JraW5nIGNvcHkpCitAQCAtMCwwICsxLDcgQEAKKysjIFJlcXVpcmVkIGZvciBQeXRo
b24gdG8gc2VhcmNoIHRoaXMgZGlyZWN0b3J5IGZvciBtb2R1bGUgZmlsZXMKK0VORAorICAgICMg
SGVhZGVyIGtleXMgdG8gY2hlY2sKKyAgICBzdm5IZWFkZXJUZXh0ID0+IDw8J0VORCcsCitJbmRl
eDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9tb3ZlX3Rlc3QucHkKKz09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
Ky0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L21vdmVfdGVzdC5weQkocmV2aXNpb24g
NTMwNDcpCShmcm9tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvX19pbml0X18ucHk6NTMw
NDgpCisrKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9tb3ZlX3Rlc3QucHkJKHdvcmtp
bmcgY29weSkKK0VORAorICAgIGNvcGllZEZyb21QYXRoID0+ICJXZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L19faW5pdF9fLnB5IiwKKyAgICBjb3BpZWRGcm9tVmVyc2lvbiA9PiAiNTMwNDgi
LAorICAgIGZvdW5kSGVhZGVyRW5kaW5nID0+IDEsCisgICAgaW5kZXhQYXRoID0+ICJXZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L21vdmVfdGVzdC5weSIsCisgICAgdmVyc2lvbiA9PiB1bmRl
ZiwKKyAgICAjIE90aGVyIHZhbHVlcyB0byBjaGVjaworICAgIGxhc3RSZWFkTGluZSA9PiAiQEAg
LTAsMCArMSw3IEBAXG4iLAorICAgIG5leHRMaW5lID0+ICIrIyBSZXF1aXJlZCBmb3IgUHl0aG9u
IHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzXG4iLAorfSwKK3sKKyAg
ICAjIE5ldyB0ZXN0CisgICAgdGVzdE5hbWUgPT4gIlNWTiBcXHJcXG4gbGluZXMiLAorICAgIGlu
cHV0VGV4dCA9PiA8PEVORCwgIyBObyBzaW5nbGUgcXVvdGVzIHRvIGFsbG93IGludGVycG9sYXRp
b24gb2YgIlxyIgorSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbW92ZV90ZXN0
LnB5XHIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT1ccgorLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbW92
ZV90ZXN0LnB5CShyZXZpc2lvbiA1MzA0NykJKGZyb20gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9fX2luaXRfXy5weTo1MzA0OClccgorKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbW92ZV90ZXN0LnB5CSh3b3JraW5nIGNvcHkpXHIKK0BAIC0wLDAgKzEsNyBAQFxyCisrIyBS
ZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZp
bGVzXHIKK0VORAorICAgICMgSGVhZGVyIGtleXMgdG8gY2hlY2sKKyAgICBzdm5IZWFkZXJUZXh0
ID0+IDw8RU5ELCAjIE5vIHNpbmdsZSBxdW90ZXMgdG8gYWxsb3cgaW50ZXJwb2xhdGlvbiBvZiAi
XHIiCitJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9tb3ZlX3Rlc3QucHlccgor
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PVxyCistLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9tb3ZlX3Rlc3Qu
cHkJKHJldmlzaW9uIDUzMDQ3KQkoZnJvbSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L19f
aW5pdF9fLnB5OjUzMDQ4KVxyCisrKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9tb3Zl
X3Rlc3QucHkJKHdvcmtpbmcgY29weSlccgorRU5ECisgICAgY29waWVkRnJvbVBhdGggPT4gIldl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvX19pbml0X18ucHkiLAorICAgIGNvcGllZEZyb21W
ZXJzaW9uID0+ICI1MzA0OCIsCisgICAgZm91bmRIZWFkZXJFbmRpbmcgPT4gMSwKKyAgICBpbmRl
eFBhdGggPT4gIldlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbW92ZV90ZXN0LnB5IiwKKyAg
ICB2ZXJzaW9uID0+IHVuZGVmLAorICAgICMgT3RoZXIgdmFsdWVzIHRvIGNoZWNrCisgICAgbGFz
dFJlYWRMaW5lID0+ICJAQCAtMCwwICsxLDcgQEBcclxuIiwKKyAgICBuZXh0TGluZSA9PiAiKyMg
UmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBm
aWxlc1xyXG4iLAorfSwKK3sKKyAgICAjIE5ldyB0ZXN0CisgICAgdGVzdE5hbWUgPT4gIlNWTiBw
YXRoIGNvcnJlY3Rpb25zIiwKKyAgICBpbnB1dFRleHQgPT4gPDwnRU5EJywKK0luZGV4OiBXZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L21vdmVfdGVzdC5weQorPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJh
ZF9wYXRoCShyZXZpc2lvbiA1MzA0NykJKGZyb20gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9fX2luaXRfXy5weTo1MzA0OCkKKysrKyBiYWRfcGF0aAkod29ya2luZyBjb3B5KQorQEAgLTAs
MCArMSw3IEBACisrIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9y
eSBmb3IgbW9kdWxlIGZpbGVzCitFTkQKKyAgICAjIEhlYWRlciBrZXlzIHRvIGNoZWNrCisgICAg
c3ZuSGVhZGVyVGV4dCA9PiA8PCdFTkQnLAorSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbW92ZV90ZXN0LnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9tb3ZlX3Rlc3QucHkJKHJldmlzaW9uIDUzMDQ3KQkoZnJvbSBXZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L19faW5pdF9fLnB5OjUzMDQ4KQorKysrIFdlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbW92ZV90ZXN0LnB5CSh3b3JraW5nIGNvcHkpCitFTkQKKyAgICBjb3BpZWRG
cm9tUGF0aCA9PiAiV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9fX2luaXRfXy5weSIsCisg
ICAgY29waWVkRnJvbVZlcnNpb24gPT4gIjUzMDQ4IiwKKyAgICBmb3VuZEhlYWRlckVuZGluZyA9
PiAxLAorICAgIGluZGV4UGF0aCA9PiAiV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9tb3Zl
X3Rlc3QucHkiLAorICAgIHZlcnNpb24gPT4gdW5kZWYsCisgICAgIyBPdGhlciB2YWx1ZXMgdG8g
Y2hlY2sKKyAgICBsYXN0UmVhZExpbmUgPT4gIkBAIC0wLDAgKzEsNyBAQFxuIiwKKyAgICBuZXh0
TGluZSA9PiAiKyMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3Rvcnkg
Zm9yIG1vZHVsZSBmaWxlc1xuIiwKK30sCit7CisgICAgIyBOZXcgdGVzdAorICAgIHRlc3ROYW1l
ID0+ICJHaXQgc2ltcGxlIiwKKyAgICBpbnB1dFRleHQgPT4gPDwnRU5EJywKK2RpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUZsZXhpYmxlQm94RGF0YS5oIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVGbGV4aWJsZUJveERhdGEuaAoraW5kZXggZjVkNWU3NC4u
M2I2YWE5MiAxMDA2NDQKKy0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlRmxleGli
bGVCb3hEYXRhLmgKKysrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlRmxleGlibGVC
b3hEYXRhLmgKK0BAIC00Nyw3ICs0Nyw2IEBAIHB1YmxpYzoKK0VORAorICAgICMgSGVhZGVyIGtl
eXMgdG8gY2hlY2sKKyAgICBzdm5IZWFkZXJUZXh0ID0+IDw8J0VORCcsCitJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVGbGV4aWJsZUJveERhdGEuaAorPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlRmxleGlibGVCb3hEYXRhLmgKKysrKyBXZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUZsZXhpYmxlQm94RGF0YS5oCitFTkQKKyAgICBjb3Bp
ZWRGcm9tUGF0aCA9PiB1bmRlZiwKKyAgICBjb3BpZWRGcm9tVmVyc2lvbiA9PiB1bmRlZiwKKyAg
ICBmb3VuZEhlYWRlckVuZGluZyA9PiAxLAorICAgIGluZGV4UGF0aCA9PiAiV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVGbGV4aWJsZUJveERhdGEuaCIsCisgICAgdmVyc2lvbiA9PiB1bmRl
ZiwKKyAgICAjIE90aGVyIHZhbHVlcyB0byBjaGVjaworICAgIGxhc3RSZWFkTGluZSA9PiAiQEAg
LTQ3LDcgKzQ3LDYgQEAgcHVibGljOlxuIiwKKyAgICBuZXh0TGluZSA9PiB1bmRlZiwKK30pOwor
CitwbGFuIHRlc3RzID0+IEBkaWZmVGVzdHMgKiA4OworCitmb3JlYWNoIG15ICRkaWZmVGVzdCAo
QGRpZmZUZXN0cykgeworICAgIGRvRGlmZlRlc3QoJGRpZmZUZXN0KTsKK30K
</data>
<flag name="commit-queue"
          id="28460"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46237</attachid>
            <date>2010-01-10 10:33:02 -0800</date>
            <delta_ts>2010-01-11 07:57:43 -0800</delta_ts>
            <desc>Proposed patch 2</desc>
            <filename>patch-tools7-2.txt</filename>
            <type>text/plain</type>
            <size>15898</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUzMDUwKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAtMDEtMTAgIENocmlzIEplcmRvbmVrICA8
Y2hyaXMuamVyZG9uZWtAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENyZWF0ZWQgYSB1bml0LXRlc3RlZCBmdW5jdGlvbiB0byBwYXJz
ZSB0aGUgaGVhZGVyIGJsb2NrIG9mCisgICAgICAgIGEgR2l0IG9yIFNWTiBkaWZmIC0tIGZvciBm
dXR1cmUgcmVmYWN0b3Jpbmcgb2Ygc3ZuLWFwcGx5IGFuZAorICAgICAgICBzdm4tdW5hcHBseS4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM0NDcK
KworICAgICAgICAqIFNjcmlwdHMvVkNTVXRpbHMucG06CisgICAgICAgICAgLSBBZGRlZCBwYXJz
ZURpZmZIZWFkZXIoKS4KKyAgICAgICAgICAtIFJlbW92ZWQgaXJyZWxldmFudCBjb21tZW50IGZy
b20gZ2l0ZGlmZjJzdm5kaWZmKCkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBlcmwvVkNT
VXRpbHNfdW5pdHRlc3QvcGFyc2VEaWZmSGVhZGVyLnBsOiBBZGRlZC4KKyAgICAgICAgICAtIEFk
ZGVkIDY0IHVuaXQgdGVzdHMgZm9yIHBhcnNlRGlmZkhlYWRlcigpLgorCiAyMDEwLTAxLTA5ICBE
YW5pZWwgQmF0ZXMgIDxkYmF0ZXNAd2Via2l0Lm9yZz4KIAogICAgICAgICBObyByZXZpZXcsIHJv
bGxpbmcgb3V0IHI1MzA0NC4KSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHMucG0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbQkocmV2aXNpb24g
NTMwNDUpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzLnBtCSh3b3JraW5nIGNvcHkp
CkBAIC0zNjUsOCArMzY1LDcgQEAgc3ViIHN2blN0YXR1cygkKQogc3ViIGdpdGRpZmYyc3ZuZGlm
ZigkKQogewogICAgICRfID0gc2hpZnQgQF87Ci0gICAgCi0gICAgIyBcViBpcyBhbnkgY2hhcmFj
dGVyIHRoYXQgaXMgbm90IHZlcnRpY2FsIHdoaXRlIHNwYWNlCisKICAgICBpZiAobSNeZGlmZiAt
LWdpdCBcdy8oLispIFx3LyhbXlxyXG5dKykjKSB7CiAgICAgICAgIHJldHVybiAiSW5kZXg6ICQx
JFBPU1RNQVRDSCI7CiAgICAgfQpAQCAtMzgyLDYgKzM4MSw4NiBAQCBzdWIgZ2l0ZGlmZjJzdm5k
aWZmKCQpCiAgICAgcmV0dXJuICRfOwogfQogCisjIFBhcnNlIHRoZSBuZXh0IGRpZmYgaGVhZGVy
IGZyb20gdGhlIGdpdmVuIGZpbGUgaGFuZGxlLCBhbmQgYWR2YW5jZQorIyB0aGUgZmlsZSBoYW5k
bGUgc28gdGhlIGxhc3QgbGluZSByZWFkIGlzIHRoZSBmaXJzdCBsaW5lIGFmdGVyIHRoZQorIyBw
YXJzZWQgaGVhZGVyIGJsb2NrLgorIworIyBUaGlzIHN1YnJvdXRpbmUgZGllcyBpZiBnaXZlbiBs
ZWFkaW5nIGp1bmsuCisjCisjIEFyZ3M6CisjICAgJGZpbGVIYW5kbGU6IGFkdmFuY2VkIHNvIHRo
ZSBsYXN0IGxpbmUgcmVhZCBpcyB0aGUgZmlyc3QgbGluZSBvZiB0aGUKKyMgICAgICAgICAgICAg
ICAgbmV4dCBkaWZmIGhlYWRlci4gRm9yIFNWTi1mb3JtYXR0ZWQgZGlmZnMsIHRoaXMgaXMgdGhl
CisjICAgICAgICAgICAgICAgICJJbmRleDogIiBsaW5lLgorIyAgICRsYXN0UmVhZExpbmU6IHRo
ZSBsYXN0IGxpbmUgcmVhZCBmcm9tICRmaWxlSGFuZGxlCisjCisjIFJldHVybnMgKCRoZWFkZXJI
YXNoUmVmLCAkZm91bmRIZWFkZXJFbmRpbmcsICRsYXN0UmVhZExpbmUpOgorIyAgICRoZWFkZXJI
YXNoUmVmOiBhIGhhc2ggcmVmZXJlbmNlIHJlcHJlc2VudGluZyBhIGRpZmYgaGVhZGVyCisjICAg
ICBjb3BpZWRGcm9tUGF0aDoKKyMgICAgIGNvcGllZEZyb21WZXJzaW9uOgorIyAgICAgaW5kZXhQ
YXRoOgorIyAgICAgc3ZuQ29udmVydGVkVGV4dDogaGVhZGVyIHRleHQgY29udmVydGVkIHRvIFNW
TiBmb3JtYXQuIFVucmVjb2duaXplZAorIyAgICAgICAgICAgICAgICAgICAgICAgR2l0IGxpbmVz
IGFyZSBsZWZ0IGFsb25lLgorIyAgICAgdmVyc2lvbjoKKyMgICAkZm91bmRIZWFkZXJFbmRpbmc6
IHdoZXRoZXIgdGhlIGxhc3QgaGVhZGVyIGJsb2NrIGxpbmUgd2FzIGZvdW5kLgorIyAgICAgICAg
ICAgICAgICAgICAgICAgVGhpcyBpcyBhIGxpbmUgYmVnaW5uaW5nIHdpdGggIisrKyIuCisjICAg
JGxhc3RSZWFkTGluZToKK3N1YiBwYXJzZURpZmZIZWFkZXIoJCQpCit7CisgICAgbXkgKCRmaWxl
SGFuZGxlLCAkbGluZSkgPSBAXzsKKworICAgIG15ICRmaWx0ZXI7CisgICAgaWYgKCRsaW5lID1+
IG0jXmRpZmYgLS1naXQgIykgeworICAgICAgICAkZmlsdGVyID0gXCZnaXRkaWZmMnN2bmRpZmY7
CisgICAgfQorICAgICRsaW5lID0gJiRmaWx0ZXIoJGxpbmUpIGlmICRmaWx0ZXI7CisKKyAgICBt
eSAkaW5kZXhQYXRoOworICAgIGlmICgkbGluZSA9fiAvXkluZGV4OiAoW15cclxuXSspLykgewor
ICAgICAgICAkaW5kZXhQYXRoID0gJDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGllKCJDb3Vs
ZCBub3QgcGFyc2UgZmlyc3QgbGluZSBvZiBkaWZmIGhlYWRlcjogXCIkbGluZVwiLiIpOworICAg
IH0KKworICAgIG15ICVoZWFkZXI7CisKKyAgICBteSAkZm91bmRIZWFkZXJFbmRpbmcgPSAwOwor
ICAgIG15ICRsYXN0UmVhZExpbmU7CisgICAgbXkgJHN2bkNvbnZlcnRlZFRleHQgPSAkbGluZTsK
KyAgICB3aGlsZSAoPCRmaWxlSGFuZGxlPikgeworICAgICAgICAjIFRlbXBvcmFyaWx5IHN0cmlw
IG9mZiBhbnkgZW5kLW9mLWxpbmUgY2hhcmFjdGVycyB0byBzaW1wbGlmeQorICAgICAgICAjIHJl
Z2V4IG1hdGNoaW5nIGJlbG93LgorICAgICAgICBzLyhbXG5ccl0rKSQvLzsKKyAgICAgICAgbXkg
JGVvbCA9ICQxOworCisgICAgICAgICRfID0gJiRmaWx0ZXIoJF8pIGlmICRmaWx0ZXI7CisKKyAg
ICAgICAgIyBGaXggcGF0aHMgb24gImRpZmYiLCAiLS0tIiwgYW5kICIrKysiIGxpbmVzIHRvIG1h
dGNoIHRoZQorICAgICAgICAjIGxlYWRpbmcgaW5kZXggbGluZS4KKyAgICAgICAgcy9cUyskLyRp
bmRleFBhdGgvIGlmIC9eZGlmZi87ICMgRklYTUU6IENhbiB0aGlzIGV2ZXIgb2NjdXI/IElmIHNv
LCBpbmNsdWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAg
ICBhIHVuaXQgdGVzdC4gT3RoZXJ3aXNlLCByZW1vdmUgaXQuCisgICAgICAgIHMvXi0tLSBcUysv
LS0tICRpbmRleFBhdGgvOworICAgICAgICBpZiAoL14tLS0gLitcKGZyb20gKFxTKyk6KFxkKylc
KSQvKSB7CisgICAgICAgICAgICAkaGVhZGVye2NvcGllZEZyb21QYXRofSA9ICQxOworICAgICAg
ICAgICAgJGhlYWRlcntjb3BpZWRGcm9tVmVyc2lvbn0gPSAkMiBpZiAoJDIgIT0gMCk7CisgICAg
ICAgIH0gZWxzaWYgKC9eLS0tIC4rXChyZXZpc2lvbiAoXGQrKVwpJC8pIHsKKyAgICAgICAgICAg
ICRoZWFkZXJ7dmVyc2lvbn0gPSAkMSBpZiAoJDEgIT0gMCk7CisgICAgICAgIH0gZWxzaWYgKHMv
XlwrXCtcKyBcUysvKysrICRpbmRleFBhdGgvKSB7CisgICAgICAgICAgICAkZm91bmRIZWFkZXJF
bmRpbmcgPSAxOworICAgICAgICB9CisKKyAgICAgICAgJHN2bkNvbnZlcnRlZFRleHQgLj0gIiRf
JGVvbCI7ICMgQWxzbyByZXN0b3JlIEVPTCBjaGFyYWN0ZXJzLgorICAgICAgICBpZiAoJGZvdW5k
SGVhZGVyRW5kaW5nKSB7CisgICAgICAgICAgICAkbGFzdFJlYWRMaW5lID0gPCRmaWxlSGFuZGxl
PjsKKyAgICAgICAgICAgIGxhc3Q7CisgICAgICAgIH0KKyAgICB9ICMgJGxhc3RSZWFkTGluZSBp
cyB1bmRlZiBpZiB3aGlsZSBsb29wIHJhbiBvdXQuCisKKyAgICAkaGVhZGVye2luZGV4UGF0aH0g
PSAkaW5kZXhQYXRoOworICAgICRoZWFkZXJ7c3ZuQ29udmVydGVkVGV4dH0gPSAkc3ZuQ29udmVy
dGVkVGV4dDsKKworICAgIHJldHVybiAoXCVoZWFkZXIsICRmb3VuZEhlYWRlckVuZGluZywgJGxh
c3RSZWFkTGluZSk7Cit9CisKICMgSWYgcG9zc2libGUsIHJldHVybnMgYSBDaGFuZ2VMb2cgcGF0
Y2ggZXF1aXZhbGVudCB0byB0aGUgZ2l2ZW4gb25lLAogIyBidXQgd2l0aCB0aGUgbmV3ZXN0IENo
YW5nZUxvZyBlbnRyeSBpbnNlcnRlZCBhdCB0aGUgdG9wIG9mIHRoZQogIyBmaWxlIC0tIGkuZS4g
bm8gbGVhZGluZyBjb250ZXh0IGFuZCBhbGwgbGluZXMgc3RhcnRpbmcgd2l0aCAiKyIuCkluZGV4
OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvVkNTVXRpbHNfdW5pdHRlc3QvcGFyc2VE
aWZmSGVhZGVyLnBsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cGVy
bC9WQ1NVdGlsc191bml0dGVzdC9wYXJzZURpZmZIZWFkZXIucGwJKHJldmlzaW9uIDApCisrKyBX
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvVkNTVXRpbHNfdW5pdHRlc3QvcGFyc2VEaWZm
SGVhZGVyLnBsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4OSBAQAorIyEvdXNyL2Jpbi9wZXJs
IC13CisjCisjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2hyaXMuamVyZG9u
ZWtAZ21haWwuY29tKQorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6Cisj
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisjIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyMg
VW5pdCB0ZXN0cyBvZiBwYXJzZURpZmZIZWFkZXIoKS4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJu
aW5nczsKKwordXNlIFRlc3Q6Ok1vcmU7Cit1c2UgVkNTVXRpbHM7CisKK215IEBoZWFkZXJLZXlz
ID0gKCAjIFRoZSAkaGVhZGVySGFzaFJlZiBrZXlzIHRvIGNoZWNrLgorICAgICJjb3BpZWRGcm9t
UGF0aCIsCisgICAgImNvcGllZEZyb21WZXJzaW9uIiwKKyAgICAiaW5kZXhQYXRoIiwKKyAgICAi
c3ZuQ29udmVydGVkVGV4dCIsCisgICAgInZlcnNpb24iLAorKTsKKworIyBUZXN0IHBhcnNlRGlm
ZkhlYWRlcigpIGZvciB0aGUgZ2l2ZW4gJGRpZmZUZXN0SGFzaFJlZi4KK3N1YiBkb0RpZmZUZXN0
KCQpCit7CisgICAgbXkgKCRkaWZmVGVzdEhhc2hSZWYpID0gQF87CisKKyAgICBteSAkZmlsZUhh
bmRsZTsKKyAgICBvcGVuKCRmaWxlSGFuZGxlLCAiPCIsIFwkZGlmZlRlc3RIYXNoUmVmLT57aW5w
dXRUZXh0fSk7CisKKyAgICBteSAkbGluZSA9IDwkZmlsZUhhbmRsZT47CisKKyAgICBteSAoJGhl
YWRlckhhc2hSZWYsICRmb3VuZEhlYWRlckVuZGluZywgJGxhc3RSZWFkTGluZSkgPSBWQ1NVdGls
czo6cGFyc2VEaWZmSGVhZGVyKCRmaWxlSGFuZGxlLCAkbGluZSk7CisKKyAgICBteSAkdGl0bGVI
ZWFkZXIgPSAicGFyc2VEaWZmSGVhZGVyKCk6IFskZGlmZlRlc3RIYXNoUmVmLT57ZGlmZk5hbWV9
XSAiOworICAgIG15ICR0aXRsZTsKKworICAgIGZvcmVhY2ggbXkgJGhlYWRlcktleSAoQGhlYWRl
cktleXMpIHsKKyAgICAgICAgbXkgJHRpdGxlID0gIiR7dGl0bGVIZWFkZXJ9a2V5PVwiJGhlYWRl
cktleVwiIjsKKyAgICAgICAgaXMoJGhlYWRlckhhc2hSZWYtPnskaGVhZGVyS2V5fSwgJGRpZmZU
ZXN0SGFzaFJlZi0+eyRoZWFkZXJLZXl9LCAkdGl0bGUpOworICAgIH0KKworICAgIGlzKCRmb3Vu
ZEhlYWRlckVuZGluZywgJGRpZmZUZXN0SGFzaFJlZi0+e2ZvdW5kSGVhZGVyRW5kaW5nfSwgIiR7
dGl0bGVIZWFkZXJ9bGFzdFJlYWRMaW5lIik7CisgICAgaXMoJGxhc3RSZWFkTGluZSwgJGRpZmZU
ZXN0SGFzaFJlZi0+e2xhc3RSZWFkTGluZX0sICIke3RpdGxlSGVhZGVyfWxhc3RSZWFkTGluZSIp
OworCisgICAgbXkgJG5leHRMaW5lID0gPCRmaWxlSGFuZGxlPjsKKyAgICBpcygkbmV4dExpbmUs
ICRkaWZmVGVzdEhhc2hSZWYtPntuZXh0TGluZX0sICIke3RpdGxlSGVhZGVyfW5leHRMaW5lIik7
Cit9CisKK215IEBkaWZmVGVzdHMgPSAoeworICAgICMgTmV3IHRlc3Q6IG1pc3NpbmcgY2xvc2lu
ZyBoZWFkZXIgbGluZQorICAgIGRpZmZOYW1lID0+ICJTVk46IGluY29tcGxldGUgaGVhZGVyIiwK
KyAgICBpbnB1dFRleHQgPT4gPDwnRU5EJywKK0luZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL1ZD
U1V0aWxzLnBtCitFTkQKKyAgICAjIEhlYWRlciBrZXlzIHRvIGNoZWNrCisgICAgc3ZuQ29udmVy
dGVkVGV4dCA9PiA8PCdFTkQnLAorSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHMu
cG0KK0VORAorICAgIGNvcGllZEZyb21QYXRoID0+IHVuZGVmLAorICAgIGNvcGllZEZyb21WZXJz
aW9uID0+IHVuZGVmLAorICAgIGluZGV4UGF0aCA9PiAiV2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NV
dGlscy5wbSIsCisgICAgdmVyc2lvbiA9PiB1bmRlZiwKKyAgICAjIE90aGVyIHZhbHVlcyB0byBj
aGVjaworICAgIGZvdW5kSGVhZGVyRW5kaW5nID0+IDAsCisgICAgbGFzdFJlYWRMaW5lID0+IHVu
ZGVmLAorICAgIG5leHRMaW5lID0+IHVuZGVmLAorfSwKK3sKKyAgICAjIE5ldyB0ZXN0CisgICAg
ZGlmZk5hbWUgPT4gIlNWTjogc2ltcGxlIiwKKyAgICBpbnB1dFRleHQgPT4gPDwnRU5EJywKK0lu
ZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzLnBtCis9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gV2Vi
S2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbQkocmV2aXNpb24gNTMwMDQpCisrKysgV2ViS2l0
VG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbQkod29ya2luZyBjb3B5KQorQEAgLTMyLDYgKzMyLDcg
QEAgdXNlIHN0cmljdDsKKyB1c2Ugd2FybmluZ3M7CitFTkQKKyAgICAjIEhlYWRlciBrZXlzIHRv
IGNoZWNrCisgICAgc3ZuQ29udmVydGVkVGV4dCA9PiA8PCdFTkQnLAorSW5kZXg6IFdlYktpdFRv
b2xzL1NjcmlwdHMvVkNTVXRpbHMucG0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBXZWJLaXRUb29scy9TY3Jp
cHRzL1ZDU1V0aWxzLnBtCShyZXZpc2lvbiA1MzAwNCkKKysrKyBXZWJLaXRUb29scy9TY3JpcHRz
L1ZDU1V0aWxzLnBtCSh3b3JraW5nIGNvcHkpCitFTkQKKyAgICBjb3BpZWRGcm9tUGF0aCA9PiB1
bmRlZiwKKyAgICBjb3BpZWRGcm9tVmVyc2lvbiA9PiB1bmRlZiwKKyAgICBpbmRleFBhdGggPT4g
IldlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHMucG0iLAorICAgIHZlcnNpb24gPT4gIjUzMDA0
IiwKKyAgICAjIE90aGVyIHZhbHVlcyB0byBjaGVjaworICAgIGZvdW5kSGVhZGVyRW5kaW5nID0+
IDEsCisgICAgbGFzdFJlYWRMaW5lID0+ICJAQCAtMzIsNiArMzIsNyBAQCB1c2Ugc3RyaWN0O1xu
IiwKKyAgICBuZXh0TGluZSA9PiAiIHVzZSB3YXJuaW5ncztcbiIsCit9LAoreworICAgICMgTmV3
IHRlc3QKKyAgICBkaWZmTmFtZSA9PiAiU1ZOOiBuZXcgZmlsZSIsCisgICAgaW5wdXRUZXh0ID0+
IDw8J0VORCcsCitJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL1ZDU1V0aWxz
X3VuaXR0ZXN0L3BhcnNlRGlmZkhlYWRlci5wbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFdlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cGVybC9WQ1NVdGlsc191bml0dGVzdC9wYXJzZURpZmZIZWFkZXIucGwJ
KHJldmlzaW9uIDApCisrKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL1ZDU1V0aWxz
X3VuaXR0ZXN0L3BhcnNlRGlmZkhlYWRlci5wbAkocmV2aXNpb24gMCkKK0BAIC0wLDAgKzEsMjYy
IEBACisrIyEvdXNyL2Jpbi9wZXJsIC13CitFTkQKKyAgICAjIEhlYWRlciBrZXlzIHRvIGNoZWNr
CisgICAgc3ZuQ29udmVydGVkVGV4dCA9PiA8PCdFTkQnLAorSW5kZXg6IFdlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cGVybC9WQ1NVdGlsc191bml0dGVzdC9wYXJzZURpZmZIZWFkZXIucGwKKz09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KKy0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvVkNTVXRpbHNfdW5p
dHRlc3QvcGFyc2VEaWZmSGVhZGVyLnBsCShyZXZpc2lvbiAwKQorKysrIFdlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cGVybC9WQ1NVdGlsc191bml0dGVzdC9wYXJzZURpZmZIZWFkZXIucGwJKHJl
dmlzaW9uIDApCitFTkQKKyAgICBjb3BpZWRGcm9tUGF0aCA9PiB1bmRlZiwKKyAgICBjb3BpZWRG
cm9tVmVyc2lvbiA9PiB1bmRlZiwKKyAgICBpbmRleFBhdGggPT4gIldlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cGVybC9WQ1NVdGlsc191bml0dGVzdC9wYXJzZURpZmZIZWFkZXIucGwiLAorICAg
IHZlcnNpb24gPT4gdW5kZWYsCisgICAgIyBPdGhlciB2YWx1ZXMgdG8gY2hlY2sKKyAgICBmb3Vu
ZEhlYWRlckVuZGluZyA9PiAxLAorICAgIGxhc3RSZWFkTGluZSA9PiAiQEAgLTAsMCArMSwyNjIg
QEBcbiIsCisgICAgbmV4dExpbmUgPT4gIisjIS91c3IvYmluL3BlcmwgLXdcbiIsCit9LAorewor
ICAgICMgTmV3IHRlc3QKKyAgICBkaWZmTmFtZSA9PiAiU1ZOOiBjb3B5IiwKKyAgICBpbnB1dFRl
eHQgPT4gPDwnRU5EJywKK0luZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L21vdmVf
dGVzdC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQorLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbW92
ZV90ZXN0LnB5CShyZXZpc2lvbiA1MzA0NykJKGZyb20gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9fX2luaXRfXy5weTo1MzA0OCkKKysrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L21vdmVfdGVzdC5weQkod29ya2luZyBjb3B5KQorQEAgLTAsMCArMSw3IEBACisrIyBSZXF1aXJl
ZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCitF
TkQKKyAgICAjIEhlYWRlciBrZXlzIHRvIGNoZWNrCisgICAgc3ZuQ29udmVydGVkVGV4dCA9PiA8
PCdFTkQnLAorSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbW92ZV90ZXN0LnB5
Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CistLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9tb3ZlX3Rlc3Qu
cHkJKHJldmlzaW9uIDUzMDQ3KQkoZnJvbSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L19f
aW5pdF9fLnB5OjUzMDQ4KQorKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbW92ZV90
ZXN0LnB5CSh3b3JraW5nIGNvcHkpCitFTkQKKyAgICBjb3BpZWRGcm9tUGF0aCA9PiAiV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9fX2luaXRfXy5weSIsCisgICAgY29waWVkRnJvbVZlcnNp
b24gPT4gIjUzMDQ4IiwKKyAgICBpbmRleFBhdGggPT4gIldlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbW92ZV90ZXN0LnB5IiwKKyAgICB2ZXJzaW9uID0+IHVuZGVmLAorICAgICMgT3RoZXIg
dmFsdWVzIHRvIGNoZWNrCisgICAgZm91bmRIZWFkZXJFbmRpbmcgPT4gMSwKKyAgICBsYXN0UmVh
ZExpbmUgPT4gIkBAIC0wLDAgKzEsNyBAQFxuIiwKKyAgICBuZXh0TGluZSA9PiAiKyMgUmVxdWly
ZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlc1xu
IiwKK30sCit7CisgICAgIyBOZXcgdGVzdAorICAgIGRpZmZOYW1lID0+ICJTVk46IFxcclxcbiBs
aW5lcyIsCisgICAgaW5wdXRUZXh0ID0+IDw8RU5ELCAjIE5vIHNpbmdsZSBxdW90ZXMgdG8gYWxs
b3cgaW50ZXJwb2xhdGlvbiBvZiAiXHIiCitJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9tb3ZlX3Rlc3QucHlccgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyCistLS0gV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9tb3ZlX3Rlc3QucHkJKHJldmlzaW9uIDUzMDQ3KQkoZnJvbSBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L19faW5pdF9fLnB5OjUzMDQ4KVxyCisrKysgV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9tb3ZlX3Rlc3QucHkJKHdvcmtpbmcgY29weSlccgorQEAgLTAsMCAr
MSw3IEBAXHIKKysjIFJlcXVpcmVkIGZvciBQeXRob24gdG8gc2VhcmNoIHRoaXMgZGlyZWN0b3J5
IGZvciBtb2R1bGUgZmlsZXNccgorRU5ECisgICAgIyBIZWFkZXIga2V5cyB0byBjaGVjaworICAg
IHN2bkNvbnZlcnRlZFRleHQgPT4gPDxFTkQsICMgTm8gc2luZ2xlIHF1b3RlcyB0byBhbGxvdyBp
bnRlcnBvbGF0aW9uIG9mICJcciIKK0luZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L21vdmVfdGVzdC5weVxyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09XHIKKy0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L21vdmVfdGVzdC5weQkocmV2aXNpb24gNTMwNDcpCShmcm9tIFdlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvX19pbml0X18ucHk6NTMwNDgpXHIKKysrKyBXZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L21vdmVfdGVzdC5weQkod29ya2luZyBjb3B5KVxyCitFTkQKKyAgICBjb3Bp
ZWRGcm9tUGF0aCA9PiAiV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9fX2luaXRfXy5weSIs
CisgICAgY29waWVkRnJvbVZlcnNpb24gPT4gIjUzMDQ4IiwKKyAgICBpbmRleFBhdGggPT4gIldl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbW92ZV90ZXN0LnB5IiwKKyAgICB2ZXJzaW9uID0+
IHVuZGVmLAorICAgICMgT3RoZXIgdmFsdWVzIHRvIGNoZWNrCisgICAgZm91bmRIZWFkZXJFbmRp
bmcgPT4gMSwKKyAgICBsYXN0UmVhZExpbmUgPT4gIkBAIC0wLDAgKzEsNyBAQFxyXG4iLAorICAg
IG5leHRMaW5lID0+ICIrIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVj
dG9yeSBmb3IgbW9kdWxlIGZpbGVzXHJcbiIsCit9LAoreworICAgICMgTmV3IHRlc3QKKyAgICBk
aWZmTmFtZSA9PiAiU1ZOOiBwYXRoIGNvcnJlY3Rpb25zIiwKKyAgICBpbnB1dFRleHQgPT4gPDwn
RU5EJywKK0luZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L21vdmVfdGVzdC5weQor
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQorLS0tIGJhZF9wYXRoCShyZXZpc2lvbiA1MzA0NykJKGZyb20gV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9fX2luaXRfXy5weTo1MzA0OCkKKysrKyBiYWRfcGF0aAkod29y
a2luZyBjb3B5KQorQEAgLTAsMCArMSw3IEBACisrIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNl
YXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCitFTkQKKyAgICAjIEhlYWRlciBr
ZXlzIHRvIGNoZWNrCisgICAgc3ZuQ29udmVydGVkVGV4dCA9PiA8PCdFTkQnLAorSW5kZXg6IFdl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbW92ZV90ZXN0LnB5Cis9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0g
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9tb3ZlX3Rlc3QucHkJKHJldmlzaW9uIDUzMDQ3
KQkoZnJvbSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L19faW5pdF9fLnB5OjUzMDQ4KQor
KysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbW92ZV90ZXN0LnB5CSh3b3JraW5nIGNv
cHkpCitFTkQKKyAgICBjb3BpZWRGcm9tUGF0aCA9PiAiV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9fX2luaXRfXy5weSIsCisgICAgY29waWVkRnJvbVZlcnNpb24gPT4gIjUzMDQ4IiwKKyAg
ICBpbmRleFBhdGggPT4gIldlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbW92ZV90ZXN0LnB5
IiwKKyAgICB2ZXJzaW9uID0+IHVuZGVmLAorICAgICMgT3RoZXIgdmFsdWVzIHRvIGNoZWNrCisg
ICAgZm91bmRIZWFkZXJFbmRpbmcgPT4gMSwKKyAgICBsYXN0UmVhZExpbmUgPT4gIkBAIC0wLDAg
KzEsNyBAQFxuIiwKKyAgICBuZXh0TGluZSA9PiAiKyMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBz
ZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlc1xuIiwKK30sCit7CisgICAgIyBO
ZXcgdGVzdAorICAgIGRpZmZOYW1lID0+ICJHaXQ6IHNpbXBsZSIsCisgICAgaW5wdXRUZXh0ID0+
IDw8J0VORCcsCitkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVGbGV4
aWJsZUJveERhdGEuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlRmxleGlibGVCb3hE
YXRhLmgKK2luZGV4IGY1ZDVlNzQuLjNiNmFhOTIgMTAwNjQ0CistLS0gYS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9TdHlsZUZsZXhpYmxlQm94RGF0YS5oCisrKysgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZUZsZXhpYmxlQm94RGF0YS5oCitAQCAtNDcsNyArNDcsNiBAQCBwdWJsaWM6
CitFTkQKKyAgICAjIEhlYWRlciBrZXlzIHRvIGNoZWNrCisgICAgc3ZuQ29udmVydGVkVGV4dCA9
PiA8PCdFTkQnLAorSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlRmxleGlibGVC
b3hEYXRhLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KKy0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUZs
ZXhpYmxlQm94RGF0YS5oCisrKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVGbGV4aWJs
ZUJveERhdGEuaAorRU5ECisgICAgY29waWVkRnJvbVBhdGggPT4gdW5kZWYsCisgICAgY29waWVk
RnJvbVZlcnNpb24gPT4gdW5kZWYsCisgICAgaW5kZXhQYXRoID0+ICJXZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZUZsZXhpYmxlQm94RGF0YS5oIiwKKyAgICB2ZXJzaW9uID0+IHVuZGVmLAor
ICAgICMgT3RoZXIgdmFsdWVzIHRvIGNoZWNrCisgICAgZm91bmRIZWFkZXJFbmRpbmcgPT4gMSwK
KyAgICBsYXN0UmVhZExpbmUgPT4gIkBAIC00Nyw3ICs0Nyw2IEBAIHB1YmxpYzpcbiIsCisgICAg
bmV4dExpbmUgPT4gdW5kZWYsCit9LAoreworICAgICMgTmV3IHRlc3QKKyAgICBkaWZmTmFtZSA9
PiAiR2l0OiB1bnJlY29nbml6ZWQgbGluZXMiLAorICAgIGlucHV0VGV4dCA9PiA8PCdFTkQnLAor
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvbGlzdGVuZXIveHNz
LWluYWN0aXZlLWNsb3N1cmUuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
bGlzdGVuZXIveHNzLWluYWN0aXZlLWNsb3N1cmUuaHRtbAorbmV3IGZpbGUgbW9kZSAxMDA2NDQK
K2luZGV4IDAwMDAwMDAuLjNjOWYxMTQKKy0tLSAvZGV2L251bGwKKysrKyBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkvbGlzdGVuZXIveHNzLWluYWN0aXZlLWNsb3N1cmUuaHRtbAor
QEAgLTAsMCArMSwzNCBAQAorKzxodG1sPgorRU5ECisgICAgIyBIZWFkZXIga2V5cyB0byBjaGVj
aworICAgIHN2bkNvbnZlcnRlZFRleHQgPT4gPDwnRU5EJywKK0luZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3NlY3VyaXR5L2xpc3RlbmVyL3hzcy1pbmFjdGl2ZS1jbG9zdXJlLmh0bWwKK25l
dyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zYzlmMTE0CistLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS9saXN0ZW5lci94c3MtaW5hY3RpdmUtY2xvc3VyZS5odG1s
CisrKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9saXN0ZW5lci94c3MtaW5hY3Rp
dmUtY2xvc3VyZS5odG1sCitFTkQKKyAgICBjb3BpZWRGcm9tUGF0aCA9PiB1bmRlZiwKKyAgICBj
b3BpZWRGcm9tVmVyc2lvbiA9PiB1bmRlZiwKKyAgICBpbmRleFBhdGggPT4gIkxheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkvbGlzdGVuZXIveHNzLWluYWN0aXZlLWNsb3N1cmUuaHRtbCIs
CisgICAgdmVyc2lvbiA9PiB1bmRlZiwKKyAgICAjIE90aGVyIHZhbHVlcyB0byBjaGVjaworICAg
IGZvdW5kSGVhZGVyRW5kaW5nID0+IDEsCisgICAgbGFzdFJlYWRMaW5lID0+ICJAQCAtMCwwICsx
LDM0IEBAXG4iLAorICAgIG5leHRMaW5lID0+ICIrPGh0bWw+XG4iLAorfSwKKyk7CisKK3BsYW4g
dGVzdHMgPT4gQGRpZmZUZXN0cyAqIDg7CisKK2ZvcmVhY2ggbXkgJGRpZmZUZXN0SGFzaFJlZiAo
QGRpZmZUZXN0cykgeworICAgIGRvRGlmZlRlc3QoJGRpZmZUZXN0SGFzaFJlZik7Cit9Cg==
</data>
<flag name="commit-queue"
          id="28466"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46250</attachid>
            <date>2010-01-10 18:05:46 -0800</date>
            <delta_ts>2010-01-10 19:36:51 -0800</delta_ts>
            <desc>Proposed patch 3</desc>
            <filename>patch-tools7-3.txt</filename>
            <type>text/plain</type>
            <size>16253</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUzMDUwKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAtMDEtMTAgIENocmlzIEplcmRvbmVrICA8
Y2hyaXMuamVyZG9uZWtAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENyZWF0ZWQgYSB1bml0LXRlc3RlZCBmdW5jdGlvbiB0byBwYXJz
ZSB0aGUgaGVhZGVyIGJsb2NrIG9mCisgICAgICAgIGEgR2l0IG9yIFNWTiBkaWZmIC0tIGZvciBm
dXR1cmUgcmVmYWN0b3Jpbmcgb2Ygc3ZuLWFwcGx5IGFuZAorICAgICAgICBzdm4tdW5hcHBseS4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM0NDcK
KworICAgICAgICAqIFNjcmlwdHMvVkNTVXRpbHMucG06CisgICAgICAgICAgLSBBZGRlZCBwYXJz
ZURpZmZIZWFkZXIoKS4KKyAgICAgICAgICAtIFJlbW92ZWQgaXJyZWxldmFudCBjb21tZW50IGZy
b20gZ2l0ZGlmZjJzdm5kaWZmKCkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBlcmwvVkNT
VXRpbHNfdW5pdHRlc3QvcGFyc2VEaWZmSGVhZGVyLnBsOiBBZGRlZC4KKyAgICAgICAgICAtIEFk
ZGVkIDQ4IHVuaXQgdGVzdHMgZm9yIHBhcnNlRGlmZkhlYWRlcigpLgorCiAyMDEwLTAxLTA5ICBE
YW5pZWwgQmF0ZXMgIDxkYmF0ZXNAd2Via2l0Lm9yZz4KIAogICAgICAgICBObyByZXZpZXcsIHJv
bGxpbmcgb3V0IHI1MzA0NC4KSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHMucG0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbQkocmV2aXNpb24g
NTMwNDUpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzLnBtCSh3b3JraW5nIGNvcHkp
CkBAIC0zNjUsOCArMzY1LDcgQEAgc3ViIHN2blN0YXR1cygkKQogc3ViIGdpdGRpZmYyc3ZuZGlm
ZigkKQogewogICAgICRfID0gc2hpZnQgQF87Ci0gICAgCi0gICAgIyBcViBpcyBhbnkgY2hhcmFj
dGVyIHRoYXQgaXMgbm90IHZlcnRpY2FsIHdoaXRlIHNwYWNlCisKICAgICBpZiAobSNeZGlmZiAt
LWdpdCBcdy8oLispIFx3LyhbXlxyXG5dKykjKSB7CiAgICAgICAgIHJldHVybiAiSW5kZXg6ICQx
JFBPU1RNQVRDSCI7CiAgICAgfQpAQCAtMzgyLDYgKzM4MSw4OCBAQCBzdWIgZ2l0ZGlmZjJzdm5k
aWZmKCQpCiAgICAgcmV0dXJuICRfOwogfQogCisjIFBhcnNlIHRoZSBuZXh0IGRpZmYgaGVhZGVy
IGZyb20gdGhlIGdpdmVuIGZpbGUgaGFuZGxlLCBhbmQgYWR2YW5jZQorIyB0aGUgZmlsZSBoYW5k
bGUgc28gdGhlIGxhc3QgbGluZSByZWFkIGlzIHRoZSBmaXJzdCBsaW5lIGFmdGVyIHRoZQorIyBw
YXJzZWQgaGVhZGVyIGJsb2NrLgorIworIyBUaGlzIHN1YnJvdXRpbmUgZGllcyBpZiBnaXZlbiBs
ZWFkaW5nIGp1bmsuCisjCisjIEFyZ3M6CisjICAgJGZpbGVIYW5kbGU6IGFkdmFuY2VkIHNvIHRo
ZSBsYXN0IGxpbmUgcmVhZCBpcyB0aGUgZmlyc3QgbGluZSBvZiB0aGUKKyMgICAgICAgICAgICAg
ICAgbmV4dCBkaWZmIGhlYWRlci4gRm9yIFNWTi1mb3JtYXR0ZWQgZGlmZnMsIHRoaXMgaXMgdGhl
CisjICAgICAgICAgICAgICAgICJJbmRleDoiIGxpbmUuCisjICAgJGxpbmU6IHRoZSBsaW5lIGxh
c3QgcmVhZCBmcm9tICRmaWxlSGFuZGxlCisjCisjIFJldHVybnMgKCRoZWFkZXJIYXNoUmVmLCAk
Zm91bmRIZWFkZXJFbmRpbmcsICRsYXN0UmVhZExpbmUpOgorIyAgICRoZWFkZXJIYXNoUmVmOiBh
IGhhc2ggcmVmZXJlbmNlIHJlcHJlc2VudGluZyBhIGRpZmYgaGVhZGVyCisjICAgICBjb3BpZWRG
cm9tUGF0aDogdGhlIHBhdGggaW4gdGhlICJmcm9tIiBjbGF1c2UsIGlmIGFueS4KKyMgICAgIGNv
cGllZEZyb21WZXJzaW9uOiB0aGUgcmV2aXNpb24gbnVtYmVyIGluIHRoZSAiZnJvbSIgY2xhdXNl
LCBpZiBhbnkuCisjICAgICBpbmRleFBhdGg6IHRoZSBwYXRoIGluIHRoZSAiSW5kZXg6IiBsaW5l
LgorIyAgICAgc3ZuQ29udmVydGVkVGV4dDogdGhlIGhlYWRlciB0ZXh0IGNvbnZlcnRlZCB0byBT
Vk4gZm9ybWF0LgorIyAgICAgICAgICAgICAgICAgICAgICAgVW5yZWNvZ25pemVkIEdpdCBsaW5l
cyBhcmUgbGVmdCBhbG9uZS4KKyMgICAgIHZlcnNpb246IHRoZSByZXZpc2lvbiBudW1iZXIgb2Yg
dGhlIHNvdXJjZS4KKyMgICAkZm91bmRIZWFkZXJFbmRpbmc6IHdoZXRoZXIgdGhlIGxhc3QgaGVh
ZGVyIGJsb2NrIGxpbmUgd2FzIGZvdW5kLgorIyAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBp
cyBhIGxpbmUgYmVnaW5uaW5nIHdpdGggIisrKyIuCisjICAgJGxhc3RSZWFkTGluZTogdGhlIGxp
bmUgbGFzdCByZWFkIGZyb20gJGZpbGVIYW5kbGUuIElmIEVPRiBoYXMgbm90CisjICAgICAgICAg
ICAgICAgICAgYmVlbiByZWFjaGVkLCB0aGlzIGlzIHRoZSBmaXJzdCBsaW5lIGFmdGVyIHRoZQor
IyAgICAgICAgICAgICAgICAgIGhlYWRlciBlbmRpbmcuCitzdWIgcGFyc2VEaWZmSGVhZGVyKCQk
KQoreworICAgIG15ICgkZmlsZUhhbmRsZSwgJGxpbmUpID0gQF87CisKKyAgICBteSAkZmlsdGVy
OworICAgIGlmICgkbGluZSA9fiBtI15kaWZmIC0tZ2l0ICMpIHsKKyAgICAgICAgJGZpbHRlciA9
IFwmZ2l0ZGlmZjJzdm5kaWZmOworICAgIH0KKyAgICAkbGluZSA9ICYkZmlsdGVyKCRsaW5lKSBp
ZiAkZmlsdGVyOworCisgICAgbXkgJGluZGV4UGF0aDsKKyAgICBpZiAoJGxpbmUgPX4gL15JbmRl
eDogKFteXHJcbl0rKS8pIHsKKyAgICAgICAgJGluZGV4UGF0aCA9ICQxOworICAgIH0gZWxzZSB7
CisgICAgICAgIGRpZSgiQ291bGQgbm90IHBhcnNlIGZpcnN0IGxpbmUgb2YgZGlmZiBoZWFkZXI6
IFwiJGxpbmVcIi4iKTsKKyAgICB9CisKKyAgICBteSAlaGVhZGVyOworCisgICAgbXkgJGZvdW5k
SGVhZGVyRW5kaW5nID0gMDsKKyAgICBteSAkbGFzdFJlYWRMaW5lOworICAgIG15ICRzdm5Db252
ZXJ0ZWRUZXh0ID0gJGxpbmU7CisgICAgd2hpbGUgKDwkZmlsZUhhbmRsZT4pIHsKKyAgICAgICAg
IyBUZW1wb3JhcmlseSBzdHJpcCBvZmYgYW55IGVuZC1vZi1saW5lIGNoYXJhY3RlcnMgdG8gc2lt
cGxpZnkKKyAgICAgICAgIyByZWdleCBtYXRjaGluZyBiZWxvdy4KKyAgICAgICAgcy8oW1xuXHJd
KykkLy87CisgICAgICAgIG15ICRlb2wgPSAkMTsKKworICAgICAgICAkXyA9ICYkZmlsdGVyKCRf
KSBpZiAkZmlsdGVyOworCisgICAgICAgICMgRml4IHBhdGhzIG9uICJkaWZmIiwgIi0tLSIsIGFu
ZCAiKysrIiBsaW5lcyB0byBtYXRjaCB0aGUKKyAgICAgICAgIyBsZWFkaW5nIGluZGV4IGxpbmUu
CisgICAgICAgIHMvXFMrJC8kaW5kZXhQYXRoLyBpZiAvXmRpZmYvOyAjIEZJWE1FOiBDYW4gdGhp
cyBldmVyIG9jY3VyPyBJZiBzbywgaW5jbHVkZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIyAgICAgICAgYSB1bml0IHRlc3QuIE90aGVyd2lzZSwgcmVtb3ZlIGl0Lgor
ICAgICAgICBzL14tLS0gXFMrLy0tLSAkaW5kZXhQYXRoLzsKKyAgICAgICAgaWYgKC9eLS0tIC4r
XChmcm9tIChcUyspOihcZCspXCkkLykgeworICAgICAgICAgICAgJGhlYWRlcntjb3BpZWRGcm9t
UGF0aH0gPSAkMTsKKyAgICAgICAgICAgICRoZWFkZXJ7Y29waWVkRnJvbVZlcnNpb259ID0gJDIg
aWYgKCQyICE9IDApOworICAgICAgICB9IGVsc2lmICgvXi0tLSAuK1wocmV2aXNpb24gKFxkKylc
KSQvKSB7CisgICAgICAgICAgICAkaGVhZGVye3ZlcnNpb259ID0gJDEgaWYgKCQxICE9IDApOwor
ICAgICAgICB9IGVsc2lmIChzL15cK1wrXCsgXFMrLysrKyAkaW5kZXhQYXRoLykgeworICAgICAg
ICAgICAgJGZvdW5kSGVhZGVyRW5kaW5nID0gMTsKKyAgICAgICAgfQorCisgICAgICAgICRzdm5D
b252ZXJ0ZWRUZXh0IC49ICIkXyRlb2wiOyAjIEFsc28gcmVzdG9yZSBFT0wgY2hhcmFjdGVycy4K
KyAgICAgICAgaWYgKCRmb3VuZEhlYWRlckVuZGluZykgeworICAgICAgICAgICAgJGxhc3RSZWFk
TGluZSA9IDwkZmlsZUhhbmRsZT47CisgICAgICAgICAgICBsYXN0OworICAgICAgICB9CisgICAg
fSAjICRsYXN0UmVhZExpbmUgaXMgdW5kZWYgaWYgd2hpbGUgbG9vcCByYW4gb3V0LgorCisgICAg
JGhlYWRlcntpbmRleFBhdGh9ID0gJGluZGV4UGF0aDsKKyAgICAkaGVhZGVye3N2bkNvbnZlcnRl
ZFRleHR9ID0gJHN2bkNvbnZlcnRlZFRleHQ7CisKKyAgICByZXR1cm4gKFwlaGVhZGVyLCAkZm91
bmRIZWFkZXJFbmRpbmcsICRsYXN0UmVhZExpbmUpOworfQorCiAjIElmIHBvc3NpYmxlLCByZXR1
cm5zIGEgQ2hhbmdlTG9nIHBhdGNoIGVxdWl2YWxlbnQgdG8gdGhlIGdpdmVuIG9uZSwKICMgYnV0
IHdpdGggdGhlIG5ld2VzdCBDaGFuZ2VMb2cgZW50cnkgaW5zZXJ0ZWQgYXQgdGhlIHRvcCBvZiB0
aGUKICMgZmlsZSAtLSBpLmUuIG5vIGxlYWRpbmcgY29udGV4dCBhbmQgYWxsIGxpbmVzIHN0YXJ0
aW5nIHdpdGggIisiLgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL1ZDU1V0
aWxzX3VuaXR0ZXN0L3BhcnNlRGlmZkhlYWRlci5wbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHBlcmwvVkNTVXRpbHNfdW5pdHRlc3QvcGFyc2VEaWZmSGVhZGVyLnBs
CShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL1ZDU1V0aWxz
X3VuaXR0ZXN0L3BhcnNlRGlmZkhlYWRlci5wbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyODkg
QEAKKyMhL3Vzci9iaW4vcGVybCAtdworIworIyBDb3B5cmlnaHQgKEMpIDIwMTAgQ2hyaXMgSmVy
ZG9uZWsgKGNocmlzLmplcmRvbmVrQGdtYWlsLmNvbSkKKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgor
IyBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisjIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisjIFVuaXQgdGVzdHMgb2YgcGFyc2VEaWZmSGVhZGVyKCkuCisKK3Vz
ZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBUZXN0OjpNb3JlOwordXNlIFZDU1V0aWxz
OworCitteSBAaGVhZGVyS2V5cyA9ICggIyBUaGUgJGhlYWRlckhhc2hSZWYga2V5cyB0byBjaGVj
ay4KKyAgICAiY29waWVkRnJvbVBhdGgiLAorICAgICJjb3BpZWRGcm9tVmVyc2lvbiIsCisgICAg
ImluZGV4UGF0aCIsCisgICAgInN2bkNvbnZlcnRlZFRleHQiLAorICAgICJ2ZXJzaW9uIiwKKyk7
CisKKyMgVGVzdCBwYXJzZURpZmZIZWFkZXIoKSBmb3IgdGhlIGdpdmVuICRkaWZmVGVzdEhhc2hS
ZWYuCitzdWIgZG9EaWZmVGVzdCgkKQoreworICAgIG15ICgkZGlmZlRlc3RIYXNoUmVmKSA9IEBf
OworCisgICAgbXkgJGZpbGVIYW5kbGU7CisgICAgb3BlbigkZmlsZUhhbmRsZSwgIjwiLCBcJGRp
ZmZUZXN0SGFzaFJlZi0+e2lucHV0VGV4dH0pOworCisgICAgbXkgJGxpbmUgPSA8JGZpbGVIYW5k
bGU+OworCisgICAgbXkgKCRoZWFkZXJIYXNoUmVmLCAkZm91bmRIZWFkZXJFbmRpbmcsICRsYXN0
UmVhZExpbmUpID0gVkNTVXRpbHM6OnBhcnNlRGlmZkhlYWRlcigkZmlsZUhhbmRsZSwgJGxpbmUp
OworCisgICAgbXkgJHRpdGxlSGVhZGVyID0gInBhcnNlRGlmZkhlYWRlcigpOiBbJGRpZmZUZXN0
SGFzaFJlZi0+e2RpZmZOYW1lfV0gIjsKKyAgICBteSAkdGl0bGU7CisKKyAgICBmb3JlYWNoIG15
ICRoZWFkZXJLZXkgKEBoZWFkZXJLZXlzKSB7CisgICAgICAgIG15ICR0aXRsZSA9ICIke3RpdGxl
SGVhZGVyfWtleT1cIiRoZWFkZXJLZXlcIiI7CisgICAgICAgIGlzKCRoZWFkZXJIYXNoUmVmLT57
JGhlYWRlcktleX0sICRkaWZmVGVzdEhhc2hSZWYtPnskaGVhZGVyS2V5fSwgJHRpdGxlKTsKKyAg
ICB9CisKKyAgICBpcygkZm91bmRIZWFkZXJFbmRpbmcsICRkaWZmVGVzdEhhc2hSZWYtPntmb3Vu
ZEhlYWRlckVuZGluZ30sICIke3RpdGxlSGVhZGVyfWZvdW5kSGVhZGVyRW5kaW5nIik7CisgICAg
aXMoJGxhc3RSZWFkTGluZSwgJGRpZmZUZXN0SGFzaFJlZi0+e2xhc3RSZWFkTGluZX0sICIke3Rp
dGxlSGVhZGVyfWxhc3RSZWFkTGluZSIpOworCisgICAgbXkgJG5leHRMaW5lID0gPCRmaWxlSGFu
ZGxlPjsKKyAgICBpcygkbmV4dExpbmUsICRkaWZmVGVzdEhhc2hSZWYtPntuZXh0TGluZX0sICIk
e3RpdGxlSGVhZGVyfW5leHRMaW5lIik7Cit9CisKK215IEBkaWZmVGVzdHMgPSAoeworICAgICMg
TmV3IHRlc3Q6IG1pc3NpbmcgY2xvc2luZyBoZWFkZXIgbGluZQorICAgIGRpZmZOYW1lID0+ICJT
Vk46IGluY29tcGxldGUgaGVhZGVyIiwKKyAgICBpbnB1dFRleHQgPT4gPDwnRU5EJywKK0luZGV4
OiBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzLnBtCitFTkQKKyAgICAjIEhlYWRlciBrZXlz
IHRvIGNoZWNrCisgICAgc3ZuQ29udmVydGVkVGV4dCA9PiA8PCdFTkQnLAorSW5kZXg6IFdlYktp
dFRvb2xzL1NjcmlwdHMvVkNTVXRpbHMucG0KK0VORAorICAgIGNvcGllZEZyb21QYXRoID0+IHVu
ZGVmLAorICAgIGNvcGllZEZyb21WZXJzaW9uID0+IHVuZGVmLAorICAgIGluZGV4UGF0aCA9PiAi
V2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbSIsCisgICAgdmVyc2lvbiA9PiB1bmRlZiwK
KyAgICAjIE90aGVyIHZhbHVlcyB0byBjaGVjaworICAgIGZvdW5kSGVhZGVyRW5kaW5nID0+IDAs
CisgICAgbGFzdFJlYWRMaW5lID0+IHVuZGVmLAorICAgIG5leHRMaW5lID0+IHVuZGVmLAorfSwK
K3sKKyAgICAjIE5ldyB0ZXN0CisgICAgZGlmZk5hbWUgPT4gIlNWTjogc2ltcGxlIiwKKyAgICBp
bnB1dFRleHQgPT4gPDwnRU5EJywKK0luZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxz
LnBtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CistLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbQkocmV2
aXNpb24gNTMwMDQpCisrKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbQkod29ya2lu
ZyBjb3B5KQorQEAgLTMyLDYgKzMyLDcgQEAgdXNlIHN0cmljdDsKKyB1c2Ugd2FybmluZ3M7CitF
TkQKKyAgICAjIEhlYWRlciBrZXlzIHRvIGNoZWNrCisgICAgc3ZuQ29udmVydGVkVGV4dCA9PiA8
PCdFTkQnLAorSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHMucG0KKz09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KKy0tLSBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzLnBtCShyZXZpc2lvbiA1MzAwNCkK
KysrKyBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzLnBtCSh3b3JraW5nIGNvcHkpCitFTkQK
KyAgICBjb3BpZWRGcm9tUGF0aCA9PiB1bmRlZiwKKyAgICBjb3BpZWRGcm9tVmVyc2lvbiA9PiB1
bmRlZiwKKyAgICBpbmRleFBhdGggPT4gIldlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHMucG0i
LAorICAgIHZlcnNpb24gPT4gIjUzMDA0IiwKKyAgICAjIE90aGVyIHZhbHVlcyB0byBjaGVjawor
ICAgIGZvdW5kSGVhZGVyRW5kaW5nID0+IDEsCisgICAgbGFzdFJlYWRMaW5lID0+ICJAQCAtMzIs
NiArMzIsNyBAQCB1c2Ugc3RyaWN0O1xuIiwKKyAgICBuZXh0TGluZSA9PiAiIHVzZSB3YXJuaW5n
cztcbiIsCit9LAoreworICAgICMgTmV3IHRlc3QKKyAgICBkaWZmTmFtZSA9PiAiU1ZOOiBuZXcg
ZmlsZSIsCisgICAgaW5wdXRUZXh0ID0+IDw8J0VORCcsCitJbmRleDogV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRwZXJsL1ZDU1V0aWxzX3VuaXR0ZXN0L3BhcnNlRGlmZkhlYWRlci5wbAorPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQorLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9WQ1NVdGlsc191bml0
dGVzdC9wYXJzZURpZmZIZWFkZXIucGwJKHJldmlzaW9uIDApCisrKysgV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRwZXJsL1ZDU1V0aWxzX3VuaXR0ZXN0L3BhcnNlRGlmZkhlYWRlci5wbAkocmV2
aXNpb24gMCkKK0BAIC0wLDAgKzEsMjYyIEBACisrIyEvdXNyL2Jpbi9wZXJsIC13CitFTkQKKyAg
ICAjIEhlYWRlciBrZXlzIHRvIGNoZWNrCisgICAgc3ZuQ29udmVydGVkVGV4dCA9PiA8PCdFTkQn
LAorSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9WQ1NVdGlsc191bml0dGVz
dC9wYXJzZURpZmZIZWFkZXIucGwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBXZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHBlcmwvVkNTVXRpbHNfdW5pdHRlc3QvcGFyc2VEaWZmSGVhZGVyLnBsCShyZXZpc2lv
biAwKQorKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9WQ1NVdGlsc191bml0dGVz
dC9wYXJzZURpZmZIZWFkZXIucGwJKHJldmlzaW9uIDApCitFTkQKKyAgICBjb3BpZWRGcm9tUGF0
aCA9PiB1bmRlZiwKKyAgICBjb3BpZWRGcm9tVmVyc2lvbiA9PiB1bmRlZiwKKyAgICBpbmRleFBh
dGggPT4gIldlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9WQ1NVdGlsc191bml0dGVzdC9w
YXJzZURpZmZIZWFkZXIucGwiLAorICAgIHZlcnNpb24gPT4gdW5kZWYsCisgICAgIyBPdGhlciB2
YWx1ZXMgdG8gY2hlY2sKKyAgICBmb3VuZEhlYWRlckVuZGluZyA9PiAxLAorICAgIGxhc3RSZWFk
TGluZSA9PiAiQEAgLTAsMCArMSwyNjIgQEBcbiIsCisgICAgbmV4dExpbmUgPT4gIisjIS91c3Iv
YmluL3BlcmwgLXdcbiIsCit9LAoreworICAgICMgTmV3IHRlc3QKKyAgICBkaWZmTmFtZSA9PiAi
U1ZOOiBjb3B5IiwKKyAgICBpbnB1dFRleHQgPT4gPDwnRU5EJywKK0luZGV4OiBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L21vdmVfdGVzdC5weQorPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFdlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbW92ZV90ZXN0LnB5CShyZXZpc2lvbiA1MzA0NykJKGZyb20g
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9fX2luaXRfXy5weTo1MzA0OCkKKysrKyBXZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L21vdmVfdGVzdC5weQkod29ya2luZyBjb3B5KQorQEAg
LTAsMCArMSw3IEBACisrIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVj
dG9yeSBmb3IgbW9kdWxlIGZpbGVzCitFTkQKKyAgICAjIEhlYWRlciBrZXlzIHRvIGNoZWNrCisg
ICAgc3ZuQ29udmVydGVkVGV4dCA9PiA8PCdFTkQnLAorSW5kZXg6IFdlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbW92ZV90ZXN0LnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9tb3ZlX3Rlc3QucHkJKHJldmlzaW9uIDUzMDQ3KQkoZnJvbSBXZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L19faW5pdF9fLnB5OjUzMDQ4KQorKysrIFdlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbW92ZV90ZXN0LnB5CSh3b3JraW5nIGNvcHkpCitFTkQKKyAgICBj
b3BpZWRGcm9tUGF0aCA9PiAiV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9fX2luaXRfXy5w
eSIsCisgICAgY29waWVkRnJvbVZlcnNpb24gPT4gIjUzMDQ4IiwKKyAgICBpbmRleFBhdGggPT4g
IldlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbW92ZV90ZXN0LnB5IiwKKyAgICB2ZXJzaW9u
ID0+IHVuZGVmLAorICAgICMgT3RoZXIgdmFsdWVzIHRvIGNoZWNrCisgICAgZm91bmRIZWFkZXJF
bmRpbmcgPT4gMSwKKyAgICBsYXN0UmVhZExpbmUgPT4gIkBAIC0wLDAgKzEsNyBAQFxuIiwKKyAg
ICBuZXh0TGluZSA9PiAiKyMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJl
Y3RvcnkgZm9yIG1vZHVsZSBmaWxlc1xuIiwKK30sCit7CisgICAgIyBOZXcgdGVzdAorICAgIGRp
ZmZOYW1lID0+ICJTVk46IFxcclxcbiBsaW5lcyIsCisgICAgaW5wdXRUZXh0ID0+IDw8RU5ELCAj
IE5vIHNpbmdsZSBxdW90ZXMgdG8gYWxsb3cgaW50ZXJwb2xhdGlvbiBvZiAiXHIiCitJbmRleDog
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9tb3ZlX3Rlc3QucHlccgorPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxy
CistLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9tb3ZlX3Rlc3QucHkJKHJldmlzaW9u
IDUzMDQ3KQkoZnJvbSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L19faW5pdF9fLnB5OjUz
MDQ4KVxyCisrKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9tb3ZlX3Rlc3QucHkJKHdv
cmtpbmcgY29weSlccgorQEAgLTAsMCArMSw3IEBAXHIKKysjIFJlcXVpcmVkIGZvciBQeXRob24g
dG8gc2VhcmNoIHRoaXMgZGlyZWN0b3J5IGZvciBtb2R1bGUgZmlsZXNccgorRU5ECisgICAgIyBI
ZWFkZXIga2V5cyB0byBjaGVjaworICAgIHN2bkNvbnZlcnRlZFRleHQgPT4gPDxFTkQsICMgTm8g
c2luZ2xlIHF1b3RlcyB0byBhbGxvdyBpbnRlcnBvbGF0aW9uIG9mICJcciIKK0luZGV4OiBXZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L21vdmVfdGVzdC5weVxyCis9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHIKKy0t
LSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L21vdmVfdGVzdC5weQkocmV2aXNpb24gNTMw
NDcpCShmcm9tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvX19pbml0X18ucHk6NTMwNDgp
XHIKKysrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L21vdmVfdGVzdC5weQkod29ya2lu
ZyBjb3B5KVxyCitFTkQKKyAgICBjb3BpZWRGcm9tUGF0aCA9PiAiV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9fX2luaXRfXy5weSIsCisgICAgY29waWVkRnJvbVZlcnNpb24gPT4gIjUzMDQ4
IiwKKyAgICBpbmRleFBhdGggPT4gIldlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbW92ZV90
ZXN0LnB5IiwKKyAgICB2ZXJzaW9uID0+IHVuZGVmLAorICAgICMgT3RoZXIgdmFsdWVzIHRvIGNo
ZWNrCisgICAgZm91bmRIZWFkZXJFbmRpbmcgPT4gMSwKKyAgICBsYXN0UmVhZExpbmUgPT4gIkBA
IC0wLDAgKzEsNyBAQFxyXG4iLAorICAgIG5leHRMaW5lID0+ICIrIyBSZXF1aXJlZCBmb3IgUHl0
aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzXHJcbiIsCit9LAor
eworICAgICMgTmV3IHRlc3QKKyAgICBkaWZmTmFtZSA9PiAiU1ZOOiBwYXRoIGNvcnJlY3Rpb25z
IiwKKyAgICBpbnB1dFRleHQgPT4gPDwnRU5EJywKK0luZGV4OiBXZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L21vdmVfdGVzdC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJhZF9wYXRoCShyZXZpc2lv
biA1MzA0NykJKGZyb20gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9fX2luaXRfXy5weTo1
MzA0OCkKKysrKyBiYWRfcGF0aAkod29ya2luZyBjb3B5KQorQEAgLTAsMCArMSw3IEBACisrIyBS
ZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZp
bGVzCitFTkQKKyAgICAjIEhlYWRlciBrZXlzIHRvIGNoZWNrCisgICAgc3ZuQ29udmVydGVkVGV4
dCA9PiA8PCdFTkQnLAorSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbW92ZV90
ZXN0LnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CistLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9tb3Zl
X3Rlc3QucHkJKHJldmlzaW9uIDUzMDQ3KQkoZnJvbSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L19faW5pdF9fLnB5OjUzMDQ4KQorKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bW92ZV90ZXN0LnB5CSh3b3JraW5nIGNvcHkpCitFTkQKKyAgICBjb3BpZWRGcm9tUGF0aCA9PiAi
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9fX2luaXRfXy5weSIsCisgICAgY29waWVkRnJv
bVZlcnNpb24gPT4gIjUzMDQ4IiwKKyAgICBpbmRleFBhdGggPT4gIldlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbW92ZV90ZXN0LnB5IiwKKyAgICB2ZXJzaW9uID0+IHVuZGVmLAorICAgICMg
T3RoZXIgdmFsdWVzIHRvIGNoZWNrCisgICAgZm91bmRIZWFkZXJFbmRpbmcgPT4gMSwKKyAgICBs
YXN0UmVhZExpbmUgPT4gIkBAIC0wLDAgKzEsNyBAQFxuIiwKKyAgICBuZXh0TGluZSA9PiAiKyMg
UmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBm
aWxlc1xuIiwKK30sCit7CisgICAgIyBOZXcgdGVzdAorICAgIGRpZmZOYW1lID0+ICJHaXQ6IHNp
bXBsZSIsCisgICAgaW5wdXRUZXh0ID0+IDw8J0VORCcsCitkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU3R5bGVGbGV4aWJsZUJveERhdGEuaCBiL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1N0eWxlRmxleGlibGVCb3hEYXRhLmgKK2luZGV4IGY1ZDVlNzQuLjNiNmFhOTIgMTAw
NjQ0CistLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUZsZXhpYmxlQm94RGF0YS5o
CisrKysgYi9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUZsZXhpYmxlQm94RGF0YS5oCitA
QCAtNDcsNyArNDcsNiBAQCBwdWJsaWM6CitFTkQKKyAgICAjIEhlYWRlciBrZXlzIHRvIGNoZWNr
CisgICAgc3ZuQ29udmVydGVkVGV4dCA9PiA8PCdFTkQnLAorSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1N0eWxlRmxleGlibGVCb3hEYXRhLmgKKz09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZUZsZXhpYmxlQm94RGF0YS5oCisrKysgV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVGbGV4aWJsZUJveERhdGEuaAorRU5ECisgICAgY29waWVkRnJvbVBh
dGggPT4gdW5kZWYsCisgICAgY29waWVkRnJvbVZlcnNpb24gPT4gdW5kZWYsCisgICAgaW5kZXhQ
YXRoID0+ICJXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUZsZXhpYmxlQm94RGF0YS5oIiwK
KyAgICB2ZXJzaW9uID0+IHVuZGVmLAorICAgICMgT3RoZXIgdmFsdWVzIHRvIGNoZWNrCisgICAg
Zm91bmRIZWFkZXJFbmRpbmcgPT4gMSwKKyAgICBsYXN0UmVhZExpbmUgPT4gIkBAIC00Nyw3ICs0
Nyw2IEBAIHB1YmxpYzpcbiIsCisgICAgbmV4dExpbmUgPT4gdW5kZWYsCit9LAoreworICAgICMg
TmV3IHRlc3QKKyAgICBkaWZmTmFtZSA9PiAiR2l0OiB1bnJlY29nbml6ZWQgbGluZXMiLAorICAg
IGlucHV0VGV4dCA9PiA8PCdFTkQnLAorZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvc2VjdXJpdHkvbGlzdGVuZXIveHNzLWluYWN0aXZlLWNsb3N1cmUuaHRtbCBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvbGlzdGVuZXIveHNzLWluYWN0aXZlLWNsb3N1cmUuaHRt
bAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjNjOWYxMTQKKy0tLSAvZGV2
L251bGwKKysrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvbGlzdGVuZXIveHNz
LWluYWN0aXZlLWNsb3N1cmUuaHRtbAorQEAgLTAsMCArMSwzNCBAQAorKzxodG1sPgorRU5ECisg
ICAgIyBIZWFkZXIga2V5cyB0byBjaGVjaworICAgIHN2bkNvbnZlcnRlZFRleHQgPT4gPDwnRU5E
JywKK0luZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2xpc3RlbmVyL3hzcy1p
bmFjdGl2ZS1jbG9zdXJlLmh0bWwKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAw
Li4zYzlmMTE0CistLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9saXN0ZW5lci94
c3MtaW5hY3RpdmUtY2xvc3VyZS5odG1sCisrKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS9saXN0ZW5lci94c3MtaW5hY3RpdmUtY2xvc3VyZS5odG1sCitFTkQKKyAgICBjb3BpZWRG
cm9tUGF0aCA9PiB1bmRlZiwKKyAgICBjb3BpZWRGcm9tVmVyc2lvbiA9PiB1bmRlZiwKKyAgICBp
bmRleFBhdGggPT4gIkxheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvbGlzdGVuZXIveHNz
LWluYWN0aXZlLWNsb3N1cmUuaHRtbCIsCisgICAgdmVyc2lvbiA9PiB1bmRlZiwKKyAgICAjIE90
aGVyIHZhbHVlcyB0byBjaGVjaworICAgIGZvdW5kSGVhZGVyRW5kaW5nID0+IDEsCisgICAgbGFz
dFJlYWRMaW5lID0+ICJAQCAtMCwwICsxLDM0IEBAXG4iLAorICAgIG5leHRMaW5lID0+ICIrPGh0
bWw+XG4iLAorfSwKKyk7CisKK3BsYW4odGVzdHMgPT4gQGRpZmZUZXN0cyAqIDgpOyAjIEVpZ2h0
IGFzc2VydGlvbnMgcGVyIGNhbGwgdG8gZG9EaWZmVGVzdCgpLgorCitmb3JlYWNoIG15ICRkaWZm
VGVzdEhhc2hSZWYgKEBkaWZmVGVzdHMpIHsKKyAgICBkb0RpZmZUZXN0KCRkaWZmVGVzdEhhc2hS
ZWYpOworfQo=
</data>
<flag name="review"
          id="28480"
          type_id="1"
          status="+"
          setter="ddkilzer"
    />
    <flag name="commit-queue"
          id="28481"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
      

    </bug>

</bugzilla>