<?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>52268</bug_id>
          
          <creation_ts>2011-01-11 18:08:23 -0800</creation_ts>
          <short_desc>Setting outerText should convert CR/LF to &lt;br&gt;</short_desc>
          <delta_ts>2011-01-13 14:50:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Emil A Eklund">eae</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>332839</commentid>
    <comment_count>0</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-01-11 18:08:23 -0800</bug_when>
    <thetext>When setting Element.outerText line breaks in the text should be converted to &lt;br&gt; elements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332840</commentid>
    <comment_count>1</comment_count>
      <attachid>78634</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-01-11 18:09:52 -0800</bug_when>
    <thetext>Created attachment 78634
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332841</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-11 18:13:48 -0800</bug_when>
    <thetext>Attachment 78634 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1
Source/WebCore/html/HTMLElement.cpp:379:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebCore/html/HTMLElement.cpp:391:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/html/HTMLElement.cpp:393:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/html/HTMLElement.cpp:396:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/html/HTMLElement.cpp:493:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/html/HTMLElement.cpp:506:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 6 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332887</commentid>
    <comment_count>3</comment_count>
      <attachid>78645</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-01-11 20:22:35 -0800</bug_when>
    <thetext>Created attachment 78645
Patch

Fixed style violations in moved code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332926</commentid>
    <comment_count>4</comment_count>
      <attachid>78645</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-11 23:10:07 -0800</bug_when>
    <thetext>Comment on attachment 78645
Patch

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

&gt; Source/WebCore/html/HTMLElement.cpp:381
&gt; +    ec = 0;

I think this is generally the callers responsibility in WebCore.

&gt; Source/WebCore/html/HTMLElement.cpp:390
&gt; +                fragment-&gt;appendChild(Text::create(document(), text.substring(lineStart, i - lineStart)), ec);

If this can run arbitrary javascript, &quot;this&quot; could get deleted, no?  Do we need to suspend mutation events during this?

&gt; Source/WebCore/html/HTMLElement.cpp:399
&gt; +            lineStart = i + 1;

I find it difficult to read this loop and understand what its doing.  I can&apos;t tell if that&apos;s a variable naming problem, the way the blocks are split up, or just my own thick-headedness at this hour.

&gt; Source/WebCore/html/HTMLElement.cpp:498
&gt; +        textPrev-&gt;appendData(textNode-&gt;data(), ec);

Does this cause JS to run?  If so, our pointers could go invalid.

&gt; Source/WebCore/html/HTMLElement.cpp:511
&gt; +        RefPtr&lt;Text&gt; textNext = static_cast&lt;Text*&gt;(next.get());
&gt; +        RefPtr&lt;Text&gt; textNode = static_cast&lt;Text*&gt;(node);
&gt; +        textNode-&gt;appendData(textNext-&gt;data(), ec);

Seems we just did this above.  Maybe there is code to share here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333316</commentid>
    <comment_count>5</comment_count>
      <attachid>78735</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-01-12 14:52:29 -0800</bug_when>
    <thetext>Created attachment 78735
Patch

Thanks for the review, see comments inline.


&gt; &gt; Source/WebCore/html/HTMLElement.cpp:381
&gt; &gt; +    ec = 0;
&gt; I think this is generally the callers responsibility in WebCore.

Thanks, fixed.

&gt; &gt; Source/WebCore/html/HTMLElement.cpp:390
&gt; &gt; +                fragment-&gt;appendChild(Text::create(document(), text.substring(lineStart, i - lineStart)), ec);
&gt;
&gt; If this can run arbitrary javascript, &quot;this&quot; could get deleted, no?  Do we need to suspend mutation events during this?

As the fragment isn&apos;t attached to the document yet I don&apos;t see how one would listen to that mutation event. The text-node-append-data-remove-crash.html tests this.

&gt; &gt; Source/WebCore/html/HTMLElement.cpp:399
&gt; &gt; +            lineStart = i + 1;
&gt; I find it difficult to read this loop and understand what its doing.  I can&apos;t tell if that&apos;s a variable
&gt; naming problem, the way the blocks are split up, or just my own thick-headedness at this hour.

I agree, it&apos;s not the easiest code to read. I moved it out of the setInnerText method and didn&apos;t want to make too many changes to it.

&gt; &gt; Source/WebCore/html/HTMLElement.cpp:498
&gt; &gt; +        textPrev-&gt;appendData(textNode-&gt;data(), ec);
&gt;
&gt; Does this cause JS to run?  If so, our pointers could go invalid.

We hold RefPtrs for both nodes so it should be safe. This code has been replaced with a call to mergeWithNextTextNode in the latest patch.

&gt; &gt; Source/WebCore/html/HTMLElement.cpp:511
&gt; &gt; +        RefPtr&lt;Text&gt; textNext = static_cast&lt;Text*&gt;(next.get());
&gt; &gt; +        RefPtr&lt;Text&gt; textNode = static_cast&lt;Text*&gt;(node);
&gt; &gt; +        textNode-&gt;appendData(textNext-&gt;data(), ec);
&gt; Seems we just did this above.  Maybe there is code to share here?

Good idea, broke out the merging logic into a helper funciton.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333317</commentid>
    <comment_count>6</comment_count>
      <attachid>78736</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-01-12 14:53:41 -0800</bug_when>
    <thetext>Created attachment 78736
Patch

Removed unnecessary import.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333332</commentid>
    <comment_count>7</comment_count>
      <attachid>78736</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-12 15:06:40 -0800</bug_when>
    <thetext>Comment on attachment 78736
Patch

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

I think the biggest trouble with this patch is that you&apos;re inheriting some less-than-perfectly designed code, which has historically been poorly tested.  It&apos;s difficult for me to draw the line between your current definite improvement of that code, and the ideal for said code.  This current iteration is better than your last one, and *certainly* way beter than what we had before.  If I were writing this patch, I&apos;d want to go one more round.  But I&apos;m also open to the idea of landing this and iterating further in a separate patch or at a later time.

