<?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>26871</bug_id>
          
          <creation_ts>2009-06-30 17:33:03 -0700</creation_ts>
          <short_desc>Can&apos;t unbold text in div in font-weight span</short_desc>
          <delta_ts>2010-09-24 10:58:24 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.mozilla.org/editor/midasdemo/</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>43580</dependson>
    
    <dependson>43639</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Annie Sullivan">sullivan</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>jparent</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>michaelthomas</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>tkent</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>129221</commentid>
    <comment_count>0</comment_count>
    <who name="Annie Sullivan">sullivan</who>
    <bug_when>2009-06-30 17:33:03 -0700</bug_when>
    <thetext>STEPS TO REPRODUCE:
1. Go to midas demo and enter the following HTML:
&lt;span style=&quot;font-weight: 900;&quot;&gt; &lt;div&gt;text&lt;/div&gt; &lt;/span&gt;
2. Select &quot;text&quot; and hit bold button

ACTUAL RESULT:
Text is not unbolded, no matter how many times bold button is hit

EXPECTED RESULT:
Text unbolded

I know this is a pretty low priority bug, but we had a user that managed to paste this into their document, so I figured I&apos;d file it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249570</commentid>
    <comment_count>1</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-10 15:39:14 -0700</bug_when>
    <thetext>It seems like this problem is caused by http://trac.webkit.org/browser/trunk/WebCore/editing/ApplyStyleCommand.cpp#L949 where it obtains removeStart = start.upstream().  Because upstream will respect block elements, we cannot delete span whose end is visually different from the different of div inside of it.

By the way, in investing this problem, I found a weird behavior in applyInlineStyle.

    bool splitEnd = splitTextElementAtEndIfNeeded(start, end);
    if (splitEnd) {
        start = startPosition();
        end = endPosition();
        endDummySpanAncestor = dummySpanAncestorForNode(end.node());
    }

splits an element even when it&apos;s not needed.  e.g. &lt;div id=&quot;test&quot; style=&quot;font-weight: 900;&quot;&gt;world&lt;/div&gt; was wrapped by style spans and splited to &lt;div id=&quot;test&quot; style=&quot;font-weight: 900;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;orld&lt;/span&gt;&lt;/div&gt;.  I don&apos;t think this behavior is intended and may be filed as a bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249579</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-10 16:02:49 -0700</bug_when>
    <thetext>Typos:
visually different from the end* of div inside.
while* investigating* this problem

Maybe what we need is to push down all styles regardless of whether it&apos;s text decoration or not.  Consider the following HTML:
&lt;div style=&quot;font-weight: bold;&quot;&gt;hello&lt;div id=&quot;test&quot;&gt;world&lt;/div&gt;&lt;/div&gt;

By toggling bold on &quot;world&quot;, we get:
&lt;div style=&quot;font-weight: bold;&quot;&gt;hello&lt;div id=&quot;test&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;world&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;


On the other hand, if we had:
&lt;div style=&quot;text-decoration: underline;&quot;&gt;hello&lt;div id=&quot;test&quot;&gt;world&lt;/div&gt;&lt;/div&gt;

and toggled underline on &quot;world&quot;, we get:
&lt;div style=&quot;&quot;&gt;&lt;u&gt;hello&lt;/u&gt;&lt;div id=&quot;test&quot;&gt;world&lt;/div&gt;&lt;/div&gt;

because we push-down any text decorations and re-apply styles.  Except the style attribute, which should go away entirely, this markup looks much cleaner.  There might be some conflict of interets in terms of preserving original elements and keeping the markup simple &amp; clean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260797</commentid>
    <comment_count>3</comment_count>
      <attachid>63621</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-05 13:08:08 -0700</bug_when>
    <thetext>Created attachment 63621
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260798</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-05 13:11:09 -0700</bug_when>
    <thetext>This patch still requires cleanup and most of it should be merged with pushDownTextDecorationStyleAroundNode.  It also requires rebaselining editing/deleting/delete-4038408-fix.html, editing/deleting/delete-br-011.html, editing/execCommand/5770834-1.html, and editing/execCommand/format-block-from-range-selection.html.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260934</commentid>
    <comment_count>5</comment_count>
      <attachid>63657</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-05 16:14:05 -0700</bug_when>
    <thetext>Created attachment 63657
work in progress 2

It turned out that we don&apos;t even need to special case the text-decoration.  This patch will use applyInlineStyleIfNeed to push down all the inline styles regardless of whether it&apos;s text-decoration or not.  This patch still adds a superfluous font tag at the beginning so I&apos;ll need to work on it a little more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261055</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-05 20:14:19 -0700</bug_when>
    <thetext>I&apos;m stuck with mail blockquote here.

In editing/deleting/delete-4038408-fix.html, we start deleting paragraphs from the very end:
	DIV	0x1129c0f30 CLASS=editing
		#text	0x1129c1280 &quot;\n&quot;
		DIV	0x1129c12e0
			BR	0x1129c15e0 CLASS=khtml-block-placeholder
		#text	0x1129c17d0 &quot;\n&quot;
		DIV	0x1129c1830
			#text	0x1129c19c0 &quot;\n&quot;
			BLOCKQUOTE	0x1129c1b40 STYLE=color:blue;
				#text	0x1129c1f50 &quot;\n&quot;
				DIV	0x1129c1fb0
					#text	0x1129c2200 &quot;Here is some reply text&quot;
				#text	0x1129c22e0 &quot;\n&quot;
				DIV	0x1129c2340
					#text	0x1129c2510 &quot;It should have the reply text style&quot;
				#text	0x1129c2620 &quot;\n&quot;
				DIV	0x1129c2680
					BR	0x1129c2910 CLASS=khtml-block-placeholder
				#text	0x1129c2b00 &quot;\n&quot;
				DIV	0x1129c2b60
					BR	0x1129c2dd0 CLASS=khtml-block-placeholder
				#text	0x1129c2f50 &quot;\n&quot;
				DIV	0x1129c2fb0
*					BR	0x1129cac20
			#text	0x1129c3960 &quot;\n&quot;
		#text	0x1129c39f0 &quot;\n\n&quot;

This is DOM when deleting the empty paragraph right after blockquote.  Here, ApplyStyleCommand is called in the moveParagraphs because it&apos;s an empty paragraph, and it&apos;s trying to preserve the style (moveParagraphs is called by moveParagraph, which is called by mergeParagraphs, which in turn is called by DeleteSelectionCommand).

Here, the problem is that if we push inline style that&apos;s conflicting with our current style, we end up losing color property from blockquote and adding a whole bunch of font tags to each of the paragraphs we have.  Is this behavior what we want?  If not, then the only fix I can give to this bug is to produce: &lt;span style=&quot;font-weight: 900;&quot;&gt; &lt;div&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;text&lt;/span&gt;&lt;/div&gt; &lt;/span&gt;.  It&apos;s basically a trade off.  We either allow push-down of styles everywhere or we live up with ugly markup whenever visual presentation is right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262367</commentid>
    <comment_count>7</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-08-09 15:47:46 -0700</bug_when>
    <thetext>&gt; Here, the problem is that if we push inline style that&apos;s conflicting with our current style, we end up losing color property from blockquote and adding a whole bunch of font tags to each of the paragraphs we have.  Is this behavior what we want?

I don&apos;t think so.

&gt;  If not, then the only fix I can give to this bug is to produce: &lt;span style=&quot;font-weight: 900;&quot;&gt; &lt;div&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;text&lt;/span&gt;&lt;/div&gt; &lt;/span&gt;.  It&apos;s basically a trade off.  We either allow push-down of styles everywhere or we live up with ugly markup whenever visual presentation is right.

Is it not possible to just push-down the specific styles that we&apos;re modifying?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262382</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-09 16:06:53 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; Here, the problem is that if we push inline style that&apos;s conflicting with our current style, we end up losing color property from blockquote and adding a whole bunch of font tags to each of the paragraphs we have.  Is this behavior what we want?
&gt; 
&gt; I don&apos;t think so.

I thought so.

&gt; &gt;  If not, then the only fix I can give to this bug is to produce: &lt;span style=&quot;font-weight: 900;&quot;&gt; &lt;div&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;text&lt;/span&gt;&lt;/div&gt; &lt;/span&gt;.  It&apos;s basically a trade off.  We either allow push-down of styles everywhere or we live up with ugly markup whenever visual presentation is right.
&gt; 
&gt; Is it not possible to just push-down the specific styles that we&apos;re modifying?

No, the problem is that color is the specific style we&apos;re modifying in DeleteSelectionCommand::mergeParagraphs.  What&apos;s happening is that we&apos;re merging an empty paragraph to the previous paragraph and moveParagraphs special cases empty paragraphs to copy the style (ReplaceSelectionCommand doesn&apos;t preserve the style in this case).

But I have a fix for this in mergeParagraphs, which is to special case the empty paragraph in mergeParagraphs and avoid preserving style in moveParagraphs. Because DeleteSelectionCommand sets the typing style to that of the previous paragraph after merging the empty paragraph, we didn&apos;t need to preserve the style of the empty paragraph in the first place.  I&apos;ll upload the patch with this fix as soon as https://bugs.webkit.org/show_bug.cgi?id=43699 is fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262473</commentid>
    <comment_count>9</comment_count>
      <attachid>63971</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-09 20:29:37 -0700</bug_when>
    <thetext>Created attachment 63971
work in progress 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262475</commentid>
    <comment_count>10</comment_count>
      <attachid>63971</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-09 20:31:38 -0700</bug_when>
    <thetext>Comment on attachment 63971
work in progress 3

It seems like I can fix the bug soon.

&gt; +//    if (isSpanWithoutAttributesOrUnstyleStyleSpan(element))
&gt; +//        removeNodePreservingChildren(element);

I would really like to enable this but there&apos;s a failing test right now.
Will investigate more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262922</commentid>
    <comment_count>11</comment_count>
      <attachid>64058</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-10 17:46:55 -0700</bug_when>
    <thetext>Created attachment 64058
fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262924</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-10 17:51:48 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Created an attachment (id=64058) [details]
&gt; fixes the bug

My current patch has an issue of generating style attributes for sibling block nodes even when styleWithCSS=false but this should probably be addressed in another bug.  To fix that, we need to clean up applyInlineStyleToRange or its substitute and use it in applyInlineStyleToPushDown.

I wish I could split the patch into smaller pieces but it does not seem possible at the moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263393</commentid>
    <comment_count>13</comment_count>
      <attachid>64058</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-08-11 12:33:50 -0700</bug_when>
    <thetext>Comment on attachment 64058
fixes the bug

