<?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>6893</bug_id>
          
          <creation_ts>2006-01-28 15:32:31 -0800</creation_ts>
          <short_desc>REGRESSION: Major bug with TinyMCE, no value submitted from textarea</short_desc>
          <delta_ts>2006-02-28 03:28:53 -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>HTML Editing</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.emprint.fr/webkit/test2.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>HasReduction, Regression</keywords>
          <priority>P1</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>6627</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Julien KRIVACSY">julien</reporter>
          <assigned_to name="Justin Garcia">justin.garcia</assigned_to>
          <cc>adele</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>30424</commentid>
    <comment_count>0</comment_count>
    <who name="Julien KRIVACSY">julien</who>
    <bug_when>2006-01-28 15:32:31 -0800</bug_when>
    <thetext>As you can check in the example URL, with Safari 2.0.3 (and nightlies), if you submit a form with a textarea and tinyMCE on, no data is sent. I think the bug was not present in Safari 2.0.2 and appeared only with the 10.4.4 update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>30601</commentid>
    <comment_count>1</comment_count>
    <who name="Joost de Valk (AlthA)">joost</who>
    <bug_when>2006-01-30 00:16:59 -0800</bug_when>
    <thetext>Confirmed, this one needs reduction... Changing component to HTML editing and version to 420+, note this is a regression since 10.4.4 as per reporter&apos;s report.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>30658</commentid>
    <comment_count>2</comment_count>
      <attachid>6117</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-30 14:12:39 -0800</bug_when>
    <thetext>Created attachment 6117
reduction

It seems that if a textarea isn&apos;t rendered, the setter doesn&apos;t work.  This reduction just tries to set the value of a textarea with display:none.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>30693</commentid>
    <comment_count>3</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-30 19:25:12 -0800</bug_when>
    <thetext>This regression was caused by the changes for &lt;http://bugzilla.opendarwin.org/show_bug.cgi?id=3401&gt;.  I have a question about textareas and \r\ns.  
(1) We turn \r\ns into \ns when tokenizing, so that any \r\ns that are inside &lt;textarea&gt;&lt;/textarea&gt;s in the source are turned into \ns, are sent into the renderer as \n and are returned by .value and .defaultValue as \n.  
(2) When someone sets .value, we send \r\ns into the renderer, but translate them into \ns in -[KWQTextArea text], so that they are returned as \n when calling .value (That is, unless .value is called on a textarea with no renderer, in which case we incorrectly return .defaultValue instead of .value, which is this bug).
(3) When someone sets .defaultValue, we put \r\n into the DOM, send \r\n to the renderer, but _do not_ translate them back when asked for .defaultValue.
(4) -[KWQTextArea setSelectedRange] and -[KWQTextArea selectedRange] work around (2)

My question is, why put \r\ns into the renderer?  What do you think about converting \r\ns into \ns in setDefaultValue and setValue?  It seems to me that doing so would make the strings returned by .value and .defaultValue consistent, and would eliminate the need for the workarounds in setSelectedRange and selectedRange (4).
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>30826</commentid>
    <comment_count>4</comment_count>
      <attachid>6170</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-31 17:05:32 -0800</bug_when>
    <thetext>Created attachment 6170
patch

Replaces \r\ns and \rs with \n in setValue so that \rs never get into the renderer.  Removes the code from KWQTextArea for working around \rs.  Only retrieve text with hard line wraps when appending form data, not when returning .value, to match the spec and other browsers.

Now that the renderer and the textarea element track the same value (a \rless string without \ns for hard line wraps), some simplification is possible.  The HTMLTextAreaElementImpl&apos;s value only becomes invalidated on RenderTextArea::slotTextChanged.  A textareas m_value is only recomputed from the renderer if 1) the renderer is about to be destroyed or 2) if m_value is invalid and someone calls .value on a rendered textarea.

Also fixes &lt;rdar://problem/3968059&gt; Textarea with hard-wrap: pre-filled text doesn&apos;t get hard-wrapped</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>30835</commentid>
    <comment_count>5</comment_count>
      <attachid>6170</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-31 19:05:17 -0800</bug_when>
    <thetext>Comment on attachment 6170
patch

I&apos;m not sure this handles cases where text with \r\n is pasted directly into the &lt;textarea&gt;. Did you test that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>30838</commentid>
    <comment_count>6</comment_count>
      <attachid>6170</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-31 19:13:34 -0800</bug_when>
    <thetext>Comment on attachment 6170
patch

It seems to me that \r\n and \r need to be changed to \n when text is put into the &lt;textarea&gt; directly. Otherwise, this patch looks perfect. Setting review- so you can tackle that part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>30839</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-31 19:13:59 -0800</bug_when>
    <thetext>Directly, meaning by dragging text in, pasting text, or some other technique like that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>30843</commentid>
    <comment_count>8</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-31 20:19:56 -0800</bug_when>
    <thetext>In -[KWQTextAreaTextView paste] and -[KWQTextAreaTextView performDragOperation] I could let the super NSTextView do the operation and then replace \r\ns and \rs with \ns, but that would have the effect of sending an extra textDidChangeInTextArea notification.  An extra notification would have no ill effects to the listeners we know of (WebBrowsers form delegate).  Or, I could ... no, I will not replace \r\ns and \rs on the pasteboard before calling the super&apos;s paste/drag operation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>30844</commentid>
    <comment_count>9</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-31 20:24:30 -0800</bug_when>
    <thetext>Hmm, is there another option?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>30980</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-02-01 10:20:17 -0800</bug_when>
    <thetext>I&apos;m pretty sure there is a way to catch the stuff as it&apos;s pasted in some NSTextView bottleneck.

Maybe this delegate?

    - (BOOL)textView:(NSTextView *)textView shouldChangeTextInRange:(NSRange)affectedCharRange replacementString:(NSString *)replacementString;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33828</commentid>
    <comment_count>11</comment_count>
    <who name="Julien KRIVACSY">julien</who>
    <bug_when>2006-02-23 16:48:59 -0800</bug_when>
    <thetext>Hello,
Any news of progression with the bug ?
Thank you. Julien</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33829</commentid>
    <comment_count>12</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-02-23 17:04:27 -0800</bug_when>
    <thetext>I&apos;m going to get my revised patch for this landed asap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33847</commentid>
    <comment_count>13</comment_count>
      <attachid>6695</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-02-23 22:14:57 -0800</bug_when>
    <thetext>Created attachment 6695
patch

This patch is described above, but also includes code to normalize line endings coming into the textarea via pasting or drag and drop.  I also renamed m_valueIsValid to m_valueMatchesRenderer, because I think that makes its meaning clearer.  I am currently working on a set of automated tests, and will post those shortly.  

Yes this code will be blown away soon, but the time between now and when the new textarea implementation is landed is too long to let this terrible bug sit in the tree (and 10.4.5) imo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33916</commentid>
    <comment_count>14</comment_count>
      <attachid>6695</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-02-24 19:54:44 -0800</bug_when>
    <thetext>Comment on attachment 6695
patch

In new code, please use String instead of DOMString. DOMString is a synonym allowed for backward compatibility, but should not be used in anything new.

Since HTMLTextAreaElementImpl::attach and HTMLTextAreaElementImpl::detach no longer do any special work and just call the base class, we should remove them altogether.

Why change notification to aNotification in textDidChange?

Comment says that turning \r into \n is &quot;just for good measure&quot;. But isn&apos;t it important to do it for form uploading so that all line breaks are the same?

+        [string replaceOccurrencesOfString:@&quot;\r&quot; withString:@&quot;\n&quot; options:NSLiteralSearch range:range];
+        [string replaceOccurrencesOfString:@&quot;\r\n&quot; withString:@&quot;\n&quot; options:NSLiteralSearch range:range];

The above code will change \r\n into \n\n, right? We need to do the \r\n case first.

Why add the blank lines after calling textDidChangeInTextArea?

Shouldn&apos;t we do the &quot;rangeToNormalize&quot; logic before calling widget-&gt;textChanged()?

It&apos;s fragile to count on the fact that rangeToNormalize is still a good range -- if we&apos;re off by a character we&apos;ll get an Objective-C exception. Are we certain the text field can&apos;t change between where rangeToNormalize is set and where it&apos;s used?

Now that newlineSet is not a character set any more, maybe we can just use plain old &quot;find&quot; calls instead of an NSScanner, but I suppose it&apos;s not important if this code is going away.

Setting review- because of the &quot;\r\n&quot; after &quot;\r&quot; issue and normalizing before calling textChanged() on the widget.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34259</commentid>
    <comment_count>15</comment_count>
      <attachid>6767</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-02-27 20:49:46 -0800</bug_when>
    <thetext>Created attachment 6767
patch