&gt; Source/WebCore/html/HTMLElement.cpp:387
&gt; +        if (c == &apos;\n&apos; || c == &apos;\r&apos;) {

I feel like this should be an early contineue, but that gets a bit ugly with the need for prev = c.

&gt; Source/WebCore/html/HTMLElement.cpp:403
&gt; +    if (length &gt; lineStart)
&gt; +        fragment-&gt;appendChild(Text::create(document(), text.substring(lineStart, length - lineStart)), ec);

This is repeated from above, but missing the ec check.  Is that intentional?  how do we exercise this case?

&gt; Source/WebCore/html/HTMLElement.cpp:460


Should just early return instead of making a long if block.

&gt; Source/WebCore/html/HTMLElement.cpp:498
&gt; +    RefPtr&lt;Node&gt; prev = previousSibling();
&gt; +    RefPtr&lt;Node&gt; next = nextSibling();
&gt; +    if (text.isEmpty() &amp;&amp; (!prev || !prev-&gt;isTextNode()) &amp;&amp; (!next || !next-&gt;isTextNode())) {
&gt; +        parent-&gt;replaceChild(Text::create(document(), &quot;&quot;), this, ec);
&gt; +        return;
&gt; +    }

I&apos;m not sure I understand this quirk or why it needs to be a separate if.  I assume it&apos;s tested?

&gt; Source/WebCore/html/HTMLElement.cpp:506
&gt; +    if (text.contains(&apos;\r&apos;) || text.contains(&apos;\n&apos;))
&gt; +        newChild = textToFragment(text, ec);
&gt; +    else
&gt; +        newChild = Text::create(document(), text);

I would just have put this if inside textToFragment, making ti just reutrn a Text node if there are no \n, \r.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333396</commentid>
    <comment_count>8</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-01-12 16:15:38 -0800</bug_when>
    <thetext>Thanks for the feedback Eric, I&apos;ll do another round and try to clean it up some more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333478</commentid>
    <comment_count>9</comment_count>
      <attachid>78769</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-01-12 18:26:35 -0800</bug_when>
    <thetext>Created attachment 78769
Patch

Rewrote the textToFragment method and made all the changes you suggested except for your last comment about making textToFragment return a text node for strings without a line break. The textToFragment method is used by setInnerText which requires a fragment. I didn&apos;t want to make this patch any larger by changing that but I&apos;d be happy to make that change in a later patch if you think it&apos;s worthwhile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333497</commentid>
    <comment_count>10</comment_count>
      <attachid>78769</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-12 18:47:57 -0800</bug_when>
    <thetext>Comment on attachment 78769
Patch

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333499</commentid>
    <comment_count>11</comment_count>
      <attachid>78769</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-12 18:49:27 -0800</bug_when>
    <thetext>Comment on attachment 78769
Patch

Rejecting attachment 78769 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-4&apos;, &apos;apply-...&quot; exit_code: 2

Last 500 characters of output:
outTests/fast/dom/set-outer-text.html
patching file LayoutTests/fast/dom/text-node-append-data-remove-crash-expected.txt
(Stripping trailing CRs from patch.)
patching file LayoutTests/fast/dom/text-node-append-data-remove-crash.html
Hunk #1 FAILED at 13.
1 out of 1 hunk FAILED -- saving rejects to file LayoutTests/fast/dom/text-node-append-data-remove-crash.html.rej

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Eric Seidel&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/7592004</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333837</commentid>
    <comment_count>12</comment_count>
      <attachid>78835</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-01-13 11:34:14 -0800</bug_when>
    <thetext>Created attachment 78835
Patch

Converted line endings for text-node-append-data-remove-crash.html to unix style in order to make the submit queue happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333869</commentid>
    <comment_count>13</comment_count>
      <attachid>78835</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-13 12:22:06 -0800</bug_when>
    <thetext>Comment on attachment 78835
Patch

Rejecting attachment 78835 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-3&apos;, &apos;build&apos;...&quot; exit_code: 2

Last 500 characters of output:
DE_VERSION_MINOR 0320
    setenv YACC /Developer/usr/bin/yacc
    /bin/sh -c /mnt/git/webkit-commit-queue/WebKitBuild/WebCore.build/Debug/WebCore.build/Script-5DF50887116F3077005202AB.sh

** BUILD FAILED **


The following build commands failed:
WebCore:
	CompileC /mnt/git/webkit-commit-queue/WebKitBuild/WebCore.build/Debug/WebCore.build/Objects-normal/x86_64/HTMLElement.o /mnt/git/webkit-commit-queue/Source/WebCore/html/HTMLElement.cpp normal x86_64 c++ com.apple.compilers.gcc.4_2
(1 failure)


Full output: http://queues.webkit.org/results/7503017</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333915</commentid>
    <comment_count>14</comment_count>
      <attachid>78851</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-01-13 13:47:24 -0800</bug_when>
    <thetext>Created attachment 78851
Patch

Made mergeWithNextTextNode function static to make XCode happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333917</commentid>
    <comment_count>15</comment_count>
      <attachid>78851</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-13 13:52:34 -0800</bug_when>
    <thetext>Comment on attachment 78851
Patch

Let&apos;s try again! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333918</commentid>
    <comment_count>16</comment_count>
      <attachid>78851</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-13 13:53:14 -0800</bug_when>
    <thetext>Comment on attachment 78851
Patch

Yay!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333949</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-13 14:48:24 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 78851:

http/tests/xmlhttprequest/cross-origin-authorization.html bug 52398 (author: ap@webkit.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333951</commentid>
    <comment_count>18</comment_count>
      <attachid>78851</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-13 14:49:58 -0800</bug_when>
    <thetext>Comment on attachment 78851
Patch

Clearing flags on attachment: 78851

Committed r75738: &lt;http://trac.webkit.org/changeset/75738&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333952</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-13 14:50:05 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78634</attachid>
            <date>2011-01-11 18:09:52 -0800</date>
            <delta_ts>2011-01-11 20:22:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>outertext.patch</filename>
            <type>text/plain</type>
            <size>9978</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgIChyZXZpc2lvbiA3NTU3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyAgKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxMS0wMS0xMSAgRW1pbCBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFNldHRpbmcgb3V0ZXJUZXh0IHNob3VsZCBjb252ZXJ0IENSL0xG
IHRvIDxicj4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTUyMjY4CisKKyAgICAgICAgTWFrZSBzZXQgb3V0ZXJUZXh0IHN1cHBvcnQgbGluZSBicmVha3Mg
KHNoYXJpbmcgdGhlIHRleHQgdG8gZnJhZ21lbnQgY29kZQorICAgICAgICB3aXRoIHNldElubmVy
VGV4dCkgYW5kIGhhbmRsZSBlbXB0eSB0ZXh0IG5vZGVzIHRoZSBzYW1lIHdheSBJRSBkb2VzLgor
CisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL3NldC1vdXRlci10ZXh0Lmh0bWwKKworICAgICAgICAq
IGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OnRl
eHRUb0ZyYWdtZW50KTogU2hhcmVkIGJldHdlZW4gc2V0SW5uZXJUZXh0IGFuZCBzZXRPdXRlclRl
eHQKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpzZXRJbm5lclRleHQpOiBTcGxpdCBv
dXQgdGV4dCBwYXJzaW5nIGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6c2V0
T3V0ZXJUZXh0KTogQWRkZWQgc3VwcG9ydCBmb3IgbGluZSBicmVha3MuCisgICAgICAgICogaHRt
bC9IVE1MRWxlbWVudC5oOgorCiAyMDExLTAxLTExICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9n
YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAgKHJldmlzaW9uIDc1NTM1KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAgKHdvcmtpbmcgY29weSkKQEAgLTM3Niw2ICsz
NzYsMzUgQEAgdm9pZCBIVE1MRWxlbWVudDo6c2V0T3V0ZXJIVE1MKGNvbnN0IFN0cgogICAgIH0K
IH0KIAorUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBIVE1MRWxlbWVudDo6dGV4dFRvRnJh
Z21lbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgeworICAgIGVjID0g
MDsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBEb2N1bWVudEZyYWdt
ZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CisgICAgaW50IGxpbmVTdGFydCA9IDA7CisgICAgVUNo
YXIgcHJldiA9IDA7CisgICAgaW50IGxlbmd0aCA9IHRleHQubGVuZ3RoKCk7CisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBVQ2hhciBjID0gdGV4dFtpXTsK
KyAgICAgICAgaWYgKGMgPT0gJ1xuJyB8fCBjID09ICdccicpIHsKKyAgICAgICAgICAgIGlmIChp
ID4gbGluZVN0YXJ0KSB7CisgICAgICAgICAgICAgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKFRl
eHQ6OmNyZWF0ZShkb2N1bWVudCgpLCB0ZXh0LnN1YnN0cmluZyhsaW5lU3RhcnQsIGkgLSBsaW5l
U3RhcnQpKSwgZWMpOworICAgICAgICAgICAgICAgIGlmIChlYykKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIShjID09ICdc
bicgJiYgaSAhPSAwICYmIHByZXYgPT0gJ1xyJykpIHsKKyAgICAgICAgICAgICAgICBmcmFnbWVu
dC0+YXBwZW5kQ2hpbGQoSFRNTEJSRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpLCBlYyk7Cisg
ICAgICAgICAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpbmVTdGFydCA9IGkgKyAxOworICAgICAgICB9
CisgICAgICAgIHByZXYgPSBjOworICAgIH0KKyAgICBpZiAobGVuZ3RoID4gbGluZVN0YXJ0KQor
ICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIHRl
eHQuc3Vic3RyaW5nKGxpbmVTdGFydCwgbGVuZ3RoIC0gbGluZVN0YXJ0KSksIGVjKTsKKworICAg
IHJldHVybiBmcmFnbWVudDsKK30KKwogdm9pZCBIVE1MRWxlbWVudDo6c2V0SW5uZXJUZXh0KGNv
bnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKGllRm9yYmlk
c0luc2VydEhUTUwoKSkgewpAQCAtNDE5LDMwICs0NDgsOSBAQCB2b2lkIEhUTUxFbGVtZW50Ojpz
ZXRJbm5lclRleHQoY29uc3QgU3RyCiAKICAgICAvLyBBZGQgdGV4dCBub2RlcyBhbmQgPGJyPiBl
bGVtZW50cy4KICAgICBlYyA9IDA7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdt
ZW50ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwotICAgIGludCBsaW5l
U3RhcnQgPSAwOwotICAgIFVDaGFyIHByZXYgPSAwOwotICAgIGludCBsZW5ndGggPSB0ZXh0Lmxl
bmd0aCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
VUNoYXIgYyA9IHRleHRbaV07Ci0gICAgICAgIGlmIChjID09ICdcbicgfHwgYyA9PSAnXHInKSB7
Ci0gICAgICAgICAgICBpZiAoaSA+IGxpbmVTdGFydCkgewotICAgICAgICAgICAgICAgIGZyYWdt
ZW50LT5hcHBlbmRDaGlsZChUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgdGV4dC5zdWJzdHJpbmco
bGluZVN0YXJ0LCBpIC0gbGluZVN0YXJ0KSksIGVjKTsKLSAgICAgICAgICAgICAgICBpZiAoZWMp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmICghKGMgPT0gJ1xuJyAmJiBpICE9IDAgJiYgcHJldiA9PSAnXHInKSkgewotICAgICAgICAg
ICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChIVE1MQlJFbGVtZW50OjpjcmVhdGUoZG9jdW1l
bnQoKSksIGVjKTsKLSAgICAgICAgICAgICAgICBpZiAoZWMpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpbmVTdGFydCA9IGkgKyAxOwot
ICAgICAgICB9Ci0gICAgICAgIHByZXYgPSBjOwotICAgIH0KLSAgICBpZiAobGVuZ3RoID4gbGlu
ZVN0YXJ0KQotICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3Vt
ZW50KCksIHRleHQuc3Vic3RyaW5nKGxpbmVTdGFydCwgbGVuZ3RoIC0gbGluZVN0YXJ0KSksIGVj
KTsKLSAgICByZXBsYWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQodGhpcywgZnJhZ21lbnQucmVsZWFz
ZSgpLCBlYyk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gdGV4dFRv
RnJhZ21lbnQodGV4dCwgZWMpOworICAgIGlmICghZWMpCisgICAgICAgIHJlcGxhY2VDaGlsZHJl
bldpdGhGcmFnbWVudCh0aGlzLCBmcmFnbWVudC5yZWxlYXNlKCksIGVjKTsKIH0KIAogdm9pZCBI
VE1MRWxlbWVudDo6c2V0T3V0ZXJUZXh0KGNvbnN0IFN0cmluZyAmdGV4dCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCkBAIC00NjUsMzMgKzQ3Myw0MSBAQCB2b2lkIEhUTUxFbGVtZW50OjpzZXRPdXRlclRl
eHQoY29uc3QgU3RyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogVGhp
cyBjcmVhdGVzIGEgbmV3IHRleHQgbm9kZSBldmVuIHdoZW4gdGhlIHRleHQgaXMgZW1wdHkuCi0g
ICAgLy8gRklYTUU6IFRoaXMgY3JlYXRlcyBhIHNpbmdsZSB0ZXh0IG5vZGUgZXZlbiB3aGVuIHRo
ZSB0ZXh0IGhhcyBDUiBhbmQgTEYKLSAgICAvLyBjaGFyYWN0ZXJzIGluIGl0LiBJbnN0ZWFkIGl0
IHNob3VsZCBjcmVhdGUgPGJyPiBlbGVtZW50cy4KLSAgICBSZWZQdHI8VGV4dD4gdCA9IFRleHQ6
OmNyZWF0ZShkb2N1bWVudCgpLCB0ZXh0KTsKKyAgICAvLyBQcmVzZXJ2ZSBlbXB0eSB0ZXh0IG5v
ZGUgaWYgb3V0ZXJUZXh0IGlzIHNldCB0byBhbiBlbXB0eSBzdHJpbmcgYW5kIG5laXRoZXIKKyAg
ICAvLyB0aGUgcHJldmlvdXMgbm9yIG5leHQgc2libGluZyBpcyBhIHRleHQgbm9kZSB0byBiZSBj
b21wYXRpYmxlIHdpdGggSUUuCisgICAgUmVmUHRyPE5vZGU+IHByZXYgPSBwcmV2aW91c1NpYmxp
bmcoKTsKKyAgICBSZWZQdHI8Tm9kZT4gbmV4dCA9IG5leHRTaWJsaW5nKCk7CisgICAgaWYgKHRl
eHQuaXNFbXB0eSgpICYmICghcHJldiB8fCAhcHJldi0+aXNUZXh0Tm9kZSgpKSAmJiAoIW5leHQg
fHwgIW5leHQtPmlzVGV4dE5vZGUoKSkpIHsKKyAgICAgICAgcGFyZW50LT5yZXBsYWNlQ2hpbGQo
VGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksICIiKSwgdGhpcywgZWMpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gQWRkIHRleHQgbm9kZXMgYW5kIDxicj4gZWxlbWVudHMuCiAgICAg
ZWMgPSAwOwotICAgIHBhcmVudC0+cmVwbGFjZUNoaWxkKHQsIHRoaXMsIGVjKTsKKyAgICBSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSB0ZXh0VG9GcmFnbWVudCh0ZXh0LCBlYyk7
CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47CisgICAgcGFyZW50LT5yZXBsYWNlQ2hpbGQo
ZnJhZ21lbnQucmVsZWFzZSgpLCB0aGlzLCBlYyk7CiAKLSAgICAvLyBJcyBwcmV2aW91cyBub2Rl
IGEgdGV4dCBub2RlPyBJZiBzbywgbWVyZ2UgaW50byBpdC4KLSAgICBOb2RlKiBwcmV2ID0gdC0+
cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgaWYgKHByZXYgJiYgcHJldi0+aXNUZXh0Tm9kZSgpKSB7
Ci0gICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0UHJldiA9IHN0YXRpY19jYXN0PFRleHQqPihwcmV2
KTsKLSAgICAgICAgdGV4dFByZXYtPmFwcGVuZERhdGEodC0+ZGF0YSgpLCBlYyk7CisgICAgLy8g
TWVyZ2Ugd2l0aCBwcmV2aW91cyB0ZXh0IG5vZGUuCisgICAgTm9kZSogbm9kZSA9IHByZXYgPyBw
cmV2LT5uZXh0U2libGluZygpIDogTlVMTDsKKyAgICBpZiAobm9kZSAmJiBub2RlLT5pc1RleHRO
b2RlKCkgJiYgcHJldi0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0
UHJldiA9IHN0YXRpY19jYXN0PFRleHQqPihwcmV2LmdldCgpKTsKKyAgICAgICAgUmVmUHRyPFRl
eHQ+IHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUpOworICAgICAgICB0ZXh0UHJl
di0+YXBwZW5kRGF0YSh0ZXh0Tm9kZS0+ZGF0YSgpLCBlYyk7CiAgICAgICAgIGlmIChlYykKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdC0+cmVtb3ZlKGVjKTsKKyAgICAgICAgdGV4dE5v
ZGUtPnJlbW92ZShlYyk7CiAgICAgICAgIGlmIChlYykKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgdCA9IHRleHRQcmV2OwogICAgIH0KIAotICAgIC8vIElzIG5leHQgbm9kZSBhIHRleHQg
bm9kZT8gSWYgc28sIG1lcmdlIGl0IGluLgotICAgIE5vZGUqIG5leHQgPSB0LT5uZXh0U2libGlu
ZygpOwotICAgIGlmIChuZXh0ICYmIG5leHQtPmlzVGV4dE5vZGUoKSkgewotICAgICAgICBSZWZQ
dHI8VGV4dD4gdGV4dE5leHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obmV4dCk7Ci0gICAgICAgIHQt
PmFwcGVuZERhdGEodGV4dE5leHQtPmRhdGEoKSwgZWMpOworICAgIC8vIE1lcmdlIHdpdGggbmV4
dCB0ZXh0IG5vZGUuCisgICAgbm9kZSA9IG5leHQgPyBuZXh0LT5wcmV2aW91c1NpYmxpbmcoKSA6
IE5VTEw7CisgICAgaWYgKG5vZGUgJiYgbm9kZS0+aXNUZXh0Tm9kZSgpICYmIG5leHQtPmlzVGV4
dE5vZGUoKSkgeworICAgICAgICBSZWZQdHI8VGV4dD4gdGV4dE5leHQgPSBzdGF0aWNfY2FzdDxU
ZXh0Kj4obmV4dC5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0Tm9kZSA9IHN0YXRp
Y19jYXN0PFRleHQqPihub2RlKTsKKyAgICAgICAgdGV4dE5vZGUtPmFwcGVuZERhdGEodGV4dE5l
eHQtPmRhdGEoKSwgZWMpOwogICAgICAgICBpZiAoZWMpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIHRleHROZXh0LT5yZW1vdmUoZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1l
bnQuaCAocmV2aXNpb24gNzU1MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50
LmggKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgSFRNTEZvcm1FbGVtZW50KiB2aXJ0dWFsRm9ybSgpIGNvbnN0OwogCiAgICAgTm9kZSogaW5z
ZXJ0QWRqYWNlbnQoY29uc3QgU3RyaW5nJiB3aGVyZSwgTm9kZSogbmV3Q2hpbGQsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHRleHRUb0ZyYWdtZW50
KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKIH07CiAKIGlubGluZSBIVE1MRWxlbWVu
dDo6SFRNTEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRv
Y3VtZW50KQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZyAocmV2aXNpb24gNzU1NzkpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0wMS0xMSAgRW1pbCBFa2x1
bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFNldHRpbmcgb3V0ZXJUZXh0IHNob3VsZCBjb252ZXJ0IENSL0xGIHRv
IDxicj4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUy
MjY4CisgICAgICAgIAorICAgICAgICBBZGQgdGVzdCBmb3Igc2V0dGluZyBFbGVtZW50Lm91dGVy
VGV4dC4KKworICAgICAgICAqIGZhc3QvZG9tL3NldC1vdXRlci10ZXh0LWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2V0LW91dGVyLXRleHQuaHRtbDogQWRkZWQuCisK
IDIwMTEtMDEtMTEgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkLCB0ZXN0IGV4cGVjdGF0aW9ucyB1cGRhdGUuCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9zZXQtb3V0ZXItdGV4dC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9kb20vc2V0LW91dGVyLXRleHQtZXhwZWN0ZWQudHh0ICAocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL3NldC1vdXRlci10ZXh0LWV4cGVjdGVkLnR4dCAg
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOCBAQAorUmVwbGFjZWQgbm9kZSB1c2luZyBvdXRlclRl
eHQuCityZW1vdmluZyBub2RlIHVzaW5nIG91dGVyVGV4dC4KK1Rlc3RpbmcgYWRkaW5nIGJyCit1
c2luZyBvdXRlclRleHQuCitQQVNTOiByZXBsYWNlCitQQVNTOiByZW1vdmUKK1BBU1M6IGVtcHR5
IHRleHQgbm9kZQorUEFTUzogbGluZSBicmVhawpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20v
c2V0LW91dGVyLXRleHQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9z
ZXQtb3V0ZXItdGV4dC5odG1sICAocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9t
L3NldC1vdXRlci10ZXh0Lmh0bWwgIChyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzIEBACis8aHRt
bD4KKzxoZWFkPgorICAgIDxzdHlsZT4KKyAgICAgICAgcHJlIHsgbWFyZ2luOiAwOyB9CisgICAg
PC9zdHlsZT4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2R1bXAtYXMtbWFya3Vw
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgIE1hcmt1cC5ub0F1dG9EdW1wKCk7Cisg
ICAgCisgICAgZnVuY3Rpb24gYXNzZXJ0TWFya3VwKG5hbWUsIGVsZW1lbnQsIGV4cGVjdGVkKSB7
CisgICAgICB2YXIgbWFya3VwID0gTWFya3VwLmdldChlbGVtZW50KTsKKyAgICAgIGlmIChtYXJr
dXAgPT0gZXhwZWN0ZWQpCisgICAgICAgICAgbG9nKCdQQVNTOiAnICsgbmFtZSk7CisgICAgICBl
bHNlCisgICAgICAgICAgbG9nKCdGQUlMOiAnICsgbmFtZSAgKyAnXG5XYXM6XG4nICsgbWFya3Vw
ICsgJ1xuRXhwZWN0ZWQ6XG4nICsgZXhwZWN0ZWQpOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlv
biBsb2codGV4dCkgeworICAgICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncHJl
Jyk7CisgICAgICBlbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7
CisgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0JykuYXBwZW5kQ2hpbGQoZWwp
OworICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpCisKKyAgICAgICAgdmFyIGl0ZW1zID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJ2xpJyk7CisKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rl
c3RSZXBsYWNlJykub3V0ZXJUZXh0ID0gJ1JlcGxhY2VkJzsKKyAgICAgICAgYXNzZXJ0TWFya3Vw
KCdyZXBsYWNlJywgaXRlbXNbMF0sICd8ICJSZXBsYWNlZCBub2RlIHVzaW5nIG91dGVyVGV4dC4i
Jyk7CisgICAgICAgIAorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdFJlbW92
ZScpLm91dGVyVGV4dCA9ICcnOworICAgICAgICBhc3NlcnRNYXJrdXAoJ3JlbW92ZScsIGl0ZW1z
WzFdLCAnfCAiIHJlbW92aW5nIG5vZGUgdXNpbmcgb3V0ZXJUZXh0LiInKTsKKworICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdEVtcHR5Jykub3V0ZXJUZXh0ID0gJyc7CisgICAg
ICAgIGFzc2VydE1hcmt1cCgnZW1wdHkgdGV4dCBub2RlJywgaXRlbXNbMl0sICd8ICIiJyk7Cisg
ICAgICAgIAorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdEFkZEJyJykub3V0
ZXJUZXh0ID0gJ2JyXG4nOworICAgICAgICBhc3NlcnRNYXJrdXAoJ2xpbmUgYnJlYWsnLCBpdGVt
c1szXSwgJ3wgIlRlc3RpbmcgYWRkaW5nIGJyIlxufCA8YnI+XG58ICIgdXNpbmcgb3V0ZXJUZXh0
LiInKTsKKyAgICB9CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRl
c3QoKSI+CisgICAgPHVsPgorICAgICAgPGxpPjxzcGFuIGlkPSJ0ZXN0UmVwbGFjZSI+VGVzdGlu
ZyByZXBsYWNpbmc8L3NwYW4+IG5vZGUgdXNpbmcgb3V0ZXJUZXh0LjwvbGk+CisgICAgICA8bGk+
PHNwYW4gaWQ9InRlc3RSZW1vdmUiPlRlc3Rpbmc8L3NwYW4+IHJlbW92aW5nIG5vZGUgdXNpbmcg
b3V0ZXJUZXh0LjwvbGk+CisgICAgICA8bGk+PHNwYW4gaWQ9InRlc3RFbXB0eSI+VGVzdCByZW1v
dmluZyBlbnRpcmUgbm9kZTwvc3Bhbj48L2xpPgorICAgICAgPGxpPlRlc3RpbmcgYWRkaW5nIDxz
cGFuIGlkPSJ0ZXN0QWRkQnIiPmxpbmUgYnJlYWs8L3NwYW4+IHVzaW5nIG91dGVyVGV4dC48L2xp
PgorICAgIDwvdWw+CisgICAgPGRpdiBpZD0icmVzdWx0Ij48L2Rpdj4KKzwvYm9keT4KKzwvaHRt
bD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78645</attachid>
            <date>2011-01-11 20:22:35 -0800</date>
            <delta_ts>2011-01-12 14:31:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>outertext.patch</filename>
            <type>text/plain</type>
            <size>9956</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NTc5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDEtMTEgIEVtaWwgRWts
dW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBTZXR0aW5nIG91dGVyVGV4dCBzaG91bGQgY29udmVydCBDUi9MRiB0
byA8YnI+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MjI2OAorCisgICAgICAgIE1ha2Ugc2V0IG91dGVyVGV4dCBzdXBwb3J0IGxpbmUgYnJlYWtzIChz
aGFyaW5nIHRoZSB0ZXh0IHRvIGZyYWdtZW50IGNvZGUKKyAgICAgICAgd2l0aCBzZXRJbm5lclRl
eHQpIGFuZCBoYW5kbGUgZW1wdHkgdGV4dCBub2RlcyB0aGUgc2FtZSB3YXkgSUUgZG9lcy4KKwor
ICAgICAgICBUZXN0OiBmYXN0L2RvbS9zZXQtb3V0ZXItdGV4dC5odG1sCisKKyAgICAgICAgKiBo
dG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50Ojp0ZXh0
VG9GcmFnbWVudCk6IFNoYXJlZCBiZXR3ZWVuIHNldElubmVyVGV4dCBhbmQgc2V0T3V0ZXJUZXh0
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6c2V0SW5uZXJUZXh0KTogU3BsaXQgb3V0
IHRleHQgcGFyc2luZyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OnNldE91
dGVyVGV4dCk6IEFkZGVkIHN1cHBvcnQgZm9yIGxpbmUgYnJlYWtzLgorICAgICAgICAqIGh0bWwv
SFRNTEVsZW1lbnQuaDoKKwogMjAxMS0wMS0xMSAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FA
d2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3NTUzNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzYsNiArMzc2
LDM2IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OnNldE91dGVySFRNTChjb25zdCBTdHIKICAgICB9CiB9
CiAKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gSFRNTEVsZW1lbnQ6OnRleHRUb0ZyYWdt
ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAw
OworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21l
bnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKKyAgICBpbnQgbGluZVN0YXJ0ID0gMDsKKyAgICBVQ2hh
ciBwcmV2ID0gMDsKKyAgICBpbnQgbGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIFVDaGFyIGMgPSB0ZXh0W2ldOwor
ICAgICAgICBpZiAoYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJykgeworICAgICAgICAgICAgaWYgKGkg
PiBsaW5lU3RhcnQpIHsKKyAgICAgICAgICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoVGV4
dDo6Y3JlYXRlKGRvY3VtZW50KCksIHRleHQuc3Vic3RyaW5nKGxpbmVTdGFydCwgaSAtIGxpbmVT
dGFydCkpLCBlYyk7CisgICAgICAgICAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghKGMgPT0gJ1xuJyAm
JiBpICYmIHByZXYgPT0gJ1xyJykpIHsKKyAgICAgICAgICAgICAgICBmcmFnbWVudC0+YXBwZW5k
Q2hpbGQoSFRNTEJSRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpLCBlYyk7CisgICAgICAgICAg
ICAgICAgaWYgKGVjKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGxpbmVTdGFydCA9IGkgKyAxOworICAgICAgICB9CisgICAgICAgIHBy
ZXYgPSBjOworICAgIH0KKyAgICBpZiAobGVuZ3RoID4gbGluZVN0YXJ0KQorICAgICAgICBmcmFn
bWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIHRleHQuc3Vic3RyaW5n
KGxpbmVTdGFydCwgbGVuZ3RoIC0gbGluZVN0YXJ0KSksIGVjKTsKKworICAgIHJldHVybiBmcmFn
bWVudDsKK30KKwogdm9pZCBIVE1MRWxlbWVudDo6c2V0SW5uZXJUZXh0KGNvbnN0IFN0cmluZyYg
dGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKGllRm9yYmlkc0luc2VydEhUTUwo
KSkgewpAQCAtNDE5LDMwICs0NDksOSBAQCB2b2lkIEhUTUxFbGVtZW50OjpzZXRJbm5lclRleHQo
Y29uc3QgU3RyCiAKICAgICAvLyBBZGQgdGV4dCBub2RlcyBhbmQgPGJyPiBlbGVtZW50cy4KICAg
ICBlYyA9IDA7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gRG9jdW1l
bnRGcmFnbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwotICAgIGludCBsaW5lU3RhcnQgPSAwOwot
ICAgIFVDaGFyIHByZXYgPSAwOwotICAgIGludCBsZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOwotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgVUNoYXIgYyA9IHRl
eHRbaV07Ci0gICAgICAgIGlmIChjID09ICdcbicgfHwgYyA9PSAnXHInKSB7Ci0gICAgICAgICAg
ICBpZiAoaSA+IGxpbmVTdGFydCkgewotICAgICAgICAgICAgICAgIGZyYWdtZW50LT5hcHBlbmRD
aGlsZChUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgdGV4dC5zdWJzdHJpbmcobGluZVN0YXJ0LCBp
IC0gbGluZVN0YXJ0KSksIGVjKTsKLSAgICAgICAgICAgICAgICBpZiAoZWMpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghKGMgPT0g
J1xuJyAmJiBpICE9IDAgJiYgcHJldiA9PSAnXHInKSkgewotICAgICAgICAgICAgICAgIGZyYWdt
ZW50LT5hcHBlbmRDaGlsZChIVE1MQlJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSksIGVjKTsK
LSAgICAgICAgICAgICAgICBpZiAoZWMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpbmVTdGFydCA9IGkgKyAxOwotICAgICAgICB9Ci0g
ICAgICAgIHByZXYgPSBjOwotICAgIH0KLSAgICBpZiAobGVuZ3RoID4gbGluZVN0YXJ0KQotICAg
ICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIHRleHQu
c3Vic3RyaW5nKGxpbmVTdGFydCwgbGVuZ3RoIC0gbGluZVN0YXJ0KSksIGVjKTsKLSAgICByZXBs
YWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQodGhpcywgZnJhZ21lbnQucmVsZWFzZSgpLCBlYyk7Cisg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gdGV4dFRvRnJhZ21lbnQodGV4
dCwgZWMpOworICAgIGlmICghZWMpCisgICAgICAgIHJlcGxhY2VDaGlsZHJlbldpdGhGcmFnbWVu
dCh0aGlzLCBmcmFnbWVudC5yZWxlYXNlKCksIGVjKTsKIH0KIAogdm9pZCBIVE1MRWxlbWVudDo6
c2V0T3V0ZXJUZXh0KGNvbnN0IFN0cmluZyAmdGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC00
NjUsMzMgKzQ3NCw0MSBAQCB2b2lkIEhUTUxFbGVtZW50OjpzZXRPdXRlclRleHQoY29uc3QgU3Ry
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogVGhpcyBjcmVhdGVzIGEg
bmV3IHRleHQgbm9kZSBldmVuIHdoZW4gdGhlIHRleHQgaXMgZW1wdHkuCi0gICAgLy8gRklYTUU6
IFRoaXMgY3JlYXRlcyBhIHNpbmdsZSB0ZXh0IG5vZGUgZXZlbiB3aGVuIHRoZSB0ZXh0IGhhcyBD
UiBhbmQgTEYKLSAgICAvLyBjaGFyYWN0ZXJzIGluIGl0LiBJbnN0ZWFkIGl0IHNob3VsZCBjcmVh
dGUgPGJyPiBlbGVtZW50cy4KLSAgICBSZWZQdHI8VGV4dD4gdCA9IFRleHQ6OmNyZWF0ZShkb2N1
bWVudCgpLCB0ZXh0KTsKKyAgICAvLyBQcmVzZXJ2ZSBlbXB0eSB0ZXh0IG5vZGUgaWYgb3V0ZXJU
ZXh0IGlzIHNldCB0byBhbiBlbXB0eSBzdHJpbmcgYW5kIG5laXRoZXIKKyAgICAvLyB0aGUgcHJl
dmlvdXMgbm9yIG5leHQgc2libGluZyBpcyBhIHRleHQgbm9kZSB0byBiZSBjb21wYXRpYmxlIHdp
dGggSUUuCisgICAgUmVmUHRyPE5vZGU+IHByZXYgPSBwcmV2aW91c1NpYmxpbmcoKTsKKyAgICBS
ZWZQdHI8Tm9kZT4gbmV4dCA9IG5leHRTaWJsaW5nKCk7CisgICAgaWYgKHRleHQuaXNFbXB0eSgp
ICYmICghcHJldiB8fCAhcHJldi0+aXNUZXh0Tm9kZSgpKSAmJiAoIW5leHQgfHwgIW5leHQtPmlz
VGV4dE5vZGUoKSkpIHsKKyAgICAgICAgcGFyZW50LT5yZXBsYWNlQ2hpbGQoVGV4dDo6Y3JlYXRl
KGRvY3VtZW50KCksICIiKSwgdGhpcywgZWMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gQWRkIHRleHQgbm9kZXMgYW5kIDxicj4gZWxlbWVudHMuCiAgICAgZWMgPSAwOwotICAg
IHBhcmVudC0+cmVwbGFjZUNoaWxkKHQsIHRoaXMsIGVjKTsKKyAgICBSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gZnJhZ21lbnQgPSB0ZXh0VG9GcmFnbWVudCh0ZXh0LCBlYyk7CiAgICAgaWYgKGVj
KQogICAgICAgICByZXR1cm47CisgICAgcGFyZW50LT5yZXBsYWNlQ2hpbGQoZnJhZ21lbnQucmVs
ZWFzZSgpLCB0aGlzLCBlYyk7CiAKLSAgICAvLyBJcyBwcmV2aW91cyBub2RlIGEgdGV4dCBub2Rl
PyBJZiBzbywgbWVyZ2UgaW50byBpdC4KLSAgICBOb2RlKiBwcmV2ID0gdC0+cHJldmlvdXNTaWJs
aW5nKCk7Ci0gICAgaWYgKHByZXYgJiYgcHJldi0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgIFJl
ZlB0cjxUZXh0PiB0ZXh0UHJldiA9IHN0YXRpY19jYXN0PFRleHQqPihwcmV2KTsKLSAgICAgICAg
dGV4dFByZXYtPmFwcGVuZERhdGEodC0+ZGF0YSgpLCBlYyk7CisgICAgLy8gTWVyZ2Ugd2l0aCBw
cmV2aW91cyB0ZXh0IG5vZGUuCisgICAgTm9kZSogbm9kZSA9IHByZXYgPyBwcmV2LT5uZXh0U2li
bGluZygpIDogMDsKKyAgICBpZiAobm9kZSAmJiBub2RlLT5pc1RleHROb2RlKCkgJiYgcHJldi0+
aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0UHJldiA9IHN0YXRpY19j
YXN0PFRleHQqPihwcmV2LmdldCgpKTsKKyAgICAgICAgUmVmUHRyPFRleHQ+IHRleHROb2RlID0g
c3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUpOworICAgICAgICB0ZXh0UHJldi0+YXBwZW5kRGF0YSh0
ZXh0Tm9kZS0+ZGF0YSgpLCBlYyk7CiAgICAgICAgIGlmIChlYykKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgdC0+cmVtb3ZlKGVjKTsKKyAgICAgICAgdGV4dE5vZGUtPnJlbW92ZShlYyk7
CiAgICAgICAgIGlmIChlYykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdCA9IHRleHRQ
cmV2OwogICAgIH0KIAotICAgIC8vIElzIG5leHQgbm9kZSBhIHRleHQgbm9kZT8gSWYgc28sIG1l
cmdlIGl0IGluLgotICAgIE5vZGUqIG5leHQgPSB0LT5uZXh0U2libGluZygpOwotICAgIGlmIChu
ZXh0ICYmIG5leHQtPmlzVGV4dE5vZGUoKSkgewotICAgICAgICBSZWZQdHI8VGV4dD4gdGV4dE5l
eHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obmV4dCk7Ci0gICAgICAgIHQtPmFwcGVuZERhdGEodGV4
dE5leHQtPmRhdGEoKSwgZWMpOworICAgIC8vIE1lcmdlIHdpdGggbmV4dCB0ZXh0IG5vZGUuCisg
ICAgbm9kZSA9IG5leHQgPyBuZXh0LT5wcmV2aW91c1NpYmxpbmcoKSA6IDA7CisgICAgaWYgKG5v
ZGUgJiYgbm9kZS0+aXNUZXh0Tm9kZSgpICYmIG5leHQtPmlzVGV4dE5vZGUoKSkgeworICAgICAg
ICBSZWZQdHI8VGV4dD4gdGV4dE5leHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obmV4dC5nZXQoKSk7
CisgICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihub2Rl
KTsKKyAgICAgICAgdGV4dE5vZGUtPmFwcGVuZERhdGEodGV4dE5leHQtPmRhdGEoKSwgZWMpOwog
ICAgICAgICBpZiAoZWMpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHRleHROZXh0LT5y
ZW1vdmUoZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAkocmV2aXNpb24gNzU1
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwMCw2ICsxMDAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgSFRNTEZvcm1FbGVtZW50
KiB2aXJ0dWFsRm9ybSgpIGNvbnN0OwogCiAgICAgTm9kZSogaW5zZXJ0QWRqYWNlbnQoY29uc3Qg
U3RyaW5nJiB3aGVyZSwgTm9kZSogbmV3Q2hpbGQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNz
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHRleHRUb0ZyYWdtZW50KGNvbnN0IFN0cmluZyYsIEV4
Y2VwdGlvbkNvZGUmKTsKIH07CiAKIGlubGluZSBIVE1MRWxlbWVudDo6SFRNTEVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQpJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gNzU1NzkpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNSBAQAorMjAxMS0wMS0xMSAgRW1pbCBFa2x1bmQgIDxlYWVAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNl
dHRpbmcgb3V0ZXJUZXh0IHNob3VsZCBjb252ZXJ0IENSL0xGIHRvIDxicj4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMjY4CisgICAgICAgIAorICAg
ICAgICBBZGQgdGVzdCBmb3Igc2V0dGluZyBFbGVtZW50Lm91dGVyVGV4dC4KKworICAgICAgICAq
IGZhc3QvZG9tL3NldC1vdXRlci10ZXh0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vc2V0LW91dGVyLXRleHQuaHRtbDogQWRkZWQuCisKIDIwMTEtMDEtMTEgIEFkcmll
bm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCB0ZXN0
IGV4cGVjdGF0aW9ucyB1cGRhdGUuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9zZXQtb3V0
ZXItdGV4dC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20v
c2V0LW91dGVyLXRleHQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9kb20vc2V0LW91dGVyLXRleHQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDggQEAKK1JlcGxhY2VkIG5vZGUgdXNpbmcgb3V0ZXJUZXh0LgorcmVtb3Zpbmcgbm9kZSB1
c2luZyBvdXRlclRleHQuCitUZXN0aW5nIGFkZGluZyBicgordXNpbmcgb3V0ZXJUZXh0LgorUEFT
UzogcmVwbGFjZQorUEFTUzogcmVtb3ZlCitQQVNTOiBlbXB0eSB0ZXh0IG5vZGUKK1BBU1M6IGxp
bmUgYnJlYWsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL3NldC1vdXRlci10ZXh0Lmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vc2V0LW91dGVyLXRleHQuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL3NldC1vdXRlci10ZXh0Lmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHN0eWxl
PgorICAgICAgICBwcmUgeyBtYXJnaW46IDA7IH0KKyAgICA8L3N0eWxlPgorICAgIDxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvZHVtcC1hcy1tYXJrdXAuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQ+CisgICAgTWFya3VwLm5vQXV0b0R1bXAoKTsKKyAgICAKKyAgICBmdW5jdGlvbiBhc3Nl
cnRNYXJrdXAobmFtZSwgZWxlbWVudCwgZXhwZWN0ZWQpIHsKKyAgICAgIHZhciBtYXJrdXAgPSBN
YXJrdXAuZ2V0KGVsZW1lbnQpOworICAgICAgaWYgKG1hcmt1cCA9PSBleHBlY3RlZCkKKyAgICAg
ICAgICBsb2coJ1BBU1M6ICcgKyBuYW1lKTsKKyAgICAgIGVsc2UKKyAgICAgICAgICBsb2coJ0ZB
SUw6ICcgKyBuYW1lICArICdcbldhczpcbicgKyBtYXJrdXAgKyAnXG5FeHBlY3RlZDpcbicgKyBl
eHBlY3RlZCk7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIGxvZyh0ZXh0KSB7CisgICAgICB2
YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTsKKyAgICAgIGVsLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKTsKKyAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdyZXN1bHQnKS5hcHBlbmRDaGlsZChlbCk7CisgICAgfQorICAgIAorICAgIGZ1
bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCkKKworICAg
ICAgICB2YXIgaXRlbXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbGknKTsKKwor
ICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdFJlcGxhY2UnKS5vdXRlclRleHQg
PSAnUmVwbGFjZWQnOworICAgICAgICBhc3NlcnRNYXJrdXAoJ3JlcGxhY2UnLCBpdGVtc1swXSwg
J3wgIlJlcGxhY2VkIG5vZGUgdXNpbmcgb3V0ZXJUZXh0LiInKTsKKyAgICAgICAgCisgICAgICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0UmVtb3ZlJykub3V0ZXJUZXh0ID0gJyc7Cisg
ICAgICAgIGFzc2VydE1hcmt1cCgncmVtb3ZlJywgaXRlbXNbMV0sICd8ICIgcmVtb3Zpbmcgbm9k
ZSB1c2luZyBvdXRlclRleHQuIicpOworCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCd0ZXN0RW1wdHknKS5vdXRlclRleHQgPSAnJzsKKyAgICAgICAgYXNzZXJ0TWFya3VwKCdlbXB0
eSB0ZXh0IG5vZGUnLCBpdGVtc1syXSwgJ3wgIiInKTsKKyAgICAgICAgCisgICAgICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0QWRkQnInKS5vdXRlclRleHQgPSAnYnJcbic7CisgICAg
ICAgIGFzc2VydE1hcmt1cCgnbGluZSBicmVhaycsIGl0ZW1zWzNdLCAnfCAiVGVzdGluZyBhZGRp
bmcgYnIiXG58IDxicj5cbnwgIiB1c2luZyBvdXRlclRleHQuIicpOworICAgIH0KKyAgICA8L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKyAgICA8dWw+CisgICAg
ICA8bGk+PHNwYW4gaWQ9InRlc3RSZXBsYWNlIj5UZXN0aW5nIHJlcGxhY2luZzwvc3Bhbj4gbm9k
ZSB1c2luZyBvdXRlclRleHQuPC9saT4KKyAgICAgIDxsaT48c3BhbiBpZD0idGVzdFJlbW92ZSI+
VGVzdGluZzwvc3Bhbj4gcmVtb3Zpbmcgbm9kZSB1c2luZyBvdXRlclRleHQuPC9saT4KKyAgICAg
IDxsaT48c3BhbiBpZD0idGVzdEVtcHR5Ij5UZXN0IHJlbW92aW5nIGVudGlyZSBub2RlPC9zcGFu
PjwvbGk+CisgICAgICA8bGk+VGVzdGluZyBhZGRpbmcgPHNwYW4gaWQ9InRlc3RBZGRCciI+bGlu
ZSBicmVhazwvc3Bhbj4gdXNpbmcgb3V0ZXJUZXh0LjwvbGk+CisgICAgPC91bD4KKyAgICA8ZGl2
IGlkPSJyZXN1bHQiPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78735</attachid>
            <date>2011-01-12 14:52:29 -0800</date>
            <delta_ts>2011-01-12 14:53:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>outertext.patch</filename>
            <type>text/plain</type>
            <size>12882</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NjQwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDEtMTEgIEVtaWwgRWts
dW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBTZXR0aW5nIG91dGVyVGV4dCBzaG91bGQgY29udmVydCBDUi9MRiB0
byA8YnI+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MjI2OAorCisgICAgICAgIE1ha2Ugc2V0IG91dGVyVGV4dCBzdXBwb3J0IGxpbmUgYnJlYWtzIChz
aGFyaW5nIHRoZSB0ZXh0IHRvIGZyYWdtZW50IGNvZGUKKyAgICAgICAgd2l0aCBzZXRJbm5lclRl
eHQpIGFuZCBoYW5kbGUgZW1wdHkgdGV4dCBub2RlcyB0aGUgc2FtZSB3YXkgSUUgZG9lcy4KKwor
ICAgICAgICBUZXN0OiBmYXN0L2RvbS9zZXQtb3V0ZXItdGV4dC5odG1sCisKKyAgICAgICAgKiBo
dG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50Ojp0ZXh0
VG9GcmFnbWVudCk6IFNoYXJlZCBiZXR3ZWVuIHNldElubmVyVGV4dCBhbmQgc2V0T3V0ZXJUZXh0
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6c2V0SW5uZXJUZXh0KTogU3BsaXQgb3V0
IHRleHQgcGFyc2luZyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6bWVyZ2VXaXRoTmV4dFRleHRO
b2RlKTogU3BsaXQgb3V0IHRleHQgbm9kZSBtZXJnaW5nIGNvZGUuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudDo6c2V0T3V0ZXJUZXh0KTogQWRkZWQgc3VwcG9ydCBmb3IgbGluZSBicmVh
a3MuCisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5oOgorCiAyMDExLTAxLTEyICBDaHJpcyBN
YXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBG
cmFzZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gNzU1
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKKyNpbmNsdWRl
ICJNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyV29yZEJyZWFrLmgiCiAjaW5jbHVk
ZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCkBAIC0zNzYs
NiArMzc3LDM1IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OnNldE91dGVySFRNTChjb25zdCBTdHIKICAg
ICB9CiB9CiAKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gSFRNTEVsZW1lbnQ6OnRleHRU
b0ZyYWdtZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3Jl
YXRlKGRvY3VtZW50KCkpOworICAgIGludCBsaW5lU3RhcnQgPSAwOworICAgIFVDaGFyIHByZXYg
PSAwOworICAgIGludCBsZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgVUNoYXIgYyA9IHRleHRbaV07CisgICAgICAg
IGlmIChjID09ICdcbicgfHwgYyA9PSAnXHInKSB7CisgICAgICAgICAgICBpZiAoaSA+IGxpbmVT
dGFydCkgeworICAgICAgICAgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChUZXh0OjpjcmVh
dGUoZG9jdW1lbnQoKSwgdGV4dC5zdWJzdHJpbmcobGluZVN0YXJ0LCBpIC0gbGluZVN0YXJ0KSks
IGVjKTsKKyAgICAgICAgICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCEoYyA9PSAnXG4nICYmIGkgJiYg
cHJldiA9PSAnXHInKSkgeworICAgICAgICAgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChI
VE1MQlJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSksIGVjKTsKKyAgICAgICAgICAgICAgICBp
ZiAoZWMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbGluZVN0YXJ0ID0gaSArIDE7CisgICAgICAgIH0KKyAgICAgICAgcHJldiA9IGM7
CisgICAgfQorICAgIGlmIChsZW5ndGggPiBsaW5lU3RhcnQpCisgICAgICAgIGZyYWdtZW50LT5h
cHBlbmRDaGlsZChUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgdGV4dC5zdWJzdHJpbmcobGluZVN0
YXJ0LCBsZW5ndGggLSBsaW5lU3RhcnQpKSwgZWMpOworCisgICAgcmV0dXJuIGZyYWdtZW50Owor
fQorCiB2b2lkIEhUTUxFbGVtZW50OjpzZXRJbm5lclRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoaWVGb3JiaWRzSW5zZXJ0SFRNTCgpKSB7CkBA
IC00MTksMzAgKzQ0OSwyNCBAQCB2b2lkIEhUTUxFbGVtZW50OjpzZXRJbm5lclRleHQoY29uc3Qg
U3RyCiAKICAgICAvLyBBZGQgdGV4dCBub2RlcyBhbmQgPGJyPiBlbGVtZW50cy4KICAgICBlYyA9
IDA7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gRG9jdW1lbnRGcmFn
bWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwotICAgIGludCBsaW5lU3RhcnQgPSAwOwotICAgIFVD
aGFyIHByZXYgPSAwOwotICAgIGludCBsZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOwotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgVUNoYXIgYyA9IHRleHRbaV07
Ci0gICAgICAgIGlmIChjID09ICdcbicgfHwgYyA9PSAnXHInKSB7Ci0gICAgICAgICAgICBpZiAo
aSA+IGxpbmVTdGFydCkgewotICAgICAgICAgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChU
ZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgdGV4dC5zdWJzdHJpbmcobGluZVN0YXJ0LCBpIC0gbGlu
ZVN0YXJ0KSksIGVjKTsKLSAgICAgICAgICAgICAgICBpZiAoZWMpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghKGMgPT0gJ1xuJyAm
JiBpICE9IDAgJiYgcHJldiA9PSAnXHInKSkgewotICAgICAgICAgICAgICAgIGZyYWdtZW50LT5h
cHBlbmRDaGlsZChIVE1MQlJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSksIGVjKTsKLSAgICAg
ICAgICAgICAgICBpZiAoZWMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGxpbmVTdGFydCA9IGkgKyAxOwotICAgICAgICB9Ci0gICAgICAg
IHByZXYgPSBjOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IHRleHRU
b0ZyYWdtZW50KHRleHQsIGVjKTsKKyAgICBpZiAoIWVjKQorICAgICAgICByZXBsYWNlQ2hpbGRy
ZW5XaXRoRnJhZ21lbnQodGhpcywgZnJhZ21lbnQucmVsZWFzZSgpLCBlYyk7Cit9CisKK3ZvaWQg
bWVyZ2VXaXRoTmV4dFRleHROb2RlKFJlZlB0cjxOb2RlPiBub2RlLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBBU1NFUlQobm9kZSAmJiBub2RlLT5pc1RleHROb2RlKCkpOworICAgIE5vZGUq
IG5leHQgPSBub2RlLT5uZXh0U2libGluZygpOworICAgIGlmIChuZXh0ICYmIG5leHQtPmlzVGV4
dE5vZGUoKSkgeworICAgICAgICBSZWZQdHI8VGV4dD4gdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxU
ZXh0Kj4obm9kZS5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0TmV4dCA9IHN0YXRp
Y19jYXN0PFRleHQqPihuZXh0KTsKKyAgICAgICAgdGV4dE5vZGUtPmFwcGVuZERhdGEodGV4dE5l
eHQtPmRhdGEoKSwgZWMpOworICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGlmICh0ZXh0TmV4dC0+cGFyZW50Tm9kZSgpKSAvLyBNaWdodCBoYXZlIGJlZW4gcmVt
b3ZlZCBieSBtdXRhdGlvbiBldmVudC4KKyAgICAgICAgICAgIHRleHROZXh0LT5yZW1vdmUoZWMp
OwogICAgIH0KLSAgICBpZiAobGVuZ3RoID4gbGluZVN0YXJ0KQotICAgICAgICBmcmFnbWVudC0+
YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIHRleHQuc3Vic3RyaW5nKGxpbmVT
dGFydCwgbGVuZ3RoIC0gbGluZVN0YXJ0KSksIGVjKTsKLSAgICByZXBsYWNlQ2hpbGRyZW5XaXRo
RnJhZ21lbnQodGhpcywgZnJhZ21lbnQucmVsZWFzZSgpLCBlYyk7CiB9CiAKIHZvaWQgSFRNTEVs
ZW1lbnQ6OnNldE91dGVyVGV4dChjb25zdCBTdHJpbmcgJnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVj
KQpAQCAtNDY1LDM5ICs0ODksMzUgQEAgdm9pZCBIVE1MRWxlbWVudDo6c2V0T3V0ZXJUZXh0KGNv
bnN0IFN0cgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFRoaXMgY3Jl
YXRlcyBhIG5ldyB0ZXh0IG5vZGUgZXZlbiB3aGVuIHRoZSB0ZXh0IGlzIGVtcHR5LgotICAgIC8v
IEZJWE1FOiBUaGlzIGNyZWF0ZXMgYSBzaW5nbGUgdGV4dCBub2RlIGV2ZW4gd2hlbiB0aGUgdGV4
dCBoYXMgQ1IgYW5kIExGCi0gICAgLy8gY2hhcmFjdGVycyBpbiBpdC4gSW5zdGVhZCBpdCBzaG91
bGQgY3JlYXRlIDxicj4gZWxlbWVudHMuCi0gICAgUmVmUHRyPFRleHQ+IHQgPSBUZXh0OjpjcmVh
dGUoZG9jdW1lbnQoKSwgdGV4dCk7CisgICAgLy8gUHJlc2VydmUgZW1wdHkgdGV4dCBub2RlIGlm
IG91dGVyVGV4dCBpcyBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIGFuZCBuZWl0aGVyCisgICAgLy8g
dGhlIHByZXZpb3VzIG5vciBuZXh0IHNpYmxpbmcgaXMgYSB0ZXh0IG5vZGUgdG8gYmUgY29tcGF0
aWJsZSB3aXRoIElFLgorICAgIFJlZlB0cjxOb2RlPiBwcmV2ID0gcHJldmlvdXNTaWJsaW5nKCk7
CisgICAgUmVmUHRyPE5vZGU+IG5leHQgPSBuZXh0U2libGluZygpOworICAgIGlmICh0ZXh0Lmlz
RW1wdHkoKSAmJiAoIXByZXYgfHwgIXByZXYtPmlzVGV4dE5vZGUoKSkgJiYgKCFuZXh0IHx8ICFu
ZXh0LT5pc1RleHROb2RlKCkpKSB7CisgICAgICAgIHBhcmVudC0+cmVwbGFjZUNoaWxkKFRleHQ6
OmNyZWF0ZShkb2N1bWVudCgpLCAiIiksIHRoaXMsIGVjKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogICAgIGVjID0gMDsKLSAgICBwYXJlbnQtPnJlcGxhY2VDaGlsZCh0LCB0aGlzLCBlYyk7
CisgICAgUmVmUHRyPE5vZGU+IG5ld0NoaWxkOworICAgIC8vIENvbnZlcnQgdGV4dCB0byBmcmFn
bWVudCB3aXRoIDxicj4gdGFncyBpbnN0ZWFkIG9mIGxpbmVicmVha3MgaWYgbmVlZGVkLgorICAg
IGlmICh0ZXh0LmNvbnRhaW5zKCdccicpIHx8IHRleHQuY29udGFpbnMoJ1xuJykpCisgICAgICAg
IG5ld0NoaWxkID0gdGV4dFRvRnJhZ21lbnQodGV4dCwgZWMpOworICAgIGVsc2UKKyAgICAgICAg
bmV3Q2hpbGQgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgdGV4dCk7CisKKyAgICBpZiAoIXRo
aXMgfHwgIXBhcmVudE5vZGUoKSB8fCAhaW5Eb2N1bWVudCgpKQorICAgICAgICBlYyA9IEhJRVJB
UkNIWV9SRVFVRVNUX0VSUjsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKKyAgICBwYXJl
bnQtPnJlcGxhY2VDaGlsZChuZXdDaGlsZC5yZWxlYXNlKCksIHRoaXMsIGVjKTsKIAotICAgIC8v
IElzIHByZXZpb3VzIG5vZGUgYSB0ZXh0IG5vZGU/IElmIHNvLCBtZXJnZSBpbnRvIGl0LgotICAg
IE5vZGUqIHByZXYgPSB0LT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICBpZiAocHJldiAmJiBwcmV2
LT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgUmVmUHRyPFRleHQ+IHRleHRQcmV2ID0gc3RhdGlj
X2Nhc3Q8VGV4dCo+KHByZXYpOwotICAgICAgICB0ZXh0UHJldi0+YXBwZW5kRGF0YSh0LT5kYXRh
KCksIGVjKTsKLSAgICAgICAgaWYgKGVjKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0
LT5yZW1vdmUoZWMpOwotICAgICAgICBpZiAoZWMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIHQgPSB0ZXh0UHJldjsKLSAgICB9CisgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBuZXh0ID8g
bmV4dC0+cHJldmlvdXNTaWJsaW5nKCkgOiAwOworICAgIGlmICghZWMgJiYgbm9kZSAmJiBub2Rl
LT5pc1RleHROb2RlKCkpCisgICAgICAgIG1lcmdlV2l0aE5leHRUZXh0Tm9kZShub2RlLCBlYyk7
CiAKLSAgICAvLyBJcyBuZXh0IG5vZGUgYSB0ZXh0IG5vZGU/IElmIHNvLCBtZXJnZSBpdCBpbi4K
LSAgICBOb2RlKiBuZXh0ID0gdC0+bmV4dFNpYmxpbmcoKTsKLSAgICBpZiAobmV4dCAmJiBuZXh0
LT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgUmVmUHRyPFRleHQ+IHRleHROZXh0ID0gc3RhdGlj
X2Nhc3Q8VGV4dCo+KG5leHQpOwotICAgICAgICB0LT5hcHBlbmREYXRhKHRleHROZXh0LT5kYXRh
KCksIGVjKTsKLSAgICAgICAgaWYgKGVjKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0
ZXh0TmV4dC0+cmVtb3ZlKGVjKTsKLSAgICAgICAgaWYgKGVjKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICBpZiAoIWVjICYmIHByZXYgJiYgcHJldi0+aXNUZXh0Tm9kZSgpKQorICAg
ICAgICBtZXJnZVdpdGhOZXh0VGV4dE5vZGUocHJldiwgZWMpOwogfQogCiBOb2RlKiBIVE1MRWxl
bWVudDo6aW5zZXJ0QWRqYWNlbnQoY29uc3QgU3RyaW5nJiB3aGVyZSwgTm9kZSogbmV3Q2hpbGQs
IEV4Y2VwdGlvbkNvZGUmIGVjKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAkocmV2
aXNpb24gNzU1MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwMCw2ICsxMDAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgSFRNTEZv
cm1FbGVtZW50KiB2aXJ0dWFsRm9ybSgpIGNvbnN0OwogCiAgICAgTm9kZSogaW5zZXJ0QWRqYWNl
bnQoY29uc3QgU3RyaW5nJiB3aGVyZSwgTm9kZSogbmV3Q2hpbGQsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHRleHRUb0ZyYWdtZW50KGNvbnN0IFN0
cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKIH07CiAKIGlubGluZSBIVE1MRWxlbWVudDo6SFRNTEVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQpJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gNzU2NDApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMS0wMS0xMSAgRW1pbCBFa2x1bmQgIDxlYWVA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFNldHRpbmcgb3V0ZXJUZXh0IHNob3VsZCBjb252ZXJ0IENSL0xGIHRvIDxicj4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMjY4CisgICAg
ICAgIAorICAgICAgICBBZGQgdGVzdCBmb3Igc2V0dGluZyBFbGVtZW50Lm91dGVyVGV4dC4KKwor
ICAgICAgICAqIGZhc3QvZG9tL3NldC1vdXRlci10ZXh0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9kb20vc2V0LW91dGVyLXRleHQuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vdGV4dC1ub2RlLWFwcGVuZC1kYXRhLXJlbW92ZS1jcmFzaC1leHBlY3RlZC50eHQ6
IENoYW5nZWQKKyAgICAgICAgICAgIGV4cGVjdGF0aW9uIHRvICJkaWRuJ3QgY3Jhc2giIGZyb20g
InRocmV3IGRvbSBleGNlcHRpb24iIGFzIHRlc3QKKyAgICAgICAgICAgIGFzc3VtZWQgdGhlIERP
TUNoYXJhY3RlckRhdGFNb2RpZmllZCBldmVudCB3b3VsZCBmaXJlIGJlZm9yZSB0aGUgbm9kZQor
ICAgICAgICAgICAgd291bGQgYmUgcmVwbGFjZWQuCisgICAgICAgICogZmFzdC9kb20vdGV4dC1u
b2RlLWFwcGVuZC1kYXRhLXJlbW92ZS1jcmFzaC5odG1sOgorCiAyMDExLTAxLTEyICBUb255IENo
YW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZh
aS4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL3NldC1vdXRlci10ZXh0LWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9zZXQtb3V0ZXItdGV4dC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9zZXQtb3V0ZXIt
dGV4dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOCBAQAorUmVwbGFjZWQg
bm9kZSB1c2luZyBvdXRlclRleHQuCityZW1vdmluZyBub2RlIHVzaW5nIG91dGVyVGV4dC4KK1Rl
c3RpbmcgYWRkaW5nIGJyCit1c2luZyBvdXRlclRleHQuCitQQVNTOiByZXBsYWNlCitQQVNTOiBy
ZW1vdmUKK1BBU1M6IGVtcHR5IHRleHQgbm9kZQorUEFTUzogbGluZSBicmVhawpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9kb20vc2V0LW91dGVyLXRleHQuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2RvbS9zZXQtb3V0ZXItdGV4dC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9kb20vc2V0LW91dGVyLXRleHQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1MyBAQAorPGh0bWw+Cis8aGVhZD4KKyAgICA8c3R5bGU+CisgICAgICAgIHByZSB7IG1h
cmdpbjogMDsgfQorICAgIDwvc3R5bGU+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9kdW1wLWFzLW1hcmt1cC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICBNYXJrdXAu
bm9BdXRvRHVtcCgpOworICAgIAorICAgIGZ1bmN0aW9uIGFzc2VydE1hcmt1cChuYW1lLCBlbGVt
ZW50LCBleHBlY3RlZCkgeworICAgICAgdmFyIG1hcmt1cCA9IE1hcmt1cC5nZXQoZWxlbWVudCk7
CisgICAgICBpZiAobWFya3VwID09IGV4cGVjdGVkKQorICAgICAgICAgIGxvZygnUEFTUzogJyAr
IG5hbWUpOworICAgICAgZWxzZQorICAgICAgICAgIGxvZygnRkFJTDogJyArIG5hbWUgICsgJ1xu
V2FzOlxuJyArIG1hcmt1cCArICdcbkV4cGVjdGVkOlxuJyArIGV4cGVjdGVkKTsKKyAgICB9Cisg
ICAgCisgICAgZnVuY3Rpb24gbG9nKHRleHQpIHsKKyAgICAgIHZhciBlbCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ3ByZScpOworICAgICAgZWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUodGV4dCkpOworICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdCcp
LmFwcGVuZENoaWxkKGVsKTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsK
KyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKQorCisgICAgICAgIHZhciBpdGVtcyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsaScpOworCisgICAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCd0ZXN0UmVwbGFjZScpLm91dGVyVGV4dCA9ICdSZXBsYWNlZCc7CisgICAg
ICAgIGFzc2VydE1hcmt1cCgncmVwbGFjZScsIGl0ZW1zWzBdLCAnfCAiUmVwbGFjZWQgbm9kZSB1
c2luZyBvdXRlclRleHQuIicpOworICAgICAgICAKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3Rlc3RSZW1vdmUnKS5vdXRlclRleHQgPSAnJzsKKyAgICAgICAgYXNzZXJ0TWFya3Vw
KCdyZW1vdmUnLCBpdGVtc1sxXSwgJ3wgIiByZW1vdmluZyBub2RlIHVzaW5nIG91dGVyVGV4dC4i
Jyk7CisKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3RFbXB0eScpLm91dGVy
VGV4dCA9ICcnOworICAgICAgICBhc3NlcnRNYXJrdXAoJ2VtcHR5IHRleHQgbm9kZScsIGl0ZW1z
WzJdLCAnfCAiIicpOworICAgICAgICAKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3Rlc3RBZGRCcicpLm91dGVyVGV4dCA9ICdiclxuJzsKKyAgICAgICAgYXNzZXJ0TWFya3VwKCds
aW5lIGJyZWFrJywgaXRlbXNbM10sICd8ICJUZXN0aW5nIGFkZGluZyBiciJcbnwgPGJyPlxufCAi
IHVzaW5nIG91dGVyVGV4dC4iJyk7CisgICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHkgb25sb2FkPSJydW5UZXN0KCkiPgorICAgIDx1bD4KKyAgICAgIDxsaT48c3BhbiBpZD0idGVz
dFJlcGxhY2UiPlRlc3RpbmcgcmVwbGFjaW5nPC9zcGFuPiBub2RlIHVzaW5nIG91dGVyVGV4dC48
L2xpPgorICAgICAgPGxpPjxzcGFuIGlkPSJ0ZXN0UmVtb3ZlIj5UZXN0aW5nPC9zcGFuPiByZW1v
dmluZyBub2RlIHVzaW5nIG91dGVyVGV4dC48L2xpPgorICAgICAgPGxpPjxzcGFuIGlkPSJ0ZXN0
RW1wdHkiPlRlc3QgcmVtb3ZpbmcgZW50aXJlIG5vZGU8L3NwYW4+PC9saT4KKyAgICAgIDxsaT5U
ZXN0aW5nIGFkZGluZyA8c3BhbiBpZD0idGVzdEFkZEJyIj5saW5lIGJyZWFrPC9zcGFuPiB1c2lu
ZyBvdXRlclRleHQuPC9saT4KKyAgICA8L3VsPgorICAgIDxkaXYgaWQ9InJlc3VsdCI+PC9kaXY+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS90ZXh0LW5vZGUt
YXBwZW5kLWRhdGEtcmVtb3ZlLWNyYXNoLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2RvbS90ZXh0LW5vZGUtYXBwZW5kLWRhdGEtcmVtb3ZlLWNyYXNoLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gNzU1MzUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS90ZXh0LW5v
ZGUtYXBwZW5kLWRhdGEtcmVtb3ZlLWNyYXNoLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMSArMSBAQAotUEFTUywgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkIC0gRXJyb3I6
IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjogRE9NIEV4Y2VwdGlvbiAzCitQQVNTLCBkaWRuJ3QgY3Jh
c2guCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS90ZXh0LW5vZGUtYXBwZW5kLWRhdGEtcmVt
b3ZlLWNyYXNoLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vdGV4dC1u
b2RlLWFwcGVuZC1kYXRhLXJlbW92ZS1jcmFzaC5odG1sCShyZXZpc2lvbiA3NTUzNSkKKysrIExh
eW91dFRlc3RzL2Zhc3QvZG9tL3RleHQtbm9kZS1hcHBlbmQtZGF0YS1yZW1vdmUtY3Jhc2guaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMTMsMjQgKzEzLDI0IEBAIGZ1bmN0aW9uIHJ1blRlc3QoKQ0K
ICAgICB0cnkgew0KICAgICAgICBkaXZCbG9jay5hZGRFdmVudExpc3RlbmVyKCJET01DaGFyYWN0
ZXJEYXRhTW9kaWZpZWQiLCBldmVudExpc3RlbmVyLCBmYWxzZSk7DQogICAgICAgIHBCbG9jay5v
dXRlclRleHQgPSAidGV4dCI7DQorICAgICAgIGRpdkJsb2NrLmlubmVySFRNTCA9ICJQQVNTLCBk
aWRuJ3QgY3Jhc2guIjsNCiAgICAgfQ0KICAgICBjYXRjaCAoZXhjZXB0aW9uKSB7DQotICAgICAg
IGRpdkJsb2NrLmlubmVySFRNTCA9ICJQQVNTLCB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0
ZWQgLSAiICsgZXhjZXB0aW9uOw0KLSAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQ0KLSAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOw0KLSAg
IH0NCisgICAgICAgZGl2QmxvY2suaW5uZXJIVE1MID0gIlRocmV3IGFuIGV4Y2VwdGlvbiAtICIg
KyBleGNlcHRpb247DQorICAgIH0NCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikNCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsNCiB9DQogDQog
ZnVuY3Rpb24gZXZlbnRMaXN0ZW5lcigpDQogew0KLSAgICBjb3VudCArPSAxOw0KLSAgICBpZiAo
Y291bnQgPCAyKQ0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5j
cmVhdGVSYW5nZSgpOw0KLSAgICByYW5nZS5zZXRTdGFydChkaXZCbG9jaywgMCk7DQotICAgIHJh
bmdlLnNldEVuZChkaXZCbG9jaywgZGl2QmxvY2suY2hpbGROb2Rlcy5sZW5ndGggLSAxKTsNCi0g
ICAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTsNCi0gICAgZ2MoKTsNCisgICAgdHJ5IHsNCisgICAg
ICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOw0KKyAgICAgIHJhbmdlLnNldFN0
YXJ0KGRpdkJsb2NrLCAwKTsNCisgICAgICByYW5nZS5zZXRFbmQoZGl2QmxvY2ssIGRpdkJsb2Nr
LmNoaWxkTm9kZXMubGVuZ3RoIC0gMSk7DQorICAgICAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTsN
CisgICAgICBnYygpOw0KKyAgfSBjYXRjaChlKSB7IH0NCiB9DQogDQogZnVuY3Rpb24gZ2MoKQ0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78736</attachid>
            <date>2011-01-12 14:53:41 -0800</date>
            <delta_ts>2011-01-12 16:15:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>outertext.patch</filename>
            <type>text/plain</type>
            <size>12664</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NjQwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDEtMTEgIEVtaWwgRWts
dW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBTZXR0aW5nIG91dGVyVGV4dCBzaG91bGQgY29udmVydCBDUi9MRiB0
byA8YnI+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MjI2OAorCisgICAgICAgIE1ha2Ugc2V0IG91dGVyVGV4dCBzdXBwb3J0IGxpbmUgYnJlYWtzIChz
aGFyaW5nIHRoZSB0ZXh0IHRvIGZyYWdtZW50IGNvZGUKKyAgICAgICAgd2l0aCBzZXRJbm5lclRl
eHQpIGFuZCBoYW5kbGUgZW1wdHkgdGV4dCBub2RlcyB0aGUgc2FtZSB3YXkgSUUgZG9lcy4KKwor
ICAgICAgICBUZXN0OiBmYXN0L2RvbS9zZXQtb3V0ZXItdGV4dC5odG1sCisKKyAgICAgICAgKiBo
dG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50Ojp0ZXh0
VG9GcmFnbWVudCk6IFNoYXJlZCBiZXR3ZWVuIHNldElubmVyVGV4dCBhbmQgc2V0T3V0ZXJUZXh0
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6c2V0SW5uZXJUZXh0KTogU3BsaXQgb3V0
IHRleHQgcGFyc2luZyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6bWVyZ2VXaXRoTmV4dFRleHRO
b2RlKTogU3BsaXQgb3V0IHRleHQgbm9kZSBtZXJnaW5nIGNvZGUuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudDo6c2V0T3V0ZXJUZXh0KTogQWRkZWQgc3VwcG9ydCBmb3IgbGluZSBicmVh
a3MuCisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5oOgorCiAyMDExLTAxLTEyICBDaHJpcyBN
YXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBG
cmFzZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gNzU1
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzc2LDYgKzM3NiwzNSBAQCB2b2lkIEhUTUxFbGVtZW50OjpzZXRPdXRlckhUTUwoY29u
c3QgU3RyCiAgICAgfQogfQogCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEhUTUxFbGVt
ZW50Ojp0ZXh0VG9GcmFnbWVudChjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IERvY3VtZW50RnJh
Z21lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKKyAgICBpbnQgbGluZVN0YXJ0ID0gMDsKKyAgICBV
Q2hhciBwcmV2ID0gMDsKKyAgICBpbnQgbGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIFVDaGFyIGMgPSB0ZXh0W2ld
OworICAgICAgICBpZiAoYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJykgeworICAgICAgICAgICAgaWYg
KGkgPiBsaW5lU3RhcnQpIHsKKyAgICAgICAgICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQo
VGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIHRleHQuc3Vic3RyaW5nKGxpbmVTdGFydCwgaSAtIGxp
bmVTdGFydCkpLCBlYyk7CisgICAgICAgICAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghKGMgPT0gJ1xu
JyAmJiBpICYmIHByZXYgPT0gJ1xyJykpIHsKKyAgICAgICAgICAgICAgICBmcmFnbWVudC0+YXBw
ZW5kQ2hpbGQoSFRNTEJSRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpLCBlYyk7CisgICAgICAg
ICAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGxpbmVTdGFydCA9IGkgKyAxOworICAgICAgICB9CisgICAgICAg
IHByZXYgPSBjOworICAgIH0KKyAgICBpZiAobGVuZ3RoID4gbGluZVN0YXJ0KQorICAgICAgICBm
cmFnbWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIHRleHQuc3Vic3Ry
aW5nKGxpbmVTdGFydCwgbGVuZ3RoIC0gbGluZVN0YXJ0KSksIGVjKTsKKworICAgIHJldHVybiBm
cmFnbWVudDsKK30KKwogdm9pZCBIVE1MRWxlbWVudDo6c2V0SW5uZXJUZXh0KGNvbnN0IFN0cmlu
ZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKGllRm9yYmlkc0luc2VydEhU
TUwoKSkgewpAQCAtNDE5LDMwICs0NDgsMjQgQEAgdm9pZCBIVE1MRWxlbWVudDo6c2V0SW5uZXJU
ZXh0KGNvbnN0IFN0cgogCiAgICAgLy8gQWRkIHRleHQgbm9kZXMgYW5kIDxicj4gZWxlbWVudHMu
CiAgICAgZWMgPSAwOwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IERv
Y3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKLSAgICBpbnQgbGluZVN0YXJ0ID0g
MDsKLSAgICBVQ2hhciBwcmV2ID0gMDsKLSAgICBpbnQgbGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsK
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIFVDaGFyIGMg
PSB0ZXh0W2ldOwotICAgICAgICBpZiAoYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJykgewotICAgICAg
ICAgICAgaWYgKGkgPiBsaW5lU3RhcnQpIHsKLSAgICAgICAgICAgICAgICBmcmFnbWVudC0+YXBw
ZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIHRleHQuc3Vic3RyaW5nKGxpbmVTdGFy
dCwgaSAtIGxpbmVTdGFydCkpLCBlYyk7Ci0gICAgICAgICAgICAgICAgaWYgKGVjKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIShj
ID09ICdcbicgJiYgaSAhPSAwICYmIHByZXYgPT0gJ1xyJykpIHsKLSAgICAgICAgICAgICAgICBm
cmFnbWVudC0+YXBwZW5kQ2hpbGQoSFRNTEJSRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpLCBl
Yyk7Ci0gICAgICAgICAgICAgICAgaWYgKGVjKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsaW5lU3RhcnQgPSBpICsgMTsKLSAgICAgICAg
fQotICAgICAgICBwcmV2ID0gYzsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21l
bnQgPSB0ZXh0VG9GcmFnbWVudCh0ZXh0LCBlYyk7CisgICAgaWYgKCFlYykKKyAgICAgICAgcmVw
bGFjZUNoaWxkcmVuV2l0aEZyYWdtZW50KHRoaXMsIGZyYWdtZW50LnJlbGVhc2UoKSwgZWMpOwor
fQorCit2b2lkIG1lcmdlV2l0aE5leHRUZXh0Tm9kZShSZWZQdHI8Tm9kZT4gbm9kZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJUKG5vZGUgJiYgbm9kZS0+aXNUZXh0Tm9kZSgpKTsK
KyAgICBOb2RlKiBuZXh0ID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKKyAgICBpZiAobmV4dCAmJiBu
ZXh0LT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgUmVmUHRyPFRleHQ+IHRleHROb2RlID0gc3Rh
dGljX2Nhc3Q8VGV4dCo+KG5vZGUuZ2V0KCkpOworICAgICAgICBSZWZQdHI8VGV4dD4gdGV4dE5l
eHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obmV4dCk7CisgICAgICAgIHRleHROb2RlLT5hcHBlbmRE
YXRhKHRleHROZXh0LT5kYXRhKCksIGVjKTsKKyAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBpZiAodGV4dE5leHQtPnBhcmVudE5vZGUoKSkgLy8gTWlnaHQgaGF2
ZSBiZWVuIHJlbW92ZWQgYnkgbXV0YXRpb24gZXZlbnQuCisgICAgICAgICAgICB0ZXh0TmV4dC0+
cmVtb3ZlKGVjKTsKICAgICB9Ci0gICAgaWYgKGxlbmd0aCA+IGxpbmVTdGFydCkKLSAgICAgICAg
ZnJhZ21lbnQtPmFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZShkb2N1bWVudCgpLCB0ZXh0LnN1YnN0
cmluZyhsaW5lU3RhcnQsIGxlbmd0aCAtIGxpbmVTdGFydCkpLCBlYyk7Ci0gICAgcmVwbGFjZUNo
aWxkcmVuV2l0aEZyYWdtZW50KHRoaXMsIGZyYWdtZW50LnJlbGVhc2UoKSwgZWMpOwogfQogCiB2
b2lkIEhUTUxFbGVtZW50OjpzZXRPdXRlclRleHQoY29uc3QgU3RyaW5nICZ0ZXh0LCBFeGNlcHRp
b25Db2RlJiBlYykKQEAgLTQ2NSwzOSArNDg4LDM1IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OnNldE91
dGVyVGV4dChjb25zdCBTdHIKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIEZJWE1F
OiBUaGlzIGNyZWF0ZXMgYSBuZXcgdGV4dCBub2RlIGV2ZW4gd2hlbiB0aGUgdGV4dCBpcyBlbXB0
eS4KLSAgICAvLyBGSVhNRTogVGhpcyBjcmVhdGVzIGEgc2luZ2xlIHRleHQgbm9kZSBldmVuIHdo
ZW4gdGhlIHRleHQgaGFzIENSIGFuZCBMRgotICAgIC8vIGNoYXJhY3RlcnMgaW4gaXQuIEluc3Rl
YWQgaXQgc2hvdWxkIGNyZWF0ZSA8YnI+IGVsZW1lbnRzLgotICAgIFJlZlB0cjxUZXh0PiB0ID0g
VGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIHRleHQpOworICAgIC8vIFByZXNlcnZlIGVtcHR5IHRl
eHQgbm9kZSBpZiBvdXRlclRleHQgaXMgc2V0IHRvIGFuIGVtcHR5IHN0cmluZyBhbmQgbmVpdGhl
cgorICAgIC8vIHRoZSBwcmV2aW91cyBub3IgbmV4dCBzaWJsaW5nIGlzIGEgdGV4dCBub2RlIHRv
IGJlIGNvbXBhdGlibGUgd2l0aCBJRS4KKyAgICBSZWZQdHI8Tm9kZT4gcHJldiA9IHByZXZpb3Vz
U2libGluZygpOworICAgIFJlZlB0cjxOb2RlPiBuZXh0ID0gbmV4dFNpYmxpbmcoKTsKKyAgICBp
ZiAodGV4dC5pc0VtcHR5KCkgJiYgKCFwcmV2IHx8ICFwcmV2LT5pc1RleHROb2RlKCkpICYmICgh
bmV4dCB8fCAhbmV4dC0+aXNUZXh0Tm9kZSgpKSkgeworICAgICAgICBwYXJlbnQtPnJlcGxhY2VD
aGlsZChUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgIiIpLCB0aGlzLCBlYyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICBlYyA9IDA7Ci0gICAgcGFyZW50LT5yZXBsYWNlQ2hpbGQodCwg
dGhpcywgZWMpOworICAgIFJlZlB0cjxOb2RlPiBuZXdDaGlsZDsKKyAgICAvLyBDb252ZXJ0IHRl
eHQgdG8gZnJhZ21lbnQgd2l0aCA8YnI+IHRhZ3MgaW5zdGVhZCBvZiBsaW5lYnJlYWtzIGlmIG5l
ZWRlZC4KKyAgICBpZiAodGV4dC5jb250YWlucygnXHInKSB8fCB0ZXh0LmNvbnRhaW5zKCdcbicp
KQorICAgICAgICBuZXdDaGlsZCA9IHRleHRUb0ZyYWdtZW50KHRleHQsIGVjKTsKKyAgICBlbHNl
CisgICAgICAgIG5ld0NoaWxkID0gVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIHRleHQpOworCisg
ICAgaWYgKCF0aGlzIHx8ICFwYXJlbnROb2RlKCkgfHwgIWluRG9jdW1lbnQoKSkKKyAgICAgICAg
ZWMgPSBISUVSQVJDSFlfUkVRVUVTVF9FUlI7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47
CisgICAgcGFyZW50LT5yZXBsYWNlQ2hpbGQobmV3Q2hpbGQucmVsZWFzZSgpLCB0aGlzLCBlYyk7
CiAKLSAgICAvLyBJcyBwcmV2aW91cyBub2RlIGEgdGV4dCBub2RlPyBJZiBzbywgbWVyZ2UgaW50
byBpdC4KLSAgICBOb2RlKiBwcmV2ID0gdC0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgaWYgKHBy
ZXYgJiYgcHJldi0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0UHJl
diA9IHN0YXRpY19jYXN0PFRleHQqPihwcmV2KTsKLSAgICAgICAgdGV4dFByZXYtPmFwcGVuZERh
dGEodC0+ZGF0YSgpLCBlYyk7Ci0gICAgICAgIGlmIChlYykKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgdC0+cmVtb3ZlKGVjKTsKLSAgICAgICAgaWYgKGVjKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB0ID0gdGV4dFByZXY7Ci0gICAgfQorICAgIFJlZlB0cjxOb2RlPiBub2Rl
ID0gbmV4dCA/IG5leHQtPnByZXZpb3VzU2libGluZygpIDogMDsKKyAgICBpZiAoIWVjICYmIG5v
ZGUgJiYgbm9kZS0+aXNUZXh0Tm9kZSgpKQorICAgICAgICBtZXJnZVdpdGhOZXh0VGV4dE5vZGUo
bm9kZSwgZWMpOwogCi0gICAgLy8gSXMgbmV4dCBub2RlIGEgdGV4dCBub2RlPyBJZiBzbywgbWVy
Z2UgaXQgaW4uCi0gICAgTm9kZSogbmV4dCA9IHQtPm5leHRTaWJsaW5nKCk7Ci0gICAgaWYgKG5l
eHQgJiYgbmV4dC0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0TmV4
dCA9IHN0YXRpY19jYXN0PFRleHQqPihuZXh0KTsKLSAgICAgICAgdC0+YXBwZW5kRGF0YSh0ZXh0
TmV4dC0+ZGF0YSgpLCBlYyk7Ci0gICAgICAgIGlmIChlYykKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgdGV4dE5leHQtPnJlbW92ZShlYyk7Ci0gICAgICAgIGlmIChlYykKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFlYyAmJiBwcmV2ICYmIHByZXYtPmlzVGV4dE5v
ZGUoKSkKKyAgICAgICAgbWVyZ2VXaXRoTmV4dFRleHROb2RlKHByZXYsIGVjKTsKIH0KIAogTm9k
ZSogSFRNTEVsZW1lbnQ6Omluc2VydEFkamFjZW50KGNvbnN0IFN0cmluZyYgd2hlcmUsIE5vZGUq
IG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJiBlYykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVt
ZW50LmgJKHJldmlzaW9uIDc1NTM1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIEhUTUxGb3JtRWxlbWVudCogdmlydHVhbEZvcm0oKSBjb25zdDsKIAogICAgIE5vZGUqIGlu
c2VydEFkamFjZW50KGNvbnN0IFN0cmluZyYgd2hlcmUsIE5vZGUqIG5ld0NoaWxkLCBFeGNlcHRp
b25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiB0ZXh0VG9GcmFnbWVu
dChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiB9OwogCiBpbmxpbmUgSFRNTEVsZW1l
bnQ6OkhUTUxFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBk
b2N1bWVudCkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NjQwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDEtMTEgIEVtaWwgRWts
dW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBTZXR0aW5nIG91dGVyVGV4dCBzaG91bGQgY29udmVydCBDUi9MRiB0
byA8YnI+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MjI2OAorICAgICAgICAKKyAgICAgICAgQWRkIHRlc3QgZm9yIHNldHRpbmcgRWxlbWVudC5vdXRl
clRleHQuCisKKyAgICAgICAgKiBmYXN0L2RvbS9zZXQtb3V0ZXItdGV4dC1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL3NldC1vdXRlci10ZXh0Lmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvZG9tL3RleHQtbm9kZS1hcHBlbmQtZGF0YS1yZW1vdmUtY3Jhc2gtZXhw
ZWN0ZWQudHh0OiBDaGFuZ2VkCisgICAgICAgICAgICBleHBlY3RhdGlvbiB0byAiZGlkbid0IGNy
YXNoIiBmcm9tICJ0aHJldyBkb20gZXhjZXB0aW9uIiBhcyB0ZXN0CisgICAgICAgICAgICBhc3N1
bWVkIHRoZSBET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQgZXZlbnQgd291bGQgZmlyZSBiZWZvcmUg
dGhlIG5vZGUKKyAgICAgICAgICAgIHdvdWxkIGJlIHJlcGxhY2VkLgorICAgICAgICAqIGZhc3Qv
ZG9tL3RleHQtbm9kZS1hcHBlbmQtZGF0YS1yZW1vdmUtY3Jhc2guaHRtbDoKKwogMjAxMS0wMS0x
MiAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IE9qYW4gVmFmYWkuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9zZXQtb3V0ZXItdGV4dC1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vc2V0LW91dGVy
LXRleHQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20v
c2V0LW91dGVyLXRleHQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAK
K1JlcGxhY2VkIG5vZGUgdXNpbmcgb3V0ZXJUZXh0LgorcmVtb3Zpbmcgbm9kZSB1c2luZyBvdXRl
clRleHQuCitUZXN0aW5nIGFkZGluZyBicgordXNpbmcgb3V0ZXJUZXh0LgorUEFTUzogcmVwbGFj
ZQorUEFTUzogcmVtb3ZlCitQQVNTOiBlbXB0eSB0ZXh0IG5vZGUKK1BBU1M6IGxpbmUgYnJlYWsK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL3NldC1vdXRlci10ZXh0Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vc2V0LW91dGVyLXRleHQuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL3NldC1vdXRlci10ZXh0Lmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTMgQEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHN0eWxlPgorICAgICAg
ICBwcmUgeyBtYXJnaW46IDA7IH0KKyAgICA8L3N0eWxlPgorICAgIDxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvZHVtcC1hcy1tYXJrdXAuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+Cisg
ICAgTWFya3VwLm5vQXV0b0R1bXAoKTsKKyAgICAKKyAgICBmdW5jdGlvbiBhc3NlcnRNYXJrdXAo
bmFtZSwgZWxlbWVudCwgZXhwZWN0ZWQpIHsKKyAgICAgIHZhciBtYXJrdXAgPSBNYXJrdXAuZ2V0
KGVsZW1lbnQpOworICAgICAgaWYgKG1hcmt1cCA9PSBleHBlY3RlZCkKKyAgICAgICAgICBsb2co
J1BBU1M6ICcgKyBuYW1lKTsKKyAgICAgIGVsc2UKKyAgICAgICAgICBsb2coJ0ZBSUw6ICcgKyBu
YW1lICArICdcbldhczpcbicgKyBtYXJrdXAgKyAnXG5FeHBlY3RlZDpcbicgKyBleHBlY3RlZCk7
CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIGxvZyh0ZXh0KSB7CisgICAgICB2YXIgZWwgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTsKKyAgICAgIGVsLmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKTsKKyAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdyZXN1bHQnKS5hcHBlbmRDaGlsZChlbCk7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHJ1
blRlc3QoKSB7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCkKKworICAgICAgICB2YXIg
aXRlbXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbGknKTsKKworICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdFJlcGxhY2UnKS5vdXRlclRleHQgPSAnUmVwbGFj
ZWQnOworICAgICAgICBhc3NlcnRNYXJrdXAoJ3JlcGxhY2UnLCBpdGVtc1swXSwgJ3wgIlJlcGxh
Y2VkIG5vZGUgdXNpbmcgb3V0ZXJUZXh0LiInKTsKKyAgICAgICAgCisgICAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCd0ZXN0UmVtb3ZlJykub3V0ZXJUZXh0ID0gJyc7CisgICAgICAgIGFz
c2VydE1hcmt1cCgncmVtb3ZlJywgaXRlbXNbMV0sICd8ICIgcmVtb3Zpbmcgbm9kZSB1c2luZyBv
dXRlclRleHQuIicpOworCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0RW1w
dHknKS5vdXRlclRleHQgPSAnJzsKKyAgICAgICAgYXNzZXJ0TWFya3VwKCdlbXB0eSB0ZXh0IG5v
ZGUnLCBpdGVtc1syXSwgJ3wgIiInKTsKKyAgICAgICAgCisgICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCd0ZXN0QWRkQnInKS5vdXRlclRleHQgPSAnYnJcbic7CisgICAgICAgIGFzc2Vy
dE1hcmt1cCgnbGluZSBicmVhaycsIGl0ZW1zWzNdLCAnfCAiVGVzdGluZyBhZGRpbmcgYnIiXG58
IDxicj5cbnwgIiB1c2luZyBvdXRlclRleHQuIicpOworICAgIH0KKyAgICA8L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKyAgICA8dWw+CisgICAgICA8bGk+PHNw
YW4gaWQ9InRlc3RSZXBsYWNlIj5UZXN0aW5nIHJlcGxhY2luZzwvc3Bhbj4gbm9kZSB1c2luZyBv
dXRlclRleHQuPC9saT4KKyAgICAgIDxsaT48c3BhbiBpZD0idGVzdFJlbW92ZSI+VGVzdGluZzwv
c3Bhbj4gcmVtb3Zpbmcgbm9kZSB1c2luZyBvdXRlclRleHQuPC9saT4KKyAgICAgIDxsaT48c3Bh
biBpZD0idGVzdEVtcHR5Ij5UZXN0IHJlbW92aW5nIGVudGlyZSBub2RlPC9zcGFuPjwvbGk+Cisg
ICAgICA8bGk+VGVzdGluZyBhZGRpbmcgPHNwYW4gaWQ9InRlc3RBZGRCciI+bGluZSBicmVhazwv
c3Bhbj4gdXNpbmcgb3V0ZXJUZXh0LjwvbGk+CisgICAgPC91bD4KKyAgICA8ZGl2IGlkPSJyZXN1
bHQiPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20v
dGV4dC1ub2RlLWFwcGVuZC1kYXRhLXJlbW92ZS1jcmFzaC1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vdGV4dC1ub2RlLWFwcGVuZC1kYXRhLXJlbW92ZS1j
cmFzaC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDc1NTM1KQorKysgTGF5b3V0VGVzdHMvZmFzdC9k
b20vdGV4dC1ub2RlLWFwcGVuZC1kYXRhLXJlbW92ZS1jcmFzaC1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTEgKzEgQEAKLVBBU1MsIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3Rl
ZCAtIEVycm9yOiBISUVSQVJDSFlfUkVRVUVTVF9FUlI6IERPTSBFeGNlcHRpb24gMworUEFTUywg
ZGlkbid0IGNyYXNoLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vdGV4dC1ub2RlLWFwcGVu
ZC1kYXRhLXJlbW92ZS1jcmFzaC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
ZG9tL3RleHQtbm9kZS1hcHBlbmQtZGF0YS1yZW1vdmUtY3Jhc2guaHRtbAkocmV2aXNpb24gNzU1
MzUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS90ZXh0LW5vZGUtYXBwZW5kLWRhdGEtcmVtb3Zl
LWNyYXNoLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEzLDI0ICsxMywyNCBAQCBmdW5jdGlvbiBy
dW5UZXN0KCkNCiAgICAgdHJ5IHsNCiAgICAgICAgZGl2QmxvY2suYWRkRXZlbnRMaXN0ZW5lcigi
RE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkIiwgZXZlbnRMaXN0ZW5lciwgZmFsc2UpOw0KICAgICAg
ICBwQmxvY2sub3V0ZXJUZXh0ID0gInRleHQiOw0KKyAgICAgICBkaXZCbG9jay5pbm5lckhUTUwg
PSAiUEFTUywgZGlkbid0IGNyYXNoLiI7DQogICAgIH0NCiAgICAgY2F0Y2ggKGV4Y2VwdGlvbikg
ew0KLSAgICAgICBkaXZCbG9jay5pbm5lckhUTUwgPSAiUEFTUywgdGhyZXcgYW4gZXhjZXB0aW9u
IGFzIGV4cGVjdGVkIC0gIiArIGV4Y2VwdGlvbjsNCi0gICAgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikNCi0gICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsNCi0gICB9DQorICAgICAgIGRpdkJsb2NrLmlubmVySFRNTCA9ICJUaHJldyBhbiBleGNl
cHRpb24gLSAiICsgZXhjZXB0aW9uOw0KKyAgICB9DQorICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpDQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
DQogfQ0KIA0KIGZ1bmN0aW9uIGV2ZW50TGlzdGVuZXIoKQ0KIHsNCi0gICAgY291bnQgKz0gMTsN
Ci0gICAgaWYgKGNvdW50IDwgMikNCi0gICAgICAgIHJldHVybjsNCi0gICAgdmFyIHJhbmdlID0g
ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsNCi0gICAgcmFuZ2Uuc2V0U3RhcnQoZGl2QmxvY2ssIDAp
Ow0KLSAgICByYW5nZS5zZXRFbmQoZGl2QmxvY2ssIGRpdkJsb2NrLmNoaWxkTm9kZXMubGVuZ3Ro
IC0gMSk7DQotICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7DQotICAgIGdjKCk7DQorICAgIHRy
eSB7DQorICAgICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsNCisgICAgICBy
YW5nZS5zZXRTdGFydChkaXZCbG9jaywgMCk7DQorICAgICAgcmFuZ2Uuc2V0RW5kKGRpdkJsb2Nr
LCBkaXZCbG9jay5jaGlsZE5vZGVzLmxlbmd0aCAtIDEpOw0KKyAgICAgIHJhbmdlLmRlbGV0ZUNv
bnRlbnRzKCk7DQorICAgICAgZ2MoKTsNCisgIH0gY2F0Y2goZSkgeyB9DQogfQ0KIA0KIGZ1bmN0
aW9uIGdjKCkNCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78769</attachid>
            <date>2011-01-12 18:26:35 -0800</date>
            <delta_ts>2011-01-13 11:34:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>outertext.patch</filename>
            <type>text/plain</type>
            <size>12307</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NjQwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDEtMTEgIEVtaWwgRWts
dW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBTZXR0aW5nIG91dGVyVGV4dCBzaG91bGQgY29udmVydCBDUi9MRiB0
byA8YnI+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MjI2OAorCisgICAgICAgIE1ha2Ugc2V0IG91dGVyVGV4dCBzdXBwb3J0IGxpbmUgYnJlYWtzIChz
aGFyaW5nIHRoZSB0ZXh0IHRvIGZyYWdtZW50IGNvZGUKKyAgICAgICAgd2l0aCBzZXRJbm5lclRl
eHQpIGFuZCBoYW5kbGUgZW1wdHkgdGV4dCBub2RlcyB0aGUgc2FtZSB3YXkgSUUgZG9lcy4KKwor
ICAgICAgICBUZXN0OiBmYXN0L2RvbS9zZXQtb3V0ZXItdGV4dC5odG1sCisKKyAgICAgICAgKiBo
dG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50Ojp0ZXh0
VG9GcmFnbWVudCk6IFNoYXJlZCBiZXR3ZWVuIHNldElubmVyVGV4dCBhbmQgc2V0T3V0ZXJUZXh0
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6c2V0SW5uZXJUZXh0KTogU3BsaXQgb3V0
IHRleHQgcGFyc2luZyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6bWVyZ2VXaXRoTmV4dFRleHRO
b2RlKTogU3BsaXQgb3V0IHRleHQgbm9kZSBtZXJnaW5nIGNvZGUuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudDo6c2V0T3V0ZXJUZXh0KTogQWRkZWQgc3VwcG9ydCBmb3IgbGluZSBicmVh
a3MuCisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5oOgorCiAyMDExLTAxLTEyICBDaHJpcyBN
YXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBG
cmFzZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gNzU1
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzc2LDYgKzM3NiwzOSBAQCB2b2lkIEhUTUxFbGVtZW50OjpzZXRPdXRlckhUTUwoY29u
c3QgU3RyCiAgICAgfQogfQogCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEhUTUxFbGVt
ZW50Ojp0ZXh0VG9GcmFnbWVudChjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IERvY3VtZW50RnJh
Z21lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKKyAgICB1bnNpZ25lZCBpbnQgaSwgbGVuZ3RoID0g
dGV4dC5sZW5ndGgoKTsKKyAgICBVQ2hhciBjID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBz
dGFydCA9IDA7IHN0YXJ0IDwgbGVuZ3RoOyApIHsKKworICAgICAgICAvLyBGaW5kIG5leHQgbGlu
ZSBicmVhay4KKyAgICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBsZW5ndGg7IGkrKykgeworICAg
ICAgICAgIGMgPSB0ZXh0W2ldOworICAgICAgICAgIGlmIChjID09ICdccicgfHwgYyA9PSAnXG4n
KQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGZyYWdtZW50LT5h
cHBlbmRDaGlsZChUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgdGV4dC5zdWJzdHJpbmcoc3RhcnQs
IGkgLSBzdGFydCkpLCBlYyk7CisgICAgICAgIGlmIChlYykKKyAgICAgICAgICAgIHJldHVybiAw
OworCisgICAgICAgIGlmIChjID09ICdccicgfHwgYyA9PSAnXG4nKSB7CisgICAgICAgICAgICBm
cmFnbWVudC0+YXBwZW5kQ2hpbGQoSFRNTEJSRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpLCBl
Yyk7CisgICAgICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICAvLyBNYWtlIHN1cmUgXHJcbiBkb2Vzbid0IHJlc3VsdCBpbiB0d28gbGluZSBicmVh
a3MuCisgICAgICAgICAgICBpZiAoYyA9PSAnXHInICYmIGkgKyAxIDwgbGVuZ3RoICYmIHRleHRb
aSArIDFdID09ICdcbicpCisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICB9CisKKyAgICAg
ICAgc3RhcnQgPSBpICsgMTsgLy8gQ2hhcmFjdGVyIGFmdGVyIGxpbmUgYnJlYWsuCisgICAgfQor
CisgICAgcmV0dXJuIGZyYWdtZW50OworfQorCiB2b2lkIEhUTUxFbGVtZW50OjpzZXRJbm5lclRl
eHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoaWVG
b3JiaWRzSW5zZXJ0SFRNTCgpKSB7CkBAIC00MTksMzAgKzQ1MiwyNSBAQCB2b2lkIEhUTUxFbGVt
ZW50OjpzZXRJbm5lclRleHQoY29uc3QgU3RyCiAKICAgICAvLyBBZGQgdGV4dCBub2RlcyBhbmQg
PGJyPiBlbGVtZW50cy4KICAgICBlYyA9IDA7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGZyYWdtZW50ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwotICAgIGlu
dCBsaW5lU3RhcnQgPSAwOwotICAgIFVDaGFyIHByZXYgPSAwOwotICAgIGludCBsZW5ndGggPSB0
ZXh0Lmxlbmd0aCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgVUNoYXIgYyA9IHRleHRbaV07Ci0gICAgICAgIGlmIChjID09ICdcbicgfHwgYyA9PSAn
XHInKSB7Ci0gICAgICAgICAgICBpZiAoaSA+IGxpbmVTdGFydCkgewotICAgICAgICAgICAgICAg
IGZyYWdtZW50LT5hcHBlbmRDaGlsZChUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgdGV4dC5zdWJz
dHJpbmcobGluZVN0YXJ0LCBpIC0gbGluZVN0YXJ0KSksIGVjKTsKLSAgICAgICAgICAgICAgICBp
ZiAoZWMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmICghKGMgPT0gJ1xuJyAmJiBpICE9IDAgJiYgcHJldiA9PSAnXHInKSkgewotICAg
ICAgICAgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChIVE1MQlJFbGVtZW50OjpjcmVhdGUo
ZG9jdW1lbnQoKSksIGVjKTsKLSAgICAgICAgICAgICAgICBpZiAoZWMpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpbmVTdGFydCA9IGkg
KyAxOwotICAgICAgICB9Ci0gICAgICAgIHByZXYgPSBjOwotICAgIH0KLSAgICBpZiAobGVuZ3Ro
ID4gbGluZVN0YXJ0KQotICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRl
KGRvY3VtZW50KCksIHRleHQuc3Vic3RyaW5nKGxpbmVTdGFydCwgbGVuZ3RoIC0gbGluZVN0YXJ0
KSksIGVjKTsKLSAgICByZXBsYWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQodGhpcywgZnJhZ21lbnQu
cmVsZWFzZSgpLCBlYyk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0g
dGV4dFRvRnJhZ21lbnQodGV4dCwgZWMpOworICAgIGlmICghZWMpCisgICAgICAgIHJlcGxhY2VD
aGlsZHJlbldpdGhGcmFnbWVudCh0aGlzLCBmcmFnbWVudC5yZWxlYXNlKCksIGVjKTsKK30KKwor
dm9pZCBtZXJnZVdpdGhOZXh0VGV4dE5vZGUoUmVmUHRyPE5vZGU+IG5vZGUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIEFTU0VSVChub2RlICYmIG5vZGUtPmlzVGV4dE5vZGUoKSk7CisgICAg
Tm9kZSogbmV4dCA9IG5vZGUtPm5leHRTaWJsaW5nKCk7CisgICAgaWYgKCFuZXh0IHx8ICFuZXh0
LT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSZWZQdHI8VGV4dD4g
dGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obm9kZS5nZXQoKSk7CisgICAgUmVmUHRyPFRl
eHQ+IHRleHROZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG5leHQpOworICAgIHRleHROb2RlLT5h
cHBlbmREYXRhKHRleHROZXh0LT5kYXRhKCksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAodGV4dE5leHQtPnBhcmVudE5vZGUoKSkgLy8gTWlnaHQgaGF2ZSBiZWVu
IHJlbW92ZWQgYnkgbXV0YXRpb24gZXZlbnQuCisgICAgICAgIHRleHROZXh0LT5yZW1vdmUoZWMp
OwogfQogCiB2b2lkIEhUTUxFbGVtZW50OjpzZXRPdXRlclRleHQoY29uc3QgU3RyaW5nICZ0ZXh0
LCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTQ2NSwzOSArNDkzLDI5IEBAIHZvaWQgSFRNTEVsZW1l
bnQ6OnNldE91dGVyVGV4dChjb25zdCBTdHIKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IC8vIEZJWE1FOiBUaGlzIGNyZWF0ZXMgYSBuZXcgdGV4dCBub2RlIGV2ZW4gd2hlbiB0aGUgdGV4
dCBpcyBlbXB0eS4KLSAgICAvLyBGSVhNRTogVGhpcyBjcmVhdGVzIGEgc2luZ2xlIHRleHQgbm9k
ZSBldmVuIHdoZW4gdGhlIHRleHQgaGFzIENSIGFuZCBMRgotICAgIC8vIGNoYXJhY3RlcnMgaW4g
aXQuIEluc3RlYWQgaXQgc2hvdWxkIGNyZWF0ZSA8YnI+IGVsZW1lbnRzLgotICAgIFJlZlB0cjxU
ZXh0PiB0ID0gVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIHRleHQpOworICAgIFJlZlB0cjxOb2Rl
PiBwcmV2ID0gcHJldmlvdXNTaWJsaW5nKCk7CisgICAgUmVmUHRyPE5vZGU+IG5leHQgPSBuZXh0
U2libGluZygpOworICAgIFJlZlB0cjxOb2RlPiBuZXdDaGlsZDsKICAgICBlYyA9IDA7Ci0gICAg
cGFyZW50LT5yZXBsYWNlQ2hpbGQodCwgdGhpcywgZWMpOworICAgIAorICAgIC8vIENvbnZlcnQg
dGV4dCB0byBmcmFnbWVudCB3aXRoIDxicj4gdGFncyBpbnN0ZWFkIG9mIGxpbmVicmVha3MgaWYg
bmVlZGVkLgorICAgIGlmICh0ZXh0LmNvbnRhaW5zKCdccicpIHx8IHRleHQuY29udGFpbnMoJ1xu
JykpCisgICAgICAgIG5ld0NoaWxkID0gdGV4dFRvRnJhZ21lbnQodGV4dCwgZWMpOworICAgIGVs
c2UKKyAgICAgICAgbmV3Q2hpbGQgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgdGV4dCk7CisK
KyAgICBpZiAoIXRoaXMgfHwgIXBhcmVudE5vZGUoKSkKKyAgICAgICAgZWMgPSBISUVSQVJDSFlf
UkVRVUVTVF9FUlI7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47CisgICAgcGFyZW50LT5y
ZXBsYWNlQ2hpbGQobmV3Q2hpbGQucmVsZWFzZSgpLCB0aGlzLCBlYyk7CiAKLSAgICAvLyBJcyBw
cmV2aW91cyBub2RlIGEgdGV4dCBub2RlPyBJZiBzbywgbWVyZ2UgaW50byBpdC4KLSAgICBOb2Rl
KiBwcmV2ID0gdC0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgaWYgKHByZXYgJiYgcHJldi0+aXNU
ZXh0Tm9kZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0UHJldiA9IHN0YXRpY19jYXN0
PFRleHQqPihwcmV2KTsKLSAgICAgICAgdGV4dFByZXYtPmFwcGVuZERhdGEodC0+ZGF0YSgpLCBl
Yyk7Ci0gICAgICAgIGlmIChlYykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdC0+cmVt
b3ZlKGVjKTsKLSAgICAgICAgaWYgKGVjKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0
ID0gdGV4dFByZXY7Ci0gICAgfQorICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbmV4dCA/IG5leHQt
PnByZXZpb3VzU2libGluZygpIDogMDsKKyAgICBpZiAoIWVjICYmIG5vZGUgJiYgbm9kZS0+aXNU
ZXh0Tm9kZSgpKQorICAgICAgICBtZXJnZVdpdGhOZXh0VGV4dE5vZGUobm9kZSwgZWMpOwogCi0g
ICAgLy8gSXMgbmV4dCBub2RlIGEgdGV4dCBub2RlPyBJZiBzbywgbWVyZ2UgaXQgaW4uCi0gICAg
Tm9kZSogbmV4dCA9IHQtPm5leHRTaWJsaW5nKCk7Ci0gICAgaWYgKG5leHQgJiYgbmV4dC0+aXNU
ZXh0Tm9kZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0TmV4dCA9IHN0YXRpY19jYXN0
PFRleHQqPihuZXh0KTsKLSAgICAgICAgdC0+YXBwZW5kRGF0YSh0ZXh0TmV4dC0+ZGF0YSgpLCBl
Yyk7Ci0gICAgICAgIGlmIChlYykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGV4dE5l
eHQtPnJlbW92ZShlYyk7Ci0gICAgICAgIGlmIChlYykKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKCFlYyAmJiBwcmV2ICYmIHByZXYtPmlzVGV4dE5vZGUoKSkKKyAgICAgICAg
bWVyZ2VXaXRoTmV4dFRleHROb2RlKHByZXYsIGVjKTsKIH0KIAogTm9kZSogSFRNTEVsZW1lbnQ6
Omluc2VydEFkamFjZW50KGNvbnN0IFN0cmluZyYgd2hlcmUsIE5vZGUqIG5ld0NoaWxkLCBFeGNl
cHRpb25Db2RlJiBlYykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgJKHJldmlzaW9u
IDc1NTM1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDAsNiArMTAwLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEhUTUxGb3JtRWxl
bWVudCogdmlydHVhbEZvcm0oKSBjb25zdDsKIAogICAgIE5vZGUqIGluc2VydEFkamFjZW50KGNv
bnN0IFN0cmluZyYgd2hlcmUsIE5vZGUqIG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJik7CisgICAg
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiB0ZXh0VG9GcmFnbWVudChjb25zdCBTdHJpbmcm
LCBFeGNlcHRpb25Db2RlJik7CiB9OwogCiBpbmxpbmUgSFRNTEVsZW1lbnQ6OkhUTUxFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDc1NjQwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDEtMTEgIEVtaWwgRWtsdW5kICA8ZWFlQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBTZXR0aW5nIG91dGVyVGV4dCBzaG91bGQgY29udmVydCBDUi9MRiB0byA8YnI+CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjI2OAorICAgICAgICAK
KyAgICAgICAgQWRkIHRlc3QgZm9yIHNldHRpbmcgRWxlbWVudC5vdXRlclRleHQuCisKKyAgICAg
ICAgKiBmYXN0L2RvbS9zZXQtb3V0ZXItdGV4dC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZG9tL3NldC1vdXRlci10ZXh0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
ZG9tL3RleHQtbm9kZS1hcHBlbmQtZGF0YS1yZW1vdmUtY3Jhc2gtZXhwZWN0ZWQudHh0OiBDaGFu
Z2VkCisgICAgICAgICAgICBleHBlY3RhdGlvbiB0byAiZGlkbid0IGNyYXNoIiBmcm9tICJ0aHJl
dyBkb20gZXhjZXB0aW9uIiBhcyB0ZXN0CisgICAgICAgICAgICBhc3N1bWVkIHRoZSBET01DaGFy
YWN0ZXJEYXRhTW9kaWZpZWQgZXZlbnQgd291bGQgZmlyZSBiZWZvcmUgdGhlIG5vZGUKKyAgICAg
ICAgICAgIHdvdWxkIGJlIHJlcGxhY2VkLgorICAgICAgICAqIGZhc3QvZG9tL3RleHQtbm9kZS1h
cHBlbmQtZGF0YS1yZW1vdmUtY3Jhc2guaHRtbDoKKwogMjAxMS0wMS0xMiAgVG9ueSBDaGFuZyAg
PHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9qYW4gVmFmYWkuCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9zZXQtb3V0ZXItdGV4dC1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vc2V0LW91dGVyLXRleHQtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vc2V0LW91dGVyLXRleHQt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAKK1JlcGxhY2VkIG5vZGUg
dXNpbmcgb3V0ZXJUZXh0LgorcmVtb3Zpbmcgbm9kZSB1c2luZyBvdXRlclRleHQuCitUZXN0aW5n
IGFkZGluZyBicgordXNpbmcgb3V0ZXJUZXh0LgorUEFTUzogcmVwbGFjZQorUEFTUzogcmVtb3Zl
CitQQVNTOiBlbXB0eSB0ZXh0IG5vZGUKK1BBU1M6IGxpbmUgYnJlYWsKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvZG9tL3NldC1vdXRlci10ZXh0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9kb20vc2V0LW91dGVyLXRleHQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3QvZG9tL3NldC1vdXRlci10ZXh0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NTMgQEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHN0eWxlPgorICAgICAgICBwcmUgeyBtYXJnaW46
IDA7IH0KKyAgICA8L3N0eWxlPgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvZHVt
cC1hcy1tYXJrdXAuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgTWFya3VwLm5vQXV0
b0R1bXAoKTsKKyAgICAKKyAgICBmdW5jdGlvbiBhc3NlcnRNYXJrdXAobmFtZSwgZWxlbWVudCwg
ZXhwZWN0ZWQpIHsKKyAgICAgIHZhciBtYXJrdXAgPSBNYXJrdXAuZ2V0KGVsZW1lbnQpOworICAg
ICAgaWYgKG1hcmt1cCA9PSBleHBlY3RlZCkKKyAgICAgICAgICBsb2coJ1BBU1M6ICcgKyBuYW1l
KTsKKyAgICAgIGVsc2UKKyAgICAgICAgICBsb2coJ0ZBSUw6ICcgKyBuYW1lICArICdcbldhczpc
bicgKyBtYXJrdXAgKyAnXG5FeHBlY3RlZDpcbicgKyBleHBlY3RlZCk7CisgICAgfQorICAgIAor
ICAgIGZ1bmN0aW9uIGxvZyh0ZXh0KSB7CisgICAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdwcmUnKTsKKyAgICAgIGVsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKHRleHQpKTsKKyAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQnKS5hcHBl
bmRDaGlsZChlbCk7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCkKKworICAgICAgICB2YXIgaXRlbXMgPSBkb2N1bWVu
dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbGknKTsKKworICAgICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgndGVzdFJlcGxhY2UnKS5vdXRlclRleHQgPSAnUmVwbGFjZWQnOworICAgICAgICBh
c3NlcnRNYXJrdXAoJ3JlcGxhY2UnLCBpdGVtc1swXSwgJ3wgIlJlcGxhY2VkIG5vZGUgdXNpbmcg
b3V0ZXJUZXh0LiInKTsKKyAgICAgICAgCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCd0ZXN0UmVtb3ZlJykub3V0ZXJUZXh0ID0gJyc7CisgICAgICAgIGFzc2VydE1hcmt1cCgncmVt
b3ZlJywgaXRlbXNbMV0sICd8ICIgcmVtb3Zpbmcgbm9kZSB1c2luZyBvdXRlclRleHQuIicpOwor
CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0RW1wdHknKS5vdXRlclRleHQg
PSAnJzsKKyAgICAgICAgYXNzZXJ0TWFya3VwKCdlbXB0eSB0ZXh0IG5vZGUnLCBpdGVtc1syXSwg
J3wgIiInKTsKKyAgICAgICAgCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0
QWRkQnInKS5vdXRlclRleHQgPSAnYnJcbic7CisgICAgICAgIGFzc2VydE1hcmt1cCgnbGluZSBi
cmVhaycsIGl0ZW1zWzNdLCAnfCAiVGVzdGluZyBhZGRpbmcgYnIiXG58IDxicj5cbnwgIiB1c2lu
ZyBvdXRlclRleHQuIicpOworICAgIH0KKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9u
bG9hZD0icnVuVGVzdCgpIj4KKyAgICA8dWw+CisgICAgICA8bGk+PHNwYW4gaWQ9InRlc3RSZXBs
YWNlIj5UZXN0aW5nIHJlcGxhY2luZzwvc3Bhbj4gbm9kZSB1c2luZyBvdXRlclRleHQuPC9saT4K
KyAgICAgIDxsaT48c3BhbiBpZD0idGVzdFJlbW92ZSI+VGVzdGluZzwvc3Bhbj4gcmVtb3Zpbmcg
bm9kZSB1c2luZyBvdXRlclRleHQuPC9saT4KKyAgICAgIDxsaT48c3BhbiBpZD0idGVzdEVtcHR5
Ij5UZXN0IHJlbW92aW5nIGVudGlyZSBub2RlPC9zcGFuPjwvbGk+CisgICAgICA8bGk+VGVzdGlu
ZyBhZGRpbmcgPHNwYW4gaWQ9InRlc3RBZGRCciI+bGluZSBicmVhazwvc3Bhbj4gdXNpbmcgb3V0
ZXJUZXh0LjwvbGk+CisgICAgPC91bD4KKyAgICA8ZGl2IGlkPSJyZXN1bHQiPjwvZGl2PgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vdGV4dC1ub2RlLWFwcGVu
ZC1kYXRhLXJlbW92ZS1jcmFzaC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9kb20vdGV4dC1ub2RlLWFwcGVuZC1kYXRhLXJlbW92ZS1jcmFzaC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDc1NTM1KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vdGV4dC1ub2RlLWFw
cGVuZC1kYXRhLXJlbW92ZS1jcmFzaC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEg
KzEgQEAKLVBBU1MsIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZCAtIEVycm9yOiBISUVS
QVJDSFlfUkVRVUVTVF9FUlI6IERPTSBFeGNlcHRpb24gMworUEFTUywgZGlkbid0IGNyYXNoLgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vdGV4dC1ub2RlLWFwcGVuZC1kYXRhLXJlbW92ZS1j
cmFzaC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL3RleHQtbm9kZS1h
cHBlbmQtZGF0YS1yZW1vdmUtY3Jhc2guaHRtbAkocmV2aXNpb24gNzU1MzUpCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS90ZXh0LW5vZGUtYXBwZW5kLWRhdGEtcmVtb3ZlLWNyYXNoLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTEzLDI0ICsxMywyNCBAQCBmdW5jdGlvbiBydW5UZXN0KCkNCiAgICAg
dHJ5IHsNCiAgICAgICAgZGl2QmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ2hhcmFjdGVyRGF0
YU1vZGlmaWVkIiwgZXZlbnRMaXN0ZW5lciwgZmFsc2UpOw0KICAgICAgICBwQmxvY2sub3V0ZXJU
ZXh0ID0gInRleHQiOw0KKyAgICAgICBkaXZCbG9jay5pbm5lckhUTUwgPSAiUEFTUywgZGlkbid0
IGNyYXNoLiI7DQogICAgIH0NCiAgICAgY2F0Y2ggKGV4Y2VwdGlvbikgew0KLSAgICAgICBkaXZC
bG9jay5pbm5lckhUTUwgPSAiUEFTUywgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkIC0g
IiArIGV4Y2VwdGlvbjsNCi0gICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikN
Ci0gICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsNCi0gICB9DQor
ICAgICAgIGRpdkJsb2NrLmlubmVySFRNTCA9ICJUaHJldyBhbiBleGNlcHRpb24gLSAiICsgZXhj
ZXB0aW9uOw0KKyAgICB9DQorICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpDQor
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7DQogfQ0KIA0KIGZ1bmN0
aW9uIGV2ZW50TGlzdGVuZXIoKQ0KIHsNCi0gICAgY291bnQgKz0gMTsNCi0gICAgaWYgKGNvdW50
IDwgMikNCi0gICAgICAgIHJldHVybjsNCi0gICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRl
UmFuZ2UoKTsNCi0gICAgcmFuZ2Uuc2V0U3RhcnQoZGl2QmxvY2ssIDApOw0KLSAgICByYW5nZS5z
ZXRFbmQoZGl2QmxvY2ssIGRpdkJsb2NrLmNoaWxkTm9kZXMubGVuZ3RoIC0gMSk7DQotICAgIHJh
bmdlLmRlbGV0ZUNvbnRlbnRzKCk7DQotICAgIGdjKCk7DQorICAgIHRyeSB7DQorICAgICAgdmFy
IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsNCisgICAgICByYW5nZS5zZXRTdGFydChk
aXZCbG9jaywgMCk7DQorICAgICAgcmFuZ2Uuc2V0RW5kKGRpdkJsb2NrLCBkaXZCbG9jay5jaGls
ZE5vZGVzLmxlbmd0aCAtIDEpOw0KKyAgICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7DQorICAg
ICAgZ2MoKTsNCisgIH0gY2F0Y2goZSkgeyB9DQogfQ0KIA0KIGZ1bmN0aW9uIGdjKCkNCg==
</data>
<flag name="review"
          id="70133"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="70137"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78835</attachid>
            <date>2011-01-13 11:34:14 -0800</date>
            <delta_ts>2011-01-13 12:52:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>outertext.patch</filename>
            <type>text/plain</type>
            <size>13643</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NjY5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDEtMTEgIEVtaWwgRWts
dW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBTZXR0aW5nIG91dGVyVGV4dCBzaG91bGQgY29udmVydCBDUi9MRiB0
byA8YnI+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MjI2OAorCisgICAgICAgIE1ha2Ugc2V0IG91dGVyVGV4dCBzdXBwb3J0IGxpbmUgYnJlYWtzIChz
aGFyaW5nIHRoZSB0ZXh0IHRvIGZyYWdtZW50IGNvZGUKKyAgICAgICAgd2l0aCBzZXRJbm5lclRl
eHQpIGFuZCBoYW5kbGUgZW1wdHkgdGV4dCBub2RlcyB0aGUgc2FtZSB3YXkgSUUgZG9lcy4KKwor
ICAgICAgICBUZXN0OiBmYXN0L2RvbS9zZXQtb3V0ZXItdGV4dC5odG1sCisKKyAgICAgICAgKiBo
dG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50Ojp0ZXh0
VG9GcmFnbWVudCk6IFNoYXJlZCBiZXR3ZWVuIHNldElubmVyVGV4dCBhbmQgc2V0T3V0ZXJUZXh0
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6c2V0SW5uZXJUZXh0KTogU3BsaXQgb3V0
IHRleHQgcGFyc2luZyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6bWVyZ2VXaXRoTmV4dFRleHRO
b2RlKTogU3BsaXQgb3V0IHRleHQgbm9kZSBtZXJnaW5nIGNvZGUuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudDo6c2V0T3V0ZXJUZXh0KTogQWRkZWQgc3VwcG9ydCBmb3IgbGluZSBicmVh
a3MuCisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5oOgorCiAyMDExLTAxLTEyICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQW5vdGhlciBidWlsZCBmaXguCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gNzU2NjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc2LDYg
KzM3NiwzOSBAQCB2b2lkIEhUTUxFbGVtZW50OjpzZXRPdXRlckhUTUwoY29uc3QgU3RyCiAgICAg
fQogfQogCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEhUTUxFbGVtZW50Ojp0ZXh0VG9G
cmFnbWVudChjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0
ZShkb2N1bWVudCgpKTsKKyAgICB1bnNpZ25lZCBpbnQgaSwgbGVuZ3RoID0gdGV4dC5sZW5ndGgo
KTsKKyAgICBVQ2hhciBjID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBzdGFydCA9IDA7IHN0
YXJ0IDwgbGVuZ3RoOyApIHsKKworICAgICAgICAvLyBGaW5kIG5leHQgbGluZSBicmVhay4KKyAg
ICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgIGMgPSB0
ZXh0W2ldOworICAgICAgICAgIGlmIChjID09ICdccicgfHwgYyA9PSAnXG4nKQorICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChU
ZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgdGV4dC5zdWJzdHJpbmcoc3RhcnQsIGkgLSBzdGFydCkp
LCBlYyk7CisgICAgICAgIGlmIChlYykKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAg
IGlmIChjID09ICdccicgfHwgYyA9PSAnXG4nKSB7CisgICAgICAgICAgICBmcmFnbWVudC0+YXBw
ZW5kQ2hpbGQoSFRNTEJSRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpLCBlYyk7CisgICAgICAg
ICAgICBpZiAoZWMpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAvLyBN
YWtlIHN1cmUgXHJcbiBkb2Vzbid0IHJlc3VsdCBpbiB0d28gbGluZSBicmVha3MuCisgICAgICAg
ICAgICBpZiAoYyA9PSAnXHInICYmIGkgKyAxIDwgbGVuZ3RoICYmIHRleHRbaSArIDFdID09ICdc
bicpCisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICB9CisKKyAgICAgICAgc3RhcnQgPSBp
ICsgMTsgLy8gQ2hhcmFjdGVyIGFmdGVyIGxpbmUgYnJlYWsuCisgICAgfQorCisgICAgcmV0dXJu
IGZyYWdtZW50OworfQorCiB2b2lkIEhUTUxFbGVtZW50OjpzZXRJbm5lclRleHQoY29uc3QgU3Ry
aW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoaWVGb3JiaWRzSW5zZXJ0
SFRNTCgpKSB7CkBAIC00MTksMzAgKzQ1MiwyNSBAQCB2b2lkIEhUTUxFbGVtZW50OjpzZXRJbm5l
clRleHQoY29uc3QgU3RyCiAKICAgICAvLyBBZGQgdGV4dCBub2RlcyBhbmQgPGJyPiBlbGVtZW50
cy4KICAgICBlYyA9IDA7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0g
RG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwotICAgIGludCBsaW5lU3RhcnQg
PSAwOwotICAgIFVDaGFyIHByZXYgPSAwOwotICAgIGludCBsZW5ndGggPSB0ZXh0Lmxlbmd0aCgp
OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgVUNoYXIg
YyA9IHRleHRbaV07Ci0gICAgICAgIGlmIChjID09ICdcbicgfHwgYyA9PSAnXHInKSB7Ci0gICAg
ICAgICAgICBpZiAoaSA+IGxpbmVTdGFydCkgewotICAgICAgICAgICAgICAgIGZyYWdtZW50LT5h
cHBlbmRDaGlsZChUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgdGV4dC5zdWJzdHJpbmcobGluZVN0
YXJ0LCBpIC0gbGluZVN0YXJ0KSksIGVjKTsKLSAgICAgICAgICAgICAgICBpZiAoZWMpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgh
KGMgPT0gJ1xuJyAmJiBpICE9IDAgJiYgcHJldiA9PSAnXHInKSkgewotICAgICAgICAgICAgICAg
IGZyYWdtZW50LT5hcHBlbmRDaGlsZChIVE1MQlJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSks
IGVjKTsKLSAgICAgICAgICAgICAgICBpZiAoZWMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpbmVTdGFydCA9IGkgKyAxOwotICAgICAg
ICB9Ci0gICAgICAgIHByZXYgPSBjOwotICAgIH0KLSAgICBpZiAobGVuZ3RoID4gbGluZVN0YXJ0
KQotICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCks
IHRleHQuc3Vic3RyaW5nKGxpbmVTdGFydCwgbGVuZ3RoIC0gbGluZVN0YXJ0KSksIGVjKTsKLSAg
ICByZXBsYWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQodGhpcywgZnJhZ21lbnQucmVsZWFzZSgpLCBl
Yyk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gdGV4dFRvRnJhZ21l
bnQodGV4dCwgZWMpOworICAgIGlmICghZWMpCisgICAgICAgIHJlcGxhY2VDaGlsZHJlbldpdGhG
cmFnbWVudCh0aGlzLCBmcmFnbWVudC5yZWxlYXNlKCksIGVjKTsKK30KKwordm9pZCBtZXJnZVdp
dGhOZXh0VGV4dE5vZGUoUmVmUHRyPE5vZGU+IG5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIEFTU0VSVChub2RlICYmIG5vZGUtPmlzVGV4dE5vZGUoKSk7CisgICAgTm9kZSogbmV4dCA9
IG5vZGUtPm5leHRTaWJsaW5nKCk7CisgICAgaWYgKCFuZXh0IHx8ICFuZXh0LT5pc1RleHROb2Rl
KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSZWZQdHI8VGV4dD4gdGV4dE5vZGUgPSBz
dGF0aWNfY2FzdDxUZXh0Kj4obm9kZS5nZXQoKSk7CisgICAgUmVmUHRyPFRleHQ+IHRleHROZXh0
ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG5leHQpOworICAgIHRleHROb2RlLT5hcHBlbmREYXRhKHRl
eHROZXh0LT5kYXRhKCksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAodGV4dE5leHQtPnBhcmVudE5vZGUoKSkgLy8gTWlnaHQgaGF2ZSBiZWVuIHJlbW92ZWQgYnkg
bXV0YXRpb24gZXZlbnQuCisgICAgICAgIHRleHROZXh0LT5yZW1vdmUoZWMpOwogfQogCiB2b2lk
IEhUTUxFbGVtZW50OjpzZXRPdXRlclRleHQoY29uc3QgU3RyaW5nICZ0ZXh0LCBFeGNlcHRpb25D
b2RlJiBlYykKQEAgLTQ2NSwzOSArNDkzLDI5IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OnNldE91dGVy
VGV4dChjb25zdCBTdHIKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBU
aGlzIGNyZWF0ZXMgYSBuZXcgdGV4dCBub2RlIGV2ZW4gd2hlbiB0aGUgdGV4dCBpcyBlbXB0eS4K
LSAgICAvLyBGSVhNRTogVGhpcyBjcmVhdGVzIGEgc2luZ2xlIHRleHQgbm9kZSBldmVuIHdoZW4g
dGhlIHRleHQgaGFzIENSIGFuZCBMRgotICAgIC8vIGNoYXJhY3RlcnMgaW4gaXQuIEluc3RlYWQg
aXQgc2hvdWxkIGNyZWF0ZSA8YnI+IGVsZW1lbnRzLgotICAgIFJlZlB0cjxUZXh0PiB0ID0gVGV4
dDo6Y3JlYXRlKGRvY3VtZW50KCksIHRleHQpOworICAgIFJlZlB0cjxOb2RlPiBwcmV2ID0gcHJl
dmlvdXNTaWJsaW5nKCk7CisgICAgUmVmUHRyPE5vZGU+IG5leHQgPSBuZXh0U2libGluZygpOwor
ICAgIFJlZlB0cjxOb2RlPiBuZXdDaGlsZDsKICAgICBlYyA9IDA7Ci0gICAgcGFyZW50LT5yZXBs
YWNlQ2hpbGQodCwgdGhpcywgZWMpOworICAgIAorICAgIC8vIENvbnZlcnQgdGV4dCB0byBmcmFn
bWVudCB3aXRoIDxicj4gdGFncyBpbnN0ZWFkIG9mIGxpbmVicmVha3MgaWYgbmVlZGVkLgorICAg
IGlmICh0ZXh0LmNvbnRhaW5zKCdccicpIHx8IHRleHQuY29udGFpbnMoJ1xuJykpCisgICAgICAg
IG5ld0NoaWxkID0gdGV4dFRvRnJhZ21lbnQodGV4dCwgZWMpOworICAgIGVsc2UKKyAgICAgICAg
bmV3Q2hpbGQgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgdGV4dCk7CisKKyAgICBpZiAoIXRo
aXMgfHwgIXBhcmVudE5vZGUoKSkKKyAgICAgICAgZWMgPSBISUVSQVJDSFlfUkVRVUVTVF9FUlI7
CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47CisgICAgcGFyZW50LT5yZXBsYWNlQ2hpbGQo
bmV3Q2hpbGQucmVsZWFzZSgpLCB0aGlzLCBlYyk7CiAKLSAgICAvLyBJcyBwcmV2aW91cyBub2Rl
IGEgdGV4dCBub2RlPyBJZiBzbywgbWVyZ2UgaW50byBpdC4KLSAgICBOb2RlKiBwcmV2ID0gdC0+
cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgaWYgKHByZXYgJiYgcHJldi0+aXNUZXh0Tm9kZSgpKSB7
Ci0gICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0UHJldiA9IHN0YXRpY19jYXN0PFRleHQqPihwcmV2
KTsKLSAgICAgICAgdGV4dFByZXYtPmFwcGVuZERhdGEodC0+ZGF0YSgpLCBlYyk7Ci0gICAgICAg
IGlmIChlYykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdC0+cmVtb3ZlKGVjKTsKLSAg
ICAgICAgaWYgKGVjKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0ID0gdGV4dFByZXY7
Ci0gICAgfQorICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbmV4dCA/IG5leHQtPnByZXZpb3VzU2li
bGluZygpIDogMDsKKyAgICBpZiAoIWVjICYmIG5vZGUgJiYgbm9kZS0+aXNUZXh0Tm9kZSgpKQor
ICAgICAgICBtZXJnZVdpdGhOZXh0VGV4dE5vZGUobm9kZSwgZWMpOwogCi0gICAgLy8gSXMgbmV4
dCBub2RlIGEgdGV4dCBub2RlPyBJZiBzbywgbWVyZ2UgaXQgaW4uCi0gICAgTm9kZSogbmV4dCA9
IHQtPm5leHRTaWJsaW5nKCk7Ci0gICAgaWYgKG5leHQgJiYgbmV4dC0+aXNUZXh0Tm9kZSgpKSB7
Ci0gICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0TmV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihuZXh0
KTsKLSAgICAgICAgdC0+YXBwZW5kRGF0YSh0ZXh0TmV4dC0+ZGF0YSgpLCBlYyk7Ci0gICAgICAg
IGlmIChlYykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGV4dE5leHQtPnJlbW92ZShl
Yyk7Ci0gICAgICAgIGlmIChlYykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KCFlYyAmJiBwcmV2ICYmIHByZXYtPmlzVGV4dE5vZGUoKSkKKyAgICAgICAgbWVyZ2VXaXRoTmV4
dFRleHROb2RlKHByZXYsIGVjKTsKIH0KIAogTm9kZSogSFRNTEVsZW1lbnQ6Omluc2VydEFkamFj
ZW50KGNvbnN0IFN0cmluZyYgd2hlcmUsIE5vZGUqIG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJiBl
YykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgJKHJldmlzaW9uIDc1NjY5KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAs
NiArMTAwLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEhUTUxGb3JtRWxlbWVudCogdmlydHVh
bEZvcm0oKSBjb25zdDsKIAogICAgIE5vZGUqIGluc2VydEFkamFjZW50KGNvbnN0IFN0cmluZyYg
d2hlcmUsIE5vZGUqIG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiB0ZXh0VG9GcmFnbWVudChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25D
b2RlJik7CiB9OwogCiBpbmxpbmUgSFRNTEVsZW1lbnQ6OkhUTUxFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDc1NjY5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjAgQEAKKzIwMTEtMDEtMTEgIEVtaWwgRWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZXR0aW5nIG91
dGVyVGV4dCBzaG91bGQgY29udmVydCBDUi9MRiB0byA8YnI+CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjI2OAorICAgICAgICAKKyAgICAgICAgQWRk
IHRlc3QgZm9yIHNldHRpbmcgRWxlbWVudC5vdXRlclRleHQuCisKKyAgICAgICAgKiBmYXN0L2Rv
bS9zZXQtb3V0ZXItdGV4dC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9t
L3NldC1vdXRlci10ZXh0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL3RleHQtbm9k
ZS1hcHBlbmQtZGF0YS1yZW1vdmUtY3Jhc2gtZXhwZWN0ZWQudHh0OiBDaGFuZ2VkCisgICAgICAg
ICAgICBleHBlY3RhdGlvbiB0byAiZGlkbid0IGNyYXNoIiBmcm9tICJ0aHJldyBkb20gZXhjZXB0
aW9uIiBhcyB0ZXN0CisgICAgICAgICAgICBhc3N1bWVkIHRoZSBET01DaGFyYWN0ZXJEYXRhTW9k
aWZpZWQgZXZlbnQgd291bGQgZmlyZSBiZWZvcmUgdGhlIG5vZGUKKyAgICAgICAgICAgIHdvdWxk
IGJlIHJlcGxhY2VkLgorICAgICAgICAqIGZhc3QvZG9tL3RleHQtbm9kZS1hcHBlbmQtZGF0YS1y
ZW1vdmUtY3Jhc2guaHRtbDoKKwogMjAxMS0wMS0xMiAgSnVzdGluIFNjaHVoICA8anNjaHVoQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGNocm9taXVtIHRlc3QgZXhwZWN0YXRp
b25zIGZpeC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL3NldC1vdXRlci10ZXh0LWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9zZXQtb3V0ZXItdGV4
dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9zZXQt
b3V0ZXItdGV4dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOCBAQAorUmVw
bGFjZWQgbm9kZSB1c2luZyBvdXRlclRleHQuCityZW1vdmluZyBub2RlIHVzaW5nIG91dGVyVGV4
dC4KK1Rlc3RpbmcgYWRkaW5nIGJyCit1c2luZyBvdXRlclRleHQuCitQQVNTOiByZXBsYWNlCitQ
QVNTOiByZW1vdmUKK1BBU1M6IGVtcHR5IHRleHQgbm9kZQorUEFTUzogbGluZSBicmVhawpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9kb20vc2V0LW91dGVyLXRleHQuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9zZXQtb3V0ZXItdGV4dC5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9kb20vc2V0LW91dGVyLXRleHQuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1MyBAQAorPGh0bWw+Cis8aGVhZD4KKyAgICA8c3R5bGU+CisgICAgICAgIHBy
ZSB7IG1hcmdpbjogMDsgfQorICAgIDwvc3R5bGU+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9kdW1wLWFzLW1hcmt1cC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICBN
YXJrdXAubm9BdXRvRHVtcCgpOworICAgIAorICAgIGZ1bmN0aW9uIGFzc2VydE1hcmt1cChuYW1l
LCBlbGVtZW50LCBleHBlY3RlZCkgeworICAgICAgdmFyIG1hcmt1cCA9IE1hcmt1cC5nZXQoZWxl
bWVudCk7CisgICAgICBpZiAobWFya3VwID09IGV4cGVjdGVkKQorICAgICAgICAgIGxvZygnUEFT
UzogJyArIG5hbWUpOworICAgICAgZWxzZQorICAgICAgICAgIGxvZygnRkFJTDogJyArIG5hbWUg
ICsgJ1xuV2FzOlxuJyArIG1hcmt1cCArICdcbkV4cGVjdGVkOlxuJyArIGV4cGVjdGVkKTsKKyAg
ICB9CisgICAgCisgICAgZnVuY3Rpb24gbG9nKHRleHQpIHsKKyAgICAgIHZhciBlbCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ3ByZScpOworICAgICAgZWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUodGV4dCkpOworICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jl
c3VsdCcpLmFwcGVuZENoaWxkKGVsKTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gcnVuVGVz
dCgpIHsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKQorCisgICAgICAgIHZhciBpdGVt
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsaScpOworCisgICAgICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0UmVwbGFjZScpLm91dGVyVGV4dCA9ICdSZXBsYWNlZCc7
CisgICAgICAgIGFzc2VydE1hcmt1cCgncmVwbGFjZScsIGl0ZW1zWzBdLCAnfCAiUmVwbGFjZWQg
bm9kZSB1c2luZyBvdXRlclRleHQuIicpOworICAgICAgICAKKyAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3Rlc3RSZW1vdmUnKS5vdXRlclRleHQgPSAnJzsKKyAgICAgICAgYXNzZXJ0
TWFya3VwKCdyZW1vdmUnLCBpdGVtc1sxXSwgJ3wgIiByZW1vdmluZyBub2RlIHVzaW5nIG91dGVy
VGV4dC4iJyk7CisKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3RFbXB0eScp
Lm91dGVyVGV4dCA9ICcnOworICAgICAgICBhc3NlcnRNYXJrdXAoJ2VtcHR5IHRleHQgbm9kZScs
IGl0ZW1zWzJdLCAnfCAiIicpOworICAgICAgICAKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3Rlc3RBZGRCcicpLm91dGVyVGV4dCA9ICdiclxuJzsKKyAgICAgICAgYXNzZXJ0TWFy
a3VwKCdsaW5lIGJyZWFrJywgaXRlbXNbM10sICd8ICJUZXN0aW5nIGFkZGluZyBiciJcbnwgPGJy
PlxufCAiIHVzaW5nIG91dGVyVGV4dC4iJyk7CisgICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorICAgIDx1bD4KKyAgICAgIDxsaT48c3BhbiBp
ZD0idGVzdFJlcGxhY2UiPlRlc3RpbmcgcmVwbGFjaW5nPC9zcGFuPiBub2RlIHVzaW5nIG91dGVy
VGV4dC48L2xpPgorICAgICAgPGxpPjxzcGFuIGlkPSJ0ZXN0UmVtb3ZlIj5UZXN0aW5nPC9zcGFu
PiByZW1vdmluZyBub2RlIHVzaW5nIG91dGVyVGV4dC48L2xpPgorICAgICAgPGxpPjxzcGFuIGlk
PSJ0ZXN0RW1wdHkiPlRlc3QgcmVtb3ZpbmcgZW50aXJlIG5vZGU8L3NwYW4+PC9saT4KKyAgICAg
IDxsaT5UZXN0aW5nIGFkZGluZyA8c3BhbiBpZD0idGVzdEFkZEJyIj5saW5lIGJyZWFrPC9zcGFu
PiB1c2luZyBvdXRlclRleHQuPC9saT4KKyAgICA8L3VsPgorICAgIDxkaXYgaWQ9InJlc3VsdCI+
PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS90ZXh0
LW5vZGUtYXBwZW5kLWRhdGEtcmVtb3ZlLWNyYXNoLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2RvbS90ZXh0LW5vZGUtYXBwZW5kLWRhdGEtcmVtb3ZlLWNyYXNo
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNzU2NjkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS90
ZXh0LW5vZGUtYXBwZW5kLWRhdGEtcmVtb3ZlLWNyYXNoLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMSArMSBAQAotUEFTUywgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkIC0g
RXJyb3I6IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjogRE9NIEV4Y2VwdGlvbiAzCitQQVNTLCBkaWRu
J3QgY3Jhc2guCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS90ZXh0LW5vZGUtYXBwZW5kLWRh
dGEtcmVtb3ZlLWNyYXNoLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20v
dGV4dC1ub2RlLWFwcGVuZC1kYXRhLXJlbW92ZS1jcmFzaC5odG1sCShyZXZpc2lvbiA3NTY2OSkK
KysrIExheW91dFRlc3RzL2Zhc3QvZG9tL3RleHQtbm9kZS1hcHBlbmQtZGF0YS1yZW1vdmUtY3Jh
c2guaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSw1MCArMSw1MCBAQAotPGh0bWw+DQotPGJvZHkg
b25sb2FkPSJydW5UZXN0KCkiPg0KLTxzY3JpcHQ+DQotdmFyIGNvdW50ID0gMDsNCi1pZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQ0KLXsNCi0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOw0KLSAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
DQotfQ0KLQ0KLWZ1bmN0aW9uIHJ1blRlc3QoKQ0KLXsgICANCi0gICAgdHJ5IHsNCi0gICAgICAg
ZGl2QmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkIiwgZXZl
bnRMaXN0ZW5lciwgZmFsc2UpOw0KLSAgICAgICBwQmxvY2sub3V0ZXJUZXh0ID0gInRleHQiOw0K
LSAgICB9DQotICAgIGNhdGNoIChleGNlcHRpb24pIHsNCi0gICAgICAgZGl2QmxvY2suaW5uZXJI
VE1MID0gIlBBU1MsIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZCAtICIgKyBleGNlcHRp
b247DQotICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpDQotICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7DQotICAgfQ0KLX0NCi0NCi1mdW5j
dGlvbiBldmVudExpc3RlbmVyKCkNCi17DQotICAgIGNvdW50ICs9IDE7DQotICAgIGlmIChjb3Vu
dCA8IDIpDQotICAgICAgICByZXR1cm47DQotICAgIHZhciByYW5nZSA9IGRvY3VtZW50LmNyZWF0
ZVJhbmdlKCk7DQotICAgIHJhbmdlLnNldFN0YXJ0KGRpdkJsb2NrLCAwKTsNCi0gICAgcmFuZ2Uu
c2V0RW5kKGRpdkJsb2NrLCBkaXZCbG9jay5jaGlsZE5vZGVzLmxlbmd0aCAtIDEpOw0KLSAgICBy
YW5nZS5kZWxldGVDb250ZW50cygpOw0KLSAgICBnYygpOw0KLX0NCi0NCi1mdW5jdGlvbiBnYygp
DQotew0KLSAgICBpZiAod2luZG93LkdDQ29udHJvbGxlcikNCi0gICAgICAgIHJldHVybiBHQ0Nv
bnRyb2xsZXIuY29sbGVjdCgpOw0KLQ0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyBp
KyspIHsgLy8gPiBmb3JjZSBnYXJiYWdlIGNvbGxlY3Rpb24gKEZGIHJlcXVpcmVzIGFib3V0IDlL
IGFsbG9jYXRpb25zIGJlZm9yZSBhIGNvbGxlY3QpDQotICAgICAgICB2YXIgcyA9IG5ldyBTdHJp
bmcoIiIpOw0KLSAgICB9DQotfQ0KLTwvc2NyaXB0Pg0KLTxkaXYgaWQ9ImRpdkJsb2NrIj4NCi08
YnIvPnRleHRub2RlMTxwIGlkPSJwQmxvY2siPjwvcD50ZXh0bm9kZTI8YnIvPg0KLTwvZGl2Pg0K
LTwvYm9keT4NCi08L2h0bWw+DQorPGh0bWw+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cis8
c2NyaXB0PgordmFyIGNvdW50ID0gMDsKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
Cit7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7
ICAgCisgICAgdHJ5IHsKKyAgICAgICBkaXZCbG9jay5hZGRFdmVudExpc3RlbmVyKCJET01DaGFy
YWN0ZXJEYXRhTW9kaWZpZWQiLCBldmVudExpc3RlbmVyLCBmYWxzZSk7CisgICAgICAgcEJsb2Nr
Lm91dGVyVGV4dCA9ICJ0ZXh0IjsKKyAgICAgICBkaXZCbG9jay5pbm5lckhUTUwgPSAiUEFTUywg
ZGlkbid0IGNyYXNoLiI7CisgICAgfQorICAgIGNhdGNoIChleGNlcHRpb24pIHsKKyAgICAgICBk
aXZCbG9jay5pbm5lckhUTUwgPSAiVGhyZXcgYW4gZXhjZXB0aW9uIC0gIiArIGV4Y2VwdGlvbjsK
KyAgICB9CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBldmVudExpc3Rl
bmVyKCkKK3sKKyAgICB0cnkgeworICAgICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFu
Z2UoKTsKKyAgICAgIHJhbmdlLnNldFN0YXJ0KGRpdkJsb2NrLCAwKTsKKyAgICAgIHJhbmdlLnNl
dEVuZChkaXZCbG9jaywgZGl2QmxvY2suY2hpbGROb2Rlcy5sZW5ndGggLSAxKTsKKyAgICAgIHJh
bmdlLmRlbGV0ZUNvbnRlbnRzKCk7CisgICAgICBnYygpOworICB9IGNhdGNoKGUpIHsgfQorfQor
CitmdW5jdGlvbiBnYygpCit7CisgICAgaWYgKHdpbmRvdy5HQ0NvbnRyb2xsZXIpCisgICAgICAg
IHJldHVybiBHQ0NvbnRyb2xsZXIuY29sbGVjdCgpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDAwMDsgaSsrKSB7IC8vID4gZm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIChGRiByZXF1aXJl
cyBhYm91dCA5SyBhbGxvY2F0aW9ucyBiZWZvcmUgYSBjb2xsZWN0KQorICAgICAgICB2YXIgcyA9
IG5ldyBTdHJpbmcoIiIpOworICAgIH0KK30KKzwvc2NyaXB0PgorPGRpdiBpZD0iZGl2QmxvY2si
PgorPGJyLz50ZXh0bm9kZTE8cCBpZD0icEJsb2NrIj48L3A+dGV4dG5vZGUyPGJyLz4KKzwvZGl2
PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="70203"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78851</attachid>
            <date>2011-01-13 13:47:24 -0800</date>
            <delta_ts>2011-01-13 14:49:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>outertext.patch</filename>
            <type>text/plain</type>
            <size>13674</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NjY5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDEtMTEgIEVtaWwgRWts
dW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBTZXR0aW5nIG91dGVyVGV4dCBzaG91bGQgY29udmVydCBDUi9MRiB0
byA8YnI+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MjI2OAorCisgICAgICAgIE1ha2Ugc2V0IG91dGVyVGV4dCBzdXBwb3J0IGxpbmUgYnJlYWtzIChz
aGFyaW5nIHRoZSB0ZXh0IHRvIGZyYWdtZW50IGNvZGUKKyAgICAgICAgd2l0aCBzZXRJbm5lclRl
eHQpIGFuZCBoYW5kbGUgZW1wdHkgdGV4dCBub2RlcyB0aGUgc2FtZSB3YXkgSUUgZG9lcy4KKwor
ICAgICAgICBUZXN0OiBmYXN0L2RvbS9zZXQtb3V0ZXItdGV4dC5odG1sCisKKyAgICAgICAgKiBo
dG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50Ojp0ZXh0
VG9GcmFnbWVudCk6IFNoYXJlZCBiZXR3ZWVuIHNldElubmVyVGV4dCBhbmQgc2V0T3V0ZXJUZXh0
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6c2V0SW5uZXJUZXh0KTogU3BsaXQgb3V0
IHRleHQgcGFyc2luZyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6bWVyZ2VXaXRoTmV4dFRleHRO
b2RlKTogU3BsaXQgb3V0IHRleHQgbm9kZSBtZXJnaW5nIGNvZGUuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudDo6c2V0T3V0ZXJUZXh0KTogQWRkZWQgc3VwcG9ydCBmb3IgbGluZSBicmVh
a3MuCisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5oOgorCiAyMDExLTAxLTEyICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQW5vdGhlciBidWlsZCBmaXguCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gNzU2NjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc2LDYg
KzM3NiwzOSBAQCB2b2lkIEhUTUxFbGVtZW50OjpzZXRPdXRlckhUTUwoY29uc3QgU3RyCiAgICAg
fQogfQogCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEhUTUxFbGVtZW50Ojp0ZXh0VG9G
cmFnbWVudChjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0
ZShkb2N1bWVudCgpKTsKKyAgICB1bnNpZ25lZCBpbnQgaSwgbGVuZ3RoID0gdGV4dC5sZW5ndGgo
KTsKKyAgICBVQ2hhciBjID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBzdGFydCA9IDA7IHN0
YXJ0IDwgbGVuZ3RoOyApIHsKKworICAgICAgICAvLyBGaW5kIG5leHQgbGluZSBicmVhay4KKyAg
ICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgIGMgPSB0
ZXh0W2ldOworICAgICAgICAgIGlmIChjID09ICdccicgfHwgYyA9PSAnXG4nKQorICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChU
ZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgdGV4dC5zdWJzdHJpbmcoc3RhcnQsIGkgLSBzdGFydCkp
LCBlYyk7CisgICAgICAgIGlmIChlYykKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAg
IGlmIChjID09ICdccicgfHwgYyA9PSAnXG4nKSB7CisgICAgICAgICAgICBmcmFnbWVudC0+YXBw
ZW5kQ2hpbGQoSFRNTEJSRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpLCBlYyk7CisgICAgICAg
ICAgICBpZiAoZWMpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAvLyBN
YWtlIHN1cmUgXHJcbiBkb2Vzbid0IHJlc3VsdCBpbiB0d28gbGluZSBicmVha3MuCisgICAgICAg
ICAgICBpZiAoYyA9PSAnXHInICYmIGkgKyAxIDwgbGVuZ3RoICYmIHRleHRbaSArIDFdID09ICdc
bicpCisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICB9CisKKyAgICAgICAgc3RhcnQgPSBp
ICsgMTsgLy8gQ2hhcmFjdGVyIGFmdGVyIGxpbmUgYnJlYWsuCisgICAgfQorCisgICAgcmV0dXJu
IGZyYWdtZW50OworfQorCiB2b2lkIEhUTUxFbGVtZW50OjpzZXRJbm5lclRleHQoY29uc3QgU3Ry
aW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoaWVGb3JiaWRzSW5zZXJ0
SFRNTCgpKSB7CkBAIC00MTksMzAgKzQ1MiwyNSBAQCB2b2lkIEhUTUxFbGVtZW50OjpzZXRJbm5l
clRleHQoY29uc3QgU3RyCiAKICAgICAvLyBBZGQgdGV4dCBub2RlcyBhbmQgPGJyPiBlbGVtZW50
cy4KICAgICBlYyA9IDA7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0g
RG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwotICAgIGludCBsaW5lU3RhcnQg
PSAwOwotICAgIFVDaGFyIHByZXYgPSAwOwotICAgIGludCBsZW5ndGggPSB0ZXh0Lmxlbmd0aCgp
OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgVUNoYXIg
YyA9IHRleHRbaV07Ci0gICAgICAgIGlmIChjID09ICdcbicgfHwgYyA9PSAnXHInKSB7Ci0gICAg
ICAgICAgICBpZiAoaSA+IGxpbmVTdGFydCkgewotICAgICAgICAgICAgICAgIGZyYWdtZW50LT5h
cHBlbmRDaGlsZChUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgdGV4dC5zdWJzdHJpbmcobGluZVN0
YXJ0LCBpIC0gbGluZVN0YXJ0KSksIGVjKTsKLSAgICAgICAgICAgICAgICBpZiAoZWMpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgh
KGMgPT0gJ1xuJyAmJiBpICE9IDAgJiYgcHJldiA9PSAnXHInKSkgewotICAgICAgICAgICAgICAg
IGZyYWdtZW50LT5hcHBlbmRDaGlsZChIVE1MQlJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSks
IGVjKTsKLSAgICAgICAgICAgICAgICBpZiAoZWMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpbmVTdGFydCA9IGkgKyAxOwotICAgICAg
ICB9Ci0gICAgICAgIHByZXYgPSBjOwotICAgIH0KLSAgICBpZiAobGVuZ3RoID4gbGluZVN0YXJ0
KQotICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCks
IHRleHQuc3Vic3RyaW5nKGxpbmVTdGFydCwgbGVuZ3RoIC0gbGluZVN0YXJ0KSksIGVjKTsKLSAg
ICByZXBsYWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQodGhpcywgZnJhZ21lbnQucmVsZWFzZSgpLCBl
Yyk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gdGV4dFRvRnJhZ21l
bnQodGV4dCwgZWMpOworICAgIGlmICghZWMpCisgICAgICAgIHJlcGxhY2VDaGlsZHJlbldpdGhG
cmFnbWVudCh0aGlzLCBmcmFnbWVudC5yZWxlYXNlKCksIGVjKTsKK30KKworc3RhdGljIHZvaWQg
bWVyZ2VXaXRoTmV4dFRleHROb2RlKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgQVNTRVJUKG5vZGUgJiYgbm9kZS0+aXNUZXh0Tm9kZSgpKTsKKyAgICBO
b2RlKiBuZXh0ID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKKyAgICBpZiAoIW5leHQgfHwgIW5leHQt
PmlzVGV4dE5vZGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFJlZlB0cjxUZXh0PiB0
ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihub2RlLmdldCgpKTsKKyAgICBSZWZQdHI8VGV4
dD4gdGV4dE5leHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obmV4dCk7CisgICAgdGV4dE5vZGUtPmFw
cGVuZERhdGEodGV4dE5leHQtPmRhdGEoKSwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0
dXJuOworICAgIGlmICh0ZXh0TmV4dC0+cGFyZW50Tm9kZSgpKSAvLyBNaWdodCBoYXZlIGJlZW4g
cmVtb3ZlZCBieSBtdXRhdGlvbiBldmVudC4KKyAgICAgICAgdGV4dE5leHQtPnJlbW92ZShlYyk7
CiB9CiAKIHZvaWQgSFRNTEVsZW1lbnQ6OnNldE91dGVyVGV4dChjb25zdCBTdHJpbmcgJnRleHQs
IEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtNDY1LDM5ICs0OTMsMjkgQEAgdm9pZCBIVE1MRWxlbWVu
dDo6c2V0T3V0ZXJUZXh0KGNvbnN0IFN0cgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Ly8gRklYTUU6IFRoaXMgY3JlYXRlcyBhIG5ldyB0ZXh0IG5vZGUgZXZlbiB3aGVuIHRoZSB0ZXh0
IGlzIGVtcHR5LgotICAgIC8vIEZJWE1FOiBUaGlzIGNyZWF0ZXMgYSBzaW5nbGUgdGV4dCBub2Rl
IGV2ZW4gd2hlbiB0aGUgdGV4dCBoYXMgQ1IgYW5kIExGCi0gICAgLy8gY2hhcmFjdGVycyBpbiBp
dC4gSW5zdGVhZCBpdCBzaG91bGQgY3JlYXRlIDxicj4gZWxlbWVudHMuCi0gICAgUmVmUHRyPFRl
eHQ+IHQgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgdGV4dCk7CisgICAgUmVmUHRyPE5vZGU+
IHByZXYgPSBwcmV2aW91c1NpYmxpbmcoKTsKKyAgICBSZWZQdHI8Tm9kZT4gbmV4dCA9IG5leHRT
aWJsaW5nKCk7CisgICAgUmVmUHRyPE5vZGU+IG5ld0NoaWxkOwogICAgIGVjID0gMDsKLSAgICBw
YXJlbnQtPnJlcGxhY2VDaGlsZCh0LCB0aGlzLCBlYyk7CisgICAgCisgICAgLy8gQ29udmVydCB0
ZXh0IHRvIGZyYWdtZW50IHdpdGggPGJyPiB0YWdzIGluc3RlYWQgb2YgbGluZWJyZWFrcyBpZiBu
ZWVkZWQuCisgICAgaWYgKHRleHQuY29udGFpbnMoJ1xyJykgfHwgdGV4dC5jb250YWlucygnXG4n
KSkKKyAgICAgICAgbmV3Q2hpbGQgPSB0ZXh0VG9GcmFnbWVudCh0ZXh0LCBlYyk7CisgICAgZWxz
ZQorICAgICAgICBuZXdDaGlsZCA9IFRleHQ6OmNyZWF0ZShkb2N1bWVudCgpLCB0ZXh0KTsKKwor
ICAgIGlmICghdGhpcyB8fCAhcGFyZW50Tm9kZSgpKQorICAgICAgICBlYyA9IEhJRVJBUkNIWV9S
RVFVRVNUX0VSUjsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKKyAgICBwYXJlbnQtPnJl
cGxhY2VDaGlsZChuZXdDaGlsZC5yZWxlYXNlKCksIHRoaXMsIGVjKTsKIAotICAgIC8vIElzIHBy
ZXZpb3VzIG5vZGUgYSB0ZXh0IG5vZGU/IElmIHNvLCBtZXJnZSBpbnRvIGl0LgotICAgIE5vZGUq
IHByZXYgPSB0LT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICBpZiAocHJldiAmJiBwcmV2LT5pc1Rl
eHROb2RlKCkpIHsKLSAgICAgICAgUmVmUHRyPFRleHQ+IHRleHRQcmV2ID0gc3RhdGljX2Nhc3Q8
VGV4dCo+KHByZXYpOwotICAgICAgICB0ZXh0UHJldi0+YXBwZW5kRGF0YSh0LT5kYXRhKCksIGVj
KTsKLSAgICAgICAgaWYgKGVjKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0LT5yZW1v
dmUoZWMpOwotICAgICAgICBpZiAoZWMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHQg
PSB0ZXh0UHJldjsKLSAgICB9CisgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBuZXh0ID8gbmV4dC0+
cHJldmlvdXNTaWJsaW5nKCkgOiAwOworICAgIGlmICghZWMgJiYgbm9kZSAmJiBub2RlLT5pc1Rl
eHROb2RlKCkpCisgICAgICAgIG1lcmdlV2l0aE5leHRUZXh0Tm9kZShub2RlLnJlbGVhc2UoKSwg
ZWMpOwogCi0gICAgLy8gSXMgbmV4dCBub2RlIGEgdGV4dCBub2RlPyBJZiBzbywgbWVyZ2UgaXQg
aW4uCi0gICAgTm9kZSogbmV4dCA9IHQtPm5leHRTaWJsaW5nKCk7Ci0gICAgaWYgKG5leHQgJiYg
bmV4dC0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0TmV4dCA9IHN0
YXRpY19jYXN0PFRleHQqPihuZXh0KTsKLSAgICAgICAgdC0+YXBwZW5kRGF0YSh0ZXh0TmV4dC0+
ZGF0YSgpLCBlYyk7Ci0gICAgICAgIGlmIChlYykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgdGV4dE5leHQtPnJlbW92ZShlYyk7Ci0gICAgICAgIGlmIChlYykKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKCFlYyAmJiBwcmV2ICYmIHByZXYtPmlzVGV4dE5vZGUoKSkK
KyAgICAgICAgbWVyZ2VXaXRoTmV4dFRleHROb2RlKHByZXYucmVsZWFzZSgpLCBlYyk7CiB9CiAK
IE5vZGUqIEhUTUxFbGVtZW50OjppbnNlcnRBZGphY2VudChjb25zdCBTdHJpbmcmIHdoZXJlLCBO
b2RlKiBuZXdDaGlsZCwgRXhjZXB0aW9uQ29kZSYgZWMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RWxlbWVudC5oCShyZXZpc2lvbiA3NTY2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCw3IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCBIVE1MRm9ybUVsZW1lbnQqIHZpcnR1YWxGb3JtKCkgY29uc3Q7CiAKICAgICBOb2Rl
KiBpbnNlcnRBZGphY2VudChjb25zdCBTdHJpbmcmIHdoZXJlLCBOb2RlKiBuZXdDaGlsZCwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gdGV4dFRvRnJh
Z21lbnQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogfTsKIAogaW5saW5lIEhUTUxF
bGVtZW50OjpIVE1MRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jdW1lbnQpCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NTY2OSkKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDExLTAxLTExICBFbWls
IEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU2V0dGluZyBvdXRlclRleHQgc2hvdWxkIGNvbnZlcnQgQ1Iv
TEYgdG8gPGJyPgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTIyNjgKKyAgICAgICAgCisgICAgICAgIEFkZCB0ZXN0IGZvciBzZXR0aW5nIEVsZW1lbnQu
b3V0ZXJUZXh0LgorCisgICAgICAgICogZmFzdC9kb20vc2V0LW91dGVyLXRleHQtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zZXQtb3V0ZXItdGV4dC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2RvbS90ZXh0LW5vZGUtYXBwZW5kLWRhdGEtcmVtb3ZlLWNyYXNo
LWV4cGVjdGVkLnR4dDogQ2hhbmdlZAorICAgICAgICAgICAgZXhwZWN0YXRpb24gdG8gImRpZG4n
dCBjcmFzaCIgZnJvbSAidGhyZXcgZG9tIGV4Y2VwdGlvbiIgYXMgdGVzdAorICAgICAgICAgICAg
YXNzdW1lZCB0aGUgRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkIGV2ZW50IHdvdWxkIGZpcmUgYmVm
b3JlIHRoZSBub2RlCisgICAgICAgICAgICB3b3VsZCBiZSByZXBsYWNlZC4KKyAgICAgICAgKiBm
YXN0L2RvbS90ZXh0LW5vZGUtYXBwZW5kLWRhdGEtcmVtb3ZlLWNyYXNoLmh0bWw6CisKIDIwMTEt
MDEtMTIgIEp1c3RpbiBTY2h1aCAgPGpzY2h1aEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCBjaHJvbWl1bSB0ZXN0IGV4cGVjdGF0aW9ucyBmaXguCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9zZXQtb3V0ZXItdGV4dC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9kb20vc2V0LW91dGVyLXRleHQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vc2V0LW91dGVyLXRleHQtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAKK1JlcGxhY2VkIG5vZGUgdXNpbmcgb3V0ZXJUZXh0
LgorcmVtb3Zpbmcgbm9kZSB1c2luZyBvdXRlclRleHQuCitUZXN0aW5nIGFkZGluZyBicgordXNp
bmcgb3V0ZXJUZXh0LgorUEFTUzogcmVwbGFjZQorUEFTUzogcmVtb3ZlCitQQVNTOiBlbXB0eSB0
ZXh0IG5vZGUKK1BBU1M6IGxpbmUgYnJlYWsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL3Nl
dC1vdXRlci10ZXh0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vc2V0
LW91dGVyLXRleHQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL3Nl
dC1vdXRlci10ZXh0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKzxodG1sPgor
PGhlYWQ+CisgICAgPHN0eWxlPgorICAgICAgICBwcmUgeyBtYXJnaW46IDA7IH0KKyAgICA8L3N0
eWxlPgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvZHVtcC1hcy1tYXJrdXAuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgTWFya3VwLm5vQXV0b0R1bXAoKTsKKyAgICAK
KyAgICBmdW5jdGlvbiBhc3NlcnRNYXJrdXAobmFtZSwgZWxlbWVudCwgZXhwZWN0ZWQpIHsKKyAg
ICAgIHZhciBtYXJrdXAgPSBNYXJrdXAuZ2V0KGVsZW1lbnQpOworICAgICAgaWYgKG1hcmt1cCA9
PSBleHBlY3RlZCkKKyAgICAgICAgICBsb2coJ1BBU1M6ICcgKyBuYW1lKTsKKyAgICAgIGVsc2UK
KyAgICAgICAgICBsb2coJ0ZBSUw6ICcgKyBuYW1lICArICdcbldhczpcbicgKyBtYXJrdXAgKyAn
XG5FeHBlY3RlZDpcbicgKyBleHBlY3RlZCk7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIGxv
Zyh0ZXh0KSB7CisgICAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTsK
KyAgICAgIGVsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKTsKKyAg
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQnKS5hcHBlbmRDaGlsZChlbCk7Cisg
ICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCkKKworICAgICAgICB2YXIgaXRlbXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5
VGFnTmFtZSgnbGknKTsKKworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdFJl
cGxhY2UnKS5vdXRlclRleHQgPSAnUmVwbGFjZWQnOworICAgICAgICBhc3NlcnRNYXJrdXAoJ3Jl
cGxhY2UnLCBpdGVtc1swXSwgJ3wgIlJlcGxhY2VkIG5vZGUgdXNpbmcgb3V0ZXJUZXh0LiInKTsK
KyAgICAgICAgCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0UmVtb3ZlJyku
b3V0ZXJUZXh0ID0gJyc7CisgICAgICAgIGFzc2VydE1hcmt1cCgncmVtb3ZlJywgaXRlbXNbMV0s
ICd8ICIgcmVtb3Zpbmcgbm9kZSB1c2luZyBvdXRlclRleHQuIicpOworCisgICAgICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0RW1wdHknKS5vdXRlclRleHQgPSAnJzsKKyAgICAgICAg
YXNzZXJ0TWFya3VwKCdlbXB0eSB0ZXh0IG5vZGUnLCBpdGVtc1syXSwgJ3wgIiInKTsKKyAgICAg
ICAgCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0QWRkQnInKS5vdXRlclRl
eHQgPSAnYnJcbic7CisgICAgICAgIGFzc2VydE1hcmt1cCgnbGluZSBicmVhaycsIGl0ZW1zWzNd
LCAnfCAiVGVzdGluZyBhZGRpbmcgYnIiXG58IDxicj5cbnwgIiB1c2luZyBvdXRlclRleHQuIicp
OworICAgIH0KKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgp
Ij4KKyAgICA8dWw+CisgICAgICA8bGk+PHNwYW4gaWQ9InRlc3RSZXBsYWNlIj5UZXN0aW5nIHJl
cGxhY2luZzwvc3Bhbj4gbm9kZSB1c2luZyBvdXRlclRleHQuPC9saT4KKyAgICAgIDxsaT48c3Bh
biBpZD0idGVzdFJlbW92ZSI+VGVzdGluZzwvc3Bhbj4gcmVtb3Zpbmcgbm9kZSB1c2luZyBvdXRl
clRleHQuPC9saT4KKyAgICAgIDxsaT48c3BhbiBpZD0idGVzdEVtcHR5Ij5UZXN0IHJlbW92aW5n
IGVudGlyZSBub2RlPC9zcGFuPjwvbGk+CisgICAgICA8bGk+VGVzdGluZyBhZGRpbmcgPHNwYW4g
aWQ9InRlc3RBZGRCciI+bGluZSBicmVhazwvc3Bhbj4gdXNpbmcgb3V0ZXJUZXh0LjwvbGk+Cisg
ICAgPC91bD4KKyAgICA8ZGl2IGlkPSJyZXN1bHQiPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vdGV4dC1ub2RlLWFwcGVuZC1kYXRhLXJlbW92ZS1j
cmFzaC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vdGV4
dC1ub2RlLWFwcGVuZC1kYXRhLXJlbW92ZS1jcmFzaC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDc1
NjY5KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vdGV4dC1ub2RlLWFwcGVuZC1kYXRhLXJlbW92
ZS1jcmFzaC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEgKzEgQEAKLVBBU1MsIHRo
cmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZCAtIEVycm9yOiBISUVSQVJDSFlfUkVRVUVTVF9F
UlI6IERPTSBFeGNlcHRpb24gMworUEFTUywgZGlkbid0IGNyYXNoLgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9kb20vdGV4dC1ub2RlLWFwcGVuZC1kYXRhLXJlbW92ZS1jcmFzaC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL3RleHQtbm9kZS1hcHBlbmQtZGF0YS1yZW1v
dmUtY3Jhc2guaHRtbAkocmV2aXNpb24gNzU2NjkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS90
ZXh0LW5vZGUtYXBwZW5kLWRhdGEtcmVtb3ZlLWNyYXNoLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTEsNTAgKzEsNTAgQEAKLTxodG1sPg0KLTxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4NCi08c2Ny
aXB0Pg0KLXZhciBjb3VudCA9IDA7DQotaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikN
Ci17DQotICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsNCi0gICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOw0KLX0NCi0NCi1mdW5jdGlvbiBydW5UZXN0
KCkNCi17ICAgDQotICAgIHRyeSB7DQotICAgICAgIGRpdkJsb2NrLmFkZEV2ZW50TGlzdGVuZXIo
IkRPTUNoYXJhY3RlckRhdGFNb2RpZmllZCIsIGV2ZW50TGlzdGVuZXIsIGZhbHNlKTsNCi0gICAg
ICAgcEJsb2NrLm91dGVyVGV4dCA9ICJ0ZXh0IjsNCi0gICAgfQ0KLSAgICBjYXRjaCAoZXhjZXB0
aW9uKSB7DQotICAgICAgIGRpdkJsb2NrLmlubmVySFRNTCA9ICJQQVNTLCB0aHJldyBhbiBleGNl
cHRpb24gYXMgZXhwZWN0ZWQgLSAiICsgZXhjZXB0aW9uOw0KLSAgICAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQ0KLSAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOw0KLSAgIH0NCi19DQotDQotZnVuY3Rpb24gZXZlbnRMaXN0ZW5lcigpDQotew0K
LSAgICBjb3VudCArPSAxOw0KLSAgICBpZiAoY291bnQgPCAyKQ0KLSAgICAgICAgcmV0dXJuOw0K
LSAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOw0KLSAgICByYW5nZS5zZXRT
dGFydChkaXZCbG9jaywgMCk7DQotICAgIHJhbmdlLnNldEVuZChkaXZCbG9jaywgZGl2QmxvY2su
Y2hpbGROb2Rlcy5sZW5ndGggLSAxKTsNCi0gICAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTsNCi0g
ICAgZ2MoKTsNCi19DQotDQotZnVuY3Rpb24gZ2MoKQ0KLXsNCi0gICAgaWYgKHdpbmRvdy5HQ0Nv
bnRyb2xsZXIpDQotICAgICAgICByZXR1cm4gR0NDb250cm9sbGVyLmNvbGxlY3QoKTsNCi0NCi0g
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7IC8vID4gZm9yY2UgZ2FyYmFnZSBj
b2xsZWN0aW9uIChGRiByZXF1aXJlcyBhYm91dCA5SyBhbGxvY2F0aW9ucyBiZWZvcmUgYSBjb2xs
ZWN0KQ0KLSAgICAgICAgdmFyIHMgPSBuZXcgU3RyaW5nKCIiKTsNCi0gICAgfQ0KLX0NCi08L3Nj
cmlwdD4NCi08ZGl2IGlkPSJkaXZCbG9jayI+DQotPGJyLz50ZXh0bm9kZTE8cCBpZD0icEJsb2Nr
Ij48L3A+dGV4dG5vZGUyPGJyLz4NCi08L2Rpdj4NCi08L2JvZHk+DQotPC9odG1sPg0KKzxodG1s
PgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorPHNjcmlwdD4KK3ZhciBjb3VudCA9IDA7Citp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQoreworICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25l
KCk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreyAgIAorICAgIHRyeSB7CisgICAgICAgZGl2
QmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkIiwgZXZlbnRM
aXN0ZW5lciwgZmFsc2UpOworICAgICAgIHBCbG9jay5vdXRlclRleHQgPSAidGV4dCI7CisgICAg
ICAgZGl2QmxvY2suaW5uZXJIVE1MID0gIlBBU1MsIGRpZG4ndCBjcmFzaC4iOworICAgIH0KKyAg
ICBjYXRjaCAoZXhjZXB0aW9uKSB7CisgICAgICAgZGl2QmxvY2suaW5uZXJIVE1MID0gIlRocmV3
IGFuIGV4Y2VwdGlvbiAtICIgKyBleGNlcHRpb247CisgICAgfQorICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKK30KKworZnVuY3Rpb24gZXZlbnRMaXN0ZW5lcigpCit7CisgICAgdHJ5IHsKKyAgICAg
IHZhciByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CisgICAgICByYW5nZS5zZXRTdGFy
dChkaXZCbG9jaywgMCk7CisgICAgICByYW5nZS5zZXRFbmQoZGl2QmxvY2ssIGRpdkJsb2NrLmNo
aWxkTm9kZXMubGVuZ3RoIC0gMSk7CisgICAgICByYW5nZS5kZWxldGVDb250ZW50cygpOworICAg
ICAgZ2MoKTsKKyAgfSBjYXRjaChlKSB7IH0KK30KKworZnVuY3Rpb24gZ2MoKQoreworICAgIGlm
ICh3aW5kb3cuR0NDb250cm9sbGVyKQorICAgICAgICByZXR1cm4gR0NDb250cm9sbGVyLmNvbGxl
Y3QoKTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeyAvLyA+IGZvcmNl
IGdhcmJhZ2UgY29sbGVjdGlvbiAoRkYgcmVxdWlyZXMgYWJvdXQgOUsgYWxsb2NhdGlvbnMgYmVm
b3JlIGEgY29sbGVjdCkKKyAgICAgICAgdmFyIHMgPSBuZXcgU3RyaW5nKCIiKTsKKyAgICB9Cit9
Cis8L3NjcmlwdD4KKzxkaXYgaWQ9ImRpdkJsb2NrIj4KKzxici8+dGV4dG5vZGUxPHAgaWQ9InBC
bG9jayI+PC9wPnRleHRub2RlMjxici8+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>