&gt; Index: WebCore/editing/ApplyStyleCommand.cpp
&gt; +    for (size_t i = 0; i &lt; properties.size(); i++) {
&gt; +        RefPtr&lt;CSSValue&gt; property = style-&gt;getPropertyCSSValue(properties[i]);
&gt; +        if (property &amp;&amp; !equalIgnoringCase(property-&gt;cssText(), &quot;none&quot;))

As discussed in person, I would remove the check for &quot;none&quot; just in case some style uses &quot;none&quot;.

&gt; Index: LayoutTests/editing/style/script-tests/push-down-inline-styles.js
&gt; +testSingleToggle(&quot;bold&quot;, &apos;&lt;span style=&quot;font-weight: 900;&quot;&gt; &lt;div&gt;text&lt;/div&gt; &lt;/span&gt;&apos;, &apos; &lt;div&gt;text&lt;/div&gt; &apos;);
&gt; +testSingleToggle(&quot;bold&quot;, &apos;&lt;span style=&quot;font-weight: 900;&quot;&gt;&lt;div&gt;text&lt;/div&gt;&lt;/span&gt;&apos;, &apos;&lt;div&gt;text&lt;/div&gt;&apos;);
&gt; +testSingleToggle(&quot;bold&quot;, &apos;&lt;span style=&quot;font-weight: 900;&quot;&gt;&lt;div id=&quot;test&quot;&gt;hello&lt;/div&gt;&lt;div&gt;world&lt;/div&gt;&lt;/span&gt;&apos;, &apos;&lt;div id=&quot;test&quot;&gt;hello&lt;/div&gt;&lt;div style=&quot;font-weight: 900; &quot;&gt;world&lt;/div&gt;&apos;);

These tests are great.  Can you add some tests that have extra css properties to show that they&apos;re not accidentally removed.  For example, apply bold to &lt;span style=&quot;font-style: italic&quot;&gt;hello&lt;/span&gt; or apply bold to &lt;span style=&quot;font-style: italic; font-weight:900&quot;&gt;hello&lt;/span&gt;.  Also, what happens with different font weights (600, 300)?  Can you also add some tests for line through (strike)?

The rest looks fine to me, but perhaps Ojan should also take a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263472</commentid>
    <comment_count>14</comment_count>
      <attachid>64166</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-11 15:06:31 -0700</bug_when>
    <thetext>Created attachment 64166
fixed per tony&apos;s comment and also supported text-decoration propagation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263473</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-11 15:06:46 -0700</bug_when>
    <thetext>Thanks for the feedback.

(In reply to comment #13)
&gt; (From update of attachment 64058 [details])
&gt; &gt; Index: WebCore/editing/ApplyStyleCommand.cpp
&gt; &gt; +    for (size_t i = 0; i &lt; properties.size(); i++) {
&gt; &gt; +        RefPtr&lt;CSSValue&gt; property = style-&gt;getPropertyCSSValue(properties[i]);
&gt; &gt; +        if (property &amp;&amp; !equalIgnoringCase(property-&gt;cssText(), &quot;none&quot;))
&gt; 
&gt; As discussed in person, I would remove the check for &quot;none&quot; just in case some style uses &quot;none&quot;.

Done.

&gt; &gt; Index: LayoutTests/editing/style/script-tests/push-down-inline-styles.js
&gt; &gt; +testSingleToggle(&quot;bold&quot;, &apos;&lt;span style=&quot;font-weight: 900;&quot;&gt; &lt;div&gt;text&lt;/div&gt; &lt;/span&gt;&apos;, &apos; &lt;div&gt;text&lt;/div&gt; &apos;);
&gt; &gt; +testSingleToggle(&quot;bold&quot;, &apos;&lt;span style=&quot;font-weight: 900;&quot;&gt;&lt;div&gt;text&lt;/div&gt;&lt;/span&gt;&apos;, &apos;&lt;div&gt;text&lt;/div&gt;&apos;);
&gt; &gt; +testSingleToggle(&quot;bold&quot;, &apos;&lt;span style=&quot;font-weight: 900;&quot;&gt;&lt;div id=&quot;test&quot;&gt;hello&lt;/div&gt;&lt;div&gt;world&lt;/div&gt;&lt;/span&gt;&apos;, &apos;&lt;div id=&quot;test&quot;&gt;hello&lt;/div&gt;&lt;div style=&quot;font-weight: 900; &quot;&gt;world&lt;/div&gt;&apos;);
&gt; 
&gt; These tests are great.  Can you add some tests that have extra css properties to show that they&apos;re not accidentally removed.  For example, apply bold to &lt;span style=&quot;font-style: italic&quot;&gt;hello&lt;/span&gt; or apply bold to &lt;span style=&quot;font-style: italic; font-weight:900&quot;&gt;hello&lt;/span&gt;.  Also, what happens with different font weights (600, 300)?  Can you also add some tests for line through (strike)?

The logic for line-through is identical to that of underline since both uses text-decoration but I added one test.  I also supported the propagation of text-decoration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263474</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-11 15:07:00 -0700</bug_when>
    <thetext>Thanks for the feedback.

(In reply to comment #13)
&gt; (From update of attachment 64058 [details])
&gt; &gt; Index: WebCore/editing/ApplyStyleCommand.cpp
&gt; &gt; +    for (size_t i = 0; i &lt; properties.size(); i++) {
&gt; &gt; +        RefPtr&lt;CSSValue&gt; property = style-&gt;getPropertyCSSValue(properties[i]);
&gt; &gt; +        if (property &amp;&amp; !equalIgnoringCase(property-&gt;cssText(), &quot;none&quot;))
&gt; 
&gt; As discussed in person, I would remove the check for &quot;none&quot; just in case some style uses &quot;none&quot;.

Done.

&gt; &gt; Index: LayoutTests/editing/style/script-tests/push-down-inline-styles.js
&gt; &gt; +testSingleToggle(&quot;bold&quot;, &apos;&lt;span style=&quot;font-weight: 900;&quot;&gt; &lt;div&gt;text&lt;/div&gt; &lt;/span&gt;&apos;, &apos; &lt;div&gt;text&lt;/div&gt; &apos;);
&gt; &gt; +testSingleToggle(&quot;bold&quot;, &apos;&lt;span style=&quot;font-weight: 900;&quot;&gt;&lt;div&gt;text&lt;/div&gt;&lt;/span&gt;&apos;, &apos;&lt;div&gt;text&lt;/div&gt;&apos;);
&gt; &gt; +testSingleToggle(&quot;bold&quot;, &apos;&lt;span style=&quot;font-weight: 900;&quot;&gt;&lt;div id=&quot;test&quot;&gt;hello&lt;/div&gt;&lt;div&gt;world&lt;/div&gt;&lt;/span&gt;&apos;, &apos;&lt;div id=&quot;test&quot;&gt;hello&lt;/div&gt;&lt;div style=&quot;font-weight: 900; &quot;&gt;world&lt;/div&gt;&apos;);
&gt; 
&gt; These tests are great.  Can you add some tests that have extra css properties to show that they&apos;re not accidentally removed.  For example, apply bold to &lt;span style=&quot;font-style: italic&quot;&gt;hello&lt;/span&gt; or apply bold to &lt;span style=&quot;font-style: italic; font-weight:900&quot;&gt;hello&lt;/span&gt;.  Also, what happens with different font weights (600, 300)?  Can you also add some tests for line through (strike)?

The logic for line-through is identical to that of underline since both uses text-decoration but I added one test.  I also supported the propagation of text-decoration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263502</commentid>
    <comment_count>17</comment_count>
      <attachid>64166</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-08-11 16:01:13 -0700</bug_when>
    <thetext>Comment on attachment 64166
fixed per tony&apos;s comment and also supported text-decoration propagation

Ojan, do you also want to review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263568</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-11 19:05:23 -0700</bug_when>
    <thetext>Committed r65208: &lt;http://trac.webkit.org/changeset/65208&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284540</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-24 10:58:24 -0700</bug_when>
    <thetext>*** Bug 31691 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63621</attachid>
            <date>2010-08-05 13:08:08 -0700</date>
            <delta_ts>2010-08-05 16:14:05 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>bug-26871-20100805130806.patch</filename>
            <type>text/plain</type>
            <size>5178</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDc3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMTAtMDgtMDUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2Fu
J3QgdW5ib2xkIHRleHQgaW4gZGl2IGluIGZvbnQtd2VpZ2h0IHNwYW4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2ODcxCisKKyAgICAgICAgTW9kaWZp
ZWQgcmVtb3ZlSW5saW5lU3R5bGUgdG8gcHVzaCBkb3duIGFsbCBpbmxpbmUgc3R5bGVzIGluc3Rl
YWQgb2YganVzdCB0ZXh0LWRlY29yYXRpb24uCisgICAgICAgIEFmdGVyIHRoaXMgY2hhbmdlLCBX
ZWJLaXQgd2lsbCBhbHdheXMgcmVtb3ZlIGlubGluZSBzdHlsZXMgb2YgYW5jZXN0b3JzIHVwIHVu
dGlsIHVuc3BsaXR0YWJsZSBlbGVtZW50CisgICAgICAgIGFuZCBwdXNoZXMgaXQgZG93biB0byBj
aGlsZHJlbi4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5
U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpw
dXNoRG93bklubGluZVN0eWxlc0Fyb3VuZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlT
dHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5
U3R5bGVDb21tYW5kLmg6CisKIDIwMTAtMDgtMDUgIFlvbmcgTGkgIDx5b2xpQHJpbS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBUcmVhdC4KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9B
cHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0FwcGx5
U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gNjQ2MTEpCisrKyBXZWJDb3JlL2VkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUxLDYgKzE0NTEsNjggQEAg
dm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cHVzaERvd25UZXh0RGVjbwogICAgIH0KIH0KIAordm9p
ZCBBcHBseVN0eWxlQ29tbWFuZDo6cHVzaERvd25JbmxpbmVTdHlsZXNBcm91bmROb2RlKENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgTm9kZSogdGFyZ2V0Tm9kZSkKK3sKKyAgICBp
ZiAoIXN0eWxlIHx8ICFzdHlsZS0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEhU
TUxFbGVtZW50KiBoaWdoZXN0QW5jZXN0b3JXaXRoU3R5bGUgPSAwOworICAgIE5vZGUqIHVuc3Bs
aXR0YWJsZUVsZW1lbnQgPSB1bnNwbGl0dGFibGVFbGVtZW50Rm9yUG9zaXRpb24oUG9zaXRpb24o
dGFyZ2V0Tm9kZSwgMCkpOworCisgICAgZm9yIChOb2RlKiBuID0gdGFyZ2V0Tm9kZTsgbjsgbiA9
IG4tPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICBpZiAobi0+aXNIVE1MRWxlbWVudCgpICYm
IHNob3VsZFJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUsIHN0YXRpY19jYXN0PEhU
TUxFbGVtZW50Kj4obikpKQorICAgICAgICAgICAgaGlnaGVzdEFuY2VzdG9yV2l0aFN0eWxlID0g
c3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihuKTsKKyAgICAgICAgaWYgKG4gPT0gdW5zcGxpdHRh
YmxlRWxlbWVudCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIE5vIG5lZWQg
dG8gcHVzaCBkb3duIHN0eWxlcworICAgIGlmICghaGlnaGVzdEFuY2VzdG9yV2l0aFN0eWxlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8aW50PiBwcm9wZXJ0aWVzOworICAgIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZS0+ZW5kKCk7
CisgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBzdHlsZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBwcm9wZXJ0aWVzLmFw
cGVuZChpdC0+aWQoKSk7CisKKyAgICBOb2RlKiBjdXJyZW50ID0gaGlnaGVzdEFuY2VzdG9yV2l0
aFN0eWxlOworICAgIHdoaWxlIChjdXJyZW50ICE9IHRhcmdldE5vZGUpIHsKKyAgICAgICAgQVNT
RVJUKGN1cnJlbnQpOworICAgICAgICBBU1NFUlQoY3VycmVudC0+aXNIVE1MRWxlbWVudCgpKTsK
KyAgICAgICAgQVNTRVJUKGN1cnJlbnQtPmNvbnRhaW5zKHRhcmdldE5vZGUpKTsKKworICAgICAg
ICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KGN1cnJl
bnQpOworICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlT2ZD
dXJyZW50ID0gZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCk7CisgICAgICAgIFJlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVUb1B1c2hEb3duOworCisgICAgICAgIGlmIChz
dHlsZU9mQ3VycmVudCkgeworICAgICAgICAgICAgc3R5bGVUb1B1c2hEb3duID0gc3R5bGVPZkN1
cnJlbnQtPmNvcHlQcm9wZXJ0aWVzSW5TZXQocHJvcGVydGllcy5kYXRhKCksIHByb3BlcnRpZXMu
c2l6ZSgpKTsKKworICAgICAgICAgICAgLy8gcmVtb3ZlIGlubGluZSBzdHlsZXMgZnJvbSBjdXJy
ZW50IG5vZGUKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvcGVydGllcy5z
aXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gcHJvcGVydHkg
PSBzdHlsZU9mQ3VycmVudC0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzW2ldKTsKKyAg
ICAgICAgICAgICAgICBpZiAocHJvcGVydHkgJiYgIWVxdWFsSWdub3JpbmdDYXNlKHByb3BlcnR5
LT5jc3NUZXh0KCksICJub25lIikpCisgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNTU1Byb3Bl
cnR5KHN0eWxlT2ZDdXJyZW50LmdldCgpLCBzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihwcm9w
ZXJ0aWVzW2ldKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gZXh0cmFj
dCBzdHlsZSBoZXJlCisKKyAgICAgICAgLy8gcHVzaCBkb3duIHRoZSBzdHlsZSB0byBjaGlsZHJl
biBvZiB0aGUgY3VycmVudCBub2RlLgorICAgICAgICBOb2RlKiBjaGlsZCA9IGN1cnJlbnQtPmZp
cnN0Q2hpbGQoKTsKKyAgICAgICAgd2hpbGUgKGNoaWxkKSB7CisgICAgICAgICAgICBOb2RlKiBu
ZXh0Q2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKworICAgICAgICAgICAgaWYgKGNoaWxk
ICE9IHRhcmdldE5vZGUgJiYgc3R5bGVUb1B1c2hEb3duKQorICAgICAgICAgICAgICAgIGFkZElu
bGluZVN0eWxlSWZOZWVkZWQoc3R5bGVUb1B1c2hEb3duLmdldCgpLCBjaGlsZCwgY2hpbGQpOwor
CisgICAgICAgICAgICBpZiAoY2hpbGQgPT0gdGFyZ2V0Tm9kZSB8fCBjaGlsZC0+Y29udGFpbnMo
dGFyZ2V0Tm9kZSkpCisgICAgICAgICAgICAgICAgY3VycmVudCA9IGNoaWxkOworCisgICAgICAg
ICAgICBjaGlsZCA9IG5leHRDaGlsZDsKKyAgICAgICAgfQorICAgIH0KK30KKwogdm9pZCBBcHBs
eVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGUoUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gc3R5bGUsIGNvbnN0IFBvc2l0aW9uICZzdGFydCwgY29uc3QgUG9zaXRp
b24gJmVuZCkKIHsKICAgICBBU1NFUlQoc3RhcnQuaXNOb3ROdWxsKCkpOwpAQCAtMTQ2Nyw2ICsx
NTI5LDggQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bAogICAgICAg
ICBzdHlsZSA9IHN0eWxlLT5jb3B5KCk7CiAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVRleHREZWNvcmF0aW9uLCB0ZXh0RGVjb3JhdGlvblNwZWNpYWxQcm9wZXJ0eS0+Y3Nz
VGV4dCgpLCBzdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHRE
ZWNvcmF0aW9uc0luRWZmZWN0KSk7CiAgICAgfQorICAgIHB1c2hEb3duSW5saW5lU3R5bGVzQXJv
dW5kTm9kZShzdHlsZS5nZXQoKSwgc3RhcnQuZG93bnN0cmVhbSgpLm5vZGUoKSk7CisgICAgcHVz
aERvd25JbmxpbmVTdHlsZXNBcm91bmROb2RlKHN0eWxlLmdldCgpLCBlbmQudXBzdHJlYW0oKS5u
b2RlKCkpOwogCiAgICAgLy8gVGhlIHMgYW5kIGUgdmFyaWFibGVzIHN0b3JlIHRoZSBwb3NpdGlv
bnMgdXNlZCB0byBzZXQgdGhlIGVuZGluZyBzZWxlY3Rpb24gYWZ0ZXIgc3R5bGUgcmVtb3ZhbAog
ICAgIC8vIHRha2VzIHBsYWNlLiBUaGlzIHdpbGwgaGVscCBjYWxsZXJzIHRvIHJlY29nbml6ZSB3
aGVuIGVpdGhlciB0aGUgc3RhcnQgbm9kZSBvciB0aGUgZW5kIG5vZGUKSW5kZXg6IFdlYkNvcmUv
ZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5oCShyZXZpc2lvbiA2NDYxMSkKKysrIFdlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIHBy
aXZhdGU6CiAgICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZXh0cmFj
dFRleHREZWNvcmF0aW9uU3R5bGUoTm9kZSopOwogICAgIHZvaWQgYXBwbHlUZXh0RGVjb3JhdGlv
blN0eWxlKE5vZGUqLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUpOwogICAgIHZv
aWQgcHVzaERvd25UZXh0RGVjb3JhdGlvblN0eWxlQXJvdW5kTm9kZShOb2RlKik7CisgICAgdm9p
ZCBwdXNoRG93bklubGluZVN0eWxlc0Fyb3VuZE5vZGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24qLCBOb2RlKik7CiAKICAgICAvLyBzdHlsZS1hcHBsaWNhdGlvbiBoZWxwZXJzCiAgICAgdm9p
ZCBhcHBseUJsb2NrU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63657</attachid>
            <date>2010-08-05 16:14:05 -0700</date>
            <delta_ts>2010-08-09 20:29:33 -0700</delta_ts>
            <desc>work in progress 2</desc>
            <filename>attempt26871-nice-merge</filename>
            <type>text/plain</type>
            <size>10082</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDc3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMTAtMDgtMDUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2Fu
J3QgdW5ib2xkIHRleHQgaW4gZGl2IGluIGZvbnQtd2VpZ2h0IHNwYW4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2ODcxCisKKyAgICAgICAgTW9kaWZp
ZWQgcmVtb3ZlSW5saW5lU3R5bGUgdG8gcHVzaCBkb3duIGFsbCBpbmxpbmUgc3R5bGVzIGluc3Rl
YWQgb2YganVzdCB0ZXh0LWRlY29yYXRpb24uCisgICAgICAgIEFmdGVyIHRoaXMgY2hhbmdlLCBX
ZWJLaXQgd2lsbCBhbHdheXMgcmVtb3ZlIGlubGluZSBzdHlsZXMgb2YgYW5jZXN0b3JzIHVwIHVu
dGlsIHVuc3BsaXR0YWJsZSBlbGVtZW50CisgICAgICAgIGFuZCBwdXNoZXMgaXQgZG93biB0byBj
aGlsZHJlbi4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5
U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpw
dXNoRG93bklubGluZVN0eWxlc0Fyb3VuZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlT
dHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5
U3R5bGVDb21tYW5kLmg6CisKIDIwMTAtMDgtMDUgIFlvbmcgTGkgIDx5b2xpQHJpbS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBUcmVhdC4KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9B
cHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0FwcGx5
U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gNjQ3NzcpCisrKyBXZWJDb3JlL2VkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzM0LDExMyArMTMzNCw2OCBA
QCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVDU1NTdHlsZShDCiAgICAgcmV0dXJuIHJl
bW92ZWQ7CiB9CiAKLXN0YXRpYyBib29sIGhhc1RleHREZWNvcmF0aW9uUHJvcGVydHkoTm9kZSAq
bm9kZSkKK0hUTUxFbGVtZW50KiBBcHBseVN0eWxlQ29tbWFuZDo6aGlnaGVzdEFuY2VzdG9yV2l0
aENvbmZsaWN0aW5nSW5saW5lU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxl
LCBOb2RlKiBub2RlKQogewotICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gY29tcHV0ZWRT
dHlsZShub2RlKS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9u
LCBEb05vdFVwZGF0ZUxheW91dCk7Ci0gICAgcmV0dXJuIHZhbHVlICYmICFlcXVhbElnbm9yaW5n
Q2FzZSh2YWx1ZS0+Y3NzVGV4dCgpLCAibm9uZSIpOwotfQorICAgIGlmICghc3R5bGUgfHwgIXN0
eWxlLT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAKLXN0YXRpYyBOb2RlKiBoaWdoZXN0
QW5jZXN0b3JXaXRoVGV4dERlY29yYXRpb24oTm9kZSAqbm9kZSkKLXsKLSAgICBBU1NFUlQobm9k
ZSk7Ci0gICAgTm9kZSogcmVzdWx0ID0gMDsKKyAgICBIVE1MRWxlbWVudCogaGlnaGVzdEFuY2Vz
dG9yID0gMDsKICAgICBOb2RlKiB1bnNwbGl0dGFibGVFbGVtZW50ID0gdW5zcGxpdHRhYmxlRWxl
bWVudEZvclBvc2l0aW9uKFBvc2l0aW9uKG5vZGUsIDApKTsKLQotICAgIGZvciAoTm9kZSAqbiA9
IG5vZGU7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKGhhc1RleHREZWNv
cmF0aW9uUHJvcGVydHkobikpCi0gICAgICAgICAgICByZXN1bHQgPSBuOwotICAgICAgICAvLyBT
aG91bGQgc3RvcCBhdCB0aGUgZWRpdGFibGUgcm9vdCAoY2Fubm90IGNyb3NzIGVkaXRpbmcgYm91
bmRhcnkpIGFuZAotICAgICAgICAvLyBhbHNvIHN0b3AgYXQgdGhlIHVuc3BsaXR0YWJsZSBlbGVt
ZW50IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBVQXMKKyAgICBmb3IgKE5vZGUqIG4gPSBu
b2RlOyBuOyBuID0gbi0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgIGlmIChuLT5pc0hUTUxF
bGVtZW50KCkgJiYgc2hvdWxkUmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihuKSkpCisgICAgICAgICAgICBoaWdoZXN0QW5jZXN0b3Ig
PSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG4pOwogICAgICAgICBpZiAobiA9PSB1bnNwbGl0
dGFibGVFbGVtZW50KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmV0dXJuIHJl
c3VsdDsKKyAgICByZXR1cm4gaGlnaGVzdEFuY2VzdG9yOwogfQogCi1QYXNzUmVmUHRyPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uPiBBcHBseVN0eWxlQ29tbWFuZDo6ZXh0cmFjdFRleHREZWNv
cmF0aW9uU3R5bGUoTm9kZSogbm9kZSkKK1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gQXBwbHlTdHlsZUNvbW1hbmQ6OmV4dHJhY3RJbmxpbmVTdHlsZVRvUHVzaERvd24oSFRNTEVs
ZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFZlY3RvcjxpbnQ+JiBwcm9wZXJ0aWVzKQogewotICAgIEFT
U0VSVChub2RlKTsKLSAgICBBU1NFUlQobm9kZS0+aXNFbGVtZW50Tm9kZSgpKTsKLSAgICAKLSAg
ICAvLyBub24taHRtbCBlbGVtZW50cyBub3QgaGFuZGxlZCB5ZXQKLSAgICBpZiAoIW5vZGUtPmlz
SFRNTEVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBIVE1MRWxlbWVudCAqZWxl
bWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KG5vZGUpOwotICAgIFJlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBlbGVtZW50LT5pbmxpbmVTdHlsZURlY2wo
KTsKLSAgICBpZiAoIXN0eWxlKQorICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gc3R5bGVPZkVsZW1lbnQgPSBlbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKTsKKyAgICBpZiAo
IXN0eWxlT2ZFbGVtZW50KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGludCBwcm9wZXJ0aWVz
WzFdID0geyBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uIH07Ci0gICAgUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiB0ZXh0RGVjb3JhdGlvblN0eWxlID0gc3R5bGUtPmNvcHlQcm9w
ZXJ0aWVzSW5TZXQocHJvcGVydGllcywgMSk7Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHByb3Bl
cnR5ID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlv
bik7Ci0gICAgaWYgKHByb3BlcnR5ICYmICFlcXVhbElnbm9yaW5nQ2FzZShwcm9wZXJ0eS0+Y3Nz
VGV4dCgpLCAibm9uZSIpKQotICAgICAgICByZW1vdmVDU1NQcm9wZXJ0eShzdHlsZS5nZXQoKSwg
Q1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7Ci0KLSAgICByZXR1cm4gdGV4dERlY29yYXRpb25T
dHlsZS5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5VGV4dERl
Y29yYXRpb25TdHlsZShOb2RlICpub2RlLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5
bGUpCi17Ci0gICAgQVNTRVJUKG5vZGUpOwotCi0gICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+Y3Nz
VGV4dCgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3R5bGVDaGFuZ2Ugc3R5
bGVDaGFuZ2Uoc3R5bGUsIFBvc2l0aW9uKG5vZGUsIDApKTsKLSAgICBpZiAoc3R5bGVDaGFuZ2Uu
Y3NzU3R5bGUoKS5sZW5ndGgoKSkgewotICAgICAgICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKSB7
Ci0gICAgICAgICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IHN0eWxlU3BhbiA9IGNyZWF0ZVN0eWxl
U3BhbkVsZW1lbnQoZG9jdW1lbnQoKSk7Ci0gICAgICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdp
dGhFbGVtZW50KG5vZGUsIG5vZGUsIHN0eWxlU3Bhbi5nZXQoKSk7Ci0gICAgICAgICAgICBub2Rl
ID0gc3R5bGVTcGFuLmdldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFub2RlLT5pc0Vs
ZW1lbnROb2RlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgSFRNTEVsZW1lbnQg
KmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCAqPihub2RlKTsKLSAgICAgICAgU3Ry
aW5nIGNzc1RleHQgPSBzdHlsZUNoYW5nZS5jc3NTdHlsZSgpOwotICAgICAgICBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiAqZGVjbCA9IGVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpOwotICAg
ICAgICBpZiAoZGVjbCkKLSAgICAgICAgICAgIGNzc1RleHQgKz0gZGVjbC0+Y3NzVGV4dCgpOwot
ICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgY3NzVGV4dCk7Cisg
ICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZVRvUHVzaERvd24gPSBz
dHlsZU9mRWxlbWVudC0+Y29weVByb3BlcnRpZXNJblNldChwcm9wZXJ0aWVzLmRhdGEoKSwgcHJv
cGVydGllcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvcGVydGllcy5z
aXplKCk7IGkrKykgeworICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHByb3BlcnR5ID0gc3R5bGVP
ZkVsZW1lbnQtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydGllc1tpXSk7CisgICAgICAgIGlm
IChwcm9wZXJ0eSAmJiAhZXF1YWxJZ25vcmluZ0Nhc2UocHJvcGVydHktPmNzc1RleHQoKSwgIm5v
bmUiKSkKKyAgICAgICAgICAgIHJlbW92ZUNTU1Byb3BlcnR5KHN0eWxlT2ZFbGVtZW50LmdldCgp
LCBzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihwcm9wZXJ0aWVzW2ldKSk7CiAgICAgfQogCi0g
ICAgaWYgKHN0eWxlQ2hhbmdlLmFwcGx5VW5kZXJsaW5lKCkpCi0gICAgICAgIHN1cnJvdW5kTm9k
ZVJhbmdlV2l0aEVsZW1lbnQobm9kZSwgbm9kZSwgY3JlYXRlSFRNTEVsZW1lbnQoZG9jdW1lbnQo
KSwgdVRhZykpOwotCi0gICAgaWYgKHN0eWxlQ2hhbmdlLmFwcGx5TGluZVRocm91Z2goKSkKLSAg
ICAgICAgc3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudChub2RlLCBub2RlLCBjcmVhdGVIVE1M
RWxlbWVudChkb2N1bWVudCgpLCBzVGFnKSk7ICAgIAorICAgIHJldHVybiBzdHlsZVRvUHVzaERv
d24ucmVsZWFzZSgpOwogfQogCi12b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpwdXNoRG93blRleHRE
ZWNvcmF0aW9uU3R5bGVBcm91bmROb2RlKE5vZGUqIHRhcmdldE5vZGUpCit2b2lkIEFwcGx5U3R5
bGVDb21tYW5kOjpwdXNoRG93bklubGluZVN0eWxlc0Fyb3VuZE5vZGUoQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qIHN0eWxlLCBOb2RlKiB0YXJnZXROb2RlKQogewogICAgIEFTU0VSVCh0YXJn
ZXROb2RlKTsKLSAgICBOb2RlKiBoaWdoZXN0QW5jZXN0b3IgPSBoaWdoZXN0QW5jZXN0b3JXaXRo
VGV4dERlY29yYXRpb24odGFyZ2V0Tm9kZSk7CisgICAgSFRNTEVsZW1lbnQqIGhpZ2hlc3RBbmNl
c3RvciA9IGhpZ2hlc3RBbmNlc3RvcldpdGhDb25mbGljdGluZ0lubGluZVN0eWxlKHN0eWxlLCB0
YXJnZXROb2RlKTsKICAgICBpZiAoIWhpZ2hlc3RBbmNlc3RvcikKICAgICAgICAgcmV0dXJuOwog
CisgICAgVmVjdG9yPGludD4gcHJvcGVydGllczsKKyAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5bGUtPmVuZCgpOworICAgIGZvciAoQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3R5bGUtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgcHJvcGVydGllcy5hcHBlbmQoaXQtPmlkKCkpOwor
CiAgICAgLy8gVGhlIG91dGVyIGxvb3AgaXMgdHJhdmVyc2luZyB0aGUgdHJlZSB2ZXJ0aWNhbGx5
IGZyb20gaGlnaGVzdEFuY2VzdG9yIHRvIHRhcmdldE5vZGUKICAgICBOb2RlKiBjdXJyZW50ID0g
aGlnaGVzdEFuY2VzdG9yOwogICAgIHdoaWxlIChjdXJyZW50ICE9IHRhcmdldE5vZGUpIHsKICAg
ICAgICAgQVNTRVJUKGN1cnJlbnQpOworICAgICAgICBBU1NFUlQoY3VycmVudC0+aXNIVE1MRWxl
bWVudCgpKTsKICAgICAgICAgQVNTRVJUKGN1cnJlbnQtPmNvbnRhaW5zKHRhcmdldE5vZGUpKTsK
LSAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBkZWNvcmF0aW9uID0g
ZXh0cmFjdFRleHREZWNvcmF0aW9uU3R5bGUoY3VycmVudCk7CisgICAgICAgIFJlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVUb1B1c2hEb3duID0gZXh0cmFjdElubGluZVN0
eWxlVG9QdXNoRG93bihzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCAqPihjdXJyZW50KSwgcHJvcGVy
dGllcyk7CiAKICAgICAgICAgLy8gVGhlIGlubmVyIGxvb3Agd2lsbCBnbyB0aHJvdWdoIGNoaWxk
cmVuIG9uIGVhY2ggbGV2ZWwKICAgICAgICAgTm9kZSogY2hpbGQgPSBjdXJyZW50LT5maXJzdENo
aWxkKCk7CiAgICAgICAgIHdoaWxlIChjaGlsZCkgewogICAgICAgICAgICAgTm9kZSogbmV4dENo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CiAKLSAgICAgICAgICAgIC8vIEFwcGx5IHRleHQg
ZGVjb3JhdGlvbiB0byBhbGwgbm9kZXMgY29udGFpbmluZyB0YXJnZXROb2RlIGFuZCB0aGVpciBz
aWJsaW5ncyBidXQgTk9UIHRvIHRhcmdldE5vZGUKLSAgICAgICAgICAgIGlmIChjaGlsZCAhPSB0
YXJnZXROb2RlKQotICAgICAgICAgICAgICAgIGFwcGx5VGV4dERlY29yYXRpb25TdHlsZShjaGls
ZCwgZGVjb3JhdGlvbi5nZXQoKSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEFwcGx5
IHRoZSBleHRyYWN0ZWQgaW5saW5lIHN0eWxlIHRvIGFsbCBub2RlcyBjb250YWluaW5nIHRhcmdl
dE5vZGUgYW5kIHRoZWlyIHNpYmxpbmdzIGJ1dCBOT1QgdG8gdGFyZ2V0Tm9kZQorICAgICAgICAg
ICAgaWYgKGNoaWxkICE9IHRhcmdldE5vZGUgJiYgc3R5bGVUb1B1c2hEb3duKQorICAgICAgICAg
ICAgICAgIGFkZElubGluZVN0eWxlSWZOZWVkZWQoc3R5bGVUb1B1c2hEb3duLmdldCgpLCBjaGls
ZCwgY2hpbGQpOworCiAgICAgICAgICAgICAvLyBXZSBmb3VuZCB0aGUgbmV4dCBub2RlIGZvciB0
aGUgb3V0ZXIgbG9vcCAoY29udGFpbnMgdGFyZ2V0Tm9kZSkKICAgICAgICAgICAgIC8vIFdoZW4g
cmVhY2hlZCB0YXJnZXROb2RlLCBzdG9wIHRoZSBvdXRlciBsb29wIHVwb24gdGhlIGNvbXBsZXRp
b24gb2YgdGhlIGN1cnJlbnQgaW5uZXIgbG9vcAogICAgICAgICAgICAgaWYgKGNoaWxkID09IHRh
cmdldE5vZGUgfHwgY2hpbGQtPmNvbnRhaW5zKHRhcmdldE5vZGUpKQpAQCAtMTQ2MCwxMyArMTQx
NSwxMiBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsCiAgICAgQVNT
RVJUKGNvbXBhcmVQb3NpdGlvbnMoc3RhcnQsIGVuZCkgPD0gMCk7CiAgICAgCiAgICAgUmVmUHRy
PENTU1ZhbHVlPiB0ZXh0RGVjb3JhdGlvblNwZWNpYWxQcm9wZXJ0eSA9IHN0eWxlLT5nZXRQcm9w
ZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpOwot
CiAgICAgaWYgKHRleHREZWNvcmF0aW9uU3BlY2lhbFByb3BlcnR5KSB7Ci0gICAgICAgIHB1c2hE
b3duVGV4dERlY29yYXRpb25TdHlsZUFyb3VuZE5vZGUoc3RhcnQuZG93bnN0cmVhbSgpLm5vZGUo
KSk7Ci0gICAgICAgIHB1c2hEb3duVGV4dERlY29yYXRpb25TdHlsZUFyb3VuZE5vZGUoZW5kLnVw
c3RyZWFtKCkubm9kZSgpKTsKICAgICAgICAgc3R5bGUgPSBzdHlsZS0+Y29weSgpOwogICAgICAg
ICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbiwgdGV4dERlY29y
YXRpb25TcGVjaWFsUHJvcGVydHktPmNzc1RleHQoKSwgc3R5bGUtPmdldFByb3BlcnR5UHJpb3Jp
dHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCkpOwogICAgIH0KKyAg
ICBwdXNoRG93bklubGluZVN0eWxlc0Fyb3VuZE5vZGUoc3R5bGUuZ2V0KCksIHN0YXJ0LmRvd25z
dHJlYW0oKS5ub2RlKCkpOworICAgIHB1c2hEb3duSW5saW5lU3R5bGVzQXJvdW5kTm9kZShzdHls
ZS5nZXQoKSwgZW5kLnVwc3RyZWFtKCkubm9kZSgpKTsKIAogICAgIC8vIFRoZSBzIGFuZCBlIHZh
cmlhYmxlcyBzdG9yZSB0aGUgcG9zaXRpb25zIHVzZWQgdG8gc2V0IHRoZSBlbmRpbmcgc2VsZWN0
aW9uIGFmdGVyIHN0eWxlIHJlbW92YWwKICAgICAvLyB0YWtlcyBwbGFjZS4gVGhpcyB3aWxsIGhl
bHAgY2FsbGVycyB0byByZWNvZ25pemUgd2hlbiBlaXRoZXIgdGhlIHN0YXJ0IG5vZGUgb3IgdGhl
IGVuZCBub2RlCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAkocmV2aXNpb24g
NjQ3NzcpCisrKyBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAkod29ya2luZyBj
b3B5KQpAQCAtNzgsMTIgKzc4LDE0IEBAIHByaXZhdGU6CiAgICAgYm9vbCByZW1vdmVIVE1MRm9u
dFN0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgSFRNTEVsZW1lbnQqLCBJbmxpbmVT
dHlsZVJlbW92YWxNb2RlID0gUmVtb3ZlQXR0cmlidXRlc0FuZEVsZW1lbnRzKTsKICAgICBib29s
IHJlbW92ZUhUTUxCaWRpRW1iZWRkaW5nU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
LCBIVE1MRWxlbWVudCosIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgPSBSZW1vdmVBdHRyaWJ1dGVz
QW5kRWxlbWVudHMpOwogICAgIGJvb2wgcmVtb3ZlQ1NTU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qLCBIVE1MRWxlbWVudCosIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgPSBSZW1vdmVB
dHRyaWJ1dGVzQW5kRWxlbWVudHMpOworICAgIEhUTUxFbGVtZW50KiBoaWdoZXN0QW5jZXN0b3JX
aXRoQ29uZmxpY3RpbmdJbmxpbmVTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIE5v
ZGUqKTsKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGV4dHJhY3RJbmxp
bmVTdHlsZVRvUHVzaERvd24oSFRNTEVsZW1lbnQqLCBjb25zdCBWZWN0b3I8aW50PiYgcHJvcGVy
dGllcyk7CisgICAgdm9pZCBwdXNoRG93bklubGluZVN0eWxlc0Fyb3VuZE5vZGUoQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24qLCBOb2RlKik7CiAgICAgdm9pZCByZW1vdmVJbmxpbmVTdHlsZShQ
YXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiwgY29uc3QgUG9zaXRpb24mIHN0
YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKICAgICBib29sIG5vZGVGdWxseVNlbGVjdGVkKE5v
ZGUqLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpIGNvbnN0Owog
ICAgIGJvb2wgbm9kZUZ1bGx5VW5zZWxlY3RlZChOb2RlKiwgY29uc3QgUG9zaXRpb24mIHN0YXJ0
LCBjb25zdCBQb3NpdGlvbiYgZW5kKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPiBleHRyYWN0VGV4dERlY29yYXRpb25TdHlsZShOb2RlKik7CiAgICAg
dm9pZCBhcHBseVRleHREZWNvcmF0aW9uU3R5bGUoTm9kZSosIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uICpzdHlsZSk7Ci0gICAgdm9pZCBwdXNoRG93blRleHREZWNvcmF0aW9uU3R5bGVBcm91
bmROb2RlKE5vZGUqKTsKIAogICAgIC8vIHN0eWxlLWFwcGxpY2F0aW9uIGhlbHBlcnMKICAgICB2
b2lkIGFwcGx5QmxvY2tTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63971</attachid>
            <date>2010-08-09 20:29:37 -0700</date>
            <delta_ts>2010-08-10 17:46:51 -0700</delta_ts>
            <desc>work in progress 3</desc>
            <filename>bug-26871-20100809202936.patch</filename>
            <type>text/plain</type>
            <size>12805</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTA0MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMTAtMDgtMDkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2Fu
J3QgdW5ib2xkIHRleHQgaW4gZGl2IGluIGZvbnQtd2VpZ2h0IHNwYW4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2ODcxCisKKyAgICAgICAgKiBlZGl0
aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVD
b21tYW5kOjpyZW1vdmVDU1NTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29t
bWFuZDo6aGlnaGVzdEFuY2VzdG9yV2l0aENvbmZsaWN0aW5nSW5saW5lU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmV4dHJhY3RJbmxpbmVTdHlsZVRvUHVzaERv
d24pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5VGV4dERlY29y
YXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cHVzaERv
d25JbmxpbmVTdHlsZUFyb3VuZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNv
bW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlUGFyYWdyYXBo
cyk6CisKIDIwMTAtMDgtMDkgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUu
Y29tPgogCiAgICAgICAgIFF0IGJ1aWxkIGZpeCBhdHRlbXB0IFZJLgpJbmRleDogV2ViQ29yZS9l
ZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZpc2lvbiA2NTAyMSkKKysrIFdlYkNvcmUvZWRp
dGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMTEsNiArMTMx
MSw5IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNTU1N0eWxlKEMKICAgICAgICAg
fQogICAgIH0KIAorICAgIGlmIChtb2RlID09IFJlbW92ZU5vbmUpCisgICAgICAgIHJldHVybiBy
ZW1vdmVkOworCiAgICAgLy8gTm8gbmVlZCB0byBzZXJpYWxpemUgPGZvbyBzdHlsZT0iIj4gaWYg
d2UganVzdCByZW1vdmVkIHRoZSBsYXN0IGNzcyBwcm9wZXJ0eQogICAgIGlmIChkZWNsLT5pc0Vt
cHR5KCkpCiAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoZWxlbSwgc3R5bGVBdHRyKTsKQEAg
LTEzMjEsMjQgKzEzMjQsMTUgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlQ1NTU3R5
bGUoQwogICAgIHJldHVybiByZW1vdmVkOwogfQogCi1zdGF0aWMgYm9vbCBoYXNUZXh0RGVjb3Jh
dGlvblByb3BlcnR5KE5vZGUgKm5vZGUpCi17Ci0gICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2Rl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUg
PSBjb21wdXRlZFN0eWxlKG5vZGUpLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4
dERlY29yYXRpb24sIERvTm90VXBkYXRlTGF5b3V0KTsKLSAgICByZXR1cm4gdmFsdWUgJiYgIWVx
dWFsSWdub3JpbmdDYXNlKHZhbHVlLT5jc3NUZXh0KCksICJub25lIik7Ci19Ci0KLXN0YXRpYyBO
b2RlKiBoaWdoZXN0QW5jZXN0b3JXaXRoVGV4dERlY29yYXRpb24oTm9kZSAqbm9kZSkKK0hUTUxF
bGVtZW50KiBBcHBseVN0eWxlQ29tbWFuZDo6aGlnaGVzdEFuY2VzdG9yV2l0aENvbmZsaWN0aW5n
SW5saW5lU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBOb2RlKiBub2Rl
KQogewogICAgIEFTU0VSVChub2RlKTsKLSAgICBOb2RlKiByZXN1bHQgPSAwOworICAgIEhUTUxF
bGVtZW50KiByZXN1bHQgPSAwOwogICAgIE5vZGUqIHVuc3BsaXR0YWJsZUVsZW1lbnQgPSB1bnNw
bGl0dGFibGVFbGVtZW50Rm9yUG9zaXRpb24oUG9zaXRpb24obm9kZSwgMCkpOwogCiAgICAgZm9y
IChOb2RlICpuID0gbm9kZTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAo
aGFzVGV4dERlY29yYXRpb25Qcm9wZXJ0eShuKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IG47Cisg
ICAgICAgIGlmIChuLT5pc0hUTUxFbGVtZW50KCkgJiYgc2hvdWxkUmVtb3ZlSW5saW5lU3R5bGVG
cm9tRWxlbWVudChzdHlsZSwgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihuKSkpCisgICAgICAg
ICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG4pOwogICAgICAgICAvLyBT
aG91bGQgc3RvcCBhdCB0aGUgZWRpdGFibGUgcm9vdCAoY2Fubm90IGNyb3NzIGVkaXRpbmcgYm91
bmRhcnkpIGFuZAogICAgICAgICAvLyBhbHNvIHN0b3AgYXQgdGhlIHVuc3BsaXR0YWJsZSBlbGVt
ZW50IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBVQXMKICAgICAgICAgaWYgKG4gPT0gdW5z
cGxpdHRhYmxlRWxlbWVudCkKQEAgLTEzNDgsNyArMTM0Miw3IEBAIHN0YXRpYyBOb2RlKiBoaWdo
ZXN0QW5jZXN0b3JXaXRoVGV4dERlY28KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1QYXNzUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBBcHBseVN0eWxlQ29tbWFuZDo6ZXh0cmFj
dFRleHREZWNvcmF0aW9uU3R5bGUoTm9kZSogbm9kZSkKK1Bhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IEFwcGx5U3R5bGVDb21tYW5kOjpleHRyYWN0SW5saW5lU3R5bGVUb1B1
c2hEb3duKE5vZGUqIG5vZGUsIGNvbnN0IFZlY3RvcjxpbnQ+JiBwcm9wZXJ0aWVzKQogewogICAg
IEFTU0VSVChub2RlKTsKICAgICBBU1NFUlQobm9kZS0+aXNFbGVtZW50Tm9kZSgpKTsKQEAgLTEz
NjIsNzIgKzEzNTYsNzIgQEAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4g
QQogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaW50IHByb3BlcnRp
ZXNbMV0gPSB7IENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24gfTsKLSAgICBSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IHRleHREZWNvcmF0aW9uU3R5bGUgPSBzdHlsZS0+Y29weVBy
b3BlcnRpZXNJblNldChwcm9wZXJ0aWVzLCAxKTsKKyAgICBzdHlsZSA9IHN0eWxlLT5jb3B5UHJv
cGVydGllc0luU2V0KHByb3BlcnRpZXMuZGF0YSgpLCBwcm9wZXJ0aWVzLnNpemUoKSk7CiAKLSAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHByb3BlcnR5ID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUo
Q1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7Ci0gICAgaWYgKHByb3BlcnR5ICYmICFlcXVhbEln
bm9yaW5nQ2FzZShwcm9wZXJ0eS0+Y3NzVGV4dCgpLCAibm9uZSIpKQotICAgICAgICByZW1vdmVD
U1NQcm9wZXJ0eShlbGVtZW50LCBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHByb3BlcnRpZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgUmVm
UHRyPENTU1ZhbHVlPiBwcm9wZXJ0eSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3Bl
cnRpZXNbaV0pOworICAgICAgICBpZiAocHJvcGVydHkgJiYgIWVxdWFsSWdub3JpbmdDYXNlKHBy
b3BlcnR5LT5jc3NUZXh0KCksICJub25lIikpCisgICAgICAgICAgICByZW1vdmVDU1NQcm9wZXJ0
eShlbGVtZW50LCBzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihwcm9wZXJ0aWVzW2ldKSk7Cisg
ICAgfQorCisvLyAgICBpZiAoaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVTdHlsZVNw
YW4oZWxlbWVudCkpCisvLyAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihlbGVt
ZW50KTsKIAotICAgIHJldHVybiB0ZXh0RGVjb3JhdGlvblN0eWxlLnJlbGVhc2UoKTsKKyAgICBy
ZXR1cm4gc3R5bGUucmVsZWFzZSgpOwogfQogCiB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBs
eVRleHREZWNvcmF0aW9uU3R5bGUoTm9kZSAqbm9kZSwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24gKnN0eWxlKQogewogICAgIEFTU0VSVChub2RlKTsKIAotICAgIGlmICghc3R5bGUgfHwgc3R5
bGUtPmNzc1RleHQoKS5pc0VtcHR5KCkpCisgICAgaWYgKCFzdHlsZSB8fCAhc3R5bGUtPmxlbmd0
aCgpIHx8ICFub2RlLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHlsZUNo
YW5nZSBzdHlsZUNoYW5nZShzdHlsZSwgUG9zaXRpb24obm9kZSwgMCkpOwotICAgIGlmIChzdHls
ZUNoYW5nZS5jc3NTdHlsZSgpLmxlbmd0aCgpKSB7Ci0gICAgICAgIGlmIChub2RlLT5pc1RleHRO
b2RlKCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gc3R5bGVTcGFuID0gY3Jl
YXRlU3R5bGVTcGFuRWxlbWVudChkb2N1bWVudCgpKTsKLSAgICAgICAgICAgIHN1cnJvdW5kTm9k
ZVJhbmdlV2l0aEVsZW1lbnQobm9kZSwgbm9kZSwgc3R5bGVTcGFuLmdldCgpKTsKLSAgICAgICAg
ICAgIG5vZGUgPSBzdHlsZVNwYW4uZ2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW5v
ZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBIVE1M
RWxlbWVudCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KG5vZGUpOwotICAg
ICAgICBTdHJpbmcgY3NzVGV4dCA9IHN0eWxlQ2hhbmdlLmNzc1N0eWxlKCk7CisgICAgLy8gU2lu
Y2UgYWRkSW5saW5lU3R5bGVJZk5lZWRlZCBjYW4gb25seSBoYW5kbGUgaW5saW5lIGVsZW1lbnRz
LCB0YWtlIGNhcmUgb2YgYmxvY2sgZWxlbWVudHMgaGVyZS4KKyAgICBpZiAobm9kZS0+cmVuZGVy
ZXIoKS0+aXNCbG9ja0Zsb3coKSAmJiBub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAg
SFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5vZGUpOwor
ICAgICAgICBTdHJpbmcgY3NzVGV4dCA9IHN0eWxlLT5jc3NUZXh0KCk7CiAgICAgICAgIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uICpkZWNsID0gZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCk7
CiAgICAgICAgIGlmIChkZWNsKQogICAgICAgICAgICAgY3NzVGV4dCArPSBkZWNsLT5jc3NUZXh0
KCk7CiAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVBdHRyLCBjc3NUZXh0
KTsKICAgICB9CiAKLSAgICBpZiAoc3R5bGVDaGFuZ2UuYXBwbHlVbmRlcmxpbmUoKSkKLSAgICAg
ICAgc3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudChub2RlLCBub2RlLCBjcmVhdGVIVE1MRWxl
bWVudChkb2N1bWVudCgpLCB1VGFnKSk7CisgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCktPmlzVGV4
dCgpICYmIHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihub2RlLT5yZW5kZXJlcigpKS0+aXNBbGxD
b2xsYXBzaWJsZVdoaXRlc3BhY2UoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHN0eWxl
Q2hhbmdlLmFwcGx5TGluZVRocm91Z2goKSkKLSAgICAgICAgc3Vycm91bmROb2RlUmFuZ2VXaXRo
RWxlbWVudChub2RlLCBub2RlLCBjcmVhdGVIVE1MRWxlbWVudChkb2N1bWVudCgpLCBzVGFnKSk7
ICAgIAorICAgIGFkZElubGluZVN0eWxlSWZOZWVkZWQoc3R5bGUsIG5vZGUsIG5vZGUpOwogfQog
Ci12b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpwdXNoRG93blRleHREZWNvcmF0aW9uU3R5bGVBcm91
bmROb2RlKE5vZGUqIHRhcmdldE5vZGUpCit2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpwdXNoRG93
bklubGluZVN0eWxlQXJvdW5kTm9kZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUs
IE5vZGUqIHRhcmdldE5vZGUpCiB7CiAgICAgQVNTRVJUKHRhcmdldE5vZGUpOwotICAgIE5vZGUq
IGhpZ2hlc3RBbmNlc3RvciA9IGhpZ2hlc3RBbmNlc3RvcldpdGhUZXh0RGVjb3JhdGlvbih0YXJn
ZXROb2RlKTsKKyAgICBIVE1MRWxlbWVudCogaGlnaGVzdEFuY2VzdG9yID0gaGlnaGVzdEFuY2Vz
dG9yV2l0aENvbmZsaWN0aW5nSW5saW5lU3R5bGUoc3R5bGUsIHRhcmdldE5vZGUpOwogICAgIGlm
ICghaGlnaGVzdEFuY2VzdG9yKQogICAgICAgICByZXR1cm47CiAKKyAgICBWZWN0b3I8aW50PiBw
cm9wZXJ0aWVzOworICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBzdHlsZS0+ZW5kKCk7CisgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQor
ICAgICAgICBwcm9wZXJ0aWVzLmFwcGVuZChpdC0+aWQoKSk7CisKICAgICAvLyBUaGUgb3V0ZXIg
bG9vcCBpcyB0cmF2ZXJzaW5nIHRoZSB0cmVlIHZlcnRpY2FsbHkgZnJvbSBoaWdoZXN0QW5jZXN0
b3IgdG8gdGFyZ2V0Tm9kZQogICAgIE5vZGUqIGN1cnJlbnQgPSBoaWdoZXN0QW5jZXN0b3I7CiAg
ICAgd2hpbGUgKGN1cnJlbnQgIT0gdGFyZ2V0Tm9kZSkgewogICAgICAgICBBU1NFUlQoY3VycmVu
dCk7CisgICAgICAgIEFTU0VSVChjdXJyZW50LT5pc0hUTUxFbGVtZW50KCkpOwogICAgICAgICBB
U1NFUlQoY3VycmVudC0+Y29udGFpbnModGFyZ2V0Tm9kZSkpOwotICAgICAgICBSZWZQdHI8Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGRlY29yYXRpb24gPSBleHRyYWN0VGV4dERlY29yYXRp
b25TdHlsZShjdXJyZW50KTsKKyAgICAgICAgTm9kZSogY2hpbGQgPSBjdXJyZW50LT5maXJzdENo
aWxkKCk7CisgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVU
b1B1c2hEb3duID0gZXh0cmFjdElubGluZVN0eWxlVG9QdXNoRG93bihjdXJyZW50LCBwcm9wZXJ0
aWVzKTsKIAogICAgICAgICAvLyBUaGUgaW5uZXIgbG9vcCB3aWxsIGdvIHRocm91Z2ggY2hpbGRy
ZW4gb24gZWFjaCBsZXZlbAotICAgICAgICBOb2RlKiBjaGlsZCA9IGN1cnJlbnQtPmZpcnN0Q2hp
bGQoKTsKICAgICAgICAgd2hpbGUgKGNoaWxkKSB7CiAgICAgICAgICAgICBOb2RlKiBuZXh0Q2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKIAogICAgICAgICAgICAgLy8gQXBwbHkgdGV4dCBk
ZWNvcmF0aW9uIHRvIGFsbCBub2RlcyBjb250YWluaW5nIHRhcmdldE5vZGUgYW5kIHRoZWlyIHNp
YmxpbmdzIGJ1dCBOT1QgdG8gdGFyZ2V0Tm9kZQogICAgICAgICAgICAgaWYgKGNoaWxkICE9IHRh
cmdldE5vZGUpCi0gICAgICAgICAgICAgICAgYXBwbHlUZXh0RGVjb3JhdGlvblN0eWxlKGNoaWxk
LCBkZWNvcmF0aW9uLmdldCgpKTsKLSAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGFwcGx5
VGV4dERlY29yYXRpb25TdHlsZShjaGlsZCwgc3R5bGVUb1B1c2hEb3duLmdldCgpKTsKKwogICAg
ICAgICAgICAgLy8gV2UgZm91bmQgdGhlIG5leHQgbm9kZSBmb3IgdGhlIG91dGVyIGxvb3AgKGNv
bnRhaW5zIHRhcmdldE5vZGUpCiAgICAgICAgICAgICAvLyBXaGVuIHJlYWNoZWQgdGFyZ2V0Tm9k
ZSwgc3RvcCB0aGUgb3V0ZXIgbG9vcCB1cG9uIHRoZSBjb21wbGV0aW9uIG9mIHRoZSBjdXJyZW50
IGlubmVyIGxvb3AKICAgICAgICAgICAgIGlmIChjaGlsZCA9PSB0YXJnZXROb2RlIHx8IGNoaWxk
LT5jb250YWlucyh0YXJnZXROb2RlKSkKQEAgLTE0NDcsMTQgKzE0NDEsMTQgQEAgdm9pZCBBcHBs
eVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bAogICAgIEFTU0VSVChjb21wYXJlUG9zaXRp
b25zKHN0YXJ0LCBlbmQpIDw9IDApOwogICAgIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdGV4dERl
Y29yYXRpb25TcGVjaWFsUHJvcGVydHkgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQ
cm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KTsKLQogICAgIGlmICh0ZXh0RGVj
b3JhdGlvblNwZWNpYWxQcm9wZXJ0eSkgewotICAgICAgICBwdXNoRG93blRleHREZWNvcmF0aW9u
U3R5bGVBcm91bmROb2RlKHN0YXJ0LmRvd25zdHJlYW0oKS5ub2RlKCkpOwotICAgICAgICBwdXNo
RG93blRleHREZWNvcmF0aW9uU3R5bGVBcm91bmROb2RlKGVuZC51cHN0cmVhbSgpLm5vZGUoKSk7
CiAgICAgICAgIHN0eWxlID0gc3R5bGUtPmNvcHkoKTsKICAgICAgICAgc3R5bGUtPnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24sIHRleHREZWNvcmF0aW9uU3BlY2lhbFByb3Bl
cnR5LT5jc3NUZXh0KCksIHN0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KENTU1Byb3BlcnR5V2Vi
a2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpKTsKICAgICB9CiAKKyAgICBwdXNoRG93bklubGlu
ZVN0eWxlQXJvdW5kTm9kZShzdHlsZS5nZXQoKSwgc3RhcnQuZG93bnN0cmVhbSgpLm5vZGUoKSk7
CisgICAgcHVzaERvd25JbmxpbmVTdHlsZUFyb3VuZE5vZGUoc3R5bGUuZ2V0KCksIGVuZC51cHN0
cmVhbSgpLm5vZGUoKSk7CisKICAgICAvLyBUaGUgcyBhbmQgZSB2YXJpYWJsZXMgc3RvcmUgdGhl
IHBvc2l0aW9ucyB1c2VkIHRvIHNldCB0aGUgZW5kaW5nIHNlbGVjdGlvbiBhZnRlciBzdHlsZSBy
ZW1vdmFsCiAgICAgLy8gdGFrZXMgcGxhY2UuIFRoaXMgd2lsbCBoZWxwIGNhbGxlcnMgdG8gcmVj
b2duaXplIHdoZW4gZWl0aGVyIHRoZSBzdGFydCBub2RlIG9yIHRoZSBlbmQgbm9kZQogICAgIC8v
IGFyZSByZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50IGR1cmluZyB0aGUgd29yayBvZiB0aGlzIGZ1
bmN0aW9uLgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgJKHJldmlzaW9uIDY1
MDIxKQorKysgV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc4LDEyICs3OCwxMyBAQCBwcml2YXRlOgogICAgIGJvb2wgcmVtb3ZlSFRNTEZvbnRT
dHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50KiwgSW5saW5lU3R5
bGVSZW1vdmFsTW9kZSA9IFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVtZW50cyk7CiAgICAgYm9vbCBy
ZW1vdmVIVE1MQmlkaUVtYmVkZGluZ1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwg
SFRNTEVsZW1lbnQqLCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlID0gUmVtb3ZlQXR0cmlidXRlc0Fu
ZEVsZW1lbnRzKTsKICAgICBib29sIHJlbW92ZUNTU1N0eWxlKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiwgSFRNTEVsZW1lbnQqLCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlID0gUmVtb3ZlQXR0
cmlidXRlc0FuZEVsZW1lbnRzKTsKKyAgICBIVE1MRWxlbWVudCogaGlnaGVzdEFuY2VzdG9yV2l0
aENvbmZsaWN0aW5nSW5saW5lU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBOb2Rl
Kik7CisgICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZXh0cmFjdElu
bGluZVN0eWxlVG9QdXNoRG93bihOb2RlKiwgY29uc3QgVmVjdG9yPGludD4mKTsKKyAgICB2b2lk
IGFwcGx5VGV4dERlY29yYXRpb25TdHlsZShOb2RlKiwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24gKnN0eWxlKTsKKyAgICB2b2lkIHB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlKENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgTm9kZSopOwogICAgIHZvaWQgcmVtb3ZlSW5saW5lU3R5
bGUoUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4sIGNvbnN0IFBvc2l0aW9u
JiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7CiAgICAgYm9vbCBub2RlRnVsbHlTZWxlY3Rl
ZChOb2RlKiwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKSBjb25z
dDsKICAgICBib29sIG5vZGVGdWxseVVuc2VsZWN0ZWQoTm9kZSosIGNvbnN0IFBvc2l0aW9uJiBz
dGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gZXh0cmFjdFRleHREZWNvcmF0aW9uU3R5bGUoTm9kZSopOwot
ICAgIHZvaWQgYXBwbHlUZXh0RGVjb3JhdGlvblN0eWxlKE5vZGUqLCBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiAqc3R5bGUpOwotICAgIHZvaWQgcHVzaERvd25UZXh0RGVjb3JhdGlvblN0eWxl
QXJvdW5kTm9kZShOb2RlKik7CiAKICAgICAvLyBzdHlsZS1hcHBsaWNhdGlvbiBoZWxwZXJzCiAg
ICAgdm9pZCBhcHBseUJsb2NrU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qKTsKSW5k
ZXg6IFdlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9u
IDY1MDIxKQorKysgV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MzAsNyArNjMwLDggQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21t
YW5kOjptZXJnZVBhcmFncgogICAgIC8vIG1vdmVQYXJhZ3JhcGhzIHdpbGwgaW5zZXJ0IHBsYWNl
aG9sZGVycyBpZiBpdCByZW1vdmVzIGJsb2NrcyB0aGF0IHdvdWxkIHJlcXVpcmUgdGhlaXIgdXNl
LCBkb24ndCBsZXQgYmxvY2sKICAgICAvLyByZW1vdmFscyB0aGF0IGl0IGRvZXMgY2F1c2UgdGhl
IGluc2VydGlvbiBvZiAqYW5vdGhlciogcGxhY2Vob2xkZXIuCiAgICAgYm9vbCBuZWVkUGxhY2Vo
b2xkZXIgPSBtX25lZWRQbGFjZWhvbGRlcjsKLSAgICBtb3ZlUGFyYWdyYXBoKHN0YXJ0T2ZQYXJh
Z3JhcGhUb01vdmUsIGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLCBtZXJnZURlc3RpbmF0aW9uKTsKKyAg
ICBib29sIHBhcmFncmFwaFRvTWVyZ2VJc0VtcHR5ID0gKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUg
PT0gZW5kT2ZQYXJhZ3JhcGhUb01vdmUpOworICAgIG1vdmVQYXJhZ3JhcGgoc3RhcnRPZlBhcmFn
cmFwaFRvTW92ZSwgZW5kT2ZQYXJhZ3JhcGhUb01vdmUsIG1lcmdlRGVzdGluYXRpb24sIGZhbHNl
LCAhcGFyYWdyYXBoVG9NZXJnZUlzRW1wdHkpOwogICAgIG1fbmVlZFBsYWNlaG9sZGVyID0gbmVl
ZFBsYWNlaG9sZGVyOwogICAgIC8vIFRoZSBlbmRpbmdQb3NpdGlvbiB3YXMgbGlrZWx5IGNsb2Ji
ZXJlZCBieSB0aGUgbW92ZSwgc28gcmVjb21wdXRlIGl0IChtb3ZlUGFyYWdyYXBoIHNlbGVjdHMg
dGhlIG1vdmVkIHBhcmFncmFwaCkuCiAgICAgbV9lbmRpbmdQb3NpdGlvbiA9IGVuZGluZ1NlbGVj
dGlvbigpLnN0YXJ0KCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NTA0MykKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEwLTA4LTA5ICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIENhbid0IHVuYm9sZCB0ZXh0IGluIGRpdiBpbiBmb250
LXdlaWdodCBzcGFuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yNjg3MQorCisgICAgICAgICogZWRpdGluZy9kZWxldGluZy9kZWxldGUtYnItMDExLWV4
cGVjdGVkLnR4dDoKKwogMjAxMC0wOC0wOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgpJbmRleDogTGF5b3V0VGVzdHMv
ZWRpdGluZy9kZWxldGluZy9kZWxldGUtYnItMDExLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9lZGl0aW5nL2RlbGV0aW5nL2RlbGV0ZS1ici0wMTEtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiA2NTAyMSkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZGVsZXRpbmcvZGVsZXRl
LWJyLTAxMS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE2ICsyNiw3IEBAIGFm
dGVyIGRlbGV0aW9uOgogfCA8ZGl2PgogfCAgIGNsYXNzPSJlZGl0aW5nIgogfCAgIGlkPSJ0ZXN0
IgotfCAgIDxzcGFuPgotfCAgICAgY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iCi18ICAgICBzdHls
ZT0iZm9udC1zaXplOiBtZWRpdW07IgotfCAgICAgPGZvbnQ+Ci18ICAgICAgIGNsYXNzPSJBcHBs
ZS1zdHlsZS1zcGFuIgotfCAgICAgICBzaXplPSI2IgotfCAgICAgICA8c3Bhbj4KLXwgICAgICAg
ICBjbGFzcz0iQXBwbGUtc3R5bGUtc3BhbiIKLXwgICAgICAgICBzdHlsZT0iZm9udC1zaXplOiAy
NHB4OyIKLXwgICAgICAgICA8I3NlbGVjdGlvbi1jYXJldD4KLXwgICAgICAgICA8YnI+Cit8ICAg
PCNzZWxlY3Rpb24tY2FyZXQ+Cit8ICAgPGJyPgogfCAiCiAiCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64058</attachid>
            <date>2010-08-10 17:46:55 -0700</date>
            <delta_ts>2010-08-11 15:06:27 -0700</delta_ts>
            <desc>fixes the bug</desc>
            <filename>bug-26871-20100810174654.patch</filename>
            <type>text/plain</type>
            <size>23913</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTEwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMDgtMTAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2Fu
J3QgdW5ib2xkIHRleHQgaW4gZGl2IGluIGZvbnQtd2VpZ2h0IHNwYW4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2ODcxCisKKyAgICAgICAgVGhlIGJ1
ZyB3YXMgY2F1c2VkIGJ5IHJlbW92ZUlubGluZVN0eWxlIG5vdCBiZWluZyBhYmxlIHRvIGluY2x1
ZGUgc3R5bGVkIGlubGluZSBub2RlcyBhcm91bmQgdGhlIHN0YXJ0LgorICAgICAgICBTb2x2ZWQg
dGhpcyBwcm9ibGVtIGJ5IHB1c2hpbmcgZG93biBhbGwgaW5saW5lIHN0eWxlcyBpbnN0ZWFkIG9m
IGp1c3QgdGV4dC1kZWNvcmF0aW9ucy4KKyAgICAgICAgVGhpcyBhcHByb2FjaCBhbGxvd3MgcmVt
b3ZlSW5saW5lU3R5bGUgdG8gcmVtb3ZlIHN0eWxlZCBhbmNlc3RvcnMgcHJvcGVybHkgYW5kIGdl
bmVyYXRlcyBjb21wYWN0IG1hcmt1cHMuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9zdHlsZS9w
dXNoLWRvd24taW5saW5lLXN0eWxlcy5odG1sCisKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1v
dmVDU1NTdHlsZSk6IE5vIGxvbmdlciByZW1vdmVzIGF0dHJpYnV0ZXMgb3Igbm9kZSB3aGVuIG1v
ZGUgPT0gUmVtb3ZlTm9uZS4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpo
aWdoZXN0QW5jZXN0b3JXaXRoQ29uZmxpY3RpbmdJbmxpbmVTdHlsZSk6IENhbGxzIHNob3VsZFJl
bW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQKKyAgICAgICAgdG8gZGV0ZXJtaW5lIHRoZSBoaWdo
ZXN0IGFuY2VzdG9yIHdob3NlIHN0eWxlIG5lZWRzIHRvIGJlIHB1c2hlZCBkb3duLgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmV4dHJhY3RJbmxpbmVTdHlsZVRvUHVzaERv
d24pOiBSZW5hbWVkIGZyb20gZXh0cmFjdFRleHREZWNvcmF0aW9uU3R5bGUuCisgICAgICAgIEV4
dHJhY3RzIGFsbCBpbmxpbmUgQ1NTIHByb3BlcnRpZXMgc3BlY2lmaWVkIGluc3RlYWQgb2YganVz
dCB0ZXh0IGRlY29yYXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6
OmFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duKTogUmVuYW1lZCBmcm9tIGFwcGx5VGV4dERlY29y
YXRpb25TdHlsZS4KKyAgICAgICAgQXBwbGllcyBpbmxpbmUgc3R5bGVzIHVzaW5nIGFkZElubGlu
ZVN0eWxlSWZOZWVkZWQgb3IgYWRkcyBpbmxpbmUgQ1NTIHZhbHVlcy4KKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5U3R5bGVDb21tYW5kOjpwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZSk6IFJl
bmFtZWQgZnJvbSBwdXNoRG93blRleHREZWNvcmF0aW9uU3R5bGVBcm91bmROb2RlLgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlKTogQ2FsbHMg
cHVzaERvd25UZXh0RGVjb3JhdGlvblN0eWxlQXJvdW5kTm9kZS4KKyAgICAgICAgKiBlZGl0aW5n
L0FwcGx5U3R5bGVDb21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25D
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1l
cmdlUGFyYWdyYXBocyk6IFByZXZlbnRzIG1vdmVQYXJhZ3JhcGggZnJvbSBwcmVzZXJ2aW5nCisg
ICAgICAgIHRoZSBzdHlsZSBvZiBhbiBlbXB0eSBwYXJhZ3JhcGggd2hlbiBtZXJnZWQgd2l0aCB0
aGUgcHJldmlvdXMgcGFyYWdyYXBoIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoYXQgc3R5bGUgYW55
d2F5cy4KKwogMjAxMC0wOC0xMCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgUnViYmVyIHN0YW1wZWQgYnkgU2FtIFdlaW5pZwpJbmRleDogV2Vi
Q29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZpc2lvbiA2NTA4MCkKKysrIFdlYkNv
cmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMTEs
NiArMTMxMSw5IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNTU1N0eWxlKEMKICAg
ICAgICAgfQogICAgIH0KIAorICAgIGlmIChtb2RlID09IFJlbW92ZU5vbmUpCisgICAgICAgIHJl
dHVybiByZW1vdmVkOworCiAgICAgLy8gTm8gbmVlZCB0byBzZXJpYWxpemUgPGZvbyBzdHlsZT0i
Ij4gaWYgd2UganVzdCByZW1vdmVkIHRoZSBsYXN0IGNzcyBwcm9wZXJ0eQogICAgIGlmIChkZWNs
LT5pc0VtcHR5KCkpCiAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoZWxlbSwgc3R5bGVBdHRy
KTsKQEAgLTEzMjEsMjQgKzEzMjQsMTcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3Zl
Q1NTU3R5bGUoQwogICAgIHJldHVybiByZW1vdmVkOwogfQogCi1zdGF0aWMgYm9vbCBoYXNUZXh0
RGVjb3JhdGlvblByb3BlcnR5KE5vZGUgKm5vZGUpCitIVE1MRWxlbWVudCogQXBwbHlTdHlsZUNv
bW1hbmQ6OmhpZ2hlc3RBbmNlc3RvcldpdGhDb25mbGljdGluZ0lubGluZVN0eWxlKENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUt
PmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPENT
U1ZhbHVlPiB2YWx1ZSA9IGNvbXB1dGVkU3R5bGUobm9kZSktPmdldFByb3BlcnR5Q1NTVmFsdWUo
Q1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbiwgRG9Ob3RVcGRhdGVMYXlvdXQpOwotICAgIHJldHVy
biB2YWx1ZSAmJiAhZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUtPmNzc1RleHQoKSwgIm5vbmUiKTsK
LX0KKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiAwOwogCi1zdGF0aWMgTm9kZSogaGln
aGVzdEFuY2VzdG9yV2l0aFRleHREZWNvcmF0aW9uKE5vZGUgKm5vZGUpCi17Ci0gICAgQVNTRVJU
KG5vZGUpOwotICAgIE5vZGUqIHJlc3VsdCA9IDA7CisgICAgSFRNTEVsZW1lbnQqIHJlc3VsdCA9
IDA7CiAgICAgTm9kZSogdW5zcGxpdHRhYmxlRWxlbWVudCA9IHVuc3BsaXR0YWJsZUVsZW1lbnRG
b3JQb3NpdGlvbihQb3NpdGlvbihub2RlLCAwKSk7CiAKICAgICBmb3IgKE5vZGUgKm4gPSBub2Rl
OyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChoYXNUZXh0RGVjb3JhdGlv
blByb3BlcnR5KG4pKQotICAgICAgICAgICAgcmVzdWx0ID0gbjsKKyAgICAgICAgaWYgKG4tPmlz
SFRNTEVsZW1lbnQoKSAmJiBzaG91bGRSZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxl
LCBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG4pKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0
YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obik7CiAgICAgICAgIC8vIFNob3VsZCBzdG9wIGF0IHRo
ZSBlZGl0YWJsZSByb290IChjYW5ub3QgY3Jvc3MgZWRpdGluZyBib3VuZGFyeSkgYW5kCiAgICAg
ICAgIC8vIGFsc28gc3RvcCBhdCB0aGUgdW5zcGxpdHRhYmxlIGVsZW1lbnQgdG8gYmUgY29uc2lz
dGVudCB3aXRoIG90aGVyIFVBcwogICAgICAgICBpZiAobiA9PSB1bnNwbGl0dGFibGVFbGVtZW50
KQpAQCAtMTM0OCw3ICsxMzQ0LDcgQEAgc3RhdGljIE5vZGUqIGhpZ2hlc3RBbmNlc3RvcldpdGhU
ZXh0RGVjbwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IEFwcGx5U3R5bGVDb21tYW5kOjpleHRyYWN0VGV4dERlY29yYXRpb25T
dHlsZShOb2RlKiBub2RlKQorUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4g
QXBwbHlTdHlsZUNvbW1hbmQ6OmV4dHJhY3RJbmxpbmVTdHlsZVRvUHVzaERvd24oTm9kZSogbm9k
ZSwgY29uc3QgVmVjdG9yPGludD4mIHByb3BlcnRpZXMpCiB7CiAgICAgQVNTRVJUKG5vZGUpOwog
ICAgIEFTU0VSVChub2RlLT5pc0VsZW1lbnROb2RlKCkpOwpAQCAtMTM2Miw3MiArMTM1OCw3NSBA
QCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBBCiAgICAgaWYgKCFzdHls
ZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpbnQgcHJvcGVydGllc1sxXSA9IHsgQ1NTUHJv
cGVydHlUZXh0RGVjb3JhdGlvbiB9OwotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gdGV4dERlY29yYXRpb25TdHlsZSA9IHN0eWxlLT5jb3B5UHJvcGVydGllc0luU2V0KHBy
b3BlcnRpZXMsIDEpOworICAgIHN0eWxlID0gc3R5bGUtPmNvcHlQcm9wZXJ0aWVzSW5TZXQocHJv
cGVydGllcy5kYXRhKCksIHByb3BlcnRpZXMuc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcHJvcGVydGllcy5zaXplKCk7IGkrKykgeworICAgICAgICBSZWZQdHI8Q1NTVmFs
dWU+IHByb3BlcnR5ID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydGllc1tpXSk7
CisgICAgICAgIGlmIChwcm9wZXJ0eSAmJiAhZXF1YWxJZ25vcmluZ0Nhc2UocHJvcGVydHktPmNz
c1RleHQoKSwgIm5vbmUiKSkKKyAgICAgICAgICAgIHJlbW92ZUNTU1Byb3BlcnR5KGVsZW1lbnQs
IHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KHByb3BlcnRpZXNbaV0pKTsKKyAgICB9CisKKyAg
ICBpZiAoZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkgJiYgZWxlbWVudC0+aW5saW5lU3R5bGVE
ZWNsKCktPmlzRW1wdHkoKSkKKyAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LCBz
dHlsZUF0dHIpOwogCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBwcm9wZXJ0eSA9IHN0eWxlLT5nZXRQ
cm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pOwotICAgIGlmIChwcm9w
ZXJ0eSAmJiAhZXF1YWxJZ25vcmluZ0Nhc2UocHJvcGVydHktPmNzc1RleHQoKSwgIm5vbmUiKSkK
LSAgICAgICAgcmVtb3ZlQ1NTUHJvcGVydHkoZWxlbWVudCwgQ1NTUHJvcGVydHlUZXh0RGVjb3Jh
dGlvbik7CisgICAgaWYgKGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlU3R5bGVTcGFu
KGVsZW1lbnQpKQorICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQp
OwogCi0gICAgcmV0dXJuIHRleHREZWNvcmF0aW9uU3R5bGUucmVsZWFzZSgpOworICAgIHJldHVy
biBzdHlsZS5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5VGV4
dERlY29yYXRpb25TdHlsZShOb2RlICpub2RlLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAq
c3R5bGUpCit2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlVG9QdXNoRG93
bihOb2RlICpub2RlLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUpCiB7CiAgICAg
QVNTRVJUKG5vZGUpOwogCi0gICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+Y3NzVGV4dCgpLmlzRW1w
dHkoKSkKKyAgICBpZiAoIXN0eWxlIHx8ICFzdHlsZS0+bGVuZ3RoKCkgfHwgIW5vZGUtPnJlbmRl
cmVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0eWxlQ2hhbmdlIHN0eWxlQ2hhbmdlKHN0
eWxlLCBQb3NpdGlvbihub2RlLCAwKSk7Ci0gICAgaWYgKHN0eWxlQ2hhbmdlLmNzc1N0eWxlKCku
bGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkgewotICAgICAgICAg
ICAgUmVmUHRyPEhUTUxFbGVtZW50PiBzdHlsZVNwYW4gPSBjcmVhdGVTdHlsZVNwYW5FbGVtZW50
KGRvY3VtZW50KCkpOwotICAgICAgICAgICAgc3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudChu
b2RlLCBub2RlLCBzdHlsZVNwYW4uZ2V0KCkpOwotICAgICAgICAgICAgbm9kZSA9IHN0eWxlU3Bh
bi5nZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgp
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIEhUTUxFbGVtZW50ICplbGVtZW50ID0g
c3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQgKj4obm9kZSk7Ci0gICAgICAgIFN0cmluZyBjc3NUZXh0
ID0gc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKTsKKyAgICAvLyBTaW5jZSBhZGRJbmxpbmVTdHlsZUlm
TmVlZGVkIGNhbid0IGFkZCBzdHlsZXMgdG8gYmxvY2stZmxvdyByZW5kZXIgb2JqZWN0cywgYWRk
IHN0eWxlIGF0dHJpYnV0ZSBpbnN0ZWFkLgorICAgIC8vIEZJWE1FOiBhcHBseUlubGluZVN0eWxl
VG9SYW5nZSBzaG91bGQgYmUgdXNlZCBoZXJlIGluc3RlYWQuCisgICAgaWYgKChub2RlLT5yZW5k
ZXJlcigpLT5pc0Jsb2NrRmxvdygpIHx8IG5vZGUtPmNoaWxkTm9kZUNvdW50KCkpICYmIG5vZGUt
PmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHN0YXRp
Y19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSk7CisgICAgICAgIFN0cmluZyBjc3NUZXh0ID0gc3R5
bGUtPmNzc1RleHQoKTsKICAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gKmRlY2wg
PSBlbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKTsKICAgICAgICAgaWYgKGRlY2wpCiAgICAgICAg
ICAgICBjc3NUZXh0ICs9IGRlY2wtPmNzc1RleHQoKTsKICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0
ZShlbGVtZW50LCBzdHlsZUF0dHIsIGNzc1RleHQpOwogICAgIH0KIAotICAgIGlmIChzdHlsZUNo
YW5nZS5hcHBseVVuZGVybGluZSgpKQotICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVt
ZW50KG5vZGUsIG5vZGUsIGNyZWF0ZUhUTUxFbGVtZW50KGRvY3VtZW50KCksIHVUYWcpKTsKKyAg
ICBpZiAobm9kZS0+cmVuZGVyZXIoKS0+aXNUZXh0KCkgJiYgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4
dCo+KG5vZGUtPnJlbmRlcmVyKCkpLT5pc0FsbENvbGxhcHNpYmxlV2hpdGVzcGFjZSgpKQorICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoc3R5bGVDaGFuZ2UuYXBwbHlMaW5lVGhyb3VnaCgpKQot
ICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KG5vZGUsIG5vZGUsIGNyZWF0ZUhU
TUxFbGVtZW50KGRvY3VtZW50KCksIHNUYWcpKTsgICAgCisgICAgYWRkSW5saW5lU3R5bGVJZk5l
ZWRlZChzdHlsZSwgbm9kZSwgbm9kZSk7CiB9CiAKLXZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnB1
c2hEb3duVGV4dERlY29yYXRpb25TdHlsZUFyb3VuZE5vZGUoTm9kZSogdGFyZ2V0Tm9kZSkKK3Zv
aWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlKENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgTm9kZSogdGFyZ2V0Tm9kZSkKIHsKLSAgICBB
U1NFUlQodGFyZ2V0Tm9kZSk7Ci0gICAgTm9kZSogaGlnaGVzdEFuY2VzdG9yID0gaGlnaGVzdEFu
Y2VzdG9yV2l0aFRleHREZWNvcmF0aW9uKHRhcmdldE5vZGUpOworICAgIEhUTUxFbGVtZW50KiBo
aWdoZXN0QW5jZXN0b3IgPSBoaWdoZXN0QW5jZXN0b3JXaXRoQ29uZmxpY3RpbmdJbmxpbmVTdHls
ZShzdHlsZSwgdGFyZ2V0Tm9kZSk7CiAgICAgaWYgKCFoaWdoZXN0QW5jZXN0b3IpCiAgICAgICAg
IHJldHVybjsKIAorICAgIFZlY3RvcjxpbnQ+IHByb3BlcnRpZXM7CisgICAgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlLT5lbmQoKTsKKyAgICBm
b3IgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0eWxl
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHByb3BlcnRpZXMuYXBwZW5kKGl0
LT5pZCgpKTsKKwogICAgIC8vIFRoZSBvdXRlciBsb29wIGlzIHRyYXZlcnNpbmcgdGhlIHRyZWUg
dmVydGljYWxseSBmcm9tIGhpZ2hlc3RBbmNlc3RvciB0byB0YXJnZXROb2RlCiAgICAgTm9kZSog
Y3VycmVudCA9IGhpZ2hlc3RBbmNlc3RvcjsKICAgICB3aGlsZSAoY3VycmVudCAhPSB0YXJnZXRO
b2RlKSB7CiAgICAgICAgIEFTU0VSVChjdXJyZW50KTsKKyAgICAgICAgQVNTRVJUKGN1cnJlbnQt
PmlzSFRNTEVsZW1lbnQoKSk7CiAgICAgICAgIEFTU0VSVChjdXJyZW50LT5jb250YWlucyh0YXJn
ZXROb2RlKSk7Ci0gICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZGVj
b3JhdGlvbiA9IGV4dHJhY3RUZXh0RGVjb3JhdGlvblN0eWxlKGN1cnJlbnQpOworICAgICAgICBO
b2RlKiBjaGlsZCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgUmVmUHRyPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZVRvUHVzaERvd24gPSBleHRyYWN0SW5saW5lU3R5
bGVUb1B1c2hEb3duKGN1cnJlbnQsIHByb3BlcnRpZXMpOwogCiAgICAgICAgIC8vIFRoZSBpbm5l
ciBsb29wIHdpbGwgZ28gdGhyb3VnaCBjaGlsZHJlbiBvbiBlYWNoIGxldmVsCi0gICAgICAgIE5v
ZGUqIGNoaWxkID0gY3VycmVudC0+Zmlyc3RDaGlsZCgpOwogICAgICAgICB3aGlsZSAoY2hpbGQp
IHsKICAgICAgICAgICAgIE5vZGUqIG5leHRDaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwog
CiAgICAgICAgICAgICAvLyBBcHBseSB0ZXh0IGRlY29yYXRpb24gdG8gYWxsIG5vZGVzIGNvbnRh
aW5pbmcgdGFyZ2V0Tm9kZSBhbmQgdGhlaXIgc2libGluZ3MgYnV0IE5PVCB0byB0YXJnZXROb2Rl
CiAgICAgICAgICAgICBpZiAoY2hpbGQgIT0gdGFyZ2V0Tm9kZSkKLSAgICAgICAgICAgICAgICBh
cHBseVRleHREZWNvcmF0aW9uU3R5bGUoY2hpbGQsIGRlY29yYXRpb24uZ2V0KCkpOwotICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgYXBwbHlJbmxpbmVTdHlsZVRvUHVzaERvd24oY2hpbGQs
IHN0eWxlVG9QdXNoRG93bi5nZXQoKSk7CisKICAgICAgICAgICAgIC8vIFdlIGZvdW5kIHRoZSBu
ZXh0IG5vZGUgZm9yIHRoZSBvdXRlciBsb29wIChjb250YWlucyB0YXJnZXROb2RlKQogICAgICAg
ICAgICAgLy8gV2hlbiByZWFjaGVkIHRhcmdldE5vZGUsIHN0b3AgdGhlIG91dGVyIGxvb3AgdXBv
biB0aGUgY29tcGxldGlvbiBvZiB0aGUgY3VycmVudCBpbm5lciBsb29wCiAgICAgICAgICAgICBp
ZiAoY2hpbGQgPT0gdGFyZ2V0Tm9kZSB8fCBjaGlsZC0+Y29udGFpbnModGFyZ2V0Tm9kZSkpCkBA
IC0xNDQ3LDE0ICsxNDQ2LDE1IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGlu
ZVN0eWwKICAgICBBU1NFUlQoY29tcGFyZVBvc2l0aW9ucyhzdGFydCwgZW5kKSA8PSAwKTsKICAg
ICAKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNvcmF0aW9uU3BlY2lhbFByb3BlcnR5ID0g
c3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlv
bnNJbkVmZmVjdCk7Ci0KICAgICBpZiAodGV4dERlY29yYXRpb25TcGVjaWFsUHJvcGVydHkpIHsK
LSAgICAgICAgcHVzaERvd25UZXh0RGVjb3JhdGlvblN0eWxlQXJvdW5kTm9kZShzdGFydC5kb3du
c3RyZWFtKCkubm9kZSgpKTsKLSAgICAgICAgcHVzaERvd25UZXh0RGVjb3JhdGlvblN0eWxlQXJv
dW5kTm9kZShlbmQudXBzdHJlYW0oKS5ub2RlKCkpOwogICAgICAgICBzdHlsZSA9IHN0eWxlLT5j
b3B5KCk7CiAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0
aW9uLCB0ZXh0RGVjb3JhdGlvblNwZWNpYWxQcm9wZXJ0eS0+Y3NzVGV4dCgpLCBzdHlsZS0+Z2V0
UHJvcGVydHlQcmlvcml0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0
KSk7CiAgICAgfQogCisgICAgUmVmUHRyPE5vZGU+IHB1c2hEb3duRW5kID0gZW5kLnVwc3RyZWFt
KCkubm9kZSgpOworICAgIHB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlKHN0eWxlLmdldCgp
LCBzdGFydC5kb3duc3RyZWFtKCkubm9kZSgpKTsKKyAgICBwdXNoRG93bklubGluZVN0eWxlQXJv
dW5kTm9kZShzdHlsZS5nZXQoKSwgcHVzaERvd25FbmQuZ2V0KCkpOworCiAgICAgLy8gVGhlIHMg
YW5kIGUgdmFyaWFibGVzIHN0b3JlIHRoZSBwb3NpdGlvbnMgdXNlZCB0byBzZXQgdGhlIGVuZGlu
ZyBzZWxlY3Rpb24gYWZ0ZXIgc3R5bGUgcmVtb3ZhbAogICAgIC8vIHRha2VzIHBsYWNlLiBUaGlz
IHdpbGwgaGVscCBjYWxsZXJzIHRvIHJlY29nbml6ZSB3aGVuIGVpdGhlciB0aGUgc3RhcnQgbm9k
ZSBvciB0aGUgZW5kIG5vZGUKICAgICAvLyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBkb2N1bWVudCBk
dXJpbmcgdGhlIHdvcmsgb2YgdGhpcyBmdW5jdGlvbi4KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9B
cHBseVN0eWxlQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5oCShyZXZpc2lvbiA2NTA4MCkKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxMiArNzgsMTMgQEAgcHJpdmF0ZToK
ICAgICBib29sIHJlbW92ZUhUTUxGb250U3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
LCBIVE1MRWxlbWVudCosIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgPSBSZW1vdmVBdHRyaWJ1dGVz
QW5kRWxlbWVudHMpOwogICAgIGJvb2wgcmVtb3ZlSFRNTEJpZGlFbWJlZGRpbmdTdHlsZShDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50KiwgSW5saW5lU3R5bGVSZW1vdmFs
TW9kZSA9IFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVtZW50cyk7CiAgICAgYm9vbCByZW1vdmVDU1NT
dHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50KiwgSW5saW5lU3R5
bGVSZW1vdmFsTW9kZSA9IFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVtZW50cyk7CisgICAgSFRNTEVs
ZW1lbnQqIGhpZ2hlc3RBbmNlc3RvcldpdGhDb25mbGljdGluZ0lubGluZVN0eWxlKENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiwgTm9kZSopOworICAgIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IGV4dHJhY3RJbmxpbmVTdHlsZVRvUHVzaERvd24oTm9kZSosIGNvbnN0
IFZlY3RvcjxpbnQ+Jik7CisgICAgdm9pZCBhcHBseUlubGluZVN0eWxlVG9QdXNoRG93bihOb2Rl
KiwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gKnN0eWxlKTsKKyAgICB2b2lkIHB1c2hEb3du
SW5saW5lU3R5bGVBcm91bmROb2RlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgTm9kZSop
OwogICAgIHZvaWQgcmVtb3ZlSW5saW5lU3R5bGUoUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbj4sIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7
CiAgICAgYm9vbCBub2RlRnVsbHlTZWxlY3RlZChOb2RlKiwgY29uc3QgUG9zaXRpb24mIHN0YXJ0
LCBjb25zdCBQb3NpdGlvbiYgZW5kKSBjb25zdDsKICAgICBib29sIG5vZGVGdWxseVVuc2VsZWN0
ZWQoTm9kZSosIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkgY29u
c3Q7Ci0gICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZXh0cmFjdFRl
eHREZWNvcmF0aW9uU3R5bGUoTm9kZSopOwotICAgIHZvaWQgYXBwbHlUZXh0RGVjb3JhdGlvblN0
eWxlKE5vZGUqLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUpOwotICAgIHZvaWQg
cHVzaERvd25UZXh0RGVjb3JhdGlvblN0eWxlQXJvdW5kTm9kZShOb2RlKik7CiAKICAgICAvLyBz
dHlsZS1hcHBsaWNhdGlvbiBoZWxwZXJzCiAgICAgdm9pZCBhcHBseUJsb2NrU3R5bGUoQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qKTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxl
Y3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDY1MDgwKQorKysgV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MzAsNyArNjMwLDgg
QEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBhcmFncgogICAgIC8vIG1vdmVQ
YXJhZ3JhcGhzIHdpbGwgaW5zZXJ0IHBsYWNlaG9sZGVycyBpZiBpdCByZW1vdmVzIGJsb2NrcyB0
aGF0IHdvdWxkIHJlcXVpcmUgdGhlaXIgdXNlLCBkb24ndCBsZXQgYmxvY2sKICAgICAvLyByZW1v
dmFscyB0aGF0IGl0IGRvZXMgY2F1c2UgdGhlIGluc2VydGlvbiBvZiAqYW5vdGhlciogcGxhY2Vo
b2xkZXIuCiAgICAgYm9vbCBuZWVkUGxhY2Vob2xkZXIgPSBtX25lZWRQbGFjZWhvbGRlcjsKLSAg
ICBtb3ZlUGFyYWdyYXBoKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUsIGVuZE9mUGFyYWdyYXBoVG9N
b3ZlLCBtZXJnZURlc3RpbmF0aW9uKTsKKyAgICBib29sIHBhcmFncmFwaFRvTWVyZ2VJc0VtcHR5
ID0gKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUgPT0gZW5kT2ZQYXJhZ3JhcGhUb01vdmUpOworICAg
IG1vdmVQYXJhZ3JhcGgoc3RhcnRPZlBhcmFncmFwaFRvTW92ZSwgZW5kT2ZQYXJhZ3JhcGhUb01v
dmUsIG1lcmdlRGVzdGluYXRpb24sIGZhbHNlLCAhcGFyYWdyYXBoVG9NZXJnZUlzRW1wdHkpOwog
ICAgIG1fbmVlZFBsYWNlaG9sZGVyID0gbmVlZFBsYWNlaG9sZGVyOwogICAgIC8vIFRoZSBlbmRp
bmdQb3NpdGlvbiB3YXMgbGlrZWx5IGNsb2JiZXJlZCBieSB0aGUgbW92ZSwgc28gcmVjb21wdXRl
IGl0IChtb3ZlUGFyYWdyYXBoIHNlbGVjdHMgdGhlIG1vdmVkIHBhcmFncmFwaCkuCiAgICAgbV9l
bmRpbmdQb3NpdGlvbiA9IGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCk7CkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA2NTEwNCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE5IEBACisyMDEwLTA4LTEwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENhbid0
IHVuYm9sZCB0ZXh0IGluIGRpdiBpbiBmb250LXdlaWdodCBzcGFuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjg3MQorCisgICAgICAgIEFkZGVkIGEg
dGVzdCB0byBwdXNoIGRvd24gaW5saW5lIHN0eWxlcyB0byB0aGUgbGVhdmVzIG9mIERPTSB0cmVl
LgorCisgICAgICAgICogZWRpdGluZy9kZWxldGluZy9kZWxldGUtYnItMDExLWV4cGVjdGVkLnR4
dDogUmVtb3ZlZCByZWR1bmRhbnQgc3R5bGUgc3BhbnMuCisgICAgICAgICogZWRpdGluZy9leGVj
Q29tbWFuZC9lbXB0eS1zcGFuLXJlbW92YWwtZXhwZWN0ZWQudHh0OiBSZW1vdmVkIGEgc3BhbiB3
aXRob3V0IGFueSBhdHRyaWJ1dGVzLgorICAgICAgICAqIGVkaXRpbmcvc3R5bGUvcHVzaC1kb3du
LWlubGluZS1zdHlsZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3N0
eWxlL3B1c2gtZG93bi1pbmxpbmUtc3R5bGVzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRp
bmcvc3R5bGUvc2NyaXB0LXRlc3RzL3B1c2gtZG93bi1pbmxpbmUtc3R5bGVzLmpzOiBBZGRlZC4K
KyAgICAgICAgKHRlc3RTaW5nbGVUb2dnbGUpOgorCiAyMDEwLTA4LTEwICBTdGVwaGVuIFdoaXRl
ICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQ7IHRlc3Qg
ZXhwZWN0YXRpb25zIGZpeC4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZGVsZXRpbmcvZGVs
ZXRlLWJyLTAxMS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGlu
Zy9kZWxldGluZy9kZWxldGUtYnItMDExLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjUwODApCisr
KyBMYXlvdXRUZXN0cy9lZGl0aW5nL2RlbGV0aW5nL2RlbGV0ZS1ici0wMTEtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNiArMjYsNyBAQCBhZnRlciBkZWxldGlvbjoKIHwgPGRp
dj4KIHwgICBjbGFzcz0iZWRpdGluZyIKIHwgICBpZD0idGVzdCIKLXwgICA8c3Bhbj4KLXwgICAg
IGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIgotfCAgICAgc3R5bGU9ImZvbnQtc2l6ZTogbWVkaXVt
OyIKLXwgICAgIDxmb250PgotfCAgICAgICBjbGFzcz0iQXBwbGUtc3R5bGUtc3BhbiIKLXwgICAg
ICAgc2l6ZT0iNiIKLXwgICAgICAgPHNwYW4+Ci18ICAgICAgICAgY2xhc3M9IkFwcGxlLXN0eWxl
LXNwYW4iCi18ICAgICAgICAgc3R5bGU9ImZvbnQtc2l6ZTogMjRweDsiCi18ICAgICAgICAgPCNz
ZWxlY3Rpb24tY2FyZXQ+Ci18ICAgICAgICAgPGJyPgorfCAgIDwjc2VsZWN0aW9uLWNhcmV0Pgor
fCAgIDxicj4KIHwgIgogIgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9l
bXB0eS1zcGFuLXJlbW92YWwtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2VkaXRpbmcvZXhlY0NvbW1hbmQvZW1wdHktc3Bhbi1yZW1vdmFsLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gNjUwODApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2VtcHR5LXNw
YW4tcmVtb3ZhbC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCw3IEBAIE9u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEEKIAogCiBQQVNTIG9uZSBib2xk
IGNvbW1hbmQgY29udmVydGVkIDxzcGFuPjxzcGFuIHN0eWxlPSdmb250LXdlaWdodDogYm9sZCc+
dGVzdDwvc3Bhbj48L3NwYW4+IHRvIDxzcGFuPnRlc3Q8L3NwYW4+Ci1QQVNTIG9uZSBib2xkIGNv
bW1hbmQgY29udmVydGVkIDxzcGFuIHN0eWxlPSdmb250LXdlaWdodDogYm9sZCc+PHNwYW4+dGVz
dDwvc3Bhbj48L3NwYW4+IHRvIDxzcGFuPnRlc3Q8L3NwYW4+CitQQVNTIG9uZSBib2xkIGNvbW1h
bmQgY29udmVydGVkIDxzcGFuIHN0eWxlPSdmb250LXdlaWdodDogYm9sZCc+PHNwYW4+dGVzdDwv
c3Bhbj48L3NwYW4+IHRvIHRlc3QKIFBBU1Mgb25lIGJvbGQgY29tbWFuZCBjb252ZXJ0ZWQgPHNw
YW4gc3R5bGU9J2ZvbnQtd2VpZ2h0OiBib2xkJz48c3BhbiBzdHlsZT0nZm9udC13ZWlnaHQ6IGJv
bGQnPnRlc3Q8L3NwYW4+PC9zcGFuPiB0byB0ZXN0CiBQQVNTIG9uZSBib2xkIGNvbW1hbmQgY29u
dmVydGVkIDxzcGFuIGZvbz0iYmFyIiBzdHlsZT0nZm9udC13ZWlnaHQ6IGJvbGQnPnRlc3Q8L3Nw
YW4+IHRvIDxzcGFuIGZvbz0iYmFyIj50ZXN0PC9zcGFuPgogUEFTUyB0d28gYm9sZCBjb21tYW5k
cyBjb252ZXJ0ZWQgPHNwYW4+dGVzdDwvc3Bhbj4gdG8gPHNwYW4+dGVzdDwvc3Bhbj4KSW5kZXg6
IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvc2NyaXB0LXRlc3RzL2VtcHR5LXNwYW4t
cmVtb3ZhbC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5k
L3NjcmlwdC10ZXN0cy9lbXB0eS1zcGFuLXJlbW92YWwuanMJKHJldmlzaW9uIDY1MDgwKQorKysg
TGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9zY3JpcHQtdGVzdHMvZW1wdHktc3Bhbi1y
ZW1vdmFsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBAIGZ1bmN0aW9uIHRlc3RE
b3VibGVUb2dnbGUodG9nZ2xlQ29tbWFuZCwKIH0KIAogdGVzdFNpbmdsZVRvZ2dsZSgiYm9sZCIs
ICI8c3Bhbj48c3BhbiBzdHlsZT0nZm9udC13ZWlnaHQ6IGJvbGQnPnRlc3Q8L3NwYW4+PC9zcGFu
PiIsICI8c3Bhbj50ZXN0PC9zcGFuPiIpOwotdGVzdFNpbmdsZVRvZ2dsZSgiYm9sZCIsICI8c3Bh
biBzdHlsZT0nZm9udC13ZWlnaHQ6IGJvbGQnPjxzcGFuPnRlc3Q8L3NwYW4+PC9zcGFuPiIsICI8
c3Bhbj50ZXN0PC9zcGFuPiIpOwordGVzdFNpbmdsZVRvZ2dsZSgiYm9sZCIsICI8c3BhbiBzdHls
ZT0nZm9udC13ZWlnaHQ6IGJvbGQnPjxzcGFuPnRlc3Q8L3NwYW4+PC9zcGFuPiIsICJ0ZXN0Iik7
CiB0ZXN0U2luZ2xlVG9nZ2xlKCJib2xkIiwgIjxzcGFuIHN0eWxlPSdmb250LXdlaWdodDogYm9s
ZCc+PHNwYW4gc3R5bGU9J2ZvbnQtd2VpZ2h0OiBib2xkJz50ZXN0PC9zcGFuPjwvc3Bhbj4iLCAi
dGVzdCIpOwogdGVzdFNpbmdsZVRvZ2dsZSgiYm9sZCIsICI8c3BhbiBmb289XCJiYXJcIiBzdHls
ZT0nZm9udC13ZWlnaHQ6IGJvbGQnPnRlc3Q8L3NwYW4+IiwgIjxzcGFuIGZvbz1cImJhclwiPnRl
c3Q8L3NwYW4+Iik7CiB0ZXN0RG91YmxlVG9nZ2xlKCJib2xkIiwgIjxzcGFuPnRlc3Q8L3NwYW4+
IiwgIjxzcGFuPnRlc3Q8L3NwYW4+Iik7CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxl
L3B1c2gtZG93bi1pbmxpbmUtc3R5bGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9lZGl0aW5nL3N0eWxlL3B1c2gtZG93bi1pbmxpbmUtc3R5bGVzLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc3R5bGUvcHVzaC1kb3duLWlu
bGluZS1zdHlsZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBACitU
ZXN0IHRvIG1ha2Ugc3VyZSB3ZSBwdXNoIGRvd24gaW5saW5lIHN0eWxlcyBwcm9wZXJseS4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgb25lIGJvbGQgY29tbWFuZCBjb252
ZXJ0ZWQgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiA5MDA7Ij4gPGRpdj50ZXh0PC9kaXY+IDwv
c3Bhbj4gdG8gIDxkaXY+dGV4dDwvZGl2PiAKK1BBU1Mgb25lIGJvbGQgY29tbWFuZCBjb252ZXJ0
ZWQgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiA5MDA7Ij48ZGl2PnRleHQ8L2Rpdj48L3NwYW4+
IHRvIDxkaXY+dGV4dDwvZGl2PgorUEFTUyBvbmUgYm9sZCBjb21tYW5kIGNvbnZlcnRlZCA8c3Bh
biBzdHlsZT0iZm9udC13ZWlnaHQ6IDkwMDsiPjxkaXYgaWQ9InRlc3QiPmhlbGxvPC9kaXY+PGRp
dj53b3JsZDwvZGl2Pjwvc3Bhbj4gdG8gPGRpdiBpZD0idGVzdCI+aGVsbG88L2Rpdj48ZGl2IHN0
eWxlPSJmb250LXdlaWdodDogOTAwOyAiPndvcmxkPC9kaXY+CitQQVNTIG9uZSBib2xkIGNvbW1h
bmQgY29udmVydGVkIDxkaXYgc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+aGVsbG88ZGl2IGlk
PSJ0ZXN0Ij53b3JsZDwvZGl2PjwvZGl2PiB0byA8ZGl2PjxiPmhlbGxvPC9iPjxkaXYgaWQ9InRl
c3QiPndvcmxkPC9kaXY+PC9kaXY+CitQQVNTIG9uZSBib2xkIGNvbW1hbmQgY29udmVydGVkIDxz
cGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPmhlbGxvPHNwYW4gaWQ9InRlc3QiPndvcmxk
PC9kaXY+PC9kaXY+IHRvIDxiPmhlbGxvPC9iPjxzcGFuIGlkPSJ0ZXN0Ij53b3JsZDwvc3Bhbj4K
K1BBU1Mgb25lIGl0YWxpYyBjb21tYW5kIGNvbnZlcnRlZCA8c3BhbiBzdHlsZT0iZm9udC1zdHls
ZTogaXRhbGljOyI+PGRpdj5oZWxsbzwvZGl2Pjwvc3Bhbj4gdG8gPGRpdj5oZWxsbzwvZGl2Pgor
UEFTUyBvbmUgaXRhbGljIGNvbW1hbmQgY29udmVydGVkIDxzcGFuIHN0eWxlPSJmb250LXN0eWxl
OiBpdGFsaWM7Ij5oZWxsbzxkaXYgaWQ9InRlc3QiPndvcmxkPC9kaXY+PGJsb2NrcXVvdGU+d2Vi
a2l0PC9ibG9ja3F1b3RlPjwvc3Bhbj4gdG8gPGk+aGVsbG88L2k+PGRpdiBpZD0idGVzdCI+d29y
bGQ8L2Rpdj48YmxvY2txdW90ZSBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyAiPndlYmtpdDwv
YmxvY2txdW90ZT4KK1BBU1Mgb25lIGl0YWxpYyBjb21tYW5kIGNvbnZlcnRlZCA8c3BhbiBzdHls
ZT0iZm9udC1zdHlsZTogaXRhbGljOyI+aGVsbG8gPHNwYW4gaWQ9InRlc3QiPndvcmxkPC9zcGFu
PiB3ZWJraXQ8L3NwYW4+IHRvIDxpPmhlbGxvIDwvaT48c3BhbiBpZD0idGVzdCI+d29ybGQ8L3Nw
YW4+PGk+IHdlYmtpdDwvaT4KK1BBU1Mgb25lIHVuZGVybGluZSBjb21tYW5kIGNvbnZlcnRlZCA8
c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij48ZGl2IGlkPSJ0ZXN0Ij5o
ZWxsbzwvZGl2PndvcmxkPC9zcGFuPiB0byA8ZGl2IGlkPSJ0ZXN0Ij5oZWxsbzwvZGl2Pjx1Pndv
cmxkPC91PgorUEFTUyBvbmUgdW5kZXJsaW5lIGNvbW1hbmQgY29udmVydGVkIDxzcGFuIHN0eWxl
PSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPjxkaXYgaWQ9InRlc3QiPmhlbGxvPC9kaXY+
PGJsb2NrcXVvdGU+d29ybGQ8YnI+d2Via2l0PC9ibG9ja3F1b3RlPjwvc3Bhbj4gdG8gPGRpdiBp
ZD0idGVzdCI+aGVsbG88L2Rpdj48YmxvY2txdW90ZSBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1
bmRlcmxpbmU7ICI+d29ybGQ8YnI+d2Via2l0PC9ibG9ja3F1b3RlPgorUEFTUyBvbmUgdW5kZXJs
aW5lIGNvbW1hbmQgY29udmVydGVkIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVy
bGluZTsiPmhlbGxvPGRpdiBpZD0idGVzdCI+d29ybGQ8L2Rpdj53ZWJraXQ8L3U+IHRvIDx1Pmhl
bGxvPC91PjxkaXYgaWQ9InRlc3QiPndvcmxkPC9kaXY+PHU+d2Via2l0PC91PgorRkFJTCBvbmUg
dW5kZXJsaW5lIGNvbW1hbmQgY29udmVydGVkIDxkaXYgc3R5bGU9InRleHQtZGVjb3JhdGlvbjog
dW5kZXJsaW5lOyI+PGRpdj5oZWxsbzwvc3Bhbj48L2Rpdj48ZGl2IGlkPSJ0ZXN0Ij53ZWJraXQ8
L2Rpdj48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+cm9ja3M8L3NwYW4+IHRvIDxk
aXY+PGRpdiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7ICI+aGVsbG88L2Rpdj48
ZGl2IGlkPSJ0ZXN0Ij53ZWJraXQ8L2Rpdj48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1
bmRlcmxpbmU7IGZvbnQtc3R5bGU6IGl0YWxpYzsgIj5yb2Nrczwvc3Bhbj48L2Rpdj4sIGV4cGVj
dGVkIDxkaXY+PGRpdiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7ICI+aGVsbG88
L3NwYW4+PC9kaXY+PGRpdiBpZD0idGVzdCI+d2Via2l0PC9kaXY+PHU+PHNwYW4gc3R5bGU9ImZv
bnQtc3R5bGU6IGl0YWxpYzsiPnJvY2tzPC9zcGFuPjwvdT48L2Rpdj4KK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9l
ZGl0aW5nL3N0eWxlL3B1c2gtZG93bi1pbmxpbmUtc3R5bGVzLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZWRpdGluZy9zdHlsZS9wdXNoLWRvd24taW5saW5lLXN0eWxlcy5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zdHlsZS9wdXNoLWRvd24taW5saW5l
LXN0eWxlcy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRN
TCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0
eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwv
cD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9w
dXNoLWRvd24taW5saW5lLXN0eWxlcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
ZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc3R5bGUvc2NyaXB0LXRlc3RzL3B1c2gt
ZG93bi1pbmxpbmUtc3R5bGVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcv
c3R5bGUvc2NyaXB0LXRlc3RzL3B1c2gtZG93bi1pbmxpbmUtc3R5bGVzLmpzCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zdHlsZS9zY3JpcHQtdGVzdHMvcHVzaC1kb3duLWlu
bGluZS1zdHlsZXMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKK2Rlc2NyaXB0aW9u
KCdUZXN0IHRvIG1ha2Ugc3VyZSB3ZSBwdXNoIGRvd24gaW5saW5lIHN0eWxlcyBwcm9wZXJseS4n
KTsKKwordmFyIHRlc3RDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsK
K3Rlc3RDb250YWluZXIuY29udGVudEVkaXRhYmxlID0gdHJ1ZTsKK2RvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQodGVzdENvbnRhaW5lcik7CisKK2Z1bmN0aW9uIHRlc3RTaW5nbGVUb2dnbGUodG9n
Z2xlQ29tbWFuZCwgaW5pdGlhbENvbnRlbnRzLCBleHBlY3RlZENvbnRlbnRzKQoreworICAgIHRl
c3RDb250YWluZXIuaW5uZXJIVE1MID0gaW5pdGlhbENvbnRlbnRzOworICAgIGlmIChkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgndGVzdCcpKQorICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCku
c2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QnKSk7CisgICAg
ZWxzZQorICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4odGVz
dENvbnRhaW5lcik7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ3N0eWxlV2l0aENTUycsIGZh
bHNlLCAnZmFsc2UnKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCh0b2dnbGVDb21tYW5kLCBm
YWxzZSwgbnVsbCk7CisgICAgaWYgKHRlc3RDb250YWluZXIuaW5uZXJIVE1MID09PSBleHBlY3Rl
ZENvbnRlbnRzKSB7CisgICAgICAgIHRlc3RQYXNzZWQoIm9uZSAiICsgdG9nZ2xlQ29tbWFuZCAr
ICIgY29tbWFuZCBjb252ZXJ0ZWQgIiArIGluaXRpYWxDb250ZW50cyArICIgdG8gIiArIGV4cGVj
dGVkQ29udGVudHMpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQoIm9uZSAiICsg
dG9nZ2xlQ29tbWFuZCArICIgY29tbWFuZCBjb252ZXJ0ZWQgIiArIGluaXRpYWxDb250ZW50cyAr
ICIgdG8gIiArIHRlc3RDb250YWluZXIuaW5uZXJIVE1MICsgIiwgZXhwZWN0ZWQgIiArIGV4cGVj
dGVkQ29udGVudHMpOworICAgIH0KK30KKworCit0ZXN0U2luZ2xlVG9nZ2xlKCJib2xkIiwgJzxz
cGFuIHN0eWxlPSJmb250LXdlaWdodDogOTAwOyI+IDxkaXY+dGV4dDwvZGl2PiA8L3NwYW4+Jywg
JyA8ZGl2PnRleHQ8L2Rpdj4gJyk7Cit0ZXN0U2luZ2xlVG9nZ2xlKCJib2xkIiwgJzxzcGFuIHN0
eWxlPSJmb250LXdlaWdodDogOTAwOyI+PGRpdj50ZXh0PC9kaXY+PC9zcGFuPicsICc8ZGl2PnRl
eHQ8L2Rpdj4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUoImJvbGQiLCAnPHNwYW4gc3R5bGU9ImZvbnQt
d2VpZ2h0OiA5MDA7Ij48ZGl2IGlkPSJ0ZXN0Ij5oZWxsbzwvZGl2PjxkaXY+d29ybGQ8L2Rpdj48
L3NwYW4+JywgJzxkaXYgaWQ9InRlc3QiPmhlbGxvPC9kaXY+PGRpdiBzdHlsZT0iZm9udC13ZWln
aHQ6IDkwMDsgIj53b3JsZDwvZGl2PicpOwordGVzdFNpbmdsZVRvZ2dsZSgiYm9sZCIsICc8ZGl2
IHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPmhlbGxvPGRpdiBpZD0idGVzdCI+d29ybGQ8L2Rp
dj48L2Rpdj4nLCAnPGRpdj48Yj5oZWxsbzwvYj48ZGl2IGlkPSJ0ZXN0Ij53b3JsZDwvZGl2Pjwv
ZGl2PicpOwordGVzdFNpbmdsZVRvZ2dsZSgiYm9sZCIsICc8c3BhbiBzdHlsZT0iZm9udC13ZWln
aHQ6IGJvbGQ7Ij5oZWxsbzxzcGFuIGlkPSJ0ZXN0Ij53b3JsZDwvZGl2PjwvZGl2PicsICc8Yj5o
ZWxsbzwvYj48c3BhbiBpZD0idGVzdCI+d29ybGQ8L3NwYW4+Jyk7Cit0ZXN0U2luZ2xlVG9nZ2xl
KCJpdGFsaWMiLCAnPHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPjxkaXY+aGVsbG88
L2Rpdj48L3NwYW4+JywgJzxkaXY+aGVsbG88L2Rpdj4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUoIml0
YWxpYyIsICc8c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+aGVsbG88ZGl2IGlkPSJ0
ZXN0Ij53b3JsZDwvZGl2PjxibG9ja3F1b3RlPndlYmtpdDwvYmxvY2txdW90ZT48L3NwYW4+Jywg
JzxpPmhlbGxvPC9pPjxkaXYgaWQ9InRlc3QiPndvcmxkPC9kaXY+PGJsb2NrcXVvdGUgc3R5bGU9
ImZvbnQtc3R5bGU6IGl0YWxpYzsgIj53ZWJraXQ8L2Jsb2NrcXVvdGU+Jyk7Cit0ZXN0U2luZ2xl
VG9nZ2xlKCJpdGFsaWMiLCAnPHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPmhlbGxv
IDxzcGFuIGlkPSJ0ZXN0Ij53b3JsZDwvc3Bhbj4gd2Via2l0PC9zcGFuPicsICc8aT5oZWxsbyA8
L2k+PHNwYW4gaWQ9InRlc3QiPndvcmxkPC9zcGFuPjxpPiB3ZWJraXQ8L2k+Jyk7Cit0ZXN0U2lu
Z2xlVG9nZ2xlKCJ1bmRlcmxpbmUiLCAnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5k
ZXJsaW5lOyI+PGRpdiBpZD0idGVzdCI+aGVsbG88L2Rpdj53b3JsZDwvc3Bhbj4nLCAnPGRpdiBp
ZD0idGVzdCI+aGVsbG88L2Rpdj48dT53b3JsZDwvdT4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUoInVu
ZGVybGluZSIsICc8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij48ZGl2
IGlkPSJ0ZXN0Ij5oZWxsbzwvZGl2PjxibG9ja3F1b3RlPndvcmxkPGJyPndlYmtpdDwvYmxvY2tx
dW90ZT48L3NwYW4+JywgJzxkaXYgaWQ9InRlc3QiPmhlbGxvPC9kaXY+PGJsb2NrcXVvdGUgc3R5
bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyAiPndvcmxkPGJyPndlYmtpdDwvYmxvY2tx
dW90ZT4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUoInVuZGVybGluZSIsICc8c3BhbiBzdHlsZT0idGV4
dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5oZWxsbzxkaXYgaWQ9InRlc3QiPndvcmxkPC9kaXY+
d2Via2l0PC91PicsICc8dT5oZWxsbzwvdT48ZGl2IGlkPSJ0ZXN0Ij53b3JsZDwvZGl2Pjx1Pndl
YmtpdDwvdT4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUoInVuZGVybGluZSIsCisgICAgJzxkaXYgc3R5
bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+PGRpdj5oZWxsbzwvc3Bhbj48L2Rpdj48
ZGl2IGlkPSJ0ZXN0Ij53ZWJraXQ8L2Rpdj48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGlj
OyI+cm9ja3M8L3NwYW4+JywKKyAgICAnPGRpdj48ZGl2IHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246
IHVuZGVybGluZTsgIj5oZWxsbzwvc3Bhbj48L2Rpdj48ZGl2IGlkPSJ0ZXN0Ij53ZWJraXQ8L2Rp
dj48dT48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+cm9ja3M8L3NwYW4+PC91Pjwv
ZGl2PicpOworCitkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRlc3RDb250YWluZXIpOworCit2
YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64166</attachid>
            <date>2010-08-11 15:06:31 -0700</date>
            <delta_ts>2010-08-11 16:01:13 -0700</delta_ts>
            <desc>fixed per tony&apos;s comment and also supported text-decoration propagation</desc>
            <filename>bug-26871-20100811150630.patch</filename>
            <type>text/plain</type>
            <size>29096</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTE3OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMDgtMTEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2Fu
J3QgdW5ib2xkIHRleHQgaW4gZGl2IGluIGZvbnQtd2VpZ2h0IHNwYW4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2ODcxCisKKyAgICAgICAgVGhlIGJ1
ZyB3YXMgY2F1c2VkIGJ5IHJlbW92ZUlubGluZVN0eWxlIG5vdCBiZWluZyBhYmxlIHRvIGluY2x1
ZGUgc3R5bGVkIGlubGluZSBub2RlcyBhcm91bmQgdGhlIHN0YXJ0LgorICAgICAgICBTb2x2ZWQg
dGhpcyBwcm9ibGVtIGJ5IHB1c2hpbmcgZG93biBhbGwgaW5saW5lIHN0eWxlcyBpbnN0ZWFkIG9m
IGp1c3QgdGV4dC1kZWNvcmF0aW9ucy4KKyAgICAgICAgVGhpcyBhcHByb2FjaCBhbGxvd3MgcmVt
b3ZlSW5saW5lU3R5bGUgdG8gcmVtb3ZlIHN0eWxlZCBhbmNlc3RvcnMgcHJvcGVybHkgYW5kIGdl
bmVyYXRlcyBjb21wYWN0IG1hcmt1cHMuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9zdHlsZS9w
dXNoLWRvd24taW5saW5lLXN0eWxlcy5odG1sCisKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1v
dmVDU1NTdHlsZSk6IE5vIGxvbmdlciByZW1vdmVzIGF0dHJpYnV0ZXMgb3Igbm9kZSB3aGVuIG1v
ZGUgPT0gUmVtb3ZlTm9uZS4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpo
aWdoZXN0QW5jZXN0b3JXaXRoQ29uZmxpY3RpbmdJbmxpbmVTdHlsZSk6IENhbGxzIHNob3VsZFJl
bW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQKKyAgICAgICAgdG8gZGV0ZXJtaW5lIHRoZSBoaWdo
ZXN0IGFuY2VzdG9yIHdob3NlIHN0eWxlIG5lZWRzIHRvIGJlIHB1c2hlZCBkb3duLgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmV4dHJhY3RJbmxpbmVTdHlsZVRvUHVzaERv
d24pOiBSZW5hbWVkIGZyb20gZXh0cmFjdFRleHREZWNvcmF0aW9uU3R5bGUuCisgICAgICAgIEV4
dHJhY3RzIGFsbCBpbmxpbmUgQ1NTIHByb3BlcnRpZXMgc3BlY2lmaWVkIGluc3RlYWQgb2YganVz
dCB0ZXh0IGRlY29yYXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6
OmFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duKTogUmVuYW1lZCBmcm9tIGFwcGx5VGV4dERlY29y
YXRpb25TdHlsZS4KKyAgICAgICAgQXBwbGllcyBpbmxpbmUgc3R5bGVzIHVzaW5nIGFkZElubGlu
ZVN0eWxlSWZOZWVkZWQgb3IgYWRkcyBpbmxpbmUgQ1NTIHZhbHVlcy4KKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5U3R5bGVDb21tYW5kOjpwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZSk6IFJl
bmFtZWQgZnJvbSBwdXNoRG93blRleHREZWNvcmF0aW9uU3R5bGVBcm91bmROb2RlLgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlKTogQ2FsbHMg
cHVzaERvd25UZXh0RGVjb3JhdGlvblN0eWxlQXJvdW5kTm9kZS4KKyAgICAgICAgKiBlZGl0aW5n
L0FwcGx5U3R5bGVDb21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25D
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1l
cmdlUGFyYWdyYXBocyk6IFByZXZlbnRzIG1vdmVQYXJhZ3JhcGggZnJvbSBwcmVzZXJ2aW5nCisg
ICAgICAgIHRoZSBzdHlsZSBvZiBhbiBlbXB0eSBwYXJhZ3JhcGggd2hlbiBtZXJnZWQgd2l0aCB0
aGUgcHJldmlvdXMgcGFyYWdyYXBoIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoYXQgc3R5bGUgYW55
d2F5cy4KKwogMjAxMC0wOC0xMSAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgUnViYmVyIHN0YW1wcyBieSBEYXJpbiBBZGxlciAmIFNhbSBXZWlu
aWcuCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDY1
MTc5KQorKysgV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMxMSw2ICsxMzExLDkgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3Zl
Q1NTU3R5bGUoQwogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKG1vZGUgPT0gUmVtb3ZlTm9u
ZSkKKyAgICAgICAgcmV0dXJuIHJlbW92ZWQ7CisKICAgICAvLyBObyBuZWVkIHRvIHNlcmlhbGl6
ZSA8Zm9vIHN0eWxlPSIiPiBpZiB3ZSBqdXN0IHJlbW92ZWQgdGhlIGxhc3QgY3NzIHByb3BlcnR5
CiAgICAgaWYgKGRlY2wtPmlzRW1wdHkoKSkKICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShl
bGVtLCBzdHlsZUF0dHIpOwpAQCAtMTMyMSwyNCArMTMyNCwxNyBAQCBib29sIEFwcGx5U3R5bGVD
b21tYW5kOjpyZW1vdmVDU1NTdHlsZShDCiAgICAgcmV0dXJuIHJlbW92ZWQ7CiB9CiAKLXN0YXRp
YyBib29sIGhhc1RleHREZWNvcmF0aW9uUHJvcGVydHkoTm9kZSAqbm9kZSkKK0hUTUxFbGVtZW50
KiBBcHBseVN0eWxlQ29tbWFuZDo6aGlnaGVzdEFuY2VzdG9yV2l0aENvbmZsaWN0aW5nSW5saW5l
U3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBOb2RlKiBub2RlKQogewot
ICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gY29tcHV0ZWRTdHlsZShub2RlKS0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uLCBEb05vdFVwZGF0ZUxheW91
dCk7Ci0gICAgcmV0dXJuIHZhbHVlICYmICFlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS0+Y3NzVGV4
dCgpLCAibm9uZSIpOwotfQorICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIDA7CiAKLXN0
YXRpYyBOb2RlKiBoaWdoZXN0QW5jZXN0b3JXaXRoVGV4dERlY29yYXRpb24oTm9kZSAqbm9kZSkK
LXsKLSAgICBBU1NFUlQobm9kZSk7Ci0gICAgTm9kZSogcmVzdWx0ID0gMDsKKyAgICBIVE1MRWxl
bWVudCogcmVzdWx0ID0gMDsKICAgICBOb2RlKiB1bnNwbGl0dGFibGVFbGVtZW50ID0gdW5zcGxp
dHRhYmxlRWxlbWVudEZvclBvc2l0aW9uKFBvc2l0aW9uKG5vZGUsIDApKTsKIAogICAgIGZvciAo
Tm9kZSAqbiA9IG5vZGU7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKGhh
c1RleHREZWNvcmF0aW9uUHJvcGVydHkobikpCi0gICAgICAgICAgICByZXN1bHQgPSBuOworICAg
ICAgICBpZiAobi0+aXNIVE1MRWxlbWVudCgpICYmIHNob3VsZFJlbW92ZUlubGluZVN0eWxlRnJv
bUVsZW1lbnQoc3R5bGUsIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obikpKQorICAgICAgICAg
ICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihuKTsKICAgICAgICAgLy8gU2hv
dWxkIHN0b3AgYXQgdGhlIGVkaXRhYmxlIHJvb3QgKGNhbm5vdCBjcm9zcyBlZGl0aW5nIGJvdW5k
YXJ5KSBhbmQKICAgICAgICAgLy8gYWxzbyBzdG9wIGF0IHRoZSB1bnNwbGl0dGFibGUgZWxlbWVu
dCB0byBiZSBjb25zaXN0ZW50IHdpdGggb3RoZXIgVUFzCiAgICAgICAgIGlmIChuID09IHVuc3Bs
aXR0YWJsZUVsZW1lbnQpCkBAIC0xMzQ4LDcgKzEzNDQsNyBAQCBzdGF0aWMgTm9kZSogaGlnaGVz
dEFuY2VzdG9yV2l0aFRleHREZWNvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUGFzc1JlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQXBwbHlTdHlsZUNvbW1hbmQ6OmV4dHJhY3RU
ZXh0RGVjb3JhdGlvblN0eWxlKE5vZGUqIG5vZGUpCitQYXNzUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBBcHBseVN0eWxlQ29tbWFuZDo6ZXh0cmFjdElubGluZVN0eWxlVG9QdXNo
RG93bihOb2RlKiBub2RlLCBjb25zdCBWZWN0b3I8aW50PiYgcHJvcGVydGllcykKIHsKICAgICBB
U1NFUlQobm9kZSk7CiAgICAgQVNTRVJUKG5vZGUtPmlzRWxlbWVudE5vZGUoKSk7CkBAIC0xMzYy
LDcyICsxMzU4LDEwOCBAQCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBB
CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpbnQgcHJvcGVydGll
c1sxXSA9IHsgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbiB9OwotICAgIFJlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gdGV4dERlY29yYXRpb25TdHlsZSA9IHN0eWxlLT5jb3B5UHJv
cGVydGllc0luU2V0KHByb3BlcnRpZXMsIDEpOworICAgIHN0eWxlID0gc3R5bGUtPmNvcHlQcm9w
ZXJ0aWVzSW5TZXQocHJvcGVydGllcy5kYXRhKCksIHByb3BlcnRpZXMuc2l6ZSgpKTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvcGVydGllcy5zaXplKCk7IGkrKykgeworICAgICAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHByb3BlcnR5ID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUo
cHJvcGVydGllc1tpXSk7CisgICAgICAgIGlmIChwcm9wZXJ0eSkKKyAgICAgICAgICAgIHJlbW92
ZUNTU1Byb3BlcnR5KGVsZW1lbnQsIHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KHByb3BlcnRp
ZXNbaV0pKTsKKyAgICB9CisKKyAgICBpZiAoZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkgJiYg
ZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCktPmlzRW1wdHkoKSkKKyAgICAgICAgcmVtb3ZlTm9k
ZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIpOwogCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBw
cm9wZXJ0eSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29y
YXRpb24pOwotICAgIGlmIChwcm9wZXJ0eSAmJiAhZXF1YWxJZ25vcmluZ0Nhc2UocHJvcGVydHkt
PmNzc1RleHQoKSwgIm5vbmUiKSkKLSAgICAgICAgcmVtb3ZlQ1NTUHJvcGVydHkoZWxlbWVudCwg
Q1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7CisgICAgaWYgKGlzU3BhbldpdGhvdXRBdHRyaWJ1
dGVzT3JVbnN0eWxlU3R5bGVTcGFuKGVsZW1lbnQpKQorICAgICAgICByZW1vdmVOb2RlUHJlc2Vy
dmluZ0NoaWxkcmVuKGVsZW1lbnQpOwogCi0gICAgcmV0dXJuIHRleHREZWNvcmF0aW9uU3R5bGUu
cmVsZWFzZSgpOworICAgIHJldHVybiBzdHlsZS5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgQXBwbHlT
dHlsZUNvbW1hbmQ6OmFwcGx5VGV4dERlY29yYXRpb25TdHlsZShOb2RlICpub2RlLCBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUpCit2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBs
eUlubGluZVN0eWxlVG9QdXNoRG93bihOb2RlKiBub2RlLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUpCiB7CiAgICAgQVNTRVJUKG5vZGUpOwogCi0gICAgaWYgKCFzdHlsZSB8fCBz
dHlsZS0+Y3NzVGV4dCgpLmlzRW1wdHkoKSkKKyAgICBpZiAoIXN0eWxlIHx8ICFzdHlsZS0+bGVu
Z3RoKCkgfHwgIW5vZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0eWxl
Q2hhbmdlIHN0eWxlQ2hhbmdlKHN0eWxlLCBQb3NpdGlvbihub2RlLCAwKSk7Ci0gICAgaWYgKHN0
eWxlQ2hhbmdlLmNzc1N0eWxlKCkubGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKG5vZGUtPmlzVGV4
dE5vZGUoKSkgewotICAgICAgICAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBzdHlsZVNwYW4gPSBj
cmVhdGVTdHlsZVNwYW5FbGVtZW50KGRvY3VtZW50KCkpOwotICAgICAgICAgICAgc3Vycm91bmRO
b2RlUmFuZ2VXaXRoRWxlbWVudChub2RlLCBub2RlLCBzdHlsZVNwYW4uZ2V0KCkpOwotICAgICAg
ICAgICAgbm9kZSA9IHN0eWxlU3Bhbi5nZXQoKTsKLSAgICAgICAgfQorICAgIC8vIFNpbmNlIGFk
ZElubGluZVN0eWxlSWZOZWVkZWQgY2FuJ3QgYWRkIHN0eWxlcyB0byBibG9jay1mbG93IHJlbmRl
ciBvYmplY3RzLCBhZGQgc3R5bGUgYXR0cmlidXRlIGluc3RlYWQuCisgICAgLy8gRklYTUU6IGFw
cGx5SW5saW5lU3R5bGVUb1JhbmdlIHNob3VsZCBiZSB1c2VkIGhlcmUgaW5zdGVhZC4KKyAgICBp
ZiAoKG5vZGUtPnJlbmRlcmVyKCktPmlzQmxvY2tGbG93KCkgfHwgbm9kZS0+Y2hpbGROb2RlQ291
bnQoKSkgJiYgbm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAgIEhUTUxFbGVtZW50KiBl
bGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qIGV4aXN0aW5nSW5saW5lU3R5bGUgPSBlbGVtZW50LT5pbmxp
bmVTdHlsZURlY2woKTsKKworICAgICAgICAvLyBBdm9pZCBvdmVycmlkaW5nIGV4aXN0aW5nIHN0
eWxlcyBvZiBub2RlCisgICAgICAgIGlmIChleGlzdGluZ0lubGluZVN0eWxlKSB7CisgICAgICAg
ICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG5ld0lubGluZVN0eWxlID0g
ZXhpc3RpbmdJbmxpbmVTdHlsZS0+Y29weSgpOworICAgICAgICAgICAgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlLT5lbmQoKTsKKyAgICAgICAg
ICAgIGZvciAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
c3R5bGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgIEV4Y2Vw
dGlvbkNvZGUgZWM7CisgICAgICAgICAgICAgICAgaWYgKCFleGlzdGluZ0lubGluZVN0eWxlLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKGl0LT5pZCgpKSkKKyAgICAgICAgICAgICAgICAgICAgbmV3SW5s
aW5lU3R5bGUtPnNldFByb3BlcnR5KGl0LT5pZCgpLCBpdC0+dmFsdWUoKS0+Y3NzVGV4dCgpLCBp
dC0+aXNJbXBvcnRhbnQoKSwgZWMpOworCisgICAgICAgICAgICAgICAgLy8gdGV4dC1kZWNvcmF0
aW9ucyBhZGRzIHVwCisgICAgICAgICAgICAgICAgaWYgKGl0LT5pZCgpID09IENTU1Byb3BlcnR5
VGV4dERlY29yYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0LT52YWx1ZSgp
LT5pc1ZhbHVlTGlzdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB0
ZXh0RGVjb3JhdGlvbiA9IG5ld0lubGluZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1By
b3BlcnR5VGV4dERlY29yYXRpb24pOworICAgICAgICAgICAgICAgICAgICBpZiAodGV4dERlY29y
YXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh0ZXh0RGVjb3JhdGlvbi0+
aXNWYWx1ZUxpc3QoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIHRl
eHREZWNvcmF0aW9uT2ZJbmxpbmVTdHlsZSA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHRl
eHREZWNvcmF0aW9uLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENTU1ZhbHVlTGlz
dCogdGV4dERlY29yYXRpb25PZlN0eWxlQXBwbGllZCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlz
dCo+KGl0LT52YWx1ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+LCB1bmRlcmxpbmUsIChDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZVVuZGVybGluZSkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiwgbGluZVRocm91Z2gsIChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihD
U1NWYWx1ZUxpbmVUaHJvdWdoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodGV4dERlY29yYXRpb25PZlN0eWxlQXBwbGllZC0+aGFzVmFs
dWUodW5kZXJsaW5lLmdldCgpKSAmJiAhdGV4dERlY29yYXRpb25PZklubGluZVN0eWxlLT5oYXNW
YWx1ZSh1bmRlcmxpbmUuZ2V0KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRE
ZWNvcmF0aW9uT2ZJbmxpbmVTdHlsZS0+YXBwZW5kKHVuZGVybGluZS5nZXQoKSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0RGVjb3JhdGlvbk9mU3R5bGVBcHBsaWVkLT5oYXNW
YWx1ZShsaW5lVGhyb3VnaC5nZXQoKSkgJiYgIXRleHREZWNvcmF0aW9uT2ZJbmxpbmVTdHlsZS0+
aGFzVmFsdWUobGluZVRocm91Z2guZ2V0KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRleHREZWNvcmF0aW9uT2ZJbmxpbmVTdHlsZS0+YXBwZW5kKGxpbmVUaHJvdWdoLmdldCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
IAotICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVBdHRyLCBuZXdJ
bmxpbmVTdHlsZS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzZXRO
b2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgc3R5bGUtPmNzc1RleHQoKSk7CiAKLSAg
ICAgICAgSFRNTEVsZW1lbnQgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCAqPihu
b2RlKTsKLSAgICAgICAgU3RyaW5nIGNzc1RleHQgPSBzdHlsZUNoYW5nZS5jc3NTdHlsZSgpOwot
ICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqZGVjbCA9IGVsZW1lbnQtPmlubGlu
ZVN0eWxlRGVjbCgpOwotICAgICAgICBpZiAoZGVjbCkKLSAgICAgICAgICAgIGNzc1RleHQgKz0g
ZGVjbC0+Y3NzVGV4dCgpOwotICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxl
QXR0ciwgY3NzVGV4dCk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoc3R5bGVD
aGFuZ2UuYXBwbHlVbmRlcmxpbmUoKSkKLSAgICAgICAgc3Vycm91bmROb2RlUmFuZ2VXaXRoRWxl
bWVudChub2RlLCBub2RlLCBjcmVhdGVIVE1MRWxlbWVudChkb2N1bWVudCgpLCB1VGFnKSk7Cisg
ICAgaWYgKG5vZGUtPnJlbmRlcmVyKCktPmlzVGV4dCgpICYmIHN0YXRpY19jYXN0PFJlbmRlclRl
eHQqPihub2RlLT5yZW5kZXJlcigpKS0+aXNBbGxDb2xsYXBzaWJsZVdoaXRlc3BhY2UoKSkKKyAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHN0eWxlQ2hhbmdlLmFwcGx5TGluZVRocm91Z2goKSkK
LSAgICAgICAgc3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudChub2RlLCBub2RlLCBjcmVhdGVI
VE1MRWxlbWVudChkb2N1bWVudCgpLCBzVGFnKSk7ICAgIAorICAgIC8vIEZJWE1FOiBhZGRJbmxp
bmVTdHlsZUlmTmVlZGVkIG1heSBvdmVycmlkZSB0aGUgc3R5bGUgb2Ygbm9kZQorICAgIGFkZElu
bGluZVN0eWxlSWZOZWVkZWQoc3R5bGUsIG5vZGUsIG5vZGUpOwogfQogCi12b2lkIEFwcGx5U3R5
bGVDb21tYW5kOjpwdXNoRG93blRleHREZWNvcmF0aW9uU3R5bGVBcm91bmROb2RlKE5vZGUqIHRh
cmdldE5vZGUpCit2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpwdXNoRG93bklubGluZVN0eWxlQXJv
dW5kTm9kZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIE5vZGUqIHRhcmdldE5v
ZGUpCiB7Ci0gICAgQVNTRVJUKHRhcmdldE5vZGUpOwotICAgIE5vZGUqIGhpZ2hlc3RBbmNlc3Rv
ciA9IGhpZ2hlc3RBbmNlc3RvcldpdGhUZXh0RGVjb3JhdGlvbih0YXJnZXROb2RlKTsKKyAgICBI
VE1MRWxlbWVudCogaGlnaGVzdEFuY2VzdG9yID0gaGlnaGVzdEFuY2VzdG9yV2l0aENvbmZsaWN0
aW5nSW5saW5lU3R5bGUoc3R5bGUsIHRhcmdldE5vZGUpOwogICAgIGlmICghaGlnaGVzdEFuY2Vz
dG9yKQogICAgICAgICByZXR1cm47CiAKKyAgICBWZWN0b3I8aW50PiBwcm9wZXJ0aWVzOworICAg
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZS0+
ZW5kKCk7CisgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBzdHlsZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBwcm9wZXJ0
aWVzLmFwcGVuZChpdC0+aWQoKSk7CisKICAgICAvLyBUaGUgb3V0ZXIgbG9vcCBpcyB0cmF2ZXJz
aW5nIHRoZSB0cmVlIHZlcnRpY2FsbHkgZnJvbSBoaWdoZXN0QW5jZXN0b3IgdG8gdGFyZ2V0Tm9k
ZQogICAgIE5vZGUqIGN1cnJlbnQgPSBoaWdoZXN0QW5jZXN0b3I7CiAgICAgd2hpbGUgKGN1cnJl
bnQgIT0gdGFyZ2V0Tm9kZSkgewogICAgICAgICBBU1NFUlQoY3VycmVudCk7CisgICAgICAgIEFT
U0VSVChjdXJyZW50LT5pc0hUTUxFbGVtZW50KCkpOwogICAgICAgICBBU1NFUlQoY3VycmVudC0+
Y29udGFpbnModGFyZ2V0Tm9kZSkpOwotICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+IGRlY29yYXRpb24gPSBleHRyYWN0VGV4dERlY29yYXRpb25TdHlsZShjdXJyZW50
KTsKKyAgICAgICAgTm9kZSogY2hpbGQgPSBjdXJyZW50LT5maXJzdENoaWxkKCk7CisgICAgICAg
IFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVUb1B1c2hEb3duID0gZXh0
cmFjdElubGluZVN0eWxlVG9QdXNoRG93bihjdXJyZW50LCBwcm9wZXJ0aWVzKTsKIAogICAgICAg
ICAvLyBUaGUgaW5uZXIgbG9vcCB3aWxsIGdvIHRocm91Z2ggY2hpbGRyZW4gb24gZWFjaCBsZXZl
bAotICAgICAgICBOb2RlKiBjaGlsZCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAg
d2hpbGUgKGNoaWxkKSB7CiAgICAgICAgICAgICBOb2RlKiBuZXh0Q2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKTsKIAogICAgICAgICAgICAgLy8gQXBwbHkgdGV4dCBkZWNvcmF0aW9uIHRvIGFs
bCBub2RlcyBjb250YWluaW5nIHRhcmdldE5vZGUgYW5kIHRoZWlyIHNpYmxpbmdzIGJ1dCBOT1Qg
dG8gdGFyZ2V0Tm9kZQogICAgICAgICAgICAgaWYgKGNoaWxkICE9IHRhcmdldE5vZGUpCi0gICAg
ICAgICAgICAgICAgYXBwbHlUZXh0RGVjb3JhdGlvblN0eWxlKGNoaWxkLCBkZWNvcmF0aW9uLmdl
dCgpKTsKLSAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGFwcGx5SW5saW5lU3R5bGVUb1B1
c2hEb3duKGNoaWxkLCBzdHlsZVRvUHVzaERvd24uZ2V0KCkpOworCiAgICAgICAgICAgICAvLyBX
ZSBmb3VuZCB0aGUgbmV4dCBub2RlIGZvciB0aGUgb3V0ZXIgbG9vcCAoY29udGFpbnMgdGFyZ2V0
Tm9kZSkKICAgICAgICAgICAgIC8vIFdoZW4gcmVhY2hlZCB0YXJnZXROb2RlLCBzdG9wIHRoZSBv
dXRlciBsb29wIHVwb24gdGhlIGNvbXBsZXRpb24gb2YgdGhlIGN1cnJlbnQgaW5uZXIgbG9vcAog
ICAgICAgICAgICAgaWYgKGNoaWxkID09IHRhcmdldE5vZGUgfHwgY2hpbGQtPmNvbnRhaW5zKHRh
cmdldE5vZGUpKQpAQCAtMTQ0NywxNCArMTQ3OSwxNSBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5k
OjpyZW1vdmVJbmxpbmVTdHlsCiAgICAgQVNTRVJUKGNvbXBhcmVQb3NpdGlvbnMoc3RhcnQsIGVu
ZCkgPD0gMCk7CiAgICAgCiAgICAgUmVmUHRyPENTU1ZhbHVlPiB0ZXh0RGVjb3JhdGlvblNwZWNp
YWxQcm9wZXJ0eSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0
VGV4dERlY29yYXRpb25zSW5FZmZlY3QpOwotCiAgICAgaWYgKHRleHREZWNvcmF0aW9uU3BlY2lh
bFByb3BlcnR5KSB7Ci0gICAgICAgIHB1c2hEb3duVGV4dERlY29yYXRpb25TdHlsZUFyb3VuZE5v
ZGUoc3RhcnQuZG93bnN0cmVhbSgpLm5vZGUoKSk7Ci0gICAgICAgIHB1c2hEb3duVGV4dERlY29y
YXRpb25TdHlsZUFyb3VuZE5vZGUoZW5kLnVwc3RyZWFtKCkubm9kZSgpKTsKICAgICAgICAgc3R5
bGUgPSBzdHlsZS0+Y29weSgpOwogICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVy
dHlUZXh0RGVjb3JhdGlvbiwgdGV4dERlY29yYXRpb25TcGVjaWFsUHJvcGVydHktPmNzc1RleHQo
KSwgc3R5bGUtPmdldFByb3BlcnR5UHJpb3JpdHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3Jh
dGlvbnNJbkVmZmVjdCkpOwogICAgIH0KIAorICAgIFJlZlB0cjxOb2RlPiBwdXNoRG93bkVuZCA9
IGVuZC51cHN0cmVhbSgpLm5vZGUoKTsKKyAgICBwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9k
ZShzdHlsZS5nZXQoKSwgc3RhcnQuZG93bnN0cmVhbSgpLm5vZGUoKSk7CisgICAgcHVzaERvd25J
bmxpbmVTdHlsZUFyb3VuZE5vZGUoc3R5bGUuZ2V0KCksIHB1c2hEb3duRW5kLmdldCgpKTsKKwog
ICAgIC8vIFRoZSBzIGFuZCBlIHZhcmlhYmxlcyBzdG9yZSB0aGUgcG9zaXRpb25zIHVzZWQgdG8g
c2V0IHRoZSBlbmRpbmcgc2VsZWN0aW9uIGFmdGVyIHN0eWxlIHJlbW92YWwKICAgICAvLyB0YWtl
cyBwbGFjZS4gVGhpcyB3aWxsIGhlbHAgY2FsbGVycyB0byByZWNvZ25pemUgd2hlbiBlaXRoZXIg
dGhlIHN0YXJ0IG5vZGUgb3IgdGhlIGVuZCBub2RlCiAgICAgLy8gYXJlIHJlbW92ZWQgZnJvbSB0
aGUgZG9jdW1lbnQgZHVyaW5nIHRoZSB3b3JrIG9mIHRoaXMgZnVuY3Rpb24uCkluZGV4OiBXZWJD
b3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Vk
aXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAkocmV2aXNpb24gNjUxNzkpCisrKyBXZWJDb3JlL2Vk
aXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTIgKzc4LDEz
IEBAIHByaXZhdGU6CiAgICAgYm9vbCByZW1vdmVIVE1MRm9udFN0eWxlKENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKiwgSFRNTEVsZW1lbnQqLCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlID0gUmVt
b3ZlQXR0cmlidXRlc0FuZEVsZW1lbnRzKTsKICAgICBib29sIHJlbW92ZUhUTUxCaWRpRW1iZWRk
aW5nU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBIVE1MRWxlbWVudCosIElubGlu
ZVN0eWxlUmVtb3ZhbE1vZGUgPSBSZW1vdmVBdHRyaWJ1dGVzQW5kRWxlbWVudHMpOwogICAgIGJv
b2wgcmVtb3ZlQ1NTU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBIVE1MRWxlbWVu
dCosIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgPSBSZW1vdmVBdHRyaWJ1dGVzQW5kRWxlbWVudHMp
OworICAgIEhUTUxFbGVtZW50KiBoaWdoZXN0QW5jZXN0b3JXaXRoQ29uZmxpY3RpbmdJbmxpbmVT
dHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIE5vZGUqKTsKKyAgICBQYXNzUmVmUHRy
PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBleHRyYWN0SW5saW5lU3R5bGVUb1B1c2hEb3du
KE5vZGUqLCBjb25zdCBWZWN0b3I8aW50PiYpOworICAgIHZvaWQgYXBwbHlJbmxpbmVTdHlsZVRv
UHVzaERvd24oTm9kZSosIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uICpzdHlsZSk7CisgICAg
dm9pZCBwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiosIE5vZGUqKTsKICAgICB2b2lkIHJlbW92ZUlubGluZVN0eWxlKFBhc3NSZWZQdHI8Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+LCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBv
c2l0aW9uJiBlbmQpOwogICAgIGJvb2wgbm9kZUZ1bGx5U2VsZWN0ZWQoTm9kZSosIGNvbnN0IFBv
c2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkgY29uc3Q7CiAgICAgYm9vbCBub2Rl
RnVsbHlVbnNlbGVjdGVkKE5vZGUqLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0
aW9uJiBlbmQpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24+IGV4dHJhY3RUZXh0RGVjb3JhdGlvblN0eWxlKE5vZGUqKTsKLSAgICB2b2lkIGFwcGx5VGV4
dERlY29yYXRpb25TdHlsZShOb2RlKiwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gKnN0eWxl
KTsKLSAgICB2b2lkIHB1c2hEb3duVGV4dERlY29yYXRpb25TdHlsZUFyb3VuZE5vZGUoTm9kZSop
OwogCiAgICAgLy8gc3R5bGUtYXBwbGljYXRpb24gaGVscGVycwogICAgIHZvaWQgYXBwbHlCbG9j
a1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKik7CkluZGV4OiBXZWJDb3JlL2VkaXRp
bmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0
aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA2NTE3OSkKKysrIFdlYkNv
cmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjMwLDcgKzYzMCw4IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3IK
ICAgICAvLyBtb3ZlUGFyYWdyYXBocyB3aWxsIGluc2VydCBwbGFjZWhvbGRlcnMgaWYgaXQgcmVt
b3ZlcyBibG9ja3MgdGhhdCB3b3VsZCByZXF1aXJlIHRoZWlyIHVzZSwgZG9uJ3QgbGV0IGJsb2Nr
CiAgICAgLy8gcmVtb3ZhbHMgdGhhdCBpdCBkb2VzIGNhdXNlIHRoZSBpbnNlcnRpb24gb2YgKmFu
b3RoZXIqIHBsYWNlaG9sZGVyLgogICAgIGJvb2wgbmVlZFBsYWNlaG9sZGVyID0gbV9uZWVkUGxh
Y2Vob2xkZXI7Ci0gICAgbW92ZVBhcmFncmFwaChzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLCBlbmRP
ZlBhcmFncmFwaFRvTW92ZSwgbWVyZ2VEZXN0aW5hdGlvbik7CisgICAgYm9vbCBwYXJhZ3JhcGhU
b01lcmdlSXNFbXB0eSA9IChzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlID09IGVuZE9mUGFyYWdyYXBo
VG9Nb3ZlKTsKKyAgICBtb3ZlUGFyYWdyYXBoKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUsIGVuZE9m
UGFyYWdyYXBoVG9Nb3ZlLCBtZXJnZURlc3RpbmF0aW9uLCBmYWxzZSwgIXBhcmFncmFwaFRvTWVy
Z2VJc0VtcHR5KTsKICAgICBtX25lZWRQbGFjZWhvbGRlciA9IG5lZWRQbGFjZWhvbGRlcjsKICAg
ICAvLyBUaGUgZW5kaW5nUG9zaXRpb24gd2FzIGxpa2VseSBjbG9iYmVyZWQgYnkgdGhlIG1vdmUs
IHNvIHJlY29tcHV0ZSBpdCAobW92ZVBhcmFncmFwaCBzZWxlY3RzIHRoZSBtb3ZlZCBwYXJhZ3Jh
cGgpLgogICAgIG1fZW5kaW5nUG9zaXRpb24gPSBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpOwpJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gNjUxNzkpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMC0wOC0xMSAgUnlvc3VrZSBOaXdhICA8cm5p
d2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBDYW4ndCB1bmJvbGQgdGV4dCBpbiBkaXYgaW4gZm9udC13ZWlnaHQgc3BhbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY4NzEKKworICAg
ICAgICBBZGRlZCBhIHRlc3QgdG8gcHVzaCBkb3duIGlubGluZSBzdHlsZXMgdG8gdGhlIGxlYXZl
cyBvZiBET00gdHJlZS4KKworICAgICAgICAqIGVkaXRpbmcvZGVsZXRpbmcvZGVsZXRlLWJyLTAx
MS1leHBlY3RlZC50eHQ6IFJlbW92ZWQgcmVkdW5kYW50IHN0eWxlIHNwYW5zLgorICAgICAgICAq
IGVkaXRpbmcvZXhlY0NvbW1hbmQvZW1wdHktc3Bhbi1yZW1vdmFsLWV4cGVjdGVkLnR4dDogUmVt
b3ZlZCBhIHNwYW4gd2l0aG91dCBhbnkgYXR0cmlidXRlcy4KKyAgICAgICAgKiBlZGl0aW5nL3N0
eWxlL3B1c2gtZG93bi1pbmxpbmUtc3R5bGVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZWRpdGluZy9zdHlsZS9wdXNoLWRvd24taW5saW5lLXN0eWxlcy5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBlZGl0aW5nL3N0eWxlL3NjcmlwdC10ZXN0cy9wdXNoLWRvd24taW5saW5lLXN0eWxl
cy5qczogQWRkZWQuCisgICAgICAgICh0ZXN0U2luZ2xlVG9nZ2xlKToKKwogMjAxMC0wOC0xMSAg
TmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZGVsZXRpbmcvZGVs
ZXRlLWJyLTAxMS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGlu
Zy9kZWxldGluZy9kZWxldGUtYnItMDExLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjUxNzkpCisr
KyBMYXlvdXRUZXN0cy9lZGl0aW5nL2RlbGV0aW5nL2RlbGV0ZS1ici0wMTEtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNiArMjYsNyBAQCBhZnRlciBkZWxldGlvbjoKIHwgPGRp
dj4KIHwgICBjbGFzcz0iZWRpdGluZyIKIHwgICBpZD0idGVzdCIKLXwgICA8c3Bhbj4KLXwgICAg
IGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIgotfCAgICAgc3R5bGU9ImZvbnQtc2l6ZTogbWVkaXVt
OyIKLXwgICAgIDxmb250PgotfCAgICAgICBjbGFzcz0iQXBwbGUtc3R5bGUtc3BhbiIKLXwgICAg
ICAgc2l6ZT0iNiIKLXwgICAgICAgPHNwYW4+Ci18ICAgICAgICAgY2xhc3M9IkFwcGxlLXN0eWxl
LXNwYW4iCi18ICAgICAgICAgc3R5bGU9ImZvbnQtc2l6ZTogMjRweDsiCi18ICAgICAgICAgPCNz
ZWxlY3Rpb24tY2FyZXQ+Ci18ICAgICAgICAgPGJyPgorfCAgIDwjc2VsZWN0aW9uLWNhcmV0Pgor
fCAgIDxicj4KIHwgIgogIgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9l
bXB0eS1zcGFuLXJlbW92YWwtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2VkaXRpbmcvZXhlY0NvbW1hbmQvZW1wdHktc3Bhbi1yZW1vdmFsLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gNjUxNzkpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2VtcHR5LXNw
YW4tcmVtb3ZhbC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCw3IEBAIE9u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEEKIAogCiBQQVNTIG9uZSBib2xk
IGNvbW1hbmQgY29udmVydGVkIDxzcGFuPjxzcGFuIHN0eWxlPSdmb250LXdlaWdodDogYm9sZCc+
dGVzdDwvc3Bhbj48L3NwYW4+IHRvIDxzcGFuPnRlc3Q8L3NwYW4+Ci1QQVNTIG9uZSBib2xkIGNv
bW1hbmQgY29udmVydGVkIDxzcGFuIHN0eWxlPSdmb250LXdlaWdodDogYm9sZCc+PHNwYW4+dGVz
dDwvc3Bhbj48L3NwYW4+IHRvIDxzcGFuPnRlc3Q8L3NwYW4+CitQQVNTIG9uZSBib2xkIGNvbW1h
bmQgY29udmVydGVkIDxzcGFuIHN0eWxlPSdmb250LXdlaWdodDogYm9sZCc+PHNwYW4+dGVzdDwv
c3Bhbj48L3NwYW4+IHRvIHRlc3QKIFBBU1Mgb25lIGJvbGQgY29tbWFuZCBjb252ZXJ0ZWQgPHNw
YW4gc3R5bGU9J2ZvbnQtd2VpZ2h0OiBib2xkJz48c3BhbiBzdHlsZT0nZm9udC13ZWlnaHQ6IGJv
bGQnPnRlc3Q8L3NwYW4+PC9zcGFuPiB0byB0ZXN0CiBQQVNTIG9uZSBib2xkIGNvbW1hbmQgY29u
dmVydGVkIDxzcGFuIGZvbz0iYmFyIiBzdHlsZT0nZm9udC13ZWlnaHQ6IGJvbGQnPnRlc3Q8L3Nw
YW4+IHRvIDxzcGFuIGZvbz0iYmFyIj50ZXN0PC9zcGFuPgogUEFTUyB0d28gYm9sZCBjb21tYW5k
cyBjb252ZXJ0ZWQgPHNwYW4+dGVzdDwvc3Bhbj4gdG8gPHNwYW4+dGVzdDwvc3Bhbj4KSW5kZXg6
IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvc2NyaXB0LXRlc3RzL2VtcHR5LXNwYW4t
cmVtb3ZhbC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5k
L3NjcmlwdC10ZXN0cy9lbXB0eS1zcGFuLXJlbW92YWwuanMJKHJldmlzaW9uIDY1MTc5KQorKysg
TGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9zY3JpcHQtdGVzdHMvZW1wdHktc3Bhbi1y
ZW1vdmFsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBAIGZ1bmN0aW9uIHRlc3RE
b3VibGVUb2dnbGUodG9nZ2xlQ29tbWFuZCwKIH0KIAogdGVzdFNpbmdsZVRvZ2dsZSgiYm9sZCIs
ICI8c3Bhbj48c3BhbiBzdHlsZT0nZm9udC13ZWlnaHQ6IGJvbGQnPnRlc3Q8L3NwYW4+PC9zcGFu
PiIsICI8c3Bhbj50ZXN0PC9zcGFuPiIpOwotdGVzdFNpbmdsZVRvZ2dsZSgiYm9sZCIsICI8c3Bh
biBzdHlsZT0nZm9udC13ZWlnaHQ6IGJvbGQnPjxzcGFuPnRlc3Q8L3NwYW4+PC9zcGFuPiIsICI8
c3Bhbj50ZXN0PC9zcGFuPiIpOwordGVzdFNpbmdsZVRvZ2dsZSgiYm9sZCIsICI8c3BhbiBzdHls
ZT0nZm9udC13ZWlnaHQ6IGJvbGQnPjxzcGFuPnRlc3Q8L3NwYW4+PC9zcGFuPiIsICJ0ZXN0Iik7
CiB0ZXN0U2luZ2xlVG9nZ2xlKCJib2xkIiwgIjxzcGFuIHN0eWxlPSdmb250LXdlaWdodDogYm9s
ZCc+PHNwYW4gc3R5bGU9J2ZvbnQtd2VpZ2h0OiBib2xkJz50ZXN0PC9zcGFuPjwvc3Bhbj4iLCAi
dGVzdCIpOwogdGVzdFNpbmdsZVRvZ2dsZSgiYm9sZCIsICI8c3BhbiBmb289XCJiYXJcIiBzdHls
ZT0nZm9udC13ZWlnaHQ6IGJvbGQnPnRlc3Q8L3NwYW4+IiwgIjxzcGFuIGZvbz1cImJhclwiPnRl
c3Q8L3NwYW4+Iik7CiB0ZXN0RG91YmxlVG9nZ2xlKCJib2xkIiwgIjxzcGFuPnRlc3Q8L3NwYW4+
IiwgIjxzcGFuPnRlc3Q8L3NwYW4+Iik7CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxl
L3B1c2gtZG93bi1pbmxpbmUtc3R5bGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9lZGl0aW5nL3N0eWxlL3B1c2gtZG93bi1pbmxpbmUtc3R5bGVzLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc3R5bGUvcHVzaC1kb3duLWlu
bGluZS1zdHlsZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4IEBACitU
ZXN0IHRvIG1ha2Ugc3VyZSB3ZSBwdXNoIGRvd24gaW5saW5lIHN0eWxlcyBwcm9wZXJseS4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgYm9sZCBjb252ZXJ0ZWQgPHNwYW4g
c3R5bGU9ImZvbnQtd2VpZ2h0OiA5MDA7Ij4gPGRpdj50ZXh0PC9kaXY+IDwvc3Bhbj4gdG8gIDxk
aXY+dGV4dDwvZGl2PiAKK1BBU1MgYm9sZCBjb252ZXJ0ZWQgPHNwYW4gc3R5bGU9ImZvbnQtd2Vp
Z2h0OiA5MDA7Ij48ZGl2PnRleHQ8L2Rpdj48L3NwYW4+IHRvIDxkaXY+dGV4dDwvZGl2PgorUEFT
UyBib2xkIGNvbnZlcnRlZCA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IDkwMDsiPjxkaXYgaWQ9
InRlc3QiPmhlbGxvPC9kaXY+PGRpdj53b3JsZDwvZGl2Pjwvc3Bhbj4gdG8gPGRpdiBpZD0idGVz
dCI+aGVsbG88L2Rpdj48ZGl2IHN0eWxlPSJmb250LXdlaWdodDogOTAwOyAiPndvcmxkPC9kaXY+
CitQQVNTIGJvbGQgY29udmVydGVkIDxkaXYgc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+aGVs
bG88ZGl2IGlkPSJ0ZXN0Ij53b3JsZDwvZGl2PjwvZGl2PiB0byA8ZGl2PjxiPmhlbGxvPC9iPjxk
aXYgaWQ9InRlc3QiPndvcmxkPC9kaXY+PC9kaXY+CitQQVNTIGJvbGQgY29udmVydGVkIDxzcGFu
IHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPmhlbGxvPHNwYW4gaWQ9InRlc3QiPndvcmxkPC9k
aXY+PC9kaXY+IHRvIDxiPmhlbGxvPC9iPjxzcGFuIGlkPSJ0ZXN0Ij53b3JsZDwvc3Bhbj4KK1BB
U1MgYm9sZCBjb252ZXJ0ZWQgPHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsgZm9udC13
ZWlnaHQ6IGJvbGQ7Ij5oZWxsbzxzcGFuIGlkPSJ0ZXN0Ij53b3JsZDwvZGl2PjwvZGl2PiB0byA8
c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyAiPjxiPmhlbGxvPC9iPjxzcGFuIGlkPSJ0
ZXN0Ij53b3JsZDwvc3Bhbj48L3NwYW4+CitGQUlMIGJvbGQgY29udmVydGVkIDxzcGFuIHN0eWxl
PSJmb250LXdlaWdodDogYm9sZDsiPjxkaXYgaWQ9InRlc3QiPmhlbGxvPC9kaXY+PGRpdiBzdHls
ZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsiPjxkaXY+d29ybGQ8L2Rpdj53ZWJraXQ8L2Rpdj4gdG8g
PGRpdiBpZD0idGVzdCI+aGVsbG88L2Rpdj48ZGl2IHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFs
OyAiPjxkaXY+d29ybGQ8L2Rpdj53ZWJraXQ8L2Rpdj4sIGV4cGVjdGVkIDxkaXYgaWQ9InRlc3Qi
PmhlbGxvPC9kaXY+PGRpdj53b3JsZDwvZGl2PndlYmtpdAorUEFTUyBpdGFsaWMgY29udmVydGVk
IDxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij48ZGl2PmhlbGxvPC9kaXY+PC9zcGFu
PiB0byA8ZGl2PmhlbGxvPC9kaXY+CitQQVNTIGl0YWxpYyBjb252ZXJ0ZWQgPHNwYW4gc3R5bGU9
ImZvbnQtc3R5bGU6IGl0YWxpYzsiPjxkaXYgaWQ9InRlc3QiPmhlbGxvPC9kaXY+PHNwYW4gc3R5
bGU9ImZvbnQtc3R5bGU6IG9ibGlxdWU7Ij53b3JsZDwvc3Bhbj4gdG8gPGRpdiBpZD0idGVzdCI+
aGVsbG88L2Rpdj48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogb2JsaXF1ZTsgIj53b3JsZDwvc3Bh
bj4KK1BBU1MgaXRhbGljIGNvbnZlcnRlZCA8c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGlj
OyBmb250LXdlaWdodDogYm9sZDsiPjxkaXY+aGVsbG88L2Rpdj48L3NwYW4+IHRvIDxzcGFuIHN0
eWxlPSJmb250LXdlaWdodDogYm9sZDsgIj48ZGl2PmhlbGxvPC9kaXY+PC9zcGFuPgorUEFTUyBp
dGFsaWMgY29udmVydGVkIDxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7IHRleHQtZGVj
b3JhdGlvbjogbGluZS10aHJvdWdoOyI+PGRpdj5oZWxsbzwvZGl2Pjwvc3Bhbj4gdG8gPHNwYW4g
c3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyAiPjxkaXY+aGVsbG88L2Rpdj48
L3NwYW4+CitQQVNTIGl0YWxpYyBjb252ZXJ0ZWQgPHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0
YWxpYzsiPmhlbGxvPGRpdiBpZD0idGVzdCI+d29ybGQ8L2Rpdj48YmxvY2txdW90ZT53ZWJraXQ8
L2Jsb2NrcXVvdGU+PC9zcGFuPiB0byA8aT5oZWxsbzwvaT48ZGl2IGlkPSJ0ZXN0Ij53b3JsZDwv
ZGl2PjxibG9ja3F1b3RlIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7ICI+d2Via2l0PC9ibG9j
a3F1b3RlPgorUEFTUyBpdGFsaWMgY29udmVydGVkIDxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBp
dGFsaWM7Ij5oZWxsbyA8c3BhbiBpZD0idGVzdCI+d29ybGQ8L3NwYW4+IHdlYmtpdDwvc3Bhbj4g
dG8gPGk+aGVsbG8gPC9pPjxzcGFuIGlkPSJ0ZXN0Ij53b3JsZDwvc3Bhbj48aT4gd2Via2l0PC9p
PgorUEFTUyB1bmRlcmxpbmUgY29udmVydGVkIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246
IHVuZGVybGluZTsiPjxkaXYgaWQ9InRlc3QiPmhlbGxvPC9kaXY+d29ybGQ8L3NwYW4+IHRvIDxk
aXYgaWQ9InRlc3QiPmhlbGxvPC9kaXY+PHU+d29ybGQ8L3U+CitQQVNTIHVuZGVybGluZSBjb252
ZXJ0ZWQgPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+PGRpdiBpZD0i
dGVzdCI+aGVsbG88L2Rpdj48YmxvY2txdW90ZT53b3JsZDxicj53ZWJraXQ8L2Jsb2NrcXVvdGU+
PC9zcGFuPiB0byA8ZGl2IGlkPSJ0ZXN0Ij5oZWxsbzwvZGl2PjxibG9ja3F1b3RlIHN0eWxlPSJ0
ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgIj53b3JsZDxicj53ZWJraXQ8L2Jsb2NrcXVvdGU+
CitQQVNTIHVuZGVybGluZSBjb252ZXJ0ZWQgPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjog
dW5kZXJsaW5lOyI+aGVsbG88ZGl2IGlkPSJ0ZXN0Ij53b3JsZDwvZGl2PndlYmtpdDwvdT4gdG8g
PHU+aGVsbG88L3U+PGRpdiBpZD0idGVzdCI+d29ybGQ8L2Rpdj48dT53ZWJraXQ8L3U+CitGQUlM
IHVuZGVybGluZSBjb252ZXJ0ZWQgPGRpdiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxp
bmU7Ij48ZGl2PmhlbGxvPC9zcGFuPjwvZGl2PjxkaXYgaWQ9InRlc3QiPndlYmtpdDwvZGl2Pjxz
cGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5yb2Nrczwvc3Bhbj4gdG8gPGRpdj48ZGl2
IHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgIj5oZWxsbzwvZGl2PjxkaXYgaWQ9
InRlc3QiPndlYmtpdDwvZGl2PjxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7IHRleHQt
ZGVjb3JhdGlvbjogdW5kZXJsaW5lOyAiPnJvY2tzPC9zcGFuPjwvZGl2PiwgZXhwZWN0ZWQgPGRp
dj48ZGl2IHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgIj5oZWxsbzwvc3Bhbj48
L2Rpdj48ZGl2IGlkPSJ0ZXN0Ij53ZWJraXQ8L2Rpdj48dT48c3BhbiBzdHlsZT0iZm9udC1zdHls
ZTogaXRhbGljOyI+cm9ja3M8L3NwYW4+PC91PjwvZGl2PgorUEFTUyB1bmRlcmxpbmUgY29udmVy
dGVkIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPjxkaXYgc3R5bGU9
InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+aGVsbG88L2Rpdj48ZGl2IGlkPSJ0ZXN0
Ij53b3JsZDwvZGl2Pjwvc3Bhbj4gdG8gPGRpdiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5l
LXRocm91Z2ggdW5kZXJsaW5lOyAiPmhlbGxvPC9kaXY+PGRpdiBpZD0idGVzdCI+d29ybGQ8L2Rp
dj4KK1BBU1Mgc3RyaWtlVGhyb3VnaCBjb252ZXJ0ZWQgPHNwYW4gc3R5bGU9InRleHQtZGVjb3Jh
dGlvbjogbGluZS10aHJvdWdoOyI+PGRpdiBpZD0idGVzdCI+aGVsbG88L2Rpdj48ZGl2IHN0eWxl
PSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPndvcmxkPC9kaXY+PC9zcGFuPiB0byA8ZGl2
IGlkPSJ0ZXN0Ij5oZWxsbzwvZGl2PjxkaXYgc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJs
aW5lIGxpbmUtdGhyb3VnaDsgIj53b3JsZDwvZGl2PgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc3R5
bGUvcHVzaC1kb3duLWlubGluZS1zdHlsZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9lZGl0aW5nL3N0eWxlL3B1c2gtZG93bi1pbmxpbmUtc3R5bGVzLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3B1c2gtZG93bi1pbmxpbmUtc3R5bGVzLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAi
LS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3B1c2gtZG93bi1p
bmxpbmUtc3R5bGVzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvZWRpdGluZy9zdHlsZS9zY3JpcHQtdGVzdHMvcHVzaC1kb3duLWlubGlu
ZS1zdHlsZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zdHlsZS9zY3Jp
cHQtdGVzdHMvcHVzaC1kb3duLWlubGluZS1zdHlsZXMuanMJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9lZGl0aW5nL3N0eWxlL3NjcmlwdC10ZXN0cy9wdXNoLWRvd24taW5saW5lLXN0eWxl
cy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorZGVzY3JpcHRpb24oJ1Rlc3QgdG8g
bWFrZSBzdXJlIHdlIHB1c2ggZG93biBpbmxpbmUgc3R5bGVzIHByb3Blcmx5LicpOworCit2YXIg
dGVzdENvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwordGVzdENvbnRh
aW5lci5jb250ZW50RWRpdGFibGUgPSB0cnVlOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0
ZXN0Q29udGFpbmVyKTsKKworZnVuY3Rpb24gdGVzdFNpbmdsZVRvZ2dsZSh0b2dnbGVDb21tYW5k
LCBpbml0aWFsQ29udGVudHMsIGV4cGVjdGVkQ29udGVudHMpCit7CisgICAgdGVzdENvbnRhaW5l
ci5pbm5lckhUTUwgPSBpbml0aWFsQ29udGVudHM7CisgICAgaWYgKGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCd0ZXN0JykpCisgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxD
aGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdCcpKTsKKyAgICBlbHNlCisgICAg
ICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbih0ZXN0Q29udGFpbmVy
KTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnc3R5bGVXaXRoQ1NTJywgZmFsc2UsICdmYWxz
ZScpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKHRvZ2dsZUNvbW1hbmQsIGZhbHNlLCBudWxs
KTsKKyAgICBpZiAodGVzdENvbnRhaW5lci5pbm5lckhUTUwgPT09IGV4cGVjdGVkQ29udGVudHMp
IHsKKyAgICAgICAgdGVzdFBhc3NlZCh0b2dnbGVDb21tYW5kICsgIiBjb252ZXJ0ZWQgIiArIGlu
aXRpYWxDb250ZW50cyArICIgdG8gIiArIGV4cGVjdGVkQ29udGVudHMpOworICAgIH0gZWxzZSB7
CisgICAgICAgIHRlc3RGYWlsZWQodG9nZ2xlQ29tbWFuZCArICIgY29udmVydGVkICIgKyBpbml0
aWFsQ29udGVudHMgKyAiIHRvICIgKyB0ZXN0Q29udGFpbmVyLmlubmVySFRNTCArICIsIGV4cGVj
dGVkICIgKyBleHBlY3RlZENvbnRlbnRzKTsKKyAgICB9Cit9CisKKwordGVzdFNpbmdsZVRvZ2ds
ZSgiYm9sZCIsICc8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IDkwMDsiPiA8ZGl2PnRleHQ8L2Rp
dj4gPC9zcGFuPicsICcgPGRpdj50ZXh0PC9kaXY+ICcpOwordGVzdFNpbmdsZVRvZ2dsZSgiYm9s
ZCIsICc8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IDkwMDsiPjxkaXY+dGV4dDwvZGl2Pjwvc3Bh
bj4nLCAnPGRpdj50ZXh0PC9kaXY+Jyk7Cit0ZXN0U2luZ2xlVG9nZ2xlKCJib2xkIiwgJzxzcGFu
IHN0eWxlPSJmb250LXdlaWdodDogOTAwOyI+PGRpdiBpZD0idGVzdCI+aGVsbG88L2Rpdj48ZGl2
PndvcmxkPC9kaXY+PC9zcGFuPicsICc8ZGl2IGlkPSJ0ZXN0Ij5oZWxsbzwvZGl2PjxkaXYgc3R5
bGU9ImZvbnQtd2VpZ2h0OiA5MDA7ICI+d29ybGQ8L2Rpdj4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUo
ImJvbGQiLCAnPGRpdiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5oZWxsbzxkaXYgaWQ9InRl
c3QiPndvcmxkPC9kaXY+PC9kaXY+JywgJzxkaXY+PGI+aGVsbG88L2I+PGRpdiBpZD0idGVzdCI+
d29ybGQ8L2Rpdj48L2Rpdj4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUoImJvbGQiLCAnPHNwYW4gc3R5
bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+aGVsbG88c3BhbiBpZD0idGVzdCI+d29ybGQ8L2Rpdj48
L2Rpdj4nLCAnPGI+aGVsbG88L2I+PHNwYW4gaWQ9InRlc3QiPndvcmxkPC9zcGFuPicpOwordGVz
dFNpbmdsZVRvZ2dsZSgiYm9sZCIsICc8c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyBm
b250LXdlaWdodDogYm9sZDsiPmhlbGxvPHNwYW4gaWQ9InRlc3QiPndvcmxkPC9kaXY+PC9kaXY+
JywgJzxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7ICI+PGI+aGVsbG88L2I+PHNwYW4g
aWQ9InRlc3QiPndvcmxkPC9zcGFuPjwvc3Bhbj4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUoImJvbGQi
LCAnPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+PGRpdiBpZD0idGVzdCI+aGVsbG88
L2Rpdj48ZGl2IHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyI+PGRpdj53b3JsZDwvZGl2Pndl
YmtpdDwvZGl2PicsICc8ZGl2IGlkPSJ0ZXN0Ij5oZWxsbzwvZGl2PjxkaXY+d29ybGQ8L2Rpdj53
ZWJraXQnKTsKK3Rlc3RTaW5nbGVUb2dnbGUoIml0YWxpYyIsICc8c3BhbiBzdHlsZT0iZm9udC1z
dHlsZTogaXRhbGljOyI+PGRpdj5oZWxsbzwvZGl2Pjwvc3Bhbj4nLCAnPGRpdj5oZWxsbzwvZGl2
PicpOwordGVzdFNpbmdsZVRvZ2dsZSgiaXRhbGljIiwgJzxzcGFuIHN0eWxlPSJmb250LXN0eWxl
OiBpdGFsaWM7Ij48ZGl2IGlkPSJ0ZXN0Ij5oZWxsbzwvZGl2PjxzcGFuIHN0eWxlPSJmb250LXN0
eWxlOiBvYmxpcXVlOyI+d29ybGQ8L3NwYW4+JywgJzxkaXYgaWQ9InRlc3QiPmhlbGxvPC9kaXY+
PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IG9ibGlxdWU7ICI+d29ybGQ8L3NwYW4+Jyk7Cit0ZXN0
U2luZ2xlVG9nZ2xlKCJpdGFsaWMiLCAnPHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsg
Zm9udC13ZWlnaHQ6IGJvbGQ7Ij48ZGl2PmhlbGxvPC9kaXY+PC9zcGFuPicsICc8c3BhbiBzdHls
ZT0iZm9udC13ZWlnaHQ6IGJvbGQ7ICI+PGRpdj5oZWxsbzwvZGl2Pjwvc3Bhbj4nKTsKK3Rlc3RT
aW5nbGVUb2dnbGUoIml0YWxpYyIsICc8c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyB0
ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPjxkaXY+aGVsbG88L2Rpdj48L3NwYW4+Jywg
JzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsgIj48ZGl2PmhlbGxv
PC9kaXY+PC9zcGFuPicpOwordGVzdFNpbmdsZVRvZ2dsZSgiaXRhbGljIiwgJzxzcGFuIHN0eWxl
PSJmb250LXN0eWxlOiBpdGFsaWM7Ij5oZWxsbzxkaXYgaWQ9InRlc3QiPndvcmxkPC9kaXY+PGJs
b2NrcXVvdGU+d2Via2l0PC9ibG9ja3F1b3RlPjwvc3Bhbj4nLCAnPGk+aGVsbG88L2k+PGRpdiBp
ZD0idGVzdCI+d29ybGQ8L2Rpdj48YmxvY2txdW90ZSBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGlj
OyAiPndlYmtpdDwvYmxvY2txdW90ZT4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUoIml0YWxpYyIsICc8
c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+aGVsbG8gPHNwYW4gaWQ9InRlc3QiPndv
cmxkPC9zcGFuPiB3ZWJraXQ8L3NwYW4+JywgJzxpPmhlbGxvIDwvaT48c3BhbiBpZD0idGVzdCI+
d29ybGQ8L3NwYW4+PGk+IHdlYmtpdDwvaT4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUoInVuZGVybGlu
ZSIsICc8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij48ZGl2IGlkPSJ0
ZXN0Ij5oZWxsbzwvZGl2PndvcmxkPC9zcGFuPicsICc8ZGl2IGlkPSJ0ZXN0Ij5oZWxsbzwvZGl2
Pjx1PndvcmxkPC91PicpOwordGVzdFNpbmdsZVRvZ2dsZSgidW5kZXJsaW5lIiwgJzxzcGFuIHN0
eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPjxkaXYgaWQ9InRlc3QiPmhlbGxvPC9k
aXY+PGJsb2NrcXVvdGU+d29ybGQ8YnI+d2Via2l0PC9ibG9ja3F1b3RlPjwvc3Bhbj4nLCAnPGRp
diBpZD0idGVzdCI+aGVsbG88L2Rpdj48YmxvY2txdW90ZSBzdHlsZT0idGV4dC1kZWNvcmF0aW9u
OiB1bmRlcmxpbmU7ICI+d29ybGQ8YnI+d2Via2l0PC9ibG9ja3F1b3RlPicpOwordGVzdFNpbmds
ZVRvZ2dsZSgidW5kZXJsaW5lIiwgJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVy
bGluZTsiPmhlbGxvPGRpdiBpZD0idGVzdCI+d29ybGQ8L2Rpdj53ZWJraXQ8L3U+JywgJzx1Pmhl
bGxvPC91PjxkaXYgaWQ9InRlc3QiPndvcmxkPC9kaXY+PHU+d2Via2l0PC91PicpOwordGVzdFNp
bmdsZVRvZ2dsZSgidW5kZXJsaW5lIiwKKyAgICAnPGRpdiBzdHlsZT0idGV4dC1kZWNvcmF0aW9u
OiB1bmRlcmxpbmU7Ij48ZGl2PmhlbGxvPC9zcGFuPjwvZGl2PjxkaXYgaWQ9InRlc3QiPndlYmtp
dDwvZGl2PjxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5yb2Nrczwvc3Bhbj4nLAor
ICAgICc8ZGl2PjxkaXYgc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyAiPmhlbGxv
PC9zcGFuPjwvZGl2PjxkaXYgaWQ9InRlc3QiPndlYmtpdDwvZGl2Pjx1PjxzcGFuIHN0eWxlPSJm
b250LXN0eWxlOiBpdGFsaWM7Ij5yb2Nrczwvc3Bhbj48L3U+PC9kaXY+Jyk7Cit0ZXN0U2luZ2xl
VG9nZ2xlKCJ1bmRlcmxpbmUiLCAnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJs
aW5lOyI+PGRpdiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5oZWxsbzwv
ZGl2PjxkaXYgaWQ9InRlc3QiPndvcmxkPC9kaXY+PC9zcGFuPicsICc8ZGl2IHN0eWxlPSJ0ZXh0
LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaCB1bmRlcmxpbmU7ICI+aGVsbG88L2Rpdj48ZGl2IGlk
PSJ0ZXN0Ij53b3JsZDwvZGl2PicpOwordGVzdFNpbmdsZVRvZ2dsZSgic3RyaWtlVGhyb3VnaCIs
ICc8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij48ZGl2IGlkPSJ0
ZXN0Ij5oZWxsbzwvZGl2PjxkaXYgc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+
d29ybGQ8L2Rpdj48L3NwYW4+JywgJzxkaXYgaWQ9InRlc3QiPmhlbGxvPC9kaXY+PGRpdiBzdHls
ZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgbGluZS10aHJvdWdoOyAiPndvcmxkPC9kaXY+
Jyk7CisKK2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGVzdENvbnRhaW5lcik7CisKK3ZhciBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwo=
</data>
<flag name="review"
          id="52667"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>