(In reply to comment #14)
&gt; 
&gt; Comment says that turning \r into \n is &quot;just for good measure&quot;. But isn&apos;t it
&gt; important to do it for form uploading so that all line breaks are the same?

No, when we&apos;re about to submit form data, we turn all 3 line endings into \r\n as per the w3c spec.  I changed the comment to &quot;we turn \r\ns into \ns so that a line ending is always a single character, and we turn \rs into \ns to simplify code that finds paragraph boundaries.&quot;

&gt; +        [string replaceOccurrencesOfString:@&quot;\r&quot; withString:@&quot;\n&quot;
&gt; options:NSLiteralSearch range:range];
&gt; +        [string replaceOccurrencesOfString:@&quot;\r\n&quot; withString:@&quot;\n&quot;
&gt; options:NSLiteralSearch range:range];
&gt; 
&gt; The above code will change \r\n into \n\n, right? We need to do the \r\n case
&gt; first.

Oops, I don&apos;t know why I swapped the order, baad mistake.

&gt; It&apos;s fragile to count on the fact that rangeToNormalize is still a good range
&gt; -- if we&apos;re off by a character we&apos;ll get an Objective-C exception. Are we
&gt; certain the text field can&apos;t change between where rangeToNormalize is set and
&gt; where it&apos;s used?

I&apos;m not certain.  Instead of saving rangeToNormalize, I just set a bool if the replacementString contains \rs, and then I consider the entire textarea as possibly having \rs in textDidChange.

I added two tests, one for this bug and another for &lt;rdar://problem/3968059&gt; Textarea with hard-wrap: pre-filled text doesn&apos;t get hard-wrapped.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34276</commentid>
    <comment_count>16</comment_count>
      <attachid>6767</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-02-27 22:44:25 -0800</bug_when>
    <thetext>Comment on attachment 6767
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34403</commentid>
    <comment_count>17</comment_count>
    <who name="Julien KRIVACSY">julien</who>
    <bug_when>2006-02-28 03:28:53 -0800</bug_when>
    <thetext>Solved for me too, thank you.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>6117</attachid>
            <date>2006-01-30 14:12:39 -0800</date>
            <delta_ts>2006-01-30 14:12:39 -0800</delta_ts>
            <desc>reduction</desc>
            <filename>6893-reduction.html</filename>
            <type>text/html</type>
            <size>166</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">dGV4dGFyZWE6IDx0ZXh0YXJlYSBzdHlsZT0iZGlzcGxheTpub25lIiBpZD0idGV4dGFyZWEiPjwv
dGV4dGFyZWE+Cgo8c2NyaXB0Pgp2YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXh0
YXJlYScpOwplLnZhbHVlID0gImhlbGxvIjsKYWxlcnQoZS52YWx1ZSk7Cjwvc2NyaXB0Pg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6170</attachid>
            <date>2006-01-31 17:05:32 -0800</date>
            <delta_ts>2006-02-23 22:14:57 -0800</delta_ts>
            <desc>patch</desc>
            <filename>6893.txt</filename>
            <type>text/plain</type>
            <size>18643</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvdGV4dGFyZWEtdmFsdWUtd3JhcC1oYXJkLTIt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvdGV4dGFy
ZWEtdmFsdWUtd3JhcC1oYXJkLTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS12YWx1ZS13cmFwLWhhcmQtMi1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBo
YXJkIGxpbmUgYnJlYWtzIGFyZW4ndCBhZGRlZCB0byB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IHRl
eHRhcmVhJ3MgdmFsdWUgcHJvcGVydHkuCisgCisKK0lmIHRoaXMgdGVzdCBpcyBzdWNjZXNzZnVs
LCB5b3Ugc2hvdWxkIHNlZSAnU3VjY2VzcycgYmVsb3cuCitTdWNjZXNzCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL3RleHRhcmVhLXZhbHVlLXdyYXAtaGFyZC0yLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS12YWx1ZS13cmFwLWhhcmQtMi5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS12YWx1
ZS13cmFwLWhhcmQtMi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1IEBACitUaGlzIHRl
c3QgbWFrZXMgc3VyZSB0aGF0IGhhcmQgbGluZSBicmVha3MgYXJlbid0IGFkZGVkIHRvIHRoZSBz
dHJpbmcgcmV0dXJuZWQgYnkgdGV4dGFyZWEncyB2YWx1ZSBwcm9wZXJ0eS48YnI+Cis8dGV4dGFy
ZWEgd3JhcD0iaGFyZCIgaWQ9InRleHRhcmVhIj5kZWZhdWx0IHZhbHVlPC90ZXh0YXJlYT4KKzxi
cj48YnI+CitJZiB0aGlzIHRlc3QgaXMgc3VjY2Vzc2Z1bCwgeW91IHNob3VsZCBzZWUgJ1N1Y2Nl
c3MnIGJlbG93LgorPGhyPgorCis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCit2
YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXh0YXJlYScpOwordmFyIGdldHR5c2J1
cmcgPSAiRm91ciBzY29yZSBhbmQgc2V2ZW4geWVhcnMgYWdvIG91ciBmYXRoZXJzIGJyb3VnaHQg
Zm9ydGggb24gdGhpcyBjb250aW5lbnQsIGEgbmV3IG5hdGlvbiwgY29uY2VpdmVkIGluIExpYmVy
dHksIGFuZCBkZWRpY2F0ZWQgdG8gdGhlIHByb3Bvc2l0aW9uIHRoYXQgYWxsIG1lbiBhcmUgY3Jl
YXRlZCBlcXVhbC4gIE5vdyB3ZSBhcmUgZW5nYWdlZCBpbiBhIGdyZWF0IGNpdmlsIHdhciwgdGVz
dGluZyB3aGV0aGVyIHRoYXQgbmF0aW9uLCBvciBhbnkgbmF0aW9uIHNvIGNvbmNlaXZlZCBhbmQg
c28gZGVkaWNhdGVkLCBjYW4gbG9uZyBlbmR1cmUuIFdlIGFyZSBtZXQgb24gYSBncmVhdCBiYXR0
bGUtZmllbGQgb2YgdGhhdCB3YXIuIFdlIGhhdmUgY29tZSB0byBkZWRpY2F0ZSBhIHBvcnRpb24g
b2YgdGhhdCBmaWVsZCwgYXMgYSBmaW5hbCByZXN0aW5nIHBsYWNlIGZvciB0aG9zZSB3aG8gaGVy
ZSBnYXZlIHRoZWlyIGxpdmVzIHRoYXQgdGhhdCBuYXRpb24gbWlnaHQgbGl2ZS4gSXQgaXMgYWx0
b2dldGhlciBmaXR0aW5nIGFuZCBwcm9wZXIgdGhhdCB3ZSBzaG91bGQgZG8gdGhpcy4iCitlLnZh
bHVlID0gZ2V0dHlzYnVyZzsKK3ZhciB2ID0gZS52YWx1ZTsKK3ZhciBzdWNjZXNzID0gdHJ1ZTsK
K2ZvciAodmFyIGkgPSAwOyB2W2ldOyBpKyspIHsKKyAgICBpZiAodltpXSA9PSAnXG4nIHx8IHZb
aV0gPT0gJ1xyJykgeworICAgICAgICBhbGVydCgiLi4iKTsKKyAgICAgICAgc3VjY2VzcyA9IGZh
bHNlOworICAgIH0KK30KKworaWYgKHN1Y2Nlc3MpCisgICAgZG9jdW1lbnQud3JpdGUoIlN1Y2Nl
c3MiKTsKKzwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvZm9ybXMvdGV4dGFyZWEtc2V0LXZhbHVlLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3RleHRhcmVhLXNldC12YWx1ZS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3RleHRhcmVhLXNl
dC12YWx1ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGhpcyBt
YWtlcyBzdXJlIHRoYXQgc2V0dGluZyBhIHRleHRhcmVhcyB2YWx1ZSB3b3JrcyBjb3JyZWN0bHkg
ZXZlbiBpZiBpdCBpcyBpbnZpc2libGUuCitJZiB0aGlzIHRlc3QgaXMgc3VjY2Vzc2Z1bCwgeW91
IHNob3VsZCBzZWUgJ1N1Y2Nlc3MnIGJlbG93LgorU3VjY2VzcwpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9mb3Jtcy90ZXh0YXJlYS1zZXQtdmFsdWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL3RleHRhcmVhLXNldC12YWx1ZS5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS1zZXQtdmFsdWUuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNyBAQAorVGhpcyBtYWtlcyBzdXJlIHRoYXQgc2V0dGluZyBhIHRleHRh
cmVhcyB2YWx1ZSB3b3JrcyBjb3JyZWN0bHkgZXZlbiBpZiBpdCBpcyBpbnZpc2libGUuPGJyPgor
SWYgdGhpcyB0ZXN0IGlzIHN1Y2Nlc3NmdWwsIHlvdSBzaG91bGQgc2VlICdTdWNjZXNzJyBiZWxv
dy4KKzx0ZXh0YXJlYSBzdHlsZT0iZGlzcGxheTpub25lIiBpZD0idGV4dGFyZWEiPjwvdGV4dGFy
ZWE+Cis8aHI+CisKKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgCit2YXIg
ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXh0YXJlYScpOwordmFyIG5ld1ZhbHVlID0g
Im5ldyB2YWx1ZSI7CitlLnZhbHVlID0gbmV3VmFsdWU7CisKK2lmIChlLnZhbHVlID09IG5ld1Zh
bHVlKQorICAgIGRvY3VtZW50LndyaXRlKCJTdWNjZXNzIik7CisKKzwvc2NyaXB0PgpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvdGV4dGFy
ZWEtdmFsdWUtd3JhcC1oYXJkLTEtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvZm9ybXMvdGV4dGFyZWEtdmFsdWUtd3JhcC1oYXJkLTEtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS12YWx1ZS13cmFw
LWhhcmQtMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorVGhpcyB0
ZXN0IG1ha2VzIHN1cmUgdGhhdCBoYXJkIGxpbmUgYnJlYWtzIGFyZW4ndCBhZGRlZCB0byB0aGUg
c3RyaW5nIHJldHVybmVkIGJ5IHRleHRhcmVhJ3MgdmFsdWUgcHJvcGVydHkuCisgCisKK0lmIHRo
aXMgdGVzdCBpcyBzdWNjZXNzZnVsLCB5b3Ugc2hvdWxkIHNlZSAnU3VjY2VzcycgYmVsb3cuCitT
dWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3RleHRhcmVhLXZhbHVlLXdyYXAt
aGFyZC0xLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJl
YS12YWx1ZS13cmFwLWhhcmQtMS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9mb3Jtcy90ZXh0YXJlYS12YWx1ZS13cmFwLWhhcmQtMS5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDIzIEBACitUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IGhhcmQgbGluZSBicmVha3Mg
YXJlbid0IGFkZGVkIHRvIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdGV4dGFyZWEncyB2YWx1ZSBw
cm9wZXJ0eS48YnI+Cis8dGV4dGFyZWEgd3JhcD0iaGFyZCIgaWQ9InRleHRhcmVhIj5Gb3VyIHNj
b3JlIGFuZCBzZXZlbiB5ZWFycyBhZ28gb3VyIGZhdGhlcnMgYnJvdWdodCBmb3J0aCBvbiB0aGlz
IGNvbnRpbmVudCwgYSBuZXcgbmF0aW9uLCBjb25jZWl2ZWQgaW4gTGliZXJ0eSwgYW5kIGRlZGlj
YXRlZCB0byB0aGUgcHJvcG9zaXRpb24gdGhhdCBhbGwgbWVuIGFyZSBjcmVhdGVkIGVxdWFsLiAg
Tm93IHdlIGFyZSBlbmdhZ2VkIGluIGEgZ3JlYXQgY2l2aWwgd2FyLCB0ZXN0aW5nIHdoZXRoZXIg
dGhhdCBuYXRpb24sIG9yIGFueSBuYXRpb24gc28gY29uY2VpdmVkIGFuZCBzbyBkZWRpY2F0ZWQs
IGNhbiBsb25nIGVuZHVyZS4gV2UgYXJlIG1ldCBvbiBhIGdyZWF0IGJhdHRsZS1maWVsZCBvZiB0
aGF0IHdhci4gV2UgaGF2ZSBjb21lIHRvIGRlZGljYXRlIGEgcG9ydGlvbiBvZiB0aGF0IGZpZWxk
LCBhcyBhIGZpbmFsIHJlc3RpbmcgcGxhY2UgZm9yIHRob3NlIHdobyBoZXJlIGdhdmUgdGhlaXIg
bGl2ZXMgdGhhdCB0aGF0IG5hdGlvbiBtaWdodCBsaXZlLiBJdCBpcyBhbHRvZ2V0aGVyIGZpdHRp
bmcgYW5kIHByb3BlciB0aGF0IHdlIHNob3VsZCBkbyB0aGlzLjwvdGV4dGFyZWE+Cis8YnI+PGJy
PgorSWYgdGhpcyB0ZXN0IGlzIHN1Y2Nlc3NmdWwsIHlvdSBzaG91bGQgc2VlICdTdWNjZXNzJyBi
ZWxvdy4KKzxocj4KKworPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CisgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAKK3Zh
ciBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RleHRhcmVhJyk7Cit2YXIgdiA9IGUudmFs
dWU7Cit2YXIgc3VjY2VzcyA9IHRydWU7Citmb3IgKHZhciBpID0gMDsgdltpXTsgaSsrKSB7Cisg
ICAgaWYgKHZbaV0gPT0gJ1xuJyB8fCB2W2ldID09ICdccicpIHsKKyAgICAgICAgYWxlcnQoIi4u
Iik7CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICB9Cit9CisKK2lmIChzdWNjZXNzKQor
ICAgIGRvY3VtZW50LndyaXRlKCJTdWNjZXNzIik7Cis8L3NjcmlwdD4KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCkluZGV4OiBXZWJDb3JlL2todG1sL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVu
dEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL2h0bWwvSFRNTFRleHRBcmVhRWxl
bWVudEltcGwuaAkocmV2aXNpb24gMTIzNzkpCisrKyBXZWJDb3JlL2todG1sL2h0bWwvSFRNTFRl
eHRBcmVhRWxlbWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtODIsMTMgKzgyLDExIEBACiAg
ICAgdm9pZCBzZXRWYWx1ZShjb25zdCBET01TdHJpbmcgJnZhbHVlKTsKICAgICBET01TdHJpbmcg
ZGVmYXVsdFZhbHVlKCk7CiAgICAgdm9pZCBzZXREZWZhdWx0VmFsdWUoY29uc3QgRE9NU3RyaW5n
ICZ2YWx1ZSk7Ci0KKyAgICAKICAgICB2b2lkIGludmFsaWRhdGVWYWx1ZSgpIHsgbV92YWx1ZUlz
VmFsaWQgPSBmYWxzZTsgfQogICAgIHZvaWQgdXBkYXRlVmFsdWUoKTsKKyAgICB2b2lkIHJlbmRl
cmVyV2lsbEJlRGVzdHJveWVkKCk7CiAKLSAgICBib29sIHZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZU1hdGNoZXNSZW5kZXJlcjsgfQotICAgIHZvaWQgc2V0VmFs
dWVNYXRjaGVzUmVuZGVyZXIoKSB7IG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIgPSB0cnVlOyB9Ci0K
ICAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0YWJsZSgpOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBh
Y2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kVG9BbnlFbGVtZW50KTsKQEAgLTEwNCw5ICsxMDIsOCBA
QAogICAgIGludCBtX3Jvd3M7CiAgICAgaW50IG1fY29sczsKICAgICBXcmFwTWV0aG9kIG1fd3Jh
cDsKLSAgICBRU3RyaW5nIG1fdmFsdWU7CisgICAgRE9NU3RyaW5nIG1fdmFsdWU7CiAgICAgYm9v
bCBtX3ZhbHVlSXNWYWxpZDsKLSAgICBib29sIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXI7CiB9Owog
CiB9IC8vbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2todG1sL2h0bWwvSFRNTFRleHRBcmVhRWxl
bWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwvaHRtbC9IVE1MVGV4dEFy
ZWFFbGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDEyMzc5KQorKysgV2ViQ29yZS9raHRtbC9odG1s
L0hUTUxUZXh0QXJlYUVsZW1lbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAs
OCBAQAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogSFRNTFRleHRBcmVhRWxlbWVudElt
cGw6OkhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsKERvY3VtZW50SW1wbCAqZG9jLCBIVE1MRm9ybUVs
ZW1lbnRJbXBsICpmKQotICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwodGV4dGFyZWFU
YWcsIGRvYywgZiksIG1fdmFsdWVJc1ZhbGlkKGZhbHNlKSwgbV92YWx1ZU1hdGNoZXNSZW5kZXJl
cihmYWxzZSkKKyAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKHRleHRhcmVhVGFnLCBk
b2MsIGYpCisgICAgLCBtX3ZhbHVlSXNWYWxpZCh0cnVlKQogewogICAgIC8vIERURCByZXF1aXJl
cyByb3dzICYgY29scyBiZSBzcGVjaWZpZWQsIGJ1dCB3ZSB3aWxsIHByb3ZpZGUgcmVhc29uYWJs
ZSBkZWZhdWx0cwogICAgIG1fcm93cyA9IDI7CkBAIC05OCw3ICs5OSw3IEBACiAgICAgICAgIHN0
YXRpY19jYXN0PFJlbmRlclRleHRBcmVhICo+KHJlbmRlcmVyKCkpLT5zZXRTZWxlY3Rpb25FbmQo
ZW5kKTsKIH0KIAotdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6c2VsZWN0KCAgKQordm9p
ZCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6c2VsZWN0KCkKIHsKICAgICBpZiAocmVuZGVyZXIo
KSkKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dEFyZWEqPihyZW5kZXJlcigpKS0+c2Vs
ZWN0KCk7CkBAIC0xNTksOCArMTYwLDEyIEBACiAKIGJvb2wgSFRNTFRleHRBcmVhRWxlbWVudElt
cGw6OmFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYgZW5jb2RpbmcsIGJvb2wpCiB7Ci0gICAg
aWYgKG5hbWUoKS5pc0VtcHR5KCkpIHJldHVybiBmYWxzZTsKLSAgICBlbmNvZGluZy5hcHBlbmRE
YXRhKG5hbWUoKSwgdmFsdWUoKSk7CisgICAgaWYgKG5hbWUoKS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgYm9vbCBoYXJkV3JhcCA9IHJlbmRlcmVyKCkg
JiYgd3JhcCgpID09IHRhX1BoeXNpY2FsOworICAgIERPTVN0cmluZyB2ID0gaGFyZFdyYXAgPyBz
dGF0aWNfY2FzdDxSZW5kZXJUZXh0QXJlYSo+KHJlbmRlcmVyKCkpLT50ZXh0V2l0aEhhcmRMaW5l
QnJlYWtzKCkgOiB2YWx1ZSgpOworICAgIGVuY29kaW5nLmFwcGVuZERhdGEobmFtZSgpLCB2KTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTY5LDE2ICsxNzQsMTYgQEAKICAgICBzZXRWYWx1
ZShkZWZhdWx0VmFsdWUoKSk7CiB9CiAKK3ZvaWQgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnJl
bmRlcmVyV2lsbEJlRGVzdHJveWVkKCkKK3sKKyAgICB1cGRhdGVWYWx1ZSgpOworfQorCiB2b2lk
IEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjp1cGRhdGVWYWx1ZSgpCiB7CiAgICAgaWYgKCFtX3Zh
bHVlSXNWYWxpZCkgewotICAgICAgICBpZiAocmVuZGVyZXIoKSkgewotICAgICAgICAgICAgbV92
YWx1ZSA9IHN0YXRpY19jYXN0PFJlbmRlclRleHRBcmVhKj4ocmVuZGVyZXIoKSktPnRleHQoKS5x
c3RyaW5nKCk7Ci0gICAgICAgICAgICBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyID0gdHJ1ZTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fdmFsdWUgPSBkZWZhdWx0VmFsdWUoKS5xc3Ry
aW5nKCk7Ci0gICAgICAgICAgICBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyID0gZmFsc2U7Ci0gICAg
ICAgIH0KKyAgICAgICAgQVNTRVJUKHJlbmRlcmVyKCkpOworICAgICAgICBtX3ZhbHVlID0gc3Rh
dGljX2Nhc3Q8UmVuZGVyVGV4dEFyZWEqPihyZW5kZXJlcigpKS0+dGV4dCgpOwogICAgICAgICBt
X3ZhbHVlSXNWYWxpZCA9IHRydWU7CiAgICAgfQogfQpAQCAtMTg2LDIyICsxOTEsMjIgQEAKIERP
TVN0cmluZyBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6dmFsdWUoKQogewogICAgIHVwZGF0ZVZh
bHVlKCk7Ci0gICAgcmV0dXJuIG1fdmFsdWUuaXNOdWxsKCkgPyBET01TdHJpbmcoIiIpIDogbV92
YWx1ZTsKKyAgICByZXR1cm4gbV92YWx1ZTsKIH0KIAogdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50
SW1wbDo6c2V0VmFsdWUoY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkKIHsKLSAgICBtX3ZhbHVlID0g
dmFsdWUucXN0cmluZygpOwotICAgIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIgPSBmYWxzZTsKKyAg
ICBRU3RyaW5nIHN0cmluZyA9IHZhbHVlLnFzdHJpbmcoKTsKKyAgICBzdHJpbmcucmVwbGFjZSgi
XHJcbiIsICJcbiIpOworICAgIHN0cmluZy5yZXBsYWNlKCJcciIsICJcbiIpOworICAgIAorICAg
IG1fdmFsdWUgPSBET01TdHJpbmcoc3RyaW5nKTsKICAgICBtX3ZhbHVlSXNWYWxpZCA9IHRydWU7
CiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZyb21FbGVt
ZW50KCk7Ci0gICAgLy8gRklYTUU6IEZvcmNlIHJlbG9hZCBmcm9tIHJlbmRlcmVyLCBhcyByZW5k
ZXJlciBtYXkgaGF2ZSBub3JtYWxpemVkIGxpbmUgZW5kaW5ncy4KLSAgICBtX3ZhbHVlSXNWYWxp
ZCA9IGZhbHNlOwogICAgIHNldENoYW5nZWQodHJ1ZSk7CiB9CiAKLQogRE9NU3RyaW5nIEhUTUxU
ZXh0QXJlYUVsZW1lbnRJbXBsOjpkZWZhdWx0VmFsdWUoKQogewogICAgIERPTVN0cmluZyB2YWwg
PSAiIjsKQEAgLTIxMSwxMyArMjE2LDEyIEBACiAgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkp
CiAgICAgICAgICAgICB2YWwgKz0gc3RhdGljX2Nhc3Q8VGV4dEltcGwqPihuKS0+ZGF0YSgpOwog
ICAgIAotICAgIGlmICh2YWxbMF0gPT0gJ1xyJyAmJiB2YWxbMV0gPT0gJ1xuJykgewotICAgICAg
ICB2YWwgPSB2YWwuY29weSgpOwotICAgICAgICB2YWwucmVtb3ZlKDAsMik7Ci0gICAgfSBlbHNl
IGlmICh2YWxbMF0gPT0gJ1xyJyB8fCB2YWxbMF0gPT0gJ1xuJykgewotICAgICAgICB2YWwgPSB2
YWwuY29weSgpOwotICAgICAgICB2YWwucmVtb3ZlKDAsMSk7Ci0gICAgfQorICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgb25seSBkcm9wIHRoZSBmaXJzdCBjYXJyaWFnZSByZXR1cm4gZm9yIHRoZSBk
ZWZhdWx0CisgICAgLy8gdmFsdWUgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgbm90IGRlZmF1bHRW
YWx1ZXMgc2V0IGZyb20gSlMuCisgICAgaWYgKHZhbC5sZW5ndGgoKSA+PSAyICYmIHZhbFswXSA9
PSAnXHInICYmIHZhbFsxXSA9PSAnXG4nKQorICAgICAgICB2YWwucmVtb3ZlKDAsIDIpOworICAg
IGVsc2UgaWYgKHZhbC5sZW5ndGgoKSA+PSAxICYmICh2YWxbMF0gPT0gJ1xyJyB8fCB2YWxbMF0g
PT0gJ1xuJykpCisgICAgICAgIHZhbC5yZW1vdmUoMCwgMSk7CiAKICAgICByZXR1cm4gdmFsOwog
fQpAQCAtMjU0LDE1ICsyNTgsMTIgQEAKIAogdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6
YXR0YWNoKCkKIHsKLSAgICBtX3ZhbHVlSXNWYWxpZCA9IHRydWU7CiAgICAgSFRNTEdlbmVyaWNG
b3JtRWxlbWVudEltcGw6OmF0dGFjaCgpOwotICAgIHVwZGF0ZVZhbHVlKCk7CiB9CiAKIHZvaWQg
SFRNTFRleHRBcmVhRWxlbWVudEltcGw6OmRldGFjaCgpCiB7CiAgICAgSFRNTEdlbmVyaWNGb3Jt
RWxlbWVudEltcGw6OmRldGFjaCgpOwotICAgIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIgPSBmYWxz
ZTsKIH0KIAogRE9NU3RyaW5nIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjphY2Nlc3NLZXkoKSBj
b25zdApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5oCShyZXZpc2lvbiAxMjM3OSkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw2ICsz
MjgsNyBAQAogICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PERPTTo6SFRNTFRleHRBcmVhRWxlbWVu
dEltcGwqPihSZW5kZXJPYmplY3Q6OmVsZW1lbnQoKSk7IH0KIAogICAgIERPTTo6RE9NU3RyaW5n
IHRleHQoKTsKKyAgICBET006OkRPTVN0cmluZyB0ZXh0V2l0aEhhcmRMaW5lQnJlYWtzKCk7CiAK
ICAgICBpbnQgc2VsZWN0aW9uU3RhcnQoKTsKICAgICBpbnQgc2VsZWN0aW9uRW5kKCk7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCShyZXZpc2lvbiAxMjM3OSkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTk0LDE2ICs5OTQs
MTQgQEAKIAogdm9pZCBSZW5kZXJUZXh0QXJlYTo6ZGVzdHJveSgpCiB7Ci0gICAgZWxlbWVudCgp
LT51cGRhdGVWYWx1ZSgpOworICAgIGVsZW1lbnQoKS0+cmVuZGVyZXJXaWxsQmVEZXN0cm95ZWQo
KTsKICAgICBSZW5kZXJGb3JtRWxlbWVudDo6ZGVzdHJveSgpOwogfQogCiB2b2lkIFJlbmRlclRl
eHRBcmVhOjpoYW5kbGVGb2N1c091dCgpCiB7Ci0gICAgaWYgKCBtX2RpcnR5ICYmIGVsZW1lbnQo
KSApIHsKLSAgICAgICAgZWxlbWVudCgpLT51cGRhdGVWYWx1ZSgpOworICAgIGlmIChtX2RpcnR5
ICYmIGVsZW1lbnQoKSkKICAgICAgICAgZWxlbWVudCgpLT5vbkNoYW5nZSgpOwotICAgIH0KICAg
ICBtX2RpcnR5ID0gZmFsc2U7CiB9CiAKQEAgLTEwNTksMzYgKzEwNTcsMzEgQEAKICAgICB3LT5z
ZXRSZWFkT25seShlLT5yZWFkT25seSgpKTsKICAgICB3LT5zZXREaXNhYmxlZChlLT5kaXNhYmxl
ZCgpKTsKIAotICAgIGUtPnVwZGF0ZVZhbHVlKCk7Ci0gICAgaWYgKCFlLT52YWx1ZU1hdGNoZXNS
ZW5kZXJlcigpKSB7Ci0gICAgICAgIERPTVN0cmluZyB3aWRnZXRUZXh0ID0gdGV4dCgpOwotICAg
ICAgICBET01TdHJpbmcgdGV4dCA9IGUtPnZhbHVlKCk7Ci0gICAgICAgIHRleHQucmVwbGFjZShR
Q2hhcignXFwnKSwgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKLSAgICAgICAgaWYgKHdp
ZGdldFRleHQgIT0gdGV4dCkgewotICAgICAgICAgICAgdy0+YmxvY2tTaWduYWxzKHRydWUpOwot
ICAgICAgICAgICAgaW50IGxpbmUsIGNvbDsKLSAgICAgICAgICAgIHctPmdldEN1cnNvclBvc2l0
aW9uKCAmbGluZSwgJmNvbCApOwotICAgICAgICAgICAgdy0+c2V0VGV4dCh0ZXh0KTsKLSAgICAg
ICAgICAgIHctPnNldEN1cnNvclBvc2l0aW9uKCBsaW5lLCBjb2wgKTsKLSAgICAgICAgICAgIHct
PmJsb2NrU2lnbmFscyhmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZS0+c2V0VmFsdWVNYXRj
aGVzUmVuZGVyZXIoKTsKLSAgICAgICAgbV9kaXJ0eSA9IGZhbHNlOworICAgIERPTVN0cmluZyB3
aWRnZXRUZXh0ID0gdGV4dCgpOworICAgIERPTVN0cmluZyB0ZXh0ID0gZS0+dmFsdWUoKTsKKyAg
ICB0ZXh0LnJlcGxhY2UoUUNoYXIoJ1xcJyksIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7
CisgICAgaWYgKHdpZGdldFRleHQgIT0gdGV4dCkgeworICAgICAgICB3LT5ibG9ja1NpZ25hbHMo
dHJ1ZSk7CisgICAgICAgIGludCBsaW5lLCBjb2w7CisgICAgICAgIHctPmdldEN1cnNvclBvc2l0
aW9uKCAmbGluZSwgJmNvbCApOworICAgICAgICB3LT5zZXRUZXh0KHRleHQpOworICAgICAgICB3
LT5zZXRDdXJzb3JQb3NpdGlvbiggbGluZSwgY29sICk7CisgICAgICAgIHctPmJsb2NrU2lnbmFs
cyhmYWxzZSk7CiAgICAgfQorICAgIG1fZGlydHkgPSBmYWxzZTsKIAogICAgIFJlbmRlckZvcm1F
bGVtZW50Ojp1cGRhdGVGcm9tRWxlbWVudCgpOwogfQogCi1ET01TdHJpbmcgUmVuZGVyVGV4dEFy
ZWE6OnRleHQoKQorRE9NU3RyaW5nIFJlbmRlclRleHRBcmVhOjp0ZXh0V2l0aEhhcmRMaW5lQnJl
YWtzKCkKIHsKLSAgICBET01TdHJpbmcgdHh0OwotICAgIFFUZXh0RWRpdCogdyA9IHN0YXRpY19j
YXN0PFFUZXh0RWRpdCo+KG1fd2lkZ2V0KTsKKyAgICBET01TdHJpbmcgdHh0ID0gc3RhdGljX2Nh
c3Q8UVRleHRFZGl0Kj4obV93aWRnZXQpLT50ZXh0V2l0aEhhcmRMaW5lQnJlYWtzKCk7CisgICAg
cmV0dXJuIHR4dC5yZXBsYWNlKGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSwgUUNoYXIoJ1xc
JykpOworfQogCi0gICAgaWYgKGVsZW1lbnQoKS0+d3JhcCgpID09IEhUTUxUZXh0QXJlYUVsZW1l
bnRJbXBsOjp0YV9QaHlzaWNhbCkKLSAgICAgICAgdHh0ID0gdy0+dGV4dFdpdGhIYXJkTGluZUJy
ZWFrcygpOwotICAgIGVsc2UKLSAgICAgICAgdHh0ID0gdy0+dGV4dCgpOwotCitET01TdHJpbmcg
UmVuZGVyVGV4dEFyZWE6OnRleHQoKQoreworICAgIERPTVN0cmluZyB0eHQgPSBzdGF0aWNfY2Fz
dDxRVGV4dEVkaXQqPihtX3dpZGdldCktPnRleHQoKTsKICAgICByZXR1cm4gdHh0LnJlcGxhY2Uo
YmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpLCBRQ2hhcignXFwnKSk7CiB9CiAKSW5kZXg6IFdl
YkNvcmUva3dxL0tXUVRleHRBcmVhLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3dxL0tXUVRl
eHRBcmVhLm1tCShyZXZpc2lvbiAxMjM3OSkKKysrIFdlYkNvcmUva3dxL0tXUVRleHRBcmVhLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yNDQsMjAgKzI0NCw3IEBACiAKIC0gKE5TU3RyaW5nICopdGV4
dAogewotICAgIE5TU3RyaW5nICp0ZXh0ID0gW3RleHRWaWV3IHN0cmluZ107Ci0gICAgCi0gICAg
aWYgKFt0ZXh0IHJhbmdlT2ZTdHJpbmc6QCJcciIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2hdLmxv
Y2F0aW9uICE9IE5TTm90Rm91bmQpIHsKLSAgICAgICAgTlNNdXRhYmxlU3RyaW5nICptdXRhYmxl
VGV4dCA9IFtbdGV4dCBtdXRhYmxlQ29weV0gYXV0b3JlbGVhc2VdOwotICAgIAotICAgICAgICBb
bXV0YWJsZVRleHQgcmVwbGFjZU9jY3VycmVuY2VzT2ZTdHJpbmc6QCJcclxuIiB3aXRoU3RyaW5n
OkAiXG4iCi0gICAgICAgICAgICBvcHRpb25zOk5TTGl0ZXJhbFNlYXJjaCByYW5nZTpOU01ha2VS
YW5nZSgwLCBbbXV0YWJsZVRleHQgbGVuZ3RoXSldOwotICAgICAgICBbbXV0YWJsZVRleHQgcmVw
bGFjZU9jY3VycmVuY2VzT2ZTdHJpbmc6QCJcciIgd2l0aFN0cmluZzpAIlxuIgotICAgICAgICAg
ICAgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2ggcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW211dGFibGVU
ZXh0IGxlbmd0aF0pXTsKLSAgICAgICAgCi0gICAgICAgIHRleHQgPSBtdXRhYmxlVGV4dDsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdGV4dDsKKyAgICByZXR1cm4gW3RleHRWaWV3IHN0cmluZ107CiB9
CiAKIC0gKE5TU3RyaW5nICopdGV4dFdpdGhIYXJkTGluZUJyZWFrcwpAQCAtMjc0LDE4ICsyNjEs
MTMgQEAKICAgICAgICAgTlNSYW5nZSBsaW5lUmFuZ2UgPSBbbGF5b3V0TWFuYWdlciBjaGFyYWN0
ZXJSYW5nZUZvckdseXBoUmFuZ2U6bGluZUdseXBoUmFuZ2UgYWN0dWFsR2x5cGhSYW5nZTpOVUxM
XTsKICAgICAgICAgaWYgKFt0ZXh0V2l0aEhhcmRMaW5lQnJlYWtzIGxlbmd0aF0pIHsKICAgICAg
ICAgICAgIHVuaWNoYXIgbGFzdENoYXJhY3RlciA9IFt0ZXh0V2l0aEhhcmRMaW5lQnJlYWtzIGNo
YXJhY3RlckF0SW5kZXg6W3RleHRXaXRoSGFyZExpbmVCcmVha3MgbGVuZ3RoXSAtIDFdOwotICAg
ICAgICAgICAgaWYgKGxhc3RDaGFyYWN0ZXIgIT0gJ1xuJyAmJiBsYXN0Q2hhcmFjdGVyICE9ICdc
cicpIHsKKyAgICAgICAgICAgIGlmIChsYXN0Q2hhcmFjdGVyICE9ICdcbicpIHsKICAgICAgICAg
ICAgICAgICBbdGV4dFdpdGhIYXJkTGluZUJyZWFrcyBhcHBlbmRTdHJpbmc6QCJcbiJdOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIFt0ZXh0V2l0aEhhcmRMaW5lQnJlYWtzIGFw
cGVuZFN0cmluZzpbdGV4dCBzdWJzdHJpbmdXaXRoUmFuZ2U6bGluZVJhbmdlXV07CiAgICAgfQog
Ci0gICAgW3RleHRXaXRoSGFyZExpbmVCcmVha3MgcmVwbGFjZU9jY3VycmVuY2VzT2ZTdHJpbmc6
QCJcclxuIiB3aXRoU3RyaW5nOkAiXG4iCi0gICAgICAgIG9wdGlvbnM6TlNMaXRlcmFsU2VhcmNo
IHJhbmdlOk5TTWFrZVJhbmdlKDAsIFt0ZXh0V2l0aEhhcmRMaW5lQnJlYWtzIGxlbmd0aF0pXTsK
LSAgICBbdGV4dFdpdGhIYXJkTGluZUJyZWFrcyByZXBsYWNlT2NjdXJyZW5jZXNPZlN0cmluZzpA
IlxyIiB3aXRoU3RyaW5nOkAiXG4iCi0gICAgICAgIG9wdGlvbnM6TlNMaXRlcmFsU2VhcmNoIHJh
bmdlOk5TTWFrZVJhbmdlKDAsIFt0ZXh0V2l0aEhhcmRMaW5lQnJlYWtzIGxlbmd0aF0pXTsKLQog
ICAgIHJldHVybiB0ZXh0V2l0aEhhcmRMaW5lQnJlYWtzOwogfQogCkBAIC0yOTYsNjIgKzI3OCwx
MiBAQAogCiAtICh2b2lkKXNldFNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2UpYVJhbmdlCiB7Ci0gICAg
TlNTdHJpbmcgKnRleHQgPSBbdGV4dFZpZXcgc3RyaW5nXTsKLSAgICAvLyBPaywgdGhlIHNlbGVj
dGlvbiBoYXMgdG8gbWF0Y2ggdXAgd2l0aCB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IC10ZXh0Ci0g
ICAgLy8gYW5kIHNpbmNlIC10ZXh0IHRyYW5zbGF0ZXMgXHJcbiB0byBcbiwgd2UgaGF2ZSB0byBt
b2RpZnkgb3VyIHNlbGVjdGlvbgotICAgIC8vIGlmIGEgXHJcbiBzZXF1ZW5jZSBpcyBhbnl3aGVy
ZSBpbiBvciBiZWZvcmUgdGhlIHNlbGVjdGlvbgotICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKLSAg
ICBOU1JhbmdlIGZvdW5kUmFuZ2UsIHNlYXJjaFJhbmdlID0gTlNNYWtlUmFuZ2UoMCwgYVJhbmdl
LmxvY2F0aW9uKTsKLSAgICB3aGlsZSAoZm91bmRSYW5nZSA9IFt0ZXh0IHJhbmdlT2ZTdHJpbmc6
QCJcclxuIiBvcHRpb25zOk5TTGl0ZXJhbFNlYXJjaCByYW5nZTpzZWFyY2hSYW5nZV0sCi0gICAg
ICAgICAgIGZvdW5kUmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgewotICAgICAgICBjb3Vu
dCsrOwotICAgICAgICBzZWFyY2hSYW5nZS5sb2NhdGlvbiA9IE5TTWF4UmFuZ2UoZm91bmRSYW5n
ZSk7Ci0gICAgICAgIGlmIChzZWFyY2hSYW5nZS5sb2NhdGlvbiA+PSBhUmFuZ2UubG9jYXRpb24p
IGJyZWFrOwotICAgICAgICBzZWFyY2hSYW5nZS5sZW5ndGggPSBhUmFuZ2UubG9jYXRpb24gLSBz
ZWFyY2hSYW5nZS5sb2NhdGlvbjsKLSAgICB9Ci0gICAgYVJhbmdlLmxvY2F0aW9uICs9IGNvdW50
OwotICAgIGNvdW50ID0gMDsKLSAgICBzZWFyY2hSYW5nZSA9IE5TTWFrZVJhbmdlKGFSYW5nZS5s
b2NhdGlvbiwgYVJhbmdlLmxlbmd0aCk7Ci0gICAgd2hpbGUgKGZvdW5kUmFuZ2UgPSBbdGV4dCBy
YW5nZU9mU3RyaW5nOkAiXHJcbiIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2ggcmFuZ2U6c2VhcmNo
UmFuZ2VdLAotICAgICAgICAgICBmb3VuZFJhbmdlLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpIHsK
LSAgICAgICAgY291bnQrKzsKLSAgICAgICAgc2VhcmNoUmFuZ2UubG9jYXRpb24gPSBOU01heFJh
bmdlKGZvdW5kUmFuZ2UpOwotICAgICAgICBpZiAoc2VhcmNoUmFuZ2UubG9jYXRpb24gPj0gTlNN
YXhSYW5nZShhUmFuZ2UpKSBicmVhazsKLSAgICAgICAgc2VhcmNoUmFuZ2UubGVuZ3RoID0gTlNN
YXhSYW5nZShhUmFuZ2UpIC0gc2VhcmNoUmFuZ2UubG9jYXRpb247Ci0gICAgfQotICAgIGFSYW5n
ZS5sZW5ndGggKz0gY291bnQ7CiAgICAgW3RleHRWaWV3IHNldFNlbGVjdGVkUmFuZ2U6YVJhbmdl
XTsKIH0KIAogLSAoTlNSYW5nZSlzZWxlY3RlZFJhbmdlCiB7Ci0gICAgTlNSYW5nZSBhUmFuZ2Ug
PSBbdGV4dFZpZXcgc2VsZWN0ZWRSYW5nZV07Ci0gICAgaWYgKGFSYW5nZS5sb2NhdGlvbiA9PSBO
U05vdEZvdW5kKSB7Ci0gICAgICAgIHJldHVybiBhUmFuZ2U7Ci0gICAgfQotICAgIC8vIFNhbWUg
aXNzdWUgYXMgd2l0aCAtc2V0U2VsZWN0ZWRSYW5nZTogcmVnYXJkaW5nIFxyXG4gc2VxdWVuY2Vz
Ci0gICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgIE5TUmFuZ2UgZm91bmRSYW5nZSwgc2VhcmNo
UmFuZ2UgPSBOU01ha2VSYW5nZSgwLCBhUmFuZ2UubG9jYXRpb24pOwotICAgIE5TU3RyaW5nICp0
ZXh0ID0gW3RleHRWaWV3IHN0cmluZ107Ci0gICAgd2hpbGUgKGZvdW5kUmFuZ2UgPSBbdGV4dCBy
YW5nZU9mU3RyaW5nOkAiXHJcbiIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2ggcmFuZ2U6c2VhcmNo
UmFuZ2VdLAotICAgICAgICAgICBmb3VuZFJhbmdlLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpIHsK
LSAgICAgICAgY291bnQrKzsKLSAgICAgICAgc2VhcmNoUmFuZ2UubG9jYXRpb24gPSBOU01heFJh
bmdlKGZvdW5kUmFuZ2UpOwotICAgICAgICBpZiAoc2VhcmNoUmFuZ2UubG9jYXRpb24gPj0gYVJh
bmdlLmxvY2F0aW9uKSBicmVhazsKLSAgICAgICAgc2VhcmNoUmFuZ2UubGVuZ3RoID0gYVJhbmdl
LmxvY2F0aW9uIC0gc2VhcmNoUmFuZ2UubG9jYXRpb247Ci0gICAgfQotICAgIGFSYW5nZS5sb2Nh
dGlvbiAtPSBjb3VudDsKLSAgICBjb3VudCA9IDA7Ci0gICAgc2VhcmNoUmFuZ2UgPSBOU01ha2VS
YW5nZShhUmFuZ2UubG9jYXRpb24sIGFSYW5nZS5sZW5ndGgpOwotICAgIHdoaWxlIChmb3VuZFJh
bmdlID0gW3RleHQgcmFuZ2VPZlN0cmluZzpAIlxyXG4iIG9wdGlvbnM6TlNMaXRlcmFsU2VhcmNo
IHJhbmdlOnNlYXJjaFJhbmdlXSwKLSAgICAgICAgICAgZm91bmRSYW5nZS5sb2NhdGlvbiAhPSBO
U05vdEZvdW5kKSB7Ci0gICAgICAgIGNvdW50Kys7Ci0gICAgICAgIHNlYXJjaFJhbmdlLmxvY2F0
aW9uID0gTlNNYXhSYW5nZShmb3VuZFJhbmdlKTsKLSAgICAgICAgaWYgKHNlYXJjaFJhbmdlLmxv
Y2F0aW9uID49IE5TTWF4UmFuZ2UoYVJhbmdlKSkgYnJlYWs7Ci0gICAgICAgIHNlYXJjaFJhbmdl
Lmxlbmd0aCA9IE5TTWF4UmFuZ2UoYVJhbmdlKSAtIHNlYXJjaFJhbmdlLmxvY2F0aW9uOwotICAg
IH0KLSAgICBhUmFuZ2UubGVuZ3RoIC09IGNvdW50OwotICAgIHJldHVybiBhUmFuZ2U7CisgICAg
cmV0dXJuIFt0ZXh0VmlldyBzZWxlY3RlZFJhbmdlXTsKIH0KIAogLSAoQk9PTCloYXNTZWxlY3Rp
b24KQEAgLTQ2MSw3ICszOTMsNyBAQAogICAgIAogICAgIE5TU2Nhbm5lciAqc2Nhbm5lciA9IFtO
U1NjYW5uZXIgc2Nhbm5lcldpdGhTdHJpbmc6dGV4dF07CiAgICAgW3NjYW5uZXIgc2V0Q2hhcmFj
dGVyc1RvQmVTa2lwcGVkOm5pbF07Ci0gICAgTlNDaGFyYWN0ZXJTZXQgKm5ld2xpbmVTZXQgPSBb
TlNDaGFyYWN0ZXJTZXQgY2hhcmFjdGVyU2V0V2l0aENoYXJhY3RlcnNJblN0cmluZzpAIlxyXG4i
XTsKKyAgICBOU0NoYXJhY3RlclNldCAqbmV3bGluZVNldCA9IFtOU0NoYXJhY3RlclNldCBjaGFy
YWN0ZXJTZXRXaXRoQ2hhcmFjdGVyc0luU3RyaW5nOkAiXG4iXTsKIAogICAgIHdoaWxlICh0cnVl
KSB7CiAgICAgICAgIFtzY2FubmVyIHNjYW5VcFRvQ2hhcmFjdGVyc0Zyb21TZXQ6bmV3bGluZVNl
dCBpbnRvU3RyaW5nOk5VTExdOwpAQCAtNDk1LDcgKzQyNyw3IEBACiAgICAgCiAgICAgTlNTY2Fu
bmVyICpzY2FubmVyID0gW05TU2Nhbm5lciBzY2FubmVyV2l0aFN0cmluZzp0ZXh0XTsKICAgICBb
c2Nhbm5lciBzZXRDaGFyYWN0ZXJzVG9CZVNraXBwZWQ6bmlsXTsKLSAgICBOU0NoYXJhY3RlclNl
dCAqbmV3bGluZVNldCA9IFtOU0NoYXJhY3RlclNldCBjaGFyYWN0ZXJTZXRXaXRoQ2hhcmFjdGVy
c0luU3RyaW5nOkAiXHJcbiJdOworICAgIE5TQ2hhcmFjdGVyU2V0ICpuZXdsaW5lU2V0ID0gW05T
Q2hhcmFjdGVyU2V0IGNoYXJhY3RlclNldFdpdGhDaGFyYWN0ZXJzSW5TdHJpbmc6QCJcbiJdOwog
CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgW3NjYW5uZXIgc2NhblVwVG9DaGFyYWN0ZXJz
RnJvbVNldDpuZXdsaW5lU2V0IGludG9TdHJpbmc6TlVMTF07CkBAIC01MDYsMTEgKzQzOCw3IEBA
CiAgICAgICAgIAogICAgICAgICBwYXJhZ3JhcGhTb0ZhcisrOwogICAgICAgICAKLSAgICAgICAg
dW5pY2hhciBjID0gW3RleHQgY2hhcmFjdGVyQXRJbmRleDpbc2Nhbm5lciBzY2FuTG9jYXRpb25d
XTsKICAgICAgICAgW3NjYW5uZXIgc2V0U2NhbkxvY2F0aW9uOltzY2FubmVyIHNjYW5Mb2NhdGlv
bl0rMV07IC8vIHNraXAgb3ZlciB0aGUgZm91bmQgY2hhcgotICAgICAgICBpZiAoYyA9PSAnXHIn
KSB7Ci0gICAgICAgICAgICBbc2Nhbm5lciBzY2FuU3RyaW5nOkAiXG4iIGludG9TdHJpbmc6TlVM
TF07IC8vIGdldCB0aGUgZW50aXJlIGNybGYgaWYgaXQgaXMgb25lCi0gICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIHBhcmFncmFwaFN0YXJ0ID0gW3NjYW5uZXIgc2NhbkxvY2F0aW9uXTsKICAg
ICB9Cg==
</data>
<flag name="review"
          id="1485"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6695</attachid>
            <date>2006-02-23 22:14:57 -0800</date>
            <delta_ts>2006-02-27 20:49:46 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>15474</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudEltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBraHRtbC9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnRJbXBsLmgJKHJldmlzaW9uIDEyOTUxKQor
Kysga2h0bWwvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC04MiwxMyArODIsMTAgQEAKICAgICB2b2lkIHNldFZhbHVlKGNvbnN0IERPTVN0cmluZyAmdmFs
dWUpOwogICAgIERPTVN0cmluZyBkZWZhdWx0VmFsdWUoKTsKICAgICB2b2lkIHNldERlZmF1bHRW
YWx1ZShjb25zdCBET01TdHJpbmcgJnZhbHVlKTsKKyAgICAKKyAgICB2b2lkIGludmFsaWRhdGVW
YWx1ZSgpIHsgbV92YWx1ZU1hdGNoZXNSZW5kZXJlciA9IGZhbHNlOyB9CisgICAgdm9pZCByZW5k
ZXJlcldpbGxCZURlc3Ryb3llZCgpOwogCi0gICAgdm9pZCBpbnZhbGlkYXRlVmFsdWUoKSB7IG1f
dmFsdWVJc1ZhbGlkID0gZmFsc2U7IH0KLSAgICB2b2lkIHVwZGF0ZVZhbHVlKCk7Ci0KLSAgICBi
b29sIHZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZU1hdGNoZXNS
ZW5kZXJlcjsgfQotICAgIHZvaWQgc2V0VmFsdWVNYXRjaGVzUmVuZGVyZXIoKSB7IG1fdmFsdWVN
YXRjaGVzUmVuZGVyZXIgPSB0cnVlOyB9Ci0KICAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0YWJsZSgp
OwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kVG9BbnlF
bGVtZW50KTsKQEAgLTEwNCw5ICsxMDEsMTEgQEAKICAgICBpbnQgbV9yb3dzOwogICAgIGludCBt
X2NvbHM7CiAgICAgV3JhcE1ldGhvZCBtX3dyYXA7Ci0gICAgUVN0cmluZyBtX3ZhbHVlOwotICAg
IGJvb2wgbV92YWx1ZUlzVmFsaWQ7CisgICAgRE9NU3RyaW5nIG1fdmFsdWU7CiAgICAgYm9vbCBt
X3ZhbHVlTWF0Y2hlc1JlbmRlcmVyOworICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIHVwZGF0ZVZh
bHVlKCk7CiB9OwogCiB9IC8vbmFtZXNwYWNlCkluZGV4OiBraHRtbC9odG1sL0hUTUxUZXh0QXJl
YUVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL0hUTUxUZXh0QXJlYUVs
ZW1lbnRJbXBsLmNwcAkocmV2aXNpb24gMTI5NTEpCisrKyBraHRtbC9odG1sL0hUTUxUZXh0QXJl
YUVsZW1lbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsOCBAQAogdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKIAogSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OkhUTUxUZXh0
QXJlYUVsZW1lbnRJbXBsKERvY3VtZW50SW1wbCAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpm
KQotICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwodGV4dGFyZWFUYWcsIGRvYywgZiks
IG1fdmFsdWVJc1ZhbGlkKGZhbHNlKSwgbV92YWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSkKKyAg
ICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKHRleHRhcmVhVGFnLCBkb2MsIGYpCisgICAg
LCBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyKHRydWUpCiB7CiAgICAgLy8gRFREIHJlcXVpcmVzIHJv
d3MgJiBjb2xzIGJlIHNwZWNpZmllZCwgYnV0IHdlIHdpbGwgcHJvdmlkZSByZWFzb25hYmxlIGRl
ZmF1bHRzCiAgICAgbV9yb3dzID0gMjsKQEAgLTk4LDcgKzk5LDcgQEAKICAgICAgICAgc3RhdGlj
X2Nhc3Q8UmVuZGVyVGV4dEFyZWEgKj4ocmVuZGVyZXIoKSktPnNldFNlbGVjdGlvbkVuZChlbmQp
OwogfQogCi12b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpzZWxlY3QoICApCit2b2lkIEhU
TUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpzZWxlY3QoKQogewogICAgIGlmIChyZW5kZXJlcigpKQog
ICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0QXJlYSo+KHJlbmRlcmVyKCkpLT5zZWxlY3Qo
KTsKQEAgLTE1OSw4ICsxNjAsMTIgQEAKIAogYm9vbCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6
YXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiBlbmNvZGluZywgYm9vbCkKIHsKLSAgICBpZiAo
bmFtZSgpLmlzRW1wdHkoKSkgcmV0dXJuIGZhbHNlOwotICAgIGVuY29kaW5nLmFwcGVuZERhdGEo
bmFtZSgpLCB2YWx1ZSgpKTsKKyAgICBpZiAobmFtZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAKKyAgICBib29sIGhhcmRXcmFwID0gcmVuZGVyZXIoKSAmJiB3
cmFwKCkgPT0gdGFfUGh5c2ljYWw7CisgICAgRE9NU3RyaW5nIHYgPSBoYXJkV3JhcCA/IHN0YXRp
Y19jYXN0PFJlbmRlclRleHRBcmVhKj4ocmVuZGVyZXIoKSktPnRleHRXaXRoSGFyZExpbmVCcmVh
a3MoKSA6IHZhbHVlKCk7CisgICAgZW5jb2RpbmcuYXBwZW5kRGF0YShuYW1lKCksIHYpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC0xNjksMzkgKzE3NCw0MSBAQAogICAgIHNldFZhbHVlKGRl
ZmF1bHRWYWx1ZSgpKTsKIH0KIAordm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6cmVuZGVy
ZXJXaWxsQmVEZXN0cm95ZWQoKQoreworICAgIHVwZGF0ZVZhbHVlKCk7Cit9CisKIHZvaWQgSFRN
TFRleHRBcmVhRWxlbWVudEltcGw6OnVwZGF0ZVZhbHVlKCkKIHsKLSAgICBpZiAoIW1fdmFsdWVJ
c1ZhbGlkKSB7Ci0gICAgICAgIGlmIChyZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICBtX3ZhbHVl
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dEFyZWEqPihyZW5kZXJlcigpKS0+dGV4dCgpLnFzdHJp
bmcoKTsKLSAgICAgICAgICAgIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIgPSB0cnVlOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgbV92YWx1ZSA9IGRlZmF1bHRWYWx1ZSgpLnFzdHJpbmco
KTsKLSAgICAgICAgICAgIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIgPSBmYWxzZTsKLSAgICAgICAg
fQotICAgICAgICBtX3ZhbHVlSXNWYWxpZCA9IHRydWU7CisgICAgaWYgKCFtX3ZhbHVlTWF0Y2hl
c1JlbmRlcmVyKSB7CisgICAgICAgIEFTU0VSVChyZW5kZXJlcigpKTsKKyAgICAgICAgbV92YWx1
ZSA9IHN0YXRpY19jYXN0PFJlbmRlclRleHRBcmVhKj4ocmVuZGVyZXIoKSktPnRleHQoKTsKKyAg
ICAgICAgbV92YWx1ZU1hdGNoZXNSZW5kZXJlciA9IHRydWU7CiAgICAgfQogfQogCiBET01TdHJp
bmcgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnZhbHVlKCkKIHsKICAgICB1cGRhdGVWYWx1ZSgp
OwotICAgIHJldHVybiBtX3ZhbHVlLmlzTnVsbCgpID8gRE9NU3RyaW5nKCIiKSA6IG1fdmFsdWU7
CisgICAgcmV0dXJuIG1fdmFsdWU7CiB9CiAKIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6
OnNldFZhbHVlKGNvbnN0IERPTVN0cmluZyAmdmFsdWUpCiB7Ci0gICAgbV92YWx1ZSA9IHZhbHVl
LnFzdHJpbmcoKTsKLSAgICBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyID0gZmFsc2U7Ci0gICAgbV92
YWx1ZUlzVmFsaWQgPSB0cnVlOworICAgIFFTdHJpbmcgc3RyaW5nID0gdmFsdWUucXN0cmluZygp
OworICAgIC8vIEtXUVRleHRBcmVhIG5vcm1hbGl6ZXMgbGluZSBlbmRpbmdzIGFkZGVkIGJ5IHRo
ZSB1c2VyIHZpYSB0aGUga2V5Ym9hcmQgb3IgcGFzdGluZy4KKyAgICAvLyBXZSBtdXN0IG5vcm1h
bGl6ZSBsaW5lIGVuZGluZ3MgY29taW5nIGZyb20gSlMuCisgICAgc3RyaW5nLnJlcGxhY2UoIlxy
XG4iLCAiXG4iKTsKKyAgICBzdHJpbmcucmVwbGFjZSgiXHIiLCAiXG4iKTsKKyAgICAKKyAgICBt
X3ZhbHVlID0gRE9NU3RyaW5nKHN0cmluZyk7CisgICAgbV92YWx1ZU1hdGNoZXNSZW5kZXJlciA9
IHRydWU7CiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZy
b21FbGVtZW50KCk7Ci0gICAgLy8gRklYTUU6IEZvcmNlIHJlbG9hZCBmcm9tIHJlbmRlcmVyLCBh
cyByZW5kZXJlciBtYXkgaGF2ZSBub3JtYWxpemVkIGxpbmUgZW5kaW5ncy4KLSAgICBtX3ZhbHVl
SXNWYWxpZCA9IGZhbHNlOwogICAgIHNldENoYW5nZWQodHJ1ZSk7CiB9CiAKLQogRE9NU3RyaW5n
IEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpkZWZhdWx0VmFsdWUoKQogewogICAgIERPTVN0cmlu
ZyB2YWwgPSAiIjsKQEAgLTIxMSwxMyArMjE4LDEyIEBACiAgICAgICAgIGlmIChuLT5pc1RleHRO
b2RlKCkpCiAgICAgICAgICAgICB2YWwgKz0gc3RhdGljX2Nhc3Q8VGV4dEltcGwqPihuKS0+ZGF0
YSgpOwogICAgIAotICAgIGlmICh2YWxbMF0gPT0gJ1xyJyAmJiB2YWxbMV0gPT0gJ1xuJykgewot
ICAgICAgICB2YWwgPSB2YWwuY29weSgpOwotICAgICAgICB2YWwucmVtb3ZlKDAsMik7Ci0gICAg
fSBlbHNlIGlmICh2YWxbMF0gPT0gJ1xyJyB8fCB2YWxbMF0gPT0gJ1xuJykgewotICAgICAgICB2
YWwgPSB2YWwuY29weSgpOwotICAgICAgICB2YWwucmVtb3ZlKDAsMSk7Ci0gICAgfQorICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgb25seSBkcm9wIHRoZSBmaXJzdCBjYXJyaWFnZSByZXR1cm4gZm9y
IHRoZSBkZWZhdWx0CisgICAgLy8gdmFsdWUgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgbm90IGRl
ZmF1bHRWYWx1ZXMgc2V0IGZyb20gSlMuCisgICAgaWYgKHZhbC5sZW5ndGgoKSA+PSAyICYmIHZh
bFswXSA9PSAnXHInICYmIHZhbFsxXSA9PSAnXG4nKQorICAgICAgICB2YWwucmVtb3ZlKDAsIDIp
OworICAgIGVsc2UgaWYgKHZhbC5sZW5ndGgoKSA+PSAxICYmICh2YWxbMF0gPT0gJ1xyJyB8fCB2
YWxbMF0gPT0gJ1xuJykpCisgICAgICAgIHZhbC5yZW1vdmUoMCwgMSk7CiAKICAgICByZXR1cm4g
dmFsOwogfQpAQCAtMjUyLDE1ICsyNTgsMTIgQEAKIAogdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50
SW1wbDo6YXR0YWNoKCkKIHsKLSAgICBtX3ZhbHVlSXNWYWxpZCA9IHRydWU7CiAgICAgSFRNTEdl
bmVyaWNGb3JtRWxlbWVudEltcGw6OmF0dGFjaCgpOwotICAgIHVwZGF0ZVZhbHVlKCk7CiB9CiAK
IHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OmRldGFjaCgpCiB7CiAgICAgSFRNTEdlbmVy
aWNGb3JtRWxlbWVudEltcGw6OmRldGFjaCgpOwotICAgIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIg
PSBmYWxzZTsKIH0KIAogRE9NU3RyaW5nIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjphY2Nlc3NL
ZXkoKSBjb25zdApJbmRleDogcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL3JlbmRlcl9mb3JtLmgJKHJldmlzaW9uIDEyOTUxKQorKysgcmVuZGVyaW5nL3Jl
bmRlcl9mb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyOSw2ICszMjksNyBAQAogICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PERPTTo6SFRNTFRleHRBcmVhRWxlbWVudEltcGwqPihSZW5kZXJPYmpl
Y3Q6OmVsZW1lbnQoKSk7IH0KIAogICAgIERPTTo6RE9NU3RyaW5nIHRleHQoKTsKKyAgICBET006
OkRPTVN0cmluZyB0ZXh0V2l0aEhhcmRMaW5lQnJlYWtzKCk7CiAKICAgICBpbnQgc2VsZWN0aW9u
U3RhcnQoKTsKICAgICBpbnQgc2VsZWN0aW9uRW5kKCk7CkluZGV4OiByZW5kZXJpbmcvcmVuZGVy
X2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAJKHJldmlz
aW9uIDEyOTUxKQorKysgcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTkyLDcgKzk5Miw3IEBACiAKIHZvaWQgUmVuZGVyVGV4dEFyZWE6OmRlc3Ryb3koKQogewot
ICAgIGVsZW1lbnQoKS0+dXBkYXRlVmFsdWUoKTsKKyAgICBlbGVtZW50KCktPnJlbmRlcmVyV2ls
bEJlRGVzdHJveWVkKCk7CiAgICAgUmVuZGVyRm9ybUVsZW1lbnQ6OmRlc3Ryb3koKTsKIH0KIApA
QCAtMTA1MywzNiArMTA1MywzMSBAQAogICAgIHctPnNldFJlYWRPbmx5KGUtPnJlYWRPbmx5KCkp
OwogICAgIHctPnNldERpc2FibGVkKGUtPmRpc2FibGVkKCkpOwogCi0gICAgZS0+dXBkYXRlVmFs
dWUoKTsKLSAgICBpZiAoIWUtPnZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkpIHsKLSAgICAgICAgRE9N
U3RyaW5nIHdpZGdldFRleHQgPSB0ZXh0KCk7Ci0gICAgICAgIERPTVN0cmluZyB0ZXh0ID0gZS0+
dmFsdWUoKTsKLSAgICAgICAgdGV4dC5yZXBsYWNlKFFDaGFyKCdcXCcpLCBiYWNrc2xhc2hBc0N1
cnJlbmN5U3ltYm9sKCkpOwotICAgICAgICBpZiAod2lkZ2V0VGV4dCAhPSB0ZXh0KSB7Ci0gICAg
ICAgICAgICBpbnQgbGluZSwgY29sOwotICAgICAgICAgICAgdy0+Z2V0Q3Vyc29yUG9zaXRpb24o
ICZsaW5lLCAmY29sICk7Ci0gICAgICAgICAgICBtX3VwZGF0aW5nID0gdHJ1ZTsKLSAgICAgICAg
ICAgIHctPnNldFRleHQodGV4dCk7Ci0gICAgICAgICAgICBtX3VwZGF0aW5nID0gZmFsc2U7Ci0g
ICAgICAgICAgICB3LT5zZXRDdXJzb3JQb3NpdGlvbiggbGluZSwgY29sICk7Ci0gICAgICAgIH0K
LSAgICAgICAgZS0+c2V0VmFsdWVNYXRjaGVzUmVuZGVyZXIoKTsKLSAgICAgICAgbV9kaXJ0eSA9
IGZhbHNlOworICAgIERPTVN0cmluZyB3aWRnZXRUZXh0ID0gdGV4dCgpOworICAgIERPTVN0cmlu
ZyB0ZXh0ID0gZS0+dmFsdWUoKTsKKyAgICB0ZXh0LnJlcGxhY2UoUUNoYXIoJ1xcJyksIGJhY2tz
bGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7CisgICAgaWYgKHdpZGdldFRleHQgIT0gdGV4dCkgewor
ICAgICAgICBpbnQgbGluZSwgY29sOworICAgICAgICB3LT5nZXRDdXJzb3JQb3NpdGlvbiggJmxp
bmUsICZjb2wgKTsKKyAgICAgICAgbV91cGRhdGluZyA9IHRydWU7CisgICAgICAgIHctPnNldFRl
eHQodGV4dCk7CisgICAgICAgIG1fdXBkYXRpbmcgPSBmYWxzZTsKKyAgICAgICAgdy0+c2V0Q3Vy
c29yUG9zaXRpb24oIGxpbmUsIGNvbCApOwogICAgIH0KKyAgICBtX2RpcnR5ID0gZmFsc2U7CiAK
ICAgICBSZW5kZXJGb3JtRWxlbWVudDo6dXBkYXRlRnJvbUVsZW1lbnQoKTsKIH0KIAotRE9NU3Ry
aW5nIFJlbmRlclRleHRBcmVhOjp0ZXh0KCkKK0RPTVN0cmluZyBSZW5kZXJUZXh0QXJlYTo6dGV4
dFdpdGhIYXJkTGluZUJyZWFrcygpCiB7Ci0gICAgRE9NU3RyaW5nIHR4dDsKLSAgICBRVGV4dEVk
aXQqIHcgPSBzdGF0aWNfY2FzdDxRVGV4dEVkaXQqPihtX3dpZGdldCk7CisgICAgRE9NU3RyaW5n
IHR4dCA9IHN0YXRpY19jYXN0PFFUZXh0RWRpdCo+KG1fd2lkZ2V0KS0+dGV4dFdpdGhIYXJkTGlu
ZUJyZWFrcygpOworICAgIHJldHVybiB0eHQucmVwbGFjZShiYWNrc2xhc2hBc0N1cnJlbmN5U3lt
Ym9sKCksIFFDaGFyKCdcXCcpKTsKK30KIAotICAgIGlmIChlbGVtZW50KCktPndyYXAoKSA9PSBI
VE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6dGFfUGh5c2ljYWwpCi0gICAgICAgIHR4dCA9IHctPnRl
eHRXaXRoSGFyZExpbmVCcmVha3MoKTsKLSAgICBlbHNlCi0gICAgICAgIHR4dCA9IHctPnRleHQo
KTsKLQorRE9NU3RyaW5nIFJlbmRlclRleHRBcmVhOjp0ZXh0KCkKK3sKKyAgICBET01TdHJpbmcg
dHh0ID0gc3RhdGljX2Nhc3Q8UVRleHRFZGl0Kj4obV93aWRnZXQpLT50ZXh0KCk7CiAgICAgcmV0
dXJuIHR4dC5yZXBsYWNlKGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSwgUUNoYXIoJ1xcJykp
OwogfQogCkluZGV4OiBrd3EvS1dRVGV4dEFyZWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRVGV4
dEFyZWEuaAkocmV2aXNpb24gMTI5NTEpCisrKyBrd3EvS1dRVGV4dEFyZWEuaAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNiArNDEsNyBAQAogICAgIEJPT0wgaW5Jbml0V2l0aEZyYW1lOwogICAgIEJP
T0wgcmVzaXphYmxlQnlVc2VyOwogICAgIEJPT0wgcmVzaXphYmxlQnlVc2VyQ29tcHV0ZWQ7Cisg
ICAgTlNSYW5nZSByYW5nZVRvTm9ybWFsaXplOwogfQogCiAtIGluaXRXaXRoUVRleHRFZGl0OihR
VGV4dEVkaXQgKil3OwpJbmRleDoga3dxL0tXUVRleHRBcmVhLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGt3
cS9LV1FUZXh0QXJlYS5tbQkocmV2aXNpb24gMTI5NTEpCisrKyBrd3EvS1dRVGV4dEFyZWEubW0J
KHdvcmtpbmcgY29weSkKQEAgLTIxNCwxMyArMjE0LDI4IEBACiAgICAgICAgIHdpZGdldC0+c2Vs
ZWN0aW9uQ2hhbmdlZCgpOwogfQogCi0tICh2b2lkKXRleHREaWRDaGFuZ2U6KE5TTm90aWZpY2F0
aW9uICopbm90aWZpY2F0aW9uCistICh2b2lkKXRleHREaWRDaGFuZ2U6KE5TTm90aWZpY2F0aW9u
ICopYU5vdGlmaWNhdGlvbgogewogICAgIGlmICh3aWRnZXQpCiAgICAgICAgIHdpZGdldC0+dGV4
dENoYW5nZWQoKTsKICAgICAKKyAgICAvLyBUdXJuIFxyXG5zIGludG8gXG5zIHNvIHRoYXQgYSBs
aW5lIGVuZGluZyBpcyBhbHdheXMgYSBzaW5nbGUgY2hhcmFjdGVyLiAgVHVybiBccnMgaW50byBc
bnMganVzdAorICAgIC8vIGZvciBnb29kIG1lYXN1cmUuCisgICAgaWYgKHJhbmdlVG9Ob3JtYWxp
emUubGVuZ3RoKSB7CisgICAgCisgICAgICAgIE5TTXV0YWJsZVN0cmluZyAqc3RyaW5nID0gW1tb
dGV4dFZpZXcgc3RyaW5nXSBzdWJzdHJpbmdXaXRoUmFuZ2U6cmFuZ2VUb05vcm1hbGl6ZV0gbXV0
YWJsZUNvcHldOworICAgICAgICBOU1JhbmdlIHJhbmdlID0gTlNNYWtlUmFuZ2UoMCwgW3N0cmlu
ZyBsZW5ndGhdKTsKKyAgICAgICAgW3N0cmluZyByZXBsYWNlT2NjdXJyZW5jZXNPZlN0cmluZzpA
IlxyIiB3aXRoU3RyaW5nOkAiXG4iIG9wdGlvbnM6TlNMaXRlcmFsU2VhcmNoIHJhbmdlOnJhbmdl
XTsKKyAgICAgICAgW3N0cmluZyByZXBsYWNlT2NjdXJyZW5jZXNPZlN0cmluZzpAIlxyXG4iIHdp
dGhTdHJpbmc6QCJcbiIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2ggcmFuZ2U6cmFuZ2VdOworICAg
ICAgICBbdGV4dFZpZXcgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOnJhbmdlVG9Ob3JtYWxpemUg
d2l0aFN0cmluZzpzdHJpbmddOworICAgICAgICAKKyAgICAgICAgcmFuZ2VUb05vcm1hbGl6ZSA9
IE5TTWFrZVJhbmdlKDAsIDApOworICAgIH0KKyAgICAKICAgICBXZWJDb3JlRnJhbWVCcmlkZ2Ug
KmJyaWRnZSA9IE1hY0ZyYW1lOjpicmlkZ2VGb3JXaWRnZXQod2lkZ2V0KTsKICAgICBbYnJpZGdl
IHRleHREaWRDaGFuZ2VJblRleHRBcmVhOihET01IVE1MVGV4dEFyZWFFbGVtZW50ICopW2JyaWRn
ZSBlbGVtZW50Rm9yVmlldzpzZWxmXV07CisgICAgCisgICAgCiB9CiAKIC0gKHZvaWQpc2V0V29y
ZFdyYXA6KEJPT0wpZgpAQCAtMjQ0LDIwICsyNTksNyBAQAogCiAtIChOU1N0cmluZyAqKXRleHQK
IHsKLSAgICBOU1N0cmluZyAqdGV4dCA9IFt0ZXh0VmlldyBzdHJpbmddOwotICAgIAotICAgIGlm
IChbdGV4dCByYW5nZU9mU3RyaW5nOkAiXHIiIG9wdGlvbnM6TlNMaXRlcmFsU2VhcmNoXS5sb2Nh
dGlvbiAhPSBOU05vdEZvdW5kKSB7Ci0gICAgICAgIE5TTXV0YWJsZVN0cmluZyAqbXV0YWJsZVRl
eHQgPSBbW3RleHQgbXV0YWJsZUNvcHldIGF1dG9yZWxlYXNlXTsKLSAgICAKLSAgICAgICAgW211
dGFibGVUZXh0IHJlcGxhY2VPY2N1cnJlbmNlc09mU3RyaW5nOkAiXHJcbiIgd2l0aFN0cmluZzpA
IlxuIgotICAgICAgICAgICAgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2ggcmFuZ2U6TlNNYWtlUmFu
Z2UoMCwgW211dGFibGVUZXh0IGxlbmd0aF0pXTsKLSAgICAgICAgW211dGFibGVUZXh0IHJlcGxh
Y2VPY2N1cnJlbmNlc09mU3RyaW5nOkAiXHIiIHdpdGhTdHJpbmc6QCJcbiIKLSAgICAgICAgICAg
IG9wdGlvbnM6TlNMaXRlcmFsU2VhcmNoIHJhbmdlOk5TTWFrZVJhbmdlKDAsIFttdXRhYmxlVGV4
dCBsZW5ndGhdKV07Ci0gICAgICAgIAotICAgICAgICB0ZXh0ID0gbXV0YWJsZVRleHQ7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRleHQ7CisgICAgcmV0dXJuIFt0ZXh0VmlldyBzdHJpbmddOwogfQog
CiAtIChOU1N0cmluZyAqKXRleHRXaXRoSGFyZExpbmVCcmVha3MKQEAgLTI3NCwxOCArMjc2LDEz
IEBACiAgICAgICAgIE5TUmFuZ2UgbGluZVJhbmdlID0gW2xheW91dE1hbmFnZXIgY2hhcmFjdGVy
UmFuZ2VGb3JHbHlwaFJhbmdlOmxpbmVHbHlwaFJhbmdlIGFjdHVhbEdseXBoUmFuZ2U6TlVMTF07
CiAgICAgICAgIGlmIChbdGV4dFdpdGhIYXJkTGluZUJyZWFrcyBsZW5ndGhdKSB7CiAgICAgICAg
ICAgICB1bmljaGFyIGxhc3RDaGFyYWN0ZXIgPSBbdGV4dFdpdGhIYXJkTGluZUJyZWFrcyBjaGFy
YWN0ZXJBdEluZGV4Olt0ZXh0V2l0aEhhcmRMaW5lQnJlYWtzIGxlbmd0aF0gLSAxXTsKLSAgICAg
ICAgICAgIGlmIChsYXN0Q2hhcmFjdGVyICE9ICdcbicgJiYgbGFzdENoYXJhY3RlciAhPSAnXHIn
KSB7CisgICAgICAgICAgICBpZiAobGFzdENoYXJhY3RlciAhPSAnXG4nKSB7CiAgICAgICAgICAg
ICAgICAgW3RleHRXaXRoSGFyZExpbmVCcmVha3MgYXBwZW5kU3RyaW5nOkAiXG4iXTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBbdGV4dFdpdGhIYXJkTGluZUJyZWFrcyBhcHBl
bmRTdHJpbmc6W3RleHQgc3Vic3RyaW5nV2l0aFJhbmdlOmxpbmVSYW5nZV1dOwogICAgIH0KIAot
ICAgIFt0ZXh0V2l0aEhhcmRMaW5lQnJlYWtzIHJlcGxhY2VPY2N1cnJlbmNlc09mU3RyaW5nOkAi
XHJcbiIgd2l0aFN0cmluZzpAIlxuIgotICAgICAgICBvcHRpb25zOk5TTGl0ZXJhbFNlYXJjaCBy
YW5nZTpOU01ha2VSYW5nZSgwLCBbdGV4dFdpdGhIYXJkTGluZUJyZWFrcyBsZW5ndGhdKV07Ci0g
ICAgW3RleHRXaXRoSGFyZExpbmVCcmVha3MgcmVwbGFjZU9jY3VycmVuY2VzT2ZTdHJpbmc6QCJc
ciIgd2l0aFN0cmluZzpAIlxuIgotICAgICAgICBvcHRpb25zOk5TTGl0ZXJhbFNlYXJjaCByYW5n
ZTpOU01ha2VSYW5nZSgwLCBbdGV4dFdpdGhIYXJkTGluZUJyZWFrcyBsZW5ndGhdKV07Ci0KICAg
ICByZXR1cm4gdGV4dFdpdGhIYXJkTGluZUJyZWFrczsKIH0KIApAQCAtMjk2LDYyICsyOTMsMTIg
QEAKIAogLSAodm9pZClzZXRTZWxlY3RlZFJhbmdlOihOU1JhbmdlKWFSYW5nZQogewotICAgIE5T
U3RyaW5nICp0ZXh0ID0gW3RleHRWaWV3IHN0cmluZ107Ci0gICAgLy8gT2ssIHRoZSBzZWxlY3Rp
b24gaGFzIHRvIG1hdGNoIHVwIHdpdGggdGhlIHN0cmluZyByZXR1cm5lZCBieSAtdGV4dAotICAg
IC8vIGFuZCBzaW5jZSAtdGV4dCB0cmFuc2xhdGVzIFxyXG4gdG8gXG4sIHdlIGhhdmUgdG8gbW9k
aWZ5IG91ciBzZWxlY3Rpb24KLSAgICAvLyBpZiBhIFxyXG4gc2VxdWVuY2UgaXMgYW55d2hlcmUg
aW4gb3IgYmVmb3JlIHRoZSBzZWxlY3Rpb24KLSAgICB1bnNpZ25lZCBjb3VudCA9IDA7Ci0gICAg
TlNSYW5nZSBmb3VuZFJhbmdlLCBzZWFyY2hSYW5nZSA9IE5TTWFrZVJhbmdlKDAsIGFSYW5nZS5s
b2NhdGlvbik7Ci0gICAgd2hpbGUgKGZvdW5kUmFuZ2UgPSBbdGV4dCByYW5nZU9mU3RyaW5nOkAi
XHJcbiIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2ggcmFuZ2U6c2VhcmNoUmFuZ2VdLAotICAgICAg
ICAgICBmb3VuZFJhbmdlLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpIHsKLSAgICAgICAgY291bnQr
KzsKLSAgICAgICAgc2VhcmNoUmFuZ2UubG9jYXRpb24gPSBOU01heFJhbmdlKGZvdW5kUmFuZ2Up
OwotICAgICAgICBpZiAoc2VhcmNoUmFuZ2UubG9jYXRpb24gPj0gYVJhbmdlLmxvY2F0aW9uKSBi
cmVhazsKLSAgICAgICAgc2VhcmNoUmFuZ2UubGVuZ3RoID0gYVJhbmdlLmxvY2F0aW9uIC0gc2Vh
cmNoUmFuZ2UubG9jYXRpb247Ci0gICAgfQotICAgIGFSYW5nZS5sb2NhdGlvbiArPSBjb3VudDsK
LSAgICBjb3VudCA9IDA7Ci0gICAgc2VhcmNoUmFuZ2UgPSBOU01ha2VSYW5nZShhUmFuZ2UubG9j
YXRpb24sIGFSYW5nZS5sZW5ndGgpOwotICAgIHdoaWxlIChmb3VuZFJhbmdlID0gW3RleHQgcmFu
Z2VPZlN0cmluZzpAIlxyXG4iIG9wdGlvbnM6TlNMaXRlcmFsU2VhcmNoIHJhbmdlOnNlYXJjaFJh
bmdlXSwKLSAgICAgICAgICAgZm91bmRSYW5nZS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKSB7Ci0g
ICAgICAgIGNvdW50Kys7Ci0gICAgICAgIHNlYXJjaFJhbmdlLmxvY2F0aW9uID0gTlNNYXhSYW5n
ZShmb3VuZFJhbmdlKTsKLSAgICAgICAgaWYgKHNlYXJjaFJhbmdlLmxvY2F0aW9uID49IE5TTWF4
UmFuZ2UoYVJhbmdlKSkgYnJlYWs7Ci0gICAgICAgIHNlYXJjaFJhbmdlLmxlbmd0aCA9IE5TTWF4
UmFuZ2UoYVJhbmdlKSAtIHNlYXJjaFJhbmdlLmxvY2F0aW9uOwotICAgIH0KLSAgICBhUmFuZ2Uu
bGVuZ3RoICs9IGNvdW50OwogICAgIFt0ZXh0VmlldyBzZXRTZWxlY3RlZFJhbmdlOmFSYW5nZV07
CiB9CiAKIC0gKE5TUmFuZ2Upc2VsZWN0ZWRSYW5nZQogewotICAgIE5TUmFuZ2UgYVJhbmdlID0g
W3RleHRWaWV3IHNlbGVjdGVkUmFuZ2VdOwotICAgIGlmIChhUmFuZ2UubG9jYXRpb24gPT0gTlNO
b3RGb3VuZCkgewotICAgICAgICByZXR1cm4gYVJhbmdlOwotICAgIH0KLSAgICAvLyBTYW1lIGlz
c3VlIGFzIHdpdGggLXNldFNlbGVjdGVkUmFuZ2U6IHJlZ2FyZGluZyBcclxuIHNlcXVlbmNlcwot
ICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKLSAgICBOU1JhbmdlIGZvdW5kUmFuZ2UsIHNlYXJjaFJh
bmdlID0gTlNNYWtlUmFuZ2UoMCwgYVJhbmdlLmxvY2F0aW9uKTsKLSAgICBOU1N0cmluZyAqdGV4
dCA9IFt0ZXh0VmlldyBzdHJpbmddOwotICAgIHdoaWxlIChmb3VuZFJhbmdlID0gW3RleHQgcmFu
Z2VPZlN0cmluZzpAIlxyXG4iIG9wdGlvbnM6TlNMaXRlcmFsU2VhcmNoIHJhbmdlOnNlYXJjaFJh
bmdlXSwKLSAgICAgICAgICAgZm91bmRSYW5nZS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKSB7Ci0g
ICAgICAgIGNvdW50Kys7Ci0gICAgICAgIHNlYXJjaFJhbmdlLmxvY2F0aW9uID0gTlNNYXhSYW5n
ZShmb3VuZFJhbmdlKTsKLSAgICAgICAgaWYgKHNlYXJjaFJhbmdlLmxvY2F0aW9uID49IGFSYW5n
ZS5sb2NhdGlvbikgYnJlYWs7Ci0gICAgICAgIHNlYXJjaFJhbmdlLmxlbmd0aCA9IGFSYW5nZS5s
b2NhdGlvbiAtIHNlYXJjaFJhbmdlLmxvY2F0aW9uOwotICAgIH0KLSAgICBhUmFuZ2UubG9jYXRp
b24gLT0gY291bnQ7Ci0gICAgY291bnQgPSAwOwotICAgIHNlYXJjaFJhbmdlID0gTlNNYWtlUmFu
Z2UoYVJhbmdlLmxvY2F0aW9uLCBhUmFuZ2UubGVuZ3RoKTsKLSAgICB3aGlsZSAoZm91bmRSYW5n
ZSA9IFt0ZXh0IHJhbmdlT2ZTdHJpbmc6QCJcclxuIiBvcHRpb25zOk5TTGl0ZXJhbFNlYXJjaCBy
YW5nZTpzZWFyY2hSYW5nZV0sCi0gICAgICAgICAgIGZvdW5kUmFuZ2UubG9jYXRpb24gIT0gTlNO
b3RGb3VuZCkgewotICAgICAgICBjb3VudCsrOwotICAgICAgICBzZWFyY2hSYW5nZS5sb2NhdGlv
biA9IE5TTWF4UmFuZ2UoZm91bmRSYW5nZSk7Ci0gICAgICAgIGlmIChzZWFyY2hSYW5nZS5sb2Nh
dGlvbiA+PSBOU01heFJhbmdlKGFSYW5nZSkpIGJyZWFrOwotICAgICAgICBzZWFyY2hSYW5nZS5s
ZW5ndGggPSBOU01heFJhbmdlKGFSYW5nZSkgLSBzZWFyY2hSYW5nZS5sb2NhdGlvbjsKLSAgICB9
Ci0gICAgYVJhbmdlLmxlbmd0aCAtPSBjb3VudDsKLSAgICByZXR1cm4gYVJhbmdlOworICAgIHJl
dHVybiBbdGV4dFZpZXcgc2VsZWN0ZWRSYW5nZV07CiB9CiAKIC0gKEJPT0wpaGFzU2VsZWN0aW9u
CkBAIC00NjEsNyArNDA4LDcgQEAKICAgICAKICAgICBOU1NjYW5uZXIgKnNjYW5uZXIgPSBbTlNT
Y2FubmVyIHNjYW5uZXJXaXRoU3RyaW5nOnRleHRdOwogICAgIFtzY2FubmVyIHNldENoYXJhY3Rl
cnNUb0JlU2tpcHBlZDpuaWxdOwotICAgIE5TQ2hhcmFjdGVyU2V0ICpuZXdsaW5lU2V0ID0gW05T
Q2hhcmFjdGVyU2V0IGNoYXJhY3RlclNldFdpdGhDaGFyYWN0ZXJzSW5TdHJpbmc6QCJcclxuIl07
CisgICAgTlNDaGFyYWN0ZXJTZXQgKm5ld2xpbmVTZXQgPSBbTlNDaGFyYWN0ZXJTZXQgY2hhcmFj
dGVyU2V0V2l0aENoYXJhY3RlcnNJblN0cmluZzpAIlxuIl07CiAKICAgICB3aGlsZSAodHJ1ZSkg
ewogICAgICAgICBbc2Nhbm5lciBzY2FuVXBUb0NoYXJhY3RlcnNGcm9tU2V0Om5ld2xpbmVTZXQg
aW50b1N0cmluZzpOVUxMXTsKQEAgLTQ5NSw3ICs0NDIsNyBAQAogICAgIAogICAgIE5TU2Nhbm5l
ciAqc2Nhbm5lciA9IFtOU1NjYW5uZXIgc2Nhbm5lcldpdGhTdHJpbmc6dGV4dF07CiAgICAgW3Nj
YW5uZXIgc2V0Q2hhcmFjdGVyc1RvQmVTa2lwcGVkOm5pbF07Ci0gICAgTlNDaGFyYWN0ZXJTZXQg
Km5ld2xpbmVTZXQgPSBbTlNDaGFyYWN0ZXJTZXQgY2hhcmFjdGVyU2V0V2l0aENoYXJhY3RlcnNJ
blN0cmluZzpAIlxyXG4iXTsKKyAgICBOU0NoYXJhY3RlclNldCAqbmV3bGluZVNldCA9IFtOU0No
YXJhY3RlclNldCBjaGFyYWN0ZXJTZXRXaXRoQ2hhcmFjdGVyc0luU3RyaW5nOkAiXG4iXTsKIAog
ICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIFtzY2FubmVyIHNjYW5VcFRvQ2hhcmFjdGVyc0Zy
b21TZXQ6bmV3bGluZVNldCBpbnRvU3RyaW5nOk5VTExdOwpAQCAtNTA2LDExICs0NTMsNyBAQAog
ICAgICAgICAKICAgICAgICAgcGFyYWdyYXBoU29GYXIrKzsKICAgICAgICAgCi0gICAgICAgIHVu
aWNoYXIgYyA9IFt0ZXh0IGNoYXJhY3RlckF0SW5kZXg6W3NjYW5uZXIgc2NhbkxvY2F0aW9uXV07
CiAgICAgICAgIFtzY2FubmVyIHNldFNjYW5Mb2NhdGlvbjpbc2Nhbm5lciBzY2FuTG9jYXRpb25d
KzFdOyAvLyBza2lwIG92ZXIgdGhlIGZvdW5kIGNoYXIKLSAgICAgICAgaWYgKGMgPT0gJ1xyJykg
ewotICAgICAgICAgICAgW3NjYW5uZXIgc2NhblN0cmluZzpAIlxuIiBpbnRvU3RyaW5nOk5VTExd
OyAvLyBnZXQgdGhlIGVudGlyZSBjcmxmIGlmIGl0IGlzIG9uZQotICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBwYXJhZ3JhcGhTdGFydCA9IFtzY2FubmVyIHNjYW5Mb2NhdGlvbl07CiAgICAg
fQpAQCAtODU2LDYgKzc5OSwxNCBAQAogICAgIHJldHVybiBOTzsKIH0KIAorLSAoQk9PTCl0ZXh0
VmlldzooTlNUZXh0VmlldyAqKWFUZXh0VmlldyBzaG91bGRDaGFuZ2VUZXh0SW5SYW5nZTooTlNS
YW5nZSlhZmZlY3RlZENoYXJSYW5nZSByZXBsYWNlbWVudFN0cmluZzooTlNTdHJpbmcgKilyZXBs
YWNlbWVudFN0cmluZworeworICAgIGlmIChbcmVwbGFjZW1lbnRTdHJpbmcgcmFuZ2VPZkNoYXJh
Y3RlckZyb21TZXQ6W05TQ2hhcmFjdGVyU2V0IGNoYXJhY3RlclNldFdpdGhDaGFyYWN0ZXJzSW5T
dHJpbmc6QCJcciJdXS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKQorICAgICAgICByYW5nZVRvTm9y
bWFsaXplID0gTlNNYWtlUmFuZ2UoYWZmZWN0ZWRDaGFyUmFuZ2UubG9jYXRpb24sIFtyZXBsYWNl
bWVudFN0cmluZyBsZW5ndGhdKTsKKyAgICAKKyAgICByZXR1cm4gWUVTOworfQorCiAtIChOU1Np
emUpc2l6ZVdpdGhDb2x1bW5zOihpbnQpbnVtQ29sdW1ucyByb3dzOihpbnQpbnVtUm93cwogewog
ICAgIC8vIE11c3QgdXNlIGZvbnQgZnJvbSBfZm9udCBmaWVsZCByYXRoZXIgdGhhbiBmcm9tIHRo
ZSB0ZXh0IHZpZXcncyBmb250IG1ldGhvZCwK
</data>
<flag name="review"
          id="1694"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6767</attachid>
            <date>2006-02-27 20:49:46 -0800</date>
            <delta_ts>2006-02-27 22:44:25 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>20860</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvdGV4dGFyZWEtaGFyZC1saW5ld3JhcC1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS1o
YXJkLWxpbmV3cmFwLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvZm9ybXMvdGV4dGFyZWEtaGFyZC1saW5ld3JhcC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNSBAQAorVGhpcyB0ZXN0cyB0aGF0IGEgdGV4dGFyZWEncyBkZWZhdWx0IHZh
bHVlIGlzIHN1Ym1pdHRlZCB3aXRoIGhhcmQgbGluZSB3cmFwcyAoY2FycmlhZ2UgcmV0dXJucyB3
aGVyZSBsaW5lIHdyYXBzIGFwcGVhciBpbiB0aGUgdGV4dGFyZWEpLgorCitEdWUgdG8gYSBidWcs
IHRoZSB0ZXh0YXJlYSBpcyBhY3R1YWxseSBhIGJpdCB3aWRlciB0aGFuIHdlIHNwZWNpZnkgdmlh
IHRoZSBjb2xzIGF0dHJpYnV0ZSwgc28sIHRoZSBudW1iZXIgYW5kIHBvc2l0aW9uIG9mIHRoZSBj
YXJyaWFnZSByZXR1cm5zIGluIHRoZSBzdWJtaXR0ZWQgZGF0YSBpcyBub3Qgd2hhdCB5b3UnZCBl
eHBlY3QuIFRoZSBleHBlY3RlZCByZXN1bHRzIGZvciB0aGlzIHRlc3RjYXNlIHNob3VsZCBiZSB1
cGRhdGVkIHdoZW4gaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9p
ZD03NTA1IGlzIGZpeGVkLgorCisgU3VjY2VzcwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jt
cy90ZXh0YXJlYS1oYXJkLWxpbmV3cmFwLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9mb3Jtcy90ZXh0YXJlYS1oYXJkLWxpbmV3cmFwLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3RleHRhcmVhLWhhcmQtbGluZXdyYXAuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0MSBAQAorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9
ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgor
PHRpdGxlPkNoYXJzZXRzIGFuZCBzdWJtaXR0aW5nIGZvcm1zPC90aXRsZT4KKzwvaGVhZD4KKzxi
b2R5PgorPHA+VGhpcyB0ZXN0cyB0aGF0IGEgdGV4dGFyZWEncyBkZWZhdWx0IHZhbHVlIGlzIHN1
Ym1pdHRlZCB3aXRoIGhhcmQgbGluZSB3cmFwcyAoY2FycmlhZ2UgcmV0dXJucyB3aGVyZSBsaW5l
IHdyYXBzIGFwcGVhciBpbiB0aGUgdGV4dGFyZWEpLjwvcD4KKzxwPkR1ZSB0byBhIGJ1ZywgdGhl
IHRleHRhcmVhIGlzIGFjdHVhbGx5IGEgYml0IHdpZGVyIHRoYW4gd2Ugc3BlY2lmeSB2aWEgdGhl
IGNvbHMgYXR0cmlidXRlLCBzbywgdGhlIG51bWJlciBhbmQgcG9zaXRpb24gb2YgdGhlIGNhcnJp
YWdlIHJldHVybnMgaW4gdGhlIHN1Ym1pdHRlZCBkYXRhIGlzIG5vdCB3aGF0IHlvdSdkIGV4cGVj
dC4gIFRoZSBleHBlY3RlZCByZXN1bHRzIGZvciB0aGlzIHRlc3RjYXNlIHNob3VsZCBiZSB1cGRh
dGVkIHdoZW4gPGEgaHJlZj0iaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVn
LmNnaT9pZD03NTA1Ij5odHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dp
P2lkPTc1MDU8L2E+IGlzIGZpeGVkLjwvcD4KKzxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iPyIgYWN0
aW9uPSJ0ZXh0YXJlYS1oYXJkLWxpbmV3cmFwLmh0bWwiPgorPHRleHRhcmVhIGlkPSJ0ZXh0YXJl
YSIgbmFtZT0idGV4dGFyZWEiIHdyYXA9ImhhcmQiIGNvbHM9IjUiPjEyMzQ1Njc4OTwvdGV4dGFy
ZWE+Cis8aW5wdXQgdHlwZT0ic3VibWl0Ij4KKzwvZm9ybT4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9u
IGZvbygpIHsKKyAgICBkb2N1bWVudC5mLnN1Ym1pdCgpOworfQorCitpZiAoZG9jdW1lbnQuVVJM
LmluZGV4T2YoJz8nKSA9PSAtMSkgeworCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikgeworICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgIH0KKyAgICAKKyAgICB3aW5kb3cuc2V0VGltZW91dChmb28sIDIwMCk7CisgICAgICAgIAor
fSBlbHNlIHsKKyAgICB2YXIgZm9ybURhdGEgPSBkb2N1bWVudC5VUkwuc3Vic3RyaW5nKGRvY3Vt
ZW50LlVSTC5pbmRleE9mKCc/JykgKyAxLCBkb2N1bWVudC5VUkwubGVuZ3RoKTsKKyAgICBpZiAo
Zm9ybURhdGEgPT0gInRleHRhcmVhPTEyMzQ1NjclMEQlMEE4OSIpCisgICAgICAgIGRvY3VtZW50
LndyaXRlKCJTdWNjZXNzIik7CisgICAgZWxzZQorICAgICAgICBkb2N1bWVudC53cml0ZSgiRmFp
bHVyZS4gIFRoZSBmb3JtIGRhdGEgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHN1Ym1pdHRlZDogdGV4
dGFyZWE9MTIzNDU2NyUwRCUwQTg5PGJyPlRoaXMgaXMgd2hhdCB3YXMgYWN0dWFsbHkgc3VibWl0
dGVkOiAiICsgZm9ybURhdGEpOworICAgIAorICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
Cit9CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvdGV4dGFyZWEtc2V0dmFsdWUtc3Vi
bWl0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3Rl
eHRhcmVhLXNldHZhbHVlLXN1Ym1pdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2Zvcm1zL3RleHRhcmVhLXNldHZhbHVlLXN1Ym1pdC1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK1N1Y2Nlc3MKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvZm9ybXMvdGV4dGFyZWEtc2V0dmFsdWUtc3VibWl0Lmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS1zZXR2YWx1ZS1zdWJtaXQuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvdGV4dGFyZWEtc2V0dmFsdWUtc3VibWl0
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKzxodG1sPgorPGhlYWQ+Cis8bWV0
YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1p
c28tODg1OS0xIj4KKzx0aXRsZT5DaGFyc2V0cyBhbmQgc3VibWl0dGluZyBmb3JtczwvdGl0bGU+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iPyIgYWN0aW9uPSJ0ZXh0
YXJlYS1zZXR2YWx1ZS1zdWJtaXQuaHRtbCI+Cis8dGV4dGFyZWEgaWQ9InRleHRhcmVhMSIgbmFt
ZT0idGV4dGFyZWExIj5kZWZhdWx0IHZhbHVlPC90ZXh0YXJlYT4KKzx0ZXh0YXJlYSBpZD0idGV4
dGFyZWEyIiBuYW1lPSJ0ZXh0YXJlYTIiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPmRlZmF1bHQgdmFs
dWU8L3RleHRhcmVhPgorPC9mb3JtPgorPHNjcmlwdD4KKworaWYgKGRvY3VtZW50LlVSTC5pbmRl
eE9mKCc/JykgPT0gLTEpIHsKKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKKyAgICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAg
ICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9
CisgICAgCisgICAgdmFyIHRleHRhcmVhMSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0
YXJlYTEiKTsKKyAgICB0ZXh0YXJlYTEudmFsdWUgPSAibmV3IHZhbHVlIjsKKyAgICB2YXIgdGV4
dGFyZWEyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHRhcmVhMiIpOworICAgIHRleHRh
cmVhMi52YWx1ZSA9ICJuZXcgdmFsdWUiOworICAgIAorICAgIGRvY3VtZW50LmYuc3VibWl0KCk7
CisgICAgICAgIAorfSBlbHNlIHsKKyAgICB2YXIgZm9ybURhdGEgPSBkb2N1bWVudC5VUkwuc3Vi
c3RyaW5nKGRvY3VtZW50LlVSTC5pbmRleE9mKCc/JykgKyAxLCBkb2N1bWVudC5VUkwubGVuZ3Ro
KTsKKyAgICB2YXIgZXhwZWN0ZWQgPSAidGV4dGFyZWExPW5ldyt2YWx1ZSZ0ZXh0YXJlYTI9bmV3
K3ZhbHVlIjsKKyAgICBpZiAoZm9ybURhdGEgPT0gZXhwZWN0ZWQpCisgICAgICAgIGRvY3VtZW50
LndyaXRlKCJTdWNjZXNzIik7CisgICAgZWxzZQorICAgICAgICBkb2N1bWVudC53cml0ZSgiRmFp
bHVyZS4gIFRoZSB2YWx1ZSBzZXQgaW4gdGhlIHRleHRhcmVhIHZpYSBqYXZhc2NyaXB0IHdhc24n
dCBzZW50IHdoZW4gdGhlIGZvcm0gd2FzIHN1Ym1pdHRlZC4gIEV4cGVjdGVkOiAiICsgZXhwZWN0
ZWQgKyAiLCBGb3VuZDogIiArIGZvcm1EYXRhKTsKKyAgICAKKyAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworfQorCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCkluZGV4OiBXZWJDb3JlL2todG1sL2h0bWwvSFRNTFRleHRBcmVhRWxl
bWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL2h0bWwvSFRNTFRleHRBcmVh
RWxlbWVudEltcGwuaAkocmV2aXNpb24gMTMwMjkpCisrKyBXZWJDb3JlL2todG1sL2h0bWwvSFRN
TFRleHRBcmVhRWxlbWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsMjEgKzc0LDE2IEBA
CiAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpOwogICAgIHZpcnR1YWwgdm9pZCBw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKICAgICB2aXJ0
dWFsIGtodG1sOjpSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICosIGto
dG1sOjpSZW5kZXJTdHlsZSAqKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Ci0gICAgdmly
dHVhbCB2b2lkIGRldGFjaCgpOwogICAgIHZpcnR1YWwgYm9vbCBhcHBlbmRGb3JtRGF0YShGb3Jt
RGF0YUxpc3QmLCBib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKICAgICBET01TdHJp
bmcgdmFsdWUoKTsKICAgICB2b2lkIHNldFZhbHVlKGNvbnN0IERPTVN0cmluZyAmdmFsdWUpOwog
ICAgIERPTVN0cmluZyBkZWZhdWx0VmFsdWUoKTsKICAgICB2b2lkIHNldERlZmF1bHRWYWx1ZShj
b25zdCBET01TdHJpbmcgJnZhbHVlKTsKKyAgICAKKyAgICB2b2lkIGludmFsaWRhdGVWYWx1ZSgp
IHsgbV92YWx1ZU1hdGNoZXNSZW5kZXJlciA9IGZhbHNlOyB9CisgICAgdm9pZCByZW5kZXJlcldp
bGxCZURlc3Ryb3llZCgpOwogCi0gICAgdm9pZCBpbnZhbGlkYXRlVmFsdWUoKSB7IG1fdmFsdWVJ
c1ZhbGlkID0gZmFsc2U7IH0KLSAgICB2b2lkIHVwZGF0ZVZhbHVlKCk7Ci0KLSAgICBib29sIHZh
bHVlTWF0Y2hlc1JlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZU1hdGNoZXNSZW5kZXJl
cjsgfQotICAgIHZvaWQgc2V0VmFsdWVNYXRjaGVzUmVuZGVyZXIoKSB7IG1fdmFsdWVNYXRjaGVz
UmVuZGVyZXIgPSB0cnVlOyB9Ci0KICAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0YWJsZSgpOwogICAg
IAogICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kVG9BbnlFbGVtZW50
KTsKQEAgLTEwNCw5ICs5OSwxMSBAQAogICAgIGludCBtX3Jvd3M7CiAgICAgaW50IG1fY29sczsK
ICAgICBXcmFwTWV0aG9kIG1fd3JhcDsKLSAgICBRU3RyaW5nIG1fdmFsdWU7Ci0gICAgYm9vbCBt
X3ZhbHVlSXNWYWxpZDsKKyAgICBTdHJpbmcgbV92YWx1ZTsKICAgICBib29sIG1fdmFsdWVNYXRj
aGVzUmVuZGVyZXI7CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlVmFsdWUoKTsKIH07
CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9IVE1MVGV4dEFyZWFF
bGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9raHRtbC9odG1sL0hUTUxUZXh0
QXJlYUVsZW1lbnRJbXBsLmNwcAkocmV2aXNpb24gMTMwMjkpCisrKyBXZWJDb3JlL2todG1sL2h0
bWwvSFRNTFRleHRBcmVhRWxlbWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0
MCw4IEBACiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBIVE1MVGV4dEFyZWFFbGVtZW50
SW1wbDo6SFRNTFRleHRBcmVhRWxlbWVudEltcGwoRG9jdW1lbnRJbXBsICpkb2MsIEhUTUxGb3Jt
RWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCh0ZXh0YXJl
YVRhZywgZG9jLCBmKSwgbV92YWx1ZUlzVmFsaWQoZmFsc2UpLCBtX3ZhbHVlTWF0Y2hlc1JlbmRl
cmVyKGZhbHNlKQorICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwodGV4dGFyZWFUYWcs
IGRvYywgZikKKyAgICAsIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1ZSkKIHsKICAgICAvLyBE
VEQgcmVxdWlyZXMgcm93cyAmIGNvbHMgYmUgc3BlY2lmaWVkLCBidXQgd2Ugd2lsbCBwcm92aWRl
IHJlYXNvbmFibGUgZGVmYXVsdHMKICAgICBtX3Jvd3MgPSAyOwpAQCAtOTgsNyArOTksNyBAQAog
ICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0QXJlYSAqPihyZW5kZXJlcigpKS0+c2V0U2Vs
ZWN0aW9uRW5kKGVuZCk7CiB9CiAKLXZvaWQgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnNlbGVj
dCggICkKK3ZvaWQgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnNlbGVjdCgpCiB7CiAgICAgaWYg
KHJlbmRlcmVyKCkpCiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRleHRBcmVhKj4ocmVuZGVy
ZXIoKSktPnNlbGVjdCgpOwpAQCAtMTU5LDggKzE2MCwxMiBAQAogCiBib29sIEhUTUxUZXh0QXJl
YUVsZW1lbnRJbXBsOjphcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmIGVuY29kaW5nLCBib29s
KQogewotICAgIGlmIChuYW1lKCkuaXNFbXB0eSgpKSByZXR1cm4gZmFsc2U7Ci0gICAgZW5jb2Rp
bmcuYXBwZW5kRGF0YShuYW1lKCksIHZhbHVlKCkpOworICAgIGlmIChuYW1lKCkuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGJvb2wgaGFyZFdyYXAgPSBy
ZW5kZXJlcigpICYmIHdyYXAoKSA9PSB0YV9QaHlzaWNhbDsKKyAgICBTdHJpbmcgdiA9IGhhcmRX
cmFwID8gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dEFyZWEqPihyZW5kZXJlcigpKS0+dGV4dFdpdGhI
YXJkTGluZUJyZWFrcygpIDogdmFsdWUoKTsKKyAgICBlbmNvZGluZy5hcHBlbmREYXRhKG5hbWUo
KSwgdik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE2OSwzOSArMTc0LDQxIEBACiAgICAg
c2V0VmFsdWUoZGVmYXVsdFZhbHVlKCkpOwogfQogCit2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnRJ
bXBsOjpyZW5kZXJlcldpbGxCZURlc3Ryb3llZCgpCit7CisgICAgdXBkYXRlVmFsdWUoKTsKK30K
Kwogdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6dXBkYXRlVmFsdWUoKQogewotICAgIGlm
ICghbV92YWx1ZUlzVmFsaWQpIHsKLSAgICAgICAgaWYgKHJlbmRlcmVyKCkpIHsKLSAgICAgICAg
ICAgIG1fdmFsdWUgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0QXJlYSo+KHJlbmRlcmVyKCkpLT50
ZXh0KCkucXN0cmluZygpOwotICAgICAgICAgICAgbV92YWx1ZU1hdGNoZXNSZW5kZXJlciA9IHRy
dWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gZGVmYXVsdFZhbHVl
KCkucXN0cmluZygpOwotICAgICAgICAgICAgbV92YWx1ZU1hdGNoZXNSZW5kZXJlciA9IGZhbHNl
OwotICAgICAgICB9Ci0gICAgICAgIG1fdmFsdWVJc1ZhbGlkID0gdHJ1ZTsKKyAgICBpZiAoIW1f
dmFsdWVNYXRjaGVzUmVuZGVyZXIpIHsKKyAgICAgICAgQVNTRVJUKHJlbmRlcmVyKCkpOworICAg
ICAgICBtX3ZhbHVlID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dEFyZWEqPihyZW5kZXJlcigpKS0+
dGV4dCgpOworICAgICAgICBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyID0gdHJ1ZTsKICAgICB9CiB9
CiAKIERPTVN0cmluZyBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6dmFsdWUoKQogewogICAgIHVw
ZGF0ZVZhbHVlKCk7Ci0gICAgcmV0dXJuIG1fdmFsdWUuaXNOdWxsKCkgPyBET01TdHJpbmcoIiIp
IDogbV92YWx1ZTsKKyAgICByZXR1cm4gbV92YWx1ZTsKIH0KIAogdm9pZCBIVE1MVGV4dEFyZWFF
bGVtZW50SW1wbDo6c2V0VmFsdWUoY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkKIHsKLSAgICBtX3Zh
bHVlID0gdmFsdWUucXN0cmluZygpOwotICAgIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIgPSBmYWxz
ZTsKLSAgICBtX3ZhbHVlSXNWYWxpZCA9IHRydWU7CisgICAgUVN0cmluZyBzdHJpbmcgPSB2YWx1
ZS5xc3RyaW5nKCk7CisgICAgLy8gS1dRVGV4dEFyZWEgbm9ybWFsaXplcyBsaW5lIGVuZGluZ3Mg
YWRkZWQgYnkgdGhlIHVzZXIgdmlhIHRoZSBrZXlib2FyZCBvciBwYXN0aW5nLgorICAgIC8vIFdl
IG11c3Qgbm9ybWFsaXplIGxpbmUgZW5kaW5ncyBjb21pbmcgZnJvbSBKUy4KKyAgICBzdHJpbmcu
cmVwbGFjZSgiXHJcbiIsICJcbiIpOworICAgIHN0cmluZy5yZXBsYWNlKCJcciIsICJcbiIpOwor
ICAgIAorICAgIG1fdmFsdWUgPSBTdHJpbmcoc3RyaW5nKTsKKyAgICBtX3ZhbHVlTWF0Y2hlc1Jl
bmRlcmVyID0gdHJ1ZTsKICAgICBpZiAocmVuZGVyZXIoKSkKICAgICAgICAgcmVuZGVyZXIoKS0+
dXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAgICAvLyBGSVhNRTogRm9yY2UgcmVsb2FkIGZyb20gcmVu
ZGVyZXIsIGFzIHJlbmRlcmVyIG1heSBoYXZlIG5vcm1hbGl6ZWQgbGluZSBlbmRpbmdzLgotICAg
IG1fdmFsdWVJc1ZhbGlkID0gZmFsc2U7CiAgICAgc2V0Q2hhbmdlZCh0cnVlKTsKIH0KIAotCiBE
T01TdHJpbmcgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OmRlZmF1bHRWYWx1ZSgpCiB7CiAgICAg
RE9NU3RyaW5nIHZhbCA9ICIiOwpAQCAtMjExLDEzICsyMTgsMTIgQEAKICAgICAgICAgaWYgKG4t
PmlzVGV4dE5vZGUoKSkKICAgICAgICAgICAgIHZhbCArPSBzdGF0aWNfY2FzdDxUZXh0SW1wbCo+
KG4pLT5kYXRhKCk7CiAgICAgCi0gICAgaWYgKHZhbFswXSA9PSAnXHInICYmIHZhbFsxXSA9PSAn
XG4nKSB7Ci0gICAgICAgIHZhbCA9IHZhbC5jb3B5KCk7Ci0gICAgICAgIHZhbC5yZW1vdmUoMCwy
KTsKLSAgICB9IGVsc2UgaWYgKHZhbFswXSA9PSAnXHInIHx8IHZhbFswXSA9PSAnXG4nKSB7Ci0g
ICAgICAgIHZhbCA9IHZhbC5jb3B5KCk7Ci0gICAgICAgIHZhbC5yZW1vdmUoMCwxKTsKLSAgICB9
CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBvbmx5IGRyb3AgdGhlIGZpcnN0IGNhcnJpYWdlIHJl
dHVybiBmb3IgdGhlIGRlZmF1bHQKKyAgICAvLyB2YWx1ZSBpbiB0aGUgb3JpZ2luYWwgc291cmNl
LCBub3QgZGVmYXVsdFZhbHVlcyBzZXQgZnJvbSBKUy4KKyAgICBpZiAodmFsLmxlbmd0aCgpID49
IDIgJiYgdmFsWzBdID09ICdccicgJiYgdmFsWzFdID09ICdcbicpCisgICAgICAgIHZhbC5yZW1v
dmUoMCwgMik7CisgICAgZWxzZSBpZiAodmFsLmxlbmd0aCgpID49IDEgJiYgKHZhbFswXSA9PSAn
XHInIHx8IHZhbFswXSA9PSAnXG4nKSkKKyAgICAgICAgdmFsLnJlbW92ZSgwLCAxKTsKIAogICAg
IHJldHVybiB2YWw7CiB9CkBAIC0yNTAsMTkgKzI1Niw2IEBACiAgICAgZm9jdXMoKTsKIH0KIAot
dm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6YXR0YWNoKCkKLXsKLSAgICBtX3ZhbHVlSXNW
YWxpZCA9IHRydWU7Ci0gICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw6OmF0dGFjaCgpOwot
ICAgIHVwZGF0ZVZhbHVlKCk7Ci19Ci0KLXZvaWQgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OmRl
dGFjaCgpCi17Ci0gICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw6OmRldGFjaCgpOwotICAg
IG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIgPSBmYWxzZTsKLX0KLQogRE9NU3RyaW5nIEhUTUxUZXh0
QXJlYUVsZW1lbnRJbXBsOjphY2Nlc3NLZXkoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRy
aWJ1dGUoYWNjZXNza2V5QXR0cik7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9yZW5kZXJfZm9y
bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmgJKHJldmlz
aW9uIDEzMDI5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uaAkod29ya2luZyBj
b3B5KQpAQCAtMjkxLDcgKzI5MSw4IEBACiAgICAgRE9NOjpIVE1MVGV4dEFyZWFFbGVtZW50SW1w
bCogZWxlbWVudCgpIGNvbnN0CiAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RE9NOjpIVE1MVGV4
dEFyZWFFbGVtZW50SW1wbCo+KFJlbmRlck9iamVjdDo6ZWxlbWVudCgpKTsgfQogCi0gICAgRE9N
OjpET01TdHJpbmcgdGV4dCgpOworICAgIFN0cmluZyB0ZXh0KCk7CisgICAgU3RyaW5nIHRleHRX
aXRoSGFyZExpbmVCcmVha3MoKTsKIAogICAgIGludCBzZWxlY3Rpb25TdGFydCgpOwogICAgIGlu
dCBzZWxlY3Rpb25FbmQoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAJKHJldmlz
aW9uIDEzMDI5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05NzIsNyArOTcyLDcgQEAKIAogdm9pZCBSZW5kZXJUZXh0QXJlYTo6ZGVzdHJv
eSgpCiB7Ci0gICAgZWxlbWVudCgpLT51cGRhdGVWYWx1ZSgpOworICAgIGVsZW1lbnQoKS0+cmVu
ZGVyZXJXaWxsQmVEZXN0cm95ZWQoKTsKICAgICBSZW5kZXJGb3JtRWxlbWVudDo6ZGVzdHJveSgp
OwogfQogCkBAIC0xMDMzLDM4ICsxMDMzLDMzIEBACiAgICAgdy0+c2V0UmVhZE9ubHkoZS0+cmVh
ZE9ubHkoKSk7CiAgICAgdy0+c2V0RGlzYWJsZWQoZS0+ZGlzYWJsZWQoKSk7CiAKLSAgICBlLT51
cGRhdGVWYWx1ZSgpOwotICAgIGlmICghZS0+dmFsdWVNYXRjaGVzUmVuZGVyZXIoKSkgewotICAg
ICAgICBET01TdHJpbmcgd2lkZ2V0VGV4dCA9IHRleHQoKTsKLSAgICAgICAgRE9NU3RyaW5nIHRl
eHQgPSBlLT52YWx1ZSgpOwotICAgICAgICB0ZXh0LnJlcGxhY2UoUUNoYXIoJ1xcJyksIGJhY2tz
bGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7Ci0gICAgICAgIGlmICh3aWRnZXRUZXh0ICE9IHRleHQp
IHsKLSAgICAgICAgICAgIGludCBsaW5lLCBjb2w7Ci0gICAgICAgICAgICB3LT5nZXRDdXJzb3JQ
b3NpdGlvbiggJmxpbmUsICZjb2wgKTsKLSAgICAgICAgICAgIG1fdXBkYXRpbmcgPSB0cnVlOwot
ICAgICAgICAgICAgdy0+c2V0VGV4dCh0ZXh0KTsKLSAgICAgICAgICAgIG1fdXBkYXRpbmcgPSBm
YWxzZTsKLSAgICAgICAgICAgIHctPnNldEN1cnNvclBvc2l0aW9uKCBsaW5lLCBjb2wgKTsKLSAg
ICAgICAgfQotICAgICAgICBlLT5zZXRWYWx1ZU1hdGNoZXNSZW5kZXJlcigpOwotICAgICAgICBt
X2RpcnR5ID0gZmFsc2U7CisgICAgU3RyaW5nIHdpZGdldFRleHQgPSB0ZXh0KCk7CisgICAgU3Ry
aW5nIHRleHQgPSBlLT52YWx1ZSgpOworICAgIHRleHQucmVwbGFjZShRQ2hhcignXFwnKSwgYmFj
a3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKKyAgICBpZiAod2lkZ2V0VGV4dCAhPSB0ZXh0KSB7
CisgICAgICAgIGludCBsaW5lLCBjb2w7CisgICAgICAgIHctPmdldEN1cnNvclBvc2l0aW9uKCAm
bGluZSwgJmNvbCApOworICAgICAgICBtX3VwZGF0aW5nID0gdHJ1ZTsKKyAgICAgICAgdy0+c2V0
VGV4dCh0ZXh0KTsKKyAgICAgICAgbV91cGRhdGluZyA9IGZhbHNlOworICAgICAgICB3LT5zZXRD
dXJzb3JQb3NpdGlvbiggbGluZSwgY29sICk7CiAgICAgfQorICAgIG1fZGlydHkgPSBmYWxzZTsK
IAogICAgIHctPnNldENvbG9ycyhzdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKSwgc3R5bGUoKS0+
Y29sb3IoKSk7CiAKICAgICBSZW5kZXJGb3JtRWxlbWVudDo6dXBkYXRlRnJvbUVsZW1lbnQoKTsK
IH0KIAotRE9NU3RyaW5nIFJlbmRlclRleHRBcmVhOjp0ZXh0KCkKK1N0cmluZyBSZW5kZXJUZXh0
QXJlYTo6dGV4dCgpCiB7Ci0gICAgRE9NU3RyaW5nIHR4dDsKLSAgICBRVGV4dEVkaXQqIHcgPSBz
dGF0aWNfY2FzdDxRVGV4dEVkaXQqPihtX3dpZGdldCk7CisgICAgU3RyaW5nIHR4dCA9IHN0YXRp
Y19jYXN0PFFUZXh0RWRpdCo+KG1fd2lkZ2V0KS0+dGV4dCgpOworICAgIHJldHVybiB0eHQucmVw
bGFjZShiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCksIFFDaGFyKCdcXCcpKTsKK30KIAotICAg
IGlmIChlbGVtZW50KCktPndyYXAoKSA9PSBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6dGFfUGh5
c2ljYWwpCi0gICAgICAgIHR4dCA9IHctPnRleHRXaXRoSGFyZExpbmVCcmVha3MoKTsKLSAgICBl
bHNlCi0gICAgICAgIHR4dCA9IHctPnRleHQoKTsKLQorU3RyaW5nIFJlbmRlclRleHRBcmVhOjp0
ZXh0V2l0aEhhcmRMaW5lQnJlYWtzKCkKK3sKKyAgICBTdHJpbmcgdHh0ID0gc3RhdGljX2Nhc3Q8
UVRleHRFZGl0Kj4obV93aWRnZXQpLT50ZXh0V2l0aEhhcmRMaW5lQnJlYWtzKCk7CiAgICAgcmV0
dXJuIHR4dC5yZXBsYWNlKGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSwgUUNoYXIoJ1xcJykp
OwogfQogCkluZGV4OiBXZWJDb3JlL2t3cS9LV1FUZXh0QXJlYS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUva3dxL0tXUVRleHRBcmVhLmgJKHJldmlzaW9uIDEzMDI5KQorKysgV2ViQ29yZS9rd3Ev
S1dRVGV4dEFyZWEuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogICAgIEJPT0wg
aW5Jbml0V2l0aEZyYW1lOwogICAgIEJPT0wgcmVzaXphYmxlQnlVc2VyOwogICAgIEJPT0wgcmVz
aXphYmxlQnlVc2VyQ29tcHV0ZWQ7CisgICAgQk9PTCBub3JtYWxpemVMaW5lRW5kaW5nczsKIH0K
IAogLSBpbml0V2l0aFFUZXh0RWRpdDooUVRleHRFZGl0ICopdzsKSW5kZXg6IFdlYkNvcmUva3dx
L0tXUVRleHRBcmVhLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3dxL0tXUVRleHRBcmVhLm1t
CShyZXZpc2lvbiAxMzAyOSkKKysrIFdlYkNvcmUva3dxL0tXUVRleHRBcmVhLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTUsNiArMjE1LDE4IEBACiAKIC0gKHZvaWQpdGV4dERpZENoYW5nZTooTlNO
b3RpZmljYXRpb24gKilub3RpZmljYXRpb24KIHsKKyAgICAvLyBUdXJuIFxyXG5zIGludG8gXG5z
IHNvIHRoYXQgYSBsaW5lIGVuZGluZyBpcyBhbHdheXMgYSBzaW5nbGUgY2hhcmFjdGVyLgorICAg
IC8vIFR1cm4gXHJzIGludG8gXG5zIHRvIHNpbXBsaWZ5IGNvZGUgdGhhdCBmaW5kcyBwYXJhZ3Jh
cGggYm91bmRhcmllcy4KKyAgICBpZiAobm9ybWFsaXplTGluZUVuZGluZ3MpIHsKKyAgICAKKyAg
ICAgICAgTlNNdXRhYmxlU3RyaW5nICpzdHJpbmcgPSBbW3RleHRWaWV3IHN0cmluZ10gbXV0YWJs
ZUNvcHldOworICAgICAgICBbc3RyaW5nIHJlcGxhY2VPY2N1cnJlbmNlc09mU3RyaW5nOkAiXHJc
biIgd2l0aFN0cmluZzpAIlxuIiBvcHRpb25zOk5TTGl0ZXJhbFNlYXJjaCByYW5nZTpOU01ha2VS
YW5nZSgwLCBbc3RyaW5nIGxlbmd0aF0pXTsKKyAgICAgICAgW3N0cmluZyByZXBsYWNlT2NjdXJy
ZW5jZXNPZlN0cmluZzpAIlxyIiB3aXRoU3RyaW5nOkAiXG4iIG9wdGlvbnM6TlNMaXRlcmFsU2Vh
cmNoIHJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzdHJpbmcgbGVuZ3RoXSldOworICAgICAgICBbdGV4
dFZpZXcgc2V0U3RyaW5nOnN0cmluZ107CisgICAgICAgIAorICAgICAgICBub3JtYWxpemVMaW5l
RW5kaW5ncyA9IE5POworICAgIH0KKwogICAgIGlmICh3aWRnZXQpCiAgICAgICAgIHdpZGdldC0+
dGV4dENoYW5nZWQoKTsKICAgICAKQEAgLTI0MywyMCArMjU1LDcgQEAKIAogLSAoTlNTdHJpbmcg
Kil0ZXh0CiB7Ci0gICAgTlNTdHJpbmcgKnRleHQgPSBbdGV4dFZpZXcgc3RyaW5nXTsKLSAgICAK
LSAgICBpZiAoW3RleHQgcmFuZ2VPZlN0cmluZzpAIlxyIiBvcHRpb25zOk5TTGl0ZXJhbFNlYXJj
aF0ubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgewotICAgICAgICBOU011dGFibGVTdHJpbmcgKm11
dGFibGVUZXh0ID0gW1t0ZXh0IG11dGFibGVDb3B5XSBhdXRvcmVsZWFzZV07Ci0gICAgCi0gICAg
ICAgIFttdXRhYmxlVGV4dCByZXBsYWNlT2NjdXJyZW5jZXNPZlN0cmluZzpAIlxyXG4iIHdpdGhT
dHJpbmc6QCJcbiIKLSAgICAgICAgICAgIG9wdGlvbnM6TlNMaXRlcmFsU2VhcmNoIHJhbmdlOk5T
TWFrZVJhbmdlKDAsIFttdXRhYmxlVGV4dCBsZW5ndGhdKV07Ci0gICAgICAgIFttdXRhYmxlVGV4
dCByZXBsYWNlT2NjdXJyZW5jZXNPZlN0cmluZzpAIlxyIiB3aXRoU3RyaW5nOkAiXG4iCi0gICAg
ICAgICAgICBvcHRpb25zOk5TTGl0ZXJhbFNlYXJjaCByYW5nZTpOU01ha2VSYW5nZSgwLCBbbXV0
YWJsZVRleHQgbGVuZ3RoXSldOwotICAgICAgICAKLSAgICAgICAgdGV4dCA9IG11dGFibGVUZXh0
OwotICAgIH0KLQotICAgIHJldHVybiB0ZXh0OworICAgIHJldHVybiBbdGV4dFZpZXcgc3RyaW5n
XTsKIH0KIAogLSAoTlNTdHJpbmcgKil0ZXh0V2l0aEhhcmRMaW5lQnJlYWtzCkBAIC0yNzMsMTgg
KzI3MiwxMyBAQAogICAgICAgICBOU1JhbmdlIGxpbmVSYW5nZSA9IFtsYXlvdXRNYW5hZ2VyIGNo
YXJhY3RlclJhbmdlRm9yR2x5cGhSYW5nZTpsaW5lR2x5cGhSYW5nZSBhY3R1YWxHbHlwaFJhbmdl
Ok5VTExdOwogICAgICAgICBpZiAoW3RleHRXaXRoSGFyZExpbmVCcmVha3MgbGVuZ3RoXSkgewog
ICAgICAgICAgICAgdW5pY2hhciBsYXN0Q2hhcmFjdGVyID0gW3RleHRXaXRoSGFyZExpbmVCcmVh
a3MgY2hhcmFjdGVyQXRJbmRleDpbdGV4dFdpdGhIYXJkTGluZUJyZWFrcyBsZW5ndGhdIC0gMV07
Ci0gICAgICAgICAgICBpZiAobGFzdENoYXJhY3RlciAhPSAnXG4nICYmIGxhc3RDaGFyYWN0ZXIg
IT0gJ1xyJykgeworICAgICAgICAgICAgaWYgKGxhc3RDaGFyYWN0ZXIgIT0gJ1xuJykgewogICAg
ICAgICAgICAgICAgIFt0ZXh0V2l0aEhhcmRMaW5lQnJlYWtzIGFwcGVuZFN0cmluZzpAIlxuIl07
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgW3RleHRXaXRoSGFyZExpbmVCcmVh
a3MgYXBwZW5kU3RyaW5nOlt0ZXh0IHN1YnN0cmluZ1dpdGhSYW5nZTpsaW5lUmFuZ2VdXTsKICAg
ICB9CiAKLSAgICBbdGV4dFdpdGhIYXJkTGluZUJyZWFrcyByZXBsYWNlT2NjdXJyZW5jZXNPZlN0
cmluZzpAIlxyXG4iIHdpdGhTdHJpbmc6QCJcbiIKLSAgICAgICAgb3B0aW9uczpOU0xpdGVyYWxT
ZWFyY2ggcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3RleHRXaXRoSGFyZExpbmVCcmVha3MgbGVuZ3Ro
XSldOwotICAgIFt0ZXh0V2l0aEhhcmRMaW5lQnJlYWtzIHJlcGxhY2VPY2N1cnJlbmNlc09mU3Ry
aW5nOkAiXHIiIHdpdGhTdHJpbmc6QCJcbiIKLSAgICAgICAgb3B0aW9uczpOU0xpdGVyYWxTZWFy
Y2ggcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3RleHRXaXRoSGFyZExpbmVCcmVha3MgbGVuZ3RoXSld
OwotCiAgICAgcmV0dXJuIHRleHRXaXRoSGFyZExpbmVCcmVha3M7CiB9CiAKQEAgLTI5NSw2MiAr
Mjg5LDEyIEBACiAKIC0gKHZvaWQpc2V0U2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlhUmFuZ2UKIHsK
LSAgICBOU1N0cmluZyAqdGV4dCA9IFt0ZXh0VmlldyBzdHJpbmddOwotICAgIC8vIE9rLCB0aGUg
c2VsZWN0aW9uIGhhcyB0byBtYXRjaCB1cCB3aXRoIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgLXRl
eHQKLSAgICAvLyBhbmQgc2luY2UgLXRleHQgdHJhbnNsYXRlcyBcclxuIHRvIFxuLCB3ZSBoYXZl
IHRvIG1vZGlmeSBvdXIgc2VsZWN0aW9uCi0gICAgLy8gaWYgYSBcclxuIHNlcXVlbmNlIGlzIGFu
eXdoZXJlIGluIG9yIGJlZm9yZSB0aGUgc2VsZWN0aW9uCi0gICAgdW5zaWduZWQgY291bnQgPSAw
OwotICAgIE5TUmFuZ2UgZm91bmRSYW5nZSwgc2VhcmNoUmFuZ2UgPSBOU01ha2VSYW5nZSgwLCBh
UmFuZ2UubG9jYXRpb24pOwotICAgIHdoaWxlIChmb3VuZFJhbmdlID0gW3RleHQgcmFuZ2VPZlN0
cmluZzpAIlxyXG4iIG9wdGlvbnM6TlNMaXRlcmFsU2VhcmNoIHJhbmdlOnNlYXJjaFJhbmdlXSwK
LSAgICAgICAgICAgZm91bmRSYW5nZS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKSB7Ci0gICAgICAg
IGNvdW50Kys7Ci0gICAgICAgIHNlYXJjaFJhbmdlLmxvY2F0aW9uID0gTlNNYXhSYW5nZShmb3Vu
ZFJhbmdlKTsKLSAgICAgICAgaWYgKHNlYXJjaFJhbmdlLmxvY2F0aW9uID49IGFSYW5nZS5sb2Nh
dGlvbikgYnJlYWs7Ci0gICAgICAgIHNlYXJjaFJhbmdlLmxlbmd0aCA9IGFSYW5nZS5sb2NhdGlv
biAtIHNlYXJjaFJhbmdlLmxvY2F0aW9uOwotICAgIH0KLSAgICBhUmFuZ2UubG9jYXRpb24gKz0g
Y291bnQ7Ci0gICAgY291bnQgPSAwOwotICAgIHNlYXJjaFJhbmdlID0gTlNNYWtlUmFuZ2UoYVJh
bmdlLmxvY2F0aW9uLCBhUmFuZ2UubGVuZ3RoKTsKLSAgICB3aGlsZSAoZm91bmRSYW5nZSA9IFt0
ZXh0IHJhbmdlT2ZTdHJpbmc6QCJcclxuIiBvcHRpb25zOk5TTGl0ZXJhbFNlYXJjaCByYW5nZTpz
ZWFyY2hSYW5nZV0sCi0gICAgICAgICAgIGZvdW5kUmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3Vu
ZCkgewotICAgICAgICBjb3VudCsrOwotICAgICAgICBzZWFyY2hSYW5nZS5sb2NhdGlvbiA9IE5T
TWF4UmFuZ2UoZm91bmRSYW5nZSk7Ci0gICAgICAgIGlmIChzZWFyY2hSYW5nZS5sb2NhdGlvbiA+
PSBOU01heFJhbmdlKGFSYW5nZSkpIGJyZWFrOwotICAgICAgICBzZWFyY2hSYW5nZS5sZW5ndGgg
PSBOU01heFJhbmdlKGFSYW5nZSkgLSBzZWFyY2hSYW5nZS5sb2NhdGlvbjsKLSAgICB9Ci0gICAg
YVJhbmdlLmxlbmd0aCArPSBjb3VudDsKICAgICBbdGV4dFZpZXcgc2V0U2VsZWN0ZWRSYW5nZTph
UmFuZ2VdOwogfQogCiAtIChOU1JhbmdlKXNlbGVjdGVkUmFuZ2UKIHsKLSAgICBOU1JhbmdlIGFS
YW5nZSA9IFt0ZXh0VmlldyBzZWxlY3RlZFJhbmdlXTsKLSAgICBpZiAoYVJhbmdlLmxvY2F0aW9u
ID09IE5TTm90Rm91bmQpIHsKLSAgICAgICAgcmV0dXJuIGFSYW5nZTsKLSAgICB9Ci0gICAgLy8g
U2FtZSBpc3N1ZSBhcyB3aXRoIC1zZXRTZWxlY3RlZFJhbmdlOiByZWdhcmRpbmcgXHJcbiBzZXF1
ZW5jZXMKLSAgICB1bnNpZ25lZCBjb3VudCA9IDA7Ci0gICAgTlNSYW5nZSBmb3VuZFJhbmdlLCBz
ZWFyY2hSYW5nZSA9IE5TTWFrZVJhbmdlKDAsIGFSYW5nZS5sb2NhdGlvbik7Ci0gICAgTlNTdHJp
bmcgKnRleHQgPSBbdGV4dFZpZXcgc3RyaW5nXTsKLSAgICB3aGlsZSAoZm91bmRSYW5nZSA9IFt0
ZXh0IHJhbmdlT2ZTdHJpbmc6QCJcclxuIiBvcHRpb25zOk5TTGl0ZXJhbFNlYXJjaCByYW5nZTpz
ZWFyY2hSYW5nZV0sCi0gICAgICAgICAgIGZvdW5kUmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3Vu
ZCkgewotICAgICAgICBjb3VudCsrOwotICAgICAgICBzZWFyY2hSYW5nZS5sb2NhdGlvbiA9IE5T
TWF4UmFuZ2UoZm91bmRSYW5nZSk7Ci0gICAgICAgIGlmIChzZWFyY2hSYW5nZS5sb2NhdGlvbiA+
PSBhUmFuZ2UubG9jYXRpb24pIGJyZWFrOwotICAgICAgICBzZWFyY2hSYW5nZS5sZW5ndGggPSBh
UmFuZ2UubG9jYXRpb24gLSBzZWFyY2hSYW5nZS5sb2NhdGlvbjsKLSAgICB9Ci0gICAgYVJhbmdl
LmxvY2F0aW9uIC09IGNvdW50OwotICAgIGNvdW50ID0gMDsKLSAgICBzZWFyY2hSYW5nZSA9IE5T
TWFrZVJhbmdlKGFSYW5nZS5sb2NhdGlvbiwgYVJhbmdlLmxlbmd0aCk7Ci0gICAgd2hpbGUgKGZv
dW5kUmFuZ2UgPSBbdGV4dCByYW5nZU9mU3RyaW5nOkAiXHJcbiIgb3B0aW9uczpOU0xpdGVyYWxT
ZWFyY2ggcmFuZ2U6c2VhcmNoUmFuZ2VdLAotICAgICAgICAgICBmb3VuZFJhbmdlLmxvY2F0aW9u
ICE9IE5TTm90Rm91bmQpIHsKLSAgICAgICAgY291bnQrKzsKLSAgICAgICAgc2VhcmNoUmFuZ2Uu
bG9jYXRpb24gPSBOU01heFJhbmdlKGZvdW5kUmFuZ2UpOwotICAgICAgICBpZiAoc2VhcmNoUmFu
Z2UubG9jYXRpb24gPj0gTlNNYXhSYW5nZShhUmFuZ2UpKSBicmVhazsKLSAgICAgICAgc2VhcmNo
UmFuZ2UubGVuZ3RoID0gTlNNYXhSYW5nZShhUmFuZ2UpIC0gc2VhcmNoUmFuZ2UubG9jYXRpb247
Ci0gICAgfQotICAgIGFSYW5nZS5sZW5ndGggLT0gY291bnQ7Ci0gICAgcmV0dXJuIGFSYW5nZTsK
KyAgICByZXR1cm4gW3RleHRWaWV3IHNlbGVjdGVkUmFuZ2VdOwogfQogCiAtIChCT09MKWhhc1Nl
bGVjdGlvbgpAQCAtNDYwLDcgKzQwNCw3IEBACiAgICAgCiAgICAgTlNTY2FubmVyICpzY2FubmVy
ID0gW05TU2Nhbm5lciBzY2FubmVyV2l0aFN0cmluZzp0ZXh0XTsKICAgICBbc2Nhbm5lciBzZXRD
aGFyYWN0ZXJzVG9CZVNraXBwZWQ6bmlsXTsKLSAgICBOU0NoYXJhY3RlclNldCAqbmV3bGluZVNl
dCA9IFtOU0NoYXJhY3RlclNldCBjaGFyYWN0ZXJTZXRXaXRoQ2hhcmFjdGVyc0luU3RyaW5nOkAi
XHJcbiJdOworICAgIE5TQ2hhcmFjdGVyU2V0ICpuZXdsaW5lU2V0ID0gW05TQ2hhcmFjdGVyU2V0
IGNoYXJhY3RlclNldFdpdGhDaGFyYWN0ZXJzSW5TdHJpbmc6QCJcbiJdOwogCiAgICAgd2hpbGUg
KHRydWUpIHsKICAgICAgICAgW3NjYW5uZXIgc2NhblVwVG9DaGFyYWN0ZXJzRnJvbVNldDpuZXds
aW5lU2V0IGludG9TdHJpbmc6TlVMTF07CkBAIC00NzEsMTEgKzQxNSw3IEBACiAgICAgICAgIAog
ICAgICAgICBwYXJhZ3JhcGhTb0ZhcisrOwogICAgICAgICAKLSAgICAgICAgdW5pY2hhciBjID0g
W3RleHQgY2hhcmFjdGVyQXRJbmRleDpbc2Nhbm5lciBzY2FuTG9jYXRpb25dXTsKICAgICAgICAg
W3NjYW5uZXIgc2V0U2NhbkxvY2F0aW9uOltzY2FubmVyIHNjYW5Mb2NhdGlvbl0rMV07IC8vIHNr
aXAgb3ZlciB0aGUgZm91bmQgY2hhcgotICAgICAgICBpZiAoYyA9PSAnXHInKSB7Ci0gICAgICAg
ICAgICBbc2Nhbm5lciBzY2FuU3RyaW5nOkAiXG4iIGludG9TdHJpbmc6TlVMTF07IC8vIGdldCB0
aGUgZW50aXJlIGNybGYgaWYgaXQgaXMgb25lCi0gICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IHBhcmFncmFwaFN0YXJ0ID0gW3NjYW5uZXIgc2NhbkxvY2F0aW9uXTsKICAgICB9CkBAIC00OTQs
NyArNDM0LDcgQEAKICAgICAKICAgICBOU1NjYW5uZXIgKnNjYW5uZXIgPSBbTlNTY2FubmVyIHNj
YW5uZXJXaXRoU3RyaW5nOnRleHRdOwogICAgIFtzY2FubmVyIHNldENoYXJhY3RlcnNUb0JlU2tp
cHBlZDpuaWxdOwotICAgIE5TQ2hhcmFjdGVyU2V0ICpuZXdsaW5lU2V0ID0gW05TQ2hhcmFjdGVy
U2V0IGNoYXJhY3RlclNldFdpdGhDaGFyYWN0ZXJzSW5TdHJpbmc6QCJcclxuIl07CisgICAgTlND
aGFyYWN0ZXJTZXQgKm5ld2xpbmVTZXQgPSBbTlNDaGFyYWN0ZXJTZXQgY2hhcmFjdGVyU2V0V2l0
aENoYXJhY3RlcnNJblN0cmluZzpAIlxuIl07CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAg
ICBbc2Nhbm5lciBzY2FuVXBUb0NoYXJhY3RlcnNGcm9tU2V0Om5ld2xpbmVTZXQgaW50b1N0cmlu
ZzpOVUxMXTsKQEAgLTUwNSwxMSArNDQ1LDcgQEAKICAgICAgICAgCiAgICAgICAgIHBhcmFncmFw
aFNvRmFyKys7CiAgICAgICAgIAotICAgICAgICB1bmljaGFyIGMgPSBbdGV4dCBjaGFyYWN0ZXJB
dEluZGV4OltzY2FubmVyIHNjYW5Mb2NhdGlvbl1dOwogICAgICAgICBbc2Nhbm5lciBzZXRTY2Fu
TG9jYXRpb246W3NjYW5uZXIgc2NhbkxvY2F0aW9uXSsxXTsgLy8gc2tpcCBvdmVyIHRoZSBmb3Vu
ZCBjaGFyCi0gICAgICAgIGlmIChjID09ICdccicpIHsKLSAgICAgICAgICAgIFtzY2FubmVyIHNj
YW5TdHJpbmc6QCJcbiIgaW50b1N0cmluZzpOVUxMXTsgLy8gZ2V0IHRoZSBlbnRpcmUgY3JsZiBp
ZiBpdCBpcyBvbmUKLSAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcGFyYWdyYXBoU3RhcnQg
PSBbc2Nhbm5lciBzY2FuTG9jYXRpb25dOwogICAgIH0KQEAgLTg1NSw2ICs3OTEsMTQgQEAKICAg
ICByZXR1cm4gTk87CiB9CiAKKy0gKEJPT0wpdGV4dFZpZXc6KE5TVGV4dFZpZXcgKilhVGV4dFZp
ZXcgc2hvdWxkQ2hhbmdlVGV4dEluUmFuZ2U6KE5TUmFuZ2UpYWZmZWN0ZWRDaGFyUmFuZ2UgcmVw
bGFjZW1lbnRTdHJpbmc6KE5TU3RyaW5nICopcmVwbGFjZW1lbnRTdHJpbmcKK3sKKyAgICBpZiAo
W3JlcGxhY2VtZW50U3RyaW5nIHJhbmdlT2ZDaGFyYWN0ZXJGcm9tU2V0OltOU0NoYXJhY3RlclNl
dCBjaGFyYWN0ZXJTZXRXaXRoQ2hhcmFjdGVyc0luU3RyaW5nOkAiXHIiXV0ubG9jYXRpb24gIT0g
TlNOb3RGb3VuZCkKKyAgICAgICAgbm9ybWFsaXplTGluZUVuZGluZ3MgPSBZRVM7CisgICAgCisg
ICAgcmV0dXJuIFlFUzsKK30KKwogLSAoTlNTaXplKXNpemVXaXRoQ29sdW1uczooaW50KW51bUNv
bHVtbnMgcm93czooaW50KW51bVJvd3MKIHsKICAgICAvLyBNdXN0IHVzZSBmb250IGZyb20gX2Zv
bnQgZmllbGQgcmF0aGVyIHRoYW4gZnJvbSB0aGUgdGV4dCB2aWV3J3MgZm9udCBtZXRob2QsCg==
</data>
<flag name="review"
          id="1726"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>